pax_global_header00006660000000000000000000000064141561377300014521gustar00rootroot0000000000000052 comment=e5beac6da4ce471d145e4e1303e41c3e6d78f37b css-select-4.2.0/000077500000000000000000000000001415613773000135715ustar00rootroot00000000000000css-select-4.2.0/.eslintignore000066400000000000000000000000351415613773000162720ustar00rootroot00000000000000node_modules/ coverage/ lib/ css-select-4.2.0/.eslintrc.json000066400000000000000000000042751415613773000163750ustar00rootroot00000000000000{ "extends": ["eslint:recommended", "prettier"], "env": { "node": true, "es6": true }, "rules": { "eqeqeq": [2, "smart"], "no-caller": 2, "dot-notation": 2, "no-var": 2, "prefer-const": 2, "prefer-arrow-callback": [2, { "allowNamedFunctions": true }], "arrow-body-style": [2, "as-needed"], "object-shorthand": 2, "prefer-template": 2, "one-var": [2, "never"], "prefer-destructuring": [2, { "object": true }], "capitalized-comments": 2, "multiline-comment-style": [2, "starred-block"], "spaced-comment": 2, "yoda": [2, "never"], "curly": [2, "multi-line"], "no-else-return": 2 }, "overrides": [ { "files": "*.ts", "extends": [ "plugin:@typescript-eslint/eslint-recommended", "plugin:@typescript-eslint/recommended", "prettier" ], "parserOptions": { "sourceType": "module", "project": "./tsconfig.eslint.json" }, "rules": { "@typescript-eslint/prefer-for-of": 0, "@typescript-eslint/member-ordering": 0, "@typescript-eslint/explicit-function-return-type": 0, "@typescript-eslint/no-unused-vars": 0, "@typescript-eslint/no-use-before-define": [ 2, { "functions": false } ], "@typescript-eslint/consistent-type-definitions": [ 2, "interface" ], "@typescript-eslint/prefer-function-type": 2, "@typescript-eslint/no-unnecessary-type-arguments": 2, "@typescript-eslint/prefer-string-starts-ends-with": 2, "@typescript-eslint/prefer-readonly": 2, "@typescript-eslint/prefer-includes": 2, "@typescript-eslint/no-unnecessary-condition": 2, "@typescript-eslint/switch-exhaustiveness-check": 2, "@typescript-eslint/prefer-nullish-coalescing": 2 } } ] } css-select-4.2.0/.github/000077500000000000000000000000001415613773000151315ustar00rootroot00000000000000css-select-4.2.0/.github/FUNDING.yml000066400000000000000000000000501415613773000167410ustar00rootroot00000000000000github: [fb55] tidelift: npm/css-select css-select-4.2.0/.github/dependabot.yml000066400000000000000000000004401415613773000177570ustar00rootroot00000000000000version: 2 updates: - package-ecosystem: npm directory: "/" schedule: interval: daily open-pull-requests-limit: 10 versioning-strategy: increase - package-ecosystem: "github-actions" directory: "/" schedule: interval: daily css-select-4.2.0/.github/workflows/000077500000000000000000000000001415613773000171665ustar00rootroot00000000000000css-select-4.2.0/.github/workflows/codeql-analysis.yml000066400000000000000000000013411415613773000230000ustar00rootroot00000000000000name: "CodeQL" on: push: branches: [master] pull_request: # The branches below must be a subset of the branches above branches: [master] schedule: - cron: "0 0 * * 0" jobs: analyze: name: Analyze runs-on: ubuntu-latest permissions: actions: read contents: read security-events: write steps: - name: Checkout repository uses: actions/checkout@v2 - name: Initialize CodeQL uses: github/codeql-action/init@v1 with: languages: "javascript" - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v1 css-select-4.2.0/.github/workflows/dependabot-automerge.yml000066400000000000000000000022601415613773000240040ustar00rootroot00000000000000# Based on https://docs.github.com/en/code-security/supply-chain-security/keeping-your-dependencies-updated-automatically/automating-dependabot-with-github-actions#enable-auto-merge-on-a-pull-request name: Dependabot auto-merge on: pull_request_target permissions: pull-requests: write contents: write jobs: dependabot: runs-on: ubuntu-latest if: ${{ github.actor == 'dependabot[bot]' }} steps: - name: Dependabot metadata id: metadata uses: dependabot/fetch-metadata@v1.1.1 with: github-token: "${{ secrets.GITHUB_TOKEN }}" - name: Enable auto-merge for Dependabot PRs # Automatically merge semver-patch and semver-minor PRs if: "${{ steps.metadata.outputs.update-type == 'version-update:semver-minor' || steps.metadata.outputs.update-type == 'version-update:semver-patch' }}" run: gh pr merge --auto --squash "$PR_URL" env: PR_URL: ${{github.event.pull_request.html_url}} GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} css-select-4.2.0/.github/workflows/nodejs-test.yml000066400000000000000000000030641415613773000221530ustar00rootroot00000000000000name: Node.js CI on: push: branches-ignore: - "dependabot/**" pull_request: env: CI: true FORCE_COLOR: 2 NODE_COV: 16 # The Node.js version to run coveralls on jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: node-version: 16 cache: npm - run: npm ci - run: npm run lint test: name: Node ${{ matrix.node }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: node: - 10 - 12 - 14 - 16 steps: - uses: actions/checkout@v2 - name: Use Node.js ${{ matrix.node }} uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} cache: npm - run: npm ci - run: npm run build --if-present - name: Run Jest run: npm run test:jest if: matrix.node != env.NODE_COV - name: Run Jest with coverage run: npm run test:jest -- --coverage if: matrix.node == env.NODE_COV - name: Run Coveralls uses: coverallsapp/github-action@1.1.3 if: matrix.node == env.NODE_COV continue-on-error: true with: github-token: "${{ secrets.GITHUB_TOKEN }}" css-select-4.2.0/.gitignore000066400000000000000000000000461415613773000155610ustar00rootroot00000000000000.vscode/ node_modules/ coverage/ lib/ css-select-4.2.0/.prettierignore000066400000000000000000000000351415613773000166320ustar00rootroot00000000000000node_modules/ coverage/ lib/ css-select-4.2.0/LICENSE000066400000000000000000000023541415613773000146020ustar00rootroot00000000000000Copyright (c) Felix Böhm All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. css-select-4.2.0/README.md000066400000000000000000000260141415613773000150530ustar00rootroot00000000000000# css-select [![NPM version](http://img.shields.io/npm/v/css-select.svg)](https://npmjs.org/package/css-select) [![Build Status](https://travis-ci.com/fb55/css-select.svg?branch=master)](http://travis-ci.com/fb55/css-select) [![Downloads](https://img.shields.io/npm/dm/css-select.svg)](https://npmjs.org/package/css-select) [![Coverage](https://coveralls.io/repos/fb55/css-select/badge.svg?branch=master)](https://coveralls.io/r/fb55/css-select) a CSS selector compiler/engine ## What? css-select turns CSS selectors into functions that tests if elements match them. When searching for elements, testing is executed "from the top", similar to how browsers execute CSS selectors. In its default configuration, css-select queries the DOM structure of the [`domhandler`](https://github.com/fb55/domhandler) module (also known as htmlparser2 DOM). It uses [`domutils`](https://github.com/fb55/domutils) as its default adapter over the DOM structure. See Options below for details on querying alternative DOM structures. **Features:** - Full implementation of CSS3 selectors - Partial implementation of jQuery/Sizzle extensions - Very high test coverage - Pretty good performance ## Why? The traditional approach of executing CSS selectors, named left-to-right execution, is to execute every component of the selector in order, from left to right _(duh)_. The execution of the selector `a b` for example will first query for `a` elements, then search these for `b` elements. (That's the approach of eg. [`Sizzle`](https://github.com/jquery/sizzle), [`nwmatcher`](https://github.com/dperini/nwmatcher/) and [`qwery`](https://github.com/ded/qwery).) While this works, it has some downsides: Children of `a`s will be checked multiple times; first, to check if they are also `a`s, then, for every superior `a` once, if they are `b`s. Using [Big O notation](http://en.wikipedia.org/wiki/Big_O_notation), that would be `O(n^(k+1))`, where `k` is the number of descendant selectors (that's the space in the example above). The far more efficient approach is to first look for `b` elements, then check if they have superior `a` elements: Using big O notation again, that would be `O(n)`. That's called right-to-left execution. And that's what css-select does – and why it's quite performant. ## How does it work? By building a stack of functions. _Wait, what?_ Okay, so let's suppose we want to compile the selector `a b` again, for right-to-left execution. We start by _parsing_ the selector, which means we turn the selector into an array of the building-blocks of the selector, so we can distinguish them easily. That's what the [`css-what`](https://github.com/fb55/css-what) module is for, if you want to have a look. Anyway, after parsing, we end up with an array like this one: ```js [ { type: "tag", name: "a" }, { type: "descendant" }, { type: "tag", name: "b" }, ]; ``` Actually, this array is wrapped in another array, but that's another story (involving commas in selectors). Now that we know the meaning of every part of the selector, we can compile it. That's where it becomes interesting. The basic idea is to turn every part of the selector into a function, which takes an element as its only argument. The function checks whether a passed element matches its part of the selector: If it does, the element is passed to the next turned-into-a-function part of the selector, which does the same. If an element is accepted by all parts of the selector, it _matches_ the selector and double rainbow ALL THE WAY. As said before, we want to do right-to-left execution with all the big O improvements nonsense, so elements are passed from the rightmost part of the selector (`b` in our example) to the leftmost (~~which would be `c`~~ of course `a`). _//TODO: More in-depth description. Implementation details. Build a spaceship._ ## API ```js const CSSselect = require("css-select"); ``` **Note:** css-select throws errors when invalid selectors are passed to it, contrary to the behavior in browsers, which swallow them. This is done to aid with writing css selectors, but can be unexpected when processing arbitrary strings. #### `CSSselect.selectAll(query, elems, options)` Queries `elems`, returns an array containing all matches. - `query` can be either a CSS selector or a function. - `elems` can be either an array of elements, or a single element. If it is an element, its children will be queried. - `options` is described below. Aliases: `default` export, `CSSselect.iterate(query, elems)`. #### `CSSselect.compile(query, options)` Compiles the query, returns a function. #### `CSSselect.is(elem, query, options)` Tests whether or not an element is matched by `query`. `query` can be either a CSS selector or a function. #### `CSSselect.selectOne(query, elems, options)` Arguments are the same as for `CSSselect.selectAll(query, elems)`. Only returns the first match, or `null` if there was no match. ### Options All options are optional. - `xmlMode`: When enabled, tag names will be case-sensitive. Default: `false`. - `rootFunc`: The last function in the stack, will be called with the last element that's looked at. - `adapter`: The adapter to use when interacting with the backing DOM structure. By default it uses the `domutils` module. - `context`: The context of the current query. Used to limit the scope of searches. Can be matched directly using the `:scope` pseudo-selector. - `cacheResults`: Allow css-select to cache results for some selectors, sometimes greatly improving querying performance. Disable this if your document can change in between queries with the same compiled selector. Default: `true`. #### Custom Adapters A custom adapter must match the interface described [here](https://github.com/fb55/css-select/blob/1aa44bdd64aaf2ebdfd7f338e2e76bed36521957/src/types.ts#L6-L96). You may want to have a look at [`domutils`](https://github.com/fb55/domutils) to see the default implementation, or at [`css-select-browser-adapter`](https://github.com/nrkn/css-select-browser-adapter/blob/master/index.js) for an implementation backed by the DOM. ## Supported selectors _As defined by CSS 4 and / or jQuery._ - [Selector lists](https://developer.mozilla.org/en-US/docs/Web/CSS/Selector_list) (`,`) - [Universal](https://developer.mozilla.org/en-US/docs/Web/CSS/Universal_selectors) (`*`) - [Type](https://developer.mozilla.org/en-US/docs/Web/CSS/Type_selectors) (``) - [Descendant](https://developer.mozilla.org/en-US/docs/Web/CSS/Descendant_combinator) (` `) - [Child](https://developer.mozilla.org/en-US/docs/Web/CSS/Child_combinator) (`>`) - Parent (`<`) - [Adjacent sibling](https://developer.mozilla.org/en-US/docs/Web/CSS/Adjacent_sibling_combinator) (`+`) - [General sibling](https://developer.mozilla.org/en-US/docs/Web/CSS/General_sibling_combinator) (`~`) - [Attribute](https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors) (`[attr=foo]`), with supported comparisons: - `[attr]` (existential) - `=` - `~=` - `|=` - `*=` - `^=` - `$=` - `!=` - Also, `i` can be added after the comparison to make the comparison case-insensitive (eg. `[attr=foo i]`) - Pseudos: - [`:not`](https://developer.mozilla.org/en-US/docs/Web/CSS/:not) - [`:contains`](https://api.jquery.com/contains-selector) - `:icontains` (case-insensitive version of `:contains`) - [`:has`](https://developer.mozilla.org/en-US/docs/Web/CSS/:has) - [`:root`](https://developer.mozilla.org/en-US/docs/Web/CSS/:root) - [`:empty`](https://developer.mozilla.org/en-US/docs/Web/CSS/:empty) - [`:parent`](https://api.jquery.com/parent-selector) - [`:first-child`](https://developer.mozilla.org/en-US/docs/Web/CSS/:first-child), [`:last-child`](https://developer.mozilla.org/en-US/docs/Web/CSS/:last-child), [`:first-of-type`](https://developer.mozilla.org/en-US/docs/Web/CSS/:first-of-type), [`:last-of-type`](https://developer.mozilla.org/en-US/docs/Web/CSS/:last-of-type) - [`:only-of-type`](https://developer.mozilla.org/en-US/docs/Web/CSS/:only-of-type), [`:only-child`](https://developer.mozilla.org/en-US/docs/Web/CSS/:only-child) - [`:nth-child`](https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-child), [`:nth-last-child`](https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-last-child), [`:nth-of-type`](https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-of-type), [`:nth-last-of-type`](https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-last-of-type), - [`:link`](https://developer.mozilla.org/en-US/docs/Web/CSS/:link), [`:any-link`](https://developer.mozilla.org/en-US/docs/Web/CSS/:any-link) - [`:visited`](https://developer.mozilla.org/en-US/docs/Web/CSS/:visited), [`:hover`](https://developer.mozilla.org/en-US/docs/Web/CSS/:hover), [`:active`](https://developer.mozilla.org/en-US/docs/Web/CSS/:active) (these depend on optional `Adapter` methods, so these will only match elements if implemented in `Adapter`) - [`:selected`](https://api.jquery.com/selected-selector), [`:checked`](https://developer.mozilla.org/en-US/docs/Web/CSS/:checked) - [`:enabled`](https://developer.mozilla.org/en-US/docs/Web/CSS/:enabled), [`:disabled`](https://developer.mozilla.org/en-US/docs/Web/CSS/:disabled) - [`:required`](https://developer.mozilla.org/en-US/docs/Web/CSS/:required), [`:optional`](https://developer.mozilla.org/en-US/docs/Web/CSS/:optional) - [`:header`](https://api.jquery.com/header-selector), [`:button`](https://api.jquery.com/button-selector), [`:input`](https://api.jquery.com/input-selector), [`:text`](https://api.jquery.com/text-selector), [`:checkbox`](https://api.jquery.com/checkbox-selector), [`:file`](https://api.jquery.com/file-selector), [`:password`](https://api.jquery.com/password-selector), [`:reset`](https://api.jquery.com/reset-selector), [`:radio`](https://api.jquery.com/radio-selector) etc. - [`:is`](https://developer.mozilla.org/en-US/docs/Web/CSS/:is), plus its legacy alias `:matches` - [`:scope`](https://developer.mozilla.org/en-US/docs/Web/CSS/:scope) (uses the context from the passed options) --- License: BSD-2-Clause ## Security contact information To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure. ## `css-select` for enterprise Available as part of the Tidelift Subscription The maintainers of `css-select` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-css-select?utm_source=npm-css-select&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) css-select-4.2.0/_config.yml000066400000000000000000000000331415613773000157140ustar00rootroot00000000000000theme: jekyll-theme-cayman css-select-4.2.0/package-lock.json000066400000000000000000014766521415613773000170320ustar00rootroot00000000000000{ "name": "css-select", "version": "4.2.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "css-select", "version": "4.2.0", "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^5.1.0", "domhandler": "^4.3.0", "domutils": "^2.8.0", "nth-check": "^2.0.1" }, "devDependencies": { "@types/boolbase": "^1.0.0", "@types/jest": "^27.0.3", "@types/node": "^16.11.12", "@typescript-eslint/eslint-plugin": "^5.7.0", "@typescript-eslint/parser": "^5.7.0", "cheerio-soupselect": "^0.1.1", "eslint": "^8.4.1", "eslint-config-prettier": "^8.1.0", "htmlparser2": "^7.2.0", "jest": "^27.4.5", "prettier": "^2.5.1", "ts-jest": "^27.1.1", "typescript": "^4.5.4" }, "funding": { "url": "https://github.com/sponsors/fb55" } }, "node_modules/@babel/code-frame": { "version": "7.15.8", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", "dev": true, "dependencies": { "@babel/highlight": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { "version": "7.15.0", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { "version": "7.15.8", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz", "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==", "dev": true, "dependencies": { "@babel/code-frame": "^7.15.8", "@babel/generator": "^7.15.8", "@babel/helper-compilation-targets": "^7.15.4", "@babel/helper-module-transforms": "^7.15.8", "@babel/helpers": "^7.15.4", "@babel/parser": "^7.15.8", "@babel/template": "^7.15.4", "@babel/traverse": "^7.15.4", "@babel/types": "^7.15.6", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", "semver": "^6.3.0", "source-map": "^0.5.0" }, "engines": { "node": ">=6.9.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/babel" } }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/core/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/@babel/generator": { "version": "7.15.8", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", "dev": true, "dependencies": { "@babel/types": "^7.15.6", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/generator/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/@babel/helper-compilation-targets": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", "dev": true, "dependencies": { "@babel/compat-data": "^7.15.0", "@babel/helper-validator-option": "^7.14.5", "browserslist": "^4.16.6", "semver": "^6.3.0" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-function-name": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", "dev": true, "dependencies": { "@babel/helper-get-function-arity": "^7.15.4", "@babel/template": "^7.15.4", "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-get-function-arity": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", "dev": true, "dependencies": { "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", "dev": true, "dependencies": { "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", "dev": true, "dependencies": { "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", "dev": true, "dependencies": { "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { "version": "7.15.8", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz", "integrity": "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==", "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.15.4", "@babel/helper-replace-supers": "^7.15.4", "@babel/helper-simple-access": "^7.15.4", "@babel/helper-split-export-declaration": "^7.15.4", "@babel/helper-validator-identifier": "^7.15.7", "@babel/template": "^7.15.4", "@babel/traverse": "^7.15.4", "@babel/types": "^7.15.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-optimise-call-expression": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", "dev": true, "dependencies": { "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { "version": "7.16.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.5.tgz", "integrity": "sha512-59KHWHXxVA9K4HNF4sbHCf+eJeFe0Te/ZFGqBT4OjXhrwvA04sGfaEGsVTdsjoszq0YTP49RC9UKe5g8uN2RwQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-replace-supers": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", "dev": true, "dependencies": { "@babel/helper-member-expression-to-functions": "^7.15.4", "@babel/helper-optimise-call-expression": "^7.15.4", "@babel/traverse": "^7.15.4", "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", "dev": true, "dependencies": { "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", "dev": true, "dependencies": { "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { "version": "7.15.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", "dev": true, "dependencies": { "@babel/template": "^7.15.4", "@babel/traverse": "^7.15.4", "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { "color-convert": "^1.9.0" }, "engines": { "node": ">=4" } }, "node_modules/@babel/highlight/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" }, "engines": { "node": ">=4" } }, "node_modules/@babel/highlight/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "dependencies": { "color-name": "1.1.3" } }, "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, "engines": { "node": ">=0.8.0" } }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/@babel/highlight/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "dependencies": { "has-flag": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/@babel/parser": { "version": "7.15.8", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-bigint": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-typescript": { "version": "7.16.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.5.tgz", "integrity": "sha512-/d4//lZ1Vqb4mZ5xTep3dDK888j7BGM/iKqBmndBaoYAFPlPKrGU608VVBz5JeyAb6YQDjRu1UKqj86UhwWVgw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.16.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/template": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.14.5", "@babel/parser": "^7.15.4", "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", "dev": true, "dependencies": { "@babel/code-frame": "^7.14.5", "@babel/generator": "^7.15.4", "@babel/helper-function-name": "^7.15.4", "@babel/helper-hoist-variables": "^7.15.4", "@babel/helper-split-export-declaration": "^7.15.4", "@babel/parser": "^7.15.4", "@babel/types": "^7.15.4", "debug": "^4.1.0", "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse/node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/@babel/types": { "version": "7.15.6", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, "node_modules/@eslint/eslintrc": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.2.0", "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc/node_modules/ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true, "engines": { "node": ">= 4" } }, "node_modules/@humanwhocodes/config-array": { "version": "0.9.2", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", "minimatch": "^3.0.4" }, "engines": { "node": ">=10.10.0" } }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", "get-package-type": "^0.1.0", "js-yaml": "^3.13.1", "resolve-from": "^5.0.0" }, "engines": { "node": ">=8" } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/@jest/console": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.4.2.tgz", "integrity": "sha512-xknHThRsPB/To1FUbi6pCe43y58qFC03zfb6R7fDb/FfC7k2R3i1l+izRBJf8DI46KhYGRaF14Eo9A3qbBoixg==", "dev": true, "dependencies": { "@jest/types": "^27.4.2", "@types/node": "*", "chalk": "^4.0.0", "jest-message-util": "^27.4.2", "jest-util": "^27.4.2", "slash": "^3.0.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/core": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.5.tgz", "integrity": "sha512-3tm/Pevmi8bDsgvo73nX8p/WPng6KWlCyScW10FPEoN1HU4pwI83tJ3TsFvi1FfzsjwUlMNEPowgb/rPau/LTQ==", "dev": true, "dependencies": { "@jest/console": "^27.4.2", "@jest/reporters": "^27.4.5", "@jest/test-result": "^27.4.2", "@jest/transform": "^27.4.5", "@jest/types": "^27.4.2", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "jest-changed-files": "^27.4.2", "jest-config": "^27.4.5", "jest-haste-map": "^27.4.5", "jest-message-util": "^27.4.2", "jest-regex-util": "^27.4.0", "jest-resolve": "^27.4.5", "jest-resolve-dependencies": "^27.4.5", "jest-runner": "^27.4.5", "jest-runtime": "^27.4.5", "jest-snapshot": "^27.4.5", "jest-util": "^27.4.2", "jest-validate": "^27.4.2", "jest-watcher": "^27.4.2", "micromatch": "^4.0.4", "rimraf": "^3.0.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { "node-notifier": { "optional": true } } }, "node_modules/@jest/environment": { "version": "27.4.4", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.4.tgz", "integrity": "sha512-q+niMx7cJgt/t/b6dzLOh4W8Ef/8VyKG7hxASK39jakijJzbFBGpptx3RXz13FFV7OishQ9lTbv+dQ5K3EhfDQ==", "dev": true, "dependencies": { "@jest/fake-timers": "^27.4.2", "@jest/types": "^27.4.2", "@types/node": "*", "jest-mock": "^27.4.2" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/fake-timers": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.4.2.tgz", "integrity": "sha512-f/Xpzn5YQk5adtqBgvw1V6bF8Nx3hY0OIRRpCvWcfPl0EAjdqWPdhH3t/3XpiWZqtjIEHDyMKP9ajpva1l4Zmg==", "dev": true, "dependencies": { "@jest/types": "^27.4.2", "@sinonjs/fake-timers": "^8.0.1", "@types/node": "*", "jest-message-util": "^27.4.2", "jest-mock": "^27.4.2", "jest-util": "^27.4.2" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/globals": { "version": "27.4.4", "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.4.tgz", "integrity": "sha512-bqpqQhW30BOreXM8bA8t8JbOQzsq/WnPTnBl+It3UxAD9J8yxEAaBEylHx1dtBapAr/UBk8GidXbzmqnee8tYQ==", "dev": true, "dependencies": { "@jest/environment": "^27.4.4", "@jest/types": "^27.4.2", "expect": "^27.4.2" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/reporters": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.5.tgz", "integrity": "sha512-3orsG4vi8zXuBqEoy2LbnC1kuvkg1KQUgqNxmxpQgIOQEPeV0onvZu+qDQnEoX8qTQErtqn/xzcnbpeTuOLSiA==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^27.4.2", "@jest/test-result": "^27.4.2", "@jest/transform": "^27.4.5", "@jest/types": "^27.4.2", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", "glob": "^7.1.2", "graceful-fs": "^4.2.4", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-instrument": "^4.0.3", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", "jest-haste-map": "^27.4.5", "jest-resolve": "^27.4.5", "jest-util": "^27.4.2", "jest-worker": "^27.4.5", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", "terminal-link": "^2.0.0", "v8-to-istanbul": "^8.1.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { "node-notifier": { "optional": true } } }, "node_modules/@jest/source-map": { "version": "27.4.0", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.4.0.tgz", "integrity": "sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ==", "dev": true, "dependencies": { "callsites": "^3.0.0", "graceful-fs": "^4.2.4", "source-map": "^0.6.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/test-result": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.4.2.tgz", "integrity": "sha512-kr+bCrra9jfTgxHXHa2UwoQjxvQk3Am6QbpAiJ5x/50LW8llOYrxILkqY0lZRW/hu8FXesnudbql263+EW9iNA==", "dev": true, "dependencies": { "@jest/console": "^27.4.2", "@jest/types": "^27.4.2", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/test-sequencer": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.5.tgz", "integrity": "sha512-n5woIn/1v+FT+9hniymHPARA9upYUmfi5Pw9ewVwXCDlK4F5/Gkees9v8vdjGdAIJ2MPHLHodiajLpZZanWzEQ==", "dev": true, "dependencies": { "@jest/test-result": "^27.4.2", "graceful-fs": "^4.2.4", "jest-haste-map": "^27.4.5", "jest-runtime": "^27.4.5" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/transform": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.5.tgz", "integrity": "sha512-PuMet2UlZtlGzwc6L+aZmR3I7CEBpqadO03pU40l2RNY2fFJ191b9/ITB44LNOhVtsyykx0OZvj0PCyuLm7Eew==", "dev": true, "dependencies": { "@babel/core": "^7.1.0", "@jest/types": "^27.4.2", "babel-plugin-istanbul": "^6.0.0", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", "jest-haste-map": "^27.4.5", "jest-regex-util": "^27.4.0", "jest-util": "^27.4.2", "micromatch": "^4.0.4", "pirates": "^4.0.1", "slash": "^3.0.0", "source-map": "^0.6.1", "write-file-atomic": "^3.0.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/types": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", "@types/yargs": "^16.0.0", "chalk": "^4.0.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" }, "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" }, "engines": { "node": ">= 8" } }, "node_modules/@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", "dev": true, "dependencies": { "@sinonjs/commons": "^1.7.0" } }, "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true, "engines": { "node": ">= 6" } }, "node_modules/@types/babel__core": { "version": "7.1.16", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "node_modules/@types/babel__generator": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", "dev": true, "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", "dev": true, "dependencies": { "@babel/types": "^7.3.0" } }, "node_modules/@types/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-YfA8mbRK9HwjA5ksyfcJ13IqiKMmyORorFw1bClmIOVs3VICEjpjkc6B14rUxUREB908o0g6k/4FbCpIqab32g==", "dev": true }, "node_modules/@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", "dev": true }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/jest": { "version": "27.0.3", "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.3.tgz", "integrity": "sha512-cmmwv9t7gBYt7hNKH5Spu7Kuu/DotGa+Ff+JGRKZ4db5eh8PnKS4LuebJ3YLUoyOyIHraTGyULn23YtEAm0VSg==", "dev": true, "dependencies": { "jest-diff": "^27.0.0", "pretty-format": "^27.0.0" } }, "node_modules/@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, "node_modules/@types/node": { "version": "16.11.12", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz", "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==", "dev": true }, "node_modules/@types/prettier": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.2.tgz", "integrity": "sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==", "dev": true }, "node_modules/@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, "node_modules/@types/yargs": { "version": "16.0.4", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { "version": "20.2.1", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.7.0.tgz", "integrity": "sha512-8RTGBpNn5a9M628wBPrCbJ+v3YTEOE2qeZb7TDkGKTDXSj36KGRg92SpFFaR/0S3rSXQxM0Og/kV9EyadsYSBg==", "dev": true, "dependencies": { "@typescript-eslint/experimental-utils": "5.7.0", "@typescript-eslint/scope-manager": "5.7.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", "regexpp": "^3.2.0", "semver": "^7.3.5", "tsutils": "^3.21.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { "@typescript-eslint/parser": "^5.0.0", "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, "node_modules/@typescript-eslint/experimental-utils": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.7.0.tgz", "integrity": "sha512-u57eZ5FbEpzN5kSjmVrSesovWslH2ZyNPnaXQMXWgH57d5+EVHEt76W75vVuI9qKZ5BMDKNfRN+pxcPEjQjb2A==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", "@typescript-eslint/scope-manager": "5.7.0", "@typescript-eslint/types": "5.7.0", "@typescript-eslint/typescript-estree": "5.7.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { "eslint": "*" } }, "node_modules/@typescript-eslint/parser": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.7.0.tgz", "integrity": "sha512-m/gWCCcS4jXw6vkrPQ1BjZ1vomP01PArgzvauBqzsoZ3urLbsRChexB8/YV8z9HwE3qlJM35FxfKZ1nfP/4x8g==", "dev": true, "dependencies": { "@typescript-eslint/scope-manager": "5.7.0", "@typescript-eslint/types": "5.7.0", "@typescript-eslint/typescript-estree": "5.7.0", "debug": "^4.3.2" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, "node_modules/@typescript-eslint/scope-manager": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.7.0.tgz", "integrity": "sha512-7mxR520DGq5F7sSSgM0HSSMJ+TFUymOeFRMfUfGFAVBv8BR+Jv1vHgAouYUvWRZeszVBJlLcc9fDdktxb5kmxA==", "dev": true, "dependencies": { "@typescript-eslint/types": "5.7.0", "@typescript-eslint/visitor-keys": "5.7.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/types": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.7.0.tgz", "integrity": "sha512-5AeYIF5p2kAneIpnLFve8g50VyAjq7udM7ApZZ9JYjdPjkz0LvODfuSHIDUVnIuUoxafoWzpFyU7Sqbxgi79mA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/typescript-estree": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.7.0.tgz", "integrity": "sha512-aO1Ql+izMrTnPj5aFFlEJkpD4jRqC4Gwhygu2oHK2wfVQpmOPbyDSveJ+r/NQo+PWV43M6uEAeLVbTi09dFLhg==", "dev": true, "dependencies": { "@typescript-eslint/types": "5.7.0", "@typescript-eslint/visitor-keys": "5.7.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", "semver": "^7.3.5", "tsutils": "^3.21.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, "node_modules/@typescript-eslint/visitor-keys": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.7.0.tgz", "integrity": "sha512-hdohahZ4lTFcglZSJ3DGdzxQHBSxsLVqHzkiOmKi7xVAWC4y2c1bIMKmPJSrA4aOEoRUPOKQ87Y/taC7yVHpFg==", "dev": true, "dependencies": { "@typescript-eslint/types": "5.7.0", "eslint-visitor-keys": "^3.0.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/abab": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", "dev": true }, "node_modules/acorn": { "version": "8.6.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", "dev": true, "bin": { "acorn": "bin/acorn" }, "engines": { "node": ">=0.4.0" } }, "node_modules/acorn-globals": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", "dev": true, "dependencies": { "acorn": "^7.1.1", "acorn-walk": "^7.1.1" } }, "node_modules/acorn-globals/node_modules/acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, "bin": { "acorn": "bin/acorn" }, "engines": { "node": ">=0.4.0" } }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true, "engines": { "node": ">=0.4.0" } }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "dependencies": { "debug": "4" }, "engines": { "node": ">= 6.0.0" } }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "dependencies": { "type-fest": "^0.21.3" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ansi-escapes/node_modules/type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" }, "engines": { "node": ">= 8" } }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, "node_modules/babel-jest": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.5.tgz", "integrity": "sha512-3uuUTjXbgtODmSv/DXO9nZfD52IyC2OYTFaXGRzL0kpykzroaquCrD5+lZNafTvZlnNqZHt5pb0M08qVBZnsnA==", "dev": true, "dependencies": { "@jest/transform": "^27.4.5", "@jest/types": "^27.4.2", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.0.0", "babel-preset-jest": "^27.4.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "slash": "^3.0.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { "@babel/core": "^7.8.0" } }, "node_modules/babel-plugin-istanbul": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-instrument": "^4.0.0", "test-exclude": "^6.0.0" }, "engines": { "node": ">=8" } }, "node_modules/babel-plugin-jest-hoist": { "version": "27.4.0", "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz", "integrity": "sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw==", "dev": true, "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", "@types/babel__core": "^7.0.0", "@types/babel__traverse": "^7.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", "dev": true, "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", "@babel/plugin-syntax-class-properties": "^7.8.3", "@babel/plugin-syntax-import-meta": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-numeric-separator": "^7.8.3", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-top-level-await": "^7.8.3" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/babel-preset-jest": { "version": "27.4.0", "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz", "integrity": "sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg==", "dev": true, "dependencies": { "babel-plugin-jest-hoist": "^27.4.0", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "dependencies": { "fill-range": "^7.0.1" }, "engines": { "node": ">=8" } }, "node_modules/browser-process-hrtime": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, "node_modules/browserslist": { "version": "4.17.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.4.tgz", "integrity": "sha512-Zg7RpbZpIJRW3am9Lyckue7PLytvVxxhJj1CaJVlCWENsGEAOlnlt8X0ZxGRPp7Bt9o8tIRM5SEXy4BCPMJjLQ==", "dev": true, "dependencies": { "caniuse-lite": "^1.0.30001265", "electron-to-chromium": "^1.3.867", "escalade": "^3.1.1", "node-releases": "^2.0.0", "picocolors": "^1.0.0" }, "bin": { "browserslist": "cli.js" }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/browserslist" } }, "node_modules/bs-logger": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, "dependencies": { "fast-json-stable-stringify": "2.x" }, "engines": { "node": ">= 6" } }, "node_modules/bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, "dependencies": { "node-int64": "^0.4.0" } }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { "version": "1.0.30001267", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001267.tgz", "integrity": "sha512-r1mjTzAuJ9W8cPBGbbus8E0SKcUP7gn03R14Wk8FlAlqhH9hroy9nLqmpuXlfKEw/oILW+FGz47ipXV2O7x8lg==", "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/browserslist" } }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/char-regex": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/cheerio-soupselect": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/cheerio-soupselect/-/cheerio-soupselect-0.1.1.tgz", "integrity": "sha1-m6pqtp07jNIjFnaQNlozbLn/I1k=", "dev": true, "dependencies": { "htmlparser2": "2.x" }, "engines": { "node": ">=0.2.0" } }, "node_modules/cheerio-soupselect/node_modules/domelementtype": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", "dev": true }, "node_modules/cheerio-soupselect/node_modules/domhandler": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.0.3.tgz", "integrity": "sha1-iJ+N9iZAOvB4jinWbV1cb36/D9Y=", "dev": true, "dependencies": { "domelementtype": "1" } }, "node_modules/cheerio-soupselect/node_modules/domutils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.0.1.tgz", "integrity": "sha1-WLWNd0d0kRVWwWuLAtmcYJ2YeGk=", "dev": true, "dependencies": { "domelementtype": "1" } }, "node_modules/cheerio-soupselect/node_modules/htmlparser2": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-2.6.0.tgz", "integrity": "sha1-soVk6p0bpWoQSs5qew/dovMVg28=", "dev": true, "dependencies": { "domelementtype": "1", "domhandler": "2.0", "domutils": "1.0" } }, "node_modules/ci-info": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", "dev": true }, "node_modules/cjs-module-lexer": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true, "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" } }, "node_modules/collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", "dev": true }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "dependencies": { "delayed-stream": "~1.0.0" }, "engines": { "node": ">= 0.8" } }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "node_modules/convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "dependencies": { "safe-buffer": "~5.1.1" } }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" }, "engines": { "node": ">= 8" } }, "node_modules/css-what": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", "engines": { "node": ">= 6" }, "funding": { "url": "https://github.com/sponsors/fb55" } }, "node_modules/cssom": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", "dev": true }, "node_modules/cssstyle": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, "dependencies": { "cssom": "~0.3.6" }, "engines": { "node": ">=8" } }, "node_modules/cssstyle/node_modules/cssom": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true }, "node_modules/data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", "dev": true, "dependencies": { "abab": "^2.0.3", "whatwg-mimetype": "^2.3.0", "whatwg-url": "^8.0.0" }, "engines": { "node": ">=10" } }, "node_modules/debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/decimal.js": { "version": "10.3.1", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", "dev": true }, "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", "dev": true }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "node_modules/deepmerge": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true, "engines": { "node": ">=0.4.0" } }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/diff-sequences": { "version": "27.4.0", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz", "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==", "dev": true, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "dependencies": { "path-type": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "dependencies": { "esutils": "^2.0.2" }, "engines": { "node": ">=6.0.0" } }, "node_modules/dom-serializer": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" }, "funding": { "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, "node_modules/domelementtype": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/fb55" } ] }, "node_modules/domexception": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", "dev": true, "dependencies": { "webidl-conversions": "^5.0.0" }, "engines": { "node": ">=8" } }, "node_modules/domexception/node_modules/webidl-conversions": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/domhandler": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dependencies": { "domelementtype": "^2.2.0" }, "engines": { "node": ">= 4" }, "funding": { "url": "https://github.com/fb55/domhandler?sponsor=1" } }, "node_modules/domutils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" }, "funding": { "url": "https://github.com/fb55/domutils?sponsor=1" } }, "node_modules/electron-to-chromium": { "version": "1.3.870", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.870.tgz", "integrity": "sha512-PiJMshfq6PL+i1V+nKLwhHbCKeD8eAz8rvO9Cwk/7cChOHJBtufmjajLyYLsSRHguRFiOCVx3XzJLeZsIAYfSA==", "dev": true }, "node_modules/emittery": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "node_modules/enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "dependencies": { "ansi-colors": "^4.1.1" }, "engines": { "node": ">=8.6" } }, "node_modules/entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/esbuild": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.2.tgz", "integrity": "sha512-l076A6o/PIgcyM24s0dWmDI/b8RQf41uWoJu9I0M71CtW/YSw5T5NUeXxs5lo2tFQD+O4CW4nBHJXx3OY5NpXg==", "dev": true, "hasInstallScript": true, "optional": true, "peer": true, "bin": { "esbuild": "bin/esbuild" }, "optionalDependencies": { "esbuild-android-arm64": "0.14.2", "esbuild-darwin-64": "0.14.2", "esbuild-darwin-arm64": "0.14.2", "esbuild-freebsd-64": "0.14.2", "esbuild-freebsd-arm64": "0.14.2", "esbuild-linux-32": "0.14.2", "esbuild-linux-64": "0.14.2", "esbuild-linux-arm": "0.14.2", "esbuild-linux-arm64": "0.14.2", "esbuild-linux-mips64le": "0.14.2", "esbuild-linux-ppc64le": "0.14.2", "esbuild-netbsd-64": "0.14.2", "esbuild-openbsd-64": "0.14.2", "esbuild-sunos-64": "0.14.2", "esbuild-windows-32": "0.14.2", "esbuild-windows-64": "0.14.2", "esbuild-windows-arm64": "0.14.2" } }, "node_modules/esbuild-android-arm64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.2.tgz", "integrity": "sha512-hEixaKMN3XXCkoe+0WcexO4CcBVU5DCSUT+7P8JZiWZCbAjSkc9b6Yz2X5DSfQmRCtI/cQRU6TfMYrMQ5NBfdw==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "android" ], "peer": true }, "node_modules/esbuild-darwin-64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.2.tgz", "integrity": "sha512-Uq8t0cbJQkxkQdbUfOl2wZqZ/AtLZjvJulR1HHnc96UgyzG9YlCLSDMiqjM+NANEy7/zzvwKJsy3iNC9wwqLJA==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "darwin" ], "peer": true }, "node_modules/esbuild-darwin-arm64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.2.tgz", "integrity": "sha512-619MSa17sr7YCIrUj88KzQu2ESA4jKYtIYfLU/smX6qNgxQt3Y/gzM4s6sgJ4fPQzirvmXgcHv1ZNQAs/Xh48A==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "darwin" ], "peer": true }, "node_modules/esbuild-freebsd-64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.2.tgz", "integrity": "sha512-aP6FE/ZsChZpUV6F3HE3x1Pz0paoYXycJ7oLt06g0G9dhJKknPawXCqQg/WMyD+ldCEZfo7F1kavenPdIT/SGQ==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "freebsd" ], "peer": true }, "node_modules/esbuild-freebsd-arm64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.2.tgz", "integrity": "sha512-LSm98WTb1QIhyS83+Po0KTpZNdd2XpVpI9ua5rLWqKWbKeNRFwOsjeiuwBaRNc+O32s9oC2ZMefETxHBV6VNkQ==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "freebsd" ], "peer": true }, "node_modules/esbuild-linux-32": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.2.tgz", "integrity": "sha512-8VxnNEyeUbiGflTKcuVc5JEPTqXfsx2O6ABwUbfS1Hp26lYPRPC7pKQK5Dxa0MBejGc50jy7YZae3EGQUQ8EkQ==", "cpu": [ "ia32" ], "dev": true, "optional": true, "os": [ "linux" ], "peer": true }, "node_modules/esbuild-linux-64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.2.tgz", "integrity": "sha512-4bzMS2dNxOJoFIiHId4w+tqQzdnsch71JJV1qZnbnErSFWcR9lRgpSqWnTTFtv6XM+MvltRzSXC5wQ7AEBY6Hg==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "linux" ], "peer": true }, "node_modules/esbuild-linux-arm": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.2.tgz", "integrity": "sha512-PaylahvMHhH8YMfJPMKEqi64qA0Su+d4FNfHKvlKes/2dUe4QxgbwXT9oLVgy8iJdcFMrO7By4R8fS8S0p8aVQ==", "cpu": [ "arm" ], "dev": true, "optional": true, "os": [ "linux" ], "peer": true }, "node_modules/esbuild-linux-arm64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.2.tgz", "integrity": "sha512-RlIVp0RwJrdtasDF1vTFueLYZ8WuFzxoQ1OoRFZOTyJHCGCNgh7xJIC34gd7B7+RT0CzLBB4LcM5n0LS+hIoww==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "linux" ], "peer": true }, "node_modules/esbuild-linux-mips64le": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.2.tgz", "integrity": "sha512-Fdwrq2roFnO5oetIiUQQueZ3+5soCxBSJswg3MvYaXDomj47BN6oAWMZgLrFh1oVrtWrxSDLCJBenYdbm2s+qQ==", "cpu": [ "mips64el" ], "dev": true, "optional": true, "os": [ "linux" ], "peer": true }, "node_modules/esbuild-linux-ppc64le": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.2.tgz", "integrity": "sha512-vxptskw8JfCDD9QqpRO0XnsM1osuWeRjPaXX1TwdveLogYsbdFtcuiuK/4FxGiNMUr1ojtnCS2rMPbY8puc5NA==", "cpu": [ "ppc64" ], "dev": true, "optional": true, "os": [ "linux" ], "peer": true }, "node_modules/esbuild-netbsd-64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.2.tgz", "integrity": "sha512-I8+LzYK5iSNpspS9eCV9sW67Rj8FgMHimGri4mKiGAmN0pNfx+hFX146rYtzGtewuxKtTsPywWteHx+hPRLDsw==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "netbsd" ], "peer": true }, "node_modules/esbuild-openbsd-64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.2.tgz", "integrity": "sha512-120HgMe9elidWUvM2E6mMf0csrGwx8sYDqUIJugyMy1oHm+/nT08bTAVXuwYG/rkMIqsEO9AlMxuYnwR6En/3Q==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "openbsd" ], "peer": true }, "node_modules/esbuild-sunos-64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.2.tgz", "integrity": "sha512-Q3xcf9Uyfra9UuCFxoLixVvdigo0daZaKJ97TL2KNA4bxRUPK18wwGUk3AxvgDQZpRmg82w9PnkaNYo7a+24ow==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "sunos" ], "peer": true }, "node_modules/esbuild-windows-32": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.2.tgz", "integrity": "sha512-TW7O49tPsrq+N1sW8mb3m24j/iDGa4xzAZH4wHWwoIzgtZAYPKC0hpIhufRRG/LA30bdMChO9pjJZ5mtcybtBQ==", "cpu": [ "ia32" ], "dev": true, "optional": true, "os": [ "win32" ], "peer": true }, "node_modules/esbuild-windows-64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.2.tgz", "integrity": "sha512-Rym6ViMNmi1E2QuQMWy0AFAfdY0wGwZD73BnzlsQBX5hZBuy/L+Speh7ucUZ16gwsrMM9v86icZUDrSN/lNBKg==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "win32" ], "peer": true }, "node_modules/esbuild-windows-arm64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.2.tgz", "integrity": "sha512-ZrLbhr0vX5Em/P1faMnHucjVVWPS+m3tktAtz93WkMZLmbRJevhiW1y4CbulBd2z0MEdXZ6emDa1zFHq5O5bSA==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "win32" ], "peer": true }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/escodegen": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", "dev": true, "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1" }, "bin": { "escodegen": "bin/escodegen.js", "esgenerate": "bin/esgenerate.js" }, "engines": { "node": ">=6.0" }, "optionalDependencies": { "source-map": "~0.6.1" } }, "node_modules/escodegen/node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { "node": ">=4.0" } }, "node_modules/escodegen/node_modules/levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/escodegen/node_modules/optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "dependencies": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", "levn": "~0.3.0", "prelude-ls": "~1.1.2", "type-check": "~0.3.2", "word-wrap": "~1.2.3" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/escodegen/node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/escodegen/node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "dependencies": { "prelude-ls": "~1.1.2" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/eslint": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.4.1.tgz", "integrity": "sha512-TxU/p7LB1KxQ6+7aztTnO7K0i+h0tDi81YRY9VzB6Id71kNz+fFYnf5HD5UOQmxkzcoa0TlVZf9dpMtUv0GpWg==", "dev": true, "dependencies": { "@eslint/eslintrc": "^1.0.5", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.1.0", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.1.0", "espree": "^9.2.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", "progress": "^2.0.0", "regexpp": "^3.2.0", "semver": "^7.2.1", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-config-prettier": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, "peerDependencies": { "eslint": ">=7.0.0" } }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/eslint-utils": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "dependencies": { "eslint-visitor-keys": "^2.0.0" }, "engines": { "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" }, "funding": { "url": "https://github.com/sponsors/mysticatea" }, "peerDependencies": { "eslint": ">=5" } }, "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/eslint-visitor-keys": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/eslint/node_modules/eslint-scope": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/eslint/node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { "node": ">=4.0" } }, "node_modules/eslint/node_modules/ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true, "engines": { "node": ">= 4" } }, "node_modules/espree": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/espree/-/espree-9.2.0.tgz", "integrity": "sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg==", "dev": true, "dependencies": { "acorn": "^8.6.0", "acorn-jsx": "^5.3.1", "eslint-visitor-keys": "^3.1.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" }, "engines": { "node": ">=4" } }, "node_modules/esquery": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "dependencies": { "estraverse": "^5.1.0" }, "engines": { "node": ">=0.10" } }, "node_modules/esquery/node_modules/estraverse": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true, "engines": { "node": ">=4.0" } }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "dependencies": { "estraverse": "^5.2.0" }, "engines": { "node": ">=4.0" } }, "node_modules/esrecurse/node_modules/estraverse": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true, "engines": { "node": ">=4.0" } }, "node_modules/estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, "engines": { "node": ">=4.0" } }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/expect": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/expect/-/expect-27.4.2.tgz", "integrity": "sha512-BjAXIDC6ZOW+WBFNg96J22D27Nq5ohn+oGcuP2rtOtcjuxNoV9McpQ60PcQWhdFOSBIQdR72e+4HdnbZTFSTyg==", "dev": true, "dependencies": { "@jest/types": "^27.4.2", "ansi-styles": "^5.0.0", "jest-get-type": "^27.4.0", "jest-matcher-utils": "^27.4.2", "jest-message-util": "^27.4.2", "jest-regex-util": "^27.4.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/expect/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "node_modules/fast-glob": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" }, "engines": { "node": ">=8" } }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { "is-glob": "^4.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, "node_modules/fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fb-watchman": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", "dev": true, "dependencies": { "bser": "2.1.1" } }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "dependencies": { "flat-cache": "^3.0.4" }, "engines": { "node": "^10.12.0 || >=12.0.0" } }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" }, "engines": { "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", "dev": true }, "node_modules/form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" }, "engines": { "node": ">= 6" } }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "hasInstallScript": true, "optional": true, "os": [ "darwin" ], "engines": { "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, "engines": { "node": ">=8.0.0" } }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { "is-glob": "^4.0.3" }, "engines": { "node": ">=10.13.0" } }, "node_modules/globals": { "version": "13.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", "dev": true, "dependencies": { "type-fest": "^0.20.2" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globby": { "version": "11.0.4", "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "dev": true, "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.1.1", "ignore": "^5.1.4", "merge2": "^1.3.0", "slash": "^3.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/graceful-fs": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "dependencies": { "function-bind": "^1.1.1" }, "engines": { "node": ">= 0.4.0" } }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", "dev": true, "dependencies": { "whatwg-encoding": "^1.0.5" }, "engines": { "node": ">=10" } }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, "node_modules/htmlparser2": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { "type": "github", "url": "https://github.com/sponsors/fb55" } ], "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.2", "domutils": "^2.8.0", "entities": "^3.0.1" } }, "node_modules/htmlparser2/node_modules/entities": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", "dev": true, "engines": { "node": ">=0.12" }, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "dependencies": { "@tootallnate/once": "1", "agent-base": "6", "debug": "4" }, "engines": { "node": ">= 6" } }, "node_modules/https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "dev": true, "dependencies": { "agent-base": "6", "debug": "4" }, "engines": { "node": ">= 6" } }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "engines": { "node": ">=10.17.0" } }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, "engines": { "node": ">=0.10.0" } }, "node_modules/ignore": { "version": "5.1.8", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true, "engines": { "node": ">= 4" } }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/import-local": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", "dev": true, "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" }, "bin": { "import-local-fixture": "fixtures/cli.js" }, "engines": { "node": ">=8" } }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true, "engines": { "node": ">=0.8.19" } }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "node_modules/is-core-module": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", "dev": true, "dependencies": { "has": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/is-generator-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "engines": { "node": ">=0.12.0" } }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, "node_modules/istanbul-lib-coverage": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.2.tgz", "integrity": "sha512-o5+eTUYzCJ11/+JhW5/FUCdfsdoYVdQ/8I/OveE2XsjehYn5DdeSnNQAbjYaO8gQ6hvGTN6GM6ddQqpTVG5j8g==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, "dependencies": { "@babel/core": "^7.7.5", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.0.0", "semver": "^6.3.0" }, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^3.0.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" }, "engines": { "node": ">=10" } }, "node_modules/istanbul-reports": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.1.tgz", "integrity": "sha512-q1kvhAXWSsXfMjCdNHNPKZZv94OlspKnoGv+R9RGbnqOOQ0VbNfLFgQDVgi7hHenKsndGq3/o0OBdzDXthWcNw==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/jest": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.5.tgz", "integrity": "sha512-uT5MiVN3Jppt314kidCk47MYIRilJjA/l2mxwiuzzxGUeJIvA8/pDaJOAX5KWvjAo7SCydcW0/4WEtgbLMiJkg==", "dev": true, "dependencies": { "@jest/core": "^27.4.5", "import-local": "^3.0.2", "jest-cli": "^27.4.5" }, "bin": { "jest": "bin/jest.js" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { "node-notifier": { "optional": true } } }, "node_modules/jest-changed-files": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.4.2.tgz", "integrity": "sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A==", "dev": true, "dependencies": { "@jest/types": "^27.4.2", "execa": "^5.0.0", "throat": "^6.0.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-circus": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.5.tgz", "integrity": "sha512-eTNWa9wsvBwPykhMMShheafbwyakcdHZaEYh5iRrQ0PFJxkDP/e3U/FvzGuKWu2WpwUA3C3hPlfpuzvOdTVqnw==", "dev": true, "dependencies": { "@jest/environment": "^27.4.4", "@jest/test-result": "^27.4.2", "@jest/types": "^27.4.2", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", "expect": "^27.4.2", "is-generator-fn": "^2.0.0", "jest-each": "^27.4.2", "jest-matcher-utils": "^27.4.2", "jest-message-util": "^27.4.2", "jest-runtime": "^27.4.5", "jest-snapshot": "^27.4.5", "jest-util": "^27.4.2", "pretty-format": "^27.4.2", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-cli": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.5.tgz", "integrity": "sha512-hrky3DSgE0u7sQxaCL7bdebEPHx5QzYmrGuUjaPLmPE8jx5adtvGuOlRspvMoVLTTDOHRnZDoRLYJuA+VCI7Hg==", "dev": true, "dependencies": { "@jest/core": "^27.4.5", "@jest/test-result": "^27.4.2", "@jest/types": "^27.4.2", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "import-local": "^3.0.2", "jest-config": "^27.4.5", "jest-util": "^27.4.2", "jest-validate": "^27.4.2", "prompts": "^2.0.1", "yargs": "^16.2.0" }, "bin": { "jest": "bin/jest.js" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { "node-notifier": { "optional": true } } }, "node_modules/jest-config": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.5.tgz", "integrity": "sha512-t+STVJtPt+fpqQ8GBw850NtSQbnDOw/UzdPfzDaHQ48/AylQlW7LHj3dH+ndxhC1UxJ0Q3qkq7IH+nM1skwTwA==", "dev": true, "dependencies": { "@babel/core": "^7.1.0", "@jest/test-sequencer": "^27.4.5", "@jest/types": "^27.4.2", "babel-jest": "^27.4.5", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.4", "jest-circus": "^27.4.5", "jest-environment-jsdom": "^27.4.4", "jest-environment-node": "^27.4.4", "jest-get-type": "^27.4.0", "jest-jasmine2": "^27.4.5", "jest-regex-util": "^27.4.0", "jest-resolve": "^27.4.5", "jest-runner": "^27.4.5", "jest-util": "^27.4.2", "jest-validate": "^27.4.2", "micromatch": "^4.0.4", "pretty-format": "^27.4.2", "slash": "^3.0.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { "ts-node": ">=9.0.0" }, "peerDependenciesMeta": { "ts-node": { "optional": true } } }, "node_modules/jest-diff": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.2.tgz", "integrity": "sha512-ujc9ToyUZDh9KcqvQDkk/gkbf6zSaeEg9AiBxtttXW59H/AcqEYp1ciXAtJp+jXWva5nAf/ePtSsgWwE5mqp4Q==", "dev": true, "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^27.4.0", "jest-get-type": "^27.4.0", "pretty-format": "^27.4.2" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-docblock": { "version": "27.4.0", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.4.0.tgz", "integrity": "sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg==", "dev": true, "dependencies": { "detect-newline": "^3.0.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-each": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.4.2.tgz", "integrity": "sha512-53V2MNyW28CTruB3lXaHNk6PkiIFuzdOC9gR3C6j8YE/ACfrPnz+slB0s17AgU1TtxNzLuHyvNlLJ+8QYw9nBg==", "dev": true, "dependencies": { "@jest/types": "^27.4.2", "chalk": "^4.0.0", "jest-get-type": "^27.4.0", "jest-util": "^27.4.2", "pretty-format": "^27.4.2" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-environment-jsdom": { "version": "27.4.4", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.4.tgz", "integrity": "sha512-cYR3ndNfHBqQgFvS1RL7dNqSvD//K56j/q1s2ygNHcfTCAp12zfIromO1w3COmXrxS8hWAh7+CmZmGCIoqGcGA==", "dev": true, "dependencies": { "@jest/environment": "^27.4.4", "@jest/fake-timers": "^27.4.2", "@jest/types": "^27.4.2", "@types/node": "*", "jest-mock": "^27.4.2", "jest-util": "^27.4.2", "jsdom": "^16.6.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-environment-node": { "version": "27.4.4", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.4.tgz", "integrity": "sha512-D+v3lbJ2GjQTQR23TK0kY3vFVmSeea05giInI41HHOaJnAwOnmUHTZgUaZL+VxUB43pIzoa7PMwWtCVlIUoVoA==", "dev": true, "dependencies": { "@jest/environment": "^27.4.4", "@jest/fake-timers": "^27.4.2", "@jest/types": "^27.4.2", "@types/node": "*", "jest-mock": "^27.4.2", "jest-util": "^27.4.2" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-get-type": { "version": "27.4.0", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", "dev": true, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-haste-map": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.5.tgz", "integrity": "sha512-oJm1b5qhhPs78K24EDGifWS0dELYxnoBiDhatT/FThgB9yxqUm5F6li3Pv+Q+apMBmmPNzOBnZ7ZxWMB1Leq1Q==", "dev": true, "dependencies": { "@jest/types": "^27.4.2", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.4", "jest-regex-util": "^27.4.0", "jest-serializer": "^27.4.0", "jest-util": "^27.4.2", "jest-worker": "^27.4.5", "micromatch": "^4.0.4", "walker": "^1.0.7" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, "node_modules/jest-jasmine2": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.5.tgz", "integrity": "sha512-oUnvwhJDj2LhOiUB1kdnJjkx8C5PwgUZQb9urF77mELH9DGR4e2GqpWQKBOYXWs5+uTN9BGDqRz3Aeg5Wts7aw==", "dev": true, "dependencies": { "@babel/traverse": "^7.1.0", "@jest/environment": "^27.4.4", "@jest/source-map": "^27.4.0", "@jest/test-result": "^27.4.2", "@jest/types": "^27.4.2", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "expect": "^27.4.2", "is-generator-fn": "^2.0.0", "jest-each": "^27.4.2", "jest-matcher-utils": "^27.4.2", "jest-message-util": "^27.4.2", "jest-runtime": "^27.4.5", "jest-snapshot": "^27.4.5", "jest-util": "^27.4.2", "pretty-format": "^27.4.2", "throat": "^6.0.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-leak-detector": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.4.2.tgz", "integrity": "sha512-ml0KvFYZllzPBJWDei3mDzUhyp/M4ubKebX++fPaudpe8OsxUE+m+P6ciVLboQsrzOCWDjE20/eXew9QMx/VGw==", "dev": true, "dependencies": { "jest-get-type": "^27.4.0", "pretty-format": "^27.4.2" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-matcher-utils": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.4.2.tgz", "integrity": "sha512-jyP28er3RRtMv+fmYC/PKG8wvAmfGcSNproVTW2Y0P/OY7/hWUOmsPfxN1jOhM+0u2xU984u2yEagGivz9OBGQ==", "dev": true, "dependencies": { "chalk": "^4.0.0", "jest-diff": "^27.4.2", "jest-get-type": "^27.4.0", "pretty-format": "^27.4.2" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-message-util": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.4.2.tgz", "integrity": "sha512-OMRqRNd9E0DkBLZpFtZkAGYOXl6ZpoMtQJWTAREJKDOFa0M6ptB7L67tp+cszMBkvSgKOhNtQp2Vbcz3ZZKo/w==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^27.4.2", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.4", "pretty-format": "^27.4.2", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-mock": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.4.2.tgz", "integrity": "sha512-PDDPuyhoukk20JrQKeofK12hqtSka7mWH0QQuxSNgrdiPsrnYYLS6wbzu/HDlxZRzji5ylLRULeuI/vmZZDrYA==", "dev": true, "dependencies": { "@jest/types": "^27.4.2", "@types/node": "*" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-pnp-resolver": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", "dev": true, "engines": { "node": ">=6" }, "peerDependencies": { "jest-resolve": "*" }, "peerDependenciesMeta": { "jest-resolve": { "optional": true } } }, "node_modules/jest-regex-util": { "version": "27.4.0", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", "dev": true, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-resolve": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.5.tgz", "integrity": "sha512-xU3z1BuOz/hUhVUL+918KqUgK+skqOuUsAi7A+iwoUldK6/+PW+utK8l8cxIWT9AW7IAhGNXjSAh1UYmjULZZw==", "dev": true, "dependencies": { "@jest/types": "^27.4.2", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "jest-haste-map": "^27.4.5", "jest-pnp-resolver": "^1.2.2", "jest-util": "^27.4.2", "jest-validate": "^27.4.2", "resolve": "^1.20.0", "resolve.exports": "^1.1.0", "slash": "^3.0.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-resolve-dependencies": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.5.tgz", "integrity": "sha512-elEVvkvRK51y037NshtEkEnukMBWvlPzZHiL847OrIljJ8yIsujD2GXRPqDXC4rEVKbcdsy7W0FxoZb4WmEs7w==", "dev": true, "dependencies": { "@jest/types": "^27.4.2", "jest-regex-util": "^27.4.0", "jest-snapshot": "^27.4.5" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-runner": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.5.tgz", "integrity": "sha512-/irauncTfmY1WkTaRQGRWcyQLzK1g98GYG/8QvIPviHgO1Fqz1JYeEIsSfF+9mc/UTA6S+IIHFgKyvUrtiBIZg==", "dev": true, "dependencies": { "@jest/console": "^27.4.2", "@jest/environment": "^27.4.4", "@jest/test-result": "^27.4.2", "@jest/transform": "^27.4.5", "@jest/types": "^27.4.2", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "jest-docblock": "^27.4.0", "jest-environment-jsdom": "^27.4.4", "jest-environment-node": "^27.4.4", "jest-haste-map": "^27.4.5", "jest-leak-detector": "^27.4.2", "jest-message-util": "^27.4.2", "jest-resolve": "^27.4.5", "jest-runtime": "^27.4.5", "jest-util": "^27.4.2", "jest-worker": "^27.4.5", "source-map-support": "^0.5.6", "throat": "^6.0.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-runtime": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.5.tgz", "integrity": "sha512-CIYqwuJQXHQtPd/idgrx4zgJ6iCb6uBjQq1RSAGQrw2S8XifDmoM1Ot8NRd80ooAm+ZNdHVwsktIMGlA1F1FAQ==", "dev": true, "dependencies": { "@jest/console": "^27.4.2", "@jest/environment": "^27.4.4", "@jest/globals": "^27.4.4", "@jest/source-map": "^27.4.0", "@jest/test-result": "^27.4.2", "@jest/transform": "^27.4.5", "@jest/types": "^27.4.2", "@types/yargs": "^16.0.0", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "execa": "^5.0.0", "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", "jest-haste-map": "^27.4.5", "jest-message-util": "^27.4.2", "jest-mock": "^27.4.2", "jest-regex-util": "^27.4.0", "jest-resolve": "^27.4.5", "jest-snapshot": "^27.4.5", "jest-util": "^27.4.2", "jest-validate": "^27.4.2", "slash": "^3.0.0", "strip-bom": "^4.0.0", "yargs": "^16.2.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-serializer": { "version": "27.4.0", "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz", "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==", "dev": true, "dependencies": { "@types/node": "*", "graceful-fs": "^4.2.4" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-snapshot": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.5.tgz", "integrity": "sha512-eCi/iM1YJFrJWiT9de4+RpWWWBqsHiYxFG9V9o/n0WXs6GpW4lUt4FAHAgFPTLPqCUVzrMQmSmTZSgQzwqR7IQ==", "dev": true, "dependencies": { "@babel/core": "^7.7.2", "@babel/generator": "^7.7.2", "@babel/parser": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", "@jest/transform": "^27.4.5", "@jest/types": "^27.4.2", "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", "expect": "^27.4.2", "graceful-fs": "^4.2.4", "jest-diff": "^27.4.2", "jest-get-type": "^27.4.0", "jest-haste-map": "^27.4.5", "jest-matcher-utils": "^27.4.2", "jest-message-util": "^27.4.2", "jest-resolve": "^27.4.5", "jest-util": "^27.4.2", "natural-compare": "^1.4.0", "pretty-format": "^27.4.2", "semver": "^7.3.2" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-util": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", "dev": true, "dependencies": { "@jest/types": "^27.4.2", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.4", "picomatch": "^2.2.3" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-validate": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.2.tgz", "integrity": "sha512-hWYsSUej+Fs8ZhOm5vhWzwSLmVaPAxRy+Mr+z5MzeaHm9AxUpXdoVMEW4R86y5gOobVfBsMFLk4Rb+QkiEpx1A==", "dev": true, "dependencies": { "@jest/types": "^27.4.2", "camelcase": "^6.2.0", "chalk": "^4.0.0", "jest-get-type": "^27.4.0", "leven": "^3.1.0", "pretty-format": "^27.4.2" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-validate/node_modules/camelcase": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/jest-watcher": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.4.2.tgz", "integrity": "sha512-NJvMVyyBeXfDezhWzUOCOYZrUmkSCiatpjpm+nFUid74OZEHk6aMLrZAukIiFDwdbqp6mTM6Ui1w4oc+8EobQg==", "dev": true, "dependencies": { "@jest/test-result": "^27.4.2", "@jest/types": "^27.4.2", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "jest-util": "^27.4.2", "string-length": "^4.0.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-worker": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz", "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==", "dev": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, "engines": { "node": ">= 10.13.0" } }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/jsdom": { "version": "16.7.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "dev": true, "dependencies": { "abab": "^2.0.5", "acorn": "^8.2.4", "acorn-globals": "^6.0.0", "cssom": "^0.4.4", "cssstyle": "^2.3.0", "data-urls": "^2.0.0", "decimal.js": "^10.2.1", "domexception": "^2.0.1", "escodegen": "^2.0.0", "form-data": "^3.0.0", "html-encoding-sniffer": "^2.0.1", "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", "is-potential-custom-element-name": "^1.0.1", "nwsapi": "^2.2.0", "parse5": "6.0.1", "saxes": "^5.0.1", "symbol-tree": "^3.2.4", "tough-cookie": "^4.0.0", "w3c-hr-time": "^1.0.2", "w3c-xmlserializer": "^2.0.0", "webidl-conversions": "^6.1.0", "whatwg-encoding": "^1.0.5", "whatwg-mimetype": "^2.3.0", "whatwg-url": "^8.5.0", "ws": "^7.4.6", "xml-name-validator": "^3.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { "canvas": "^2.5.0" }, "peerDependenciesMeta": { "canvas": { "optional": true } } }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, "bin": { "jsesc": "bin/jsesc" }, "engines": { "node": ">=4" } }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, "node_modules/json5": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "dependencies": { "minimist": "^1.2.5" }, "bin": { "json5": "lib/cli.js" }, "engines": { "node": ">=6" } }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { "p-locate": "^4.1.0" }, "engines": { "node": ">=8" } }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "dependencies": { "semver": "^6.0.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/make-dir/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, "dependencies": { "tmpl": "1.0.5" } }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "engines": { "node": ">= 8" } }, "node_modules/micromatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "dependencies": { "braces": "^3.0.1", "picomatch": "^2.2.3" }, "engines": { "node": ">=8.6" } }, "node_modules/mime-db": { "version": "1.51.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.34", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dev": true, "dependencies": { "mime-db": "1.51.0" }, "engines": { "node": ">= 0.6" } }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, "engines": { "node": "*" } }, "node_modules/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", "dev": true }, "node_modules/node-modules-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/node-releases": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.0.tgz", "integrity": "sha512-aA87l0flFYMzCHpTM3DERFSYxc6lv/BltdbRTOMZuxZ0cwZCD3mejE5n9vLhSJCN++/eOqr77G1IO5uXxlQYWA==", "dev": true }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "dependencies": { "path-key": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/nth-check": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", "dependencies": { "boolbase": "^1.0.0" }, "funding": { "url": "https://github.com/fb55/nth-check?sponsor=1" } }, "node_modules/nwsapi": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "dependencies": { "mimic-fn": "^2.1.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.3" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { "p-try": "^2.0.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { "p-limit": "^2.2.0" }, "engines": { "node": ">=8" } }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "dependencies": { "callsites": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, "node_modules/picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true, "engines": { "node": ">=8.6" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/pirates": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", "dev": true, "dependencies": { "node-modules-regexp": "^1.0.0" }, "engines": { "node": ">= 6" } }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "dependencies": { "find-up": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/prettier": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", "dev": true, "bin": { "prettier": "bin-prettier.js" }, "engines": { "node": ">=10.13.0" } }, "node_modules/pretty-format": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.2.tgz", "integrity": "sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==", "dev": true, "dependencies": { "@jest/types": "^27.4.2", "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, "engines": { "node": ">=0.4.0" } }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" }, "engines": { "node": ">= 6" } }, "node_modules/psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", "dev": true }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ] }, "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, "node_modules/regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/mysticatea" } }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "dependencies": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "dependencies": { "resolve-from": "^5.0.0" }, "engines": { "node": ">=8" } }, "node_modules/resolve-cwd/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/resolve.exports": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" } }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ], "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, "node_modules/saxes": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "dev": true, "dependencies": { "xmlchars": "^2.2.0" }, "engines": { "node": ">=10" } }, "node_modules/semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/signal-exit": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", "dev": true }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, "node_modules/stack-utils": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", "dev": true, "dependencies": { "escape-string-regexp": "^2.0.0" }, "engines": { "node": ">=10" } }, "node_modules/stack-utils/node_modules/escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" } }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/supports-hyperlinks": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", "dev": true, "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" }, "engines": { "node": ">=8" } }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, "node_modules/terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", "dev": true, "dependencies": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" }, "engines": { "node": ">=8" } }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, "node_modules/throat": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", "dev": true }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "dependencies": { "is-number": "^7.0.0" }, "engines": { "node": ">=8.0" } }, "node_modules/tough-cookie": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", "dev": true, "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", "universalify": "^0.1.2" }, "engines": { "node": ">=6" } }, "node_modules/tr46": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, "dependencies": { "punycode": "^2.1.1" }, "engines": { "node": ">=8" } }, "node_modules/ts-jest": { "version": "27.1.1", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.1.tgz", "integrity": "sha512-Ds0VkB+cB+8g2JUmP/GKWndeZcCKrbe6jzolGrVWdqVUFByY/2KDHqxJ7yBSon7hDB1TA4PXxjfZ+JjzJisvgA==", "dev": true, "dependencies": { "bs-logger": "0.x", "fast-json-stable-stringify": "2.x", "jest-util": "^27.0.0", "json5": "2.x", "lodash.memoize": "4.x", "make-error": "1.x", "semver": "7.x", "yargs-parser": "20.x" }, "bin": { "ts-jest": "cli.js" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", "@types/jest": "^27.0.0", "babel-jest": ">=27.0.0 <28", "esbuild": "~0.14.0", "jest": "^27.0.0", "typescript": ">=3.8 <5.0" }, "peerDependenciesMeta": { "@babel/core": { "optional": true }, "@types/jest": { "optional": true }, "babel-jest": { "optional": true }, "esbuild": { "optional": true } } }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "node_modules/tsutils": { "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "dependencies": { "tslib": "^1.8.1" }, "engines": { "node": ">= 6" }, "peerDependencies": { "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "dependencies": { "prelude-ls": "^1.2.1" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "dependencies": { "is-typedarray": "^1.0.0" } }, "node_modules/typescript": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { "node": ">=4.2.0" } }, "node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, "engines": { "node": ">= 4.0.0" } }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "dependencies": { "punycode": "^2.1.0" } }, "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "node_modules/v8-to-istanbul": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^1.6.0", "source-map": "^0.7.3" }, "engines": { "node": ">=10.12.0" } }, "node_modules/v8-to-istanbul/node_modules/source-map": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true, "engines": { "node": ">= 8" } }, "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", "dev": true, "dependencies": { "browser-process-hrtime": "^1.0.0" } }, "node_modules/w3c-xmlserializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", "dev": true, "dependencies": { "xml-name-validator": "^3.0.0" }, "engines": { "node": ">=10" } }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, "dependencies": { "makeerror": "1.0.12" } }, "node_modules/webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true, "engines": { "node": ">=10.4" } }, "node_modules/whatwg-encoding": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", "dev": true, "dependencies": { "iconv-lite": "0.4.24" } }, "node_modules/whatwg-mimetype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", "dev": true }, "node_modules/whatwg-url": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, "dependencies": { "lodash": "^4.7.0", "tr46": "^2.1.0", "webidl-conversions": "^6.1.0" }, "engines": { "node": ">=10" } }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" }, "engines": { "node": ">= 8" } }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "node_modules/write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, "node_modules/ws": { "version": "7.5.6", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", "dev": true, "engines": { "node": ">=8.3.0" }, "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "peerDependenciesMeta": { "bufferutil": { "optional": true }, "utf-8-validate": { "optional": true } } }, "node_modules/xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true }, "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" }, "engines": { "node": ">=10" } }, "node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "engines": { "node": ">=10" } } }, "dependencies": { "@babel/code-frame": { "version": "7.15.8", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", "dev": true, "requires": { "@babel/highlight": "^7.14.5" } }, "@babel/compat-data": { "version": "7.15.0", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", "dev": true }, "@babel/core": { "version": "7.15.8", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz", "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==", "dev": true, "requires": { "@babel/code-frame": "^7.15.8", "@babel/generator": "^7.15.8", "@babel/helper-compilation-targets": "^7.15.4", "@babel/helper-module-transforms": "^7.15.8", "@babel/helpers": "^7.15.4", "@babel/parser": "^7.15.8", "@babel/template": "^7.15.4", "@babel/traverse": "^7.15.4", "@babel/types": "^7.15.6", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", "semver": "^6.3.0", "source-map": "^0.5.0" }, "dependencies": { "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } } }, "@babel/generator": { "version": "7.15.8", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", "dev": true, "requires": { "@babel/types": "^7.15.6", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, "dependencies": { "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } } }, "@babel/helper-compilation-targets": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", "dev": true, "requires": { "@babel/compat-data": "^7.15.0", "@babel/helper-validator-option": "^7.14.5", "browserslist": "^4.16.6", "semver": "^6.3.0" }, "dependencies": { "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "@babel/helper-function-name": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", "dev": true, "requires": { "@babel/helper-get-function-arity": "^7.15.4", "@babel/template": "^7.15.4", "@babel/types": "^7.15.4" } }, "@babel/helper-get-function-arity": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", "dev": true, "requires": { "@babel/types": "^7.15.4" } }, "@babel/helper-hoist-variables": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", "dev": true, "requires": { "@babel/types": "^7.15.4" } }, "@babel/helper-member-expression-to-functions": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", "dev": true, "requires": { "@babel/types": "^7.15.4" } }, "@babel/helper-module-imports": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", "dev": true, "requires": { "@babel/types": "^7.15.4" } }, "@babel/helper-module-transforms": { "version": "7.15.8", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz", "integrity": "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.15.4", "@babel/helper-replace-supers": "^7.15.4", "@babel/helper-simple-access": "^7.15.4", "@babel/helper-split-export-declaration": "^7.15.4", "@babel/helper-validator-identifier": "^7.15.7", "@babel/template": "^7.15.4", "@babel/traverse": "^7.15.4", "@babel/types": "^7.15.6" } }, "@babel/helper-optimise-call-expression": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", "dev": true, "requires": { "@babel/types": "^7.15.4" } }, "@babel/helper-plugin-utils": { "version": "7.16.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.5.tgz", "integrity": "sha512-59KHWHXxVA9K4HNF4sbHCf+eJeFe0Te/ZFGqBT4OjXhrwvA04sGfaEGsVTdsjoszq0YTP49RC9UKe5g8uN2RwQ==", "dev": true }, "@babel/helper-replace-supers": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", "dev": true, "requires": { "@babel/helper-member-expression-to-functions": "^7.15.4", "@babel/helper-optimise-call-expression": "^7.15.4", "@babel/traverse": "^7.15.4", "@babel/types": "^7.15.4" } }, "@babel/helper-simple-access": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", "dev": true, "requires": { "@babel/types": "^7.15.4" } }, "@babel/helper-split-export-declaration": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", "dev": true, "requires": { "@babel/types": "^7.15.4" } }, "@babel/helper-validator-identifier": { "version": "7.15.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", "dev": true }, "@babel/helper-validator-option": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", "dev": true }, "@babel/helpers": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", "dev": true, "requires": { "@babel/template": "^7.15.4", "@babel/traverse": "^7.15.4", "@babel/types": "^7.15.4" } }, "@babel/highlight": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, "dependencies": { "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" } }, "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" } } } }, "@babel/parser": { "version": "7.15.8", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", "dev": true }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-bigint": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-class-properties": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-typescript": { "version": "7.16.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.5.tgz", "integrity": "sha512-/d4//lZ1Vqb4mZ5xTep3dDK888j7BGM/iKqBmndBaoYAFPlPKrGU608VVBz5JeyAb6YQDjRu1UKqj86UhwWVgw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/template": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", "dev": true, "requires": { "@babel/code-frame": "^7.14.5", "@babel/parser": "^7.15.4", "@babel/types": "^7.15.4" } }, "@babel/traverse": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", "dev": true, "requires": { "@babel/code-frame": "^7.14.5", "@babel/generator": "^7.15.4", "@babel/helper-function-name": "^7.15.4", "@babel/helper-hoist-variables": "^7.15.4", "@babel/helper-split-export-declaration": "^7.15.4", "@babel/parser": "^7.15.4", "@babel/types": "^7.15.4", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true } } }, "@babel/types": { "version": "7.15.6", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" } }, "@bcoe/v8-coverage": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, "@eslint/eslintrc": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.2.0", "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, "dependencies": { "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true } } }, "@humanwhocodes/config-array": { "version": "0.9.2", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", "minimatch": "^3.0.4" } }, "@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "requires": { "camelcase": "^5.3.1", "find-up": "^4.1.0", "get-package-type": "^0.1.0", "js-yaml": "^3.13.1", "resolve-from": "^5.0.0" }, "dependencies": { "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "~1.0.2" } }, "js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true } } }, "@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, "@jest/console": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.4.2.tgz", "integrity": "sha512-xknHThRsPB/To1FUbi6pCe43y58qFC03zfb6R7fDb/FfC7k2R3i1l+izRBJf8DI46KhYGRaF14Eo9A3qbBoixg==", "dev": true, "requires": { "@jest/types": "^27.4.2", "@types/node": "*", "chalk": "^4.0.0", "jest-message-util": "^27.4.2", "jest-util": "^27.4.2", "slash": "^3.0.0" } }, "@jest/core": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.5.tgz", "integrity": "sha512-3tm/Pevmi8bDsgvo73nX8p/WPng6KWlCyScW10FPEoN1HU4pwI83tJ3TsFvi1FfzsjwUlMNEPowgb/rPau/LTQ==", "dev": true, "requires": { "@jest/console": "^27.4.2", "@jest/reporters": "^27.4.5", "@jest/test-result": "^27.4.2", "@jest/transform": "^27.4.5", "@jest/types": "^27.4.2", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "jest-changed-files": "^27.4.2", "jest-config": "^27.4.5", "jest-haste-map": "^27.4.5", "jest-message-util": "^27.4.2", "jest-regex-util": "^27.4.0", "jest-resolve": "^27.4.5", "jest-resolve-dependencies": "^27.4.5", "jest-runner": "^27.4.5", "jest-runtime": "^27.4.5", "jest-snapshot": "^27.4.5", "jest-util": "^27.4.2", "jest-validate": "^27.4.2", "jest-watcher": "^27.4.2", "micromatch": "^4.0.4", "rimraf": "^3.0.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" } }, "@jest/environment": { "version": "27.4.4", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.4.tgz", "integrity": "sha512-q+niMx7cJgt/t/b6dzLOh4W8Ef/8VyKG7hxASK39jakijJzbFBGpptx3RXz13FFV7OishQ9lTbv+dQ5K3EhfDQ==", "dev": true, "requires": { "@jest/fake-timers": "^27.4.2", "@jest/types": "^27.4.2", "@types/node": "*", "jest-mock": "^27.4.2" } }, "@jest/fake-timers": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.4.2.tgz", "integrity": "sha512-f/Xpzn5YQk5adtqBgvw1V6bF8Nx3hY0OIRRpCvWcfPl0EAjdqWPdhH3t/3XpiWZqtjIEHDyMKP9ajpva1l4Zmg==", "dev": true, "requires": { "@jest/types": "^27.4.2", "@sinonjs/fake-timers": "^8.0.1", "@types/node": "*", "jest-message-util": "^27.4.2", "jest-mock": "^27.4.2", "jest-util": "^27.4.2" } }, "@jest/globals": { "version": "27.4.4", "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.4.tgz", "integrity": "sha512-bqpqQhW30BOreXM8bA8t8JbOQzsq/WnPTnBl+It3UxAD9J8yxEAaBEylHx1dtBapAr/UBk8GidXbzmqnee8tYQ==", "dev": true, "requires": { "@jest/environment": "^27.4.4", "@jest/types": "^27.4.2", "expect": "^27.4.2" } }, "@jest/reporters": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.5.tgz", "integrity": "sha512-3orsG4vi8zXuBqEoy2LbnC1kuvkg1KQUgqNxmxpQgIOQEPeV0onvZu+qDQnEoX8qTQErtqn/xzcnbpeTuOLSiA==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^27.4.2", "@jest/test-result": "^27.4.2", "@jest/transform": "^27.4.5", "@jest/types": "^27.4.2", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", "glob": "^7.1.2", "graceful-fs": "^4.2.4", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-instrument": "^4.0.3", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", "jest-haste-map": "^27.4.5", "jest-resolve": "^27.4.5", "jest-util": "^27.4.2", "jest-worker": "^27.4.5", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", "terminal-link": "^2.0.0", "v8-to-istanbul": "^8.1.0" } }, "@jest/source-map": { "version": "27.4.0", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.4.0.tgz", "integrity": "sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ==", "dev": true, "requires": { "callsites": "^3.0.0", "graceful-fs": "^4.2.4", "source-map": "^0.6.0" } }, "@jest/test-result": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.4.2.tgz", "integrity": "sha512-kr+bCrra9jfTgxHXHa2UwoQjxvQk3Am6QbpAiJ5x/50LW8llOYrxILkqY0lZRW/hu8FXesnudbql263+EW9iNA==", "dev": true, "requires": { "@jest/console": "^27.4.2", "@jest/types": "^27.4.2", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.5.tgz", "integrity": "sha512-n5woIn/1v+FT+9hniymHPARA9upYUmfi5Pw9ewVwXCDlK4F5/Gkees9v8vdjGdAIJ2MPHLHodiajLpZZanWzEQ==", "dev": true, "requires": { "@jest/test-result": "^27.4.2", "graceful-fs": "^4.2.4", "jest-haste-map": "^27.4.5", "jest-runtime": "^27.4.5" } }, "@jest/transform": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.5.tgz", "integrity": "sha512-PuMet2UlZtlGzwc6L+aZmR3I7CEBpqadO03pU40l2RNY2fFJ191b9/ITB44LNOhVtsyykx0OZvj0PCyuLm7Eew==", "dev": true, "requires": { "@babel/core": "^7.1.0", "@jest/types": "^27.4.2", "babel-plugin-istanbul": "^6.0.0", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", "jest-haste-map": "^27.4.5", "jest-regex-util": "^27.4.0", "jest-util": "^27.4.2", "micromatch": "^4.0.4", "pirates": "^4.0.1", "slash": "^3.0.0", "source-map": "^0.6.1", "write-file-atomic": "^3.0.0" } }, "@jest/types": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", "@types/yargs": "^16.0.0", "chalk": "^4.0.0" } }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "requires": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true }, "@nodelib/fs.walk": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "requires": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, "requires": { "type-detect": "4.0.8" } }, "@sinonjs/fake-timers": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", "dev": true, "requires": { "@sinonjs/commons": "^1.7.0" } }, "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, "@types/babel__core": { "version": "7.1.16", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", "dev": true, "requires": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "@types/babel__generator": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", "dev": true, "requires": { "@babel/types": "^7.0.0" } }, "@types/babel__template": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, "requires": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "@types/babel__traverse": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", "dev": true, "requires": { "@babel/types": "^7.3.0" } }, "@types/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-YfA8mbRK9HwjA5ksyfcJ13IqiKMmyORorFw1bClmIOVs3VICEjpjkc6B14rUxUREB908o0g6k/4FbCpIqab32g==", "dev": true }, "@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", "dev": true, "requires": { "@types/node": "*" } }, "@types/istanbul-lib-coverage": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", "dev": true }, "@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "*" } }, "@types/istanbul-reports": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", "dev": true, "requires": { "@types/istanbul-lib-report": "*" } }, "@types/jest": { "version": "27.0.3", "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.3.tgz", "integrity": "sha512-cmmwv9t7gBYt7hNKH5Spu7Kuu/DotGa+Ff+JGRKZ4db5eh8PnKS4LuebJ3YLUoyOyIHraTGyULn23YtEAm0VSg==", "dev": true, "requires": { "jest-diff": "^27.0.0", "pretty-format": "^27.0.0" } }, "@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, "@types/node": { "version": "16.11.12", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz", "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==", "dev": true }, "@types/prettier": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.2.tgz", "integrity": "sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==", "dev": true }, "@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, "@types/yargs": { "version": "16.0.4", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { "@types/yargs-parser": "*" } }, "@types/yargs-parser": { "version": "20.2.1", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", "dev": true }, "@typescript-eslint/eslint-plugin": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.7.0.tgz", "integrity": "sha512-8RTGBpNn5a9M628wBPrCbJ+v3YTEOE2qeZb7TDkGKTDXSj36KGRg92SpFFaR/0S3rSXQxM0Og/kV9EyadsYSBg==", "dev": true, "requires": { "@typescript-eslint/experimental-utils": "5.7.0", "@typescript-eslint/scope-manager": "5.7.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", "regexpp": "^3.2.0", "semver": "^7.3.5", "tsutils": "^3.21.0" } }, "@typescript-eslint/experimental-utils": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.7.0.tgz", "integrity": "sha512-u57eZ5FbEpzN5kSjmVrSesovWslH2ZyNPnaXQMXWgH57d5+EVHEt76W75vVuI9qKZ5BMDKNfRN+pxcPEjQjb2A==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", "@typescript-eslint/scope-manager": "5.7.0", "@typescript-eslint/types": "5.7.0", "@typescript-eslint/typescript-estree": "5.7.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/parser": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.7.0.tgz", "integrity": "sha512-m/gWCCcS4jXw6vkrPQ1BjZ1vomP01PArgzvauBqzsoZ3urLbsRChexB8/YV8z9HwE3qlJM35FxfKZ1nfP/4x8g==", "dev": true, "requires": { "@typescript-eslint/scope-manager": "5.7.0", "@typescript-eslint/types": "5.7.0", "@typescript-eslint/typescript-estree": "5.7.0", "debug": "^4.3.2" } }, "@typescript-eslint/scope-manager": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.7.0.tgz", "integrity": "sha512-7mxR520DGq5F7sSSgM0HSSMJ+TFUymOeFRMfUfGFAVBv8BR+Jv1vHgAouYUvWRZeszVBJlLcc9fDdktxb5kmxA==", "dev": true, "requires": { "@typescript-eslint/types": "5.7.0", "@typescript-eslint/visitor-keys": "5.7.0" } }, "@typescript-eslint/types": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.7.0.tgz", "integrity": "sha512-5AeYIF5p2kAneIpnLFve8g50VyAjq7udM7ApZZ9JYjdPjkz0LvODfuSHIDUVnIuUoxafoWzpFyU7Sqbxgi79mA==", "dev": true }, "@typescript-eslint/typescript-estree": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.7.0.tgz", "integrity": "sha512-aO1Ql+izMrTnPj5aFFlEJkpD4jRqC4Gwhygu2oHK2wfVQpmOPbyDSveJ+r/NQo+PWV43M6uEAeLVbTi09dFLhg==", "dev": true, "requires": { "@typescript-eslint/types": "5.7.0", "@typescript-eslint/visitor-keys": "5.7.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", "semver": "^7.3.5", "tsutils": "^3.21.0" } }, "@typescript-eslint/visitor-keys": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.7.0.tgz", "integrity": "sha512-hdohahZ4lTFcglZSJ3DGdzxQHBSxsLVqHzkiOmKi7xVAWC4y2c1bIMKmPJSrA4aOEoRUPOKQ87Y/taC7yVHpFg==", "dev": true, "requires": { "@typescript-eslint/types": "5.7.0", "eslint-visitor-keys": "^3.0.0" } }, "abab": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", "dev": true }, "acorn": { "version": "8.6.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", "dev": true }, "acorn-globals": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", "dev": true, "requires": { "acorn": "^7.1.1", "acorn-walk": "^7.1.1" }, "dependencies": { "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true } } }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "requires": {} }, "acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "requires": { "debug": "4" } }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "requires": { "type-fest": "^0.21.3" }, "dependencies": { "type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true } } }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" } }, "anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, "babel-jest": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.5.tgz", "integrity": "sha512-3uuUTjXbgtODmSv/DXO9nZfD52IyC2OYTFaXGRzL0kpykzroaquCrD5+lZNafTvZlnNqZHt5pb0M08qVBZnsnA==", "dev": true, "requires": { "@jest/transform": "^27.4.5", "@jest/types": "^27.4.2", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.0.0", "babel-preset-jest": "^27.4.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "slash": "^3.0.0" } }, "babel-plugin-istanbul": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-instrument": "^4.0.0", "test-exclude": "^6.0.0" } }, "babel-plugin-jest-hoist": { "version": "27.4.0", "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz", "integrity": "sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw==", "dev": true, "requires": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", "@types/babel__core": "^7.0.0", "@types/babel__traverse": "^7.0.6" } }, "babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", "dev": true, "requires": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", "@babel/plugin-syntax-class-properties": "^7.8.3", "@babel/plugin-syntax-import-meta": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-numeric-separator": "^7.8.3", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-top-level-await": "^7.8.3" } }, "babel-preset-jest": { "version": "27.4.0", "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz", "integrity": "sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg==", "dev": true, "requires": { "babel-plugin-jest-hoist": "^27.4.0", "babel-preset-current-node-syntax": "^1.0.0" } }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { "fill-range": "^7.0.1" } }, "browser-process-hrtime": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, "browserslist": { "version": "4.17.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.4.tgz", "integrity": "sha512-Zg7RpbZpIJRW3am9Lyckue7PLytvVxxhJj1CaJVlCWENsGEAOlnlt8X0ZxGRPp7Bt9o8tIRM5SEXy4BCPMJjLQ==", "dev": true, "requires": { "caniuse-lite": "^1.0.30001265", "electron-to-chromium": "^1.3.867", "escalade": "^3.1.1", "node-releases": "^2.0.0", "picocolors": "^1.0.0" } }, "bs-logger": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, "requires": { "fast-json-stable-stringify": "2.x" } }, "bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, "requires": { "node-int64": "^0.4.0" } }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "caniuse-lite": { "version": "1.0.30001267", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001267.tgz", "integrity": "sha512-r1mjTzAuJ9W8cPBGbbus8E0SKcUP7gn03R14Wk8FlAlqhH9hroy9nLqmpuXlfKEw/oILW+FGz47ipXV2O7x8lg==", "dev": true }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "char-regex": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, "cheerio-soupselect": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/cheerio-soupselect/-/cheerio-soupselect-0.1.1.tgz", "integrity": "sha1-m6pqtp07jNIjFnaQNlozbLn/I1k=", "dev": true, "requires": { "htmlparser2": "2.x" }, "dependencies": { "domelementtype": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", "dev": true }, "domhandler": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.0.3.tgz", "integrity": "sha1-iJ+N9iZAOvB4jinWbV1cb36/D9Y=", "dev": true, "requires": { "domelementtype": "1" } }, "domutils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.0.1.tgz", "integrity": "sha1-WLWNd0d0kRVWwWuLAtmcYJ2YeGk=", "dev": true, "requires": { "domelementtype": "1" } }, "htmlparser2": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-2.6.0.tgz", "integrity": "sha1-soVk6p0bpWoQSs5qew/dovMVg28=", "dev": true, "requires": { "domelementtype": "1", "domhandler": "2.0", "domutils": "1.0" } } } }, "ci-info": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", "dev": true }, "cjs-module-lexer": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, "collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", "dev": true }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { "delayed-stream": "~1.0.0" } }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" } }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "css-what": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==" }, "cssom": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", "dev": true }, "cssstyle": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, "requires": { "cssom": "~0.3.6" }, "dependencies": { "cssom": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true } } }, "data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", "dev": true, "requires": { "abab": "^2.0.3", "whatwg-mimetype": "^2.3.0", "whatwg-url": "^8.0.0" } }, "debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" } }, "decimal.js": { "version": "10.3.1", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", "dev": true }, "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", "dev": true }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "deepmerge": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, "diff-sequences": { "version": "27.4.0", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz", "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==", "dev": true }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "requires": { "path-type": "^4.0.0" } }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { "esutils": "^2.0.2" } }, "dom-serializer": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "requires": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "domelementtype": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" }, "domexception": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", "dev": true, "requires": { "webidl-conversions": "^5.0.0" }, "dependencies": { "webidl-conversions": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", "dev": true } } }, "domhandler": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "requires": { "domelementtype": "^2.2.0" } }, "domutils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "requires": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, "electron-to-chromium": { "version": "1.3.870", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.870.tgz", "integrity": "sha512-PiJMshfq6PL+i1V+nKLwhHbCKeD8eAz8rvO9Cwk/7cChOHJBtufmjajLyYLsSRHguRFiOCVx3XzJLeZsIAYfSA==", "dev": true }, "emittery": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", "dev": true }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "requires": { "ansi-colors": "^4.1.1" } }, "entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" }, "esbuild": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.2.tgz", "integrity": "sha512-l076A6o/PIgcyM24s0dWmDI/b8RQf41uWoJu9I0M71CtW/YSw5T5NUeXxs5lo2tFQD+O4CW4nBHJXx3OY5NpXg==", "dev": true, "optional": true, "peer": true, "requires": { "esbuild-android-arm64": "0.14.2", "esbuild-darwin-64": "0.14.2", "esbuild-darwin-arm64": "0.14.2", "esbuild-freebsd-64": "0.14.2", "esbuild-freebsd-arm64": "0.14.2", "esbuild-linux-32": "0.14.2", "esbuild-linux-64": "0.14.2", "esbuild-linux-arm": "0.14.2", "esbuild-linux-arm64": "0.14.2", "esbuild-linux-mips64le": "0.14.2", "esbuild-linux-ppc64le": "0.14.2", "esbuild-netbsd-64": "0.14.2", "esbuild-openbsd-64": "0.14.2", "esbuild-sunos-64": "0.14.2", "esbuild-windows-32": "0.14.2", "esbuild-windows-64": "0.14.2", "esbuild-windows-arm64": "0.14.2" } }, "esbuild-android-arm64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.2.tgz", "integrity": "sha512-hEixaKMN3XXCkoe+0WcexO4CcBVU5DCSUT+7P8JZiWZCbAjSkc9b6Yz2X5DSfQmRCtI/cQRU6TfMYrMQ5NBfdw==", "dev": true, "optional": true, "peer": true }, "esbuild-darwin-64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.2.tgz", "integrity": "sha512-Uq8t0cbJQkxkQdbUfOl2wZqZ/AtLZjvJulR1HHnc96UgyzG9YlCLSDMiqjM+NANEy7/zzvwKJsy3iNC9wwqLJA==", "dev": true, "optional": true, "peer": true }, "esbuild-darwin-arm64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.2.tgz", "integrity": "sha512-619MSa17sr7YCIrUj88KzQu2ESA4jKYtIYfLU/smX6qNgxQt3Y/gzM4s6sgJ4fPQzirvmXgcHv1ZNQAs/Xh48A==", "dev": true, "optional": true, "peer": true }, "esbuild-freebsd-64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.2.tgz", "integrity": "sha512-aP6FE/ZsChZpUV6F3HE3x1Pz0paoYXycJ7oLt06g0G9dhJKknPawXCqQg/WMyD+ldCEZfo7F1kavenPdIT/SGQ==", "dev": true, "optional": true, "peer": true }, "esbuild-freebsd-arm64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.2.tgz", "integrity": "sha512-LSm98WTb1QIhyS83+Po0KTpZNdd2XpVpI9ua5rLWqKWbKeNRFwOsjeiuwBaRNc+O32s9oC2ZMefETxHBV6VNkQ==", "dev": true, "optional": true, "peer": true }, "esbuild-linux-32": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.2.tgz", "integrity": "sha512-8VxnNEyeUbiGflTKcuVc5JEPTqXfsx2O6ABwUbfS1Hp26lYPRPC7pKQK5Dxa0MBejGc50jy7YZae3EGQUQ8EkQ==", "dev": true, "optional": true, "peer": true }, "esbuild-linux-64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.2.tgz", "integrity": "sha512-4bzMS2dNxOJoFIiHId4w+tqQzdnsch71JJV1qZnbnErSFWcR9lRgpSqWnTTFtv6XM+MvltRzSXC5wQ7AEBY6Hg==", "dev": true, "optional": true, "peer": true }, "esbuild-linux-arm": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.2.tgz", "integrity": "sha512-PaylahvMHhH8YMfJPMKEqi64qA0Su+d4FNfHKvlKes/2dUe4QxgbwXT9oLVgy8iJdcFMrO7By4R8fS8S0p8aVQ==", "dev": true, "optional": true, "peer": true }, "esbuild-linux-arm64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.2.tgz", "integrity": "sha512-RlIVp0RwJrdtasDF1vTFueLYZ8WuFzxoQ1OoRFZOTyJHCGCNgh7xJIC34gd7B7+RT0CzLBB4LcM5n0LS+hIoww==", "dev": true, "optional": true, "peer": true }, "esbuild-linux-mips64le": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.2.tgz", "integrity": "sha512-Fdwrq2roFnO5oetIiUQQueZ3+5soCxBSJswg3MvYaXDomj47BN6oAWMZgLrFh1oVrtWrxSDLCJBenYdbm2s+qQ==", "dev": true, "optional": true, "peer": true }, "esbuild-linux-ppc64le": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.2.tgz", "integrity": "sha512-vxptskw8JfCDD9QqpRO0XnsM1osuWeRjPaXX1TwdveLogYsbdFtcuiuK/4FxGiNMUr1ojtnCS2rMPbY8puc5NA==", "dev": true, "optional": true, "peer": true }, "esbuild-netbsd-64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.2.tgz", "integrity": "sha512-I8+LzYK5iSNpspS9eCV9sW67Rj8FgMHimGri4mKiGAmN0pNfx+hFX146rYtzGtewuxKtTsPywWteHx+hPRLDsw==", "dev": true, "optional": true, "peer": true }, "esbuild-openbsd-64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.2.tgz", "integrity": "sha512-120HgMe9elidWUvM2E6mMf0csrGwx8sYDqUIJugyMy1oHm+/nT08bTAVXuwYG/rkMIqsEO9AlMxuYnwR6En/3Q==", "dev": true, "optional": true, "peer": true }, "esbuild-sunos-64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.2.tgz", "integrity": "sha512-Q3xcf9Uyfra9UuCFxoLixVvdigo0daZaKJ97TL2KNA4bxRUPK18wwGUk3AxvgDQZpRmg82w9PnkaNYo7a+24ow==", "dev": true, "optional": true, "peer": true }, "esbuild-windows-32": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.2.tgz", "integrity": "sha512-TW7O49tPsrq+N1sW8mb3m24j/iDGa4xzAZH4wHWwoIzgtZAYPKC0hpIhufRRG/LA30bdMChO9pjJZ5mtcybtBQ==", "dev": true, "optional": true, "peer": true }, "esbuild-windows-64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.2.tgz", "integrity": "sha512-Rym6ViMNmi1E2QuQMWy0AFAfdY0wGwZD73BnzlsQBX5hZBuy/L+Speh7ucUZ16gwsrMM9v86icZUDrSN/lNBKg==", "dev": true, "optional": true, "peer": true }, "esbuild-windows-arm64": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.2.tgz", "integrity": "sha512-ZrLbhr0vX5Em/P1faMnHucjVVWPS+m3tktAtz93WkMZLmbRJevhiW1y4CbulBd2z0MEdXZ6emDa1zFHq5O5bSA==", "dev": true, "optional": true, "peer": true }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "escodegen": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", "dev": true, "requires": { "esprima": "^4.0.1", "estraverse": "^5.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1", "source-map": "~0.6.1" }, "dependencies": { "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" } }, "optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", "levn": "~0.3.0", "prelude-ls": "~1.1.2", "type-check": "~0.3.2", "word-wrap": "~1.2.3" } }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { "prelude-ls": "~1.1.2" } } } }, "eslint": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.4.1.tgz", "integrity": "sha512-TxU/p7LB1KxQ6+7aztTnO7K0i+h0tDi81YRY9VzB6Id71kNz+fFYnf5HD5UOQmxkzcoa0TlVZf9dpMtUv0GpWg==", "dev": true, "requires": { "@eslint/eslintrc": "^1.0.5", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.1.0", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.1.0", "espree": "^9.2.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", "progress": "^2.0.0", "regexpp": "^3.2.0", "semver": "^7.2.1", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { "eslint-scope": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true } } }, "eslint-config-prettier": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", "dev": true, "requires": {} }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "eslint-utils": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { "eslint-visitor-keys": "^2.0.0" }, "dependencies": { "eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true } } }, "eslint-visitor-keys": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", "dev": true }, "espree": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/espree/-/espree-9.2.0.tgz", "integrity": "sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg==", "dev": true, "requires": { "acorn": "^8.6.0", "acorn-jsx": "^5.3.1", "eslint-visitor-keys": "^3.1.0" } }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "esquery": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { "estraverse": "^5.1.0" }, "dependencies": { "estraverse": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true } } }, "esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { "estraverse": "^5.2.0" }, "dependencies": { "estraverse": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true } } }, "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, "expect": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/expect/-/expect-27.4.2.tgz", "integrity": "sha512-BjAXIDC6ZOW+WBFNg96J22D27Nq5ohn+oGcuP2rtOtcjuxNoV9McpQ60PcQWhdFOSBIQdR72e+4HdnbZTFSTyg==", "dev": true, "requires": { "@jest/types": "^27.4.2", "ansi-styles": "^5.0.0", "jest-get-type": "^27.4.0", "jest-matcher-utils": "^27.4.2", "jest-message-util": "^27.4.2", "jest-regex-util": "^27.4.0" }, "dependencies": { "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true } } }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "fast-glob": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" }, "dependencies": { "glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" } } } }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, "fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, "requires": { "reusify": "^1.0.4" } }, "fb-watchman": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", "dev": true, "requires": { "bser": "2.1.1" } }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { "flat-cache": "^3.0.4" } }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { "to-regex-range": "^5.0.1" } }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { "flatted": "^3.1.0", "rimraf": "^3.0.2" } }, "flatted": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", "dev": true }, "form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "optional": true }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, "get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { "is-glob": "^4.0.3" } }, "globals": { "version": "13.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", "dev": true, "requires": { "type-fest": "^0.20.2" } }, "globby": { "version": "11.0.4", "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "dev": true, "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.1.1", "ignore": "^5.1.4", "merge2": "^1.3.0", "slash": "^3.0.0" } }, "graceful-fs": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { "function-bind": "^1.1.1" } }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", "dev": true, "requires": { "whatwg-encoding": "^1.0.5" } }, "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, "htmlparser2": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", "dev": true, "requires": { "domelementtype": "^2.0.1", "domhandler": "^4.2.2", "domutils": "^2.8.0", "entities": "^3.0.1" }, "dependencies": { "entities": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", "dev": true } } }, "http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "requires": { "@tootallnate/once": "1", "agent-base": "6", "debug": "4" } }, "https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "dev": true, "requires": { "agent-base": "6", "debug": "4" } }, "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, "ignore": { "version": "5.1.8", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "import-local": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", "dev": true, "requires": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" } }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" } }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "is-core-module": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", "dev": true, "requires": { "has": "^1.0.3" } }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "is-generator-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" } }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, "is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, "istanbul-lib-coverage": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.2.tgz", "integrity": "sha512-o5+eTUYzCJ11/+JhW5/FUCdfsdoYVdQ/8I/OveE2XsjehYn5DdeSnNQAbjYaO8gQ6hvGTN6GM6ddQqpTVG5j8g==", "dev": true }, "istanbul-lib-instrument": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, "requires": { "@babel/core": "^7.7.5", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.0.0", "semver": "^6.3.0" }, "dependencies": { "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, "requires": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^3.0.0", "supports-color": "^7.1.0" } }, "istanbul-lib-source-maps": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "requires": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" } }, "istanbul-reports": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.1.tgz", "integrity": "sha512-q1kvhAXWSsXfMjCdNHNPKZZv94OlspKnoGv+R9RGbnqOOQ0VbNfLFgQDVgi7hHenKsndGq3/o0OBdzDXthWcNw==", "dev": true, "requires": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" } }, "jest": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.5.tgz", "integrity": "sha512-uT5MiVN3Jppt314kidCk47MYIRilJjA/l2mxwiuzzxGUeJIvA8/pDaJOAX5KWvjAo7SCydcW0/4WEtgbLMiJkg==", "dev": true, "requires": { "@jest/core": "^27.4.5", "import-local": "^3.0.2", "jest-cli": "^27.4.5" } }, "jest-changed-files": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.4.2.tgz", "integrity": "sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A==", "dev": true, "requires": { "@jest/types": "^27.4.2", "execa": "^5.0.0", "throat": "^6.0.1" } }, "jest-circus": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.5.tgz", "integrity": "sha512-eTNWa9wsvBwPykhMMShheafbwyakcdHZaEYh5iRrQ0PFJxkDP/e3U/FvzGuKWu2WpwUA3C3hPlfpuzvOdTVqnw==", "dev": true, "requires": { "@jest/environment": "^27.4.4", "@jest/test-result": "^27.4.2", "@jest/types": "^27.4.2", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", "expect": "^27.4.2", "is-generator-fn": "^2.0.0", "jest-each": "^27.4.2", "jest-matcher-utils": "^27.4.2", "jest-message-util": "^27.4.2", "jest-runtime": "^27.4.5", "jest-snapshot": "^27.4.5", "jest-util": "^27.4.2", "pretty-format": "^27.4.2", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" } }, "jest-cli": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.5.tgz", "integrity": "sha512-hrky3DSgE0u7sQxaCL7bdebEPHx5QzYmrGuUjaPLmPE8jx5adtvGuOlRspvMoVLTTDOHRnZDoRLYJuA+VCI7Hg==", "dev": true, "requires": { "@jest/core": "^27.4.5", "@jest/test-result": "^27.4.2", "@jest/types": "^27.4.2", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "import-local": "^3.0.2", "jest-config": "^27.4.5", "jest-util": "^27.4.2", "jest-validate": "^27.4.2", "prompts": "^2.0.1", "yargs": "^16.2.0" } }, "jest-config": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.5.tgz", "integrity": "sha512-t+STVJtPt+fpqQ8GBw850NtSQbnDOw/UzdPfzDaHQ48/AylQlW7LHj3dH+ndxhC1UxJ0Q3qkq7IH+nM1skwTwA==", "dev": true, "requires": { "@babel/core": "^7.1.0", "@jest/test-sequencer": "^27.4.5", "@jest/types": "^27.4.2", "babel-jest": "^27.4.5", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.4", "jest-circus": "^27.4.5", "jest-environment-jsdom": "^27.4.4", "jest-environment-node": "^27.4.4", "jest-get-type": "^27.4.0", "jest-jasmine2": "^27.4.5", "jest-regex-util": "^27.4.0", "jest-resolve": "^27.4.5", "jest-runner": "^27.4.5", "jest-util": "^27.4.2", "jest-validate": "^27.4.2", "micromatch": "^4.0.4", "pretty-format": "^27.4.2", "slash": "^3.0.0" } }, "jest-diff": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.2.tgz", "integrity": "sha512-ujc9ToyUZDh9KcqvQDkk/gkbf6zSaeEg9AiBxtttXW59H/AcqEYp1ciXAtJp+jXWva5nAf/ePtSsgWwE5mqp4Q==", "dev": true, "requires": { "chalk": "^4.0.0", "diff-sequences": "^27.4.0", "jest-get-type": "^27.4.0", "pretty-format": "^27.4.2" } }, "jest-docblock": { "version": "27.4.0", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.4.0.tgz", "integrity": "sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg==", "dev": true, "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.4.2.tgz", "integrity": "sha512-53V2MNyW28CTruB3lXaHNk6PkiIFuzdOC9gR3C6j8YE/ACfrPnz+slB0s17AgU1TtxNzLuHyvNlLJ+8QYw9nBg==", "dev": true, "requires": { "@jest/types": "^27.4.2", "chalk": "^4.0.0", "jest-get-type": "^27.4.0", "jest-util": "^27.4.2", "pretty-format": "^27.4.2" } }, "jest-environment-jsdom": { "version": "27.4.4", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.4.tgz", "integrity": "sha512-cYR3ndNfHBqQgFvS1RL7dNqSvD//K56j/q1s2ygNHcfTCAp12zfIromO1w3COmXrxS8hWAh7+CmZmGCIoqGcGA==", "dev": true, "requires": { "@jest/environment": "^27.4.4", "@jest/fake-timers": "^27.4.2", "@jest/types": "^27.4.2", "@types/node": "*", "jest-mock": "^27.4.2", "jest-util": "^27.4.2", "jsdom": "^16.6.0" } }, "jest-environment-node": { "version": "27.4.4", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.4.tgz", "integrity": "sha512-D+v3lbJ2GjQTQR23TK0kY3vFVmSeea05giInI41HHOaJnAwOnmUHTZgUaZL+VxUB43pIzoa7PMwWtCVlIUoVoA==", "dev": true, "requires": { "@jest/environment": "^27.4.4", "@jest/fake-timers": "^27.4.2", "@jest/types": "^27.4.2", "@types/node": "*", "jest-mock": "^27.4.2", "jest-util": "^27.4.2" } }, "jest-get-type": { "version": "27.4.0", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", "dev": true }, "jest-haste-map": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.5.tgz", "integrity": "sha512-oJm1b5qhhPs78K24EDGifWS0dELYxnoBiDhatT/FThgB9yxqUm5F6li3Pv+Q+apMBmmPNzOBnZ7ZxWMB1Leq1Q==", "dev": true, "requires": { "@jest/types": "^27.4.2", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.3.2", "graceful-fs": "^4.2.4", "jest-regex-util": "^27.4.0", "jest-serializer": "^27.4.0", "jest-util": "^27.4.2", "jest-worker": "^27.4.5", "micromatch": "^4.0.4", "walker": "^1.0.7" } }, "jest-jasmine2": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.5.tgz", "integrity": "sha512-oUnvwhJDj2LhOiUB1kdnJjkx8C5PwgUZQb9urF77mELH9DGR4e2GqpWQKBOYXWs5+uTN9BGDqRz3Aeg5Wts7aw==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", "@jest/environment": "^27.4.4", "@jest/source-map": "^27.4.0", "@jest/test-result": "^27.4.2", "@jest/types": "^27.4.2", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "expect": "^27.4.2", "is-generator-fn": "^2.0.0", "jest-each": "^27.4.2", "jest-matcher-utils": "^27.4.2", "jest-message-util": "^27.4.2", "jest-runtime": "^27.4.5", "jest-snapshot": "^27.4.5", "jest-util": "^27.4.2", "pretty-format": "^27.4.2", "throat": "^6.0.1" } }, "jest-leak-detector": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.4.2.tgz", "integrity": "sha512-ml0KvFYZllzPBJWDei3mDzUhyp/M4ubKebX++fPaudpe8OsxUE+m+P6ciVLboQsrzOCWDjE20/eXew9QMx/VGw==", "dev": true, "requires": { "jest-get-type": "^27.4.0", "pretty-format": "^27.4.2" } }, "jest-matcher-utils": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.4.2.tgz", "integrity": "sha512-jyP28er3RRtMv+fmYC/PKG8wvAmfGcSNproVTW2Y0P/OY7/hWUOmsPfxN1jOhM+0u2xU984u2yEagGivz9OBGQ==", "dev": true, "requires": { "chalk": "^4.0.0", "jest-diff": "^27.4.2", "jest-get-type": "^27.4.0", "pretty-format": "^27.4.2" } }, "jest-message-util": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.4.2.tgz", "integrity": "sha512-OMRqRNd9E0DkBLZpFtZkAGYOXl6ZpoMtQJWTAREJKDOFa0M6ptB7L67tp+cszMBkvSgKOhNtQp2Vbcz3ZZKo/w==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", "@jest/types": "^27.4.2", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.4", "pretty-format": "^27.4.2", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "jest-mock": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.4.2.tgz", "integrity": "sha512-PDDPuyhoukk20JrQKeofK12hqtSka7mWH0QQuxSNgrdiPsrnYYLS6wbzu/HDlxZRzji5ylLRULeuI/vmZZDrYA==", "dev": true, "requires": { "@jest/types": "^27.4.2", "@types/node": "*" } }, "jest-pnp-resolver": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", "dev": true, "requires": {} }, "jest-regex-util": { "version": "27.4.0", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", "dev": true }, "jest-resolve": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.5.tgz", "integrity": "sha512-xU3z1BuOz/hUhVUL+918KqUgK+skqOuUsAi7A+iwoUldK6/+PW+utK8l8cxIWT9AW7IAhGNXjSAh1UYmjULZZw==", "dev": true, "requires": { "@jest/types": "^27.4.2", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "jest-haste-map": "^27.4.5", "jest-pnp-resolver": "^1.2.2", "jest-util": "^27.4.2", "jest-validate": "^27.4.2", "resolve": "^1.20.0", "resolve.exports": "^1.1.0", "slash": "^3.0.0" } }, "jest-resolve-dependencies": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.5.tgz", "integrity": "sha512-elEVvkvRK51y037NshtEkEnukMBWvlPzZHiL847OrIljJ8yIsujD2GXRPqDXC4rEVKbcdsy7W0FxoZb4WmEs7w==", "dev": true, "requires": { "@jest/types": "^27.4.2", "jest-regex-util": "^27.4.0", "jest-snapshot": "^27.4.5" } }, "jest-runner": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.5.tgz", "integrity": "sha512-/irauncTfmY1WkTaRQGRWcyQLzK1g98GYG/8QvIPviHgO1Fqz1JYeEIsSfF+9mc/UTA6S+IIHFgKyvUrtiBIZg==", "dev": true, "requires": { "@jest/console": "^27.4.2", "@jest/environment": "^27.4.4", "@jest/test-result": "^27.4.2", "@jest/transform": "^27.4.5", "@jest/types": "^27.4.2", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "jest-docblock": "^27.4.0", "jest-environment-jsdom": "^27.4.4", "jest-environment-node": "^27.4.4", "jest-haste-map": "^27.4.5", "jest-leak-detector": "^27.4.2", "jest-message-util": "^27.4.2", "jest-resolve": "^27.4.5", "jest-runtime": "^27.4.5", "jest-util": "^27.4.2", "jest-worker": "^27.4.5", "source-map-support": "^0.5.6", "throat": "^6.0.1" } }, "jest-runtime": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.5.tgz", "integrity": "sha512-CIYqwuJQXHQtPd/idgrx4zgJ6iCb6uBjQq1RSAGQrw2S8XifDmoM1Ot8NRd80ooAm+ZNdHVwsktIMGlA1F1FAQ==", "dev": true, "requires": { "@jest/console": "^27.4.2", "@jest/environment": "^27.4.4", "@jest/globals": "^27.4.4", "@jest/source-map": "^27.4.0", "@jest/test-result": "^27.4.2", "@jest/transform": "^27.4.5", "@jest/types": "^27.4.2", "@types/yargs": "^16.0.0", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "execa": "^5.0.0", "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", "jest-haste-map": "^27.4.5", "jest-message-util": "^27.4.2", "jest-mock": "^27.4.2", "jest-regex-util": "^27.4.0", "jest-resolve": "^27.4.5", "jest-snapshot": "^27.4.5", "jest-util": "^27.4.2", "jest-validate": "^27.4.2", "slash": "^3.0.0", "strip-bom": "^4.0.0", "yargs": "^16.2.0" } }, "jest-serializer": { "version": "27.4.0", "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz", "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==", "dev": true, "requires": { "@types/node": "*", "graceful-fs": "^4.2.4" } }, "jest-snapshot": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.5.tgz", "integrity": "sha512-eCi/iM1YJFrJWiT9de4+RpWWWBqsHiYxFG9V9o/n0WXs6GpW4lUt4FAHAgFPTLPqCUVzrMQmSmTZSgQzwqR7IQ==", "dev": true, "requires": { "@babel/core": "^7.7.2", "@babel/generator": "^7.7.2", "@babel/parser": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", "@jest/transform": "^27.4.5", "@jest/types": "^27.4.2", "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", "expect": "^27.4.2", "graceful-fs": "^4.2.4", "jest-diff": "^27.4.2", "jest-get-type": "^27.4.0", "jest-haste-map": "^27.4.5", "jest-matcher-utils": "^27.4.2", "jest-message-util": "^27.4.2", "jest-resolve": "^27.4.5", "jest-util": "^27.4.2", "natural-compare": "^1.4.0", "pretty-format": "^27.4.2", "semver": "^7.3.2" } }, "jest-util": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", "dev": true, "requires": { "@jest/types": "^27.4.2", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.4", "picomatch": "^2.2.3" } }, "jest-validate": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.2.tgz", "integrity": "sha512-hWYsSUej+Fs8ZhOm5vhWzwSLmVaPAxRy+Mr+z5MzeaHm9AxUpXdoVMEW4R86y5gOobVfBsMFLk4Rb+QkiEpx1A==", "dev": true, "requires": { "@jest/types": "^27.4.2", "camelcase": "^6.2.0", "chalk": "^4.0.0", "jest-get-type": "^27.4.0", "leven": "^3.1.0", "pretty-format": "^27.4.2" }, "dependencies": { "camelcase": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", "dev": true } } }, "jest-watcher": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.4.2.tgz", "integrity": "sha512-NJvMVyyBeXfDezhWzUOCOYZrUmkSCiatpjpm+nFUid74OZEHk6aMLrZAukIiFDwdbqp6mTM6Ui1w4oc+8EobQg==", "dev": true, "requires": { "@jest/test-result": "^27.4.2", "@jest/types": "^27.4.2", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "jest-util": "^27.4.2", "string-length": "^4.0.1" } }, "jest-worker": { "version": "27.4.5", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz", "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==", "dev": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, "dependencies": { "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" } } } }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { "argparse": "^2.0.1" } }, "jsdom": { "version": "16.7.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "dev": true, "requires": { "abab": "^2.0.5", "acorn": "^8.2.4", "acorn-globals": "^6.0.0", "cssom": "^0.4.4", "cssstyle": "^2.3.0", "data-urls": "^2.0.0", "decimal.js": "^10.2.1", "domexception": "^2.0.1", "escodegen": "^2.0.0", "form-data": "^3.0.0", "html-encoding-sniffer": "^2.0.1", "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", "is-potential-custom-element-name": "^1.0.1", "nwsapi": "^2.2.0", "parse5": "6.0.1", "saxes": "^5.0.1", "symbol-tree": "^3.2.4", "tough-cookie": "^4.0.0", "w3c-hr-time": "^1.0.2", "w3c-xmlserializer": "^2.0.0", "webidl-conversions": "^6.1.0", "whatwg-encoding": "^1.0.5", "whatwg-mimetype": "^2.3.0", "whatwg-url": "^8.5.0", "ws": "^7.4.6", "xml-name-validator": "^3.0.0" } }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, "json5": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "requires": { "minimist": "^1.2.5" } }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "requires": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { "p-locate": "^4.1.0" } }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { "yallist": "^4.0.0" } }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { "semver": "^6.0.0" }, "dependencies": { "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, "makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, "requires": { "tmpl": "1.0.5" } }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, "micromatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { "braces": "^3.0.1", "picomatch": "^2.2.3" } }, "mime-db": { "version": "1.51.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "dev": true }, "mime-types": { "version": "2.1.34", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dev": true, "requires": { "mime-db": "1.51.0" } }, "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", "dev": true }, "node-modules-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", "dev": true }, "node-releases": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.0.tgz", "integrity": "sha512-aA87l0flFYMzCHpTM3DERFSYxc6lv/BltdbRTOMZuxZ0cwZCD3mejE5n9vLhSJCN++/eOqr77G1IO5uXxlQYWA==", "dev": true }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { "path-key": "^3.0.0" } }, "nth-check": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", "requires": { "boolbase": "^1.0.0" } }, "nwsapi": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { "wrappy": "1" } }, "onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { "mimic-fn": "^2.1.0" } }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "requires": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.3" } }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" } }, "p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { "p-limit": "^2.2.0" } }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { "callsites": "^3.0.0" } }, "parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true }, "pirates": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", "dev": true, "requires": { "node-modules-regexp": "^1.0.0" } }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { "find-up": "^4.0.0" } }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, "prettier": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", "dev": true }, "pretty-format": { "version": "27.4.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.2.tgz", "integrity": "sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==", "dev": true, "requires": { "@jest/types": "^27.4.2", "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" }, "dependencies": { "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true } } }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, "prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, "requires": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", "dev": true }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, "resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } }, "resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "requires": { "resolve-from": "^5.0.0" }, "dependencies": { "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true } } }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "resolve.exports": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", "dev": true }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" } }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "requires": { "queue-microtask": "^1.2.2" } }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, "saxes": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "dev": true, "requires": { "xmlchars": "^2.2.0" } }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" } }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { "shebang-regex": "^3.0.0" } }, "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, "signal-exit": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", "dev": true }, "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, "stack-utils": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", "dev": true, "requires": { "escape-string-regexp": "^2.0.0" }, "dependencies": { "escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true } } }, "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, "requires": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" } }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { "ansi-regex": "^5.0.1" } }, "strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" } }, "supports-hyperlinks": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", "dev": true, "requires": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" } }, "symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, "terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", "dev": true, "requires": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.0" } }, "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "requires": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" } }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, "throat": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", "dev": true }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { "is-number": "^7.0.0" } }, "tough-cookie": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", "dev": true, "requires": { "psl": "^1.1.33", "punycode": "^2.1.1", "universalify": "^0.1.2" } }, "tr46": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, "requires": { "punycode": "^2.1.1" } }, "ts-jest": { "version": "27.1.1", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.1.tgz", "integrity": "sha512-Ds0VkB+cB+8g2JUmP/GKWndeZcCKrbe6jzolGrVWdqVUFByY/2KDHqxJ7yBSon7hDB1TA4PXxjfZ+JjzJisvgA==", "dev": true, "requires": { "bs-logger": "0.x", "fast-json-stable-stringify": "2.x", "jest-util": "^27.0.0", "json5": "2.x", "lodash.memoize": "4.x", "make-error": "1.x", "semver": "7.x", "yargs-parser": "20.x" } }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "tsutils": { "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "requires": { "tslib": "^1.8.1" } }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { "prelude-ls": "^1.2.1" } }, "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "requires": { "is-typedarray": "^1.0.0" } }, "typescript": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", "dev": true }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" } }, "v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "v8-to-istanbul": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^1.6.0", "source-map": "^0.7.3" }, "dependencies": { "source-map": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true } } }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", "dev": true, "requires": { "browser-process-hrtime": "^1.0.0" } }, "w3c-xmlserializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", "dev": true, "requires": { "xml-name-validator": "^3.0.0" } }, "walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, "requires": { "makeerror": "1.0.12" } }, "webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true }, "whatwg-encoding": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", "dev": true, "requires": { "iconv-lite": "0.4.24" } }, "whatwg-mimetype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", "dev": true }, "whatwg-url": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, "requires": { "lodash": "^4.7.0", "tr46": "^2.1.0", "webidl-conversions": "^6.1.0" } }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" } }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "requires": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, "ws": { "version": "7.5.6", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", "dev": true, "requires": {} }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true }, "xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } }, "yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true } } } css-select-4.2.0/package.json000066400000000000000000000037051415613773000160640ustar00rootroot00000000000000{ "name": "css-select", "version": "4.2.0", "description": "a CSS selector compiler/engine", "author": "Felix Boehm ", "funding": { "url": "https://github.com/sponsors/fb55" }, "keywords": [ "css", "selector", "sizzle" ], "repository": { "type": "git", "url": "git://github.com/fb55/css-select.git" }, "main": "lib/index.js", "types": "lib/index.d.ts", "files": [ "lib" ], "dependencies": { "boolbase": "^1.0.0", "css-what": "^5.1.0", "domhandler": "^4.3.0", "domutils": "^2.8.0", "nth-check": "^2.0.1" }, "devDependencies": { "@types/boolbase": "^1.0.0", "@types/jest": "^27.0.3", "@types/node": "^16.11.12", "@typescript-eslint/eslint-plugin": "^5.7.0", "@typescript-eslint/parser": "^5.7.0", "cheerio-soupselect": "^0.1.1", "eslint": "^8.4.1", "eslint-config-prettier": "^8.1.0", "htmlparser2": "^7.2.0", "jest": "^27.4.5", "prettier": "^2.5.1", "ts-jest": "^27.1.1", "typescript": "^4.5.4" }, "scripts": { "test": "npm run test:jest && npm run lint", "test:jest": "jest", "lint": "npm run lint:es && npm run lint:prettier", "lint:es": "eslint src", "lint:prettier": "npm run prettier -- --check", "format": "npm run format:es && npm run format:prettier", "format:es": "npm run lint:es -- --fix", "format:prettier": "npm run prettier -- --write", "prettier": "prettier '**/*.{ts,md,json,yml}'", "build": "tsc", "prepare": "npm run build" }, "license": "BSD-2-Clause", "prettier": { "tabWidth": 4, "proseWrap": "always" }, "jest": { "preset": "ts-jest", "testEnvironment": "node", "testMatch": [ "/test/*.ts" ] } } css-select-4.2.0/src/000077500000000000000000000000001415613773000143605ustar00rootroot00000000000000css-select-4.2.0/src/attributes.ts000066400000000000000000000134271415613773000171250ustar00rootroot00000000000000import { falseFunc } from "boolbase"; import { CompiledQuery, InternalOptions } from "./types"; import type { AttributeSelector, AttributeAction } from "css-what"; /** * All reserved characters in a regex, used for escaping. * * Taken from XRegExp, (c) 2007-2020 Steven Levithan under the MIT license * https://github.com/slevithan/xregexp/blob/95eeebeb8fac8754d54eafe2b4743661ac1cf028/src/xregexp.js#L794 */ const reChars = /[-[\]{}()*+?.,\\^$|#\s]/g; function escapeRegex(value: string): string { return value.replace(reChars, "\\$&"); } /** * Attribute selectors */ export const attributeRules: Record< AttributeAction, ( next: CompiledQuery, data: AttributeSelector, options: InternalOptions ) => CompiledQuery > = { equals(next, data, { adapter }) { const { name } = data; let { value } = data; if (data.ignoreCase) { value = value.toLowerCase(); return (elem) => { const attr = adapter.getAttributeValue(elem, name); return ( attr != null && attr.length === value.length && attr.toLowerCase() === value && next(elem) ); }; } return (elem) => adapter.getAttributeValue(elem, name) === value && next(elem); }, hyphen(next, data, { adapter }) { const { name } = data; let { value } = data; const len = value.length; if (data.ignoreCase) { value = value.toLowerCase(); return function hyphenIC(elem) { const attr = adapter.getAttributeValue(elem, name); return ( attr != null && (attr.length === len || attr.charAt(len) === "-") && attr.substr(0, len).toLowerCase() === value && next(elem) ); }; } return function hyphen(elem) { const attr = adapter.getAttributeValue(elem, name); return ( attr != null && (attr.length === len || attr.charAt(len) === "-") && attr.substr(0, len) === value && next(elem) ); }; }, element(next, { name, value, ignoreCase }, { adapter }) { if (/\s/.test(value)) { return falseFunc; } const regex = new RegExp( `(?:^|\\s)${escapeRegex(value)}(?:$|\\s)`, ignoreCase ? "i" : "" ); return function element(elem) { const attr = adapter.getAttributeValue(elem, name); return ( attr != null && attr.length >= value.length && regex.test(attr) && next(elem) ); }; }, exists(next, { name }, { adapter }) { return (elem) => adapter.hasAttrib(elem, name) && next(elem); }, start(next, data, { adapter }) { const { name } = data; let { value } = data; const len = value.length; if (len === 0) { return falseFunc; } if (data.ignoreCase) { value = value.toLowerCase(); return (elem) => { const attr = adapter.getAttributeValue(elem, name); return ( attr != null && attr.length >= len && attr.substr(0, len).toLowerCase() === value && next(elem) ); }; } return (elem) => !!adapter.getAttributeValue(elem, name)?.startsWith(value) && next(elem); }, end(next, data, { adapter }) { const { name } = data; let { value } = data; const len = -value.length; if (len === 0) { return falseFunc; } if (data.ignoreCase) { value = value.toLowerCase(); return (elem) => adapter .getAttributeValue(elem, name) ?.substr(len) .toLowerCase() === value && next(elem); } return (elem) => !!adapter.getAttributeValue(elem, name)?.endsWith(value) && next(elem); }, any(next, data, { adapter }) { const { name, value } = data; if (value === "") { return falseFunc; } if (data.ignoreCase) { const regex = new RegExp(escapeRegex(value), "i"); return function anyIC(elem) { const attr = adapter.getAttributeValue(elem, name); return ( attr != null && attr.length >= value.length && regex.test(attr) && next(elem) ); }; } return (elem) => !!adapter.getAttributeValue(elem, name)?.includes(value) && next(elem); }, not(next, data, { adapter }) { const { name } = data; let { value } = data; if (value === "") { return (elem) => !!adapter.getAttributeValue(elem, name) && next(elem); } else if (data.ignoreCase) { value = value.toLowerCase(); return (elem) => { const attr = adapter.getAttributeValue(elem, name); return ( (attr == null || attr.length !== value.length || attr.toLowerCase() !== value) && next(elem) ); }; } return (elem) => adapter.getAttributeValue(elem, name) !== value && next(elem); }, }; css-select-4.2.0/src/compile.ts000066400000000000000000000117341415613773000163660ustar00rootroot00000000000000import { InternalSelector } from "./types"; import { parse, Selector } from "css-what"; import { trueFunc, falseFunc } from "boolbase"; import sortRules from "./sort"; import { isTraversal } from "./procedure"; import { compileGeneralSelector } from "./general"; import { ensureIsTag, PLACEHOLDER_ELEMENT, } from "./pseudo-selectors/subselects"; import type { CompiledQuery, InternalOptions } from "./types"; /** * Compiles a selector to an executable function. * * @param selector Selector to compile. * @param options Compilation options. * @param context Optional context for the selector. */ export function compile( selector: string | Selector[][], options: InternalOptions, context?: Node[] | Node ): CompiledQuery { const next = compileUnsafe(selector, options, context); return ensureIsTag(next, options.adapter); } export function compileUnsafe( selector: string | Selector[][], options: InternalOptions, context?: Node[] | Node ): CompiledQuery { const token = typeof selector === "string" ? parse(selector, options) : selector; return compileToken(token, options, context); } function includesScopePseudo(t: InternalSelector): boolean { return ( t.type === "pseudo" && (t.name === "scope" || (Array.isArray(t.data) && t.data.some((data) => data.some(includesScopePseudo)))) ); } const DESCENDANT_TOKEN: Selector = { type: "descendant" }; const FLEXIBLE_DESCENDANT_TOKEN: InternalSelector = { type: "_flexibleDescendant", }; const SCOPE_TOKEN: Selector = { type: "pseudo", name: "scope", data: null }; /* * CSS 4 Spec (Draft): 3.3.1. Absolutizing a Scope-relative Selector * http://www.w3.org/TR/selectors4/#absolutizing */ function absolutize( token: InternalSelector[][], { adapter }: InternalOptions, context?: Node[] ) { // TODO Use better check if the context is a document const hasContext = !!context?.every((e) => { const parent = adapter.isTag(e) && adapter.getParent(e); return e === PLACEHOLDER_ELEMENT || (parent && adapter.isTag(parent)); }); for (const t of token) { if (t.length > 0 && isTraversal(t[0]) && t[0].type !== "descendant") { // Don't continue in else branch } else if (hasContext && !t.some(includesScopePseudo)) { t.unshift(DESCENDANT_TOKEN); } else { continue; } t.unshift(SCOPE_TOKEN); } } export function compileToken( token: InternalSelector[][], options: InternalOptions, context?: Node[] | Node ): CompiledQuery { token = token.filter((t) => t.length > 0); token.forEach(sortRules); context = options.context ?? context; const isArrayContext = Array.isArray(context); const finalContext = context && (Array.isArray(context) ? context : [context]); absolutize(token, options, finalContext); let shouldTestNextSiblings = false; const query = token .map((rules) => { if (rules.length >= 2) { const [first, second] = rules; if (first.type !== "pseudo" || first.name !== "scope") { // Ignore } else if (isArrayContext && second.type === "descendant") { rules[1] = FLEXIBLE_DESCENDANT_TOKEN; } else if ( second.type === "adjacent" || second.type === "sibling" ) { shouldTestNextSiblings = true; } } return compileRules( rules, options, finalContext ); }) .reduce(reduceRules, falseFunc); query.shouldTestNextSiblings = shouldTestNextSiblings; return query; } function compileRules( rules: InternalSelector[], options: InternalOptions, context?: Node[] ): CompiledQuery { return rules.reduce>( (previous, rule) => previous === falseFunc ? falseFunc : compileGeneralSelector( previous, rule, options, context, compileToken ), options.rootFunc ?? trueFunc ); } function reduceRules( a: CompiledQuery, b: CompiledQuery ): CompiledQuery { if (b === falseFunc || a === trueFunc) { return a; } if (a === falseFunc || b === trueFunc) { return b; } return function combine(elem) { return a(elem) || b(elem); }; } css-select-4.2.0/src/general.ts000066400000000000000000000111251415613773000163450ustar00rootroot00000000000000import { attributeRules } from "./attributes"; import { compilePseudoSelector } from "./pseudo-selectors"; import type { CompiledQuery, InternalOptions, InternalSelector, CompileToken, } from "./types"; /* * All available rules */ export function compileGeneralSelector( next: CompiledQuery, selector: InternalSelector, options: InternalOptions, context: Node[] | undefined, compileToken: CompileToken ): CompiledQuery { const { adapter, equals } = options; switch (selector.type) { case "pseudo-element": throw new Error("Pseudo-elements are not supported by css-select"); case "attribute": return attributeRules[selector.action](next, selector, options); case "pseudo": return compilePseudoSelector( next, selector, options, context, compileToken ); // Tags case "tag": return function tag(elem: ElementNode): boolean { return adapter.getName(elem) === selector.name && next(elem); }; // Traversal case "descendant": if ( options.cacheResults === false || typeof WeakSet === "undefined" ) { return function descendant(elem: ElementNode): boolean { let current: ElementNode | null = elem; while ((current = adapter.getParent(current))) { if (adapter.isTag(current) && next(current)) { return true; } } return false; }; } // @ts-expect-error `ElementNode` is not extending object // eslint-disable-next-line no-case-declarations const isFalseCache = new WeakSet(); return function cachedDescendant(elem: ElementNode): boolean { let current: ElementNode | null = elem; while ((current = adapter.getParent(current))) { if (!isFalseCache.has(current)) { if (adapter.isTag(current) && next(current)) { return true; } isFalseCache.add(current); } } return false; }; case "_flexibleDescendant": // Include element itself, only used while querying an array return function flexibleDescendant(elem: ElementNode): boolean { let current: ElementNode | null = elem; do { if (adapter.isTag(current) && next(current)) return true; } while ((current = adapter.getParent(current))); return false; }; case "parent": return function parent(elem: ElementNode): boolean { return adapter .getChildren(elem) .some((elem) => adapter.isTag(elem) && next(elem)); }; case "child": return function child(elem: ElementNode): boolean { const parent = adapter.getParent(elem); return parent != null && adapter.isTag(parent) && next(parent); }; case "sibling": return function sibling(elem: ElementNode): boolean { const siblings = adapter.getSiblings(elem); for (let i = 0; i < siblings.length; i++) { const currentSibling = siblings[i]; if (equals(elem, currentSibling)) break; if (adapter.isTag(currentSibling) && next(currentSibling)) { return true; } } return false; }; case "adjacent": return function adjacent(elem: ElementNode): boolean { const siblings = adapter.getSiblings(elem); let lastElement; for (let i = 0; i < siblings.length; i++) { const currentSibling = siblings[i]; if (equals(elem, currentSibling)) break; if (adapter.isTag(currentSibling)) { lastElement = currentSibling; } } return !!lastElement && next(lastElement); }; case "universal": return next; } } css-select-4.2.0/src/index.ts000066400000000000000000000145501415613773000160440ustar00rootroot00000000000000import * as DomUtils from "domutils"; import { falseFunc } from "boolbase"; import type { Node as DomHandlerNode, Element as DomHandlerElement, } from "domhandler"; import { compile as compileRaw, compileUnsafe, compileToken } from "./compile"; import type { CompiledQuery, Options, InternalOptions, Query, Adapter, Predicate, } from "./types"; import { getNextSiblings } from "./pseudo-selectors/subselects"; export type { Options }; const defaultEquals = (a: Node, b: Node) => a === b; const defaultOptions: InternalOptions = { adapter: DomUtils, equals: defaultEquals, }; function convertOptionFormats( options?: Options ): InternalOptions { /* * We force one format of options to the other one. */ // @ts-expect-error Default options may have incompatible `Node` / `ElementNode`. const opts: Options = options ?? defaultOptions; // @ts-expect-error Same as above. opts.adapter ??= DomUtils; // @ts-expect-error `equals` does not exist on `Options` opts.equals ??= opts.adapter?.equals ?? defaultEquals; return opts as InternalOptions; } function wrapCompile( func: ( selector: Selector, options: InternalOptions, context?: Node[] | Node ) => CompiledQuery ) { return function addAdapter( selector: Selector, options?: Options, context?: Node[] | Node ): CompiledQuery { const opts = convertOptionFormats(options); return func(selector, opts, context); }; } /** * Compiles the query, returns a function. */ export const compile = wrapCompile(compileRaw); export const _compileUnsafe = wrapCompile(compileUnsafe); export const _compileToken = wrapCompile(compileToken); function getSelectorFunc( searchFunc: ( query: Predicate, elems: Array, options: InternalOptions ) => T ) { return function select( query: Query, elements: Node[] | Node, options?: Options ): T { const opts = convertOptionFormats(options); if (typeof query !== "function") { query = compileUnsafe(query, opts, elements); } const filteredElements = prepareContext( elements, opts.adapter, query.shouldTestNextSiblings ); return searchFunc(query, filteredElements, opts); }; } export function prepareContext( elems: Node | Node[], adapter: Adapter, shouldTestNextSiblings = false ): Node[] { /* * Add siblings if the query requires them. * See https://github.com/fb55/css-select/pull/43#issuecomment-225414692 */ if (shouldTestNextSiblings) { elems = appendNextSiblings(elems, adapter); } return Array.isArray(elems) ? adapter.removeSubsets(elems) : adapter.getChildren(elems); } function appendNextSiblings( elem: Node | Node[], adapter: Adapter ): Node[] { // Order matters because jQuery seems to check the children before the siblings const elems = Array.isArray(elem) ? elem.slice(0) : [elem]; for (let i = 0; i < elems.length; i++) { const nextSiblings = getNextSiblings(elems[i], adapter); elems.push(...nextSiblings); } return elems; } /** * @template Node The generic Node type for the DOM adapter being used. * @template ElementNode The Node type for elements for the DOM adapter being used. * @param elems Elements to query. If it is an element, its children will be queried.. * @param query can be either a CSS selector string or a compiled query function. * @param [options] options for querying the document. * @see compile for supported selector queries. * @returns All matching elements. * */ export const selectAll = getSelectorFunc( ( query: Predicate, elems: Node[] | null, options: InternalOptions ): ElementNode[] => query === falseFunc || !elems || elems.length === 0 ? [] : options.adapter.findAll(query, elems) ); /** * @template Node The generic Node type for the DOM adapter being used. * @template ElementNode The Node type for elements for the DOM adapter being used. * @param elems Elements to query. If it is an element, its children will be queried.. * @param query can be either a CSS selector string or a compiled query function. * @param [options] options for querying the document. * @see compile for supported selector queries. * @returns the first match, or null if there was no match. */ export const selectOne = getSelectorFunc( ( query: Predicate, elems: Node[] | null, options: InternalOptions ): ElementNode | null => query === falseFunc || !elems || elems.length === 0 ? null : options.adapter.findOne(query, elems) ); /** * Tests whether or not an element is matched by query. * * @template Node The generic Node type for the DOM adapter being used. * @template ElementNode The Node type for elements for the DOM adapter being used. * @param elem The element to test if it matches the query. * @param query can be either a CSS selector string or a compiled query function. * @param [options] options for querying the document. * @see compile for supported selector queries. * @returns */ export function is( elem: ElementNode, query: Query, options?: Options ): boolean { const opts = convertOptionFormats(options); return (typeof query === "function" ? query : compileRaw(query, opts))( elem ); } /** * Alias for selectAll(query, elems, options). * @see [compile] for supported selector queries. */ export default selectAll; // Export filters, pseudos and aliases to allow users to supply their own. export { filters, pseudos, aliases } from "./pseudo-selectors"; css-select-4.2.0/src/procedure.ts000066400000000000000000000010131415613773000167130ustar00rootroot00000000000000import type { Traversal } from "css-what"; import type { InternalSelector } from "./types"; export const procedure: Record = { universal: 50, tag: 30, attribute: 1, pseudo: 0, "pseudo-element": 0, // Here to make TS happy, we don't support this. descendant: -1, child: -1, parent: -1, sibling: -1, adjacent: -1, _flexibleDescendant: -1, }; export function isTraversal(t: InternalSelector): t is Traversal { return procedure[t.type] < 0; } css-select-4.2.0/src/pseudo-selectors/000077500000000000000000000000001415613773000176605ustar00rootroot00000000000000css-select-4.2.0/src/pseudo-selectors/aliases.ts000066400000000000000000000026301415613773000216520ustar00rootroot00000000000000/** * Aliases are pseudos that are expressed as selectors. */ export const aliases: Record = { // Links "any-link": ":is(a, area, link)[href]", link: ":any-link:not(:visited)", // Forms // https://html.spec.whatwg.org/multipage/scripting.html#disabled-elements disabled: `:is( :is(button, input, select, textarea, optgroup, option)[disabled], optgroup[disabled] > option, fieldset[disabled]:not(fieldset[disabled] legend:first-of-type *) )`, enabled: ":not(:disabled)", checked: ":is(:is(input[type=radio], input[type=checkbox])[checked], option:selected)", required: ":is(input, select, textarea)[required]", optional: ":is(input, select, textarea):not([required])", // JQuery extensions // https://html.spec.whatwg.org/multipage/form-elements.html#concept-option-selectedness selected: "option:is([selected], select:not([multiple]):not(:has(> option[selected])) > :first-of-type)", checkbox: "[type=checkbox]", file: "[type=file]", password: "[type=password]", radio: "[type=radio]", reset: "[type=reset]", image: "[type=image]", submit: "[type=submit]", parent: ":not(:empty)", header: ":is(h1, h2, h3, h4, h5, h6)", button: ":is(button, input[type=button])", input: ":is(input, textarea, select, button)", text: "input:is(:not([type!='']), [type=text])", }; css-select-4.2.0/src/pseudo-selectors/filters.ts000066400000000000000000000130571415613773000217060ustar00rootroot00000000000000import getNCheck from "nth-check"; import { trueFunc, falseFunc } from "boolbase"; import type { CompiledQuery, InternalOptions, Adapter } from "../types"; export type Filter = ( next: CompiledQuery, text: string, options: InternalOptions, context?: Node[] ) => CompiledQuery; function getChildFunc( next: CompiledQuery, adapter: Adapter ): CompiledQuery { return (elem) => { const parent = adapter.getParent(elem); return parent != null && adapter.isTag(parent) && next(elem); }; } export const filters: Record = { contains(next, text, { adapter }) { return function contains(elem) { return next(elem) && adapter.getText(elem).includes(text); }; }, icontains(next, text, { adapter }) { const itext = text.toLowerCase(); return function icontains(elem) { return ( next(elem) && adapter.getText(elem).toLowerCase().includes(itext) ); }; }, // Location specific methods "nth-child"(next, rule, { adapter, equals }) { const func = getNCheck(rule); if (func === falseFunc) return falseFunc; if (func === trueFunc) return getChildFunc(next, adapter); return function nthChild(elem) { const siblings = adapter.getSiblings(elem); let pos = 0; for (let i = 0; i < siblings.length; i++) { if (equals(elem, siblings[i])) break; if (adapter.isTag(siblings[i])) { pos++; } } return func(pos) && next(elem); }; }, "nth-last-child"(next, rule, { adapter, equals }) { const func = getNCheck(rule); if (func === falseFunc) return falseFunc; if (func === trueFunc) return getChildFunc(next, adapter); return function nthLastChild(elem) { const siblings = adapter.getSiblings(elem); let pos = 0; for (let i = siblings.length - 1; i >= 0; i--) { if (equals(elem, siblings[i])) break; if (adapter.isTag(siblings[i])) { pos++; } } return func(pos) && next(elem); }; }, "nth-of-type"(next, rule, { adapter, equals }) { const func = getNCheck(rule); if (func === falseFunc) return falseFunc; if (func === trueFunc) return getChildFunc(next, adapter); return function nthOfType(elem) { const siblings = adapter.getSiblings(elem); let pos = 0; for (let i = 0; i < siblings.length; i++) { const currentSibling = siblings[i]; if (equals(elem, currentSibling)) break; if ( adapter.isTag(currentSibling) && adapter.getName(currentSibling) === adapter.getName(elem) ) { pos++; } } return func(pos) && next(elem); }; }, "nth-last-of-type"(next, rule, { adapter, equals }) { const func = getNCheck(rule); if (func === falseFunc) return falseFunc; if (func === trueFunc) return getChildFunc(next, adapter); return function nthLastOfType(elem) { const siblings = adapter.getSiblings(elem); let pos = 0; for (let i = siblings.length - 1; i >= 0; i--) { const currentSibling = siblings[i]; if (equals(elem, currentSibling)) break; if ( adapter.isTag(currentSibling) && adapter.getName(currentSibling) === adapter.getName(elem) ) { pos++; } } return func(pos) && next(elem); }; }, // TODO determine the actual root element root(next, _rule, { adapter }) { return (elem) => { const parent = adapter.getParent(elem); return (parent == null || !adapter.isTag(parent)) && next(elem); }; }, scope( next: CompiledQuery, rule: string, options: InternalOptions, context?: Node[] ): CompiledQuery { const { equals } = options; if (!context || context.length === 0) { // Equivalent to :root return filters.root(next, rule, options); } if (context.length === 1) { // NOTE: can't be unpacked, as :has uses this for side-effects return (elem) => equals(context[0], elem) && next(elem); } return (elem) => context.includes(elem) && next(elem); }, hover: dynamicStatePseudo("isHovered"), visited: dynamicStatePseudo("isVisited"), active: dynamicStatePseudo("isActive"), }; /** * Dynamic state pseudos. These depend on optional Adapter methods. * * @param name The name of the adapter method to call. * @returns Pseudo for the `filters` object. */ function dynamicStatePseudo( name: "isHovered" | "isVisited" | "isActive" ): Filter { return function dynamicPseudo(next, _rule, { adapter }) { const func = adapter[name]; if (typeof func !== "function") { return falseFunc; } return function active(elem) { return func(elem) && next(elem); }; }; } css-select-4.2.0/src/pseudo-selectors/index.ts000066400000000000000000000043111415613773000213360ustar00rootroot00000000000000/* * Pseudo selectors * * Pseudo selectors are available in three forms: * * 1. Filters are called when the selector is compiled and return a function * that has to return either false, or the results of `next()`. * 2. Pseudos are called on execution. They have to return a boolean. * 3. Subselects work like filters, but have an embedded selector that will be run separately. * * Filters are great if you want to do some pre-processing, or change the call order * of `next()` and your code. * Pseudos should be used to implement simple checks. */ import { trueFunc, falseFunc } from "boolbase"; import type { CompiledQuery, InternalOptions, CompileToken } from "../types"; import { parse, PseudoSelector } from "css-what"; import { filters } from "./filters"; import { pseudos, verifyPseudoArgs } from "./pseudos"; import { aliases } from "./aliases"; import { subselects } from "./subselects"; export { filters, pseudos, aliases }; export function compilePseudoSelector( next: CompiledQuery, selector: PseudoSelector, options: InternalOptions, context: Node[] | undefined, compileToken: CompileToken ): CompiledQuery { const { name, data } = selector; if (Array.isArray(data)) { return subselects[name](next, data, options, context, compileToken); } if (name in aliases) { if (data != null) { throw new Error(`Pseudo ${name} doesn't have any arguments`); } // The alias has to be parsed here, to make sure options are respected. const alias = parse(aliases[name], options); return subselects.is(next, alias, options, context, compileToken); } if (name in filters) { return filters[name](next, data as string, options, context); } if (name in pseudos) { const pseudo = pseudos[name]; verifyPseudoArgs(pseudo, name, data); return pseudo === falseFunc ? falseFunc : next === trueFunc ? (elem) => pseudo(elem, options, data) : (elem) => pseudo(elem, options, data) && next(elem); } throw new Error(`unmatched pseudo-class :${name}`); } css-select-4.2.0/src/pseudo-selectors/pseudos.ts000066400000000000000000000062521415613773000217170ustar00rootroot00000000000000import { PseudoSelector } from "css-what"; import type { InternalOptions } from "../types"; export type Pseudo = ( elem: ElementNode, options: InternalOptions, subselect?: ElementNode | string | null ) => boolean; // While filters are precompiled, pseudos get called when they are needed export const pseudos: Record = { empty(elem, { adapter }) { return !adapter.getChildren(elem).some( (elem) => // FIXME: `getText` call is potentially expensive. adapter.isTag(elem) || adapter.getText(elem) !== "" ); }, "first-child"(elem, { adapter, equals }) { const firstChild = adapter .getSiblings(elem) .find((elem) => adapter.isTag(elem)); return firstChild != null && equals(elem, firstChild); }, "last-child"(elem, { adapter, equals }) { const siblings = adapter.getSiblings(elem); for (let i = siblings.length - 1; i >= 0; i--) { if (equals(elem, siblings[i])) return true; if (adapter.isTag(siblings[i])) break; } return false; }, "first-of-type"(elem, { adapter, equals }) { const siblings = adapter.getSiblings(elem); const elemName = adapter.getName(elem); for (let i = 0; i < siblings.length; i++) { const currentSibling = siblings[i]; if (equals(elem, currentSibling)) return true; if ( adapter.isTag(currentSibling) && adapter.getName(currentSibling) === elemName ) { break; } } return false; }, "last-of-type"(elem, { adapter, equals }) { const siblings = adapter.getSiblings(elem); const elemName = adapter.getName(elem); for (let i = siblings.length - 1; i >= 0; i--) { const currentSibling = siblings[i]; if (equals(elem, currentSibling)) return true; if ( adapter.isTag(currentSibling) && adapter.getName(currentSibling) === elemName ) { break; } } return false; }, "only-of-type"(elem, { adapter, equals }) { const elemName = adapter.getName(elem); return adapter .getSiblings(elem) .every( (sibling) => equals(elem, sibling) || !adapter.isTag(sibling) || adapter.getName(sibling) !== elemName ); }, "only-child"(elem, { adapter, equals }) { return adapter .getSiblings(elem) .every( (sibling) => equals(elem, sibling) || !adapter.isTag(sibling) ); }, }; export function verifyPseudoArgs( func: Pseudo, name: string, subselect: PseudoSelector["data"] ): void { if (subselect === null) { if (func.length > 2) { throw new Error(`pseudo-selector :${name} requires an argument`); } } else if (func.length === 2) { throw new Error(`pseudo-selector :${name} doesn't have any arguments`); } } css-select-4.2.0/src/pseudo-selectors/subselects.ts000066400000000000000000000103771415613773000224140ustar00rootroot00000000000000import { CompileToken } from "./../types"; import type { Selector } from "css-what"; import { trueFunc, falseFunc } from "boolbase"; import type { CompiledQuery, InternalOptions, Adapter } from "../types"; import { isTraversal } from "../procedure"; /** Used as a placeholder for :has. Will be replaced with the actual element. */ export const PLACEHOLDER_ELEMENT = {}; export function ensureIsTag( next: CompiledQuery, adapter: Adapter ): CompiledQuery { if (next === falseFunc) return falseFunc; return (elem: Node) => adapter.isTag(elem) && next(elem); } export type Subselect = ( next: CompiledQuery, subselect: Selector[][], options: InternalOptions, context: Node[] | undefined, compileToken: CompileToken ) => CompiledQuery; export function getNextSiblings( elem: Node, adapter: Adapter ): ElementNode[] { const siblings = adapter.getSiblings(elem); if (siblings.length <= 1) return []; const elemIndex = siblings.indexOf(elem); if (elemIndex < 0 || elemIndex === siblings.length - 1) return []; return siblings.slice(elemIndex + 1).filter(adapter.isTag); } const is: Subselect = (next, token, options, context, compileToken) => { const opts = { xmlMode: !!options.xmlMode, adapter: options.adapter, equals: options.equals, }; const func = compileToken(token, opts, context); return (elem) => func(elem) && next(elem); }; /* * :not, :has, :is, :matches and :where have to compile selectors * doing this in src/pseudos.ts would lead to circular dependencies, * so we add them here */ export const subselects: Record = { is, /** * `:matches` and `:where` are aliases for `:is`. */ matches: is, where: is, not(next, token, options, context, compileToken) { const opts = { xmlMode: !!options.xmlMode, adapter: options.adapter, equals: options.equals, }; const func = compileToken(token, opts, context); if (func === falseFunc) return next; if (func === trueFunc) return falseFunc; return function not(elem) { return !func(elem) && next(elem); }; }, has( next: CompiledQuery, subselect: Selector[][], options: InternalOptions, _context: Node[] | undefined, compileToken: CompileToken ): CompiledQuery { const { adapter } = options; const opts = { xmlMode: !!options.xmlMode, adapter, equals: options.equals, }; // @ts-expect-error Uses an array as a pointer to the current element (side effects) const context: ElementNode[] | undefined = subselect.some((s) => s.some(isTraversal) ) ? [PLACEHOLDER_ELEMENT] : undefined; const compiled = compileToken(subselect, opts, context); if (compiled === falseFunc) return falseFunc; if (compiled === trueFunc) { return (elem) => adapter.getChildren(elem).some(adapter.isTag) && next(elem); } const hasElement = ensureIsTag(compiled, adapter); const { shouldTestNextSiblings = false } = compiled; /* * `shouldTestNextSiblings` will only be true if the query starts with * a traversal (sibling or adjacent). That means we will always have a context. */ if (context) { return (elem) => { context[0] = elem; const childs = adapter.getChildren(elem); const nextElements = shouldTestNextSiblings ? [...childs, ...getNextSiblings(elem, adapter)] : childs; return ( next(elem) && adapter.existsOne(hasElement, nextElements) ); }; } return (elem) => next(elem) && adapter.existsOne(hasElement, adapter.getChildren(elem)); }, }; css-select-4.2.0/src/sort.ts000066400000000000000000000045771415613773000157340ustar00rootroot00000000000000import type { InternalSelector } from "./types"; import type { AttributeAction } from "css-what"; import { procedure } from "./procedure"; const attributes: Record = { exists: 10, equals: 8, not: 7, start: 6, end: 6, any: 5, hyphen: 4, element: 4, }; /** * Sort the parts of the passed selector, * as there is potential for optimization * (some types of selectors are faster than others) * * @param arr Selector to sort */ export default function sortByProcedure(arr: InternalSelector[]): void { const procs = arr.map(getProcedure); for (let i = 1; i < arr.length; i++) { const procNew = procs[i]; if (procNew < 0) continue; for (let j = i - 1; j >= 0 && procNew < procs[j]; j--) { const token = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = token; procs[j + 1] = procs[j]; procs[j] = procNew; } } } function getProcedure(token: InternalSelector): number { let proc = procedure[token.type]; if (token.type === "attribute") { proc = attributes[token.action]; if (proc === attributes.equals && token.name === "id") { // Prefer ID selectors (eg. #ID) proc = 9; } if (token.ignoreCase) { /* * IgnoreCase adds some overhead, prefer "normal" token * this is a binary operation, to ensure it's still an int */ proc >>= 1; } } else if (token.type === "pseudo") { if (!token.data) { proc = 3; } else if (token.name === "has" || token.name === "contains") { proc = 0; // Expensive in any case } else if (Array.isArray(token.data)) { // "matches" and "not" proc = 0; for (let i = 0; i < token.data.length; i++) { // TODO better handling of complex selectors if (token.data[i].length !== 1) continue; const cur = getProcedure(token.data[i][0]); // Avoid executing :has or :contains if (cur === 0) { proc = 0; break; } if (cur > proc) proc = cur; } if (token.data.length > 1 && proc > 0) proc -= 1; } else { proc = 1; } } return proc; } css-select-4.2.0/src/types.ts000066400000000000000000000104131415613773000160730ustar00rootroot00000000000000import type { Selector } from "css-what"; export type InternalSelector = Selector | { type: "_flexibleDescendant" }; export type Predicate = (v: Value) => boolean; export interface Adapter { /** * Is the node a tag? */ isTag: (node: Node) => node is ElementNode; /** * Does at least one of passed element nodes pass the test predicate? */ existsOne: (test: Predicate, elems: Node[]) => boolean; /** * Get the attribute value. */ getAttributeValue: (elem: ElementNode, name: string) => string | undefined; /** * Get the node's children */ getChildren: (node: Node) => Node[]; /** * Get the name of the tag */ getName: (elem: ElementNode) => string; /** * Get the parent of the node */ getParent: (node: ElementNode) => ElementNode | null; /** * Get the siblings of the node. Note that unlike jQuery's `siblings` method, * this is expected to include the current node as well */ getSiblings: (node: Node) => Node[]; /** * Get the text content of the node, and its children if it has any. */ getText: (node: Node) => string; /** * Does the element have the named attribute? */ hasAttrib: (elem: ElementNode, name: string) => boolean; /** * Takes an array of nodes, and removes any duplicates, as well as any * nodes whose ancestors are also in the array. */ removeSubsets: (nodes: Node[]) => Node[]; /** * Finds all of the element nodes in the array that match the test predicate, * as well as any of their children that match it. */ findAll: (test: Predicate, nodes: Node[]) => ElementNode[]; /** * Finds the first node in the array that matches the test predicate, or one * of its children. */ findOne: ( test: Predicate, elems: Node[] ) => ElementNode | null; /** * The adapter can also optionally include an equals method, if your DOM * structure needs a custom equality test to compare two objects which refer * to the same underlying node. If not provided, `css-select` will fall back to * `a === b`. */ equals?: (a: Node, b: Node) => boolean; /** * Is the element in hovered state? */ isHovered?: (elem: ElementNode) => boolean; /** * Is the element in visited state? */ isVisited?: (elem: ElementNode) => boolean; /** * Is the element in active state? */ isActive?: (elem: ElementNode) => boolean; } export interface Options { /** * When enabled, tag names will be case-sensitive. * * @default false */ xmlMode?: boolean; /** * The last function in the stack, will be called with the last element * that's looked at. */ rootFunc?: (element: ElementNode) => boolean; /** * The adapter to use when interacting with the backing DOM structure. By * default it uses the `domutils` module. */ adapter?: Adapter; /** * The context of the current query. Used to limit the scope of searches. * Can be matched directly using the `:scope` pseudo-selector. */ context?: Node | Node[]; /** * Allow css-select to cache results for some selectors, sometimes greatly * improving querying performance. Disable this if your document can * change in between queries with the same compiled selector. * * @default true */ cacheResults?: boolean; } // Internally, we want to ensure that no propterties are accessed on the passed objects export interface InternalOptions extends Options { adapter: Adapter; equals: (a: Node, b: Node) => boolean; } export interface CompiledQuery { (node: ElementNode): boolean; shouldTestNextSiblings?: boolean; } export type Query = | string | CompiledQuery | Selector[][]; export type CompileToken = ( token: InternalSelector[][], options: InternalOptions, context?: Node[] | Node ) => CompiledQuery; css-select-4.2.0/test/000077500000000000000000000000001415613773000145505ustar00rootroot00000000000000css-select-4.2.0/test/.eslintrc.json000066400000000000000000000000401415613773000173360ustar00rootroot00000000000000{ "env": { "jest": true } } css-select-4.2.0/test/LICENSE000066400000000000000000000073571415613773000155710ustar00rootroot00000000000000Some of the tests for this project are based on the NWMatcher, Qwery and Sizzle projects. License information below. NWMatcher: Copyright (c) 2007-2013 Diego Perini (http://www.iport.it) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Qwery: Copyright (C) 2012 Dustin Diaz & Jacob Thornton http://en.wikipedia.org/wiki/MIT_License Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Sizzle: Copyright JS Foundation and other contributors, https://js.foundation/ This software consists of voluntary contributions made by many individuals. For exact contribution history, see the revision history available at https://github.com/jquery/sizzle The following license applies to all parts of this software except as documented below: ==== Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ==== All files located in the node_modules and external directories are externally maintained libraries used by this software which have their own licenses; we recommend you read them, as their terms may differ from the terms above. css-select-4.2.0/test/api.ts000066400000000000000000000252671415613773000157050ustar00rootroot00000000000000import * as CSSselect from "../src"; import { parseDOM, parseDocument } from "htmlparser2"; import { trueFunc, falseFunc } from "boolbase"; import type { Element } from "domhandler"; const [dom] = parseDOM("

foo

") as Element[]; const [xmlDom] = parseDOM("

foo

", { xmlMode: true, }) as Element[]; describe("API", () => { describe("removes duplicates", () => { it("between identical trees", () => { expect(CSSselect.selectAll("div", [dom, dom])).toHaveLength(1); }); it("between a superset and subset", () => { expect( CSSselect.selectAll("p", [dom, dom.children[0]]) ).toHaveLength(1); }); it("betweeen a subset and superset", () => { expect( CSSselect.selectAll("p", [dom.children[0], dom]) ).toHaveLength(1); }); }); describe("can be queried with more than a selector", () => { it("function in `is`", () => { expect(CSSselect.is(dom, (elem) => elem.attribs.id === "foo")).toBe( true ); }); it("parsed selector in `is`", () => { expect( CSSselect.is(dom, [ [ { type: "attribute", action: "equals", ignoreCase: false, name: "id", namespace: null, value: "foo", }, ], ]) ).toBe(true); }); // Probably more cases should be added here }); describe("selectAll", () => { it("should query array elements directly when they have no parents", () => { const divs = [dom]; expect(CSSselect.selectAll("div", divs)).toStrictEqual(divs); }); it("should query array elements directly when they have parents", () => { const ps = CSSselect.selectAll("p", [dom]); expect(CSSselect.selectAll("p", ps)).toStrictEqual(ps); }); it("should support pseudos led by a traversal (#111)", () => { const [dom] = parseDOM( '
a
b
' ) as Element[]; const a = CSSselect.selectAll(".foo:has(+.bar)", dom); expect(a).toHaveLength(1); expect(a[0]).toStrictEqual(dom.children[0] as Element); }); it("should accept document root nodes", () => { const doc = parseDocument("

foo

"); expect(CSSselect.selectAll(":contains(foo)", doc)).toHaveLength(2); }); }); describe("errors", () => { it("should throw with a pseudo-element", () => { expect(() => CSSselect.compile("::after")).toThrow("not supported"); }); it("should throw if parameter is supplied for pseudo", () => { expect(() => CSSselect.compile(":any-link(test)")).toThrow( "doesn't have any arguments" ); expect(() => CSSselect.compile(":only-child(test)")).toThrow( "doesn't have any arguments" ); }); it("should throw if no parameter is supplied for pseudo", () => { CSSselect.pseudos.foovalue = (elem, { adapter }, subselect) => adapter.getAttributeValue(elem, "foo") === subselect; expect(() => CSSselect.compile(":foovalue")).toThrow( "requires an argument" ); delete CSSselect.pseudos.foovalue; }); }); describe("unsatisfiable and universally valid selectors", () => { it("in :not", () => { let func = CSSselect._compileUnsafe(":not(*)"); expect(func).toBe(falseFunc); func = CSSselect._compileUnsafe(":not(:nth-child(-1n-1))"); expect(func).toBe(trueFunc); func = CSSselect._compileUnsafe(":not(:not(:not(*)))"); expect(func).toBe(falseFunc); }); it("in :has", () => { const matches = CSSselect.selectAll(":has(*)", [dom]); expect(matches).toHaveLength(1); expect(matches[0]).toBe(dom); const func = CSSselect._compileUnsafe(":has(:nth-child(-1n-1))"); expect(func).toBe(falseFunc); }); it("should skip unsatisfiable", () => { const func = CSSselect._compileUnsafe("* :not(*) foo"); expect(func).toBe(falseFunc); }); it("should promote universally valid", () => { const func = CSSselect._compileUnsafe("*, foo"); expect(func).toBe(trueFunc); }); }); describe(":matches", () => { it("should select multiple elements", () => { let matches = CSSselect.selectAll(":matches(p, div)", [dom]); expect(matches).toHaveLength(2); matches = CSSselect.selectAll(":matches(div, :not(div))", [dom]); expect(matches).toHaveLength(2); matches = CSSselect.selectAll( ":matches(boo, baa, tag, div, foo, bar, baz)", [dom] ); expect(matches).toHaveLength(1); expect(matches[0]).toBe(dom); }); it("should support traversals", () => { let matches = CSSselect.selectAll(":matches(div p)", [dom]); expect(matches).toHaveLength(1); expect(matches[0].name).toBe("p"); matches = CSSselect.selectAll(":matches(div > p)", [dom]); expect(matches).toHaveLength(1); expect(matches[0].name).toBe("p"); matches = CSSselect.selectAll(":matches(p < div)", [dom]); expect(matches).toHaveLength(1); expect(matches[0].name).toBe("div"); matches = CSSselect.selectAll(":matches(> p)", [dom]); expect(matches).toHaveLength(1); expect(matches[0].name).toBe("p"); matches = CSSselect.selectAll("div:has(:is(:scope p))", [dom]); expect(matches).toHaveLength(1); expect(matches[0].name).toBe("div"); const [multiLevelDom] = parseDOM("") as Element[]; matches = CSSselect.selectAll(":is(* c)", multiLevelDom); expect(matches).toHaveLength(1); expect(matches[0].name).toBe("c"); }); it("should support alias :is", () => { let matches = CSSselect.selectAll(":is(p, div)", [dom]); expect(matches).toHaveLength(2); matches = CSSselect.selectAll(":is(div, :not(div))", [dom]); expect(matches).toHaveLength(2); matches = CSSselect.selectAll( ":is(boo, baa, tag, div, foo, bar, baz)", [dom] ); expect(matches).toHaveLength(1); expect(matches[0]).toBe(dom); }); it("should support alias :where", () => { let matches = CSSselect.selectAll(":where(p, div)", [dom]); expect(matches).toHaveLength(2); matches = CSSselect.selectAll(":where(div, :not(div))", [dom]); expect(matches).toHaveLength(2); matches = CSSselect.selectAll( ":where(boo, baa, tag, div, foo, bar, baz)", [dom] ); expect(matches).toHaveLength(1); expect(matches[0]).toBe(dom); }); }); describe("parent selector (<)", () => { it("should select the right element", () => { const matches = CSSselect.selectAll("p < div", [dom]); expect(matches).toHaveLength(1); expect(matches[0]).toBe(dom); }); it("should not select nodes without children", () => { const matches = CSSselect.selectAll("p < div", [dom]); expect(matches).toStrictEqual(CSSselect.selectAll("* < *", [dom])); }); }); describe("selectOne", () => { it("should select elements in traversal order", () => { expect(CSSselect.selectOne("p", [dom])).toBe(dom.children[0]); expect(CSSselect.selectOne(":contains(foo)", [dom])).toBe(dom); }); it("should take shortcuts when applicable", () => { let match = CSSselect.selectOne(falseFunc, { get length() { throw new Error("Did not take shortcut"); }, }); expect(match).toBeNull(); match = CSSselect.selectOne("*", []); expect(match).toBeNull(); }); it("should properly handle root elements", () => { expect(CSSselect.selectOne("div:root", [dom])).toBe(dom); expect(CSSselect.selectOne("* > div", [dom])).toBeNull(); }); }); describe("options", () => { const opts = { xmlMode: true }; it("should recognize xmlMode in :has and :not", () => { expect(CSSselect.is(xmlDom, "DiV:has(P)", opts)).toBe(true); expect(CSSselect.is(xmlDom, "DiV:not(div)", opts)).toBe(true); expect( CSSselect.is(xmlDom.children[0], "DiV:has(P) :not(p)", opts) ).toBe(true); }); it("should recognize contexts", () => { const div = CSSselect.selectAll("div", [dom]); const p = CSSselect.selectAll("p", [dom]); expect(CSSselect.selectOne("div", div, { context: div })).toBe( div[0] ); expect(CSSselect.selectOne("div", div, { context: p })).toBe(null); expect( CSSselect.selectAll("p", div, { context: div }) ).toStrictEqual(p); }); it("should cache results by default", () => { const [dom] = parseDOM( '

bar

' ) as Element[]; const query = CSSselect.compile("#bar p"); expect(CSSselect.selectAll(query, [dom])).toHaveLength(0); dom.attribs.id = "bar"; // The query should be cached and the changed attribute should be ignored. expect(CSSselect.selectAll(query, [dom])).toHaveLength(0); }); it("should skip cacheing results if asked to", () => { const [dom] = parseDOM( '

bar

' ) as Element[]; const query = CSSselect.compile("#bar p", { cacheResults: false }); expect(CSSselect.selectAll(query, [dom])).toHaveLength(0); dom.attribs.id = "bar"; // The query should not be cached, the changed attribute should be picked up. expect(CSSselect.selectAll(query, [dom])).toHaveLength(1); }); }); }); css-select-4.2.0/test/attributes.ts000066400000000000000000000075171415613773000173200ustar00rootroot00000000000000import * as CSSselect from "../src"; import { parseDocument } from "htmlparser2"; import { falseFunc } from "boolbase"; import type { Element } from "domhandler"; const dom = parseDocument( '
' ); const domChilds = dom.children as Element[]; describe("Attributes", () => { describe("ignore case", () => { it("should for =", () => { let matches = CSSselect.selectAll( '[data-foo="indeed-that\'s a delicate matter." i]', dom ); expect(matches).toHaveLength(1); expect(matches).toStrictEqual([domChilds[1]]); matches = CSSselect.selectAll( '[data-foo="inDeeD-THAT\'s a DELICATE matteR." i]', dom ); expect(matches).toStrictEqual([domChilds[1]]); }); it("should for ^=", () => { let matches = CSSselect.selectAll("[data-foo^=IN i]", dom); expect(matches).toHaveLength(2); expect(matches).toStrictEqual(domChilds); matches = CSSselect.selectAll("[data-foo^=in i]", dom); expect(matches).toStrictEqual(domChilds); matches = CSSselect.selectAll("[data-foo^=iN i]", dom); expect(matches).toStrictEqual(domChilds); }); it("should for $=", () => { let matches = CSSselect.selectAll('[data-foo$="MATTER." i]', dom); expect(matches).toHaveLength(2); expect(matches).toStrictEqual(domChilds); matches = CSSselect.selectAll('[data-foo$="matter." i]', dom); expect(matches).toStrictEqual(domChilds); matches = CSSselect.selectAll('[data-foo$="MaTtEr." i]', dom); expect(matches).toStrictEqual(domChilds); }); it("should for !=", () => { let matches = CSSselect.selectAll( '[data-foo!="indeed-that\'s a delicate matter." i]', dom ); expect(matches).toHaveLength(1); expect(matches).toStrictEqual([domChilds[0]]); matches = CSSselect.selectAll( '[data-foo!="inDeeD-THAT\'s a DELICATE matteR." i]', dom ); expect(matches).toStrictEqual([domChilds[0]]); }); it("should for *=", () => { let matches = CSSselect.selectAll("[data-foo*=IT i]", dom); expect(matches).toHaveLength(1); expect(matches).toStrictEqual([domChilds[0]]); matches = CSSselect.selectAll("[data-foo*=tH i]", dom); expect(matches).toStrictEqual(domChilds); }); it("should for |=", () => { let matches = CSSselect.selectAll("[data-foo|=indeed i]", dom); expect(matches).toHaveLength(1); expect(matches).toStrictEqual([domChilds[1]]); matches = CSSselect.selectAll("[data-foo|=inDeeD i]", dom); expect(matches).toStrictEqual([domChilds[1]]); }); it("should for ~=", () => { let matches = CSSselect.selectAll("[data-foo~=IT i]", dom); expect(matches).toHaveLength(1); expect(matches).toStrictEqual([domChilds[0]]); matches = CSSselect.selectAll("[data-foo~=dElIcAtE i]", dom); expect(matches).toStrictEqual([domChilds[1]]); }); }); describe("no matches", () => { it("should for ~=", () => { expect(CSSselect._compileUnsafe("[foo~='baz bar']")).toBe( falseFunc ); }); it("should for $=", () => { expect(CSSselect._compileUnsafe("[foo$='']")).toBe(falseFunc); }); it("should for *=", () => { expect(CSSselect._compileUnsafe("[foo*='']")).toBe(falseFunc); }); }); }); css-select-4.2.0/test/fixtures/000077500000000000000000000000001415613773000164215ustar00rootroot00000000000000css-select-4.2.0/test/fixtures/fries.xml000066400000000000000000000011571415613773000202570ustar00rootroot00000000000000 1 foo css-select-4.2.0/test/fixtures/nwmatcher.html000066400000000000000000000146261415613773000213100ustar00rootroot00000000000000 NWMatcher Tests
css-select-4.2.0/test/fixtures/qwery.html000066400000000000000000000127251415613773000204650ustar00rootroot00000000000000 Qwery tests

Qwery Tests

  1. hello
  2. world
    1. world
    2. hello
  3. humans

    css-select-4.2.0/test/fixtures/sizzle.html000077500000000000000000000453521415613773000206430ustar00rootroot00000000000000 Sizzle Test Suite

    jQuery Test Suite

    See this blog entry for more information.

    Here are some [links] in a normal paragraph: Google, Google Groups (Link). This link has class="blog": diveintomark

    Everything inside the red border is inside a div with id="foo".

    This is a normal link: Yahoo

    This link has class="blog": Simon Willison's Weblog

    Try them out:

      test element
      Float test.
      hi there
      C
      1. Rice
      2. Beans
      3. Blinis
      4. Tofu
      I'm hungry. I should...
      ...Eat lots of food... | ...Eat a little food... | ...Eat no food... ...Eat a burger... ...Eat some funyuns... ...Eat some funyuns...
      1 2

      css-select-4.2.0/test/icontains.ts000066400000000000000000000110121415613773000171020ustar00rootroot00000000000000import * as CSSselect from "../src"; import { parseDOM } from "htmlparser2"; import type { Element } from "domhandler"; const dom = parseDOM( "

      In the end, it doesn't really Matter.

      Indeed-that's a delicate matter.
      " ) as Element[]; describe("icontains", () => { describe("ignore case", () => { it("should match full string", () => { let matches = CSSselect.selectAll( ":icontains(indeed-that's a delicate matter.)", dom ); expect(matches).toHaveLength(2); expect(matches).toStrictEqual([ dom[0], dom[0].children[1], ] as Element[]); matches = CSSselect.selectAll( ":icontains(inDeeD-THAT's a DELICATE matteR.)", dom ); expect(matches).toHaveLength(2); expect(matches).toStrictEqual([ dom[0], dom[0].children[1], ] as Element[]); }); it("should match substring", () => { let matches = CSSselect.selectAll(":icontains(indeed)", dom); expect(matches).toHaveLength(2); expect(matches).toStrictEqual([ dom[0], dom[0].children[1], ] as Element[]); matches = CSSselect.selectAll(":icontains(inDeeD)", dom); expect(matches).toHaveLength(2); expect(matches).toStrictEqual([ dom[0], dom[0].children[1], ] as Element[]); }); it("should match specific element", () => { let matches = CSSselect.selectAll("p:icontains(matter)", dom); expect(matches).toHaveLength(1); expect(matches).toStrictEqual([dom[0].children[0] as Element]); matches = CSSselect.selectAll("p:icontains(mATter)", dom); expect(matches).toHaveLength(1); expect(matches).toStrictEqual([dom[0].children[0] as Element]); }); it("should match multiple elements", () => { let matches = CSSselect.selectAll(":icontains(matter)", dom); expect(matches).toHaveLength(3); expect(matches).toStrictEqual([ dom[0], dom[0].children[0], dom[0].children[1], ] as Element[]); matches = CSSselect.selectAll(":icontains(mATter)", dom); expect(matches).toHaveLength(3); expect(matches).toStrictEqual([ dom[0], dom[0].children[0], dom[0].children[1], ] as Element[]); }); it("should match empty string", () => { const matches = CSSselect.selectAll(":icontains()", dom); expect(matches).toHaveLength(3); expect(matches).toStrictEqual([ dom[0], dom[0].children[0], dom[0].children[1], ] as Element[]); }); it("should match quoted string", () => { let matches = CSSselect.selectAll(":icontains('')", dom); expect(matches).toHaveLength(3); expect(matches).toStrictEqual([ dom[0], dom[0].children[0], dom[0].children[1], ] as Element[]); matches = CSSselect.selectAll("p:icontains('matter')", dom); expect(matches).toHaveLength(1); expect(matches).toStrictEqual([dom[0].children[0] as Element]); matches = CSSselect.selectAll('p:icontains("matter")', dom); expect(matches).toHaveLength(1); expect(matches).toStrictEqual([dom[0].children[0] as Element]); }); it("should match whitespace", () => { let matches = CSSselect.selectAll(":icontains( matter)", dom); expect(matches).toHaveLength(3); expect(matches).toStrictEqual([ dom[0], dom[0].children[0], dom[0].children[1], ] as Element[]); matches = CSSselect.selectAll(":icontains( mATter)", dom); expect(matches).toHaveLength(3); expect(matches).toStrictEqual([ dom[0], dom[0].children[0], dom[0].children[1], ] as Element[]); }); }); describe("no matches", () => { it("should not match", () => { const matches = CSSselect.selectAll("p:icontains(indeed)", dom); expect(matches).toHaveLength(0); }); }); }); css-select-4.2.0/test/nwmatcher.ts000066400000000000000000000567051415613773000171250ustar00rootroot00000000000000/** * The NWMatcher Test Suite. * Adapted from https://github.com/dperini/nwmatcher/blob/master/test/scotch/test.js * (c) 2007-2013 Diego Perini (http://www.iport.it) * * See the LICENSE file for additional information. */ import * as DomUtils from "domutils"; import * as helper from "./tools/helper"; import * as CSSselect from "../src"; import type { Node, Element } from "domhandler"; const document = helper.getDocument("nwmatcher.html"); // Prototype's `$` function function getByIds(...args: string[]): Element[] { return args.map((id) => getById(id)); } function getById(id: string): Element { const elem = DomUtils.getElementById(id, document); if (!elem) throw new Error(`Did not find element with ID ${id}`); return elem; } // NWMatcher methods const select = (query: string, doc: Node[] | Node = document): Node[] => CSSselect.selectAll(query, doc); describe("NWMatcher", () => { describe("Basic Selectors", () => { it("*", () => { // Universal selector const results = DomUtils.getElementsByTagName("*", document); // Comment nodes should be ignored. expect(select("*")).toStrictEqual(results); }); it("E", () => { // Type selector const nodes = DomUtils.getElementsByTagName("li", document); expect(select("li")).toStrictEqual(nodes); expect(select("strong", getById("fixtures"))[0]).toBe( getById("strong") ); expect(select("nonexistent")).toHaveLength(0); }); it("#id", () => { // ID selector expect(select("#fixtures")[0]).toBe(getById("fixtures")); expect(select("nonexistent")).toHaveLength(0); expect(select("#troubleForm")[0]).toBe(getById("troubleForm")); }); it(".class", () => { // Class selector expect(select(".first")).toStrictEqual( getByIds("p", "link_1", "item_1") ); expect(select(".second")).toHaveLength(0); }); it("E#id", () => { expect(select("strong#strong")[0]).toBe(getById("strong")); expect(select("p#strong")).toHaveLength(0); }); it("E.class", () => { const secondLink = getById("link_2"); expect(select("a.internal")).toStrictEqual( getByIds("link_1", "link_2") ); expect(select("a.internal.highlight")[0]).toBe(secondLink); expect(select("a.highlight.internal")[0]).toBe(secondLink); expect(select("a.highlight.internal.nonexistent")).toStrictEqual( [] ); }); it("#id.class", () => { const secondLink = getById("link_2"); expect(select("#link_2.internal")[0]).toBe(secondLink); expect(select(".internal#link_2")[0]).toBe(secondLink); expect(select("#link_2.internal.highlight")[0]).toBe(secondLink); expect(select("#link_2.internal.nonexistent")).toHaveLength(0); }); it("E#id.class", () => { const secondLink = getById("link_2"); expect(select("a#link_2.internal")[0]).toBe(secondLink); expect(select("a.internal#link_2")[0]).toBe(secondLink); expect(select("li#item_1.first")[0]).toBe(getById("item_1")); expect(select("li#item_1.nonexistent")).toHaveLength(0); expect(select("li#item_1.first.nonexistent")).toHaveLength(0); }); }); describe("Attribute Selectors", () => { it("[foo]", () => { expect(select("[href]", document.body)).toStrictEqual( select("a[href]", document.body) ); expect(select("[class~=internal]")).toStrictEqual( select('a[class~="internal"]') ); expect(select("[id]")).toStrictEqual(select("*[id]")); expect(select("[type=radio]")).toStrictEqual( getByIds("checked_radio", "unchecked_radio") ); expect(select("[type=checkbox]")).toStrictEqual( select("*[type=checkbox]") ); expect(select("[title]")).toStrictEqual( getByIds("with_title", "commaParent") ); expect(select("#troubleForm [type=radio]")).toStrictEqual( select("#troubleForm *[type=radio]") ); expect(select("#troubleForm [type]")).toStrictEqual( select("#troubleForm *[type]") ); }); it("E[foo]", () => { expect(select("h1[class]")).toStrictEqual(select("#fixtures h1")); expect(select("h1[CLASS]")).toStrictEqual(select("#fixtures h1")); expect(select("li#item_3[class]")[0]).toBe(getById("item_3")); expect( select('#troubleForm2 input[name="brackets[5][]"]') ).toStrictEqual(getByIds("chk_1", "chk_2")); // Brackets in attribute value expect( select('#troubleForm2 input[name="brackets[5][]"]:checked')[0] ).toBe(getById("chk_1")); // Space in attribute value expect(select('cite[title="hello world!"]')[0]).toBe( getById("with_title") ); }); it.skip("E[foo] with namespaced attributes", () => { expect(select("[xml:lang]")).toStrictEqual([ document.documentElement, getById("item_3"), ]); expect(select("*[xml:lang]")).toStrictEqual([ document.documentElement, getById("item_3"), ]); }); it('E[foo="bar"]', () => { expect(select('a[href="#"]')).toStrictEqual( getByIds("link_1", "link_2", "link_3") ); expect( select( '#troubleForm2 input[name="brackets[5][]"][value="2"]' )[0] ).toBe(getById("chk_2")); }); it('E[foo~="bar"]', () => { expect(select('a[class~="internal"]')).toStrictEqual( getByIds("link_1", "link_2") ); expect(select("a[class~=internal]")).toStrictEqual( getByIds("link_1", "link_2") ); expect(select('a[class~=external][href="#"]')[0]).toBe( getById("link_3") ); }); it.skip('E[foo|="en"]', () => { expect(select('*[xml:lang|="es"]')[0]).toBe(getById("item_3")); expect(select('*[xml:lang|="ES"]')[0]).toBe(getById("item_3")); }); it('E[foo^="bar"]', () => { // Matching beginning of string expect(select("div[class^=bro]")).toStrictEqual( getByIds("father", "uncle") ); expect(select('#level1 *[id^="level2_"]')).toStrictEqual( getByIds("level2_1", "level2_2", "level2_3") ); expect(select("#level1 *[id^=level2_]")).toStrictEqual( getByIds("level2_1", "level2_2", "level2_3") ); }); it('E[foo$="bar"]', () => { // Matching end of string expect(select("div[class$=men]")).toStrictEqual( getByIds("father", "uncle") ); expect(select('#level1 *[id$="_1"]')).toStrictEqual( getByIds("level2_1", "level3_1") ); expect(select("#level1 *[id$=_1]")).toStrictEqual( getByIds("level2_1", "level3_1") ); }); it('E[foo*="bar"]', () => { // Matching substring expect(select('div[class*="ers m"]')).toStrictEqual( getByIds("father", "uncle") ); expect(select('#level1 *[id*="2"]')).toStrictEqual( getByIds("level2_1", "level3_2", "level2_2", "level2_3") ); }); }); describe("Structural pseudo-classes", () => { it("E:first-child", () => { expect(select("#level1>*:first-child")[0]).toBe( getById("level2_1") ); expect(select("#level1 *:first-child")).toStrictEqual( getByIds("level2_1", "level3_1", "level_only_child") ); expect(select("#level1>div:first-child")).toHaveLength(0); expect(select("#level1 span:first-child")).toStrictEqual( getByIds("level2_1", "level3_1") ); expect(select("#level1:first-child")).toHaveLength(0); }); it("E:last-child", () => { expect(select("#level1>*:last-child")[0]).toBe(getById("level2_3")); expect(select("#level1 *:last-child")).toStrictEqual( getByIds("level3_2", "level_only_child", "level2_3") ); expect(select("#level1>div:last-child")[0]).toBe( getById("level2_3") ); expect(select("#level1 div:last-child")[0]).toBe( getById("level2_3") ); expect(select("#level1>span:last-child")).toHaveLength(0); }); it("E:nth-child(n)", () => { expect(select("#p *:nth-child(3)")[0]).toBe(getById("link_2")); expect(select("#p a:nth-child(3)")[0]).toBe(getById("link_2")); expect(select("#list > li:nth-child(n+2)")).toStrictEqual( getByIds("item_2", "item_3") ); expect(select("#list > li:nth-child(-n+2)")).toStrictEqual( getByIds("item_1", "item_2") ); }); it("E:nth-of-type(n)", () => { expect(select("#p a:nth-of-type(2)")[0]).toBe(getById("link_2")); expect(select("#p a:nth-of-type(1)")[0]).toBe(getById("link_1")); }); it("E:nth-last-of-type(n)", () => { expect(select("#p a:nth-last-of-type(1)")[0]).toBe( getById("link_2") ); }); it("E:first-of-type", () => { expect(select("#p a:first-of-type")[0]).toBe(getById("link_1")); }); it("E:last-of-type", () => { expect(select("#p a:last-of-type")[0]).toBe(getById("link_2")); }); it("E:only-child", () => { expect(select("#level1 *:only-child")[0]).toBe( getById("level_only_child") ); // Shouldn't return anything expect(select("#level1>*:only-child")).toHaveLength(0); expect(select("#level1:only-child")).toHaveLength(0); expect( select("#level2_2 :only-child:not(:last-child)") ).toHaveLength(0); expect( select("#level2_2 :only-child:not(:first-child)") ).toHaveLength(0); }); it("E:empty", () => { (getById("level3_1") as Element).children = []; // IE forced empty content! expect(select("#level3_1:empty")[0]).toBe(getById("level3_1")); // Shouldn't return anything expect(select("span:empty > *")).toHaveLength(0); }); }); describe(":not", () => { it("E:not(s)", () => { // Negation pseudo-class expect(select('a:not([href="#"])')).toHaveLength(0); expect(select("div.brothers:not(.brothers)")).toHaveLength(0); expect(select('a[class~=external]:not([href="#"])')).toStrictEqual( [] ); expect(select("#p a:not(:first-of-type)")[0]).toBe( getById("link_2") ); expect(select("#p a:not(:last-of-type)")[0]).toBe( getById("link_1") ); expect(select("#p a:not(:nth-of-type(1))")[0]).toBe( getById("link_2") ); expect(select("#p a:not(:nth-last-of-type(1))")[0]).toBe( getById("link_1") ); expect(select("#p a:not([rel~=nofollow])")[0]).toBe( getById("link_2") ); expect(select("#p a:not([rel^=external])")[0]).toBe( getById("link_2") ); expect(select("#p a:not([rel$=nofollow])")[0]).toBe( getById("link_2") ); expect(select('#p a:not([rel$="nofollow"]) > em')[0]).toBe( getById("em") ); expect(select("#list li:not(#item_1):not(#item_3)")[0]).toBe( getById("item_2") ); expect(select("#grandfather > div:not(#uncle) #son")[0]).toBe( getById("son") ); expect(select('#p a:not([rel$="nofollow"]) em')[0]).toBe( getById("em") ); expect(select('#p a:not([rel$="nofollow"])>em')[0]).toBe( getById("em") ); }); }); describe("UI element states pseudo-classes", () => { it("E:disabled", () => { expect(select("#troubleForm > p > *:disabled")[0]).toBe( getById("disabled_text_field") ); }); it("E:checked", () => { expect(select("#troubleForm *:checked")).toStrictEqual( getByIds("checked_box", "checked_radio") ); }); }); describe("Combinators", () => { it("E F", () => { // Descendant expect(select("#fixtures a *")).toStrictEqual( getByIds("em2", "em", "span") ); expect(select("div#fixtures p")[0]).toBe(getById("p")); }); it("E + F", () => { // Adjacent sibling expect(select("div.brothers + div.brothers")[0]).toBe( getById("uncle") ); expect(select("div.brothers + div")[0]).toBe(getById("uncle")); expect(select("#level2_1+span")[0]).toBe(getById("level2_2")); expect(select("#level2_1 + span")[0]).toBe(getById("level2_2")); expect(select("#level2_1 + *")[0]).toBe(getById("level2_2")); expect(select("#level2_2 + span")).toHaveLength(0); expect(select("#level3_1 + span")[0]).toBe(getById("level3_2")); expect(select("#level3_1 + *")[0]).toBe(getById("level3_2")); expect(select("#level3_2 + *")).toHaveLength(0); expect(select("#level3_1 + em")).toHaveLength(0); expect(select("+ div.brothers", select("div.brothers"))[0]).toBe( getById("uncle") ); expect(select("+ div", select("div.brothers"))[0]).toBe( getById("uncle") ); expect(select("+span", select("#level2_1"))[0]).toBe( getById("level2_2") ); expect(select("+ span", select("#level2_1"))[0]).toBe( getById("level2_2") ); expect(select("+ *", select("#level2_1"))[0]).toBe( getById("level2_2") ); expect(select("+ span", select("#level2_2"))).toHaveLength(0); expect(select("+ span", select("#level3_1"))[0]).toBe( getById("level3_2") ); expect(select("+ *", select("#level3_1"))[0]).toBe( getById("level3_2") ); expect(select("+ *", select("#level3_2"))).toHaveLength(0); expect(select("+ em", select("#level3_1"))).toHaveLength(0); }); it("E > F", () => { // Child expect(select("p.first > a")).toStrictEqual( getByIds("link_1", "link_2") ); expect(select("div#grandfather > div")).toStrictEqual( getByIds("father", "uncle") ); expect(select("#level1>span")).toStrictEqual( getByIds("level2_1", "level2_2") ); expect(select("#level1 > span")).toStrictEqual( getByIds("level2_1", "level2_2") ); expect(select("#level2_1 > *")).toStrictEqual( getByIds("level3_1", "level3_2") ); expect(select("div > #nonexistent")).toHaveLength(0); expect(select("> a", select("p.first"))).toStrictEqual( getByIds("link_1", "link_2") ); expect(select("> div", select("div#grandfather"))).toStrictEqual( getByIds("father", "uncle") ); expect(select(">span", select("#level1"))).toStrictEqual( getByIds("level2_1", "level2_2") ); expect(select("> span", select("#level1"))).toStrictEqual( getByIds("level2_1", "level2_2") ); expect(select("> *", select("#level2_1"))).toStrictEqual( getByIds("level3_1", "level3_2") ); expect(select("> #nonexistent", select("div"))).toHaveLength(0); }); it("E ~ F", () => { // General sibling expect(select("h1 ~ ul")[0]).toBe(getById("list")); expect(select("#level2_2 ~ span")).toHaveLength(0); expect(select("#level3_2 ~ *")).toHaveLength(0); expect(select("#level3_1 ~ em")).toHaveLength(0); expect(select("div ~ #level3_2")).toHaveLength(0); expect(select("div ~ #level2_3")).toHaveLength(0); expect(select("#level2_1 ~ span")[0]).toBe(getById("level2_2")); expect(select("#level2_1 ~ *")).toStrictEqual( getByIds("level2_2", "level2_3") ); expect(select("#level3_1 ~ #level3_2")[0]).toBe( getById("level3_2") ); expect(select("span ~ #level3_2")[0]).toBe(getById("level3_2")); expect(select("~ ul", select("h1"))[0]).toBe(getById("list")); expect(select("~ span", select("#level2_2"))).toHaveLength(0); expect(select("~ *", select("#level3_2"))).toHaveLength(0); expect(select("~ em", select("#level3_1"))).toHaveLength(0); expect(select("~ #level3_2", select("div"))).toHaveLength(0); expect(select("~ #level2_3", select("div"))).toHaveLength(0); expect(select("~ span", select("#level2_1"))[0]).toBe( getById("level2_2") ); expect(select("~ *", select("#level2_1"))).toStrictEqual( getByIds("level2_2", "level2_3") ); expect(select("~ #level3_2", select("#level3_1"))[0]).toBe( getById("level3_2") ); expect(select("~ #level3_2", select("span"))[0]).toBe( getById("level3_2") ); }); }); describe("Diverse", () => { it("NW.Dom.match", () => { const element = getById("dupL1"); // Assertions expect(CSSselect.is(element, "span")).toBe(true); expect(CSSselect.is(element, "span#dupL1")).toBe(true); // Child combinator expect(CSSselect.is(element, "div > span")).toBe(true); // Descendant combinator expect(CSSselect.is(element, "#dupContainer span")).toBe(true); // ID only expect(CSSselect.is(element, "#dupL1")).toBe(true); // Class name 1 expect(CSSselect.is(element, "span.span_foo")).toBe(true); // Class name 2 expect(CSSselect.is(element, "span.span_bar")).toBe(true); // First-child pseudoclass expect(CSSselect.is(element, "span:first-child")).toBe(true); // Refutations // Bogus class name expect(CSSselect.is(element, "span.span_wtf")).toBe(false); // Different ID expect(CSSselect.is(element, "#dupL2")).toBe(false); // Different tag name expect(CSSselect.is(element, "div")).toBe(false); // Different ancestry expect(CSSselect.is(element, "span span")).toBe(false); // Different parent expect(CSSselect.is(element, "span > span")).toBe(false); // Different pseudoclass expect(CSSselect.is(element, "span:nth-child(5)")).toBe(false); // Misc. expect(CSSselect.is(getById("link_2"), "a[rel^=external]")).toBe( false ); expect(CSSselect.is(getById("link_1"), "a[rel^=external]")).toBe( true ); expect(CSSselect.is(getById("link_1"), 'a[rel^="external"]')).toBe( true ); expect(CSSselect.is(getById("link_1"), "a[rel^='external']")).toBe( true ); }); it("Equivalent Selectors", () => { expect(select("div.brothers")).toStrictEqual( select("div[class~=brothers]") ); expect(select("div.brothers")).toStrictEqual( select("div[class~=brothers].brothers") ); expect(select("div:not(.brothers)")).toStrictEqual( select("div:not([class~=brothers])") ); expect(select("li ~ li")).toStrictEqual( select("li:not(:first-child)") ); expect(select("ul > li")).toStrictEqual( select("ul > li:nth-child(n)") ); expect(select("ul > li:nth-child(even)")).toStrictEqual( select("ul > li:nth-child(2n)") ); expect(select("ul > li:nth-child(odd)")).toStrictEqual( select("ul > li:nth-child(2n+1)") ); expect(select("ul > li:first-child")).toStrictEqual( select("ul > li:nth-child(1)") ); expect(select("ul > li:last-child")).toStrictEqual( select("ul > li:nth-last-child(1)") ); /* * Opera 10 does not accept values > 128 as a parameter to :nth-child * See */ expect(select("ul > li:nth-child(n-128)")).toStrictEqual( select("ul > li") ); expect(select("ul>li")).toStrictEqual(select("ul > li")); expect(select('#p a:not([rel$="nofollow"])>em')).toStrictEqual( select('#p a:not([rel$="nofollow"]) > em') ); }); it.skip("Multiple Selectors with lang", () => { // The next two assertions should return document-ordered lists of matching elements --Diego Perini expect( select('#list, .first,*[xml:lang="es-us"] , #troubleForm') ).toStrictEqual( getByIds( "p", "link_1", "list", "item_1", "item_3", "troubleForm" ) ); expect( select('#list, .first, *[xml:lang="es-us"], #troubleForm') ).toStrictEqual( getByIds( "p", "link_1", "list", "item_1", "item_3", "troubleForm" ) ); }); it("Multiple Selectors", () => { expect( select( 'form[title*="commas,"], input[value="#commaOne,#commaTwo"]' ) ).toStrictEqual(getByIds("commaParent", "commaChild")); expect( select( 'form[title*="commas,"], input[value="#commaOne,#commaTwo"]' ) ).toStrictEqual(getByIds("commaParent", "commaChild")); }); }); }); css-select-4.2.0/test/qwery.ts000066400000000000000000001156021415613773000162740ustar00rootroot00000000000000import * as helper from "./tools/helper"; const document = helper.getDocument("qwery.html"); import * as CSSselect from "../src"; import * as DomUtils from "domutils"; import type { Element } from "domhandler"; import { parseDOM } from "htmlparser2"; const location = { hash: "" }; CSSselect.pseudos.target = (elem, { adapter }) => adapter.getAttributeValue(elem, "id") === location.hash.substr(1); // --- /* * Adapted from https://github.com/ded/qwery/blob/master/tests/tests.js */ CSSselect.pseudos.humanoid = (e) => CSSselect.is(e, ":matches(li,ol):contains(human)"); const frag = parseDOM( '
      ' + '

      ' + "
      " + '

      ' + '

      ' + "

      " ); const doc = parseDOM( '
      ' + '
      ' + '

      ' + '' + '' + "
      " + '

      ' + "
      " + '
      ' ); const el = DomUtils.getElementById("attr-child-boosh", document); if (!el) throw new Error("Couldn't find element"); // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const pseudos = DomUtils.getElementById("pseudos", document)!.children.filter( DomUtils.isTag ); describe("qwery", () => { describe("Contexts", () => { it("should be able to pass optional context", () => { expect(CSSselect.selectAll(".a", document)).toHaveLength(3); // No context found 3 elements (.a) expect( CSSselect.selectAll( ".a", CSSselect.selectAll("#boosh", document) ) ).toHaveLength(2); // Context found 2 elements (#boosh .a) }); it.skip("should be able to pass qwery result as context", () => { expect( CSSselect.selectAll( ".a", CSSselect.selectAll("#boosh", document) ) ).toHaveLength(2); // Context found 2 elements(.a, #boosh) expect( CSSselect.selectAll(".a", CSSselect.selectAll(".a", document)) ).toHaveLength(0); // Context found 0 elements(.a, .a) expect( CSSselect.selectAll(".a", CSSselect.selectAll(".b", document)) ).toHaveLength(1); // Context found 1 elements(.a, .b) expect( CSSselect.selectAll( ".a", CSSselect.selectAll("#boosh .b", document) ) ).toHaveLength(1); // Context found 1 elements(.a, #boosh .b) expect( CSSselect.selectAll( ".b", CSSselect.selectAll("#boosh .b", document) ) ).toHaveLength(0); // Context found 0 elements(.b, #boosh .b) }); it("should not return duplicates from combinators", () => { expect(CSSselect.selectAll("#boosh,#boosh", document)).toHaveLength( 1 ); // Two booshes dont make a thing go right expect( CSSselect.selectAll("#boosh,.apples,#boosh", document) ).toHaveLength(1); // Two booshes and an apple dont make a thing go right }); it("byId sub-queries within context", () => { expect( CSSselect.selectAll( "#booshTest", CSSselect.selectAll("#boosh", document) ) ).toHaveLength(1); // Found "#id #id" expect( CSSselect.selectAll( ".a.b #booshTest", CSSselect.selectAll("#boosh", document) ) ).toHaveLength(1); // Found ".class.class #id" expect( CSSselect.selectAll( ".a>#booshTest", CSSselect.selectAll("#boosh", document) ) ).toHaveLength(1); // Found ".class>#id" expect( CSSselect.selectAll( ">.a>#booshTest", CSSselect.selectAll("#boosh", document) ) ).toHaveLength(1); // Found ">.class>#id" expect( CSSselect.selectAll( "#boosh", CSSselect.selectAll("#booshTest", document) ) ).toHaveLength(0); // Shouldn't find #boosh (ancestor) within #booshTest (descendent) expect( CSSselect.selectAll( "#boosh", CSSselect.selectAll("#lonelyBoosh", document) ) ).toHaveLength(0); // Shouldn't find #boosh within #lonelyBoosh (unrelated) }); }); describe("CSS 1", () => { it("get element by id", () => { const result = CSSselect.selectAll("#boosh", document); expect(result[0]).toBeTruthy(); // Found element with id=boosh expect(CSSselect.selectAll("h1", document)[0]).toBeTruthy(); // Found 1 h1 }); it("byId sub-queries", () => { expect( CSSselect.selectAll("#boosh #booshTest", document) ).toHaveLength(1); // Found "#id #id" expect( CSSselect.selectAll(".a.b #booshTest", document) ).toHaveLength(1); // Found ".class.class #id" expect( CSSselect.selectAll("#boosh>.a>#booshTest", document) ).toHaveLength(1); // Found "#id>.class>#id" expect(CSSselect.selectAll(".a>#booshTest", document)).toHaveLength( 1 ); // Found ".class>#id" }); it("get elements by class", () => { expect(CSSselect.selectAll("#boosh .a", document)).toHaveLength(2); // Found two elements expect( CSSselect.selectAll("#boosh div.a", document)[0] ).toBeTruthy(); // Found one element expect(CSSselect.selectAll("#boosh div", document)).toHaveLength(2); // Found two {div} elements expect( CSSselect.selectAll("#boosh span", document)[0] ).toBeTruthy(); // Found one {span} element expect( CSSselect.selectAll("#boosh div div", document)[0] ).toBeTruthy(); // Found a single div expect(CSSselect.selectAll("a.odd", document)).toHaveLength(1); // Found single a }); it("combos", () => { expect( CSSselect.selectAll("#boosh div,#boosh span", document) ).toHaveLength(3); // Found 2 divs and 1 span }); it("class with dashes", () => { expect( CSSselect.selectAll(".class-with-dashes", document) ).toHaveLength(1); // Found something }); it("should ignore comment nodes", () => { expect(CSSselect.selectAll("#boosh *", document)).toHaveLength(4); // Found only 4 elements under #boosh }); it("deep messy relationships", () => { /* * These are mostly characterised by a combination of tight relationships and loose relationships * on the right side of the query it's easy to find matches but they tighten up quickly as you * go to the left * they are useful for making sure the dom crawler doesn't stop short or over-extend as it works * up the tree the crawl needs to be comprehensive */ expect( CSSselect.selectAll("div#fixtures > div a", document) ).toHaveLength(5); // Found four results for "div#fixtures > div a" expect( CSSselect.selectAll( ".direct-descend > .direct-descend .lvl2", document ) ).toHaveLength(1); // Found one result for ".direct-descend > .direct-descend .lvl2" expect( CSSselect.selectAll( ".direct-descend > .direct-descend div", document ) ).toHaveLength(1); // Found one result for ".direct-descend > .direct-descend div" expect( CSSselect.selectAll( ".direct-descend > .direct-descend div", document ) ).toHaveLength(1); // Found one result for ".direct-descend > .direct-descend div" expect( CSSselect.selectAll("div#fixtures div ~ a div", document) ).toHaveLength(0); // Found no results for odd query expect( CSSselect.selectAll( ".direct-descend > .direct-descend > .direct-descend ~ .lvl2", document ) ).toHaveLength(0); // Found no results for another odd query }); }); describe("CSS 2", () => { it("get elements by attribute", () => { const wanted = CSSselect.selectAll("#boosh div[test]", document)[0]; const expected = DomUtils.getElementById("booshTest", document); expect(wanted).toBe(expected); // Found attribute expect( CSSselect.selectAll("#boosh div[test=fg]", document)[0] ).toBe(expected); // Found attribute with value expect( CSSselect.selectAll('em[rel~="copyright"]', document) ).toHaveLength(1); // Found em[rel~="copyright"] expect( CSSselect.selectAll('em[nopass~="copyright"]', document) ).toHaveLength(0); // Found em[nopass~="copyright"] }); it("should not throw error by attribute selector", () => { expect(CSSselect.selectAll('[foo^="bar"]', document)).toHaveLength( 1 ); // Found 1 element }); it("crazy town", () => { const el = DomUtils.getElementById("attr-test3", document); expect( CSSselect.selectAll( 'div#attr-test3.found.you[title="whatup duders"]', document )[0] ).toBe(el); // Found the right element }); }); describe("attribute selectors", () => { /* CSS 2 SPEC */ it("[attr]", () => { const expected = DomUtils.getElementById("attr-test-1", document); expect( CSSselect.selectAll("#attributes div[unique-test]", document)[0] ).toBe(expected); // Found attribute with [attr] }); it("[attr=val]", () => { const expected = DomUtils.getElementById("attr-test-2", document); expect( CSSselect.selectAll( '#attributes div[test="two-foo"]', document )[0] ).toBe(expected); // Found attribute with = expect( CSSselect.selectAll( "#attributes div[test='two-foo']", document )[0] ).toBe(expected); // Found attribute with = expect( CSSselect.selectAll( "#attributes div[test=two-foo]", document )[0] ).toBe(expected); // Found attribute with = }); it("[attr~=val]", () => { const expected = DomUtils.getElementById("attr-test-3", document); expect( CSSselect.selectAll("#attributes div[test~=three]", document)[0] ).toBe(expected); // Found attribute with ~= }); it("[attr|=val]", () => { const expected = DomUtils.getElementById("attr-test-2", document); expect( CSSselect.selectAll( '#attributes div[test|="two-foo"]', document )[0] ).toBe(expected); // Found attribute with |= expect( CSSselect.selectAll("#attributes div[test|=two]", document)[0] ).toBe(expected); // Found attribute with |= }); it("[href=#x] special case", () => { const expected = DomUtils.getElementById("attr-test-4", document); expect( CSSselect.selectAll('#attributes a[href="#aname"]', document)[0] ).toBe(expected); // Found attribute with href=#x }); /* CSS 3 SPEC */ it("[attr^=val]", () => { const expected = DomUtils.getElementById("attr-test-2", document); expect( CSSselect.selectAll("#attributes div[test^=two]", document)[0] ).toBe(expected); // Found attribute with ^= }); it("[attr$=val]", () => { const expected = DomUtils.getElementById("attr-test-2", document); expect( CSSselect.selectAll("#attributes div[test$=foo]", document)[0] ).toBe(expected); // Found attribute with $= }); it("[attr*=val]", () => { const expected = DomUtils.getElementById("attr-test-3", document); expect( CSSselect.selectAll("#attributes div[test*=hree]", document)[0] ).toBe(expected); // Found attribute with *= }); it("direct descendants", () => { expect( CSSselect.selectAll( "#direct-descend > .direct-descend", document ) ).toHaveLength(2); // Found two direct descendents expect( CSSselect.selectAll( "#direct-descend > .direct-descend > .lvl2", document ) ).toHaveLength(3); // Found three second-level direct descendents }); it("sibling elements", () => { expect( CSSselect.selectAll( "#sibling-selector ~ .sibling-selector", document ) ).toHaveLength(2); // Found two siblings expect( CSSselect.selectAll( "#sibling-selector ~ div.sibling-selector", document ) ).toHaveLength(2); // Found two siblings expect( CSSselect.selectAll( "#sibling-selector + div.sibling-selector", document ) ).toHaveLength(1); // Found one sibling expect( CSSselect.selectAll( "#sibling-selector + .sibling-selector", document ) ).toHaveLength(1); // Found one sibling expect( CSSselect.selectAll(".parent .oldest ~ .sibling", document) ).toHaveLength(4); // Found four younger siblings expect( CSSselect.selectAll(".parent .middle ~ .sibling", document) ).toHaveLength(2); // Found two younger siblings expect( CSSselect.selectAll(".parent .middle ~ h4", document) ).toHaveLength(1); // Found next sibling by tag expect( CSSselect.selectAll(".parent .middle ~ h4.younger", document) ).toHaveLength(1); // Found next sibling by tag and class expect( CSSselect.selectAll(".parent .middle ~ h3", document) ).toHaveLength(0); // An element can't be its own sibling expect( CSSselect.selectAll(".parent .middle ~ h2", document) ).toHaveLength(0); // Didn't find an older sibling expect( CSSselect.selectAll(".parent .youngest ~ .sibling", document) ).toHaveLength(0); // Found no younger siblings expect( CSSselect.selectAll(".parent .oldest + .sibling", document) ).toHaveLength(1); // Found next sibling expect( CSSselect.selectAll(".parent .middle + .sibling", document) ).toHaveLength(1); // Found next sibling expect( CSSselect.selectAll(".parent .middle + h4", document) ).toHaveLength(1); // Found next sibling by tag expect( CSSselect.selectAll(".parent .middle + h3", document) ).toHaveLength(0); // An element can't be its own sibling expect( CSSselect.selectAll(".parent .middle + h2", document) ).toHaveLength(0); // Didn't find an older sibling expect( CSSselect.selectAll(".parent .youngest + .sibling", document) ).toHaveLength(0); // Found no younger siblings }); }); describe("element-context queries", () => { it("relationship-first queries", () => { expect( CSSselect.selectAll( "> .direct-descend", CSSselect.selectAll("#direct-descend", document) ) ).toHaveLength(2); // Found two direct descendents using > first expect( CSSselect.selectAll( "~ .sibling-selector", CSSselect.selectAll("#sibling-selector", document) ) ).toHaveLength(2); // Found two siblings with ~ first expect( CSSselect.selectAll( "+ .sibling-selector", CSSselect.selectAll("#sibling-selector", document) ) ).toHaveLength(1); // Found one sibling with + first expect( CSSselect.selectAll( "> .tokens a", CSSselect.selectAll(".idless", document)[0] ) ).toHaveLength(1); // Found one sibling from a root with no id }); // Should be able to query on an element that hasn't been inserted into the dom it("detached fragments", () => { expect(CSSselect.selectAll(".a span", frag)).toHaveLength(1); // Should find child elements of fragment expect(CSSselect.selectAll("> div p em", frag)).toHaveLength(2); // Should find child elements of fragment, relationship first }); it("byId sub-queries within detached fragment", () => { expect(CSSselect.selectAll("#emem", frag)).toHaveLength(1); // Found "#id" in fragment expect(CSSselect.selectAll(".d.i #emem", frag)).toHaveLength(1); // Found ".class.class #id" in fragment expect(CSSselect.selectAll(".d #oooo #emem", frag)).toHaveLength(1); // Found ".class #id #id" in fragment expect(CSSselect.selectAll("> div #oooo", frag)).toHaveLength(1); // Found "> .class #id" in fragment expect( CSSselect.selectAll("#oooo", CSSselect.selectAll("#emem", frag)) ).toHaveLength(0); // Shouldn't find #oooo (ancestor) within #emem (descendent) expect( CSSselect.selectAll("#sep", CSSselect.selectAll("#emem", frag)) ).toHaveLength(0); // Shouldn't find #sep within #emem (unrelated) }); it("exclude self in match", () => { expect( CSSselect.selectAll( ".order-matters", CSSselect.selectAll("#order-matters", document)[0] ) ).toHaveLength(4); // Should not include self in element-context queries }); // Because form's have .length it("forms can be used as contexts", () => { expect( CSSselect.selectAll( "*", CSSselect.selectAll("form", document)[0] ) ).toHaveLength(3); // Found 3 elements under <form> }); }); describe("tokenizer", () => { it("should not get weird tokens", () => { expect( CSSselect.selectAll('div .tokens[title="one"]', document)[0] ).toBe(DomUtils.getElementById("token-one", document)); // Found div .tokens[title="one"] expect( CSSselect.selectAll('div .tokens[title="one two"]', document)[0] ).toBe(DomUtils.getElementById("token-two", document)); // Found div .tokens[title="one two"] expect( CSSselect.selectAll( 'div .tokens[title="one two three #%"]', document )[0] ).toBe(DomUtils.getElementById("token-three", document)); // Found div .tokens[title="one two three #%"] expect( CSSselect.selectAll( "div .tokens[title='one two three #%'] a", document )[0] ).toBe(DomUtils.getElementById("token-four", document)); // Found div .tokens[title=\'one two three #%\'] a expect( CSSselect.selectAll( 'div .tokens[title="one two three #%"] a[href$=foo] div', document )[0] ).toBe(DomUtils.getElementById("token-five", document)); // Found div .tokens[title="one two three #%"] a[href=foo] div }); }); describe("interesting syntaxes", () => { it("should parse bad selectors", () => { expect( CSSselect.selectAll("#spaced-tokens p em a", document) .length ).toBeTruthy(); // Found element with funny tokens }); }); describe("order matters", () => { /* *
      *

      * * * *
      */ it("the order of elements return matters", () => { function tag(el: Element) { return el.name.toLowerCase(); } const els = CSSselect.selectAll( "#order-matters .order-matters", document ) as Element[]; expect(tag(els[0])).toBe("p"); // First element matched is a {p} tag expect(tag(els[1])).toBe("a"); // First element matched is a {a} tag expect(tag(els[2])).toBe("em"); // First element matched is a {em} tag expect(tag(els[3])).toBe("b"); // First element matched is a {b} tag }); }); describe("pseudo-selectors", () => { it(":contains", () => { expect( CSSselect.selectAll("li:contains(humans)", document) ).toHaveLength(1); // Found by "element:contains(text)" expect( CSSselect.selectAll(":contains(humans)", document) ).toHaveLength(5); // Found by ":contains(text)", including all ancestors // * Is an important case, can cause weird errors expect( CSSselect.selectAll("*:contains(humans)", document) ).toHaveLength(5); // Found by "*:contains(text)", including all ancestors expect( CSSselect.selectAll("ol:contains(humans)", document) ).toHaveLength(1); // Found by "ancestor:contains(text)" }); it(":not", () => { expect(CSSselect.selectAll(".odd:not(div)", document)).toHaveLength( 1 ); // Found one .odd :not an <a> }); it(":first-child", () => { expect( CSSselect.selectAll("#pseudos div:first-child", document)[0] ).toBe(pseudos[0]); // Found first child expect( CSSselect.selectAll("#pseudos div:first-child", document) ).toHaveLength(1); // Found only 1 }); it(":last-child", () => { const all = DomUtils.getElementsByTagName("div", pseudos); expect( CSSselect.selectAll("#pseudos div:last-child", document)[0] ).toBe(all[all.length - 1]); // Found last child expect( CSSselect.selectAll("#pseudos div:last-child", document) ).toHaveLength(1); // Found only 1 }); it('ol > li[attr="boosh"]:last-child', () => { const expected = DomUtils.getElementById( "attr-child-boosh", document ); expect( CSSselect.selectAll( 'ol > li[attr="boosh"]:last-child', document ) ).toHaveLength(1); // Only 1 element found expect( CSSselect.selectAll( 'ol > li[attr="boosh"]:last-child', document )[0] ).toBe(expected); // Found correct element }); it(":nth-child(odd|even|x)", () => { const second = DomUtils.getElementsByTagName("div", pseudos)[1]; expect( CSSselect.selectAll("#pseudos :nth-child(odd)", document) ).toHaveLength(4); // Found 4 odd elements expect( CSSselect.selectAll("#pseudos div:nth-child(odd)", document) ).toHaveLength(3); // Found 3 odd elements with div tag expect( CSSselect.selectAll("#pseudos div:nth-child(even)", document) ).toHaveLength(3); // Found 3 even elements with div tag expect( CSSselect.selectAll("#pseudos div:nth-child(2)", document)[0] ).toBe(second); // Found 2nd nth-child of pseudos }); it(":nth-child(expr)", () => { const fifth = DomUtils.getElementsByTagName("a", pseudos)[0]; const sixth = DomUtils.getElementsByTagName("div", pseudos)[4]; expect( CSSselect.selectAll("#pseudos :nth-child(3n+1)", document) ).toHaveLength(3); // Found 3 elements expect( CSSselect.selectAll("#pseudos :nth-child(+3n-2)", document) ).toHaveLength(3); // Found 3 elements' expect( CSSselect.selectAll("#pseudos :nth-child(-n+6)", document) ).toHaveLength(6); // Found 6 elements expect( CSSselect.selectAll("#pseudos :nth-child(-n+5)", document) ).toHaveLength(5); // Found 5 elements expect( CSSselect.selectAll("#pseudos :nth-child(3n+2)", document)[1] ).toBe(fifth); // Second :nth-child(3n+2) is the fifth child expect( CSSselect.selectAll("#pseudos :nth-child(3n)", document)[1] ).toBe(sixth); // Second :nth-child(3n) is the sixth child }); it(":nth-last-child(odd|even|x)", () => { const second = DomUtils.getElementsByTagName("div", pseudos)[1]; expect( CSSselect.selectAll("#pseudos :nth-last-child(odd)", document) ).toHaveLength(4); // Found 4 odd elements expect( CSSselect.selectAll( "#pseudos div:nth-last-child(odd)", document ) ).toHaveLength(3); // Found 3 odd elements with div tag expect( CSSselect.selectAll( "#pseudos div:nth-last-child(even)", document ) ).toHaveLength(3); // Found 3 even elements with div tag expect( CSSselect.selectAll( "#pseudos div:nth-last-child(6)", document )[0] ).toBe(second); // 6th nth-last-child should be 2nd of 7 elements }); it(":nth-last-child(expr)", () => { const third = DomUtils.getElementsByTagName("div", pseudos)[2]; expect( CSSselect.selectAll("#pseudos :nth-last-child(3n+1)", document) ).toHaveLength(3); // Found 3 elements expect( CSSselect.selectAll("#pseudos :nth-last-child(3n-2)", document) ).toHaveLength(3); // Found 3 elements expect( CSSselect.selectAll("#pseudos :nth-last-child(-n+6)", document) ).toHaveLength(6); // Found 6 elements expect( CSSselect.selectAll("#pseudos :nth-last-child(-n+5)", document) ).toHaveLength(5); // Found 5 elements expect( CSSselect.selectAll( "#pseudos :nth-last-child(3n+2)", document )[0] ).toBe(third); // First :nth-last-child(3n+2) is the third child }); it(":nth-of-type(expr)", () => { const a = DomUtils.getElementsByTagName("a", pseudos)[0]; expect( CSSselect.selectAll("#pseudos div:nth-of-type(3n+1)", document) ).toHaveLength(2); // Found 2 div elements expect( CSSselect.selectAll("#pseudos a:nth-of-type(3n+1)", document) ).toHaveLength(1); // Found 1 a element expect( CSSselect.selectAll("#pseudos a:nth-of-type(3n+1)", document)[0] ).toBe(a); // Found the right a element expect( CSSselect.selectAll("#pseudos a:nth-of-type(3n)", document) ).toHaveLength(0); // No matches for every third a expect( CSSselect.selectAll("#pseudos a:nth-of-type(odd)", document) ).toHaveLength(1); // Found the odd a expect( CSSselect.selectAll("#pseudos a:nth-of-type(1)", document) ).toHaveLength(1); // Found the first a }); it(":nth-last-of-type(expr)", () => { const second = DomUtils.getElementsByTagName("div", pseudos)[1]; expect( CSSselect.selectAll( "#pseudos div:nth-last-of-type(3n+1)", document ) ).toHaveLength(2); // Found 2 div elements expect( CSSselect.selectAll( "#pseudos a:nth-last-of-type(3n+1)", document ) ).toHaveLength(1); // Found 1 a element expect( CSSselect.selectAll( "#pseudos div:nth-last-of-type(5)", document )[0] ).toBe(second); // 5th nth-last-of-type should be 2nd of 7 elements }); it(":first-of-type", () => { expect( CSSselect.selectAll("#pseudos a:first-of-type", document)[0] ).toBe(DomUtils.getElementsByTagName("a", pseudos)[0]); // Found first a element expect( CSSselect.selectAll("#pseudos a:first-of-type", document) ).toHaveLength(1); // Found only 1 }); it(":last-of-type", () => { const all = DomUtils.getElementsByTagName("div", pseudos); expect( CSSselect.selectAll("#pseudos div:last-of-type", document)[0] ).toBe(all[all.length - 1]); // Found last div element expect( CSSselect.selectAll("#pseudos div:last-of-type", document) ).toHaveLength(1); // Found only 1 }); it(":only-of-type", () => { expect( CSSselect.selectAll("#pseudos a:only-of-type", document)[0] ).toBe(DomUtils.getElementsByTagName("a", pseudos)[0]); // Found the only a element expect( CSSselect.selectAll("#pseudos a:first-of-type", document) ).toHaveLength(1); // Found only 1 }); it(":target", () => { location.hash = ""; expect( CSSselect.selectAll("#pseudos:target", document) ).toHaveLength(0); // #pseudos is not the target location.hash = "#pseudos"; expect( CSSselect.selectAll("#pseudos:target", document) ).toHaveLength(1); // Now #pseudos is the target location.hash = ""; }); it("custom pseudos", () => { // :humanoid implemented just for testing purposes expect(CSSselect.selectAll(":humanoid", document)).toHaveLength(2); // Selected using custom pseudo }); }); describe("is()", () => { it("simple selectors", () => { expect(CSSselect.is(el, "li")).toBeTruthy(); // Tag expect(CSSselect.is(el, "*")).toBeTruthy(); // Wildcard expect(CSSselect.is(el, "#attr-child-boosh")).toBeTruthy(); // #id expect(CSSselect.is(el, "[attr]")).toBeTruthy(); // [attr] expect(CSSselect.is(el, "[attr=boosh]")).toBeTruthy(); // [attr=val] expect(CSSselect.is(el, "div")).toBeFalsy(); // Wrong tag expect(CSSselect.is(el, "#foo")).toBeFalsy(); // Wrong #id expect(CSSselect.is(el, "[foo]")).toBeFalsy(); // Wrong [attr] expect(CSSselect.is(el, "[attr=foo]")).toBeFalsy(); // Wrong [attr=val] }); it("selector sequences", () => { expect( CSSselect.is(el, "li#attr-child-boosh[attr=boosh]") ).toBeTruthy(); // Tag#id[attr=val] expect( CSSselect.is(el, "div#attr-child-boosh[attr=boosh]") ).toBeFalsy(); // Wrong tag#id[attr=val] }); it("selector sequences combinators", () => { expect(CSSselect.is(el, "ol li")).toBeTruthy(); // Tag tag expect(CSSselect.is(el, "ol>li")).toBeTruthy(); // Tag>tag expect(CSSselect.is(el, "ol>li+li")).toBeTruthy(); // Tab>tag+tag expect( CSSselect.is(el, "ol#list li#attr-child-boosh[attr=boosh]") ).toBeTruthy(); // Tag#id tag#id[attr=val] expect( CSSselect.is(el, "ol#list>li#attr-child-boosh[attr=boosh]") ).toBeFalsy(); // Wrong tag#id>tag#id[attr=val] expect( CSSselect.is(el, "ol ol li#attr-child-boosh[attr=boosh]") ).toBeTruthy(); // Tag tag tag#id[attr=val] expect( CSSselect.is( CSSselect.selectAll("#token-four", document)[0], "div#fixtures>div a" ) ).toBeTruthy(); // Tag#id>tag tag where ambiguous middle tag requires backtracking }); it("pseudos", () => { expect(CSSselect.is(el, "li:contains(hello)")).toBe(true); // Matching :contains(text) expect(CSSselect.is(el, "li:contains(human)")).toBe(false); // Non-matching :contains(text) expect( CSSselect.is( CSSselect.selectAll("#list>li", document)[2], ":humanoid" ) ).toBe(true); // Matching custom pseudo expect( CSSselect.is( CSSselect.selectAll("#list>li", document)[1], ":humanoid" ) ).toBe(false); // Non-matching custom pseudo }); it("context", () => { expect( CSSselect.is(el, "li#attr-child-boosh[attr=boosh]", { context: CSSselect.selectAll( "#list", document )[0] as Element, }) ).toBeTruthy(); // Context expect( CSSselect.is(el, "ol#list li#attr-child-boosh[attr=boosh]", { context: CSSselect.selectAll( "#boosh", document )[0] as Element, }) ).toBeFalsy(); // Wrong context }); }); describe("selecting elements in other documents", () => { it("get element by id", () => { const result = CSSselect.selectAll("#hsoob", doc); expect(result[0]).toBeTruthy(); // Found element with id=hsoob }); it("get elements by class", () => { expect(CSSselect.selectAll("#hsoob .a", doc)).toHaveLength(2); // Found two elements expect(CSSselect.selectAll("#hsoob div.a", doc)[0]).toBeTruthy(); // Found one element expect(CSSselect.selectAll("#hsoob div", doc)).toHaveLength(2); // Found two {div} elements expect(CSSselect.selectAll("#hsoob span", doc)[0]).toBeTruthy(); // Found one {span} element expect(CSSselect.selectAll("#hsoob div div", doc)[0]).toBeTruthy(); // Found a single div expect(CSSselect.selectAll("p.odd", doc)).toHaveLength(1); // Found single br }); it("complex selectors", () => { expect(CSSselect.selectAll(".d ~ .sib", doc)).toHaveLength(2); // Found one ~ sibling expect(CSSselect.selectAll(".a .d + .sib", doc)).toHaveLength(1); // Found 2 + siblings expect(CSSselect.selectAll("#hsoob > div > .h", doc)).toHaveLength( 1 ); // Found span using child selectors expect( CSSselect.selectAll('.a .d ~ .sib[test="f g"]', doc) ).toHaveLength(1); // Found 1 ~ sibling with test attribute }); it("byId sub-queries", () => { expect(CSSselect.selectAll("#hsoob #spanny", doc)).toHaveLength(1); // Found "#id #id" in frame expect(CSSselect.selectAll(".a #spanny", doc)).toHaveLength(1); // Found ".class #id" in frame expect( CSSselect.selectAll(".a #booshTest #spanny", doc) ).toHaveLength(1); // Found ".class #id #id" in frame expect(CSSselect.selectAll("> #hsoob", doc)).toHaveLength(1); // Found "> #id" in frame }); it("byId sub-queries within sub-context", () => { expect( CSSselect.selectAll( "#spanny", CSSselect.selectAll("#hsoob", doc) ) ).toHaveLength(1); // Found "#id -> #id" in frame expect( CSSselect.selectAll( ".a #spanny", CSSselect.selectAll("#hsoob", doc) ) ).toHaveLength(1); // Found ".class #id" in frame expect( CSSselect.selectAll( ".a #booshTest #spanny", CSSselect.selectAll("#hsoob", doc) ) ).toHaveLength(1); // Found ".class #id #id" in frame expect( CSSselect.selectAll( ".a > #booshTest", CSSselect.selectAll("#hsoob", doc) ) ).toHaveLength(1); // Found "> .class #id" in frame expect( CSSselect.selectAll( "#booshTest", CSSselect.selectAll("#spanny", doc) ) ).toHaveLength(0); // Shouldn't find #booshTest (ancestor) within #spanny (descendent) expect( CSSselect.selectAll( "#booshTest", CSSselect.selectAll("#lonelyHsoob", doc) ) ).toHaveLength(0); // Shouldn't find #booshTest within #lonelyHsoob (unrelated) }); }); }); css-select-4.2.0/test/sizzle.ts000077500000000000000000001641561415613773000164600ustar00rootroot00000000000000import * as DomUtils from "domutils"; import * as CSSselect from "../src"; import type { Element } from "domhandler"; import { q, t, createWithFriesXML, loadDoc } from "./tools/sizzle-testinit"; import { parseDOM } from "htmlparser2"; let document = loadDoc(); describe("Sizzle", () => { beforeEach(() => { document = loadDoc(); }); it("element", () => { expect.assertions(37); // Empty selector returns an empty array expect(CSSselect.selectAll("", document)).toHaveLength(0); // Text element as context fails silently expect( CSSselect.selectAll("div", document.createTextNode("")) ).toStrictEqual([]); const form = document.getElementById("form"); // Empty string passed to matchesSelector does not match expect(CSSselect.is(form, "")).toBe(false); // Empty selector returns an empty array expect(CSSselect.selectAll(" ", document)).toHaveLength(0); // Empty selector returns an empty array expect(CSSselect.selectAll("\t", document)).toHaveLength(0); // Select all expect(CSSselect.selectAll("*", document).length >= 30).toBe(true); const all = CSSselect.selectAll("*", document); const good = all.every((el) => el.nodeType !== 8); // Select all elements, no comment nodes expect(good).toBe(true); // Element Selector t("html", ["html"]); // Element Selector t("body", ["body"]); // Element Selector t("#qunit-fixture p", ["firstp", "ap", "sndp", "en", "sap", "first"]); // Leading space t(" #qunit-fixture p", ["firstp", "ap", "sndp", "en", "sap", "first"]); // Leading tab t("\t#qunit-fixture p", ["firstp", "ap", "sndp", "en", "sap", "first"]); // Leading carriage return t("\r#qunit-fixture p", ["firstp", "ap", "sndp", "en", "sap", "first"]); // Leading line feed t("\n#qunit-fixture p", ["firstp", "ap", "sndp", "en", "sap", "first"]); // Leading form feed t("\f#qunit-fixture p", ["firstp", "ap", "sndp", "en", "sap", "first"]); // Trailing space t("#qunit-fixture p ", ["firstp", "ap", "sndp", "en", "sap", "first"]); // Trailing tab t("#qunit-fixture p\t", ["firstp", "ap", "sndp", "en", "sap", "first"]); // Trailing carriage return t("#qunit-fixture p\r", ["firstp", "ap", "sndp", "en", "sap", "first"]); // Trailing line feed t("#qunit-fixture p\n", ["firstp", "ap", "sndp", "en", "sap", "first"]); // Trailing form feed t("#qunit-fixture p\f", ["firstp", "ap", "sndp", "en", "sap", "first"]); // Parent Element t("dl ol", ["empty", "listWithTabIndex"]); // Parent Element (non-space descendant combinator) t("dl\tol", ["empty", "listWithTabIndex"]); const obj1 = document.getElementById("object1"); // Object/param as context expect(CSSselect.selectAll("param", obj1)).toHaveLength(2); // Finding selects with a context. t( "select", ["select1", "select2", "select3", "select4", "select5"], form ); /* * Check for unique-ness and sort order * Check for duplicates: p, div p */ expect(CSSselect.selectAll("p, div p", document)).toStrictEqual( CSSselect.selectAll("p", document) ); // Checking sort order t("h2, h1", ["qunit-header", "qunit-banner", "qunit-userAgent"]); // Checking sort order t("#qunit-fixture p, #qunit-fixture p a", [ "firstp", "simon1", "ap", "google", "groups", "anchor1", "mark", "sndp", "en", "yahoo", "sap", "anchor2", "simon", "first", ]); // Test Conflict ID const lengthtest = document.getElementById("lengthtest"); // Finding element with id of ID. t("#idTest", ["idTest"], lengthtest); // Finding element with id of ID. t("[name='id']", ["idTest"], lengthtest); // Finding elements with id of ID. t("input[id='idTest']", ["idTest"], lengthtest); const siblingTest = document.getElementById("siblingTest"); // Element-rooted QSA does not select based on document context t("div em", [], siblingTest); // Element-rooted QSA does not select based on document context t("div em, div em, div em:not(div em)", [], siblingTest); // Escaped commas do not get treated with an id in element-rooted QSA t("div em, em\\,", [], siblingTest); const iframe = document.getElementById("iframe"); iframe.children = parseDOM("

      bar

      "); iframe.children.forEach((e) => { e.parent = iframe; }); // Other document as context expect(CSSselect.selectAll("p:contains(bar)", iframe)).toStrictEqual([ DomUtils.getElementById("foo", iframe.children) as Element, ]); iframe.children = []; let markup = ""; for (let i = 0; i < 100; i++) { markup = `
      ${markup}
      `; } const [html] = parseDOM(markup); DomUtils.appendChild(document.body, html); // No stack or performance problems with large amounts of descendents expect( CSSselect.selectAll("body div div div", document).length ).toBeTruthy(); // No stack or performance problems with large amounts of descendents expect( CSSselect.selectAll("body>div div div", document).length ).toBeTruthy(); DomUtils.removeElement(html); // Real use case would be using .watch in browsers with window.watch (see Issue #157) const elem = document.createElement("toString"); elem.attribs.id = "toString"; DomUtils.appendChild(q("qunit-fixture")[0], elem); // Element name matches Object.prototype property t("tostring#toString", ["toString"]); DomUtils.removeElement(elem); }); it("XML Document Selectors", () => { let xml = createWithFriesXML(); expect.assertions(11); // Element Selector with underscore expect(CSSselect.selectAll("foo_bar", xml)).toHaveLength(1); // Class selector expect(CSSselect.selectAll(".component", xml)).toHaveLength(1); // Attribute selector for class expect(CSSselect.selectAll("[class*=component]", xml)).toHaveLength(1); // Attribute selector with name expect(CSSselect.selectAll("property[name=prop2]", xml)).toHaveLength( 1 ); // Attribute selector with name expect(CSSselect.selectAll("[name=prop2]", xml)).toHaveLength(1); // Attribute selector with ID expect(CSSselect.selectAll("#seite1", xml)).toHaveLength(1); // Attribute selector with ID expect(CSSselect.selectAll("component#seite1", xml)).toHaveLength(1); // Attribute selector filter with ID expect( CSSselect.selectAll("component", xml).filter((node) => CSSselect.is(node, "#seite1") ) ).toHaveLength(1); // Descendent selector and dir caching expect(CSSselect.selectAll("meta property thing", xml)).toHaveLength(2); // Check for namespaced element expect( CSSselect.is( xml.filter((t) => t.type === "tag").pop(), "soap\\:Envelope", { xmlMode: true, } ) ).toBe(true); xml = parseDOM( "", { xmlMode: true, } ); // Non-qSA path correctly handles numeric ids (jQuery #14142) expect(CSSselect.selectAll("elem:not(:has(*))", xml)).toHaveLength(1); }); it("broken", () => { expect.assertions(26); const broken = (selector: string) => expect(() => CSSselect.compile(selector)).toThrow(Error); broken("["); broken("("); broken("{"); broken("()"); broken("<>"); broken("{}"); broken(","); broken(",a"); broken("a,"); // Hangs on IE 9 if regular expression is inefficient broken("[id=012345678901234567890123456789"); // Doesn't exist broken(":visble"); broken(":nth-child"); /* * Sigh again. IE 9 thinks this is also a real selector * Not super critical that we fix this case */ broken(":nth-child(-)"); /* * Sigh. WebKit thinks this is a real selector in qSA * They've already fixed this and it'll be coming into * Current browsers soon. Currently, Safari 5.0 still has this problem */ broken(":nth-child(asdf)"); broken(":nth-child(2n+-0)"); broken(":nth-child(2+0)"); broken(":nth-child(- 1n)"); broken(":nth-child(-1 n)"); broken(":first-child(n)"); broken(":last-child(n)"); broken(":only-child(n)"); broken(":nth-last-last-child(1)"); broken(":first-last-child"); broken(":last-last-child"); broken(":only-last-child"); // Make sure attribute value quoting works correctly. See: #6093 parseDOM( "" ).forEach((node) => DomUtils.appendChild(document.getElementById("form"), node) ); // Shouldn't be matching those inner brackets broken("input[name=foo[baz]]"); }); it("id", () => { expect.assertions(34); // ID Selector t("#body", ["body"]); // ID Selector w/ Element t("body#body", ["body"]); // ID Selector w/ Element t("ul#first", []); // ID selector with existing ID descendant t("#firstp #simon1", ["simon1"]); // ID selector with non-existant descendant t("#firstp #foobar", []); // ID selector using UTF8 t("#台北Táiběi", ["台北Táiběi"]); // Multiple ID selectors using UTF8 t("#台北Táiběi, #台北", ["台北Táiběi", "台北"]); // Descendant ID selector using UTF8 t("div #台北", ["台北"]); // Child ID selector using UTF8 t("form > #台北", ["台北"]); // Escaped ID t("#foo\\:bar", ["foo:bar"]); // Escaped ID with descendent t("#foo\\:bar span:not(:input)", ["foo_descendent"]); // Escaped ID t("#test\\.foo\\[5\\]bar", ["test.foo[5]bar"]); // Descendant escaped ID t("div #foo\\:bar", ["foo:bar"]); // Descendant escaped ID t("div #test\\.foo\\[5\\]bar", ["test.foo[5]bar"]); // Child escaped ID t("form > #foo\\:bar", ["foo:bar"]); // Child escaped ID t("form > #test\\.foo\\[5\\]bar", ["test.foo[5]bar"]); const [fiddle] = parseDOM( "
      " ); DomUtils.appendChild(document.getElementById("qunit-fixture"), fiddle); // Escaped ID as context t( "> span", ["fiddleSpan"], CSSselect.selectOne("#fiddle\\\\Foo", document) ); DomUtils.removeElement(fiddle); // ID Selector, child ID present t("#form > #radio1", ["radio1"]); // Bug #267 // ID Selector, not an ancestor ID t("#form #first", []); // ID Selector, not a child ID t("#form > #option1a", []); // All Children of ID t("#foo > *", ["sndp", "en", "sap"]); // All Children of ID with no children t("#firstUL > *", []); // ID selector with same value for a name attribute expect( (CSSselect.selectOne("#tName1", document) as Element).attribs.id ).toBe("tName1"); // ID selector non-existing but name attribute on an A tag t("#tName2", []); // Leading ID selector non-existing but name attribute on an A tag t("#tName2 span", []); // Leading ID selector existing, retrieving the child t("#tName1 span", ["tName1-span"]); // Ending with ID expect( (CSSselect.selectOne("div > div #tName1", document) as Element) .attribs.id ).toBe( (CSSselect.selectOne("#tName1-span", document)?.parent as Element) .attribs.id ); parseDOM("").forEach((node) => DomUtils.appendChild(document.getElementById("form"), node) ); // ID Selector contains backslash t("#backslash\\\\foo", ["backslash\\foo"]); // ID Selector on Form with an input that has a name of 'id' t("#lengthtest", ["lengthtest"]); // ID selector with non-existant ancestor t("#asdfasdf #foobar", []); // Bug #986 // ID selector within the context of another element t("div#form", [], document.body); // Underscore ID t("#types_all", ["types_all"]); // Dash ID t("#qunit-fixture", ["qunit-fixture"]); // ID with weird characters in it t("#name\\+value", ["name+value"]); }); it("class", () => { expect.assertions(27); // Class Selector t(".blog", ["mark", "simon"]); // Class Selector t(".GROUPS", ["groups"]); // Class Selector t(".blog.link", ["simon"]); // Class Selector w/ Element t("a.blog", ["mark", "simon"]); // Parent Class Selector t("p .blog", ["mark", "simon"]); // Class selector using UTF8 t(".台北Táiběi", ["utf8class1"]); // Class selector using UTF8 t(".台北", ["utf8class1", "utf8class2"]); // Class selector using UTF8 t(".台北Táiběi.台北", ["utf8class1"]); // Class selector using UTF8 t(".台北Táiběi, .台北", ["utf8class1", "utf8class2"]); // Descendant class selector using UTF8 t("div .台北Táiběi", ["utf8class1"]); // Child class selector using UTF8 t("form > .台北Táiběi", ["utf8class1"]); // Escaped Class t(".foo\\:bar", ["foo:bar"]); // Escaped Class t(".test\\.foo\\[5\\]bar", ["test.foo[5]bar"]); // Descendant escaped Class t("div .foo\\:bar", ["foo:bar"]); // Descendant escaped Class t("div .test\\.foo\\[5\\]bar", ["test.foo[5]bar"]); // Child escaped Class t("form > .foo\\:bar", ["foo:bar"]); // Child escaped Class t("form > .test\\.foo\\[5\\]bar", ["test.foo[5]bar"]); const div = document.createElement("div"); div.children = parseDOM( "
      " ); div.children.forEach((e) => { e.parent = div; }); // Finding a second class. expect(CSSselect.selectAll(".e", div)).toStrictEqual([ div.children[0] as Element, ]); const lastChild = div.children[div.children.length - 1] as Element; lastChild.attribs.class = "e"; // Finding a modified class. expect(CSSselect.selectAll(".e", div)).toStrictEqual([ div.children[0] as Element, lastChild, ]); // .null does not match an element with no class expect(CSSselect.is(div, ".null")).toBe(false); // .null does not match an element with no class expect(CSSselect.is(div.children[0], ".null div")).toBe(false); div.attribs.class = "null"; // .null matches element with class 'null' expect(CSSselect.is(div, ".null")).toBe(true); // Caching system respects DOM changes expect(CSSselect.is(div.children[0], ".null div")).toBe(true); // Testing class on document doesn't error expect(CSSselect.is(document, ".foo")).toBe(false); lastChild.attribs.class += " hasOwnProperty toString"; // Testing class on global object doesn't error expect(CSSselect.is(global, ".foo")).toBe(false); // Classes match Object.prototype properties expect( CSSselect.selectAll(".e.hasOwnProperty.toString", div) ).toStrictEqual([lastChild]); const [div2] = parseDOM( "
      " ); // Class selector against SVG expect(CSSselect.selectAll(".foo", div2)).toHaveLength(1); }); it("name", () => { expect.assertions(13); // Name selector t("input[name=action]", ["text1"]); // Name selector with single quotes t("input[name='action']", ["text1"]); // Name selector with double quotes t('input[name="action"]', ["text1"]); // Name selector non-input t("[name=example]", ["name-is-example"]); // Name selector non-input t("[name=div]", ["name-is-div"]); // Name selector non-input t("*[name=iframe]", ["iframe"]); // Name selector for grouped input t("input[name='types[]']", ["types_all", "types_anime", "types_movie"]); const form1 = document.getElementById("form"); // Name selector within the context of another element t("input[name=action]", ["text1"], form1); // Name selector for grouped form element within the context of another element t("input[name='foo[bar]']", ["hidden2"], form1); const [form2] = parseDOM("
      "); DomUtils.appendChild(document.body, form2); // Make sure that rooted queries on forms (with possible expandos) work. expect(CSSselect.selectAll("input", form2)).toHaveLength(1); DomUtils.removeElement(form2); // Find elements that have similar IDs t("[name=tName1]", ["tName1ID"]); // Find elements that have similar IDs t("[name=tName2]", ["tName2ID"]); // Find elements that have similar IDs t("#tName2ID", ["tName2ID"]); }); it("multiple", () => { expect.assertions(6); // Comma Support t("h2, #qunit-fixture p", [ "qunit-banner", "qunit-userAgent", "firstp", "ap", "sndp", "en", "sap", "first", ]); // Comma Support t("h2 , #qunit-fixture p", [ "qunit-banner", "qunit-userAgent", "firstp", "ap", "sndp", "en", "sap", "first", ]); // Comma Support t("h2 , #qunit-fixture p", [ "qunit-banner", "qunit-userAgent", "firstp", "ap", "sndp", "en", "sap", "first", ]); // Comma Support t("h2,#qunit-fixture p", [ "qunit-banner", "qunit-userAgent", "firstp", "ap", "sndp", "en", "sap", "first", ]); // Comma Support t("h2,#qunit-fixture p ", [ "qunit-banner", "qunit-userAgent", "firstp", "ap", "sndp", "en", "sap", "first", ]); // Comma Support t("h2\t,\r#qunit-fixture p\n", [ "qunit-banner", "qunit-userAgent", "firstp", "ap", "sndp", "en", "sap", "first", ]); }); it("child and adjacent", () => { expect.assertions(38); // Child t("p > a", ["simon1", "google", "groups", "mark", "yahoo", "simon"]); // Child t("p> a", ["simon1", "google", "groups", "mark", "yahoo", "simon"]); // Child t("p >a", ["simon1", "google", "groups", "mark", "yahoo", "simon"]); // Child t("p>a", ["simon1", "google", "groups", "mark", "yahoo", "simon"]); // Child w/ Class t("p > a.blog", ["mark", "simon"]); // All Children t("code > *", ["anchor1", "anchor2"]); // All Grandchildren t("p > * > *", ["anchor1", "anchor2"]); // Adjacent t("#qunit-fixture a + a", ["groups", "tName2ID"]); // Adjacent t("#qunit-fixture a +a", ["groups", "tName2ID"]); // Adjacent t("#qunit-fixture a+ a", ["groups", "tName2ID"]); // Adjacent t("#qunit-fixture a+a", ["groups", "tName2ID"]); // Adjacent t("p + p", ["ap", "en", "sap"]); // Adjacent t("p#firstp + p", ["ap"]); // Adjacent t("p[lang=en] + p", ["sap"]); // Adjacent t("a.GROUPS + code + a", ["mark"]); // Comma, Child, and Adjacent t("#qunit-fixture a + a, code > a", [ "groups", "anchor1", "anchor2", "tName2ID", ]); // Element Preceded By t("#qunit-fixture p ~ div", [ "foo", "nothiddendiv", "moretests", "tabindex-tests", "liveHandlerOrder", "siblingTest", ]); // Element Preceded By t("#first ~ div", [ "moretests", "tabindex-tests", "liveHandlerOrder", "siblingTest", ]); // Element Preceded By t("#groups ~ a", ["mark"]); // Element Preceded By t("#length ~ input", ["idTest"]); // Element Preceded By t("#siblingfirst ~ em", ["siblingnext", "siblingthird"]); // Element Preceded By (multiple) t("#siblingTest em ~ em ~ em ~ span", ["siblingspan"]); // Element Preceded By, Containing t("#liveHandlerOrder ~ div em:contains('1')", ["siblingfirst"]); const siblingFirst = document.getElementById("siblingfirst"); // Element Preceded By with a context. t("~ em", ["siblingnext", "siblingthird"], siblingFirst); // Element Directly Preceded By with a context. t("+ em", ["siblingnext"], siblingFirst); const en = document.getElementById("en"); // Compound selector with context, beginning with sibling test. t("+ p, a", ["yahoo", "sap"], en); // Compound selector with context, containing sibling test. t("a, + p", ["yahoo", "sap"], en); // Multiple combinators selects all levels t("#siblingTest em *", [ "siblingchild", "siblinggrandchild", "siblinggreatgrandchild", ]); // Multiple combinators selects all levels t("#siblingTest > em *", [ "siblingchild", "siblinggrandchild", "siblinggreatgrandchild", ]); // Multiple sibling combinators doesn't miss general siblings t("#siblingTest > em:first-child + em ~ span", ["siblingspan"]); // Combinators are not skipped when mixing general and specific t("#siblingTest > em:contains('x') + em ~ span", []); // Parent div for next test is found via ID (#8310) expect(CSSselect.selectAll("#listWithTabIndex", document)).toHaveLength( 1 ); // Make sure the temporary id assigned by sizzle is cleared out (#8310) expect(CSSselect.selectAll("#__sizzle__", document)).toHaveLength(0); // Parent div for previous test is still found via ID (#8310) expect(CSSselect.selectAll("#listWithTabIndex", document)).toHaveLength( 1 ); // Verify deep class selector t("div.blah > p > a", []); // No element deep selector t("div.foo > span > a", []); // Non-existant ancestors t(".fototab > .thumbnails > a", []); // Child of scope t( ":scope > label", ["scopeTest--child"], CSSselect.selectOne("#scopeTest", document) ); }); it("attributes", () => { expect.assertions(77); // Attribute Exists t("#qunit-fixture a[title]", ["google"]); // Attribute Exists (case-insensitive) t("#qunit-fixture a[TITLE]", ["google"]); // Attribute Exists t("#qunit-fixture *[title]", ["google"]); // Attribute Exists t("#qunit-fixture [title]", ["google"]); // Attribute Exists t("#qunit-fixture a[ title ]", ["google"]); // Boolean attribute exists t("#select2 option[selected]", ["option2d"]); // Boolean attribute equals t("#select2 option[selected='selected']", ["option2d"]); // Attribute Equals t("#qunit-fixture a[rel='bookmark']", ["simon1"]); // Attribute Equals t("#qunit-fixture a[rel='bookmark']", ["simon1"]); // Attribute Equals t("#qunit-fixture a[rel=bookmark]", ["simon1"]); // Attribute Equals t("#qunit-fixture a[href='http://www.google.com/']", ["google"]); // Attribute Equals t("#qunit-fixture a[ rel = 'bookmark' ]", ["simon1"]); // Attribute Equals Number t("#qunit-fixture option[value=1]", [ "option1b", "option2b", "option3b", "option4b", "option5c", ]); // Attribute Equals Number t("#qunit-fixture li[tabIndex=-1]", ["foodWithNegativeTabIndex"]); document.getElementById("anchor2").attribs.href = "#2"; // `href` Attribute t("p a[href^=#]", ["anchor2"]); t("p a[href*=#]", ["simon1", "anchor2"]); // `for` Attribute t("form label[for]", ["label-for"]); // `for` Attribute in form t("#form [for=action]", ["label-for"]); // Attribute containing [] t("input[name^='foo[']", ["hidden2"]); // Attribute containing [] t("input[name^='foo[bar]']", ["hidden2"]); // Attribute containing [] t("input[name*='[bar]']", ["hidden2"]); // Attribute containing [] t("input[name$='bar]']", ["hidden2"]); // Attribute containing [] t("input[name$='[bar]']", ["hidden2"]); // Attribute containing [] t("input[name$='foo[bar]']", ["hidden2"]); // Attribute containing [] t("input[name*='foo[bar]']", ["hidden2"]); // Without context, single-quoted attribute containing ',' t("input[data-comma='0,1']", ["el12087"], document); // Without context, double-quoted attribute containing ',' t('input[data-comma="0,1"]', ["el12087"]); // With context, single-quoted attribute containing ',' t( "input[data-comma='0,1']", ["el12087"], document.getElementById("t12087") ); // With context, double-quoted attribute containing ',' t( 'input[data-comma="0,1"]', ["el12087"], document.getElementById("t12087") ); // Multiple Attribute Equals t("#form input[type='radio'], #form input[type='hidden']", [ "radio1", "radio2", "hidden1", ]); // Multiple Attribute Equals t("#form input[type='radio'], #form input[type=\"hidden\"]", [ "radio1", "radio2", "hidden1", ]); // Multiple Attribute Equals t("#form input[type='radio'], #form input[type=hidden]", [ "radio1", "radio2", "hidden1", ]); // Attribute selector using UTF8 t("span[lang=中文]", ["台北"]); // Attribute Begins With t("a[href ^= 'http://www']", ["google", "yahoo"]); // Attribute Ends With t("a[href $= 'org/']", ["mark"]); // Attribute Contains t("a[href *= 'google']", ["google", "groups"]); // Attribute Is Not Equal t("#ap a[hreflang!='en']", ["google", "groups", "anchor1"]); const opt = document.getElementById("option1a"); opt.attribs.test = ""; // Attribute Is Not Equal Matches expect(CSSselect.is(opt, "[id*=option1][type!=checkbox]")).toBe(true); // Attribute With No Quotes Contains Matches expect(CSSselect.is(opt, "[id*=option1]")).toBe(true); // Attribute With No Quotes No Content Matches expect(CSSselect.is(opt, "[test=]")).toBe(true); // Attribute with empty string value does not match startsWith selector (^=) expect(CSSselect.is(opt, "[test^='']")).toBe(false); // Attribute With No Quotes Equals Matches expect(CSSselect.is(opt, "[id=option1a]")).toBe(true); // Attribute With No Quotes Href Contains Matches expect( CSSselect.is(document.getElementById("simon1"), "a[href*=#]") ).toBe(true); // Empty values t("#select1 option[value='']", ["option1a"]); // Empty values t("#select1 option[value!='']", ["option1b", "option1c", "option1d"]); // Select options via :selected t("#select1 option:selected", ["option1a"]); // Select options via :selected t("#select2 option:selected", ["option2d"]); // Select options via :selected t("#select3 option:selected", ["option3b", "option3c"]); // Select options via :selected t("select[name='select2'] option:selected", ["option2d"]); // Grouped Form Elements t("input[name='foo[bar]']", ["hidden2"]); const input = document.getElementById("text1"); input.attribs.title = "Don't click me"; // Quote within attribute value does not mess up tokenizer expect(CSSselect.is(input, 'input[title="Don\'t click me"]')).toBe( true ); // See jQuery #12303 input.attribs["data-pos"] = ":first"; // POS within attribute value is treated as an attribute value expect(CSSselect.is(input, "input[data-pos=\\:first]")).toBe(true); // POS within attribute value is treated as an attribute value expect(CSSselect.is(input, "input[data-pos=':first']")).toBe(true); // POS within attribute value after pseudo is treated as an attribute value expect(CSSselect.is(input, ":input[data-pos=':first']")).toBe(true); delete input.attribs["data-pos"]; /* * Make sure attribute value quoting works correctly. See jQuery #6093; #6428; #13894 * Use seeded results to bypass querySelectorAll optimizations */ const attrbad = [ ...parseDOM( "" + "" + "" + "" + "" + "" + "" + "" + "", { decodeEntities: true } ), ] as Element[]; attrbad.forEach((attr) => DomUtils.appendChild(document.getElementById("qunit-fixture"), attr) ); // Underscores don't need escaping t("input[id=types_all]", ["types_all"]); // Escaped space t("input[name=foo\\ bar]", ["attrbad_space"]); // Escaped dot t("input[name=foo\\.baz]", ["attrbad_dot"]); // Escaped brackets t("input[name=foo\\[baz\\]]", ["attrbad_brackets"]); // Escaped quote + right bracket t("input[data-attr='foo_baz\\']']", ["attrbad_injection"]); // Quoted quote t("input[data-attr='\\'']", ["attrbad_quote"]); // Quoted backslash t("input[data-attr='\\\\']", ["attrbad_backslash"]); // Quoted backslash quote t("input[data-attr='\\\\\\'']", ["attrbad_backslash_quote"]); // Quoted backslash backslash t("input[data-attr='\\\\\\\\']", ["attrbad_backslash_backslash"]); // Quoted backslash backslash (numeric escape) t("input[data-attr='\\5C\\\\']", ["attrbad_backslash_backslash"]); // Quoted backslash backslash (numeric escape with trailing space) t("input[data-attr='\\5C \\\\']", ["attrbad_backslash_backslash"]); // Quoted backslash backslash (numeric escape with trailing tab) t("input[data-attr='\\5C\t\\\\']", ["attrbad_backslash_backslash"]); // Long numeric escape (BMP) t("input[data-attr='\\04e00']", ["attrbad_unicode"]); document.getElementById("attrbad_unicode").attribs["data-attr"] = "\uD834\uDF06A"; /* * It was too much code to fix Safari 5.x Supplemental Plane crashes (see ba5f09fa404379a87370ec905ffa47f8ac40aaa3) * Long numeric escape (non-BMP) */ t("input[data-attr='\\01D306A']", ["attrbad_unicode"]); attrbad.forEach((attr) => DomUtils.removeElement(attr)); // `input[type=text]` t("#form input[type=text]", ["text1", "text2", "hidden2", "name"]); // `input[type=search]` t("#form input[type=search]", ["search"]); // `script[src]` (jQuery #13777) t("#moretests script[src]", ["script-src"]); // #3279 const div = document.createElement("div"); div.children = parseDOM("
      "); // Finding by attribute with escaped characters. expect(CSSselect.selectAll("[xml\\:test]", div)).toStrictEqual([ div.children[0] as Element, ]); const foo = document.getElementById("foo"); // Object.prototype property "constructor" (negative)', t("[constructor]", []); // Gecko Object.prototype property "watch" (negative)', t("[watch]", []); // @ts-expect-error TS doesn't want us to override `constructor` foo.attribs.constructor = "foo"; foo.attribs.watch = "bar"; // Object.prototype property "constructor"', t("[constructor='foo']", ["foo"]); // Gecko Object.prototype property "watch"', t("[watch='bar']", ["foo"]); // Value attribute is retrieved correctly t("input[value=Test]", ["text1", "text2"]); }); it("pseudo - (parent|empty)", () => { expect.assertions(3); // Empty t("ul:empty", ["firstUL"]); // Empty with comment node t("ol:empty", ["empty"]); // Is A Parent t("#qunit-fixture p:parent", [ "firstp", "ap", "sndp", "en", "sap", "first", ]); }); it("pseudo - (first|last|only)-(child|of-type)", () => { expect.assertions(12); // First Child t("p:first-child", ["firstp", "sndp"]); // First Child (leading id) t("#qunit-fixture p:first-child", ["firstp", "sndp"]); // First Child (leading class) t(".nothiddendiv div:first-child", ["nothiddendivchild"]); // First Child (case-insensitive) t("#qunit-fixture p:FIRST-CHILD", ["firstp", "sndp"]); // Last Child t("p:last-child", ["sap"]); // Last Child (leading id) t("#qunit-fixture a:last-child", [ "simon1", "anchor1", "mark", "yahoo", "anchor2", "simon", "liveLink1", "liveLink2", ]); // Only Child t("#qunit-fixture a:only-child", [ "simon1", "anchor1", "yahoo", "anchor2", "liveLink1", "liveLink2", ]); // First-of-type t("#qunit-fixture > p:first-of-type", ["firstp"]); // Last-of-type t("#qunit-fixture > p:last-of-type", ["first"]); // Only-of-type t("#qunit-fixture > :only-of-type", [ "name+value", "firstUL", "empty", "floatTest", "iframe", "table", ]); // Verify that the child position isn't being cached improperly const secondChildren = CSSselect.selectAll("p:nth-child(2)", document); const newNodes = secondChildren.map((child) => { const [node] = parseDOM("
      "); DomUtils.prepend(child, node); return node; }); // No longer second child t("p:nth-child(2)", []); newNodes.forEach((node) => DomUtils.removeElement(node)); // Restored second child t("p:nth-child(2)", ["ap", "en"]); }); it("pseudo - nth-child", () => { expect.assertions(29); // Nth-child t("p:nth-child(1)", ["firstp", "sndp"]); // Nth-child (with whitespace) t("p:nth-child( 1 )", ["firstp", "sndp"]); // Nth-child (case-insensitive) t("#select1 option:NTH-child(3)", ["option1c"]); // Not nth-child t("#qunit-fixture p:not(:nth-child(1))", ["ap", "en", "sap", "first"]); // Nth-child(2) t("#qunit-fixture form#form > *:nth-child(2)", ["text1"]); // Nth-child(2) t("#qunit-fixture form#form > :nth-child(2)", ["text1"]); // Nth-child(-1) t("#select1 option:nth-child(-1)", []); // Nth-child(3) t("#select1 option:nth-child(3)", ["option1c"]); // "Nth-child(0n+3)" t("#select1 option:nth-child(0n+3)", ["option1c"]); // Nth-child(1n+0) t("#select1 option:nth-child(1n+0)", [ "option1a", "option1b", "option1c", "option1d", ]); // Nth-child(1n) t("#select1 option:nth-child(1n)", [ "option1a", "option1b", "option1c", "option1d", ]); // Nth-child(n) t("#select1 option:nth-child(n)", [ "option1a", "option1b", "option1c", "option1d", ]); // Nth-child(even) t("#select1 option:nth-child(even)", ["option1b", "option1d"]); // Nth-child(odd) t("#select1 option:nth-child(odd)", ["option1a", "option1c"]); // Nth-child(2n) t("#select1 option:nth-child(2n)", ["option1b", "option1d"]); // Nth-child(2n+1) t("#select1 option:nth-child(2n+1)", ["option1a", "option1c"]); // Nth-child(2n + 1) t("#select1 option:nth-child(2n + 1)", ["option1a", "option1c"]); // Nth-child(+2n + 1) t("#select1 option:nth-child(+2n + 1)", ["option1a", "option1c"]); // Nth-child(3n) t("#select1 option:nth-child(3n)", ["option1c"]); // Nth-child(3n+1) t("#select1 option:nth-child(3n+1)", ["option1a", "option1d"]); // Nth-child(3n+2) t("#select1 option:nth-child(3n+2)", ["option1b"]); // Nth-child(3n+3) t("#select1 option:nth-child(3n+3)", ["option1c"]); // Nth-child(3n-1) t("#select1 option:nth-child(3n-1)", ["option1b"]); // Nth-child(3n-2) t("#select1 option:nth-child(3n-2)", ["option1a", "option1d"]); // Nth-child(3n-3) t("#select1 option:nth-child(3n-3)", ["option1c"]); // Nth-child(3n+0) t("#select1 option:nth-child(3n+0)", ["option1c"]); // Nth-child(-1n+3) t("#select1 option:nth-child(-1n+3)", [ "option1a", "option1b", "option1c", ]); // Nth-child(-n+3) t("#select1 option:nth-child(-n+3)", [ "option1a", "option1b", "option1c", ]); // Nth-child(-1n + 3) t("#select1 option:nth-child(-1n + 3)", [ "option1a", "option1b", "option1c", ]); }); it("pseudo - nth-last-child", () => { expect.assertions(29); // Nth-last-child t("form:nth-last-child(5)", ["testForm"]); // Nth-last-child (with whitespace) t("form:nth-last-child( 5 )", ["testForm"]); // Nth-last-child (case-insensitive) t("#select1 option:NTH-last-child(3)", ["option1b"]); // Not nth-last-child t("#qunit-fixture p:not(:nth-last-child(1))", [ "firstp", "ap", "sndp", "en", "first", ]); // Nth-last-child(-1) t("#select1 option:nth-last-child(-1)", []); // Nth-last-child(3) t("#select1 :nth-last-child(3)", ["option1b"]); // Nth-last-child(3) t("#select1 *:nth-last-child(3)", ["option1b"]); // Nth-last-child(3) t("#select1 option:nth-last-child(3)", ["option1b"]); // Nth-last-child(0n+3) t("#select1 option:nth-last-child(0n+3)", ["option1b"]); // Nth-last-child(1n+0) t("#select1 option:nth-last-child(1n+0)", [ "option1a", "option1b", "option1c", "option1d", ]); // Nth-last-child(1n) t("#select1 option:nth-last-child(1n)", [ "option1a", "option1b", "option1c", "option1d", ]); // Nth-last-child(n) t("#select1 option:nth-last-child(n)", [ "option1a", "option1b", "option1c", "option1d", ]); // Nth-last-child(even) t("#select1 option:nth-last-child(even)", ["option1a", "option1c"]); // Nth-last-child(odd) t("#select1 option:nth-last-child(odd)", ["option1b", "option1d"]); // Nth-last-child(2n) t("#select1 option:nth-last-child(2n)", ["option1a", "option1c"]); // Nth-last-child(2n+1) t("#select1 option:nth-last-child(2n+1)", ["option1b", "option1d"]); // Nth-last-child(2n + 1) t("#select1 option:nth-last-child(2n + 1)", ["option1b", "option1d"]); // Nth-last-child(+2n + 1) t("#select1 option:nth-last-child(+2n + 1)", ["option1b", "option1d"]); // Nth-last-child(3n) t("#select1 option:nth-last-child(3n)", ["option1b"]); // Nth-last-child(3n+1) t("#select1 option:nth-last-child(3n+1)", ["option1a", "option1d"]); // Nth-last-child(3n+2) t("#select1 option:nth-last-child(3n+2)", ["option1c"]); // Nth-last-child(3n+3) t("#select1 option:nth-last-child(3n+3)", ["option1b"]); // Nth-last-child(3n-1) t("#select1 option:nth-last-child(3n-1)", ["option1c"]); // Nth-last-child(3n-2) t("#select1 option:nth-last-child(3n-2)", ["option1a", "option1d"]); // Nth-last-child(3n-3) t("#select1 option:nth-last-child(3n-3)", ["option1b"]); // Nth-last-child(3n+0) t("#select1 option:nth-last-child(3n+0)", ["option1b"]); // Nth-last-child(-1n+3) t("#select1 option:nth-last-child(-1n+3)", [ "option1b", "option1c", "option1d", ]); // Nth-last-child(-n+3) t("#select1 option:nth-last-child(-n+3)", [ "option1b", "option1c", "option1d", ]); // Nth-last-child(-1n + 3) t("#select1 option:nth-last-child(-1n + 3)", [ "option1b", "option1c", "option1d", ]); }); it("pseudo - nth-of-type", () => { expect.assertions(9); // Nth-of-type(-1) t(":nth-of-type(-1)", []); // Nth-of-type(3) t("#ap :nth-of-type(3)", ["mark"]); // Nth-of-type(n) t("#ap :nth-of-type(n)", [ "google", "groups", "code1", "anchor1", "mark", ]); // Nth-of-type(0n+3) t("#ap :nth-of-type(0n+3)", ["mark"]); // Nth-of-type(2n) t("#ap :nth-of-type(2n)", ["groups"]); // Nth-of-type(even) t("#ap :nth-of-type(even)", ["groups"]); // Nth-of-type(2n+1) t("#ap :nth-of-type(2n+1)", ["google", "code1", "anchor1", "mark"]); // Nth-of-type(odd) t("#ap :nth-of-type(odd)", ["google", "code1", "anchor1", "mark"]); // Nth-of-type(-n+2) t("#qunit-fixture > :nth-of-type(-n+2)", [ "firstp", "ap", "foo", "nothiddendiv", "name+value", "firstUL", "empty", "form", "floatTest", "iframe", "lengthtest", "table", ]); }); it("pseudo - nth-last-of-type", () => { expect.assertions(9); // Nth-last-of-type(-1) t(":nth-last-of-type(-1)", []); // Nth-last-of-type(3) t("#ap :nth-last-of-type(3)", ["google"]); // Nth-last-of-type(n) t("#ap :nth-last-of-type(n)", [ "google", "groups", "code1", "anchor1", "mark", ]); // Nth-last-of-type(0n+3) t("#ap :nth-last-of-type(0n+3)", ["google"]); // Nth-last-of-type(2n) t("#ap :nth-last-of-type(2n)", ["groups"]); // Nth-last-of-type(even) t("#ap :nth-last-of-type(even)", ["groups"]); // Nth-last-of-type(2n+1) t("#ap :nth-last-of-type(2n+1)", [ "google", "code1", "anchor1", "mark", ]); // Nth-last-of-type(odd) t("#ap :nth-last-of-type(odd)", ["google", "code1", "anchor1", "mark"]); // Nth-last-of-type(-n+2) t("#qunit-fixture > :nth-last-of-type(-n+2)", [ "ap", "name+value", "first", "firstUL", "empty", "floatTest", "iframe", "table", "name-tests", "testForm", "liveHandlerOrder", "siblingTest", ]); }); it("pseudo - has", () => { expect.assertions(3); // Basic test t("p:has(a)", ["firstp", "ap", "en", "sap"]); // Basic test (irrelevant whitespace) t("p:has( a )", ["firstp", "ap", "en", "sap"]); // Nested with overlapping candidates t("#qunit-fixture div:has(div:has(div:not([id])))", [ "moretests", "t2037", ]); }); it("pseudo - misc", () => { expect.assertions(31); // Headers t(":header", ["qunit-header", "qunit-banner", "qunit-userAgent"]); // Headers(case-insensitive) t(":Header", ["qunit-header", "qunit-banner", "qunit-userAgent"]); // Multiple matches with the same context (cache check) t("#form select:has(option:first-child:contains('o'))", [ "select1", "select2", "select3", "select4", ]); // All not grandparents expect( CSSselect.selectAll("#qunit-fixture :not(:has(:has(*)))", document) .length ).toBeTruthy(); const select = document.getElementById("select1"); // Has Option Matches expect(CSSselect.is(select, ":has(option)")).toBe(true); // Empty string contains expect( CSSselect.selectAll("a:contains('')", document).length ).toBeTruthy(); // Text Contains t("a:contains(Google)", ["google", "groups"]); // Text Contains t("a:contains(Google Groups)", ["groups"]); // Text Contains t("a:contains('Google Groups (Link)')", ["groups"]); // Text Contains t('a:contains("(Link)")', ["groups"]); // Text Contains t("a:contains(Google Groups (Link))", ["groups"]); // Text Contains t("a:contains((Link))", ["groups"]); const tmp = document.createElement("div"); tmp.attribs.id = "tmp_input"; DomUtils.appendChild(document.body, tmp); ["button", "submit", "reset"].forEach((type) => { const els = [ ...parseDOM( "".replace( /%/g, type ) ), ]; els.forEach((el) => DomUtils.appendChild(tmp, el)); // Input Buttons :${type} t(`#tmp_input :${type}`, [`input_${type}`, `button_${type}`]); // Input Matches :${type} expect(CSSselect.is(els[0], `:${type}`)).toBe(true); // Button Matches :${type} expect(CSSselect.is(els[1], `:${type}`)).toBe(true); }); DomUtils.removeElement(tmp); // Caching system tolerates recursive selection t( "[id='select1'] *:not(:last-child), [id='select2'] *:not(:last-child)", [ "option1a", "option1b", "option1c", "option2a", "option2b", "option2c", ], document.getElementById("qunit-fixture") ); /* * Tokenization edge cases */ // Sequential pseudos t("#qunit-fixture p:has(:contains(mark)):has(code)", ["ap"]); t( "#qunit-fixture p:has(:contains(mark)):has(code):contains(This link)", ["ap"] ); // Pseudo argument containing ')' t("p:has(>a.GROUPS[src!=')'])", ["ap"]); t("p:has(>a.GROUPS[src!=')'])", ["ap"]); // Pseudo followed by token containing ')' t('p:contains(id="foo")[id!=\\)]', ["sndp"]); t("p:contains(id=\"foo\")[id!=')']", ["sndp"]); // Multi-pseudo t("#ap:has(*), #ap:has(*)", ["ap"]); // Multi-pseudo with leading nonexistent id t("#nonexistent:has(*), #ap:has(*)", ["ap"]); // Tokenization stressor t( "a[class*=blog]:not(:has(*, :contains(!)), :contains(!)), br:contains(]), p:contains(]), :not(:empty):not(:parent)", ["ap", "mark", "yahoo", "simon"] ); }); it("pseudo - :not", () => { expect.assertions(32); // Not t("a.blog:not(.link)", ["mark"]); // Not - multiple t("#form option:not(:contains(Nothing),#option1b,:selected)", [ "option1c", "option1d", "option2b", "option2c", "option3d", "option3e", "option4e", "option5b", "option5c", ]); // Not - recursive t("#form option:not(:not(:selected))[id^='option3']", [ "option3b", "option3c", ]); // :not() failing interior t("#qunit-fixture p:not(.foo)", [ "firstp", "ap", "sndp", "en", "sap", "first", ]); // :not() failing interior t("#qunit-fixture p:not(div.foo)", [ "firstp", "ap", "sndp", "en", "sap", "first", ]); // :not() failing interior t("#qunit-fixture p:not(p.foo)", [ "firstp", "ap", "sndp", "en", "sap", "first", ]); // :not() failing interior t("#qunit-fixture p:not(#blargh)", [ "firstp", "ap", "sndp", "en", "sap", "first", ]); // :not() failing interior t("#qunit-fixture p:not(div#blargh)", [ "firstp", "ap", "sndp", "en", "sap", "first", ]); // :not() failing interior t("#qunit-fixture p:not(p#blargh)", [ "firstp", "ap", "sndp", "en", "sap", "first", ]); // :not Multiple t("#qunit-fixture p:not(a)", [ "firstp", "ap", "sndp", "en", "sap", "first", ]); // :not Multiple t("#qunit-fixture p:not( a )", [ "firstp", "ap", "sndp", "en", "sap", "first", ]); // :not Multiple t("#qunit-fixture p:not( p )", []); // :not Multiple t("#qunit-fixture p:not(a, b)", [ "firstp", "ap", "sndp", "en", "sap", "first", ]); // :not Multiple t("#qunit-fixture p:not(a, b, div)", [ "firstp", "ap", "sndp", "en", "sap", "first", ]); // :not Multiple t("p:not(p)", []); // :not Multiple t("p:not(a,p)", []); // :not Multiple t("p:not(p,a)", []); // :not Multiple t("p:not(a,p,b)", []); // :not Multiple t(":input:not(:image,:input,:submit)", []); // :not Multiple t("#qunit-fixture p:not(:has(a), :nth-child(1))", ["first"]); // No element not selector t(".container div:not(.excluded) div", []); // :not() Existing attribute t("#form select:not([multiple])", ["select1", "select2", "select5"]); // :not() Equals attribute t("#form select:not([name=select1])", [ "select2", "select3", "select4", "select5", ]); // :not() Equals quoted attribute t("#form select:not([name='select1'])", [ "select2", "select3", "select4", "select5", ]); // :not() Multiple Class t("#foo a:not(.blog)", ["yahoo", "anchor2"]); // :not() Multiple Class t("#foo a:not(.link)", ["yahoo", "anchor2"]); // :not() Multiple Class t("#foo a:not(.blog.link)", ["yahoo", "anchor2"]); // :not chaining (compound) t("#qunit-fixture div[id]:not(:has(div, span)):not(:has(*))", [ "nothiddendivchild", "divWithNoTabIndex", ]); // :not chaining (with attribute) t("#qunit-fixture form[id]:not([action$='formaction']):not(:button)", [ "lengthtest", "name-tests", "testForm", ]); // :not chaining (colon in attribute) t("#qunit-fixture form[id]:not([action='form:action']):not(:button)", [ "form", "lengthtest", "name-tests", "testForm", ]); // :not chaining (colon in attribute and nested chaining) t( "#qunit-fixture form[id]:not([action='form:action']:button):not(:input)", ["form", "lengthtest", "name-tests", "testForm"] ); // :not chaining t( "#form select:not(.select1):contains(Nothing) > option:not(option)", [] ); }); it("pseudo - form", () => { expect.assertions(10); const extraTexts = [ ...parseDOM( '' ), ]; extraTexts.forEach((text) => DomUtils.appendChild(document.getElementById("form"), text) ); // Form element :input t("#form :input", [ "text1", "text2", "radio1", "radio2", "check1", "check2", "hidden1", "hidden2", "name", "search", "button", "area1", "select1", "select2", "select3", "select4", "select5", "impliedText", "capitalText", ]); // Form element :radio t("#form :radio", ["radio1", "radio2"]); // Form element :checkbox t("#form :checkbox", ["check1", "check2"]); // Form element :text t("#form :text", [ "text1", "text2", "hidden2", "name", "impliedText", "capitalText", ]); // Form element :radio:checked t("#form :radio:checked", ["radio2"]); // Form element :checkbox:checked t("#form :checkbox:checked", ["check1"]); // Form element :radio:checked, :checkbox:checked t("#form :radio:checked, #form :checkbox:checked", [ "radio2", "check1", ]); // Selected Option Element t("#form option:selected", [ "option1a", "option2d", "option3b", "option3c", "option4b", "option4c", "option4d", "option5a", ]); // Selected Option Element are also :checked t("#form option:checked", [ "option1a", "option2d", "option3b", "option3c", "option4b", "option4c", "option4d", "option5a", ]); // Hidden inputs should be treated as enabled. See QSA test. t("#hidden1:enabled", ["hidden1"]); extraTexts.forEach((text) => DomUtils.removeElement(text)); }); it("pseudo - :root", () => { expect.assertions(1); // :root selector expect(CSSselect.selectOne(":root", document)).toBe( document.documentElement ); }); it("caching", () => { expect.assertions(1); CSSselect.selectAll(":not(code)", document.getElementById("ap")); // Reusing selector with new context t( ":not(code)", ["sndp", "en", "yahoo", "sap", "anchor2", "simon"], document.getElementById("foo") ); }); it("more specific selector should find less elements", () => { // Same selector, but with an attribute filter added expect( CSSselect.selectAll("#qunit-fixture div div", document).length ).toBeGreaterThanOrEqual( CSSselect.selectAll("#qunit-fixture div div[id]", document).length ); }); }); css-select-4.2.0/test/tools/000077500000000000000000000000001415613773000157105ustar00rootroot00000000000000css-select-4.2.0/test/tools/helper.ts000066400000000000000000000023441415613773000175420ustar00rootroot00000000000000import fs from "fs"; import path from "path"; import { parseDOM, ParserOptions, ElementType } from "htmlparser2"; import * as DomUtils from "domutils"; import { DataNode, Element, Node } from "domhandler"; export function getDOMFromPath(file: string, options?: ParserOptions): Node[] { const filePath = path.join(__dirname, "..", "fixtures", file); return parseDOM(fs.readFileSync(filePath, "utf8"), options); } export interface SimpleDocument extends Array { getElementById(id: string): Element; createTextNode(content: string): DataNode; createElement(name: string): Element; body: Element; documentElement: Element; } export function getDocument(file: string): SimpleDocument { const document = getDOMFromPath(file) as SimpleDocument; document.getElementById = (id: string) => DomUtils.getElementById(id, document) as Element; document.createTextNode = (content: string) => new DataNode(ElementType.Text, content); document.createElement = (name: string) => new Element(name.toLocaleLowerCase(), {}); [document.body] = DomUtils.getElementsByTagName("body", document, true, 1); [document.documentElement] = document.filter(DomUtils.isTag); return document; } css-select-4.2.0/test/tools/sizzle-testinit.ts000077500000000000000000000024711415613773000214500ustar00rootroot00000000000000import * as helper from "./helper"; import CSSselect from "../../src"; import type { Element, Node } from "domhandler"; let document = loadDoc(); export function loadDoc(): helper.SimpleDocument { return (document = helper.getDocument("sizzle.html")); } /** * Returns an array of elements with the given IDs * @example q("main", "foo", "bar") * @result [
      , , ] */ export function q(...ids: string[]): Element[] { return ids.map((id) => document.getElementById(id)); } /** * Asserts that a select matches the given IDs * @param selector - Selector * @param expectedIds - Array of ids to construct what is expected * @param context - Root of the current search. * @example t("Check for something", "//[a]", ["foo", "baar"]); * @returns `true` iff the selector produces the expected elements. */ export function t( selector: string, expectedIds: string[], context: Node[] | Node | null = document ): void { const actual = CSSselect(selector, context) as Element[]; const actualIds = actual.map((e) => e.attribs.id); // Should not contain falsy values expect(actualIds).toStrictEqual(expectedIds); } const xmlDoc = helper.getDOMFromPath("fries.xml", { xmlMode: true, }); export function createWithFriesXML(): Node[] { return xmlDoc; } css-select-4.2.0/tsconfig.eslint.json000066400000000000000000000001301415613773000175670ustar00rootroot00000000000000{ "extends": "./tsconfig.json", "include": ["src", "test"], "exclude": [] } css-select-4.2.0/tsconfig.json000066400000000000000000000036141415613773000163040ustar00rootroot00000000000000{ "compilerOptions": { /* Basic Options */ "target": "es5" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */, "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */, // "lib": [], /* Specify library files to be included in the compilation. */ "declaration": true /* Generates corresponding '.d.ts' file. */, "declarationMap": true /* Generates a sourcemap for each corresponding '.d.ts' file. */, // "sourceMap": true, /* Generates corresponding '.map' file. */ "outDir": "lib" /* Redirect output structure to the directory. */, // "importHelpers": true, /* Import emit helpers from 'tslib'. */ /* Strict Type-Checking Options */ "strict": true /* Enable all strict type-checking options. */, /* Additional Checks */ "noUnusedLocals": true /* Report errors on unused locals. */, "noUnusedParameters": true /* Report errors on unused parameters. */, "noImplicitReturns": true /* Report error when not all code paths in function return a value. */, "noFallthroughCasesInSwitch": true /* Report errors for fallthrough cases in switch statement. */, /* Module Resolution Options */ // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, "resolveJsonModule": true }, "include": ["src"], "exclude": [ "**/*.spec.ts", "**/__fixtures__/*", "**/__tests__/*", "**/__snapshots__/*" ] }