├── jest.config.js ├── tsconfig.json ├── src ├── definition.ts ├── identifier.test.ts ├── identifier.ts ├── main.ts ├── tokentype.ts ├── main.test.ts ├── to-selector.ts └── parser.ts ├── .github └── workflows │ └── main.yaml ├── package.json ├── LICENSE ├── README.md ├── .gitignore └── pnpm-lock.yaml /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | clearMocks: true, 3 | moduleFileExtensions: ["js", "ts"], 4 | testEnvironment: "node", 5 | testMatch: ["**/*.test.ts"], 6 | testRunner: "jest-circus/runner", 7 | transform: { 8 | "^.+\\.ts$": "ts-jest", 9 | }, 10 | verbose: true, 11 | }; 12 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "noImplicitAny": true, 4 | "strict": true, 5 | "target": "es6", 6 | "module": "commonjs", 7 | "rootDir": "./src", 8 | "outDir": "./lib", 9 | "esModuleInterop": true, 10 | "declaration": true 11 | }, 12 | "exclude": ["node_modules", "**/*.test.ts", "./lib"] 13 | } 14 | -------------------------------------------------------------------------------- /src/definition.ts: -------------------------------------------------------------------------------- 1 | import { TokenType } from "./tokentype"; 2 | 3 | export interface ASTNode { 4 | type: string; 5 | start: number; 6 | end: number; 7 | value?: string; 8 | axis?: TokenType; 9 | nodeTest?: ASTNode; 10 | position?: string; 11 | predicate?: ASTNode[]; 12 | arg?: ASTNode[]; 13 | attr?: string; 14 | name?: string; 15 | } 16 | -------------------------------------------------------------------------------- /src/identifier.test.ts: -------------------------------------------------------------------------------- 1 | import { isIdentifierStart } from "./identifier"; 2 | 3 | test("isIdentifierStart", () => { 4 | "$_asdfghjklASDFGHJKL".split("").forEach((char) => { 5 | const code = char.charCodeAt(0); 6 | expect(isIdentifierStart(code)).toEqual(true); 7 | }); 8 | }); 9 | 10 | test("isNotIdentifierStart", () => { 11 | "#@1234567890*()".split("").forEach((char) => { 12 | const code = char.charCodeAt(0); 13 | expect(isIdentifierStart(code)).toEqual(false); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /.github/workflows/main.yaml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: [push, pull_request] 4 | 5 | jobs: 6 | build: 7 | strategy: 8 | matrix: 9 | platform: [ubuntu-latest] 10 | node: [ 14.x, 18.x ] 11 | name: Node ${{ matrix.node }} (${{ matrix.platform }}) 12 | runs-on: ${{ matrix.platform }} 13 | steps: 14 | - uses: actions/checkout@v3 15 | - uses: actions/setup-node@v3 16 | with: 17 | node-version: ${{ matrix.node }} 18 | - name: install dependencies 19 | run: yarn 20 | - name: run tests 21 | run: yarn test 22 | -------------------------------------------------------------------------------- /src/identifier.ts: -------------------------------------------------------------------------------- 1 | export const isIdentifierStart = function (code: number): boolean { 2 | if (code < 65) return code === 36; // $ 3 | if (code < 91) return true; // A-Z 4 | if (code < 97) return code === 95; // _ 5 | return code < 123; // `a-z` 6 | }; 7 | 8 | export const isIdentifierChar = function (code: number): boolean { 9 | if (code < 45) return code === 36; // $ 10 | if (code < 48) return code === 45; // - 11 | if (code < 58) return true; // 0-9 12 | if (code < 65) return false; 13 | if (code < 91) return true; // A-Z 14 | if (code < 97) return code === 95; // _ 15 | return code < 123; // `a-z` 16 | }; 17 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import Parser from "./parser"; 2 | import toSelector from "./to-selector"; 3 | 4 | export const parse = (query: string) => new Parser(query).parse(); 5 | 6 | export const isXPath = (query: string) => { 7 | try { 8 | parse(query); 9 | 10 | return true; 11 | } catch (e) { 12 | return false; 13 | } 14 | }; 15 | 16 | export const xpath2css = (query: string) => toSelector(parse(query)); 17 | 18 | export default xpath2css; 19 | 20 | export const x = (arg: string[], ...param: any[]) => { 21 | if (arg.length <= 1) { 22 | return xpath2css(arg[0]); 23 | } 24 | 25 | let query = arg[0]; 26 | for (let i = 1; i < arg.length; i++) { 27 | query += String(param[i - 1]); 28 | query += arg[i]; 29 | } 30 | 31 | return xpath2css(query); 32 | }; 33 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "xpath-to-selector", 3 | "version": "1.1.3", 4 | "description": "convert xpath to css selector", 5 | "main": "lib/main.js", 6 | "repository": "https://github.com/steambap/xpath-to-selector.git", 7 | "author": "Weilin Shi <934587911@qq.com>", 8 | "license": "MIT", 9 | "scripts": { 10 | "test": "jest", 11 | "build": "tsc" 12 | }, 13 | "keywords": [ 14 | "xpath", 15 | "css-selector", 16 | "xpath to css", 17 | "xpath2css", 18 | "convert" 19 | ], 20 | "files": [ 21 | "lib/*.js", 22 | "lib/*.d.ts" 23 | ], 24 | "typings": "lib/main.d.ts", 25 | "devDependencies": { 26 | "@types/jest": "^29.5.0", 27 | "@vercel/ncc": "^0.24.0", 28 | "jest": "^29.5.0", 29 | "jest-circus": "^29.5.0", 30 | "ts-jest": "^29.0.5", 31 | "typescript": "^4.9.4" 32 | }, 33 | "bugs": { 34 | "url": "https://github.com/steambap/xpath-to-selector/issues" 35 | }, 36 | "homepage": "https://github.com/steambap/xpath-to-selector" 37 | } 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 - 2023 Weilin Shi 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/tokentype.ts: -------------------------------------------------------------------------------- 1 | interface ttOptions { 2 | keyword?: string; 3 | beforeExpr?: boolean; 4 | } 5 | 6 | export class TokenType { 7 | label: string; 8 | beforeExpr: boolean; 9 | constructor(label: string, options: ttOptions = {}) { 10 | this.label = label; 11 | this.beforeExpr = Boolean(options.beforeExpr); 12 | } 13 | } 14 | 15 | type keywordsMap = { 16 | [name: string]: TokenType; 17 | }; 18 | 19 | export const keywords: keywordsMap = {}; 20 | 21 | function kw(name: string, options: ttOptions = {}): TokenType { 22 | options.keyword = name; 23 | const tt = new TokenType(name, options); 24 | keywords[name] = tt; 25 | 26 | return tt; 27 | } 28 | 29 | const types = { 30 | num: new TokenType("num"), 31 | string: new TokenType("string"), 32 | name: new TokenType("name"), 33 | eof: new TokenType("eof"), 34 | 35 | // Operators 36 | bracketL: new TokenType("["), 37 | bracketR: new TokenType("]"), 38 | parenL: new TokenType("("), 39 | parenR: new TokenType(")"), 40 | pipe: new TokenType("|"), 41 | slash: new TokenType("/"), 42 | doubleSlash: new TokenType("//"), 43 | star: new TokenType("*"), 44 | at: new TokenType("@"), 45 | eq: new TokenType("="), 46 | comma: new TokenType(","), 47 | and: kw("and", {beforeExpr: true}), 48 | }; 49 | 50 | export default types; 51 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # xpath-to-selector 2 | [![CI](https://github.com/steambap/xpath-to-selector/actions/workflows/main.yaml/badge.svg)](https://github.com/steambap/xpath-to-selector/actions/workflows/main.yaml) 3 | 4 | convert xpath to css selector 5 | 6 | ## install 7 | > npm install --save-dev xpath-to-selector 8 | 9 | ## usage 10 | ```JavaScript 11 | import xPath2Selector from "xpath-to-selector"; 12 | 13 | const xPath = 14 | '//div[@id="foo"][2]/span[@class="bar"]//a[contains(@class, "baz")]//img[1]'; 15 | const css = xPath2Selector(xPath); 16 | console.log(css); // => 'div#foo:nth-child(2) > span.bar a[class*=baz] img:nth-child(1)' 17 | ``` 18 | 19 | ## why 20 | In my one of my previous job I was working on a product that is similar to Cypress / Selenium. The product should allow the user to use either xpath or css selector, so I wrote a simple JavaScript convertor from xpath to css selector. This is an upgraded version of what I have at that time and it's rewritten in TypeScript. 21 | 22 | The community already have [xpath-to-css](https://github.com/svenheden/xpath-to-css). But I think it would be nice to let others see my implementation if they don't like the Python and regexp based parser for xpath. 23 | 24 | By using a recursive parser, it allows you to parser something that is very difficult to match in Regex, for example: 25 | ```JavaScript 26 | import xPath2Selector from "xpath-to-selector"; 27 | 28 | const xPath = 29 | '/html/body/form/input[@id="id_username" and position()=2]'; 30 | const css = xPath2Selector(xPath); 31 | console.log(css); // => 'html > body > form > input#id_username:nth-child(2)' 32 | ``` 33 | 34 | ## license 35 | [MIT](LICENSE) 36 | -------------------------------------------------------------------------------- /src/main.test.ts: -------------------------------------------------------------------------------- 1 | import toCss from "./main"; 2 | 3 | test("it works", () => { 4 | const xPath = 5 | '//div[@id="foo"][2]/span[@class="bar"]//a[contains(@class, "baz")]//img[1]'; 6 | const css = toCss(xPath); 7 | expect(css).toEqual( 8 | "div#foo:nth-child(2) > span.bar a[class*=baz] img:nth-child(1)" 9 | ); 10 | }); 11 | 12 | test("attribute axis", () => { 13 | const xPath = '//people/person[@lastname="brown"]'; 14 | const css = toCss(xPath); 15 | expect(css).toEqual('people > person[lastname="brown"]'); 16 | }); 17 | 18 | test("attribute node test", () => { 19 | const xPath = '//meta[@property="og:novel:author"]/@content'; 20 | const css = toCss(xPath); 21 | expect(css).toEqual('meta[property="og:novel:author"] > [content]'); 22 | }); 23 | 24 | test("position filter", () => { 25 | const xPath = "/people/person[2]"; 26 | const css = toCss(xPath); 27 | expect(css).toEqual("people > person:nth-child(2)"); 28 | }); 29 | 30 | test("contains filter", () => { 31 | const xPath = "/people/person//address[contains(@street, 'south')]"; 32 | const css = toCss(xPath); 33 | expect(css).toEqual("people > person address[street*=south]"); 34 | }); 35 | 36 | test("id", () => { 37 | const xPath = '//people/person[@id="jed"]'; 38 | const css = toCss(xPath); 39 | expect(css).toEqual("people > person#jed"); 40 | }); 41 | 42 | test("class", () => { 43 | const xPath = '//people/person[@class="jung"]'; 44 | const css = toCss(xPath); 45 | expect(css).toEqual("people > person.jung"); 46 | }); 47 | 48 | test("multi filter", () => { 49 | const xPath = '/html/body/form/input[@id="id_username" and position()=2]'; 50 | const css = toCss(xPath); 51 | expect(css).toEqual("html > body > form > input#id_username:nth-child(2)"); 52 | }); 53 | 54 | test("invalid multi filter", () => { 55 | expect(() => { 56 | const xPath = "/input[666 and position()=6]"; 57 | toCss(xPath); 58 | }).toThrow(); 59 | }); 60 | 61 | test("dash", () => { 62 | const xPath = '//app-root[@id="foo"][2]/span[@class="bar"]//a[contains(@class, "baz")]//img[1]'; 63 | const css = toCss(xPath); 64 | expect(css).toEqual('app-root#foo:nth-child(2) > span.bar a[class*=baz] img:nth-child(1)'); 65 | }); 66 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | 106 | # Ignore built ts files 107 | __tests__/runner/* 108 | lib/**/* 109 | dist/ 110 | .idea -------------------------------------------------------------------------------- /src/to-selector.ts: -------------------------------------------------------------------------------- 1 | import tt, { TokenType } from "./tokentype"; 2 | import { ASTNode } from "./definition"; 3 | 4 | function axisToStr(axis: TokenType, isFirst: boolean) { 5 | if (isFirst) { 6 | return ""; 7 | } 8 | 9 | if (axis === tt.doubleSlash) { 10 | // child or descendent 11 | return " "; 12 | } else if (axis === tt.slash) { 13 | return " > "; 14 | } 15 | 16 | throw Error("!Unexpected axis"); 17 | } 18 | 19 | function nodeTestToStr(node: ASTNode): string { 20 | if (node.value === "*") { 21 | return ""; 22 | } 23 | if (node.value === "@") { 24 | return attrFilterToStr(node.predicate![0]); 25 | } 26 | 27 | return node.value || ""; 28 | } 29 | 30 | function attrFilterToStr(node: ASTNode) { 31 | const attr = node.attr; 32 | 33 | if (attr === "id") { 34 | return `#${node.value}`; 35 | } else if (attr === "class") { 36 | return `.${node.value}`; 37 | } else { 38 | if (!node.value) { 39 | return `[${attr}]`; 40 | } 41 | return `[${attr}="${node.value}"]`; 42 | } 43 | } 44 | 45 | function xpathFuncToStr(node: ASTNode) { 46 | switch (node.name) { 47 | case "contains": 48 | return containsToStr(node); 49 | case "position": 50 | return positionToStr(node); 51 | default: 52 | throw new Error(`Unsupported function: ${node.name}`); 53 | } 54 | } 55 | 56 | function positionToStr(node: ASTNode) { 57 | return `:nth-child(${node.position})`; 58 | } 59 | 60 | function containsToStr(node: ASTNode) { 61 | if (!node.arg) { 62 | throw new Error(`No arguments for function: ${node.name}`); 63 | } 64 | 65 | if (node.arg.length !== 2) { 66 | throw new Error("Expect contains function to have 2 arguments"); 67 | } 68 | 69 | if (node.arg[0].name === "text") { 70 | return `:contains(${node.arg[1].name})`; 71 | } 72 | 73 | if (node.arg[0].type === "attribute") { 74 | return `[${node.arg[0].attr}*=${node.arg[1].name}]`; 75 | } 76 | 77 | throw new Error(`Unsupported function: ${node.arg[0].type}`); 78 | } 79 | 80 | function predicateToStr(node: ASTNode) { 81 | switch (node.type) { 82 | case "positionFilter": 83 | return `:nth-child(${node.position})`; 84 | case "attributeFilter": 85 | return attrFilterToStr(node); 86 | case "function": 87 | return xpathFuncToStr(node); 88 | case "name": 89 | return `:has(${node.name})`; 90 | 91 | default: 92 | throw new Error("!Unhandled predicate"); 93 | } 94 | } 95 | 96 | function stepToSel(step: ASTNode, index: number) { 97 | const axis = axisToStr(step.axis!, index === 0); 98 | const nodeTest = nodeTestToStr(step.nodeTest!); 99 | const predicate = (step.predicate || []).map(predicateToStr); 100 | 101 | return axis + nodeTest + predicate.join(""); 102 | } 103 | 104 | export default function xpath2css(steps: ASTNode[]): string { 105 | const selectorList = steps.map(stepToSel); 106 | 107 | return selectorList.join(""); 108 | } 109 | -------------------------------------------------------------------------------- /src/parser.ts: -------------------------------------------------------------------------------- 1 | import tt, { TokenType, keywords } from "./tokentype"; 2 | import { isIdentifierChar, isIdentifierStart } from "./identifier"; 3 | import { ASTNode } from "./definition"; 4 | 5 | const isNewLine = function (code: number): boolean { 6 | return code === 10 || code === 13 || code === 0x2028 || code === 0x2029; 7 | }; 8 | 9 | interface ParseError extends SyntaxError { 10 | pos?: number; 11 | } 12 | 13 | class Parser { 14 | input: string; 15 | pos: number; 16 | start: number; 17 | end: number; 18 | type: TokenType; 19 | value: string | undefined; 20 | lastTokStart: number; 21 | lastTokEnd: number; 22 | constructor(query: string) { 23 | this.input = String(query); 24 | this.pos = 0; 25 | this.start = 0; 26 | this.end = 0; 27 | 28 | this.type = tt.eof; 29 | this.value = undefined; 30 | 31 | this.lastTokStart = this.pos; 32 | this.lastTokEnd = this.pos; 33 | } 34 | 35 | /** 36 | * Exception handling 37 | */ 38 | raise(pos: number, msg: string): never { 39 | msg += " (" + pos + ")"; 40 | const err: ParseError = new SyntaxError(msg); 41 | err.pos = pos; 42 | 43 | throw err; 44 | } 45 | 46 | next() { 47 | this.lastTokEnd = this.end; 48 | this.lastTokStart = this.start; 49 | 50 | return this.nextToken(); 51 | } 52 | 53 | // tokenizer 54 | nextToken() { 55 | this.skipSpace(); 56 | 57 | this.start = this.pos; 58 | if (this.pos >= this.input.length) { 59 | return this.finishToken(tt.eof); 60 | } 61 | 62 | return this.readToken(this.fullCharCodeAtPos()); 63 | } 64 | 65 | readToken(code: number) { 66 | if (isIdentifierStart(code)) { 67 | return this.readWord(); 68 | } 69 | 70 | return this.getTokenFromCode(code); 71 | } 72 | 73 | fullCharCodeAtPos() { 74 | const code = this.input.charCodeAt(this.pos); 75 | 76 | return code; 77 | } 78 | 79 | skipSpace() { 80 | loop: while (this.pos < this.input.length) { 81 | const ch = this.input.charCodeAt(this.pos); 82 | switch (ch) { 83 | case 32: 84 | case 160: // ' ' 85 | ++this.pos; 86 | break; 87 | case 13: // CR 88 | if (this.input.charCodeAt(this.pos + 1) === 10) { 89 | ++this.pos; 90 | } 91 | case 10: 92 | case 8232: 93 | case 8233: // eslint-disable-line no-fallthrough 94 | this.raise(this.pos, "Unexpected newline character"); 95 | default: 96 | if (ch > 8 && ch < 14) { 97 | ++this.pos; 98 | } else { 99 | break loop; 100 | } 101 | } 102 | } 103 | } 104 | readTokenSlash() { 105 | const next = this.input.charCodeAt(this.pos + 1); 106 | if (next === 47) { 107 | const str = this.input.slice(this.pos, (this.pos += 2)); 108 | 109 | return this.finishToken(tt.doubleSlash, str); 110 | } 111 | const str = this.input.slice(this.pos, (this.pos += 1)); 112 | 113 | return this.finishToken(tt.slash, str); 114 | } 115 | 116 | getTokenFromCode(code: number) { 117 | switch (code) { 118 | case 40: 119 | ++this.pos; 120 | return this.finishToken(tt.parenL); 121 | case 41: 122 | ++this.pos; 123 | return this.finishToken(tt.parenR); 124 | case 44: 125 | ++this.pos; 126 | return this.finishToken(tt.comma); 127 | case 91: 128 | ++this.pos; 129 | return this.finishToken(tt.bracketL); 130 | case 93: 131 | ++this.pos; 132 | return this.finishToken(tt.bracketR); 133 | 134 | // Numbers 135 | case 48: 136 | case 49: 137 | case 50: 138 | case 51: 139 | case 52: 140 | case 53: 141 | case 54: 142 | case 55: 143 | case 56: 144 | case 57: 145 | return this.readNumber(); 146 | 147 | // String 148 | case 34: 149 | case 39: 150 | return this.readString(code); 151 | 152 | case 47: // '/' 153 | return this.readTokenSlash(); 154 | case 124: 155 | ++this.pos; // '|' 156 | return this.finishToken(tt.pipe); 157 | case 42: 158 | ++this.pos; // '*' 159 | return this.finishToken(tt.star); 160 | case 64: 161 | ++this.pos; // '@' 162 | return this.finishToken(tt.at); 163 | case 61: 164 | ++this.pos; // '=' 165 | return this.finishToken(tt.eq); 166 | default: 167 | this.raise( 168 | this.pos, 169 | 'Unexpected character "' + this.input[this.pos] + '"' 170 | ); 171 | } 172 | } 173 | 174 | finishToken(type: TokenType, val?: string) { 175 | this.end = this.pos; 176 | this.type = type; 177 | this.value = val; 178 | } 179 | 180 | /** 181 | * Read an integer in the given radix. Return null if zero digits 182 | * were read, the integer value otherwise. When `len` is given, this 183 | * will return `null` unless the integer has exactly `len` digits. 184 | */ 185 | readInt(radix: number, len = null) { 186 | const start = this.pos; 187 | let total = 0; 188 | let e: number = len === null ? Infinity : len!; 189 | for (let i = 0; i < e; ++i) { 190 | const code = this.fullCharCodeAtPos(); 191 | let val; 192 | if (code >= 97) { 193 | val = code - 97 + 10; // `a` 194 | } else if (code >= 65) { 195 | val = code - 65 + 10; // A 196 | } else if (code >= 48 && code <= 57) { 197 | val = code - 48; // 0-9 198 | } else { 199 | val = Infinity; 200 | } 201 | if (val >= radix) { 202 | break; 203 | } 204 | ++this.pos; 205 | total = total * radix + val; 206 | } 207 | if (this.pos === start || (len !== null && this.pos - start !== len)) { 208 | return null; 209 | } 210 | 211 | return total; 212 | } 213 | 214 | readNumber() { 215 | const start = this.pos; 216 | if (this.readInt(10) === null) { 217 | this.raise(start, "Invalid Number"); 218 | } 219 | let next = this.fullCharCodeAtPos(); 220 | if (next === 46) { 221 | // '.' 222 | ++this.pos; 223 | this.readInt(10); 224 | next = this.fullCharCodeAtPos(); 225 | } 226 | if (next === 69 || next === 101) { 227 | // `eE` 228 | next = this.input.charCodeAt(++this.pos); 229 | if (next === 43 || next === 45) { 230 | ++this.pos; // +/- 231 | } 232 | if (this.readInt(10) === null) { 233 | this.raise(start, "Invalid number"); 234 | } 235 | } 236 | if (isIdentifierStart(this.fullCharCodeAtPos())) { 237 | this.raise(this.pos, "Identifier directly after number"); 238 | } 239 | 240 | const str = this.input.slice(start, this.pos); 241 | 242 | return this.finishToken(tt.num, str); 243 | } 244 | 245 | readString(quote: number) { 246 | let out = ""; 247 | const start = this.start; 248 | let chunkStart = ++this.pos; 249 | for (;;) { 250 | if (this.pos >= this.input.length) { 251 | this.raise(start, "Unterminated string"); 252 | } 253 | const ch = this.fullCharCodeAtPos(); 254 | if (ch === quote) { 255 | break; 256 | } 257 | if (ch === 92) { 258 | // '\' escape 259 | out += this.input.slice(chunkStart, this.pos); 260 | out += this.readEscapedChar(); 261 | chunkStart = this.pos; 262 | } else { 263 | if (isNewLine(ch)) { 264 | this.raise(start, "Unterminated string"); 265 | } 266 | ++this.pos; 267 | } 268 | } 269 | 270 | out += this.input.slice(chunkStart, this.pos++); 271 | return this.finishToken(tt.string, out); 272 | } 273 | 274 | readEscapedChar() { 275 | const ch = this.input.charCodeAt(++this.pos); 276 | ++this.pos; 277 | switch (ch) { 278 | case 110: 279 | return "\n"; 280 | case 114: 281 | return "\r"; 282 | case 116: 283 | return "\t"; 284 | case 98: 285 | return "\b"; 286 | case 118: 287 | return "\u000b"; // eslint-disable-line unicorn/escape-case 288 | case 102: 289 | return "\f"; 290 | case 13: 291 | if (this.fullCharCodeAtPos() === 10) { 292 | ++this.pos; // '\r\n' 293 | } 294 | case 10: 295 | return ""; // eslint-disable-line no-fallthrough 296 | default: 297 | return String.fromCharCode(ch); 298 | } 299 | } 300 | 301 | readWord1() { 302 | const chunkStart = this.pos; 303 | while (this.pos < this.input.length) { 304 | const ch = this.fullCharCodeAtPos(); 305 | if (isIdentifierChar(ch)) { 306 | ++this.pos; 307 | } else { 308 | break; 309 | } 310 | } 311 | const word = this.input.slice(chunkStart, this.pos); 312 | 313 | return word; 314 | } 315 | 316 | readWord() { 317 | const word = this.readWord1(); 318 | if (keywords[word]) { 319 | return this.finishToken(keywords[word], word); 320 | } 321 | 322 | return this.finishToken(tt.name, word); 323 | } 324 | 325 | startNode(): ASTNode { 326 | return { 327 | type: "", 328 | start: this.start, 329 | end: 0, 330 | }; 331 | } 332 | 333 | finishNode(node: ASTNode, type: string) { 334 | node.type = type; 335 | node.end = this.lastTokEnd; 336 | 337 | return node; 338 | } 339 | 340 | parse() { 341 | this.nextToken(); 342 | 343 | return this.parseTopLevel(); 344 | } 345 | 346 | parseTopLevel() { 347 | const steps = []; 348 | 349 | while (this.type !== tt.eof) { 350 | const step = this.parseStep(); 351 | steps.push(step); 352 | } 353 | 354 | return steps; 355 | } 356 | 357 | parseStep() { 358 | const node = this.startNode(); 359 | node.axis = this.parseAxis(); 360 | node.nodeTest = this.parseNodeTest(); 361 | node.predicate = this.parseFilters(); 362 | 363 | return this.finishNode(node, "step"); 364 | } 365 | 366 | parseAxis() { 367 | const type = this.type; 368 | 369 | if (type === tt.doubleSlash) { 370 | this.next(); 371 | return tt.doubleSlash; 372 | } else if (type === tt.slash) { 373 | this.next(); 374 | return tt.slash; 375 | } else { 376 | this.raise(this.start, "Expect an axis"); 377 | } 378 | } 379 | 380 | parseNodeTest() { 381 | const node = this.startNode(); 382 | const type = this.type; 383 | 384 | if (type === tt.star) { 385 | node.value = "*"; 386 | this.next(); 387 | 388 | return this.finishNode(node, "nodeTest"); 389 | } else if (type === tt.name) { 390 | return this.parseTag(node); 391 | } else if (type === tt.at) { 392 | node.value = "@"; 393 | const childNode = this.startNode(); 394 | node.predicate = [childNode]; 395 | this.parseAttrFilter(childNode); 396 | 397 | return this.finishNode(node, "nodeTest"); 398 | } else { 399 | this.raise(this.start, "Expect a node test"); 400 | } 401 | } 402 | 403 | parseTag(node: ASTNode) { 404 | node.value = this.value; 405 | this.next(); 406 | 407 | if (this.type === tt.parenL) { 408 | this.raise(this.start, "Unexpected xpath function"); 409 | } 410 | 411 | return this.finishNode(node, "nodeTest"); 412 | } 413 | 414 | parseFilters() { 415 | const filters = []; 416 | 417 | while (this.eat(tt.bracketL)) { 418 | const filter = this.parsePredicate(); 419 | filters.push(filter); 420 | if (filter.type !== "positionFilter" && this.eat(tt.and)) { 421 | const filter2 = this.parsePredicate(); 422 | filters.push(filter2); 423 | } 424 | this.expect(tt.bracketR); 425 | } 426 | 427 | return filters; 428 | } 429 | 430 | parsePredicate() { 431 | const node = this.startNode(); 432 | const type = this.type; 433 | 434 | switch (type) { 435 | case tt.at: 436 | return this.parseAttrFilter(node); 437 | case tt.name: 438 | return this.parseMaybeFun(node); 439 | case tt.num: 440 | node.position = this.value; 441 | this.next(); 442 | 443 | return this.finishNode(node, "positionFilter"); 444 | 445 | default: 446 | this.raise(this.start, "Unexpected node predicate"); 447 | } 448 | } 449 | 450 | parseAttrFilter(node: ASTNode) { 451 | this.next(); 452 | // @attr 453 | node.attr = this.getName(); 454 | if (this.eat(tt.eq)) { 455 | node.value = this.getString(); 456 | } 457 | 458 | return this.finishNode(node, "attributeFilter"); 459 | } 460 | 461 | parseFunction(node: ASTNode) { 462 | this.next(); 463 | node.arg = this.parseBindingList(tt.parenR); 464 | 465 | return this.finishNode(node, "function"); 466 | } 467 | 468 | // ## Parser utilities 469 | eat(type: TokenType) { 470 | if (this.type === type) { 471 | this.next(); 472 | 473 | return true; 474 | } 475 | 476 | return false; 477 | } 478 | 479 | expect(type: TokenType) { 480 | return ( 481 | this.eat(type) || 482 | this.raise( 483 | this.lastTokEnd, 484 | `Expect a "${type.label}" after, got ${this.type.label}` 485 | ) 486 | ); 487 | } 488 | 489 | getName() { 490 | if (this.type !== tt.name) { 491 | this.raise(this.start, "Expect a valid name"); 492 | } 493 | const val = this.value; 494 | this.next(); 495 | 496 | return val; 497 | } 498 | 499 | getString() { 500 | if (this.type !== tt.string) { 501 | this.raise(this.start, "Expect a string"); 502 | } 503 | const val = this.value; 504 | this.next(); 505 | 506 | return val; 507 | } 508 | 509 | parseBindingList(close: TokenType) { 510 | const elts = []; 511 | let first = true; 512 | 513 | while (!this.eat(close)) { 514 | if (first) { 515 | first = false; 516 | } else { 517 | // (1, ...) 518 | this.expect(tt.comma); 519 | } 520 | 521 | const el = this.parseArg(); 522 | elts.push(el); 523 | } 524 | 525 | return elts; 526 | } 527 | 528 | parseArg() { 529 | const node = this.startNode(); 530 | const type = this.type; 531 | 532 | switch (type) { 533 | case tt.name: 534 | return this.parseMaybeFun(node); 535 | case tt.string: 536 | node.name = this.getString(); 537 | 538 | return this.finishNode(node, "string"); 539 | case tt.at: 540 | this.next(); 541 | node.attr = this.getName(); 542 | 543 | return this.finishNode(node, "attribute"); 544 | 545 | default: 546 | this.raise(this.start, "Unexpected function argument"); 547 | } 548 | } 549 | 550 | parseMaybeFun(node: ASTNode) { 551 | node.name = this.getName(); 552 | // position function have its arguments like this 553 | // position() = 2 554 | if (node.name === "position") { 555 | this.expect(tt.parenL); 556 | this.expect(tt.parenR); 557 | this.expect(tt.eq); 558 | const type = this.type; 559 | if (type !== tt.num) { 560 | this.raise( 561 | this.start, 562 | `Expect a number for position function, got ${this.type.label}.` 563 | ); 564 | } 565 | node.position = this.value; 566 | this.next(); 567 | return this.finishNode(node, "function"); 568 | } 569 | // normal functions(arg1, arg2...) 570 | if (this.type === tt.parenL) { 571 | return this.parseFunction(node); 572 | } 573 | 574 | return this.finishNode(node, "name"); 575 | } 576 | } 577 | 578 | export default Parser; 579 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | '@types/jest': ^29.5.0 5 | '@vercel/ncc': ^0.24.0 6 | jest: ^29.5.0 7 | jest-circus: ^29.5.0 8 | ts-jest: ^29.0.5 9 | typescript: ^4.9.4 10 | 11 | devDependencies: 12 | '@types/jest': 29.5.0 13 | '@vercel/ncc': 0.24.1 14 | jest: 29.5.0 15 | jest-circus: 29.5.0 16 | ts-jest: 29.0.5_doipufordlnvh5g4adbwayvyvy 17 | typescript: 4.9.5 18 | 19 | packages: 20 | 21 | /@ampproject/remapping/2.2.0: 22 | resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} 23 | engines: {node: '>=6.0.0'} 24 | dependencies: 25 | '@jridgewell/gen-mapping': 0.1.1 26 | '@jridgewell/trace-mapping': 0.3.17 27 | dev: true 28 | 29 | /@babel/code-frame/7.18.6: 30 | resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} 31 | engines: {node: '>=6.9.0'} 32 | dependencies: 33 | '@babel/highlight': 7.18.6 34 | dev: true 35 | 36 | /@babel/compat-data/7.21.0: 37 | resolution: {integrity: sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==} 38 | engines: {node: '>=6.9.0'} 39 | dev: true 40 | 41 | /@babel/core/7.21.3: 42 | resolution: {integrity: sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==} 43 | engines: {node: '>=6.9.0'} 44 | dependencies: 45 | '@ampproject/remapping': 2.2.0 46 | '@babel/code-frame': 7.18.6 47 | '@babel/generator': 7.21.3 48 | '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3 49 | '@babel/helper-module-transforms': 7.21.2 50 | '@babel/helpers': 7.21.0 51 | '@babel/parser': 7.21.3 52 | '@babel/template': 7.20.7 53 | '@babel/traverse': 7.21.3 54 | '@babel/types': 7.21.3 55 | convert-source-map: 1.9.0 56 | debug: 4.3.4 57 | gensync: 1.0.0-beta.2 58 | json5: 2.2.3 59 | semver: 6.3.0 60 | transitivePeerDependencies: 61 | - supports-color 62 | dev: true 63 | 64 | /@babel/generator/7.21.3: 65 | resolution: {integrity: sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==} 66 | engines: {node: '>=6.9.0'} 67 | dependencies: 68 | '@babel/types': 7.21.3 69 | '@jridgewell/gen-mapping': 0.3.2 70 | '@jridgewell/trace-mapping': 0.3.17 71 | jsesc: 2.5.2 72 | dev: true 73 | 74 | /@babel/helper-compilation-targets/7.20.7_@babel+core@7.21.3: 75 | resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} 76 | engines: {node: '>=6.9.0'} 77 | peerDependencies: 78 | '@babel/core': ^7.0.0 79 | dependencies: 80 | '@babel/compat-data': 7.21.0 81 | '@babel/core': 7.21.3 82 | '@babel/helper-validator-option': 7.21.0 83 | browserslist: 4.21.5 84 | lru-cache: 5.1.1 85 | semver: 6.3.0 86 | dev: true 87 | 88 | /@babel/helper-environment-visitor/7.18.9: 89 | resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} 90 | engines: {node: '>=6.9.0'} 91 | dev: true 92 | 93 | /@babel/helper-function-name/7.21.0: 94 | resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} 95 | engines: {node: '>=6.9.0'} 96 | dependencies: 97 | '@babel/template': 7.20.7 98 | '@babel/types': 7.21.3 99 | dev: true 100 | 101 | /@babel/helper-hoist-variables/7.18.6: 102 | resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} 103 | engines: {node: '>=6.9.0'} 104 | dependencies: 105 | '@babel/types': 7.21.3 106 | dev: true 107 | 108 | /@babel/helper-module-imports/7.18.6: 109 | resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} 110 | engines: {node: '>=6.9.0'} 111 | dependencies: 112 | '@babel/types': 7.21.3 113 | dev: true 114 | 115 | /@babel/helper-module-transforms/7.21.2: 116 | resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==} 117 | engines: {node: '>=6.9.0'} 118 | dependencies: 119 | '@babel/helper-environment-visitor': 7.18.9 120 | '@babel/helper-module-imports': 7.18.6 121 | '@babel/helper-simple-access': 7.20.2 122 | '@babel/helper-split-export-declaration': 7.18.6 123 | '@babel/helper-validator-identifier': 7.19.1 124 | '@babel/template': 7.20.7 125 | '@babel/traverse': 7.21.3 126 | '@babel/types': 7.21.3 127 | transitivePeerDependencies: 128 | - supports-color 129 | dev: true 130 | 131 | /@babel/helper-plugin-utils/7.20.2: 132 | resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} 133 | engines: {node: '>=6.9.0'} 134 | dev: true 135 | 136 | /@babel/helper-simple-access/7.20.2: 137 | resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} 138 | engines: {node: '>=6.9.0'} 139 | dependencies: 140 | '@babel/types': 7.21.3 141 | dev: true 142 | 143 | /@babel/helper-split-export-declaration/7.18.6: 144 | resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} 145 | engines: {node: '>=6.9.0'} 146 | dependencies: 147 | '@babel/types': 7.21.3 148 | dev: true 149 | 150 | /@babel/helper-string-parser/7.19.4: 151 | resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} 152 | engines: {node: '>=6.9.0'} 153 | dev: true 154 | 155 | /@babel/helper-validator-identifier/7.19.1: 156 | resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} 157 | engines: {node: '>=6.9.0'} 158 | dev: true 159 | 160 | /@babel/helper-validator-option/7.21.0: 161 | resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} 162 | engines: {node: '>=6.9.0'} 163 | dev: true 164 | 165 | /@babel/helpers/7.21.0: 166 | resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==} 167 | engines: {node: '>=6.9.0'} 168 | dependencies: 169 | '@babel/template': 7.20.7 170 | '@babel/traverse': 7.21.3 171 | '@babel/types': 7.21.3 172 | transitivePeerDependencies: 173 | - supports-color 174 | dev: true 175 | 176 | /@babel/highlight/7.18.6: 177 | resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} 178 | engines: {node: '>=6.9.0'} 179 | dependencies: 180 | '@babel/helper-validator-identifier': 7.19.1 181 | chalk: 2.4.2 182 | js-tokens: 4.0.0 183 | dev: true 184 | 185 | /@babel/parser/7.21.3: 186 | resolution: {integrity: sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==} 187 | engines: {node: '>=6.0.0'} 188 | hasBin: true 189 | dependencies: 190 | '@babel/types': 7.21.3 191 | dev: true 192 | 193 | /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.21.3: 194 | resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} 195 | peerDependencies: 196 | '@babel/core': ^7.0.0-0 197 | dependencies: 198 | '@babel/core': 7.21.3 199 | '@babel/helper-plugin-utils': 7.20.2 200 | dev: true 201 | 202 | /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.21.3: 203 | resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} 204 | peerDependencies: 205 | '@babel/core': ^7.0.0-0 206 | dependencies: 207 | '@babel/core': 7.21.3 208 | '@babel/helper-plugin-utils': 7.20.2 209 | dev: true 210 | 211 | /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.21.3: 212 | resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} 213 | peerDependencies: 214 | '@babel/core': ^7.0.0-0 215 | dependencies: 216 | '@babel/core': 7.21.3 217 | '@babel/helper-plugin-utils': 7.20.2 218 | dev: true 219 | 220 | /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.21.3: 221 | resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} 222 | peerDependencies: 223 | '@babel/core': ^7.0.0-0 224 | dependencies: 225 | '@babel/core': 7.21.3 226 | '@babel/helper-plugin-utils': 7.20.2 227 | dev: true 228 | 229 | /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.21.3: 230 | resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} 231 | peerDependencies: 232 | '@babel/core': ^7.0.0-0 233 | dependencies: 234 | '@babel/core': 7.21.3 235 | '@babel/helper-plugin-utils': 7.20.2 236 | dev: true 237 | 238 | /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.21.3: 239 | resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} 240 | engines: {node: '>=6.9.0'} 241 | peerDependencies: 242 | '@babel/core': ^7.0.0-0 243 | dependencies: 244 | '@babel/core': 7.21.3 245 | '@babel/helper-plugin-utils': 7.20.2 246 | dev: true 247 | 248 | /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.21.3: 249 | resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} 250 | peerDependencies: 251 | '@babel/core': ^7.0.0-0 252 | dependencies: 253 | '@babel/core': 7.21.3 254 | '@babel/helper-plugin-utils': 7.20.2 255 | dev: true 256 | 257 | /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.21.3: 258 | resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} 259 | peerDependencies: 260 | '@babel/core': ^7.0.0-0 261 | dependencies: 262 | '@babel/core': 7.21.3 263 | '@babel/helper-plugin-utils': 7.20.2 264 | dev: true 265 | 266 | /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.21.3: 267 | resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} 268 | peerDependencies: 269 | '@babel/core': ^7.0.0-0 270 | dependencies: 271 | '@babel/core': 7.21.3 272 | '@babel/helper-plugin-utils': 7.20.2 273 | dev: true 274 | 275 | /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.21.3: 276 | resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} 277 | peerDependencies: 278 | '@babel/core': ^7.0.0-0 279 | dependencies: 280 | '@babel/core': 7.21.3 281 | '@babel/helper-plugin-utils': 7.20.2 282 | dev: true 283 | 284 | /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.21.3: 285 | resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} 286 | peerDependencies: 287 | '@babel/core': ^7.0.0-0 288 | dependencies: 289 | '@babel/core': 7.21.3 290 | '@babel/helper-plugin-utils': 7.20.2 291 | dev: true 292 | 293 | /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.21.3: 294 | resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} 295 | peerDependencies: 296 | '@babel/core': ^7.0.0-0 297 | dependencies: 298 | '@babel/core': 7.21.3 299 | '@babel/helper-plugin-utils': 7.20.2 300 | dev: true 301 | 302 | /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.21.3: 303 | resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} 304 | engines: {node: '>=6.9.0'} 305 | peerDependencies: 306 | '@babel/core': ^7.0.0-0 307 | dependencies: 308 | '@babel/core': 7.21.3 309 | '@babel/helper-plugin-utils': 7.20.2 310 | dev: true 311 | 312 | /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.21.3: 313 | resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} 314 | engines: {node: '>=6.9.0'} 315 | peerDependencies: 316 | '@babel/core': ^7.0.0-0 317 | dependencies: 318 | '@babel/core': 7.21.3 319 | '@babel/helper-plugin-utils': 7.20.2 320 | dev: true 321 | 322 | /@babel/template/7.20.7: 323 | resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} 324 | engines: {node: '>=6.9.0'} 325 | dependencies: 326 | '@babel/code-frame': 7.18.6 327 | '@babel/parser': 7.21.3 328 | '@babel/types': 7.21.3 329 | dev: true 330 | 331 | /@babel/traverse/7.21.3: 332 | resolution: {integrity: sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==} 333 | engines: {node: '>=6.9.0'} 334 | dependencies: 335 | '@babel/code-frame': 7.18.6 336 | '@babel/generator': 7.21.3 337 | '@babel/helper-environment-visitor': 7.18.9 338 | '@babel/helper-function-name': 7.21.0 339 | '@babel/helper-hoist-variables': 7.18.6 340 | '@babel/helper-split-export-declaration': 7.18.6 341 | '@babel/parser': 7.21.3 342 | '@babel/types': 7.21.3 343 | debug: 4.3.4 344 | globals: 11.12.0 345 | transitivePeerDependencies: 346 | - supports-color 347 | dev: true 348 | 349 | /@babel/types/7.21.3: 350 | resolution: {integrity: sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==} 351 | engines: {node: '>=6.9.0'} 352 | dependencies: 353 | '@babel/helper-string-parser': 7.19.4 354 | '@babel/helper-validator-identifier': 7.19.1 355 | to-fast-properties: 2.0.0 356 | dev: true 357 | 358 | /@bcoe/v8-coverage/0.2.3: 359 | resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} 360 | dev: true 361 | 362 | /@istanbuljs/load-nyc-config/1.1.0: 363 | resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} 364 | engines: {node: '>=8'} 365 | dependencies: 366 | camelcase: 5.3.1 367 | find-up: 4.1.0 368 | get-package-type: 0.1.0 369 | js-yaml: 3.14.1 370 | resolve-from: 5.0.0 371 | dev: true 372 | 373 | /@istanbuljs/schema/0.1.3: 374 | resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} 375 | engines: {node: '>=8'} 376 | dev: true 377 | 378 | /@jest/console/29.5.0: 379 | resolution: {integrity: sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==} 380 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 381 | dependencies: 382 | '@jest/types': 29.5.0 383 | '@types/node': 18.15.10 384 | chalk: 4.1.2 385 | jest-message-util: 29.5.0 386 | jest-util: 29.5.0 387 | slash: 3.0.0 388 | dev: true 389 | 390 | /@jest/core/29.5.0: 391 | resolution: {integrity: sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==} 392 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 393 | peerDependencies: 394 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 395 | peerDependenciesMeta: 396 | node-notifier: 397 | optional: true 398 | dependencies: 399 | '@jest/console': 29.5.0 400 | '@jest/reporters': 29.5.0 401 | '@jest/test-result': 29.5.0 402 | '@jest/transform': 29.5.0 403 | '@jest/types': 29.5.0 404 | '@types/node': 18.15.10 405 | ansi-escapes: 4.3.2 406 | chalk: 4.1.2 407 | ci-info: 3.8.0 408 | exit: 0.1.2 409 | graceful-fs: 4.2.11 410 | jest-changed-files: 29.5.0 411 | jest-config: 29.5.0_@types+node@18.15.10 412 | jest-haste-map: 29.5.0 413 | jest-message-util: 29.5.0 414 | jest-regex-util: 29.4.3 415 | jest-resolve: 29.5.0 416 | jest-resolve-dependencies: 29.5.0 417 | jest-runner: 29.5.0 418 | jest-runtime: 29.5.0 419 | jest-snapshot: 29.5.0 420 | jest-util: 29.5.0 421 | jest-validate: 29.5.0 422 | jest-watcher: 29.5.0 423 | micromatch: 4.0.5 424 | pretty-format: 29.5.0 425 | slash: 3.0.0 426 | strip-ansi: 6.0.1 427 | transitivePeerDependencies: 428 | - supports-color 429 | - ts-node 430 | dev: true 431 | 432 | /@jest/environment/29.5.0: 433 | resolution: {integrity: sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==} 434 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 435 | dependencies: 436 | '@jest/fake-timers': 29.5.0 437 | '@jest/types': 29.5.0 438 | '@types/node': 18.15.10 439 | jest-mock: 29.5.0 440 | dev: true 441 | 442 | /@jest/expect-utils/29.5.0: 443 | resolution: {integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==} 444 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 445 | dependencies: 446 | jest-get-type: 29.4.3 447 | dev: true 448 | 449 | /@jest/expect/29.5.0: 450 | resolution: {integrity: sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==} 451 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 452 | dependencies: 453 | expect: 29.5.0 454 | jest-snapshot: 29.5.0 455 | transitivePeerDependencies: 456 | - supports-color 457 | dev: true 458 | 459 | /@jest/fake-timers/29.5.0: 460 | resolution: {integrity: sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==} 461 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 462 | dependencies: 463 | '@jest/types': 29.5.0 464 | '@sinonjs/fake-timers': 10.0.2 465 | '@types/node': 18.15.10 466 | jest-message-util: 29.5.0 467 | jest-mock: 29.5.0 468 | jest-util: 29.5.0 469 | dev: true 470 | 471 | /@jest/globals/29.5.0: 472 | resolution: {integrity: sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==} 473 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 474 | dependencies: 475 | '@jest/environment': 29.5.0 476 | '@jest/expect': 29.5.0 477 | '@jest/types': 29.5.0 478 | jest-mock: 29.5.0 479 | transitivePeerDependencies: 480 | - supports-color 481 | dev: true 482 | 483 | /@jest/reporters/29.5.0: 484 | resolution: {integrity: sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==} 485 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 486 | peerDependencies: 487 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 488 | peerDependenciesMeta: 489 | node-notifier: 490 | optional: true 491 | dependencies: 492 | '@bcoe/v8-coverage': 0.2.3 493 | '@jest/console': 29.5.0 494 | '@jest/test-result': 29.5.0 495 | '@jest/transform': 29.5.0 496 | '@jest/types': 29.5.0 497 | '@jridgewell/trace-mapping': 0.3.17 498 | '@types/node': 18.15.10 499 | chalk: 4.1.2 500 | collect-v8-coverage: 1.0.1 501 | exit: 0.1.2 502 | glob: 7.2.3 503 | graceful-fs: 4.2.11 504 | istanbul-lib-coverage: 3.2.0 505 | istanbul-lib-instrument: 5.2.1 506 | istanbul-lib-report: 3.0.0 507 | istanbul-lib-source-maps: 4.0.1 508 | istanbul-reports: 3.1.5 509 | jest-message-util: 29.5.0 510 | jest-util: 29.5.0 511 | jest-worker: 29.5.0 512 | slash: 3.0.0 513 | string-length: 4.0.2 514 | strip-ansi: 6.0.1 515 | v8-to-istanbul: 9.1.0 516 | transitivePeerDependencies: 517 | - supports-color 518 | dev: true 519 | 520 | /@jest/schemas/29.4.3: 521 | resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} 522 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 523 | dependencies: 524 | '@sinclair/typebox': 0.25.24 525 | dev: true 526 | 527 | /@jest/source-map/29.4.3: 528 | resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} 529 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 530 | dependencies: 531 | '@jridgewell/trace-mapping': 0.3.17 532 | callsites: 3.1.0 533 | graceful-fs: 4.2.11 534 | dev: true 535 | 536 | /@jest/test-result/29.5.0: 537 | resolution: {integrity: sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==} 538 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 539 | dependencies: 540 | '@jest/console': 29.5.0 541 | '@jest/types': 29.5.0 542 | '@types/istanbul-lib-coverage': 2.0.4 543 | collect-v8-coverage: 1.0.1 544 | dev: true 545 | 546 | /@jest/test-sequencer/29.5.0: 547 | resolution: {integrity: sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==} 548 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 549 | dependencies: 550 | '@jest/test-result': 29.5.0 551 | graceful-fs: 4.2.11 552 | jest-haste-map: 29.5.0 553 | slash: 3.0.0 554 | dev: true 555 | 556 | /@jest/transform/29.5.0: 557 | resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==} 558 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 559 | dependencies: 560 | '@babel/core': 7.21.3 561 | '@jest/types': 29.5.0 562 | '@jridgewell/trace-mapping': 0.3.17 563 | babel-plugin-istanbul: 6.1.1 564 | chalk: 4.1.2 565 | convert-source-map: 2.0.0 566 | fast-json-stable-stringify: 2.1.0 567 | graceful-fs: 4.2.11 568 | jest-haste-map: 29.5.0 569 | jest-regex-util: 29.4.3 570 | jest-util: 29.5.0 571 | micromatch: 4.0.5 572 | pirates: 4.0.5 573 | slash: 3.0.0 574 | write-file-atomic: 4.0.2 575 | transitivePeerDependencies: 576 | - supports-color 577 | dev: true 578 | 579 | /@jest/types/29.5.0: 580 | resolution: {integrity: sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==} 581 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 582 | dependencies: 583 | '@jest/schemas': 29.4.3 584 | '@types/istanbul-lib-coverage': 2.0.4 585 | '@types/istanbul-reports': 3.0.1 586 | '@types/node': 18.15.10 587 | '@types/yargs': 17.0.24 588 | chalk: 4.1.2 589 | dev: true 590 | 591 | /@jridgewell/gen-mapping/0.1.1: 592 | resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} 593 | engines: {node: '>=6.0.0'} 594 | dependencies: 595 | '@jridgewell/set-array': 1.1.2 596 | '@jridgewell/sourcemap-codec': 1.4.14 597 | dev: true 598 | 599 | /@jridgewell/gen-mapping/0.3.2: 600 | resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} 601 | engines: {node: '>=6.0.0'} 602 | dependencies: 603 | '@jridgewell/set-array': 1.1.2 604 | '@jridgewell/sourcemap-codec': 1.4.14 605 | '@jridgewell/trace-mapping': 0.3.17 606 | dev: true 607 | 608 | /@jridgewell/resolve-uri/3.1.0: 609 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} 610 | engines: {node: '>=6.0.0'} 611 | dev: true 612 | 613 | /@jridgewell/set-array/1.1.2: 614 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 615 | engines: {node: '>=6.0.0'} 616 | dev: true 617 | 618 | /@jridgewell/sourcemap-codec/1.4.14: 619 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} 620 | dev: true 621 | 622 | /@jridgewell/trace-mapping/0.3.17: 623 | resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} 624 | dependencies: 625 | '@jridgewell/resolve-uri': 3.1.0 626 | '@jridgewell/sourcemap-codec': 1.4.14 627 | dev: true 628 | 629 | /@sinclair/typebox/0.25.24: 630 | resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} 631 | dev: true 632 | 633 | /@sinonjs/commons/2.0.0: 634 | resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} 635 | dependencies: 636 | type-detect: 4.0.8 637 | dev: true 638 | 639 | /@sinonjs/fake-timers/10.0.2: 640 | resolution: {integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==} 641 | dependencies: 642 | '@sinonjs/commons': 2.0.0 643 | dev: true 644 | 645 | /@types/babel__core/7.20.0: 646 | resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} 647 | dependencies: 648 | '@babel/parser': 7.21.3 649 | '@babel/types': 7.21.3 650 | '@types/babel__generator': 7.6.4 651 | '@types/babel__template': 7.4.1 652 | '@types/babel__traverse': 7.18.3 653 | dev: true 654 | 655 | /@types/babel__generator/7.6.4: 656 | resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} 657 | dependencies: 658 | '@babel/types': 7.21.3 659 | dev: true 660 | 661 | /@types/babel__template/7.4.1: 662 | resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} 663 | dependencies: 664 | '@babel/parser': 7.21.3 665 | '@babel/types': 7.21.3 666 | dev: true 667 | 668 | /@types/babel__traverse/7.18.3: 669 | resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} 670 | dependencies: 671 | '@babel/types': 7.21.3 672 | dev: true 673 | 674 | /@types/graceful-fs/4.1.6: 675 | resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} 676 | dependencies: 677 | '@types/node': 18.15.10 678 | dev: true 679 | 680 | /@types/istanbul-lib-coverage/2.0.4: 681 | resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} 682 | dev: true 683 | 684 | /@types/istanbul-lib-report/3.0.0: 685 | resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} 686 | dependencies: 687 | '@types/istanbul-lib-coverage': 2.0.4 688 | dev: true 689 | 690 | /@types/istanbul-reports/3.0.1: 691 | resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} 692 | dependencies: 693 | '@types/istanbul-lib-report': 3.0.0 694 | dev: true 695 | 696 | /@types/jest/29.5.0: 697 | resolution: {integrity: sha512-3Emr5VOl/aoBwnWcH/EFQvlSAmjV+XtV9GGu5mwdYew5vhQh0IUZx/60x0TzHDu09Bi7HMx10t/namdJw5QIcg==} 698 | dependencies: 699 | expect: 29.5.0 700 | pretty-format: 29.5.0 701 | dev: true 702 | 703 | /@types/node/18.15.10: 704 | resolution: {integrity: sha512-9avDaQJczATcXgfmMAW3MIWArOO7A+m90vuCFLr8AotWf8igO/mRoYukrk2cqZVtv38tHs33retzHEilM7FpeQ==} 705 | dev: true 706 | 707 | /@types/prettier/2.7.2: 708 | resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} 709 | dev: true 710 | 711 | /@types/stack-utils/2.0.1: 712 | resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} 713 | dev: true 714 | 715 | /@types/yargs-parser/21.0.0: 716 | resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} 717 | dev: true 718 | 719 | /@types/yargs/17.0.24: 720 | resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} 721 | dependencies: 722 | '@types/yargs-parser': 21.0.0 723 | dev: true 724 | 725 | /@vercel/ncc/0.24.1: 726 | resolution: {integrity: sha512-r9m7brz2hNmq5TF3sxrK4qR/FhXn44XIMglQUir4sT7Sh5GOaYXlMYikHFwJStf8rmQGTlvOoBXt4yHVonRG8A==} 727 | hasBin: true 728 | dev: true 729 | 730 | /ansi-escapes/4.3.2: 731 | resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} 732 | engines: {node: '>=8'} 733 | dependencies: 734 | type-fest: 0.21.3 735 | dev: true 736 | 737 | /ansi-regex/5.0.1: 738 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 739 | engines: {node: '>=8'} 740 | dev: true 741 | 742 | /ansi-styles/3.2.1: 743 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 744 | engines: {node: '>=4'} 745 | dependencies: 746 | color-convert: 1.9.3 747 | dev: true 748 | 749 | /ansi-styles/4.3.0: 750 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 751 | engines: {node: '>=8'} 752 | dependencies: 753 | color-convert: 2.0.1 754 | dev: true 755 | 756 | /ansi-styles/5.2.0: 757 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 758 | engines: {node: '>=10'} 759 | dev: true 760 | 761 | /anymatch/3.1.3: 762 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 763 | engines: {node: '>= 8'} 764 | dependencies: 765 | normalize-path: 3.0.0 766 | picomatch: 2.3.1 767 | dev: true 768 | 769 | /argparse/1.0.10: 770 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 771 | dependencies: 772 | sprintf-js: 1.0.3 773 | dev: true 774 | 775 | /babel-jest/29.5.0_@babel+core@7.21.3: 776 | resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} 777 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 778 | peerDependencies: 779 | '@babel/core': ^7.8.0 780 | dependencies: 781 | '@babel/core': 7.21.3 782 | '@jest/transform': 29.5.0 783 | '@types/babel__core': 7.20.0 784 | babel-plugin-istanbul: 6.1.1 785 | babel-preset-jest: 29.5.0_@babel+core@7.21.3 786 | chalk: 4.1.2 787 | graceful-fs: 4.2.11 788 | slash: 3.0.0 789 | transitivePeerDependencies: 790 | - supports-color 791 | dev: true 792 | 793 | /babel-plugin-istanbul/6.1.1: 794 | resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} 795 | engines: {node: '>=8'} 796 | dependencies: 797 | '@babel/helper-plugin-utils': 7.20.2 798 | '@istanbuljs/load-nyc-config': 1.1.0 799 | '@istanbuljs/schema': 0.1.3 800 | istanbul-lib-instrument: 5.2.1 801 | test-exclude: 6.0.0 802 | transitivePeerDependencies: 803 | - supports-color 804 | dev: true 805 | 806 | /babel-plugin-jest-hoist/29.5.0: 807 | resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==} 808 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 809 | dependencies: 810 | '@babel/template': 7.20.7 811 | '@babel/types': 7.21.3 812 | '@types/babel__core': 7.20.0 813 | '@types/babel__traverse': 7.18.3 814 | dev: true 815 | 816 | /babel-preset-current-node-syntax/1.0.1_@babel+core@7.21.3: 817 | resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} 818 | peerDependencies: 819 | '@babel/core': ^7.0.0 820 | dependencies: 821 | '@babel/core': 7.21.3 822 | '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.3 823 | '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.21.3 824 | '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.3 825 | '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.21.3 826 | '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.3 827 | '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.3 828 | '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.3 829 | '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.3 830 | '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.3 831 | '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.3 832 | '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.3 833 | '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.3 834 | dev: true 835 | 836 | /babel-preset-jest/29.5.0_@babel+core@7.21.3: 837 | resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==} 838 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 839 | peerDependencies: 840 | '@babel/core': ^7.0.0 841 | dependencies: 842 | '@babel/core': 7.21.3 843 | babel-plugin-jest-hoist: 29.5.0 844 | babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.3 845 | dev: true 846 | 847 | /balanced-match/1.0.2: 848 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 849 | dev: true 850 | 851 | /brace-expansion/1.1.11: 852 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 853 | dependencies: 854 | balanced-match: 1.0.2 855 | concat-map: 0.0.1 856 | dev: true 857 | 858 | /braces/3.0.2: 859 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 860 | engines: {node: '>=8'} 861 | dependencies: 862 | fill-range: 7.0.1 863 | dev: true 864 | 865 | /browserslist/4.21.5: 866 | resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} 867 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 868 | hasBin: true 869 | dependencies: 870 | caniuse-lite: 1.0.30001472 871 | electron-to-chromium: 1.4.341 872 | node-releases: 2.0.10 873 | update-browserslist-db: 1.0.10_browserslist@4.21.5 874 | dev: true 875 | 876 | /bs-logger/0.2.6: 877 | resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} 878 | engines: {node: '>= 6'} 879 | dependencies: 880 | fast-json-stable-stringify: 2.1.0 881 | dev: true 882 | 883 | /bser/2.1.1: 884 | resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} 885 | dependencies: 886 | node-int64: 0.4.0 887 | dev: true 888 | 889 | /buffer-from/1.1.2: 890 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 891 | dev: true 892 | 893 | /callsites/3.1.0: 894 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 895 | engines: {node: '>=6'} 896 | dev: true 897 | 898 | /camelcase/5.3.1: 899 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 900 | engines: {node: '>=6'} 901 | dev: true 902 | 903 | /camelcase/6.3.0: 904 | resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} 905 | engines: {node: '>=10'} 906 | dev: true 907 | 908 | /caniuse-lite/1.0.30001472: 909 | resolution: {integrity: sha512-xWC/0+hHHQgj3/vrKYY0AAzeIUgr7L9wlELIcAvZdDUHlhL/kNxMdnQLOSOQfP8R51ZzPhmHdyMkI0MMpmxCfg==} 910 | dev: true 911 | 912 | /chalk/2.4.2: 913 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 914 | engines: {node: '>=4'} 915 | dependencies: 916 | ansi-styles: 3.2.1 917 | escape-string-regexp: 1.0.5 918 | supports-color: 5.5.0 919 | dev: true 920 | 921 | /chalk/4.1.2: 922 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 923 | engines: {node: '>=10'} 924 | dependencies: 925 | ansi-styles: 4.3.0 926 | supports-color: 7.2.0 927 | dev: true 928 | 929 | /char-regex/1.0.2: 930 | resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} 931 | engines: {node: '>=10'} 932 | dev: true 933 | 934 | /ci-info/3.8.0: 935 | resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} 936 | engines: {node: '>=8'} 937 | dev: true 938 | 939 | /cjs-module-lexer/1.2.2: 940 | resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} 941 | dev: true 942 | 943 | /cliui/8.0.1: 944 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 945 | engines: {node: '>=12'} 946 | dependencies: 947 | string-width: 4.2.3 948 | strip-ansi: 6.0.1 949 | wrap-ansi: 7.0.0 950 | dev: true 951 | 952 | /co/4.6.0: 953 | resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} 954 | engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} 955 | dev: true 956 | 957 | /collect-v8-coverage/1.0.1: 958 | resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} 959 | dev: true 960 | 961 | /color-convert/1.9.3: 962 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 963 | dependencies: 964 | color-name: 1.1.3 965 | dev: true 966 | 967 | /color-convert/2.0.1: 968 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 969 | engines: {node: '>=7.0.0'} 970 | dependencies: 971 | color-name: 1.1.4 972 | dev: true 973 | 974 | /color-name/1.1.3: 975 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 976 | dev: true 977 | 978 | /color-name/1.1.4: 979 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 980 | dev: true 981 | 982 | /concat-map/0.0.1: 983 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 984 | dev: true 985 | 986 | /convert-source-map/1.9.0: 987 | resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} 988 | dev: true 989 | 990 | /convert-source-map/2.0.0: 991 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 992 | dev: true 993 | 994 | /cross-spawn/7.0.3: 995 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 996 | engines: {node: '>= 8'} 997 | dependencies: 998 | path-key: 3.1.1 999 | shebang-command: 2.0.0 1000 | which: 2.0.2 1001 | dev: true 1002 | 1003 | /debug/4.3.4: 1004 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 1005 | engines: {node: '>=6.0'} 1006 | peerDependencies: 1007 | supports-color: '*' 1008 | peerDependenciesMeta: 1009 | supports-color: 1010 | optional: true 1011 | dependencies: 1012 | ms: 2.1.2 1013 | dev: true 1014 | 1015 | /dedent/0.7.0: 1016 | resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} 1017 | dev: true 1018 | 1019 | /deepmerge/4.3.1: 1020 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 1021 | engines: {node: '>=0.10.0'} 1022 | dev: true 1023 | 1024 | /detect-newline/3.1.0: 1025 | resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} 1026 | engines: {node: '>=8'} 1027 | dev: true 1028 | 1029 | /diff-sequences/29.4.3: 1030 | resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} 1031 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1032 | dev: true 1033 | 1034 | /electron-to-chromium/1.4.341: 1035 | resolution: {integrity: sha512-R4A8VfUBQY9WmAhuqY5tjHRf5fH2AAf6vqitBOE0y6u2PgHgqHSrhZmu78dIX3fVZtjqlwJNX1i2zwC3VpHtQQ==} 1036 | dev: true 1037 | 1038 | /emittery/0.13.1: 1039 | resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} 1040 | engines: {node: '>=12'} 1041 | dev: true 1042 | 1043 | /emoji-regex/8.0.0: 1044 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1045 | dev: true 1046 | 1047 | /error-ex/1.3.2: 1048 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 1049 | dependencies: 1050 | is-arrayish: 0.2.1 1051 | dev: true 1052 | 1053 | /escalade/3.1.1: 1054 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1055 | engines: {node: '>=6'} 1056 | dev: true 1057 | 1058 | /escape-string-regexp/1.0.5: 1059 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1060 | engines: {node: '>=0.8.0'} 1061 | dev: true 1062 | 1063 | /escape-string-regexp/2.0.0: 1064 | resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} 1065 | engines: {node: '>=8'} 1066 | dev: true 1067 | 1068 | /esprima/4.0.1: 1069 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 1070 | engines: {node: '>=4'} 1071 | hasBin: true 1072 | dev: true 1073 | 1074 | /execa/5.1.1: 1075 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 1076 | engines: {node: '>=10'} 1077 | dependencies: 1078 | cross-spawn: 7.0.3 1079 | get-stream: 6.0.1 1080 | human-signals: 2.1.0 1081 | is-stream: 2.0.1 1082 | merge-stream: 2.0.0 1083 | npm-run-path: 4.0.1 1084 | onetime: 5.1.2 1085 | signal-exit: 3.0.7 1086 | strip-final-newline: 2.0.0 1087 | dev: true 1088 | 1089 | /exit/0.1.2: 1090 | resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} 1091 | engines: {node: '>= 0.8.0'} 1092 | dev: true 1093 | 1094 | /expect/29.5.0: 1095 | resolution: {integrity: sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==} 1096 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1097 | dependencies: 1098 | '@jest/expect-utils': 29.5.0 1099 | jest-get-type: 29.4.3 1100 | jest-matcher-utils: 29.5.0 1101 | jest-message-util: 29.5.0 1102 | jest-util: 29.5.0 1103 | dev: true 1104 | 1105 | /fast-json-stable-stringify/2.1.0: 1106 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1107 | dev: true 1108 | 1109 | /fb-watchman/2.0.2: 1110 | resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} 1111 | dependencies: 1112 | bser: 2.1.1 1113 | dev: true 1114 | 1115 | /fill-range/7.0.1: 1116 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1117 | engines: {node: '>=8'} 1118 | dependencies: 1119 | to-regex-range: 5.0.1 1120 | dev: true 1121 | 1122 | /find-up/4.1.0: 1123 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 1124 | engines: {node: '>=8'} 1125 | dependencies: 1126 | locate-path: 5.0.0 1127 | path-exists: 4.0.0 1128 | dev: true 1129 | 1130 | /fs.realpath/1.0.0: 1131 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1132 | dev: true 1133 | 1134 | /fsevents/2.3.2: 1135 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 1136 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1137 | os: [darwin] 1138 | requiresBuild: true 1139 | dev: true 1140 | optional: true 1141 | 1142 | /function-bind/1.1.1: 1143 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1144 | dev: true 1145 | 1146 | /gensync/1.0.0-beta.2: 1147 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 1148 | engines: {node: '>=6.9.0'} 1149 | dev: true 1150 | 1151 | /get-caller-file/2.0.5: 1152 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 1153 | engines: {node: 6.* || 8.* || >= 10.*} 1154 | dev: true 1155 | 1156 | /get-package-type/0.1.0: 1157 | resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} 1158 | engines: {node: '>=8.0.0'} 1159 | dev: true 1160 | 1161 | /get-stream/6.0.1: 1162 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 1163 | engines: {node: '>=10'} 1164 | dev: true 1165 | 1166 | /glob/7.2.3: 1167 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1168 | dependencies: 1169 | fs.realpath: 1.0.0 1170 | inflight: 1.0.6 1171 | inherits: 2.0.4 1172 | minimatch: 3.1.2 1173 | once: 1.4.0 1174 | path-is-absolute: 1.0.1 1175 | dev: true 1176 | 1177 | /globals/11.12.0: 1178 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 1179 | engines: {node: '>=4'} 1180 | dev: true 1181 | 1182 | /graceful-fs/4.2.11: 1183 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1184 | dev: true 1185 | 1186 | /has-flag/3.0.0: 1187 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1188 | engines: {node: '>=4'} 1189 | dev: true 1190 | 1191 | /has-flag/4.0.0: 1192 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1193 | engines: {node: '>=8'} 1194 | dev: true 1195 | 1196 | /has/1.0.3: 1197 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1198 | engines: {node: '>= 0.4.0'} 1199 | dependencies: 1200 | function-bind: 1.1.1 1201 | dev: true 1202 | 1203 | /html-escaper/2.0.2: 1204 | resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} 1205 | dev: true 1206 | 1207 | /human-signals/2.1.0: 1208 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 1209 | engines: {node: '>=10.17.0'} 1210 | dev: true 1211 | 1212 | /import-local/3.1.0: 1213 | resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} 1214 | engines: {node: '>=8'} 1215 | hasBin: true 1216 | dependencies: 1217 | pkg-dir: 4.2.0 1218 | resolve-cwd: 3.0.0 1219 | dev: true 1220 | 1221 | /imurmurhash/0.1.4: 1222 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1223 | engines: {node: '>=0.8.19'} 1224 | dev: true 1225 | 1226 | /inflight/1.0.6: 1227 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1228 | dependencies: 1229 | once: 1.4.0 1230 | wrappy: 1.0.2 1231 | dev: true 1232 | 1233 | /inherits/2.0.4: 1234 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1235 | dev: true 1236 | 1237 | /is-arrayish/0.2.1: 1238 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 1239 | dev: true 1240 | 1241 | /is-core-module/2.11.0: 1242 | resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} 1243 | dependencies: 1244 | has: 1.0.3 1245 | dev: true 1246 | 1247 | /is-fullwidth-code-point/3.0.0: 1248 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1249 | engines: {node: '>=8'} 1250 | dev: true 1251 | 1252 | /is-generator-fn/2.1.0: 1253 | resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} 1254 | engines: {node: '>=6'} 1255 | dev: true 1256 | 1257 | /is-number/7.0.0: 1258 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1259 | engines: {node: '>=0.12.0'} 1260 | dev: true 1261 | 1262 | /is-stream/2.0.1: 1263 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1264 | engines: {node: '>=8'} 1265 | dev: true 1266 | 1267 | /isexe/2.0.0: 1268 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1269 | dev: true 1270 | 1271 | /istanbul-lib-coverage/3.2.0: 1272 | resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} 1273 | engines: {node: '>=8'} 1274 | dev: true 1275 | 1276 | /istanbul-lib-instrument/5.2.1: 1277 | resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} 1278 | engines: {node: '>=8'} 1279 | dependencies: 1280 | '@babel/core': 7.21.3 1281 | '@babel/parser': 7.21.3 1282 | '@istanbuljs/schema': 0.1.3 1283 | istanbul-lib-coverage: 3.2.0 1284 | semver: 6.3.0 1285 | transitivePeerDependencies: 1286 | - supports-color 1287 | dev: true 1288 | 1289 | /istanbul-lib-report/3.0.0: 1290 | resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} 1291 | engines: {node: '>=8'} 1292 | dependencies: 1293 | istanbul-lib-coverage: 3.2.0 1294 | make-dir: 3.1.0 1295 | supports-color: 7.2.0 1296 | dev: true 1297 | 1298 | /istanbul-lib-source-maps/4.0.1: 1299 | resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} 1300 | engines: {node: '>=10'} 1301 | dependencies: 1302 | debug: 4.3.4 1303 | istanbul-lib-coverage: 3.2.0 1304 | source-map: 0.6.1 1305 | transitivePeerDependencies: 1306 | - supports-color 1307 | dev: true 1308 | 1309 | /istanbul-reports/3.1.5: 1310 | resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} 1311 | engines: {node: '>=8'} 1312 | dependencies: 1313 | html-escaper: 2.0.2 1314 | istanbul-lib-report: 3.0.0 1315 | dev: true 1316 | 1317 | /jest-changed-files/29.5.0: 1318 | resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==} 1319 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1320 | dependencies: 1321 | execa: 5.1.1 1322 | p-limit: 3.1.0 1323 | dev: true 1324 | 1325 | /jest-circus/29.5.0: 1326 | resolution: {integrity: sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==} 1327 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1328 | dependencies: 1329 | '@jest/environment': 29.5.0 1330 | '@jest/expect': 29.5.0 1331 | '@jest/test-result': 29.5.0 1332 | '@jest/types': 29.5.0 1333 | '@types/node': 18.15.10 1334 | chalk: 4.1.2 1335 | co: 4.6.0 1336 | dedent: 0.7.0 1337 | is-generator-fn: 2.1.0 1338 | jest-each: 29.5.0 1339 | jest-matcher-utils: 29.5.0 1340 | jest-message-util: 29.5.0 1341 | jest-runtime: 29.5.0 1342 | jest-snapshot: 29.5.0 1343 | jest-util: 29.5.0 1344 | p-limit: 3.1.0 1345 | pretty-format: 29.5.0 1346 | pure-rand: 6.0.1 1347 | slash: 3.0.0 1348 | stack-utils: 2.0.6 1349 | transitivePeerDependencies: 1350 | - supports-color 1351 | dev: true 1352 | 1353 | /jest-cli/29.5.0: 1354 | resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} 1355 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1356 | hasBin: true 1357 | peerDependencies: 1358 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 1359 | peerDependenciesMeta: 1360 | node-notifier: 1361 | optional: true 1362 | dependencies: 1363 | '@jest/core': 29.5.0 1364 | '@jest/test-result': 29.5.0 1365 | '@jest/types': 29.5.0 1366 | chalk: 4.1.2 1367 | exit: 0.1.2 1368 | graceful-fs: 4.2.11 1369 | import-local: 3.1.0 1370 | jest-config: 29.5.0 1371 | jest-util: 29.5.0 1372 | jest-validate: 29.5.0 1373 | prompts: 2.4.2 1374 | yargs: 17.7.1 1375 | transitivePeerDependencies: 1376 | - '@types/node' 1377 | - supports-color 1378 | - ts-node 1379 | dev: true 1380 | 1381 | /jest-config/29.5.0: 1382 | resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} 1383 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1384 | peerDependencies: 1385 | '@types/node': '*' 1386 | ts-node: '>=9.0.0' 1387 | peerDependenciesMeta: 1388 | '@types/node': 1389 | optional: true 1390 | ts-node: 1391 | optional: true 1392 | dependencies: 1393 | '@babel/core': 7.21.3 1394 | '@jest/test-sequencer': 29.5.0 1395 | '@jest/types': 29.5.0 1396 | babel-jest: 29.5.0_@babel+core@7.21.3 1397 | chalk: 4.1.2 1398 | ci-info: 3.8.0 1399 | deepmerge: 4.3.1 1400 | glob: 7.2.3 1401 | graceful-fs: 4.2.11 1402 | jest-circus: 29.5.0 1403 | jest-environment-node: 29.5.0 1404 | jest-get-type: 29.4.3 1405 | jest-regex-util: 29.4.3 1406 | jest-resolve: 29.5.0 1407 | jest-runner: 29.5.0 1408 | jest-util: 29.5.0 1409 | jest-validate: 29.5.0 1410 | micromatch: 4.0.5 1411 | parse-json: 5.2.0 1412 | pretty-format: 29.5.0 1413 | slash: 3.0.0 1414 | strip-json-comments: 3.1.1 1415 | transitivePeerDependencies: 1416 | - supports-color 1417 | dev: true 1418 | 1419 | /jest-config/29.5.0_@types+node@18.15.10: 1420 | resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} 1421 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1422 | peerDependencies: 1423 | '@types/node': '*' 1424 | ts-node: '>=9.0.0' 1425 | peerDependenciesMeta: 1426 | '@types/node': 1427 | optional: true 1428 | ts-node: 1429 | optional: true 1430 | dependencies: 1431 | '@babel/core': 7.21.3 1432 | '@jest/test-sequencer': 29.5.0 1433 | '@jest/types': 29.5.0 1434 | '@types/node': 18.15.10 1435 | babel-jest: 29.5.0_@babel+core@7.21.3 1436 | chalk: 4.1.2 1437 | ci-info: 3.8.0 1438 | deepmerge: 4.3.1 1439 | glob: 7.2.3 1440 | graceful-fs: 4.2.11 1441 | jest-circus: 29.5.0 1442 | jest-environment-node: 29.5.0 1443 | jest-get-type: 29.4.3 1444 | jest-regex-util: 29.4.3 1445 | jest-resolve: 29.5.0 1446 | jest-runner: 29.5.0 1447 | jest-util: 29.5.0 1448 | jest-validate: 29.5.0 1449 | micromatch: 4.0.5 1450 | parse-json: 5.2.0 1451 | pretty-format: 29.5.0 1452 | slash: 3.0.0 1453 | strip-json-comments: 3.1.1 1454 | transitivePeerDependencies: 1455 | - supports-color 1456 | dev: true 1457 | 1458 | /jest-diff/29.5.0: 1459 | resolution: {integrity: sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==} 1460 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1461 | dependencies: 1462 | chalk: 4.1.2 1463 | diff-sequences: 29.4.3 1464 | jest-get-type: 29.4.3 1465 | pretty-format: 29.5.0 1466 | dev: true 1467 | 1468 | /jest-docblock/29.4.3: 1469 | resolution: {integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==} 1470 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1471 | dependencies: 1472 | detect-newline: 3.1.0 1473 | dev: true 1474 | 1475 | /jest-each/29.5.0: 1476 | resolution: {integrity: sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==} 1477 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1478 | dependencies: 1479 | '@jest/types': 29.5.0 1480 | chalk: 4.1.2 1481 | jest-get-type: 29.4.3 1482 | jest-util: 29.5.0 1483 | pretty-format: 29.5.0 1484 | dev: true 1485 | 1486 | /jest-environment-node/29.5.0: 1487 | resolution: {integrity: sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==} 1488 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1489 | dependencies: 1490 | '@jest/environment': 29.5.0 1491 | '@jest/fake-timers': 29.5.0 1492 | '@jest/types': 29.5.0 1493 | '@types/node': 18.15.10 1494 | jest-mock: 29.5.0 1495 | jest-util: 29.5.0 1496 | dev: true 1497 | 1498 | /jest-get-type/29.4.3: 1499 | resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==} 1500 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1501 | dev: true 1502 | 1503 | /jest-haste-map/29.5.0: 1504 | resolution: {integrity: sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==} 1505 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1506 | dependencies: 1507 | '@jest/types': 29.5.0 1508 | '@types/graceful-fs': 4.1.6 1509 | '@types/node': 18.15.10 1510 | anymatch: 3.1.3 1511 | fb-watchman: 2.0.2 1512 | graceful-fs: 4.2.11 1513 | jest-regex-util: 29.4.3 1514 | jest-util: 29.5.0 1515 | jest-worker: 29.5.0 1516 | micromatch: 4.0.5 1517 | walker: 1.0.8 1518 | optionalDependencies: 1519 | fsevents: 2.3.2 1520 | dev: true 1521 | 1522 | /jest-leak-detector/29.5.0: 1523 | resolution: {integrity: sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==} 1524 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1525 | dependencies: 1526 | jest-get-type: 29.4.3 1527 | pretty-format: 29.5.0 1528 | dev: true 1529 | 1530 | /jest-matcher-utils/29.5.0: 1531 | resolution: {integrity: sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==} 1532 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1533 | dependencies: 1534 | chalk: 4.1.2 1535 | jest-diff: 29.5.0 1536 | jest-get-type: 29.4.3 1537 | pretty-format: 29.5.0 1538 | dev: true 1539 | 1540 | /jest-message-util/29.5.0: 1541 | resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} 1542 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1543 | dependencies: 1544 | '@babel/code-frame': 7.18.6 1545 | '@jest/types': 29.5.0 1546 | '@types/stack-utils': 2.0.1 1547 | chalk: 4.1.2 1548 | graceful-fs: 4.2.11 1549 | micromatch: 4.0.5 1550 | pretty-format: 29.5.0 1551 | slash: 3.0.0 1552 | stack-utils: 2.0.6 1553 | dev: true 1554 | 1555 | /jest-mock/29.5.0: 1556 | resolution: {integrity: sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==} 1557 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1558 | dependencies: 1559 | '@jest/types': 29.5.0 1560 | '@types/node': 18.15.10 1561 | jest-util: 29.5.0 1562 | dev: true 1563 | 1564 | /jest-pnp-resolver/1.2.3_jest-resolve@29.5.0: 1565 | resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} 1566 | engines: {node: '>=6'} 1567 | peerDependencies: 1568 | jest-resolve: '*' 1569 | peerDependenciesMeta: 1570 | jest-resolve: 1571 | optional: true 1572 | dependencies: 1573 | jest-resolve: 29.5.0 1574 | dev: true 1575 | 1576 | /jest-regex-util/29.4.3: 1577 | resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==} 1578 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1579 | dev: true 1580 | 1581 | /jest-resolve-dependencies/29.5.0: 1582 | resolution: {integrity: sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==} 1583 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1584 | dependencies: 1585 | jest-regex-util: 29.4.3 1586 | jest-snapshot: 29.5.0 1587 | transitivePeerDependencies: 1588 | - supports-color 1589 | dev: true 1590 | 1591 | /jest-resolve/29.5.0: 1592 | resolution: {integrity: sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==} 1593 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1594 | dependencies: 1595 | chalk: 4.1.2 1596 | graceful-fs: 4.2.11 1597 | jest-haste-map: 29.5.0 1598 | jest-pnp-resolver: 1.2.3_jest-resolve@29.5.0 1599 | jest-util: 29.5.0 1600 | jest-validate: 29.5.0 1601 | resolve: 1.22.1 1602 | resolve.exports: 2.0.2 1603 | slash: 3.0.0 1604 | dev: true 1605 | 1606 | /jest-runner/29.5.0: 1607 | resolution: {integrity: sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==} 1608 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1609 | dependencies: 1610 | '@jest/console': 29.5.0 1611 | '@jest/environment': 29.5.0 1612 | '@jest/test-result': 29.5.0 1613 | '@jest/transform': 29.5.0 1614 | '@jest/types': 29.5.0 1615 | '@types/node': 18.15.10 1616 | chalk: 4.1.2 1617 | emittery: 0.13.1 1618 | graceful-fs: 4.2.11 1619 | jest-docblock: 29.4.3 1620 | jest-environment-node: 29.5.0 1621 | jest-haste-map: 29.5.0 1622 | jest-leak-detector: 29.5.0 1623 | jest-message-util: 29.5.0 1624 | jest-resolve: 29.5.0 1625 | jest-runtime: 29.5.0 1626 | jest-util: 29.5.0 1627 | jest-watcher: 29.5.0 1628 | jest-worker: 29.5.0 1629 | p-limit: 3.1.0 1630 | source-map-support: 0.5.13 1631 | transitivePeerDependencies: 1632 | - supports-color 1633 | dev: true 1634 | 1635 | /jest-runtime/29.5.0: 1636 | resolution: {integrity: sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==} 1637 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1638 | dependencies: 1639 | '@jest/environment': 29.5.0 1640 | '@jest/fake-timers': 29.5.0 1641 | '@jest/globals': 29.5.0 1642 | '@jest/source-map': 29.4.3 1643 | '@jest/test-result': 29.5.0 1644 | '@jest/transform': 29.5.0 1645 | '@jest/types': 29.5.0 1646 | '@types/node': 18.15.10 1647 | chalk: 4.1.2 1648 | cjs-module-lexer: 1.2.2 1649 | collect-v8-coverage: 1.0.1 1650 | glob: 7.2.3 1651 | graceful-fs: 4.2.11 1652 | jest-haste-map: 29.5.0 1653 | jest-message-util: 29.5.0 1654 | jest-mock: 29.5.0 1655 | jest-regex-util: 29.4.3 1656 | jest-resolve: 29.5.0 1657 | jest-snapshot: 29.5.0 1658 | jest-util: 29.5.0 1659 | slash: 3.0.0 1660 | strip-bom: 4.0.0 1661 | transitivePeerDependencies: 1662 | - supports-color 1663 | dev: true 1664 | 1665 | /jest-snapshot/29.5.0: 1666 | resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==} 1667 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1668 | dependencies: 1669 | '@babel/core': 7.21.3 1670 | '@babel/generator': 7.21.3 1671 | '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.21.3 1672 | '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.21.3 1673 | '@babel/traverse': 7.21.3 1674 | '@babel/types': 7.21.3 1675 | '@jest/expect-utils': 29.5.0 1676 | '@jest/transform': 29.5.0 1677 | '@jest/types': 29.5.0 1678 | '@types/babel__traverse': 7.18.3 1679 | '@types/prettier': 2.7.2 1680 | babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.3 1681 | chalk: 4.1.2 1682 | expect: 29.5.0 1683 | graceful-fs: 4.2.11 1684 | jest-diff: 29.5.0 1685 | jest-get-type: 29.4.3 1686 | jest-matcher-utils: 29.5.0 1687 | jest-message-util: 29.5.0 1688 | jest-util: 29.5.0 1689 | natural-compare: 1.4.0 1690 | pretty-format: 29.5.0 1691 | semver: 7.3.8 1692 | transitivePeerDependencies: 1693 | - supports-color 1694 | dev: true 1695 | 1696 | /jest-util/29.5.0: 1697 | resolution: {integrity: sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==} 1698 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1699 | dependencies: 1700 | '@jest/types': 29.5.0 1701 | '@types/node': 18.15.10 1702 | chalk: 4.1.2 1703 | ci-info: 3.8.0 1704 | graceful-fs: 4.2.11 1705 | picomatch: 2.3.1 1706 | dev: true 1707 | 1708 | /jest-validate/29.5.0: 1709 | resolution: {integrity: sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==} 1710 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1711 | dependencies: 1712 | '@jest/types': 29.5.0 1713 | camelcase: 6.3.0 1714 | chalk: 4.1.2 1715 | jest-get-type: 29.4.3 1716 | leven: 3.1.0 1717 | pretty-format: 29.5.0 1718 | dev: true 1719 | 1720 | /jest-watcher/29.5.0: 1721 | resolution: {integrity: sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==} 1722 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1723 | dependencies: 1724 | '@jest/test-result': 29.5.0 1725 | '@jest/types': 29.5.0 1726 | '@types/node': 18.15.10 1727 | ansi-escapes: 4.3.2 1728 | chalk: 4.1.2 1729 | emittery: 0.13.1 1730 | jest-util: 29.5.0 1731 | string-length: 4.0.2 1732 | dev: true 1733 | 1734 | /jest-worker/29.5.0: 1735 | resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} 1736 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1737 | dependencies: 1738 | '@types/node': 18.15.10 1739 | jest-util: 29.5.0 1740 | merge-stream: 2.0.0 1741 | supports-color: 8.1.1 1742 | dev: true 1743 | 1744 | /jest/29.5.0: 1745 | resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==} 1746 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1747 | hasBin: true 1748 | peerDependencies: 1749 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 1750 | peerDependenciesMeta: 1751 | node-notifier: 1752 | optional: true 1753 | dependencies: 1754 | '@jest/core': 29.5.0 1755 | '@jest/types': 29.5.0 1756 | import-local: 3.1.0 1757 | jest-cli: 29.5.0 1758 | transitivePeerDependencies: 1759 | - '@types/node' 1760 | - supports-color 1761 | - ts-node 1762 | dev: true 1763 | 1764 | /js-tokens/4.0.0: 1765 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1766 | dev: true 1767 | 1768 | /js-yaml/3.14.1: 1769 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 1770 | hasBin: true 1771 | dependencies: 1772 | argparse: 1.0.10 1773 | esprima: 4.0.1 1774 | dev: true 1775 | 1776 | /jsesc/2.5.2: 1777 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 1778 | engines: {node: '>=4'} 1779 | hasBin: true 1780 | dev: true 1781 | 1782 | /json-parse-even-better-errors/2.3.1: 1783 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1784 | dev: true 1785 | 1786 | /json5/2.2.3: 1787 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 1788 | engines: {node: '>=6'} 1789 | hasBin: true 1790 | dev: true 1791 | 1792 | /kleur/3.0.3: 1793 | resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} 1794 | engines: {node: '>=6'} 1795 | dev: true 1796 | 1797 | /leven/3.1.0: 1798 | resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} 1799 | engines: {node: '>=6'} 1800 | dev: true 1801 | 1802 | /lines-and-columns/1.2.4: 1803 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1804 | dev: true 1805 | 1806 | /locate-path/5.0.0: 1807 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1808 | engines: {node: '>=8'} 1809 | dependencies: 1810 | p-locate: 4.1.0 1811 | dev: true 1812 | 1813 | /lodash.memoize/4.1.2: 1814 | resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} 1815 | dev: true 1816 | 1817 | /lru-cache/5.1.1: 1818 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 1819 | dependencies: 1820 | yallist: 3.1.1 1821 | dev: true 1822 | 1823 | /lru-cache/6.0.0: 1824 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1825 | engines: {node: '>=10'} 1826 | dependencies: 1827 | yallist: 4.0.0 1828 | dev: true 1829 | 1830 | /make-dir/3.1.0: 1831 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} 1832 | engines: {node: '>=8'} 1833 | dependencies: 1834 | semver: 6.3.0 1835 | dev: true 1836 | 1837 | /make-error/1.3.6: 1838 | resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} 1839 | dev: true 1840 | 1841 | /makeerror/1.0.12: 1842 | resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} 1843 | dependencies: 1844 | tmpl: 1.0.5 1845 | dev: true 1846 | 1847 | /merge-stream/2.0.0: 1848 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1849 | dev: true 1850 | 1851 | /micromatch/4.0.5: 1852 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1853 | engines: {node: '>=8.6'} 1854 | dependencies: 1855 | braces: 3.0.2 1856 | picomatch: 2.3.1 1857 | dev: true 1858 | 1859 | /mimic-fn/2.1.0: 1860 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1861 | engines: {node: '>=6'} 1862 | dev: true 1863 | 1864 | /minimatch/3.1.2: 1865 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1866 | dependencies: 1867 | brace-expansion: 1.1.11 1868 | dev: true 1869 | 1870 | /ms/2.1.2: 1871 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1872 | dev: true 1873 | 1874 | /natural-compare/1.4.0: 1875 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1876 | dev: true 1877 | 1878 | /node-int64/0.4.0: 1879 | resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} 1880 | dev: true 1881 | 1882 | /node-releases/2.0.10: 1883 | resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} 1884 | dev: true 1885 | 1886 | /normalize-path/3.0.0: 1887 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1888 | engines: {node: '>=0.10.0'} 1889 | dev: true 1890 | 1891 | /npm-run-path/4.0.1: 1892 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 1893 | engines: {node: '>=8'} 1894 | dependencies: 1895 | path-key: 3.1.1 1896 | dev: true 1897 | 1898 | /once/1.4.0: 1899 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1900 | dependencies: 1901 | wrappy: 1.0.2 1902 | dev: true 1903 | 1904 | /onetime/5.1.2: 1905 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 1906 | engines: {node: '>=6'} 1907 | dependencies: 1908 | mimic-fn: 2.1.0 1909 | dev: true 1910 | 1911 | /p-limit/2.3.0: 1912 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1913 | engines: {node: '>=6'} 1914 | dependencies: 1915 | p-try: 2.2.0 1916 | dev: true 1917 | 1918 | /p-limit/3.1.0: 1919 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1920 | engines: {node: '>=10'} 1921 | dependencies: 1922 | yocto-queue: 0.1.0 1923 | dev: true 1924 | 1925 | /p-locate/4.1.0: 1926 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 1927 | engines: {node: '>=8'} 1928 | dependencies: 1929 | p-limit: 2.3.0 1930 | dev: true 1931 | 1932 | /p-try/2.2.0: 1933 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1934 | engines: {node: '>=6'} 1935 | dev: true 1936 | 1937 | /parse-json/5.2.0: 1938 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1939 | engines: {node: '>=8'} 1940 | dependencies: 1941 | '@babel/code-frame': 7.18.6 1942 | error-ex: 1.3.2 1943 | json-parse-even-better-errors: 2.3.1 1944 | lines-and-columns: 1.2.4 1945 | dev: true 1946 | 1947 | /path-exists/4.0.0: 1948 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1949 | engines: {node: '>=8'} 1950 | dev: true 1951 | 1952 | /path-is-absolute/1.0.1: 1953 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1954 | engines: {node: '>=0.10.0'} 1955 | dev: true 1956 | 1957 | /path-key/3.1.1: 1958 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1959 | engines: {node: '>=8'} 1960 | dev: true 1961 | 1962 | /path-parse/1.0.7: 1963 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1964 | dev: true 1965 | 1966 | /picocolors/1.0.0: 1967 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1968 | dev: true 1969 | 1970 | /picomatch/2.3.1: 1971 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1972 | engines: {node: '>=8.6'} 1973 | dev: true 1974 | 1975 | /pirates/4.0.5: 1976 | resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} 1977 | engines: {node: '>= 6'} 1978 | dev: true 1979 | 1980 | /pkg-dir/4.2.0: 1981 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 1982 | engines: {node: '>=8'} 1983 | dependencies: 1984 | find-up: 4.1.0 1985 | dev: true 1986 | 1987 | /pretty-format/29.5.0: 1988 | resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==} 1989 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1990 | dependencies: 1991 | '@jest/schemas': 29.4.3 1992 | ansi-styles: 5.2.0 1993 | react-is: 18.2.0 1994 | dev: true 1995 | 1996 | /prompts/2.4.2: 1997 | resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} 1998 | engines: {node: '>= 6'} 1999 | dependencies: 2000 | kleur: 3.0.3 2001 | sisteransi: 1.0.5 2002 | dev: true 2003 | 2004 | /pure-rand/6.0.1: 2005 | resolution: {integrity: sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==} 2006 | dev: true 2007 | 2008 | /react-is/18.2.0: 2009 | resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} 2010 | dev: true 2011 | 2012 | /require-directory/2.1.1: 2013 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 2014 | engines: {node: '>=0.10.0'} 2015 | dev: true 2016 | 2017 | /resolve-cwd/3.0.0: 2018 | resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} 2019 | engines: {node: '>=8'} 2020 | dependencies: 2021 | resolve-from: 5.0.0 2022 | dev: true 2023 | 2024 | /resolve-from/5.0.0: 2025 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 2026 | engines: {node: '>=8'} 2027 | dev: true 2028 | 2029 | /resolve.exports/2.0.2: 2030 | resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} 2031 | engines: {node: '>=10'} 2032 | dev: true 2033 | 2034 | /resolve/1.22.1: 2035 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} 2036 | hasBin: true 2037 | dependencies: 2038 | is-core-module: 2.11.0 2039 | path-parse: 1.0.7 2040 | supports-preserve-symlinks-flag: 1.0.0 2041 | dev: true 2042 | 2043 | /semver/6.3.0: 2044 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} 2045 | hasBin: true 2046 | dev: true 2047 | 2048 | /semver/7.3.8: 2049 | resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} 2050 | engines: {node: '>=10'} 2051 | hasBin: true 2052 | dependencies: 2053 | lru-cache: 6.0.0 2054 | dev: true 2055 | 2056 | /shebang-command/2.0.0: 2057 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2058 | engines: {node: '>=8'} 2059 | dependencies: 2060 | shebang-regex: 3.0.0 2061 | dev: true 2062 | 2063 | /shebang-regex/3.0.0: 2064 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2065 | engines: {node: '>=8'} 2066 | dev: true 2067 | 2068 | /signal-exit/3.0.7: 2069 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 2070 | dev: true 2071 | 2072 | /sisteransi/1.0.5: 2073 | resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} 2074 | dev: true 2075 | 2076 | /slash/3.0.0: 2077 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2078 | engines: {node: '>=8'} 2079 | dev: true 2080 | 2081 | /source-map-support/0.5.13: 2082 | resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} 2083 | dependencies: 2084 | buffer-from: 1.1.2 2085 | source-map: 0.6.1 2086 | dev: true 2087 | 2088 | /source-map/0.6.1: 2089 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 2090 | engines: {node: '>=0.10.0'} 2091 | dev: true 2092 | 2093 | /sprintf-js/1.0.3: 2094 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 2095 | dev: true 2096 | 2097 | /stack-utils/2.0.6: 2098 | resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} 2099 | engines: {node: '>=10'} 2100 | dependencies: 2101 | escape-string-regexp: 2.0.0 2102 | dev: true 2103 | 2104 | /string-length/4.0.2: 2105 | resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} 2106 | engines: {node: '>=10'} 2107 | dependencies: 2108 | char-regex: 1.0.2 2109 | strip-ansi: 6.0.1 2110 | dev: true 2111 | 2112 | /string-width/4.2.3: 2113 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 2114 | engines: {node: '>=8'} 2115 | dependencies: 2116 | emoji-regex: 8.0.0 2117 | is-fullwidth-code-point: 3.0.0 2118 | strip-ansi: 6.0.1 2119 | dev: true 2120 | 2121 | /strip-ansi/6.0.1: 2122 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2123 | engines: {node: '>=8'} 2124 | dependencies: 2125 | ansi-regex: 5.0.1 2126 | dev: true 2127 | 2128 | /strip-bom/4.0.0: 2129 | resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} 2130 | engines: {node: '>=8'} 2131 | dev: true 2132 | 2133 | /strip-final-newline/2.0.0: 2134 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 2135 | engines: {node: '>=6'} 2136 | dev: true 2137 | 2138 | /strip-json-comments/3.1.1: 2139 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2140 | engines: {node: '>=8'} 2141 | dev: true 2142 | 2143 | /supports-color/5.5.0: 2144 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 2145 | engines: {node: '>=4'} 2146 | dependencies: 2147 | has-flag: 3.0.0 2148 | dev: true 2149 | 2150 | /supports-color/7.2.0: 2151 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2152 | engines: {node: '>=8'} 2153 | dependencies: 2154 | has-flag: 4.0.0 2155 | dev: true 2156 | 2157 | /supports-color/8.1.1: 2158 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} 2159 | engines: {node: '>=10'} 2160 | dependencies: 2161 | has-flag: 4.0.0 2162 | dev: true 2163 | 2164 | /supports-preserve-symlinks-flag/1.0.0: 2165 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2166 | engines: {node: '>= 0.4'} 2167 | dev: true 2168 | 2169 | /test-exclude/6.0.0: 2170 | resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} 2171 | engines: {node: '>=8'} 2172 | dependencies: 2173 | '@istanbuljs/schema': 0.1.3 2174 | glob: 7.2.3 2175 | minimatch: 3.1.2 2176 | dev: true 2177 | 2178 | /tmpl/1.0.5: 2179 | resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} 2180 | dev: true 2181 | 2182 | /to-fast-properties/2.0.0: 2183 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 2184 | engines: {node: '>=4'} 2185 | dev: true 2186 | 2187 | /to-regex-range/5.0.1: 2188 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2189 | engines: {node: '>=8.0'} 2190 | dependencies: 2191 | is-number: 7.0.0 2192 | dev: true 2193 | 2194 | /ts-jest/29.0.5_doipufordlnvh5g4adbwayvyvy: 2195 | resolution: {integrity: sha512-PL3UciSgIpQ7f6XjVOmbi96vmDHUqAyqDr8YxzopDqX3kfgYtX1cuNeBjP+L9sFXi6nzsGGA6R3fP3DDDJyrxA==} 2196 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2197 | hasBin: true 2198 | peerDependencies: 2199 | '@babel/core': '>=7.0.0-beta.0 <8' 2200 | '@jest/types': ^29.0.0 2201 | babel-jest: ^29.0.0 2202 | esbuild: '*' 2203 | jest: ^29.0.0 2204 | typescript: '>=4.3' 2205 | peerDependenciesMeta: 2206 | '@babel/core': 2207 | optional: true 2208 | '@jest/types': 2209 | optional: true 2210 | babel-jest: 2211 | optional: true 2212 | esbuild: 2213 | optional: true 2214 | dependencies: 2215 | bs-logger: 0.2.6 2216 | fast-json-stable-stringify: 2.1.0 2217 | jest: 29.5.0 2218 | jest-util: 29.5.0 2219 | json5: 2.2.3 2220 | lodash.memoize: 4.1.2 2221 | make-error: 1.3.6 2222 | semver: 7.3.8 2223 | typescript: 4.9.5 2224 | yargs-parser: 21.1.1 2225 | dev: true 2226 | 2227 | /type-detect/4.0.8: 2228 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 2229 | engines: {node: '>=4'} 2230 | dev: true 2231 | 2232 | /type-fest/0.21.3: 2233 | resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} 2234 | engines: {node: '>=10'} 2235 | dev: true 2236 | 2237 | /typescript/4.9.5: 2238 | resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} 2239 | engines: {node: '>=4.2.0'} 2240 | hasBin: true 2241 | dev: true 2242 | 2243 | /update-browserslist-db/1.0.10_browserslist@4.21.5: 2244 | resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} 2245 | hasBin: true 2246 | peerDependencies: 2247 | browserslist: '>= 4.21.0' 2248 | dependencies: 2249 | browserslist: 4.21.5 2250 | escalade: 3.1.1 2251 | picocolors: 1.0.0 2252 | dev: true 2253 | 2254 | /v8-to-istanbul/9.1.0: 2255 | resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} 2256 | engines: {node: '>=10.12.0'} 2257 | dependencies: 2258 | '@jridgewell/trace-mapping': 0.3.17 2259 | '@types/istanbul-lib-coverage': 2.0.4 2260 | convert-source-map: 1.9.0 2261 | dev: true 2262 | 2263 | /walker/1.0.8: 2264 | resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} 2265 | dependencies: 2266 | makeerror: 1.0.12 2267 | dev: true 2268 | 2269 | /which/2.0.2: 2270 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2271 | engines: {node: '>= 8'} 2272 | hasBin: true 2273 | dependencies: 2274 | isexe: 2.0.0 2275 | dev: true 2276 | 2277 | /wrap-ansi/7.0.0: 2278 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 2279 | engines: {node: '>=10'} 2280 | dependencies: 2281 | ansi-styles: 4.3.0 2282 | string-width: 4.2.3 2283 | strip-ansi: 6.0.1 2284 | dev: true 2285 | 2286 | /wrappy/1.0.2: 2287 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2288 | dev: true 2289 | 2290 | /write-file-atomic/4.0.2: 2291 | resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} 2292 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 2293 | dependencies: 2294 | imurmurhash: 0.1.4 2295 | signal-exit: 3.0.7 2296 | dev: true 2297 | 2298 | /y18n/5.0.8: 2299 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 2300 | engines: {node: '>=10'} 2301 | dev: true 2302 | 2303 | /yallist/3.1.1: 2304 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 2305 | dev: true 2306 | 2307 | /yallist/4.0.0: 2308 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 2309 | dev: true 2310 | 2311 | /yargs-parser/21.1.1: 2312 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 2313 | engines: {node: '>=12'} 2314 | dev: true 2315 | 2316 | /yargs/17.7.1: 2317 | resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} 2318 | engines: {node: '>=12'} 2319 | dependencies: 2320 | cliui: 8.0.1 2321 | escalade: 3.1.1 2322 | get-caller-file: 2.0.5 2323 | require-directory: 2.1.1 2324 | string-width: 4.2.3 2325 | y18n: 5.0.8 2326 | yargs-parser: 21.1.1 2327 | dev: true 2328 | 2329 | /yocto-queue/0.1.0: 2330 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2331 | engines: {node: '>=10'} 2332 | dev: true 2333 | --------------------------------------------------------------------------------