pax_global_header00006660000000000000000000000064143060316570014517gustar00rootroot0000000000000052 comment=52297ad37f2ef4da67ce341957badd264ae2c0f8 js-sdsl-4.1.4/000077500000000000000000000000001430603165700131045ustar00rootroot00000000000000js-sdsl-4.1.4/.all-contributorsrc000066400000000000000000000010601430603165700167320ustar00rootroot00000000000000{ "projectName": "js-sdsl", "projectOwner": "ZLY201", "repoType": "github", "repoHost": "https://github.com", "files": [ "README.md" ], "imageSize": 100, "commit": true, "commitConvention": "eslint", "contributors": [ { "login": "redboltz", "name": "Takatoshi Kondo", "avatar_url": "https://avatars.githubusercontent.com/u/275959?v=4", "profile": "https://www.linkedin.com/in/takatoshi-kondo-02a91410/", "contributions": [ "code", "test" ] } ], "contributorsPerLine": 7 } js-sdsl-4.1.4/.commitlintrc.json000066400000000000000000000015241430603165700165630ustar00rootroot00000000000000{ "parserPreset": "conventional-changelog-conventionalcommits", "rules": { "body-leading-blank": [1, "always"], "body-max-line-length": [2, "always", 100], "footer-leading-blank": [1, "always"], "footer-max-line-length": [2, "always", 100], "header-max-length": [2, "always", 100], "subject-case": [ 2, "never", [ "sentence-case", "start-case", "pascal-case", "upper-case" ] ], "subject-empty": [2, "never"], "subject-full-stop": [2, "never", "."], "type-case": [2, "always", "lower-case"], "type-empty": [2, "never"], "type-enum": [ 2, "always", [ "build", "chore", "ci", "docs", "feat", "fix", "perf", "refactor", "revert", "style", "test" ] ] } } js-sdsl-4.1.4/.editorconfig000066400000000000000000000002661430603165700155650ustar00rootroot00000000000000root = true [*] indent_size = 2 charset = utf-8 end_of_line = lf indent_style = space insert_final_newline = true [*.{js,ts}] max_line_length = 100 trim_trailing_whitespace = true js-sdsl-4.1.4/.eslintignore000066400000000000000000000000761430603165700156120ustar00rootroot00000000000000.github/ .husky/ .vscode/ coverage/ dist/ docs/ node_modules/ js-sdsl-4.1.4/.eslintrc.json000066400000000000000000000236471430603165700157140ustar00rootroot00000000000000{ "env": { "browser": true, "amd": true, "node": true }, "extends": [ "eslint:recommended", "plugin:compat/recommended", "plugin:@typescript-eslint/recommended" ], "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaVersion": 2016, "sourceType": "module" }, "plugins": [ "compat", "@typescript-eslint" ], "ignorePatterns": [ "node_modules/", "dist/" ], "rules": { "compat/compat": "error", "no-var": "error", "object-shorthand": [ "error", "properties" ], "accessor-pairs": [ "error", { "setWithoutGet": true, "enforceForClassMembers": true } ], "array-bracket-spacing": [ "error", "never" ], "array-callback-return": [ "error", { "allowImplicit": false, "checkForEach": false } ], "arrow-spacing": [ "error", { "before": true, "after": true } ], "block-spacing": [ "error", "always" ], "brace-style": [ "error", "1tbs" ], "camelcase": [ "error", { "allow": [ "^UNSAFE_" ], "properties": "never", "ignoreGlobals": true } ], "comma-dangle": [ "error", { "arrays": "never", "objects": "never", "imports": "never", "exports": "never", "functions": "never" } ], "comma-spacing": [ "error", { "before": false, "after": true } ], "comma-style": [ "error", "last" ], "computed-property-spacing": [ "error", "never", { "enforceForClassMembers": true } ], "constructor-super": "error", "curly": [ "error", "multi-line" ], "default-case-last": "error", "dot-location": [ "error", "property" ], "dot-notation": [ "error", { "allowKeywords": true } ], "eol-last": "error", "eqeqeq": [ "error", "always", { "null": "ignore" } ], "func-call-spacing": [ "error", "never" ], "generator-star-spacing": [ "error", { "before": true, "after": true } ], "indent": [ "error", 2 ], "key-spacing": [ "error", { "beforeColon": false, "afterColon": true } ], "keyword-spacing": [ "error", { "before": true, "after": true } ], "lines-between-class-members": [ "error", "never" ], "max-len": [ "error", { "code": 100, "comments": 120, "ignoreUrls": true } ], "multiline-ternary": [ "error", "always-multiline" ], "new-cap": [ "error", { "newIsCap": true, "capIsNew": false, "properties": true } ], "new-parens": "error", "no-array-constructor": "error", "no-async-promise-executor": "error", "no-caller": "error", "no-case-declarations": "error", "no-class-assign": "error", "no-compare-neg-zero": "error", "no-cond-assign": "error", "no-const-assign": "error", "no-constant-condition": [ "error", { "checkLoops": false } ], "no-control-regex": "error", "no-debugger": "error", "no-delete-var": "error", "no-dupe-args": "error", "no-dupe-class-members": "error", "no-dupe-keys": "error", "no-duplicate-case": "error", "no-useless-backreference": "error", "no-empty": [ "error", { "allowEmptyCatch": true } ], "no-empty-character-class": "error", "no-empty-pattern": "error", "no-eval": "error", "no-ex-assign": "error", "no-extend-native": "error", "no-extra-bind": "error", "no-extra-boolean-cast": "error", "no-extra-parens": [ "error", "functions" ], "no-fallthrough": "error", "no-floating-decimal": "error", "no-func-assign": "error", "no-global-assign": "error", "no-implied-eval": "error", "no-import-assign": "error", "no-invalid-regexp": "error", "no-irregular-whitespace": "error", "no-iterator": "error", "no-labels": [ "error", { "allowLoop": false, "allowSwitch": false } ], "no-lone-blocks": "error", "no-loss-of-precision": "error", "no-misleading-character-class": "error", "no-prototype-builtins": "error", "no-useless-catch": "error", "no-mixed-operators": [ "error", { "groups": [ [ "==", "!=", "===", "!==", ">", ">=", "<", "<=" ], [ "&&", "||" ], [ "in", "instanceof" ] ], "allowSamePrecedence": true } ], "no-mixed-spaces-and-tabs": "error", "no-multi-spaces": "error", "no-multi-str": "error", "no-multiple-empty-lines": [ "error", { "max": 1, "maxEOF": 0 } ], "no-new": "error", "no-new-func": "error", "no-new-object": "error", "no-new-symbol": "error", "no-new-wrappers": "error", "no-obj-calls": "error", "no-octal": "error", "no-octal-escape": "error", "no-proto": "error", "no-redeclare": [ "error", { "builtinGlobals": false } ], "no-regex-spaces": "error", "no-return-assign": [ "error", "except-parens" ], "no-self-assign": [ "error", { "props": true } ], "no-self-compare": "error", "no-sequences": "error", "no-shadow-restricted-names": "error", "no-sparse-arrays": "error", "no-tabs": "error", "no-template-curly-in-string": "error", "no-this-before-super": "error", "no-throw-literal": "error", "no-trailing-spaces": "error", "no-unexpected-multiline": "error", "no-unmodified-loop-condition": "error", "no-unneeded-ternary": [ "error", { "defaultAssignment": false } ], "no-unreachable": "error", "no-unreachable-loop": "error", "no-unsafe-finally": "error", "no-unsafe-negation": "error", "no-unused-expressions": [ "error", { "allowShortCircuit": true, "allowTernary": true, "allowTaggedTemplates": true } ], "no-unused-vars": [ "error", { "args": "none", "caughtErrors": "none", "ignoreRestSiblings": true, "vars": "all" } ], "no-useless-call": "error", "no-useless-computed-key": "error", "no-useless-constructor": "error", "no-useless-escape": "error", "no-useless-rename": "error", "no-useless-return": "error", "no-void": "error", "no-whitespace-before-property": "error", "no-with": "error", "object-curly-newline": [ "error", { "multiline": true, "consistent": true } ], "object-curly-spacing": [ "error", "always" ], "object-property-newline": [ "error", { "allowMultiplePropertiesPerLine": true } ], "one-var": [ "error", { "initialized": "never" } ], "operator-linebreak": [ "error", "after", { "overrides": { "?": "before", ":": "before", "|>": "before" } } ], "padded-blocks": [ "error", { "blocks": "never", "switches": "never", "classes": "never" } ], "prefer-const": [ "error", { "destructuring": "all" } ], "prefer-promise-reject-errors": "error", "prefer-regex-literals": [ "error", { "disallowRedundantWrapping": true } ], "quote-props": [ "error", "as-needed" ], "quotes": [ "error", "single" ], "rest-spread-spacing": [ "error", "never" ], "semi": [ "error", "always" ], "semi-spacing": [ "error", { "before": false, "after": true } ], "space-before-blocks": [ "error", "always" ], "space-before-function-paren": [ "error", { "anonymous": "always", "named": "never", "asyncArrow": "always" } ], "space-in-parens": [ "error", "never" ], "space-infix-ops": "error", "space-unary-ops": [ "error", { "words": true, "nonwords": false } ], "spaced-comment": [ "error", "always", { "line": { "markers": [ "*package", "!", "/", ",", "=" ] }, "block": { "balanced": true, "markers": [ "*package", "!", ",", ":", "::", "flow-include" ], "exceptions": [ "*" ] } } ], "symbol-description": "error", "template-curly-spacing": [ "error", "never" ], "template-tag-spacing": [ "error", "never" ], "unicode-bom": [ "error", "never" ], "use-isnan": [ "error", { "enforceForSwitchCase": true, "enforceForIndexOf": true } ], "valid-typeof": [ "error", { "requireStringLiterals": true } ], "wrap-iife": [ "error", "any", { "functionPrototypeMethods": true } ], "yield-star-spacing": [ "error", "both" ], "yoda": [ "error", "never" ], "@typescript-eslint/ban-ts-comment": "off", "@typescript-eslint/no-this-alias": "off" } } js-sdsl-4.1.4/.github/000077500000000000000000000000001430603165700144445ustar00rootroot00000000000000js-sdsl-4.1.4/.github/CONTRIBUTING.md000066400000000000000000000056511430603165700167040ustar00rootroot00000000000000# Js-sdsl Contributing Guide Hi! I'm really excited that you are interested in contributing to js-sdsl. Before submitting your contribution, please make sure to take a moment and read through the following guidelines: - [Code of Conduct](https://github.com/js-sdsl/js-sdsl/blob/main/CODE_OF_CONDUCT.md) - [Issue Reporting Guidelines](#issue-reporting-guidelines) - [Pull Request Guidelines](#pull-request-guidelines) - [Development Setup](#development-setup) - [Project Structure](#project-structure) ## Issue Reporting Guidelines - Always use issue-template to create new issues. ## Pull Request Guidelines - The `main` branch is just a snapshot of the latest stable release. All development should be done in dedicated branches. **Do not submit PRs against the `main` branch.** - Checkout a topic branch from the relevant branch, e.g. `dev`, and merge back against that branch. - Work in the `src` folder and **DO NOT** check in `dist` in the commits. - It's OK to have multiple small commits as you work on the PR - GitHub will automatically squash it before merging. - Make sure `yarn test` passes. (see [development setup](#development-setup)) - If adding a new feature: - Add accompanying test case in folders `check` and `performance` . - Provide a convincing reason to add this feature. Ideally, you should open a suggestion issue first and have it approved before working on it. - If fixing bug: - If you are resolving a special issue, add `(fix #xxxx[,#xxxx])` (#xxxx is the issue id) in your PR title for a better release log, e.g. `update entities encoding/decoding (fix #3899)`. - Provide a detailed description of the bug in the PR. Live demo preferred. - Add appropriate test coverage if applicable. ## Development Setup You will need [Node.js](http://nodejs.org) **version 14+** and [yarn](https://yarnpkg.com/). After cloning the repo, run: ```bash $ yarn install ``` ### Committing Changes Please follow the commit specification. See [`.commitlintrc.json`](https://github.com/js-sdsl/js-sdsl/blob/main/.commitlintrc.json) get help. ### Commonly used NPM scripts ```bash # run all tests $ yarn test # run unit tests $ yarn test:unit # run performance tests $ yarn test:performance # build all dist files $ yarn build # build specific mode including es module, commonJS and universal module definition $ yarn build:{build_mode} ``` There are some other scripts available in the `scripts` section of the `package.json` file. ## Project Structure - **`test`**: contains all unit tests. - **`performance`**: contains all performance tests. - **`src`**: contains the source code. All our source files are written in typescript, please make sure your submissions have strict type deduction and follow eslint specifications. ## Credits Thank you to all the people who have already contributed to js-sdsl! js-sdsl-4.1.4/.github/ISSUE_TEMPLATE/000077500000000000000000000000001430603165700166275ustar00rootroot00000000000000js-sdsl-4.1.4/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000010271430603165700213210ustar00rootroot00000000000000--- name: Bug report about: Create a report to help us improve title: '' labels: '' assignees: '' --- **Describe the bug** A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error **Expected behavior** A clear and concise description of what you expected to happen. **Screenshots** If applicable, add screenshots to help explain your problem. **Additional context** Add any other context about the problem here. js-sdsl-4.1.4/.github/ISSUE_TEMPLATE/custom.md000066400000000000000000000001761430603165700204670ustar00rootroot00000000000000--- name: Custom issue template about: Describe this issue template's purpose here. title: '' labels: '' assignees: '' --- js-sdsl-4.1.4/.github/ISSUE_TEMPLATE/feature_request.md000066400000000000000000000011231430603165700223510ustar00rootroot00000000000000--- name: Feature request about: Suggest an idea for this project title: '' labels: '' assignees: '' --- **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. **Additional context** Add any other context or screenshots about the feature request here. js-sdsl-4.1.4/.github/PULL_REQUEST_TEMPLATE.md000066400000000000000000000021451430603165700202470ustar00rootroot00000000000000 **What kind of change does this PR introduce?** (check at least one) - [ ] Bugfix - [ ] Feature - [ ] Code style update - [ ] Refactor - [ ] Build-related changes - [ ] Other, please describe: **Does this PR introduce a breaking change?** (check one) - [ ] Yes - [ ] No If yes, please describe the impact and migration path for existing applications: **The PR fulfills these requirements:** - [ ] It's submitted to the `dev` branch, **not** the `main` branch - [ ] When resolving a specific issue, it's referenced in the PR's title (e.g. `fix #xxx[,#xxx]`, where "xxx" is the issue number) - [ ] All tests are passing - [ ] New/updated tests are included If adding a **new feature**, the PR's description includes: - [ ] A convincing reason for adding this feature (to avoid wasting your time, it's best to open a suggestion issue first and wait for approval before working on it) **Other information:** js-sdsl-4.1.4/.github/workflows/000077500000000000000000000000001430603165700165015ustar00rootroot00000000000000js-sdsl-4.1.4/.github/workflows/build.yml000066400000000000000000000045151430603165700203300ustar00rootroot00000000000000name: js-sdsl CI on: push: branches: - main jobs: test: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@master - name: Use node.js lts/Gallium uses: actions/setup-node@v3 with: node-version: lts/Gallium cache: 'yarn' - name: Install dependencies run: yarn install - name: Run test run: yarn test - name: Save performance test result uses: actions/upload-artifact@v3 with: name: performance.md path: dist/performance - name: Coveralls report uses: coverallsapp/github-action@master with: github-token: ${{ github.token }} deploy: needs: test runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@master - name: Install dependencies run: yarn install - name: Download performance test result uses: actions/download-artifact@v3 with: name: performance.md - name: Generate type documentation run: yarn generate && mv README.md README.zh-CN.md performance.md docs/ - name: Deploy to github pages uses: JamesIves/github-pages-deploy-action@v4 with: folder: docs branch: gh-pages publish: needs: test runs-on: ubuntu-latest if: ${{ contains(github.event.head_commit.message, 'publish@') }} steps: - name: Checkout code uses: actions/checkout@master - name: Install dependencies run: yarn install - name: Build run: yarn build - name: Publish to npm run: yarn publish env: NPM_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} release: needs: test runs-on: ubuntu-latest if: ${{ contains(github.event.head_commit.message, 'publish@') }} steps: - name: Checkout code uses: actions/checkout@master - name: Read package.json uses: tyankatsu0105/read-package-version-actions@v1 id: package-version - name: Release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ github.token }} with: tag_name: v${{ steps.package-version.outputs.version }} release_name: v${{ steps.package-version.outputs.version }} prerelease: false js-sdsl-4.1.4/.github/workflows/codeql-analysis.yml000066400000000000000000000051671430603165700223250ustar00rootroot00000000000000# For most projects, this workflow file will not need changing; you simply need # to commit it to your repository. # # You may wish to alter this file to override the set of languages analyzed, # or to provide custom queries or build logic. # # ******** NOTE ******** # We have attempted to detect the languages in your repository. Please check # the `language` matrix defined below to confirm you have the correct set of # supported CodeQL languages. # name: "CodeQL" on: push: branches: - dev - main pull_request: branches: - dev - main schedule: - cron: '28 17 * * 5' jobs: analyze: name: Analyze runs-on: ubuntu-latest permissions: actions: read contents: read security-events: write strategy: fail-fast: false matrix: language: [ 'javascript' ] # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support steps: - name: Checkout repository uses: actions/checkout@v3 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs # queries: security-extended,security-and-quality # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild uses: github/codeql-action/autobuild@v2 # ℹ️ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun # If the Autobuild fails above, remove it and uncomment the following three lines. # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. # - run: | # echo "Run, Build Application using script" # ./location_of_script_within_repo/buildscript.sh - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v2 js-sdsl-4.1.4/.github/workflows/lint.yml000066400000000000000000000010461430603165700201730ustar00rootroot00000000000000name: lint-code on: push: branches: - dev - main pull_request: branches: - dev - main jobs: lint: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@master with: fetch-depth: 0 - name: Install dependencies run: yarn install - name: Lint code run: yarn lint - name: Lint commit uses: wagoid/commitlint-github-action@v5 with: configFile: .commitlintrc.json failOnWarnings: true js-sdsl-4.1.4/.github/workflows/test.yml000066400000000000000000000011631430603165700202040ustar00rootroot00000000000000name: Js-sdsl test CI on: push: branches: - dev pull_request: branches: - dev - main jobs: test: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@master - name: Use node.js lts/Gallium uses: actions/setup-node@v3 with: node-version: lts/Gallium cache: 'yarn' - name: Install dependencies run: yarn install - name: Run test run: yarn test - name: Coveralls report uses: coverallsapp/github-action@master with: github-token: ${{ github.token }} js-sdsl-4.1.4/.gitignore000066400000000000000000000001451430603165700150740ustar00rootroot00000000000000.vscode/ .idea/ dist/ docs/ coverage/ node_modules/ .eslintcache .npmignore .npmrc .yarnrc .DS_Store js-sdsl-4.1.4/.husky/000077500000000000000000000000001430603165700143255ustar00rootroot00000000000000js-sdsl-4.1.4/.husky/commit-msg000077500000000000000000000001351430603165700163260ustar00rootroot00000000000000#!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" npx --no-install commitlint --edit "$1" js-sdsl-4.1.4/.husky/pre-commit000077500000000000000000000001011430603165700163170ustar00rootroot00000000000000#!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" lint-staged js-sdsl-4.1.4/CHANGELOG.md000066400000000000000000000065541430603165700147270ustar00rootroot00000000000000# Change Log All notable changes to this project will be documented in this file. The format is based on Keep a Changelog and this project adheres to Semantic Versioning. ## [4.1.4] - 2022.09.07 ### Added - Add some notes. ### Changed - Optimize hash container. - Abstracting out the hash container. ### Fixed - Fixed tree get height function return one larger than the real height. - Tree-shaking not work in ES module. - `Queue` and `Deque` should return `undefined` when container is empty. ## [4.1.4-beta.0] - 2022.08.31 ### Added - Add function update key by iterator. - Add iterator copy function to get a copy of itself. - Add insert by iterator hint function in tree container. ### Changed - Changed OrderedMap's iterator pointer get from `Object.defineProperty'` to `Proxy`. - Improve iterator performance by remove some judgment. - Change iterator type description from `normal` and `reverse` to boolean. ## [4.1.2-beta.0] - 2022.08.27 ### Added - Make `SequentialContainer` and `TreeBaseContainer` export in the index. ### Changed - Change rbTree binary search from recursive to loop implementation (don't effect using). - Reduce memory waste during deque initialization. ## Fixed - Fixed priority queue not dereference on pop. ## [4.1.1] - 2022.08.23 ### Fixed - Forgot to reset root node on rotation in red-black tree delete operation. - Fix iterator invalidation after tree container removes iterator. ## [4.1.0] - 2022.08.21 ### Changed - Change some functions from recursive to loop implementation (don't effect using). - Change some iterator function parameter type. - Change commonjs target to `es6`. - Change `Deque` from sequential queue to circular queue. - Optimize so many places (don't affect using). ### Fixed - Fix `Vector` length bugs. ## [4.0.3] - 2022-08-13 ### Changed - Change `if (this.empty())` to `if (!this.length)`. - Change some unit test. - Change class type and optimized type design ### Fixed - Fix can push undefined to deque. ## [4.0.0] - 2022-07-30 ### Changed - Remove InternalError error as much as possible (don't affect using). - Change `HashSet` api `eraseElementByValue`'s name to `eraseElementByKey`. - Change some unit tests to improve coverage (don't affect using). ## [4.0.0-beta.0] - 2022-07-24 ### Added - Complete test examples (don't effect using). - The error thrown is standardized, you can catch it according to the error type. ### Changed - Refactor all container from function to class (don't affect using). - Abstracting tree containers and hash containers, change `Set`'s and `Map`'s name to `OrderedSet` and `OrderedMap` to distinguish it from the official container. - Change `OrderedSet` api `eraseElementByValue`'s name to `eraseElementByKey`. ### Fixed - Fixed so many bugs. ## [3.0.0-beta.0] - 2022-04-29 ### Added - Bidirectional iterator is provided for all containers except Stack, Queue, HashSet and HashMap. - Added begin, end, rBegin and rEnd functions to some containers for using iterator. - Added `eraseElementByIterator` function. ### Changed - Changed Pair type `T, K` to `K, V` (don't affect using). - Changed `find`, `lowerBound`, `upperBound`, `reverseLowerBound` and `reverseUpperBound` function's returned value to `Iterator`. ### Fixed - Fixed an error when the insert value was 0. - Fixed the problem that the lower version browser does not recognize symbol Compilation error caused by iterator. js-sdsl-4.1.4/CODE_OF_CONDUCT.md000066400000000000000000000121421430603165700157030ustar00rootroot00000000000000# Contributor Covenant Code of Conduct ## Our Pledge We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. ## Our Standards Examples of behavior that contributes to a positive environment for our community include: * Demonstrating empathy and kindness toward other people * Being respectful of differing opinions, viewpoints, and experiences * Giving and gracefully accepting constructive feedback * Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience * Focusing on what is best not just for us as individuals, but for the overall community Examples of unacceptable behavior include: * The use of sexualized language or imagery, and sexual attention or advances of any kind * Trolling, insulting or derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or email address, without their explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Enforcement Responsibilities Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. ## Scope This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at 951711127@qq.com. All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the reporter of any incident. ## Enforcement Guidelines Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: ### 1. Correction **Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. **Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. ### 2. Warning **Community Impact**: A violation through a single incident or series of actions. **Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. ### 3. Temporary Ban **Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. **Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. ### 4. Permanent Ban **Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. **Consequence**: A permanent ban from any sort of public interaction within the community. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.0, available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity). [homepage]: https://www.contributor-covenant.org For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations. js-sdsl-4.1.4/LICENSE000066400000000000000000000020531430603165700141110ustar00rootroot00000000000000MIT License Copyright (c) 2021 Zilong Yao 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. js-sdsl-4.1.4/README.md000066400000000000000000000127471430603165700143760ustar00rootroot00000000000000

js-sdsl logo

A javascript standard data structure library which benchmark against C++ STL

NPM Version Build Status Coverage Status GITHUB Star NPM Downloads Gzip Size Rate this package MIT-license GITHUB-language

English | 简体中文

## Included data structures - Vector - Stack - Queue - LinkList - Deque - PriorityQueue - OrderedSet (using RBTree) - OrderedMap (using RBTree) - HashSet - HashMap ## Benchmark We are benchmarking against other popular data structure libraries. In some ways we're better than the best library. See [benchmark](https://js-sdsl.github.io/#/test/benchmark-analyze). ## Supported platforms - node.js (using commonjs) - react/vue (using es5) - browser (support most browsers) ## Download Download directly - [js-sdsl.js](https://unpkg.com/js-sdsl/dist/umd/js-sdsl.js) (for development) - [js-sdsl.min.js](https://unpkg.com/js-sdsl/dist/umd/js-sdsl.min.js) (for production) Or install js-sdsl using npm ```bash npm install js-sdsl ``` ## Usage You can visit our [official website](https://js-sdsl.github.io/) to get more information. To help you have a better use, we also provide this [API document](https://js-sdsl.github.io/js-sdsl/index.html). ### For browser ```html ``` ### For npm ```javascript // esModule import { OrderedMap } from 'js-sdsl'; // commonJs const { OrderedMap } = require('js-sdsl'); const myOrderedMap = new OrderedMap(); myOrderedMap.setElement(1, 2); console.log(myOrderedMap.getElementByKey(1)); // 2 ``` ## Build by source code You can pull this repository and run `yarn build` to rebuild this library. ## Test ### Unit test We use jest library to write unit tests, you can see test coverage on [coveralls](https://coveralls.io/github/js-sdsl/js-sdsl). You can run `yarn test:unit` command to reproduce it. ### For performance We tested most of the functions for efficiency. You can go to [`gh-pages/performance.md`](https://github.com/js-sdsl/js-sdsl/blob/gh-pages/performance.md) to see our running results or reproduce it with `yarn test:performance` command. You can also visit [here](https://js-sdsl.github.io/#/test/performance-test) to get the result. ## Maintainers [@ZLY201](https://github.com/ZLY201) ## Contributing Feel free to dive in! Open an issue or submit PRs. It may be helpful to read the [Contributor Guide](https://github.com/js-sdsl/js-sdsl/blob/main/.github/CONTRIBUTING.md). ### Contributors Thanks goes to these wonderful people:

Takatoshi Kondo

💻 ⚠️
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! ## License [MIT](https://github.com/js-sdsl/js-sdsl/blob/main/LICENSE) © ZLY201 js-sdsl-4.1.4/README.zh-CN.md000066400000000000000000000127701430603165700153100ustar00rootroot00000000000000

js-sdsl logo

一个参考 C++ STL 实现的 JavaScript 标准数据结构库

NPM Version Build Status Coverage Status GITHUB Star NPM Downloads Gzip Size Rate this package MIT-license GITHUB-language

English | 简体中文

## 包含的数据结构 - Vector - Stack - Queue - LinkList - Deque - PriorityQueue - OrderedSet (using RBTree) - OrderedMap (using RBTree) - HashSet - HashMap ## Benchmark 我们和其他数据结构库进行了基准测试,在某些场景我们甚至超过了当前最流行的库 查看 [benchmark](https://js-sdsl.github.io/#/zh-cn/test/benchmark-analyze) 以获取更多信息 ## 支持的平台 - node.js (using commonjs) - react/vue (using es5) - browser (support most browsers) ## 下载 使用 cdn 直接引入 - [js-sdsl.js](https://unpkg.com/js-sdsl/dist/umd/js-sdsl.js) (for development) - [js-sdsl.min.js](https://unpkg.com/js-sdsl/dist/umd/js-sdsl.min.js) (for production) 使用 npm 下载 ```bash npm install js-sdsl ``` ## 使用说明 您可以[访问我们的主页](https://js-sdsl.github.io/)获取更多信息 并且我们提供了完整的 [API 文档](https://js-sdsl.github.io/js-sdsl/index.html)供您参考 ### 在浏览器中使用 ```html ``` ### npm 引入 ```javascript // esModule import { OrderedMap } from 'js-sdsl'; // commonJs const { OrderedMap } = require('js-sdsl'); const myOrderedMap = new OrderedMap(); myOrderedMap.setElement(1, 2); console.log(myOrderedMap.getElementByKey(1)); // 2 ``` ## 从源码构建 您可以克隆此仓库后运行 `yarn build` 命令重新构建这个库 ## 测试 ### 单元测试 我们使用 `jest` 库来编写我们的单元测试,并将结果同步到了 [coveralls](https://coveralls.io/github/js-sdsl/js-sdsl) 上,你可以使用 `yarn test:unit` 命令来重建它 ### 对于性能的校验 我们对于编写的所有 API 进行了性能测试,并将结果同步到了 [`gh-pages/performance.md`](https://github.com/js-sdsl/js-sdsl/blob/gh-pages/performance.md) 中,你可以通过 `yarn test:performance` 命令来重现它 您也可以访问[我们的网站](https://js-sdsl.github.io/#/zh-cn/test/performance-test)来获取结果 ## 维护者 [@ZLY201](https://github.com/ZLY201) ## 贡献 我们欢迎所有的开发人员提交 issue 或 pull request,阅读[贡献者指南](https://github.com/js-sdsl/js-sdsl/blob/main/.github/CONTRIBUTING.md)可能会有所帮助 ### 贡献者 感谢对本项目做出贡献的开发者们:

Takatoshi Kondo

💻 ⚠️
本项目遵循 [all-contributors](https://github.com/all-contributors/all-contributors) 规范。 欢迎任何形式的贡献! ## 许可证 [MIT](https://github.com/js-sdsl/js-sdsl/blob/main/LICENSE) © ZLY201 js-sdsl-4.1.4/jest.config.ts000066400000000000000000000004051430603165700156640ustar00rootroot00000000000000module.exports = { preset: 'ts-jest', roots: [ '/test' ], transform: { '^.+\\.(t|j)sx?$': 'ts-jest' }, transformIgnorePatterns: [ 'node_modules' ], moduleNameMapper: { '@/(.*)$': '/src/$1' } }; js-sdsl-4.1.4/package.json000066400000000000000000000062121430603165700153730ustar00rootroot00000000000000{ "name": "js-sdsl", "version": "4.1.4", "description": "javascript standard data structure library which benchmark against C++ STL", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", "author": { "name": "ZLY201", "email": "951711127@qq.com", "url": "https://github.com/js-sdsl/js-sdsl" }, "browserslist": [ "last 2 version", "> 1%", "not dead", "maintained node versions" ], "sideEffects": false, "homepage": "https://js-sdsl.github.io", "scripts": { "setup": "rm -rf node_modules && yarn install", "dev": "ttsc --project tsconfig.cjs.json --watch", "build": "yarn build:esm && yarn build:cjs && yarn build:umd:min", "build:cjs": "rm -rf dist/cjs && ttsc --project tsconfig.cjs.json", "build:esm": "rm -rf dist/esm && ttsc --project tsconfig.esm.json", "build:umd": "rm -rf dist/umd && rollup -c", "build:umd:min": "yarn build:umd && uglifyjs --compress --mangle --source-map --comments -o dist/umd/js-sdsl.min.js -- dist/umd/js-sdsl.js", "test": "yarn test:unit && yarn test:performance", "test:unit": "jest --coverage", "test:performance": "rm -rf dist/performance && ttsc --project tsconfig.performance.json && node dist/performance/performance/index.js", "lint": "eslint --fix --color --cache --max-warnings=0 .", "generate": "typedoc src/index.ts", "generate:dev": "typedoc src/index.ts --watch", "prepare": "husky install" }, "lint-staged": { "*.{js,ts}": [ "yarn lint" ] }, "devDependencies": { "@types/jest": "^28.1.6", "@types/node": "^17.0.0", "@typescript-eslint/eslint-plugin": "^5.33.1", "@typescript-eslint/parser": "^5.33.1", "all-contributors-cli": "^6.20.0", "browserslist": "^4.21.3", "caniuse-lite": "^1.0.30001380", "commitlint": "^17.0.3", "conventional-changelog-conventionalcommits": "^5.0.0", "coveralls": "^3.1.1", "eslint": "^8.4.1", "eslint-plugin-compat": "^4.0.2", "gh-pages": "^3.2.3", "husky": "^8.0.1", "jest": "^28.1.3", "lint-staged": "^12.1.0", "rollup": "^2.78.1", "rollup-plugin-typescript2": "^0.33.0", "ts-jest": "^28.0.7", "ts-node": "^10.9.1", "ts-transform-paths": "^2.0.3", "tsconfig-paths": "^4.0.0", "tslib": "^2.4.0", "ttypescript": "^1.5.13", "typedoc": "^0.23.10", "typedoc-plugin-missing-exports": "^1.0.0", "typescript": "^4.7.4", "uglify-js": "^3.14.5" }, "repository": { "type": "github", "url": "https://github.com/js-sdsl/js-sdsl.git" }, "license": "MIT", "files": [ "dist/cjs", "dist/esm", "dist/umd", "CHANGELOG.md" ], "keywords": [ "data", "structure", "data structure", "rbTree", "rbtree", "RBTree", "red black tree", "ordered", "set", "map", "ordered map", "ordered set", "deque", "heap", "priority queue", "link list", "LinkList", "linkedList", "vector", "stack", "queue", "hash", "hash set", "hash map", "c++", "stl" ], "bugs": { "email": "951711127@qq.com", "url": "https://github.com/js-sdsl/js-sdsl/issues" }, "dependencies": {} } js-sdsl-4.1.4/performance/000077500000000000000000000000001430603165700154055ustar00rootroot00000000000000js-sdsl-4.1.4/performance/HashContainerTest/000077500000000000000000000000001430603165700207735ustar00rootroot00000000000000js-sdsl-4.1.4/performance/HashContainerTest/HashMap.performance.ts000066400000000000000000000025541430603165700251720ustar00rootroot00000000000000import { HashMap } from '@/index'; import { testReportFormat } from '../index'; function testHashMap(arr: number[], testNum: number) { let startTime, endTime; const reportList: testReportFormat['reportList'] = []; startTime = Date.now(); const myHashMap = new HashMap(arr.map((element, index) => [index, element]), (1 << 21)); endTime = Date.now(); reportList.push({ testFunc: 'constructor', testNum: 1, containerSize: myHashMap.size(), runTime: endTime - startTime }); startTime = Date.now(); for (let i = 0; i < testNum; ++i) myHashMap.setElement(i, Math.random() * 1000000); endTime = Date.now(); reportList.push({ testFunc: 'setElement', testNum, containerSize: myHashMap.size(), runTime: endTime - startTime }); startTime = Date.now(); myHashMap.forEach(([key]) => myHashMap.getElementByKey(key)); endTime = Date.now(); reportList.push({ testFunc: 'getElementByKey', testNum: myHashMap.size(), containerSize: myHashMap.size(), runTime: endTime - startTime }); const size = myHashMap.size(); startTime = Date.now(); for (let i = 0; i < testNum; ++i) myHashMap.eraseElementByKey(i); endTime = Date.now(); reportList.push({ testFunc: 'eraseElementByKey', testNum, containerSize: size, runTime: endTime - startTime }); return reportList; } export default testHashMap; js-sdsl-4.1.4/performance/HashContainerTest/HashSet.performance.ts000066400000000000000000000026061430603165700252060ustar00rootroot00000000000000import { HashSet } from '@/index'; import { testReportFormat } from '../index'; function testHashSet(arr: number[], testNum: number) { let startTime, endTime; const reportList: testReportFormat['reportList'] = []; startTime = Date.now(); const myHashSet = new HashSet(arr, (1 << 21)); endTime = Date.now(); reportList.push({ testFunc: 'constructor', testNum: 1, containerSize: myHashSet.size(), runTime: endTime - startTime }); const stdSet = new Set(arr); startTime = Date.now(); for (let i = 0; i < testNum; ++i) myHashSet.insert(Math.random() * 1000000); endTime = Date.now(); reportList.push({ testFunc: 'insert', testNum, containerSize: myHashSet.size(), runTime: endTime - startTime }); startTime = Date.now(); myHashSet.forEach(element => myHashSet.find(element)); endTime = Date.now(); reportList.push({ testFunc: 'find', testNum: myHashSet.size(), containerSize: myHashSet.size(), runTime: endTime - startTime }); myHashSet.forEach(element => stdSet.add(element)); const size = myHashSet.size(); startTime = Date.now(); stdSet.forEach(element => myHashSet.eraseElementByKey(element)); endTime = Date.now(); reportList.push({ testFunc: 'eraseElementByKey', testNum: stdSet.size, containerSize: size, runTime: endTime - startTime }); return reportList; } export default testHashSet; js-sdsl-4.1.4/performance/OtherContainerTest/000077500000000000000000000000001430603165700211715ustar00rootroot00000000000000js-sdsl-4.1.4/performance/OtherContainerTest/PriorityQueue.performance.ts000066400000000000000000000020771430603165700266750ustar00rootroot00000000000000import { PriorityQueue } from '@/index'; import { testReportFormat } from '../index'; function testPriorityQueue(arr: number[], testNum: number) { let startTime, endTime; const reportList: testReportFormat['reportList'] = []; startTime = Date.now(); const myPriority = new PriorityQueue(arr, (x: number, y: number) => y - x, false); endTime = Date.now(); reportList.push({ testFunc: 'constructor', testNum: 1, containerSize: myPriority.size(), runTime: endTime - startTime }); startTime = Date.now(); for (let i = 0; i < testNum; ++i) myPriority.push(Math.random() * 1000000); endTime = Date.now(); reportList.push({ testFunc: 'push', testNum, containerSize: myPriority.size(), runTime: endTime - startTime }); startTime = Date.now(); const size = myPriority.size(); while (!myPriority.empty()) myPriority.pop(); endTime = Date.now(); reportList.push({ testFunc: 'pop all', testNum: 1, containerSize: size, runTime: endTime - startTime }); return reportList; } export default testPriorityQueue; js-sdsl-4.1.4/performance/OtherContainerTest/Queue.performance.ts000066400000000000000000000013661430603165700251330ustar00rootroot00000000000000import { Queue } from '@/index'; import { testReportFormat } from '../index'; function testQueue(arr: number[], testNum: number) { const myQueue = new Queue(arr); let startTime, endTime; const reportList: testReportFormat['reportList'] = []; startTime = Date.now(); for (let i = 0; i < testNum; ++i) myQueue.push(i); endTime = Date.now(); reportList.push({ testFunc: 'push', testNum, containerSize: myQueue.size(), runTime: endTime - startTime }); startTime = Date.now(); const size = myQueue.size(); myQueue.clear(); endTime = Date.now(); reportList.push({ testFunc: 'clear', testNum: 1, containerSize: size, runTime: endTime - startTime }); return reportList; } export default testQueue; js-sdsl-4.1.4/performance/OtherContainerTest/Stack.performance.ts000066400000000000000000000014261430603165700251110ustar00rootroot00000000000000import { Stack } from '@/index'; import { testReportFormat } from '../index'; function testStack(arr: number[], testNum: number) { const myStack = new Stack(arr); let startTime, endTime; const reportList: testReportFormat['reportList'] = []; startTime = Date.now(); for (let i = 0; i < testNum; ++i) { myStack.push(Math.random() * 1000000); } endTime = Date.now(); reportList.push({ testFunc: 'push', testNum, containerSize: myStack.size(), runTime: endTime - startTime }); startTime = Date.now(); const size = myStack.size(); myStack.clear(); endTime = Date.now(); reportList.push({ testFunc: 'clear', testNum: 1, containerSize: size, runTime: endTime - startTime }); return reportList; } export default testStack; js-sdsl-4.1.4/performance/SequentialContainerTest/000077500000000000000000000000001430603165700222225ustar00rootroot00000000000000js-sdsl-4.1.4/performance/SequentialContainerTest/Deque.performance.ts000066400000000000000000000020611430603165700261340ustar00rootroot00000000000000import { Deque } from '@/index'; import testSequentialContainer from './SequentialContainer.performance'; function testDeque(arr: number[], testNum: number) { const myDeque = new Deque(arr); const reportList = testSequentialContainer(myDeque, testNum); let startTime, endTime; startTime = Date.now(); for (let i = 0; i < testNum * 2; ++i) myDeque.pushFront(i); endTime = Date.now(); reportList.push({ testFunc: 'pushFront', testNum: testNum * 2, containerSize: myDeque.size(), runTime: endTime - startTime }); startTime = Date.now(); const size = myDeque.size(); for (let i = 0; i < testNum; ++i) myDeque.popFront(); endTime = Date.now(); reportList.push({ testFunc: 'popFront', testNum, containerSize: size, runTime: endTime - startTime }); startTime = Date.now(); myDeque.shrinkToFit(); endTime = Date.now(); reportList.push({ testFunc: 'shrinkToFit', testNum: 1, containerSize: myDeque.size(), runTime: endTime - startTime }); return reportList; } export default testDeque; js-sdsl-4.1.4/performance/SequentialContainerTest/LinkList.performance.ts000066400000000000000000000026701430603165700266300ustar00rootroot00000000000000import { LinkList } from '@/index'; import testSequentialContainer from './SequentialContainer.performance'; function testLinkList(arr: number[], testNum: number) { const myLinkList = new LinkList(arr); const reportList = testSequentialContainer(myLinkList, testNum); const tmpArr = []; for (let i = 0; i < 10000; ++i) { tmpArr.push(Math.random() * 1000000); } let startTime, endTime; startTime = Date.now(); for (let i = 0; i < testNum; ++i) myLinkList.pushFront(i); endTime = Date.now(); reportList.push({ testFunc: 'pushFront', testNum, containerSize: myLinkList.size(), runTime: endTime - startTime }); startTime = Date.now(); const size = myLinkList.size(); for (let i = 0; i < testNum; ++i) myLinkList.popFront(); endTime = Date.now(); reportList.push({ testFunc: 'popFront', testNum, containerSize: size, runTime: endTime - startTime }); const _otherLinkList = new LinkList(); for (let i = 0; i < testNum; ++i) _otherLinkList.pushBack(Math.random() * 1000000); myLinkList.forEach(element => tmpArr.push(element)); myLinkList.sort((x, y) => x - y); _otherLinkList.sort((x, y) => x - y); startTime = Date.now(); myLinkList.merge(_otherLinkList); endTime = Date.now(); reportList.push({ testFunc: 'merge', testNum: 1, containerSize: myLinkList.size(), runTime: endTime - startTime }); return reportList; } export default testLinkList; js-sdsl-4.1.4/performance/SequentialContainerTest/SequentialContainer.performance.ts000066400000000000000000000071431430603165700310540ustar00rootroot00000000000000import { testReportFormat } from '../index'; import SequentialContainer from '@/container/SequentialContainer/Base/index'; function testSequentialContainer(container: SequentialContainer, testNum: number) { let startTime, endTime; const reportList: testReportFormat['reportList'] = []; let _testNum = testNum; startTime = Date.now(); for (let i = 0; i < testNum; ++i) container.pushBack(Math.random()); endTime = Date.now(); reportList.push({ testFunc: 'pushBack', testNum, containerSize: container.size(), runTime: endTime - startTime }); startTime = Date.now(); let size = container.size(); for (let i = 0; i < testNum; ++i) container.popBack(); endTime = Date.now(); reportList.push({ testFunc: 'popBack', testNum, containerSize: size, runTime: endTime - startTime }); for (let i = 0; i < testNum; ++i) { container.pushBack(i); } if (container.constructor.name === 'LinkList') { _testNum = Math.min(testNum, 1000); } startTime = Date.now(); for (let i = 0; i < _testNum; ++i) { container.getElementByPos(i); } endTime = Date.now(); reportList.push({ testFunc: 'getElementByPos', testNum: _testNum, containerSize: container.size(), runTime: endTime - startTime }); if (container.constructor.name === 'LinkList') { _testNum = Math.min(testNum, 1000); } startTime = Date.now(); for (let i = 0; i < _testNum; ++i) container.setElementByPos(i, i); endTime = Date.now(); reportList.push({ testFunc: 'setElementByPos', testNum: _testNum, containerSize: container.size(), runTime: endTime - startTime }); startTime = Date.now(); size = container.size(); for (let i = 0; i < 50; ++i) { container.eraseElementByPos(Math.floor(Math.random() * container.size())); } endTime = Date.now(); reportList.push({ testFunc: 'eraseElementByPos', testNum: 50, containerSize: size, runTime: endTime - startTime }); startTime = Date.now(); for (let i = 0; i < 50; ++i) { container.insert(Math.floor(Math.random() * container.size()), -1, 2); } endTime = Date.now(); reportList.push({ testFunc: 'insert', testNum: 50, containerSize: container.size(), runTime: endTime - startTime }); startTime = Date.now(); size = container.size(); container.eraseElementByValue(-1); endTime = Date.now(); reportList.push({ testFunc: 'eraseElementByValue', testNum: 1, containerSize: size, runTime: endTime - startTime }); startTime = Date.now(); container.reverse(); endTime = Date.now(); reportList.push({ testFunc: 'reverse', testNum: 1, containerSize: container.size(), runTime: endTime - startTime }); for (let i = 0; i < 50; ++i) { container.insert(Math.floor(Math.random() * container.size()), -1, 2); } size = container.size(); startTime = Date.now(); container.unique(); endTime = Date.now(); reportList.push({ testFunc: 'unique', testNum: 1, containerSize: size, runTime: endTime - startTime }); for (let i = 0; i < testNum; ++i) { container.pushBack(Math.random() * testNum); } startTime = Date.now(); container.sort((x, y) => x - y); endTime = Date.now(); reportList.push({ testFunc: 'sort', testNum: 1, containerSize: container.size(), runTime: endTime - startTime }); startTime = Date.now(); size = container.size(); container.clear(); endTime = Date.now(); reportList.push({ testFunc: 'clear', testNum: 1, containerSize: size, runTime: endTime - startTime }); return reportList; } export default testSequentialContainer; js-sdsl-4.1.4/performance/TreeContainerTest/000077500000000000000000000000001430603165700210075ustar00rootroot00000000000000js-sdsl-4.1.4/performance/TreeContainerTest/OrderedMap.performance.ts000066400000000000000000000057161430603165700257120ustar00rootroot00000000000000import { OrderedMap } from '@/index'; import { testReportFormat } from '../index'; function testOrderedMap(arr: number[], testNum: number) { let startTime, endTime; const reportList: testReportFormat['reportList'] = []; startTime = Date.now(); const myMap = new OrderedMap(arr.map((element, index) => [element, index])); endTime = Date.now(); reportList.push({ testFunc: 'constructor', testNum: 1, containerSize: myMap.size(), runTime: endTime - startTime }); startTime = Date.now(); for (let i = 0; i < testNum; ++i) myMap.setElement(i, Math.random() * 1000000); endTime = Date.now(); reportList.push({ testFunc: 'setElement', testNum, containerSize: myMap.size(), runTime: endTime - startTime }); startTime = Date.now(); let size = myMap.size(); for (let i = 0; i < testNum; ++i) myMap.eraseElementByKey(i); endTime = Date.now(); reportList.push({ testFunc: 'eraseElementByKey', testNum, containerSize: size, runTime: endTime - startTime }); startTime = Date.now(); size = myMap.size(); for (let i = testNum; i < testNum + 100; ++i) { myMap.eraseElementByPos(Math.floor(Math.random() * myMap.size())); } endTime = Date.now(); reportList.push({ testFunc: 'eraseElementByPos', testNum: 100, containerSize: size, runTime: endTime - startTime }); const _otherMap = new OrderedMap(); for (let i = testNum; i < testNum * 2; ++i) _otherMap.setElement(i, Math.random() * 1000000); startTime = Date.now(); myMap.union(_otherMap); endTime = Date.now(); reportList.push({ testFunc: 'union', testNum: 1, containerSize: myMap.size(), runTime: endTime - startTime }); let num = 0; startTime = Date.now(); for (const pair of myMap) { ++num; if (num >= testNum) break; myMap.lowerBound(pair[0]); } endTime = Date.now(); reportList.push({ testFunc: 'lowerBound', testNum, containerSize: myMap.size(), runTime: endTime - startTime }); num = 0; startTime = Date.now(); for (const pair of myMap) { ++num; if (num >= testNum) break; myMap.upperBound(pair[0]); } endTime = Date.now(); reportList.push({ testFunc: 'upperBound', testNum, containerSize: myMap.size(), runTime: endTime - startTime }); num = 0; startTime = Date.now(); for (const pair of myMap) { ++num; if (num >= testNum) break; myMap.reverseLowerBound(pair[0]); } endTime = Date.now(); reportList.push({ testFunc: 'reverseLowerBound', testNum, containerSize: myMap.size(), runTime: endTime - startTime }); num = 0; startTime = Date.now(); for (const pair of myMap) { ++num; if (num >= testNum) break; myMap.reverseUpperBound(pair[0]); } endTime = Date.now(); reportList.push({ testFunc: 'reverseUpperBound', testNum, containerSize: myMap.size(), runTime: endTime - startTime }); return reportList; } export default testOrderedMap; js-sdsl-4.1.4/performance/TreeContainerTest/OrderedSet.performance.ts000066400000000000000000000062711430603165700257250ustar00rootroot00000000000000import { OrderedSet } from '@/index'; import { testReportFormat } from '../index'; function testOrderedSet(arr: number[], testNum: number) { let startTime, endTime; const reportList: testReportFormat['reportList'] = []; startTime = Date.now(); const myOrderedSet = new OrderedSet(arr); endTime = Date.now(); reportList.push({ testFunc: 'constructor', testNum: 1, containerSize: myOrderedSet.size(), runTime: endTime - startTime }); startTime = Date.now(); for (let i = 0; i < testNum; ++i) myOrderedSet.insert(i); endTime = Date.now(); reportList.push({ testFunc: 'insert', testNum, containerSize: myOrderedSet.size(), runTime: endTime - startTime }); for (let i = 0; i < testNum; ++i) myOrderedSet.insert(Math.random() * 1000000); const tmpArr: number[] = []; myOrderedSet.forEach((element: number) => tmpArr.push(element)); startTime = Date.now(); const size = myOrderedSet.size(); for (let i = 0; i < testNum; ++i) myOrderedSet.eraseElementByKey(tmpArr[i]); endTime = Date.now(); reportList.push({ testFunc: 'eraseElementByKey', testNum, containerSize: size, runTime: endTime - startTime }); startTime = Date.now(); for (let i = 0; i < 10; ++i) { myOrderedSet.eraseElementByPos(Math.floor(Math.random() * myOrderedSet.size())); } endTime = Date.now(); reportList.push({ testFunc: 'eraseElementByPos', testNum: 10, containerSize: size, runTime: endTime - startTime }); const _otherOrderedSet = new OrderedSet(); for (let i = 0; i < testNum; ++i) _otherOrderedSet.insert(Math.random() * 1000000); startTime = Date.now(); myOrderedSet.union(_otherOrderedSet); endTime = Date.now(); reportList.push({ testFunc: 'union', testNum: 1, containerSize: myOrderedSet.size(), runTime: endTime - startTime }); let num = 0; startTime = Date.now(); for (const element of myOrderedSet) { ++num; if (num >= testNum) break; myOrderedSet.lowerBound(element); } endTime = Date.now(); reportList.push({ testFunc: 'lowerBound', testNum, containerSize: myOrderedSet.size(), runTime: endTime - startTime }); num = 0; startTime = Date.now(); for (const element of myOrderedSet) { ++num; if (num >= testNum) break; myOrderedSet.upperBound(element); } endTime = Date.now(); reportList.push({ testFunc: 'upperBound', testNum, containerSize: myOrderedSet.size(), runTime: endTime - startTime }); num = 0; startTime = Date.now(); for (const element of myOrderedSet) { ++num; if (num >= testNum) break; myOrderedSet.reverseLowerBound(element); } endTime = Date.now(); reportList.push({ testFunc: 'reverseLowerBound', testNum, containerSize: myOrderedSet.size(), runTime: endTime - startTime }); num = 0; startTime = Date.now(); for (const element of myOrderedSet) { ++num; if (num >= testNum) break; myOrderedSet.reverseUpperBound(element); } endTime = Date.now(); reportList.push({ testFunc: 'reverseUpperBound', testNum, containerSize: myOrderedSet.size(), runTime: endTime - startTime }); return reportList; } export default testOrderedSet; js-sdsl-4.1.4/performance/index.ts000066400000000000000000000057721430603165700170770ustar00rootroot00000000000000import testHashMap from './HashContainerTest/HashMap.performance'; import testHashSet from './HashContainerTest/HashSet.performance'; import testPriorityQueue from './OtherContainerTest/PriorityQueue.performance'; import testQueue from './OtherContainerTest/Queue.performance'; import testStack from './OtherContainerTest/Stack.performance'; import testDeque from './SequentialContainerTest/Deque.performance'; import testLinkList from './SequentialContainerTest/LinkList.performance'; import testOrderedMap from './TreeContainerTest/OrderedMap.performance'; import testOrderedSet from './TreeContainerTest/OrderedSet.performance'; import path from 'path'; import env from './utils/env'; import { writeFileSync } from 'fs'; export type testReportFormat = { containerName: string, reportList: { testFunc: string, containerSize: number, testNum: number, runTime: number }[]; } type testFunc = (arr: number[], testNum: number) => testReportFormat['reportList']; const testNum = 1000000; const arr: number[] = []; for (let i = 0; i < testNum; ++i) arr.push(Math.random() * testNum * 2); const testFuncMap: Record = { Stack: testStack, Queue: testQueue, PriorityQueue: testPriorityQueue, LinkList: testLinkList, Deque: testDeque, OrderedSet: testOrderedSet, OrderedMap: testOrderedMap, HashSet: testHashSet, HashMap: testHashMap }; function testContainer(containerName: string) { return { containerName, reportList: testFuncMap[containerName]([...arr], testNum) }; } function main(taskQueue: string[]) { const testReport: testReportFormat[] = []; console.log('Container performance test start...'); for (const containerName in testFuncMap) { if (taskQueue.length === 0 || taskQueue.includes(containerName)) { console.log(`${containerName} performance test start...`); testReport.push(testContainer(containerName)); console.log(`${containerName} performance test end.`); } } console.log('All container performance test end.'); console.clear(); console.log('='.repeat(35), 'Report', '='.repeat(35)); testReport.forEach(report => { console.log('='.repeat(35), report.containerName, '='.repeat(35)); console.table(report.reportList); }); console.log('='.repeat(35), 'Report', '='.repeat(35)); console.log('saving result...'); let content = env(); content += '\n## Result\n\n'; const savePath = path.resolve(__dirname, '../performance.md'); content += testReport.map(report => { const { containerName, reportList } = report; let str = `### ${containerName} `; for (const json of reportList) { str += ` `; } str += '
testFunc testNum containerSize runTime
${json.testFunc} ${json.testNum} ${json.containerSize} ${json.runTime}
\n'; return str; }).join('\n'); writeFileSync(savePath, content); console.log('saved!'); } main(process.argv.slice(2)); js-sdsl-4.1.4/performance/utils/000077500000000000000000000000001430603165700165455ustar00rootroot00000000000000js-sdsl-4.1.4/performance/utils/env.ts000066400000000000000000000013431430603165700177060ustar00rootroot00000000000000import os from 'os'; export default function () { const v8Version = process.versions.v8; const nodeVersion = process.versions.node; const plat = `${os.type()} ${os.release()} ${os.arch()} Node.JS ${nodeVersion} V8 ${v8Version}`; const cpus = os.cpus().map(function (cpu) { return cpu.model; }).reduce(function (o, model) { if (!o[model]) o[model] = 0; o[model]++; return o; }, {} as { [key: string]: number }); return `This is Js-sdsl performance test. To get source code you can go to [github](https://github.com/js-sdsl/js-sdsl/tree/main/performance). ## Environment \`\`\`bash ${plat} ${Object.keys(cpus).map(function (key) { return key + ' \u00d7 ' + cpus[key]; }).join('\n')} \`\`\`\n`; } js-sdsl-4.1.4/rollup.config.ts000066400000000000000000000006431430603165700162400ustar00rootroot00000000000000import { defineConfig } from 'rollup'; import typescript from 'rollup-plugin-typescript2'; module.exports = defineConfig({ input: 'src/index.ts', output: [{ file: 'dist/umd/js-sdsl.js', format: 'umd', name: 'sdsl' }], plugins: [ typescript({ tsconfig: 'tsconfig.esm.json', tsconfigOverride: { compilerOptions: { declaration: false } } }) ] }); js-sdsl-4.1.4/src/000077500000000000000000000000001430603165700136735ustar00rootroot00000000000000js-sdsl-4.1.4/src/container/000077500000000000000000000000001430603165700156555ustar00rootroot00000000000000js-sdsl-4.1.4/src/container/ContainerBase/000077500000000000000000000000001430603165700203725ustar00rootroot00000000000000js-sdsl-4.1.4/src/container/ContainerBase/index.ts000066400000000000000000000071601430603165700220550ustar00rootroot00000000000000export abstract class ContainerIterator { static readonly NORMAL = false; static readonly REVERSE = true; /** * @description Iterator's type. */ readonly iteratorType: boolean; protected node: unknown; protected constructor(iteratorType: boolean = ContainerIterator.NORMAL) { this.iteratorType = iteratorType; } /** * @description Pointers to element. * @return The value of the pointer's element. */ abstract get pointer(): T; /** * @description Set pointer's value (some containers are unavailable). * @param newValue The new value you want to set. */ abstract set pointer(newValue: T); /** * @description Move `this` iterator to pre. */ abstract pre(): this; /** * @description Move `this` iterator to next. */ abstract next(): this; /** * @param obj The other iterator you want to compare. * @return Boolean about if this equals to obj. * @example container.find(1).equals(container.end()); */ abstract equals(obj: ContainerIterator): boolean; /** * @description Get a copy of itself.
* We do not guarantee the safety of this function.
* Please ensure that the iterator will not fail. * @return The copy of self. */ abstract copy(): ContainerIterator; } export abstract class Base { /** * @description Container's size. * @protected */ protected length = 0; /** * @return The size of the container. */ size() { return this.length; } /** * @return Boolean about if the container is empty. */ empty() { return this.length === 0; } /** * @description Clear the container. */ abstract clear(): void; } export abstract class Container extends Base { /** * @return Iterator pointing to the beginning element. */ abstract begin(): ContainerIterator; /** * @return Iterator pointing to the super end like c++. */ abstract end(): ContainerIterator; /** * @return Iterator pointing to the end element. */ abstract rBegin(): ContainerIterator; /** * @return Iterator pointing to the super begin like c++. */ abstract rEnd(): ContainerIterator; /** * @return The first element of the container. */ abstract front(): T | undefined; /** * @return The last element of the container. */ abstract back(): T | undefined; /** * @description Iterate over all elements in the container. * @param callback Callback function like Array.forEach. */ abstract forEach(callback: (element: T, index: number) => void): void; /** * @param element The element you want to find. * @return An iterator pointing to the element if found, or super end if not found. */ abstract find(element: T): ContainerIterator; /** * @description Gets the value of the element at the specified position. */ abstract getElementByPos(pos: number): T; /** * @description Removes the element at the specified position. * @param pos The element's position you want to remove. */ abstract eraseElementByPos(pos: number): void; /** * @description Removes element by iterator and move `iter` to next. * @param iter The iterator you want to erase. * @example container.eraseElementByIterator(container.begin()); */ abstract eraseElementByIterator( iter: ContainerIterator ): ContainerIterator; /** * @description Using for 'for...of' syntax like Array. */ abstract [Symbol.iterator](): Generator; } export type initContainer = ( { size: number } | { length: number } | { size(): number } ) & { forEach(callback: (element: T) => void): void; }; js-sdsl-4.1.4/src/container/HashContainer/000077500000000000000000000000001430603165700204035ustar00rootroot00000000000000js-sdsl-4.1.4/src/container/HashContainer/Base/000077500000000000000000000000001430603165700212555ustar00rootroot00000000000000js-sdsl-4.1.4/src/container/HashContainer/Base/index.ts000066400000000000000000000036501430603165700227400ustar00rootroot00000000000000import { Base, Container } from '@/container/ContainerBase/index'; abstract class HashContainer extends Base { protected static readonly sigma = 0.75; protected static readonly treeifyThreshold = 8; protected static readonly untreeifyThreshold = 6; protected static readonly minTreeifySize = 64; protected static readonly maxBucketNum: number = (1 << 30); protected bucketNum: number; protected initBucketNum: number; protected hashFunc: (x: K) => number; protected abstract hashTable: Container[]; protected constructor( initBucketNum = 16, hashFunc: (x: K) => number = (x: K) => { let str; if (typeof x !== 'string') { str = JSON.stringify(x); } else str = x; let hashCode = 0; const strLength = str.length; for (let i = 0; i < strLength; i++) { const ch = str.charCodeAt(i); hashCode = ((hashCode << 5) - hashCode) + ch; hashCode |= 0; } return hashCode >>> 0; }) { super(); if (initBucketNum < 16 || (initBucketNum & (initBucketNum - 1)) !== 0) { throw new RangeError('InitBucketNum range error'); } this.bucketNum = this.initBucketNum = initBucketNum; this.hashFunc = hashFunc; } clear() { this.length = 0; this.bucketNum = this.initBucketNum; this.hashTable = []; } /** * @description Growth the hash table. * @protected */ protected abstract reAllocate(): void; abstract forEach(callback: (element: unknown, index: number) => void): void; /** * @description Remove the elements of the specified value. * @param key The element you want to remove. */ abstract eraseElementByKey(key: K): void; /** * @param key The element you want to find. * @return Boolean about if the specified element in the hash set. */ abstract find(key: K): void; abstract [Symbol.iterator](): Generator; } export default HashContainer; js-sdsl-4.1.4/src/container/HashContainer/HashMap.ts000066400000000000000000000145761430603165700223110ustar00rootroot00000000000000import HashContainer from './Base/index'; import Vector from '../SequentialContainer/Vector'; import OrderedMap from '../TreeContainer/OrderedMap'; import { initContainer } from '@/container/ContainerBase/index'; class HashMap extends HashContainer { protected hashTable: (Vector<[K, V]> | OrderedMap)[] = []; constructor( container: initContainer<[K, V]> = [], initBucketNum? :number, hashFunc?: (x: K) => number) { super(initBucketNum, hashFunc); container.forEach(element => this.setElement(element[0], element[1])); } protected reAllocate() { if (this.bucketNum >= HashContainer.maxBucketNum) return; const newHashTable: (Vector<[K, V]> | OrderedMap)[] = []; const originalBucketNum = this.bucketNum; this.bucketNum <<= 1; const keys = Object.keys(this.hashTable); const keyNums = keys.length; for (let i = 0; i < keyNums; ++i) { const index = parseInt(keys[i]); const container = this.hashTable[index]; const size = container.size(); if (size === 0) continue; if (size === 1) { const element = container.front() as [K, V]; newHashTable[ this.hashFunc(element[0]) & (this.bucketNum - 1) ] = new Vector([element], false); continue; } const lowList: [K, V][] = []; const highList: [K, V][] = []; container.forEach(element => { const hashCode = this.hashFunc(element[0]); if ((hashCode & originalBucketNum) === 0) { lowList.push(element); } else highList.push(element); }); if (container instanceof OrderedMap) { if (lowList.length > HashContainer.untreeifyThreshold) { newHashTable[index] = new OrderedMap(lowList); } else if (lowList.length) { newHashTable[index] = new Vector(lowList, false); } if (highList.length > HashContainer.untreeifyThreshold) { newHashTable[index + originalBucketNum] = new OrderedMap(highList); } else if (highList.length) { newHashTable[index + originalBucketNum] = new Vector(highList, false); } } else { if (lowList.length >= HashContainer.treeifyThreshold) { newHashTable[index] = new OrderedMap(lowList); } else if (lowList.length) { newHashTable[index] = new Vector(lowList, false); } if (highList.length >= HashContainer.treeifyThreshold) { newHashTable[index + originalBucketNum] = new OrderedMap(highList); } else if (highList.length) { newHashTable[index + originalBucketNum] = new Vector(highList, false); } } } this.hashTable = newHashTable; } forEach(callback: (element: [K, V], index: number) => void) { const containers = Object.values(this.hashTable); const containersNum = containers.length; let index = 0; for (let i = 0; i < containersNum; ++i) { containers[i].forEach(element => callback(element, index++)); } } /** * @description Insert a new key-value pair to hash map or set value by key. * @param key The key you want to insert. * @param value The value you want to insert. * @example HashMap.setElement(1, 2); // insert a key-value pair [1, 2] */ setElement(key: K, value: V) { const index = this.hashFunc(key) & (this.bucketNum - 1); const container = this.hashTable[index]; if (!container) { this.length += 1; this.hashTable[index] = new Vector([<[K, V]>[key, value]], false); } else { const preSize = container.size(); if (container instanceof Vector) { for (const pair of container) { if (pair[0] === key) { pair[1] = value; return; } } (container as Vector<[K, V]>).pushBack([key, value]); if (preSize + 1 >= HashMap.treeifyThreshold) { if (this.bucketNum <= HashMap.minTreeifySize) { this.length += 1; this.reAllocate(); return; } this.hashTable[index] = new OrderedMap(this.hashTable[index]); } this.length += 1; } else { (container as OrderedMap).setElement(key, value); const curSize = container.size(); this.length += curSize - preSize; } } if (this.length > this.bucketNum * HashMap.sigma) { this.reAllocate(); } } /** * @description Get the value of the element which has the specified key. * @param key The key you want to get. */ getElementByKey(key: K) { const index = this.hashFunc(key) & (this.bucketNum - 1); const container = this.hashTable[index]; if (!container) return undefined; if (container instanceof OrderedMap) { return (container as OrderedMap).getElementByKey(key); } else { for (const pair of container) { if (pair[0] === key) return pair[1]; } return undefined; } } eraseElementByKey(key: K) { const index = this.hashFunc(key) & (this.bucketNum - 1); const container = this.hashTable[index]; if (!container) return; if (container instanceof Vector) { let pos = 0; for (const pair of container) { if (pair[0] === key) { container.eraseElementByPos(pos); this.length -= 1; return; } pos += 1; } } else { const preSize = container.size(); (container as OrderedMap).eraseElementByKey(key); const curSize = container.size(); this.length += curSize - preSize; if (curSize <= HashContainer.untreeifyThreshold) { this.hashTable[index] = new Vector(container); } } } find(key: K) { const index = this.hashFunc(key) & (this.bucketNum - 1); const container = this.hashTable[index]; if (!container) return false; if (container instanceof OrderedMap) { return !(container as OrderedMap).find(key) .equals((container as OrderedMap).end()); } for (const pair of container) { if (pair[0] === key) return true; } return false; } [Symbol.iterator]() { return function * (this: HashMap) { const containers = Object.values(this.hashTable); const containersNum = containers.length; for (let i = 0; i < containersNum; ++i) { const container = containers[i]; for (const element of container) { yield element; } } }.bind(this)(); } } export default HashMap; js-sdsl-4.1.4/src/container/HashContainer/HashSet.ts000066400000000000000000000126051430603165700223160ustar00rootroot00000000000000import HashContainer from './Base/index'; import Vector from '../SequentialContainer/Vector'; import OrderedSet from '../TreeContainer/OrderedSet'; import { Container, initContainer } from '@/container/ContainerBase/index'; class HashSet extends HashContainer { protected hashTable: (Vector | OrderedSet)[] = []; constructor( container: initContainer = [], initBucketNum?: number, hashFunc?: (x: K) => number ) { super(initBucketNum, hashFunc); container.forEach(element => this.insert(element)); } protected reAllocate() { if (this.bucketNum >= HashContainer.maxBucketNum) return; const newHashTable: (Vector | OrderedSet)[] = []; const originalBucketNum = this.bucketNum; this.bucketNum <<= 1; const keys = Object.keys(this.hashTable); const keyNums = keys.length; for (let i = 0; i < keyNums; ++i) { const index = parseInt(keys[i]); const container = this.hashTable[index]; const size = container.size(); if (size === 0) continue; if (size === 1) { const element = container.front() as K; newHashTable[ this.hashFunc(element) & (this.bucketNum - 1) ] = new Vector([element], false); continue; } const lowList: K[] = []; const highList: K[] = []; container.forEach(element => { const hashCode = this.hashFunc(element); if ((hashCode & originalBucketNum) === 0) { lowList.push(element); } else highList.push(element); }); if (container instanceof OrderedSet) { if (lowList.length > HashContainer.untreeifyThreshold) { newHashTable[index] = new OrderedSet(lowList); } else if (lowList.length) { newHashTable[index] = new Vector(lowList, false); } if (highList.length > HashContainer.untreeifyThreshold) { newHashTable[index + originalBucketNum] = new OrderedSet(highList); } else if (highList.length) { newHashTable[index + originalBucketNum] = new Vector(highList, false); } } else { if (lowList.length >= HashContainer.treeifyThreshold) { newHashTable[index] = new OrderedSet(lowList); } else if (lowList.length) { newHashTable[index] = new Vector(lowList, false); } if (highList.length >= HashContainer.treeifyThreshold) { newHashTable[index + originalBucketNum] = new OrderedSet(highList); } else if (highList.length) { newHashTable[index + originalBucketNum] = new Vector(highList, false); } } } this.hashTable = newHashTable; } forEach(callback: (element: K, index: number) => void) { const containers = Object.values(this.hashTable); const containersNum = containers.length; let index = 0; for (let i = 0; i < containersNum; ++i) { containers[i].forEach(element => callback(element, index++)); } } /** * @description Insert element to hash set. * @param element The element you want to insert. */ insert(element: K) { const index = this.hashFunc(element) & (this.bucketNum - 1); const container = this.hashTable[index]; if (!container) { this.hashTable[index] = new Vector([element], false); this.length += 1; } else { const preSize = container.size(); if (container instanceof Vector) { if (!(container as Vector).find(element) .equals((container as Vector).end())) return; (container as Vector).pushBack(element); if (preSize + 1 >= HashContainer.treeifyThreshold) { if (this.bucketNum <= HashContainer.minTreeifySize) { this.length += 1; this.reAllocate(); return; } this.hashTable[index] = new OrderedSet(container); } this.length += 1; } else { (container as OrderedSet).insert(element); const curSize = container.size(); this.length += curSize - preSize; } } if (this.length > this.bucketNum * HashContainer.sigma) { this.reAllocate(); } } eraseElementByKey(key: K) { const index = this.hashFunc(key) & (this.bucketNum - 1); const container = this.hashTable[index]; if (!container) return; const preSize = container.size(); if (preSize === 0) return; if (container instanceof Vector) { (container as Vector).eraseElementByValue(key); const curSize = container.size(); this.length += curSize - preSize; } else { (container as OrderedSet).eraseElementByKey(key); const curSize = container.size(); this.length += curSize - preSize; if (curSize <= HashContainer.untreeifyThreshold) { this.hashTable[index] = new Vector(container); } } } find(element: K) { const index = this.hashFunc(element) & (this.bucketNum - 1); const container = this.hashTable[index]; if (!container) return false; return !(container as Container).find(element) .equals((container as Container).end()); } [Symbol.iterator]() { return function * (this: HashSet) { const containers = Object.values(this.hashTable); const containersNum = containers.length; for (let i = 0; i < containersNum; ++i) { const container = containers[i]; for (const element of container) { yield element; } } }.bind(this)(); } } export default HashSet; js-sdsl-4.1.4/src/container/OtherContainer/000077500000000000000000000000001430603165700206015ustar00rootroot00000000000000js-sdsl-4.1.4/src/container/OtherContainer/PriorityQueue.ts000066400000000000000000000077121430603165700240060ustar00rootroot00000000000000import { Base, initContainer } from '@/container/ContainerBase/index'; class PriorityQueue extends Base { private readonly priorityQueue: T[]; private readonly cmp: (x: T, y: T) => number; /** * @description PriorityQueue's constructor. * @param container Initialize container, must have a forEach function. * @param cmp Compare function. * @param copy When the container is an array, you can choose to directly operate on the original object of * the array or perform a shallow copy. The default is shallow copy. */ constructor( container: initContainer = [], cmp: (x: T, y: T) => number = (x: T, y: T) => { if (x > y) return -1; if (x < y) return 1; return 0; }, copy = true) { super(); this.cmp = cmp; if (Array.isArray(container)) { this.priorityQueue = copy ? [...container] : container; } else { this.priorityQueue = []; container.forEach(element => this.priorityQueue.push(element)); } this.length = this.priorityQueue.length; for (let parent = (this.length - 1) >> 1; parent >= 0; --parent) { let curParent = parent; let curChild = (curParent << 1) | 1; while (curChild < this.length) { const left = curChild; const right = left + 1; let minChild = left; if ( right < this.length && this.cmp(this.priorityQueue[left], this.priorityQueue[right]) > 0 ) { minChild = right; } if (this.cmp(this.priorityQueue[curParent], this.priorityQueue[minChild]) <= 0) break; [this.priorityQueue[curParent], this.priorityQueue[minChild]] = [this.priorityQueue[minChild], this.priorityQueue[curParent]]; curParent = minChild; curChild = (curParent << 1) | 1; } } } /** * @description Adjusting parent's children to suit the nature of the heap. * @param parent Parent's index. * @private */ private adjust(parent: number) { const left = (parent << 1) | 1; const right = (parent << 1) + 2; if ( left < this.length && this.cmp(this.priorityQueue[parent], this.priorityQueue[left]) > 0 ) { [this.priorityQueue[parent], this.priorityQueue[left]] = [this.priorityQueue[left], this.priorityQueue[parent]]; } if (right < this.length && this.cmp(this.priorityQueue[parent], this.priorityQueue[right]) > 0 ) { [this.priorityQueue[parent], this.priorityQueue[right]] = [this.priorityQueue[right], this.priorityQueue[parent]]; } } clear() { this.length = 0; this.priorityQueue.length = 0; } /** * @description Push element into a container in order. * @param element The element you want to push. */ push(element: T) { this.priorityQueue.push(element); this.length += 1; if (this.length === 1) return; let curNode = this.length - 1; while (curNode > 0) { const parent = (curNode - 1) >> 1; if (this.cmp(this.priorityQueue[parent], element) <= 0) break; this.adjust(parent); curNode = parent; } } /** * @description Removes the top element. */ pop() { if (!this.length) return; const last = this.priorityQueue[this.length - 1]; this.length -= 1; let parent = 0; while (parent < this.length) { const left = (parent << 1) | 1; const right = (parent << 1) + 2; if (left >= this.length) break; let minChild = left; if ( right < this.length && this.cmp(this.priorityQueue[left], this.priorityQueue[right]) > 0 ) { minChild = right; } if (this.cmp(this.priorityQueue[minChild], last) >= 0) break; this.priorityQueue[parent] = this.priorityQueue[minChild]; parent = minChild; } this.priorityQueue[parent] = last; this.priorityQueue.pop(); } /** * @description Accesses the top element. */ top() { return this.priorityQueue[0] as (T | undefined); } } export default PriorityQueue; js-sdsl-4.1.4/src/container/OtherContainer/Queue.ts000066400000000000000000000014271430603165700222410ustar00rootroot00000000000000import Deque from '../SequentialContainer/Deque'; import { Base, initContainer } from '@/container/ContainerBase/index'; class Queue extends Base { private queue: Deque; constructor(container: initContainer = []) { super(); this.queue = new Deque(container); this.length = this.queue.size(); } clear() { this.queue.clear(); this.length = 0; } /** * @description Inserts element to queue's end. */ push(element: T) { this.queue.pushBack(element); this.length += 1; } /** * @description Removes the first element. */ pop() { this.queue.popFront(); if (this.length) this.length -= 1; } /** * @description Access the first element. */ front() { return this.queue.front(); } } export default Queue; js-sdsl-4.1.4/src/container/OtherContainer/Stack.ts000066400000000000000000000013441430603165700222200ustar00rootroot00000000000000import { Base, initContainer } from '@/container/ContainerBase/index'; class Stack extends Base { private stack: T[] = []; constructor(container: initContainer = []) { super(); container.forEach(element => this.push(element)); } clear() { this.length = 0; this.stack.length = 0; } /** * @description Insert element to stack's end. */ push(element: T) { this.stack.push(element); this.length += 1; } /** * @description Removes the end element. */ pop() { this.stack.pop(); if (this.length > 0) this.length -= 1; } /** * @description Accesses the end element. */ top() { return this.stack[this.length - 1] as (T | undefined); } } export default Stack; js-sdsl-4.1.4/src/container/SequentialContainer/000077500000000000000000000000001430603165700216325ustar00rootroot00000000000000js-sdsl-4.1.4/src/container/SequentialContainer/Base/000077500000000000000000000000001430603165700225045ustar00rootroot00000000000000js-sdsl-4.1.4/src/container/SequentialContainer/Base/RandomIterator.ts000066400000000000000000000037211430603165700260110ustar00rootroot00000000000000import { checkWithinAccessParams } from '@/utils/checkParams'; import { ContainerIterator } from '@/container/ContainerBase/index'; export abstract class RandomIterator extends ContainerIterator { protected node: number; protected readonly size: () => number; protected readonly getElementByPos: (pos: number) => T; protected readonly setElementByPos: (pos: number, element: T) => void; pre: () => this; next: () => this; constructor( index: number, size: () => number, getElementByPos: (pos: number) => T, setElementByPos: (pos: number, element: T) => void, iteratorType?: boolean ) { super(iteratorType); this.node = index; this.size = size; this.getElementByPos = getElementByPos; this.setElementByPos = setElementByPos; if (this.iteratorType === ContainerIterator.NORMAL) { this.pre = function () { if (this.node === 0) { throw new RangeError('Deque iterator access denied!'); } this.node -= 1; return this; }; this.next = function () { if (this.node === this.size()) { throw new RangeError('Deque Iterator access denied!'); } this.node += 1; return this; }; } else { this.pre = function () { if (this.node === this.size() - 1) { throw new RangeError('Deque iterator access denied!'); } this.node += 1; return this; }; this.next = function () { if (this.node === -1) { throw new RangeError('Deque iterator access denied!'); } this.node -= 1; return this; }; } } get pointer() { checkWithinAccessParams(this.node, 0, this.size() - 1); return this.getElementByPos(this.node); } set pointer(newValue: T) { checkWithinAccessParams(this.node, 0, this.size() - 1); this.setElementByPos(this.node, newValue); } equals(obj: RandomIterator) { return this.node === obj.node; } } js-sdsl-4.1.4/src/container/SequentialContainer/Base/index.ts000066400000000000000000000026431430603165700241700ustar00rootroot00000000000000import { Container } from '@/container/ContainerBase/index'; abstract class SequentialContainer extends Container { /** * @description Push the element to the back. * @param element The element you want to push. */ abstract pushBack(element: T): void; /** * @description Removes the last element. */ abstract popBack(): void; /** * @description Sets element by position. * @param pos The position you want to change. * @param element The element's value you want to update. */ abstract setElementByPos(pos: number, element: T): void; /** * @description Removes the elements of the specified value. * @param value The value you want to remove. */ abstract eraseElementByValue(value: T): void; /** * @description Insert several elements after the specified position. * @param pos The position you want to insert. * @param element The element you want to insert. * @param num The number of elements you want to insert (default 1). */ abstract insert(pos: number, element: T, num?: number): void; /** * @description Reverses the container. */ abstract reverse(): void; /** * @description Removes the duplication of elements in the container. */ abstract unique(): void; /** * @description Sort the container. * @param cmp Comparison function. */ abstract sort(cmp?: (x: T, y: T) => number): void; } export default SequentialContainer; js-sdsl-4.1.4/src/container/SequentialContainer/Deque.ts000066400000000000000000000250601430603165700232500ustar00rootroot00000000000000import SequentialContainer from './Base/index'; import { checkWithinAccessParams } from '@/utils/checkParams'; import { ContainerIterator, initContainer } from '@/container/ContainerBase/index'; import { RandomIterator } from '@/container/SequentialContainer/Base/RandomIterator'; export class DequeIterator extends RandomIterator { copy() { return new DequeIterator( this.node, this.size, this.getElementByPos, this.setElementByPos, this.iteratorType ); } } class Deque extends SequentialContainer { private first = 0; private curFirst = 0; private last = 0; private curLast = 0; private bucketNum = 0; private readonly bucketSize: number; private map: (T | undefined)[][] = []; constructor(container: initContainer = [], bucketSize = (1 << 12)) { super(); let _length; if ('size' in container) { if (typeof container.size === 'number') { _length = container.size; } else { _length = container.size(); } } else if ('length' in container) { _length = container.length; } else { throw new RangeError('Can\'t get container\'s size!'); } this.bucketSize = bucketSize; this.bucketNum = Math.max(Math.ceil(_length / this.bucketSize), 1); for (let i = 0; i < this.bucketNum; ++i) { this.map.push(new Array(this.bucketSize)); } const needBucketNum = Math.ceil(_length / this.bucketSize); this.first = this.last = (this.bucketNum >> 1) - (needBucketNum >> 1); this.curFirst = this.curLast = (this.bucketSize - _length % this.bucketSize) >> 1; container.forEach(element => this.pushBack(element)); this.size = this.size.bind(this); this.getElementByPos = this.getElementByPos.bind(this); this.setElementByPos = this.setElementByPos.bind(this); } /** * @description Growth the Deque. * @private */ private reAllocate() { const newMap = []; const addBucketNum = Math.max(this.bucketNum >> 1, 1); for (let i = 0; i < addBucketNum; ++i) { newMap[i] = new Array(this.bucketSize); } for (let i = this.first; i < this.bucketNum; ++i) { newMap[newMap.length] = this.map[i]; } for (let i = 0; i < this.last; ++i) { newMap[newMap.length] = this.map[i]; } newMap[newMap.length] = [...this.map[this.last]]; this.first = addBucketNum; this.last = newMap.length - 1; for (let i = 0; i < addBucketNum; ++i) { newMap[newMap.length] = new Array(this.bucketSize); } this.map = newMap; this.bucketNum = newMap.length; } /** * @description Get the bucket position of the element and the pointer position by index. * @param pos The element's index. * @private */ private getElementIndex(pos: number) { const offset = this.curFirst + pos + 1; const offsetRemainder = offset % this.bucketSize; let curNodePointerIndex = offsetRemainder - 1; let curNodeBucketIndex = this.first + (offset - offsetRemainder) / this.bucketSize; if (offsetRemainder === 0) curNodeBucketIndex -= 1; curNodeBucketIndex %= this.bucketNum; if (curNodePointerIndex < 0) curNodePointerIndex += this.bucketSize; return { curNodeBucketIndex, curNodePointerIndex }; } clear() { this.map = [[]]; this.bucketNum = 1; this.first = this.last = this.length = 0; this.curFirst = this.curLast = this.bucketSize >> 1; } front() { return this.map[this.first][this.curFirst]; } back() { return this.map[this.last][this.curLast]; } begin() { return new DequeIterator( 0, this.size, this.getElementByPos, this.setElementByPos ); } end() { return new DequeIterator( this.length, this.size, this.getElementByPos, this.setElementByPos ); } rBegin() { return new DequeIterator( this.length - 1, this.size, this.getElementByPos, this.setElementByPos, ContainerIterator.REVERSE ); } rEnd() { return new DequeIterator( -1, this.size, this.getElementByPos, this.setElementByPos, ContainerIterator.REVERSE ); } pushBack(element: T) { if (this.length) { if (this.curLast < this.bucketSize - 1) { this.curLast += 1; } else if (this.last < this.bucketNum - 1) { this.last += 1; this.curLast = 0; } else { this.last = 0; this.curLast = 0; } if ( this.last === this.first && this.curLast === this.curFirst ) this.reAllocate(); } this.length += 1; this.map[this.last][this.curLast] = element; } popBack() { if (!this.length) return; this.map[this.last][this.curLast] = undefined; if (this.length !== 1) { if (this.curLast > 0) { this.curLast -= 1; } else if (this.last > 0) { this.last -= 1; this.curLast = this.bucketSize - 1; } else { this.last = this.bucketNum - 1; this.curLast = this.bucketSize - 1; } } this.length -= 1; } /** * @description Push the element to the front. * @param element The element you want to push. */ pushFront(element: T) { if (this.length) { if (this.curFirst > 0) { this.curFirst -= 1; } else if (this.first > 0) { this.first -= 1; this.curFirst = this.bucketSize - 1; } else { this.first = this.bucketNum - 1; this.curFirst = this.bucketSize - 1; } if ( this.first === this.last && this.curFirst === this.curLast ) this.reAllocate(); } this.length += 1; this.map[this.first][this.curFirst] = element; } /** * @description Remove the first element. */ popFront() { if (!this.length) return; this.map[this.first][this.curFirst] = undefined; if (this.length !== 1) { if (this.curFirst < this.bucketSize - 1) { this.curFirst += 1; } else if (this.first < this.bucketNum - 1) { this.first += 1; this.curFirst = 0; } else { this.first = 0; this.curFirst = 0; } } this.length -= 1; } forEach(callback: (element: T, index: number) => void) { for (let i = 0; i < this.length; ++i) { callback(this.getElementByPos(i), i); } } getElementByPos(pos: number) { checkWithinAccessParams(pos, 0, this.length - 1); const { curNodeBucketIndex, curNodePointerIndex } = this.getElementIndex(pos); return this.map[curNodeBucketIndex][curNodePointerIndex] as T; } setElementByPos(pos: number, element: T) { checkWithinAccessParams(pos, 0, this.length - 1); const { curNodeBucketIndex, curNodePointerIndex } = this.getElementIndex(pos); this.map[curNodeBucketIndex][curNodePointerIndex] = element; } insert(pos: number, element: T, num = 1) { checkWithinAccessParams(pos, 0, this.length); if (pos === 0) { while (num--) this.pushFront(element); } else if (pos === this.length) { while (num--) this.pushBack(element); } else { const arr: T[] = []; for (let i = pos; i < this.length; ++i) { arr.push(this.getElementByPos(i)); } this.cut(pos - 1); for (let i = 0; i < num; ++i) this.pushBack(element); for (let i = 0; i < arr.length; ++i) this.pushBack(arr[i]); } } /** * @description Remove all elements after the specified position (excluding the specified position). * @param pos The previous position of the first removed element. * @example deque.cut(1); // Then deque's size will be 2. deque -> [0, 1] */ cut(pos: number) { if (pos < 0) { this.clear(); return; } const { curNodeBucketIndex, curNodePointerIndex } = this.getElementIndex(pos); this.last = curNodeBucketIndex; this.curLast = curNodePointerIndex; this.length = pos + 1; } eraseElementByPos(pos: number) { checkWithinAccessParams(pos, 0, this.length - 1); if (pos === 0) this.popFront(); else if (pos === this.length - 1) this.popBack(); else { const arr = []; for (let i = pos + 1; i < this.length; ++i) { arr.push(this.getElementByPos(i)); } this.cut(pos); this.popBack(); arr.forEach(element => this.pushBack(element)); } } eraseElementByValue(value: T) { if (!this.length) return; const arr: T[] = []; for (let i = 0; i < this.length; ++i) { const element = this.getElementByPos(i); if (element !== value) arr.push(element); } const _length = arr.length; for (let i = 0; i < _length; ++i) this.setElementByPos(i, arr[i]); this.cut(_length - 1); } eraseElementByIterator(iter: DequeIterator) { // @ts-ignore const node = iter.node; this.eraseElementByPos(node); iter = iter.next(); return iter; } find(element: T) { for (let i = 0; i < this.length; ++i) { if (this.getElementByPos(i) === element) { return new DequeIterator( i, this.size, this.getElementByPos, this.setElementByPos ); } } return this.end(); } reverse() { let l = 0; let r = this.length - 1; while (l < r) { const tmp = this.getElementByPos(l); this.setElementByPos(l, this.getElementByPos(r)); this.setElementByPos(r, tmp); l += 1; r -= 1; } } unique() { if (this.length <= 1) return; let index = 1; let pre = this.getElementByPos(0); for (let i = 1; i < this.length; ++i) { const cur = this.getElementByPos(i); if (cur !== pre) { pre = cur; this.setElementByPos(index++, cur); } } while (this.length > index) this.popBack(); } sort(cmp?: (x: T, y: T) => number) { const arr: T[] = []; for (let i = 0; i < this.length; ++i) { arr.push(this.getElementByPos(i)); } arr.sort(cmp); for (let i = 0; i < this.length; ++i) this.setElementByPos(i, arr[i]); } /** * @description Remove as much useless space as possible. */ shrinkToFit() { if (!this.length) return; const arr: T[] = []; this.forEach(element => arr.push(element)); this.bucketNum = Math.max(Math.ceil(this.length / this.bucketSize), 1); this.length = this.first = this.last = this.curFirst = this.curLast = 0; this.map = []; for (let i = 0; i < this.bucketNum; ++i) { this.map.push(new Array(this.bucketSize)); } for (let i = 0; i < arr.length; ++i) this.pushBack(arr[i]); } [Symbol.iterator]() { return function * (this: Deque) { for (let i = 0; i < this.length; ++i) { yield this.getElementByPos(i); } }.bind(this)(); } } export default Deque; js-sdsl-4.1.4/src/container/SequentialContainer/LinkList.ts000066400000000000000000000246571430603165700237510ustar00rootroot00000000000000import SequentialContainer from './Base/index'; import { checkWithinAccessParams } from '@/utils/checkParams'; import { ContainerIterator, initContainer } from '@/container/ContainerBase/index'; export class LinkNode { value: T | undefined = undefined; pre: LinkNode | undefined = undefined; next: LinkNode | undefined = undefined; constructor(element?: T) { this.value = element; } } export class LinkListIterator extends ContainerIterator { protected node: LinkNode; private readonly header: LinkNode; pre: () => this; next: () => this; constructor( node: LinkNode, header: LinkNode, iteratorType?: boolean ) { super(iteratorType); this.node = node; this.header = header; if (this.iteratorType === ContainerIterator.NORMAL) { this.pre = function () { if (this.node.pre === this.header) { throw new RangeError('LinkList iterator access denied!'); } this.node = this.node.pre as LinkNode; return this; }; this.next = function () { if (this.node === this.header) { throw new RangeError('LinkList iterator access denied!'); } this.node = this.node.next as LinkNode; return this; }; } else { this.pre = function () { if (this.node.next === this.header) { throw new RangeError('LinkList iterator access denied!'); } this.node = this.node.next as LinkNode; return this; }; this.next = function () { if (this.node === this.header) { throw new RangeError('LinkList iterator access denied!'); } this.node = this.node.pre as LinkNode; return this; }; } } get pointer() { if (this.node === this.header) { throw new RangeError('LinkList iterator access denied!'); } return this.node.value as T; } set pointer(newValue: T) { if (this.node === this.header) { throw new RangeError('LinkList iterator access denied!'); } this.node.value = newValue; } equals(obj: LinkListIterator) { return this.node === obj.node; } copy() { return new LinkListIterator( this.node, this.header, this.iteratorType ); } } class LinkList extends SequentialContainer { private header: LinkNode = new LinkNode(); private head: LinkNode | undefined = undefined; private tail: LinkNode | undefined = undefined; constructor(container: initContainer = []) { super(); container.forEach(element => this.pushBack(element)); } clear() { this.length = 0; this.head = this.tail = undefined; this.header.pre = this.header.next = undefined; } begin() { return new LinkListIterator(this.head || this.header, this.header); } end() { return new LinkListIterator(this.header, this.header); } rBegin() { return new LinkListIterator(this.tail || this.header, this.header, ContainerIterator.REVERSE); } rEnd() { return new LinkListIterator(this.header, this.header, ContainerIterator.REVERSE); } front() { return this.head ? this.head.value : undefined; } back() { return this.tail ? this.tail.value : undefined; } forEach(callback: (element: T, index: number) => void) { if (!this.length) return; let curNode = this.head as LinkNode; let index = 0; while (curNode !== this.header) { callback(curNode.value as T, index++); curNode = curNode.next as LinkNode; } } getElementByPos(pos: number) { checkWithinAccessParams(pos, 0, this.length - 1); let curNode = this.head as LinkNode; while (pos--) { curNode = curNode.next as LinkNode; } return curNode.value as T; } eraseElementByPos(pos: number) { checkWithinAccessParams(pos, 0, this.length - 1); if (pos === 0) this.popFront(); else if (pos === this.length - 1) this.popBack(); else { let curNode = this.head; while (pos--) { curNode = (curNode as LinkNode).next; } curNode = curNode as LinkNode; const pre = curNode.pre as LinkNode; const next = curNode.next as LinkNode; next.pre = pre; pre.next = next; this.length -= 1; } } eraseElementByValue(value: T) { while (this.head && this.head.value === value) this.popFront(); while (this.tail && this.tail.value === value) this.popBack(); if (!this.head) return; let curNode: LinkNode = this.head; while (curNode !== this.header) { if (curNode.value === value) { const pre = curNode.pre; const next = curNode.next; if (next) next.pre = pre; if (pre) pre.next = next; this.length -= 1; } curNode = curNode.next as LinkNode; } } eraseElementByIterator(iter: LinkListIterator) { // @ts-ignore const node = iter.node; if (node === this.header) { throw new RangeError('Invalid iterator'); } iter = iter.next(); if (this.head === node) this.popFront(); else if (this.tail === node) this.popBack(); else { const pre = node.pre; const next = node.next; if (next) next.pre = pre; if (pre) pre.next = next; this.length -= 1; } return iter; } pushBack(element: T) { this.length += 1; const newTail = new LinkNode(element); if (!this.tail) { this.head = this.tail = newTail; this.header.next = this.head; this.head.pre = this.header; } else { this.tail.next = newTail; newTail.pre = this.tail; this.tail = newTail; } this.tail.next = this.header; this.header.pre = this.tail; } popBack() { if (!this.tail) return; this.length -= 1; if (this.head === this.tail) { this.head = this.tail = undefined; this.header.next = undefined; } else { this.tail = this.tail.pre; if (this.tail) this.tail.next = undefined; } this.header.pre = this.tail; if (this.tail) this.tail.next = this.header; } setElementByPos(pos: number, element: T) { checkWithinAccessParams(pos, 0, this.length - 1); let curNode = this.head as LinkNode; while (pos--) { curNode = curNode.next as LinkNode; } curNode.value = element; } insert(pos: number, element: T, num = 1) { checkWithinAccessParams(pos, 0, this.length); if (num <= 0) return; if (pos === 0) { while (num--) this.pushFront(element); } else if (pos === this.length) { while (num--) this.pushBack(element); } else { let curNode = this.head as LinkNode; for (let i = 1; i < pos; ++i) { curNode = curNode.next as LinkNode; } const next = curNode.next; this.length += num; while (num--) { curNode.next = new LinkNode(element); curNode.next.pre = curNode; curNode = curNode.next; } curNode.next = next; if (next) next.pre = curNode; } } find(element: T) { if (!this.head) return this.end(); let curNode = this.head; while (curNode !== this.header) { if (curNode.value === element) { return new LinkListIterator(curNode, this.header); } curNode = curNode.next as LinkNode; } return this.end(); } reverse() { if (this.length <= 1) return; let pHead = this.head as LinkNode; let pTail = this.tail as LinkNode; let cnt = 0; while ((cnt << 1) < this.length) { const tmp = pHead.value; pHead.value = pTail.value; pTail.value = tmp; pHead = pHead.next as LinkNode; pTail = pTail.pre as LinkNode; cnt += 1; } } unique() { if (this.length <= 1) return; let curNode = this.head as LinkNode; while (curNode !== this.header) { let tmpNode = curNode; while (tmpNode.next && tmpNode.value === tmpNode.next.value) { tmpNode = tmpNode.next; this.length -= 1; } curNode.next = tmpNode.next; if (curNode.next) curNode.next.pre = curNode; curNode = curNode.next as LinkNode; } } sort(cmp?: (x: T, y: T) => number) { if (this.length <= 1) return; const arr: T[] = []; this.forEach(element => arr.push(element)); arr.sort(cmp); let curNode: LinkNode = this.head as LinkNode; arr.forEach((element) => { curNode.value = element; curNode = curNode.next as LinkNode; }); } /** * @description Push an element to the front. * @param element The element you want to push. */ pushFront(element: T) { this.length += 1; const newHead = new LinkNode(element); if (!this.head) { this.head = this.tail = newHead; this.tail.next = this.header; this.header.pre = this.tail; } else { newHead.next = this.head; this.head.pre = newHead; this.head = newHead; } this.header.next = this.head; this.head.pre = this.header; } /** * @description Removes the first element. */ popFront() { if (!this.head) return; this.length -= 1; if (this.head === this.tail) { this.head = this.tail = undefined; this.header.pre = this.tail; } else { this.head = this.head.next; if (this.head) this.head.pre = this.header; } this.header.next = this.head; } /** * @description Merges two sorted lists. * @param list The other list you want to merge (must be sorted). */ merge(list: LinkList) { if (!this.head) { list.forEach(element => this.pushBack(element)); return; } let curNode: LinkNode = this.head; list.forEach(element => { while ( curNode && curNode !== this.header && (curNode.value as T) <= element ) { curNode = curNode.next as LinkNode; } if (curNode === this.header) { this.pushBack(element); curNode = this.tail as LinkNode; } else if (curNode === this.head) { this.pushFront(element); curNode = this.head; } else { this.length += 1; const pre = curNode.pre as LinkNode; pre.next = new LinkNode(element); pre.next.pre = pre; pre.next.next = curNode; curNode.pre = pre.next; } }); } [Symbol.iterator]() { return function * (this: LinkList) { if (!this.head) return; let curNode = this.head; while (curNode !== this.header) { yield curNode.value as T; curNode = curNode.next as LinkNode; } }.bind(this)(); } } export default LinkList; js-sdsl-4.1.4/src/container/SequentialContainer/Vector.ts000066400000000000000000000103671430603165700234530ustar00rootroot00000000000000import SequentialContainer from './Base/index'; import { checkWithinAccessParams } from '@/utils/checkParams'; import { ContainerIterator, initContainer } from '@/container/ContainerBase/index'; import { RandomIterator } from '@/container/SequentialContainer/Base/RandomIterator'; export class VectorIterator extends RandomIterator { copy() { return new VectorIterator( this.node, this.size, this.getElementByPos, this.setElementByPos, this.iteratorType ); } } class Vector extends SequentialContainer { private readonly vector: T[]; /** * @description Vector's constructor. * @param container Initialize container, must have a forEach function. * @param copy When the container is an array, you can choose to directly operate on the original object of * the array or perform a shallow copy. The default is shallow copy. */ constructor(container: initContainer = [], copy = true) { super(); if (Array.isArray(container)) { this.vector = copy ? [...container] : container; this.length = container.length; } else { this.vector = []; container.forEach(element => this.pushBack(element)); } this.size = this.size.bind(this); this.getElementByPos = this.getElementByPos.bind(this); this.setElementByPos = this.setElementByPos.bind(this); } clear() { this.length = 0; this.vector.length = 0; } begin() { return new VectorIterator( 0, this.size, this.getElementByPos, this.setElementByPos ); } end() { return new VectorIterator( this.length, this.size, this.getElementByPos, this.setElementByPos ); } rBegin() { return new VectorIterator( this.length - 1, this.size, this.getElementByPos, this.setElementByPos, ContainerIterator.REVERSE ); } rEnd() { return new VectorIterator( -1, this.size, this.getElementByPos, this.setElementByPos, ContainerIterator.REVERSE ); } front() { return this.vector[0] as (T | undefined); } back() { return this.vector[this.length - 1] as (T | undefined); } forEach(callback: (element: T, index: number) => void) { for (let i = 0; i < this.length; ++i) { callback(this.vector[i], i); } } getElementByPos(pos: number) { checkWithinAccessParams(pos, 0, this.length - 1); return this.vector[pos]; } eraseElementByPos(pos: number) { checkWithinAccessParams(pos, 0, this.length - 1); this.vector.splice(pos, 1); this.length -= 1; } eraseElementByValue(value: T) { let index = 0; for (let i = 0; i < this.length; ++i) { if (this.vector[i] !== value) { this.vector[index++] = this.vector[i]; } } this.length = this.vector.length = index; } eraseElementByIterator(iter: VectorIterator) { // @ts-ignore const node = iter.node; iter = iter.next(); this.eraseElementByPos(node); return iter; } pushBack(element: T) { this.vector.push(element); this.length += 1; } popBack() { if (!this.length) return; this.vector.pop(); this.length -= 1; } setElementByPos(pos: number, element: T) { checkWithinAccessParams(pos, 0, this.length - 1); this.vector[pos] = element; } insert(pos: number, element: T, num = 1) { checkWithinAccessParams(pos, 0, this.length); this.vector.splice(pos, 0, ...new Array(num).fill(element)); this.length += num; } find(element: T) { for (let i = 0; i < this.length; ++i) { if (this.vector[i] === element) { return new VectorIterator( i, this.size, this.getElementByPos, this.getElementByPos ); } } return this.end(); } reverse() { this.vector.reverse(); } unique() { let index = 1; for (let i = 1; i < this.length; ++i) { if (this.vector[i] !== this.vector[i - 1]) { this.vector[index++] = this.vector[i]; } } this.length = this.vector.length = index; } sort(cmp?: (x: T, y: T) => number) { this.vector.sort(cmp); } [Symbol.iterator]() { return function * (this: Vector) { return yield * this.vector; }.bind(this)(); } } export default Vector; js-sdsl-4.1.4/src/container/TreeContainer/000077500000000000000000000000001430603165700204175ustar00rootroot00000000000000js-sdsl-4.1.4/src/container/TreeContainer/Base/000077500000000000000000000000001430603165700212715ustar00rootroot00000000000000js-sdsl-4.1.4/src/container/TreeContainer/Base/TreeIterator.ts000066400000000000000000000030011430603165700242440ustar00rootroot00000000000000import TreeNode from './TreeNode'; import { ContainerIterator } from '@/container/ContainerBase/index'; abstract class TreeIterator extends ContainerIterator { protected node: TreeNode; protected header: TreeNode; pre: () => this; next: () => this; constructor( node: TreeNode, header: TreeNode, iteratorType?: boolean ) { super(iteratorType); this.node = node; this.header = header; if (this.iteratorType === ContainerIterator.NORMAL) { this.pre = function () { if (this.node === this.header.left) { throw new RangeError('LinkList iterator access denied!'); } this.node = this.node.pre(); return this; }; this.next = function () { if (this.node === this.header) { throw new RangeError('LinkList iterator access denied!'); } this.node = this.node.next(); return this; }; } else { this.pre = function () { if (this.node === this.header.right) { throw new RangeError('LinkList iterator access denied!'); } this.node = this.node.next(); return this; }; this.next = function () { if (this.node === this.header) { throw new RangeError('LinkList iterator access denied!'); } this.node = this.node.pre(); return this; }; } } equals(obj: TreeIterator) { return this.node === obj.node; } } export default TreeIterator; js-sdsl-4.1.4/src/container/TreeContainer/Base/TreeNode.ts000066400000000000000000000054221430603165700233510ustar00rootroot00000000000000class TreeNode { static readonly RED = true; static readonly BLACK = false; color = true; key: K | undefined = undefined; value: V | undefined = undefined; left: TreeNode | undefined = undefined; right: TreeNode | undefined = undefined; parent: TreeNode | undefined = undefined; constructor(key?: K, value?: V) { this.key = key; this.value = value; } /** * @description Get the pre node. * @return TreeNode about the pre node. */ pre() { let preNode: TreeNode = this; if ( preNode.color === TreeNode.RED && (preNode.parent as TreeNode).parent === preNode ) { preNode = preNode.right as TreeNode; } else if (preNode.left) { preNode = preNode.left; while (preNode.right) { preNode = preNode.right; } } else { let pre = preNode.parent as TreeNode; while (pre.left === preNode) { preNode = pre; pre = preNode.parent as TreeNode; } preNode = pre; } return preNode; } /** * @description Get the next node. * @return TreeNode about the next node. */ next() { let nextNode: TreeNode = this; if (nextNode.right) { nextNode = nextNode.right; while (nextNode.left) { nextNode = nextNode.left; } } else { let pre = nextNode.parent as TreeNode; while (pre.right === nextNode) { nextNode = pre; pre = nextNode.parent as TreeNode; } if (nextNode.right !== pre) { nextNode = pre; } } return nextNode; } /** * @description Rotate left. * @return TreeNode about moved to original position after rotation. */ rotateLeft() { const PP = this.parent as TreeNode; const V = this.right as TreeNode; const R = V.left; if (PP.parent === this) PP.parent = V; else if (PP.left === this) PP.left = V; else PP.right = V; V.parent = PP; V.left = this; this.parent = V; this.right = R; if (R) R.parent = this; return V; } /** * @description Rotate left. * @return TreeNode about moved to original position after rotation. */ rotateRight() { const PP = this.parent as TreeNode; const F = this.left as TreeNode; const K = F.right; if (PP.parent === this) PP.parent = F; else if (PP.left === this) PP.left = F; else PP.right = F; F.parent = PP; F.right = this; this.parent = F; this.left = K; if (K) K.parent = this; return F; } /** * @description Remove this. */ remove() { const parent = this.parent as TreeNode; if (this === parent.left) { parent.left = undefined; } else parent.right = undefined; } } export default TreeNode; js-sdsl-4.1.4/src/container/TreeContainer/Base/index.ts000066400000000000000000000434251430603165700227600ustar00rootroot00000000000000import TreeNode from './TreeNode'; import TreeIterator from './TreeIterator'; import { Container } from '@/container/ContainerBase/index'; import { checkWithinAccessParams } from '@/utils/checkParams'; abstract class TreeContainer extends Container { protected root: TreeNode | undefined = undefined; protected header: TreeNode = new TreeNode(); protected cmp: (x: K, y: K) => number; protected constructor(cmp: (x: K, y: K) => number = (x: K, y: K) => { if (x < y) return -1; if (x > y) return 1; return 0; }) { super(); this.cmp = cmp; } /** * @param curNode The starting node of the search. * @param key The key you want to search. * @return TreeNode which key is greater than or equals to the given key. * @protected */ protected _lowerBound(curNode: TreeNode | undefined, key: K) { let resNode; while (curNode) { const cmpResult = this.cmp(curNode.key as K, key); if (cmpResult < 0) { curNode = curNode.right; } else if (cmpResult > 0) { resNode = curNode; curNode = curNode.left; } else return curNode; } return resNode === undefined ? this.header : resNode; } /** * @param key The given key you want to compare. * @return An iterator to the first element not less than the given key. */ abstract lowerBound(key: K): TreeIterator; /** * @param curNode The starting node of the search. * @param key The key you want to search. * @return TreeNode which key is greater than the given key. * @protected */ protected _upperBound(curNode: TreeNode | undefined, key: K) { let resNode; while (curNode) { const cmpResult = this.cmp(curNode.key as K, key); if (cmpResult <= 0) { curNode = curNode.right; } else if (cmpResult > 0) { resNode = curNode; curNode = curNode.left; } } return resNode === undefined ? this.header : resNode; } /** * @param key The given key you want to compare. * @return An iterator to the first element greater than the given key. */ abstract upperBound(key: K): TreeIterator; /** * @param curNode The starting node of the search. * @param key The key you want to search. * @return TreeNode which key is less than or equals to the given key. * @protected */ protected _reverseLowerBound(curNode: TreeNode | undefined, key: K) { let resNode; while (curNode) { const cmpResult = this.cmp(curNode.key as K, key); if (cmpResult < 0) { resNode = curNode; curNode = curNode.right; } else if (cmpResult > 0) { curNode = curNode.left; } else return curNode; } return resNode === undefined ? this.header : resNode; } /** * @param key The given key you want to compare. * @return An iterator to the first element not greater than the given key. */ abstract reverseLowerBound(key: K): TreeIterator; /** * @param curNode The starting node of the search. * @param key The key you want to search. * @return TreeNode which key is less than the given key. * @protected */ protected _reverseUpperBound(curNode: TreeNode | undefined, key: K) { let resNode; while (curNode) { const cmpResult = this.cmp(curNode.key as K, key); if (cmpResult < 0) { resNode = curNode; curNode = curNode.right; } else if (cmpResult >= 0) { curNode = curNode.left; } } return resNode === undefined ? this.header : resNode; } /** * @param key The given key you want to compare. * @return An iterator to the first element less than the given key. */ abstract reverseUpperBound(key: K): TreeIterator; /** * @description Union the other tree to self. *
* Waiting for optimization, this is O(mlog(n+m)) algorithm now, * but we expect it to be O(mlog(n/m+1)).
* More information => * https://en.wikipedia.org/wiki/Red_black_tree *
* @param other The other tree container you want to merge. */ abstract union(other: TreeContainer): void; /** * @description Make self balance after erase a node. * @param curNode The node want to remove. * @protected */ protected eraseNodeSelfBalance(curNode: TreeNode) { while (true) { const parentNode = curNode.parent as TreeNode; if (parentNode === this.header) return; if (curNode.color === TreeNode.RED) { curNode.color = TreeNode.BLACK; return; } if (curNode === parentNode.left) { const brother = parentNode.right as TreeNode; if (brother.color === TreeNode.RED) { brother.color = TreeNode.BLACK; parentNode.color = TreeNode.RED; if (parentNode === this.root) { this.root = parentNode.rotateLeft(); } else parentNode.rotateLeft(); } else if (brother.color === TreeNode.BLACK) { if (brother.right && brother.right.color === TreeNode.RED) { brother.color = parentNode.color; parentNode.color = TreeNode.BLACK; brother.right.color = TreeNode.BLACK; if (parentNode === this.root) { this.root = parentNode.rotateLeft(); } else parentNode.rotateLeft(); return; } else if (brother.left && brother.left.color === TreeNode.RED) { brother.color = TreeNode.RED; brother.left.color = TreeNode.BLACK; brother.rotateRight(); } else { brother.color = TreeNode.RED; curNode = parentNode; } } } else { const brother = parentNode.left as TreeNode; if (brother.color === TreeNode.RED) { brother.color = TreeNode.BLACK; parentNode.color = TreeNode.RED; if (parentNode === this.root) { this.root = parentNode.rotateRight(); } else parentNode.rotateRight(); } else { if (brother.left && brother.left.color === TreeNode.RED) { brother.color = parentNode.color; parentNode.color = TreeNode.BLACK; brother.left.color = TreeNode.BLACK; if (parentNode === this.root) { this.root = parentNode.rotateRight(); } else parentNode.rotateRight(); return; } else if (brother.right && brother.right.color === TreeNode.RED) { brother.color = TreeNode.RED; brother.right.color = TreeNode.BLACK; brother.rotateLeft(); } else { brother.color = TreeNode.RED; curNode = parentNode; } } } } } /** * @description Remove a node. * @param curNode The node you want to remove. * @protected */ protected eraseNode(curNode: TreeNode) { if (this.length === 1) { this.clear(); return; } let swapNode = curNode; while (swapNode.left || swapNode.right) { if (swapNode.right) { swapNode = swapNode.right; while (swapNode.left) swapNode = swapNode.left; } else if (swapNode.left) { swapNode = swapNode.left; } [curNode.key, swapNode.key] = [swapNode.key, curNode.key]; [curNode.value, swapNode.value] = [swapNode.value, curNode.value]; curNode = swapNode; } if (this.header.left === swapNode) { this.header.left = swapNode.parent; } else if (this.header.right === swapNode) { this.header.right = swapNode.parent; } this.eraseNodeSelfBalance(swapNode); swapNode.remove(); this.length -= 1; (this.root as TreeNode).color = TreeNode.BLACK; } /** * @description InOrder traversal the tree. * @protected */ protected inOrderTraversal: (curNode: TreeNode | undefined, callback: (curNode: TreeNode) => boolean) => boolean = (curNode: TreeNode | undefined, callback: (curNode: TreeNode) => boolean) => { if (curNode === undefined) return false; const ifReturn = this.inOrderTraversal(curNode.left, callback); if (ifReturn) return true; if (callback(curNode)) return true; return this.inOrderTraversal(curNode.right, callback); }; /** * @description Make self balance after insert a node. * @param curNode The node want to insert. * @protected */ protected insertNodeSelfBalance(curNode: TreeNode) { while (true) { const parentNode = curNode.parent as TreeNode; if (parentNode.color === TreeNode.BLACK) return; const grandParent = parentNode.parent as TreeNode; if (parentNode === grandParent.left) { const uncle = grandParent.right; if (uncle && uncle.color === TreeNode.RED) { uncle.color = parentNode.color = TreeNode.BLACK; if (grandParent === this.root) return; grandParent.color = TreeNode.RED; curNode = grandParent; continue; } else if (curNode === parentNode.right) { curNode.color = TreeNode.BLACK; if (curNode.left) curNode.left.parent = parentNode; if (curNode.right) curNode.right.parent = grandParent; parentNode.right = curNode.left; grandParent.left = curNode.right; curNode.left = parentNode; curNode.right = grandParent; if (grandParent === this.root) { this.root = curNode; this.header.parent = curNode; } else { const GP = grandParent.parent as TreeNode; if (GP.left === grandParent) { GP.left = curNode; } else GP.right = curNode; } curNode.parent = grandParent.parent; parentNode.parent = curNode; grandParent.parent = curNode; } else { parentNode.color = TreeNode.BLACK; if (grandParent === this.root) { this.root = grandParent.rotateRight(); } else grandParent.rotateRight(); } grandParent.color = TreeNode.RED; } else { const uncle = grandParent.left; if (uncle && uncle.color === TreeNode.RED) { uncle.color = parentNode.color = TreeNode.BLACK; if (grandParent === this.root) return; grandParent.color = TreeNode.RED; curNode = grandParent; continue; } else if (curNode === parentNode.left) { curNode.color = TreeNode.BLACK; if (curNode.left) curNode.left.parent = grandParent; if (curNode.right) curNode.right.parent = parentNode; grandParent.right = curNode.left; parentNode.left = curNode.right; curNode.left = grandParent; curNode.right = parentNode; if (grandParent === this.root) { this.root = curNode; this.header.parent = curNode; } else { const GP = grandParent.parent as TreeNode; if (GP.left === grandParent) { GP.left = curNode; } else GP.right = curNode; } curNode.parent = grandParent.parent; parentNode.parent = curNode; grandParent.parent = curNode; } else { parentNode.color = TreeNode.BLACK; if (grandParent === this.root) { this.root = grandParent.rotateLeft(); } else grandParent.rotateLeft(); } grandParent.color = TreeNode.RED; } return; } } /** * @description Find node which key is equals to the given key. * @param curNode The starting node of the search. * @param key The key you want to search. * @protected */ protected findElementNode(curNode: TreeNode | undefined, key: K) { while (curNode) { const cmpResult = this.cmp(curNode.key as K, key); if (cmpResult < 0) { curNode = curNode.right; } else if (cmpResult > 0) { curNode = curNode.left; } else return curNode; } return curNode; } /** * @description Insert a key-value pair or set value by the given key. * @param key The key want to insert. * @param value The value want to set. * @param hint You can give an iterator hint to improve insertion efficiency. * @protected */ protected set(key: K, value?: V, hint?: TreeIterator) { if (this.root === undefined) { this.length += 1; this.root = new TreeNode(key, value); this.root.color = TreeNode.BLACK; this.root.parent = this.header; this.header.parent = this.root; this.header.left = this.root; this.header.right = this.root; return; } let curNode; const minNode = this.header.left as TreeNode; const compareToMin = this.cmp(minNode.key as K, key); if (compareToMin === 0) { minNode.value = value; return; } else if (compareToMin > 0) { minNode.left = new TreeNode(key, value); minNode.left.parent = minNode; curNode = minNode.left; this.header.left = curNode; } else { const maxNode = this.header.right as TreeNode; const compareToMax = this.cmp(maxNode.key as K, key); if (compareToMax === 0) { maxNode.value = value; return; } else if (compareToMax < 0) { maxNode.right = new TreeNode(key, value); maxNode.right.parent = maxNode; curNode = maxNode.right; this.header.right = curNode; } else { if (hint !== undefined) { // @ts-ignore const iterNode = hint.node; if (iterNode !== this.header) { const iterCmpRes = this.cmp(iterNode.key as K, key); if (iterCmpRes === 0) { iterNode.value = value; return; } else if (iterCmpRes > 0) { const preNode = iterNode.pre(); const preCmpRes = this.cmp(preNode.key as K, key); if (preCmpRes === 0) { preNode.value = value; return; } else if (preCmpRes < 0) { curNode = new TreeNode(key, value); if (preNode.right === undefined) { preNode.right = curNode; curNode.parent = preNode; } else { iterNode.left = curNode; curNode.parent = iterNode; } } } } } if (curNode === undefined) { curNode = this.root; while (true) { const cmpResult = this.cmp(curNode.key as K, key); if (cmpResult > 0) { if (curNode.left === undefined) { curNode.left = new TreeNode(key, value); curNode.left.parent = curNode; curNode = curNode.left; break; } curNode = curNode.left; } else if (cmpResult < 0) { if (curNode.right === undefined) { curNode.right = new TreeNode(key, value); curNode.right.parent = curNode; curNode = curNode.right; break; } curNode = curNode.right; } else { curNode.value = value; return; } } } } } this.length += 1; this.insertNodeSelfBalance(curNode); } clear() { this.length = 0; this.root = undefined; this.header.parent = undefined; this.header.left = this.header.right = undefined; } /** * @description Update node's key by iterator. * @param iter The iterator you want to change. * @param key The key you want to update. * @return Boolean about if the modification is successful. */ updateKeyByIterator(iter: TreeIterator, key: K): boolean { // @ts-ignore const node = iter.node; if (node === this.header) { throw new TypeError('Invalid iterator!'); } if (this.length === 1) { node.key = key; return true; } if (node === this.header.left) { if (this.cmp(node.next().key as K, key) > 0) { node.key = key; return true; } return false; } if (node === this.header.right) { if (this.cmp(node.pre().key as K, key) < 0) { node.key = key; return true; } return false; } const preKey = node.pre().key as K; if (this.cmp(preKey, key) >= 0) return false; const nextKey = node.next().key as K; if (this.cmp(nextKey, key) <= 0) return false; node.key = key; return true; } eraseElementByPos(pos: number) { checkWithinAccessParams(pos, 0, this.length - 1); let index = 0; this.inOrderTraversal(this.root, curNode => { if (pos === index) { this.eraseNode(curNode); return true; } index += 1; return false; }); } /** * @description Remove the element of the specified key. * @param key The key you want to remove. */ eraseElementByKey(key: K) { if (!this.length) return; const curNode = this.findElementNode(this.root, key); if (curNode === undefined) return; this.eraseNode(curNode); } eraseElementByIterator(iter: TreeIterator) { // @ts-ignore const node = iter.node; if (node === this.header) { throw new RangeError('Invalid iterator'); } if (node.right === undefined) { iter = iter.next(); } this.eraseNode(node); return iter; } /** * @description Get the height of the tree. * @return Number about the height of the RB-tree. */ getHeight() { if (!this.length) return 0; const traversal: (curNode: TreeNode | undefined) => number = (curNode: TreeNode | undefined) => { if (!curNode) return 0; return Math.max(traversal(curNode.left), traversal(curNode.right)) + 1; }; return traversal(this.root); } } export default TreeContainer; js-sdsl-4.1.4/src/container/TreeContainer/OrderedMap.ts000066400000000000000000000104361430603165700230150ustar00rootroot00000000000000import { ContainerIterator, initContainer } from '@/container/ContainerBase/index'; import { checkWithinAccessParams } from '@/utils/checkParams'; import TreeContainer from './Base/index'; import TreeIterator from './Base/TreeIterator'; import TreeNode from './Base/TreeNode'; export class OrderedMapIterator extends TreeIterator { get pointer() { if (this.node === this.header) { throw new RangeError('OrderedMap iterator access denied'); } return new Proxy([] as unknown as [K, V], { get: (_, props: '0' | '1') => { if (props === '0') return this.node.key; else if (props === '1') return this.node.value; }, set: (_, props: '1', newValue: V) => { if (props !== '1') { throw new TypeError('props must be 1'); } this.node.value = newValue; return true; } }); } copy() { return new OrderedMapIterator(this.node, this.header, this.iteratorType); } } class OrderedMap extends TreeContainer { constructor(container: initContainer<[K, V]> = [], cmp?: (x: K, y: K) => number) { super(cmp); this.iterationFunc = this.iterationFunc.bind(this); container.forEach(([key, value]) => this.setElement(key, value)); } private readonly iterationFunc: (curNode: TreeNode | undefined) => Generator<[K, V], void, undefined> = function * (this: OrderedMap, curNode: TreeNode | undefined) { if (curNode === undefined) return; yield * this.iterationFunc(curNode.left); yield [curNode.key, curNode.value] as [K, V]; yield * this.iterationFunc(curNode.right); }; begin() { return new OrderedMapIterator(this.header.left || this.header, this.header); } end() { return new OrderedMapIterator(this.header, this.header); } rBegin() { return new OrderedMapIterator( this.header.right || this.header, this.header, ContainerIterator.REVERSE ); } rEnd() { return new OrderedMapIterator(this.header, this.header, ContainerIterator.REVERSE); } front() { if (!this.length) return undefined; const minNode = this.header.left as TreeNode; return [minNode.key, minNode.value] as [K, V]; } back() { if (!this.length) return undefined; const maxNode = this.header.right as TreeNode; return [maxNode.key, maxNode.value] as [K, V]; } forEach(callback: (element: [K, V], index: number) => void) { let index = 0; for (const pair of this) callback(pair, index++); } lowerBound(key: K) { const resNode = this._lowerBound(this.root, key); return new OrderedMapIterator(resNode, this.header); } upperBound(key: K) { const resNode = this._upperBound(this.root, key); return new OrderedMapIterator(resNode, this.header); } reverseLowerBound(key: K) { const resNode = this._reverseLowerBound(this.root, key); return new OrderedMapIterator(resNode, this.header); } reverseUpperBound(key: K) { const resNode = this._reverseUpperBound(this.root, key); return new OrderedMapIterator(resNode, this.header); } /** * @description Insert a key-value pair or set value by the given key. * @param key The key want to insert. * @param value The value want to set. * @param hint You can give an iterator hint to improve insertion efficiency. */ setElement(key: K, value: V, hint?: OrderedMapIterator) { this.set(key, value, hint); } find(key: K) { const curNode = this.findElementNode(this.root, key); if (curNode !== undefined) { return new OrderedMapIterator(curNode, this.header); } return this.end(); } /** * @description Get the value of the element of the specified key. */ getElementByKey(key: K) { const curNode = this.findElementNode(this.root, key); return curNode ? curNode.value : undefined; } getElementByPos(pos: number) { checkWithinAccessParams(pos, 0, this.length - 1); let res; let index = 0; for (const pair of this) { if (index === pos) { res = pair; break; } index += 1; } return res as [K, V]; } union(other: OrderedMap) { other.forEach(([key, value]) => this.setElement(key, value)); } [Symbol.iterator]() { return this.iterationFunc(this.root); } } export default OrderedMap; js-sdsl-4.1.4/src/container/TreeContainer/OrderedSet.ts000066400000000000000000000066721430603165700230420ustar00rootroot00000000000000import TreeContainer from './Base/index'; import { ContainerIterator, initContainer } from '@/container/ContainerBase/index'; import { checkWithinAccessParams } from '@/utils/checkParams'; import TreeIterator from './Base/TreeIterator'; import TreeNode from './Base/TreeNode'; export class OrderedSetIterator extends TreeIterator { get pointer() { if (this.node === this.header) { throw new RangeError('OrderedSet iterator access denied!'); } return this.node.key as K; } copy() { return new OrderedSetIterator(this.node, this.header, this.iteratorType); } } class OrderedSet extends TreeContainer { constructor(container: initContainer = [], cmp?: (x: K, y: K) => number) { super(cmp); container.forEach((element) => this.insert(element)); this.iterationFunc = this.iterationFunc.bind(this); } private readonly iterationFunc: (curNode: TreeNode | undefined) => Generator = function * (this: OrderedSet, curNode: TreeNode | undefined) { if (curNode === undefined) return; yield * this.iterationFunc(curNode.left); yield curNode.key as K; yield * this.iterationFunc(curNode.right); }; begin() { return new OrderedSetIterator( this.header.left || this.header, this.header ); } end() { return new OrderedSetIterator(this.header, this.header); } rBegin() { return new OrderedSetIterator( this.header.right || this.header, this.header, ContainerIterator.REVERSE ); } rEnd() { return new OrderedSetIterator(this.header, this.header, ContainerIterator.REVERSE); } front() { return this.header.left ? this.header.left.key : undefined; } back() { return this.header.right ? this.header.right.key : undefined; } forEach(callback: (element: K, index: number) => void) { let index = 0; for (const element of this) callback(element, index++); } getElementByPos(pos: number) { checkWithinAccessParams(pos, 0, this.length - 1); let res; let index = 0; for (const element of this) { if (index === pos) { res = element; } index += 1; } return res as K; } /** * @description Insert element to set. * @param key The key want to insert. * @param hint You can give an iterator hint to improve insertion efficiency. */ insert(key: K, hint?: OrderedSetIterator) { this.set(key, undefined, hint); } find(element: K) { const curNode = this.findElementNode(this.root, element); if (curNode !== undefined) { return new OrderedSetIterator(curNode, this.header); } return this.end(); } lowerBound(key: K) { const resNode = this._lowerBound(this.root, key); return new OrderedSetIterator(resNode, this.header); } upperBound(key: K) { const resNode = this._upperBound(this.root, key); return new OrderedSetIterator(resNode, this.header); } reverseLowerBound(key: K) { const resNode = this._reverseLowerBound(this.root, key); return new OrderedSetIterator(resNode, this.header); } reverseUpperBound(key: K) { const resNode = this._reverseUpperBound(this.root, key); return new OrderedSetIterator(resNode, this.header); } union(other: OrderedSet) { other.forEach((element) => this.insert(element)); } [Symbol.iterator]() { return this.iterationFunc(this.root); } } export default OrderedSet; js-sdsl-4.1.4/src/index.ts000066400000000000000000000022311430603165700153500ustar00rootroot00000000000000export { default as Stack } from '@/container/OtherContainer/Stack'; export { default as Queue } from '@/container/OtherContainer/Queue'; export { default as PriorityQueue } from '@/container/OtherContainer/PriorityQueue'; export { default as Vector, VectorIterator } from '@/container/SequentialContainer/Vector'; export { default as LinkList, LinkListIterator } from '@/container/SequentialContainer/LinkList'; export { default as Deque, DequeIterator } from '@/container/SequentialContainer/Deque'; export { default as OrderedSet, OrderedSetIterator } from '@/container/TreeContainer/OrderedSet'; export { default as OrderedMap, OrderedMapIterator } from '@/container/TreeContainer/OrderedMap'; export { default as HashSet } from '@/container/HashContainer/HashSet'; export { default as HashMap } from '@/container/HashContainer/HashMap'; export { Container, ContainerIterator } from '@/container/ContainerBase/index'; export { default as SequentialContainer } from '@/container/SequentialContainer/Base/index'; export { default as TreeContainer } from '@/container/TreeContainer/Base/index'; export { default as HashContainer } from '@/container/HashContainer/Base/index'; js-sdsl-4.1.4/src/utils/000077500000000000000000000000001430603165700150335ustar00rootroot00000000000000js-sdsl-4.1.4/src/utils/checkParams.ts000066400000000000000000000005671430603165700176340ustar00rootroot00000000000000/** * @description Check if access is out of bounds. * @param pos The position want to access. * @param lower The lower bound. * @param upper The upper bound. * @return Boolean about if access is out of bounds. */ export function checkWithinAccessParams(pos: number, lower: number, upper: number) { if (pos < lower || pos > upper) { throw new RangeError(); } } js-sdsl-4.1.4/test/000077500000000000000000000000001430603165700140635ustar00rootroot00000000000000js-sdsl-4.1.4/test/HashContainerTest/000077500000000000000000000000001430603165700174515ustar00rootroot00000000000000js-sdsl-4.1.4/test/HashContainerTest/HashMap.test.ts000066400000000000000000000142161430603165700223240ustar00rootroot00000000000000import { Vector, HashMap, HashContainer } from '@/index'; function generateRandom(low = 0, high = 1e6, fix = 6) { return (low + Math.random() * (high - low)).toFixed(fix); } const arr: string[] = []; const testNum = 10000; for (let i = 0; i < testNum; ++i) { arr.push(generateRandom()); } function judgeHashMap(myHashMap: HashMap, stdMap: Map) { expect(myHashMap.size()).toBe(stdMap.size); stdMap.forEach((value, key) => { expect(myHashMap.getElementByKey(key)).toEqual(value); expect(myHashMap.find(key)).toEqual(true); }); } describe('HashMap test', () => { // @ts-ignore HashContainer.treeifyThreshold = 1; // @ts-ignore HashContainer.untreeifyThreshold = 1; const myHashMap = new HashMap(arr.map((element, index) => [element, index])); const stdMap = new Map(arr.map((element, index) => [element, index])); test('HashSet hash function test', () => { judgeHashMap( // @ts-ignore new HashMap(arr.map(x => [Math.floor(Number(x)), 1])), new Map(arr.map(x => [Math.floor(Number(x)), 1])) ); }); test('constructor test', () => { expect(new HashMap().size()).toBe(0); }); test('HashMap setElement function test', () => { for (let i = 0; i <= testNum; ++i) { myHashMap.setElement(i.toString(), i); stdMap.set(i.toString(), i); } for (let i = 0; i <= testNum / 10; ++i) { myHashMap.setElement(i.toString(), i); } for (let i = testNum; i < testNum * 2; ++i) { const random = generateRandom(); myHashMap.setElement(random, i); stdMap.set(random, i); } judgeHashMap(myHashMap, stdMap); }); test('HashMap forEach function test', () => { myHashMap.forEach(([key, value]) => { expect(stdMap.get(key)).toEqual(value); }); expect(myHashMap.find('-1')).toEqual(false); let cnt = 0; for (const element of myHashMap) { ++cnt; expect(stdMap.has(element[0])).toEqual(true); } expect(cnt).toBe(myHashMap.size()); }); test('HashMap eraseElementByKey function test', () => { for (let i = 0; i < testNum; ++i) { const str = i.toString(); myHashMap.eraseElementByKey(str); stdMap.delete(str); } myHashMap.eraseElementByKey('-1'); myHashMap.eraseElementByKey('-2'); myHashMap.eraseElementByKey('-3'); myHashMap.eraseElementByKey('-4'); myHashMap.eraseElementByKey('-5'); myHashMap.eraseElementByKey('-6'); myHashMap.eraseElementByKey('-7'); myHashMap.eraseElementByKey('-8'); myHashMap.eraseElementByKey('-9'); expect(myHashMap.getElementByKey('-1')).toBe(undefined); expect(myHashMap.getElementByKey('-2')).toBe(undefined); expect(myHashMap.getElementByKey('-3')).toBe(undefined); expect(myHashMap.getElementByKey('-4')).toBe(undefined); expect(myHashMap.getElementByKey('-5')).toBe(undefined); expect(myHashMap.getElementByKey('-6')).toBe(undefined); expect(myHashMap.getElementByKey('-7')).toBe(undefined); expect(myHashMap.getElementByKey('-8')).toBe(undefined); expect(myHashMap.getElementByKey('-9')).toBe(undefined); expect(myHashMap.find('-1')).toBe(false); expect(myHashMap.find('-2')).toBe(false); expect(myHashMap.find('-3')).toBe(false); expect(myHashMap.find('-4')).toBe(false); expect(myHashMap.find('-5')).toBe(false); expect(myHashMap.find('-6')).toBe(false); expect(myHashMap.find('-7')).toBe(false); expect(myHashMap.find('-8')).toBe(false); expect(myHashMap.find('-9')).toBe(false); judgeHashMap(myHashMap, stdMap); }); test('HashMap clear function test', () => { myHashMap.clear(); stdMap.clear(); judgeHashMap(myHashMap, stdMap); }); test('HashMap empty test', () => { myHashMap.eraseElementByKey('1'); expect(myHashMap.find('1')).toEqual(false); for (let i = -1; i >= -1000; --i) { expect(myHashMap.getElementByKey(i.toString())).toEqual(undefined); expect(myHashMap.find(i.toString())).toEqual(false); } // @ts-ignore const bucketNum = myHashMap.bucketNum; // @ts-ignore myHashMap.bucketNum = HashContainer.maxBucketNum; // @ts-ignore myHashMap.reAllocate(); // @ts-ignore myHashMap.hashTable[0] = new Vector(); // @ts-ignore myHashMap.hashTable[myHashMap.bucketNum - 5] = new Vector(); // @ts-ignore myHashMap.reAllocate(myHashMap.bucketNum); // @ts-ignore myHashMap.bucketNum = bucketNum; // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars, no-empty for (const _ of myHashMap) {} }); test('HashMap normal test', () => { // @ts-ignore HashContainer.treeifyThreshold = 6; // @ts-ignore HashContainer.untreeifyThreshold = 8; const mp = new HashMap(); const stdMap = new Map(); for (let i = 0; i < testNum; ++i) { const str = i.toString(); mp.setElement(str, i); stdMap.set(str, i); } judgeHashMap(mp, stdMap); let size = testNum; for (let i = 0; i < testNum; ++i) { mp.eraseElementByKey(i.toString()); expect(mp.size()).toEqual(--size); } expect(mp.size()).toEqual(0); }); test('HashSet insert and erase', () => { // @ts-ignore HashContainer.treeifyThreshold = 6; // @ts-ignore HashContainer.untreeifyThreshold = 8; const mp = new HashMap(); const stdMap = new Map(); const arr: string[] = []; for (let i = 0; i < testNum; ++i) { const random = Math.random().toFixed(6); mp.setElement(random, i); stdMap.set(random, i); arr.push(random); } judgeHashMap(mp, stdMap); for (let i = 0; i < testNum; ++i) { if (Math.random() > 0.5) { mp.eraseElementByKey(arr[i]); stdMap.delete(arr[i]); } } judgeHashMap(mp, stdMap); arr.length = 0; for (let i = 0; i < testNum; ++i) { const random = Math.random().toFixed(6); mp.setElement(random, i); stdMap.set(random, i); arr.push(random); } judgeHashMap(mp, stdMap); for (let i = 0; i < testNum; ++i) { if (Math.random() > 0.5) { mp.eraseElementByKey(arr[i]); stdMap.delete(arr[i]); } } judgeHashMap(mp, stdMap); }); }); js-sdsl-4.1.4/test/HashContainerTest/HashSet.test.ts000066400000000000000000000107401430603165700223400ustar00rootroot00000000000000import { Vector, HashSet, HashContainer } from '@/index'; function generateRandom(low = 0, high = 1e6, fix = 6) { return (low + Math.random() * (high - low)).toFixed(fix); } const arr: string[] = []; const testNum = 10000; for (let i = 0; i < testNum; ++i) { arr.push(generateRandom()); } function judgeHashSet(myHashSet: HashSet, stdSet: Set) { expect(myHashSet.size()).toBe(stdSet.size); stdSet.forEach((element) => { expect(myHashSet.find(element)).toEqual(true); }); } describe('HashSet test', () => { // @ts-ignore HashContainer.treeifyThreshold = 1; // @ts-ignore HashContainer.untreeifyThreshold = 1; test('constructor test', () => { // eslint-disable-next-line no-new expect(() => new HashSet([], 28)).toThrow(RangeError); expect(new HashSet().size()).toBe(0); }); test('HashSet hash function test', () => { judgeHashSet( // @ts-ignore new HashSet(arr.map(x => Math.floor(Number(x)))), new Set(arr.map(x => Math.floor(Number(x)))) ); }); const myHashSet = new HashSet(arr); const stdSet = new Set(arr); test('HashSet insert function test', () => { for (let i = 0; i < testNum; ++i) { myHashSet.insert(i.toString()); stdSet.add(i.toString()); const random = generateRandom(); myHashSet.insert(random); stdSet.add(random); } judgeHashSet(myHashSet, stdSet); }); test('HashSet forEach function test', () => { myHashSet.forEach((element) => { expect(stdSet.has(element)).toEqual(true); }); let cnt = 0; for (const element of myHashSet) { ++cnt; expect(stdSet.has(element)).toEqual(true); } expect(cnt).toBe(myHashSet.size()); }); test('HashSet eraseElementByKey function test', () => { for (let i = 0; i < testNum; ++i) { myHashSet.eraseElementByKey(arr[i]); stdSet.delete(arr[i]); const random = generateRandom(); myHashSet.eraseElementByKey(random); stdSet.delete(random); } judgeHashSet(myHashSet, stdSet); }); test('HashSet clear function test', () => { myHashSet.clear(); stdSet.clear(); judgeHashSet(myHashSet, stdSet); }); test('HashSet empty test', () => { expect(myHashSet.find('1')).toEqual(false); myHashSet.insert(arr[0]); myHashSet.insert(arr[0]); expect(myHashSet.size()).toBe(1); // @ts-ignore const bucketNum = myHashSet.bucketNum; // @ts-ignore myHashSet.bucketNum = HashContainer.maxBucketNum; // @ts-ignore myHashSet.reAllocate(); // @ts-ignore myHashSet.hashTable[0] = new Vector(); // @ts-ignore myHashSet.hashTable[myHashSet.bucketNum - 5] = new Vector(); // @ts-ignore myHashSet.reAllocate(myHashSet.bucketNum); // @ts-ignore myHashSet.bucketNum = bucketNum; // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars, no-empty for (const _ of myHashSet) {} }); test('HashSet normal test', () => { // @ts-ignore HashContainer.treeifyThreshold = 6; // @ts-ignore HashContainer.untreeifyThreshold = 8; const st = new HashSet(); const stdSet = new Set(); for (let i = 0; i < testNum; ++i) { st.insert(i.toString()); stdSet.add(i.toString()); } judgeHashSet(st, stdSet); let size = testNum; for (let i = 0; i < testNum; ++i) { st.eraseElementByKey(i.toString()); expect(st.size()).toEqual(--size); } expect(st.size()).toEqual(0); }); test('HashSet insert and erase', () => { // @ts-ignore HashContainer.treeifyThreshold = 6; // @ts-ignore HashContainer.untreeifyThreshold = 8; const st = new HashSet(); const stdSet = new Set(); const arr: string[] = []; for (let i = 0; i < testNum; ++i) { const random = Math.random().toFixed(6); st.insert(random); stdSet.add(random); arr.push(random); } judgeHashSet(st, stdSet); for (let i = 0; i < testNum; ++i) { if (Math.random() > 0.5) { st.eraseElementByKey(arr[i]); stdSet.delete(arr[i]); } } judgeHashSet(st, stdSet); arr.length = 0; for (let i = 0; i < testNum; ++i) { const random = Math.random().toFixed(6); st.insert(random); stdSet.add(random); arr.push(random); } judgeHashSet(st, stdSet); for (let i = 0; i < testNum; ++i) { if (Math.random() > 0.5) { st.eraseElementByKey(arr[i]); stdSet.delete(arr[i]); } } judgeHashSet(st, stdSet); }); }); js-sdsl-4.1.4/test/OtherContainerTest/000077500000000000000000000000001430603165700176475ustar00rootroot00000000000000js-sdsl-4.1.4/test/OtherContainerTest/PriorityQueue.test.ts000066400000000000000000000035761430603165700240360ustar00rootroot00000000000000import { Vector, PriorityQueue } from '@/index'; const arr: number[] = []; const testNum = 10000; for (let i = 0; i < testNum; ++i) { arr.push(Math.floor(Math.random() * testNum)); } function judge(myQueue: PriorityQueue, myVector: Vector) { while (!myQueue.empty()) { if (myQueue.size() !== myVector.size()) return false; const u = myQueue.top(); if (u !== myVector.front()) return false; myQueue.pop(); myVector.eraseElementByPos(0); } return true; } describe('PriorityQueue test', () => { test('PriorityQueue empty insert test', () => { const myQueue = new PriorityQueue(); myQueue.pop(); expect(myQueue.size()).toEqual(0); myQueue.push(1); expect(myQueue.size()).toEqual(1); expect(myQueue.top()).toEqual(1); }); const myQueue = new PriorityQueue(arr); const myVector = new Vector(arr); test('PriorityQueue size test', () => { expect(myQueue.size()).toBe(myVector.size()); }); test('PriorityQueue other function test', () => { for (let i = 0; i < testNum; ++i) { myQueue.push(i); myVector.pushBack(i); } myVector.sort((x, y) => y - x); expect(judge(myQueue, myVector)).toEqual(true); }); test('PriorityQueue clear function test', () => { myQueue.clear(); myVector.clear(); expect(judge(myQueue, myVector)).toEqual(true); }); test('init test', () => { const q = new PriorityQueue([1, 2, 3], undefined, false); expect(q.top()).toEqual(3); q.pop(); expect(q.top()).toEqual(2); q.pop(); expect(q.top()).toEqual(1); q.pop(); expect(q.top()).toBe(undefined); const que = new PriorityQueue(new Vector([1, 2, 3])); expect(que.size()).toEqual(3); expect(que.top()).toEqual(3); que.pop(); expect(que.top()).toEqual(2); que.pop(); expect(que.top()).toEqual(1); que.pop(); expect(q.top()).toBe(undefined); }); }); js-sdsl-4.1.4/test/OtherContainerTest/Queue.test.ts000066400000000000000000000021561430603165700222650ustar00rootroot00000000000000import { Vector, Queue } from '@/index'; const arr: number[] = []; const testNum = 10000; for (let i = 0; i < testNum; ++i) { arr.push(Math.floor(Math.random() * testNum)); } function judge(myQueue: Queue, myVector: Vector) { while (!myQueue.empty()) { if (myQueue.size() !== myVector.size()) return false; const s = myQueue.front(); const v = myVector.front(); if (s !== v) return false; myQueue.pop(); myVector.eraseElementByPos(0); } expect(myQueue.front()).toEqual(undefined); return true; } describe('Queue test', () => { const myQueue = new Queue(arr); const myVector = new Vector(arr); test('Queue size test', () => { expect(myQueue.size()).toBe(myVector.size()); }); test('Queue clear function test', () => { myQueue.clear(); myVector.clear(); expect(judge(myQueue, myVector)).toEqual(true); }); test('Queue other function test', () => { for (let i = 0; i < testNum; ++i) { myQueue.push(i); myVector.pushBack(i); } expect(judge(myQueue, myVector)).toEqual(true); }); }); js-sdsl-4.1.4/test/OtherContainerTest/Stack.test.ts000066400000000000000000000021361430603165700222440ustar00rootroot00000000000000import { Vector, Stack } from '@/index'; const arr: number[] = []; const testNum = 10000; for (let i = 0; i < testNum; ++i) { arr.push(Math.floor(Math.random() * testNum)); } function judge(myStack: Stack, myVector: Vector) { while (!myStack.empty()) { if (myStack.size() !== myVector.size()) return false; const s = myStack.top(); const v = myVector.back(); if (s !== v) return false; myStack.pop(); myVector.popBack(); } expect(myStack.top()).toEqual(undefined); return true; } describe('Stack test', () => { const myStack = new Stack(arr); const myVector = new Vector(arr); test('Stack size test', () => { expect(myStack.size()).toBe(myVector.size()); }); test('Stack clear function test', () => { myStack.clear(); myVector.clear(); expect(judge(myStack, myVector)).toEqual(true); }); test('Stack other function test', () => { for (let i = 0; i < testNum; ++i) { myStack.push(i); myVector.pushBack(i); } expect(judge(myStack, myVector)).toEqual(true); }); }); js-sdsl-4.1.4/test/OtherTest/000077500000000000000000000000001430603165700160045ustar00rootroot00000000000000js-sdsl-4.1.4/test/OtherTest/constructor.test.ts000066400000000000000000000010541430603165700217170ustar00rootroot00000000000000import { Vector, LinkList, Deque, OrderedSet, OrderedMap, HashSet, HashMap, Stack, Queue, PriorityQueue } from '@/index'; const containerArr = [ new Stack(), new Queue(), new PriorityQueue(), new Vector(), new LinkList(), new Deque(), new OrderedSet(), new OrderedMap(), new HashSet(), new HashMap() ]; describe('iterator test', () => { test('empty constructor test', () => { for (const container of containerArr) { expect(container.size()).toEqual(0); } }); }); js-sdsl-4.1.4/test/OtherTest/iterator.test.ts000066400000000000000000000136531430603165700211730ustar00rootroot00000000000000import { Vector, LinkList, Deque, OrderedSet, OrderedMap, Container, ContainerIterator, VectorIterator, LinkListIterator, DequeIterator, OrderedSetIterator, OrderedMapIterator, SequentialContainer, TreeContainer } from '@/index'; let arr: number[] = []; const testNum = 10000; for (let i = 0; i < testNum; ++i) { arr.push(Math.floor(Math.random() * testNum)); } arr = Array.from(new Set(arr)); arr.sort((x, y) => x - y); const containerArr: Container[] = [ new Vector(arr), new LinkList(arr), new Deque(arr), new OrderedSet(arr), new OrderedMap(arr.map((element, index) => [index, element])) ]; describe('iterator test', () => { test('normal iterator next function test', () => { for (const container of containerArr) { let index = 0; for (let it = container.begin() as ContainerIterator; !it.equals(container.end() as ContainerIterator); it = it.next()) { if (container instanceof OrderedMap) { expect((it as ContainerIterator<[number, number]>).pointer[1]) .toEqual(arr[index++]); } else { expect(it.pointer).toEqual(arr[index++]); } } } }); test('normal iterator pre function test', () => { for (const container of containerArr) { let index = arr.length - 1; for (let it = container.end().pre() as ContainerIterator; !it.equals(container.begin() as ContainerIterator); it = it.pre()) { if (container instanceof OrderedMap) { expect((it as ContainerIterator<[number, number]>).pointer[1]) .toEqual(arr[index--]); } else { expect(it.pointer).toEqual(arr[index--]); } } } }); test('reverse iterator next function test', () => { for (const container of containerArr) { let index = arr.length - 1; for (let it = container.rBegin() as ContainerIterator; !it.equals(container.rEnd() as ContainerIterator); it = it.next()) { if (container instanceof OrderedMap) { expect((it as ContainerIterator<[number, number]>).pointer[1]) .toEqual(arr[index--]); } else { expect(it.pointer).toEqual(arr[index--]); } } } }); test('reverse iterator pre function test', () => { for (const container of containerArr) { let index = 0; for (let it = container.rEnd().pre() as ContainerIterator; !it.equals(container.rBegin() as ContainerIterator); it = it.pre()) { if (container instanceof OrderedMap) { expect((it as ContainerIterator<[number, number]>).pointer[1]) .toEqual(arr[index++]); } else { expect(it.pointer).toEqual(arr[index++]); } } } }); for (const container of containerArr) { test('normal iterator next run time error test', () => { expect(() => container.end().next()).toThrowError(RangeError); }); test('normal iterator pre run time error test', () => { expect(() => container.begin().pre()).toThrowError(RangeError); }); test('reverse iterator next run time error test', () => { expect(() => container.rEnd().next()).toThrowError(RangeError); }); test('reverse iterator pre run time error test', () => { expect(() => container.rBegin().pre()).toThrowError(RangeError); }); } test('copy test', () => { for (const container of containerArr) { const iter = container.begin() as ContainerIterator; const copy = iter.copy() as ContainerIterator; iter.next(); expect(iter.equals(copy)).toBe(false); copy.next(); expect(iter.equals(copy)).toBe(true); } for (const container of containerArr) { const iter = container.end() as ContainerIterator; const copy = iter.copy() as ContainerIterator; iter.pre(); expect(iter.equals(copy)).toBe(false); copy.pre(); expect(iter.equals(copy)).toBe(true); } for (const container of containerArr) { const iter = container.rBegin() as ContainerIterator; const copy = iter.copy() as ContainerIterator; iter.next(); expect(iter.equals(copy)).toBe(false); copy.next(); expect(iter.equals(copy)).toBe(true); } for (const container of containerArr) { const iter = container.rEnd() as ContainerIterator; const copy = iter.copy() as ContainerIterator; iter.pre(); expect(iter.equals(copy)).toBe(false); copy.pre(); expect(iter.equals(copy)).toBe(true); } }); test('export test', () => { expect(() => { // eslint-disable-next-line no-new new VectorIterator(0, function () { return 0; }, function () { return 0; }, function () { return 0; }); // @ts-ignore // eslint-disable-next-line no-new new Container(); // @ts-ignore // eslint-disable-next-line no-new new ContainerIterator(); // @ts-ignore // eslint-disable-next-line no-new new SequentialContainer(); // @ts-ignore // eslint-disable-next-line no-new new TreeContainer(); // @ts-ignore // eslint-disable-next-line no-new new LinkListIterator(containerArr[0].begin().node); // eslint-disable-next-line no-new new DequeIterator(0, function () { return 0; }, function () { return 0; }, function () { return 0; }); // @ts-ignore // eslint-disable-next-line no-new new OrderedSetIterator(containerArr[3].begin().node, containerArr[3].header); // @ts-ignore // eslint-disable-next-line no-new new OrderedMapIterator(containerArr[4].begin().node, containerArr[4].header); }).not.toThrowError(Error); }); }); js-sdsl-4.1.4/test/OtherTest/symbol-iterator.test.ts000066400000000000000000000031141430603165700224650ustar00rootroot00000000000000import { Vector, LinkList, Deque, OrderedSet, OrderedMap, HashSet, HashMap } from '@/index'; let arr: number[] = []; const testNum = 10000; for (let i = 0; i < testNum; ++i) { arr.push(Math.floor(Math.random() * testNum)); } arr = Array.from(new Set(arr)); arr.sort((x, y) => x - y); const containerArr = [ new Vector(arr), new LinkList(arr), new Deque(arr), new OrderedSet(arr), new OrderedMap(arr.map((element, index) => [index, element])) ]; describe('symbol iterator test', () => { test('HashSet symbol iterator test', () => { const myHashSet = new HashSet(arr); const st = new Set(arr); for (const element of myHashSet) { expect(st.has(element)).toEqual(true); st.delete(element); } expect(st.size).toEqual(0); }); test('HashSet symbol iterator test', () => { const myHashMap = new HashMap(arr.map((element, index) => [index, element])); const mp = new Map(arr.map((element, index) => [index, element])); for (const element of myHashMap) { expect(element[1]).toEqual(mp.get(element[0])); mp.delete(element[0]); } expect(mp.size).toEqual(0); }); test('non-hash-container symbol iterator test', () => { for (const container of containerArr) { let index = 0; for (const element of container) { if (container instanceof OrderedMap) { expect((element as [number, number])[1]) .toEqual(arr[index++]); } else { expect(element).toEqual(arr[index++]); } } } }); }); js-sdsl-4.1.4/test/SequentialContainerTest/000077500000000000000000000000001430603165700207005ustar00rootroot00000000000000js-sdsl-4.1.4/test/SequentialContainerTest/Deque.test.ts000066400000000000000000000073061430603165700232770ustar00rootroot00000000000000import { Vector, Deque, SequentialContainer } from '@/index'; const arr: number[] = []; const testNum = 10000; for (let i = 0; i < testNum; ++i) { arr.push(Math.floor(Math.random() * testNum)); } function judgeSequentialContainer( container: SequentialContainer, myVector: SequentialContainer ) { expect(container.size()).toEqual(myVector.size()); container.forEach((element, index) => { expect(element).toEqual(myVector.getElementByPos(index)); }); } describe('Deque test', () => { const myDeque = new Deque(arr); const tmpArr = [...arr]; test('Deque pushFront function test', () => { for (let i = 0; i < testNum; ++i) { myDeque.pushFront(i); tmpArr.unshift(i); } judgeSequentialContainer(myDeque, new Vector(tmpArr)); }); test('Deque popFront function test', () => { for (let i = 0; i < testNum; ++i) { myDeque.popFront(); tmpArr.shift(); } judgeSequentialContainer(myDeque, new Vector(tmpArr)); }); test('Deque shrinkToFit function test', () => { myDeque.shrinkToFit(); judgeSequentialContainer(myDeque, new Vector(tmpArr)); }); test('Deque find function test', () => { for (let i = 0; i <= 1000; ++i) { const index = Math.floor(Math.random() * myDeque.size()); expect(myDeque.find(tmpArr[index]).pointer).toEqual(tmpArr[index]); } expect(myDeque.find(tmpArr[tmpArr.length - 1]).pointer).toEqual(tmpArr[tmpArr.length - 1]); expect(myDeque.find(tmpArr[tmpArr.length / 2]).pointer).toEqual(tmpArr[tmpArr.length / 2]); expect(() => { const a = myDeque.find(-1).pointer; return a; }).toThrowError(RangeError); myDeque.pushBack(-1); expect(myDeque.find(-1).pointer).toEqual(-1); myDeque.popBack(); }); test('Deque eraseElementByIterator function test', () => { for (let i = 0; i < testNum / 10; ++i) { myDeque.eraseElementByIterator(myDeque.begin()); tmpArr.shift(); } judgeSequentialContainer(myDeque, new Vector(tmpArr)); let index = 0; for (const element of myDeque) { expect(element).toEqual(tmpArr[index++]); } }); test('Deque run time error test', () => { expect(() => myDeque.getElementByPos(myDeque.size())).toThrowError(RangeError); }); test('Deque empty test', () => { myDeque.clear(); for (let i = 0; i < (1 << 15); ++i) { myDeque.pushBack(i); } while (!myDeque.empty()) { myDeque.popBack(); } expect(myDeque.front()).toEqual(undefined); expect(myDeque.size()).toBe(0); myDeque.shrinkToFit(); myDeque.pushBack(1); expect(myDeque.find(1).pointer).toBe(1); myDeque.begin().pointer = 2; expect(myDeque.front()).toBe(2); expect(new Deque(new Set([2])).size()).toBe(1); expect(new Deque(new Vector([2])).size()).toBe(1); // @ts-ignore expect(() => new Deque({})).toThrowError(RangeError); myDeque.cut(-1); myDeque.popBack(); myDeque.popFront(); expect(myDeque.size()).toBe(0); expect(() => myDeque.eraseElementByPos(-1)).toThrowError(RangeError); myDeque.eraseElementByValue(0); expect(myDeque.find(0).equals(myDeque.end())).toEqual(true); myDeque.unique(); // eslint-disable-next-line no-empty, no-unused-vars, @typescript-eslint/no-unused-vars for (const element of myDeque) {} myDeque.pushBack(1); myDeque.insert(1, 1); expect(myDeque.back()).toEqual(1); for (const element of myDeque) { expect(element).toBe(1); } myDeque.eraseElementByPos(1); myDeque.insert(0, 3); expect(myDeque.front()).toBe(3); const q = new Deque([], (1 << 10)); for (let i = 0; i < testNum; ++i) q.pushFront(arr[i]); arr.reverse(); judgeSequentialContainer(q, new Vector(arr)); }); }); js-sdsl-4.1.4/test/SequentialContainerTest/LinkList.test.ts000066400000000000000000000117651430603165700237710ustar00rootroot00000000000000import { Vector, LinkList, SequentialContainer } from '@/index'; function judgeSequentialContainer( container: SequentialContainer, myVector: SequentialContainer ) { expect(container.size()).toEqual(myVector.size()); container.forEach((element, index) => { expect(element).toEqual(myVector.getElementByPos(index)); }); } const arr: number[] = []; const testNum = 10000; for (let i = 0; i < testNum; ++i) { arr.push(Math.floor(Math.random() * testNum)); } describe('LinkList test', () => { const myLinkList = new LinkList(arr); const tmpArr = [...arr]; test('LinkList pushFront function test', () => { for (let i = 0; i < testNum; ++i) { myLinkList.pushFront(i); tmpArr.unshift(i); } myLinkList.begin().pointer = 100; tmpArr[0] = 100; judgeSequentialContainer(myLinkList, new Vector(tmpArr)); }); test('LinkList popFront function test', () => { for (let i = 0; i < testNum; ++i) { myLinkList.popFront(); tmpArr.shift(); } judgeSequentialContainer(myLinkList, new Vector(tmpArr)); }); test('LinkList merge function test', () => { for (let i = 0; i < testNum; ++i) { tmpArr.push(i); } const otherLinkList = new LinkList(tmpArr); myLinkList.forEach(element => tmpArr.push(element)); myLinkList.sort((x, y) => x - y); otherLinkList.sort((x, y) => x - y); tmpArr.sort((x, y) => x - y); myLinkList.merge(otherLinkList); judgeSequentialContainer(myLinkList, new Vector(tmpArr)); }); test('LinkList find function test', () => { myLinkList.forEach((element, index) => { if (index >= 1000) return; expect(myLinkList.find(element).pointer).toEqual(element); }); expect(myLinkList.find(-1).equals(myLinkList.end())).toBe(true); }); test('LinkList eraseElementByIterator function test', () => { for (let i = 0; i < testNum / 10; ++i) { myLinkList.eraseElementByIterator(myLinkList.begin().next()); myLinkList.eraseElementByIterator(myLinkList.begin()); tmpArr.shift(); tmpArr.shift(); myLinkList.eraseElementByIterator(myLinkList.rBegin().next()); myLinkList.eraseElementByIterator(myLinkList.rBegin()); tmpArr.pop(); tmpArr.pop(); } judgeSequentialContainer(myLinkList, new Vector(tmpArr)); }); test('LinkList run time error test', () => { expect(() => myLinkList.getElementByPos(myLinkList.size())).toThrowError(RangeError); }); test('LinkList pushFront function test', () => { const myLinkList = new LinkList(); // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars, no-empty for (const _ of myLinkList) {} myLinkList.reverse(); expect(myLinkList.front()).toEqual(undefined); expect(myLinkList.back()).toEqual(undefined); expect(() => { // eslint-disable-next-line no-unused-expressions myLinkList.begin().pointer; }).toThrowError(RangeError); expect(() => { // eslint-disable-next-line no-unused-expressions myLinkList.end().pointer; }).toThrowError(RangeError); expect(() => { // eslint-disable-next-line no-unused-expressions myLinkList.rBegin().pointer; }).toThrowError(RangeError); expect(() => { // eslint-disable-next-line no-unused-expressions myLinkList.rEnd().pointer; }).toThrowError(RangeError); expect(() => { myLinkList.eraseElementByIterator(myLinkList.begin()); }).toThrowError(RangeError); expect(() => { myLinkList.begin().pointer = 0; }).toThrowError(RangeError); myLinkList.popBack(); expect(myLinkList.size()).toBe(0); myLinkList.pushBack(1); expect(myLinkList.size()).toBe(1); myLinkList.popBack(); expect(myLinkList.front()).toEqual(undefined); expect(myLinkList.back()).toEqual(undefined); expect(myLinkList.size()).toBe(0); myLinkList.insert(0, 100); expect(myLinkList.front()).toBe(100); myLinkList.insert(myLinkList.size(), 100); expect(myLinkList.back()).toBe(100); myLinkList.clear(); myLinkList.pushFront(1); expect(myLinkList.front()).toBe(1); myLinkList.popFront(); myLinkList.popFront(); expect(myLinkList.size()).toBe(0); myLinkList.pushBack(1); myLinkList.merge(new LinkList([2])); expect(myLinkList.size()).toBe(2); myLinkList.clear(); myLinkList.eraseElementByValue(0); expect(myLinkList.find(0).equals(myLinkList.end())).toBe(true); myLinkList.merge(new LinkList([2])); expect(myLinkList.size()).toBe(1); expect(myLinkList.front()).toBe(2); myLinkList.insert(1, 1, 0); expect(myLinkList.size()).toBe(1); myLinkList.pushFront(0); expect(myLinkList.size()).toBe(2); myLinkList.eraseElementByValue(0); expect(myLinkList.size()).toBe(1); myLinkList.clear(); myLinkList.sort(); myLinkList.unique(); expect(myLinkList.size()).toBe(0); const newLink = new LinkList([1, 2, 3]); myLinkList.pushBack(4); myLinkList.merge(newLink); myLinkList.forEach((element, index) => expect(element).toBe(index + 1)); }); }); js-sdsl-4.1.4/test/SequentialContainerTest/SequentialContainer.test.ts000066400000000000000000000101371430603165700262050ustar00rootroot00000000000000import { Vector, LinkList, Deque, SequentialContainer } from '@/index'; const arr: number[] = []; const testNum = 1000; for (let i = 0; i < testNum; ++i) { arr.push(Math.floor(Math.random() * testNum)); } function judgeSequentialContainer( container: SequentialContainer, myVector: SequentialContainer ) { expect(container.size()).toEqual(myVector.size()); container.forEach((element, index) => { expect(element).toEqual(myVector.getElementByPos(index)); }); } function testSequentialContainer(container: SequentialContainer) { const myVector = new Vector(arr); if (container.size() !== myVector.size()) { throw new Error('size test failed.'); } if (container.front() !== myVector.front()) { throw new Error('front test failed!'); } if (container.back() !== myVector.back()) { throw new Error('back test failed!'); } judgeSequentialContainer(container, myVector); for (let i = 0; i < testNum; ++i) { container.pushBack(i); myVector.pushBack(i); } judgeSequentialContainer(container, myVector); for (let i = 0; i < testNum; ++i) { container.popBack(); myVector.popBack(); } judgeSequentialContainer(container, myVector); let testResult = true; const len = container.size(); testResult = testResult && (container.size() === myVector.size()); for (let i = 0; i < len; ++i) { testResult = testResult && (container.getElementByPos(i) === myVector.getElementByPos(i)); } if (!testResult) { throw new Error('getElementByPos test failed.'); } for (let i = 0; i < len; ++i) { myVector.setElementByPos(i, i); container.setElementByPos(i, i); } judgeSequentialContainer(container, myVector); for (let i = 0; i < testNum; ++i) { const pos = Math.floor(Math.random() * myVector.size()); container.eraseElementByPos(pos); myVector.eraseElementByPos(pos); } judgeSequentialContainer(container, myVector); for (let i = 0; i < testNum; ++i) { container.pushBack(i); myVector.pushBack(i); } for (let i = 0; i < testNum; ++i) { const pos = Math.floor(Math.random() * container.size()); const num = 10; container.insert(pos, -2, num); myVector.insert(pos, -2, num); } judgeSequentialContainer(container, myVector); container.eraseElementByValue(-2); myVector.eraseElementByValue(-2); container.eraseElementByValue(container.back() as number); myVector.eraseElementByValue(myVector.back() as number); judgeSequentialContainer(container, myVector); container.reverse(); myVector.reverse(); judgeSequentialContainer(container, myVector); for (let i = 0; i < testNum; ++i) { const pos = Math.floor(Math.random() * container.size()); const num = 10; container.insert(pos, -1, num); myVector.insert(pos, -1, num); } container.unique(); myVector.unique(); judgeSequentialContainer(container, myVector); for (let i = 0; i < testNum; ++i) { container.pushBack(i); myVector.pushBack(i); } container.sort((x, y) => x - y); myVector.sort((x: number, y: number) => x - y); judgeSequentialContainer(container, myVector); container.clear(); myVector.clear(); judgeSequentialContainer(container, myVector); } describe('SequentialContainer test', () => { test('Vector test', () => { const myVector = new Vector([1], false); myVector.begin().pointer = 0; expect(myVector.front()).toBe(0); expect(myVector.find(0).pointer).toBe(0); myVector.eraseElementByIterator(myVector.begin()); expect(myVector.size()).toBe(0); expect(myVector.front()).toEqual(undefined); expect(myVector.back()).toEqual(undefined); myVector.insert(0, 100); expect(() => { myVector.find(0).pointer = 1; }).toThrowError(RangeError); myVector.clear(); myVector.popBack(); }); test('LinkList standard test', () => { const myLinkList = new LinkList(arr); expect(() => { testSequentialContainer(myLinkList); }).not.toThrowError(Error); }); test('Deque standard test', () => { const myDeque = new Deque(arr); expect(() => testSequentialContainer(myDeque)).not.toThrowError(Error); }); }); js-sdsl-4.1.4/test/TreeContainerTest/000077500000000000000000000000001430603165700174655ustar00rootroot00000000000000js-sdsl-4.1.4/test/TreeContainerTest/OrderedMap.test.ts000066400000000000000000000173651430603165700230510ustar00rootroot00000000000000import { Vector, OrderedMap } from '@/index'; const arr: number[] = []; const testNum = 10000; for (let i = 0; i < testNum; ++i) { arr.push(Math.floor(Math.random() * testNum)); } function judgeMap(myOrderedMap: OrderedMap, stdMap: Map) { expect(myOrderedMap.getHeight()).toBeLessThanOrEqual(2 * Math.log2(myOrderedMap.size() + 1)); expect(myOrderedMap.size()).toEqual(stdMap.size); if (!myOrderedMap.empty()) { const front = myOrderedMap.front() as [number, number]; const back = myOrderedMap.back() as [number, number]; expect(front[0]).toEqual(myOrderedMap.begin().pointer[0]); expect(front[1]).toEqual(myOrderedMap.begin().pointer[1]); expect(back[0]).toEqual(myOrderedMap.rBegin().pointer[0]); expect(back[1]).toEqual(myOrderedMap.rBegin().pointer[1]); } stdMap.forEach((value, key) => { const _value = myOrderedMap.getElementByKey(key); expect(_value).toEqual(value); }); myOrderedMap.forEach(([key, value]) => { const _value = stdMap.get(key); expect(value).toEqual(_value); }); } describe('OrderedMap test', () => { const myOrderedMap = new OrderedMap(arr.map((element, index) => [element, index])); const stdMap = new Map(arr.map((element, index) => [element, index])); test('OrderedMap eraseElementByKey function test', () => { const eraseArr: number[] = []; stdMap.forEach((value, key) => { if (Math.random() > 0.5) { eraseArr.push(key); } }); eraseArr.forEach(key => { myOrderedMap.eraseElementByKey(key); stdMap.delete(key); }); judgeMap(myOrderedMap, stdMap); }); test('OrderedMap setElement function test', () => { for (let i = 0; i < testNum; ++i) { myOrderedMap.setElement(i, i); stdMap.set(i, i); } judgeMap(myOrderedMap, stdMap); }); test('OrderedMap eraseElementByPos function test', () => { for (let i = 0; i < 10; ++i) { const pos = Math.floor(Math.random() * myOrderedMap.size()); const pair = myOrderedMap.getElementByPos(pos); myOrderedMap.eraseElementByPos(pos); if (pair) stdMap.delete(pair[0]); } judgeMap(myOrderedMap, stdMap); }); test('OrderedMap union function test', () => { const otherMap = new OrderedMap(); for (let i = 0; i < testNum; ++i) { const random = Math.random() * 1000000; otherMap.setElement(random, i); stdMap.set(random, i); } myOrderedMap.union(otherMap); judgeMap(myOrderedMap, stdMap); }); test('OrderedMap binary search function test', () => { const myVector = new Vector(myOrderedMap); myVector.sort((x, y) => x[0] - y[0]); for (let i = 0; i < myVector.size(); ++i) { let vElement = myVector.getElementByPos(i); let myElement = myOrderedMap.lowerBound(vElement[0]).pointer; expect(myElement[0]).toEqual(vElement[0]); expect(myElement[1]).toEqual(vElement[1]); if (i !== myVector.size() - 1) { vElement = myVector.getElementByPos(i); myElement = myOrderedMap.upperBound(vElement[0]).pointer; vElement = myVector.getElementByPos(i + 1); expect(myElement[0]).toEqual(vElement[0]); expect(myElement[1]).toEqual(vElement[1]); } } }); test('OrderedMap reverse binary search function test', () => { const myVector = new Vector(myOrderedMap); myVector.sort((x, y) => x[0] - y[0]); for (let i = 0; i < myVector.size(); ++i) { let vElement = myVector.getElementByPos(i); let myElement = myOrderedMap.reverseLowerBound(vElement[0]).pointer; expect(myElement[0]).toEqual(vElement[0]); expect(myElement[1]).toEqual(vElement[1]); if (i !== 0) { vElement = myVector.getElementByPos(i); myElement = myOrderedMap.reverseUpperBound(vElement[0]).pointer; vElement = myVector.getElementByPos(i - 1); expect(myElement[0]).toEqual(vElement[0]); expect(myElement[1]).toEqual(vElement[1]); } } }); test('OrderedMap eraseElementByIterator function test', () => { const v = new Vector<[number, number]>(myOrderedMap); v.sort((x, y) => x[0] - y[0]); for (let i = 0; i < testNum / 10; ++i) { const begin = myOrderedMap.begin(); stdMap.delete(begin.pointer[0]); myOrderedMap.eraseElementByIterator(begin); expect(begin.pointer[0]).toBe(v.getElementByPos(i + 1)[0]); } judgeMap(myOrderedMap, stdMap); }); test('OrderedMap iterator error test', () => { myOrderedMap.begin().pointer['1'] = 2; expect(myOrderedMap.front()).toEqual([myOrderedMap.begin().pointer[0], 2]); expect(() => { // @ts-ignore myOrderedMap.begin().pointer['0'] = 2; }).toThrow(TypeError); }); test('OrderedMap updateKeyByIterator function test', () => { const mp = new OrderedMap(); mp.setElement(1, 1); expect(mp.updateKeyByIterator(mp.begin(), 2)).toBe(true); expect(mp.front()).toEqual([2, 1]); mp.eraseElementByKey(2); expect(mp.size()).toEqual(0); expect(() => mp.updateKeyByIterator(mp.begin(), 1)).toThrowError(TypeError); for (let i = 0; i < testNum; ++i) { mp.setElement(i * 2, i); } expect(() => mp.updateKeyByIterator(mp.end(), 1)).toThrowError(TypeError); for (let i = 0; i < testNum; ++i) { const iter = mp.lowerBound(i * 2); expect(mp.updateKeyByIterator(iter, i * 2 + 1)).toBe(true); expect(iter.pointer[0]).toEqual(i * 2 + 1); expect(iter.pointer[1]).toEqual(i); if (i !== testNum - 1) { expect(mp.updateKeyByIterator(iter, testNum * 3)).toBe(false); expect(iter.pointer[0]).toEqual(i * 2 + 1); expect(iter.pointer[1]).toEqual(i); } if (i !== 0) { expect(mp.updateKeyByIterator(iter, -1)).toBe(false); expect(iter.pointer[0]).toEqual(i * 2 + 1); expect(iter.pointer[1]).toEqual(i); } } }); test('OrderedMap clear function test', () => { myOrderedMap.clear(); stdMap.clear(); judgeMap(myOrderedMap, stdMap); for (let i = 0; i < testNum; ++i) { myOrderedMap.setElement(i, i); stdMap.set(i, i); } let i = testNum; stdMap.forEach((value, key) => { --i; myOrderedMap.eraseElementByKey(key); expect(myOrderedMap.size()).toEqual(i); }); expect(myOrderedMap.size()).toEqual(0); stdMap.clear(); for (let i = 0; i < testNum; ++i) { myOrderedMap.setElement(testNum - i, i); stdMap.set(testNum - i, i); } i = testNum; stdMap.forEach((value, key) => { --i; myOrderedMap.eraseElementByKey(key); expect(myOrderedMap.size()).toEqual(i); }); expect(myOrderedMap.front()).toEqual(undefined); expect(myOrderedMap.back()).toEqual(undefined); expect(myOrderedMap.size()).toEqual(0); stdMap.clear(); }); test('OrderedMap empty test', () => { const myOrderedMap = new OrderedMap(); expect(myOrderedMap.front()).toEqual(undefined); expect(myOrderedMap.back()).toEqual(undefined); expect(() => { myOrderedMap.begin().pointer[1] = 1; }).toThrowError(RangeError); expect(() => { myOrderedMap.lowerBound(0).pointer[1] = 1; }).toThrowError(RangeError); expect(() => { myOrderedMap.upperBound(0).pointer[1] = 1; }).toThrowError(RangeError); expect(() => { myOrderedMap.reverseLowerBound(0).pointer[1] = 1; }).toThrowError(RangeError); expect(() => { myOrderedMap.reverseUpperBound(0).pointer[1] = 1; }).toThrowError(RangeError); expect(() => { myOrderedMap.find(0).pointer[0] = 2; }).toThrowError(RangeError); expect(() => { // @ts-ignore // eslint-disable-next-line no-unused-expressions myOrderedMap.rBegin().pointer.a; }).toThrowError(RangeError); myOrderedMap.setElement(1, 1); expect(myOrderedMap.getElementByKey(0)).toEqual(undefined); }); }); js-sdsl-4.1.4/test/TreeContainerTest/OrderedSet.test.ts000066400000000000000000000201151430603165700230520ustar00rootroot00000000000000import { Vector, OrderedSet } from '@/index'; const arr: number[] = []; const testNum = 10000; for (let i = 0; i < testNum; ++i) { arr.push(Math.floor(Math.random() * testNum)); } function judgeSet(myOrderedSet: OrderedSet, myVector: Vector) { expect(myOrderedSet.getHeight()).toBeLessThanOrEqual(2 * Math.log2(myOrderedSet.size() + 1)); expect(myOrderedSet.size()).toEqual(myVector.size()); myVector.sort((x, y) => x - y); myOrderedSet.forEach((element, index) => { expect(element).toEqual(myVector.getElementByPos(index)); }); } describe('OrderedSet test', () => { const myOrderedSet = new OrderedSet(arr); const myVector = new Vector(new Set(arr)); test('OrderedSet insert function test', () => { for (let i = 0; i < testNum; ++i) { const random = Math.random() * testNum * 10; myOrderedSet.insert(random); myVector.pushBack(random); } judgeSet(myOrderedSet, myVector); }); test('OrderedSet eraseElementByKey function test', () => { for (let i = 0; i < testNum / 10; ++i) { const pos = Math.floor(Math.random() * myVector.size()); const eraseValue = myVector.getElementByPos(pos); myVector.eraseElementByPos(pos); myOrderedSet.eraseElementByKey(eraseValue); } judgeSet(myOrderedSet, myVector); }); test('OrderedSet union function test', () => { const otherOrderedSet = new OrderedSet(); for (let i = 0; i < testNum; ++i) { const random = Math.random() * testNum * 10; otherOrderedSet.insert(random); myVector.pushBack(random); } myOrderedSet.union(otherOrderedSet); judgeSet(myOrderedSet, myVector); }); test('OrderedSet eraseElementByPos function test', () => { for (let i = 0; i < testNum / 10; ++i) { const pos = Math.floor(Math.random() * myVector.size()); myVector.eraseElementByPos(pos); myOrderedSet.eraseElementByPos(pos); } judgeSet(myOrderedSet, myVector); }); test('OrderedSet find function test', () => { myVector.forEach((element: number) => { expect(myOrderedSet.find(element).pointer).toEqual(element); }); }); myVector.sort((x: number, y: number) => x - y); test('OrderedSet binary search function test', () => { for (let i = 0; i < myVector.size(); ++i) { expect(myOrderedSet.lowerBound(myVector.getElementByPos(i)).pointer) .toBe(myVector.getElementByPos(i)); if (i !== myVector.size() - 1) { expect(myOrderedSet.upperBound(myVector.getElementByPos(i)).pointer) .toBe(myVector.getElementByPos(i + 1)); } if (i !== 0) { const mid = (myVector.getElementByPos(i) + myVector.getElementByPos(i - 1)) / 2; expect(myOrderedSet.lowerBound(mid).pointer) .toBe(myVector.getElementByPos(i)); expect(myOrderedSet.upperBound(mid).pointer) .toBe(myVector.getElementByPos(i)); } } }); test('OrderedSet reverse binary search function test', () => { for (let i = 0; i < myVector.size(); ++i) { expect(myOrderedSet.reverseLowerBound(myVector.getElementByPos(i)).pointer) .toBe(myVector.getElementByPos(i)); if (i !== 0) { expect(myOrderedSet.reverseUpperBound(myVector.getElementByPos(i)).pointer) .toBe(myVector.getElementByPos(i - 1)); } if (i !== 0) { const mid = (myVector.getElementByPos(i) + myVector.getElementByPos(i - 1)) / 2; expect(myOrderedSet.reverseLowerBound(mid).pointer) .toBe(myVector.getElementByPos(i - 1)); expect(myOrderedSet.reverseUpperBound(mid).pointer) .toBe(myVector.getElementByPos(i - 1)); } } }); test('OrderedSet front & back function test', () => { for (let i = 0; i < testNum / 10; ++i) { myOrderedSet.eraseElementByPos(0); myVector.eraseElementByPos(0); expect(myOrderedSet.front()).toEqual(myVector.front()); myOrderedSet.eraseElementByPos(myOrderedSet.size() - 1); myVector.eraseElementByPos(myVector.size() - 1); expect(myOrderedSet.back()).toEqual(myVector.back()); } judgeSet(myOrderedSet, myVector); }); test('OrderedSet eraseElementByIterator function test', () => { for (let i = 0; i < testNum / 10; ++i) { myOrderedSet.eraseElementByIterator(myOrderedSet.begin()); myVector.eraseElementByPos(0); } judgeSet(myOrderedSet, myVector); }); test('OrderedSet updateKeyByIterator function test', () => { const st = new OrderedSet(); st.insert(1); expect(st.updateKeyByIterator(st.begin(), 2)).toBe(true); expect(st.front()).toEqual(2); st.eraseElementByKey(2); expect(st.size()).toEqual(0); expect(() => st.updateKeyByIterator(st.begin(), 1)).toThrowError(TypeError); for (let i = 0; i < testNum; ++i) { st.insert(i * 2); } expect(() => st.updateKeyByIterator(st.end(), 1)).toThrowError(TypeError); for (let i = 0; i < testNum; ++i) { const iter = st.lowerBound(i * 2); expect(st.updateKeyByIterator(iter, i * 2 + 1)).toBe(true); expect(iter.pointer).toEqual(i * 2 + 1); if (i !== testNum - 1) { expect(st.updateKeyByIterator(iter, testNum * 3)).toBe(false); expect(iter.pointer).toEqual(i * 2 + 1); } if (i !== 0) { expect(st.updateKeyByIterator(iter, -1)).toBe(false); expect(iter.pointer).toEqual(i * 2 + 1); } } }); test('OrderedSet insert by hint function test', () => { const st = new OrderedSet(); const v = new Vector(); for (let i = 0; i < testNum; ++i) { st.insert(i * 3); v.pushBack(i * 3); } for (let i = 0; i < testNum; ++i) { const iter = st.lowerBound(i * 3); st.insert(i * 3 - 1, iter); st.insert(i * 3, iter); st.insert(i * 3 - 1, iter); st.insert(i * 3 - 2, iter); st.insert(i * 3 - 1, st.end()); v.pushBack(i * 3 - 2); v.pushBack(i * 3 - 1); expect(st.find(i * 3).equals(st.end())).toEqual(false); expect(st.find(i * 3 - 1).equals(st.end())).toEqual(false); expect(st.find(i * 3 - 2).equals(st.end())).toEqual(false); } v.sort((x, y) => x - y); judgeSet(st, v); }); test('OrderedSet clear function test', () => { myOrderedSet.clear(); myVector.clear(); judgeSet(myOrderedSet, myVector); }); test('OrderedSet empty test', () => { expect(() => { // eslint-disable-next-line no-unused-expressions myOrderedSet.begin().pointer; }).toThrowError(RangeError); expect(() => { // eslint-disable-next-line no-unused-expressions myOrderedSet.rBegin().pointer; }).toThrowError(RangeError); expect(myOrderedSet.front()).toEqual(undefined); expect(myOrderedSet.back()).toEqual(undefined); expect(() => { // eslint-disable-next-line no-unused-expressions myOrderedSet.find(0).pointer; }).toThrowError(RangeError); expect(() => { // eslint-disable-next-line no-unused-expressions myOrderedSet.begin().pointer; }).toThrowError(RangeError); expect(() => { // eslint-disable-next-line no-unused-expressions myOrderedSet.lowerBound(0).pointer; }).toThrowError(RangeError); expect(() => { // eslint-disable-next-line no-unused-expressions myOrderedSet.upperBound(0).pointer; }).toThrowError(RangeError); expect(() => { // eslint-disable-next-line no-unused-expressions myOrderedSet.reverseLowerBound(0).pointer; }).toThrowError(RangeError); expect(() => { // eslint-disable-next-line no-unused-expressions myOrderedSet.reverseUpperBound(0).pointer; }).toThrowError(RangeError); myOrderedSet.eraseElementByKey(0); expect(myOrderedSet.size()).toBe(0); myOrderedSet.insert(1); myOrderedSet.eraseElementByKey(0); expect(myOrderedSet.getElementByPos(0)).toBe(1); myOrderedSet.insert(3); expect(myOrderedSet.getElementByPos(1)).toBe(3); myOrderedSet.clear(); myOrderedSet.insert(1); expect(myOrderedSet.front()).toEqual(1); myOrderedSet.eraseElementByKey(1); expect(myOrderedSet.size()).toEqual(0); expect(() => myOrderedSet.eraseElementByIterator(myOrderedSet.begin())).toThrow(RangeError); }); }); js-sdsl-4.1.4/tsconfig.cjs.json000066400000000000000000000007611430603165700163750ustar00rootroot00000000000000{ "compilerOptions": { "target": "ES6", "outDir": "dist/cjs", "module": "CommonJS", "strict": true, "baseUrl": "./", "declaration": true, "esModuleInterop": true, "downlevelIteration": true, "forceConsistentCasingInFileNames": true, "paths": { "@/*": [ "./src/*" ] }, "plugins": [ { "transform": "ts-transform-paths", "afterDeclarations": true } ], }, "files": [ "./src/index.ts" ], } js-sdsl-4.1.4/tsconfig.esm.json000066400000000000000000000010171430603165700163750ustar00rootroot00000000000000{ "compilerOptions": { "target": "ES5", "outDir": "dist/esm", "module": "ES2015", "strict": true, "baseUrl": "./", "declaration": true, "esModuleInterop": true, "downlevelIteration": true, "moduleResolution": "Node", "forceConsistentCasingInFileNames": true, "paths": { "@/*": [ "./src/*" ] }, "plugins": [ { "transform": "ts-transform-paths", "afterDeclarations": true } ], }, "files": [ "./src/index.ts" ], } js-sdsl-4.1.4/tsconfig.json000066400000000000000000000006611430603165700156160ustar00rootroot00000000000000{ "compilerOptions": { "target": "ES6", "outDir": "dist", "strict": true, "baseUrl": "./", "esModuleInterop": true, "downlevelIteration": true, "moduleResolution": "Node", "forceConsistentCasingInFileNames": true, "paths": { "@/*": [ "./src/*" ] }, "plugins": [ { "transform": "ts-transform-paths", "afterDeclarations": true } ] } } js-sdsl-4.1.4/tsconfig.performance.json000066400000000000000000000007501430603165700201150ustar00rootroot00000000000000{ "compilerOptions": { "target": "ES6", "outDir": "dist/performance", "module": "CommonJS", "strict": true, "baseUrl": "./", "esModuleInterop": true, "downlevelIteration": true, "forceConsistentCasingInFileNames": true, "paths": { "@/*": [ "./src/*" ] }, "plugins": [ { "transform": "ts-transform-paths", "afterDeclarations": true } ], }, "files": [ "./performance/index.ts" ], } js-sdsl-4.1.4/yarn.lock000066400000000000000000006263261430603165700147460ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 "@ampproject/remapping@^2.1.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== dependencies: "@jridgewell/gen-mapping" "^0.1.0" "@jridgewell/trace-mapping" "^0.3.9" "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== dependencies: "@babel/highlight" "^7.18.6" "@babel/compat-data@^7.18.8": version "7.18.8" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== "@babel/core@^7.11.6", "@babel/core@^7.12.3": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.9.tgz#805461f967c77ff46c74ca0460ccf4fe933ddd59" integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.18.6" "@babel/generator" "^7.18.9" "@babel/helper-compilation-targets" "^7.18.9" "@babel/helper-module-transforms" "^7.18.9" "@babel/helpers" "^7.18.9" "@babel/parser" "^7.18.9" "@babel/template" "^7.18.6" "@babel/traverse" "^7.18.9" "@babel/types" "^7.18.9" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.1" semver "^6.3.0" "@babel/generator@^7.18.9", "@babel/generator@^7.7.2": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.9.tgz#68337e9ea8044d6ddc690fb29acae39359cca0a5" integrity sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug== dependencies: "@babel/types" "^7.18.9" "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" "@babel/helper-compilation-targets@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== dependencies: "@babel/compat-data" "^7.18.8" "@babel/helper-validator-option" "^7.18.6" browserslist "^4.20.2" semver "^6.3.0" "@babel/helper-environment-visitor@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== "@babel/helper-function-name@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz#940e6084a55dee867d33b4e487da2676365e86b0" integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A== dependencies: "@babel/template" "^7.18.6" "@babel/types" "^7.18.9" "@babel/helper-hoist-variables@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== dependencies: "@babel/types" "^7.18.6" "@babel/helper-module-imports@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== dependencies: "@babel/types" "^7.18.6" "@babel/helper-module-transforms@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== dependencies: "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-module-imports" "^7.18.6" "@babel/helper-simple-access" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" "@babel/helper-validator-identifier" "^7.18.6" "@babel/template" "^7.18.6" "@babel/traverse" "^7.18.9" "@babel/types" "^7.18.9" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.8.0": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== "@babel/helper-simple-access@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== dependencies: "@babel/types" "^7.18.6" "@babel/helper-split-export-declaration@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== dependencies: "@babel/types" "^7.18.6" "@babel/helper-validator-identifier@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== "@babel/helper-validator-option@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== "@babel/helpers@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== dependencies: "@babel/template" "^7.18.6" "@babel/traverse" "^7.18.9" "@babel/types" "^7.18.9" "@babel/highlight@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== dependencies: "@babel/helper-validator-identifier" "^7.18.6" chalk "^2.0.0" js-tokens "^4.0.0" "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.6", "@babel/parser@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.9.tgz#f2dde0c682ccc264a9a8595efd030a5cc8fd2539" integrity sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-bigint@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.8.3": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285" integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/runtime@^7.14.6", "@babel/runtime@^7.7.6": version "7.17.9" resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72" integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg== dependencies: regenerator-runtime "^0.13.4" "@babel/template@^7.18.6", "@babel/template@^7.3.3": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== dependencies: "@babel/code-frame" "^7.18.6" "@babel/parser" "^7.18.6" "@babel/types" "^7.18.6" "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.9.tgz#deeff3e8f1bad9786874cb2feda7a2d77a904f98" integrity sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg== dependencies: "@babel/code-frame" "^7.18.6" "@babel/generator" "^7.18.9" "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-function-name" "^7.18.9" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" "@babel/parser" "^7.18.9" "@babel/types" "^7.18.9" debug "^4.1.0" globals "^11.1.0" "@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.9.tgz#7148d64ba133d8d73a41b3172ac4b83a1452205f" integrity sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg== dependencies: "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== "@commitlint/cli@^17.0.3": version "17.0.3" resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-17.0.3.tgz#50be9d9a8d79f6c47bfd2703638fe65215eb2526" integrity sha512-oAo2vi5d8QZnAbtU5+0cR2j+A7PO8zuccux65R/EycwvsZrDVyW518FFrnJK2UQxbRtHFFIG+NjQ6vOiJV0Q8A== dependencies: "@commitlint/format" "^17.0.0" "@commitlint/lint" "^17.0.3" "@commitlint/load" "^17.0.3" "@commitlint/read" "^17.0.0" "@commitlint/types" "^17.0.0" execa "^5.0.0" lodash "^4.17.19" resolve-from "5.0.0" resolve-global "1.0.0" yargs "^17.0.0" "@commitlint/config-validator@^17.0.3": version "17.0.3" resolved "https://registry.yarnpkg.com/@commitlint/config-validator/-/config-validator-17.0.3.tgz#5d1ec17eece1f85a0d06c05d168a039b313eb5d7" integrity sha512-3tLRPQJKapksGE7Kee9axv+9z5I2GDHitDH4q63q7NmNA0wkB+DAorJ0RHz2/K00Zb1/MVdHzhCga34FJvDihQ== dependencies: "@commitlint/types" "^17.0.0" ajv "^8.11.0" "@commitlint/ensure@^17.0.0": version "17.0.0" resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-17.0.0.tgz#781ff5f8870cb98ce4496d5c71649a4cd122a0e0" integrity sha512-M2hkJnNXvEni59S0QPOnqCKIK52G1XyXBGw51mvh7OXDudCmZ9tZiIPpU882p475Mhx48Ien1MbWjCP1zlyC0A== dependencies: "@commitlint/types" "^17.0.0" lodash "^4.17.19" "@commitlint/execute-rule@^17.0.0": version "17.0.0" resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-17.0.0.tgz#186e9261fd36733922ae617497888c4bdb6e5c92" integrity sha512-nVjL/w/zuqjCqSJm8UfpNaw66V9WzuJtQvEnCrK4jDw6qKTmZB+1JQ8m6BQVZbNBcwfYdDNKnhIhqI0Rk7lgpQ== "@commitlint/format@^17.0.0": version "17.0.0" resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-17.0.0.tgz#2c991ac0df3955fe5d7d4d733967bd17e6cfd9e0" integrity sha512-MZzJv7rBp/r6ZQJDEodoZvdRM0vXu1PfQvMTNWFb8jFraxnISMTnPBWMMjr2G/puoMashwaNM//fl7j8gGV5lA== dependencies: "@commitlint/types" "^17.0.0" chalk "^4.1.0" "@commitlint/is-ignored@^17.0.3": version "17.0.3" resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-17.0.3.tgz#0e1c725c1e50aea5852fb1260bc92b2ee1856425" integrity sha512-/wgCXAvPtFTQZxsVxj7owLeRf5wwzcXLaYmrZPR4a87iD4sCvUIRl1/ogYrtOyUmHwWfQsvjqIB4mWE/SqWSnA== dependencies: "@commitlint/types" "^17.0.0" semver "7.3.7" "@commitlint/lint@^17.0.3": version "17.0.3" resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-17.0.3.tgz#98542a48f03b5c144309e24cbe1c032366ea75e2" integrity sha512-2o1fk7JUdxBUgszyt41sHC/8Nd5PXNpkmuOo9jvGIjDHzOwXyV0PSdbEVTH3xGz9NEmjohFHr5l+N+T9fcxong== dependencies: "@commitlint/is-ignored" "^17.0.3" "@commitlint/parse" "^17.0.0" "@commitlint/rules" "^17.0.0" "@commitlint/types" "^17.0.0" "@commitlint/load@^17.0.3": version "17.0.3" resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-17.0.3.tgz#683aa484a5515714512e442f2f4b11f75e66097a" integrity sha512-3Dhvr7GcKbKa/ey4QJ5MZH3+J7QFlARohUow6hftQyNjzoXXROm+RwpBes4dDFrXG1xDw9QPXA7uzrOShCd4bw== dependencies: "@commitlint/config-validator" "^17.0.3" "@commitlint/execute-rule" "^17.0.0" "@commitlint/resolve-extends" "^17.0.3" "@commitlint/types" "^17.0.0" "@types/node" ">=12" chalk "^4.1.0" cosmiconfig "^7.0.0" cosmiconfig-typescript-loader "^2.0.0" lodash "^4.17.19" resolve-from "^5.0.0" typescript "^4.6.4" "@commitlint/message@^17.0.0": version "17.0.0" resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-17.0.0.tgz#ae0f8ec6a3e5c8d369792a2c391952c7596cca73" integrity sha512-LpcwYtN+lBlfZijHUdVr8aNFTVpHjuHI52BnfoV01TF7iSLnia0jttzpLkrLmI8HNQz6Vhr9UrxDWtKZiMGsBw== "@commitlint/parse@^17.0.0": version "17.0.0" resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-17.0.0.tgz#6d508a1e2aec76f348a447994f26e9b749c02091" integrity sha512-cKcpfTIQYDG1ywTIr5AG0RAiLBr1gudqEsmAGCTtj8ffDChbBRxm6xXs2nv7GvmJN7msOt7vOKleLvcMmRa1+A== dependencies: "@commitlint/types" "^17.0.0" conventional-changelog-angular "^5.0.11" conventional-commits-parser "^3.2.2" "@commitlint/read@^17.0.0": version "17.0.0" resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-17.0.0.tgz#8ab01cf2f27350d8f81f21690962679a7cae5abf" integrity sha512-zkuOdZayKX3J6F6mPnVMzohK3OBrsEdOByIqp4zQjA9VLw1hMsDEFQ18rKgUc2adkZar+4S01QrFreDCfZgbxA== dependencies: "@commitlint/top-level" "^17.0.0" "@commitlint/types" "^17.0.0" fs-extra "^10.0.0" git-raw-commits "^2.0.0" "@commitlint/resolve-extends@^17.0.3": version "17.0.3" resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-17.0.3.tgz#43b237899e2abd59d16af091521b888c8a071412" integrity sha512-H/RFMvrcBeJCMdnVC4i8I94108UDccIHrTke2tyQEg9nXQnR5/Hd6MhyNWkREvcrxh9Y+33JLb+PiPiaBxCtBA== dependencies: "@commitlint/config-validator" "^17.0.3" "@commitlint/types" "^17.0.0" import-fresh "^3.0.0" lodash "^4.17.19" resolve-from "^5.0.0" resolve-global "^1.0.0" "@commitlint/rules@^17.0.0": version "17.0.0" resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-17.0.0.tgz#4eecc5d28cabbc5f3f73838fb02592b551f9bf62" integrity sha512-45nIy3dERKXWpnwX9HeBzK5SepHwlDxdGBfmedXhL30fmFCkJOdxHyOJsh0+B0RaVsLGT01NELpfzJUmtpDwdQ== dependencies: "@commitlint/ensure" "^17.0.0" "@commitlint/message" "^17.0.0" "@commitlint/to-lines" "^17.0.0" "@commitlint/types" "^17.0.0" execa "^5.0.0" "@commitlint/to-lines@^17.0.0": version "17.0.0" resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-17.0.0.tgz#5766895836b8085b099a098482f88a03f070b411" integrity sha512-nEi4YEz04Rf2upFbpnEorG8iymyH7o9jYIVFBG1QdzebbIFET3ir+8kQvCZuBE5pKCtViE4XBUsRZz139uFrRQ== "@commitlint/top-level@^17.0.0": version "17.0.0" resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-17.0.0.tgz#ebd0df4c703c026c2fbdc20fa746836334f4ed15" integrity sha512-dZrEP1PBJvodNWYPOYiLWf6XZergdksKQaT6i1KSROLdjf5Ai0brLOv5/P+CPxBeoj3vBxK4Ax8H1Pg9t7sHIQ== dependencies: find-up "^5.0.0" "@commitlint/types@^17.0.0": version "17.0.0" resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-17.0.0.tgz#3b4604c1a0f06c340ce976e6c6903d4f56e3e690" integrity sha512-hBAw6U+SkAT5h47zDMeOu3HSiD0SODw4Aq7rRNh1ceUmL7GyLKYhPbUvlRWqZ65XjBLPHZhFyQlRaPNz8qvUyQ== dependencies: chalk "^4.1.0" "@cspotcode/source-map-support@^0.8.0": version "0.8.1" resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: "@jridgewell/trace-mapping" "0.3.9" "@eslint/eslintrc@^1.0.5": version "1.0.5" resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz#33f1b838dbf1f923bfa517e008362b78ddbbf318" integrity sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ== 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" "@humanwhocodes/config-array@^0.9.2": version "0.9.2" resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz#68be55c737023009dfc5fe245d51181bb6476914" integrity sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" minimatch "^3.0.4" "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== 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" "@istanbuljs/schema@^0.1.2": version "0.1.3" resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== "@jest/console@^28.1.3": version "28.1.3" resolved "https://registry.yarnpkg.com/@jest/console/-/console-28.1.3.tgz#2030606ec03a18c31803b8a36382762e447655df" integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== dependencies: "@jest/types" "^28.1.3" "@types/node" "*" chalk "^4.0.0" jest-message-util "^28.1.3" jest-util "^28.1.3" slash "^3.0.0" "@jest/core@^28.1.3": version "28.1.3" resolved "https://registry.yarnpkg.com/@jest/core/-/core-28.1.3.tgz#0ebf2bd39840f1233cd5f2d1e6fc8b71bd5a1ac7" integrity sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA== dependencies: "@jest/console" "^28.1.3" "@jest/reporters" "^28.1.3" "@jest/test-result" "^28.1.3" "@jest/transform" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" jest-changed-files "^28.1.3" jest-config "^28.1.3" jest-haste-map "^28.1.3" jest-message-util "^28.1.3" jest-regex-util "^28.0.2" jest-resolve "^28.1.3" jest-resolve-dependencies "^28.1.3" jest-runner "^28.1.3" jest-runtime "^28.1.3" jest-snapshot "^28.1.3" jest-util "^28.1.3" jest-validate "^28.1.3" jest-watcher "^28.1.3" micromatch "^4.0.4" pretty-format "^28.1.3" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" "@jest/environment@^28.1.3": version "28.1.3" resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-28.1.3.tgz#abed43a6b040a4c24fdcb69eab1f97589b2d663e" integrity sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA== dependencies: "@jest/fake-timers" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" jest-mock "^28.1.3" "@jest/expect-utils@^28.1.3": version "28.1.3" resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-28.1.3.tgz#58561ce5db7cd253a7edddbc051fb39dda50f525" integrity sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA== dependencies: jest-get-type "^28.0.2" "@jest/expect@^28.1.3": version "28.1.3" resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-28.1.3.tgz#9ac57e1d4491baca550f6bdbd232487177ad6a72" integrity sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw== dependencies: expect "^28.1.3" jest-snapshot "^28.1.3" "@jest/fake-timers@^28.1.3": version "28.1.3" resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-28.1.3.tgz#230255b3ad0a3d4978f1d06f70685baea91c640e" integrity sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw== dependencies: "@jest/types" "^28.1.3" "@sinonjs/fake-timers" "^9.1.2" "@types/node" "*" jest-message-util "^28.1.3" jest-mock "^28.1.3" jest-util "^28.1.3" "@jest/globals@^28.1.3": version "28.1.3" resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-28.1.3.tgz#a601d78ddc5fdef542728309894895b4a42dc333" integrity sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA== dependencies: "@jest/environment" "^28.1.3" "@jest/expect" "^28.1.3" "@jest/types" "^28.1.3" "@jest/reporters@^28.1.3": version "28.1.3" resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-28.1.3.tgz#9adf6d265edafc5fc4a434cfb31e2df5a67a369a" integrity sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg== dependencies: "@bcoe/v8-coverage" "^0.2.3" "@jest/console" "^28.1.3" "@jest/test-result" "^28.1.3" "@jest/transform" "^28.1.3" "@jest/types" "^28.1.3" "@jridgewell/trace-mapping" "^0.3.13" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" istanbul-lib-instrument "^5.1.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" jest-message-util "^28.1.3" jest-util "^28.1.3" jest-worker "^28.1.3" slash "^3.0.0" string-length "^4.0.1" strip-ansi "^6.0.0" terminal-link "^2.0.0" v8-to-istanbul "^9.0.1" "@jest/schemas@^28.1.3": version "28.1.3" resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905" integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== dependencies: "@sinclair/typebox" "^0.24.1" "@jest/source-map@^28.1.2": version "28.1.2" resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-28.1.2.tgz#7fe832b172b497d6663cdff6c13b0a920e139e24" integrity sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww== dependencies: "@jridgewell/trace-mapping" "^0.3.13" callsites "^3.0.0" graceful-fs "^4.2.9" "@jest/test-result@^28.1.3": version "28.1.3" resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-28.1.3.tgz#5eae945fd9f4b8fcfce74d239e6f725b6bf076c5" integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== dependencies: "@jest/console" "^28.1.3" "@jest/types" "^28.1.3" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" "@jest/test-sequencer@^28.1.3": version "28.1.3" resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz#9d0c283d906ac599c74bde464bc0d7e6a82886c3" integrity sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw== dependencies: "@jest/test-result" "^28.1.3" graceful-fs "^4.2.9" jest-haste-map "^28.1.3" slash "^3.0.0" "@jest/transform@^28.1.3": version "28.1.3" resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.1.3.tgz#59d8098e50ab07950e0f2fc0fc7ec462371281b0" integrity sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA== dependencies: "@babel/core" "^7.11.6" "@jest/types" "^28.1.3" "@jridgewell/trace-mapping" "^0.3.13" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" graceful-fs "^4.2.9" jest-haste-map "^28.1.3" jest-regex-util "^28.0.2" jest-util "^28.1.3" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" write-file-atomic "^4.0.1" "@jest/types@^28.1.3": version "28.1.3" resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== dependencies: "@jest/schemas" "^28.1.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" "@types/yargs" "^17.0.8" chalk "^4.0.0" "@jridgewell/gen-mapping@^0.1.0": version "0.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== dependencies: "@jridgewell/set-array" "^1.0.0" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/gen-mapping@^0.3.2": version "0.3.2" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== dependencies: "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/resolve-uri@^3.0.3": version "3.1.0" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== "@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.14" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.9": version "0.3.14" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" "@mdn/browser-compat-data@^3.3.14": version "3.3.14" resolved "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-3.3.14.tgz#b72a37c654e598f9ae6f8335faaee182bebc6b28" integrity sha512-n2RC9d6XatVbWFdHLimzzUJxJ1KY8LdjqrW6YvGPiRmsHkhOUx74/Ct10x5Yo7bC/Jvqx7cDEW8IMPv/+vwEzA== "@mdn/browser-compat-data@^4.1.5": version "4.2.1" resolved "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.2.1.tgz#1fead437f3957ceebe2e8c3f46beccdb9bc575b8" integrity sha512-EWUguj2kd7ldmrF9F+vI5hUOralPd+sdsUnYbRy33vZTuZkduC1shE9TtEMEjAQwyfyMb4ole5KtjF8MsnQOlA== "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3": version "1.2.8" resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" "@rollup/pluginutils@^4.1.2": version "4.2.1" resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== dependencies: estree-walker "^2.0.1" picomatch "^2.2.2" "@sinclair/typebox@^0.24.1": version "0.24.20" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.20.tgz#11a657875de6008622d53f56e063a6347c51a6dd" integrity sha512-kVaO5aEFZb33nPMTZBxiPEkY+slxiPtqC7QX8f9B3eGOMBvEfuMfxp9DSTTCsRJPumPKjrge4yagyssO4q6qzQ== "@sinonjs/commons@^1.7.0": version "1.8.3" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== dependencies: type-detect "4.0.8" "@sinonjs/fake-timers@^9.1.2": version "9.1.2" resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c" integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== dependencies: "@sinonjs/commons" "^1.7.0" "@tsconfig/node10@^1.0.7": version "1.0.9" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== "@tsconfig/node12@^1.0.7": version "1.0.11" resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": version "1.0.3" resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": version "1.0.3" resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== "@types/babel__core@^7.1.14": version "7.1.19" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460" integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== dependencies: "@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.4" resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": version "7.4.1" resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": version "7.17.1" resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.17.1.tgz#1a0e73e8c28c7e832656db372b779bfd2ef37314" integrity sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA== dependencies: "@babel/types" "^7.3.0" "@types/graceful-fs@^4.1.3": version "4.1.5" resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.4" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== "@types/istanbul-lib-report@*": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": version "3.0.1" resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== dependencies: "@types/istanbul-lib-report" "*" "@types/jest@^28.1.6": version "28.1.6" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.6.tgz#d6a9cdd38967d2d746861fb5be6b120e38284dd4" integrity sha512-0RbGAFMfcBJKOmqRazM8L98uokwuwD5F8rHrv/ZMbrZBwVOWZUyPG6VFNscjYr/vjM3Vu4fRrCPbOs42AfemaQ== dependencies: jest-matcher-utils "^28.0.0" pretty-format "^28.0.0" "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== "@types/minimist@^1.2.0": version "1.2.2" resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== "@types/node@*", "@types/node@^17.0.0": version "17.0.0" resolved "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz#62797cee3b8b497f6547503b2312254d4fe3c2bb" integrity sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw== "@types/node@>=12": version "18.0.5" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.5.tgz#96be8113b014e9e7f0c3609c4a25afadd85ff659" integrity sha512-En7tneq+j0qAiVwysBD79y86MT3ModuoIJbe7JXp+sb5UAjInSShmK3nXXMioBzfF7rXC12hv12d4IyCVwN4dA== "@types/normalize-package-data@^2.4.0": version "2.4.1" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== "@types/prettier@^2.1.5": version "2.6.3" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.3.tgz#68ada76827b0010d0db071f739314fa429943d0a" integrity sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg== "@types/stack-utils@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== "@types/yargs-parser@*": version "21.0.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== "@types/yargs@^17.0.8": version "17.0.10" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.10.tgz#591522fce85d8739bca7b8bb90d048e4478d186a" integrity sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA== dependencies: "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^5.33.1": version "5.33.1" resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.1.tgz#c0a480d05211660221eda963cc844732fe9b1714" integrity sha512-S1iZIxrTvKkU3+m63YUOxYPKaP+yWDQrdhxTglVDVEVBf+aCSw85+BmJnyUaQQsk5TXFG/LpBu9fa+LrAQ91fQ== dependencies: "@typescript-eslint/scope-manager" "5.33.1" "@typescript-eslint/type-utils" "5.33.1" "@typescript-eslint/utils" "5.33.1" debug "^4.3.4" functional-red-black-tree "^1.0.1" ignore "^5.2.0" regexpp "^3.2.0" semver "^7.3.7" tsutils "^3.21.0" "@typescript-eslint/parser@^5.33.1": version "5.33.1" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.33.1.tgz#e4b253105b4d2a4362cfaa4e184e2d226c440ff3" integrity sha512-IgLLtW7FOzoDlmaMoXdxG8HOCByTBXrB1V2ZQYSEV1ggMmJfAkMWTwUjjzagS6OkfpySyhKFkBw7A9jYmcHpZA== dependencies: "@typescript-eslint/scope-manager" "5.33.1" "@typescript-eslint/types" "5.33.1" "@typescript-eslint/typescript-estree" "5.33.1" debug "^4.3.4" "@typescript-eslint/scope-manager@5.33.1": version "5.33.1" resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.1.tgz#8d31553e1b874210018ca069b3d192c6d23bc493" integrity sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA== dependencies: "@typescript-eslint/types" "5.33.1" "@typescript-eslint/visitor-keys" "5.33.1" "@typescript-eslint/type-utils@5.33.1": version "5.33.1" resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.33.1.tgz#1a14e94650a0ae39f6e3b77478baff002cec4367" integrity sha512-X3pGsJsD8OiqhNa5fim41YtlnyiWMF/eKsEZGsHID2HcDqeSC5yr/uLOeph8rNF2/utwuI0IQoAK3fpoxcLl2g== dependencies: "@typescript-eslint/utils" "5.33.1" debug "^4.3.4" tsutils "^3.21.0" "@typescript-eslint/types@5.33.1": version "5.33.1" resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz#3faef41793d527a519e19ab2747c12d6f3741ff7" integrity sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ== "@typescript-eslint/typescript-estree@5.33.1": version "5.33.1" resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.1.tgz#a573bd360790afdcba80844e962d8b2031984f34" integrity sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA== dependencies: "@typescript-eslint/types" "5.33.1" "@typescript-eslint/visitor-keys" "5.33.1" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" "@typescript-eslint/utils@5.33.1": version "5.33.1" resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.33.1.tgz#171725f924fe1fe82bb776522bb85bc034e88575" integrity sha512-uphZjkMaZ4fE8CR4dU7BquOV6u0doeQAr8n6cQenl/poMaIyJtBu8eys5uk6u5HiDH01Mj5lzbJ5SfeDz7oqMQ== dependencies: "@types/json-schema" "^7.0.9" "@typescript-eslint/scope-manager" "5.33.1" "@typescript-eslint/types" "5.33.1" "@typescript-eslint/typescript-estree" "5.33.1" eslint-scope "^5.1.1" eslint-utils "^3.0.0" "@typescript-eslint/visitor-keys@5.33.1": version "5.33.1" resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.1.tgz#0155c7571c8cd08956580b880aea327d5c34a18b" integrity sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg== dependencies: "@typescript-eslint/types" "5.33.1" eslint-visitor-keys "^3.3.0" JSONStream@^1.0.4: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== dependencies: jsonparse "^1.2.0" through ">=2.2.7 <3" acorn-jsx@^5.3.1: version "5.3.2" resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.1.1: version "8.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== acorn@^8.4.1: version "8.7.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== acorn@^8.6.0: version "8.6.0" resolved "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895" integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw== aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: clean-stack "^2.0.0" indent-string "^4.0.0" ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 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" ajv@^8.11.0: version "8.11.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" uri-js "^4.2.2" all-contributors-cli@^6.20.0: version "6.20.0" resolved "https://registry.npmmirror.com/all-contributors-cli/-/all-contributors-cli-6.20.0.tgz#9bc98dda38cb29cfe8afc8a78c004e14af25d2f6" integrity sha512-trEQlL1s1u8FSWSwY2w9uL4GCG7Fo9HIW5rm5LtlE0SQHSolfXQBzJib07Qes5j52/t72wjuE6sEKkuRrwiuuQ== dependencies: "@babel/runtime" "^7.7.6" async "^3.0.1" chalk "^4.0.0" didyoumean "^1.2.1" inquirer "^7.0.4" json-fixer "^1.5.1" lodash "^4.11.2" node-fetch "^2.6.0" pify "^5.0.0" yargs "^15.0.1" ansi-colors@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: version "4.3.2" resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-styles@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== ansi-styles@^6.0.0: version "6.1.0" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3" integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== anymatch@^3.0.3: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" argparse@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-ify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== array-union@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= dependencies: array-uniq "^1.0.1" array-union@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== asn1@~0.2.3: version "0.2.6" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== dependencies: safer-buffer "~2.1.0" assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== ast-metadata-inferer@^0.7.0: version "0.7.0" resolved "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.7.0.tgz#c45d874cbdecabea26dc5de11fc6fa1919807c66" integrity sha512-OkMLzd8xelb3gmnp6ToFvvsHLtS6CbagTkFQvQ+ZYFe3/AIl9iKikNR9G7pY3GfOR/2Xc222hwBjzI7HLkE76Q== dependencies: "@mdn/browser-compat-data" "^3.3.14" astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== async@^2.6.1: version "2.6.4" resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== dependencies: lodash "^4.17.14" async@^3.0.1: version "3.2.3" resolved "https://registry.npmmirror.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9" integrity sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g== asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== aws4@^1.8.0: version "1.11.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== babel-jest@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.1.3.tgz#c1187258197c099072156a0a121c11ee1e3917d5" integrity sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q== dependencies: "@jest/transform" "^28.1.3" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" babel-preset-jest "^28.1.3" chalk "^4.0.0" graceful-fs "^4.2.9" slash "^3.0.0" babel-plugin-istanbul@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@istanbuljs/load-nyc-config" "^1.0.0" "@istanbuljs/schema" "^0.1.2" istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" babel-plugin-jest-hoist@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz#1952c4d0ea50f2d6d794353762278d1d8cca3fbe" integrity sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" babel-preset-current-node-syntax@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== 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" babel-preset-jest@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz#5dfc20b99abed5db994406c2b9ab94c73aaa419d" integrity sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A== dependencies: babel-plugin-jest-hoist "^28.1.3" babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== dependencies: tweetnacl "^0.14.3" brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" brace-expansion@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" braces@^3.0.1: version "3.0.2" resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" browserslist@^4.16.8, browserslist@^4.21.3: version "4.21.3" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz#5df277694eb3c48bc5c4b05af3e8b7e09c5a6d1a" integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ== dependencies: caniuse-lite "^1.0.30001370" electron-to-chromium "^1.4.202" node-releases "^2.0.6" update-browserslist-db "^1.0.5" browserslist@^4.20.2: version "4.21.2" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.2.tgz#59a400757465535954946a400b841ed37e2b4ecf" integrity sha512-MonuOgAtUB46uP5CezYbRaYKBNt2LxP0yX+Pmj4LkcDFGkn9Cbpi83d9sCjwQDErXsIJSzY5oKGDbgOlF/LPAA== dependencies: caniuse-lite "^1.0.30001366" electron-to-chromium "^1.4.188" node-releases "^2.0.6" update-browserslist-db "^1.0.4" bs-logger@0.x: version "0.2.6" resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== dependencies: fast-json-stable-stringify "2.x" bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== dependencies: node-int64 "^0.4.0" buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== callsites@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase-keys@^6.2.2: version "6.2.2" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== dependencies: camelcase "^5.3.1" map-obj "^4.0.0" quick-lru "^4.0.1" camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== camelcase@^6.2.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001304, caniuse-lite@^1.0.30001370, caniuse-lite@^1.0.30001380: version "1.0.30001380" resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001380.tgz#6f2427ad8ebee1b400a38ca3560515756ba352bb" integrity sha512-OO+pPubxx16lkI7TVrbFpde8XHz66SMwstl1YWpg6uMGw56XnhYVwtPIjvX4kYpzwMwQKr4DDce394E03dQPGg== caniuse-lite@^1.0.30001366: version "1.0.30001367" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001367.tgz#2b97fe472e8fa29c78c5970615d7cd2ee414108a" integrity sha512-XDgbeOHfifWV3GEES2B8rtsrADx4Jf+juKX2SICJcaUhjYBO3bR96kvEIHa15VU6ohtOhBZuPGGYGbXMRn0NCw== caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" supports-color "^5.3.0" chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" char-regex@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== chardet@^0.7.0: version "0.7.0" resolved "https://registry.npmmirror.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== ci-info@^3.2.0: version "3.3.2" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.2.tgz#6d2967ffa407466481c6c90b6e16b3098f080128" integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg== cjs-module-lexer@^1.0.0: version "1.2.2" resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" cli-truncate@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== dependencies: slice-ansi "^3.0.0" string-width "^4.2.0" cli-truncate@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== dependencies: slice-ansi "^5.0.0" string-width "^5.0.0" cli-width@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== cliui@^6.0.0: version "6.0.0" resolved "https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== dependencies: string-width "^4.2.0" strip-ansi "^6.0.0" wrap-ansi "^6.2.0" cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" strip-ansi "^6.0.0" wrap-ansi "^7.0.0" co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== collect-v8-coverage@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== colorette@^2.0.16: version "2.0.16" resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" commander@^2.18.0: version "2.20.3" resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@^8.3.0: version "8.3.0" resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== commitlint@^17.0.3: version "17.0.3" resolved "https://registry.yarnpkg.com/commitlint/-/commitlint-17.0.3.tgz#634bee1ae9f1301831299db0413c3739d16762fc" integrity sha512-/KbIyrd6nmrRvu5zj8KKrjoC4z5V6hBmYphHgCFu75kPjHODg1XTtGFgbnb0AdSGBHlGMzmDvykO7ETs8wBKFg== dependencies: "@commitlint/cli" "^17.0.3" "@commitlint/types" "^17.0.0" commondir@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= compare-func@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== dependencies: array-ify "^1.0.0" dot-prop "^5.1.0" concat-map@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= conventional-changelog-angular@^5.0.11: version "5.0.13" resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== dependencies: compare-func "^2.0.0" q "^1.5.1" conventional-changelog-conventionalcommits@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-5.0.0.tgz#41bdce54eb65a848a4a3ffdca93e92fa22b64a86" integrity sha512-lCDbA+ZqVFQGUj7h9QBKoIpLhl8iihkO0nCTyRNzuXtcd7ubODpYB04IFy31JloiJgG0Uovu8ot8oxRzn7Nwtw== dependencies: compare-func "^2.0.0" lodash "^4.17.15" q "^1.5.1" conventional-commits-parser@^3.2.2: version "3.2.4" resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972" integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== dependencies: JSONStream "^1.0.4" is-text-path "^1.0.1" lodash "^4.17.15" meow "^8.0.0" split2 "^3.0.0" through2 "^4.0.0" convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.8.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== dependencies: safe-buffer "~5.1.1" core-js@^3.16.2: version "3.24.1" resolved "https://registry.npmjs.org/core-js/-/core-js-3.24.1.tgz#cf7724d41724154010a6576b7b57d94c5d66e64f" integrity sha512-0QTBSYSUZ6Gq21utGzkfITDylE8jWC9Ne1D2MrhvlsZBI1x39OdDIVbzSqtgMndIy6BlHxBXpMGqzZmnztg2rg== core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== cosmiconfig-typescript-loader@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-2.0.2.tgz#7e7ce6064af041c910e1e43fb0fd9625cee56e93" integrity sha512-KmE+bMjWMXJbkWCeY4FJX/npHuZPNr9XF9q9CIQ/bpFwi1qHfCmSiKarrCcRa0LO4fWjk93pVoeRtJAkTGcYNw== dependencies: cosmiconfig "^7" ts-node "^10.8.1" cosmiconfig@^7, cosmiconfig@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== dependencies: "@types/parse-json" "^4.0.0" import-fresh "^3.2.1" parse-json "^5.0.0" path-type "^4.0.0" yaml "^1.10.0" coveralls@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.1.1.tgz#f5d4431d8b5ae69c5079c8f8ca00d64ac77cf081" integrity sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww== dependencies: js-yaml "^3.13.1" lcov-parse "^1.0.0" log-driver "^1.2.7" minimist "^1.2.5" request "^2.88.2" create-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" which "^2.0.1" dargs@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== dependencies: assert-plus "^1.0.0" debug@^4.1.0, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" debug@^4.1.1, debug@^4.3.2: version "4.3.3" resolved "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== dependencies: ms "2.1.2" decamelize-keys@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" integrity sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg== dependencies: decamelize "^1.1.0" map-obj "^1.0.0" decamelize@^1.1.0, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== deep-is@^0.1.3: version "0.1.4" resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== didyoumean@^1.2.1: version "1.2.2" resolved "https://registry.npmmirror.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== diff-sequences@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-28.1.1.tgz#9989dc731266dc2903457a70e996f3a041913ac6" integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== diff@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" doctrine@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" dot-prop@^5.1.0: version "5.3.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== dependencies: is-obj "^2.0.0" ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== dependencies: jsbn "~0.1.0" safer-buffer "^2.1.0" electron-to-chromium@^1.4.188: version "1.4.195" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.195.tgz#139b2d95a42a3f17df217589723a1deac71d1473" integrity sha512-vefjEh0sk871xNmR5whJf9TEngX+KTKS3hOHpjoMpauKkwlGwtMz1H8IaIjAT/GNnX0TbGwAdmVoXCAzXf+PPg== electron-to-chromium@^1.4.202: version "1.4.225" resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.225.tgz#3e27bdd157cbaf19768141f2e0f0f45071e52338" integrity sha512-ICHvGaCIQR3P88uK8aRtx8gmejbVJyC6bB4LEC3anzBrIzdzC7aiZHY4iFfXhN4st6I7lMO0x4sgBHf/7kBvRw== email-addresses@^3.0.1: version "3.1.0" resolved "https://registry.npmjs.org/email-addresses/-/email-addresses-3.1.0.tgz#cabf7e085cbdb63008a70319a74e6136188812fb" integrity sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg== emittery@^0.10.2: version "0.10.2" resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933" integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: version "9.2.2" resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== enquirer@^2.3.5, enquirer@^2.3.6: version "2.3.6" resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== dependencies: ansi-colors "^4.1.1" error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= escape-string-regexp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== eslint-plugin-compat@^4.0.2: version "4.0.2" resolved "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.0.2.tgz#b058627a7d25d352adf0ec16dca8fcf92d9c7af7" integrity sha512-xqvoO54CLTVaEYGMzhu35Wzwk/As7rCvz/2dqwnFiWi0OJccEtGIn+5qq3zqIu9nboXlpdBN579fZcItC73Ycg== dependencies: "@mdn/browser-compat-data" "^4.1.5" ast-metadata-inferer "^0.7.0" browserslist "^4.16.8" caniuse-lite "^1.0.30001304" core-js "^3.16.2" find-up "^5.0.0" lodash.memoize "4.1.2" semver "7.3.5" eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" estraverse "^4.1.1" eslint-scope@^7.1.0: version "7.1.0" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz#c1f6ea30ac583031f203d65c73e723b01298f153" integrity sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" eslint-utils@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== dependencies: eslint-visitor-keys "^2.0.0" eslint-visitor-keys@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== eslint-visitor-keys@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz#eee4acea891814cda67a7d8812d9647dd0179af2" integrity sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA== eslint-visitor-keys@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== eslint@^8.4.1: version "8.4.1" resolved "https://registry.npmjs.org/eslint/-/eslint-8.4.1.tgz#d6531bbf3e598dffd7c0c7d35ec52a0b30fdfa2d" integrity sha512-TxU/p7LB1KxQ6+7aztTnO7K0i+h0tDi81YRY9VzB6Id71kNz+fFYnf5HD5UOQmxkzcoa0TlVZf9dpMtUv0GpWg== 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" espree@^9.2.0: version "9.2.0" resolved "https://registry.npmjs.org/espree/-/espree-9.2.0.tgz#c50814e01611c2d0f8bd4daa83c369eabba80dbc" integrity sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg== dependencies: acorn "^8.6.0" acorn-jsx "^5.3.1" eslint-visitor-keys "^3.1.0" esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1: version "4.3.0" resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== estree-walker@^2.0.1: version "2.0.2" resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== esutils@^2.0.2: version "2.0.3" resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== execa@^5.0.0, execa@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== 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" exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== expect@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/expect/-/expect-28.1.3.tgz#90a7c1a124f1824133dd4533cce2d2bdcb6603ec" integrity sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g== dependencies: "@jest/expect-utils" "^28.1.3" jest-get-type "^28.0.2" jest-matcher-utils "^28.1.3" jest-message-util "^28.1.3" jest-util "^28.1.3" extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== external-editor@^3.0.3: version "3.1.0" resolved "https://registry.npmmirror.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: chardet "^0.7.0" iconv-lite "^0.4.24" tmp "^0.0.33" extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== extsprintf@^1.2.0: version "1.4.1" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^3.2.9: version "3.2.11" resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== 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" fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6: version "2.0.6" resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fastq@^1.6.0: version "1.13.0" resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== dependencies: reusify "^1.0.4" fb-watchman@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== dependencies: bser "2.1.1" figures@^3.0.0: version "3.2.0" resolved "https://registry.npmmirror.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" filename-reserved-regex@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" integrity sha1-q/c9+rc10EVECr/qLZHzieu/oik= filenamify@^4.3.0: version "4.3.0" resolved "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz#62391cb58f02b09971c9d4f9d63b3cf9aba03106" integrity sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg== dependencies: filename-reserved-regex "^2.0.0" strip-outer "^1.0.1" trim-repeated "^1.0.0" fill-range@^7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" find-cache-dir@^3.3.1, find-cache-dir@^3.3.2: version "3.3.2" resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== dependencies: commondir "^1.0.1" make-dir "^3.0.2" pkg-dir "^4.1.0" find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" path-exists "^4.0.0" find-up@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" path-exists "^4.0.0" flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: flatted "^3.1.0" rimraf "^3.0.2" flatted@^3.1.0: version "3.2.4" resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw== forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== dependencies: asynckit "^0.4.0" combined-stream "^1.0.6" mime-types "^2.1.12" fs-extra@^10.0.0: version "10.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" universalify "^2.0.0" fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== dependencies: graceful-fs "^4.2.0" jsonfile "^4.0.0" universalify "^0.1.0" fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^2.3.2, fsevents@~2.3.2: version "2.3.2" resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== function-bind@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== get-stream@^6.0.0: version "6.0.1" resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== dependencies: assert-plus "^1.0.0" gh-pages@^3.2.3: version "3.2.3" resolved "https://registry.npmjs.org/gh-pages/-/gh-pages-3.2.3.tgz#897e5f15e111f42af57d21d430b83e5cdf29472c" integrity sha512-jA1PbapQ1jqzacECfjUaO9gV8uBgU6XNMV0oXLtfCX3haGLe5Atq8BxlrADhbD6/UdG9j6tZLWAkAybndOXTJg== dependencies: async "^2.6.1" commander "^2.18.0" email-addresses "^3.0.1" filenamify "^4.3.0" find-cache-dir "^3.3.1" fs-extra "^8.1.0" globby "^6.1.0" git-raw-commits@^2.0.0: version "2.0.11" resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723" integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== dependencies: dargs "^7.0.0" lodash "^4.17.15" meow "^8.0.0" split2 "^3.0.0" through2 "^4.0.0" glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.1: version "6.0.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" glob@^7.0.3, glob@^7.1.3: version "7.2.0" resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 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" glob@^7.1.4: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" global-dirs@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" integrity sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg== dependencies: ini "^1.3.4" globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.6.0, globals@^13.9.0: version "13.12.0" resolved "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" integrity sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg== dependencies: type-fest "^0.20.2" globby@^11.1.0: version "11.1.0" resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" dir-glob "^3.0.1" fast-glob "^3.2.9" ignore "^5.2.0" merge2 "^1.4.1" slash "^3.0.0" globby@^6.1.0: version "6.1.0" resolved "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= dependencies: array-union "^1.0.1" glob "^7.0.3" object-assign "^4.0.1" pify "^2.0.0" pinkie-promise "^2.0.0" graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.8" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== graceful-fs@^4.2.9: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== har-validator@~5.1.3: version "5.1.5" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== dependencies: ajv "^6.12.3" har-schema "^2.0.0" hard-rejection@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" hosted-git-info@^2.1.4: version "2.8.9" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== hosted-git-info@^4.0.1: version "4.1.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== dependencies: lru-cache "^6.0.0" html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== dependencies: assert-plus "^1.0.0" jsprim "^1.2.2" sshpk "^1.7.0" human-signals@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== husky@^8.0.1: version "8.0.1" resolved "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz#511cb3e57de3e3190514ae49ed50f6bc3f50b3e9" integrity sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw== iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" ignore@^4.0.6: version "4.0.6" resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== ignore@^5.2.0: version "5.2.0" resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" import-local@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= indent-string@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== inflight@^1.0.4: version "1.0.6" resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" inherits@2, inherits@^2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== ini@^1.3.4: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== inquirer@^7.0.4: version "7.3.3" resolved "https://registry.npmmirror.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== dependencies: ansi-escapes "^4.2.1" chalk "^4.1.0" cli-cursor "^3.1.0" cli-width "^3.0.0" external-editor "^3.0.3" figures "^3.0.0" lodash "^4.17.19" mute-stream "0.0.8" run-async "^2.4.0" rxjs "^6.6.0" string-width "^4.1.0" strip-ansi "^6.0.0" through "^2.3.6" is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-core-module@^2.5.0, is-core-module@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== dependencies: has "^1.0.3" is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-fullwidth-code-point@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== is-generator-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-number@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-obj@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== is-stream@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== is-text-path@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== dependencies: text-extensions "^1.0.0" is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== isexe@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz#31d18bdd127f825dd02ea7bfdfd906f8ab840e9f" integrity sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A== dependencies: "@babel/core" "^7.12.3" "@babel/parser" "^7.14.7" "@istanbuljs/schema" "^0.1.2" istanbul-lib-coverage "^3.2.0" semver "^6.3.0" istanbul-lib-report@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== dependencies: istanbul-lib-coverage "^3.0.0" make-dir "^3.0.0" supports-color "^7.1.0" istanbul-lib-source-maps@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== dependencies: debug "^4.1.1" istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" istanbul-reports@^3.1.3: version "3.1.5" resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" jest-changed-files@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-28.1.3.tgz#d9aeee6792be3686c47cb988a8eaf82ff4238831" integrity sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA== dependencies: execa "^5.0.0" p-limit "^3.1.0" jest-circus@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-28.1.3.tgz#d14bd11cf8ee1a03d69902dc47b6bd4634ee00e4" integrity sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow== dependencies: "@jest/environment" "^28.1.3" "@jest/expect" "^28.1.3" "@jest/test-result" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" is-generator-fn "^2.0.0" jest-each "^28.1.3" jest-matcher-utils "^28.1.3" jest-message-util "^28.1.3" jest-runtime "^28.1.3" jest-snapshot "^28.1.3" jest-util "^28.1.3" p-limit "^3.1.0" pretty-format "^28.1.3" slash "^3.0.0" stack-utils "^2.0.3" jest-cli@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-28.1.3.tgz#558b33c577d06de55087b8448d373b9f654e46b2" integrity sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ== dependencies: "@jest/core" "^28.1.3" "@jest/test-result" "^28.1.3" "@jest/types" "^28.1.3" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.9" import-local "^3.0.2" jest-config "^28.1.3" jest-util "^28.1.3" jest-validate "^28.1.3" prompts "^2.0.1" yargs "^17.3.1" jest-config@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-28.1.3.tgz#e315e1f73df3cac31447eed8b8740a477392ec60" integrity sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ== dependencies: "@babel/core" "^7.11.6" "@jest/test-sequencer" "^28.1.3" "@jest/types" "^28.1.3" babel-jest "^28.1.3" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.3" graceful-fs "^4.2.9" jest-circus "^28.1.3" jest-environment-node "^28.1.3" jest-get-type "^28.0.2" jest-regex-util "^28.0.2" jest-resolve "^28.1.3" jest-runner "^28.1.3" jest-util "^28.1.3" jest-validate "^28.1.3" micromatch "^4.0.4" parse-json "^5.2.0" pretty-format "^28.1.3" slash "^3.0.0" strip-json-comments "^3.1.1" jest-diff@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.1.3.tgz#948a192d86f4e7a64c5264ad4da4877133d8792f" integrity sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw== dependencies: chalk "^4.0.0" diff-sequences "^28.1.1" jest-get-type "^28.0.2" pretty-format "^28.1.3" jest-docblock@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-28.1.1.tgz#6f515c3bf841516d82ecd57a62eed9204c2f42a8" integrity sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA== dependencies: detect-newline "^3.0.0" jest-each@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-28.1.3.tgz#bdd1516edbe2b1f3569cfdad9acd543040028f81" integrity sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g== dependencies: "@jest/types" "^28.1.3" chalk "^4.0.0" jest-get-type "^28.0.2" jest-util "^28.1.3" pretty-format "^28.1.3" jest-environment-node@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-28.1.3.tgz#7e74fe40eb645b9d56c0c4b70ca4357faa349be5" integrity sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A== dependencies: "@jest/environment" "^28.1.3" "@jest/fake-timers" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" jest-mock "^28.1.3" jest-util "^28.1.3" jest-get-type@^28.0.2: version "28.0.2" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203" integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== jest-haste-map@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-28.1.3.tgz#abd5451129a38d9841049644f34b034308944e2b" integrity sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA== dependencies: "@jest/types" "^28.1.3" "@types/graceful-fs" "^4.1.3" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.9" jest-regex-util "^28.0.2" jest-util "^28.1.3" jest-worker "^28.1.3" micromatch "^4.0.4" walker "^1.0.8" optionalDependencies: fsevents "^2.3.2" jest-leak-detector@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz#a6685d9b074be99e3adee816ce84fd30795e654d" integrity sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA== dependencies: jest-get-type "^28.0.2" pretty-format "^28.1.3" jest-matcher-utils@^28.0.0, jest-matcher-utils@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz#5a77f1c129dd5ba3b4d7fc20728806c78893146e" integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== dependencies: chalk "^4.0.0" jest-diff "^28.1.3" jest-get-type "^28.0.2" pretty-format "^28.1.3" jest-message-util@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.3.tgz#232def7f2e333f1eecc90649b5b94b0055e7c43d" integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== dependencies: "@babel/code-frame" "^7.12.13" "@jest/types" "^28.1.3" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" pretty-format "^28.1.3" slash "^3.0.0" stack-utils "^2.0.3" jest-mock@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-28.1.3.tgz#d4e9b1fc838bea595c77ab73672ebf513ab249da" integrity sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA== dependencies: "@jest/types" "^28.1.3" "@types/node" "*" jest-pnp-resolver@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== jest-regex-util@^28.0.2: version "28.0.2" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead" integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== jest-resolve-dependencies@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz#8c65d7583460df7275c6ea2791901fa975c1fe66" integrity sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA== dependencies: jest-regex-util "^28.0.2" jest-snapshot "^28.1.3" jest-resolve@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-28.1.3.tgz#cfb36100341ddbb061ec781426b3c31eb51aa0a8" integrity sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ== dependencies: chalk "^4.0.0" graceful-fs "^4.2.9" jest-haste-map "^28.1.3" jest-pnp-resolver "^1.2.2" jest-util "^28.1.3" jest-validate "^28.1.3" resolve "^1.20.0" resolve.exports "^1.1.0" slash "^3.0.0" jest-runner@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-28.1.3.tgz#5eee25febd730b4713a2cdfd76bdd5557840f9a1" integrity sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA== dependencies: "@jest/console" "^28.1.3" "@jest/environment" "^28.1.3" "@jest/test-result" "^28.1.3" "@jest/transform" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" chalk "^4.0.0" emittery "^0.10.2" graceful-fs "^4.2.9" jest-docblock "^28.1.1" jest-environment-node "^28.1.3" jest-haste-map "^28.1.3" jest-leak-detector "^28.1.3" jest-message-util "^28.1.3" jest-resolve "^28.1.3" jest-runtime "^28.1.3" jest-util "^28.1.3" jest-watcher "^28.1.3" jest-worker "^28.1.3" p-limit "^3.1.0" source-map-support "0.5.13" jest-runtime@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-28.1.3.tgz#a57643458235aa53e8ec7821949e728960d0605f" integrity sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw== dependencies: "@jest/environment" "^28.1.3" "@jest/fake-timers" "^28.1.3" "@jest/globals" "^28.1.3" "@jest/source-map" "^28.1.2" "@jest/test-result" "^28.1.3" "@jest/transform" "^28.1.3" "@jest/types" "^28.1.3" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" execa "^5.0.0" glob "^7.1.3" graceful-fs "^4.2.9" jest-haste-map "^28.1.3" jest-message-util "^28.1.3" jest-mock "^28.1.3" jest-regex-util "^28.0.2" jest-resolve "^28.1.3" jest-snapshot "^28.1.3" jest-util "^28.1.3" slash "^3.0.0" strip-bom "^4.0.0" jest-snapshot@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-28.1.3.tgz#17467b3ab8ddb81e2f605db05583d69388fc0668" integrity sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg== dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.3.3" "@jest/expect-utils" "^28.1.3" "@jest/transform" "^28.1.3" "@jest/types" "^28.1.3" "@types/babel__traverse" "^7.0.6" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" expect "^28.1.3" graceful-fs "^4.2.9" jest-diff "^28.1.3" jest-get-type "^28.0.2" jest-haste-map "^28.1.3" jest-matcher-utils "^28.1.3" jest-message-util "^28.1.3" jest-util "^28.1.3" natural-compare "^1.4.0" pretty-format "^28.1.3" semver "^7.3.5" jest-util@^28.0.0, jest-util@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== dependencies: "@jest/types" "^28.1.3" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" jest-validate@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-28.1.3.tgz#e322267fd5e7c64cea4629612c357bbda96229df" integrity sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA== dependencies: "@jest/types" "^28.1.3" camelcase "^6.2.0" chalk "^4.0.0" jest-get-type "^28.0.2" leven "^3.1.0" pretty-format "^28.1.3" jest-watcher@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-28.1.3.tgz#c6023a59ba2255e3b4c57179fc94164b3e73abd4" integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== dependencies: "@jest/test-result" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.10.2" jest-util "^28.1.3" string-length "^4.0.1" jest-worker@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== dependencies: "@types/node" "*" merge-stream "^2.0.0" supports-color "^8.0.0" jest@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest/-/jest-28.1.3.tgz#e9c6a7eecdebe3548ca2b18894a50f45b36dfc6b" integrity sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA== dependencies: "@jest/core" "^28.1.3" "@jest/types" "^28.1.3" import-local "^3.0.2" jest-cli "^28.1.3" js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.0" js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== json-fixer@^1.5.1: version "1.6.13" resolved "https://registry.npmmirror.com/json-fixer/-/json-fixer-1.6.13.tgz#27d2f0e837aec54afbc9ec1cd8c1dd965bf534c9" integrity sha512-DKQ71M+0uwAG3QsUkeVgh6XREw/OkpnTfHfM+sdmxRjHvYZ8PlcMVF4ibsHQ1ckR63NROs68qUr1I0u6yPVePQ== dependencies: "@babel/runtime" "^7.14.6" chalk "^4.1.2" pegjs "^0.10.0" json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema-traverse@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json-schema@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== json5@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== jsonc-parser@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz#73b8f0e5c940b83d03476bc2e51a20ef0932615d" integrity sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg== jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= optionalDependencies: graceful-fs "^4.1.6" jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" optionalDependencies: graceful-fs "^4.1.6" jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== jsprim@^1.2.2: version "1.4.2" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== dependencies: assert-plus "1.0.0" extsprintf "1.3.0" json-schema "0.4.0" verror "1.10.0" kind-of@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== lcov-parse@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0" integrity sha512-aprLII/vPzuQvYZnDRU78Fns9I2Ag3gi4Ipga/hxnVMCZC8DnR2nI7XBqrPoywGfxqIx/DgarGvDJZAD3YBTgQ== leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== levn@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" type-check "~0.4.0" lilconfig@2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082" integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA== lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== lint-staged@^12.1.0: version "12.1.0" resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-12.1.0.tgz#b06815793e28b856cbfd17be599c533388d960d5" integrity sha512-h+fhsdYbt1fhItNj63UmpY5mkeF6z2YjXHtY0oQ4KdQc2kUvaPXOkWk0W9MhUlMdfb1G2SwYPhpcF17JIJDNWg== dependencies: cli-truncate "^3.1.0" colorette "^2.0.16" commander "^8.3.0" debug "^4.3.2" enquirer "^2.3.6" execa "^5.1.1" lilconfig "2.0.4" listr2 "^3.13.3" micromatch "^4.0.4" normalize-path "^3.0.0" object-inspect "^1.11.0" string-argv "^0.3.1" supports-color "^9.0.2" yaml "^1.10.2" listr2@^3.13.3: version "3.13.5" resolved "https://registry.npmjs.org/listr2/-/listr2-3.13.5.tgz#105a813f2eb2329c4aae27373a281d610ee4985f" integrity sha512-3n8heFQDSk+NcwBn3CgxEibZGaRzx+pC64n3YjpMD1qguV4nWus3Al+Oo3KooqFKTQEJ1v7MmnbnyyNspgx3NA== dependencies: cli-truncate "^2.1.0" colorette "^2.0.16" log-update "^4.0.0" p-map "^4.0.0" rfdc "^1.3.0" rxjs "^7.4.0" through "^2.3.8" wrap-ansi "^7.0.0" locate-path@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" lodash.memoize@4.1.2, lodash.memoize@4.x: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash@^4.11.2, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19: version "4.17.21" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log-driver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== log-update@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== dependencies: ansi-escapes "^4.3.0" cli-cursor "^3.1.0" slice-ansi "^4.0.0" wrap-ansi "^6.2.0" lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" lunr@^2.3.9: version "2.3.9" resolved "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== make-dir@^3.0.0, make-dir@^3.0.2: version "3.1.0" resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" make-error@1.x, make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== makeerror@1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== dependencies: tmpl "1.0.5" map-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== map-obj@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== marked@^4.0.18: version "4.0.18" resolved "https://registry.npmjs.org/marked/-/marked-4.0.18.tgz#cd0ac54b2e5610cfb90e8fd46ccaa8292c9ed569" integrity sha512-wbLDJ7Zh0sqA0Vdg6aqlbT+yPxqLblpAZh1mK2+AO2twQkPywvvqQNfEPVwSSRjZ7dZcdeVBIAgiO7MMp3Dszw== meow@^8.0.0: version "8.1.2" resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== dependencies: "@types/minimist" "^1.2.0" camelcase-keys "^6.2.2" decamelize-keys "^1.1.0" hard-rejection "^2.1.0" minimist-options "4.1.0" normalize-package-data "^3.0.0" read-pkg-up "^7.0.1" redent "^3.0.0" trim-newlines "^3.0.0" type-fest "^0.18.0" yargs-parser "^20.2.3" merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^4.0.4: version "4.0.4" resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== dependencies: braces "^3.0.1" picomatch "^2.2.3" mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12, mime-types@~2.1.19: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== min-indent@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== minimatch@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" minimatch@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== dependencies: brace-expansion "^2.0.1" minimist-options@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== dependencies: arrify "^1.0.1" is-plain-obj "^1.1.0" kind-of "^6.0.3" minimist@^1.2.5, minimist@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== ms@2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== mute-stream@0.0.8: version "0.0.8" resolved "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= node-fetch@^2.6.0: version "2.6.7" resolved "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: whatwg-url "^5.0.0" node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== node-releases@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" resolve "^1.10.0" semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" normalize-package-data@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== dependencies: hosted-git-info "^4.0.1" is-core-module "^2.5.0" semver "^7.3.4" validate-npm-package-license "^3.0.1" normalize-path@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== object-assign@^4.0.1: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= object-inspect@^1.11.0: version "1.11.1" resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz#d4bd7d7de54b9a75599f59a00bd698c1f1c6549b" integrity sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA== once@^1.3.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" optionator@^0.9.1: version "0.9.1" resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 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" os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== p-limit@^2.2.0: version "2.3.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-locate@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" p-map@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: aggregate-error "^3.0.0" p-try@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== parent-module@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" error-ex "^1.3.1" json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" path-exists@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-type@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== pegjs@^0.10.0: version "0.10.0" resolved "https://registry.npmmirror.com/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd" integrity sha512-qI5+oFNEGi3L5HAxDwN2LA4Gg7irF70Zs25edhjld9QemOgp0CbvMtbFcMvFtEo1OityPrcCzkQFB8JP/hxgow== performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== picomatch@^2.2.2, picomatch@^2.2.3: version "2.3.0" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== pify@^2.0.0: version "2.3.0" resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= pify@^5.0.0: version "5.0.0" resolved "https://registry.npmmirror.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= pirates@^4.0.4: version "4.0.5" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== pretty-format@^28.0.0, pretty-format@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== dependencies: "@jest/schemas" "^28.1.3" ansi-regex "^5.0.1" ansi-styles "^5.0.0" react-is "^18.0.0" progress@^2.0.0: version "2.0.3" resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== prompts@^2.0.1: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== dependencies: kleur "^3.0.3" sisteransi "^1.0.5" psl@^1.1.28: version "1.9.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== qs@~6.5.2: version "6.5.3" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== quick-lru@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== react-is@^18.0.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== read-pkg-up@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== dependencies: find-up "^4.1.0" read-pkg "^5.2.0" type-fest "^0.8.1" read-pkg@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== dependencies: "@types/normalize-package-data" "^2.4.0" normalize-package-data "^2.5.0" parse-json "^5.0.0" type-fest "^0.6.0" readable-stream@3, readable-stream@^3.0.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" util-deprecate "^1.0.1" redent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== dependencies: indent-string "^4.0.0" strip-indent "^3.0.0" regenerator-runtime@^0.13.4: version "0.13.9" resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== regexpp@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== dependencies: aws-sign2 "~0.7.0" aws4 "^1.8.0" caseless "~0.12.0" combined-stream "~1.0.6" extend "~3.0.2" forever-agent "~0.6.1" form-data "~2.3.2" har-validator "~5.1.3" http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" mime-types "~2.1.19" oauth-sign "~0.9.0" performance-now "^2.1.0" qs "~6.5.2" safe-buffer "^5.1.2" tough-cookie "~2.5.0" tunnel-agent "^0.6.0" uuid "^3.3.2" require-directory@^2.1.1: version "2.1.1" resolved "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== dependencies: resolve-from "^5.0.0" resolve-from@5.0.0, resolve-from@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-global@1.0.0, resolve-global@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255" integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw== dependencies: global-dirs "^0.1.1" resolve.exports@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== resolve@>=1.9.0, resolve@^1.10.0, resolve@^1.20.0: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: is-core-module "^2.9.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" signal-exit "^3.0.2" reusify@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rfdc@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" rollup-plugin-typescript2@^0.33.0: version "0.33.0" resolved "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.33.0.tgz#2bb943f83e9d3a4c61a19aed5bee5bcff28d16a3" integrity sha512-7ZXoZeX93kNb4/ICzOi2AlperVV6cAsNz8THqrbz+KNvpn47P2F/nFdK/BGhkoOsOwuYDuY57vccdZZrcd8/dA== dependencies: "@rollup/pluginutils" "^4.1.2" find-cache-dir "^3.3.2" fs-extra "^10.0.0" tslib "^2.4.0" rollup@^2.78.1: version "2.78.1" resolved "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz#52fe3934d9c83cb4f7c4cb5fb75d88591be8648f" integrity sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg== optionalDependencies: fsevents "~2.3.2" run-async@^2.4.0: version "2.4.1" resolved "https://registry.npmmirror.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" rxjs@^6.6.0: version "6.6.7" resolved "https://registry.npmmirror.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== dependencies: tslib "^1.9.0" rxjs@^7.4.0: version "7.4.0" resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz#a12a44d7eebf016f5ff2441b87f28c9a51cebc68" integrity sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w== dependencies: tslib "~2.1.0" safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== "semver@2 || 3 || 4 || 5": version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== semver@7.3.5, semver@^7.2.1, semver@^7.3.5: version "7.3.5" resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" semver@7.3.7, semver@7.x, semver@^7.3.4, semver@^7.3.7: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== dependencies: lru-cache "^6.0.0" semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shiki@^0.10.1: version "0.10.1" resolved "https://registry.npmjs.org/shiki/-/shiki-0.10.1.tgz#6f9a16205a823b56c072d0f1a0bcd0f2646bef14" integrity sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng== dependencies: jsonc-parser "^3.0.0" vscode-oniguruma "^1.6.1" vscode-textmate "5.2.0" signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.6" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== slash@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== slice-ansi@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== dependencies: ansi-styles "^4.0.0" astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" slice-ansi@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: ansi-styles "^4.0.0" astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" slice-ansi@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== dependencies: ansi-styles "^6.0.0" is-fullwidth-code-point "^4.0.0" source-map-support@0.5.13: version "0.5.13" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== spdx-correct@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: version "3.0.11" resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== split2@^3.0.0: version "3.2.2" resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== dependencies: readable-stream "^3.0.0" sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== sshpk@^1.7.0: version "1.17.0" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" bcrypt-pbkdf "^1.0.0" dashdash "^1.12.0" ecc-jsbn "~0.1.1" getpass "^0.1.1" jsbn "~0.1.0" safer-buffer "^2.0.2" tweetnacl "~0.14.0" stack-utils@^2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== dependencies: escape-string-regexp "^2.0.0" string-argv@^0.3.1: version "0.3.1" resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== string-length@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== dependencies: char-regex "^1.0.2" strip-ansi "^6.0.0" string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" string-width@^5.0.0: version "5.0.1" resolved "https://registry.npmjs.org/string-width/-/string-width-5.0.1.tgz#0d8158335a6cfd8eb95da9b6b262ce314a036ffd" integrity sha512-5ohWO/M4//8lErlUUtrFy3b11GtNOuMOU0ysKCDXFcfXuuvUXu95akgj/i8ofmaGdN0hCqyl6uu9i8dS/mQp5g== dependencies: emoji-regex "^9.2.2" is-fullwidth-code-point "^4.0.0" strip-ansi "^7.0.1" string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== dependencies: ansi-regex "^6.0.1" strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-bom@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-indent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== dependencies: min-indent "^1.0.0" strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== strip-outer@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== dependencies: escape-string-regexp "^1.0.2" supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-color@^8.0.0: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" supports-color@^9.0.2: version "9.2.1" resolved "https://registry.npmjs.org/supports-color/-/supports-color-9.2.1.tgz#599dc9d45acf74c6176e0d880bab1d7d718fe891" integrity sha512-Obv7ycoCTG51N7y175StI9BlAXrmgZrFhZOb0/PyjHBher/NmsdBgbbQ1Inhq+gIhz6+7Gb+jWF2Vqi7Mf1xnQ== supports-hyperlinks@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== dependencies: has-flag "^4.0.0" supports-color "^7.0.0" supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== terminal-link@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== dependencies: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== dependencies: "@istanbuljs/schema" "^0.1.2" glob "^7.1.4" minimatch "^3.0.4" text-extensions@^1.0.0: version "1.9.0" resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== text-table@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= through2@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== dependencies: readable-stream "3" "through@>=2.2.7 <3", through@^2.3.6, through@^2.3.8: version "2.3.8" resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= tmp@^0.0.33: version "0.0.33" resolved "https://registry.npmmirror.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== dependencies: psl "^1.1.28" punycode "^2.1.1" tr46@~0.0.3: version "0.0.3" resolved "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== trim-newlines@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== trim-repeated@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" integrity sha1-42RqLqTokTEr9+rObPsFOAvAHCE= dependencies: escape-string-regexp "^1.0.2" ts-jest@^28.0.7: version "28.0.7" resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-28.0.7.tgz#e18757a9e44693da9980a79127e5df5a98b37ac6" integrity sha512-wWXCSmTwBVmdvWrOpYhal79bDpioDy4rTT+0vyUnE3ZzM7LOAAGG9NXwzkEL/a516rQEgnMmS/WKP9jBPCVJyA== dependencies: bs-logger "0.x" fast-json-stable-stringify "2.x" jest-util "^28.0.0" json5 "^2.2.1" lodash.memoize "4.x" make-error "1.x" semver "7.x" yargs-parser "^21.0.1" ts-node@^10.8.1, ts-node@^10.9.1: version "10.9.1" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" "@tsconfig/node12" "^1.0.7" "@tsconfig/node14" "^1.0.0" "@tsconfig/node16" "^1.0.2" acorn "^8.4.1" acorn-walk "^8.1.1" arg "^4.1.0" create-require "^1.1.0" diff "^4.0.1" make-error "^1.1.1" v8-compile-cache-lib "^3.0.1" yn "3.1.1" ts-transform-paths@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/ts-transform-paths/-/ts-transform-paths-2.0.3.tgz#8d9cc0e7b503e36c9fe44b5019c2cd59950c43de" integrity sha512-eMUcIe/CCLUl90j9xqyj0RXC0t7h2E/ETbGBG3E8xFLyIMD9kTixUfZM78K1sHu0OBTFZTo6J7aUOafB8Mx+Dg== tsconfig-paths@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.0.0.tgz#1082f5d99fd127b72397eef4809e4dd06d229b64" integrity sha512-SLBg2GBKlR6bVtMgJJlud/o3waplKtL7skmLkExomIiaAtLGtVsoXIqP3SYdjbcH9lq/KVv7pMZeCBpLYOit6Q== dependencies: json5 "^2.2.1" minimist "^1.2.6" strip-bom "^3.0.0" tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.4.0: version "2.4.0" resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== tslib@~2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== tsutils@^3.21.0: version "3.21.0" resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" ttypescript@^1.5.13: version "1.5.13" resolved "https://registry.yarnpkg.com/ttypescript/-/ttypescript-1.5.13.tgz#c3bcb760599fe49157d30c5d5895a0023cbb7f30" integrity sha512-KT/RBfGGlVJFqEI8cVvI3nMsmYcFvPSZh8bU0qX+pAwbi7/ABmYkzn7l/K8skw0xmYjVCoyaV6WLsBQxdadybQ== dependencies: resolve ">=1.9.0" tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" type-detect@4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== type-fest@^0.18.0: version "0.18.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== type-fest@^0.20.2: version "0.20.2" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== type-fest@^0.21.3: version "0.21.3" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-fest@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== typedoc-plugin-missing-exports@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/typedoc-plugin-missing-exports/-/typedoc-plugin-missing-exports-1.0.0.tgz#7212a2cfaba7b48264df4b4110f3a5684b5c49a1" integrity sha512-7s6znXnuAj1eD9KYPyzVzR1lBF5nwAY8IKccP5sdoO9crG4lpd16RoFpLsh2PccJM+I2NASpr0+/NMka6ThwVA== typedoc@^0.23.10: version "0.23.10" resolved "https://registry.npmjs.org/typedoc/-/typedoc-0.23.10.tgz#285d595a5f2e35ccdf6f38eba4dfe951d5bff461" integrity sha512-03EUiu/ZuScUBMnY6p0lY+HTH8SwhzvRE3gImoemdPDWXPXlks83UGTx++lyquWeB1MTwm9D9Ca8RIjkK3AFfQ== dependencies: lunr "^2.3.9" marked "^4.0.18" minimatch "^5.1.0" shiki "^0.10.1" typescript@^4.6.4, typescript@^4.7.4: version "4.7.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== uglify-js@^3.14.5: version "3.14.5" resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz#cdabb7d4954231d80cb4a927654c4655e51f4859" integrity sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ== universalify@^0.1.0: version "0.1.2" resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== universalify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== update-browserslist-db@^1.0.4, update-browserslist-db@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== dependencies: escalade "^3.1.1" picocolors "^1.0.0" uri-js@^4.2.2: version "4.4.1" resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" util-deprecate@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== v8-compile-cache-lib@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== v8-compile-cache@^2.0.3: version "2.3.0" resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== v8-to-istanbul@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4" integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== dependencies: "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" extsprintf "^1.2.0" vscode-oniguruma@^1.6.1: version "1.6.2" resolved "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.2.tgz#aeb9771a2f1dbfc9083c8a7fdd9cccaa3f386607" integrity sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA== vscode-textmate@5.2.0: version "5.2.0" resolved "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e" integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ== walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== dependencies: makeerror "1.0.12" webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" which-module@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== which@^2.0.1: version "2.0.2" resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" word-wrap@^1.2.3: version "1.2.3" resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" strip-ansi "^6.0.0" wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" strip-ansi "^6.0.0" wrappy@1: version "1.0.2" resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= write-file-atomic@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f" integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== dependencies: imurmurhash "^0.1.4" signal-exit "^3.0.7" y18n@^4.0.0: version "4.0.3" resolved "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^1.10.0, yaml@^1.10.2: version "1.10.2" resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yargs-parser@^18.1.2: version "18.1.3" resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" yargs-parser@^20.2.3: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== yargs-parser@^21.0.0, yargs-parser@^21.0.1: version "21.0.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== yargs@^15.0.1: version "15.4.1" resolved "https://registry.npmmirror.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== dependencies: cliui "^6.0.0" decamelize "^1.2.0" find-up "^4.1.0" get-caller-file "^2.0.1" require-directory "^2.1.1" require-main-filename "^2.0.0" set-blocking "^2.0.0" string-width "^4.2.0" which-module "^2.0.0" y18n "^4.0.0" yargs-parser "^18.1.2" yargs@^17.0.0, yargs@^17.3.1: version "17.5.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== dependencies: cliui "^7.0.2" escalade "^3.1.1" get-caller-file "^2.0.5" require-directory "^2.1.1" string-width "^4.2.3" y18n "^5.0.5" yargs-parser "^21.0.0" yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==