├── .github └── workflows │ ├── build.yml │ └── publish.yml ├── .gitignore ├── .npmignore ├── .prettierrc ├── LICENSE ├── README.md ├── package.json ├── src ├── index.ts ├── schema-builder.ts ├── schema-comparator.ts └── types.ts ├── tests ├── __snapshots__ │ └── schema-builder.spec.ts.snap ├── fixtures │ ├── complex-schema1.ts │ ├── complex-schema2.ts │ └── index.ts ├── schema-builder.spec.ts ├── schema-comparator.spec.ts └── test-utils.ts ├── tsconfig.json └── yarn.lock /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | on: [push] 3 | 4 | jobs: 5 | build: 6 | name: Build 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/checkout@v2 10 | 11 | - name: install 12 | run: yarn 13 | 14 | - name: build 15 | run: yarn run build 16 | 17 | - name: test 18 | run: yarn test -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish to NPM 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | semanticVersion: 7 | description: 'Semantic Version [major|minor|patch]' 8 | required: true 9 | default: 'patch' 10 | 11 | jobs: 12 | Publish: 13 | name: Publish 14 | runs-on: ubuntu-latest 15 | if: github.ref == 'refs/heads/master' 16 | steps: 17 | - name: checkout 18 | uses: actions/checkout@v2 19 | with: 20 | token: ${{ secrets.ADMIN_TOKEN }} 21 | ref: 'master' 22 | 23 | - uses: actions/setup-node@v1 24 | with: 25 | node-version: 12 26 | registry-url: https://registry.npmjs.org/ 27 | 28 | - name: Install node modules 29 | run: yarn install 30 | 31 | - name: Build 32 | run: yarn build 33 | 34 | - name: Test 35 | run: yarn test 36 | 37 | - name: Configure CI Git User 38 | run: | 39 | git config --global user.name '@aspecto-system' 40 | git config --global user.email 'aspecto-system@users.noreply.github.com' 41 | 42 | - name: Update yarn commit message 43 | run: yarn config set version-git-message "chore(release) - publish v%s" 44 | 45 | - name: Bump Version 46 | run: yarn version --${{ github.event.inputs.semanticVersion }} --no-commit-hooks 47 | 48 | - name: Publish to NPM 49 | run: npm publish 50 | env: 51 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 52 | 53 | - name: Push Version Update 54 | run: git push 55 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | .DS_Store 4 | .idea 5 | .vscode 6 | yarn-error.log 7 | .editorconfig 8 | coverage 9 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | /.idea 2 | /.vscode 3 | /node_modules 4 | /.github 5 | /scripts 6 | .prettierrc 7 | src 8 | tsconfig.json 9 | .npmignore 10 | tests 11 | .editorconfig 12 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | trailingComma: "es5" 2 | semi: true 3 | printWidth: 120 4 | tabWidth: 4 5 | singleQuote: true 6 | arrowParens: "always" 7 | jsxSingleQuote: true 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # genson-js 2 | ![Build](https://github.com/aspecto-io/genson-js/workflows/Build/badge.svg) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) [![TypeScript](https://badgen.net/npm/types/env-var)](http://www.typescriptlang.org/) [![NPM version](https://img.shields.io/npm/v/genson-js.svg)](https://www.npmjs.com/package/genson-js) 3 | 4 | 5 | **genson-js** is a user-friendly **JSON Schema** generator built in TypeScript/JavaScript. 6 | 7 | > This is _not_ the JavaScript equivalent of the **Java Genson library**. 8 | > The motivation for this library was to port [GenSON](https://github.com/cequencer/GenSON) python library to JS, however having exactly the same api or possiblities was not a goal. 9 | 10 | genson-js's core function is to take JSON objects and generate schemas that describe them, with an ability to **merge** schemas. 11 | 12 | ## Usage 13 | 14 | ### Creating schemas 15 | 16 | To infer a schema from existing object: 17 | 18 | ```ts 19 | import { createSchema } from 'genson-js'; 20 | 21 | const schema = createSchema({ 22 | userName: 'smith', 23 | languages: ['c++', 'java'], 24 | age: 40, 25 | }); 26 | ``` 27 | 28 | The following schema will be created: 29 | 30 | ```js 31 | { 32 | type: "object", 33 | properties: { 34 | userName: { 35 | type: "string", 36 | }, 37 | languages: { 38 | type: "array", 39 | items: { 40 | type: "string", 41 | }, 42 | }, 43 | age: { 44 | type: "integer", 45 | }, 46 | }, 47 | required: ["userName", "languages", "age"], 48 | }; 49 | ``` 50 | 51 | ### Merging schemas 52 | 53 | You can merge 2 or more schemas, so that merged schema would be kind of a superset of the schemas that it was built from: 54 | 55 | ```ts 56 | import { mergeSchemas } from 'genson-js'; 57 | 58 | const merged = mergeSchemas([{ type: ValueType.Number }, { type: ValueType.String }]); 59 | 60 | // will create merged schema like this: 61 | // { type: ['number', 'string'] } 62 | ``` 63 | 64 | ### Create compound schema 65 | 66 | Shorthand for createSchema + mergeSchemas. 67 | Can take multiple inputs and create one compound schema: 68 | 69 | ```ts 70 | import { createCompoundSchema } from 'genson-js'; 71 | 72 | const schema = createCompoundSchema([{ age: 19, name: 'John' }, { age: 23, admin: true }, { age: 35 }]); 73 | 74 | // Will create the following schema: 75 | // { 76 | // type: 'object', 77 | // properties: { admin: { type: 'boolean' }, age: { type: 'integer' }, name: { type: 'string' } }, 78 | // required: ['age'] 79 | // } 80 | ``` 81 | 82 | ### Extending schemas 83 | 84 | You can extend existing schema to match some value: 85 | 86 | ```ts 87 | import { extendSchema } from 'genson-js'; 88 | 89 | const extended = extendSchema({ type: ValueType.Number }, 'some string'); 90 | 91 | // will create extended schema like this: 92 | // { type: ['number', 'string'] } 93 | ``` 94 | 95 | ### Comparing schemas 96 | 97 | You can compare 2 schemas for equality like this: 98 | 99 | ```ts 100 | import { areSchemasEqual } from 'genson-js'; 101 | 102 | areSchemasEqual({ type: ValueType.Number }, { type: ValueType.Number }); 103 | // will return true 104 | ``` 105 | 106 | ### Subset 107 | 108 | You can also check if one schema is a subset of another one like so: 109 | 110 | ```ts 111 | import { isSubset } from 'genson-js'; 112 | 113 | isSubset( 114 | { type: ValueType.Array, items: { type: [ValueType.Boolean, ValueType.Integer] } }, 115 | { type: ValueType.Array, items: { type: [ValueType.Boolean] } } 116 | ); 117 | // will return true 118 | ``` 119 |
120 | You can find more examples in the unit tests. 121 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "genson-js", 3 | "version": "0.0.8", 4 | "main": "dist/index.js", 5 | "types": "dist/index.d.js", 6 | "author": "Aspecto.io", 7 | "license": "Apache-2.0", 8 | "keywords": [ 9 | "json", 10 | "schema", 11 | "json-schema", 12 | "jsonschema", 13 | "object", 14 | "generate", 15 | "generator", 16 | "builder", 17 | "merge" 18 | ], 19 | "description": "JSON schema generator with a possibility to merge schemas", 20 | "scripts": { 21 | "test": "jest", 22 | "tdd": "jest --watch", 23 | "build": "tsc", 24 | "prepublishOnly": "npm run build" 25 | }, 26 | "devDependencies": { 27 | "@types/jest": "^27.5.1", 28 | "@types/node": "^14.6.0", 29 | "jest": "^27.5.1", 30 | "ts-jest": "^27.1.5", 31 | "typescript": "^4.0.2" 32 | }, 33 | "repository": { 34 | "type": "git", 35 | "url": "git+ssh://git@github.com/aspecto-io/genson-js.git" 36 | }, 37 | "files": [ 38 | "dist/**/*.js", 39 | "dist/**/*.d.ts", 40 | "LICENSE", 41 | "README.md" 42 | ], 43 | "jest": { 44 | "testEnvironment": "node", 45 | "preset": "ts-jest", 46 | "testMatch": [ 47 | "**/tests/**/*.spec.+(ts|tsx|js)" 48 | ], 49 | "moduleFileExtensions": [ 50 | "ts", 51 | "js" 52 | ], 53 | "transform": { 54 | "^.+\\.(ts)$": "ts-jest" 55 | }, 56 | "globals": { 57 | "ts-jest": { 58 | "diagnostics": false 59 | } 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './types'; 2 | export { extendSchema, mergeSchemas, createSchema, createCompoundSchema } from './schema-builder'; 3 | export * from './schema-comparator'; 4 | -------------------------------------------------------------------------------- /src/schema-builder.ts: -------------------------------------------------------------------------------- 1 | import { ValueType, Schema, SchemaGenOptions } from './types'; 2 | 3 | function createSchemaFor(value: any, options?: SchemaGenOptions): Schema { 4 | switch (typeof value) { 5 | case 'number': 6 | if (Number.isInteger(value)) { 7 | return { type: ValueType.Integer }; 8 | } 9 | return { type: ValueType.Number }; 10 | case 'boolean': 11 | return { type: ValueType.Boolean }; 12 | case 'string': 13 | return { type: ValueType.String }; 14 | case 'object': 15 | if (value === null) { 16 | return { type: ValueType.Null }; 17 | } 18 | if (Array.isArray(value)) { 19 | return createSchemaForArray(value, options); 20 | } 21 | return createSchemaForObject(value, options); 22 | } 23 | } 24 | 25 | function createSchemaForArray(arr: Array, options?: SchemaGenOptions): Schema { 26 | if (arr.length === 0) { 27 | return { type: ValueType.Array }; 28 | } 29 | const elementSchemas = arr.map((value) => createSchemaFor(value, options)); 30 | const items = combineSchemas(elementSchemas); 31 | return { type: ValueType.Array, items }; 32 | } 33 | 34 | function createSchemaForObject(obj: Object, options?: SchemaGenOptions): Schema { 35 | const keys = Object.keys(obj); 36 | if (keys.length === 0) { 37 | return { 38 | type: ValueType.Object, 39 | }; 40 | } 41 | const properties = Object.entries(obj).reduce((props, [key, val]) => { 42 | props[key] = createSchemaFor(val, options); 43 | return props; 44 | }, {}); 45 | 46 | const schema: Schema = { type: ValueType.Object, properties }; 47 | if (!options?.noRequired) { 48 | schema.required = keys; 49 | } 50 | return schema; 51 | } 52 | 53 | function combineSchemas(schemas: Schema[], options?: SchemaGenOptions): Schema { 54 | const schemasByType: Record = { 55 | [ValueType.Null]: [], 56 | [ValueType.Boolean]: [], 57 | [ValueType.Integer]: [], 58 | [ValueType.Number]: [], 59 | [ValueType.String]: [], 60 | [ValueType.Array]: [], 61 | [ValueType.Object]: [], 62 | }; 63 | 64 | const unwrappedSchemas = unwrapSchemas(schemas); 65 | for (const unwrappedSchema of unwrappedSchemas) { 66 | const type = unwrappedSchema.type as ValueType; 67 | if (schemasByType[type].length === 0 || isContainerSchema(unwrappedSchema)) { 68 | schemasByType[type].push(unwrappedSchema); 69 | } else { 70 | continue; 71 | } 72 | } 73 | 74 | const resultSchemasByType: Record = { 75 | [ValueType.Null]: schemasByType[ValueType.Null][0], 76 | [ValueType.Boolean]: schemasByType[ValueType.Boolean][0], 77 | [ValueType.Number]: schemasByType[ValueType.Number][0], 78 | [ValueType.Integer]: schemasByType[ValueType.Integer][0], 79 | [ValueType.String]: schemasByType[ValueType.String][0], 80 | [ValueType.Array]: combineArraySchemas(schemasByType[ValueType.Array]), 81 | [ValueType.Object]: combineObjectSchemas(schemasByType[ValueType.Object], options), 82 | }; 83 | 84 | if (resultSchemasByType[ValueType.Number]) { 85 | // if at least one value is float, others can be floats too 86 | delete resultSchemasByType[ValueType.Integer]; 87 | } 88 | 89 | const schemasFound = Object.values(resultSchemasByType).filter(Boolean); 90 | const multiType = schemasFound.length > 1; 91 | if (multiType) { 92 | const wrapped = wrapAnyOfSchema({ anyOf: schemasFound }); 93 | return wrapped; 94 | } 95 | return schemasFound[0] as Schema; 96 | } 97 | 98 | function combineArraySchemas(schemas: Schema[]): Schema { 99 | if (!schemas || schemas.length === 0) { 100 | return undefined; 101 | } 102 | const itemSchemas: Schema[] = []; 103 | for (const schema of schemas) { 104 | if (!schema.items) continue; 105 | const unwrappedSchemas = unwrapSchema(schema.items); 106 | itemSchemas.push(...unwrappedSchemas); 107 | } 108 | 109 | if (itemSchemas.length === 0) { 110 | return { 111 | type: ValueType.Array, 112 | }; 113 | } 114 | const items = combineSchemas(itemSchemas); 115 | return { 116 | type: ValueType.Array, 117 | items, 118 | }; 119 | } 120 | 121 | function combineObjectSchemas(schemas: Schema[], options?: SchemaGenOptions): Schema { 122 | if (!schemas || schemas.length === 0) { 123 | return undefined; 124 | } 125 | const allPropSchemas = schemas.map((s) => s.properties).filter(Boolean); 126 | const schemasByProp: Record = Object.create(null); 127 | // const schemasByProp: Record = {}; 128 | for (const propSchemas of allPropSchemas) { 129 | for (const [prop, schema] of Object.entries(propSchemas)) { 130 | if (!schemasByProp[prop]) { 131 | schemasByProp[prop] = []; 132 | } 133 | const unwrappedSchemas = unwrapSchema(schema); 134 | schemasByProp[prop].push(...unwrappedSchemas); 135 | } 136 | } 137 | 138 | const properties: Record = Object.entries(schemasByProp).reduce((props, [prop, schemas]) => { 139 | if (schemas.length === 1) { 140 | props[prop] = schemas[0]; 141 | } else { 142 | props[prop] = combineSchemas(schemas); 143 | } 144 | return props; 145 | }, {}); 146 | 147 | const combinedSchema: Schema = { type: ValueType.Object }; 148 | 149 | if (Object.keys(properties).length > 0) { 150 | combinedSchema.properties = properties; 151 | } 152 | if (!options?.noRequired) { 153 | const required = intersection(schemas.map((s) => s.required || [])); 154 | if (required.length > 0) { 155 | combinedSchema.required = required; 156 | } 157 | } 158 | 159 | return combinedSchema; 160 | } 161 | 162 | export function unwrapSchema(schema: Schema): Schema[] { 163 | if (!schema) return []; 164 | if (schema.anyOf) { 165 | return unwrapSchemas(schema.anyOf); 166 | } 167 | if (Array.isArray(schema.type)) { 168 | return schema.type.map((x) => ({ type: x })); 169 | } 170 | return [schema]; 171 | } 172 | 173 | export function unwrapSchemas(schemas: Schema[]): Schema[] { 174 | if (!schemas || schemas.length === 0) return []; 175 | const unwrappedSchemas = schemas.flatMap((schema) => unwrapSchema(schema)); 176 | return unwrappedSchemas; 177 | } 178 | 179 | export function wrapAnyOfSchema(schema: Schema): Schema { 180 | const simpleSchemas = []; 181 | const complexSchemas = []; 182 | for (const subSchema of schema.anyOf) { 183 | if (Array.isArray(subSchema.type)) { 184 | simpleSchemas.push(...subSchema.type); 185 | } else if (isSimpleSchema(subSchema)) { 186 | simpleSchemas.push((subSchema as Schema).type); 187 | } else { 188 | complexSchemas.push(subSchema); 189 | } 190 | } 191 | if (complexSchemas.length === 0) { 192 | return { type: simpleSchemas }; 193 | } 194 | const anyOf = []; 195 | if (simpleSchemas.length > 0) { 196 | anyOf.push({ type: simpleSchemas.length > 1 ? simpleSchemas : simpleSchemas[0] }); 197 | } 198 | anyOf.push(...complexSchemas); 199 | return { anyOf }; 200 | } 201 | 202 | function intersection(valuesArr: string[][]) { 203 | if (valuesArr.length === 0) return []; 204 | const arrays = valuesArr.filter(Array.isArray); 205 | const counter: Record = {}; 206 | for (const arr of arrays) { 207 | for (const val of arr) { 208 | if (!counter[val]) { 209 | counter[val] = 1; 210 | } else { 211 | counter[val]++; 212 | } 213 | } 214 | } 215 | const result = Object.entries(counter) 216 | .filter(([_, value]) => value === arrays.length) 217 | .map(([key]) => key); 218 | return result; 219 | } 220 | 221 | function isSimpleSchema(schema: Schema): boolean { 222 | const keys = Object.keys(schema); 223 | return keys.length === 1 && keys[0] === 'type'; 224 | } 225 | 226 | function isContainerSchema(schema: Schema): boolean { 227 | const type = (schema as Schema).type; 228 | return type === ValueType.Array || type === ValueType.Object; 229 | } 230 | 231 | // FACADE 232 | 233 | export function createSchema(value: any, options?: SchemaGenOptions): Schema { 234 | if (typeof value === 'undefined') value = null; 235 | const clone = JSON.parse(JSON.stringify(value)); 236 | return createSchemaFor(clone, options); 237 | } 238 | 239 | export function mergeSchemas(schemas: Schema[], options?: SchemaGenOptions): Schema { 240 | const mergedSchema = combineSchemas(schemas, options); 241 | return mergedSchema; 242 | } 243 | 244 | export function extendSchema(schema: Schema, value: any, options?: SchemaGenOptions): Schema { 245 | const valueSchema = createSchema(value, options); 246 | const mergedSchema = combineSchemas([schema, valueSchema], options); 247 | return mergedSchema; 248 | } 249 | 250 | export function createCompoundSchema(values: any[], options?: SchemaGenOptions): Schema { 251 | const schemas = values.map((value) => createSchema(value, options)); 252 | return mergeSchemas(schemas, options); 253 | } 254 | -------------------------------------------------------------------------------- /src/schema-comparator.ts: -------------------------------------------------------------------------------- 1 | import { mergeSchemas, unwrapSchema } from './schema-builder'; 2 | import { Schema, SchemaComparisonOptions } from './types'; 3 | 4 | export function areSchemasEqual(schema1: Schema, schema2: Schema, options?: SchemaComparisonOptions): boolean { 5 | if (schema1 === undefined && schema2 === undefined) return true; 6 | if (schema1 === undefined || schema2 === undefined) return false; 7 | 8 | const anyOf1 = unwrapSchema(schema1); 9 | const anyOf2 = unwrapSchema(schema2); 10 | 11 | if (anyOf1.length != anyOf2.length) return false; 12 | if (anyOf1.length === 0) return true; 13 | 14 | const typeComparator = (s1: Schema, s2: Schema) => s1.type.toLocaleString().localeCompare(s2.type.toLocaleString()); 15 | const sorted1 = [...anyOf1].sort(typeComparator); 16 | const sorted2 = [...anyOf2].sort(typeComparator); 17 | 18 | for (let i = 0; i < anyOf1.length; i++) { 19 | const s1 = sorted1[i]; 20 | const s2 = sorted2[i]; 21 | 22 | if (s1.type !== s2.type) return false; 23 | if (!options?.ignoreRequired && !areArraysEqual(s1.required, s2.required)) return false; 24 | if (!arePropsEqual(s1.properties, s2.properties, options)) return false; 25 | if (!areSchemasEqual(s1.items, s2.items, options)) return false; 26 | } 27 | 28 | return true; 29 | } 30 | 31 | function areArraysEqual(arr1: string[], arr2: string[]): boolean { 32 | if (arr1 === undefined && arr2 === undefined) return true; 33 | if (arr1 === undefined || arr2 === undefined) return false; 34 | const set1 = new Set(arr1); 35 | const set2 = new Set(arr2); 36 | const combined = new Set([...arr1, ...arr2]); 37 | const areEqual = combined.size === set1.size && combined.size === set2.size; 38 | return areEqual; 39 | } 40 | 41 | function arePropsEqual( 42 | props1: Record, 43 | props2: Record, 44 | options?: SchemaComparisonOptions 45 | ): boolean { 46 | if (props1 === undefined && props2 === undefined) return true; 47 | if (props1 === undefined || props2 === undefined) return false; 48 | const keys1 = Object.keys(props1); 49 | const keys2 = Object.keys(props2); 50 | if (!areArraysEqual(keys1, keys2)) return false; 51 | for (const key of keys1) { 52 | if (!areSchemasEqual(props1[key], props2[key], options)) return false; 53 | } 54 | return true; 55 | } 56 | 57 | export function isSubset(mainSchema: Schema, subSchema: Schema, options?: SchemaComparisonOptions): boolean { 58 | const mergedSchema = mergeSchemas([mainSchema, subSchema]); 59 | // console.log(JSON.stringify(mergedSchema, null, 4)); 60 | const isModified = areSchemasEqual(mergedSchema, mainSchema, options); 61 | return isModified; 62 | } 63 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | export enum ValueType { 2 | Null = 'null', 3 | Boolean = 'boolean', 4 | Integer = 'integer', 5 | Number = 'number', 6 | String = 'string', 7 | Object = 'object', 8 | Array = 'array', 9 | } 10 | 11 | export type Schema = { 12 | type?: ValueType | ValueType[]; 13 | items?: Schema; 14 | properties?: Record; 15 | required?: string[]; 16 | anyOf?: Array; 17 | }; 18 | 19 | export type SchemaGenOptions = { 20 | noRequired: boolean; 21 | }; 22 | 23 | export type SchemaComparisonOptions = { 24 | ignoreRequired: boolean; 25 | }; 26 | -------------------------------------------------------------------------------- /tests/__snapshots__/schema-builder.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`SchemaBuilder generation all cases combined should generate valid schemas for complex objects 1`] = ` 4 | Object { 5 | "items": Object { 6 | "properties": Object { 7 | "lvl1PropNum": Object { 8 | "type": "number", 9 | }, 10 | "lvl1PropObj1": Object { 11 | "properties": Object { 12 | "lvl2PropArr": Object { 13 | "items": Object { 14 | "type": Array [ 15 | "null", 16 | "boolean", 17 | "number", 18 | "string", 19 | ], 20 | }, 21 | "type": "array", 22 | }, 23 | }, 24 | "required": Array [ 25 | "lvl2PropArr", 26 | ], 27 | "type": "object", 28 | }, 29 | "lvl1PropObj2": Object { 30 | "properties": Object { 31 | "lvl2PropArr1": Object { 32 | "items": Object { 33 | "type": "integer", 34 | }, 35 | "type": "array", 36 | }, 37 | "lvl2PropArr2": Object { 38 | "items": Object { 39 | "anyOf": Array [ 40 | Object { 41 | "type": Array [ 42 | "integer", 43 | "string", 44 | ], 45 | }, 46 | Object { 47 | "items": Object { 48 | "type": Array [ 49 | "boolean", 50 | "integer", 51 | ], 52 | }, 53 | "type": "array", 54 | }, 55 | Object { 56 | "properties": Object { 57 | "lvl3PropNum1": Object { 58 | "type": "number", 59 | }, 60 | "lvl3PropStr1": Object { 61 | "type": "string", 62 | }, 63 | }, 64 | "type": "object", 65 | }, 66 | ], 67 | }, 68 | "type": "array", 69 | }, 70 | "lvl2PropNum1": Object { 71 | "type": "integer", 72 | }, 73 | "six": Object { 74 | "type": "null", 75 | }, 76 | }, 77 | "required": Array [ 78 | "lvl2PropNum1", 79 | "lvl2PropArr1", 80 | "six", 81 | "lvl2PropArr2", 82 | ], 83 | "type": "object", 84 | }, 85 | "lvl1PropStr": Object { 86 | "type": "string", 87 | }, 88 | }, 89 | "required": Array [ 90 | "lvl1PropStr", 91 | ], 92 | "type": "object", 93 | }, 94 | "type": "array", 95 | } 96 | `; 97 | 98 | exports[`SchemaBuilder generation circular refs should throw an error w/ explanation 1`] = ` 99 | "Converting circular structure to JSON 100 | --> starting at object with constructor 'Object' 101 | | property 'b' -> object with constructor 'Object' 102 | --- property 'a' closes the circle" 103 | `; 104 | 105 | exports[`SchemaBuilder generation nested objects/arrays should combine object schemas and respect required property 1`] = ` 106 | Object { 107 | "properties": Object { 108 | "one": Object { 109 | "type": "integer", 110 | }, 111 | "three": Object { 112 | "properties": Object { 113 | "five": Object { 114 | "items": Object { 115 | "type": "integer", 116 | }, 117 | "type": "array", 118 | }, 119 | "four": Object { 120 | "type": "integer", 121 | }, 122 | "seven": Object { 123 | "items": Object { 124 | "properties": Object { 125 | "eight": Object { 126 | "type": "number", 127 | }, 128 | "nine": Object { 129 | "type": "string", 130 | }, 131 | }, 132 | "type": "object", 133 | }, 134 | "type": "array", 135 | }, 136 | "six": Object { 137 | "type": "null", 138 | }, 139 | }, 140 | "required": Array [ 141 | "four", 142 | "five", 143 | "six", 144 | "seven", 145 | ], 146 | "type": "object", 147 | }, 148 | "two": Object { 149 | "type": "string", 150 | }, 151 | }, 152 | "required": Array [ 153 | "one", 154 | "two", 155 | "three", 156 | ], 157 | "type": "object", 158 | } 159 | `; 160 | -------------------------------------------------------------------------------- /tests/fixtures/complex-schema1.ts: -------------------------------------------------------------------------------- 1 | import { ValueType } from '../../src'; 2 | 3 | export const complexSchema1 = { 4 | type: ValueType.Array, 5 | items: { 6 | type: ValueType.Object, 7 | properties: { 8 | lvl1PropNum: { 9 | type: ValueType.Number, 10 | }, 11 | lvl1PropStr: { 12 | type: ValueType.String, 13 | }, 14 | lvl1PropObj1: { 15 | type: ValueType.Object, 16 | properties: { 17 | lvl2PropArr: { 18 | type: ValueType.Array, 19 | items: { 20 | type: [ValueType.Null, ValueType.Boolean, ValueType.Number, ValueType.String], 21 | }, 22 | }, 23 | }, 24 | required: ['lvl2PropArr'], 25 | }, 26 | lvl1PropObj2: { 27 | type: ValueType.Object, 28 | properties: { 29 | lvl2PropNum1: { 30 | type: ValueType.Integer, 31 | }, 32 | lvl2PropArr1: { 33 | type: ValueType.Array, 34 | items: { 35 | type: ValueType.Integer, 36 | }, 37 | }, 38 | six: { 39 | type: ValueType.Null, 40 | }, 41 | lvl2PropArr2: { 42 | type: ValueType.Array, 43 | items: { 44 | anyOf: [ 45 | { 46 | type: [ValueType.Integer, ValueType.String], 47 | }, 48 | { 49 | type: ValueType.Array, 50 | items: { 51 | type: [ValueType.Boolean, ValueType.Integer], 52 | }, 53 | }, 54 | { 55 | type: ValueType.Object, 56 | properties: { 57 | lvl3PropNum1: { 58 | type: ValueType.Number, 59 | }, 60 | lvl3PropStr1: { 61 | type: ValueType.String, 62 | }, 63 | }, 64 | }, 65 | ], 66 | }, 67 | }, 68 | }, 69 | required: ['lvl2PropNum1', 'lvl2PropArr1', 'six', 'lvl2PropArr2'], 70 | }, 71 | }, 72 | required: ['lvl1PropStr'], 73 | }, 74 | }; 75 | -------------------------------------------------------------------------------- /tests/fixtures/complex-schema2.ts: -------------------------------------------------------------------------------- 1 | import { ValueType } from '../../src'; 2 | 3 | export const complexSchema2 = { 4 | type: ValueType.Array, 5 | items: { 6 | type: ValueType.Object, 7 | properties: { 8 | lvl1PropNum: { 9 | type: [ValueType.Number], 10 | }, 11 | lvl1PropStr: { 12 | type: [ValueType.String], 13 | }, 14 | lvl1PropObj1: { 15 | type: ValueType.Object, 16 | properties: { 17 | lvl2PropArr: { 18 | type: ValueType.Array, 19 | items: { 20 | type: [ValueType.Boolean, ValueType.Null, ValueType.Number, ValueType.String], 21 | }, 22 | }, 23 | }, 24 | required: ['lvl2PropArr'], 25 | }, 26 | lvl1PropObj2: { 27 | type: ValueType.Object, 28 | properties: { 29 | lvl2PropNum1: { 30 | type: ValueType.Integer, 31 | }, 32 | lvl2PropArr1: { 33 | type: ValueType.Array, 34 | items: { 35 | type: ValueType.Integer, 36 | }, 37 | }, 38 | lvl2PropArr2: { 39 | type: ValueType.Array, 40 | items: { 41 | anyOf: [ 42 | { 43 | type: [ValueType.String, ValueType.Integer], 44 | }, 45 | { 46 | type: ValueType.Object, 47 | properties: { 48 | lvl3PropStr1: { 49 | type: ValueType.String, 50 | }, 51 | lvl3PropNum1: { 52 | type: ValueType.Number, 53 | }, 54 | }, 55 | }, 56 | { 57 | type: ValueType.Array, 58 | items: { 59 | type: [ValueType.Boolean, ValueType.Integer], 60 | }, 61 | }, 62 | ], 63 | }, 64 | }, 65 | six: { 66 | type: ValueType.Null, 67 | }, 68 | }, 69 | required: ['lvl2PropArr1', 'lvl2PropNum1', 'six', 'lvl2PropArr2'], 70 | }, 71 | }, 72 | required: ['lvl1PropStr'], 73 | }, 74 | }; 75 | -------------------------------------------------------------------------------- /tests/fixtures/index.ts: -------------------------------------------------------------------------------- 1 | export * from './complex-schema1'; 2 | export * from './complex-schema2'; 3 | -------------------------------------------------------------------------------- /tests/schema-builder.spec.ts: -------------------------------------------------------------------------------- 1 | import { createSchema, mergeSchemas, ValueType, extendSchema, createCompoundSchema } from '../src'; 2 | import { pp } from './test-utils'; 3 | 4 | describe('SchemaBuilder', () => { 5 | describe('generation', () => { 6 | describe('simple types', () => { 7 | it('should build schema for integer', () => { 8 | const schema = createSchema(1); 9 | expect(schema).toEqual({ type: 'integer' }); 10 | }); 11 | 12 | it('should build schema for number', () => { 13 | const schema = createSchema(1.1); 14 | expect(schema).toEqual({ type: 'number' }); 15 | }); 16 | 17 | it('should build schema for string', () => { 18 | const schema = createSchema('some string'); 19 | expect(schema).toEqual({ type: 'string' }); 20 | }); 21 | 22 | it('should build schema for null', () => { 23 | const schema = createSchema(null); 24 | expect(schema).toEqual({ type: 'null' }); 25 | }); 26 | 27 | it('should build schema for boolean', () => { 28 | const schema = createSchema(false); 29 | expect(schema).toEqual({ type: 'boolean' }); 30 | }); 31 | 32 | it('should build schema for array', () => { 33 | const schema = createSchema([]); 34 | expect(schema).toEqual({ type: 'array' }); 35 | }); 36 | 37 | it('should build schema for object', () => { 38 | const schema = createSchema({}); 39 | expect(schema).toEqual({ type: 'object' }); 40 | }); 41 | 42 | it('should build schema for undefined', () => { 43 | const schema = createSchema(undefined); 44 | expect(schema).toEqual({ type: 'null' }); 45 | }); 46 | }); 47 | 48 | describe('arrays', () => { 49 | it('it should generate schema for arrays of the same type', () => { 50 | const schema = createSchema([1, 2, 3]); 51 | expect(schema).toEqual({ type: 'array', items: { type: 'integer' } }); 52 | }); 53 | 54 | it('it should generate schema for arrays of the same type with floats', () => { 55 | const schema = createSchema([1, 2.1, 3]); 56 | expect(schema).toEqual({ type: 'array', items: { type: 'number' } }); 57 | }); 58 | 59 | it('it should generate schema for arrays of different primitive types', () => { 60 | const schema = createSchema([1, 1.1, 'string', null, false, true]); 61 | expect(schema).toEqual({ type: 'array', items: { type: ['null', 'boolean', 'number', 'string'] } }); 62 | }); 63 | 64 | it('it should generate schema for arrays of different primitive types and ints only', () => { 65 | const schema = createSchema([1, 'string', null, false, true]); 66 | expect(schema).toEqual({ type: 'array', items: { type: ['null', 'boolean', 'integer', 'string'] } }); 67 | }); 68 | }); 69 | 70 | describe('objects', () => { 71 | it('it should generate schema for object with props of the same type', () => { 72 | const schema = createSchema({ one: 1, two: 2 }); 73 | expect(schema).toEqual({ 74 | type: 'object', 75 | properties: { one: { type: 'integer' }, two: { type: 'integer' } }, 76 | required: ['one', 'two'], 77 | }); 78 | }); 79 | 80 | it('it should generate schema for object with props of different types', () => { 81 | const schema = createSchema({ one: 1, two: 'second' }); 82 | expect(schema).toEqual({ 83 | type: 'object', 84 | properties: { one: { type: 'integer' }, two: { type: 'string' } }, 85 | required: ['one', 'two'], 86 | }); 87 | }); 88 | 89 | it('it should generate schema for object with props of different types w/o required', () => { 90 | const schema = createSchema({ one: 1, two: 'second' }, { noRequired: true }); 91 | expect(schema).toEqual({ 92 | type: 'object', 93 | properties: { one: { type: 'integer' }, two: { type: 'string' } }, 94 | }); 95 | }); 96 | }); 97 | 98 | describe('nested array', () => { 99 | it('should generate schema for nested arrays', () => { 100 | const schema = createSchema([1, [2.1], [[3]]]); 101 | expect(schema).toEqual({ 102 | type: 'array', 103 | items: { 104 | anyOf: [ 105 | { 106 | type: 'integer', 107 | }, 108 | { 109 | type: 'array', 110 | items: { 111 | anyOf: [ 112 | { 113 | type: 'number', 114 | }, 115 | { 116 | type: 'array', 117 | items: { 118 | type: 'integer', 119 | }, 120 | }, 121 | ], 122 | }, 123 | }, 124 | ], 125 | }, 126 | }); 127 | }); 128 | 129 | it('should generate schema for nested arrays and simplify anyOf', () => { 130 | const schema = createSchema([1, 'some string', null, [2, 'some other string', {}], [[3.1]]]); 131 | expect(schema).toEqual({ 132 | type: 'array', 133 | items: { 134 | anyOf: [ 135 | { 136 | type: ['null', 'integer', 'string'], 137 | }, 138 | { 139 | type: 'array', 140 | items: { 141 | anyOf: [ 142 | { 143 | type: ['integer', 'string', 'object'], 144 | }, 145 | { 146 | type: 'array', 147 | items: { 148 | type: 'number', 149 | }, 150 | }, 151 | ], 152 | }, 153 | }, 154 | ], 155 | }, 156 | }); 157 | }); 158 | }); 159 | 160 | describe('nested objects/arrays', () => { 161 | it('should combine object schemas and respect required property', () => { 162 | const schema = createSchema({ 163 | one: 1, 164 | two: 'second', 165 | three: { four: 5, five: [5], six: null, seven: [{}, { eight: 1.1 }, { nine: 'nine' }] }, 166 | }); 167 | expect(schema).toMatchSnapshot(); 168 | }); 169 | 170 | it('should generate schema for nested object with props of different types w/o required', () => { 171 | const schema = createSchema({ one: 1, two: { a: 'value' } }, { noRequired: true }); 172 | expect(schema).toEqual({ 173 | type: 'object', 174 | properties: { 175 | one: { type: 'integer' }, 176 | two: { type: 'object', properties: { a: { type: 'string' } } }, 177 | }, 178 | }); 179 | }); 180 | }); 181 | 182 | describe('all cases combined', () => { 183 | it('should generate valid schemas for complex objects', () => { 184 | const schema = createSchema([ 185 | { 186 | lvl1PropNum: 1, 187 | lvl1PropStr: 'second', 188 | lvl1PropObj1: { lvl2PropArr: [1, 2] }, 189 | lvl1PropObj2: { 190 | lvl2PropNum1: 5, 191 | lvl2PropArr1: [5], 192 | six: null, 193 | lvl2PropArr2: [ 194 | {}, 195 | { lvl3PropNum1: 1.2 }, 196 | { lvl3PropStr1: 'nine' }, 197 | [1, false], 198 | 1, 199 | 'some string', 200 | ], 201 | }, 202 | }, 203 | { lvl1PropStr: 'one' }, 204 | { lvl1PropNum: 1.2, lvl1PropStr: 'one' }, 205 | { lvl1PropStr: 'one', lvl1PropObj1: { lvl2PropArr: [2.3, null, 'some string', false] } }, 206 | ]); 207 | 208 | expect(schema).toMatchSnapshot(); 209 | }); 210 | 211 | it('should consider value as required if it is present in all objects', async () => { 212 | const val = [ 213 | { 214 | arr: [ 215 | { 216 | prop1: 'test string', 217 | }, 218 | { 219 | prop2: 'test string', 220 | }, 221 | ], 222 | }, 223 | { 224 | arr: [ 225 | { 226 | prop1: 'test', 227 | }, 228 | ], 229 | }, 230 | ]; 231 | const schema = createSchema(val); 232 | expect(schema).toEqual({ 233 | type: 'array', 234 | items: { 235 | type: 'object', 236 | properties: { 237 | arr: { 238 | type: 'array', 239 | items: { 240 | type: 'object', 241 | properties: { 242 | prop1: { 243 | type: 'string', 244 | }, 245 | prop2: { 246 | type: 'string', 247 | }, 248 | }, 249 | }, 250 | }, 251 | }, 252 | required: ['arr'], 253 | }, 254 | }); 255 | }); 256 | 257 | it('should generate schema for array of objects w/o required', () => { 258 | const schema = createSchema( 259 | [ 260 | { one: 'a', two: 'b' }, 261 | { one: 'aa', two: 'bb' }, 262 | ], 263 | { noRequired: true } 264 | ); 265 | expect(schema).toEqual({ 266 | type: 'array', 267 | items: { 268 | type: 'object', 269 | properties: { 270 | one: { type: 'string' }, 271 | two: { type: 'string' }, 272 | }, 273 | }, 274 | }); 275 | }); 276 | }); 277 | 278 | describe('prototype methods', () => { 279 | function createObjectWithProtoMethods(): Record { 280 | return { 281 | constructor: 'constructor value', 282 | hasOwnProperty: 'hasOwnProperty value', 283 | isPrototypeOf: 'isPrototypeOf value', 284 | propertyIsEnumerable: 'propertyIsEnumerable value', 285 | toLocaleString: 'toLocaleString value', 286 | toString: 'toString value', 287 | valueOf: 'valueOf value', 288 | __defineGetter__: '__defineGetter__ value', 289 | __defineSetter__: '__defineSetter__ value', 290 | __lookupGetter__: '__lookupGetter__ value', 291 | __lookupSetter__: '__lookupSetter__ value', 292 | __proto__: '__proto__ value', 293 | }; 294 | } 295 | 296 | it('should work for props with the same names as Object.prototype methods', async () => { 297 | // it's improtant to keep them in array, as this is more complex case 298 | const value: any = [createObjectWithProtoMethods(), createObjectWithProtoMethods()]; 299 | const schema = createSchema(value); 300 | expect(schema).toEqual({ 301 | type: 'array', 302 | items: { 303 | type: 'object', 304 | properties: { 305 | constructor: { type: 'string' }, 306 | hasOwnProperty: { type: 'string' }, 307 | isPrototypeOf: { type: 'string' }, 308 | propertyIsEnumerable: { type: 'string' }, 309 | toLocaleString: { type: 'string' }, 310 | toString: { type: 'string' }, 311 | valueOf: { type: 'string' }, 312 | __defineGetter__: { type: 'string' }, 313 | __defineSetter__: { type: 'string' }, 314 | __lookupGetter__: { type: 'string' }, 315 | __lookupSetter__: { type: 'string' }, 316 | }, 317 | }, 318 | }); 319 | }); 320 | }); 321 | 322 | describe('circular refs', () => { 323 | it('should throw an error w/ explanation', async () => { 324 | const a: any = {}; 325 | const b: any = {}; 326 | a.b = b; 327 | b.a = a; 328 | 329 | expect(() => { 330 | createSchema(a); 331 | }).toThrowErrorMatchingSnapshot(); 332 | }); 333 | }); 334 | 335 | describe('non-json values', () => { 336 | it('should ignore functions', async () => { 337 | const value: any = { 338 | func() {}, 339 | someProp: 'string', 340 | }; 341 | const schema = createSchema(value); 342 | expect(schema).toEqual({ 343 | type: 'object', 344 | properties: { 345 | someProp: { 346 | type: 'string', 347 | }, 348 | }, 349 | required: ['someProp'], 350 | }); 351 | }); 352 | }); 353 | }); 354 | 355 | describe('createCompoundSchema', () => { 356 | it('should create compound schema from multiple inputs', () => { 357 | const schema = createCompoundSchema([{ age: 35 }, { age: 19, name: 'John' }, { age: 23, admin: true }]); 358 | expect(schema).toEqual({ 359 | type: 'object', 360 | properties: { admin: { type: 'boolean' }, age: { type: 'integer' }, name: { type: 'string' } }, 361 | required: ['age'], 362 | }); 363 | }); 364 | }); 365 | 366 | describe('merging', () => { 367 | it('should merge simple schemas', () => { 368 | const merged = mergeSchemas([{ type: ValueType.Number }, { type: ValueType.String }]); 369 | expect(merged).toEqual({ type: ['number', 'string'] }); 370 | }); 371 | 372 | it('should merge array schemas', () => { 373 | const merged = mergeSchemas([ 374 | { 375 | type: ValueType.Array, 376 | items: { 377 | anyOf: [ 378 | { 379 | type: [ValueType.Number, ValueType.String], 380 | }, 381 | { 382 | type: ValueType.Array, 383 | }, 384 | ], 385 | }, 386 | }, 387 | { type: ValueType.String }, 388 | ]); 389 | expect(merged).toEqual({ 390 | anyOf: [ 391 | { type: ValueType.String }, 392 | { 393 | type: ValueType.Array, 394 | items: { type: [ValueType.Number, ValueType.String, ValueType.Array] }, 395 | }, 396 | ], 397 | }); 398 | }); 399 | 400 | it('should merge object schemas', async () => { 401 | const merged = mergeSchemas([ 402 | { type: ValueType.Object }, 403 | { type: ValueType.Object, properties: { prop1: { type: ValueType.String } } }, 404 | ]); 405 | expect(merged).toEqual({ 406 | type: ValueType.Object, 407 | properties: { prop1: { type: ValueType.String } }, 408 | }); 409 | }); 410 | 411 | it('should merge more than 2 schemas', async () => { 412 | const merged = mergeSchemas([ 413 | { type: ValueType.Number }, 414 | { type: ValueType.String }, 415 | { type: ValueType.Boolean }, 416 | ]); 417 | expect(merged).toEqual({ type: ['boolean', 'number', 'string'] }); 418 | }); 419 | }); 420 | 421 | describe('extending', () => { 422 | it('should extend simple schemas', () => { 423 | const merged = extendSchema({ type: ValueType.Number }, 'some string'); 424 | expect(merged).toEqual({ type: ['number', 'string'] }); 425 | }); 426 | 427 | it('should extend array schemas', () => { 428 | const merged = extendSchema( 429 | { 430 | type: ValueType.Array, 431 | items: { 432 | anyOf: [ 433 | { 434 | type: [ValueType.Number, ValueType.String], 435 | }, 436 | { 437 | type: ValueType.Array, 438 | }, 439 | ], 440 | }, 441 | }, 442 | 'some string' 443 | ); 444 | expect(merged).toEqual({ 445 | anyOf: [ 446 | { type: ValueType.String }, 447 | { 448 | type: ValueType.Array, 449 | items: { type: [ValueType.Number, ValueType.String, ValueType.Array] }, 450 | }, 451 | ], 452 | }); 453 | }); 454 | }); 455 | }); 456 | -------------------------------------------------------------------------------- /tests/schema-comparator.spec.ts: -------------------------------------------------------------------------------- 1 | import { areSchemasEqual, ValueType, isSubset, createSchema } from '../src'; 2 | import { complexSchema1, complexSchema2 } from './fixtures'; 3 | import { pp } from './test-utils'; 4 | 5 | describe('Schema Comparison', () => { 6 | describe('simple schemas', () => { 7 | it('should compare by type', () => { 8 | const equal = areSchemasEqual({ type: ValueType.Number }, { type: ValueType.Number }); 9 | expect(equal).toBe(true); 10 | }); 11 | 12 | it('should compare by props', () => { 13 | const equal = areSchemasEqual( 14 | { type: ValueType.Object, properties: { test: { type: ValueType.String } } }, 15 | { type: ValueType.Object, properties: { test: { type: ValueType.String } } } 16 | ); 17 | expect(equal).toBe(true); 18 | }); 19 | 20 | it('should compare by props not eq', () => { 21 | const equal = areSchemasEqual( 22 | { type: ValueType.Object, properties: { test: { type: ValueType.String } } }, 23 | { type: ValueType.Object, properties: { test: { type: ValueType.Number } } } 24 | ); 25 | expect(equal).toBe(false); 26 | }); 27 | 28 | it('should compare by props not eq (properties=undefined)', () => { 29 | const equal = areSchemasEqual( 30 | { type: ValueType.Object }, 31 | { type: ValueType.Object, properties: { test: { type: ValueType.Number } } } 32 | ); 33 | expect(equal).toBe(false); 34 | }); 35 | 36 | it('should compare by props not eq (properties={})', () => { 37 | const equal = areSchemasEqual( 38 | { type: ValueType.Object, properties: {} }, 39 | { type: ValueType.Object, properties: { test: { type: ValueType.Number } } } 40 | ); 41 | expect(equal).toBe(false); 42 | }); 43 | 44 | it('should compare by required', () => { 45 | const equal = areSchemasEqual( 46 | { type: ValueType.Object, properties: { test: { type: ValueType.String } }, required: ['test'] }, 47 | { type: ValueType.Object, properties: { test: { type: ValueType.String } }, required: ['test'] } 48 | ); 49 | expect(equal).toBe(true); 50 | }); 51 | 52 | it('should compare by required not equal', () => { 53 | const equal = areSchemasEqual( 54 | { type: ValueType.Object, properties: { test: { type: ValueType.String } }, required: ['test'] }, 55 | { type: ValueType.Object, properties: { test: { type: ValueType.String } }, required: [] } 56 | ); 57 | expect(equal).toBe(false); 58 | }); 59 | 60 | it('should compare by required not equal w/ ignore required', () => { 61 | const equal = areSchemasEqual( 62 | { type: ValueType.Object, properties: { test: { type: ValueType.String } }, required: ['test'] }, 63 | { type: ValueType.Object, properties: { test: { type: ValueType.String } }, required: [] }, 64 | { ignoreRequired: true } 65 | ); 66 | expect(equal).toBe(true); 67 | }); 68 | 69 | it('should compare by required not equal (required=undefined)', () => { 70 | const equal = areSchemasEqual( 71 | { type: ValueType.Object, properties: { test: { type: ValueType.String } }, required: ['test'] }, 72 | { type: ValueType.Object, properties: { test: { type: ValueType.String } } } 73 | ); 74 | expect(equal).toBe(false); 75 | }); 76 | 77 | it('should compare by items', () => { 78 | const equal = areSchemasEqual( 79 | { type: ValueType.Array, items: { type: ValueType.String } }, 80 | { type: ValueType.Array, items: { type: ValueType.String } } 81 | ); 82 | expect(equal).toBe(true); 83 | }); 84 | 85 | it('should compare by items not eq', () => { 86 | const equal = areSchemasEqual( 87 | { type: ValueType.Array, items: { type: ValueType.String } }, 88 | { type: ValueType.Array, items: { type: ValueType.Number } } 89 | ); 90 | expect(equal).toBe(false); 91 | }); 92 | }); 93 | 94 | describe('simple wrapped schemas', () => { 95 | it('should compare wrapped and unwrapped', () => { 96 | const equal = areSchemasEqual({ type: ValueType.Number }, { type: [ValueType.Number] }); 97 | expect(equal).toBe(true); 98 | }); 99 | 100 | it('should compare wrapped and unwrapped not equal', () => { 101 | const equal = areSchemasEqual({ type: ValueType.Number }, { type: [ValueType.String] }); 102 | expect(equal).toBe(false); 103 | }); 104 | 105 | it('should compare multiple wrapped types', () => { 106 | const equal = areSchemasEqual( 107 | { type: [ValueType.Number, ValueType.String] }, 108 | { type: [ValueType.String, ValueType.Number] } 109 | ); 110 | expect(equal).toBe(true); 111 | }); 112 | 113 | it('should compare multiple wrapped types not equal by length', () => { 114 | const equal = areSchemasEqual( 115 | { type: [ValueType.Number, ValueType.String] }, 116 | { type: [ValueType.String, ValueType.Number, ValueType.Number] } 117 | ); 118 | expect(equal).toBe(false); 119 | }); 120 | 121 | it('should compare multiple wrapped types not equal by type', () => { 122 | const equal = areSchemasEqual( 123 | { type: [ValueType.Number, ValueType.String] }, 124 | { type: [ValueType.String, ValueType.Boolean] } 125 | ); 126 | expect(equal).toBe(false); 127 | }); 128 | }); 129 | 130 | describe('simple anyOf schemas', () => { 131 | it('should compare wrapped and unwrapped', () => { 132 | const equal = areSchemasEqual( 133 | { anyOf: [{ type: ValueType.Number }] }, 134 | { anyOf: [{ type: [ValueType.Number] }] } 135 | ); 136 | expect(equal).toBe(true); 137 | }); 138 | 139 | it('should compare wrapped and unwrapped not equal', () => { 140 | const equal = areSchemasEqual( 141 | { anyOf: [{ type: ValueType.Number }] }, 142 | { anyOf: [{ type: [ValueType.String] }] } 143 | ); 144 | expect(equal).toBe(false); 145 | }); 146 | 147 | it('should compare multiple wrapped types', () => { 148 | const equal = areSchemasEqual( 149 | { anyOf: [{ type: ValueType.Number }, { type: ValueType.String }] }, 150 | { anyOf: [{ type: [ValueType.String, ValueType.Number] }] } 151 | ); 152 | expect(equal).toBe(true); 153 | }); 154 | 155 | it('should compare multiple unwrapped types', () => { 156 | const equal = areSchemasEqual( 157 | { anyOf: [{ type: ValueType.Number }, { type: ValueType.String }] }, 158 | { anyOf: [{ type: ValueType.String }, { type: ValueType.Number }] } 159 | ); 160 | expect(equal).toBe(true); 161 | }); 162 | 163 | it('should compare multiple unwrapped types not equal by length', () => { 164 | const equal = areSchemasEqual( 165 | { anyOf: [{ type: ValueType.String }, { type: ValueType.Number }] }, 166 | { anyOf: [{ type: ValueType.Number }, { type: ValueType.String }, { type: ValueType.String }] } 167 | ); 168 | expect(equal).toBe(false); 169 | }); 170 | 171 | it('should compare multiple unwrapped types not equal by type', () => { 172 | const equal = areSchemasEqual( 173 | { anyOf: [{ type: ValueType.String }, { type: ValueType.Number }] }, 174 | { anyOf: [{ type: ValueType.Number }, { type: ValueType.Boolean }] } 175 | ); 176 | expect(equal).toBe(false); 177 | }); 178 | }); 179 | 180 | describe('complex schemas', () => { 181 | it('should compare complex schemas', () => { 182 | const schema1 = JSON.parse(JSON.stringify(complexSchema1)); 183 | const schema2 = JSON.parse(JSON.stringify(complexSchema2)); 184 | 185 | expect(areSchemasEqual(schema1, schema2)).toBe(true); 186 | 187 | schema2.items.properties.lvl1PropObj2.properties.lvl2PropArr2.items.anyOf[2].type = [ 188 | ValueType.Boolean, 189 | ValueType.String, 190 | ]; 191 | expect(areSchemasEqual(schema1, schema2)).toBe(false); 192 | }); 193 | }); 194 | 195 | describe('isSubset', () => { 196 | it('should return true is shemas are equal', async () => { 197 | const result = isSubset({ anyOf: [{ type: ValueType.Number }] }, { anyOf: [{ type: [ValueType.Number] }] }); 198 | expect(result).toBe(true); 199 | }); 200 | 201 | it('should return false if second schema is not a subset', async () => { 202 | const result = isSubset({ anyOf: [{ type: ValueType.Number }] }, { anyOf: [{ type: [ValueType.String] }] }); 203 | expect(result).toBe(false); 204 | }); 205 | 206 | it('should return false if second schema is a superset instead of subset', async () => { 207 | const result = isSubset( 208 | { anyOf: [{ type: ValueType.Number }] }, 209 | { anyOf: [{ type: [ValueType.String, ValueType.Number] }] } 210 | ); 211 | expect(result).toBe(false); 212 | }); 213 | 214 | it('should return true if second schema is a subset', async () => { 215 | const result = isSubset( 216 | { anyOf: [{ type: [ValueType.String, ValueType.Number] }] }, 217 | { anyOf: [{ type: ValueType.Number }] } 218 | ); 219 | expect(result).toBe(true); 220 | }); 221 | 222 | it('should return true if second schema is a subset (anyOf, simple)', async () => { 223 | const result = isSubset( 224 | { anyOf: [{ type: [ValueType.String, ValueType.Number] }] }, 225 | { type: ValueType.Number } 226 | ); 227 | expect(result).toBe(true); 228 | }); 229 | 230 | it('should return true if second schema is a subset (array items, simple schema)', async () => { 231 | const result = isSubset( 232 | { type: ValueType.Array, items: { type: [ValueType.Boolean, ValueType.Integer] } }, 233 | { type: ValueType.Array, items: { type: [ValueType.Boolean] } } 234 | ); 235 | expect(result).toBe(true); 236 | }); 237 | 238 | it('should return true if second schema is a subset (object props, simple schema)', async () => { 239 | const result = isSubset( 240 | { type: ValueType.Object, properties: { propOne: { type: [ValueType.Boolean, ValueType.Integer] } } }, 241 | { type: ValueType.Object } 242 | ); 243 | expect(result).toBe(true); 244 | }); 245 | 246 | it('should return true if second schema is a subset (object props, simple schema)', async () => { 247 | const result = isSubset( 248 | { type: ValueType.Object, properties: { propOne: { type: [ValueType.Boolean, ValueType.Integer] } } }, 249 | { type: ValueType.Object, properties: { propOne: { type: [ValueType.Integer] } } } 250 | ); 251 | expect(result).toBe(true); 252 | }); 253 | 254 | it('should return true if second schema is a subset (object props, simple schema, required)', async () => { 255 | const result = isSubset( 256 | { 257 | type: ValueType.Object, 258 | properties: { propOne: { type: [ValueType.Boolean, ValueType.Integer] } }, 259 | }, 260 | { 261 | type: ValueType.Object, 262 | properties: { propOne: { type: [ValueType.Integer] } }, 263 | required: ['propOne'], 264 | } 265 | ); 266 | expect(result).toBe(true); 267 | }); 268 | 269 | it('should return false if second schema is not a subset (object props, simple schema, required)', async () => { 270 | // presence of required prop is more restrictive 271 | const result = isSubset( 272 | { 273 | type: ValueType.Object, 274 | properties: { propOne: { type: [ValueType.Boolean, ValueType.Integer] } }, 275 | required: ['propOne'], 276 | }, 277 | { 278 | type: ValueType.Object, 279 | properties: { propOne: { type: [ValueType.Boolean, ValueType.Integer] } }, 280 | } 281 | ); 282 | expect(result).toBe(false); 283 | }); 284 | 285 | it('should return true if second schema is a subset (object props, simple schema, required ignored)', async () => { 286 | const result = isSubset( 287 | { 288 | type: ValueType.Object, 289 | properties: { propOne: { type: [ValueType.Boolean, ValueType.Integer] } }, 290 | required: ['propOne'], 291 | }, 292 | { 293 | type: ValueType.Object, 294 | properties: { propOne: { type: [ValueType.Boolean, ValueType.Integer] } }, 295 | }, 296 | { ignoreRequired: true } 297 | ); 298 | expect(result).toBe(true); 299 | }); 300 | 301 | it('should ignore required in nested objects (object props, simple schema, required ignored)', async () => { 302 | const result = isSubset( 303 | { 304 | type: ValueType.Object, 305 | properties: { 306 | propOne: { 307 | type: ValueType.Object, 308 | properties: { propTwo: { type: [ValueType.Boolean, ValueType.Integer] } }, 309 | required: ['propTwo'], 310 | }, 311 | }, 312 | }, 313 | { 314 | type: ValueType.Object, 315 | properties: { 316 | propOne: { 317 | type: ValueType.Object, 318 | properties: { propTwo: { type: [ValueType.Boolean, ValueType.Integer] } }, 319 | }, 320 | }, 321 | }, 322 | { ignoreRequired: true } 323 | ); 324 | expect(result).toBe(true); 325 | }); 326 | 327 | it('should return false if second schema is not a subset (empty vs non-empty array)', async () => { 328 | // array w/o items is more restrictive 329 | const result = isSubset( 330 | { 331 | type: ValueType.Array, 332 | }, 333 | { 334 | type: ValueType.Array, 335 | items: { 336 | type: ValueType.Object, 337 | properties: { propOne: { type: [ValueType.Boolean, ValueType.Integer] } }, 338 | }, 339 | } 340 | ); 341 | expect(result).toBe(false); 342 | }); 343 | }); 344 | }); 345 | -------------------------------------------------------------------------------- /tests/test-utils.ts: -------------------------------------------------------------------------------- 1 | // pretty printer, useful for debugging 2 | export function pp(value: any) { 3 | console.log(JSON.stringify(value, null, 2)); 4 | } 5 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2017", 4 | "lib": ["ES2019"], 5 | "rootDir": "./src", 6 | "outDir": "dist", 7 | "module": "commonjs", 8 | "moduleResolution": "node", 9 | "strict": false, 10 | "declaration": true, 11 | "sourceMap": true, 12 | "inlineSources": true, 13 | "types": ["node"], 14 | "allowSyntheticDefaultImports": true, 15 | "esModuleInterop": true 16 | }, 17 | "include": ["src/**/*"], 18 | "exclude": ["**/node_modules/*", "dist"] 19 | } 20 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@ampproject/remapping@^2.1.0": 6 | version "2.2.0" 7 | resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" 8 | integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== 9 | dependencies: 10 | "@jridgewell/gen-mapping" "^0.1.0" 11 | "@jridgewell/trace-mapping" "^0.3.9" 12 | 13 | "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": 14 | version "7.10.4" 15 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" 16 | integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== 17 | dependencies: 18 | "@babel/highlight" "^7.10.4" 19 | 20 | "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": 21 | version "7.18.6" 22 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" 23 | integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== 24 | dependencies: 25 | "@babel/highlight" "^7.18.6" 26 | 27 | "@babel/code-frame@^7.22.13": 28 | version "7.22.13" 29 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" 30 | integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== 31 | dependencies: 32 | "@babel/highlight" "^7.22.13" 33 | chalk "^2.4.2" 34 | 35 | "@babel/compat-data@^7.20.5": 36 | version "7.20.14" 37 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.14.tgz#4106fc8b755f3e3ee0a0a7c27dde5de1d2b2baf8" 38 | integrity sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw== 39 | 40 | "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": 41 | version "7.20.12" 42 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.12.tgz#7930db57443c6714ad216953d1356dac0eb8496d" 43 | integrity sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg== 44 | dependencies: 45 | "@ampproject/remapping" "^2.1.0" 46 | "@babel/code-frame" "^7.18.6" 47 | "@babel/generator" "^7.20.7" 48 | "@babel/helper-compilation-targets" "^7.20.7" 49 | "@babel/helper-module-transforms" "^7.20.11" 50 | "@babel/helpers" "^7.20.7" 51 | "@babel/parser" "^7.20.7" 52 | "@babel/template" "^7.20.7" 53 | "@babel/traverse" "^7.20.12" 54 | "@babel/types" "^7.20.7" 55 | convert-source-map "^1.7.0" 56 | debug "^4.1.0" 57 | gensync "^1.0.0-beta.2" 58 | json5 "^2.2.2" 59 | semver "^6.3.0" 60 | 61 | "@babel/generator@^7.20.7", "@babel/generator@^7.7.2": 62 | version "7.20.14" 63 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.14.tgz#9fa772c9f86a46c6ac9b321039400712b96f64ce" 64 | integrity sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg== 65 | dependencies: 66 | "@babel/types" "^7.20.7" 67 | "@jridgewell/gen-mapping" "^0.3.2" 68 | jsesc "^2.5.1" 69 | 70 | "@babel/generator@^7.23.0": 71 | version "7.23.0" 72 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" 73 | integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== 74 | dependencies: 75 | "@babel/types" "^7.23.0" 76 | "@jridgewell/gen-mapping" "^0.3.2" 77 | "@jridgewell/trace-mapping" "^0.3.17" 78 | jsesc "^2.5.1" 79 | 80 | "@babel/helper-compilation-targets@^7.20.7": 81 | version "7.20.7" 82 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" 83 | integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== 84 | dependencies: 85 | "@babel/compat-data" "^7.20.5" 86 | "@babel/helper-validator-option" "^7.18.6" 87 | browserslist "^4.21.3" 88 | lru-cache "^5.1.1" 89 | semver "^6.3.0" 90 | 91 | "@babel/helper-environment-visitor@^7.18.9": 92 | version "7.18.9" 93 | resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" 94 | integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== 95 | 96 | "@babel/helper-environment-visitor@^7.22.20": 97 | version "7.22.20" 98 | resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" 99 | integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== 100 | 101 | "@babel/helper-function-name@^7.23.0": 102 | version "7.23.0" 103 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" 104 | integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== 105 | dependencies: 106 | "@babel/template" "^7.22.15" 107 | "@babel/types" "^7.23.0" 108 | 109 | "@babel/helper-hoist-variables@^7.22.5": 110 | version "7.22.5" 111 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" 112 | integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== 113 | dependencies: 114 | "@babel/types" "^7.22.5" 115 | 116 | "@babel/helper-module-imports@^7.18.6": 117 | version "7.18.6" 118 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" 119 | integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== 120 | dependencies: 121 | "@babel/types" "^7.18.6" 122 | 123 | "@babel/helper-module-transforms@^7.20.11": 124 | version "7.20.11" 125 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0" 126 | integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg== 127 | dependencies: 128 | "@babel/helper-environment-visitor" "^7.18.9" 129 | "@babel/helper-module-imports" "^7.18.6" 130 | "@babel/helper-simple-access" "^7.20.2" 131 | "@babel/helper-split-export-declaration" "^7.18.6" 132 | "@babel/helper-validator-identifier" "^7.19.1" 133 | "@babel/template" "^7.20.7" 134 | "@babel/traverse" "^7.20.10" 135 | "@babel/types" "^7.20.7" 136 | 137 | "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0": 138 | version "7.10.4" 139 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" 140 | integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== 141 | 142 | "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.19.0": 143 | version "7.20.2" 144 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" 145 | integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== 146 | 147 | "@babel/helper-simple-access@^7.20.2": 148 | version "7.20.2" 149 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" 150 | integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== 151 | dependencies: 152 | "@babel/types" "^7.20.2" 153 | 154 | "@babel/helper-split-export-declaration@^7.18.6": 155 | version "7.18.6" 156 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" 157 | integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== 158 | dependencies: 159 | "@babel/types" "^7.18.6" 160 | 161 | "@babel/helper-split-export-declaration@^7.22.6": 162 | version "7.22.6" 163 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" 164 | integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== 165 | dependencies: 166 | "@babel/types" "^7.22.5" 167 | 168 | "@babel/helper-string-parser@^7.19.4": 169 | version "7.19.4" 170 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" 171 | integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== 172 | 173 | "@babel/helper-string-parser@^7.22.5": 174 | version "7.22.5" 175 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" 176 | integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== 177 | 178 | "@babel/helper-validator-identifier@^7.10.4": 179 | version "7.10.4" 180 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" 181 | integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== 182 | 183 | "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": 184 | version "7.19.1" 185 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" 186 | integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== 187 | 188 | "@babel/helper-validator-identifier@^7.22.20": 189 | version "7.22.20" 190 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" 191 | integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== 192 | 193 | "@babel/helper-validator-option@^7.18.6": 194 | version "7.18.6" 195 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" 196 | integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== 197 | 198 | "@babel/helpers@^7.20.7": 199 | version "7.20.13" 200 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.13.tgz#e3cb731fb70dc5337134cadc24cbbad31cc87ad2" 201 | integrity sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg== 202 | dependencies: 203 | "@babel/template" "^7.20.7" 204 | "@babel/traverse" "^7.20.13" 205 | "@babel/types" "^7.20.7" 206 | 207 | "@babel/highlight@^7.10.4": 208 | version "7.10.4" 209 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" 210 | integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== 211 | dependencies: 212 | "@babel/helper-validator-identifier" "^7.10.4" 213 | chalk "^2.0.0" 214 | js-tokens "^4.0.0" 215 | 216 | "@babel/highlight@^7.18.6": 217 | version "7.18.6" 218 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" 219 | integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== 220 | dependencies: 221 | "@babel/helper-validator-identifier" "^7.18.6" 222 | chalk "^2.0.0" 223 | js-tokens "^4.0.0" 224 | 225 | "@babel/highlight@^7.22.13": 226 | version "7.22.20" 227 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" 228 | integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== 229 | dependencies: 230 | "@babel/helper-validator-identifier" "^7.22.20" 231 | chalk "^2.4.2" 232 | js-tokens "^4.0.0" 233 | 234 | "@babel/parser@^7.1.0", "@babel/parser@^7.10.4": 235 | version "7.11.4" 236 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.4.tgz#6fa1a118b8b0d80d0267b719213dc947e88cc0ca" 237 | integrity sha512-MggwidiH+E9j5Sh8pbrX5sJvMcsqS5o+7iB42M9/k0CD63MjYbdP4nhSh7uB5wnv2/RVzTZFTxzF/kIa5mrCqA== 238 | 239 | "@babel/parser@^7.14.7", "@babel/parser@^7.20.7": 240 | version "7.20.15" 241 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.15.tgz#eec9f36d8eaf0948bb88c87a46784b5ee9fd0c89" 242 | integrity sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg== 243 | 244 | "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": 245 | version "7.23.0" 246 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" 247 | integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== 248 | 249 | "@babel/plugin-syntax-async-generators@^7.8.4": 250 | version "7.8.4" 251 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" 252 | integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== 253 | dependencies: 254 | "@babel/helper-plugin-utils" "^7.8.0" 255 | 256 | "@babel/plugin-syntax-bigint@^7.8.3": 257 | version "7.8.3" 258 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" 259 | integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== 260 | dependencies: 261 | "@babel/helper-plugin-utils" "^7.8.0" 262 | 263 | "@babel/plugin-syntax-class-properties@^7.8.3": 264 | version "7.10.4" 265 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c" 266 | integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA== 267 | dependencies: 268 | "@babel/helper-plugin-utils" "^7.10.4" 269 | 270 | "@babel/plugin-syntax-import-meta@^7.8.3": 271 | version "7.10.4" 272 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" 273 | integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== 274 | dependencies: 275 | "@babel/helper-plugin-utils" "^7.10.4" 276 | 277 | "@babel/plugin-syntax-json-strings@^7.8.3": 278 | version "7.8.3" 279 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" 280 | integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== 281 | dependencies: 282 | "@babel/helper-plugin-utils" "^7.8.0" 283 | 284 | "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": 285 | version "7.10.4" 286 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" 287 | integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== 288 | dependencies: 289 | "@babel/helper-plugin-utils" "^7.10.4" 290 | 291 | "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": 292 | version "7.8.3" 293 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" 294 | integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== 295 | dependencies: 296 | "@babel/helper-plugin-utils" "^7.8.0" 297 | 298 | "@babel/plugin-syntax-numeric-separator@^7.8.3": 299 | version "7.10.4" 300 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" 301 | integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== 302 | dependencies: 303 | "@babel/helper-plugin-utils" "^7.10.4" 304 | 305 | "@babel/plugin-syntax-object-rest-spread@^7.8.3": 306 | version "7.8.3" 307 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" 308 | integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== 309 | dependencies: 310 | "@babel/helper-plugin-utils" "^7.8.0" 311 | 312 | "@babel/plugin-syntax-optional-catch-binding@^7.8.3": 313 | version "7.8.3" 314 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" 315 | integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== 316 | dependencies: 317 | "@babel/helper-plugin-utils" "^7.8.0" 318 | 319 | "@babel/plugin-syntax-optional-chaining@^7.8.3": 320 | version "7.8.3" 321 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" 322 | integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== 323 | dependencies: 324 | "@babel/helper-plugin-utils" "^7.8.0" 325 | 326 | "@babel/plugin-syntax-top-level-await@^7.8.3": 327 | version "7.14.5" 328 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" 329 | integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== 330 | dependencies: 331 | "@babel/helper-plugin-utils" "^7.14.5" 332 | 333 | "@babel/plugin-syntax-typescript@^7.7.2": 334 | version "7.20.0" 335 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz#4e9a0cfc769c85689b77a2e642d24e9f697fc8c7" 336 | integrity sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ== 337 | dependencies: 338 | "@babel/helper-plugin-utils" "^7.19.0" 339 | 340 | "@babel/template@^7.20.7": 341 | version "7.20.7" 342 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" 343 | integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== 344 | dependencies: 345 | "@babel/code-frame" "^7.18.6" 346 | "@babel/parser" "^7.20.7" 347 | "@babel/types" "^7.20.7" 348 | 349 | "@babel/template@^7.22.15": 350 | version "7.22.15" 351 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" 352 | integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== 353 | dependencies: 354 | "@babel/code-frame" "^7.22.13" 355 | "@babel/parser" "^7.22.15" 356 | "@babel/types" "^7.22.15" 357 | 358 | "@babel/template@^7.3.3": 359 | version "7.10.4" 360 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" 361 | integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== 362 | dependencies: 363 | "@babel/code-frame" "^7.10.4" 364 | "@babel/parser" "^7.10.4" 365 | "@babel/types" "^7.10.4" 366 | 367 | "@babel/traverse@^7.20.10", "@babel/traverse@^7.20.12", "@babel/traverse@^7.20.13", "@babel/traverse@^7.7.2": 368 | version "7.23.2" 369 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" 370 | integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== 371 | dependencies: 372 | "@babel/code-frame" "^7.22.13" 373 | "@babel/generator" "^7.23.0" 374 | "@babel/helper-environment-visitor" "^7.22.20" 375 | "@babel/helper-function-name" "^7.23.0" 376 | "@babel/helper-hoist-variables" "^7.22.5" 377 | "@babel/helper-split-export-declaration" "^7.22.6" 378 | "@babel/parser" "^7.23.0" 379 | "@babel/types" "^7.23.0" 380 | debug "^4.1.0" 381 | globals "^11.1.0" 382 | 383 | "@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.3.0", "@babel/types@^7.3.3": 384 | version "7.11.0" 385 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.0.tgz#2ae6bf1ba9ae8c3c43824e5861269871b206e90d" 386 | integrity sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA== 387 | dependencies: 388 | "@babel/helper-validator-identifier" "^7.10.4" 389 | lodash "^4.17.19" 390 | to-fast-properties "^2.0.0" 391 | 392 | "@babel/types@^7.18.6", "@babel/types@^7.20.2", "@babel/types@^7.20.7": 393 | version "7.20.7" 394 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f" 395 | integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg== 396 | dependencies: 397 | "@babel/helper-string-parser" "^7.19.4" 398 | "@babel/helper-validator-identifier" "^7.19.1" 399 | to-fast-properties "^2.0.0" 400 | 401 | "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0": 402 | version "7.23.0" 403 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" 404 | integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== 405 | dependencies: 406 | "@babel/helper-string-parser" "^7.22.5" 407 | "@babel/helper-validator-identifier" "^7.22.20" 408 | to-fast-properties "^2.0.0" 409 | 410 | "@bcoe/v8-coverage@^0.2.3": 411 | version "0.2.3" 412 | resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" 413 | integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== 414 | 415 | "@istanbuljs/load-nyc-config@^1.0.0": 416 | version "1.1.0" 417 | resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" 418 | integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== 419 | dependencies: 420 | camelcase "^5.3.1" 421 | find-up "^4.1.0" 422 | get-package-type "^0.1.0" 423 | js-yaml "^3.13.1" 424 | resolve-from "^5.0.0" 425 | 426 | "@istanbuljs/schema@^0.1.2": 427 | version "0.1.2" 428 | resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" 429 | integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== 430 | 431 | "@jest/console@^27.5.1": 432 | version "27.5.1" 433 | resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" 434 | integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== 435 | dependencies: 436 | "@jest/types" "^27.5.1" 437 | "@types/node" "*" 438 | chalk "^4.0.0" 439 | jest-message-util "^27.5.1" 440 | jest-util "^27.5.1" 441 | slash "^3.0.0" 442 | 443 | "@jest/core@^27.5.1": 444 | version "27.5.1" 445 | resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" 446 | integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== 447 | dependencies: 448 | "@jest/console" "^27.5.1" 449 | "@jest/reporters" "^27.5.1" 450 | "@jest/test-result" "^27.5.1" 451 | "@jest/transform" "^27.5.1" 452 | "@jest/types" "^27.5.1" 453 | "@types/node" "*" 454 | ansi-escapes "^4.2.1" 455 | chalk "^4.0.0" 456 | emittery "^0.8.1" 457 | exit "^0.1.2" 458 | graceful-fs "^4.2.9" 459 | jest-changed-files "^27.5.1" 460 | jest-config "^27.5.1" 461 | jest-haste-map "^27.5.1" 462 | jest-message-util "^27.5.1" 463 | jest-regex-util "^27.5.1" 464 | jest-resolve "^27.5.1" 465 | jest-resolve-dependencies "^27.5.1" 466 | jest-runner "^27.5.1" 467 | jest-runtime "^27.5.1" 468 | jest-snapshot "^27.5.1" 469 | jest-util "^27.5.1" 470 | jest-validate "^27.5.1" 471 | jest-watcher "^27.5.1" 472 | micromatch "^4.0.4" 473 | rimraf "^3.0.0" 474 | slash "^3.0.0" 475 | strip-ansi "^6.0.0" 476 | 477 | "@jest/environment@^27.5.1": 478 | version "27.5.1" 479 | resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" 480 | integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== 481 | dependencies: 482 | "@jest/fake-timers" "^27.5.1" 483 | "@jest/types" "^27.5.1" 484 | "@types/node" "*" 485 | jest-mock "^27.5.1" 486 | 487 | "@jest/fake-timers@^27.5.1": 488 | version "27.5.1" 489 | resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" 490 | integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== 491 | dependencies: 492 | "@jest/types" "^27.5.1" 493 | "@sinonjs/fake-timers" "^8.0.1" 494 | "@types/node" "*" 495 | jest-message-util "^27.5.1" 496 | jest-mock "^27.5.1" 497 | jest-util "^27.5.1" 498 | 499 | "@jest/globals@^27.5.1": 500 | version "27.5.1" 501 | resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" 502 | integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== 503 | dependencies: 504 | "@jest/environment" "^27.5.1" 505 | "@jest/types" "^27.5.1" 506 | expect "^27.5.1" 507 | 508 | "@jest/reporters@^27.5.1": 509 | version "27.5.1" 510 | resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" 511 | integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== 512 | dependencies: 513 | "@bcoe/v8-coverage" "^0.2.3" 514 | "@jest/console" "^27.5.1" 515 | "@jest/test-result" "^27.5.1" 516 | "@jest/transform" "^27.5.1" 517 | "@jest/types" "^27.5.1" 518 | "@types/node" "*" 519 | chalk "^4.0.0" 520 | collect-v8-coverage "^1.0.0" 521 | exit "^0.1.2" 522 | glob "^7.1.2" 523 | graceful-fs "^4.2.9" 524 | istanbul-lib-coverage "^3.0.0" 525 | istanbul-lib-instrument "^5.1.0" 526 | istanbul-lib-report "^3.0.0" 527 | istanbul-lib-source-maps "^4.0.0" 528 | istanbul-reports "^3.1.3" 529 | jest-haste-map "^27.5.1" 530 | jest-resolve "^27.5.1" 531 | jest-util "^27.5.1" 532 | jest-worker "^27.5.1" 533 | slash "^3.0.0" 534 | source-map "^0.6.0" 535 | string-length "^4.0.1" 536 | terminal-link "^2.0.0" 537 | v8-to-istanbul "^8.1.0" 538 | 539 | "@jest/source-map@^27.5.1": 540 | version "27.5.1" 541 | resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" 542 | integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== 543 | dependencies: 544 | callsites "^3.0.0" 545 | graceful-fs "^4.2.9" 546 | source-map "^0.6.0" 547 | 548 | "@jest/test-result@^27.5.1": 549 | version "27.5.1" 550 | resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" 551 | integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== 552 | dependencies: 553 | "@jest/console" "^27.5.1" 554 | "@jest/types" "^27.5.1" 555 | "@types/istanbul-lib-coverage" "^2.0.0" 556 | collect-v8-coverage "^1.0.0" 557 | 558 | "@jest/test-sequencer@^27.5.1": 559 | version "27.5.1" 560 | resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" 561 | integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== 562 | dependencies: 563 | "@jest/test-result" "^27.5.1" 564 | graceful-fs "^4.2.9" 565 | jest-haste-map "^27.5.1" 566 | jest-runtime "^27.5.1" 567 | 568 | "@jest/transform@^27.5.1": 569 | version "27.5.1" 570 | resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" 571 | integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== 572 | dependencies: 573 | "@babel/core" "^7.1.0" 574 | "@jest/types" "^27.5.1" 575 | babel-plugin-istanbul "^6.1.1" 576 | chalk "^4.0.0" 577 | convert-source-map "^1.4.0" 578 | fast-json-stable-stringify "^2.0.0" 579 | graceful-fs "^4.2.9" 580 | jest-haste-map "^27.5.1" 581 | jest-regex-util "^27.5.1" 582 | jest-util "^27.5.1" 583 | micromatch "^4.0.4" 584 | pirates "^4.0.4" 585 | slash "^3.0.0" 586 | source-map "^0.6.1" 587 | write-file-atomic "^3.0.0" 588 | 589 | "@jest/types@^27.5.1": 590 | version "27.5.1" 591 | resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" 592 | integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== 593 | dependencies: 594 | "@types/istanbul-lib-coverage" "^2.0.0" 595 | "@types/istanbul-reports" "^3.0.0" 596 | "@types/node" "*" 597 | "@types/yargs" "^16.0.0" 598 | chalk "^4.0.0" 599 | 600 | "@jridgewell/gen-mapping@^0.1.0": 601 | version "0.1.1" 602 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" 603 | integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== 604 | dependencies: 605 | "@jridgewell/set-array" "^1.0.0" 606 | "@jridgewell/sourcemap-codec" "^1.4.10" 607 | 608 | "@jridgewell/gen-mapping@^0.3.2": 609 | version "0.3.2" 610 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" 611 | integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== 612 | dependencies: 613 | "@jridgewell/set-array" "^1.0.1" 614 | "@jridgewell/sourcemap-codec" "^1.4.10" 615 | "@jridgewell/trace-mapping" "^0.3.9" 616 | 617 | "@jridgewell/resolve-uri@3.1.0": 618 | version "3.1.0" 619 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" 620 | integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== 621 | 622 | "@jridgewell/resolve-uri@^3.1.0": 623 | version "3.1.1" 624 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" 625 | integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== 626 | 627 | "@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": 628 | version "1.1.2" 629 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" 630 | integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== 631 | 632 | "@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": 633 | version "1.4.14" 634 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" 635 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== 636 | 637 | "@jridgewell/sourcemap-codec@^1.4.14": 638 | version "1.4.15" 639 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" 640 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== 641 | 642 | "@jridgewell/trace-mapping@^0.3.17": 643 | version "0.3.20" 644 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" 645 | integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== 646 | dependencies: 647 | "@jridgewell/resolve-uri" "^3.1.0" 648 | "@jridgewell/sourcemap-codec" "^1.4.14" 649 | 650 | "@jridgewell/trace-mapping@^0.3.9": 651 | version "0.3.17" 652 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" 653 | integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== 654 | dependencies: 655 | "@jridgewell/resolve-uri" "3.1.0" 656 | "@jridgewell/sourcemap-codec" "1.4.14" 657 | 658 | "@sinonjs/commons@^1.7.0": 659 | version "1.8.6" 660 | resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" 661 | integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== 662 | dependencies: 663 | type-detect "4.0.8" 664 | 665 | "@sinonjs/fake-timers@^8.0.1": 666 | version "8.1.0" 667 | resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" 668 | integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== 669 | dependencies: 670 | "@sinonjs/commons" "^1.7.0" 671 | 672 | "@tootallnate/once@1": 673 | version "1.1.2" 674 | resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" 675 | integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== 676 | 677 | "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": 678 | version "7.20.0" 679 | resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.0.tgz#61bc5a4cae505ce98e1e36c5445e4bee060d8891" 680 | integrity sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ== 681 | dependencies: 682 | "@babel/parser" "^7.20.7" 683 | "@babel/types" "^7.20.7" 684 | "@types/babel__generator" "*" 685 | "@types/babel__template" "*" 686 | "@types/babel__traverse" "*" 687 | 688 | "@types/babel__generator@*": 689 | version "7.6.1" 690 | resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04" 691 | integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew== 692 | dependencies: 693 | "@babel/types" "^7.0.0" 694 | 695 | "@types/babel__template@*": 696 | version "7.0.2" 697 | resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" 698 | integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== 699 | dependencies: 700 | "@babel/parser" "^7.1.0" 701 | "@babel/types" "^7.0.0" 702 | 703 | "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": 704 | version "7.0.13" 705 | resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.13.tgz#1874914be974a492e1b4cb00585cabb274e8ba18" 706 | integrity sha512-i+zS7t6/s9cdQvbqKDARrcbrPvtJGlbYsMkazo03nTAK3RX9FNrLllXys22uiTGJapPOTZTQ35nHh4ISph4SLQ== 707 | dependencies: 708 | "@babel/types" "^7.3.0" 709 | 710 | "@types/babel__traverse@^7.0.4": 711 | version "7.18.3" 712 | resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.3.tgz#dfc508a85781e5698d5b33443416b6268c4b3e8d" 713 | integrity sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w== 714 | dependencies: 715 | "@babel/types" "^7.3.0" 716 | 717 | "@types/color-name@^1.1.1": 718 | version "1.1.1" 719 | resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" 720 | integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== 721 | 722 | "@types/graceful-fs@^4.1.2": 723 | version "4.1.6" 724 | resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" 725 | integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== 726 | dependencies: 727 | "@types/node" "*" 728 | 729 | "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": 730 | version "2.0.3" 731 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" 732 | integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== 733 | 734 | "@types/istanbul-lib-report@*": 735 | version "3.0.0" 736 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" 737 | integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== 738 | dependencies: 739 | "@types/istanbul-lib-coverage" "*" 740 | 741 | "@types/istanbul-reports@^3.0.0": 742 | version "3.0.0" 743 | resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" 744 | integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== 745 | dependencies: 746 | "@types/istanbul-lib-report" "*" 747 | 748 | "@types/jest@^27.5.1": 749 | version "27.5.2" 750 | resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.5.2.tgz#ec49d29d926500ffb9fd22b84262e862049c026c" 751 | integrity sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA== 752 | dependencies: 753 | jest-matcher-utils "^27.0.0" 754 | pretty-format "^27.0.0" 755 | 756 | "@types/node@*", "@types/node@^14.6.0": 757 | version "14.6.0" 758 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.6.0.tgz#7d4411bf5157339337d7cff864d9ff45f177b499" 759 | integrity sha512-mikldZQitV94akrc4sCcSjtJfsTKt4p+e/s0AGscVA6XArQ9kFclP+ZiYUMnq987rc6QlYxXv/EivqlfSLxpKA== 760 | 761 | "@types/prettier@^2.1.5": 762 | version "2.7.2" 763 | resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0" 764 | integrity sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg== 765 | 766 | "@types/stack-utils@^2.0.0": 767 | version "2.0.1" 768 | resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" 769 | integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== 770 | 771 | "@types/yargs-parser@*": 772 | version "15.0.0" 773 | resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" 774 | integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== 775 | 776 | "@types/yargs@^16.0.0": 777 | version "16.0.5" 778 | resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.5.tgz#12cc86393985735a283e387936398c2f9e5f88e3" 779 | integrity sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ== 780 | dependencies: 781 | "@types/yargs-parser" "*" 782 | 783 | abab@^2.0.3, abab@^2.0.5: 784 | version "2.0.6" 785 | resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" 786 | integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== 787 | 788 | acorn-globals@^6.0.0: 789 | version "6.0.0" 790 | resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" 791 | integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== 792 | dependencies: 793 | acorn "^7.1.1" 794 | acorn-walk "^7.1.1" 795 | 796 | acorn-walk@^7.1.1: 797 | version "7.2.0" 798 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" 799 | integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== 800 | 801 | acorn@^7.1.1: 802 | version "7.4.1" 803 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" 804 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== 805 | 806 | acorn@^8.2.4: 807 | version "8.8.2" 808 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" 809 | integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== 810 | 811 | agent-base@6: 812 | version "6.0.2" 813 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" 814 | integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== 815 | dependencies: 816 | debug "4" 817 | 818 | ansi-escapes@^4.2.1: 819 | version "4.3.1" 820 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" 821 | integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== 822 | dependencies: 823 | type-fest "^0.11.0" 824 | 825 | ansi-regex@^5.0.0, ansi-regex@^5.0.1: 826 | version "5.0.1" 827 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 828 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 829 | 830 | ansi-styles@^3.2.1: 831 | version "3.2.1" 832 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 833 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 834 | dependencies: 835 | color-convert "^1.9.0" 836 | 837 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 838 | version "4.2.1" 839 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" 840 | integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== 841 | dependencies: 842 | "@types/color-name" "^1.1.1" 843 | color-convert "^2.0.1" 844 | 845 | ansi-styles@^5.0.0: 846 | version "5.2.0" 847 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" 848 | integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== 849 | 850 | anymatch@^3.0.3: 851 | version "3.1.1" 852 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" 853 | integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== 854 | dependencies: 855 | normalize-path "^3.0.0" 856 | picomatch "^2.0.4" 857 | 858 | argparse@^1.0.7: 859 | version "1.0.10" 860 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 861 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 862 | dependencies: 863 | sprintf-js "~1.0.2" 864 | 865 | asynckit@^0.4.0: 866 | version "0.4.0" 867 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 868 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== 869 | 870 | babel-jest@^27.5.1: 871 | version "27.5.1" 872 | resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" 873 | integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== 874 | dependencies: 875 | "@jest/transform" "^27.5.1" 876 | "@jest/types" "^27.5.1" 877 | "@types/babel__core" "^7.1.14" 878 | babel-plugin-istanbul "^6.1.1" 879 | babel-preset-jest "^27.5.1" 880 | chalk "^4.0.0" 881 | graceful-fs "^4.2.9" 882 | slash "^3.0.0" 883 | 884 | babel-plugin-istanbul@^6.1.1: 885 | version "6.1.1" 886 | resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" 887 | integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== 888 | dependencies: 889 | "@babel/helper-plugin-utils" "^7.0.0" 890 | "@istanbuljs/load-nyc-config" "^1.0.0" 891 | "@istanbuljs/schema" "^0.1.2" 892 | istanbul-lib-instrument "^5.0.4" 893 | test-exclude "^6.0.0" 894 | 895 | babel-plugin-jest-hoist@^27.5.1: 896 | version "27.5.1" 897 | resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" 898 | integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== 899 | dependencies: 900 | "@babel/template" "^7.3.3" 901 | "@babel/types" "^7.3.3" 902 | "@types/babel__core" "^7.0.0" 903 | "@types/babel__traverse" "^7.0.6" 904 | 905 | babel-preset-current-node-syntax@^1.0.0: 906 | version "1.0.1" 907 | resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" 908 | integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== 909 | dependencies: 910 | "@babel/plugin-syntax-async-generators" "^7.8.4" 911 | "@babel/plugin-syntax-bigint" "^7.8.3" 912 | "@babel/plugin-syntax-class-properties" "^7.8.3" 913 | "@babel/plugin-syntax-import-meta" "^7.8.3" 914 | "@babel/plugin-syntax-json-strings" "^7.8.3" 915 | "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" 916 | "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" 917 | "@babel/plugin-syntax-numeric-separator" "^7.8.3" 918 | "@babel/plugin-syntax-object-rest-spread" "^7.8.3" 919 | "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" 920 | "@babel/plugin-syntax-optional-chaining" "^7.8.3" 921 | "@babel/plugin-syntax-top-level-await" "^7.8.3" 922 | 923 | babel-preset-jest@^27.5.1: 924 | version "27.5.1" 925 | resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" 926 | integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== 927 | dependencies: 928 | babel-plugin-jest-hoist "^27.5.1" 929 | babel-preset-current-node-syntax "^1.0.0" 930 | 931 | balanced-match@^1.0.0: 932 | version "1.0.2" 933 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 934 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 935 | 936 | brace-expansion@^1.1.7: 937 | version "1.1.11" 938 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 939 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 940 | dependencies: 941 | balanced-match "^1.0.0" 942 | concat-map "0.0.1" 943 | 944 | braces@^3.0.2: 945 | version "3.0.2" 946 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 947 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 948 | dependencies: 949 | fill-range "^7.0.1" 950 | 951 | browser-process-hrtime@^1.0.0: 952 | version "1.0.0" 953 | resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" 954 | integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== 955 | 956 | browserslist@^4.21.3: 957 | version "4.21.5" 958 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" 959 | integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== 960 | dependencies: 961 | caniuse-lite "^1.0.30001449" 962 | electron-to-chromium "^1.4.284" 963 | node-releases "^2.0.8" 964 | update-browserslist-db "^1.0.10" 965 | 966 | bs-logger@0.x: 967 | version "0.2.6" 968 | resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" 969 | integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== 970 | dependencies: 971 | fast-json-stable-stringify "2.x" 972 | 973 | bser@2.1.1: 974 | version "2.1.1" 975 | resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" 976 | integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== 977 | dependencies: 978 | node-int64 "^0.4.0" 979 | 980 | buffer-from@^1.0.0: 981 | version "1.1.1" 982 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 983 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 984 | 985 | callsites@^3.0.0: 986 | version "3.1.0" 987 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 988 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 989 | 990 | camelcase@^5.3.1: 991 | version "5.3.1" 992 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 993 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 994 | 995 | camelcase@^6.2.0: 996 | version "6.3.0" 997 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 998 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 999 | 1000 | caniuse-lite@^1.0.30001449: 1001 | version "1.0.30001451" 1002 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001451.tgz#2e197c698fc1373d63e1406d6607ea4617c613f1" 1003 | integrity sha512-XY7UbUpGRatZzoRft//5xOa69/1iGJRBlrieH6QYrkKLIFn3m7OVEJ81dSrKoy2BnKsdbX5cLrOispZNYo9v2w== 1004 | 1005 | chalk@^2.0.0, chalk@^2.4.2: 1006 | version "2.4.2" 1007 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 1008 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 1009 | dependencies: 1010 | ansi-styles "^3.2.1" 1011 | escape-string-regexp "^1.0.5" 1012 | supports-color "^5.3.0" 1013 | 1014 | chalk@^4.0.0: 1015 | version "4.1.0" 1016 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" 1017 | integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== 1018 | dependencies: 1019 | ansi-styles "^4.1.0" 1020 | supports-color "^7.1.0" 1021 | 1022 | char-regex@^1.0.2: 1023 | version "1.0.2" 1024 | resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" 1025 | integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== 1026 | 1027 | ci-info@^3.2.0: 1028 | version "3.7.1" 1029 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.7.1.tgz#708a6cdae38915d597afdf3b145f2f8e1ff55f3f" 1030 | integrity sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w== 1031 | 1032 | cjs-module-lexer@^1.0.0: 1033 | version "1.2.2" 1034 | resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" 1035 | integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== 1036 | 1037 | cliui@^7.0.2: 1038 | version "7.0.4" 1039 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 1040 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 1041 | dependencies: 1042 | string-width "^4.2.0" 1043 | strip-ansi "^6.0.0" 1044 | wrap-ansi "^7.0.0" 1045 | 1046 | co@^4.6.0: 1047 | version "4.6.0" 1048 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 1049 | integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= 1050 | 1051 | collect-v8-coverage@^1.0.0: 1052 | version "1.0.1" 1053 | resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" 1054 | integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== 1055 | 1056 | color-convert@^1.9.0: 1057 | version "1.9.3" 1058 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 1059 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 1060 | dependencies: 1061 | color-name "1.1.3" 1062 | 1063 | color-convert@^2.0.1: 1064 | version "2.0.1" 1065 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 1066 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 1067 | dependencies: 1068 | color-name "~1.1.4" 1069 | 1070 | color-name@1.1.3: 1071 | version "1.1.3" 1072 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 1073 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 1074 | 1075 | color-name@~1.1.4: 1076 | version "1.1.4" 1077 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 1078 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 1079 | 1080 | combined-stream@^1.0.8: 1081 | version "1.0.8" 1082 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 1083 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 1084 | dependencies: 1085 | delayed-stream "~1.0.0" 1086 | 1087 | concat-map@0.0.1: 1088 | version "0.0.1" 1089 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 1090 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 1091 | 1092 | convert-source-map@^1.4.0: 1093 | version "1.9.0" 1094 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" 1095 | integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== 1096 | 1097 | convert-source-map@^1.6.0, convert-source-map@^1.7.0: 1098 | version "1.7.0" 1099 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" 1100 | integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== 1101 | dependencies: 1102 | safe-buffer "~5.1.1" 1103 | 1104 | cross-spawn@^7.0.3: 1105 | version "7.0.3" 1106 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 1107 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 1108 | dependencies: 1109 | path-key "^3.1.0" 1110 | shebang-command "^2.0.0" 1111 | which "^2.0.1" 1112 | 1113 | cssom@^0.4.4: 1114 | version "0.4.4" 1115 | resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" 1116 | integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== 1117 | 1118 | cssom@~0.3.6: 1119 | version "0.3.8" 1120 | resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" 1121 | integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== 1122 | 1123 | cssstyle@^2.3.0: 1124 | version "2.3.0" 1125 | resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" 1126 | integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== 1127 | dependencies: 1128 | cssom "~0.3.6" 1129 | 1130 | data-urls@^2.0.0: 1131 | version "2.0.0" 1132 | resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" 1133 | integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== 1134 | dependencies: 1135 | abab "^2.0.3" 1136 | whatwg-mimetype "^2.3.0" 1137 | whatwg-url "^8.0.0" 1138 | 1139 | debug@4: 1140 | version "4.3.4" 1141 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 1142 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 1143 | dependencies: 1144 | ms "2.1.2" 1145 | 1146 | debug@^4.1.0, debug@^4.1.1: 1147 | version "4.1.1" 1148 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" 1149 | integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== 1150 | dependencies: 1151 | ms "^2.1.1" 1152 | 1153 | decimal.js@^10.2.1: 1154 | version "10.4.3" 1155 | resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" 1156 | integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== 1157 | 1158 | dedent@^0.7.0: 1159 | version "0.7.0" 1160 | resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" 1161 | integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== 1162 | 1163 | deep-is@~0.1.3: 1164 | version "0.1.4" 1165 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 1166 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 1167 | 1168 | deepmerge@^4.2.2: 1169 | version "4.2.2" 1170 | resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" 1171 | integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== 1172 | 1173 | delayed-stream@~1.0.0: 1174 | version "1.0.0" 1175 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 1176 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== 1177 | 1178 | detect-newline@^3.0.0: 1179 | version "3.1.0" 1180 | resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" 1181 | integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== 1182 | 1183 | diff-sequences@^27.5.1: 1184 | version "27.5.1" 1185 | resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" 1186 | integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== 1187 | 1188 | domexception@^2.0.1: 1189 | version "2.0.1" 1190 | resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" 1191 | integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== 1192 | dependencies: 1193 | webidl-conversions "^5.0.0" 1194 | 1195 | electron-to-chromium@^1.4.284: 1196 | version "1.4.292" 1197 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.292.tgz#e3a3dca3780c8ce01e2c1866b5ec2fbe31c423e3" 1198 | integrity sha512-ESWOSyJy5odDlE8wvh5NNAMORv4r6assPwIPGHEMWrWD0SONXcG/xT+9aD9CQyeRwyYDPo6dJT4Bbeg5uevVQQ== 1199 | 1200 | emittery@^0.8.1: 1201 | version "0.8.1" 1202 | resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" 1203 | integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== 1204 | 1205 | emoji-regex@^8.0.0: 1206 | version "8.0.0" 1207 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 1208 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 1209 | 1210 | error-ex@^1.3.1: 1211 | version "1.3.2" 1212 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 1213 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 1214 | dependencies: 1215 | is-arrayish "^0.2.1" 1216 | 1217 | escalade@^3.1.1: 1218 | version "3.1.1" 1219 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 1220 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 1221 | 1222 | escape-string-regexp@^1.0.5: 1223 | version "1.0.5" 1224 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1225 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 1226 | 1227 | escape-string-regexp@^2.0.0: 1228 | version "2.0.0" 1229 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" 1230 | integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== 1231 | 1232 | escodegen@^2.0.0: 1233 | version "2.0.0" 1234 | resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" 1235 | integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== 1236 | dependencies: 1237 | esprima "^4.0.1" 1238 | estraverse "^5.2.0" 1239 | esutils "^2.0.2" 1240 | optionator "^0.8.1" 1241 | optionalDependencies: 1242 | source-map "~0.6.1" 1243 | 1244 | esprima@^4.0.0, esprima@^4.0.1: 1245 | version "4.0.1" 1246 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 1247 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 1248 | 1249 | estraverse@^5.2.0: 1250 | version "5.3.0" 1251 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 1252 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 1253 | 1254 | esutils@^2.0.2: 1255 | version "2.0.3" 1256 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 1257 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 1258 | 1259 | execa@^5.0.0: 1260 | version "5.1.1" 1261 | resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" 1262 | integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== 1263 | dependencies: 1264 | cross-spawn "^7.0.3" 1265 | get-stream "^6.0.0" 1266 | human-signals "^2.1.0" 1267 | is-stream "^2.0.0" 1268 | merge-stream "^2.0.0" 1269 | npm-run-path "^4.0.1" 1270 | onetime "^5.1.2" 1271 | signal-exit "^3.0.3" 1272 | strip-final-newline "^2.0.0" 1273 | 1274 | exit@^0.1.2: 1275 | version "0.1.2" 1276 | resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" 1277 | integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= 1278 | 1279 | expect@^27.5.1: 1280 | version "27.5.1" 1281 | resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" 1282 | integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== 1283 | dependencies: 1284 | "@jest/types" "^27.5.1" 1285 | jest-get-type "^27.5.1" 1286 | jest-matcher-utils "^27.5.1" 1287 | jest-message-util "^27.5.1" 1288 | 1289 | fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: 1290 | version "2.1.0" 1291 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 1292 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 1293 | 1294 | fast-levenshtein@~2.0.6: 1295 | version "2.0.6" 1296 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 1297 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 1298 | 1299 | fb-watchman@^2.0.0: 1300 | version "2.0.1" 1301 | resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" 1302 | integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== 1303 | dependencies: 1304 | bser "2.1.1" 1305 | 1306 | fill-range@^7.0.1: 1307 | version "7.0.1" 1308 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 1309 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 1310 | dependencies: 1311 | to-regex-range "^5.0.1" 1312 | 1313 | find-up@^4.0.0, find-up@^4.1.0: 1314 | version "4.1.0" 1315 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 1316 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 1317 | dependencies: 1318 | locate-path "^5.0.0" 1319 | path-exists "^4.0.0" 1320 | 1321 | form-data@^3.0.0: 1322 | version "3.0.1" 1323 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" 1324 | integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== 1325 | dependencies: 1326 | asynckit "^0.4.0" 1327 | combined-stream "^1.0.8" 1328 | mime-types "^2.1.12" 1329 | 1330 | fs.realpath@^1.0.0: 1331 | version "1.0.0" 1332 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1333 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 1334 | 1335 | fsevents@^2.3.2: 1336 | version "2.3.2" 1337 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 1338 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 1339 | 1340 | function-bind@^1.1.1: 1341 | version "1.1.1" 1342 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1343 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1344 | 1345 | gensync@^1.0.0-beta.2: 1346 | version "1.0.0-beta.2" 1347 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" 1348 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 1349 | 1350 | get-caller-file@^2.0.5: 1351 | version "2.0.5" 1352 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 1353 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 1354 | 1355 | get-package-type@^0.1.0: 1356 | version "0.1.0" 1357 | resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" 1358 | integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== 1359 | 1360 | get-stream@^6.0.0: 1361 | version "6.0.1" 1362 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" 1363 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== 1364 | 1365 | glob@^7.1.1, glob@^7.1.2: 1366 | version "7.2.3" 1367 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 1368 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 1369 | dependencies: 1370 | fs.realpath "^1.0.0" 1371 | inflight "^1.0.4" 1372 | inherits "2" 1373 | minimatch "^3.1.1" 1374 | once "^1.3.0" 1375 | path-is-absolute "^1.0.0" 1376 | 1377 | glob@^7.1.3, glob@^7.1.4: 1378 | version "7.1.6" 1379 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 1380 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 1381 | dependencies: 1382 | fs.realpath "^1.0.0" 1383 | inflight "^1.0.4" 1384 | inherits "2" 1385 | minimatch "^3.0.4" 1386 | once "^1.3.0" 1387 | path-is-absolute "^1.0.0" 1388 | 1389 | globals@^11.1.0: 1390 | version "11.12.0" 1391 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 1392 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 1393 | 1394 | graceful-fs@^4.2.9: 1395 | version "4.2.10" 1396 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" 1397 | integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== 1398 | 1399 | has-flag@^3.0.0: 1400 | version "3.0.0" 1401 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1402 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 1403 | 1404 | has-flag@^4.0.0: 1405 | version "4.0.0" 1406 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1407 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1408 | 1409 | has@^1.0.3: 1410 | version "1.0.3" 1411 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1412 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1413 | dependencies: 1414 | function-bind "^1.1.1" 1415 | 1416 | html-encoding-sniffer@^2.0.1: 1417 | version "2.0.1" 1418 | resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" 1419 | integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== 1420 | dependencies: 1421 | whatwg-encoding "^1.0.5" 1422 | 1423 | html-escaper@^2.0.0: 1424 | version "2.0.2" 1425 | resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" 1426 | integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== 1427 | 1428 | http-proxy-agent@^4.0.1: 1429 | version "4.0.1" 1430 | resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" 1431 | integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== 1432 | dependencies: 1433 | "@tootallnate/once" "1" 1434 | agent-base "6" 1435 | debug "4" 1436 | 1437 | https-proxy-agent@^5.0.0: 1438 | version "5.0.1" 1439 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" 1440 | integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== 1441 | dependencies: 1442 | agent-base "6" 1443 | debug "4" 1444 | 1445 | human-signals@^2.1.0: 1446 | version "2.1.0" 1447 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" 1448 | integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== 1449 | 1450 | iconv-lite@0.4.24: 1451 | version "0.4.24" 1452 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 1453 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 1454 | dependencies: 1455 | safer-buffer ">= 2.1.2 < 3" 1456 | 1457 | import-local@^3.0.2: 1458 | version "3.0.2" 1459 | resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" 1460 | integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== 1461 | dependencies: 1462 | pkg-dir "^4.2.0" 1463 | resolve-cwd "^3.0.0" 1464 | 1465 | imurmurhash@^0.1.4: 1466 | version "0.1.4" 1467 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1468 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 1469 | 1470 | inflight@^1.0.4: 1471 | version "1.0.6" 1472 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1473 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1474 | dependencies: 1475 | once "^1.3.0" 1476 | wrappy "1" 1477 | 1478 | inherits@2: 1479 | version "2.0.4" 1480 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1481 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1482 | 1483 | is-arrayish@^0.2.1: 1484 | version "0.2.1" 1485 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1486 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 1487 | 1488 | is-core-module@^2.9.0: 1489 | version "2.11.0" 1490 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" 1491 | integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== 1492 | dependencies: 1493 | has "^1.0.3" 1494 | 1495 | is-fullwidth-code-point@^3.0.0: 1496 | version "3.0.0" 1497 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1498 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1499 | 1500 | is-generator-fn@^2.0.0: 1501 | version "2.1.0" 1502 | resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" 1503 | integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== 1504 | 1505 | is-number@^7.0.0: 1506 | version "7.0.0" 1507 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1508 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1509 | 1510 | is-potential-custom-element-name@^1.0.1: 1511 | version "1.0.1" 1512 | resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" 1513 | integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== 1514 | 1515 | is-stream@^2.0.0: 1516 | version "2.0.0" 1517 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" 1518 | integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== 1519 | 1520 | is-typedarray@^1.0.0: 1521 | version "1.0.0" 1522 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1523 | integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== 1524 | 1525 | isexe@^2.0.0: 1526 | version "2.0.0" 1527 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1528 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1529 | 1530 | istanbul-lib-coverage@^3.0.0: 1531 | version "3.0.0" 1532 | resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" 1533 | integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== 1534 | 1535 | istanbul-lib-coverage@^3.2.0: 1536 | version "3.2.0" 1537 | resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" 1538 | integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== 1539 | 1540 | istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: 1541 | version "5.2.1" 1542 | resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" 1543 | integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== 1544 | dependencies: 1545 | "@babel/core" "^7.12.3" 1546 | "@babel/parser" "^7.14.7" 1547 | "@istanbuljs/schema" "^0.1.2" 1548 | istanbul-lib-coverage "^3.2.0" 1549 | semver "^6.3.0" 1550 | 1551 | istanbul-lib-report@^3.0.0: 1552 | version "3.0.0" 1553 | resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" 1554 | integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== 1555 | dependencies: 1556 | istanbul-lib-coverage "^3.0.0" 1557 | make-dir "^3.0.0" 1558 | supports-color "^7.1.0" 1559 | 1560 | istanbul-lib-source-maps@^4.0.0: 1561 | version "4.0.0" 1562 | resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" 1563 | integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== 1564 | dependencies: 1565 | debug "^4.1.1" 1566 | istanbul-lib-coverage "^3.0.0" 1567 | source-map "^0.6.1" 1568 | 1569 | istanbul-reports@^3.1.3: 1570 | version "3.1.5" 1571 | resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" 1572 | integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== 1573 | dependencies: 1574 | html-escaper "^2.0.0" 1575 | istanbul-lib-report "^3.0.0" 1576 | 1577 | jest-changed-files@^27.5.1: 1578 | version "27.5.1" 1579 | resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" 1580 | integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== 1581 | dependencies: 1582 | "@jest/types" "^27.5.1" 1583 | execa "^5.0.0" 1584 | throat "^6.0.1" 1585 | 1586 | jest-circus@^27.5.1: 1587 | version "27.5.1" 1588 | resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" 1589 | integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== 1590 | dependencies: 1591 | "@jest/environment" "^27.5.1" 1592 | "@jest/test-result" "^27.5.1" 1593 | "@jest/types" "^27.5.1" 1594 | "@types/node" "*" 1595 | chalk "^4.0.0" 1596 | co "^4.6.0" 1597 | dedent "^0.7.0" 1598 | expect "^27.5.1" 1599 | is-generator-fn "^2.0.0" 1600 | jest-each "^27.5.1" 1601 | jest-matcher-utils "^27.5.1" 1602 | jest-message-util "^27.5.1" 1603 | jest-runtime "^27.5.1" 1604 | jest-snapshot "^27.5.1" 1605 | jest-util "^27.5.1" 1606 | pretty-format "^27.5.1" 1607 | slash "^3.0.0" 1608 | stack-utils "^2.0.3" 1609 | throat "^6.0.1" 1610 | 1611 | jest-cli@^27.5.1: 1612 | version "27.5.1" 1613 | resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" 1614 | integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== 1615 | dependencies: 1616 | "@jest/core" "^27.5.1" 1617 | "@jest/test-result" "^27.5.1" 1618 | "@jest/types" "^27.5.1" 1619 | chalk "^4.0.0" 1620 | exit "^0.1.2" 1621 | graceful-fs "^4.2.9" 1622 | import-local "^3.0.2" 1623 | jest-config "^27.5.1" 1624 | jest-util "^27.5.1" 1625 | jest-validate "^27.5.1" 1626 | prompts "^2.0.1" 1627 | yargs "^16.2.0" 1628 | 1629 | jest-config@^27.5.1: 1630 | version "27.5.1" 1631 | resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" 1632 | integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== 1633 | dependencies: 1634 | "@babel/core" "^7.8.0" 1635 | "@jest/test-sequencer" "^27.5.1" 1636 | "@jest/types" "^27.5.1" 1637 | babel-jest "^27.5.1" 1638 | chalk "^4.0.0" 1639 | ci-info "^3.2.0" 1640 | deepmerge "^4.2.2" 1641 | glob "^7.1.1" 1642 | graceful-fs "^4.2.9" 1643 | jest-circus "^27.5.1" 1644 | jest-environment-jsdom "^27.5.1" 1645 | jest-environment-node "^27.5.1" 1646 | jest-get-type "^27.5.1" 1647 | jest-jasmine2 "^27.5.1" 1648 | jest-regex-util "^27.5.1" 1649 | jest-resolve "^27.5.1" 1650 | jest-runner "^27.5.1" 1651 | jest-util "^27.5.1" 1652 | jest-validate "^27.5.1" 1653 | micromatch "^4.0.4" 1654 | parse-json "^5.2.0" 1655 | pretty-format "^27.5.1" 1656 | slash "^3.0.0" 1657 | strip-json-comments "^3.1.1" 1658 | 1659 | jest-diff@^27.5.1: 1660 | version "27.5.1" 1661 | resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" 1662 | integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== 1663 | dependencies: 1664 | chalk "^4.0.0" 1665 | diff-sequences "^27.5.1" 1666 | jest-get-type "^27.5.1" 1667 | pretty-format "^27.5.1" 1668 | 1669 | jest-docblock@^27.5.1: 1670 | version "27.5.1" 1671 | resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" 1672 | integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== 1673 | dependencies: 1674 | detect-newline "^3.0.0" 1675 | 1676 | jest-each@^27.5.1: 1677 | version "27.5.1" 1678 | resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" 1679 | integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== 1680 | dependencies: 1681 | "@jest/types" "^27.5.1" 1682 | chalk "^4.0.0" 1683 | jest-get-type "^27.5.1" 1684 | jest-util "^27.5.1" 1685 | pretty-format "^27.5.1" 1686 | 1687 | jest-environment-jsdom@^27.5.1: 1688 | version "27.5.1" 1689 | resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" 1690 | integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== 1691 | dependencies: 1692 | "@jest/environment" "^27.5.1" 1693 | "@jest/fake-timers" "^27.5.1" 1694 | "@jest/types" "^27.5.1" 1695 | "@types/node" "*" 1696 | jest-mock "^27.5.1" 1697 | jest-util "^27.5.1" 1698 | jsdom "^16.6.0" 1699 | 1700 | jest-environment-node@^27.5.1: 1701 | version "27.5.1" 1702 | resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" 1703 | integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== 1704 | dependencies: 1705 | "@jest/environment" "^27.5.1" 1706 | "@jest/fake-timers" "^27.5.1" 1707 | "@jest/types" "^27.5.1" 1708 | "@types/node" "*" 1709 | jest-mock "^27.5.1" 1710 | jest-util "^27.5.1" 1711 | 1712 | jest-get-type@^27.5.1: 1713 | version "27.5.1" 1714 | resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" 1715 | integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== 1716 | 1717 | jest-haste-map@^27.5.1: 1718 | version "27.5.1" 1719 | resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" 1720 | integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== 1721 | dependencies: 1722 | "@jest/types" "^27.5.1" 1723 | "@types/graceful-fs" "^4.1.2" 1724 | "@types/node" "*" 1725 | anymatch "^3.0.3" 1726 | fb-watchman "^2.0.0" 1727 | graceful-fs "^4.2.9" 1728 | jest-regex-util "^27.5.1" 1729 | jest-serializer "^27.5.1" 1730 | jest-util "^27.5.1" 1731 | jest-worker "^27.5.1" 1732 | micromatch "^4.0.4" 1733 | walker "^1.0.7" 1734 | optionalDependencies: 1735 | fsevents "^2.3.2" 1736 | 1737 | jest-jasmine2@^27.5.1: 1738 | version "27.5.1" 1739 | resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" 1740 | integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== 1741 | dependencies: 1742 | "@jest/environment" "^27.5.1" 1743 | "@jest/source-map" "^27.5.1" 1744 | "@jest/test-result" "^27.5.1" 1745 | "@jest/types" "^27.5.1" 1746 | "@types/node" "*" 1747 | chalk "^4.0.0" 1748 | co "^4.6.0" 1749 | expect "^27.5.1" 1750 | is-generator-fn "^2.0.0" 1751 | jest-each "^27.5.1" 1752 | jest-matcher-utils "^27.5.1" 1753 | jest-message-util "^27.5.1" 1754 | jest-runtime "^27.5.1" 1755 | jest-snapshot "^27.5.1" 1756 | jest-util "^27.5.1" 1757 | pretty-format "^27.5.1" 1758 | throat "^6.0.1" 1759 | 1760 | jest-leak-detector@^27.5.1: 1761 | version "27.5.1" 1762 | resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" 1763 | integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== 1764 | dependencies: 1765 | jest-get-type "^27.5.1" 1766 | pretty-format "^27.5.1" 1767 | 1768 | jest-matcher-utils@^27.0.0, jest-matcher-utils@^27.5.1: 1769 | version "27.5.1" 1770 | resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" 1771 | integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== 1772 | dependencies: 1773 | chalk "^4.0.0" 1774 | jest-diff "^27.5.1" 1775 | jest-get-type "^27.5.1" 1776 | pretty-format "^27.5.1" 1777 | 1778 | jest-message-util@^27.5.1: 1779 | version "27.5.1" 1780 | resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" 1781 | integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== 1782 | dependencies: 1783 | "@babel/code-frame" "^7.12.13" 1784 | "@jest/types" "^27.5.1" 1785 | "@types/stack-utils" "^2.0.0" 1786 | chalk "^4.0.0" 1787 | graceful-fs "^4.2.9" 1788 | micromatch "^4.0.4" 1789 | pretty-format "^27.5.1" 1790 | slash "^3.0.0" 1791 | stack-utils "^2.0.3" 1792 | 1793 | jest-mock@^27.5.1: 1794 | version "27.5.1" 1795 | resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" 1796 | integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== 1797 | dependencies: 1798 | "@jest/types" "^27.5.1" 1799 | "@types/node" "*" 1800 | 1801 | jest-pnp-resolver@^1.2.2: 1802 | version "1.2.2" 1803 | resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" 1804 | integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== 1805 | 1806 | jest-regex-util@^27.5.1: 1807 | version "27.5.1" 1808 | resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" 1809 | integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== 1810 | 1811 | jest-resolve-dependencies@^27.5.1: 1812 | version "27.5.1" 1813 | resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" 1814 | integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== 1815 | dependencies: 1816 | "@jest/types" "^27.5.1" 1817 | jest-regex-util "^27.5.1" 1818 | jest-snapshot "^27.5.1" 1819 | 1820 | jest-resolve@^27.5.1: 1821 | version "27.5.1" 1822 | resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" 1823 | integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== 1824 | dependencies: 1825 | "@jest/types" "^27.5.1" 1826 | chalk "^4.0.0" 1827 | graceful-fs "^4.2.9" 1828 | jest-haste-map "^27.5.1" 1829 | jest-pnp-resolver "^1.2.2" 1830 | jest-util "^27.5.1" 1831 | jest-validate "^27.5.1" 1832 | resolve "^1.20.0" 1833 | resolve.exports "^1.1.0" 1834 | slash "^3.0.0" 1835 | 1836 | jest-runner@^27.5.1: 1837 | version "27.5.1" 1838 | resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" 1839 | integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== 1840 | dependencies: 1841 | "@jest/console" "^27.5.1" 1842 | "@jest/environment" "^27.5.1" 1843 | "@jest/test-result" "^27.5.1" 1844 | "@jest/transform" "^27.5.1" 1845 | "@jest/types" "^27.5.1" 1846 | "@types/node" "*" 1847 | chalk "^4.0.0" 1848 | emittery "^0.8.1" 1849 | graceful-fs "^4.2.9" 1850 | jest-docblock "^27.5.1" 1851 | jest-environment-jsdom "^27.5.1" 1852 | jest-environment-node "^27.5.1" 1853 | jest-haste-map "^27.5.1" 1854 | jest-leak-detector "^27.5.1" 1855 | jest-message-util "^27.5.1" 1856 | jest-resolve "^27.5.1" 1857 | jest-runtime "^27.5.1" 1858 | jest-util "^27.5.1" 1859 | jest-worker "^27.5.1" 1860 | source-map-support "^0.5.6" 1861 | throat "^6.0.1" 1862 | 1863 | jest-runtime@^27.5.1: 1864 | version "27.5.1" 1865 | resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" 1866 | integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== 1867 | dependencies: 1868 | "@jest/environment" "^27.5.1" 1869 | "@jest/fake-timers" "^27.5.1" 1870 | "@jest/globals" "^27.5.1" 1871 | "@jest/source-map" "^27.5.1" 1872 | "@jest/test-result" "^27.5.1" 1873 | "@jest/transform" "^27.5.1" 1874 | "@jest/types" "^27.5.1" 1875 | chalk "^4.0.0" 1876 | cjs-module-lexer "^1.0.0" 1877 | collect-v8-coverage "^1.0.0" 1878 | execa "^5.0.0" 1879 | glob "^7.1.3" 1880 | graceful-fs "^4.2.9" 1881 | jest-haste-map "^27.5.1" 1882 | jest-message-util "^27.5.1" 1883 | jest-mock "^27.5.1" 1884 | jest-regex-util "^27.5.1" 1885 | jest-resolve "^27.5.1" 1886 | jest-snapshot "^27.5.1" 1887 | jest-util "^27.5.1" 1888 | slash "^3.0.0" 1889 | strip-bom "^4.0.0" 1890 | 1891 | jest-serializer@^27.5.1: 1892 | version "27.5.1" 1893 | resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" 1894 | integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== 1895 | dependencies: 1896 | "@types/node" "*" 1897 | graceful-fs "^4.2.9" 1898 | 1899 | jest-snapshot@^27.5.1: 1900 | version "27.5.1" 1901 | resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" 1902 | integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== 1903 | dependencies: 1904 | "@babel/core" "^7.7.2" 1905 | "@babel/generator" "^7.7.2" 1906 | "@babel/plugin-syntax-typescript" "^7.7.2" 1907 | "@babel/traverse" "^7.7.2" 1908 | "@babel/types" "^7.0.0" 1909 | "@jest/transform" "^27.5.1" 1910 | "@jest/types" "^27.5.1" 1911 | "@types/babel__traverse" "^7.0.4" 1912 | "@types/prettier" "^2.1.5" 1913 | babel-preset-current-node-syntax "^1.0.0" 1914 | chalk "^4.0.0" 1915 | expect "^27.5.1" 1916 | graceful-fs "^4.2.9" 1917 | jest-diff "^27.5.1" 1918 | jest-get-type "^27.5.1" 1919 | jest-haste-map "^27.5.1" 1920 | jest-matcher-utils "^27.5.1" 1921 | jest-message-util "^27.5.1" 1922 | jest-util "^27.5.1" 1923 | natural-compare "^1.4.0" 1924 | pretty-format "^27.5.1" 1925 | semver "^7.3.2" 1926 | 1927 | jest-util@^27.0.0, jest-util@^27.5.1: 1928 | version "27.5.1" 1929 | resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" 1930 | integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== 1931 | dependencies: 1932 | "@jest/types" "^27.5.1" 1933 | "@types/node" "*" 1934 | chalk "^4.0.0" 1935 | ci-info "^3.2.0" 1936 | graceful-fs "^4.2.9" 1937 | picomatch "^2.2.3" 1938 | 1939 | jest-validate@^27.5.1: 1940 | version "27.5.1" 1941 | resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" 1942 | integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== 1943 | dependencies: 1944 | "@jest/types" "^27.5.1" 1945 | camelcase "^6.2.0" 1946 | chalk "^4.0.0" 1947 | jest-get-type "^27.5.1" 1948 | leven "^3.1.0" 1949 | pretty-format "^27.5.1" 1950 | 1951 | jest-watcher@^27.5.1: 1952 | version "27.5.1" 1953 | resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" 1954 | integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== 1955 | dependencies: 1956 | "@jest/test-result" "^27.5.1" 1957 | "@jest/types" "^27.5.1" 1958 | "@types/node" "*" 1959 | ansi-escapes "^4.2.1" 1960 | chalk "^4.0.0" 1961 | jest-util "^27.5.1" 1962 | string-length "^4.0.1" 1963 | 1964 | jest-worker@^27.5.1: 1965 | version "27.5.1" 1966 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" 1967 | integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== 1968 | dependencies: 1969 | "@types/node" "*" 1970 | merge-stream "^2.0.0" 1971 | supports-color "^8.0.0" 1972 | 1973 | jest@^27.5.1: 1974 | version "27.5.1" 1975 | resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" 1976 | integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== 1977 | dependencies: 1978 | "@jest/core" "^27.5.1" 1979 | import-local "^3.0.2" 1980 | jest-cli "^27.5.1" 1981 | 1982 | js-tokens@^4.0.0: 1983 | version "4.0.0" 1984 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1985 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1986 | 1987 | js-yaml@^3.13.1: 1988 | version "3.14.0" 1989 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" 1990 | integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== 1991 | dependencies: 1992 | argparse "^1.0.7" 1993 | esprima "^4.0.0" 1994 | 1995 | jsdom@^16.6.0: 1996 | version "16.7.0" 1997 | resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" 1998 | integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== 1999 | dependencies: 2000 | abab "^2.0.5" 2001 | acorn "^8.2.4" 2002 | acorn-globals "^6.0.0" 2003 | cssom "^0.4.4" 2004 | cssstyle "^2.3.0" 2005 | data-urls "^2.0.0" 2006 | decimal.js "^10.2.1" 2007 | domexception "^2.0.1" 2008 | escodegen "^2.0.0" 2009 | form-data "^3.0.0" 2010 | html-encoding-sniffer "^2.0.1" 2011 | http-proxy-agent "^4.0.1" 2012 | https-proxy-agent "^5.0.0" 2013 | is-potential-custom-element-name "^1.0.1" 2014 | nwsapi "^2.2.0" 2015 | parse5 "6.0.1" 2016 | saxes "^5.0.1" 2017 | symbol-tree "^3.2.4" 2018 | tough-cookie "^4.0.0" 2019 | w3c-hr-time "^1.0.2" 2020 | w3c-xmlserializer "^2.0.0" 2021 | webidl-conversions "^6.1.0" 2022 | whatwg-encoding "^1.0.5" 2023 | whatwg-mimetype "^2.3.0" 2024 | whatwg-url "^8.5.0" 2025 | ws "^7.4.6" 2026 | xml-name-validator "^3.0.0" 2027 | 2028 | jsesc@^2.5.1: 2029 | version "2.5.2" 2030 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 2031 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 2032 | 2033 | json-parse-even-better-errors@^2.3.0: 2034 | version "2.3.0" 2035 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.0.tgz#371873c5ffa44304a6ba12419bcfa95f404ae081" 2036 | integrity sha512-o3aP+RsWDJZayj1SbHNQAI8x0v3T3SKiGoZlNYfbUP1S3omJQ6i9CnqADqkSPaOAxwua4/1YWx5CM7oiChJt2Q== 2037 | 2038 | json5@2.x, json5@^2.2.2: 2039 | version "2.2.3" 2040 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" 2041 | integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== 2042 | 2043 | kleur@^3.0.3: 2044 | version "3.0.3" 2045 | resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" 2046 | integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== 2047 | 2048 | leven@^3.1.0: 2049 | version "3.1.0" 2050 | resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" 2051 | integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== 2052 | 2053 | levn@~0.3.0: 2054 | version "0.3.0" 2055 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 2056 | integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== 2057 | dependencies: 2058 | prelude-ls "~1.1.2" 2059 | type-check "~0.3.2" 2060 | 2061 | lines-and-columns@^1.1.6: 2062 | version "1.1.6" 2063 | resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" 2064 | integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= 2065 | 2066 | locate-path@^5.0.0: 2067 | version "5.0.0" 2068 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 2069 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 2070 | dependencies: 2071 | p-locate "^4.1.0" 2072 | 2073 | lodash.memoize@4.x: 2074 | version "4.1.2" 2075 | resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" 2076 | integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= 2077 | 2078 | lodash@^4.17.19, lodash@^4.7.0: 2079 | version "4.17.21" 2080 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 2081 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 2082 | 2083 | lru-cache@^5.1.1: 2084 | version "5.1.1" 2085 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" 2086 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== 2087 | dependencies: 2088 | yallist "^3.0.2" 2089 | 2090 | lru-cache@^6.0.0: 2091 | version "6.0.0" 2092 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 2093 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 2094 | dependencies: 2095 | yallist "^4.0.0" 2096 | 2097 | make-dir@^3.0.0: 2098 | version "3.1.0" 2099 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 2100 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 2101 | dependencies: 2102 | semver "^6.0.0" 2103 | 2104 | make-error@1.x: 2105 | version "1.3.6" 2106 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 2107 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 2108 | 2109 | makeerror@1.0.12: 2110 | version "1.0.12" 2111 | resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" 2112 | integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== 2113 | dependencies: 2114 | tmpl "1.0.5" 2115 | 2116 | merge-stream@^2.0.0: 2117 | version "2.0.0" 2118 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 2119 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 2120 | 2121 | micromatch@^4.0.4: 2122 | version "4.0.5" 2123 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 2124 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 2125 | dependencies: 2126 | braces "^3.0.2" 2127 | picomatch "^2.3.1" 2128 | 2129 | mime-db@1.52.0: 2130 | version "1.52.0" 2131 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 2132 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 2133 | 2134 | mime-types@^2.1.12: 2135 | version "2.1.35" 2136 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 2137 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 2138 | dependencies: 2139 | mime-db "1.52.0" 2140 | 2141 | mimic-fn@^2.1.0: 2142 | version "2.1.0" 2143 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 2144 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 2145 | 2146 | minimatch@^3.0.4, minimatch@^3.1.1: 2147 | version "3.1.2" 2148 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 2149 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 2150 | dependencies: 2151 | brace-expansion "^1.1.7" 2152 | 2153 | ms@2.1.2, ms@^2.1.1: 2154 | version "2.1.2" 2155 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 2156 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 2157 | 2158 | natural-compare@^1.4.0: 2159 | version "1.4.0" 2160 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 2161 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 2162 | 2163 | node-int64@^0.4.0: 2164 | version "0.4.0" 2165 | resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" 2166 | integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= 2167 | 2168 | node-releases@^2.0.8: 2169 | version "2.0.10" 2170 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" 2171 | integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== 2172 | 2173 | normalize-path@^3.0.0: 2174 | version "3.0.0" 2175 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 2176 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 2177 | 2178 | npm-run-path@^4.0.1: 2179 | version "4.0.1" 2180 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" 2181 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== 2182 | dependencies: 2183 | path-key "^3.0.0" 2184 | 2185 | nwsapi@^2.2.0: 2186 | version "2.2.2" 2187 | resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" 2188 | integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw== 2189 | 2190 | once@^1.3.0: 2191 | version "1.4.0" 2192 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 2193 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 2194 | dependencies: 2195 | wrappy "1" 2196 | 2197 | onetime@^5.1.2: 2198 | version "5.1.2" 2199 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 2200 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 2201 | dependencies: 2202 | mimic-fn "^2.1.0" 2203 | 2204 | optionator@^0.8.1: 2205 | version "0.8.3" 2206 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" 2207 | integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== 2208 | dependencies: 2209 | deep-is "~0.1.3" 2210 | fast-levenshtein "~2.0.6" 2211 | levn "~0.3.0" 2212 | prelude-ls "~1.1.2" 2213 | type-check "~0.3.2" 2214 | word-wrap "~1.2.3" 2215 | 2216 | p-limit@^2.2.0: 2217 | version "2.3.0" 2218 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 2219 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 2220 | dependencies: 2221 | p-try "^2.0.0" 2222 | 2223 | p-locate@^4.1.0: 2224 | version "4.1.0" 2225 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 2226 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 2227 | dependencies: 2228 | p-limit "^2.2.0" 2229 | 2230 | p-try@^2.0.0: 2231 | version "2.2.0" 2232 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 2233 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 2234 | 2235 | parse-json@^5.2.0: 2236 | version "5.2.0" 2237 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" 2238 | integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== 2239 | dependencies: 2240 | "@babel/code-frame" "^7.0.0" 2241 | error-ex "^1.3.1" 2242 | json-parse-even-better-errors "^2.3.0" 2243 | lines-and-columns "^1.1.6" 2244 | 2245 | parse5@6.0.1: 2246 | version "6.0.1" 2247 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" 2248 | integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== 2249 | 2250 | path-exists@^4.0.0: 2251 | version "4.0.0" 2252 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 2253 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 2254 | 2255 | path-is-absolute@^1.0.0: 2256 | version "1.0.1" 2257 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2258 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 2259 | 2260 | path-key@^3.0.0, path-key@^3.1.0: 2261 | version "3.1.1" 2262 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 2263 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 2264 | 2265 | path-parse@^1.0.7: 2266 | version "1.0.7" 2267 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 2268 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 2269 | 2270 | picocolors@^1.0.0: 2271 | version "1.0.0" 2272 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 2273 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 2274 | 2275 | picomatch@^2.0.4: 2276 | version "2.2.2" 2277 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" 2278 | integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== 2279 | 2280 | picomatch@^2.2.3, picomatch@^2.3.1: 2281 | version "2.3.1" 2282 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 2283 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 2284 | 2285 | pirates@^4.0.4: 2286 | version "4.0.5" 2287 | resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" 2288 | integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== 2289 | 2290 | pkg-dir@^4.2.0: 2291 | version "4.2.0" 2292 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" 2293 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 2294 | dependencies: 2295 | find-up "^4.0.0" 2296 | 2297 | prelude-ls@~1.1.2: 2298 | version "1.1.2" 2299 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 2300 | integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== 2301 | 2302 | pretty-format@^27.0.0, pretty-format@^27.5.1: 2303 | version "27.5.1" 2304 | resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" 2305 | integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== 2306 | dependencies: 2307 | ansi-regex "^5.0.1" 2308 | ansi-styles "^5.0.0" 2309 | react-is "^17.0.1" 2310 | 2311 | prompts@^2.0.1: 2312 | version "2.3.2" 2313 | resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" 2314 | integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA== 2315 | dependencies: 2316 | kleur "^3.0.3" 2317 | sisteransi "^1.0.4" 2318 | 2319 | psl@^1.1.33: 2320 | version "1.9.0" 2321 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" 2322 | integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== 2323 | 2324 | punycode@^2.1.1: 2325 | version "2.3.0" 2326 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" 2327 | integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== 2328 | 2329 | querystringify@^2.1.1: 2330 | version "2.2.0" 2331 | resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" 2332 | integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== 2333 | 2334 | react-is@^17.0.1: 2335 | version "17.0.2" 2336 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" 2337 | integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== 2338 | 2339 | require-directory@^2.1.1: 2340 | version "2.1.1" 2341 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 2342 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 2343 | 2344 | requires-port@^1.0.0: 2345 | version "1.0.0" 2346 | resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" 2347 | integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== 2348 | 2349 | resolve-cwd@^3.0.0: 2350 | version "3.0.0" 2351 | resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" 2352 | integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== 2353 | dependencies: 2354 | resolve-from "^5.0.0" 2355 | 2356 | resolve-from@^5.0.0: 2357 | version "5.0.0" 2358 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" 2359 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== 2360 | 2361 | resolve.exports@^1.1.0: 2362 | version "1.1.1" 2363 | resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" 2364 | integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== 2365 | 2366 | resolve@^1.20.0: 2367 | version "1.22.1" 2368 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" 2369 | integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== 2370 | dependencies: 2371 | is-core-module "^2.9.0" 2372 | path-parse "^1.0.7" 2373 | supports-preserve-symlinks-flag "^1.0.0" 2374 | 2375 | rimraf@^3.0.0: 2376 | version "3.0.2" 2377 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 2378 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 2379 | dependencies: 2380 | glob "^7.1.3" 2381 | 2382 | safe-buffer@~5.1.1: 2383 | version "5.1.2" 2384 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 2385 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 2386 | 2387 | "safer-buffer@>= 2.1.2 < 3": 2388 | version "2.1.2" 2389 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 2390 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 2391 | 2392 | saxes@^5.0.1: 2393 | version "5.0.1" 2394 | resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" 2395 | integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== 2396 | dependencies: 2397 | xmlchars "^2.2.0" 2398 | 2399 | semver@7.x: 2400 | version "7.3.4" 2401 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" 2402 | integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== 2403 | dependencies: 2404 | lru-cache "^6.0.0" 2405 | 2406 | semver@^6.0.0, semver@^6.3.0: 2407 | version "6.3.0" 2408 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 2409 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 2410 | 2411 | semver@^7.3.2: 2412 | version "7.3.8" 2413 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" 2414 | integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== 2415 | dependencies: 2416 | lru-cache "^6.0.0" 2417 | 2418 | shebang-command@^2.0.0: 2419 | version "2.0.0" 2420 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 2421 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 2422 | dependencies: 2423 | shebang-regex "^3.0.0" 2424 | 2425 | shebang-regex@^3.0.0: 2426 | version "3.0.0" 2427 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 2428 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 2429 | 2430 | signal-exit@^3.0.2, signal-exit@^3.0.3: 2431 | version "3.0.7" 2432 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 2433 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 2434 | 2435 | sisteransi@^1.0.4: 2436 | version "1.0.5" 2437 | resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" 2438 | integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== 2439 | 2440 | slash@^3.0.0: 2441 | version "3.0.0" 2442 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 2443 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 2444 | 2445 | source-map-support@^0.5.6: 2446 | version "0.5.21" 2447 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" 2448 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 2449 | dependencies: 2450 | buffer-from "^1.0.0" 2451 | source-map "^0.6.0" 2452 | 2453 | source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: 2454 | version "0.6.1" 2455 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2456 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 2457 | 2458 | source-map@^0.7.3: 2459 | version "0.7.4" 2460 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" 2461 | integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== 2462 | 2463 | sprintf-js@~1.0.2: 2464 | version "1.0.3" 2465 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2466 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 2467 | 2468 | stack-utils@^2.0.3: 2469 | version "2.0.6" 2470 | resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" 2471 | integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== 2472 | dependencies: 2473 | escape-string-regexp "^2.0.0" 2474 | 2475 | string-length@^4.0.1: 2476 | version "4.0.1" 2477 | resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1" 2478 | integrity sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw== 2479 | dependencies: 2480 | char-regex "^1.0.2" 2481 | strip-ansi "^6.0.0" 2482 | 2483 | string-width@^4.1.0, string-width@^4.2.0: 2484 | version "4.2.0" 2485 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" 2486 | integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== 2487 | dependencies: 2488 | emoji-regex "^8.0.0" 2489 | is-fullwidth-code-point "^3.0.0" 2490 | strip-ansi "^6.0.0" 2491 | 2492 | strip-ansi@^6.0.0: 2493 | version "6.0.0" 2494 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" 2495 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== 2496 | dependencies: 2497 | ansi-regex "^5.0.0" 2498 | 2499 | strip-bom@^4.0.0: 2500 | version "4.0.0" 2501 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" 2502 | integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== 2503 | 2504 | strip-final-newline@^2.0.0: 2505 | version "2.0.0" 2506 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" 2507 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== 2508 | 2509 | strip-json-comments@^3.1.1: 2510 | version "3.1.1" 2511 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 2512 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 2513 | 2514 | supports-color@^5.3.0: 2515 | version "5.5.0" 2516 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2517 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2518 | dependencies: 2519 | has-flag "^3.0.0" 2520 | 2521 | supports-color@^7.0.0: 2522 | version "7.2.0" 2523 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 2524 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 2525 | dependencies: 2526 | has-flag "^4.0.0" 2527 | 2528 | supports-color@^7.1.0: 2529 | version "7.1.0" 2530 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" 2531 | integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== 2532 | dependencies: 2533 | has-flag "^4.0.0" 2534 | 2535 | supports-color@^8.0.0: 2536 | version "8.1.1" 2537 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 2538 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 2539 | dependencies: 2540 | has-flag "^4.0.0" 2541 | 2542 | supports-hyperlinks@^2.0.0: 2543 | version "2.3.0" 2544 | resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" 2545 | integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== 2546 | dependencies: 2547 | has-flag "^4.0.0" 2548 | supports-color "^7.0.0" 2549 | 2550 | supports-preserve-symlinks-flag@^1.0.0: 2551 | version "1.0.0" 2552 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 2553 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 2554 | 2555 | symbol-tree@^3.2.4: 2556 | version "3.2.4" 2557 | resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" 2558 | integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== 2559 | 2560 | terminal-link@^2.0.0: 2561 | version "2.1.1" 2562 | resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" 2563 | integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== 2564 | dependencies: 2565 | ansi-escapes "^4.2.1" 2566 | supports-hyperlinks "^2.0.0" 2567 | 2568 | test-exclude@^6.0.0: 2569 | version "6.0.0" 2570 | resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" 2571 | integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== 2572 | dependencies: 2573 | "@istanbuljs/schema" "^0.1.2" 2574 | glob "^7.1.4" 2575 | minimatch "^3.0.4" 2576 | 2577 | throat@^6.0.1: 2578 | version "6.0.2" 2579 | resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" 2580 | integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== 2581 | 2582 | tmpl@1.0.5: 2583 | version "1.0.5" 2584 | resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" 2585 | integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== 2586 | 2587 | to-fast-properties@^2.0.0: 2588 | version "2.0.0" 2589 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 2590 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= 2591 | 2592 | to-regex-range@^5.0.1: 2593 | version "5.0.1" 2594 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 2595 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2596 | dependencies: 2597 | is-number "^7.0.0" 2598 | 2599 | tough-cookie@^4.0.0: 2600 | version "4.1.2" 2601 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" 2602 | integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== 2603 | dependencies: 2604 | psl "^1.1.33" 2605 | punycode "^2.1.1" 2606 | universalify "^0.2.0" 2607 | url-parse "^1.5.3" 2608 | 2609 | tr46@^2.1.0: 2610 | version "2.1.0" 2611 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" 2612 | integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== 2613 | dependencies: 2614 | punycode "^2.1.1" 2615 | 2616 | ts-jest@^27.1.5: 2617 | version "27.1.5" 2618 | resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.1.5.tgz#0ddf1b163fbaae3d5b7504a1e65c914a95cff297" 2619 | integrity sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA== 2620 | dependencies: 2621 | bs-logger "0.x" 2622 | fast-json-stable-stringify "2.x" 2623 | jest-util "^27.0.0" 2624 | json5 "2.x" 2625 | lodash.memoize "4.x" 2626 | make-error "1.x" 2627 | semver "7.x" 2628 | yargs-parser "20.x" 2629 | 2630 | type-check@~0.3.2: 2631 | version "0.3.2" 2632 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 2633 | integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== 2634 | dependencies: 2635 | prelude-ls "~1.1.2" 2636 | 2637 | type-detect@4.0.8: 2638 | version "4.0.8" 2639 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 2640 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 2641 | 2642 | type-fest@^0.11.0: 2643 | version "0.11.0" 2644 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" 2645 | integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== 2646 | 2647 | typedarray-to-buffer@^3.1.5: 2648 | version "3.1.5" 2649 | resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" 2650 | integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== 2651 | dependencies: 2652 | is-typedarray "^1.0.0" 2653 | 2654 | typescript@^4.0.2: 2655 | version "4.0.2" 2656 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.2.tgz#7ea7c88777c723c681e33bf7988be5d008d05ac2" 2657 | integrity sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ== 2658 | 2659 | universalify@^0.2.0: 2660 | version "0.2.0" 2661 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" 2662 | integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== 2663 | 2664 | update-browserslist-db@^1.0.10: 2665 | version "1.0.10" 2666 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" 2667 | integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== 2668 | dependencies: 2669 | escalade "^3.1.1" 2670 | picocolors "^1.0.0" 2671 | 2672 | url-parse@^1.5.3: 2673 | version "1.5.10" 2674 | resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" 2675 | integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== 2676 | dependencies: 2677 | querystringify "^2.1.1" 2678 | requires-port "^1.0.0" 2679 | 2680 | v8-to-istanbul@^8.1.0: 2681 | version "8.1.1" 2682 | resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" 2683 | integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== 2684 | dependencies: 2685 | "@types/istanbul-lib-coverage" "^2.0.1" 2686 | convert-source-map "^1.6.0" 2687 | source-map "^0.7.3" 2688 | 2689 | w3c-hr-time@^1.0.2: 2690 | version "1.0.2" 2691 | resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" 2692 | integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== 2693 | dependencies: 2694 | browser-process-hrtime "^1.0.0" 2695 | 2696 | w3c-xmlserializer@^2.0.0: 2697 | version "2.0.0" 2698 | resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" 2699 | integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== 2700 | dependencies: 2701 | xml-name-validator "^3.0.0" 2702 | 2703 | walker@^1.0.7: 2704 | version "1.0.8" 2705 | resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" 2706 | integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== 2707 | dependencies: 2708 | makeerror "1.0.12" 2709 | 2710 | webidl-conversions@^5.0.0: 2711 | version "5.0.0" 2712 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" 2713 | integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== 2714 | 2715 | webidl-conversions@^6.1.0: 2716 | version "6.1.0" 2717 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" 2718 | integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== 2719 | 2720 | whatwg-encoding@^1.0.5: 2721 | version "1.0.5" 2722 | resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" 2723 | integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== 2724 | dependencies: 2725 | iconv-lite "0.4.24" 2726 | 2727 | whatwg-mimetype@^2.3.0: 2728 | version "2.3.0" 2729 | resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" 2730 | integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== 2731 | 2732 | whatwg-url@^8.0.0, whatwg-url@^8.5.0: 2733 | version "8.7.0" 2734 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" 2735 | integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== 2736 | dependencies: 2737 | lodash "^4.7.0" 2738 | tr46 "^2.1.0" 2739 | webidl-conversions "^6.1.0" 2740 | 2741 | which@^2.0.1: 2742 | version "2.0.2" 2743 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2744 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2745 | dependencies: 2746 | isexe "^2.0.0" 2747 | 2748 | word-wrap@~1.2.3: 2749 | version "1.2.3" 2750 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 2751 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 2752 | 2753 | wrap-ansi@^7.0.0: 2754 | version "7.0.0" 2755 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 2756 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 2757 | dependencies: 2758 | ansi-styles "^4.0.0" 2759 | string-width "^4.1.0" 2760 | strip-ansi "^6.0.0" 2761 | 2762 | wrappy@1: 2763 | version "1.0.2" 2764 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2765 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 2766 | 2767 | write-file-atomic@^3.0.0: 2768 | version "3.0.3" 2769 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" 2770 | integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== 2771 | dependencies: 2772 | imurmurhash "^0.1.4" 2773 | is-typedarray "^1.0.0" 2774 | signal-exit "^3.0.2" 2775 | typedarray-to-buffer "^3.1.5" 2776 | 2777 | ws@^7.4.6: 2778 | version "7.5.9" 2779 | resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" 2780 | integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== 2781 | 2782 | xml-name-validator@^3.0.0: 2783 | version "3.0.0" 2784 | resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" 2785 | integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== 2786 | 2787 | xmlchars@^2.2.0: 2788 | version "2.2.0" 2789 | resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" 2790 | integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== 2791 | 2792 | y18n@^5.0.5: 2793 | version "5.0.8" 2794 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 2795 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 2796 | 2797 | yallist@^3.0.2: 2798 | version "3.1.1" 2799 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" 2800 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== 2801 | 2802 | yallist@^4.0.0: 2803 | version "4.0.0" 2804 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 2805 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 2806 | 2807 | yargs-parser@20.x, yargs-parser@^20.2.2: 2808 | version "20.2.9" 2809 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" 2810 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== 2811 | 2812 | yargs@^16.2.0: 2813 | version "16.2.0" 2814 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" 2815 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 2816 | dependencies: 2817 | cliui "^7.0.2" 2818 | escalade "^3.1.1" 2819 | get-caller-file "^2.0.5" 2820 | require-directory "^2.1.1" 2821 | string-width "^4.2.0" 2822 | y18n "^5.0.5" 2823 | yargs-parser "^20.2.2" 2824 | --------------------------------------------------------------------------------