├── .gitignore ├── .prettierignore ├── README.md ├── generate ├── jest.config.ts ├── package.json ├── prettier.config.js ├── src ├── collapse.ts ├── config.ts ├── enum.ts ├── file.ts ├── logger.ts ├── sum-types.ts ├── test │ ├── config.collapse.json │ ├── config.collapse.ts │ ├── config.export.declare.json │ ├── config.export.declare.ts │ ├── config.json │ ├── config.name.json │ ├── config.name.ts │ ├── config.sumtype.json │ ├── config.sumtype.ts │ ├── configs │ │ ├── config.collapse.json │ │ ├── config.empty.2.json │ │ ├── config.empty.json │ │ ├── config.export.declare.json │ │ ├── config.name.json │ │ └── config.sumtype.json │ ├── create-data.ts │ ├── no-config.2.ts │ ├── no-config.4.ts │ ├── results │ │ ├── config.collapse.ts │ │ ├── config.empty.2.ts │ │ └── config.empty.ts │ ├── run.ts │ └── undefined.spec.ts ├── types.ts ├── undefined-runner.ts ├── undefined.ts ├── unions.ts └── utils.ts ├── tsconfig.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | out 3 | example_data 4 | coverage 5 | dist 6 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | src/test/results 2 | src/test/configs 3 | 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # undefined 2 | 3 | A project to turn a file of JSON responses into TypeScript types 4 | 5 | ## Warning on code 6 | I haven't really tried to organize this code. I made this code strictly as i 7 | learned more about the problem space. So the code looks like exploratory code, 8 | not production ready code. 9 | 10 | To me, it seems like there is going to be a several pass compiler for this to 11 | be a real deal here. 12 | 13 | ### I am unsure how much i want to pursue this beyond my needs 14 | My needs have been met, i am unsure if I want to pursue this much further. 15 | 16 | If anyone is interested in this, i can certainly help you get ramped up, 17 | whisper me twitter 18 | 19 | ## Union Collapsing is really hard... 20 | Its currently disabled because its creating incorrect types. But i think i am 21 | pretty dang close to it being correct. 22 | 23 | ## Why create this? 24 | 25 | I have a new database at Netflix with +100 unique events without definitions. 26 | I will define them... 27 | 28 | Here is a reason for why you could use it: 29 | 30 | 1. You have too many JSON objects to develop types for other than naming. 31 | 2. You may have enums that need to get pulled out. 32 | 3. You want as compact possible representation 33 | 34 | ## How To Use 35 | 36 | 1. Clone 37 | 38 | ``` 39 | git clone git@github.com:ThePrimeagen/undefined.git 40 | ``` 41 | 42 | 2. Dependency installation 43 | 44 | ``` 45 | yarn install 46 | ``` 47 | 48 | 3. Have a file filled with json responses (check out `out`) 49 | 50 | 4. The data can be handed in a few ways 51 | 52 | ``` 53 | cat | npx ts-node src/undefined.ts stdin 54 | npx ts-node src/undefined.ts 55 | ``` 56 | 57 | 5. You want to save this to a file? 58 | ``` 59 | npx ts-node src/undefined.ts > types.d.ts 60 | ``` 61 | 62 | ## Enums 63 | 64 | You can specify what fields need to be lifted into enums. I make the assumption 65 | that enums are likely string values (though there is a case for me to fix this, 66 | PRs will be merged with little regard) 67 | 68 | ``` 69 | npx ts-node src/undefined.ts --enums Foo,Bar > types.d.ts 70 | ``` 71 | 72 | This will take any top level fields on objects and attempt to pull out the 73 | values, convert it into an enum, put at top of definitions, and replace their 74 | type (usually string) as the enum. 75 | 76 | ## There is an issue 77 | 78 | Fix it and make a PR. The code is shitty because I rage wrote it all in ~1 hour on twitch. 79 | 80 | [ThePrimeagen](https://twitch.tv/ThePrimeagen) 81 | 82 | ## Support 83 | 84 | Github sponsor or twitch prime babe! 85 | -------------------------------------------------------------------------------- /generate: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const fs = require("fs"); 4 | const path = require("path"); 5 | const execSync = require("child_process").execSync; 6 | 7 | const config = JSON. 8 | parse(fs.readFileSync(path.join(__dirname, "src", "test", "config.json")).toString()).config; 9 | 10 | 11 | for (let i = 0; i < config.length; ++i) { 12 | const c = config[i]; 13 | console.log("generating", c); 14 | execSync(`npx ts-node src/test/create-data.ts | npx ts-node src/undefined.ts -c ${c.config} | tee ${c.results}`); 15 | } 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /jest.config.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | export default { 7 | // All imported modules in your tests should be mocked automatically 8 | // automock: false, 9 | 10 | // Stop running tests after `n` failures 11 | // bail: 0, 12 | 13 | // The directory where Jest should store its cached dependency information 14 | // cacheDirectory: "/tmp/jest_rt", 15 | 16 | // Automatically clear mock calls, instances, contexts and results before every test 17 | clearMocks: true, 18 | 19 | // Indicates whether the coverage information should be collected while executing the test 20 | collectCoverage: true, 21 | 22 | // An array of glob patterns indicating a set of files for which coverage information should be collected 23 | // collectCoverageFrom: undefined, 24 | 25 | // The directory where Jest should output its coverage files 26 | coverageDirectory: "coverage", 27 | 28 | // An array of regexp pattern strings used to skip coverage collection 29 | // coveragePathIgnorePatterns: [ 30 | // "/node_modules/" 31 | // ], 32 | 33 | // Indicates which provider should be used to instrument code for coverage 34 | // coverageProvider: "babel", 35 | 36 | // A list of reporter names that Jest uses when writing coverage reports 37 | // coverageReporters: [ 38 | // "json", 39 | // "text", 40 | // "lcov", 41 | // "clover" 42 | // ], 43 | 44 | // An object that configures minimum threshold enforcement for coverage results 45 | // coverageThreshold: undefined, 46 | 47 | // A path to a custom dependency extractor 48 | // dependencyExtractor: undefined, 49 | 50 | // Make calling deprecated APIs throw helpful error messages 51 | // errorOnDeprecated: false, 52 | 53 | // The default configuration for fake timers 54 | // fakeTimers: { 55 | // "enableGlobally": false 56 | // }, 57 | 58 | // Force coverage collection from ignored files using an array of glob patterns 59 | // forceCoverageMatch: [], 60 | 61 | // A path to a module which exports an async function that is triggered once before all test suites 62 | // globalSetup: undefined, 63 | 64 | // A path to a module which exports an async function that is triggered once after all test suites 65 | // globalTeardown: undefined, 66 | 67 | // A set of global variables that need to be available in all test environments 68 | // globals: {}, 69 | 70 | // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. 71 | // maxWorkers: "50%", 72 | 73 | // An array of directory names to be searched recursively up from the requiring module's location 74 | // moduleDirectories: [ 75 | // "node_modules" 76 | // ], 77 | 78 | // An array of file extensions your modules use 79 | // moduleFileExtensions: [ 80 | // "js", 81 | // "mjs", 82 | // "cjs", 83 | // "jsx", 84 | // "ts", 85 | // "tsx", 86 | // "json", 87 | // "node" 88 | // ], 89 | 90 | // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module 91 | // moduleNameMapper: {}, 92 | 93 | // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader 94 | // modulePathIgnorePatterns: [], 95 | 96 | // Activates notifications for test results 97 | // notify: false, 98 | 99 | // An enum that specifies notification mode. Requires { notify: true } 100 | // notifyMode: "failure-change", 101 | 102 | // A preset that is used as a base for Jest's configuration 103 | preset: "ts-jest", 104 | 105 | // Run tests from one or more projects 106 | // projects: undefined, 107 | 108 | // Use this configuration option to add custom reporters to Jest 109 | // reporters: undefined, 110 | 111 | // Automatically reset mock state before every test 112 | // resetMocks: false, 113 | 114 | // Reset the module registry before running each individual test 115 | // resetModules: false, 116 | 117 | // A path to a custom resolver 118 | // resolver: undefined, 119 | 120 | // Automatically restore mock state and implementation before every test 121 | // restoreMocks: false, 122 | 123 | // The root directory that Jest should scan for tests and modules within 124 | // rootDir: undefined, 125 | 126 | // A list of paths to directories that Jest should use to search for files in 127 | // roots: [ 128 | // "" 129 | // ], 130 | 131 | // Allows you to use a custom runner instead of Jest's default test runner 132 | // runner: "jest-runner", 133 | 134 | // The paths to modules that run some code to configure or set up the testing environment before each test 135 | // setupFiles: [], 136 | 137 | // A list of paths to modules that run some code to configure or set up the testing framework before each test 138 | // setupFilesAfterEnv: [], 139 | 140 | // The number of seconds after which a test is considered as slow and reported as such in the results. 141 | // slowTestThreshold: 5, 142 | 143 | // A list of paths to snapshot serializer modules Jest should use for snapshot testing 144 | // snapshotSerializers: [], 145 | 146 | // The test environment that will be used for testing 147 | // testEnvironment: "jest-environment-node", 148 | 149 | // Options that will be passed to the testEnvironment 150 | // testEnvironmentOptions: {}, 151 | 152 | // Adds a location field to test results 153 | // testLocationInResults: false, 154 | 155 | // The glob patterns Jest uses to detect test files 156 | // testMatch: [ 157 | // "**/__tests__/**/*.[jt]s?(x)", 158 | // "**/?(*.)+(spec|test).[tj]s?(x)" 159 | // ], 160 | 161 | // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped 162 | // testPathIgnorePatterns: [ 163 | // "/node_modules/" 164 | // ], 165 | 166 | // The regexp pattern or array of patterns that Jest uses to detect test files 167 | // testRegex: [], 168 | 169 | // This option allows the use of a custom results processor 170 | // testResultsProcessor: undefined, 171 | 172 | // This option allows use of a custom test runner 173 | // testRunner: "jest-circus/runner", 174 | 175 | // A map from regular expressions to paths to transformers 176 | // transform: undefined, 177 | 178 | // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation 179 | // transformIgnorePatterns: [ 180 | // "/node_modules/", 181 | // "\\.pnp\\.[^\\/]+$" 182 | // ], 183 | 184 | // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them 185 | // unmockedModulePathPatterns: undefined, 186 | 187 | // Indicates whether each individual test should be reported during the run 188 | // verbose: undefined, 189 | 190 | // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode 191 | // watchPathIgnorePatterns: [], 192 | 193 | // Whether to use watchman for file crawling 194 | // watchman: true, 195 | }; 196 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@primeagen/undefined", 3 | "version": "1.0.8", 4 | "main": "dist/src/undefined.js", 5 | "repository": "https://github.com/ThePrimeagen/undefined", 6 | "author": "", 7 | "license": "MIT", 8 | "files": [ 9 | "dist/**/*.js", 10 | "dist/**/*d.ts" 11 | ], 12 | "dependencies": { 13 | "command-line-args": "^5.2.1", 14 | "lodash.isequal": "^4.5.0" 15 | }, 16 | "devDependencies": { 17 | "@swc-node/register": "^1.5.4", 18 | "@swc/core": "^1.3.20", 19 | "@types/command-line-args": "^5.2.0", 20 | "@types/jest": "^29.2.1", 21 | "@types/lodash.isequal": "^4.5.6", 22 | "@types/node": "^18.11.9", 23 | "jest": "^29.2.2", 24 | "prettier": "^2.8.0", 25 | "ts-jest": "^29.0.3", 26 | "ts-node": "^10.9.1", 27 | "typescript": "^4.8.4" 28 | }, 29 | "scripts": { 30 | "prettier": "prettier --write ./src", 31 | "undefined": "node -r @swc-node/register ./src/undefined.ts" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /prettier.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | tabWidth: 4, 3 | printWidth: 80, 4 | proseWrap: "never", 5 | trailingComma: "all", 6 | singleQuote: false, 7 | semi: true, 8 | }; 9 | -------------------------------------------------------------------------------- /src/collapse.ts: -------------------------------------------------------------------------------- 1 | import { Context, Type, TypeSet, TypeValue } from "./types"; 2 | import { contains, getKeyName } from "./utils"; 3 | 4 | function getAllIntersections(data: TypeSet, collapses: string[][]): Type[][] { 5 | const matchSet: Type[][] = []; 6 | for (const collapse of collapses) { 7 | const matches = []; 8 | for (const type of data.values()) { 9 | const { match } = contains(type, collapse); 10 | 11 | if (match) { 12 | matches.push(type); 13 | } 14 | } 15 | 16 | matchSet.push(matches); 17 | } 18 | 19 | return matchSet; 20 | } 21 | 22 | function createTypeValue(types: Type[], property: string): TypeValue[] { 23 | const typeValues: TypeValue[] = []; 24 | for (const t of types) { 25 | const prop = t.properties[property] as TypeValue[]; 26 | if (!prop) { 27 | continue; 28 | } 29 | 30 | for (const propType of prop) { 31 | // worried a bit about [string] and [string] 32 | // TODO: likely requires a bit more complex handling here 33 | if (!typeValues.includes(propType)) { 34 | typeValues.push(propType); 35 | } 36 | } 37 | } 38 | 39 | return typeValues; 40 | } 41 | 42 | function findAndReplaceDeep( 43 | value: TypeValue[], 44 | toReplace: string[], 45 | replaceWith: string, 46 | ): void { 47 | value.forEach((v, i) => { 48 | if (Array.isArray(v)) { 49 | findAndReplaceDeep(v, toReplace, replaceWith); 50 | } else { 51 | if (toReplace.includes(v)) { 52 | value[i] = replaceWith; 53 | } 54 | } 55 | }); 56 | } 57 | 58 | function replaceTypesWithType( 59 | data: TypeSet, 60 | toReplace: Type[], 61 | replacer: Type, 62 | ): void { 63 | const toDelete: string[] = []; 64 | const toReplaceNames = toReplace.map((t) => t.displayName); 65 | const replaceWith = replacer.displayName; 66 | 67 | for (const [k, t] of data.entries()) { 68 | if (t === replacer) { 69 | continue; 70 | } 71 | 72 | if (toReplace.some((x) => x === t)) { 73 | toDelete.push(k); 74 | } 75 | 76 | // check to replace any references amoung the TypeValues 77 | for (const p of Object.values(t.properties)) { 78 | findAndReplaceDeep(p, toReplaceNames, replaceWith); 79 | } 80 | } 81 | 82 | toDelete.forEach((d) => { 83 | data.delete(d); 84 | }); 85 | } 86 | 87 | /** 88 | * this is probably a very slow function. wild amounts of allocations here. 89 | **/ 90 | function buildTypeFromTypes(types: Type[], context: Context): Type { 91 | const common = new Set(); 92 | types.forEach((t) => { 93 | Object.keys(t.properties).forEach((k) => common.add(k)); 94 | }); 95 | 96 | const different = new Set(); 97 | types.forEach((t) => { 98 | const commonKeys = [...common.keys()]; 99 | for (const k of commonKeys) { 100 | if (!(k in t.properties)) { 101 | common.delete(k); 102 | different.add(k); 103 | } 104 | } 105 | }); 106 | 107 | const type: Type = { 108 | displayName: "", 109 | unions: [], 110 | properties: {}, 111 | }; 112 | 113 | for (const c of common.values()) { 114 | type.properties[c] = createTypeValue(types, c); 115 | } 116 | 117 | for (const d of different.values()) { 118 | const typeValues = createTypeValue(types, d); 119 | if (!typeValues.includes("undefined")) { 120 | typeValues.push("undefined"); 121 | } 122 | 123 | type.properties[d] = typeValues; 124 | } 125 | 126 | type.displayName = context.namer.getName( 127 | getKeyName(context, type.properties), 128 | type, 129 | ); 130 | return type; 131 | } 132 | 133 | export function collapse(context: Context): void { 134 | const data = context.typeSet; 135 | 136 | // simple algo 137 | // 1. find all matches per collapse 138 | // 2. find all references to every collapse and make it into 1. 139 | // 3. make a new type and delete the old ones. 140 | 141 | const intersections = getAllIntersections(data, context.config.collapse); 142 | 143 | for (const types of intersections) { 144 | const combinedType = buildTypeFromTypes(types, context); 145 | const keyName = getKeyName(context, combinedType.properties); 146 | 147 | replaceTypesWithType(data, types, combinedType); 148 | 149 | data.set(keyName, combinedType); 150 | } 151 | } 152 | -------------------------------------------------------------------------------- /src/config.ts: -------------------------------------------------------------------------------- 1 | import fs from "fs"; 2 | import cli from "command-line-args"; 3 | 4 | export type NameProp = string | { key: string; value: string | number }; 5 | export type NameProps = NameProp[]; 6 | 7 | export type Config = { 8 | nameBase: string; 9 | enums: string[]; 10 | file: string; 11 | unionCount: number; 12 | unions: { [key: string]: string[] }; 13 | traces: string[]; 14 | valueAsType: string[]; 15 | typeFromValue: string[]; 16 | names: { 17 | name: string; 18 | exact: boolean; 19 | props: NameProps; 20 | }[]; 21 | collapse: string[][]; 22 | sumType?: { 23 | [key: string]: string[]; 24 | }; 25 | 26 | export?: boolean; 27 | declareModule?: string; 28 | }; 29 | 30 | export type TSConfig = { 31 | unions?: { [key: string]: string[] }; 32 | names?: { 33 | exact: boolean; 34 | props: NameProps; 35 | name: string; 36 | }[]; 37 | 38 | valueAsType?: string[]; 39 | typeFromValue?: string[]; 40 | enums?: string[]; 41 | nameBase?: string; 42 | file?: string; 43 | traces?: string[]; 44 | unionCount?: number; 45 | collapse?: string[][]; 46 | sumType?: { 47 | [key: string]: string[]; 48 | }; 49 | 50 | export?: boolean; 51 | declareModule?: string; 52 | }; 53 | 54 | type CLIConfig = { 55 | nameBase: string; 56 | enums: string; 57 | file: string; 58 | configFile: string; 59 | unionCount: number; 60 | traces: string; 61 | }; 62 | 63 | const BASE_NAME = "BaseName"; 64 | const UNION_COUNT = 4; 65 | const FILE = "stdin"; 66 | 67 | const args = [ 68 | { 69 | name: "configFile", 70 | type: String, 71 | alias: "c", 72 | defaultValue: "", 73 | }, 74 | { 75 | name: "file", 76 | type: String, 77 | alias: "f", 78 | defaultValue: FILE, 79 | }, 80 | { 81 | name: "enums", 82 | type: String, 83 | alias: "e", 84 | defaultValue: "", 85 | }, 86 | { 87 | name: "unionCount", 88 | type: Number, 89 | alias: "u", 90 | defaultValue: UNION_COUNT, 91 | }, 92 | { 93 | name: "nameBase", 94 | type: String, 95 | alias: "n", 96 | defaultValue: BASE_NAME, 97 | }, 98 | { 99 | name: "trace", 100 | type: String, 101 | alias: "t", 102 | defaultValue: "", 103 | }, 104 | ]; 105 | 106 | const defaultConfig = { 107 | unions: {}, 108 | names: [], 109 | unionCount: UNION_COUNT, 110 | valueAsType: [], 111 | typeFromValue: [], 112 | file: FILE, 113 | nameBase: BASE_NAME, 114 | enums: [], 115 | traces: [], 116 | collapse: [], 117 | sumType: {}, 118 | export: false, 119 | }; 120 | 121 | export function getDefaultConfig(): Config { 122 | return { 123 | ...defaultConfig, 124 | }; 125 | } 126 | 127 | export default function getConfig(): Config { 128 | const cliArgs = cli(args) as CLIConfig; 129 | 130 | if (cliArgs.configFile) { 131 | const config = JSON.parse( 132 | fs.readFileSync(cliArgs.configFile).toString(), 133 | ) as TSConfig; 134 | return { 135 | ...defaultConfig, 136 | ...config, 137 | }; 138 | } 139 | 140 | const config = { 141 | unionCount: cliArgs.unionCount, 142 | file: cliArgs.file, 143 | nameBase: cliArgs.nameBase, 144 | enums: cliArgs.enums !== "" ? cliArgs.enums.split(",") : [], 145 | traces: cliArgs.traces?.split(",") || [], 146 | }; 147 | 148 | return { 149 | ...defaultConfig, 150 | ...config, 151 | }; 152 | } 153 | -------------------------------------------------------------------------------- /src/enum.ts: -------------------------------------------------------------------------------- 1 | import { Context, Type } from "./types"; 2 | import { makeName } from "./utils"; 3 | 4 | export type EnumKeys = (string | number)[]; 5 | type DataShape = { [key: string]: unknown }; 6 | 7 | export function determineEnum(data: DataShape[], key: string): EnumKeys { 8 | const found: EnumKeys = []; 9 | data.forEach((x) => { 10 | if (key in x) { 11 | const value = x[key]; 12 | if (typeof value !== "string" && typeof value !== "number") { 13 | throw new Error("Cannot make an enum out of key " + key); 14 | } 15 | 16 | if (!found.includes(value)) { 17 | found.push(value); 18 | } 19 | } 20 | }); 21 | 22 | return found; 23 | } 24 | 25 | export function stringifyEnum( 26 | context: Context, 27 | name: string, 28 | keys: EnumKeys, 29 | ): string { 30 | const out = []; 31 | 32 | out.push(`${context.config.export ? "export " : ""}enum ${name} {`); 33 | for (let i = 0; i < keys.length; ++i) { 34 | out.push(` ${makeName(keys[i] as string)} = "${keys[i]}",`); 35 | } 36 | out.push(`}`); 37 | 38 | return out.join("\n"); 39 | } 40 | 41 | export function updateAllEnumReferences( 42 | data: Map, 43 | keyName: string, 44 | enumName: string, 45 | ): void { 46 | data.forEach((v) => { 47 | if (keyName in v.properties) { 48 | v.properties[keyName] = [enumName]; 49 | } 50 | }); 51 | } 52 | -------------------------------------------------------------------------------- /src/file.ts: -------------------------------------------------------------------------------- 1 | import fs from "fs"; 2 | import readline from "readline"; 3 | 4 | export default async function getData(file: string): Promise { 5 | if (!file) { 6 | throw new Error("requires a file to read data from"); 7 | } 8 | 9 | const rl = readline.createInterface({ 10 | input: file === "stdin" ? process.stdin : fs.createReadStream(file), 11 | }); 12 | 13 | return new Promise(res => { 14 | const data: T[] = []; 15 | rl.on("line", (line) => { 16 | try { 17 | data.push(JSON.parse(line)); 18 | } catch (e) { 19 | console.error("skipping line", line, e); 20 | } 21 | }) 22 | 23 | rl.on("close", () => { 24 | res(data); 25 | }); 26 | }); 27 | } 28 | -------------------------------------------------------------------------------- /src/logger.ts: -------------------------------------------------------------------------------- 1 | // TODO: Much sophistication 2 | export const Logger = { 3 | trace(...args: any[]): void { 4 | console.log("[TRACE]", ...args); 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /src/sum-types.ts: -------------------------------------------------------------------------------- 1 | import { Context } from "./types"; 2 | import { contains } from "./utils"; 3 | 4 | function sumTypeKey(keys: string[]): string { 5 | return `${keys.join("")}st`; 6 | } 7 | 8 | export function sumTypes(context: Context): void { 9 | const sumTypes = context.config.sumType; 10 | if (!sumTypes) { 11 | return; 12 | } 13 | 14 | for (const [name, st] of Object.entries(sumTypes)) { 15 | const types = []; 16 | for (const t of context.typeSet.values()) { 17 | if (contains(t, st).match) { 18 | types.push(t); 19 | } 20 | } 21 | 22 | if (types.length > 0) { 23 | context.unions.set(sumTypeKey(st), { 24 | name: name, 25 | combinedUnion: types.map((x) => x.displayName), 26 | useName: true, 27 | connectWith: "|", 28 | }); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/test/config.collapse.json: -------------------------------------------------------------------------------- 1 | { 2 | "collapse": [["bar"]] 3 | } 4 | -------------------------------------------------------------------------------- /src/test/config.collapse.ts: -------------------------------------------------------------------------------- 1 | type BaseName2 = { 2 | _lithium: string; 3 | lithium: string; 4 | }; 5 | 6 | type BaseName7 = { 7 | bar: number | string; 8 | _lithiumBarThat?: string; 9 | lithium?: string; 10 | that?: number; 11 | _anotherPropBarThat?: string; 12 | anotherProp?: string; 13 | _okAgainBar?: string; 14 | okAgain?: string; 15 | _iNeededAgainBarThat?: string; 16 | iNeededAgain?: string; 17 | _barBuzz?: string; 18 | buzz?: number; 19 | }; 20 | -------------------------------------------------------------------------------- /src/test/config.export.declare.json: -------------------------------------------------------------------------------- 1 | { 2 | "declareModule": "foobar", 3 | "export": true 4 | } 5 | -------------------------------------------------------------------------------- /src/test/config.export.declare.ts: -------------------------------------------------------------------------------- 1 | declare module "foobar" { 2 | export type barUnion = { 3 | bar: string; 4 | }; 5 | 6 | export type BaseName1 = { 7 | _barBuzz: string; 8 | bar: number | string; 9 | buzz: number; 10 | }; 11 | 12 | export type BaseName2 = { 13 | _lithium: string; 14 | lithium: string; 15 | }; 16 | 17 | export type BaseName3 = barUnion & { 18 | _lithiumBarThat: string; 19 | lithium: string; 20 | that: number; 21 | }; 22 | 23 | export type BaseName4 = barUnion & { 24 | _anotherPropBarThat: string; 25 | anotherProp: string; 26 | that: number; 27 | }; 28 | 29 | export type BaseName5 = barUnion & { 30 | _okAgainBar: string; 31 | okAgain: string; 32 | }; 33 | 34 | export type BaseName6 = barUnion & { 35 | _iNeededAgainBarThat: string; 36 | iNeededAgain: string; 37 | that: number; 38 | }; 39 | } 40 | -------------------------------------------------------------------------------- /src/test/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "config": [ 3 | { 4 | "config": "./src/test/configs/config.collapse.json", 5 | "results": "./src/test/results/config.collapse.ts" 6 | }, 7 | { 8 | "config": "./src/test/configs/config.empty.json", 9 | "results": "./src/test/results/config.empty.ts" 10 | }, 11 | { 12 | "config": "./src/test/configs/config.empty.2.json", 13 | "results": "./src/test/results/config.empty.2.ts" 14 | }, 15 | { 16 | "config": "./src/test/configs/config.name.json", 17 | "results": "./src/test/results/config.name.ts" 18 | }, 19 | { 20 | "config": "./src/test/configs/config.export.declare.json", 21 | "results": "./src/test/results/config.export.declare.ts" 22 | }, 23 | { 24 | "config": "./src/test/configs/config.sumtype.json", 25 | "results": "./src/test/results/config.sumtype.ts" 26 | } 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /src/test/config.name.json: -------------------------------------------------------------------------------- 1 | { 2 | "names": [ 3 | { 4 | "name": "FlexMeDaddy", 5 | "exact": false, 6 | "props": ["bar", "buzz"] 7 | }, 8 | { 9 | "name": "ThisOneWont", 10 | "exact": true, 11 | "props": ["lithium"] 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /src/test/config.name.ts: -------------------------------------------------------------------------------- 1 | type barUnion = { 2 | bar: string; 3 | }; 4 | 5 | type FlexMeDaddy = { 6 | _barBuzz: string; 7 | bar: number | string; 8 | buzz: number; 9 | }; 10 | 11 | type BaseName1 = { 12 | _lithium: string; 13 | lithium: string; 14 | }; 15 | 16 | type BaseName2 = barUnion & { 17 | _lithiumBarThat: string; 18 | lithium: string; 19 | that: number; 20 | }; 21 | 22 | type BaseName3 = barUnion & { 23 | _anotherPropBarThat: string; 24 | anotherProp: string; 25 | that: number; 26 | }; 27 | 28 | type BaseName4 = barUnion & { 29 | _okAgainBar: string; 30 | okAgain: string; 31 | }; 32 | 33 | type BaseName5 = barUnion & { 34 | _iNeededAgainBarThat: string; 35 | iNeededAgain: string; 36 | that: number; 37 | }; 38 | -------------------------------------------------------------------------------- /src/test/config.sumtype.json: -------------------------------------------------------------------------------- 1 | { 2 | "sumType": { 3 | "BarMe": ["bar"] 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/test/config.sumtype.ts: -------------------------------------------------------------------------------- 1 | type BarMe = BaseName1 & BaseName3 & BaseName4 & BaseName5 & BaseName6; 2 | 3 | type barUnion = { 4 | bar: string; 5 | }; 6 | 7 | type BaseName1 = { 8 | _barBuzz: string; 9 | bar: number | string; 10 | buzz: number; 11 | }; 12 | 13 | type BaseName2 = { 14 | _lithium: string; 15 | lithium: string; 16 | }; 17 | 18 | type BaseName3 = barUnion & { 19 | _lithiumBarThat: string; 20 | lithium: string; 21 | that: number; 22 | }; 23 | 24 | type BaseName4 = barUnion & { 25 | _anotherPropBarThat: string; 26 | anotherProp: string; 27 | that: number; 28 | }; 29 | 30 | type BaseName5 = barUnion & { 31 | _okAgainBar: string; 32 | okAgain: string; 33 | }; 34 | 35 | type BaseName6 = barUnion & { 36 | _iNeededAgainBarThat: string; 37 | iNeededAgain: string; 38 | that: number; 39 | }; 40 | -------------------------------------------------------------------------------- /src/test/configs/config.collapse.json: -------------------------------------------------------------------------------- 1 | { 2 | "collapse": [["bar"]] 3 | } 4 | -------------------------------------------------------------------------------- /src/test/configs/config.empty.2.json: -------------------------------------------------------------------------------- 1 | { 2 | "unionCount": 2 3 | } 4 | -------------------------------------------------------------------------------- /src/test/configs/config.empty.json: -------------------------------------------------------------------------------- 1 | {} 2 | 3 | -------------------------------------------------------------------------------- /src/test/configs/config.export.declare.json: -------------------------------------------------------------------------------- 1 | { 2 | "declareModule": "foobar", 3 | "export": true 4 | } 5 | -------------------------------------------------------------------------------- /src/test/configs/config.name.json: -------------------------------------------------------------------------------- 1 | { 2 | "names": [ 3 | { 4 | "name": "FlexMeDaddy", 5 | "exact": false, 6 | "props": ["bar", "buzz"] 7 | }, 8 | { 9 | "name": "ThisOneWont", 10 | "exact": true, 11 | "props": ["lithium"] 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /src/test/configs/config.sumtype.json: -------------------------------------------------------------------------------- 1 | { 2 | "sumType": { 3 | "BarMe": ["bar"] 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/test/create-data.ts: -------------------------------------------------------------------------------- 1 | export const jsons = [ 2 | { 3 | _barBuzz: "", 4 | bar: 22, 5 | buzz: 69, 6 | }, 7 | 8 | { 9 | _barBuzz: "", 10 | bar: "this is a string", 11 | buzz: 69, 12 | }, 13 | 14 | { 15 | _lithium: "", 16 | lithium: "is my bit daddy", 17 | }, 18 | 19 | { 20 | _lithiumBarThat: "", 21 | lithium: "is my bit daddy", 22 | bar: "oneMoreTime", 23 | that: 69, 24 | }, 25 | 26 | { 27 | _anotherPropBarThat: "", 28 | anotherProp: "prop", 29 | bar: "anoother bar", 30 | that: 69, 31 | }, 32 | 33 | { 34 | _okAgainBar: "", 35 | okAgain: "prop", 36 | bar: "i needed one more string only bar", 37 | }, 38 | 39 | { 40 | _iNeededAgainBarThat: "", 41 | iNeededAgain: "Yes, i have a default amount of 4", 42 | bar: "There we go, we are at 4 now", 43 | that: 69, 44 | }, 45 | 46 | { 47 | _lithiumBarThat: "", 48 | lithium: 49 | "I needed a lithium data point so i can have 2 lith + bar unions", 50 | bar: "There we go, we are at 4 now", 51 | that: 69, 52 | }, 53 | ]; 54 | 55 | if (require.main === module) { 56 | jsons.forEach((x) => console.log(JSON.stringify(x))); 57 | } 58 | -------------------------------------------------------------------------------- /src/test/no-config.2.ts: -------------------------------------------------------------------------------- 1 | type barUnion = { 2 | bar: string; 3 | }; 4 | 5 | type lithiumUnion = { 6 | lithium: string; 7 | }; 8 | 9 | type thatUnion = { 10 | that: number; 11 | }; 12 | 13 | type thatbarUnion = thatUnion & barUnion; 14 | 15 | type BaseName1 = { 16 | _barBuzz: string; 17 | bar: number | string; 18 | buzz: number; 19 | }; 20 | 21 | type BaseName2 = lithiumUnion & { 22 | _lithium: string; 23 | }; 24 | 25 | type BaseName3 = lithiumUnion & 26 | thatbarUnion & { 27 | _lithiumBarThat: string; 28 | }; 29 | 30 | type BaseName4 = thatbarUnion & { 31 | _anotherPropBarThat: string; 32 | anotherProp: string; 33 | }; 34 | 35 | type BaseName5 = barUnion & { 36 | _okAgainBar: string; 37 | okAgain: string; 38 | }; 39 | 40 | type BaseName6 = thatbarUnion & { 41 | _iNeededAgainBarThat: string; 42 | iNeededAgain: string; 43 | }; 44 | -------------------------------------------------------------------------------- /src/test/no-config.4.ts: -------------------------------------------------------------------------------- 1 | type barUnion = { 2 | bar: string; 3 | }; 4 | 5 | type BaseName1 = { 6 | _barBuzz: string; 7 | bar: number | string; 8 | buzz: number; 9 | }; 10 | 11 | type BaseName2 = { 12 | _lithium: string; 13 | lithium: string; 14 | }; 15 | 16 | type BaseName3 = barUnion & { 17 | _lithiumBarThat: string; 18 | lithium: string; 19 | that: number; 20 | }; 21 | 22 | type BaseName4 = barUnion & { 23 | _anotherPropBarThat: string; 24 | anotherProp: string; 25 | that: number; 26 | }; 27 | 28 | type BaseName5 = barUnion & { 29 | _okAgainBar: string; 30 | okAgain: string; 31 | }; 32 | 33 | type BaseName6 = barUnion & { 34 | _iNeededAgainBarThat: string; 35 | iNeededAgain: string; 36 | that: number; 37 | }; 38 | -------------------------------------------------------------------------------- /src/test/results/config.collapse.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePrimeagen/undefined/00fe656ba25b7c17c1df61352dd2a4c509eff617/src/test/results/config.collapse.ts -------------------------------------------------------------------------------- /src/test/results/config.empty.2.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePrimeagen/undefined/00fe656ba25b7c17c1df61352dd2a4c509eff617/src/test/results/config.empty.2.ts -------------------------------------------------------------------------------- /src/test/results/config.empty.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePrimeagen/undefined/00fe656ba25b7c17c1df61352dd2a4c509eff617/src/test/results/config.empty.ts -------------------------------------------------------------------------------- /src/test/run.ts: -------------------------------------------------------------------------------- 1 | import fs from "fs"; 2 | import path from "path"; 3 | import { Config } from "../config"; 4 | import { DataSet } from "../types"; 5 | import { stringify, undefinedRun } from "../undefined-runner"; 6 | 7 | function trimNewLine(str: string): string { 8 | if (str.at(-1) === "\n") { 9 | return str.substring(0, str.length - 1); 10 | } 11 | return str; 12 | } 13 | 14 | export function runTest(config: Config, data: DataSet, expected: string) { 15 | const undef = undefinedRun(data, config); 16 | let expectedValue = fs 17 | .readFileSync(path.join(__dirname, expected)) 18 | .toString(); 19 | 20 | expect(trimNewLine(stringify(undef))).toEqual(trimNewLine(expectedValue)); 21 | } 22 | -------------------------------------------------------------------------------- /src/test/undefined.spec.ts: -------------------------------------------------------------------------------- 1 | import fs from "fs"; 2 | import path from "path"; 3 | import { Config, getDefaultConfig } from "../config"; 4 | import { jsons } from "./create-data"; 5 | import { runTest } from "./run"; 6 | 7 | test("simple transformation, unionCount == 4", function () { 8 | const config: Config = getDefaultConfig(); 9 | const data = [...jsons]; 10 | runTest(config, data, "no-config.4.ts"); 11 | }); 12 | 13 | test("simple transformation, unionCount == 2", function () { 14 | const config: Config = { 15 | ...getDefaultConfig(), 16 | unionCount: 2, 17 | }; 18 | 19 | const data = [...jsons]; 20 | runTest(config, data, "no-config.2.ts"); 21 | }); 22 | 23 | test("names, unionCount == 4", function () { 24 | const names = JSON.parse( 25 | fs.readFileSync(path.join(__dirname, "config.name.json")).toString(), 26 | ); 27 | 28 | const config: Config = { 29 | ...getDefaultConfig(), 30 | ...names, 31 | }; 32 | 33 | const data = [...jsons]; 34 | 35 | runTest(config, data, "config.name.ts"); 36 | }); 37 | 38 | test("collapse, unionCount == 4", function () { 39 | const collapse = JSON.parse( 40 | fs 41 | .readFileSync(path.join(__dirname, "config.collapse.json")) 42 | .toString(), 43 | ); 44 | 45 | const config: Config = { 46 | ...getDefaultConfig(), 47 | ...collapse, 48 | }; 49 | 50 | const data = [...jsons]; 51 | 52 | runTest(config, data, "config.collapse.ts"); 53 | }); 54 | 55 | test("sumtype, unionCount == 4", function () { 56 | const collapse = JSON.parse( 57 | fs.readFileSync(path.join(__dirname, "config.sumtype.json")).toString(), 58 | ); 59 | 60 | const config: Config = { 61 | ...getDefaultConfig(), 62 | ...collapse, 63 | }; 64 | 65 | const data = [...jsons]; 66 | 67 | runTest(config, data, "config.sumtype.ts"); 68 | }); 69 | 70 | test("export.declare, unionCount == 4", function () { 71 | const collapse = JSON.parse( 72 | fs 73 | .readFileSync(path.join(__dirname, "config.export.declare.json")) 74 | .toString(), 75 | ); 76 | 77 | const config: Config = { 78 | ...getDefaultConfig(), 79 | ...collapse, 80 | }; 81 | 82 | const data = [...jsons]; 83 | 84 | runTest(config, data, "config.export.declare.ts"); 85 | }); 86 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | // TODO: There is this whole recursive definition issue that i suck at 2 | // typescript trying to make. I could literally make this in rust in no 3 | // time....... i hate my choices some times. 4 | 5 | import { Config } from "./config"; 6 | import { EnumKeys } from "./enum"; 7 | import { Logger } from "./logger"; 8 | import { 9 | getDisplayName, 10 | getKeyName, 11 | getTypeFromValueName, 12 | Name, 13 | } from "./utils"; 14 | 15 | export type TypeValue = string | string[]; 16 | 17 | export type TypeProperties = { 18 | [key: string]: TypeValue[]; 19 | }; 20 | 21 | export type Type = { 22 | displayName: string; 23 | unions: string[]; 24 | properties: TypeProperties; 25 | }; 26 | 27 | export type NamedTypeProperty = { 28 | name: string; 29 | properties?: TypeProperties; 30 | combinedUnion?: string[]; 31 | useName?: boolean; 32 | connectWith?: "|" | "&"; 33 | }; 34 | 35 | export type TypeSet = Map; 36 | 37 | export type Union = Map; 38 | 39 | export type Data = { [key: string]: unknown }; 40 | export type DataSet = Data[]; 41 | export type EnumSet = [string, EnumKeys][]; 42 | export type Context = { 43 | config: Config; 44 | data: DataSet; 45 | typeSet: TypeSet; 46 | namer: Name; 47 | unions: Union; 48 | enums: EnumSet; 49 | }; 50 | 51 | function arrayTypeToString( 52 | arr: (string | string[])[], 53 | current: { [key: string]: boolean } = {}, 54 | sub: boolean = false, 55 | ): string { 56 | const out: string[] = []; 57 | for (let i = 0; i < arr.length; ++i) { 58 | const value = arr[i]; 59 | if (Array.isArray(value)) { 60 | const types = arrayTypeToString(value, current, true); 61 | if (types) { 62 | out.push(types); 63 | } 64 | } else if (!current[value]) { 65 | current[value] = true; 66 | out.push(value); 67 | } 68 | } 69 | 70 | if (out.length > 1) { 71 | return `(${out.join(" | ")})`; 72 | } 73 | 74 | if (out.length === 1) { 75 | if (sub) { 76 | return `${out[0]}[]`; 77 | } 78 | return out[0]; 79 | } 80 | 81 | return ""; 82 | } 83 | 84 | export function unionName(name: string): string { 85 | if (name.endsWith("Union")) { 86 | return name; 87 | } 88 | return `${name}Union`; 89 | } 90 | 91 | function stringUnions( 92 | type: Type, 93 | unions: Union, 94 | connectingAmp: boolean = true, 95 | ): string { 96 | if (type.unions.length === 0) { 97 | return ""; 98 | } 99 | 100 | return `${type.unions 101 | .map((u) => unionName(unions.get(u)?.name as string)) 102 | .join(" & ")} ${connectingAmp ? "& " : ""}`; 103 | } 104 | 105 | function removeUndefined(typeValue: TypeValue[]): boolean { 106 | // NOTE: its only top level 107 | const idx = typeValue.indexOf("undefined"); 108 | let found = false; 109 | if (idx >= 0) { 110 | // undefined fields need the type undefined. 111 | if (typeValue.length > 1) { 112 | typeValue.splice(idx, 1); 113 | found = true; 114 | } 115 | } 116 | 117 | return found; 118 | } 119 | 120 | export function declareModule(context: Context): string { 121 | if (context.config.declareModule) { 122 | return `declare module "${context.config.declareModule}" {`; 123 | } 124 | return ""; 125 | } 126 | 127 | export function closeDeclareModule(context: Context): string { 128 | if (context.config.declareModule) { 129 | return `}`; 130 | } 131 | return ""; 132 | } 133 | 134 | export function typeToString(context: Context): string { 135 | const unions = context.unions; 136 | const keyNameToType = context.typeSet; 137 | const config = context.config; 138 | 139 | const out: string[] = []; 140 | const exportStr = context.config.export ? "export " : ""; 141 | const ident = context.config.declareModule ? " " : ""; 142 | 143 | function push(str: string): void { 144 | out.push(`${ident}${str}`); 145 | } 146 | function newline(): void { 147 | out.push(""); 148 | } 149 | 150 | for (const v of unions.values()) { 151 | const { properties, name, combinedUnion, useName } = v; 152 | const uName = useName ? name : unionName(name); 153 | 154 | if (properties) { 155 | push(`${exportStr}type ${uName} = {`); 156 | 157 | const keys = Object.keys(properties); 158 | 159 | for (let i = 0; i < keys.length; ++i) { 160 | const k = keys[i]; 161 | const types = properties[k]; 162 | const nullable = removeUndefined(types); 163 | 164 | push( 165 | ` ${k}${nullable ? "?" : ""}: ${arrayTypeToString( 166 | types, 167 | )};`, 168 | ); 169 | } 170 | 171 | push("}"); 172 | } else if (combinedUnion) { 173 | const connectWith = v.connectWith || "&"; 174 | 175 | // TODO: There are several things wrong here 176 | push( 177 | `${exportStr}type ${uName} = ${combinedUnion 178 | .map((x) => (useName ? x : unionName(x))) 179 | .join(` ${connectWith} `)}`, 180 | ); 181 | } 182 | newline(); 183 | } 184 | 185 | for (const v of keyNameToType.values()) { 186 | const keys = Object.keys(v.properties); 187 | 188 | if (config.traces.includes(v.displayName)) { 189 | Logger.trace("creating object", v.displayName, v); 190 | } 191 | if (keys.length === 0 && v.unions.length > 0) { 192 | push( 193 | `${exportStr}type ${v.displayName} = ${stringUnions( 194 | v, 195 | unions, 196 | false, 197 | )};`, 198 | ); 199 | } else if (keys.length === 0) { 200 | push(`${exportStr}type ${v.displayName} = Record;`); 201 | } else { 202 | push( 203 | `${exportStr}type ${v.displayName} = ${stringUnions( 204 | v, 205 | unions, 206 | )} {`, 207 | ); 208 | for (let i = 0; i < keys.length; ++i) { 209 | const k = keys[i]; 210 | const types = v.properties[k]; 211 | const nullable = removeUndefined(types); 212 | 213 | push( 214 | ` ${k}${nullable ? "?" : ""}: ${arrayTypeToString( 215 | types, 216 | )};`, 217 | ); 218 | } 219 | 220 | push(`}`); 221 | } 222 | newline(); 223 | } 224 | 225 | return out.join("\n"); 226 | } 227 | 228 | function isPrimitive(typeofValue: string): boolean { 229 | return ( 230 | typeofValue === "number" || 231 | typeofValue === "string" || 232 | typeofValue === "boolean" 233 | ); 234 | } 235 | 236 | function insertKeyValue( 237 | obj: Type, 238 | key: string, 239 | value: string | string[], 240 | ): void { 241 | let props = obj.properties[key]; 242 | if (!props) { 243 | props = obj.properties[key] = []; 244 | } 245 | 246 | if (Array.isArray(value) || !props.includes(value)) { 247 | props.push(value); 248 | } 249 | } 250 | 251 | function getObj(keyNameToType: TypeSet, key: string): Type { 252 | const value = keyNameToType.get(key); 253 | if (value) { 254 | return value; 255 | } 256 | 257 | const typeObj = { 258 | unions: [], 259 | properties: {}, 260 | displayName: "", 261 | }; 262 | 263 | keyNameToType.set(key, typeObj); 264 | 265 | return typeObj; 266 | } 267 | 268 | // this might be a thing? 269 | function handleArray(context: Context, items: any[]): (string | string[])[] { 270 | const out: (string | string[])[] = []; 271 | for (let i = 0; i < items.length; ++i) { 272 | const item = items[i]; 273 | const type = typeof item; 274 | let name: string | string[] = type; 275 | 276 | if (item === null) { 277 | name = "null"; 278 | } else if (Array.isArray(item)) { 279 | // TODO: Rename this 280 | const okThisTypeSucksAndIDontKnowHowToFixIt = handleArray( 281 | context, 282 | item, 283 | ); 284 | 285 | // @ts-ignore 286 | name = okThisTypeSucksAndIDontKnowHowToFixIt; 287 | } else if (type === "object") { 288 | name = typeObject(context, item); 289 | } 290 | 291 | if (out.indexOf(name) === -1) { 292 | out.push(name); 293 | } 294 | } 295 | 296 | return out; 297 | } 298 | 299 | type StringToUnknown = { [key: string]: unknown }; 300 | 301 | export function typeObject(context: Context, obj: StringToUnknown): string { 302 | const keyNameToType = context.typeSet; 303 | const keys = Object.keys(obj); 304 | const keyName = getKeyName(context, obj); 305 | const typeObj = getObj(keyNameToType, keyName); 306 | if (typeObj.displayName === "") { 307 | const possibleName = getDisplayName(context, obj); 308 | if (possibleName) { 309 | typeObj.displayName = possibleName; 310 | } 311 | 312 | const typeName = getTypeFromValueName(context, obj); 313 | if (typeName) { 314 | typeObj.displayName = typeName; 315 | } 316 | } 317 | 318 | for (let i = 0; i < keys.length; ++i) { 319 | const k = keys[i]; 320 | const value = obj[k]; 321 | const typeOf = typeof value; 322 | 323 | if ( 324 | context.config.valueAsType && 325 | context.config.valueAsType.includes(k) && 326 | typeof value === "string" 327 | ) { 328 | insertKeyValue(typeObj, k, `"${value}"`); 329 | } else if (isPrimitive(typeOf)) { 330 | insertKeyValue(typeObj, k, typeOf); 331 | } else if (value === null) { 332 | insertKeyValue(typeObj, k, "null"); 333 | } else if (Array.isArray(value)) { 334 | const valueToInsert = handleArray(context, value); 335 | 336 | // @ts-ignore type issue, OH NO 337 | insertKeyValue(typeObj, k, valueToInsert); 338 | } else { 339 | insertKeyValue( 340 | typeObj, 341 | k, 342 | typeObject(context, value as StringToUnknown), 343 | ); 344 | } 345 | } 346 | 347 | typeObj.displayName = context.namer.getName(keyName, typeObj); 348 | 349 | return typeObj.displayName; 350 | } 351 | -------------------------------------------------------------------------------- /src/undefined-runner.ts: -------------------------------------------------------------------------------- 1 | import { collapse } from "./collapse"; 2 | import { Config } from "./config"; 3 | import { determineEnum, stringifyEnum, updateAllEnumReferences } from "./enum"; 4 | import { 5 | closeDeclareModule, 6 | Context, 7 | Data, 8 | DataSet, 9 | declareModule, 10 | EnumSet, 11 | Type, 12 | typeObject, 13 | typeToString, 14 | } from "./types"; 15 | import { unionize } from "./unions"; 16 | import { makeName, Name } from "./utils"; 17 | import { sumTypes } from "./sum-types"; 18 | 19 | // TODO: Merge context and undefined 20 | export function undefinedRun(data: DataSet, config: Config): Context { 21 | const typeSet = new Map(); 22 | const context: Context = { 23 | typeSet, 24 | data, 25 | config, 26 | namer: new Name(config), 27 | 28 | // default values 29 | unions: new Map(), 30 | enums: [], 31 | }; 32 | 33 | // TODO: My mother would even be upset 34 | data.forEach((x: Data) => typeObject(context, x)); 35 | 36 | // TODO: i think that i need to move this 37 | // into a better function. 38 | // 39 | // I hate mixing the logic + the printing. 40 | // 41 | // I think a enumsToString would be the play and then 42 | // have this for loop moved into enums.ts 43 | // 44 | // the reason why i haven't done this yet is because i don't want to 45 | // refactor the whole project. The TypeSet really needs to be a higher 46 | // level abstraction that allows for types and enums to exist under one 47 | // key. effectively, TypeSet needs to be a key into a context object 48 | 49 | const enums: EnumSet = []; 50 | 51 | for (let i = 0; i < config.enums.length; ++i) { 52 | const enumItem = config.enums[i]; 53 | const enumKeys = determineEnum(data, enumItem); 54 | const enumName = makeName(enumItem); 55 | updateAllEnumReferences(typeSet, enumItem, enumName); 56 | 57 | enums.push([enumName, enumKeys]); 58 | } 59 | context.enums = enums; 60 | 61 | collapse(context); 62 | sumTypes(context); 63 | unionize(context); 64 | 65 | return context; 66 | } 67 | 68 | // TODO: the separation of context vs Undefined sucks... 69 | export function stringify(context: Context): string { 70 | const out = []; 71 | out.push(declareModule(context)); 72 | for (const enumData of context.enums) { 73 | out.push(stringifyEnum(context, enumData[0], enumData[1])); 74 | out.push(""); 75 | } 76 | 77 | out.push(typeToString(context)); 78 | out.push(closeDeclareModule(context)); 79 | return out.join("\n"); 80 | } 81 | -------------------------------------------------------------------------------- /src/undefined.ts: -------------------------------------------------------------------------------- 1 | import getData from "./file"; 2 | import getConfig from "./config"; 3 | import { stringify, undefinedRun } from "./undefined-runner"; 4 | import { Data } from "./types"; 5 | 6 | export { 7 | getData, 8 | getConfig, 9 | undefinedRun, 10 | stringify, 11 | } 12 | 13 | async function run() { 14 | const config = getConfig(); 15 | const data = await getData(config.file); 16 | const context = undefinedRun(data, config); 17 | 18 | console.log(stringify(context)); 19 | } 20 | 21 | if (require.main === module) { 22 | run(); 23 | } 24 | 25 | -------------------------------------------------------------------------------- /src/unions.ts: -------------------------------------------------------------------------------- 1 | // TODO: This is a REALLY SHITTY version of what could be. I am literally just 2 | // flow stating what could be so i can get this done asap. 3 | // 4 | // Please forgive me. Its not meant to be either performant nor the absolute 5 | // most correct, just correct enough 6 | import { Config } from "./config"; 7 | import isEqual from "lodash.isequal"; 8 | import { Context, NamedTypeProperty, Type, TypeValue, Union } from "./types"; 9 | 10 | export type UnionizeableProperty = { 11 | propKey: string; 12 | propValue: TypeValue[]; 13 | count: number; 14 | }; 15 | 16 | export type KeyCounts = { 17 | [key: string]: { 18 | propKey: string; 19 | propValue: TypeValue[]; 20 | count: number; 21 | }[]; 22 | }; 23 | 24 | export type UnionDupes = { 25 | [key: string]: number; 26 | }; 27 | 28 | type TypedData = Map; 29 | 30 | export function keyDupeCount(data: TypedData): KeyCounts { 31 | const out: KeyCounts = {}; 32 | 33 | for (const [_, d] of data.entries()) { 34 | for (const [k, v] of Object.entries(d.properties)) { 35 | if (!out[k]) { 36 | out[k] = []; 37 | } 38 | 39 | const typeSet = out[k]; 40 | let added = false; 41 | for (let i = 0; !added && i < typeSet.length; ++i) { 42 | if (isEqual(typeSet[i].propValue, v)) { 43 | added = true; 44 | typeSet[i].count++; 45 | } 46 | } 47 | 48 | if (!added) { 49 | typeSet.push({ 50 | propKey: k, 51 | propValue: v, 52 | count: 1, 53 | }); 54 | } 55 | } 56 | } 57 | 58 | return out; 59 | } 60 | 61 | export function getUnionizableProperties( 62 | keyCounts: KeyCounts, 63 | config: Config, 64 | ): UnionizeableProperty[] { 65 | const required = config.unionCount; 66 | const out: UnionizeableProperty[] = []; 67 | 68 | for (const v of Object.values(keyCounts)) { 69 | for (let i = 0; i < v.length; ++i) { 70 | if (v[i].count >= required) { 71 | out.push({ 72 | propKey: v[i].propKey, 73 | propValue: v[i].propValue, 74 | count: v[i].count, 75 | }); 76 | } 77 | } 78 | } 79 | 80 | return out; 81 | } 82 | 83 | // an interesting idea if we wish to optimize. 84 | // 85 | // we would have to do several passes and cut out branches REAL fast for this 86 | // to work 87 | /* 88 | type _TreeNode = { 89 | union: UnionizeableProperty, 90 | remainingPossibles: UnionizeableProperty[], 91 | nodes: string[], 92 | children: _TreeNode[], 93 | } 94 | */ 95 | 96 | function toStringValue(propValue: TypeValue[] | TypeValue) { 97 | if (typeof propValue === "string") { 98 | return propValue; 99 | } 100 | 101 | const copy = propValue.slice(0); 102 | const strValues = copy.filter((x) => !Array.isArray(x)).sort(); 103 | 104 | const arrValues = copy.filter((x) => Array.isArray(x)); 105 | const additional: string = 106 | arrValues.length > 0 ? arrValues.map(toStringValue).join("") : ""; 107 | 108 | return strValues.join("") + additional; 109 | } 110 | 111 | function toString(propKey: string, propValue: TypeValue[]): string { 112 | return propKey + toStringValue(propValue); 113 | } 114 | 115 | function unionDupeCount(data: TypedData): UnionDupes { 116 | const dupes: UnionDupes = {}; 117 | for (const v of data.values()) { 118 | v.unions.forEach((u) => { 119 | if (!dupes[u]) { 120 | dupes[u] = 0; 121 | } 122 | dupes[u]++; 123 | }); 124 | } 125 | return dupes; 126 | } 127 | 128 | function getTypesByUnionKey(data: TypedData, unionKey: string): Type[] { 129 | const out = []; 130 | for (const v of data.values()) { 131 | if (v.unions.includes(unionKey)) { 132 | out.push(v); 133 | } 134 | } 135 | return out; 136 | } 137 | 138 | function combinedUnionName(n1: string, n2: string): string { 139 | if (n1.endsWith("Union")) { 140 | n1 = n1.substring(0, n1.length - 5); 141 | } 142 | 143 | if (n2.endsWith("Union")) { 144 | n2 = n2.substring(0, n2.length - 5); 145 | } 146 | 147 | return `${n1}${n2}Union`; 148 | } 149 | 150 | // TODO: This is a REALLY SHITTY version of what could be 151 | function attemptCombine( 152 | data: TypedData, 153 | unions: Union, 154 | config: Config, 155 | ignore: string[] = [], 156 | ): [boolean, string[]] { 157 | const dupes = unionDupeCount(data); 158 | const highest2: { key: string; count: number }[] = []; 159 | 160 | for (const [key, count] of Object.entries(dupes)) { 161 | if (ignore.includes(key)) { 162 | continue; 163 | } 164 | 165 | if (highest2.length < 2) { 166 | highest2.push({ key, count }); 167 | } else { 168 | // TODO: I am positive i can do this better 169 | let idx = highest2[0].count < highest2[1].count ? 0 : 1; 170 | 171 | if (highest2[idx].count < count) { 172 | highest2[idx] = { key, count }; 173 | } 174 | } 175 | } 176 | 177 | if (highest2.length !== 2) { 178 | return [false, []]; 179 | } 180 | 181 | const [keyName1, keyName2] = highest2.map((x) => x.key); 182 | 183 | const [type0Name, type1Name] = highest2.map( 184 | (x) => unions.get(x.key)?.name as string, 185 | ); 186 | 187 | const [type0, type1] = highest2.map((x) => getTypesByUnionKey(data, x.key)); 188 | 189 | const type0Map = new Map(type0.map((x) => [x, keyName1])); 190 | const type1Map = new Map(type1.map((x) => [x, keyName2])); 191 | 192 | const common = []; 193 | for (const t of type0Map.keys()) { 194 | if (type1Map.has(t)) { 195 | common.push(t); 196 | } 197 | } 198 | 199 | if (common.length >= config.unionCount) { 200 | const newName = combinedUnionName(type0Name, type1Name); 201 | for (let i = 0; i < common.length; ++i) { 202 | const u = common[i].unions; 203 | u.splice(u.indexOf(keyName1), 1); 204 | u.splice(u.indexOf(keyName2), 1); 205 | u.push(newName); 206 | } 207 | 208 | unions.set(newName, { 209 | name: newName, 210 | combinedUnion: [type0Name, type1Name], 211 | }); 212 | } 213 | 214 | return [common.length >= config.unionCount, [type0Name, type1Name]]; 215 | } 216 | 217 | // NOTE: Amazon hates this function 218 | export function unionize(context: Context): void { 219 | const data = context.typeSet; 220 | const config = context.config; 221 | 222 | const keyCount = keyDupeCount(data); 223 | const unionProps = getUnionizableProperties(keyCount, config); 224 | const unions = context.unions; 225 | 226 | // Two passes 227 | // 1st pass puts every possible single union together. 228 | // 2nd pass tries to condense 229 | for (let i = 0; i < unionProps.length; ++i) { 230 | const { propKey, propValue } = unionProps[i]; 231 | 232 | for (const type of data.values()) { 233 | if ( 234 | propKey in type.properties && 235 | isEqual(type.properties[propKey], propValue) 236 | ) { 237 | delete type.properties[propKey]; 238 | 239 | const key = toString(propKey, propValue); 240 | if (!context.config.valueAsType.includes(propKey)) { 241 | if (!unions.has(key)) { 242 | unions.set(key, { 243 | name: propKey, 244 | properties: { [propKey]: propValue }, 245 | }); 246 | } 247 | 248 | type.unions.push(key); 249 | } 250 | } 251 | } 252 | } 253 | 254 | let missCount = 0; 255 | let seen: string[] = []; 256 | do { 257 | const [found, newKeys] = attemptCombine(data, unions, config, seen); 258 | if (!found) { 259 | seen = seen.concat(newKeys); 260 | missCount++; 261 | } 262 | } while (missCount < 3); 263 | } 264 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | import { Context, Type } from "./types"; 2 | import { Config, NameProps } from "./config"; 3 | import { Logger } from "./logger"; 4 | 5 | export function getTypeFromValueName( 6 | context: Context, 7 | obj: Record, 8 | ): string | undefined { 9 | let name = undefined; 10 | for (const key of context.config.typeFromValue) { 11 | if (key in obj) { 12 | name = obj[key] as string; 13 | break; 14 | } 15 | } 16 | 17 | return name; 18 | } 19 | 20 | export function getDisplayName( 21 | context: Context, 22 | obj: Record, 23 | ): string | undefined { 24 | let hasName = false; 25 | let name = undefined; 26 | for (let i = 0; !hasName && i < context.config.names.length; ++i) { 27 | const nameConfig = context.config.names[i]; 28 | 29 | const res = objContains(obj, nameConfig.props); 30 | hasName = res.match && (res.exact || !nameConfig.exact); 31 | if (hasName) { 32 | name = nameConfig.name; 33 | } 34 | } 35 | 36 | return name; 37 | } 38 | 39 | export function makeName(name: string): string { 40 | return name.substring(0, 1).toUpperCase() + name.substring(1); 41 | } 42 | 43 | /* 44 | * checks to see if an object has all the properties passed in. 45 | * 46 | * if it has all the properties it is a match 47 | * if it has all the properties _AND_ it has _ONLY_ those properties, it is an exact match 48 | */ 49 | export function objContains( 50 | obj: Record, 51 | properties: NameProps, 52 | ): { match: boolean; exact: boolean } { 53 | let contains = true; 54 | for (let i = 0; contains && i < properties.length; ++i) { 55 | const property = properties[i]; 56 | if (typeof property === "string") { 57 | contains = property in obj; 58 | } else { 59 | contains = 60 | property.key in obj && obj[property.key] === property.value; 61 | } 62 | } 63 | 64 | return { 65 | match: contains, 66 | exact: contains && Object.keys(obj).length === properties.length, 67 | }; 68 | } 69 | 70 | /* 71 | * checks to see if an object has all the properties passed in. 72 | * 73 | * if it has all the properties it is a match 74 | * if it has all the properties _AND_ it has _ONLY_ those properties, it is an exact match 75 | */ 76 | export function contains( 77 | obj: Type, 78 | properties: string[], 79 | ): { match: boolean; exact: boolean } { 80 | let contains = true; 81 | for (let i = 0; contains && i < properties.length; ++i) { 82 | contains = properties[i] in obj.properties; 83 | } 84 | 85 | return { 86 | match: contains, 87 | exact: contains && Object.keys(obj).length === properties.length, 88 | }; 89 | } 90 | 91 | export class Name { 92 | private count = 0; 93 | private keyNameToName: Map = new Map(); 94 | constructor(private config: Config) {} 95 | 96 | getName(keyName: string, t: Type): string { 97 | const value = this.keyNameToName.get(keyName); 98 | if (value) { 99 | return value; 100 | } 101 | 102 | const displayName = t.displayName; 103 | if (displayName !== "") { 104 | this.keyNameToName.set(keyName, displayName); 105 | return displayName; 106 | } 107 | 108 | const name = this.config.nameBase + ++this.count; 109 | if (this.config.traces.length && this.config.traces.includes(name)) { 110 | Logger.trace("minting", name, "for", t); 111 | } 112 | this.keyNameToName.set(keyName, name); 113 | return name; 114 | } 115 | } 116 | 117 | export function getKeyName( 118 | context: Context, 119 | obj: Record, 120 | ): string { 121 | return ( 122 | getDisplayName(context, obj) || 123 | getTypeFromValueName(context, obj) || 124 | Object.keys(obj).sort().join("") 125 | ); 126 | } 127 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "exclude": [ 3 | "src/test/config.*", 4 | "src/test/no-config.*", 5 | ], 6 | "compilerOptions": { 7 | /* Visit https://aka.ms/tsconfig to read more about this file */ 8 | 9 | /* Projects */ 10 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 11 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 12 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 13 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 14 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 15 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 16 | 17 | /* Language and Environment */ 18 | "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 19 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 20 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 21 | // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ 22 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 23 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 24 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 25 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 26 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 27 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 28 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 29 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 30 | 31 | /* Modules */ 32 | "module": "commonjs", /* Specify what module code is generated. */ 33 | // "rootDir": "./", /* Specify the root folder within your source files. */ 34 | // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ 35 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 36 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 37 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 38 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 39 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 40 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 41 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 42 | // "resolveJsonModule": true, /* Enable importing .json files. */ 43 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 44 | 45 | /* JavaScript Support */ 46 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 47 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 48 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 49 | 50 | /* Emit */ 51 | "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 52 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 53 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 54 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 55 | // "outFile": "./dist/undefined.js", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 56 | "outDir": "./dist", /* Specify an output folder for all emitted files. */ 57 | // "removeComments": true, /* Disable emitting comments. */ 58 | // "noEmit": true, /* Disable emitting files from a compilation. */ 59 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 60 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ 61 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 62 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 63 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 64 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 65 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 66 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 67 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 68 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 69 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 70 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 71 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 72 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 73 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 74 | 75 | /* Interop Constraints */ 76 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 77 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 78 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 79 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 80 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 81 | 82 | /* Type Checking */ 83 | "strict": true, /* Enable all strict type-checking options. */ 84 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 85 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 86 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 87 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 88 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 89 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 90 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 91 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 92 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 93 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 94 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 95 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 96 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 97 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 98 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 99 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 100 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 101 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 102 | 103 | /* Completeness */ 104 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 105 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /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.12.13", "@babel/code-frame@^7.18.6": 14 | version "7.18.6" 15 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" 16 | integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== 17 | dependencies: 18 | "@babel/highlight" "^7.18.6" 19 | 20 | "@babel/compat-data@^7.20.0": 21 | version "7.20.1" 22 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.1.tgz#f2e6ef7790d8c8dbf03d379502dcc246dcce0b30" 23 | integrity sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ== 24 | 25 | "@babel/core@^7.11.6", "@babel/core@^7.12.3": 26 | version "7.19.6" 27 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.19.6.tgz#7122ae4f5c5a37c0946c066149abd8e75f81540f" 28 | integrity sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg== 29 | dependencies: 30 | "@ampproject/remapping" "^2.1.0" 31 | "@babel/code-frame" "^7.18.6" 32 | "@babel/generator" "^7.19.6" 33 | "@babel/helper-compilation-targets" "^7.19.3" 34 | "@babel/helper-module-transforms" "^7.19.6" 35 | "@babel/helpers" "^7.19.4" 36 | "@babel/parser" "^7.19.6" 37 | "@babel/template" "^7.18.10" 38 | "@babel/traverse" "^7.19.6" 39 | "@babel/types" "^7.19.4" 40 | convert-source-map "^1.7.0" 41 | debug "^4.1.0" 42 | gensync "^1.0.0-beta.2" 43 | json5 "^2.2.1" 44 | semver "^6.3.0" 45 | 46 | "@babel/generator@^7.19.6", "@babel/generator@^7.20.1", "@babel/generator@^7.7.2": 47 | version "7.20.1" 48 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.1.tgz#ef32ecd426222624cbd94871a7024639cf61a9fa" 49 | integrity sha512-u1dMdBUmA7Z0rBB97xh8pIhviK7oItYOkjbsCxTWMknyvbQRBwX7/gn4JXurRdirWMFh+ZtYARqkA6ydogVZpg== 50 | dependencies: 51 | "@babel/types" "^7.20.0" 52 | "@jridgewell/gen-mapping" "^0.3.2" 53 | jsesc "^2.5.1" 54 | 55 | "@babel/helper-compilation-targets@^7.19.3": 56 | version "7.20.0" 57 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz#6bf5374d424e1b3922822f1d9bdaa43b1a139d0a" 58 | integrity sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ== 59 | dependencies: 60 | "@babel/compat-data" "^7.20.0" 61 | "@babel/helper-validator-option" "^7.18.6" 62 | browserslist "^4.21.3" 63 | semver "^6.3.0" 64 | 65 | "@babel/helper-environment-visitor@^7.18.9": 66 | version "7.18.9" 67 | resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" 68 | integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== 69 | 70 | "@babel/helper-function-name@^7.19.0": 71 | version "7.19.0" 72 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" 73 | integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== 74 | dependencies: 75 | "@babel/template" "^7.18.10" 76 | "@babel/types" "^7.19.0" 77 | 78 | "@babel/helper-hoist-variables@^7.18.6": 79 | version "7.18.6" 80 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" 81 | integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== 82 | dependencies: 83 | "@babel/types" "^7.18.6" 84 | 85 | "@babel/helper-module-imports@^7.18.6": 86 | version "7.18.6" 87 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" 88 | integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== 89 | dependencies: 90 | "@babel/types" "^7.18.6" 91 | 92 | "@babel/helper-module-transforms@^7.19.6": 93 | version "7.19.6" 94 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz#6c52cc3ac63b70952d33ee987cbee1c9368b533f" 95 | integrity sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw== 96 | dependencies: 97 | "@babel/helper-environment-visitor" "^7.18.9" 98 | "@babel/helper-module-imports" "^7.18.6" 99 | "@babel/helper-simple-access" "^7.19.4" 100 | "@babel/helper-split-export-declaration" "^7.18.6" 101 | "@babel/helper-validator-identifier" "^7.19.1" 102 | "@babel/template" "^7.18.10" 103 | "@babel/traverse" "^7.19.6" 104 | "@babel/types" "^7.19.4" 105 | 106 | "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0": 107 | version "7.19.0" 108 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz#4796bb14961521f0f8715990bee2fb6e51ce21bf" 109 | integrity sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw== 110 | 111 | "@babel/helper-simple-access@^7.19.4": 112 | version "7.19.4" 113 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz#be553f4951ac6352df2567f7daa19a0ee15668e7" 114 | integrity sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg== 115 | dependencies: 116 | "@babel/types" "^7.19.4" 117 | 118 | "@babel/helper-split-export-declaration@^7.18.6": 119 | version "7.18.6" 120 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" 121 | integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== 122 | dependencies: 123 | "@babel/types" "^7.18.6" 124 | 125 | "@babel/helper-string-parser@^7.19.4": 126 | version "7.19.4" 127 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" 128 | integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== 129 | 130 | "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": 131 | version "7.19.1" 132 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" 133 | integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== 134 | 135 | "@babel/helper-validator-option@^7.18.6": 136 | version "7.18.6" 137 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" 138 | integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== 139 | 140 | "@babel/helpers@^7.19.4": 141 | version "7.20.1" 142 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.1.tgz#2ab7a0fcb0a03b5bf76629196ed63c2d7311f4c9" 143 | integrity sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg== 144 | dependencies: 145 | "@babel/template" "^7.18.10" 146 | "@babel/traverse" "^7.20.1" 147 | "@babel/types" "^7.20.0" 148 | 149 | "@babel/highlight@^7.18.6": 150 | version "7.18.6" 151 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" 152 | integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== 153 | dependencies: 154 | "@babel/helper-validator-identifier" "^7.18.6" 155 | chalk "^2.0.0" 156 | js-tokens "^4.0.0" 157 | 158 | "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.19.6", "@babel/parser@^7.20.1": 159 | version "7.20.1" 160 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.1.tgz#3e045a92f7b4623cafc2425eddcb8cf2e54f9cc5" 161 | integrity sha512-hp0AYxaZJhxULfM1zyp7Wgr+pSUKBcP3M+PHnSzWGdXOzg/kHWIgiUWARvubhUKGOEw3xqY4x+lyZ9ytBVcELw== 162 | 163 | "@babel/plugin-syntax-async-generators@^7.8.4": 164 | version "7.8.4" 165 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" 166 | integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== 167 | dependencies: 168 | "@babel/helper-plugin-utils" "^7.8.0" 169 | 170 | "@babel/plugin-syntax-bigint@^7.8.3": 171 | version "7.8.3" 172 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" 173 | integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== 174 | dependencies: 175 | "@babel/helper-plugin-utils" "^7.8.0" 176 | 177 | "@babel/plugin-syntax-class-properties@^7.8.3": 178 | version "7.12.13" 179 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" 180 | integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== 181 | dependencies: 182 | "@babel/helper-plugin-utils" "^7.12.13" 183 | 184 | "@babel/plugin-syntax-import-meta@^7.8.3": 185 | version "7.10.4" 186 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" 187 | integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== 188 | dependencies: 189 | "@babel/helper-plugin-utils" "^7.10.4" 190 | 191 | "@babel/plugin-syntax-json-strings@^7.8.3": 192 | version "7.8.3" 193 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" 194 | integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== 195 | dependencies: 196 | "@babel/helper-plugin-utils" "^7.8.0" 197 | 198 | "@babel/plugin-syntax-jsx@^7.7.2": 199 | version "7.18.6" 200 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" 201 | integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== 202 | dependencies: 203 | "@babel/helper-plugin-utils" "^7.18.6" 204 | 205 | "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": 206 | version "7.10.4" 207 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" 208 | integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== 209 | dependencies: 210 | "@babel/helper-plugin-utils" "^7.10.4" 211 | 212 | "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": 213 | version "7.8.3" 214 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" 215 | integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== 216 | dependencies: 217 | "@babel/helper-plugin-utils" "^7.8.0" 218 | 219 | "@babel/plugin-syntax-numeric-separator@^7.8.3": 220 | version "7.10.4" 221 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" 222 | integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== 223 | dependencies: 224 | "@babel/helper-plugin-utils" "^7.10.4" 225 | 226 | "@babel/plugin-syntax-object-rest-spread@^7.8.3": 227 | version "7.8.3" 228 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" 229 | integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== 230 | dependencies: 231 | "@babel/helper-plugin-utils" "^7.8.0" 232 | 233 | "@babel/plugin-syntax-optional-catch-binding@^7.8.3": 234 | version "7.8.3" 235 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" 236 | integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== 237 | dependencies: 238 | "@babel/helper-plugin-utils" "^7.8.0" 239 | 240 | "@babel/plugin-syntax-optional-chaining@^7.8.3": 241 | version "7.8.3" 242 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" 243 | integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== 244 | dependencies: 245 | "@babel/helper-plugin-utils" "^7.8.0" 246 | 247 | "@babel/plugin-syntax-top-level-await@^7.8.3": 248 | version "7.14.5" 249 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" 250 | integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== 251 | dependencies: 252 | "@babel/helper-plugin-utils" "^7.14.5" 253 | 254 | "@babel/plugin-syntax-typescript@^7.7.2": 255 | version "7.20.0" 256 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz#4e9a0cfc769c85689b77a2e642d24e9f697fc8c7" 257 | integrity sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ== 258 | dependencies: 259 | "@babel/helper-plugin-utils" "^7.19.0" 260 | 261 | "@babel/template@^7.18.10", "@babel/template@^7.3.3": 262 | version "7.18.10" 263 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" 264 | integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== 265 | dependencies: 266 | "@babel/code-frame" "^7.18.6" 267 | "@babel/parser" "^7.18.10" 268 | "@babel/types" "^7.18.10" 269 | 270 | "@babel/traverse@^7.19.6", "@babel/traverse@^7.20.1", "@babel/traverse@^7.7.2": 271 | version "7.20.1" 272 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.1.tgz#9b15ccbf882f6d107eeeecf263fbcdd208777ec8" 273 | integrity sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA== 274 | dependencies: 275 | "@babel/code-frame" "^7.18.6" 276 | "@babel/generator" "^7.20.1" 277 | "@babel/helper-environment-visitor" "^7.18.9" 278 | "@babel/helper-function-name" "^7.19.0" 279 | "@babel/helper-hoist-variables" "^7.18.6" 280 | "@babel/helper-split-export-declaration" "^7.18.6" 281 | "@babel/parser" "^7.20.1" 282 | "@babel/types" "^7.20.0" 283 | debug "^4.1.0" 284 | globals "^11.1.0" 285 | 286 | "@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.19.4", "@babel/types@^7.20.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3": 287 | version "7.20.0" 288 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.0.tgz#52c94cf8a7e24e89d2a194c25c35b17a64871479" 289 | integrity sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg== 290 | dependencies: 291 | "@babel/helper-string-parser" "^7.19.4" 292 | "@babel/helper-validator-identifier" "^7.19.1" 293 | to-fast-properties "^2.0.0" 294 | 295 | "@bcoe/v8-coverage@^0.2.3": 296 | version "0.2.3" 297 | resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" 298 | integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== 299 | 300 | "@cspotcode/source-map-support@^0.8.0": 301 | version "0.8.1" 302 | resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" 303 | integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== 304 | dependencies: 305 | "@jridgewell/trace-mapping" "0.3.9" 306 | 307 | "@istanbuljs/load-nyc-config@^1.0.0": 308 | version "1.1.0" 309 | resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" 310 | integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== 311 | dependencies: 312 | camelcase "^5.3.1" 313 | find-up "^4.1.0" 314 | get-package-type "^0.1.0" 315 | js-yaml "^3.13.1" 316 | resolve-from "^5.0.0" 317 | 318 | "@istanbuljs/schema@^0.1.2": 319 | version "0.1.3" 320 | resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" 321 | integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== 322 | 323 | "@jest/console@^29.2.1": 324 | version "29.2.1" 325 | resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.2.1.tgz#5f2c62dcdd5ce66e94b6d6729e021758bceea090" 326 | integrity sha512-MF8Adcw+WPLZGBiNxn76DOuczG3BhODTcMlDCA4+cFi41OkaY/lyI0XUUhi73F88Y+7IHoGmD80pN5CtxQUdSw== 327 | dependencies: 328 | "@jest/types" "^29.2.1" 329 | "@types/node" "*" 330 | chalk "^4.0.0" 331 | jest-message-util "^29.2.1" 332 | jest-util "^29.2.1" 333 | slash "^3.0.0" 334 | 335 | "@jest/core@^29.2.2": 336 | version "29.2.2" 337 | resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.2.2.tgz#207aa8973d9de8769f9518732bc5f781efc3ffa7" 338 | integrity sha512-susVl8o2KYLcZhhkvSB+b7xX575CX3TmSvxfeDjpRko7KmT89rHkXj6XkDkNpSeFMBzIENw5qIchO9HC9Sem+A== 339 | dependencies: 340 | "@jest/console" "^29.2.1" 341 | "@jest/reporters" "^29.2.2" 342 | "@jest/test-result" "^29.2.1" 343 | "@jest/transform" "^29.2.2" 344 | "@jest/types" "^29.2.1" 345 | "@types/node" "*" 346 | ansi-escapes "^4.2.1" 347 | chalk "^4.0.0" 348 | ci-info "^3.2.0" 349 | exit "^0.1.2" 350 | graceful-fs "^4.2.9" 351 | jest-changed-files "^29.2.0" 352 | jest-config "^29.2.2" 353 | jest-haste-map "^29.2.1" 354 | jest-message-util "^29.2.1" 355 | jest-regex-util "^29.2.0" 356 | jest-resolve "^29.2.2" 357 | jest-resolve-dependencies "^29.2.2" 358 | jest-runner "^29.2.2" 359 | jest-runtime "^29.2.2" 360 | jest-snapshot "^29.2.2" 361 | jest-util "^29.2.1" 362 | jest-validate "^29.2.2" 363 | jest-watcher "^29.2.2" 364 | micromatch "^4.0.4" 365 | pretty-format "^29.2.1" 366 | slash "^3.0.0" 367 | strip-ansi "^6.0.0" 368 | 369 | "@jest/environment@^29.2.2": 370 | version "29.2.2" 371 | resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.2.2.tgz#481e729048d42e87d04842c38aa4d09c507f53b0" 372 | integrity sha512-OWn+Vhu0I1yxuGBJEFFekMYc8aGBGrY4rt47SOh/IFaI+D7ZHCk7pKRiSoZ2/Ml7b0Ony3ydmEHRx/tEOC7H1A== 373 | dependencies: 374 | "@jest/fake-timers" "^29.2.2" 375 | "@jest/types" "^29.2.1" 376 | "@types/node" "*" 377 | jest-mock "^29.2.2" 378 | 379 | "@jest/expect-utils@^29.2.2": 380 | version "29.2.2" 381 | resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.2.2.tgz#460a5b5a3caf84d4feb2668677393dd66ff98665" 382 | integrity sha512-vwnVmrVhTmGgQzyvcpze08br91OL61t9O0lJMDyb6Y/D8EKQ9V7rGUb/p7PDt0GPzK0zFYqXWFo4EO2legXmkg== 383 | dependencies: 384 | jest-get-type "^29.2.0" 385 | 386 | "@jest/expect@^29.2.2": 387 | version "29.2.2" 388 | resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.2.2.tgz#81edbd33afbde7795ca07ff6b4753d15205032e4" 389 | integrity sha512-zwblIZnrIVt8z/SiEeJ7Q9wKKuB+/GS4yZe9zw7gMqfGf4C5hBLGrVyxu1SzDbVSqyMSlprKl3WL1r80cBNkgg== 390 | dependencies: 391 | expect "^29.2.2" 392 | jest-snapshot "^29.2.2" 393 | 394 | "@jest/fake-timers@^29.2.2": 395 | version "29.2.2" 396 | resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.2.2.tgz#d8332e6e3cfa99cde4bc87d04a17d6b699deb340" 397 | integrity sha512-nqaW3y2aSyZDl7zQ7t1XogsxeavNpH6kkdq+EpXncIDvAkjvFD7hmhcIs1nWloengEWUoWqkqSA6MSbf9w6DgA== 398 | dependencies: 399 | "@jest/types" "^29.2.1" 400 | "@sinonjs/fake-timers" "^9.1.2" 401 | "@types/node" "*" 402 | jest-message-util "^29.2.1" 403 | jest-mock "^29.2.2" 404 | jest-util "^29.2.1" 405 | 406 | "@jest/globals@^29.2.2": 407 | version "29.2.2" 408 | resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.2.2.tgz#205ff1e795aa774301c2c0ba0be182558471b845" 409 | integrity sha512-/nt+5YMh65kYcfBhj38B3Hm0Trk4IsuMXNDGKE/swp36yydBWfz3OXkLqkSvoAtPW8IJMSJDFCbTM2oj5SNprw== 410 | dependencies: 411 | "@jest/environment" "^29.2.2" 412 | "@jest/expect" "^29.2.2" 413 | "@jest/types" "^29.2.1" 414 | jest-mock "^29.2.2" 415 | 416 | "@jest/reporters@^29.2.2": 417 | version "29.2.2" 418 | resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.2.2.tgz#69b395f79c3a97ce969ce05ccf1a482e5d6de290" 419 | integrity sha512-AzjL2rl2zJC0njIzcooBvjA4sJjvdoq98sDuuNs4aNugtLPSQ+91nysGKRF0uY1to5k0MdGMdOBggUsPqvBcpA== 420 | dependencies: 421 | "@bcoe/v8-coverage" "^0.2.3" 422 | "@jest/console" "^29.2.1" 423 | "@jest/test-result" "^29.2.1" 424 | "@jest/transform" "^29.2.2" 425 | "@jest/types" "^29.2.1" 426 | "@jridgewell/trace-mapping" "^0.3.15" 427 | "@types/node" "*" 428 | chalk "^4.0.0" 429 | collect-v8-coverage "^1.0.0" 430 | exit "^0.1.2" 431 | glob "^7.1.3" 432 | graceful-fs "^4.2.9" 433 | istanbul-lib-coverage "^3.0.0" 434 | istanbul-lib-instrument "^5.1.0" 435 | istanbul-lib-report "^3.0.0" 436 | istanbul-lib-source-maps "^4.0.0" 437 | istanbul-reports "^3.1.3" 438 | jest-message-util "^29.2.1" 439 | jest-util "^29.2.1" 440 | jest-worker "^29.2.1" 441 | slash "^3.0.0" 442 | string-length "^4.0.1" 443 | strip-ansi "^6.0.0" 444 | v8-to-istanbul "^9.0.1" 445 | 446 | "@jest/schemas@^29.0.0": 447 | version "29.0.0" 448 | resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.0.0.tgz#5f47f5994dd4ef067fb7b4188ceac45f77fe952a" 449 | integrity sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA== 450 | dependencies: 451 | "@sinclair/typebox" "^0.24.1" 452 | 453 | "@jest/source-map@^29.2.0": 454 | version "29.2.0" 455 | resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.2.0.tgz#ab3420c46d42508dcc3dc1c6deee0b613c235744" 456 | integrity sha512-1NX9/7zzI0nqa6+kgpSdKPK+WU1p+SJk3TloWZf5MzPbxri9UEeXX5bWZAPCzbQcyuAzubcdUHA7hcNznmRqWQ== 457 | dependencies: 458 | "@jridgewell/trace-mapping" "^0.3.15" 459 | callsites "^3.0.0" 460 | graceful-fs "^4.2.9" 461 | 462 | "@jest/test-result@^29.2.1": 463 | version "29.2.1" 464 | resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.2.1.tgz#f42dbf7b9ae465d0a93eee6131473b8bb3bd2edb" 465 | integrity sha512-lS4+H+VkhbX6z64tZP7PAUwPqhwj3kbuEHcaLuaBuB+riyaX7oa1txe0tXgrFj5hRWvZKvqO7LZDlNWeJ7VTPA== 466 | dependencies: 467 | "@jest/console" "^29.2.1" 468 | "@jest/types" "^29.2.1" 469 | "@types/istanbul-lib-coverage" "^2.0.0" 470 | collect-v8-coverage "^1.0.0" 471 | 472 | "@jest/test-sequencer@^29.2.2": 473 | version "29.2.2" 474 | resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.2.2.tgz#4ac7487b237e517a1f55e7866fb5553f6e0168b9" 475 | integrity sha512-Cuc1znc1pl4v9REgmmLf0jBd3Y65UXJpioGYtMr/JNpQEIGEzkmHhy6W6DLbSsXeUA13TDzymPv0ZGZ9jH3eIw== 476 | dependencies: 477 | "@jest/test-result" "^29.2.1" 478 | graceful-fs "^4.2.9" 479 | jest-haste-map "^29.2.1" 480 | slash "^3.0.0" 481 | 482 | "@jest/transform@^29.2.2": 483 | version "29.2.2" 484 | resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.2.2.tgz#dfc03fc092b31ffea0c55917728e75bfcf8b5de6" 485 | integrity sha512-aPe6rrletyuEIt2axxgdtxljmzH8O/nrov4byy6pDw9S8inIrTV+2PnjyP/oFHMSynzGxJ2s6OHowBNMXp/Jzg== 486 | dependencies: 487 | "@babel/core" "^7.11.6" 488 | "@jest/types" "^29.2.1" 489 | "@jridgewell/trace-mapping" "^0.3.15" 490 | babel-plugin-istanbul "^6.1.1" 491 | chalk "^4.0.0" 492 | convert-source-map "^1.4.0" 493 | fast-json-stable-stringify "^2.1.0" 494 | graceful-fs "^4.2.9" 495 | jest-haste-map "^29.2.1" 496 | jest-regex-util "^29.2.0" 497 | jest-util "^29.2.1" 498 | micromatch "^4.0.4" 499 | pirates "^4.0.4" 500 | slash "^3.0.0" 501 | write-file-atomic "^4.0.1" 502 | 503 | "@jest/types@^29.2.1": 504 | version "29.2.1" 505 | resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.2.1.tgz#ec9c683094d4eb754e41e2119d8bdaef01cf6da0" 506 | integrity sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw== 507 | dependencies: 508 | "@jest/schemas" "^29.0.0" 509 | "@types/istanbul-lib-coverage" "^2.0.0" 510 | "@types/istanbul-reports" "^3.0.0" 511 | "@types/node" "*" 512 | "@types/yargs" "^17.0.8" 513 | chalk "^4.0.0" 514 | 515 | "@jridgewell/gen-mapping@^0.1.0": 516 | version "0.1.1" 517 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" 518 | integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== 519 | dependencies: 520 | "@jridgewell/set-array" "^1.0.0" 521 | "@jridgewell/sourcemap-codec" "^1.4.10" 522 | 523 | "@jridgewell/gen-mapping@^0.3.2": 524 | version "0.3.2" 525 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" 526 | integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== 527 | dependencies: 528 | "@jridgewell/set-array" "^1.0.1" 529 | "@jridgewell/sourcemap-codec" "^1.4.10" 530 | "@jridgewell/trace-mapping" "^0.3.9" 531 | 532 | "@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3": 533 | version "3.1.0" 534 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" 535 | integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== 536 | 537 | "@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": 538 | version "1.1.2" 539 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" 540 | integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== 541 | 542 | "@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": 543 | version "1.4.14" 544 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" 545 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== 546 | 547 | "@jridgewell/trace-mapping@0.3.9": 548 | version "0.3.9" 549 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" 550 | integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== 551 | dependencies: 552 | "@jridgewell/resolve-uri" "^3.0.3" 553 | "@jridgewell/sourcemap-codec" "^1.4.10" 554 | 555 | "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.9": 556 | version "0.3.17" 557 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" 558 | integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== 559 | dependencies: 560 | "@jridgewell/resolve-uri" "3.1.0" 561 | "@jridgewell/sourcemap-codec" "1.4.14" 562 | 563 | "@sinclair/typebox@^0.24.1": 564 | version "0.24.51" 565 | resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" 566 | integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== 567 | 568 | "@sinonjs/commons@^1.7.0": 569 | version "1.8.4" 570 | resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.4.tgz#d1f2d80f1bd0f2520873f161588bd9b7f8567120" 571 | integrity sha512-RpmQdHVo8hCEHDVpO39zToS9jOhR6nw+/lQAzRNq9ErrGV9IeHM71XCn68svVl/euFeVW6BWX4p35gkhbOcSIQ== 572 | dependencies: 573 | type-detect "4.0.8" 574 | 575 | "@sinonjs/fake-timers@^9.1.2": 576 | version "9.1.2" 577 | resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c" 578 | integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== 579 | dependencies: 580 | "@sinonjs/commons" "^1.7.0" 581 | 582 | "@swc-node/core@^1.9.1": 583 | version "1.9.1" 584 | resolved "https://registry.yarnpkg.com/@swc-node/core/-/core-1.9.1.tgz#f86d6be5f97beaff91786f0266734ec85e8456c7" 585 | integrity sha512-Mh4T/PmQOpPtqw1BNvU38uWzsXbd5RJji17YBXnj7JDDE5KlTR9sSo2RKxWKDVtHbdcD1S+CtyZXA93aEWlfGQ== 586 | 587 | "@swc-node/register@^1.5.4": 588 | version "1.5.4" 589 | resolved "https://registry.yarnpkg.com/@swc-node/register/-/register-1.5.4.tgz#16b3f9bb94bf29dea87c4c4ef3799883d2462912" 590 | integrity sha512-cM5/A63bO6qLUFC4gcBnOlQO5yd8ObSdFUIp7sXf11Oq5mPVAnJy2DqjbWMUsqUaHuNk+lOIt76ie4DEseUIyA== 591 | dependencies: 592 | "@swc-node/core" "^1.9.1" 593 | "@swc-node/sourcemap-support" "^0.2.2" 594 | colorette "^2.0.19" 595 | debug "^4.3.4" 596 | pirates "^4.0.5" 597 | tslib "^2.4.0" 598 | 599 | "@swc-node/sourcemap-support@^0.2.2": 600 | version "0.2.2" 601 | resolved "https://registry.yarnpkg.com/@swc-node/sourcemap-support/-/sourcemap-support-0.2.2.tgz#6718d1ef3f4159c571b331cd4c20096a998cd385" 602 | integrity sha512-PA4p7nC5LwPdEVcQXFxMTpfvizYPeMoB55nIIx+yC3FiLnyPgC2hcpUitPy5h8RRGdCZ/Mvb2ryEcVYS8nI6YA== 603 | dependencies: 604 | source-map-support "^0.5.21" 605 | tslib "^2.4.0" 606 | 607 | "@swc/core-darwin-arm64@1.3.20": 608 | version "1.3.20" 609 | resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.20.tgz#e713ed63ef7b8096fb820b7cbd5aa776e824431f" 610 | integrity sha512-ZLk5oVP4v/BAdC3FuBuyB0xpnkZStblIajiyo/kpp/7mq3YbABhOxTCUJGDozISbkaZlIZFXjqvHHnIS42tssw== 611 | 612 | "@swc/core-darwin-x64@1.3.20": 613 | version "1.3.20" 614 | resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.20.tgz#8f8fe3562da7472be87346ae4a6c1919705b5b9b" 615 | integrity sha512-yM11/3n8PwougalAi9eWkz1r5QRDAg1qdXMSCn7sWlVGr0RvdPL20viKddm38yn+X3FzZzgdoajh7NGfEeqCIQ== 616 | 617 | "@swc/core-linux-arm-gnueabihf@1.3.20": 618 | version "1.3.20" 619 | resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.20.tgz#3fa68f374f04e9331b3aa7ba1cdc4d59a1cb9cd8" 620 | integrity sha512-Y8YX7Ma7/xdvCR+hwqhU2lNKF7Qevlx3qZ+eGEpz2fP6k5iu8C5arUBjFWdC2OTY11OuD00TH43TgYfbWpU/Sw== 621 | 622 | "@swc/core-linux-arm64-gnu@1.3.20": 623 | version "1.3.20" 624 | resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.20.tgz#998adffd8d21b63ce6b447cbcc3fa1fae0c2c5d1" 625 | integrity sha512-XCjQj4zo2T4QIqxVgzXkKxTLw4adqMgFG2iXBRRu1kOZXJor7Yzc0wH0B4rGtlkcZnh57MBbo+N1TNzH1leSFw== 626 | 627 | "@swc/core-linux-arm64-musl@1.3.20": 628 | version "1.3.20" 629 | resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.20.tgz#cb22719d615cd42ab9d89192ead228b2be983238" 630 | integrity sha512-f+fIixoNNaDjmHX0kJn8Lm1Z+CJPHqcYocGaPrXETRAv+8F3Q0rUtxO9FhDKtsG4pI6HRLmS5nBQtBBJWOmfvw== 631 | 632 | "@swc/core-linux-x64-gnu@1.3.20": 633 | version "1.3.20" 634 | resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.20.tgz#0090804c384ea343f8a39bbeee7a46d93cada714" 635 | integrity sha512-F5TKwsZh3F7CzfYoTAiNwhZazQ02NCgFZSqSwO4lOYbT7RU+zXI3OfLoi2R8f0dzfqh26QSdeeMFPdMb3LpzXg== 636 | 637 | "@swc/core-linux-x64-musl@1.3.20": 638 | version "1.3.20" 639 | resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.20.tgz#64ed5e489f0bcde67aae973bca5eb94ab16fa8d8" 640 | integrity sha512-svbrCeaWU2N9saeg5yKZ2aQh+eYE6vW7y+ptZHgLIriuhnelg38mNqNjKK9emhshUNqOPLFJbW8kA1P+jOyyLw== 641 | 642 | "@swc/core-win32-arm64-msvc@1.3.20": 643 | version "1.3.20" 644 | resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.20.tgz#1a0c27cca7a43932fd123d699e67741f9cc73129" 645 | integrity sha512-rFrC8JtVlnyfj5wTAIMvNWqPv0KXUA8/TmEKUlg7jgF/IweFPOFvF509tiAstz16Ui2JKL9xaA566/I+XLd+og== 646 | 647 | "@swc/core-win32-ia32-msvc@1.3.20": 648 | version "1.3.20" 649 | resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.20.tgz#7873119494214fdc079be4aba17e7851261833e7" 650 | integrity sha512-xIkBDw0Rd0G0SQ/g9FOUqrcmwcq/Iy7ScBQVV/NzziIGIUlrj9l4nYe3VyoMEH2lwAcyGo9AxwiNB0vq6vDjiQ== 651 | 652 | "@swc/core-win32-x64-msvc@1.3.20": 653 | version "1.3.20" 654 | resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.20.tgz#21b03ea39ea3e2af1a88fa35c0e7ae49adc89d87" 655 | integrity sha512-1/vxiNasPvpCnVdMxGXEXYhRI65l7yNg/AQ9fYLQn3O5ouWJcd60+6ZoeVrnR5i/R87Fyu/A9fMhOJuOKLHXmA== 656 | 657 | "@swc/core@^1.3.20": 658 | version "1.3.20" 659 | resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.20.tgz#1a290a3020cc272ea57f784e7d7669733b25eda2" 660 | integrity sha512-wSuy5mFTbAPYGlo1DGWkTbXwUubpyYxY2Sf10Y861c4EPtwK7D1nbj35Zg0bsIQvcFG5Y2Q4sXNV5QpsnT0+1A== 661 | optionalDependencies: 662 | "@swc/core-darwin-arm64" "1.3.20" 663 | "@swc/core-darwin-x64" "1.3.20" 664 | "@swc/core-linux-arm-gnueabihf" "1.3.20" 665 | "@swc/core-linux-arm64-gnu" "1.3.20" 666 | "@swc/core-linux-arm64-musl" "1.3.20" 667 | "@swc/core-linux-x64-gnu" "1.3.20" 668 | "@swc/core-linux-x64-musl" "1.3.20" 669 | "@swc/core-win32-arm64-msvc" "1.3.20" 670 | "@swc/core-win32-ia32-msvc" "1.3.20" 671 | "@swc/core-win32-x64-msvc" "1.3.20" 672 | 673 | "@tsconfig/node10@^1.0.7": 674 | version "1.0.9" 675 | resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" 676 | integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== 677 | 678 | "@tsconfig/node12@^1.0.7": 679 | version "1.0.11" 680 | resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" 681 | integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== 682 | 683 | "@tsconfig/node14@^1.0.0": 684 | version "1.0.3" 685 | resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" 686 | integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== 687 | 688 | "@tsconfig/node16@^1.0.2": 689 | version "1.0.3" 690 | resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" 691 | integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== 692 | 693 | "@types/babel__core@^7.1.14": 694 | version "7.1.19" 695 | resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460" 696 | integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== 697 | dependencies: 698 | "@babel/parser" "^7.1.0" 699 | "@babel/types" "^7.0.0" 700 | "@types/babel__generator" "*" 701 | "@types/babel__template" "*" 702 | "@types/babel__traverse" "*" 703 | 704 | "@types/babel__generator@*": 705 | version "7.6.4" 706 | resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" 707 | integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== 708 | dependencies: 709 | "@babel/types" "^7.0.0" 710 | 711 | "@types/babel__template@*": 712 | version "7.4.1" 713 | resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" 714 | integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== 715 | dependencies: 716 | "@babel/parser" "^7.1.0" 717 | "@babel/types" "^7.0.0" 718 | 719 | "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": 720 | version "7.18.2" 721 | resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.2.tgz#235bf339d17185bdec25e024ca19cce257cc7309" 722 | integrity sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg== 723 | dependencies: 724 | "@babel/types" "^7.3.0" 725 | 726 | "@types/command-line-args@^5.2.0": 727 | version "5.2.0" 728 | resolved "https://registry.yarnpkg.com/@types/command-line-args/-/command-line-args-5.2.0.tgz#adbb77980a1cc376bb208e3f4142e907410430f6" 729 | integrity sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA== 730 | 731 | "@types/graceful-fs@^4.1.3": 732 | version "4.1.5" 733 | resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" 734 | integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== 735 | dependencies: 736 | "@types/node" "*" 737 | 738 | "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": 739 | version "2.0.4" 740 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" 741 | integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== 742 | 743 | "@types/istanbul-lib-report@*": 744 | version "3.0.0" 745 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" 746 | integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== 747 | dependencies: 748 | "@types/istanbul-lib-coverage" "*" 749 | 750 | "@types/istanbul-reports@^3.0.0": 751 | version "3.0.1" 752 | resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" 753 | integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== 754 | dependencies: 755 | "@types/istanbul-lib-report" "*" 756 | 757 | "@types/jest@^29.2.1": 758 | version "29.2.1" 759 | resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.2.1.tgz#31fda30bdf2861706abc5f1730be78bed54f83ee" 760 | integrity sha512-nKixEdnGDqFOZkMTF74avFNr3yRqB1ZJ6sRZv5/28D5x2oLN14KApv7F9mfDT/vUic0L3tRCsh3XWpWjtJisUQ== 761 | dependencies: 762 | expect "^29.0.0" 763 | pretty-format "^29.0.0" 764 | 765 | "@types/lodash.isequal@^4.5.6": 766 | version "4.5.6" 767 | resolved "https://registry.yarnpkg.com/@types/lodash.isequal/-/lodash.isequal-4.5.6.tgz#ff42a1b8e20caa59a97e446a77dc57db923bc02b" 768 | integrity sha512-Ww4UGSe3DmtvLLJm2F16hDwEQSv7U0Rr8SujLUA2wHI2D2dm8kPu6Et+/y303LfjTIwSBKXB/YTUcAKpem/XEg== 769 | dependencies: 770 | "@types/lodash" "*" 771 | 772 | "@types/lodash@*": 773 | version "4.14.187" 774 | resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.187.tgz#122ff0a7192115b4c1a19444ab4482caa77e2c9d" 775 | integrity sha512-MrO/xLXCaUgZy3y96C/iOsaIqZSeupyTImKClHunL5GrmaiII2VwvWmLBu2hwa0Kp0sV19CsyjtrTc/Fx8rg/A== 776 | 777 | "@types/node@*", "@types/node@^18.11.9": 778 | version "18.11.9" 779 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.9.tgz#02d013de7058cea16d36168ef2fc653464cfbad4" 780 | integrity sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg== 781 | 782 | "@types/prettier@^2.1.5": 783 | version "2.7.1" 784 | resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.1.tgz#dfd20e2dc35f027cdd6c1908e80a5ddc7499670e" 785 | integrity sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow== 786 | 787 | "@types/stack-utils@^2.0.0": 788 | version "2.0.1" 789 | resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" 790 | integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== 791 | 792 | "@types/yargs-parser@*": 793 | version "21.0.0" 794 | resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" 795 | integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== 796 | 797 | "@types/yargs@^17.0.8": 798 | version "17.0.13" 799 | resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.13.tgz#34cced675ca1b1d51fcf4d34c3c6f0fa142a5c76" 800 | integrity sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg== 801 | dependencies: 802 | "@types/yargs-parser" "*" 803 | 804 | acorn-walk@^8.1.1: 805 | version "8.2.0" 806 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" 807 | integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== 808 | 809 | acorn@^8.4.1: 810 | version "8.8.1" 811 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" 812 | integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== 813 | 814 | ansi-escapes@^4.2.1: 815 | version "4.3.2" 816 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" 817 | integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== 818 | dependencies: 819 | type-fest "^0.21.3" 820 | 821 | ansi-regex@^5.0.1: 822 | version "5.0.1" 823 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 824 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 825 | 826 | ansi-styles@^3.2.1: 827 | version "3.2.1" 828 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 829 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 830 | dependencies: 831 | color-convert "^1.9.0" 832 | 833 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 834 | version "4.3.0" 835 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 836 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 837 | dependencies: 838 | color-convert "^2.0.1" 839 | 840 | ansi-styles@^5.0.0: 841 | version "5.2.0" 842 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" 843 | integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== 844 | 845 | anymatch@^3.0.3: 846 | version "3.1.2" 847 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 848 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 849 | dependencies: 850 | normalize-path "^3.0.0" 851 | picomatch "^2.0.4" 852 | 853 | arg@^4.1.0: 854 | version "4.1.3" 855 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" 856 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 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 | array-back@^3.0.1, array-back@^3.1.0: 866 | version "3.1.0" 867 | resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" 868 | integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== 869 | 870 | babel-jest@^29.2.2: 871 | version "29.2.2" 872 | resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.2.2.tgz#2c15abd8c2081293c9c3f4f80a4ed1d51542fee5" 873 | integrity sha512-kkq2QSDIuvpgfoac3WZ1OOcHsQQDU5xYk2Ql7tLdJ8BVAYbefEXal+NfS45Y5LVZA7cxC8KYcQMObpCt1J025w== 874 | dependencies: 875 | "@jest/transform" "^29.2.2" 876 | "@types/babel__core" "^7.1.14" 877 | babel-plugin-istanbul "^6.1.1" 878 | babel-preset-jest "^29.2.0" 879 | chalk "^4.0.0" 880 | graceful-fs "^4.2.9" 881 | slash "^3.0.0" 882 | 883 | babel-plugin-istanbul@^6.1.1: 884 | version "6.1.1" 885 | resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" 886 | integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== 887 | dependencies: 888 | "@babel/helper-plugin-utils" "^7.0.0" 889 | "@istanbuljs/load-nyc-config" "^1.0.0" 890 | "@istanbuljs/schema" "^0.1.2" 891 | istanbul-lib-instrument "^5.0.4" 892 | test-exclude "^6.0.0" 893 | 894 | babel-plugin-jest-hoist@^29.2.0: 895 | version "29.2.0" 896 | resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.2.0.tgz#23ee99c37390a98cfddf3ef4a78674180d823094" 897 | integrity sha512-TnspP2WNiR3GLfCsUNHqeXw0RoQ2f9U5hQ5L3XFpwuO8htQmSrhh8qsB6vi5Yi8+kuynN1yjDjQsPfkebmB6ZA== 898 | dependencies: 899 | "@babel/template" "^7.3.3" 900 | "@babel/types" "^7.3.3" 901 | "@types/babel__core" "^7.1.14" 902 | "@types/babel__traverse" "^7.0.6" 903 | 904 | babel-preset-current-node-syntax@^1.0.0: 905 | version "1.0.1" 906 | resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" 907 | integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== 908 | dependencies: 909 | "@babel/plugin-syntax-async-generators" "^7.8.4" 910 | "@babel/plugin-syntax-bigint" "^7.8.3" 911 | "@babel/plugin-syntax-class-properties" "^7.8.3" 912 | "@babel/plugin-syntax-import-meta" "^7.8.3" 913 | "@babel/plugin-syntax-json-strings" "^7.8.3" 914 | "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" 915 | "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" 916 | "@babel/plugin-syntax-numeric-separator" "^7.8.3" 917 | "@babel/plugin-syntax-object-rest-spread" "^7.8.3" 918 | "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" 919 | "@babel/plugin-syntax-optional-chaining" "^7.8.3" 920 | "@babel/plugin-syntax-top-level-await" "^7.8.3" 921 | 922 | babel-preset-jest@^29.2.0: 923 | version "29.2.0" 924 | resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.2.0.tgz#3048bea3a1af222e3505e4a767a974c95a7620dc" 925 | integrity sha512-z9JmMJppMxNv8N7fNRHvhMg9cvIkMxQBXgFkane3yKVEvEOP+kB50lk8DFRvF9PGqbyXxlmebKWhuDORO8RgdA== 926 | dependencies: 927 | babel-plugin-jest-hoist "^29.2.0" 928 | babel-preset-current-node-syntax "^1.0.0" 929 | 930 | balanced-match@^1.0.0: 931 | version "1.0.2" 932 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 933 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 934 | 935 | brace-expansion@^1.1.7: 936 | version "1.1.11" 937 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 938 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 939 | dependencies: 940 | balanced-match "^1.0.0" 941 | concat-map "0.0.1" 942 | 943 | braces@^3.0.2: 944 | version "3.0.2" 945 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 946 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 947 | dependencies: 948 | fill-range "^7.0.1" 949 | 950 | browserslist@^4.21.3: 951 | version "4.21.4" 952 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" 953 | integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== 954 | dependencies: 955 | caniuse-lite "^1.0.30001400" 956 | electron-to-chromium "^1.4.251" 957 | node-releases "^2.0.6" 958 | update-browserslist-db "^1.0.9" 959 | 960 | bs-logger@0.x: 961 | version "0.2.6" 962 | resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" 963 | integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== 964 | dependencies: 965 | fast-json-stable-stringify "2.x" 966 | 967 | bser@2.1.1: 968 | version "2.1.1" 969 | resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" 970 | integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== 971 | dependencies: 972 | node-int64 "^0.4.0" 973 | 974 | buffer-from@^1.0.0: 975 | version "1.1.2" 976 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 977 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 978 | 979 | callsites@^3.0.0: 980 | version "3.1.0" 981 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 982 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 983 | 984 | camelcase@^5.3.1: 985 | version "5.3.1" 986 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 987 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 988 | 989 | camelcase@^6.2.0: 990 | version "6.3.0" 991 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 992 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 993 | 994 | caniuse-lite@^1.0.30001400: 995 | version "1.0.30001429" 996 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001429.tgz#70cdae959096756a85713b36dd9cb82e62325639" 997 | integrity sha512-511ThLu1hF+5RRRt0zYCf2U2yRr9GPF6m5y90SBCWsvSoYoW7yAGlv/elyPaNfvGCkp6kj/KFZWU0BMA69Prsg== 998 | 999 | chalk@^2.0.0: 1000 | version "2.4.2" 1001 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 1002 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 1003 | dependencies: 1004 | ansi-styles "^3.2.1" 1005 | escape-string-regexp "^1.0.5" 1006 | supports-color "^5.3.0" 1007 | 1008 | chalk@^4.0.0: 1009 | version "4.1.2" 1010 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 1011 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 1012 | dependencies: 1013 | ansi-styles "^4.1.0" 1014 | supports-color "^7.1.0" 1015 | 1016 | char-regex@^1.0.2: 1017 | version "1.0.2" 1018 | resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" 1019 | integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== 1020 | 1021 | ci-info@^3.2.0: 1022 | version "3.5.0" 1023 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.5.0.tgz#bfac2a29263de4c829d806b1ab478e35091e171f" 1024 | integrity sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw== 1025 | 1026 | cjs-module-lexer@^1.0.0: 1027 | version "1.2.2" 1028 | resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" 1029 | integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== 1030 | 1031 | cliui@^8.0.1: 1032 | version "8.0.1" 1033 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" 1034 | integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== 1035 | dependencies: 1036 | string-width "^4.2.0" 1037 | strip-ansi "^6.0.1" 1038 | wrap-ansi "^7.0.0" 1039 | 1040 | co@^4.6.0: 1041 | version "4.6.0" 1042 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 1043 | integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== 1044 | 1045 | collect-v8-coverage@^1.0.0: 1046 | version "1.0.1" 1047 | resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" 1048 | integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== 1049 | 1050 | color-convert@^1.9.0: 1051 | version "1.9.3" 1052 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 1053 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 1054 | dependencies: 1055 | color-name "1.1.3" 1056 | 1057 | color-convert@^2.0.1: 1058 | version "2.0.1" 1059 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 1060 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 1061 | dependencies: 1062 | color-name "~1.1.4" 1063 | 1064 | color-name@1.1.3: 1065 | version "1.1.3" 1066 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 1067 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== 1068 | 1069 | color-name@~1.1.4: 1070 | version "1.1.4" 1071 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 1072 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 1073 | 1074 | colorette@^2.0.19: 1075 | version "2.0.19" 1076 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" 1077 | integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== 1078 | 1079 | command-line-args@^5.2.1: 1080 | version "5.2.1" 1081 | resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" 1082 | integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== 1083 | dependencies: 1084 | array-back "^3.1.0" 1085 | find-replace "^3.0.0" 1086 | lodash.camelcase "^4.3.0" 1087 | typical "^4.0.0" 1088 | 1089 | concat-map@0.0.1: 1090 | version "0.0.1" 1091 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 1092 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 1093 | 1094 | convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: 1095 | version "1.9.0" 1096 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" 1097 | integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== 1098 | 1099 | create-require@^1.1.0: 1100 | version "1.1.1" 1101 | resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" 1102 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== 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 | debug@^4.1.0, debug@^4.1.1, debug@^4.3.4: 1114 | version "4.3.4" 1115 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 1116 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 1117 | dependencies: 1118 | ms "2.1.2" 1119 | 1120 | dedent@^0.7.0: 1121 | version "0.7.0" 1122 | resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" 1123 | integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== 1124 | 1125 | deepmerge@^4.2.2: 1126 | version "4.2.2" 1127 | resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" 1128 | integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== 1129 | 1130 | detect-newline@^3.0.0: 1131 | version "3.1.0" 1132 | resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" 1133 | integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== 1134 | 1135 | diff-sequences@^29.2.0: 1136 | version "29.2.0" 1137 | resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.2.0.tgz#4c55b5b40706c7b5d2c5c75999a50c56d214e8f6" 1138 | integrity sha512-413SY5JpYeSBZxmenGEmCVQ8mCgtFJF0w9PROdaS6z987XC2Pd2GOKqOITLtMftmyFZqgtCOb/QA7/Z3ZXfzIw== 1139 | 1140 | diff@^4.0.1: 1141 | version "4.0.2" 1142 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 1143 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 1144 | 1145 | electron-to-chromium@^1.4.251: 1146 | version "1.4.284" 1147 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" 1148 | integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== 1149 | 1150 | emittery@^0.13.1: 1151 | version "0.13.1" 1152 | resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" 1153 | integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== 1154 | 1155 | emoji-regex@^8.0.0: 1156 | version "8.0.0" 1157 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 1158 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 1159 | 1160 | error-ex@^1.3.1: 1161 | version "1.3.2" 1162 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 1163 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 1164 | dependencies: 1165 | is-arrayish "^0.2.1" 1166 | 1167 | escalade@^3.1.1: 1168 | version "3.1.1" 1169 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 1170 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 1171 | 1172 | escape-string-regexp@^1.0.5: 1173 | version "1.0.5" 1174 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1175 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 1176 | 1177 | escape-string-regexp@^2.0.0: 1178 | version "2.0.0" 1179 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" 1180 | integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== 1181 | 1182 | esprima@^4.0.0: 1183 | version "4.0.1" 1184 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 1185 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 1186 | 1187 | execa@^5.0.0: 1188 | version "5.1.1" 1189 | resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" 1190 | integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== 1191 | dependencies: 1192 | cross-spawn "^7.0.3" 1193 | get-stream "^6.0.0" 1194 | human-signals "^2.1.0" 1195 | is-stream "^2.0.0" 1196 | merge-stream "^2.0.0" 1197 | npm-run-path "^4.0.1" 1198 | onetime "^5.1.2" 1199 | signal-exit "^3.0.3" 1200 | strip-final-newline "^2.0.0" 1201 | 1202 | exit@^0.1.2: 1203 | version "0.1.2" 1204 | resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" 1205 | integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== 1206 | 1207 | expect@^29.0.0, expect@^29.2.2: 1208 | version "29.2.2" 1209 | resolved "https://registry.yarnpkg.com/expect/-/expect-29.2.2.tgz#ba2dd0d7e818727710324a6e7f13dd0e6d086106" 1210 | integrity sha512-hE09QerxZ5wXiOhqkXy5d2G9ar+EqOyifnCXCpMNu+vZ6DG9TJ6CO2c2kPDSLqERTTWrO7OZj8EkYHQqSd78Yw== 1211 | dependencies: 1212 | "@jest/expect-utils" "^29.2.2" 1213 | jest-get-type "^29.2.0" 1214 | jest-matcher-utils "^29.2.2" 1215 | jest-message-util "^29.2.1" 1216 | jest-util "^29.2.1" 1217 | 1218 | fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.1.0: 1219 | version "2.1.0" 1220 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 1221 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 1222 | 1223 | fb-watchman@^2.0.0: 1224 | version "2.0.2" 1225 | resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" 1226 | integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== 1227 | dependencies: 1228 | bser "2.1.1" 1229 | 1230 | fill-range@^7.0.1: 1231 | version "7.0.1" 1232 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 1233 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 1234 | dependencies: 1235 | to-regex-range "^5.0.1" 1236 | 1237 | find-replace@^3.0.0: 1238 | version "3.0.0" 1239 | resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" 1240 | integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== 1241 | dependencies: 1242 | array-back "^3.0.1" 1243 | 1244 | find-up@^4.0.0, find-up@^4.1.0: 1245 | version "4.1.0" 1246 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 1247 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 1248 | dependencies: 1249 | locate-path "^5.0.0" 1250 | path-exists "^4.0.0" 1251 | 1252 | fs.realpath@^1.0.0: 1253 | version "1.0.0" 1254 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1255 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 1256 | 1257 | fsevents@^2.3.2: 1258 | version "2.3.2" 1259 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 1260 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 1261 | 1262 | function-bind@^1.1.1: 1263 | version "1.1.1" 1264 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1265 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1266 | 1267 | gensync@^1.0.0-beta.2: 1268 | version "1.0.0-beta.2" 1269 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" 1270 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 1271 | 1272 | get-caller-file@^2.0.5: 1273 | version "2.0.5" 1274 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 1275 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 1276 | 1277 | get-package-type@^0.1.0: 1278 | version "0.1.0" 1279 | resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" 1280 | integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== 1281 | 1282 | get-stream@^6.0.0: 1283 | version "6.0.1" 1284 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" 1285 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== 1286 | 1287 | glob@^7.1.3, glob@^7.1.4: 1288 | version "7.2.3" 1289 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 1290 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 1291 | dependencies: 1292 | fs.realpath "^1.0.0" 1293 | inflight "^1.0.4" 1294 | inherits "2" 1295 | minimatch "^3.1.1" 1296 | once "^1.3.0" 1297 | path-is-absolute "^1.0.0" 1298 | 1299 | globals@^11.1.0: 1300 | version "11.12.0" 1301 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 1302 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 1303 | 1304 | graceful-fs@^4.2.9: 1305 | version "4.2.10" 1306 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" 1307 | integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== 1308 | 1309 | has-flag@^3.0.0: 1310 | version "3.0.0" 1311 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1312 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 1313 | 1314 | has-flag@^4.0.0: 1315 | version "4.0.0" 1316 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1317 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1318 | 1319 | has@^1.0.3: 1320 | version "1.0.3" 1321 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1322 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1323 | dependencies: 1324 | function-bind "^1.1.1" 1325 | 1326 | html-escaper@^2.0.0: 1327 | version "2.0.2" 1328 | resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" 1329 | integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== 1330 | 1331 | human-signals@^2.1.0: 1332 | version "2.1.0" 1333 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" 1334 | integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== 1335 | 1336 | import-local@^3.0.2: 1337 | version "3.1.0" 1338 | resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" 1339 | integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== 1340 | dependencies: 1341 | pkg-dir "^4.2.0" 1342 | resolve-cwd "^3.0.0" 1343 | 1344 | imurmurhash@^0.1.4: 1345 | version "0.1.4" 1346 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1347 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 1348 | 1349 | inflight@^1.0.4: 1350 | version "1.0.6" 1351 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1352 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 1353 | dependencies: 1354 | once "^1.3.0" 1355 | wrappy "1" 1356 | 1357 | inherits@2: 1358 | version "2.0.4" 1359 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1360 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1361 | 1362 | is-arrayish@^0.2.1: 1363 | version "0.2.1" 1364 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1365 | integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== 1366 | 1367 | is-core-module@^2.9.0: 1368 | version "2.11.0" 1369 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" 1370 | integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== 1371 | dependencies: 1372 | has "^1.0.3" 1373 | 1374 | is-fullwidth-code-point@^3.0.0: 1375 | version "3.0.0" 1376 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1377 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1378 | 1379 | is-generator-fn@^2.0.0: 1380 | version "2.1.0" 1381 | resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" 1382 | integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== 1383 | 1384 | is-number@^7.0.0: 1385 | version "7.0.0" 1386 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1387 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1388 | 1389 | is-stream@^2.0.0: 1390 | version "2.0.1" 1391 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" 1392 | integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== 1393 | 1394 | isexe@^2.0.0: 1395 | version "2.0.0" 1396 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1397 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1398 | 1399 | istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: 1400 | version "3.2.0" 1401 | resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" 1402 | integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== 1403 | 1404 | istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: 1405 | version "5.2.1" 1406 | resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" 1407 | integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== 1408 | dependencies: 1409 | "@babel/core" "^7.12.3" 1410 | "@babel/parser" "^7.14.7" 1411 | "@istanbuljs/schema" "^0.1.2" 1412 | istanbul-lib-coverage "^3.2.0" 1413 | semver "^6.3.0" 1414 | 1415 | istanbul-lib-report@^3.0.0: 1416 | version "3.0.0" 1417 | resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" 1418 | integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== 1419 | dependencies: 1420 | istanbul-lib-coverage "^3.0.0" 1421 | make-dir "^3.0.0" 1422 | supports-color "^7.1.0" 1423 | 1424 | istanbul-lib-source-maps@^4.0.0: 1425 | version "4.0.1" 1426 | resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" 1427 | integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== 1428 | dependencies: 1429 | debug "^4.1.1" 1430 | istanbul-lib-coverage "^3.0.0" 1431 | source-map "^0.6.1" 1432 | 1433 | istanbul-reports@^3.1.3: 1434 | version "3.1.5" 1435 | resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" 1436 | integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== 1437 | dependencies: 1438 | html-escaper "^2.0.0" 1439 | istanbul-lib-report "^3.0.0" 1440 | 1441 | jest-changed-files@^29.2.0: 1442 | version "29.2.0" 1443 | resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.2.0.tgz#b6598daa9803ea6a4dce7968e20ab380ddbee289" 1444 | integrity sha512-qPVmLLyBmvF5HJrY7krDisx6Voi8DmlV3GZYX0aFNbaQsZeoz1hfxcCMbqDGuQCxU1dJy9eYc2xscE8QrCCYaA== 1445 | dependencies: 1446 | execa "^5.0.0" 1447 | p-limit "^3.1.0" 1448 | 1449 | jest-circus@^29.2.2: 1450 | version "29.2.2" 1451 | resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.2.2.tgz#1dc4d35fd49bf5e64d3cc505fb2db396237a6dfa" 1452 | integrity sha512-upSdWxx+Mh4DV7oueuZndJ1NVdgtTsqM4YgywHEx05UMH5nxxA2Qu9T9T9XVuR021XxqSoaKvSmmpAbjwwwxMw== 1453 | dependencies: 1454 | "@jest/environment" "^29.2.2" 1455 | "@jest/expect" "^29.2.2" 1456 | "@jest/test-result" "^29.2.1" 1457 | "@jest/types" "^29.2.1" 1458 | "@types/node" "*" 1459 | chalk "^4.0.0" 1460 | co "^4.6.0" 1461 | dedent "^0.7.0" 1462 | is-generator-fn "^2.0.0" 1463 | jest-each "^29.2.1" 1464 | jest-matcher-utils "^29.2.2" 1465 | jest-message-util "^29.2.1" 1466 | jest-runtime "^29.2.2" 1467 | jest-snapshot "^29.2.2" 1468 | jest-util "^29.2.1" 1469 | p-limit "^3.1.0" 1470 | pretty-format "^29.2.1" 1471 | slash "^3.0.0" 1472 | stack-utils "^2.0.3" 1473 | 1474 | jest-cli@^29.2.2: 1475 | version "29.2.2" 1476 | resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.2.2.tgz#feaf0aa57d327e80d4f2f18d5f8cd2e77cac5371" 1477 | integrity sha512-R45ygnnb2CQOfd8rTPFR+/fls0d+1zXS6JPYTBBrnLPrhr58SSuPTiA5Tplv8/PXpz4zXR/AYNxmwIj6J6nrvg== 1478 | dependencies: 1479 | "@jest/core" "^29.2.2" 1480 | "@jest/test-result" "^29.2.1" 1481 | "@jest/types" "^29.2.1" 1482 | chalk "^4.0.0" 1483 | exit "^0.1.2" 1484 | graceful-fs "^4.2.9" 1485 | import-local "^3.0.2" 1486 | jest-config "^29.2.2" 1487 | jest-util "^29.2.1" 1488 | jest-validate "^29.2.2" 1489 | prompts "^2.0.1" 1490 | yargs "^17.3.1" 1491 | 1492 | jest-config@^29.2.2: 1493 | version "29.2.2" 1494 | resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.2.2.tgz#bf98623a46454d644630c1f0de8bba3f495c2d59" 1495 | integrity sha512-Q0JX54a5g1lP63keRfKR8EuC7n7wwny2HoTRDb8cx78IwQOiaYUVZAdjViY3WcTxpR02rPUpvNVmZ1fkIlZPcw== 1496 | dependencies: 1497 | "@babel/core" "^7.11.6" 1498 | "@jest/test-sequencer" "^29.2.2" 1499 | "@jest/types" "^29.2.1" 1500 | babel-jest "^29.2.2" 1501 | chalk "^4.0.0" 1502 | ci-info "^3.2.0" 1503 | deepmerge "^4.2.2" 1504 | glob "^7.1.3" 1505 | graceful-fs "^4.2.9" 1506 | jest-circus "^29.2.2" 1507 | jest-environment-node "^29.2.2" 1508 | jest-get-type "^29.2.0" 1509 | jest-regex-util "^29.2.0" 1510 | jest-resolve "^29.2.2" 1511 | jest-runner "^29.2.2" 1512 | jest-util "^29.2.1" 1513 | jest-validate "^29.2.2" 1514 | micromatch "^4.0.4" 1515 | parse-json "^5.2.0" 1516 | pretty-format "^29.2.1" 1517 | slash "^3.0.0" 1518 | strip-json-comments "^3.1.1" 1519 | 1520 | jest-diff@^29.2.1: 1521 | version "29.2.1" 1522 | resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.2.1.tgz#027e42f5a18b693fb2e88f81b0ccab533c08faee" 1523 | integrity sha512-gfh/SMNlQmP3MOUgdzxPOd4XETDJifADpT937fN1iUGz+9DgOu2eUPHH25JDkLVcLwwqxv3GzVyK4VBUr9fjfA== 1524 | dependencies: 1525 | chalk "^4.0.0" 1526 | diff-sequences "^29.2.0" 1527 | jest-get-type "^29.2.0" 1528 | pretty-format "^29.2.1" 1529 | 1530 | jest-docblock@^29.2.0: 1531 | version "29.2.0" 1532 | resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.2.0.tgz#307203e20b637d97cee04809efc1d43afc641e82" 1533 | integrity sha512-bkxUsxTgWQGbXV5IENmfiIuqZhJcyvF7tU4zJ/7ioTutdz4ToB5Yx6JOFBpgI+TphRY4lhOyCWGNH/QFQh5T6A== 1534 | dependencies: 1535 | detect-newline "^3.0.0" 1536 | 1537 | jest-each@^29.2.1: 1538 | version "29.2.1" 1539 | resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.2.1.tgz#6b0a88ee85c2ba27b571a6010c2e0c674f5c9b29" 1540 | integrity sha512-sGP86H/CpWHMyK3qGIGFCgP6mt+o5tu9qG4+tobl0LNdgny0aitLXs9/EBacLy3Bwqy+v4uXClqJgASJWcruYw== 1541 | dependencies: 1542 | "@jest/types" "^29.2.1" 1543 | chalk "^4.0.0" 1544 | jest-get-type "^29.2.0" 1545 | jest-util "^29.2.1" 1546 | pretty-format "^29.2.1" 1547 | 1548 | jest-environment-node@^29.2.2: 1549 | version "29.2.2" 1550 | resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.2.2.tgz#a64b272773870c3a947cd338c25fd34938390bc2" 1551 | integrity sha512-B7qDxQjkIakQf+YyrqV5dICNs7tlCO55WJ4OMSXsqz1lpI/0PmeuXdx2F7eU8rnPbRkUR/fItSSUh0jvE2y/tw== 1552 | dependencies: 1553 | "@jest/environment" "^29.2.2" 1554 | "@jest/fake-timers" "^29.2.2" 1555 | "@jest/types" "^29.2.1" 1556 | "@types/node" "*" 1557 | jest-mock "^29.2.2" 1558 | jest-util "^29.2.1" 1559 | 1560 | jest-get-type@^29.2.0: 1561 | version "29.2.0" 1562 | resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.2.0.tgz#726646f927ef61d583a3b3adb1ab13f3a5036408" 1563 | integrity sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA== 1564 | 1565 | jest-haste-map@^29.2.1: 1566 | version "29.2.1" 1567 | resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.2.1.tgz#f803fec57f8075e6c55fb5cd551f99a72471c699" 1568 | integrity sha512-wF460rAFmYc6ARcCFNw4MbGYQjYkvjovb9GBT+W10Um8q5nHq98jD6fHZMDMO3tA56S8XnmNkM8GcA8diSZfnA== 1569 | dependencies: 1570 | "@jest/types" "^29.2.1" 1571 | "@types/graceful-fs" "^4.1.3" 1572 | "@types/node" "*" 1573 | anymatch "^3.0.3" 1574 | fb-watchman "^2.0.0" 1575 | graceful-fs "^4.2.9" 1576 | jest-regex-util "^29.2.0" 1577 | jest-util "^29.2.1" 1578 | jest-worker "^29.2.1" 1579 | micromatch "^4.0.4" 1580 | walker "^1.0.8" 1581 | optionalDependencies: 1582 | fsevents "^2.3.2" 1583 | 1584 | jest-leak-detector@^29.2.1: 1585 | version "29.2.1" 1586 | resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.2.1.tgz#ec551686b7d512ec875616c2c3534298b1ffe2fc" 1587 | integrity sha512-1YvSqYoiurxKOJtySc+CGVmw/e1v4yNY27BjWTVzp0aTduQeA7pdieLiW05wTYG/twlKOp2xS/pWuikQEmklug== 1588 | dependencies: 1589 | jest-get-type "^29.2.0" 1590 | pretty-format "^29.2.1" 1591 | 1592 | jest-matcher-utils@^29.2.2: 1593 | version "29.2.2" 1594 | resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.2.2.tgz#9202f8e8d3a54733266784ce7763e9a08688269c" 1595 | integrity sha512-4DkJ1sDPT+UX2MR7Y3od6KtvRi9Im1ZGLGgdLFLm4lPexbTaCgJW5NN3IOXlQHF7NSHY/VHhflQ+WoKtD/vyCw== 1596 | dependencies: 1597 | chalk "^4.0.0" 1598 | jest-diff "^29.2.1" 1599 | jest-get-type "^29.2.0" 1600 | pretty-format "^29.2.1" 1601 | 1602 | jest-message-util@^29.2.1: 1603 | version "29.2.1" 1604 | resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.2.1.tgz#3a51357fbbe0cc34236f17a90d772746cf8d9193" 1605 | integrity sha512-Dx5nEjw9V8C1/Yj10S/8ivA8F439VS8vTq1L7hEgwHFn9ovSKNpYW/kwNh7UglaEgXO42XxzKJB+2x0nSglFVw== 1606 | dependencies: 1607 | "@babel/code-frame" "^7.12.13" 1608 | "@jest/types" "^29.2.1" 1609 | "@types/stack-utils" "^2.0.0" 1610 | chalk "^4.0.0" 1611 | graceful-fs "^4.2.9" 1612 | micromatch "^4.0.4" 1613 | pretty-format "^29.2.1" 1614 | slash "^3.0.0" 1615 | stack-utils "^2.0.3" 1616 | 1617 | jest-mock@^29.2.2: 1618 | version "29.2.2" 1619 | resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.2.2.tgz#9045618b3f9d27074bbcf2d55bdca6a5e2e8bca7" 1620 | integrity sha512-1leySQxNAnivvbcx0sCB37itu8f4OX2S/+gxLAV4Z62shT4r4dTG9tACDywUAEZoLSr36aYUTsVp3WKwWt4PMQ== 1621 | dependencies: 1622 | "@jest/types" "^29.2.1" 1623 | "@types/node" "*" 1624 | jest-util "^29.2.1" 1625 | 1626 | jest-pnp-resolver@^1.2.2: 1627 | version "1.2.2" 1628 | resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" 1629 | integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== 1630 | 1631 | jest-regex-util@^29.2.0: 1632 | version "29.2.0" 1633 | resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.2.0.tgz#82ef3b587e8c303357728d0322d48bbfd2971f7b" 1634 | integrity sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA== 1635 | 1636 | jest-resolve-dependencies@^29.2.2: 1637 | version "29.2.2" 1638 | resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.2.2.tgz#1f444766f37a25f1490b5137408b6ff746a05d64" 1639 | integrity sha512-wWOmgbkbIC2NmFsq8Lb+3EkHuW5oZfctffTGvwsA4JcJ1IRk8b2tg+hz44f0lngvRTeHvp3Kyix9ACgudHH9aQ== 1640 | dependencies: 1641 | jest-regex-util "^29.2.0" 1642 | jest-snapshot "^29.2.2" 1643 | 1644 | jest-resolve@^29.2.2: 1645 | version "29.2.2" 1646 | resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.2.2.tgz#ad6436053b0638b41e12bbddde2b66e1397b35b5" 1647 | integrity sha512-3gaLpiC3kr14rJR3w7vWh0CBX2QAhfpfiQTwrFPvVrcHe5VUBtIXaR004aWE/X9B2CFrITOQAp5gxLONGrk6GA== 1648 | dependencies: 1649 | chalk "^4.0.0" 1650 | graceful-fs "^4.2.9" 1651 | jest-haste-map "^29.2.1" 1652 | jest-pnp-resolver "^1.2.2" 1653 | jest-util "^29.2.1" 1654 | jest-validate "^29.2.2" 1655 | resolve "^1.20.0" 1656 | resolve.exports "^1.1.0" 1657 | slash "^3.0.0" 1658 | 1659 | jest-runner@^29.2.2: 1660 | version "29.2.2" 1661 | resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.2.2.tgz#6b5302ed15eba8bf05e6b14d40f1e8d469564da3" 1662 | integrity sha512-1CpUxXDrbsfy9Hr9/1zCUUhT813kGGK//58HeIw/t8fa/DmkecEwZSWlb1N/xDKXg3uCFHQp1GCvlSClfImMxg== 1663 | dependencies: 1664 | "@jest/console" "^29.2.1" 1665 | "@jest/environment" "^29.2.2" 1666 | "@jest/test-result" "^29.2.1" 1667 | "@jest/transform" "^29.2.2" 1668 | "@jest/types" "^29.2.1" 1669 | "@types/node" "*" 1670 | chalk "^4.0.0" 1671 | emittery "^0.13.1" 1672 | graceful-fs "^4.2.9" 1673 | jest-docblock "^29.2.0" 1674 | jest-environment-node "^29.2.2" 1675 | jest-haste-map "^29.2.1" 1676 | jest-leak-detector "^29.2.1" 1677 | jest-message-util "^29.2.1" 1678 | jest-resolve "^29.2.2" 1679 | jest-runtime "^29.2.2" 1680 | jest-util "^29.2.1" 1681 | jest-watcher "^29.2.2" 1682 | jest-worker "^29.2.1" 1683 | p-limit "^3.1.0" 1684 | source-map-support "0.5.13" 1685 | 1686 | jest-runtime@^29.2.2: 1687 | version "29.2.2" 1688 | resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.2.2.tgz#4068ee82423769a481460efd21d45a8efaa5c179" 1689 | integrity sha512-TpR1V6zRdLynckKDIQaY41od4o0xWL+KOPUCZvJK2bu5P1UXhjobt5nJ2ICNeIxgyj9NGkO0aWgDqYPVhDNKjA== 1690 | dependencies: 1691 | "@jest/environment" "^29.2.2" 1692 | "@jest/fake-timers" "^29.2.2" 1693 | "@jest/globals" "^29.2.2" 1694 | "@jest/source-map" "^29.2.0" 1695 | "@jest/test-result" "^29.2.1" 1696 | "@jest/transform" "^29.2.2" 1697 | "@jest/types" "^29.2.1" 1698 | "@types/node" "*" 1699 | chalk "^4.0.0" 1700 | cjs-module-lexer "^1.0.0" 1701 | collect-v8-coverage "^1.0.0" 1702 | glob "^7.1.3" 1703 | graceful-fs "^4.2.9" 1704 | jest-haste-map "^29.2.1" 1705 | jest-message-util "^29.2.1" 1706 | jest-mock "^29.2.2" 1707 | jest-regex-util "^29.2.0" 1708 | jest-resolve "^29.2.2" 1709 | jest-snapshot "^29.2.2" 1710 | jest-util "^29.2.1" 1711 | slash "^3.0.0" 1712 | strip-bom "^4.0.0" 1713 | 1714 | jest-snapshot@^29.2.2: 1715 | version "29.2.2" 1716 | resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.2.2.tgz#1016ce60297b77382386bad561107174604690c2" 1717 | integrity sha512-GfKJrpZ5SMqhli3NJ+mOspDqtZfJBryGA8RIBxF+G+WbDoC7HCqKaeAss4Z/Sab6bAW11ffasx8/vGsj83jyjA== 1718 | dependencies: 1719 | "@babel/core" "^7.11.6" 1720 | "@babel/generator" "^7.7.2" 1721 | "@babel/plugin-syntax-jsx" "^7.7.2" 1722 | "@babel/plugin-syntax-typescript" "^7.7.2" 1723 | "@babel/traverse" "^7.7.2" 1724 | "@babel/types" "^7.3.3" 1725 | "@jest/expect-utils" "^29.2.2" 1726 | "@jest/transform" "^29.2.2" 1727 | "@jest/types" "^29.2.1" 1728 | "@types/babel__traverse" "^7.0.6" 1729 | "@types/prettier" "^2.1.5" 1730 | babel-preset-current-node-syntax "^1.0.0" 1731 | chalk "^4.0.0" 1732 | expect "^29.2.2" 1733 | graceful-fs "^4.2.9" 1734 | jest-diff "^29.2.1" 1735 | jest-get-type "^29.2.0" 1736 | jest-haste-map "^29.2.1" 1737 | jest-matcher-utils "^29.2.2" 1738 | jest-message-util "^29.2.1" 1739 | jest-util "^29.2.1" 1740 | natural-compare "^1.4.0" 1741 | pretty-format "^29.2.1" 1742 | semver "^7.3.5" 1743 | 1744 | jest-util@^29.0.0, jest-util@^29.2.1: 1745 | version "29.2.1" 1746 | resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.2.1.tgz#f26872ba0dc8cbefaba32c34f98935f6cf5fc747" 1747 | integrity sha512-P5VWDj25r7kj7kl4pN2rG/RN2c1TLfYYYZYULnS/35nFDjBai+hBeo3MDrYZS7p6IoY3YHZnt2vq4L6mKnLk0g== 1748 | dependencies: 1749 | "@jest/types" "^29.2.1" 1750 | "@types/node" "*" 1751 | chalk "^4.0.0" 1752 | ci-info "^3.2.0" 1753 | graceful-fs "^4.2.9" 1754 | picomatch "^2.2.3" 1755 | 1756 | jest-validate@^29.2.2: 1757 | version "29.2.2" 1758 | resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.2.2.tgz#e43ce1931292dfc052562a11bc681af3805eadce" 1759 | integrity sha512-eJXATaKaSnOuxNfs8CLHgdABFgUrd0TtWS8QckiJ4L/QVDF4KVbZFBBOwCBZHOS0Rc5fOxqngXeGXE3nGQkpQA== 1760 | dependencies: 1761 | "@jest/types" "^29.2.1" 1762 | camelcase "^6.2.0" 1763 | chalk "^4.0.0" 1764 | jest-get-type "^29.2.0" 1765 | leven "^3.1.0" 1766 | pretty-format "^29.2.1" 1767 | 1768 | jest-watcher@^29.2.2: 1769 | version "29.2.2" 1770 | resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.2.2.tgz#7093d4ea8177e0a0da87681a9e7b09a258b9daf7" 1771 | integrity sha512-j2otfqh7mOvMgN2WlJ0n7gIx9XCMWntheYGlBK7+5g3b1Su13/UAK7pdKGyd4kDlrLwtH2QPvRv5oNIxWvsJ1w== 1772 | dependencies: 1773 | "@jest/test-result" "^29.2.1" 1774 | "@jest/types" "^29.2.1" 1775 | "@types/node" "*" 1776 | ansi-escapes "^4.2.1" 1777 | chalk "^4.0.0" 1778 | emittery "^0.13.1" 1779 | jest-util "^29.2.1" 1780 | string-length "^4.0.1" 1781 | 1782 | jest-worker@^29.2.1: 1783 | version "29.2.1" 1784 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.2.1.tgz#8ba68255438252e1674f990f0180c54dfa26a3b1" 1785 | integrity sha512-ROHTZ+oj7sBrgtv46zZ84uWky71AoYi0vEV9CdEtc1FQunsoAGe5HbQmW76nI5QWdvECVPrSi1MCVUmizSavMg== 1786 | dependencies: 1787 | "@types/node" "*" 1788 | jest-util "^29.2.1" 1789 | merge-stream "^2.0.0" 1790 | supports-color "^8.0.0" 1791 | 1792 | jest@^29.2.2: 1793 | version "29.2.2" 1794 | resolved "https://registry.yarnpkg.com/jest/-/jest-29.2.2.tgz#24da83cbbce514718acd698926b7679109630476" 1795 | integrity sha512-r+0zCN9kUqoON6IjDdjbrsWobXM/09Nd45kIPRD8kloaRh1z5ZCMdVsgLXGxmlL7UpAJsvCYOQNO+NjvG/gqiQ== 1796 | dependencies: 1797 | "@jest/core" "^29.2.2" 1798 | "@jest/types" "^29.2.1" 1799 | import-local "^3.0.2" 1800 | jest-cli "^29.2.2" 1801 | 1802 | js-tokens@^4.0.0: 1803 | version "4.0.0" 1804 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1805 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1806 | 1807 | js-yaml@^3.13.1: 1808 | version "3.14.1" 1809 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" 1810 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 1811 | dependencies: 1812 | argparse "^1.0.7" 1813 | esprima "^4.0.0" 1814 | 1815 | jsesc@^2.5.1: 1816 | version "2.5.2" 1817 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 1818 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 1819 | 1820 | json-parse-even-better-errors@^2.3.0: 1821 | version "2.3.1" 1822 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" 1823 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 1824 | 1825 | json5@^2.2.1: 1826 | version "2.2.1" 1827 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" 1828 | integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== 1829 | 1830 | kleur@^3.0.3: 1831 | version "3.0.3" 1832 | resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" 1833 | integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== 1834 | 1835 | leven@^3.1.0: 1836 | version "3.1.0" 1837 | resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" 1838 | integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== 1839 | 1840 | lines-and-columns@^1.1.6: 1841 | version "1.2.4" 1842 | resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" 1843 | integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== 1844 | 1845 | locate-path@^5.0.0: 1846 | version "5.0.0" 1847 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 1848 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 1849 | dependencies: 1850 | p-locate "^4.1.0" 1851 | 1852 | lodash.camelcase@^4.3.0: 1853 | version "4.3.0" 1854 | resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" 1855 | integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== 1856 | 1857 | lodash.isequal@^4.5.0: 1858 | version "4.5.0" 1859 | resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" 1860 | integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== 1861 | 1862 | lodash.memoize@4.x: 1863 | version "4.1.2" 1864 | resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" 1865 | integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== 1866 | 1867 | lru-cache@^6.0.0: 1868 | version "6.0.0" 1869 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1870 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1871 | dependencies: 1872 | yallist "^4.0.0" 1873 | 1874 | make-dir@^3.0.0: 1875 | version "3.1.0" 1876 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 1877 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 1878 | dependencies: 1879 | semver "^6.0.0" 1880 | 1881 | make-error@1.x, make-error@^1.1.1: 1882 | version "1.3.6" 1883 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 1884 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 1885 | 1886 | makeerror@1.0.12: 1887 | version "1.0.12" 1888 | resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" 1889 | integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== 1890 | dependencies: 1891 | tmpl "1.0.5" 1892 | 1893 | merge-stream@^2.0.0: 1894 | version "2.0.0" 1895 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 1896 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 1897 | 1898 | micromatch@^4.0.4: 1899 | version "4.0.5" 1900 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 1901 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 1902 | dependencies: 1903 | braces "^3.0.2" 1904 | picomatch "^2.3.1" 1905 | 1906 | mimic-fn@^2.1.0: 1907 | version "2.1.0" 1908 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 1909 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 1910 | 1911 | minimatch@^3.0.4, minimatch@^3.1.1: 1912 | version "3.1.2" 1913 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1914 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1915 | dependencies: 1916 | brace-expansion "^1.1.7" 1917 | 1918 | ms@2.1.2: 1919 | version "2.1.2" 1920 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1921 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1922 | 1923 | natural-compare@^1.4.0: 1924 | version "1.4.0" 1925 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1926 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 1927 | 1928 | node-int64@^0.4.0: 1929 | version "0.4.0" 1930 | resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" 1931 | integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== 1932 | 1933 | node-releases@^2.0.6: 1934 | version "2.0.6" 1935 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" 1936 | integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== 1937 | 1938 | normalize-path@^3.0.0: 1939 | version "3.0.0" 1940 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1941 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1942 | 1943 | npm-run-path@^4.0.1: 1944 | version "4.0.1" 1945 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" 1946 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== 1947 | dependencies: 1948 | path-key "^3.0.0" 1949 | 1950 | once@^1.3.0: 1951 | version "1.4.0" 1952 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1953 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1954 | dependencies: 1955 | wrappy "1" 1956 | 1957 | onetime@^5.1.2: 1958 | version "5.1.2" 1959 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 1960 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 1961 | dependencies: 1962 | mimic-fn "^2.1.0" 1963 | 1964 | p-limit@^2.2.0: 1965 | version "2.3.0" 1966 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 1967 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 1968 | dependencies: 1969 | p-try "^2.0.0" 1970 | 1971 | p-limit@^3.1.0: 1972 | version "3.1.0" 1973 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 1974 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1975 | dependencies: 1976 | yocto-queue "^0.1.0" 1977 | 1978 | p-locate@^4.1.0: 1979 | version "4.1.0" 1980 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 1981 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 1982 | dependencies: 1983 | p-limit "^2.2.0" 1984 | 1985 | p-try@^2.0.0: 1986 | version "2.2.0" 1987 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1988 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1989 | 1990 | parse-json@^5.2.0: 1991 | version "5.2.0" 1992 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" 1993 | integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== 1994 | dependencies: 1995 | "@babel/code-frame" "^7.0.0" 1996 | error-ex "^1.3.1" 1997 | json-parse-even-better-errors "^2.3.0" 1998 | lines-and-columns "^1.1.6" 1999 | 2000 | path-exists@^4.0.0: 2001 | version "4.0.0" 2002 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 2003 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 2004 | 2005 | path-is-absolute@^1.0.0: 2006 | version "1.0.1" 2007 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2008 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 2009 | 2010 | path-key@^3.0.0, path-key@^3.1.0: 2011 | version "3.1.1" 2012 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 2013 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 2014 | 2015 | path-parse@^1.0.7: 2016 | version "1.0.7" 2017 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 2018 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 2019 | 2020 | picocolors@^1.0.0: 2021 | version "1.0.0" 2022 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 2023 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 2024 | 2025 | picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: 2026 | version "2.3.1" 2027 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 2028 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 2029 | 2030 | pirates@^4.0.4, pirates@^4.0.5: 2031 | version "4.0.5" 2032 | resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" 2033 | integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== 2034 | 2035 | pkg-dir@^4.2.0: 2036 | version "4.2.0" 2037 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" 2038 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 2039 | dependencies: 2040 | find-up "^4.0.0" 2041 | 2042 | prettier@^2.8.0: 2043 | version "2.8.0" 2044 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.0.tgz#c7df58393c9ba77d6fba3921ae01faf994fb9dc9" 2045 | integrity sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA== 2046 | 2047 | pretty-format@^29.0.0, pretty-format@^29.2.1: 2048 | version "29.2.1" 2049 | resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.2.1.tgz#86e7748fe8bbc96a6a4e04fa99172630907a9611" 2050 | integrity sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA== 2051 | dependencies: 2052 | "@jest/schemas" "^29.0.0" 2053 | ansi-styles "^5.0.0" 2054 | react-is "^18.0.0" 2055 | 2056 | prompts@^2.0.1: 2057 | version "2.4.2" 2058 | resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" 2059 | integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== 2060 | dependencies: 2061 | kleur "^3.0.3" 2062 | sisteransi "^1.0.5" 2063 | 2064 | react-is@^18.0.0: 2065 | version "18.2.0" 2066 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" 2067 | integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== 2068 | 2069 | require-directory@^2.1.1: 2070 | version "2.1.1" 2071 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 2072 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 2073 | 2074 | resolve-cwd@^3.0.0: 2075 | version "3.0.0" 2076 | resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" 2077 | integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== 2078 | dependencies: 2079 | resolve-from "^5.0.0" 2080 | 2081 | resolve-from@^5.0.0: 2082 | version "5.0.0" 2083 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" 2084 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== 2085 | 2086 | resolve.exports@^1.1.0: 2087 | version "1.1.0" 2088 | resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" 2089 | integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== 2090 | 2091 | resolve@^1.20.0: 2092 | version "1.22.1" 2093 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" 2094 | integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== 2095 | dependencies: 2096 | is-core-module "^2.9.0" 2097 | path-parse "^1.0.7" 2098 | supports-preserve-symlinks-flag "^1.0.0" 2099 | 2100 | semver@7.x, semver@^7.3.5: 2101 | version "7.3.8" 2102 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" 2103 | integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== 2104 | dependencies: 2105 | lru-cache "^6.0.0" 2106 | 2107 | semver@^6.0.0, semver@^6.3.0: 2108 | version "6.3.0" 2109 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 2110 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 2111 | 2112 | shebang-command@^2.0.0: 2113 | version "2.0.0" 2114 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 2115 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 2116 | dependencies: 2117 | shebang-regex "^3.0.0" 2118 | 2119 | shebang-regex@^3.0.0: 2120 | version "3.0.0" 2121 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 2122 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 2123 | 2124 | signal-exit@^3.0.3, signal-exit@^3.0.7: 2125 | version "3.0.7" 2126 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 2127 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 2128 | 2129 | sisteransi@^1.0.5: 2130 | version "1.0.5" 2131 | resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" 2132 | integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== 2133 | 2134 | slash@^3.0.0: 2135 | version "3.0.0" 2136 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 2137 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 2138 | 2139 | source-map-support@0.5.13: 2140 | version "0.5.13" 2141 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" 2142 | integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== 2143 | dependencies: 2144 | buffer-from "^1.0.0" 2145 | source-map "^0.6.0" 2146 | 2147 | source-map-support@^0.5.21: 2148 | version "0.5.21" 2149 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" 2150 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 2151 | dependencies: 2152 | buffer-from "^1.0.0" 2153 | source-map "^0.6.0" 2154 | 2155 | source-map@^0.6.0, source-map@^0.6.1: 2156 | version "0.6.1" 2157 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2158 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 2159 | 2160 | sprintf-js@~1.0.2: 2161 | version "1.0.3" 2162 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2163 | integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== 2164 | 2165 | stack-utils@^2.0.3: 2166 | version "2.0.5" 2167 | resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" 2168 | integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== 2169 | dependencies: 2170 | escape-string-regexp "^2.0.0" 2171 | 2172 | string-length@^4.0.1: 2173 | version "4.0.2" 2174 | resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" 2175 | integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== 2176 | dependencies: 2177 | char-regex "^1.0.2" 2178 | strip-ansi "^6.0.0" 2179 | 2180 | string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: 2181 | version "4.2.3" 2182 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 2183 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 2184 | dependencies: 2185 | emoji-regex "^8.0.0" 2186 | is-fullwidth-code-point "^3.0.0" 2187 | strip-ansi "^6.0.1" 2188 | 2189 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 2190 | version "6.0.1" 2191 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 2192 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 2193 | dependencies: 2194 | ansi-regex "^5.0.1" 2195 | 2196 | strip-bom@^4.0.0: 2197 | version "4.0.0" 2198 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" 2199 | integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== 2200 | 2201 | strip-final-newline@^2.0.0: 2202 | version "2.0.0" 2203 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" 2204 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== 2205 | 2206 | strip-json-comments@^3.1.1: 2207 | version "3.1.1" 2208 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 2209 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 2210 | 2211 | supports-color@^5.3.0: 2212 | version "5.5.0" 2213 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2214 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2215 | dependencies: 2216 | has-flag "^3.0.0" 2217 | 2218 | supports-color@^7.1.0: 2219 | version "7.2.0" 2220 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 2221 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 2222 | dependencies: 2223 | has-flag "^4.0.0" 2224 | 2225 | supports-color@^8.0.0: 2226 | version "8.1.1" 2227 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 2228 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 2229 | dependencies: 2230 | has-flag "^4.0.0" 2231 | 2232 | supports-preserve-symlinks-flag@^1.0.0: 2233 | version "1.0.0" 2234 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 2235 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 2236 | 2237 | test-exclude@^6.0.0: 2238 | version "6.0.0" 2239 | resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" 2240 | integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== 2241 | dependencies: 2242 | "@istanbuljs/schema" "^0.1.2" 2243 | glob "^7.1.4" 2244 | minimatch "^3.0.4" 2245 | 2246 | tmpl@1.0.5: 2247 | version "1.0.5" 2248 | resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" 2249 | integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== 2250 | 2251 | to-fast-properties@^2.0.0: 2252 | version "2.0.0" 2253 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 2254 | integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== 2255 | 2256 | to-regex-range@^5.0.1: 2257 | version "5.0.1" 2258 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 2259 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2260 | dependencies: 2261 | is-number "^7.0.0" 2262 | 2263 | ts-jest@^29.0.3: 2264 | version "29.0.3" 2265 | resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.0.3.tgz#63ea93c5401ab73595440733cefdba31fcf9cb77" 2266 | integrity sha512-Ibygvmuyq1qp/z3yTh9QTwVVAbFdDy/+4BtIQR2sp6baF2SJU/8CKK/hhnGIDY2L90Az2jIqTwZPnN2p+BweiQ== 2267 | dependencies: 2268 | bs-logger "0.x" 2269 | fast-json-stable-stringify "2.x" 2270 | jest-util "^29.0.0" 2271 | json5 "^2.2.1" 2272 | lodash.memoize "4.x" 2273 | make-error "1.x" 2274 | semver "7.x" 2275 | yargs-parser "^21.0.1" 2276 | 2277 | ts-node@^10.9.1: 2278 | version "10.9.1" 2279 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" 2280 | integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== 2281 | dependencies: 2282 | "@cspotcode/source-map-support" "^0.8.0" 2283 | "@tsconfig/node10" "^1.0.7" 2284 | "@tsconfig/node12" "^1.0.7" 2285 | "@tsconfig/node14" "^1.0.0" 2286 | "@tsconfig/node16" "^1.0.2" 2287 | acorn "^8.4.1" 2288 | acorn-walk "^8.1.1" 2289 | arg "^4.1.0" 2290 | create-require "^1.1.0" 2291 | diff "^4.0.1" 2292 | make-error "^1.1.1" 2293 | v8-compile-cache-lib "^3.0.1" 2294 | yn "3.1.1" 2295 | 2296 | tslib@^2.4.0: 2297 | version "2.4.1" 2298 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" 2299 | integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== 2300 | 2301 | type-detect@4.0.8: 2302 | version "4.0.8" 2303 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 2304 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 2305 | 2306 | type-fest@^0.21.3: 2307 | version "0.21.3" 2308 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" 2309 | integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== 2310 | 2311 | typescript@^4.8.4: 2312 | version "4.8.4" 2313 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" 2314 | integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== 2315 | 2316 | typical@^4.0.0: 2317 | version "4.0.0" 2318 | resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" 2319 | integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== 2320 | 2321 | update-browserslist-db@^1.0.9: 2322 | version "1.0.10" 2323 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" 2324 | integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== 2325 | dependencies: 2326 | escalade "^3.1.1" 2327 | picocolors "^1.0.0" 2328 | 2329 | v8-compile-cache-lib@^3.0.1: 2330 | version "3.0.1" 2331 | resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" 2332 | integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== 2333 | 2334 | v8-to-istanbul@^9.0.1: 2335 | version "9.0.1" 2336 | resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4" 2337 | integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== 2338 | dependencies: 2339 | "@jridgewell/trace-mapping" "^0.3.12" 2340 | "@types/istanbul-lib-coverage" "^2.0.1" 2341 | convert-source-map "^1.6.0" 2342 | 2343 | walker@^1.0.8: 2344 | version "1.0.8" 2345 | resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" 2346 | integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== 2347 | dependencies: 2348 | makeerror "1.0.12" 2349 | 2350 | which@^2.0.1: 2351 | version "2.0.2" 2352 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2353 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2354 | dependencies: 2355 | isexe "^2.0.0" 2356 | 2357 | wrap-ansi@^7.0.0: 2358 | version "7.0.0" 2359 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 2360 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 2361 | dependencies: 2362 | ansi-styles "^4.0.0" 2363 | string-width "^4.1.0" 2364 | strip-ansi "^6.0.0" 2365 | 2366 | wrappy@1: 2367 | version "1.0.2" 2368 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2369 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 2370 | 2371 | write-file-atomic@^4.0.1: 2372 | version "4.0.2" 2373 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" 2374 | integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== 2375 | dependencies: 2376 | imurmurhash "^0.1.4" 2377 | signal-exit "^3.0.7" 2378 | 2379 | y18n@^5.0.5: 2380 | version "5.0.8" 2381 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 2382 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 2383 | 2384 | yallist@^4.0.0: 2385 | version "4.0.0" 2386 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 2387 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 2388 | 2389 | yargs-parser@^21.0.0, yargs-parser@^21.0.1: 2390 | version "21.1.1" 2391 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" 2392 | integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== 2393 | 2394 | yargs@^17.3.1: 2395 | version "17.6.1" 2396 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.1.tgz#712508771045019cda059bc1ba3ae091aaa1402e" 2397 | integrity sha512-leBuCGrL4dAd6ispNOGsJlhd0uZ6Qehkbu/B9KCR+Pxa/NVdNwi+i31lo0buCm6XxhJQFshXCD0/evfV4xfoUg== 2398 | dependencies: 2399 | cliui "^8.0.1" 2400 | escalade "^3.1.1" 2401 | get-caller-file "^2.0.5" 2402 | require-directory "^2.1.1" 2403 | string-width "^4.2.3" 2404 | y18n "^5.0.5" 2405 | yargs-parser "^21.0.0" 2406 | 2407 | yn@3.1.1: 2408 | version "3.1.1" 2409 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 2410 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 2411 | 2412 | yocto-queue@^0.1.0: 2413 | version "0.1.0" 2414 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 2415 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 2416 | --------------------------------------------------------------------------------