diff --git a/.cspell.json b/.cspell.json index 9ed86f948..0b8165155 100644 --- a/.cspell.json +++ b/.cspell.json @@ -25,9 +25,11 @@ "micromark", "milestoned", "Numberish", + "OPENAI", "orgname", "pavlovcik", "permisson", + "Postgrest", "prereleased", "probot", "Probot", @@ -42,6 +44,7 @@ "Supabase", "SUPABASE", "svgs", + "tiktoken", "timelabel", "TURL", "typebox", @@ -49,6 +52,7 @@ "ubiquibot", "unarchived", "Unassigning", + "upserted", "Upserting", "URLSAFE", "vitalik", diff --git a/.env.example b/.env.example index 819c46da0..c9098afa3 100644 --- a/.env.example +++ b/.env.example @@ -7,17 +7,7 @@ WEBHOOK_SECRET= SUPABASE_URL= SUPABASE_KEY= -AUTO_PAY_MODE= -ANALYTICS_MODE= - -# Use `trace` to get verbose logging or `info` to show less +# `fatal` `error` `info` `verbose` `debug` LOG_LEVEL=debug -LOGDNA_INGESTION_KEY= -OPENAI_API_HOST=https://api.openai.com OPENAI_API_KEY= -CHATGPT_USER_PROMPT_FOR_IMPORTANT_WORDS="I need your help to find important words (e.g. unique adjectives) from github issue below and I want to parse them easily so please separate them using #(No other contexts needed). Please separate the words by # so I can parse them easily. Please answer simply as I only need the important words. Here is the issue content.\n" -CHATGPT_USER_PROMPT_FOR_MEASURE_SIMILARITY='I have two github issues and I need to measure the possibility of the 2 issues are the same content (No other contents needed and give me only the number in %).\n Give me in number format and add % after the number.\nDo not tell other things since I only need the number (e.g. 85%). Here are two issues:\n 1. "%first%"\n2. "%second%"' -SIMILARITY_THRESHOLD=80 -MEASURE_SIMILARITY_AI_TEMPERATURE=0 -IMPORTANT_WORDS_AI_TEMPERATURE=0 diff --git a/.eslintrc b/.eslintrc index 5ee71efb0..e93d19143 100644 --- a/.eslintrc +++ b/.eslintrc @@ -7,6 +7,50 @@ "plugins": ["@typescript-eslint"], "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"], "rules": { - "@typescript-eslint/no-floating-promises": "error" + "arrow-body-style": ["error", "as-needed"], // Allow single-line arrow functions without braces + "prefer-arrow-callback": ["error", { "allowNamedFunctions": false }], // Allow arrow functions for callbacks + "func-style": ["error", "declaration", { "allowArrowFunctions": false }], // Enforce function declarations and named functions + // ... other rules ... + + "@typescript-eslint/no-floating-promises": "error", + "@typescript-eslint/naming-convention": [ + "error", + { "selector": "typeLike", "format": ["PascalCase"] }, + { "selector": "variableLike", "format": ["camelCase"] }, + { "selector": "memberLike", "modifiers": ["private"], "format": ["camelCase"], "leadingUnderscore": "require" }, + { + "selector": "variable", + "types": ["boolean"], + "format": ["PascalCase"], + "prefix": ["is", "should", "has", "can", "did", "will", "does"] + }, + { + "selector": "variable", + "format": ["camelCase", "UPPER_CASE"], + "leadingUnderscore": "allow", + "trailingUnderscore": "allow" + }, + { "selector": "typeParameter", "format": ["PascalCase"], "prefix": ["T"] }, + { "selector": "interface", "format": ["PascalCase"], "custom": { "regex": "^I[A-Z]", "match": false } }, + { "selector": ["function", "variable"], "format": ["camelCase"] }, + { "selector": "variable", "modifiers": ["destructured"], "format": null }, + { "selector": "variable", "format": ["camelCase"], "leadingUnderscore": "allow", "trailingUnderscore": "allow" }, + + { + "selector": "parameter", + "format": ["camelCase"], + "leadingUnderscore": "allow", // This allows the use of a leading underscore + "trailingUnderscore": "allow" // This allows the use of a trailing underscore + }, + { + "selector": "parameter", + "format": null, + "filter": { + // This allows parameters to be named as just an underscore + "regex": "^_$", + "match": true + } + } + ] } } diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9bf76b0d0..a78595890 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -6,14 +6,21 @@ on: jobs: build: runs-on: ubuntu-latest + steps: - name: Checkout repository uses: actions/checkout@v3 + - name: Enable Corepack and Install Correct Yarn Version + run: | + corepack enable + yarn set version 4.0.2 + - name: Setup Node uses: actions/setup-node@v3 with: - node-version: "18.16.0" + node-version: "20.10.0" + cache: "yarn" - name: Install run: yarn install @@ -22,7 +29,7 @@ jobs: run: yarn build - name: Lint - run: yarn lint + run: yarn format run-migration: runs-on: ubuntu-latest diff --git a/.github/workflows/conventional-commits.yml b/.github/workflows/conventional-commits.yml index 2547809e6..6482cd5e2 100644 --- a/.github/workflows/conventional-commits.yml +++ b/.github/workflows/conventional-commits.yml @@ -11,4 +11,4 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: ubiquity/action-conventional-commits@v1.1.2 + - uses: ubiquity/action-conventional-commits@master diff --git a/.github/workflows/deploy-logger-page.yml b/.github/workflows/deploy-logger-page.yml deleted file mode 100644 index d827c708f..000000000 --- a/.github/workflows/deploy-logger-page.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: Deploy Log Web App to Cloudflare Worker - -on: - workflow_run: - workflows: ["Conventional Commits"] - types: - - completed - -jobs: - publish: - runs-on: ubuntu-latest - permissions: - contents: read - deployments: write - name: Deploy to Cloudflare Worker - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Setup Node - uses: actions/setup-node@v3 - with: - node-version: "20.3.0" - - - name: Build TypeScript - run: cd ./log-app && npm install && npm run build - - - name: Publish to Cloudflare Pages - uses: cloudflare/pages-action@v1 - with: - apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} - accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} - projectName: ${{ secrets.CLOUDFLARE_PROJECT_NAME }} - directory: ${{ secrets.LOGGER_WEB_APP_DIRECTORY }} - # Enable Wrangler v3 - wranglerVersion: "3" diff --git a/.github/workflows/e2e-test.yml b/.github/workflows/e2e-test.yml new file mode 100644 index 000000000..c7ce743b6 --- /dev/null +++ b/.github/workflows/e2e-test.yml @@ -0,0 +1,52 @@ +name: Run E2E Tests + +on: + - workflow_dispatch + - push + +jobs: + e2e-test: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version: "18.16.0" + + - name: Install + run: yarn install + + - name: Build + run: yarn build + + - name: Test + env: + + APP_ID: ${{ secrets.APP_ID }} + # CHATGPT_USER_PROMPT_FOR_IMPORTANT_WORDS: + # CHATGPT_USER_PROMPT_FOR_MEASURE_SIMILARITY: + DISQUALIFY_TIME: "7 days" + FOLLOW_UP_TIME: "4 days" + # IMPORTANT_WORDS_AI_TEMPERATURE: + LOG_ENVIRONMENT: "production" + # LOG_LEVEL: + # MEASURE_SIMILARITY_AI_TEMPERATURE: + # OPENAI_API_HOST: + # OPENAI_API_KEY: + PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }} + # SIMILARITY_THRESHOLD: + SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }} + SUPABASE_URL: ${{ secrets.SUPABASE_URL }} + TEST_ADMIN_PAT: ${{ secrets.TEST_ADMIN_PAT }} + TEST_ORGANIZATION_NAME: ${{ secrets.TEST_ORGANIZATION_NAME }} + TEST_OUTSIDE_COLLABORATOR_PAT: ${{ secrets.TEST_OUTSIDE_COLLABORATOR_PAT }} + TEST_REPOSITORY_NAME: ${{ secrets.TEST_REPOSITORY_NAME }} + WEBHOOK_PROXY_URL: ${{ secrets.WEBHOOK_PROXY_URL }} + WEBHOOK_SECRET: ${{ secrets.WEBHOOK_SECRET }} + X25519_PRIVATE_KEY: "QCDb30UHUkwJAGhLWC-R2N0PiEbd4vQY6qH2Wloybyo" + + run: "yarn test" diff --git a/.github/workflows/kebab-case.yml b/.github/workflows/kebab-case.yml index 892480a87..e0df26ad1 100644 --- a/.github/workflows/kebab-case.yml +++ b/.github/workflows/kebab-case.yml @@ -20,11 +20,14 @@ jobs: "^\.\/dist" "^\.\/build" "^\.\/vendor" + "^\.\/test" "^\.\/\.next" + "^\.\/tests" "\.sql$" "\.md$" - "\.d.ts$" - "^\.\/\log-app" + "\.d\.ts$" + "\.gitignore$" # Ignore .gitignore files + "\.test\.ts$" # Ignore .test.ts files ) while read -r file; do basefile=$(basename "$file") diff --git a/.github/workflows/qa-automation.yml b/.github/workflows/qa-automation.yml deleted file mode 100644 index 2b8aafa53..000000000 --- a/.github/workflows/qa-automation.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: Automate QA - -on: - pull_request_target: - types: - - review_requested - branches: [development, main] - -jobs: - add-to-project: - env: - ADD_TO_PROJECT_PAT: ${{ secrets.ADD_TO_PROJECT_PAT }} - name: Add issue to project - runs-on: ubuntu-latest - permissions: - contents: read - - steps: - - name: Add PR to QA project - if: contains(github.event.pull_request.requested_reviewers.*.login, 'Draeieg') - uses: actions/add-to-project@v0.5.0 - with: - project-url: https://github.com/orgs/ubiquity/projects/23 - github-token: ${{ env.ADD_TO_PROJECT_PAT }} - - - name: Create QA Issue - if: contains(github.event.pull_request.requested_reviewers.*.login, 'Draeieg') - uses: dacbd/create-issue-action@v1 - with: - token: ${{ env.ADD_TO_PROJECT_PAT }} - owner: ubiquibot - repo: staging - title: QA for ${{ github.event.pull_request.title }} - body: | - Testing pr ${{ github.event.pull_request.number }} diff --git a/.github/workflows/short-files.yml b/.github/workflows/short-files.yml new file mode 100644 index 000000000..3a9f33810 --- /dev/null +++ b/.github/workflows/short-files.yml @@ -0,0 +1,28 @@ +name: Check File Length + +on: + push: + pull_request: + +jobs: + check: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Check file length + run: | + IGNORE=("src/adapters/supabase/types/database.ts" "src/generatedFile2.ts") # Add more files to ignore as needed + find src -name "*.ts" -type f -exec bash -c ' + for ignore in "${IGNORE[@]}"; do + if [[ "$1" == "$ignore" ]]; then + echo "Ignoring $ignore" + exit 0 + fi + done + if [[ $(wc -l < "$1") -gt 512 ]]; then + echo "File $1 line length is greater than 512. This should be broken up into smaller files." + exit 1 + fi + ' bash {} \; \ No newline at end of file diff --git a/.github/workflows/update-config.yml b/.github/workflows/update-config.yml deleted file mode 100644 index c93d04bfb..000000000 --- a/.github/workflows/update-config.yml +++ /dev/null @@ -1,98 +0,0 @@ -name: Pull Request Action -permissions: write-all -on: - workflow_dispatch: - -env: - GH_TOKEN: ${{ secrets.ADD_TO_PROJECT_PAT }} - -jobs: - build: - runs-on: ubuntu-latest - steps: - - - name: Check out repository - uses: actions/checkout@v3 - - - name: Install jq and yq - run: | - sudo apt-get -y install jq - sudo wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/bin/yq - sudo chmod +x /usr/bin/yq - - - name: Get UbiquiBot Token - uses: tibdex/github-app-token@v1.7.0 - id: get_installation_token - with: - app_id: ${{ secrets.UBIQUITY_BOUNTY_BOT_APP_ID }} - private_key: ${{ secrets.UBIQUITY_BOUNTY_BOT_PRIVATE_KEY }} - - - name: Update Config Params and Create Pull Requests - run: | - urls=$(curl -sSL https://raw.githubusercontent.com/ubiquity/devpool-directory/development/projects.json | jq -r '.urls[]') - - for url in $urls - do - repoName=$(basename $url) - ownerName=$(echo $url | awk -F/ '{print $(NF-1)}') - - git clone $url $repoName - cd $repoName - defaultBranch=$(git branch --show-current) - - # make a branch to update config # - git branch update - git checkout update - - curl -sSL https://raw.githubusercontent.com/ubiquity/ubiquibot/development/ubiquibot-config-default.json > default.json - declare -A param_mapping=( - ["evm-network-id"]="network-id chain-id" - ["price-multiplier"]="base-multiplier" - #add more configs as needed - ) - - ### update configs ### - # Iterate over the mapping and perform updates using sed - for new_param in "${!param_mapping[@]}" - do - old_params="${param_mapping[$new_param]}" - for old_param in $old_params - do - # only update param if the old ones exist - exist_old_param=$(yq "has(\"$old_param\")" .github/ubiquibot-config.yml) - if $exist_old_param; then - yq ".$new_param = .$old_param | del(.$old_param)" .github/ubiquibot-config.yml > temp.yml - mv temp.yml .github/ubiquibot-config.yml - fi - done - # if new param still doesent exist add default from ubiquibot-config-default.json - exist_new_param=$(yq "has(\"$new_param\")" .github/ubiquibot-config.yml) - if ! $exist_new_param; then - echo adding - def_val=$(jq -r ".[\"$new_param\"]" ubiquibot-config-default.json) - yq ".$new_param=$def_val" .github/ubiquibot-config.yml > temp.yml - mv temp.yml .github/ubiquibot-config.yml - fi - done - - git config user.email "113181824+UbiquiBot[bot]@users.noreply.github.com" - git config user.name "UbiquiBot[bot]" - - git add .github/ubiquibot-config.yml - git commit -m "build: use latest ubiquibot config setup" - git remote set-url origin https://${{ secrets.ADD_TO_PROJECT_PAT }}@github.com/$ownerName/$repoName.git - git push -f origin update - - curl -L \ - -X POST \ - -H "Accept: application/vnd.github+json" \ - -H "Authorization: Bearer ${{ steps.get_installation_token.outputs.token }}"\ - -H "X-GitHub-Api-Version: 2022-11-28" \ - https://api.github.com/repos/$ownerName/$repoName/pulls \ - -d '{ - "title": "build: use latest ubiquibot config setup", - "base": "'"$defaultBranch"'", - "head": "update" - }' - cd .. - done \ No newline at end of file diff --git a/.gitignore b/.gitignore index fbd98adcd..cb57d7f65 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,6 @@ supabase/temp # Local Netlify folder .netlify bin -.yarn \ No newline at end of file +.yarn +yarn-error.log +tsconfig.tsbuildinfo diff --git a/.husky/commit-msg b/.husky/commit-msg index 4c49ae6ae..f2b882190 100755 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -1,4 +1,4 @@ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" -yarn commitlint --edit $1 +yarn commitlint --edit "$1" diff --git a/.husky/pre-commit b/.husky/pre-commit index 44d21ba2f..3bc4b0f16 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,5 @@ -#!/bin/sh +#!/usr/bin/env sh . "$(dirname "$0")/_/husky.sh" -yarn lint-staged --verbose \ No newline at end of file +# Run lint-staged first +yarn lint-staged --verbose diff --git a/.netlify/functions/webhooks/webhooks.ts b/.netlify/functions/webhooks/webhooks.ts index 38833ea9d..f914cd922 100755 --- a/.netlify/functions/webhooks/webhooks.ts +++ b/.netlify/functions/webhooks/webhooks.ts @@ -1,32 +1,23 @@ -import { createProbot } from "probot"; -import { Handler } from "@netlify/functions"; -import { EmitterWebhookEventName } from "@octokit/webhooks"; - -import app from "../../../src"; +import sourceMapSupport from "source-map-support"; +sourceMapSupport.install(); +import { EmitterWebhookEventName } from "@octokit/webhooks"; +import { Context, createProbot } from "probot"; +import app from "../../../src/main"; const probot = createProbot(); const loadingApp = probot.load(app); - -export const handler: Handler = async (event, context) => { +export async function handler(event, _context: Context) { try { await loadingApp; await probot.webhooks.verifyAndReceive({ id: event.headers["X-GitHub-Delivery"] || event.headers["x-github-delivery"] || "", name: (event.headers["X-GitHub-Event"] || event.headers["x-github-event"]) as EmitterWebhookEventName, signature: event.headers["X-Hub-Signature-256"] || event.headers["x-hub-signature-256"] || "", - payload: JSON.parse(event.body!), + payload: JSON.parse(event.body), }); - - return { - statusCode: 200, - body: '{"ok":true}', - }; + return { statusCode: 200 }; // Success response } catch (error) { console.error(error); - - return { - statusCode: error.status || 500, - error: "ooops", - }; + return { statusCode: error.status || 500 }; // Error response } -}; +} diff --git a/.prettierrc b/.prettierrc index 55071e6d4..f1555f79b 100644 --- a/.prettierrc +++ b/.prettierrc @@ -3,7 +3,7 @@ "tabWidth": 2, "semi": true, "singleQuote": false, - "printWidth": 160, + "printWidth": 120, "htmlWhitespaceSensitivity": "strict", "plugins": [] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 8d0fc7144..5fe93694d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,9 +1,7 @@ { "files.exclude": { "dist": true, - "node_modules": true, - "lib": true + "node_modules": true }, - "explorer.excludeGitIgnore": false, - "cSpell.words": ["Probot", "Ubiqui"] + "explorer.excludeGitIgnore": false } diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f6ebb8125..dd80c5d5f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,39 +1,46 @@ ## Contributing -[fork]: /fork -[pr]: /compare -[code-of-conduct]: CODE_OF_CONDUCT.md +We're thrilled that you'd like to contribute to this project. Your help is essential for keeping it great. -Hi there! We're thrilled that you'd like to contribute to this project. Your help is essential for keeping it great. - -Please note that this project is released with a [Contributor Code of Conduct][code-of-conduct]. By participating in this project you agree to abide by its terms. +Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms. ## Issues and PRs If you have suggestions for how this project could be improved, or want to report a bug, open an issue! We'd love all and any contributions. If you have questions, too, we'd love to hear them. -We'd also love PRs. If you're thinking of a large PR, we advise opening up an issue first to talk about it, though! Look at the links below if you're not sure how to open a PR. +We'd also love PRs. If you're thinking of a large PR, we advise opening up an issue first to talk about it. ## Submitting a pull request -1. [Fork][fork] and clone the repository. -1. Configure and install the dependencies: `npm install`. -1. Make sure the tests pass on your machine: `npm test`, note: these tests also apply the linter, so there's no need to lint separately. -1. Create a new branch: `git checkout -b my-branch-name`. -1. Make your change, add tests, and make sure the tests still pass. -1. Push to your fork and [submit a pull request][pr]. -1. Pat your self on the back and wait for your pull request to be reviewed and merged. +1. Fork and clone the repository. +2. Configure and install the dependencies: `yarn install`. +3. Make sure the tests pass on your machine: `yarn test`. These tests also apply the linter, so there's no need to lint separately. +4. Create a new branch: `git checkout -b my-branch-name`. +5. Make your change, add tests, and make sure the tests still pass. You can find the tests in the `src/tests` directory. +6. Push to your fork and submit a pull request. +7. Wait for your pull request to be reviewed and merged. Here are a few things you can do that will increase the likelihood of your pull request being accepted: -- Write and update tests. +- Write and update tests. You can find examples of how to do this in the `src/tests` directory. - Keep your changes as focused as possible. If there are multiple changes you would like to make that are not dependent upon each other, consider submitting them as separate pull requests. -- Write a [good commit message](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). +- Write a good commit message that conforms to (conventional commits)[https://www.conventionalcommits.org/]. This makes it easier to understand what your code is doing and why, which makes reviewing and maintaining it easier. Work in Progress pull requests are also welcome to get feedback early on, or if there is something blocked you. +## Running the project locally + +1. Fork and clone the repository. +2. Install dependencies: `yarn install`. +3. Build the project: `yarn build`. +4. Start the project: `yarn start:watch`. + +## Environment Setup + +Copy `.env.example` to `.env` and update the fields with your own information. For more details, refer to the [Environment Setup](README.md#Environment-Setup) section in the README. + ## Resources - [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/) - [Using Pull Requests](https://help.github.com/articles/about-pull-requests/) -- [GitHub Help](https://help.github.com) +- [GitHub Help](https://help.github.com) \ No newline at end of file diff --git a/README.md b/README.md index 13491d332..ed6d9b09d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,21 @@ -# The UbiquiBot - -Ubiquity DAO's GitHub Bot to automate DevPool management. +# UbiquiBot + +Ubiquity DAO's GitHub Bot for Automating DevPool Management. + +## Table of Contents +1. [Quickstart](#quickstart) +2. [Environment Variables](#environment-variables) +3. [Overview](#overview) +4. [How to Use](#how-to-use) +5. [Configuration](#configuration) +6. [How to Run Locally](#how-to-run-locally) +7. [Supabase Database](#supabase-database) +8. [Logs](#logs) +9. [Payments Permits in a Local Instance](#payments-permits-in-a-local-instance) +10. [How to QA Additions to the Bot](#how-to-qa-additions-to-the-bot) +11. [How to Create a New Release](#how-to-create-a-new-release) +12. [Architecture Overview](#architecture-overview) +13. [Default Config Notes (`ubiquibot-config-default.ts`)](#default-config-notes-ubiquibot-config-defaultts) ## Quickstart @@ -10,17 +25,21 @@ Ubiquity DAO's GitHub Bot to automate DevPool management. git clone https://github.com/ubiquity/ubiquibot.git cd ubiquibot yarn -yarn build +yarn build (to compile your changes) + +yarn build --watch (to locally auto compile your changes) + yarn start:watch + +## It's recommended to split terminals in your IDE while running above input ``` ## Environment Variables -- Copy `.env.example` to `.env` -- Update `.env` with the following fields: +- Copy `.env.example` to `.env` (do not rename .env.example, just make a copy) +- Update the following fields on `.env`: - `SUPABASE_URL`: Add your Supabase project URL. - `SUPABASE_KEY`: Add your Supabase project API key. -- `LOGDNA_INGESTION_KEY`: Get it from [Memzo](https://app.mezmo.com/) by creating an account, adding an organization, and copying the ingestion key on the next screen. - `FOLLOWUP_TIME`: (optional) Set a custom follow-up time (default: 4 days). - `DISQUALIFY_TIME`: (optional) Set a custom disqualify time (default: 7 days). - `OPENAI_API_HOST`: (optional) Set OpenAI host url (default: https://api.openai.com). @@ -32,62 +51,148 @@ yarn start:watch - `SIMILARITY_THRESHOLD`: (optional) Set similarity threshold (default: 80). - `MEASURE_SIMILARITY_AI_TEMPERATURE`: (optional) Set ChatGPT temperature for measuring similarity (default: 0). - `IMPORTANT_WORDS_AI_TEMPERATURE`: (optional) Set ChatGPT temperature for finding important words (default: 0). +- `WEBHOOK_PROXY_URL`: (required) should be automatically filled when you install UbiquiBot +- `WEBHOOK_SECRET`: (required) should be automatically filled when the app is installed + +`APP_ID` and `PRIVATE_KEY` are [here](https://t.me/c/1588400061/1627) for core team developers to use. -`APP_ID` and `PRIVATE_KEY` are [here](https://t.me/c/1588400061/1627) for internal developers to use. If you are an external developer, `APP_ID`and `PRIVATE_KEY` are automatically generated when you install the app on your repository. +## How to run locally + +### Register a new Github App + +**Should output:** +![setup](https://github.com/ubiquity/ubiquibot/assets/41552663/febf0e61-0402-4b25-838a-a64c1c385984) + +**You may proceed to go to http://localhost:3000 and you should see** + +![setup1](https://github.com/ubiquity/ubiquibot/assets/41552663/4b9d7565-8bd4-4e2a-864d-a086fedfe24d) + +**Click on Register a Github App** + +![setup3](https://github.com/ubiquity/ubiquibot/assets/41552663/0052feba-e823-419b-acde-d997d68ac553) + +**Provide the bot a name** + +![setup3](https://github.com/ubiquity/ubiquibot/assets/41552663/0052feba-e823-419b-acde-d997d68ac553) + +![setup4](https://github.com/ubiquity/ubiquibot/assets/41552663/f65e166b-c3fb-4e22-9f49-d622e3922eb7) + +**Select a handle where to install the bot** + +**Select in which repo the bot shall be available** + +![setup6](https://github.com/ubiquity/ubiquibot/assets/41552663/dce6b338-abd8-4b54-b990-2cc6cf686d30) + +**After following the steps you should see** + +![setup7](https://github.com/ubiquity/ubiquibot/assets/41552663/bbcf0e40-456c-4dd4-93e4-75de87d4d340) + +**Restart the server for the installation to take effect** + +![setup10](https://github.com/ubiquity/ubiquibot/assets/41552663/916cc5c3-dfdc-45c7-8d10-65afdce25e29) + +**After aforemention steps then installation shall be complete** + +![setup11](https://github.com/ubiquity/ubiquibot/assets/41552663/0e88fec0-fa8b-4d34-8cc8-024c99b5b640) + +## Seeing this page below after hitting http://localhost:3000 again? + +![trylocal](https://github.com/ubiquity/ubiquibot/assets/41552663/e958e7e4-6d42-44d1-a5cf-a090911f062c) + +### Congratulations! you successfully installed UbiquiBot (new or to an existing app) + + +## Update an Existing Github App (bot) + +**After you hit http://localhost:3000 you have the option to edit an existing app (if you think you have already registered a bot and when to reuse that same app)** +![existing](https://github.com/ubiquity/ubiquibot/assets/41552663/f696f3c1-1941-4bf4-b7a8-95d88f63e030) + +**on your Github settings hit to:** + +![repoaccess](https://github.com/ubiquity/ubiquibot/assets/41552663/bb389559-aaec-4bec-8ac0-97cefea63b16) + +**hen at the same time hit to "APP SETTINGS"** + + +**Update the WebHook URL by the one auto-provided by the bot's installation page (this is a must) and edit the webhook secret that you'll use at .env** + +![secret](https://github.com/ubiquity/ubiquibot/assets/41552663/41e9d872-f628-491e-8156-31bec8870ae7) + +**Update APP_ID at .env accordingly** + +![ubiqui](https://github.com/ubiquity/ubiquibot/assets/41552663/a760b497-84f2-4574-aa49-757be3dc3e71) + +**In the same page it is super important that you re-generated and save a private key that you'll be using at .env you open the file and paste it** + +![logo](https://github.com/ubiquity/ubiquibot/assets/41552663/716639d4-4646-4f14-bc3f-a39cfaf0fada) + + +## The Good News it's after you install the bot by using an existing app you'll get + +![success](https://github.com/ubiquity/ubiquibot/assets/41552663/87e85b37-c077-41f1-a7dc-41047d8a3b20) + + +**Important things with private keys (.pem) at .env** + +1. The private key gets automatically filled after the app is installed to a github handle but not as an existing app +2. The private key cannot be separated in spaces +3. The private key is a string into its env var rather than a just opened info without "" otherwise it will not be recognized and you'll get unauthorized access + + **Note:** When setting up the project, please do not rename the `.env.example` file to `.env` as it will delete the environment example from the repository. Instead, it is recommended to make a copy of the `.env.example` file and replace the values with the appropriate ones. ## Overview -- This bot is designed to exist as a GitHub Action. +- This bot is available as a GitHub Action. - The code must be compiled using `@vercel/ncc` because all the dependencies (e.g. `node_modules`) must be included and committed on the repository for the GitHub Actions runner to use. ## How to use 1. Go to the [UbiquiBot App Marketplace](https://github.com/marketplace/ubiquibot) 2. Choose a plan and install UbiquiBot on your repository -3. Congratulations! You can now use UbiquiBot to manage your tasks. +3. Congratulations! You can now use the UbiquiBot to manage your tasks. To test the bot, you can: 1. Create a new issue 2. Add a time label, ex: `Time: <1 Day` -3. Add a priority label, ex: `Priority: 0 (Normal)` +3. Add a priority label, ex: `Priority: 1 (Normal)` 4. At this point the bot should add a price label. ## Configuration -`evm-network-id` is ID of the EVM-compatible network that will be used for payouts. +`evmNetworkId` is ID of the EVM-compatible network that will be used for payouts. -`price-multiplier` is a base number that will be used to calculate task price based on the following formula: `price = price-multiplier * time-label-weight * priority-label-weight * 100` +`priceMultiplier` is a base number that will be used to calculate task price based on the following formula: `price = priceMultiplier * timeLabelWeight * priority-label-weight * 100` -`time-labels` are labels for marking the time limit of the task: +`timeLabels` are labels for marking the time limit of the task: - `name` is a human-readable name - `value` is number of seconds that corresponds to the time limit of the task -`priority-labels` are labels for marking the priority of the task: +`priorityLabels` are labels for marking the priority of the task: - `name` is a human-readable name -`command-settings` are setting to enable or disable a command +`commandSettings` are setting to enable or disable a command - `name` is the name of the command - `enabled` is a `true` or `false` value to enable or disable a command -`default-labels` are labels that are applied when an issue is created without any time or priority labels. +`defaultLabels` are labels that are applied when an issue is created without any time or priority labels. -`assistive-pricing` to create a new pricing label if it doesn't exist. Can be `true` or `false`. +`assistivePricing` to create a new pricing label if it doesn't exist. Can be `true` or `false`. -`disable-analytics` can be `true` or `false` that disables or enables weekly analytics collection by Ubiquity. +`disableAnalytics` can be `true` or `false` that disables or enables weekly analytics collection by Ubiquity. -`payment-permit-max-price` sets the max amount for automatic payout of tasks when the issue is closed. +`paymentPermitMaxPrice` sets the max amount for automatic payout of tasks when the issue is closed. -`comment-incentives` can be `true` or `false` that enable or disable comment incentives. These are payments generated for comments in the issue by contributors, excluding the assignee. +`commentIncentives` can be `true` or `false` that enable or disable comment incentives. These are payments generated for comments in the issue by contributors, excluding the assignee. -`issue-creator-multiplier` is a number that defines a base multiplier for calculating incentive for the creator of the issue. +`issueCreatorMultiplier` is a number that defines a base multiplier for calculating incentive for the creator of the issue. `comment-element-pricing` defines how much is a part of the comment worth. For example `text: 0.1` means that any text in the comment will add 0.1 @@ -98,13 +203,15 @@ To test the bot, you can: - `totals`: - `word` defines reward for each word in the comment -`max-concurrent-assigns` is the maximum number of tasks that can be assigned to an assignee at once. This excludes tasks with delayed or approved pull request reviews. +`maxConcurrentAssigns` is the maximum number of tasks that can be assigned to a task hunter at once. This excludes tasks with delayed or approved pull request reviews. -`register-wallet-with-verification` can be `true` or `false`. If enabled, it requires a signed message to set wallet address. This prevents users from setting wallet address from centralized exchanges, which would make payments impossible to claim. +`registerWalletWithVerification` can be `true` or `false`. If enabled, it requires a signed message to set wallet address. This prevents users from setting wallet address from centralized exchanges, which would make payments impossible to claim. -`promotion-comment` is a message that is appended to the payment permit comment. +`promotionComment` is a message that is appended to the payment permit comment. -## How to run locally +### Supase Database + +### Option 1 1. Create a new project at [Supabase](https://supabase.com/). Add `Project URL` and `API Key` to the `.env` file: @@ -115,15 +222,28 @@ SUPABASE_KEY="XXX" ``` -2. Create a new organization at [Memzo](https://app.mezmo.com/). Add `LOGDNA_INGESTION_KEY` to the `.env` file: +### Option 2 -``` +Supabase comes with a [readme](https://github.com/ubiquity/ubiquibot/blob/development/supabase/README.md) which is helpful for managing and setup +### This options will require you to have a local Docker installation (under the hood it is required by Supabase) refer to [Supabase Docs](https://supabase.com/docs) -LOGDNA_INGESTION_KEY ="XXX" +``` +yarn supabase start +``` +## Check Supabase Status (locally) ``` +yarn supabase status +``` + +![supabase](https://github.com/ubiquity/ubiquibot/assets/41552663/e8709b8f-e7c3-49e0-876c-c15dde22c6d2) -3. Add `FOLLOW_UP_TIME` and `DISQUALIFY_TIME` to the `.env` file if you don't want to use default ones. +## Supabase Studio + +You can then access to Supabase Studio by going to http://localhost:54323 + + +2. Add `FOLLOW_UP_TIME` and `DISQUALIFY_TIME` to the `.env` file if you don't want to use default ones. ``` @@ -132,27 +252,29 @@ DISQUALIFY_TIME="7 days" // 7 days ``` -4. `yarn install` -5. Open 2 terminal instances: +3. `Make sure you have Node => 20.10.0 && yarn` +4. Open 2 terminal instances: - in one instance run `yarn build --watch` (compiles the Typescript code) - in another instance run `yarn start:watch` (runs the bot locally) -6. Open `localhost:3000` and follow instructions to add the bot to one of your repositories. +5. Open `http://localhost:3000` and follow instructions to add the bot to one of your repositories. At this point the `.env` files auto-fill the empty fields (`PRIVATE_KEY` and `APP_ID`) if it is not previously filled. Now you can make changes to the repository on GitHub (e.g. add a task) and the bot should react. +6. After adding the bot (as a installed app) to your github you will need to restart the aforementioned `yarn start:watch`` so CTRL-C to stop the node daemon and `yarn start:watch` again + You can, for example: 1. Create a new issue 2. Add a time label, ex: `Time: <1 Day` -3. Add a priority label, ex: `Priority: 0 (Normal)` -4. At this point the bot should add a price label, you should see event logs in one of your opened terminals +3. Add a priority label, ex: `Priority: 1 (Normal)` +4. the bot should add a price label, you should see event logs in your opened bot terminals ## How it works -UbiquiBot is built using the [probot](https://probot.github.io/) framework so initially the bot is a github app. But thanks to the [probot/adapter-github-actions](https://github.com/probot/adapter-github-actions) you can also use the bot as a github action. +UbiquiBot is built using the [probot](https://probot.github.io/) framework so in fact the bot is a github app. But thanks to the [probot/adapter-github-actions](https://github.com/probot/adapter-github-actions) you can also use the bot as a github action. -You can use UbiquiBot as a [github app](https://github.com/marketplace/ubiquibot). +[UbiquiBot](https://github.com/marketplace/ubiquibot) it's also available ready to install on the GitHub Marketplace. When using as a github app the flow is the following: @@ -180,7 +302,7 @@ For payment to work in your local instance, ubiquibot must be set up in a Github ## How to QA any additions to the bot -Make sure you have your local instance of ubiquibot running. +Make sure you have your local instance of [ubiquibot running](#quickstart). 1. Fork the ubiquibot repo and add your local instance of ubiquibot to the forked repository. 2. Enable Github action running on the forked repo and allow `issues` on the settings tab. @@ -197,7 +319,7 @@ Make sure you have your local instance of ubiquibot running. ## Architecture Overview -UbiquiBot is built using the [probot](https://probot.github.io/) framework so initially the bot is a github app +UbiquiBot is built using the [probot](https://probot.github.io/) framework, the bot is a github app
 <root>
@@ -221,6 +343,9 @@ UbiquiBot is built using the [probot](https://probot.github.io/) framework so in
 |
 ├── types A set of schema and type definitions.
Why do we need schema? because we want to validate the unknown input and throw the error before the main execution. | + +├── helpers A set of schema and type definitions.
Why do we need schema? because we want to validate the unknown input and throw the error before the main execution. + ├── utils A set of utility functions
@@ -262,4 +387,4 @@ select -- Cancel the cron job select cron.unschedule('logs-cleaner'); -``` +``` \ No newline at end of file diff --git a/app.yml b/app.yml index 7c0b7f66c..8d0ae6726 100644 --- a/app.yml +++ b/app.yml @@ -24,7 +24,7 @@ default_events: # - gollum - issue_comment - issues - # - label + - label # - milestone # - member # - membership diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 000000000..73387ab61 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,15 @@ +module.exports = { + "cache": false, + "maxConcurrency": 1, + "preset": "ts-jest", + "testEnvironment": "node", + "testPathIgnorePatterns": ['/node_modules/', '.js$'], + "moduleFileExtensions": [ + "ts", + "tsx", + "js", + "jsx", + "json", + "node" + ] +} \ No newline at end of file diff --git a/knip.json b/knip.json new file mode 100644 index 000000000..9d5789ccc --- /dev/null +++ b/knip.json @@ -0,0 +1,4 @@ +{ + "entry": ["src/index.ts"], + "project": ["**/*.ts"] +} diff --git a/log-app/.gitignore b/log-app/.gitignore deleted file mode 100644 index 9df249787..000000000 --- a/log-app/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Ignore JavaScript files -*.js \ No newline at end of file diff --git a/log-app/_worker.ts b/log-app/_worker.ts deleted file mode 100644 index 526cedbb3..000000000 --- a/log-app/_worker.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Env } from "./types/global"; - -export default { - async fetch(request: Request, env: Env) { - // Otherwise, serve the static assets. - // Without this, the Worker will error and no assets will be served. - return env.ASSETS.fetch(request); - }, -}; diff --git a/log-app/index.html b/log-app/index.html deleted file mode 100644 index 04ab5014d..000000000 --- a/log-app/index.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - Log Viewer - - - - -
- - -
- - - - - - - - - - -
MessageLevelTimestampComment URL
- - - - - - \ No newline at end of file diff --git a/log-app/package.json b/log-app/package.json deleted file mode 100644 index f70c61f60..000000000 --- a/log-app/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "cf-pages-functions", - "version": "0.0.0", - "scripts": { - "build": "tsc && tsx ./scripts/esbuild.ts" - }, - "devDependencies": { - "@cloudflare/workers-types": "^3.2.0", - "@supabase/supabase-js": "^2.32.0", - "typescript": "^4.3.2" - }, - "dependencies": { - "esbuild": "^0.19.2", - "tsx": "^3.12.7" - } -} diff --git a/log-app/scripts/constants/index.ts b/log-app/scripts/constants/index.ts deleted file mode 100644 index dbda210ab..000000000 --- a/log-app/scripts/constants/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const SUPABASE_URL = "https://qzfjblxdroqrmlheoajw.supabase.co"; -export const SUPABASE_KEY = - "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InF6ZmpibHhkcm9xcm1saGVvYWp3Iiwicm9sZSI6ImFub24iLCJpYXQiOjE2ODA4NTMwMzMsImV4cCI6MTk5NjQyOTAzM30.BM_qkpX-egNdiMc0PDO_34bIaXHB7ewnr2k4U2hGFMM"; diff --git a/log-app/scripts/esbuild-config.ts b/log-app/scripts/esbuild-config.ts deleted file mode 100644 index 9a0c2f714..000000000 --- a/log-app/scripts/esbuild-config.ts +++ /dev/null @@ -1,19 +0,0 @@ -import esbuild from "esbuild"; -const typescriptEntries = ["scripts/helpers/utils.ts", "scripts/index.ts", "scripts/constants/index.ts"]; -export const entries = [...typescriptEntries]; - -export let esBuildContext = { - sourcemap: false, - entryPoints: entries, - bundle: true, - minify: false, - loader: { - ".png": "dataurl", - ".woff": "dataurl", - ".woff2": "dataurl", - ".eot": "dataurl", - ".ttf": "dataurl", - ".svg": "dataurl", - }, - outdir: "scripts", -} as esbuild.BuildOptions; diff --git a/log-app/scripts/esbuild.ts b/log-app/scripts/esbuild.ts deleted file mode 100644 index bd358a938..000000000 --- a/log-app/scripts/esbuild.ts +++ /dev/null @@ -1,3 +0,0 @@ -import esbuild from "esbuild"; -import { esBuildContext } from "./esbuild-config"; -esbuild.build(esBuildContext); diff --git a/log-app/scripts/helpers/utils.ts b/log-app/scripts/helpers/utils.ts deleted file mode 100644 index 31ce87681..000000000 --- a/log-app/scripts/helpers/utils.ts +++ /dev/null @@ -1,66 +0,0 @@ -export enum Level { - ERROR = "error", - WARN = "warn", - INFO = "info", - HTTP = "http", - VERBOSE = "verbose", - DEBUG = "debug", - SILLY = "silly", -} - -export const createGitHubCommentURL = (orgName: string, repoName: string, issueNumber: number, commentId: number) => { - return `https://github.com/${orgName}/${repoName}/issues/${issueNumber}#issuecomment-${commentId}`; -}; - -export const isValidJson = (jsonString) => { - try { - JSON.parse(jsonString); - return true; - } catch (error) { - return false; - } -}; - -export const generateRandomId = (length) => { - return [...Array(length)].map(() => Math.random().toString(36)[2]).join(""); -}; - -export const containsValidJson = (message: string): [boolean, string, string] => { - const jsonMatches = message.match(/\{.*\}/g); // Find JSON-like substrings - if (!jsonMatches) { - return [false, "", ""]; - } - - for (const match of jsonMatches) { - if (isValidJson(match)) { - const braceIndex = message.indexOf("{"); - if (braceIndex !== -1) { - return [true, match, message.substring(0, braceIndex)]; - } - return [true, match, ""]; - } - } - - return [false, "", ""]; -}; - -export const getLevelString = (level: number) => { - switch (level) { - case 0: - return Level.ERROR; - case 1: - return Level.WARN; - case 2: - return Level.INFO; - case 3: - return Level.HTTP; - case 4: - return Level.VERBOSE; - case 5: - return Level.DEBUG; - case 6: - return Level.SILLY; - default: - return -1; // Invalid level - } -}; diff --git a/log-app/scripts/index.ts b/log-app/scripts/index.ts deleted file mode 100644 index a0d5c1817..000000000 --- a/log-app/scripts/index.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { containsValidJson, createGitHubCommentURL, generateRandomId, getLevelString } from "./helpers/utils"; -import { Logs } from "./types/log"; -import { createClient } from "@supabase/supabase-js"; -import { SUPABASE_URL, SUPABASE_KEY } from "./constants/index"; - -const filterSelect = document.getElementById("filter") as unknown as HTMLSelectElement; -const clearButton = document.getElementById("clear") as HTMLButtonElement; -const logBody = document.getElementById("log-body") as HTMLDivElement; - -const jsonModal = document.getElementById("json-modal") as HTMLDivElement; -const closeModalButton = document.getElementById("close-modal") as HTMLButtonElement; -const jsonContent = document.getElementById("json-content") as HTMLDivElement; - -const openJsonModal = (validJson) => { - jsonContent.textContent = validJson; - - jsonModal.style.display = "flex"; -}; - -const updateLogTable = () => { - const selectedFilter = filterSelect.value; - const filteredLogs = selectedFilter === "all" ? logs : logs.filter((log) => getLevelString(log.level) === selectedFilter); - - logBody.innerHTML = ""; - filteredLogs.forEach((log) => { - const classId = generateRandomId(10); - const commentUrl = createGitHubCommentURL(log.org_name, log.repo_name, log.issue_number, log.comment_id); - const row = document.createElement("tr"); - const [validJson, match, beforeText] = containsValidJson(log.log_message); - row.innerHTML = ` - ${ - validJson - ? `${beforeText} - ` - : `${log.log_message}` - } - ${getLevelString(log.level)} - ${log.timestamp} - Comment - ${log.comment_id} - `; - logBody.appendChild(row); - let logCell = document.getElementsByClassName("log-cell"); - if (validJson) { - // show modal button for valid json row - const showMoreButton = document.getElementById(`button_${classId}`) as HTMLButtonElement; - showMoreButton.addEventListener("click", () => { - if (validJson) { - openJsonModal(JSON.stringify(JSON.parse(match), null, 2)); // properly formatted json - } - }); - } - // scroll to last added data - logCell[logCell.length - 1].scrollIntoView(); - }); -}; - -let logs: Logs[] = []; - -const supabaseClient = createClient(SUPABASE_URL, SUPABASE_KEY); - -const channel = supabaseClient - .channel("table-db-changes") - .on( - "postgres_changes", - { - event: "INSERT", - schema: "public", - table: "logs", - }, - (payload) => handlePayload(payload) - ) - .subscribe(); - -const handlePayload = (logEntry) => { - if (logEntry?.eventType !== "INSERT") return; - logs.push(logEntry.new); - updateLogTable(); -}; - -filterSelect.addEventListener("change", () => { - updateLogTable(); -}); - -clearButton.addEventListener("click", () => { - logs = []; - updateLogTable(); -}); - -closeModalButton.addEventListener("click", () => { - jsonModal.style.display = "none"; -}); - -window.addEventListener("click", (event) => { - if (event.target === jsonModal) { - jsonModal.style.display = "none"; - } -}); - -// Initial update -updateLogTable(); diff --git a/log-app/scripts/tsconfig.json b/log-app/scripts/tsconfig.json deleted file mode 100644 index 018499861..000000000 --- a/log-app/scripts/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "compilerOptions": { - "useDefineForClassFields": true, - "allowJs": false, - "esModuleInterop": true, - "module": "CommonJS", - "allowSyntheticDefaultImports": true, - "strict": false, - "forceConsistentCasingInFileNames": true, - "target": "esnext" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - "lib": ["esnext", "dom", "dom.iterable"] /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - }, - "include": ["./helpers", "./constants", "./index.ts"], - "exclude": ["./esbuild.ts", "./esbuild-config.ts"] -} diff --git a/log-app/scripts/types/log.ts b/log-app/scripts/types/log.ts deleted file mode 100644 index ebd2b43a2..000000000 --- a/log-app/scripts/types/log.ts +++ /dev/null @@ -1,9 +0,0 @@ -export type Logs = { - timestamp: string; - log_message: string; - level: number; - repo_name: string; - org_name: string; - comment_id: number; - issue_number: number; -}; diff --git a/log-app/styles/index.css b/log-app/styles/index.css deleted file mode 100644 index 7ba057db5..000000000 --- a/log-app/styles/index.css +++ /dev/null @@ -1,156 +0,0 @@ -body { - font-family: Arial, sans-serif; -} - -.log-container { - margin: 20px auto; - width: 95%; -} - -.log-cell { - border: 1px solid #ccc; - padding: 8px; - text-align: left; - max-width: 476px; - /* Adjust the maximum width as needed */ - overflow: auto; - /* Allow scrolling if the content is too long */ - white-space: pre-wrap; -} - -#log-table { - margin: 20px auto; - width: 95%; - border-collapse: collapse; - border: 1px solid #ccc; - margin-top: 20px; - table-layout: fixed; -} - -#log-table th, -#log-table td { - border: 1px solid #ccc; - padding: 10px; - text-align: left; - color: black; -} - -#log-table th { - background-color: #f5f5f5; - font-weight: bold; -} - -#log-body { - max-height: 400px; - overflow-y: auto; -} - -table { - border-collapse: collapse; - width: 600px; -} - -td, -th { - padding: 10px; - text-align: left; - margin: 0; - color: black; -} - -tbody tr:nth-child(2n) { - background-color: #eee; -} - -th { - position: sticky; - top: 0; - background-color: #333; - color: white; -} - -select, -button { - margin-right: 10px; -} - -#filter { - font-family: Arial, sans-serif; - padding: 8px 24px; - border: 1px solid #ccc; - border-radius: 4px; - background-color: white; - cursor: pointer; - transition: border-color 0.3s; -} - -#filter:hover { - border-color: #999; -} - -/* Styling for button element */ -#clear { - font-family: Arial, sans-serif; - padding: 8px 12px; - background-color: #007bff; - border: none; - border-radius: 4px; - color: white; - cursor: pointer; - transition: background-color 0.3s; -} - -#clear:hover { - background-color: #0056b3; -} - -/* Modal styles */ -.modal { - display: none; - position: fixed; - z-index: 1; - left: 0; - top: 0; - width: 100%; - height: 100%; - background-color: rgba(0, 0, 0, 0.4); - align-items: center; - justify-content: center; - /* Center horizontally and vertically */ -} - -.modal-content { - background-color: white; - border: 1px solid #888; - width: 80%; - max-width: 600px; - height: 75vh; - padding: 20px; - text-align: left; - border-radius: 8px; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); -} - -.close { - color: #aaa; - float: right; - font-size: 28px; - font-weight: bold; -} - -.close:hover, -.close:focus { - color: black; - text-decoration: none; - cursor: pointer; -} - -.json-content { - overflow: auto; - height: 70vh; - padding: 10px; - background-color: #f5f5f5; - border: 1px solid #ddd; - border-radius: 4px; - white-space: pre-wrap; -} \ No newline at end of file diff --git a/log-app/tsconfig.json b/log-app/tsconfig.json deleted file mode 100644 index d572b4033..000000000 --- a/log-app/tsconfig.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "useDefineForClassFields": true, - "lib": ["ESNext"], - "allowJs": false, - "skipLibCheck": true, - "esModuleInterop": false, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "module": "ESNext", - "moduleResolution": "Node", - "types": ["@cloudflare/workers-types", "node"], - "outDir": "" - }, - "include": ["./_worker.ts", "./src", "./types"] -} diff --git a/log-app/types/global.ts b/log-app/types/global.ts deleted file mode 100644 index a664d7f42..000000000 --- a/log-app/types/global.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface Env { - ASSETS: Fetcher; - SUPABASE_KEY: string; - SUPABASE_URL: string; -} diff --git a/log-app/yarn.lock b/log-app/yarn.lock deleted file mode 100644 index 7d3f90eda..000000000 --- a/log-app/yarn.lock +++ /dev/null @@ -1,573 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@cloudflare/workers-types@^3.2.0": - version "3.19.0" - resolved "https://registry.yarnpkg.com/@cloudflare/workers-types/-/workers-types-3.19.0.tgz#f3791b80b23f7cf0072f2e67e98aa37801204b6c" - integrity sha512-0FRcsz7Ea3jT+gc5gKPIYciykm1bbAaTpygdzpCwGt0RL+V83zWnYN30NWDW4rIHj/FHtz+MIuBKS61C8l7AzQ== - -"@esbuild-kit/cjs-loader@^2.4.2": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@esbuild-kit/cjs-loader/-/cjs-loader-2.4.2.tgz#cb4dde00fbf744a68c4f20162ea15a8242d0fa54" - integrity sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg== - dependencies: - "@esbuild-kit/core-utils" "^3.0.0" - get-tsconfig "^4.4.0" - -"@esbuild-kit/core-utils@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@esbuild-kit/core-utils/-/core-utils-3.1.0.tgz#49945d533dbd5e1b7620aa0fc522c15e6ec089c5" - integrity sha512-Uuk8RpCg/7fdHSceR1M6XbSZFSuMrxcePFuGgyvsBn+u339dk5OeL4jv2EojwTN2st/unJGsVm4qHWjWNmJ/tw== - dependencies: - esbuild "~0.17.6" - source-map-support "^0.5.21" - -"@esbuild-kit/esm-loader@^2.5.5": - version "2.5.5" - resolved "https://registry.yarnpkg.com/@esbuild-kit/esm-loader/-/esm-loader-2.5.5.tgz#b82da14fcee3fc1d219869756c06f43f67d1ca71" - integrity sha512-Qwfvj/qoPbClxCRNuac1Du01r9gvNOT+pMYtJDapfB1eoGN1YlJ1BixLyL9WVENRx5RXgNLdfYdx/CuswlGhMw== - dependencies: - "@esbuild-kit/core-utils" "^3.0.0" - get-tsconfig "^4.4.0" - -"@esbuild/android-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" - integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== - -"@esbuild/android-arm64@0.19.2": - version "0.19.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.2.tgz#bc35990f412a749e948b792825eef7df0ce0e073" - integrity sha512-lsB65vAbe90I/Qe10OjkmrdxSX4UJDjosDgb8sZUKcg3oefEuW2OT2Vozz8ef7wrJbMcmhvCC+hciF8jY/uAkw== - -"@esbuild/android-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" - integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== - -"@esbuild/android-arm@0.19.2": - version "0.19.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.2.tgz#edd1c8f23ba353c197f5b0337123c58ff2a56999" - integrity sha512-tM8yLeYVe7pRyAu9VMi/Q7aunpLwD139EY1S99xbQkT4/q2qa6eA4ige/WJQYdJ8GBL1K33pPFhPfPdJ/WzT8Q== - -"@esbuild/android-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" - integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== - -"@esbuild/android-x64@0.19.2": - version "0.19.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.2.tgz#2dcdd6e6f1f2d82ea1b746abd8da5b284960f35a" - integrity sha512-qK/TpmHt2M/Hg82WXHRc/W/2SGo/l1thtDHZWqFq7oi24AjZ4O/CpPSu6ZuYKFkEgmZlFoa7CooAyYmuvnaG8w== - -"@esbuild/darwin-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" - integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== - -"@esbuild/darwin-arm64@0.19.2": - version "0.19.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.2.tgz#55b36bc06d76f5c243987c1f93a11a80d8fc3b26" - integrity sha512-Ora8JokrvrzEPEpZO18ZYXkH4asCdc1DLdcVy8TGf5eWtPO1Ie4WroEJzwI52ZGtpODy3+m0a2yEX9l+KUn0tA== - -"@esbuild/darwin-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" - integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== - -"@esbuild/darwin-x64@0.19.2": - version "0.19.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.2.tgz#982524af33a6424a3b5cb44bbd52559623ad719c" - integrity sha512-tP+B5UuIbbFMj2hQaUr6EALlHOIOmlLM2FK7jeFBobPy2ERdohI4Ka6ZFjZ1ZYsrHE/hZimGuU90jusRE0pwDw== - -"@esbuild/freebsd-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" - integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== - -"@esbuild/freebsd-arm64@0.19.2": - version "0.19.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.2.tgz#8e478a0856645265fe79eac4b31b52193011ee06" - integrity sha512-YbPY2kc0acfzL1VPVK6EnAlig4f+l8xmq36OZkU0jzBVHcOTyQDhnKQaLzZudNJQyymd9OqQezeaBgkTGdTGeQ== - -"@esbuild/freebsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" - integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== - -"@esbuild/freebsd-x64@0.19.2": - version "0.19.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.2.tgz#01b96604f2540db023c73809bb8ae6cd1692d6f3" - integrity sha512-nSO5uZT2clM6hosjWHAsS15hLrwCvIWx+b2e3lZ3MwbYSaXwvfO528OF+dLjas1g3bZonciivI8qKR/Hm7IWGw== - -"@esbuild/linux-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" - integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== - -"@esbuild/linux-arm64@0.19.2": - version "0.19.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.2.tgz#7e5d2c7864c5c83ec789b59c77cd9c20d2594916" - integrity sha512-ig2P7GeG//zWlU0AggA3pV1h5gdix0MA3wgB+NsnBXViwiGgY77fuN9Wr5uoCrs2YzaYfogXgsWZbm+HGr09xg== - -"@esbuild/linux-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" - integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== - -"@esbuild/linux-arm@0.19.2": - version "0.19.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.2.tgz#c32ae97bc0246664a1cfbdb4a98e7b006d7db8ae" - integrity sha512-Odalh8hICg7SOD7XCj0YLpYCEc+6mkoq63UnExDCiRA2wXEmGlK5JVrW50vZR9Qz4qkvqnHcpH+OFEggO3PgTg== - -"@esbuild/linux-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" - integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== - -"@esbuild/linux-ia32@0.19.2": - version "0.19.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.2.tgz#3fc4f0fa026057fe885e4a180b3956e704f1ceaa" - integrity sha512-mLfp0ziRPOLSTek0Gd9T5B8AtzKAkoZE70fneiiyPlSnUKKI4lp+mGEnQXcQEHLJAcIYDPSyBvsUbKUG2ri/XQ== - -"@esbuild/linux-loong64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" - integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== - -"@esbuild/linux-loong64@0.19.2": - version "0.19.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.2.tgz#633bcaea443f3505fb0ed109ab840c99ad3451a4" - integrity sha512-hn28+JNDTxxCpnYjdDYVMNTR3SKavyLlCHHkufHV91fkewpIyQchS1d8wSbmXhs1fiYDpNww8KTFlJ1dHsxeSw== - -"@esbuild/linux-mips64el@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" - integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== - -"@esbuild/linux-mips64el@0.19.2": - version "0.19.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.2.tgz#e0bff2898c46f52be7d4dbbcca8b887890805823" - integrity sha512-KbXaC0Sejt7vD2fEgPoIKb6nxkfYW9OmFUK9XQE4//PvGIxNIfPk1NmlHmMg6f25x57rpmEFrn1OotASYIAaTg== - -"@esbuild/linux-ppc64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" - integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== - -"@esbuild/linux-ppc64@0.19.2": - version "0.19.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.2.tgz#d75798da391f54a9674f8c143b9a52d1dbfbfdde" - integrity sha512-dJ0kE8KTqbiHtA3Fc/zn7lCd7pqVr4JcT0JqOnbj4LLzYnp+7h8Qi4yjfq42ZlHfhOCM42rBh0EwHYLL6LEzcw== - -"@esbuild/linux-riscv64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" - integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== - -"@esbuild/linux-riscv64@0.19.2": - version "0.19.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.2.tgz#012409bd489ed1bb9b775541d4a46c5ded8e6dd8" - integrity sha512-7Z/jKNFufZ/bbu4INqqCN6DDlrmOTmdw6D0gH+6Y7auok2r02Ur661qPuXidPOJ+FSgbEeQnnAGgsVynfLuOEw== - -"@esbuild/linux-s390x@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" - integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== - -"@esbuild/linux-s390x@0.19.2": - version "0.19.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.2.tgz#ece3ed75c5a150de8a5c110f02e97d315761626b" - integrity sha512-U+RinR6aXXABFCcAY4gSlv4CL1oOVvSSCdseQmGO66H+XyuQGZIUdhG56SZaDJQcLmrSfRmx5XZOWyCJPRqS7g== - -"@esbuild/linux-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" - integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== - -"@esbuild/linux-x64@0.19.2": - version "0.19.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.2.tgz#dea187019741602d57aaf189a80abba261fbd2aa" - integrity sha512-oxzHTEv6VPm3XXNaHPyUTTte+3wGv7qVQtqaZCrgstI16gCuhNOtBXLEBkBREP57YTd68P0VgDgG73jSD8bwXQ== - -"@esbuild/netbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" - integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== - -"@esbuild/netbsd-x64@0.19.2": - version "0.19.2" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.2.tgz#bbfd7cf9ab236a23ee3a41b26f0628c57623d92a" - integrity sha512-WNa5zZk1XpTTwMDompZmvQLHszDDDN7lYjEHCUmAGB83Bgs20EMs7ICD+oKeT6xt4phV4NDdSi/8OfjPbSbZfQ== - -"@esbuild/openbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" - integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== - -"@esbuild/openbsd-x64@0.19.2": - version "0.19.2" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.2.tgz#fa5c4c6ee52a360618f00053652e2902e1d7b4a7" - integrity sha512-S6kI1aT3S++Dedb7vxIuUOb3oAxqxk2Rh5rOXOTYnzN8JzW1VzBd+IqPiSpgitu45042SYD3HCoEyhLKQcDFDw== - -"@esbuild/sunos-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" - integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== - -"@esbuild/sunos-x64@0.19.2": - version "0.19.2" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.2.tgz#52a2ac8ac6284c02d25df22bb4cfde26fbddd68d" - integrity sha512-VXSSMsmb+Z8LbsQGcBMiM+fYObDNRm8p7tkUDMPG/g4fhFX5DEFmjxIEa3N8Zr96SjsJ1woAhF0DUnS3MF3ARw== - -"@esbuild/win32-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" - integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== - -"@esbuild/win32-arm64@0.19.2": - version "0.19.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.2.tgz#719ed5870855de8537aef8149694a97d03486804" - integrity sha512-5NayUlSAyb5PQYFAU9x3bHdsqB88RC3aM9lKDAz4X1mo/EchMIT1Q+pSeBXNgkfNmRecLXA0O8xP+x8V+g/LKg== - -"@esbuild/win32-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" - integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== - -"@esbuild/win32-ia32@0.19.2": - version "0.19.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.2.tgz#24832223880b0f581962c8660f8fb8797a1e046a" - integrity sha512-47gL/ek1v36iN0wL9L4Q2MFdujR0poLZMJwhO2/N3gA89jgHp4MR8DKCmwYtGNksbfJb9JoTtbkoe6sDhg2QTA== - -"@esbuild/win32-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" - integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== - -"@esbuild/win32-x64@0.19.2": - version "0.19.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.2.tgz#1205014625790c7ff0e471644a878a65d1e34ab0" - integrity sha512-tcuhV7ncXBqbt/Ybf0IyrMcwVOAPDckMK9rXNHtF17UTK18OKLpg08glminN06pt2WCoALhXdLfSPbVvK/6fxw== - -"@supabase/functions-js@^2.1.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@supabase/functions-js/-/functions-js-2.1.2.tgz#340a8d3845ef2014338b13a6d33cfa90eb745b14" - integrity sha512-QCR6pwJs9exCl37bmpMisUd6mf+0SUBJ6mUpiAjEkSJ/+xW8TCuO14bvkWHADd5hElJK9MxNlMQXxSA4DRz9nQ== - dependencies: - cross-fetch "^3.1.5" - -"@supabase/gotrue-js@^2.46.1": - version "2.47.0" - resolved "https://registry.yarnpkg.com/@supabase/gotrue-js/-/gotrue-js-2.47.0.tgz#67cca8f7be726fcfcc6dd49f515bbb20b2278f74" - integrity sha512-3e34/vsKH/DoSZCpB85UZpFWSJ2p4GRUUlqgAgeTPagPlx4xS+Nc5v7g7ic7vp3gK0J5PsYVCn9Qu2JQUp4vXg== - dependencies: - cross-fetch "^3.1.5" - -"@supabase/postgrest-js@^1.8.0": - version "1.8.0" - resolved "https://registry.yarnpkg.com/@supabase/postgrest-js/-/postgrest-js-1.8.0.tgz#c10b65e120c6523fc947225bcb9131869cf509f1" - integrity sha512-R6leDIC92NgjyG2/tCRJ42rWN7+fZY6ulTEE+c00tcnghn6cX4IYUlnTNMtrdfYC2JYNOTyM+rWj63Wdhr7Zig== - dependencies: - cross-fetch "^3.1.5" - -"@supabase/realtime-js@^2.7.3": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@supabase/realtime-js/-/realtime-js-2.7.3.tgz#cbcb84181add681ab99c87032bfe88101c6863b3" - integrity sha512-c7TzL81sx2kqyxsxcDduJcHL9KJdCOoKimGP6lQSqiZKX42ATlBZpWbyy9KFGFBjAP4nyopMf5JhPi2ZH9jyNw== - dependencies: - "@types/phoenix" "^1.5.4" - "@types/websocket" "^1.0.3" - websocket "^1.0.34" - -"@supabase/storage-js@^2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@supabase/storage-js/-/storage-js-2.5.1.tgz#16c4c088996e0395034717836e626f14df63a349" - integrity sha512-nkR0fQA9ScAtIKA3vNoPEqbZv1k5B5HVRYEvRWdlP6mUpFphM9TwPL2jZ/ztNGMTG5xT6SrHr+H7Ykz8qzbhjw== - dependencies: - cross-fetch "^3.1.5" - -"@supabase/supabase-js@^2.32.0": - version "2.32.0" - resolved "https://registry.yarnpkg.com/@supabase/supabase-js/-/supabase-js-2.32.0.tgz#863c636d83232c6a2e9ba5932e0d7c1bf80bc436" - integrity sha512-1ShFhuOI5Du7604nlCelBsRD61daXk2O0qwjumoz35bqrYThnSPPtpJqZOHw6Mg6o7mLjIInYLh/DBlh8UvzRg== - dependencies: - "@supabase/functions-js" "^2.1.0" - "@supabase/gotrue-js" "^2.46.1" - "@supabase/postgrest-js" "^1.8.0" - "@supabase/realtime-js" "^2.7.3" - "@supabase/storage-js" "^2.5.1" - cross-fetch "^3.1.5" - -"@types/node@*": - version "20.5.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.1.tgz#178d58ee7e4834152b0e8b4d30cbfab578b9bb30" - integrity sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg== - -"@types/phoenix@^1.5.4": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@types/phoenix/-/phoenix-1.6.0.tgz#eb7536259ee695646e75c4c7b0c9a857ea174781" - integrity sha512-qwfpsHmFuhAS/dVd4uBIraMxRd56vwBUYQGZ6GpXnFuM2XMRFJbIyruFKKlW2daQliuYZwe0qfn/UjFCDKic5g== - -"@types/websocket@^1.0.3": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.5.tgz#3fb80ed8e07f88e51961211cd3682a3a4a81569c" - integrity sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ== - dependencies: - "@types/node" "*" - -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== - -bufferutil@^4.0.1: - version "4.0.7" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" - integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== - dependencies: - node-gyp-build "^4.3.0" - -cross-fetch@^3.1.5: - version "3.1.8" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" - integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== - dependencies: - node-fetch "^2.6.12" - -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - -debug@^2.2.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.62" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" - integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - next-tick "^1.1.0" - -es6-iterator@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - -esbuild@^0.19.2: - version "0.19.2" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.2.tgz#b1541828a89dfb6f840d38538767c6130dca2aac" - integrity sha512-G6hPax8UbFakEj3hWO0Vs52LQ8k3lnBhxZWomUJDxfz3rZTLqF5k/FCzuNdLx2RbpBiQQF9H9onlDDH1lZsnjg== - optionalDependencies: - "@esbuild/android-arm" "0.19.2" - "@esbuild/android-arm64" "0.19.2" - "@esbuild/android-x64" "0.19.2" - "@esbuild/darwin-arm64" "0.19.2" - "@esbuild/darwin-x64" "0.19.2" - "@esbuild/freebsd-arm64" "0.19.2" - "@esbuild/freebsd-x64" "0.19.2" - "@esbuild/linux-arm" "0.19.2" - "@esbuild/linux-arm64" "0.19.2" - "@esbuild/linux-ia32" "0.19.2" - "@esbuild/linux-loong64" "0.19.2" - "@esbuild/linux-mips64el" "0.19.2" - "@esbuild/linux-ppc64" "0.19.2" - "@esbuild/linux-riscv64" "0.19.2" - "@esbuild/linux-s390x" "0.19.2" - "@esbuild/linux-x64" "0.19.2" - "@esbuild/netbsd-x64" "0.19.2" - "@esbuild/openbsd-x64" "0.19.2" - "@esbuild/sunos-x64" "0.19.2" - "@esbuild/win32-arm64" "0.19.2" - "@esbuild/win32-ia32" "0.19.2" - "@esbuild/win32-x64" "0.19.2" - -esbuild@~0.17.6: - version "0.17.19" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" - integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== - optionalDependencies: - "@esbuild/android-arm" "0.17.19" - "@esbuild/android-arm64" "0.17.19" - "@esbuild/android-x64" "0.17.19" - "@esbuild/darwin-arm64" "0.17.19" - "@esbuild/darwin-x64" "0.17.19" - "@esbuild/freebsd-arm64" "0.17.19" - "@esbuild/freebsd-x64" "0.17.19" - "@esbuild/linux-arm" "0.17.19" - "@esbuild/linux-arm64" "0.17.19" - "@esbuild/linux-ia32" "0.17.19" - "@esbuild/linux-loong64" "0.17.19" - "@esbuild/linux-mips64el" "0.17.19" - "@esbuild/linux-ppc64" "0.17.19" - "@esbuild/linux-riscv64" "0.17.19" - "@esbuild/linux-s390x" "0.17.19" - "@esbuild/linux-x64" "0.17.19" - "@esbuild/netbsd-x64" "0.17.19" - "@esbuild/openbsd-x64" "0.17.19" - "@esbuild/sunos-x64" "0.17.19" - "@esbuild/win32-arm64" "0.17.19" - "@esbuild/win32-ia32" "0.17.19" - "@esbuild/win32-x64" "0.17.19" - -ext@^1.1.2: - version "1.7.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" - integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== - dependencies: - type "^2.7.2" - -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -get-tsconfig@^4.4.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.0.tgz#06ce112a1463e93196aa90320c35df5039147e34" - integrity sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw== - dependencies: - resolve-pkg-maps "^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== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -next-tick@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - -node-fetch@^2.6.12: - version "2.6.13" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.13.tgz#a20acbbec73c2e09f9007de5cda17104122e0010" - integrity sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA== - dependencies: - whatwg-url "^5.0.0" - -node-gyp-build@^4.3.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" - integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== - -resolve-pkg-maps@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" - integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== - -source-map-support@^0.5.21: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -tsx@^3.12.7: - version "3.12.7" - resolved "https://registry.yarnpkg.com/tsx/-/tsx-3.12.7.tgz#b3b8b0fc79afc8260d1e14f9e995616c859a91e9" - integrity sha512-C2Ip+jPmqKd1GWVQDvz/Eyc6QJbGfE7NrR3fx5BpEHMZsEHoIxHL1j+lKdGobr8ovEyqeNkPLSKp6SCSOt7gmw== - dependencies: - "@esbuild-kit/cjs-loader" "^2.4.2" - "@esbuild-kit/core-utils" "^3.0.0" - "@esbuild-kit/esm-loader" "^2.5.5" - optionalDependencies: - fsevents "~2.3.2" - -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" - integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typescript@^4.3.2: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -utf-8-validate@^5.0.2: - version "5.0.10" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" - integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== - dependencies: - node-gyp-build "^4.3.0" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -websocket@^1.0.34: - version "1.0.34" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" - integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== - dependencies: - bufferutil "^4.0.1" - debug "^2.2.0" - es5-ext "^0.10.50" - typedarray-to-buffer "^3.1.5" - utf-8-validate "^5.0.2" - yaeti "^0.0.6" - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.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" - -yaeti@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" - integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== diff --git a/netlify.toml b/netlify.toml index f77808e97..6539b6549 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,6 +1,15 @@ [Settings] ID = "d2668848-c2a6-411f-b884-004faee1942f" + [build] -functions = "./.netlify/functions" -# Specify is-core-module/package.json as an external dependency -ignore = "is-core-module/package.json" \ No newline at end of file + command = "echo \"export const COMMIT_HASH = '$COMMIT_REF';\" > src/commit-hash.ts && yarn build" + functions = "./.netlify/functions" + publish = "dist" + +[build.environment] + NODE_OPTIONS = "--enable-source-maps" + +[[headers]] + for = "*.js.map" + [headers.values] + Access-Control-Allow-Origin = "*" \ No newline at end of file diff --git a/package.json b/package.json index df2273710..b0674d1d5 100644 --- a/package.json +++ b/package.json @@ -11,83 +11,90 @@ "probot-app" ], "scripts": { - "build:ci": "ncc build src/adapters/github/github-actions.ts -o ./", - "build:serverless": "ncc build src/index.ts -o ./", + "inspect": "node --inspect node_modules/.bin/probot run ./dist/main.js", + "build:gh-actions": "ncc build src/adapters/github/github-actions.ts -o ./", "build": "tsc", - "postbuild": "copyfiles src/assets/images/* lib/", - "clean": "rimraf ./dist ./lib ./node_modules", - "format:check": "prettier -c src/**/*.ts", - "format": "prettier --write src", - "lint": "eslint --ext .ts ./src", - "start:serverless": "tsx src/adapters/github/github-actions.ts", + "build:watch": "tsc --watch", + "clean": "rimraf ./dist ./node_modules", + "preformat": "yarn format:prettier", + "format": "yarn format:eslint", + "postformat": "yarn format:cspell", + "format:prettier": "prettier --write src", + "format:eslint": "eslint --fix --ext .ts ./src", + "format:cspell": "cspell --config .cspell.json 'src/**/*.{js,ts,json,md,yml}'", + "start:gh-actions": "tsx src/adapters/github/github-actions.ts", "start:watch": "nodemon --exec 'yarn start'", - "utils:cspell": "cspell --config .cspell.json 'src/**/*.{js,ts,json,md,yml}'", - "start": "probot run ./lib/index.js", - "prepare": "husky install" + "start": "probot run ./dist/main.js", + "prepare": "husky install", + "test": "jest", + "logs:netlify": "yarn netlify logs:function webhooks" }, "dependencies": { - "@actions/core": "^1.10.0", "@commitlint/cli": "^17.4.3", "@commitlint/config-conventional": "^17.4.3", - "@netlify/functions": "^1.4.0", - "@probot/adapter-aws-lambda-serverless": "^3.0.2", + "@netlify/functions": "^2.4.0", + "@octokit/rest": "^20.0.2", + "@openzeppelin/contracts": "^5.0.0", "@probot/adapter-github-actions": "^3.1.3", - "@sinclair/typebox": "^0.31.5", + "@sinclair/typebox": "^0.31.22", "@supabase/supabase-js": "^2.4.0", "@types/ms": "^0.7.31", - "@types/parse5": "^7.0.0", "@typescript-eslint/eslint-plugin": "^5.59.11", "@typescript-eslint/parser": "^5.59.11", "@uniswap/permit2-sdk": "^1.2.0", "@vercel/ncc": "^0.34.0", - "ajv": "^8.11.2", + "ajv": "^8.12.0", "ajv-formats": "^2.1.1", "axios": "^1.3.2", - "copyfiles": "^2.4.1", "cspell": "^7.0.0", "decimal.js": "^10.4.3", "ethers": "^5.7.2", - "exponential-backoff": "^3.1.1", "husky": "^8.0.2", - "jimp": "^0.22.4", - "js-yaml": "^4.1.0", + "js-tiktoken": "^1.0.7", + "jsdom": "^22.1.0", "libsodium-wrappers": "^0.7.11", "lint-staged": "^13.1.0", "lodash": "^4.17.21", + "markdown-it": "^13.0.2", "ms": "^2.1.3", "node-html-parser": "^6.1.5", - "node-html-to-image": "^3.3.0", "nodemon": "^2.0.19", "openai": "^4.2.0", - "parse5": "^7.1.2", "prettier": "^2.7.1", "probot": "^12.2.4", + "smee-client": "^2.0.0", "tsx": "^3.12.7", - "yaml": "^2.2.2" + "ubiquibot-logger": "^0.3.5", + "yaml": "^2.2.2", + "zlib": "^1.0.5" }, "devDependencies": { + "@types/dotenv": "^8.2.0", "@types/eslint": "^8.40.2", - "@types/jest": "^28.1.0", + "@types/jest": "^29.5.11", + "@types/jsdom": "^21.1.4", "@types/libsodium-wrappers": "^0.7.10", - "@types/lodash": "^4.14.197", + "@types/lodash": "^4.14.202", + "@types/markdown-it": "^13.0.4", "@types/node": "^14.18.37", "@types/source-map-support": "^0.5.6", "eslint": "^8.43.0", - "jest": "^26.6.3", - "nock": "^13.0.5", + "jest": "^29.7.0", + "knip": "^2.33.4", + "netlify-cli": "^17.10.1", + "octokit": "^3.1.2", "rimraf": "3.0.2", - "smee-client": "^1.2.2", "source-map-support": "^0.5.21", - "supabase": "^1.38.1", - "ts-jest": "^26.4.4", + "ts-jest": "^29.1.1", "typescript": "^4.9.5" }, "engines": { - "node": ">=18" + "node": ">=20.10.0" }, "lint-staged": { - "*.{ts,json}": [ - "prettier --write" + "*.ts": [ + "prettier --write", + "eslint --fix" ], "src/**.{ts,json}": [ "cspell" @@ -104,5 +111,6 @@ "verbose": true, "ext": "ts", "exec": "yarn start" - } + }, + "packageManager": "yarn@4.0.2" } diff --git a/src/adapters/adapters.ts b/src/adapters/adapters.ts new file mode 100644 index 000000000..a0ccb9592 --- /dev/null +++ b/src/adapters/adapters.ts @@ -0,0 +1,32 @@ +import { createClient } from "@supabase/supabase-js"; +import { Access } from "./supabase/helpers/tables/access"; +import { Label } from "./supabase/helpers/tables/label"; +import { Locations } from "./supabase/helpers/tables/locations"; +import { Logs } from "ubiquibot-logger"; +import { Settlement } from "./supabase/helpers/tables/settlement"; +import { Super } from "./supabase/helpers/tables/super"; +import { User } from "./supabase/helpers/tables/user"; +import { Wallet } from "./supabase/helpers/tables/wallet"; + +import { env } from "../bindings/env"; +import { Database } from "./supabase/types/database"; + +export const supabaseClient = createClient(env.SUPABASE_URL, env.SUPABASE_KEY, { + auth: { persistSession: false }, +}); + +export function createAdapters() { + return { + supabase: { + access: new Access(supabaseClient), + wallet: new Wallet(supabaseClient), + user: new User(supabaseClient), + debit: new Settlement(supabaseClient), + settlement: new Settlement(supabaseClient), + label: new Label(supabaseClient), + logs: new Logs(supabaseClient, env.LOG_RETRY_LIMIT, env.LOG_LEVEL, null), + locations: new Locations(supabaseClient), + super: new Super(supabaseClient), + }, + }; +} diff --git a/src/adapters/github/github-actions.ts b/src/adapters/github/github-actions.ts index 6ec7c72a4..a6e74c779 100644 --- a/src/adapters/github/github-actions.ts +++ b/src/adapters/github/github-actions.ts @@ -1,5 +1,5 @@ import probot from "@probot/adapter-github-actions"; -import main from "../../index"; +import main from "../../main"; probot.run(main).catch((error: Error) => { console.error(`Error happening... name: ${error.name}, message: ${error.message}`); diff --git a/src/adapters/index.ts b/src/adapters/index.ts deleted file mode 100644 index 344133043..000000000 --- a/src/adapters/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { BotConfig } from "../types"; -import { Adapters } from "../types/adapters"; -import { supabase } from "./supabase"; - -export const createAdapters = (config: BotConfig): Adapters => { - return { - supabase: supabase(config?.supabase?.url ?? process.env.SUPABASE_URL, config?.supabase?.key ?? process.env.SUPABASE_KEY), - }; -}; diff --git a/src/adapters/supabase/helpers/client.ts b/src/adapters/supabase/helpers/client.ts index 642c3a0b9..a23e54cae 100644 --- a/src/adapters/supabase/helpers/client.ts +++ b/src/adapters/supabase/helpers/client.ts @@ -1,523 +1,11 @@ -import { createClient, SupabaseClient } from "@supabase/supabase-js"; -import { getAdapters, getLogger } from "../../../bindings"; -import { Issue, UserProfile } from "../../../types"; -import { Database } from "../types"; -import { InsertPermit, Permit } from "../../../helpers"; -import { BigNumber, BigNumberish } from "ethers"; +import { Database } from "../types/database"; -interface AccessLevels { - multiplier: boolean; - price: boolean; - priority: boolean; - time: boolean; -} - -/** - * @dev Creates a typescript client which will be used to interact with supabase platform - * - * @param url - The supabase project url - * @param key - The supabase project key - * @returns - The supabase client - */ -export const supabase = (url: string, key: string): SupabaseClient => { - return createClient(url, key, { auth: { persistSession: false } }); -}; - -/** - * @dev Gets the maximum issue number stored in `issues` table - */ -export const getMaxIssueNumber = async (): Promise => { - const { supabase } = getAdapters(); - - const { data } = await supabase.from("issues").select("issue_number").order("issue_number", { ascending: false }).limit(1).single(); - if (data) { - return Number(data.issue_number); - } else { - return 0; - } -}; - -/** - * @dev Gets the last weekly update timestamp - */ -export const getLastWeeklyTime = async (): Promise => { - const { supabase } = getAdapters(); - - const { data } = await supabase.from("weekly").select("last_time").limit(1).single(); - if (data) { - return new Date(data.last_time); - } else { - return undefined; - } -}; - -/** - * @dev Updates the last weekly update timestamp - */ -export const updateLastWeeklyTime = async (time: Date): Promise => { - const logger = getLogger(); - const { supabase } = getAdapters(); - - const { data, error } = await supabase.from("weekly").select("last_time"); - if (error) { - logger.error(`Checking last time failed, error: ${JSON.stringify(error)}`); - throw new Error(`Checking last time failed, error: ${JSON.stringify(error)}`); - } - - if (data && data.length > 0) { - const { data, error } = await supabase.from("weekly").update({ last_time: time.toUTCString() }).neq("last_time", time.toUTCString()); - if (error) { - logger.error(`Updating last time failed, error: ${JSON.stringify(error)}`); - throw new Error(`Updating last time failed, error: ${JSON.stringify(error)}`); - } - logger.info(`Updating last time is done, data: ${data}`); - } else { - const { data, error } = await supabase.from("weekly").insert({ last_time: time.toUTCString() }); - if (error) { - logger.error(`Creating last time failed, error: ${JSON.stringify(error)}`); - throw new Error(`Creating last time failed, error: ${JSON.stringify(error)}`); - } - logger.info(`Creating last time is done, data: ${data}`); - } - return; -}; - -export type IssueAdditions = { - labels: { - timeline: string; - priority: string; - price: string; - }; - - started_at?: number; - completed_at?: number; -}; - -const getDbDataFromIssue = (issue: Issue, additions: IssueAdditions) => { - return { - issue_number: issue.number, - issue_url: issue.html_url, - comments_url: issue.comments_url, - events_url: issue.events_url, - labels: issue.labels.map((issue) => issue.name), - assignees: issue.assignees ? issue.assignees.map((assignee) => assignee.login) : [], - timeline: additions.labels.timeline, - priority: additions.labels.priority, - price: additions.labels.price, - started_at: additions.started_at, - completed_at: additions.completed_at, - closed_at: issue.closed_at, - created_at: issue.created_at, - updated_at: issue.updated_at, - }; -}; - -export type UserProfileAdditions = { - wallet_address?: string; -}; -const getDbDataFromUserProfile = (userProfile: UserProfile, additions?: UserProfileAdditions) => { - return { - user_login: userProfile.login, - user_type: userProfile.type, - user_name: userProfile.name ?? userProfile.login, - company: userProfile.company, - blog: userProfile.blog, - user_location: userProfile.location, - email: userProfile.email, - bio: userProfile.bio, - twitter_username: userProfile.twitter_username, - public_repos: userProfile.public_repos, - followers: userProfile.followers, - following: userProfile.following, - wallet_address: additions?.wallet_address, - created_at: userProfile.created_at, - updated_at: userProfile.updated_at, - }; -}; -/** - * Performs an UPSERT on the issues table. - * @param issue The issue entity fetched from github event. - */ -export const upsertIssue = async (issue: Issue, additions: IssueAdditions): Promise => { - const logger = getLogger(); - const { supabase } = getAdapters(); - const { data, error } = await supabase.from("issues").select("id").eq("issue_number", issue.number); - if (error) { - logger.error(`Checking issue failed, error: ${JSON.stringify(error)}`); - throw new Error(`Checking issue failed, error: ${JSON.stringify(error)}`); - } - - if (data && data.length > 0) { - const key = data[0].id as number; - const { data: _data, error: _error } = await supabase - .from("issues") - .upsert({ id: key, ...getDbDataFromIssue(issue, additions) }) - .select(); - if (_error) { - logger.error(`Upserting an issue failed, error: ${JSON.stringify(_error)}`); - throw new Error(`Upserting an issue failed, error: ${JSON.stringify(_error)}`); - } - logger.info(`Upserting an issue done, { data: ${_data}, error: ${_error}`); - } else { - const { data: _data, error: _error } = await supabase.from("issues").insert(getDbDataFromIssue(issue, additions)); - if (_error) { - logger.error(`Creating a new issue record failed, error: ${JSON.stringify(_error)}`); - throw new Error(`Creating a new issue record failed, error: ${JSON.stringify(_error)}`); - } - logger.info(`Creating a new issue record done, { data: ${_data}, error: ${_error}`); - } -}; - -/** - * Performs an UPSERT on the users table. - * @param user The user entity fetched from github event. - */ -export const upsertUser = async (user: UserProfile): Promise => { - const logger = getLogger(); - const { supabase } = getAdapters(); - const { data, error } = await supabase.from("users").select("user_login").eq("user_login", user.login); - if (error) { - logger.error(`Checking user failed, error: ${JSON.stringify(error)}`); - throw new Error(`Checking user failed, error: ${JSON.stringify(error)}`); - } - - if (data && data.length > 0) { - const { data: _data, error: _error } = await supabase.from("users").upsert(getDbDataFromUserProfile(user)).select(); - if (_error) { - logger.error(`Upserting a user failed, error: ${JSON.stringify(_error)}`); - throw new Error(`Upserting a user failed, error: ${JSON.stringify(_error)}`); - } - logger.info(`Upserting a user done, { data: ${JSON.stringify(_data)} }`); - } else { - const { data: _data, error: _error } = await supabase.from("users").insert(getDbDataFromUserProfile(user)); - if (_error) { - logger.error(`Creating a new user record failed, error: ${JSON.stringify(_error)}`); - throw new Error(`Creating a new user record failed, error: ${JSON.stringify(_error)}`); - } - logger.info(`Creating a new user record done, { data: ${JSON.stringify(_data)} }`); - } -}; - -/** - * Performs an UPSERT on the wallet table. - * @param username The user name you want to upsert a wallet address for - * @param address The account address - */ -export const upsertWalletAddress = async (username: string, address: string): Promise => { - const logger = getLogger(); - const { supabase } = getAdapters(); - - const { data, error } = await supabase.from("wallets").select("user_name").eq("user_name", username); - if (error) { - logger.error(`Checking wallet address failed, error: ${JSON.stringify(error)}`); - throw new Error(`Checking wallet address failed, error: ${JSON.stringify(error)}`); - } - - if (data && data.length > 0) { - const { data: _data, error: _error } = await supabase.from("wallets").upsert({ - user_name: username, - wallet_address: address, - updated_at: new Date().toUTCString(), - }); - if (_error) { - logger.error(`Upserting a wallet address failed, error: ${JSON.stringify(_error)}`); - throw new Error(`Upserting a wallet address failed, error: ${JSON.stringify(_error)}`); - } - logger.info(`Upserting a wallet address done, { data: ${JSON.stringify(_data)} }`); - } else { - const { error } = await supabase.from("wallets").insert({ - user_name: username, - wallet_address: address, - created_at: new Date().toUTCString(), - updated_at: new Date().toUTCString(), - }); - if (error) { - logger.error(`Creating a new wallet_table record failed, error: ${JSON.stringify(error)}`); - throw new Error(`Creating a new wallet_table record failed, error: ${JSON.stringify(error)}`); - } - logger.info(`Creating a new wallet_table record done, { data: ${JSON.stringify(data)}, address: $address }`); - } -}; - -/** - * Performs an UPSERT on the multiplier table. - * @param username The user name you want to upsert a wallet address for - * @param address The account multiplier - */ -export const upsertWalletMultiplier = async (username: string, multiplier: string, reason: string, org_id: string): Promise => { - const logger = getLogger(); - const { supabase } = getAdapters(); - - const { data, error } = await supabase.from("multiplier").select("user_id").eq("user_id", `${username}_${org_id}`); - if (error) { - logger.error(`Checking wallet multiplier failed, error: ${JSON.stringify(error)}`); - throw new Error(`Checking wallet multiplier failed, error: ${JSON.stringify(error)}`); - } - - if (data && data.length > 0) { - const { data: _data, error: _error } = await supabase.from("multiplier").upsert({ - user_id: `${username}_${org_id}`, - value: multiplier, - reason, - updated_at: new Date().toUTCString(), - }); - if (_error) { - logger.error(`Upserting a wallet multiplier failed, error: ${JSON.stringify(_error)}`); - throw new Error(`Upserting a wallet multiplier failed, error: ${JSON.stringify(_error)}`); - } - logger.info(`Upserting a wallet multiplier done, { data: ${JSON.stringify(_data)} }`); - } else { - const { data: _data, error: _error } = await supabase.from("multiplier").insert({ - user_id: `${username}_${org_id}`, - value: multiplier, - reason, - created_at: new Date().toUTCString(), - updated_at: new Date().toUTCString(), - }); - if (_error) { - logger.error(`Creating a new multiplier record failed, error: ${JSON.stringify(_error)}`); - throw new Error(`Creating a new multiplier record failed, error: ${JSON.stringify(_error)}`); - } - logger.info(`Creating a new multiplier record done, { data: ${JSON.stringify(_data)} }`); - } -}; - -/** - * Performs an UPSERT on the access table. - * @param username The user name you want to upsert a wallet address for - * @param repository The repository for access - * @param access Access granting - * @param bool Disabling or enabling - */ -export const upsertAccessControl = async (username: string, repository: string, access: string, bool: boolean): Promise => { - const logger = getLogger(); - const { supabase } = getAdapters(); - - const { data, error } = await supabase.from("access").select("user_name").eq("user_name", username).eq("repository", repository); - if (error) { - logger.error(`Checking access control failed, error: ${JSON.stringify(error)}`); - throw new Error(`Checking access control failed, error: ${JSON.stringify(error)}`); - } - - const properties = { - user_name: username, - repository: repository, - updated_at: new Date().toUTCString(), - [access]: bool, - }; - - if (data && data.length > 0) { - const { data: _data, error: _error } = await supabase.from("access").upsert(properties); - if (_error) { - logger.error(`Upserting a access control failed, error: ${JSON.stringify(_error)}`); - throw new Error(`Upserting a access control failed, error: ${JSON.stringify(_error)}`); - } - logger.info(`Upserting a access control done, { data: ${JSON.stringify(_data)} }`); - } else { - const { data: _data, error: _error } = await supabase.from("access").insert({ - created_at: new Date().toUTCString(), - price_access: false, - time_access: true, - multiplier_access: false, - priority_access: false, - ...properties, - }); - if (_error) { - logger.error(`Creating a new access control record failed, error: ${JSON.stringify(_error)}`); - throw new Error(`Creating a new access control record failed, error: ${JSON.stringify(_error)}`); - } - logger.info(`Creating a new access control record done, { data: ${JSON.stringify(_data)} }`); - } -}; - -export const getAccessLevel = async (username: string, repository: string, label_type: string): Promise => { - const logger = getLogger(); - const { supabase } = getAdapters(); - - const { data } = await supabase.from("access").select("*").eq("user_name", username).eq("repository", repository).single(); - - if (!data || !data[`${label_type}_access`]) { - logger.info(`Access not found on the database`); - // no access - return false; - } - - const accessValues = data[`${label_type}_access`]; - - return accessValues; -}; - -export const getAllAccessLevels = async (username: string, repository: string): Promise => { - const logger = getLogger(); - const { supabase } = getAdapters(); - - const { data } = await supabase.from("access").select("*").eq("user_name", username).eq("repository", repository).single(); - - if (!data) { - logger.info(`Access not found on the database`); - // no access - return null; - } - return { multiplier: data.multiplier_access, time: data.time_access, priority: data.priority_access, price: data.price_access }; -}; - -/** - * Queries the wallet address registered previously - * - * @param username The username you want to find an address for - * @returns The ERC20 address - */ -export const getWalletAddress = async (username: string): Promise => { - const { supabase } = getAdapters(); - - const { data } = await supabase.from("wallets").select("wallet_address").eq("user_name", username).single(); - return data?.wallet_address; -}; - -/** - * Queries the wallet multiplier registered previously - * - * @param username The username you want to find an address for - * @returns The Multiplier, returns 1 if not found - * - */ - -export const getWalletMultiplier = async (username: string, org_id: string): Promise<{ value: number; reason: string }> => { - const { supabase } = getAdapters(); - - const { data } = await supabase.from("multiplier").select("value, reason").eq("user_id", `${username}_${org_id}`).single(); - if (data?.value == null) return { value: 1, reason: "" }; - else return { value: data?.value, reason: data?.reason }; -}; - -/** - * Queries both the wallet multiplier and address in one request registered previously - * - * @param username The username you want to find an address for - * @returns The Multiplier and ERC-20 Address, returns 1 if not found - * - */ - -export const getWalletInfo = async (username: string, org_id: string): Promise<{ multiplier: number | null; address: string | null }> => { - const { supabase } = getAdapters(); - - const { data: wallet } = await supabase.from("wallets").select("wallet_address").eq("user_name", username).single(); - const { data: multiplier } = await supabase.from("multiplier").select("value").eq("user_id", `${username}_${org_id}`).single(); - if (multiplier?.value == null) { - return { multiplier: 1, address: wallet?.wallet_address || "" }; - } else return { multiplier: multiplier?.value, address: wallet?.wallet_address }; -}; - -export const addPenalty = async (username: string, repoName: string, tokenAddress: string, evmNetworkId: string, penalty: BigNumberish): Promise => { - const { supabase } = getAdapters(); - const logger = getLogger(); - - const { error } = await supabase.rpc("add_penalty", { - _username: username, - _repository_name: repoName, - _token_address: tokenAddress, - _network_id: evmNetworkId, - _penalty_amount: penalty.toString(), - }); - logger.debug(`Adding penalty done, { data: ${JSON.stringify(error)}, error: ${JSON.stringify(error)} }`); - - if (error) { - throw new Error(`Error adding penalty: ${error.message}`); - } -}; - -export const getPenalty = async (username: string, repoName: string, tokenAddress: string, evmNetworkId: string): Promise => { - const { supabase } = getAdapters(); - const logger = getLogger(); - - const { data, error } = await supabase - .from("penalty") - .select("amount") - .eq("username", username) - .eq("repository_name", repoName) - .eq("evm_network_id", evmNetworkId) - .eq("token_address", tokenAddress); - logger.debug(`Getting penalty done, { data: ${JSON.stringify(error)}, error: ${JSON.stringify(error)} }`); - - if (error) { - throw new Error(`Error getting penalty: ${error.message}`); - } - - if (data.length === 0) { - return BigNumber.from(0); - } - return BigNumber.from(data[0].amount); +export type GitHubNode = { + // will leave support for id and type until more research is completed to confirm that it can be removed + node_id?: string; + node_type?: GitHubNodeType; + // use HTML URL so that administrators can easily audit the location of the node + node_url: string; }; -export const removePenalty = async (username: string, repoName: string, tokenAddress: string, evmNetworkId: string, penalty: BigNumberish): Promise => { - const { supabase } = getAdapters(); - const logger = getLogger(); - - const { error } = await supabase.rpc("remove_penalty", { - _username: username, - _repository_name: repoName, - _network_id: evmNetworkId, - _token_address: tokenAddress, - _penalty_amount: penalty.toString(), - }); - logger.debug(`Removing penalty done, { data: ${JSON.stringify(error)}, error: ${JSON.stringify(error)} }`); - - if (error) { - throw new Error(`Error removing penalty: ${error.message}`); - } -}; - -const getDbDataFromPermit = (permit: InsertPermit): Record => { - return { - organization_id: permit.organizationId, - repository_id: permit.repositoryId, - issue_id: permit.issueId, - evm_network_id: permit.evmNetworkId, - contributor_id: permit.contributorId, - token_address: permit.tokenAddress, - payout_amount: permit.payoutAmount, - contributor_wallet: permit.contributorWallet, - nonce: permit.nonce, - deadline: permit.deadline, - signature: permit.signature, - partner_wallet: permit.partnerWallet, - }; -}; - -const getPermitFromDbData = (data: Record): Permit => { - return { - id: data.id, - createdAt: new Date(Date.parse(data.created_at as string)), - organizationId: data.organization_id, - repositoryId: data.repository_i, - issueId: data.issue_id, - evmNetworkId: data.evm_network_id, - contributorId: data.contributor_id, - tokenAddress: data.token_address, - payoutAmount: data.payout_amount, - contributorWallet: data.contributor_wallet, - nonce: data.nonce, - deadline: data.deadline, - signature: data.signature, - partnerWallet: data.partner_wallet, - } as Permit; -}; - -export const savePermit = async (permit: InsertPermit): Promise => { - const { supabase } = getAdapters(); - const { data, error } = await supabase - .from("permits") - .insert({ - ...getDbDataFromPermit(permit), - created_at: new Date().toISOString(), - id: undefined, // id is auto-generated - }) - .select(); - if (error) { - throw new Error(error.message); - } - if (!data || data.length === 0) { - throw new Error("No data returned"); - } - return getPermitFromDbData(data[0]); -}; +type GitHubNodeType = Database["public"]["Enums"]["github_node_type"]; // Manually searched for every type that supports `url` diff --git a/src/adapters/supabase/helpers/index.ts b/src/adapters/supabase/helpers/index.ts deleted file mode 100644 index 3bb7e5e98..000000000 --- a/src/adapters/supabase/helpers/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./client"; -export * from "./log"; diff --git a/src/adapters/supabase/helpers/log.ts b/src/adapters/supabase/helpers/log.ts deleted file mode 100644 index 51a16f5b2..000000000 --- a/src/adapters/supabase/helpers/log.ts +++ /dev/null @@ -1,204 +0,0 @@ -import { getAdapters, getBotContext, Logger } from "../../../bindings"; -import { Payload, LogLevel } from "../../../types"; -import { getOrgAndRepoFromPath } from "../../../utils/private"; - -interface Log { - repo: string | null; - org: string | null; - commentId: number | undefined; - issueNumber: number | undefined; - logMessage: string; - level: LogLevel; - timestamp: string; -} - -export const getNumericLevel = (level: LogLevel) => { - switch (level) { - case LogLevel.ERROR: - return 0; - case LogLevel.WARN: - return 1; - case LogLevel.INFO: - return 2; - case LogLevel.HTTP: - return 3; - case LogLevel.VERBOSE: - return 4; - case LogLevel.DEBUG: - return 5; - case LogLevel.SILLY: - return 6; - default: - return -1; // Invalid level - } -}; - -export class GitHubLogger implements Logger { - private supabase; - private maxLevel; - private app; - private logEnvironment; - private logQueue: Log[] = []; // Your log queue - private maxConcurrency = 6; // Maximum concurrent requests - private retryDelay = 1000; // Delay between retries in milliseconds - private throttleCount = 0; - private retryLimit = 0; // Retries disabled by default - - constructor(app: string, logEnvironment: string, maxLevel: LogLevel, retryLimit: number) { - this.app = app; - this.logEnvironment = logEnvironment; - this.maxLevel = getNumericLevel(maxLevel); - this.retryLimit = retryLimit; - this.supabase = getAdapters().supabase; - } - - async sendLogsToSupabase({ repo, org, commentId, issueNumber, logMessage, level, timestamp }: Log) { - const { error } = await this.supabase.from("logs").insert([ - { - repo_name: repo, - level: getNumericLevel(level), - org_name: org, - comment_id: commentId, - log_message: logMessage, - issue_number: issueNumber, - timestamp, - }, - ]); - - if (error) { - console.error("Error logging to Supabase:", error.message); - return; - } - } - - async processLogs(log: Log) { - try { - await this.sendLogsToSupabase(log); - } catch (error) { - console.error("Error sending log, retrying:", error); - return this.retryLimit > 0 ? await this.retryLog(log) : null; - } - } - - async retryLog(log: Log, retryCount = 0) { - if (retryCount >= this.retryLimit) { - console.error("Max retry limit reached for log:", log); - return; - } - - await new Promise((resolve) => setTimeout(resolve, this.retryDelay)); - - try { - await this.sendLogsToSupabase(log); - } catch (error) { - console.error("Error sending log (after retry):", error); - await this.retryLog(log, retryCount + 1); - } - } - - async processLogQueue() { - while (this.logQueue.length > 0) { - const log = this.logQueue.shift(); - if (!log) { - continue; - } - await this.processLogs(log); - } - } - - async throttle() { - if (this.throttleCount >= this.maxConcurrency) { - return; - } - - this.throttleCount++; - try { - await this.processLogQueue(); - } finally { - this.throttleCount--; - if (this.logQueue.length > 0) { - await this.throttle(); - } - } - } - - async addToQueue(log: Log) { - this.logQueue.push(log); - if (this.throttleCount < this.maxConcurrency) { - await this.throttle(); - } - } - - private save(logMessage: string | object, level: LogLevel, errorPayload?: string | object) { - if (getNumericLevel(level) > this.maxLevel) return; // only return errors lower than max level - - const context = getBotContext(); - const payload = context.payload as Payload; - const timestamp = new Date().toUTCString(); - - const { comment, issue, repository } = payload; - const commentId = comment?.id; - const issueNumber = issue?.number; - const repoFullName = repository?.full_name; - - const { org, repo } = getOrgAndRepoFromPath(repoFullName); - - if (!logMessage) return; - - if (typeof logMessage === "object") { - // pass log as json stringified - logMessage = JSON.stringify(logMessage); - } - - this.addToQueue({ repo, org, commentId, issueNumber, logMessage, level, timestamp }) - .then(() => { - return; - }) - .catch(() => { - console.log("Error adding logs to queue"); - }); - - if (this.logEnvironment === "development") { - console.log(this.app, logMessage, errorPayload, level, repo, org, commentId, issueNumber); - } - } - - info(message: string | object, errorPayload?: string | object) { - this.save(message, LogLevel.INFO, errorPayload); - } - - warn(message: string | object, errorPayload?: string | object) { - this.save(message, LogLevel.WARN, errorPayload); - } - - debug(message: string | object, errorPayload?: string | object) { - this.save(message, LogLevel.DEBUG, errorPayload); - } - - error(message: string | object, errorPayload?: string | object) { - this.save(message, LogLevel.ERROR, errorPayload); - } - - async get() { - try { - const { data, error } = await this.supabase.from("logs").select("*"); - - if (error) { - console.error("Error retrieving logs from Supabase:", error.message); - return []; - } - - return data; - } catch (error) { - if (error instanceof Error) { - // 👉️ err is type Error here - console.error("An error occurred:", error.message); - - return; - } - - console.log("Unexpected error", error); - return []; - } - } -} diff --git a/src/adapters/supabase/helpers/tables/access.ts b/src/adapters/supabase/helpers/tables/access.ts new file mode 100644 index 000000000..3bd7fc630 --- /dev/null +++ b/src/adapters/supabase/helpers/tables/access.ts @@ -0,0 +1,74 @@ +import { SupabaseClient } from "@supabase/supabase-js"; +import { GitHubComment } from "../../../../types/payload"; +import { Database } from "../../types/database"; +import { GitHubNode } from "../client"; +import { Super } from "./super"; +import { UserRow } from "./user"; +type AccessRow = Database["public"]["Tables"]["access"]["Row"]; +type AccessInsert = Database["public"]["Tables"]["access"]["Insert"]; +type UserWithAccess = (UserRow & { access: AccessRow | null })[]; + +type AccessData = { + user_id: number; + multiplier: number; + multiplier_reason: string; + node_id: string; + node_type: string; + node_url: string; +}; + +export class Access extends Super { + constructor(supabase: SupabaseClient) { + super(supabase); + } + + private async _getUserWithAccess(id: number): Promise { + const { data, error } = await this.supabase.from("access").select("*, users(*)").filter("id", "eq", id); + + if (error) { + this.runtime.logger.fatal(error.message, error); + throw new Error(error.message); + } + return data; + } + + public async getAccess(id: number): Promise { + const userWithAccess = await this._getUserWithAccess(id); + if (userWithAccess[0]?.access === undefined) { + this.runtime.logger.debug("Access is undefined"); + return null; + } + if (userWithAccess[0]?.access === null) throw new Error("Access is null"); + return userWithAccess[0].access; + } + + public async setAccess(labels: string[], node: GitHubNode, userId?: number): Promise { + const { data, error } = await this.supabase.from("access").upsert({ + labels: labels, + ...node, + user_id: userId, + } as AccessInsert); + if (error) throw new Error(error.message); + return data; + } + + async upsertMultiplier(userId: number, multiplier: number, reason: string, comment: GitHubComment) { + try { + const accessData: AccessData = { + user_id: userId, + multiplier: multiplier, + multiplier_reason: reason, + node_id: comment.node_id, + node_type: "IssueComment", + node_url: comment.html_url, + }; + + const { data, error } = await this.supabase.from("access").upsert(accessData, { onConflict: "location_id" }); + + if (error) throw new Error(error.message); + if (!data) throw new Error("Multiplier not upserted"); + } catch (error) { + console.error("An error occurred while upserting multiplier:", error); + } + } +} diff --git a/src/adapters/supabase/helpers/tables/label.ts b/src/adapters/supabase/helpers/tables/label.ts new file mode 100644 index 000000000..414d6057a --- /dev/null +++ b/src/adapters/supabase/helpers/tables/label.ts @@ -0,0 +1,85 @@ +import { SupabaseClient } from "@supabase/supabase-js"; +import { GitHubRepository } from "../../../../types/payload"; + +import Runtime from "../../../../bindings/bot-runtime"; +import { Database } from "../../types/database"; +import { Super } from "./super"; + +type LabelRow = Database["public"]["Tables"]["labels"]["Row"]; + +export class Label extends Super { + constructor(supabase: SupabaseClient) { + super(supabase); + } + + async saveLabelChange({ + previousLabel, + currentLabel, + authorized, + repository, + }: { + previousLabel: string; + currentLabel: string; + authorized: boolean; + repository: GitHubRepository; + }): Promise { + const { data, error } = await this.supabase.from("labels").insert({ + label_from: previousLabel, + label_to: currentLabel, + authorized: authorized, + node_id: repository.node_id, + node_type: "Repository", + node_url: repository.html_url, + }); + + if (error) throw new Error(error.message); + return data; + } + + async getLabelChanges(repositoryNodeId: string) { + const locationId = await this._getRepositoryLocationId(repositoryNodeId); + if (!locationId) { + return null; + } + const unauthorizedLabelChanges = await this._getUnauthorizedLabelChanges(locationId); + return unauthorizedLabelChanges; + } + + async approveLabelChange(id: number): Promise { + const { data, error } = await this.supabase.from("labels").update({ authorized: true }).eq("id", id); + if (error) throw new Error(error.message); + return data; + } + + private async _getUnauthorizedLabelChanges(locationId: number): Promise { + // Get label changes that are not authorized in the repository + const { data, error } = await this.supabase + .from("labels") + .select("*") + .eq("location_id", locationId) + .eq("authorized", false); + + if (error) throw new Error(error.message); + + return data; + } + + private async _getRepositoryLocationId(nodeId: string) { + const runtime = Runtime.getState(); + // Get the location_id for the repository from the locations table + const { data: locationData, error: locationError } = await this.supabase + .from("locations") + .select("id") + .eq("node_id", nodeId) + .maybeSingle(); + + if (locationError) throw new Error(locationError.message); + if (!locationData) { + runtime.logger.error("Repository location ID not found in database."); + return null; + } + + const locationId = locationData.id; + return locationId; + } +} diff --git a/src/adapters/supabase/helpers/tables/locations.ts b/src/adapters/supabase/helpers/tables/locations.ts new file mode 100644 index 000000000..5d404af5e --- /dev/null +++ b/src/adapters/supabase/helpers/tables/locations.ts @@ -0,0 +1,56 @@ +import { SupabaseClient } from "@supabase/supabase-js"; +import { Super } from "./super"; +// import { Database } from "../../types/database"; + +// currently trying to save all of the location metadata of the event. +// seems that focusing on the IssueComments will provide the most value + +// type LocationsRow = Database["public"]["Tables"]["logs"]["Row"]; +export class Locations extends Super { + locationResponse: LocationResponse | undefined; + + user_id: string | undefined; + comment_id: string | undefined; + issue_id: string | undefined; + repository_id: string | undefined; + node_id: string | undefined; + node_type: string | undefined; + + constructor(supabase: SupabaseClient) { + super(supabase); + } + + public async getLocationsFromRepo(repositoryId: number) { + const { data: locationData, error } = await this.supabase + .from("locations") + .select("id") + .eq("repository_id", repositoryId); + + if (error) throw this.runtime.logger.fatal("Error getting location data", new Error(error.message)); + return locationData; + } +} + +interface LocationResponse { + data: { + node: { + id: "IC_kwDOH92Z-c5oA5cs"; + author: { + login: "molecula451"; + id: "MDQ6VXNlcjQxNTUyNjYz"; + }; + issue: { + id: "I_kwDOH92Z-c5yRpyq"; + number: 846; + repository: { + id: "R_kgDOH92Z-Q"; + name: "ubiquibot"; + owner: { + id: "MDEyOk9yZ2FuaXphdGlvbjc2NDEyNzE3"; + login: "ubiquity"; + }; + }; + }; + }; + }; +} diff --git a/src/adapters/supabase/helpers/tables/settlement.ts b/src/adapters/supabase/helpers/tables/settlement.ts new file mode 100644 index 000000000..9e7abf8f2 --- /dev/null +++ b/src/adapters/supabase/helpers/tables/settlement.ts @@ -0,0 +1,175 @@ +import { SupabaseClient } from "@supabase/supabase-js"; +import Decimal from "decimal.js"; +import { GitHubComment, GitHubPayload } from "../../../../types/payload"; +import { Database } from "../../types/database"; +import { Super } from "./super"; + +interface PermitTransactionData { + permit: { + permitted: { + token: string; + amount: string; + }; + nonce: string; + deadline: string; + }; + transferDetails: { + to: string; + requestedAmount: string; + }; + owner: string; + signature: string; +} + +type DebitInsert = Database["public"]["Tables"]["debits"]["Insert"]; +type CreditInsert = Database["public"]["Tables"]["credits"]["Insert"]; +type PermitInsert = Database["public"]["Tables"]["permits"]["Insert"]; +type SettlementInsert = Database["public"]["Tables"]["settlements"]["Insert"]; +type AddDebit = { + userId: number; + amount: Decimal; + // comment: Comment; + networkId: number; + address: string; +}; +type AddCreditWithPermit = { + userId: number; + amount: Decimal; + comment: GitHubComment; + transactionData?: PermitTransactionData; + networkId?: number; + organization?: GitHubPayload["organization"]; +}; + +export class Settlement extends Super { + constructor(supabase: SupabaseClient) { + super(supabase); + } + + private async _lookupTokenId(networkId: number, address: string): Promise { + const { data: tokenData, error: tokenError } = await this.supabase + .from("tokens") + .select("id") + .eq("network", networkId) + .eq("address", address) + .maybeSingle(); + + if (tokenError) throw new Error(tokenError.message); + if (!tokenData) throw new Error("Token not found"); + + return tokenData.id; + } + + public async addDebit({ userId, amount, networkId, address }: AddDebit) { + // Lookup the tokenId + const tokenId = await this._lookupTokenId(networkId, address); + + // Insert into the debits table + const debitData: DebitInsert = { + amount: amount.toNumber(), + // node_id: comment.node_id, + // node_type: "IssueComment", + // node_url: comment.html_url, + token_id: tokenId, + }; + + const { data: debitInsertData, error: debitError } = await this.supabase + .from("debits") + .insert(debitData) + .select() + .maybeSingle(); + + if (debitError) throw new Error(debitError.message); + if (!debitInsertData) throw new Error("Debit not inserted"); + + // Insert into the settlements table + const settlementData: SettlementInsert = { + id: debitInsertData.id, + debit_id: debitInsertData.id, + user_id: userId, + location_id: debitInsertData.location_id, // Should be updated by trigger + }; + + const { data: settlementInsertData, error: settlementError } = await this.supabase + .from("settlements") + .insert(settlementData) + .select() + .maybeSingle(); + + if (settlementError) throw new Error(settlementError.message); + if (!settlementInsertData) throw new Error("Settlement not inserted"); + } + + public async addCredit({ + userId, + amount, + // comment, + transactionData, + networkId, + organization, + }: AddCreditWithPermit) { + // Insert into the credits table + const creditData: CreditInsert = { + amount: amount.toNumber(), + }; + + const { data: creditInsertData, error: creditError } = await this.supabase + .from("credits") + .insert(creditData) + .select() + .maybeSingle(); + + if (creditError) throw new Error(creditError.message); + if (!creditInsertData) throw new Error("Credit not inserted"); + + // Insert into the permits table if permit data is provided + let permitInsertData; + if (transactionData) { + if (!organization) throw new Error("Organization not provided"); + if (!networkId) throw new Error("Network ID not provided"); + + const permitData: PermitInsert = { + amount: transactionData.permit.permitted.amount, + nonce: transactionData.permit.nonce, + deadline: transactionData.permit.deadline, + signature: transactionData.signature, + token_id: await this._lookupTokenId(networkId, transactionData.permit.permitted.token), + partner_id: organization.id, + beneficiary_id: userId, + }; + + const permitResult = await this.supabase.from("permits").insert(permitData).select().maybeSingle(); + + if (permitResult.error) throw new Error(permitResult.error.message); + if (!permitResult.data) throw new Error("Permit not inserted"); + permitInsertData = permitResult.data; + } + + // Update the credits table with permit_id if permit data is provided + if (permitInsertData) { + const { error: creditUpdateError } = await this.supabase + .from("credits") + .update({ permit_id: permitInsertData.id }) + .eq("id", creditInsertData.id); + + if (creditUpdateError) throw new Error(creditUpdateError.message); + } + + // Insert into the settlements table + const settlementData: SettlementInsert = { + id: creditInsertData.id, + credit_id: creditInsertData.id, + user_id: userId, + location_id: creditInsertData.location_id, // Should be updated by trigger + }; + + const { data: settlementInsertData, error: settlementError } = await this.supabase + .from("settlements") + .insert(settlementData) + .select() + .maybeSingle(); + + if (settlementError) throw new Error(settlementError.message); + if (!settlementInsertData) throw new Error("Settlement not inserted"); + } +} diff --git a/src/adapters/supabase/helpers/tables/super.ts b/src/adapters/supabase/helpers/tables/super.ts new file mode 100644 index 000000000..3f940f5e9 --- /dev/null +++ b/src/adapters/supabase/helpers/tables/super.ts @@ -0,0 +1,12 @@ +import { SupabaseClient } from "@supabase/supabase-js"; +import Runtime from "../../../../bindings/bot-runtime"; + +export class Super { + protected supabase: SupabaseClient; + protected runtime: Runtime; // convenience accessor + + constructor(supabase: SupabaseClient) { + this.supabase = supabase; + this.runtime = Runtime.getState(); + } +} diff --git a/src/adapters/supabase/helpers/tables/user.ts b/src/adapters/supabase/helpers/tables/user.ts new file mode 100644 index 000000000..1970de625 --- /dev/null +++ b/src/adapters/supabase/helpers/tables/user.ts @@ -0,0 +1,44 @@ +import { SupabaseClient } from "@supabase/supabase-js"; +import { Context as ProbotContext } from "probot"; +import { Database } from "../../types/database"; +import { Super } from "./super"; + +export type UserRow = Database["public"]["Tables"]["users"]["Row"]; +export class User extends Super { + constructor(supabase: SupabaseClient) { + super(supabase); + } + + public async getUserId(context: ProbotContext, username: string): Promise { + const { data } = await context.octokit.rest.users.getByUsername({ username }); + return data.id; + } + + public async getMultiplier(userId: number, repositoryId: number) { + const locationData = await this.runtime.adapters.supabase.locations.getLocationsFromRepo(repositoryId); + if (locationData && locationData.length > 0) { + const accessData = await this._getAccessData(locationData, userId); + if (accessData) { + return { + value: accessData.multiplier || null, + reason: accessData.multiplier_reason || null, + }; + } + } + return null; + } + + private async _getAccessData(locationData: { id: number }[], userId: number) { + const locationIdsInCurrentRepository = locationData.map((location) => location.id); + + const { data: accessData, error: accessError } = await this.supabase + .from("access") + .select("multiplier, multiplier_reason") + .in("location_id", locationIdsInCurrentRepository) + .eq("user_id", userId) + .order("id", { ascending: false }) // get the latest one + .maybeSingle(); + if (accessError) throw this.runtime.logger.fatal("Error getting access data", accessError); + return accessData; + } +} diff --git a/src/adapters/supabase/helpers/tables/wallet.test.ts b/src/adapters/supabase/helpers/tables/wallet.test.ts new file mode 100644 index 000000000..8404b4c4b --- /dev/null +++ b/src/adapters/supabase/helpers/tables/wallet.test.ts @@ -0,0 +1,26 @@ +import dotenv from "dotenv"; +dotenv.config(); + +import { GitHubUser } from "../../../../types/payload"; +import { createAdapters } from "../../../adapters"; +const SUPABASE_URL = process.env.SUPABASE_URL; +if (!SUPABASE_URL) throw new Error("SUPABASE_URL is not defined"); +const SUPABASE_KEY = process.env.SUPABASE_KEY; +if (!SUPABASE_KEY) throw new Error("SUPABASE_KEY is not defined"); + +async function getWalletAddressAndUrlTest() { + const { wallet } = createAdapters().supabase; + const userId = 4975670 as GitHubUser["id"]; + const results = [] as unknown[]; + try { + const address = await wallet.getAddress(userId); + // const url = await wallet.getWalletRegistrationUrl(userId); + results.push(address); + // results.push(url); + } catch (e) { + console.error(e); + } + console.trace(results); +} + +void getWalletAddressAndUrlTest(); diff --git a/src/adapters/supabase/helpers/tables/wallet.ts b/src/adapters/supabase/helpers/tables/wallet.ts new file mode 100644 index 000000000..804eae518 --- /dev/null +++ b/src/adapters/supabase/helpers/tables/wallet.ts @@ -0,0 +1,209 @@ +import { PostgrestError, SupabaseClient } from "@supabase/supabase-js"; +import { Context as ProbotContext } from "probot"; +import Runtime from "../../../../bindings/bot-runtime"; +import { GitHubUser } from "../../../../types/payload"; + +import { Database } from "../../types/database"; +import { Super } from "./super"; +import { UserRow } from "./user"; + +type LocationRow = Database["public"]["Tables"]["locations"]["Row"]; +type WalletRow = Database["public"]["Tables"]["wallets"]["Row"]; +type WalletInsert = Database["public"]["Tables"]["wallets"]["Insert"]; +type UserWithWallet = (UserRow & { wallets: WalletRow | null })[]; + +type IssueCommentPayload = + | ProbotContext<"issue_comment.created">["payload"] + | ProbotContext<"issue_comment.edited">["payload"]; + +export class Wallet extends Super { + constructor(supabase: SupabaseClient) { + super(supabase); + } + + public async getAddress(id: number): Promise { + const userWithWallet = await this._getUserWithWallet(id); + return this._validateAndGetWalletAddress(userWithWallet); + } + + public async upsertWalletAddress(context: ProbotContext, address: string) { + const payload = context.payload as + | ProbotContext<"issue_comment.created">["payload"] + | ProbotContext<"issue_comment.edited">["payload"]; + + const userData = await this._getUserData(payload); + const locationMetaData = this._getLocationMetaData(payload); + + if (!userData.wallet_id) { + await this._registerNewWallet({ + address, + locationMetaData, + payload, + }); + } else { + const registeredWalletData = await this._getRegisteredWalletData(userData); + await this._updateExistingWallet({ + address, + locationMetaData, + payload, + walletData: registeredWalletData, + }); + } + } + + private async _getUserWithWallet(id: number): Promise { + const { data, error } = await this.supabase.from("users").select("*, wallets(*)").filter("id", "eq", id); + if (error) throw error; + return data; + } + + private _validateAndGetWalletAddress(userWithWallet: UserWithWallet): string { + // const payload = Runtime.getState().latestEventContext.payload; + + if (userWithWallet[0]?.wallets?.address === undefined) throw new Error("Wallet address is undefined"); + if (userWithWallet[0]?.wallets?.address === null) throw new Error("Wallet address is null"); + return userWithWallet[0]?.wallets?.address; + } + + private async _checkIfUserExists(userId: number) { + const { data, error } = await this.supabase.from("users").select("*").eq("id", userId).maybeSingle(); + if (error) throw error; + return data as UserRow; + } + + private async _getUserData(payload: IssueCommentPayload): Promise { + const user = await this._checkIfUserExists(payload.sender.id); + let userData = user; + if (!userData) { + const user = payload.sender as GitHubUser; + userData = await this._registerNewUser(user, this._getLocationMetaData(payload)); + } + return userData; + } + + private async _registerNewUser(user: GitHubUser, locationMetaData: LocationMetaData): Promise { + // Insert the location metadata into the locations table + const { data: locationData, error: locationError } = (await this.supabase + .from("locations") + .insert(locationMetaData) + .select() + .single()) as { data: LocationRow; error: PostgrestError | null }; + + if (locationError) { + throw new Error(locationError.message); + } + // Get the ID of the inserted location + const locationId = locationData.id; + + // Register the new user with the location ID + const { data: userData, error: userError } = await this.supabase + .from("users") + .insert([{ id: user.id, location_id: locationId /* other fields if necessary */ }]) + .select() + .single(); + + if (userError) { + throw new Error(userError.message); + } + + return userData as UserRow; + } + + private async _checkIfWalletExists( + userData: UserRow + ): Promise<{ data: WalletRow | null; error: PostgrestError | null }> { + const { data, error } = await this.supabase.from("wallets").select("*").eq("id", userData.wallet_id).maybeSingle(); + + return { data: data as WalletRow, error }; + } + + private async _updateWalletId(walletId: number, userId: number) { + const { error } = await this.supabase.from("users").update({ wallet_id: walletId }).eq("id", userId); + + if (error) { + throw error; + } + } + + private async _getRegisteredWalletData(userData: UserRow): Promise { + const walletResponse = await this._checkIfWalletExists(userData); + const walletData = walletResponse.data as WalletRow; + const walletError = walletResponse.error; + + if (walletError) throw walletError; + return walletData; + } + + private _getLocationMetaData(payload: IssueCommentPayload): LocationMetaData { + return { + user_id: payload.sender.id, + comment_id: payload.comment.id, + issue_id: payload.issue.id, + repository_id: payload.repository.id, + organization_id: payload.organization?.id ?? payload.repository.owner.id, + } as LocationMetaData; + } + + private async _registerNewWallet({ address, locationMetaData, payload }: RegisterNewWallet) { + const walletData = await this._insertNewWallet(address); + await this._updateWalletId(walletData.id, payload.sender.id); + if (walletData.location_id) { + await this._enrichLocationMetaData(walletData, locationMetaData); + } + } + + private async _updateExistingWallet({ address, locationMetaData, walletData }: UpdateExistingWallet) { + await this._updateWalletAddress(walletData.id, address); + if (walletData.location_id) { + await this._enrichLocationMetaData(walletData, locationMetaData); + } + } + + private async _insertNewWallet(address: string): Promise { + const newWallet: WalletInsert = { + address: address, + }; + + const { data: walletInsertData, error: walletInsertError } = await this.supabase + .from("wallets") + .insert(newWallet) + .select() + .single(); + + if (walletInsertError) throw walletInsertError; + return walletInsertData as WalletRow; + } + + private async _updateWalletAddress(walletId: number, address: string) { + const basicLocationInfo = { + address: address, + } as WalletRow; + + await this.supabase.from("wallets").update(basicLocationInfo).eq("id", walletId).maybeSingle(); + } + + private async _enrichLocationMetaData(walletData: WalletRow, locationMetaData: LocationMetaData) { + const runtime = Runtime.getState(); + const logger = runtime.logger; + logger.ok("Enriching wallet location metadata", locationMetaData); + return await this.supabase.from("locations").update(locationMetaData).eq("id", walletData.location_id); + } +} + +interface RegisterNewWallet { + address: string; + payload: IssueCommentPayload; + locationMetaData: LocationMetaData; +} + +interface UpdateExistingWallet extends RegisterNewWallet { + walletData: WalletRow; +} + +interface LocationMetaData { + user_id: number; + comment_id: number; + issue_id: number; + repository_id: number; + organization_id: number; +} diff --git a/src/adapters/supabase/index.ts b/src/adapters/supabase/index.ts deleted file mode 100644 index d4e09d7b4..000000000 --- a/src/adapters/supabase/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./helpers"; diff --git a/src/adapters/supabase/types/database.ts b/src/adapters/supabase/types/database.ts index d2a8ce03e..b017bab16 100644 --- a/src/adapters/supabase/types/database.ts +++ b/src/adapters/supabase/types/database.ts @@ -1,385 +1,510 @@ -export type Json = string | number | boolean | null | { [key: string]: Json | undefined } | Json[]; +type Json = string | number | boolean | null | { [key: string]: Json | undefined } | Json[]; export interface Database { - graphql_public: { - Tables: { - [_ in never]: never; - }; - Views: { - [_ in never]: never; - }; - Functions: { - graphql: { - Args: { - operationName?: string; - query?: string; - variables?: Json; - extensions?: Json; - }; - Returns: Json; - }; - }; - Enums: { - [_ in never]: never; - }; - CompositeTypes: { - [_ in never]: never; - }; - }; public: { Tables: { access: { Row: { - created_at: string | null; - multiplier_access: boolean | null; - price_access: boolean | null; - priority_access: boolean | null; - repository: string | null; - time_access: boolean | null; - updated_at: string | null; - user_name: string; + created: string; + id: number; + labels: Json | null; + location_id: number | null; + multiplier: number; + multiplier_reason: string | null; + updated: string | null; + user_id: number; }; Insert: { - created_at?: string | null; - multiplier_access?: boolean | null; - price_access?: boolean | null; - priority_access?: boolean | null; - repository?: string | null; - time_access?: boolean | null; - updated_at?: string | null; - user_name: string; + created?: string; + id?: number; + labels?: Json | null; + location_id?: number | null; + multiplier?: number; + multiplier_reason?: string | null; + updated?: string | null; + user_id: number; }; Update: { - created_at?: string | null; - multiplier_access?: boolean | null; - price_access?: boolean | null; - priority_access?: boolean | null; - repository?: string | null; - time_access?: boolean | null; - updated_at?: string | null; - user_name?: string; + created?: string; + id?: number; + labels?: Json | null; + location_id?: number | null; + multiplier?: number; + multiplier_reason?: string | null; + updated?: string | null; + user_id?: number; }; - Relationships: []; + Relationships: [ + { + foreignKeyName: "access_user_id_fkey"; + columns: ["user_id"]; + referencedRelation: "users"; + referencedColumns: ["id"]; + }, + { + foreignKeyName: "fk_access_location"; + columns: ["location_id"]; + referencedRelation: "locations"; + referencedColumns: ["id"]; + } + ]; }; - issues: { + credits: { Row: { - assignees: string[] | null; - closed_at: string | null; - comments_url: string; - completed_at: string | null; - created_at: string | null; - events_url: string; + amount: number; + created: string; id: number; - issue_number: number; - issue_url: string; - labels: string[] | null; - price: string | null; - priority: string | null; - recipient: string | null; - started_at: string | null; - status: Database["public"]["Enums"]["issue_status"]; - timeline: string | null; - txhash: string[] | null; - updated_at: string | null; + location_id: number | null; + permit_id: number | null; + updated: string | null; }; Insert: { - assignees?: string[] | null; - closed_at?: string | null; - comments_url: string; - completed_at?: string | null; - created_at?: string | null; - events_url: string; + amount: number; + created?: string; id?: number; - issue_number: number; - issue_url: string; - labels?: string[] | null; - price?: string | null; - priority?: string | null; - recipient?: string | null; - started_at?: string | null; - status?: Database["public"]["Enums"]["issue_status"]; - timeline?: string | null; - txhash?: string[] | null; - updated_at?: string | null; + location_id?: number | null; + permit_id?: number | null; + updated?: string | null; }; Update: { - assignees?: string[] | null; - closed_at?: string | null; - comments_url?: string; - completed_at?: string | null; - created_at?: string | null; - events_url?: string; + amount?: number; + created?: string; id?: number; - issue_number?: number; - issue_url?: string; - labels?: string[] | null; - price?: string | null; - priority?: string | null; - recipient?: string | null; - started_at?: string | null; - status?: Database["public"]["Enums"]["issue_status"]; - timeline?: string | null; - txhash?: string[] | null; - updated_at?: string | null; + location_id?: number | null; + permit_id?: number | null; + updated?: string | null; }; - Relationships: []; + Relationships: [ + { + foreignKeyName: "credits_location_id_fkey"; + columns: ["location_id"]; + referencedRelation: "locations"; + referencedColumns: ["id"]; + }, + { + foreignKeyName: "credits_permit_id_fkey"; + columns: ["permit_id"]; + referencedRelation: "permits"; + referencedColumns: ["id"]; + } + ]; }; - users: { + debits: { Row: { - bio: string | null; - blog: string | null; - company: string | null; - contributions: string | null; - created_at: string | null; - email: string | null; - followers: number | null; - following: number | null; - percent_code_reviews: number | null; - percent_commits: number | null; - percent_issues: number | null; - percent_pull_requests: number | null; - public_repos: number | null; - twitter_username: string | null; - updated_at: string | null; - user_location: string | null; - user_login: string; - user_name: string; - user_type: string | null; - wallet_address: string | null; + amount: number; + created: string; + id: number; + location_id: number | null; + token_id: number | null; + updated: string | null; }; Insert: { - bio?: string | null; - blog?: string | null; - company?: string | null; - contributions?: string | null; - created_at?: string | null; - email?: string | null; - followers?: number | null; - following?: number | null; - percent_code_reviews?: number | null; - percent_commits?: number | null; - percent_issues?: number | null; - percent_pull_requests?: number | null; - public_repos?: number | null; - twitter_username?: string | null; - updated_at?: string | null; - user_location?: string | null; - user_login: string; - user_name: string; - user_type?: string | null; - wallet_address?: string | null; + amount: number; + created?: string; + id?: number; + location_id?: number | null; + token_id?: number | null; + updated?: string | null; }; Update: { - bio?: string | null; - blog?: string | null; - company?: string | null; - contributions?: string | null; - created_at?: string | null; - email?: string | null; - followers?: number | null; - following?: number | null; - percent_code_reviews?: number | null; - percent_commits?: number | null; - percent_issues?: number | null; - percent_pull_requests?: number | null; - public_repos?: number | null; - twitter_username?: string | null; - updated_at?: string | null; - user_location?: string | null; - user_login?: string; - user_name?: string; - user_type?: string | null; - wallet_address?: string | null; + amount?: number; + created?: string; + id?: number; + location_id?: number | null; + token_id?: number | null; + updated?: string | null; }; - Relationships: []; + Relationships: [ + { + foreignKeyName: "debits_token_id_fkey"; + columns: ["token_id"]; + referencedRelation: "tokens"; + referencedColumns: ["id"]; + }, + { + foreignKeyName: "fk_debits_location"; + columns: ["location_id"]; + referencedRelation: "locations"; + referencedColumns: ["id"]; + } + ]; }; - wallets: { + labels: { Row: { - created_at: string | null; - multiplier: number | null; - reason: string | null; - updated_at: string | null; - user_name: string; - wallet_address: string | null; + authorized: boolean | null; + created: string; + id: number; + label_from: string | null; + label_to: string | null; + location_id: number | null; + updated: string | null; }; Insert: { - created_at?: string | null; - multiplier?: number | null; - reason?: string | null; - updated_at?: string | null; - user_name: string; - wallet_address?: string | null; + authorized?: boolean | null; + created?: string; + id?: number; + label_from?: string | null; + label_to?: string | null; + location_id?: number | null; + updated?: string | null; }; Update: { - created_at?: string | null; - multiplier?: number | null; - reason?: string | null; - updated_at?: string | null; - user_name?: string; - wallet_address?: string | null; + authorized?: boolean | null; + created?: string; + id?: number; + label_from?: string | null; + label_to?: string | null; + location_id?: number | null; + updated?: string | null; }; - Relationships: []; + Relationships: [ + { + foreignKeyName: "labels_location_id_fkey"; + columns: ["location_id"]; + referencedRelation: "locations"; + referencedColumns: ["id"]; + } + ]; }; - weekly: { + locations: { Row: { - created_at: string | null; - last_time: string | null; + comment_id: number | null; + created: string; + id: number; + issue_id: number | null; + node_id: string | null; + node_type: string | null; + node_url: string | null; + organization_id: number | null; + repository_id: number | null; + updated: string | null; + user_id: number | null; }; Insert: { - created_at?: string | null; - last_time?: string | null; + comment_id?: number | null; + created?: string; + id?: number; + issue_id?: number | null; + node_id?: string | null; + node_type?: string | null; + node_url?: string | null; + organization_id?: number | null; + repository_id?: number | null; + updated?: string | null; + user_id?: number | null; }; Update: { - created_at?: string | null; - last_time?: string | null; + comment_id?: number | null; + created?: string; + id?: number; + issue_id?: number | null; + node_id?: string | null; + node_type?: string | null; + node_url?: string | null; + organization_id?: number | null; + repository_id?: number | null; + updated?: string | null; + user_id?: number | null; }; Relationships: []; }; - }; - Views: { - [_ in never]: never; - }; - Functions: { - add_penalty: { - Args: { - username: string; - repository_name: string; - token_address: string; - penalty_amount: string; - }; - Returns: string; + logs: { + Row: { + created: string; + id: number; + level: string | null; + location_id: number | null; + log: string; + metadata: Json | null; + updated: string | null; + }; + Insert: { + created?: string; + id?: number; + level?: string | null; + location_id?: number | null; + log: string; + metadata?: Json | null; + updated?: string | null; + }; + Update: { + created?: string; + id?: number; + level?: string | null; + location_id?: number | null; + log?: string; + metadata?: Json | null; + updated?: string | null; + }; + Relationships: [ + { + foreignKeyName: "fk_logs_location"; + columns: ["location_id"]; + referencedRelation: "locations"; + referencedColumns: ["id"]; + } + ]; }; - deduct_penalty: { - Args: { - username: string; - repository_name: string; - token_address: string; - penalty_amount: string; - }; - Returns: string; + partners: { + Row: { + created: string; + id: number; + location_id: number | null; + updated: string | null; + wallet_id: number | null; + }; + Insert: { + created?: string; + id?: number; + location_id?: number | null; + updated?: string | null; + wallet_id?: number | null; + }; + Update: { + created?: string; + id?: number; + location_id?: number | null; + updated?: string | null; + wallet_id?: number | null; + }; + Relationships: [ + { + foreignKeyName: "fk_partners_location"; + columns: ["location_id"]; + referencedRelation: "locations"; + referencedColumns: ["id"]; + }, + { + foreignKeyName: "partners_wallet_id_fkey"; + columns: ["wallet_id"]; + referencedRelation: "wallets"; + referencedColumns: ["id"]; + } + ]; }; - }; - Enums: { - issue_status: "READY_TO_START" | "IN_PROGRESS" | "IN_REVIEW" | "DONE"; - }; - CompositeTypes: { - [_ in never]: never; - }; - }; - storage: { - Tables: { - buckets: { + permits: { Row: { - allowed_mime_types: string[] | null; - avif_autodetection: boolean | null; - created_at: string | null; - file_size_limit: number | null; - id: string; - name: string; - owner: string | null; - public: boolean | null; - updated_at: string | null; + amount: string; + beneficiary_id: number; + created: string; + deadline: string; + id: number; + location_id: number | null; + nonce: string; + partner_id: number | null; + signature: string; + token_id: number | null; + transaction: string | null; + updated: string | null; }; Insert: { - allowed_mime_types?: string[] | null; - avif_autodetection?: boolean | null; - created_at?: string | null; - file_size_limit?: number | null; - id: string; - name: string; - owner?: string | null; - public?: boolean | null; - updated_at?: string | null; + amount: string; + beneficiary_id: number; + created?: string; + deadline: string; + id?: number; + location_id?: number | null; + nonce: string; + partner_id?: number | null; + signature: string; + token_id?: number | null; + transaction?: string | null; + updated?: string | null; }; Update: { - allowed_mime_types?: string[] | null; - avif_autodetection?: boolean | null; - created_at?: string | null; - file_size_limit?: number | null; - id?: string; - name?: string; - owner?: string | null; - public?: boolean | null; - updated_at?: string | null; + amount?: string; + beneficiary_id?: number; + created?: string; + deadline?: string; + id?: number; + location_id?: number | null; + nonce?: string; + partner_id?: number | null; + signature?: string; + token_id?: number | null; + transaction?: string | null; + updated?: string | null; }; Relationships: [ { - foreignKeyName: "buckets_owner_fkey"; - columns: ["owner"]; + foreignKeyName: "fk_permits_location"; + columns: ["location_id"]; + referencedRelation: "locations"; + referencedColumns: ["id"]; + }, + { + foreignKeyName: "permits_beneficiary_id_fkey"; + columns: ["beneficiary_id"]; referencedRelation: "users"; referencedColumns: ["id"]; + }, + { + foreignKeyName: "permits_partner_id_fkey"; + columns: ["partner_id"]; + referencedRelation: "partners"; + referencedColumns: ["id"]; + }, + { + foreignKeyName: "permits_token_fkey"; + columns: ["token_id"]; + referencedRelation: "tokens"; + referencedColumns: ["id"]; } ]; }; - migrations: { + settlements: { Row: { - executed_at: string | null; - hash: string; + created: string; + credit_id: number | null; + debit_id: number | null; id: number; - name: string; + location_id: number | null; + updated: string | null; + user_id: number; }; Insert: { - executed_at?: string | null; - hash: string; + created?: string; + credit_id?: number | null; + debit_id?: number | null; + id?: number; + location_id?: number | null; + updated?: string | null; + user_id: number; + }; + Update: { + created?: string; + credit_id?: number | null; + debit_id?: number | null; + id?: number; + location_id?: number | null; + updated?: string | null; + user_id?: number; + }; + Relationships: [ + { + foreignKeyName: "fk_settlements_location"; + columns: ["location_id"]; + referencedRelation: "locations"; + referencedColumns: ["id"]; + }, + { + foreignKeyName: "settlements_credit_id_fkey"; + columns: ["credit_id"]; + referencedRelation: "credits"; + referencedColumns: ["id"]; + }, + { + foreignKeyName: "settlements_debit_id_fkey"; + columns: ["debit_id"]; + referencedRelation: "debits"; + referencedColumns: ["id"]; + }, + { + foreignKeyName: "settlements_user_id_fkey"; + columns: ["user_id"]; + referencedRelation: "users"; + referencedColumns: ["id"]; + } + ]; + }; + tokens: { + Row: { + address: string; + created: string; id: number; - name: string; + location_id: number | null; + network: number; + updated: string | null; + }; + Insert: { + address: string; + created?: string; + id?: number; + location_id?: number | null; + network?: number; + updated?: string | null; }; Update: { - executed_at?: string | null; - hash?: string; + address?: string; + created?: string; id?: number; - name?: string; + location_id?: number | null; + network?: number; + updated?: string | null; }; - Relationships: []; + Relationships: [ + { + foreignKeyName: "tokens_location_id_fkey"; + columns: ["location_id"]; + referencedRelation: "locations"; + referencedColumns: ["id"]; + } + ]; }; - objects: { + users: { Row: { - bucket_id: string | null; - created_at: string | null; - id: string; - last_accessed_at: string | null; - metadata: Json | null; - name: string | null; - owner: string | null; - path_tokens: string[] | null; - updated_at: string | null; - version: string | null; + created: string; + id: number; + location_id: number | null; + updated: string | null; + wallet_id: number | null; }; Insert: { - bucket_id?: string | null; - created_at?: string | null; - id?: string; - last_accessed_at?: string | null; - metadata?: Json | null; - name?: string | null; - owner?: string | null; - path_tokens?: string[] | null; - updated_at?: string | null; - version?: string | null; + created?: string; + id?: number; + location_id?: number | null; + updated?: string | null; + wallet_id?: number | null; }; Update: { - bucket_id?: string | null; - created_at?: string | null; - id?: string; - last_accessed_at?: string | null; - metadata?: Json | null; - name?: string | null; - owner?: string | null; - path_tokens?: string[] | null; - updated_at?: string | null; - version?: string | null; + created?: string; + id?: number; + location_id?: number | null; + updated?: string | null; + wallet_id?: number | null; }; Relationships: [ { - foreignKeyName: "objects_bucketId_fkey"; - columns: ["bucket_id"]; - referencedRelation: "buckets"; + foreignKeyName: "users_location_id_fkey"; + columns: ["location_id"]; + referencedRelation: "locations"; referencedColumns: ["id"]; }, { - foreignKeyName: "objects_owner_fkey"; - columns: ["owner"]; - referencedRelation: "users"; + foreignKeyName: "users_wallet_id_fkey"; + columns: ["wallet_id"]; + referencedRelation: "wallets"; + referencedColumns: ["id"]; + } + ]; + }; + wallets: { + Row: { + address: string | null; + created: string; + id: number; + location_id: number | null; + updated: string | null; + }; + Insert: { + address?: string | null; + created?: string; + id?: number; + location_id?: number | null; + updated?: string | null; + }; + Update: { + address?: string | null; + created?: string; + id?: number; + location_id?: number | null; + updated?: string | null; + }; + Relationships: [ + { + foreignKeyName: "wallets_location_id_fkey"; + columns: ["location_id"]; + referencedRelation: "locations"; referencedColumns: ["id"]; } ]; @@ -389,63 +514,73 @@ export interface Database { [_ in never]: never; }; Functions: { - can_insert_object: { - Args: { - bucketid: string; - name: string; - owner: string; - metadata: Json; - }; - Returns: undefined; - }; - extension: { - Args: { - name: string; - }; - Returns: string; - }; - filename: { - Args: { - name: string; - }; - Returns: string; - }; - foldername: { - Args: { - name: string; - }; - Returns: unknown; - }; - get_size_by_bucket: { - Args: Record; - Returns: { - size: number; - bucket_id: string; - }[]; - }; - search: { - Args: { - prefix: string; - bucketname: string; - limits?: number; - levels?: number; - offsets?: number; - search?: string; - sortcolumn?: string; - sortorder?: string; - }; - Returns: { - name: string; - id: string; - updated_at: string; - created_at: string; - last_accessed_at: string; - metadata: Json; - }[]; - }; + [_ in never]: never; }; Enums: { - [_ in never]: never; + github_node_type: + | "App" + | "Bot" + | "CheckRun" + | "CheckSuite" + | "ClosedEvent" + | "CodeOfConduct" + | "Commit" + | "CommitComment" + | "CommitContributionsByRepository" + | "ContributingGuidelines" + | "ConvertToDraftEvent" + | "CreatedCommitContribution" + | "CreatedIssueContribution" + | "CreatedPullRequestContribution" + | "CreatedPullRequestReviewContribution" + | "CreatedRepositoryContribution" + | "CrossReferencedEvent" + | "Discussion" + | "DiscussionComment" + | "Enterprise" + | "EnterpriseUserAccount" + | "FundingLink" + | "Gist" + | "Issue" + | "IssueComment" + | "JoinedGitHubContribution" + | "Label" + | "License" + | "Mannequin" + | "MarketplaceCategory" + | "MarketplaceListing" + | "MergeQueue" + | "MergedEvent" + | "MigrationSource" + | "Milestone" + | "Organization" + | "PackageFile" + | "Project" + | "ProjectCard" + | "ProjectColumn" + | "ProjectV2" + | "PullRequest" + | "PullRequestCommit" + | "PullRequestReview" + | "PullRequestReviewComment" + | "ReadyForReviewEvent" + | "Release" + | "ReleaseAsset" + | "Repository" + | "RepositoryContactLink" + | "RepositoryTopic" + | "RestrictedContribution" + | "ReviewDismissedEvent" + | "SecurityAdvisoryReference" + | "SocialAccount" + | "SponsorsListing" + | "Team" + | "TeamDiscussion" + | "TeamDiscussionComment" + | "User" + | "Workflow" + | "WorkflowRun" + | "WorkflowRunFile"; }; CompositeTypes: { [_ in never]: never; diff --git a/src/adapters/supabase/types/index.ts b/src/adapters/supabase/types/index.ts deleted file mode 100644 index c30cd664d..000000000 --- a/src/adapters/supabase/types/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./database"; diff --git a/src/assets/fonts/proxima-nova-regular-b64.ts b/src/assets/fonts/proxima-nova-regular-b64.ts deleted file mode 100644 index e558fa5e0..000000000 --- a/src/assets/fonts/proxima-nova-regular-b64.ts +++ /dev/null @@ -1,2 +0,0 @@ -// cspell:disable -export const ProximaNovaRegularBase64 = `d09GRgABAAAAAJ0sAA8AAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAACdEAAAABoAAAAcUX+QuUdERUYAAH78AAAAUgAAAGAVChdAR1BPUwAAiHgAABSXAAAxtKSTkrdHU1VCAAB/UAAACSgAABOWQyk6O09TLzIAAAHQAAAAVwAAAGBs3rYHY21hcAAAB0wAAAPFAAAFSm9ogTZnYXNwAAB+9AAAAAgAAAAI//8AA2dseWYAABCAAABgMAAA4/Rk3puraGVhZAAAAVgAAAA0AAAANgfc5FtoaGVhAAABjAAAACEAAAAkBqgFqGhtdHgAAAIoAAAFIQAACviQz2+SbG9jYQAACxQAAAVqAAAFfnywROJtYXhwAAABsAAAAB8AAAAgAwcAVm5hbWUAAHCwAAACSgAABYsDynZncG9zdAAAcvwAAAv2AAAZEh9iqiZ42mNgZGBgYJScVbep7FQ8v81XBm7mF0ARhkvTnXfC6P+h/z6wWDFXAbkcDEwgUQCkdQ6MeNpjYGRgYBb7r8fAwJL2P/R/KIsVA1AEGTDtAwBypgVZAAAAeNpjYGRgYNrHEMzAzgACTEDMCIQMDA5gPgMAHzcBYAB42mNgYtzKOIGBlYGBaQ9TFwMDQw+EZrzLYMToCxRlYGVjBlEsDQwM6wMYHvxmgILcnOJiIKXwm4VZ7L8eAwOzGMMlBQbG2UBNDIyPmWaD5BhYAC0xEPoAeNqNln9olVUYx7/nvFPzajq1/K3TLd3dvLbm1Y3pzZmK6O5aSWlFURRhUZBhRL/+kZL+SFEp7A8ToYjI/8KCGTgik34Msl9Wi5mwpAmJOhqhUHb7POd9t66Xqbvw5XvOfc953nOe5/k+z+v+Vpv4udtBxKBXOXevGvwdmuzXa4E/oQr/subpCzXoojJggrtbla5fs1jb5DKardPsSUv+UWXdXbrRt2qJX6hZ/mbN8W1aia2sj7CzRosZ16tHubAXG4M4ponReFX51zXaP6s2/y57DsNNoBp8xfxLznpeba5bY/x98Fmtimp4dhRc4nk+4YfhFs33S3l/B2NsRs9onN+hsX4L9tfpFvUrbWeGJ7gPNMkvLlzSb9yhXPW+WXnXpzq4zmdV52aqPIzTauXsy9VT2O+98ozzUVp5b8jxPBc441rY/x0+mq8UZ8+7PxT5kxrrTgPGrkuL3QiN0A/cYQTvv6AZg763947UDT6lm+ysYc1xbJUX/oxS2H5RNa5ds91FfHZOVe5J4lapKcGH21QPasM97L2faobFRl9j+4zGuT3cmb2R17ioGjylWvcacTGfD4HoI40KcWhK4pBA5ws/E4dGuB/0+C7uORCDEnCuFWFscSiGxcHitUGtwedDIHqB+/TFMSgG/v8W3xufBd3B92lsxTG4DK5AHtoYfxQjxCSXsN3X3lnK3D28/0ps+bkNtvuvgs0/2WGw5XLzVZg89+nCOd+N3QVK4eNu7nkcPgIfhjvhI8QgjR9mwessF30nufKZlps+Qo4+iB3y1GBaMZ8lvMrYVfFMcBYeq5SrSOKYTjRVzGktTcb5EE/zaQmXrVc2OsIc/ZkGSniZadJ0cUVGr0Ezxk0J27wj1ID8cDlo/WSs9RDfRPOmu1I2baP/aZbrlm+Dd6L2Bd3tRJOj0ZjhIXT0NJo8Ch9k3gTq0Zrli+2rp96sR1+3URN7qTHUuFDnXlUDaAoYhVYNm7TWf6hcWU4Vrho9A20vbEC/c0E1yID57okwr7Gx3tZ0MCWciXVB04nmr7XHH1Aj50uF2vILvFWpiNpvvoqW4Lt2ztGt1jLqaqgzJzTefa4JUYsqQq14Az3GXBvtViZarrnUc4GNoA7cE/x2FB+s4L7UI/8jtX83dekBalxxre/XTLTfAOTfUq3fw77HC/8a3HPU4nYt8hd4tkcLDe4vxpOkaCqxuqRy6tZ06zV+ozJgNbgV2HwNWArWghxY5O9kbbxuH1hx1bV2j0fww2Z83KfJ7gB5VEUN5P/h+nu46/DVqAHg/5GJD//HY2omb1PcN18M/3zCW1hTjJf4bxe14lThE7+d3nSq0KFTmgP/5N7TdX4y+zqL0BXbGsSb2CjGXP5LQK+Zcxm6NH0AfjNrhsI/5Jj5rkxpgzrpF8n3g/Xe0Hfpgdb/Qt87ht+tr7XHWgjg22JQT/aNgWas7rLe4rivbBN1JauZBm2P4bZomkGHNDFglyoNoW/uxcZeeuBO3v8OZzlI3JfxH31RfXALNo5RM3rQxsfEnLuGsx/SvDDOaMbgN85KcrNG0670jeN2cH+Lby2+iOMZx/BMEjvipd+ZF8XGf1MUizEJD/h/wNdm03zbSM1J/BvOtwONF+XUUPlVmkvkxvfkSD18Dvxq+TZkLgygNMb2/jEJN8baDPqcGsNqa3Q/WA1mM7+etc2hF68Jve4Vxr3w1oSZO/od6+psrUsn668Fswei9xlbXehNkGiDuh7WhD6Xjs/zH7GCCHwAAAB42q3Ue1BUVRwH8O/vLqDtrRQXBZHw3Au7UpptVur6QElDXqI8fIEiqNhEQZhZai9TSa00YzF8zrBJGEpA4AMRErW0qT/qLzNXvWenP/qjpuk151q53E4Lw1T/VDOdmXPvOXfunPnMOd/fAWBDX48D4Y/hTDmj0DzMlijfx7EJEXgQL6KJXqJqspRRSqtySflUuW6rsTXaumw9LIrFsnimMxdzsyksmc1mlWwD28F2MR+rZ0dZk+bQojWm6ZpLG6/la0WaV1f0CH2IPkwfrsfq8fpYPU0v1kv19oQYZ52zzdnl/MT5mSvcFelaPcbBw0WSyBVFokzUiwbRKM6KC+K6+En8KoLCMjUz0XSZHnOGudH0mR2mMK2b1m9hliX1DHVolupbSoxUX5TqKwNqB4thcYyF1J5+9dPsBbZTqg+zhpB6xIA6TyvUdverI6V65IB6ld72N/XQkDpMqieJfFEiykPqY1J9TRjilz+p3VJdElJz86ZUw7Ksr6zz1jmrxUoFevf2bgmu710b7A423uoMegMpgeTA9MC0gCfgDiTxCYHR/Gf+A/+Of8O/5Ff4F/wyr+QVfDUv5eN4AZ/I3YZlvGlkGlXGViMbMDYaFUauMdWYfOPbG9uvkf97/9f+q/7Lfp+/1j/raq12RK0C1HXqWnWNWqlWqOVqmZqr5qhZaoaariapLtWpxqnRdmH/3N5p99qrB/sGVfclp78dxf/bVvyrv2b+94UpleZQAiViPdVSGjVTC7XS+9RG7XScTtBJOkUddJo66Qx1UTd9QGeph87RebpAH9JHdJEu0ceIUOyhtfCXPej7pPSPlH+ChJ42hCFcVtogDMZtsEPF7bgDd2IIhiISw+BAFIZjBKIRg5GIxShZoXchHqNlxjXoSEAinHBhDJJwN+7BWIzDvRiP++DG/ZiAB2QNP4SJmITJ8GAKpmIapiMZM+TepeBhzMJsPIJUzEEa0pGBTGRhLrIxD/ORg1zkIR8LsBCLsBhLUIBCLMUyFGE5ilEi/VV4BdvxKqpRi0N4Gz4cxjuoRwPelZloxDE0oRnvoQWtaJO3SjtO4BRO4gw60YVuWoo1WIVSPEZFeFZW7ZN4nLZhHcroALZhH+3FU3SQDuFRPENe2kM1lEf78ASeo1wcwWl5S61EhTzJFNpPOSjH87RcZudlbMVb5KAoyqcFtIQKaCEtQgfVo4c8tJI2UwmtULxKDS2TOVhMhVSMLXgNm/E6dmAX3sBu7EQN9lAdvDiAg9iPHymd5qGSMimL5mIDzadsyvgd/vZhewAAAHjaLcJ9KOMNAADgmX3ZZpuZHTMz7AszM9v8jNvty8zMzMy+zOzLzM/MaF3SuiRJb5Iu6bqW1iVd17okSZckaUmSJEm6tKTrWpcuSUvrff94ex4IBEL+Hx9igMxCznKIOYGcaM5KTiLnLOceCoXioHQoD+qEhqEr0HNoOpecq8915SZy0zAsDIDpYC5YBPYVDoVT4Xp4BP4R/g2+D/+FgCCwCBZChjAgQMQMYh1xiPiLLEbqkE5kFLmE/IZMIm+RTygEioRioACUGmVCLaC2UJeobF5NnjZvLm89by8vlZdBI9BitBkdQcfRp+h7TDEGwFgxIGYes4bZx1xhYVgCVooN/GcOu50PyQfyHfmh/IP8OxwDZ8dFcHO4I9wF7hlPxIvxQfw0Pobfxh/j/xAgBAZBSggS1gnPBdwCfUG4YLXgnAgjAkQHMU48IN4VwgrFhdpCZ+H7wljhUWGGxCDpSVHSPilTRCoyFEWKPhcdFr2QyWQxOUreJT+9Eb6Zf3NZXFkcKd4p/lVCKTGUrJR8LdkruSzJUISUMGWF8oOSKqWVmkqnSjdLr0pfqSyqkzpP3aKmy3Bl2rJI2W7ZA41Ls9PmaNu0VDm5XF3+vny9/IxOpEvoQfo/9D16qoJaIauYrvhScVcJrQQqg5Vblb+rhFXBqq2qJ4aGATJWGD8YKSaWKWZqmHZmhLnETDCvmI/MVxaVZWJNsWKsM1aWTWbz2DJ2gL3E3mXfsl84RA6Xo+J4OAucXc5jNaFaUj1ZvVp9WJ2uIdaoasI18ZqTWmittnaqdrX2kgvjCrlm7jL3pA5Vp677VPebx+H5ecu8Y959Pa0eqHfVx+qv61/5lXw9P8rf4v9uIDXIGsIN8YZkQ1qAE0gEoGBBsCE4FfxpJDQKGvWNk41rjS/CVmFUeCwiifgihcgkAkUfRHHRnuhO9CRGi8VindguDogXxBviI3G2SdgENs02rTftND0AOsABBIEoEAN2gJ/N5GZOM9gcb95uPmn+JUFIiiWtkknJomRbkpZkW6Qtky3zLbGWx1Zsq711tTX5lvI2+Pbj23MpRCqUhqWb0ot36Hemd5syhGxGlpYr5GY5KP8g/yjfl1/JH+VZBUlhVrxXrCuOFD8VGSVKSVbOKpeVa8qEMqm8Vv5VoVRclUSlV22o7tu0bYtte213aqoaUHvUMfV3daZd0j7bnmjfb09paBqJxqdZ02xqXjtaO5Y6zjr+aOlaj3ZOu6O90j50ojqlndbOmc7dzhMdWifTuXSTulXdqe6hC9el7rJ2fe4678roqXqNPqKP68+7Id2Cbnv3h+717mR32oA28A1Ww6Jhz5Dp4fXoeyZ7FnsSPfs9t0aEscboMEaMa8akMdUL6aX3GnqjvV97z0w4E2Dym76Y7voEfZN9B33XfU9mmllrjpg/mU8sEEurxWeZtcQth5Zby5MVa6VZeVaH9R/rhvXW+mwj2Og2vk1q09nstpBtxrZpO7el7Dy7w75oT9hP+0n9jv5Af6R/oT/Wf9GfdXAcRgfomHJsOE4cqQHigGBANzAzcDCQGsg6Nc4157HzxpkdlAyaB2cGdwdPXGSX2bXo2nBdu7Juqlvo1rhD7jn3svub+9B94U57oB66R+oJepY9Sc+159mL8jK8Uq/RC3rnvT+8N95XH91n9S36Dnz3Q5wh9ZBvaH5oZ+h46Gbo0U/yA/6gf9m/4/85TBk2DC8MJ4bPh18CvIA2EAx8ClyMQEc4I5MjWyMXIBnUgzPgZ/AIfByljMpGp0e/jz4GeUFjMBLcCN6MYcekY5Gx3RA0pAlNh7ZDj+OMcXB8Z/wlzAv7wivh5ETxhGFiaiIxkfkXygDzuwAAeNrMvQd8W9X1OK77ZFtJvC1Lsi1L1rAk27JkWdPW8l5SPOIV2zF2hu3sELIgk4SVhJA0hDBDaULDbqGlUAizzLbMUkYpdFCgUKDQtIQw/fw/9973tO2Eb/v7fP6Jtd8795xz7z33nHvGFTCCjqlb0U+ZkwKhQCQQJKuz1cJsdTb6KXsMjarYd4aEge9eE2Z89x+BQMAIvFOnBXcyR+DadIHApRXaGI3eYXdapZLcQ/6skfxytcqsehi9M7lALZWpVDIp3ONENyINc4tgliBbIBBruetl/JtNOnmBXg7Pcn0BuvHFDLFcLn6bvghIm1J4qoY25YIigUCtdWlF8HDZyMMmIg+RFj8M8BMq9/nO9fp9K7JX1q/KWuP1e9d4fb6Vmasbzs06z9iwpuH+++93/Nr+S/hn/7XD8etf4zaEAuPUjYxaKBBoBKUCC3DBoTe4pDKHWQg4uhw2iVQm0hskyiRJbopIIrbDez9CuXBFBkKZP+izNq22uBvVGxb4zu+0uof0lTW6guWrLqz31fvY5/0eZ8PY4OyFtd1pn6dLy2rL506IFgzP6fbVpr+Vmq3W+/Rzz501iKQma877onq0XF+e/UKSG+OVLCiaOsU8ArybDfyWAXZl8G2I40ItsuWQTzarNFdgdTrseq0mRYLf2vWalFwkOjA0dGDoThe6swrB25bmock3B6qrTOXV6PBQVdVQNRo+p7l1ZKS1mW1hjkwOjjS3jIwcQP5ai7WuzmphB2oX19UtBv7oAI9xwEMjMAmqcC/oDSla0rSLa1+Sm8GIpDKpzOmSpYikyVaX3gAXSXKl4lyZH1HUmPFluY7uNUMbO5psi1rqewvcRqPKXGwsL6wtr/Czbwdr6wss2iWdGSV1DeVagzPb0b1osGVIP7+mfqDZV1xdUSA12o3mxj7FivratPomlcvm7fU2oT9UNKq8puISl0CA8HgTXEnGW3i00UHGDy/MWyQon6oWfMj8VDBHIIDezXLJMhBg+6F5/36zw24/rn0SnXxSs+yhTRsfptdnw/Uv0OuLkDPLIFLC9SnZ016vQZciK+BBRr1LZHAZXDKDTeSSiWQiwxPmlEXSiQnpohRzykLZxIRsIbp0vd9gt5fUrF9fU2K3G/wYhkKwGL3BuAWp8EEr0Tq0DhuMRht641fVv4I/5Hr9dfvLL9P2qqd2CX4mGBNkwcyEYWrwIxfuI9I7PzMV6/N1wqQ5uYVFUnlxXvm8gqIsRx6jKFeV4nuVgldQBhJDTwt00AbKOHnylXr4nsx3gAmSQYpBwTi73KyCOT5HhV9Iu4Kpf6IS5h58r0wrtnk8n3pymafo3LXBuKkkPFDAcNaYGbufsVmVDAwWvdWP7GakyYB5hKz14x6FwjNeXzeBXye2X9ClVHbhpzTfxKadm8Z9vnF4mfAFejYc3NDdDU+kbQk8JYNsSMFjMht4bEPJPSutt7Ux5nW2n1C+ODAigANcW4oc3FDE7CGjNkWkZgSs88Vbe6rX19v0W1sWXHr0OGppOHp3l9ff67C6JkbOObGL9MXUKfQlwCnBlIB8UAIAOuVEDmnorcHJgSWjA83p2qauVC52t/YOtnvmpLob5/fVjgfNvVcu2THgci3Zlea32EssjdVeN5qLXC6Hb5596Wh3fdfslP62vpWEhyp4ygAa52CZq9Y61A5ky7ZJtIZsIfpZD/sUUq4bGen5+I4mkNnz29rQMHuc0F0PvJfDffkYXxBnYRSz1RK1hAiNFGS6YZ6taX1jf1/jYJ0PXcc+7B8Z3LY7bWXVYLevrtMvQUsD//Cue3ZzuD+VwIN8gY72J5n8MH1gcisQz1IDL4qACcjRCF2679INjWXu3gWL8pd7RrfuXN06r7+hcqgwpTutavEFLYee7fI33rCqoKT23ImhnYEBR3PAVR5YCzSAxEcf0P61aZHaoZa8PozS2evRr5l5gWoqu+2AUw7p32KBVSBIomLJjDgpSXtC6AdRrsfCUcmIMXpmZMhgYL6jvS/sXdBY27vnwb19tY0L/pVbalf1bOtW2UtyaxfU1MnldTVDaYt7aoZzc+b5egcHe33zcnKHa7qRVpiRbyq0ej22QlN+BvtErb3Ely8U5vtK7LWEV5VTXzAK5lZBIZbaXA/g0WfIQFpOaisBgwwktAK6QiK5pSh9XUuZu692oBjlL/OMbtu5omHCq6ja0Vq5QC6U6OtKW7r7U4FbXesas2dTfmEOjly7BAVcJrW/SjPf2RwIr9XoY1g7QALlhFYNhpvHe8laTf/QNm65Zgf5ec2APLlY8DNyf0Hk/eJY2UIBpYCEydOHJEwY4nZTV4EyyxmWNQrBEMi0RtynJuTQSdIReoNtQSfY3Wjz0FuOt2seuJ+0rxC8it5Av6V6Cel7eHCXwgMddpx2xMBDyQ4AmUwu2gzwTiD7WzX3P1DzNoaXM3Ua3QPjRC7QgoQEcsiQCE/ZDKEkV5bCced5vc7h0PmqlvisHfsGV5ZUV5UU5JSr1eXqEyqrtspQbFGUOLqdE4P1ZQ1lerNcmfMXyjlGoJ16iPmE2SGwC2qJpODXR8wwgyPc+VKZyybEfW4Lr9zwHpZPg7UGmRE3IBbuuf9fN+372bKmkkpG3m9u6j24wNyQmd5Yzchz9S0/3HHwDzdvWzSYs3hjv18xx1HSttTZfP+lRz9+4LI1OyqAtsqhtomryzV+9t9ps/MKh4a3/eiP+zffXFVQ8+rQvkLThmClH/NmNjzthXkmwqubWmtQi0C3EKciZu+oh73PM4rSlw4d2H/11cwRtgEtY6/D864D7qmBezJAQyvCsjVbHSH5hFgHMSIJmWz4DdrB/g6V9o83Vjral57r8vqcv3nRXVfnfpE5MjLX2zNn1kLvvCVoi3fE9wf2d36HpeED6Fssb/bAHJISTmYRWcNzBtgGvEKXH3rmmUPHhpsUS6rOPXTVmqoliuZFaU8gyxOXGMod152/6XqnUX8pphHjuwfwJXoorBaRssqIspH1/fevf/SRGzZdvueCK5kjjx288pHA4XPXHp78GvDA9wrh3lRKp4T7zwjZILqfvQktYG9Bi5kjgT8EPiCyl79+NpZb/PXHevhryZUCQt/nzEGgr2Aa+mDBV0uAxiuffebQj8bqVUvdmEbXQsUHqGpp+hPI+qttZWVWTKVRsTtwcgPf9haKK1CpzgZK4dnGbOlht/T0oMt6kJV9CTryb6iIx1VwjOj0GFfbsZ4e+ADfp8J6tx/ewqoj49cPAJWbcmJVfbmj1dfWsymtvaa+vQa9wpqXrQ7R3ca3LRRJcNvIhpi2ZZMN0LZhGfsxKp/7DrR+Oxpgnyb3NMDTC3BPMuEt4IpeYM/vQU5QSO/hYb4Nv6cReoRaIaZIjmzM2z3vat7rOf93L5/PVE6+TB5HJlmG4e7ZRPmv1iJ8A0BmNnWxW3v60M4eJnfyn3Dtl8xsbk17DvpAJMiB1UMFvaCSZiXj4Uv7gcli/3TiBCp+iL1vzZ49a8697LK0p1HZ00+zb2y5/p/XY97TtRG3aSRtZtNex+urEbm4iQC9n7Zo7XkLT9zjCQQ89zBHNty5IdCytoWl6+rfCA5psFrQkQA4YD0RxifWG8MCAu04RJAZrqmu61jaUjXqHvFHIbW4wdpkDWiWVk7MPXcTRY/iZiV9KSU9o83W8rOVnwASxrr4DhgcaedsHG8ze4JBzz1oNvslc2TNgv6JlPrWqurmKdJfeuBXIeCqjdQrzEkRmgAssthSQvqbR6w9O+bN9cxfOt9z0dhVg9aWLd528mlz2orahc3mEkdekWZuVfeyEV+Xp0Jrlqp13e5560k7WO8pIDIJ9zueCFrU3PMq+uY1WPsDVLfrAFzOhWuyqKTFw1PKD1M0cskVvYt+ubj3irQrd4Bms+KcFSvOQdewyy+8ktzLyzyiOyI8otD2pezno3/72yiMjV8xtXBNBgi6cX7spcKajy/DY+/WoauuGnps+PD1TddfdQ5TMAlKyuRrTDl+YNhwPbOTnwdwHyI3Cpmd46+/Po6Svhh/9pmJL1Ah+z7qR03saTSHfSSE03IiozDNFCm0pIf9etHLLy9iv0EFaBf7HHKyF8K1YKcy+XSMg15LFkikZvJZGTqf3YveZfegC5uYtEDT5CnKq5KpesG7ZJyDno4VyGzbuw89dOGFjwnHXJNzBHG6vNAm/vRTz6egy0/6qP1TD/YPd7/DBj1ie+HhnTsffszFnHbB72LUjn5I+YkwzWIb+qF/927/HdXwg4z9CHWQNqYmp44xrqk3cRvJgDTjmnyWcY+6aPvAvneZR/BvYq3B9m71HR1M+UEBp0+dQk+jfwny8MgDPTiFX0hlkcu40Opy8FPl6SBYFBNjjRPuRud8n7Z9Q8+ylweN5QOOhgZXQ3+gvbtufoWzwd7V1cP+xTvs8ZgrPNBOEMZUFuk7kMpUy6fKLJGkobXccE3uvPKW3t6W8nm5wWDN2MLzz1847r9YVb7s+HKTmr0ZZNxU3771G/b2Al0VgPsrgHsuGaeRM4Wu+Ei18rLLVq6ts5o6gsPDwbkV1rq0K9862GvyL5/XvbzG3At4YRinyHpbEEN/tg2rkA6ycADZp4L+8YXnXzA6VhN82zgvN3eesbW3t7V374b1+/oQmrzRpHpLbVp+fBmFySQDXjnUSuAUEwVSY7IBLzGBKUL61ZfvmVi5nd2SfE5wyFvcrkHdc1t7hGn7z1tx1VVrxS0L/ZVBpPAtWeyn4wjmI+oGXSuXSEJstYZoViAYencFu7rm1vpLigrU7YsXo2P1ukCPziIb1dXTvq6Y8qJTgFe+QM9ZW1jM+BDRnmif4ykeJpuozjVDZXrXRP1QYX8l7g2g/+IBY5dE0oUZ8LSq1FnX1NpmqNj9wZ6+NrZ4xSKETOrXVKaJ7nkTgPNcwPnPwN8cMvfCXS7BZo0E/TlY5SjtlAaD8hHbDcjvqywvYn8Enayx3EBxxqT/mNkP8yOV6MtEjwRJa7usTKksU6QHg0yJAr+dfBi9J2CmbpryctdLIq6PWmnpnTd6TQVKQ3FZMMAB+O7L4iqlsZzJmfystZ3wOwhPp3h5Y6DrrtgmQqcW/nReMMiOvvHHzssB1xaE3uavF1wTXvOvAdyOcN8zfwa+F1EecCywR7FCKiMMYf4cHCxuzQ0OalskwaB4sNJenyodsu5GrWPGIlBzWscwg9B7zQqHtaTYeSiE55/IeEvI4z8FqhxlHbJgsHDEdj3y+mwcCI3lRn5cnGLS4X6RIJNYeoRnSfx21+VvXnzxmxezvz7c33+4P+3Qm1de+Wbn6htXrbqR3BucamWy4N4Mqm0ZwgQRLZAiIwGLtXpJLfRyvxXG0Ho8wckcSutjp5gjrXrz3n9c3gCTh0wiArd8qhX9G+ASeaGLmIgyzkDCY1WbnYKkdDICSDsentZ+eTBYC0bbWyoTyIyGy/+x16xvnRxHqC/EKxf6DK8luI/AYJcQFKGzmoZzUrVd2ei99oF2pkLJ7TeBfLgZ8NBSfY3bniBbmDEL89+3tOnzQfT5/APz/Qt7zm3U2s6pdJc3tDeUL0mb61SUmHUqnTjfZ/V0Ndt9RnWeKkMq95XXdpN25kA7RcxSPLdlGkc2tyUFQ46TZc+ugrm9eHG+TCWWqtPOQ976Sy6pZ18r1EiqiwhdcP+fYAaQMUDsIbpuY30X9LQ/BZULbDcE8UCQBhs15htQH/uk11pWhJZQOmHMog/hfrJuk3UVKbt/23302Dz0HrsBXcGvv6/CNXHrdvXcHTuCN3RsurBux6ZOdAm7De65EBZVeHD3obfhPm4eaV0GG1hpIvR2/6Er+0/cM/+y3f33PPvsV588+OAnFBeQUxgXkHcyMm9ruJU+RaSpTM2RFWjSVM9h1P5TMlH0aOMsqaIN/QMjOfnwQqyn2gHIcbg/ag1Hx9mDoBGcRqvYUyjLgybqq7HFhdtLhjX4FKzBKrwGa/Q+BKPWgQWj3elBErIJkysC+Z0r9aBTfmtAXlAgD1j9frnBZDLI/Y8FPS8pDVaD8kVv0GXSvNYkFje9qjHzutQ/BZfy+3jZtktdLryNR9f9Ka5NB5HCdhdp2YgcZLGArpOQllO02T55CbRU6PNZg/L8fHnQ+pjLrHkVt/OaxuQKel8kzb/kCdI25ehWhHV7mDlIliHUavA+iMjgF1qVQpsVHXclZyptxdoKmbhQUiOuSs5S2pvpB+ZIim1um95QVWV4XGRtb9UbqqsM3L5Hq+AO9Cn1UcjENjHDG+CaxsyarAmVTKpSlT+I3mFVzEC5Gn/kZMuN6BXGARpyIaaUbCCF9v6zyba2hIFZnZ3y3fB55w17RrzWktqaUqt74UONHs/YgrQrlizel97WMitocqWw+1OqzMFZg+jGK8bS0ep0oDV36nP0HayJDtBtHDZu60wasveUjAwmEaApwl9T4xa6mG5VOuyG3OWFksJLhhtXFDakN5d7enKySlKu2SKaK89XD8iLHKnFlf0VC4vL5ipqGzNRmlMlr9N0r/c4SjSWZndBZX7lLKcst8M5uzQ/s6HCXFJT2GlSKgndxYJV6APGDH2gAfkFJofGIDLg/RFieIDocMlEBC0iZKVW9IGiynvUW11YZbVWFVZ75nX6qhTwnhk7MDZ2YK+i2marVlTVtHf6+Et8ne01TfjHsUgdl1giZEcbHnTWAAOwJAGN95tvvnnjPaz0vvcHeLvFsdKO2onm+wv7Sgdnb4XGK6fROuiohXGLvEHkxddopu5BNwPPy7DXAk8NqrrxRosw5L8Iy0eRXW/AngAlws4MdPPw8LK+9V16z2J7HRaXdZXrFnVvqNFaF1T6iMQM+Ox+a7nBIkrqQZ4BQ3F/U0dHZYu5RGOQFPgW16UXD1R3tJi85cUF6kxpgdehL0nPsmgLdOlpDCoGHKf+w5iRkrmc7ksIclPoqpHCv0HKQr1cLs69T64vlOeKmXPhE/9H9j/Lp75g/sLcBvfnCozwTVaKCtOkEof3lJwGGb9dF7W/wPzlOfbd555DyrsevGjXiRO7Lnrw8YLqofmbN89f4MoXN2ibxyeaiuvQn+Gi5w/84Dn2toseJBeK8uu3/XJzXX5B0Xhn+zIV7Y9S5Ed+Zg/Vz9F0+rkoQj/3V5c2lDc2mBpLzBqPocDeWd32gyqlskptNKJmrbHKUukscym1Zr3DWX2/vkqvUyiLaVtKQQ26Hh0XJGNJrdMaQEbLyDO6Pnj0aPBoFnmuue/nP78PHlTW8PuJyfBBQrbR33CxO9BvTz+BB1QSYD2Jnie+NrFAjfdsEd8FUhHdOgbTUqQ1YD8MZwS4iOEMjETPb/vZtm0Dg1sVK69bCX99JTXlqiUqkylbIc9uaMgqRK8MbINLtg62r1jRHly1qmLhws9L1Vpdq1g+VMDZXkwnWslcSNY3vNO5kr0aPndiM08gQz9HqYBbKvF45IZYK03hMINxktpqtbW02KytlnKvsaxIyRjpx9Yub3m5sqiM7qkK0BtMC8DJjPYoZZO9VepVIrurjcSzxO5xENwq0S2oT+jBaz7gRnwooImEfB02WKP/vH2ZtdmbrbYu8vaMjT+PbjENLTUX65RSfY3X7Tq3jcApQzeh+QCnmKOCn4mcDyXOhYLmz2teWqE2thkrl0GD6sU2Q62pyLWgttOp1fqYHHttnd6pVzUhK6pVaixav7uypCI5yRZrS8JK/u4d1YeZRw4epLoV6GxYB8mlkiOkfWRThcQAOhan7YMyYlY/CLrzk1gbRUtYBegkGWTtgvViC90bSMb7KdpsPFo8CG0xDZpaxsdbfjHG/H7SjG4bPzCOr/cKHhPciYxY/rnwyCL76XeqzCp1ufoLsleuUlEbvE7wIvSQLGLfDTMID2+OM+M1enFxeYFWl5ehLjIVZMgUOs/jSr1CmqvNFvfWp+qUxeWEzgx0i+AeoQPrSmLqH7vHW69d5YDurG/SrSFzqQTm7WqYt3Pw2BKH/MkhnRhG13OtQ4NtgcHBgKWqylLhciH/wqbm0dErRi0NY/X1Vlt9/JwkulMyeUazj+LpiCzk5fP76Kwkcy4D2xvEDskA6ZcnEMxGWiSm41IMw1LrEOko3kwH2+dEdz5b7X36pz3VG/ewLxNCmCOT4/D47diYSTD17bPPbuLpEhLYXxHYedieIZATjd3oBv4WO5AnH4hsaDxmVL/Ft5eEJYYwwBzjaHEmosVwNmOeeYgg8mue0tMzToEY+t+bfkbgPioCffUR0I2IDwRxTg+qthORgl0iBmxTYcmHhDFOkKpq3gmCSsJekHmOCC/IO2r8O+E/2V8TLoN3qbgvkBZGQtizgK6ovqMDXRnpXmDePPjdddE+hlgYMJ7EETA+hjn9aSQI4bKD08JIIf2C8QAoUai8bOvpso22osJobFasmAbWYpibRVhbQhozg2eIljrzcLfaclMiMbw0TyeWZ0nkJps59O6NqGbeUGgURqM3wL1MlkW2iMcVbdNG9IN8rJsm0BEiWnwnSl1AV0WxJy9CefjuxciW+Ha2gDbFt8PZ1yJOEMCKHdHOui6Pp6t6UZ5Gk5ev0aCBKKLuc3e73d05WosW/iaLIxpisLYm3A7zMhNbgGD1YIghj4ouWyjczgbZb4ZH0VH0Bu9aYYN/wTCwf+UwxRf7TpqIb8gcuQ9N5CRR3eNdRZmIm2ToklpdSH5KLrsn1n80enUmEakP8yLVk/roD66LdCjtSjJwQpburQvJGM3kRrk67CFCK/EwL49yE+FhHvIVxd6PR3jk/b+BIb438nY6xBPcn4L5yY3uKBA/ocP7RDQSZHSHwHD+PCE3zhQJR1kk0Meih1lFFIrRwyyM69Qf4PkEoVVEd3hhVbKdABZt6+nh+EJowoE8+fx1mCd4Hw3lAy/Kenp4DgC8z+Hq7wjtcwg8Qjtc+h0lWYShcoRiGqf+BtDSORoliWjEN6P0KNp2QIuxBGEcoUXmOFn/8zkPhY3zKQq1EhvvVbGhjvcXLsSexYvuuJL4Fu9ARh+yYf8iMv4Nexg/CvuPNhHZop5esvC+LHRjAsHyk5B/K06oRHi8cF8TnxcnV6V01ObEe77Q09Az78R6v3A/XRHnAYuHCX2RACajgk70x8IkXRoHNAwTy+780OhOBDaZ9vjqeGxx/0+PL5XlZdNxPBFXHkrA+pK4dmO7QBnvNEzicOBle3GiEZmI2NyoAfpBHDejhusTcQ0jQa3gMPoFM4toagYamobj0tCBqw/rrr5adxj+Dh+GN/xfiF8gb3NhbSgmMhf6grPwQDUlXn/iTDQgqTBXhjCyaMfCudKG8nUnDg0HJQ1lVTUPHVqzp4P9g+uuNlRS1XjuZWkmdd3iO69+uqyopmJ/z9VPB67ftGsu26JFmdvnogdV1xE7/xRzLhlXuXSkiuM8fTfDOO3ivX1kfMZ5/GLhYJkSB4eFsdnNw6FjMoHrMAJWCtbSuVEZD+4fdEyWhDEjYzEOpJCDR8eBJqFcigP+RdQY6AlhHd33CfhA9l8IH9JCspXzNP4Z6C8PeRupnI3wOYZ93GmcZwfUWiLxIt3cPSei3Nznb+jvWx9oXtvKYh8L0FkPdqwVxh0NiIncp/YznJsb+xzCQTlKIVO/aLC+W6+Xdlhcbk9vn8fsNHsNlXXBZf2tS4vKy4vwd7v9fSV6u1Jv0ap0uQXeymK3slRSVOyzsuno87kTTdXKCmWhTlqoEhfU4fFM/IlgH+L9CsPZeRTxijWTVxHrtNN5FhnmIF1n/y/tQi/N1O4n0G/TtnuI2LzR7ZadNb1EV56h6VfoGJ+eahjykXT/krTvOcv2E8rkmdBJpG9Pi5sgWkSDPKY4Xk5wLMc7tWeDZU68pjQDhn+JmrfT4tYUvc0Xwu0jgpvxrHGL1+FnwC1ap58ON/S1p8sT0u75vhUG0b8EOuBaFcxt3n8M1m4iFGUETZ2aepf1jtBGpTBIXMwLPMXt63e2tuxsWrq4OYTnFXne7cu3sZuRj3ifazIJzo6xP7aM+KzBsbH+QLC3tp9gu2LFVWt1viWLf6dV+ohbn/jgG4gPvnx6eyHSJR+2FjQR1oJ00fnRfnr3WBaxFR7lbQXfrAMTq8Oe+7miMn47BvhE/O0wB7G/XTGTx51Immm87jgqIoHnHckPfr82sOyfrg1UCyIlUSN3gTSJbkM1YxucBJmuGR0VHwnJIZIjiWvrctKWBu9wT99aAptluoadUdMwUfsjUTOQmfodcPdesp8YYbvcC31xQTDIlB+cbETvUT8SDLZs/rqQ7ZIN/DTBhY8cpFcyU5/C1afhuljb5TRlCYOhAgs4uMKptzE0zk8wve0iiqJrMwCJdBhMbsLAOD8686igAGtyYpgBDM53oY6ekKdAb2CIFYPnxJacTan5RbNKG0yrsvsfumj1yku2LVzsta5xEF87+neZXZSVm+wv1VpK9Tc9uu7KK17bNzDUxaYsCwaWLQsEOfsG/RXkfw5dfeK8/4bEwv6vkTEBP0gg3qPjBP4QI9OFHK2PkJgBcXzUAJlpUZEDZH5FRA+gPQcFZ4ZDZlMUHDqHIgAxeQcPhuUAD0uaABY3a6LB6bm5EoUaniQ8vF8SeIYENCZmbRT4PyVgbVRTl8Vwlp+b6TAmcbt52G6NbTnBjIwmKmYeRjb4fOQEFJJcmHcZL4mvEYfGv1Wsdqg54FZkJle/zHrQM/eRt4xGX1ioL2C/tf+Gh8PHkIjpLqgt0ojh/YPEjBFKDbkyMR6lm5yWuotXdbplLlPTxat6PAcC/fo/lUxo3tI7A/2+ljWrrixVVLeuXXXIJF3dEbCyn2gebq1EEuUqGndyCv2JyEppwogHAx6AUVEPl8AAjI58aONi4M4ICw/CKFgGGIPRsP5IBmEkrPzp8CKDMApcAx2DMdiFdDwKE8tqOZYsCaDq4wdEVAMVUeMhup0rYnQihsZfAA1ZxJMTG4GBp2RcFAbqAI7EhmIId2KmcDFCfIwdFyOU/b1ihIQ9U4LYICEhh+flgCdew+IxjZ8m8Xg3RHEmjgJbrF+Y7ucqSEx/RlRUP3YvRkf2o3rsbAxv0zKZlgidfd33slWwJ3EGHfM73NK0am+eJQL3AME9Nxp33oPiiqHAW7dmdYPeNn/AFkHG3IEBVWtrpP1xF6HFdJa0hBqbiaLToZanJWtRCA+wv6eamSdI/AOOueQcLy6OQqSFdm3WVIa5UVfg19sdBTyNKA3NNekeOLB/ucRbbqwmboLJcb3His7jfQU4RrYZTYJs0wsqI2FPQ2k2acsQ4ZF/kzYqiqMVmn6dI5drP5bW+wCVR/koWj5XbI9wGdBZMG32BjFsE2VwCPHSGZvFIdxw8GAoDhC9AvM+F/sME0bUEsjxUbUODDcqspb5DScPw/gqpsVXyC/MCVDO45bnWKyZ97F4jMRZPh3OHPR4tPM52NGYV3Fyl8cdxy6ppsedC2bITZwzc0RcWCjOlcvj8X+vECROiTzM9yNAg3IaGiJaiSdjDd9GNB1tXANn3Qc4KC8hEee3LsacStAHB1esOKs+4KHHI9/MwY7pAww45D/BuM+inuz4DCMxBzoy0eh9CjQq34g5EIJZQfKfbifrUfnMUd9cWp5Iw+flJY4DRw+UFKmkaiYpmcnJk4ulRQkCwxmzoVVWkFkpRfl6efH/C18HpquKyEBNrCQOxZNOE9P+wx8GGxvj4tq3W3p7LawqFNoe8ospaKxLZNaWEC9/UZlbJSTUhripmB9bQvbturOwofFqN52NOQ+DTWRaVlpC+AVoTE8UfuElLgpLc2id4VB9h1tVeHzvIvhqZ8Q3vKJNi3WomUSob+Ha5PF3UG08KiuOswGisX8KK+KFHOb7yYyP3BM5cmbcxWHRMg3uR3n5kgDxcl6K0VjXZsbL5Ubzq2SEd1NCFkZGRldD9gdhKmAd5NY/SkkAVj0ynptJHoWayw6PpUBEAPJRFq5p0ipMfgCfQRo1HIrPsDDlQGNluHWLIZRsEfb/plJ/esQ4ovImuhvu4wUO6Qcqab7Hfg4vw6bpgGc4GZlwd4oINYbmPAK+BdhenCHrMbTWJkx+lNIVMUEOJPN33ib2olPM/SSHxHTWWST8GjxzMskbtPWZc0rQPyLWZ0xzgO63zEBzhMKZmGxxaHImoFzoopOTp/0uQrvl7GkPtz4z+d+FsJiZA0xHhN5LeeA4Iw8i9ZSEPPghN8sT9f37/CzneXCE8MB81jzgN8zPwIElRJqdgXoBJ+WAdvYkl+dbPiPtIm4V14ay66fhwTK6iicncat4Al5sj1rEeX58DdqJEe/Ri+1OXPJEFE5OF58dhz4yKNVSDWKE2dgOVRTPyCdmlbFdIs+wSJBcnFNY9N2nM2dh8fJsCy/PIjOYuQ2JcCLzYS5uK5TP7KMTjpn6DOdyAQxubyNur5GXLVFJXR9w4KJyu9DFHEyiA2HdV4x9vhxeVFlRU4WFZDNegpHr6MDotbezBnQZuwXjh76wbIJ/ls2baQ4NPL3D5T1oKUrZEVjyZV4cRzBeHI5NTcEjjGwL4MTeFcJRBnoP0Iv3hnOFuFKPnPplXQl3/I719OQk2OZjjnji9vaYqddwrAxzx5lgXhMMShPtyr7nTgDzSYBpAp2M7I0TmMAzwOoKqoB1g1409QhcYwDdK+oaaOVKfA16bxRf8xxcUyoM0BwPck1IdAG0PRGK0g94fYW0rQaZmOAegL4vdA9673buHpwz2yx4C/opG9f84a1pGI1kOb+fqgeZPZFKATHJaf0KuPdlZj+J7EhwN68l3cmZ3EGAIiX5fhws9B6rAFjMwyTnj8pQHEV9G8jQEA2GkLAEuks5wcgc8YaUHS7XD70XketHfQA45mAbiY+l+eo2FJV7CPCQKJTpj6tDRSX7Jwn8IE8u4fIdccR8VM6jc4Z8xvRg8JXEiY04M7IpYYoj4IvrEfwD5nQ6zTyLhMst2uHCBJxXOrI+ATXDubzLL0HXmR6OiOClNQYDd3HrfLFPWVZCkWFOUjiCDpDptNaBIrragThOiEfWP+iIsb8i6yGwsiiZzQiC7Ekur1MRndkZ30Y411MR00I495NdEwWfyxsN57slzBuFcThF80YZWqsB+iCZZqxhuSzEGy20YoMOh9gfmbxHqAzt02BfGB/HR+YcXA0jcCu58sWDeF+kAWik9R9kPMwEyyBt4aYY0nBrr8XwDOBxNeoktM14XgEGuXGQvns72uoN0Qv2dwRuwnhDm+K2MWZJxrgx8niYJK8TYIbwk8VBBPyOxUFzxtIZqpuRzuPG8H4QipGeJBdgPJAGh2WrQu3X8TX8OP5w2QjQ7l0kgFsNA2YoIicBr1ef0FogLgfOk3BJRNjEyJ4z0LNwIXKy5/+51YYa2E9dra7TAZTF35NLc5JD98DaNmdhcHQ0+L7XhRrZD51eJ/sQkkfEPy4jte4iqnbgGRmu3LEBD5xQLOOL/DijvsWQXyR+vceDNMqTaARA0Z5DtPxgaF7T2iHySDyE8bM6hNXbsZ0VwjBuUBH46K8kB7o4Ma7xgz8K80MxjUVTwWpj927CfM2K4itnHYaI+BdnGYZw99E9szBvE+tSHKBoJG+lwKJx+yO3r8UI3ATmh9PyAJ2BB+yTMzIBzYuRcx1TXtKn4nDsh4tnBAkgJCuHu1XIXkh4selpWDmaqpksnheTG5atJHlDXpK/XhgRQxKHPAbY7jHjJaQ8AucAXUXQyqju2gHLGx+LqiA1aKQJq9AQn01cJRpUTLaYYiI8mXssIZ/wumn91XjnKtoX20eARbpgb7IIIuKFAwS/wsT4hTet4rFUhreUYlH9Z9QeVjroZxjf/AT4RpjGUVh3hYFHov4hBZwUiiGmvC1IiL2YLPvaBLgfX28ZeRUesYgLyw4ePHgw7APn4wJkCbzvHPBovF/nAccECJA1EXBOkjO3ALRikiNB7LEsWkwgnCvhiDAgk+RssPiitoP33Xew7aLi8H4PG1Rs7jxv9+7zOrZsrm0CIp5qrNmM936uebuj+1ogpIfjvfAwjGulQIfX7Ij4LVrok2r8Mlrgj4/bCiVFCg+H9oHW94zl+/euuvjiVWWtFYo50iXtK7ezm5Gf6Q629nbPPzQf/v5ItoV6XJcD5YWmMpm9nwZrndO5cmVn16pV3F66leh6UlrtJGHFIuzfTVC1yIJFe2zpIkbKrxV4/VsI/ZWG5WFUZQUxVU646grPYTBchQU0cZDEgOC1ga+jVDItXgkUwDgsfxurBsYizBYn0AVpPQhlLN6JFByOitbYdjiKWFX0OhHNc8X0tHHLRhxBv+Qkfiwd6DIi9Rkc84kaCd/FMfi7KMww0p0cLA7XN0LrBqk9BTgSb/TM1aeIA3CmClRq7AqcqQoVcTcytK4G4E3aPENlDdzoTNU1ArjNmSpsEG9kmM4UkpnAx5fPWGzrZmqqFMxAMRd/PmPlrUh6y85ML0VtJpLLOFNsRqqpJxPXFqsjtcXccTGa+pmID8dqqiJiNWVX9E7HivXnZ0cnzfpTR6blSuc6oTEUw4nrrNSROivuuPxc/Yy8CiH5fkT2rmxZ7XScG+qOxXFWw7Q89M5LKg/hGD9+8PQ6w/hpoHNu24zjBybi/3T8cC6KmcaPg3MpzDx+OBmjAvlMa8blh6vGJbCVaR25rFgbcF4gMKmL832C3KX1bvTTVLyJN1ejauBYY5qJqYmzI0bOk7p3RF/JCNPAK9kU8SROVQd8d4dkI67L0wQ69fR4imfGsyVGp47Bk/lZrC0brtGXyXuFyTY2LeLR3HPNNRjZ665Desu3gcC3FkFU/aBCXEE+nH3sQ1wpEIqzxPZJE0WrCnAkWDa9t4Ygct4OywGM14HIXJzFsJqXJKgCKEwc+hiqDdiSKOwxNmuGeTd+L5OLdQvFs8bHzyVuOSrabX+C1qNj3lpiWubpVdCYtzh6SfhViLpKotHHkfO1JYT/uuljCTGkKGzFGFo0eqOWiD4IAE4FiXAKq+4hzMLO7Dj0hM6Qj5nieBe1OhLhGIYchaksBD0a3dsj4sEozlsA5zwchRCHNROfOhHCfkFUokQ8g38Vmf8ciov8DOgomC4uMr61KIqORrUYTVVTVGth2paRMZKXaFbwJkmIok7eHInrjQ3EJhFGxZ4WTBt9aouLQL2KgxwXhcrV4sC+eFzDsygyYi0WYepAR7+nzvEMDuuh+fzWu8UQjffEZXl0Hx7b7M2MBL1H/NrhiLhY3OmmPDrJ7cZH4B/e3Y+mgOzOwxglNUKB10Svjao2puMcVlHFQtk/cvH9UUVDfTRGjNQt43XkKFi88yuqgNlfOY9VVB2zNm5/ms/zS+Hy0rn8Ai7V73F6a0oo249LlI5I94uKr5Uliq+lQONDVa0UeGyMKrd1zsV3LufyHQumyWXgEP19VNjr1nB2YnROdjTepDYqv5cYrqyGh310hdQ+UMi5Kql015qhNdmA5gT3Rldmw+noXHU2Zgu9l7brIDWEIu8NeWmiW/+Sc9hwGHBhMVxsM8WDqyccUeGVd1BH4XIr8Udz2KBvqeM5zIcUUpGT6hCwQvCF5gJUj1gbiRNV8q7jS8dG8iMriiZOI4lC43oKkMfjY6qchOuBZsXXA5VE1gINVwKlukL+1Ch6lJ7dINOK4T4X3oKgKmQmLiS6une4sducOVLnU+uyVTrnnLJ91x9DP2p8oXlesU9WaXy0kYw3UnMC+JBJV7sEVSdIok7iyhPoFujoqPITzOVEdiXRvDfgDc178/4XmW/Ycvw/Zb99DsidRQYclwYasR+G6+KosM5Ec6HPIpub5O73niGjm6ZNnymtO2LfTEgy8A18rtSZszHQY4DGNzOlZNAsqxkTMxiBEWwFNalj7TjTXkICf5RxBjspEKvwz2Qx7Yi1NzRgb9A6no4z2k/xiM1kShXGKvgz2VQxeCGBFzXDHP6KShI6oiV0F8cqQd3uYq2r2O02Ny1Hzc+VqMzvo3uP21dwdbjQbJLnFqq9M5tbAsvpehB1DbfBdCdn4pRz9g2+xoZGQReEtSNiL3g07Ovfxyt3SDCb8QmW0trY4ajBKt497gvFGwuYMsHTzEkqr8NXGkJK2JJSt7u0pLq6hFO8mDKia7lLeGUL1+tqFtwLYzgz7OXHYcpYndhPtAlLiZrXIXS1Ehmvl0DbqBrsBxluOZGp8GaiUI2yOHsA864ylJfIqWA/5pQuPBO4+Ha+3rkQc7kUcec7TO5E6Uuv/u1viZfwOzaJ8toG1+JaD3in0WELH2EhApHLH6GD5ZZM0rT7+gevOvxgX+Puky3jF69fd/F4S2Ds7itPnLhy+PLyQCBn39L1N9ywfum+nABvL2ajU9zZBOQ/qev+9NzH57ajf7ejn7Od6OcNDdyZRNDj9Ewi7PywTX7CSF6pF3C/CbXh34Ta774VJnO/WdBTglthzcgJxzhZw0FOFpMWn1OC5gjxQSUFxUxm+bx8JTkLSSorKsXnKKEnBT+ja5U40TlKEaecMINRByn9N2cw4XPSnkJzCd66MOauMOaueGKcpmJdnk6YnCyUFKqAmKP0M5rD0M8h4hAi1GmjaWUwraiL0KomFfmiMRbFfoG6aANMaqi96dmhjSIQnyezC3UR3qgTcEd2BnYdjW45b/qW8BiQoRbBSVIvUSA2yLQukYMcvXVyMMmSPDiYbEkaZMRJv/tdklG4YoUQXy+4j1yPpYDEIHFJuJsc9MaTg4NwZ9IA/IMXxm9Mep3eyr/BbbYKdiMVGsGzkM9NRKragdraAaQcqKkZqIXR6p06zWwCHmB5o4isAyhL8O5ONTlZ5wPuRUVc+CapmjtZJ/oVz1sRPi8uSRFxXpxJ4BLUcZUsCUwd0qIc7pPNquPnsdWJQoUknbrQ1WEXD1o0RM6SQ4jtc6E7Dw2S4+TYp/BZctUD1Wi4aqi6Gp8rdyO9zls1VIW/n2o+h5ww14vL1LGNB87BR8w9aW9osFc2NLDP2RoabNaGBmvzCDl6roX7zM3xGjSb1BPkKnyi2aGqnrG/R9YZ/JwUF0RTffDkpDXOcSU+MA1wWT1aMA/PNzW6CY0JPcC1rHCP5XBy34rGuo/Om3c0t9Jmt1ROML+6ddvW27ewn+0ZHNwzRPVzA7oFLQRdn5zLhaLq/KGFfPE+ZjZfmY+eOQdtDsA9+aRFbfSxXGTnDCdEDvTXL6nUlrWU2q2lrhIjSv5NscfFjF7QVmdwVWh1ZkPWm5WXEV1BD/BGgYa8UEXNyHK2olzqsRPxh3HhSqWj3fU93UO9LWZFsd3lRiirRuvp9NlLCh3ZQqul1MJoXO0bhwY3mssMfb7UlDxdY22pUZlvqrMC/mqguYHWk0RCrJCrUcOtDbf+FWmEaez1aLQSuF0KOC0AnCTQQ6XhsRd9IpeBjiyZU8aV28VjbMHARQNuY6lj/qb5jlKju8Eyt3J+v6hWoahzdTiZVHt1tV1fNWdOZbHd4bAXV86ZU3VDkVqjNEtz92n1SUl6rVKn4/a/Ob7gOYBlaejQBur6p/5UF9l7JJq4HjNlQW9ruULjAKZk+4EnXnuJT59UWVFWyTxQNZdniT+LcqTKVGula2UBGhNcK9xEzhsU4c0FWUrutdqhIW0N2pB17g3Xr83a+h2VSWOCw3Ad1klywRiwY83u8AJNTY3GaGFWX3ceXLc1y3FFWNfaQ+sVOkj9fV7XkmJlq1luzXS7LQ3uCtT82za5+H3kLre77IR29dRSNIaS6Lgunnlc740a1kiQMbVGcI+Axf0ri6wXeogvc4lrwU6tQX0AP5ec33E2tWAPxZeCxbVgAc/5AAdHg//3tWB1MxS+hLkKOC8EushcTZ5mrpojpio5H3IpGoB78gkXv9dcLYmbqsQnsxSNAr15IYr/67kqmXaq4rkKNDfQvtRFz9XX6VTFcxVwWgA4cXM1+X80V8vPbqqGeULmqeu/nac7p5mmMEenTIJrUQ2eo7LoOfpUeIriOQrXHYbrSI3e2DnqjJiiwDvX1I3MFbC46MH2t4bqoeEnrp6MFJ9NKyWGLC4hLwTtRpaCwIjNQGIpmLIGdCBTpLAVlWsM1oqWec8cSspIUlrVJboyq02jakpL+6FrkaJ5Ebv4nGNrDl6qLr9dZ0hDg6OzMjftN103et0TaMGiWbnbrysoN2SnsXrkMOovRYOXdaL3mWvZ63NmodOyWVwcHtjZR2iUL3awhDKE8EEsPR0dfLDIc8/ttaB3A38InG8RRNSrd5F69fqYcvWkWD1+SklUr544c/SG3BptRMV6w+M3FIrO35DcnKBk/Y+unl2CWs2V1aGa9S6ruURpbrJGVqxPMkst5FxcTNNL3JnAWuiBUhK/ytezJk4kWciRJNHqJDYD/gJei5CD2dn189eA7o6Ovp++Sl5Z48+bJppXsDva/tPyn//8xzJi+QT+wcuBEfh3eOyxhQupzwC3u5XwUkZqaWszkBFxAftq4I4tGfigljgkeIOH2do6e83ACczhtIE1s1vZv9pbZrEvocpZLTZ0on0J+yU6Yb97SfAGV8UEO2Zy0X174QtcfIl7+riXmTcF4mMzmDUz7ArER57cfIYzQEShc7GKSFSEUWAWVOJ9QtwHuEK6w0YewHIXeWCzET903Bdqkc2QLHOpZS6hCG+PNxyrH2paPy4P+BqG/XfXNdX+tOacRl9APr5+8rn8RQXvFCzKZ39fsDuf/UpbjCqKNX9RuMPdFO6okZEDF8M/VLKCi/NhPmb0tJI2sirwQko6C+EoZ1hg8O4/avhb23X3tKHHvmq757o2Rv/az+66li1k9JNvoYvZx69F7ezdr+FzSKdOMTeBPVxK84jw4MZOBBvdjaSbeTCjUnJl8Ey6Bk/1o5vvVzjLGabcpbzvApqp3HeRHJnZZ4VC5AaKLu6jxxXuXmcvVCkday/DOcvndDpkZom9a5QcXMjgmnnoIXKWUhHMxGycR2gg/lIXb4jLRCEDfe5Kd5FUVmi5010zHuxd8ccDdZVlNcXoa3bVeUU2Sc0d6wytJmfrkgtHDztqS1XyMhr3k1TJ3A4yL5ee+xOqMZqwFng4YBTlxZQFD4eOsk/FFghPCp1TgOPkCnCmJzmpIMupysnSq1KypCoxriMoIWnTIr6wfviEghMse+IEYlRtjrW6qx1t+krD2rWGSvQn9v3nn0eFz4MAZE7ga9AP7P670dW1Dn35zaQ+byZ6AD3AHBOk4dpRMAhggOIK/lguh5YamEhM9ERi0AOFwVnBQmNtrfFbU5mrKKfQ4DJajSatS54jLZXIy+xl6HF8jvifjh49VlRcLFEZxNJZRfJCrUosz83Kzp3NnYuQjR5HP+ZrJka3zwks9ONQU9/4C/3XheAWPPlkAVe3+zOhkfkJOeNWgNQaBSwjeFG0cYGBKqnE4LAbsPTFB7HY1FahcXJP8uzFB65dUu28+Zxjf/87qv/7D+YsuvyKJXOS0d+TUGPyYxmzl66vaXsJaV566cqsxzPmLJmYk/FICq2dPvU18w2xnUpwPCCpZH42Olp0LfX3ZlLYJu+PrKv+++nUt/Wc5onrd3wtnCD11UsEvu+DUyIllSuyPjOG/4pVZM+IbLyim0x4yRJe5hOL3B7C/Sx1rWimfjiT4jX5aSRTnz8rNeyxkG6fDDr518IVhMcU1+7viyv6HhXuZ6SELT2LsvdnRyAyzmAbJINc+lq4NKJ/Wr4vzdNb8swDZ0GoKaG1/70IvCDe3kgG/f9roeS/GXechc+MnwURK6hl8b3QZnScHYIA33lMAfqY2CpqmQmJ1EwB+3ka+yHKT0Ppr1704gu7iH7eD9L0X4wRX+fKFsmRIftN/Fs2Sk9D+eyHaezn1HarAHitFB5KxvmDBqYV/3wKpaUh5YsXXbOLXjcf4J2k8FC2KxXJstEaDJAxhlsP18u7A/Q+eTg7XmZGWA8DBupDdfKQctXF2xYuqVLuGqra+tOLHqBH0e1fvmx/d+P28oq69/etP9SwdG5w6dLgXLwfPnUrqauRSs4QUfP74Yyzh53sWc1csmaIuWuyj7mLP+/UCdfPodcjXMZCIhaSU7Eveh+tYk0ffIheYw+CRqoPtLFvss8GyJ67AtnRG2hZ6FwZcoI2stvJGfFA3P38eaNCkDLY5X6X+6IjOS9d+IkHtfisnexTTDtZExSCO5n16AtSnxwWVlfoGGv+2HccLJ6BXPwskGo5ow0G04PBrs65FUGpNGiZ29EZtOB3n1pcLkur0fhyqzHHbQAV4s4l9Q1L/BaLf3FjPXl11FRaa85bu9ZSV2OtrKFnkN6IgvhAF3oGKcm+4E4+w2kXHT6fvCRo9fkKDcExl1nD9JNzziZvp+eN4fNvHgRevA8aSBHOSsJTFvqRRCHDFI75rKioqdhQ7bVV+uHFV8l9qqjFn171qN1yj8bzJnlVu8n5QuegNxg/xs2lxcohPNQh3Ve91Rlcf3jwU5QZdAXXXz34GXvynE2OKxwbN8KTIHw2TzutB8mdjB5x5PlutBm/LqEnpN9M7ymMvIc7/VzI33MBuwc6mvS2jx6Dzh5w8OPoI6ad6cHeo9kom2mf/Agp2ecZ6q+D32T0N5SNGNnkR0zP5DUI7sTRpGXMecx5XA1KJej+nZiPdGvJme2gR4RhU0srICocfJ2Dv1TQGmr4yDqthO5JeZBDS2MZ4Eciioj+Z7O+GygqLfOXlfqNxqJz9+5F9aVFAfgMfwFlV91w/d764bo6c1uruR7ecB/azDcEjP7ycuQNFhnhzd172Y/8xkBROTqMwQT/NVxfbw4EIm4JBs11GBgnLwTMCsaL5wiuoMGsmHyG8cBnvI/MChTMcsaB+WFCiFk+eTVyKIAv5LepD5nliCV8ZJjl7HPs84gFhsngGxgHaIzk55FTwIVim1goTkXPSm66SXLT7ZdcegnqAPPiF+zbSIeK2T8RPKwgZy5hmiN9CMwld5++++7T6Dr8fDfpnw+ZL5kTxA8qEhvgTy1HzJefDH3y8eDHSDM4hG65i/30zjuR+C6Uy/6TjBMTPC0j9IkohUIQNswyTGU162K8k1+jV1mTIHTtLcybdP8QiXDqvdolzBYaXDIx3HRL06zJZ9Dp3tZXnyu77hfsKPPQjsmnGe+Nk+egu9itpw2PoLkYEpbpWvQFk0fkDkgW9MW333yDFN988y35bQEjhjaS8fgDwIgRsw8APDCaH5o8BkCYQhKrkDXlZd4itk8pWJg105wmixJ9mTgDOebg2UL42F5jUojFefDxdExWcuS5tOwo/ZRVnQqfdidMUhZifNHjBN9CHBVq+36IhTH5MiEmM7UtEhRMfSHsZazEt4RltFHgwvJdECroGvYCCUEPSOF2hG3W5JCXRxdxspgowjekavNUt7VVu9HCwLoA/NnZnXa04x2TVmMyaYpRQ3lruanZhOa1ucllbbbyYm15OXzz/qb2jg2dbNDd0eH2dHSgNZNvMfpbuhzODsfvShyOEoPDYXB3dFXBbx7ucyjfrJLkP6mozc1Fp/iZUGRIBmOwkoMRhTg+BQeGZCBkHfDJ65yNCs94fZ+/sM7ZpPBM1Hm7lEWny5YrT5fVwts0l7F/9LraTeM+Z/n8hdfWbprwBXo2tE40sZssKHO8GV1e0b2Bnut6iikDHLJpBSgzQ1pXMtCyHlq2mxG0mCtFxvpxjwK3WDeBXye2X9ClVHbhpzTfxKad0JBvHF5IMwc3dHfDE5nrjdBIJo1tKkW8Ux1vnnF6sprJZJ0v3tpTvb7ept/asuDSo8dRS8PRu7u8/l6H1TUxcs4JcmapD/CUAZwSrsYJtzOk57RvZ5z6jaP9y7q2qSuVi92tvYPtnjmp7sb5fbXjQXPvlUt2DLhcS3al+S32EktjtdeN5iKXy+GbZ1862l3fNTulv61vJa3nAk9qkG9zaL4uPlDPho8VN2QL0VM97FNIuW5kpOfjO5rQT9n5bW1omD1O6G4GfIu42kvRajPZmORKv1TeMM/WtL6xv69xsM6HrmMf9o8MbtudtrJqsNtX1+mXoKWBf3jXPbuZyycFmDrgQQE9LzrSmM9ACsTz1MA1RdwJ3kbor32Xbmgsc/f6B/T5yz2jW3eubp3X31A5VJjSnVa1+IKWQ892+Rs71jcVlNSeOzG0MzDgaA64ygNrqb8X9x8579ymJUFx7DBKB5X218y8QDXdL/QCXgWkj4vxHnFSAs1bkivEp27p6a6DmGzqIUMGg3Mqr3xh74LG2t49D+7tq21c8K/cUruqZ1u3yl6SW7ugpk4ur6sZSlvcUzOcmzPP1zs42Oubl5M7XNONtMKMfFOh1euxFZryM9gnau0lvnyhMN9XYq8l/LJOfcEomVuplOJ6gUwmsp/goGEoMMcQrvyCz2QlKZ4Z61rK3H21A8Uof5lndNvOFQ0TXkXVjtbKBXKhRF9X2tLdnwr86lrXmD2bMgzzcOTaJSjgMqn9VZr5zuYAsU1AVjHOKFl1tnKKeKjPRiCBCDqj/Omyc2eJ0rluJVWMBQjo1uA+8jPABb59K1NmO//O821K7/jOca+yr6+vt7//diQO7ujv3xGsGuuurOweu/Lebdvu3UZ1rBvh6QpGT88pJhY8uqJnpfW2NnRine0n9BroDWY2tDutDEAsO+++ezurN9fZ9LtaR7fefCGSNgSOBG31WAYsmTdwi4vKgC0gA4z/Wxlw2VnIgKl9IAP0VAbotBJeCmizhYx6hBMCP//Y9ZOfNKE72SE0yN7GyYALQQbo/08yYNf/n2QA0J9J+1gWLQM2ckLg/88yYBfIAOv/XgZceDYyAOccP89YmPkCHcz+ShxdHvadeVC054z3LhlEwgj32RfZBUV5xqLqutt3JKUbM+RFucYCo6YmU3ZplqUnr7ZnT3pBxrGGnX1rxuWKfUqFw5ac0bxAv7V9x1FdaVJa9Vx5hVaazW4wFmvPY4yobdyPtoouYD/OEqEj6UI6P/G+/1zgEdk55rxe/Pa+lnMEOOI8ATZ0wyTDTP5LtqKJIrL0hgKXmWHMroIblu7rrMnvqWhaKTuJXHmpBWkWXyvGYM2wJa0gNc8yfO552mJjm0/A+SP3os1MJbV3SfwzP6RJ9POKnoDVr9RscqjVGYUeSeGK889HHdW7b1B5c4a2V0Mf43O43obxif1kOL5WZIMHGKf44bKRBxioLlsmgp/Q2xkDFYOZQ45qB370ZvZXzM8YgHeDzmpn24BlCFSj/RU/gn/wciP8q9hPzhid+gIdAxzN2BIM+wm5fXQUfao15RsWRXigtVhWtruGpB5la0W9OEu8e2WaY3Z6YafEmacpDepAT5evkL5jaXA3j1jKVLWeCpk1r9Aiz/NphIVFVQZNkdPcoCCxqWDVMIVAZ8yZ0jjrkT9T2t3x2muv/eLpBffePfTEPb/73e/Os7RUoMxvvmH/XdFioXs8x2E8ruRqzyY+/1uIz/8GPdOx/qqr1nvOb60xd/cZa4Mb/z3R1TUx3D3npk0bb0z1eOaMa+vS2K7Ueu34nG60tv+CVPSz1PNJbMbXaAxdc1YxR0geG3OEsN9NcA86SHWOyPNcyRYuwvMI9QH83PB6cobYjNgdaxyX8TWaDzCKuTOa/ru4jNUzx2XgXHygJ7x+JIjLGIuNy/gaDcA9/4e4jIcSx2V8jUaB3rwQxf91XMb2GeMy4KmB9mFMDBVaGoqhApwWAE5cXIbufxSXMXH2cRmUJ/+b+CmUM338FI7DS0JjzLGzi8PTJ5gTKFVwD9XDo884TuUdG/j86lTUB218j/OrUxOfX52E5gOc/8351eiC6ScHji9MRQt5+2q6+EJ0bkx8YRIaoLbV940vRM8kjC9MQqNA7/8wvhDtmTG+MBU10L6MmRvMunB8YRJaADj9j+ML0XnfK76Q8uV/FF+omH5+kB07xsG8yp+FILbR84V1kWchnDznH/Nt7Ie2AXTFho2oOJwToZ9864ILHkUy9iN0OiL3lcI8zp8NEQkTlNhoaEZSmzEC0AM051c01cysgTVXgm0mgBBd4piHB7BCRY1h+PJQMTy+mnF1GQeZ4gZ9L2SYz+CdmD9HFJDSxuRrMc24PMscdtebcwdhCbmRfRkQfR1VsrvuZT47eHAy54ILGH3TLU33XkAhUx+OBeDy5xHYpzuPoG/H7bfvoGragq1bFxAVDuf6pd383VGsnG0dGd1GlMZvDh6MgquYFi6fLJcI9CKuwEEs9BVcTYOzhE8SaxLBZ7gCHHHwuTxRCv9VgK+cFn4o6TBRA+tJ7mEc/F0RNb5rcJYK0CCimaS0Nn6C0vii3/zmkmNHL11y3rnjm3/FZQDpf/jZkaaNA0Mb2TEmn+MJjsNyktievJDGRyFGlaPP/k1NDQa4+dLNBOSl39q/BGjf/hKDu5erBfRboH2GGuzot+xFaAf7Cipj30AV2RFTC48uZk04V53A+mzaOtzRgK7jqSNQeLqmxydcFDkKzAk+p4nCsYQSSHlYxxPXv4+GkkqnOAFRYaF1zhgT8Dc3bJ/7UGTBtLXnVOlMfoeffbijG9V3LHu6sbrKb8tAP2F7GT3YwMcnn50/KAjlXzOcrT9trXX0Z67W+rNhrCLKqhLUmvha66eg718NZe3HnuGAB0NUJe2+7Xfcsf2y+T7v2IItWxYMeO78arA0XH3g2HfHxktbt4yObKteWf/8QuZx2qF8O59BO0UztBOaefGNCLmJF9vCCu48EPYk2QPLo/b3NPATpB4maKorNrMvps3YGiNnx8OIQZegzd18sf1Y+naFzwvBMXgWfk6oiW87m9RL5tPZLe3sA52dqK19LWXWV18x+o8+qoqsuXwJjB2u5jK5P77mshsDCQYxmECAXYHa2Ae++godsSyAf5aREQEz9TgMRCXQm6D27/WdnZdGTOr9kbUnmBpoO1QfVxzlsLmhs/OjkSq9sdbh71gGy9lLZAagbewOMvCZqUehzRKYf1F1jKG1H9DJ1mEh/v9mwe+hjYT1hX9Kp0RqZ+REIMsmgf8GwM9k3j5TfWZoUZIokVBfmqCmyaypU+gB6K/pa+PeFKL5GW54R9AdWlOCMLZnEfkcXbdWmKA02qxFbzo6O79a/J/6mLTZz90nQJZ8isTst2xf4jqqxwHX2Fq0x9nbOtGcWbhQqJ4tYu6IrPsGFv4ZarnSu+fHFvQESOj2BDiwJwGm/gy1aynMzQlgvhxb443gqI+s6arnc8kolDm0pivc+yVf0pWbZybgRaLaqaZOTkh3Y40pJKB/E8EX7t6E9UFDt7/AFWULQaii9UFxX+O14sz1UkOgHout3hleNrpimEzrQi4l+u+Z6kL+9rubbvruJnbPg2vXPrgWbQ/L+OOnjx8/Pbr1sa1bH0NTfF1ICvez6es2Ir6cSTTcJL5SSgRUxs2l2YbwvWvGupvREC8iVXoikfy1RRA6XxHjKCanZejiT13ndrSxF5ShWfpEhQ321ec2GAdv2tFdL24oG75px/Da6inzAadgylI9jE85TzPIPfN2bz2uL3B3w0vT1sf87K0KVP2YFw3JEeJpIfWhiTyQ0IpaOMaeO/lHZOCO/CYa+qnhg2s6/9m3qKe+xF5VbbsGZUIrb7zB6Efbmucn+11Dzl+j12gdmQiYhdPB5BXCWLCH6SCMAdxIk8SFXL1sPYFtmBZ2gtrZMc3cHiOKottjh2Nz9lUgN18DmnTYIpVFHms+TWXC75rXFZcpR12N9dbgQNC6rm9Xe6l/qR0+zQ9a17hwD1UYPOpyZ4m6LCe/sKaicaDTVV+pLyzOLlA2VrYNE+OD1uCaqoO2rbi+4vT16GYqmvd1ZD26rY3TorV0cWxBujnB6VFsGUriq+ZF8qf8LPhDV5qZWVTIrT5n4BKna6lgXGAe6XA2y5naj5fgM6MSV99tZpx2xNQmxmdAPApjNjNi75qvoSbu2LjxLvTjOzdu/LflV01Nv8J1u+j1nyWuDyfuwJcjTlT/ralpe6g+XAHwALdzptp4FER6bN1QgDV5dey4xzpSMchmUvcriS/axOsMEUbUnR9s7uwOzu3u9Iel8gXLUDf7i2BffwCnWSxjWvgNCiEH9zO+flU8ZF40h+A+wEvlWKgXUcnM43qc1k2Lh4jFcgiak0jkWFCzLLw9Uwx8VEXU1bJF16kK7YIg13oOYqA1fLZTDOB5ayThg50EYfqFGr42WRy2CWqThXB/Mro2WQwR6GR0sTCeL/+g9fPi+ZK4il2otZ8nqp8X12acqsnp9v+GPk4hkXJ8faqIklcMZ0Dd1b19a88t87fuqt+5rZ8ZwWdi56B72HmgMTShh9lG9AjdjyI+oM8Es7iZRN0//HlO7o6/Y9fPu6MU5kfI98037FNoI5UPuArOn3n9Kabm05/ZIGpiH0Z3w2Oul9R8urXJww5RzZK/99Vp6zRF3f8EV6eJQrDwdZpAKgmujrRPwud6HOjsLAkZ+Z0R53qUT10l+FCId/BwTmMWrg0BxtuH5v37zQ67PaB9Ep18UrPsoU0bH6brRDZc/wK9vgg5sww0CiB72utLpm4UvCvEkWU4FxiXkbS9+9BDF144JhxzTc7hYd4IMLlrHDZsm73w8M6dD4+5mNMu+D0Zfj8Fv6vw7zj4E0arA+8l8FG7CpQrksKT1INO+a0BeUGBPGD1++UGk8kg948FPS8pDVaD8kUSx/tak1jc9KrGHG57ioPtIBsUdhdpwYgc5OgyGMQS0kKKNtsnLwGIhT6fNSjPz5cHrTg8+FUM7zWNyRX0vkiaeYmPE8aRn3cwt3D9IbaJGX6PV9OYWZM1QQ5GKEfvsCpmoFyNPwm4PJ1T6BG4j5wsjXCUmjBc4RLHrwkddoOTRsLakVCvczh0vqolPmvHvsGVJVXVJQU55PgF9I7Kqq0yFFsUJY55jonB+rKGMr1Zrsx5hxzPQNpSCm5G1zMisBVS+QoJMlon4XpSJyGLPN98389/fh+pmBB3DyJVE5IjaycgC33pv4/eRuss3Ixmk3ui6zDcHKrDEPodRcHCQPDvyI4y0CYSB4qTnTJOnkT2etqH8Btj434L1Xghv5LfhNrwb7TGC/ebF6kEd6L9NJc+VC+DmEZqNJ8/uALHaH2MVOiJRDU5dtGaHHgv5Ev0CnNQIMXaqCyx35fBft+U74bPO2/YM+K1ltTWlFo9ow81ejyzh9KvWLJ4X3pby6ygyZXC7k+pMrenDKIbrxhLR6vTcYwPe1Jw29QJLB1kcavtbTGW0OXxNVZpHNGR+DgixszFESUJOqZak9xc3qgOe4GnzxwNnVMQc6R1gqzRJxMdcp0gXbSPnWKOtMaeek3i06eWI53gK9DG5ZS3EayVUNbqgbWOlB+6W1rcpW6dXqbRyPTFnvMMavW1LlHvpl5RuTHZolClvJGiUlYkO7/oqp71+1kENjqKdMIK2m/imH6bDrhWygFHR52iXq8nGnyKgwcPfC+cUguWT91H+w1AQr9pQv223CYSZxQgxKAMqTQrW7Klrjglc3YRiGCltID2WyEaECxHn+D7xWe8Hz0aA0AoyJ+yokHkgfW/FMenyxy4BDbwMCmKTqUQd7DEZYf3fmTIlTky0B2jldoKf76yVJod9Ja1m7Qah9JglDbVtem1Wv2jAXXpS84Uj6Fy1r6U2WJJsczsF1ZVi6xa3awdogx5qcJWk+y8raBw9s6k4j8axJuEaooPWo4Ghet4fMTfA58Rq9ZUmxifYh3GBy13pHjPjNCu5BBCSJADkudWAT49Q4ADcG49fFhZQb5n+gW3Mpfi78X0e6a/gtTtXiFYDf0JMkMaijVcLc3Mgg7IXKyUSpVSWt8bHROshn6D63LirkOvcxcysNT7kZ/ZQ84Tx5It8RnboojTtf3VpQ3ljQ2mxhKzxmMosHdWt/2gSqmsUhuNqFlrrLJUOstcSq1Z73BW36+v0usUSm6fyQttrWO+EqTheSQORbDBtBWFyoIQ/+OrJpfLVGhPT7fXud2lDbVdXbWNJWh1ncNeXyC+SpxvQPfe6hwKzh10ErglAHcE4GbQk+giabDhc9B5LxAaqS4DYPNqGkrd1/pVGfZCk9OJms3OwbnBIeet7Mbyq8QF9XZHHQdzAvhCzosRx58kSj2iopfbRoabW/pYNslr8eoLrNmM3WJyCJF/uK1p4cJAhtGj11ge0fu8BhyfiZoFm5gvyVljUeeMLSTdMcvtZn4qxW/Zi5Gb1k+B67+iYyDbtsntRs3oXjovcW2VKcCvKLK2SkSNFSIbZfQYmqlqt8ycDk+mdLc7zavWmGZl+jQLUPMrdYU5779SRyuv5GhUBTLtGEf7aoA9B/tvxAnzp5+LSZpG/thUaQ7/d5jdpH4Vd1KCAfADOszeXJk9FUhwW1wOVJjDyxo/0kK7KtxqqJJhTEoznplH59kKSuu1hppATX11V1m+qkalK/V4SpuQ31FcUZiXL59TXqJzmLUGuUQsSc0s05RV4Xp6yC/4DfMG8T9zlbppcQVs7EhlKfvaHQ53XV1R3mxhugz5O54r6+8ve9KQPqtIEjrv8GGyL0PPgpJw50c55gx0joygOextd7XakOBVV6vr2aa/hM6IFl5GYmPVRK9OCR1JGXsCCrFWhJexu2p3b7n22i27a9GFYXewbKwWL9t1S5ac++OvfrxmMfYkbT/e2LD1sa2Ngu+9N8H58mbeEOBK6Z9xb4Lun4Ztj4T1VaPMhwf5+qrUfsjnz9TVTZ0WXEV8FcBhsVArDGtFuzPcGYu5Q7307E60kxVxZcPgatXUL4H2DeTc4sg1RjiDTEd4Tc1Af9veWOYZLrFWFy5u9yxrKLV2lTq8ypGhZXhssFMWc5k9UDN7rqcu9Zk5ORpnsb9f1NA4p8HlmHN3qljnNjQMiWre0Royf5liQzqFOv1ospnavvKpL5g86Hecs1qFNRk9X0nVFSpEmMGIpDKpjCzyUhCxegNchM/xwREpVDgyeaNJ3sBI10SDx9hXUz1XVlmizS9VFZfkeopLS7+oqbLnG4t66zK0VdU6ZbFJ6GrqbfUElY3O6oDbobQYpNlFxuJib13e/CpDntOuMJdYGsxedJHBUVChU6hMXPwzzlM5Q9x45feLG5fgTL7ouPHk2LhxnGB1esa48U/OKm48f+pC9Dlj+X5x4ylniBvfdea4cdXUPiZjmrjxjBnixuunLmTkZ4wbN32vuHHch0qw2fLp/nqU1JwmbNwRETa+YNH0UeM3rIoLGscxxfvQB1Ex46/HxYzbAaec/3vM+N7/VzHjlVM7GQVT+T1jxtPPHDO+82xixvEZF6fRRmi/AO+KwXyDtkg9J8IJfqSGTkHc6PA7CqqL1Waz2mkZqCppvqBz5EIwElVmdG9pndqcJ83JK9QXmooUepm6tKlioI0dxr+qQvtJjv+vuWuNjeq4wp67xA7Gpl4/sENSsNdhzWP9hN01DjaF4GJYx1uKKQkt6zXggJsKUENwKYQ8xI8kKJIVqihxlNAHTSH0oZCUVkrTtBZt1KpRqjYKapJWSmkqGiH3EacoFbvuzDkzc2fmzr2GqD/609be852ZOTNz5pxv5kC8tFhjSGnsKIUXJfIlefrNbLi5BqwLZebIY1hSnsf685dJqPf2xMLGzs9vaYova/7B6VhLS+y0E+1b2XzrrFm9LWs2dDcvWhA/c7np5mjjt9ldVeDrtDFulA9bx8rSMfk5MvfXDm0ss7BySIVCx1F5OKKuLPkV5Hg1donOLEHmhvZ7uA0rfj+WFr+FXxbw9iEvwp+ZYOMjmDwEjkn7KorvzbrsA5d2gHwDWSd3DPZQiMCNpdP0D/p/lhPfgr6LnhF3U+Eleu4fca8XuG722811K7lt0TeY9+VZX57tZXleIY/xIEpglOj+zk7xLER6pO/lyMvpu54/cxf5CYuE5tfQT7aSb/FvMC+rZGXdHKybc+V8kJ20z1nO0pux1LKVap5S5tUvwVpejj0HFr+EPQQANj6WvrQpm9n89OOQWXOig2t7smtYGg1wLwBuKX9XAZe3ouqiBmqFyYZkdYJfKSepw0yHzyxtja/e3NHU29q7lOqCyhy897Pti5Yv7J7bv7i/844BqtdBoZfIBfplLs28n57nE/m1SZ47mtY7DHYLp/EHC5RcUJGboREpnXe7uwWfahLyD2WWaL0blzdj8PitWNPAt4A4O7lt69/ueOWVzdQUWsnr4r24fwpbU8PxvWoc3gzAE3hfutm1+foKDMA7zZmzL2befSPznZOZ37/3HplLSs6fz3/o6sPubVyvROxlqJ7H6CEWDT5yFJkesnyB5hpznxj3dEbTPea0uPHbEN84I9FW1x+mvvD95CPhDbPvqqc+JA/S7+bie4Rd1BegM94I45bjWwWRat/tZZ99dyEncHcR/NsJC/+WJb61HeZHy0/1qezbb4wGfs9CsDp/dw4wYaQAp3V0VOEAo4ywqQPLmWhi/sOfbFc1YbkTIeciyInocqy5I03s81Zqkotx3MwczeB444BXAbE/F9FbSETvi1laMREV6H2lmgjGVAEnFAGccgOn3JN/03Ce0VJwWnuMUj3U5pDvHIXaFMy6TaZzyLGRnA16M+ybq8AvaPLUzuPvUZpugls1r1+tmnfP46bvcNu9ZuJ/5vGRw6o3MVwUk7l+lwf7CS8PVvcODoBtcwZs8LfAw1G/vRHMGr49BTzsIP4tpAC1zxPCnhEdeGshLmOcyqhkzDVViuMxLV3gIsO0QO42zaqcqd/RkXoRuO2CE0j7hHoac6Ej2qEP2B2uCu03VHv6mwPQYKgPOTVB5VyG3xRLOayN9GdbRcOQRBma+iOVN5O2KURXdF5xPOFpC/1wj9GAB3Td/5eca+qXXKRreZ3GN7MuFq6/ctayUrg+TMJcJ0IGv8vr1YA1ajys2XQUNBrWc6NXIcfLENvN6DsGO0zlhqGsOVad0FI1cRs51UXTDNdelHcR5DVY5NmT97r4WbYMvop10rsGI+444NawcTSRCyyzRUPdoVmbhveBangh6ZsiB+4qGHDB7LdA5pvLh5jw44kws5Fe1mlmMSbb4V+jBVchR2OvQF1YC3NFl1Nt1wdMRoraxa3Fo5WovYXyxqm8G+zcEu/QSeGf00fN1PgWfRNVORklKieDtV14eV+lTeeennOdytW9BD4oX7GqlFNFnB8r0k+Lc0X7Mnqu+AI9WAx2JxtjyVelf3MTbSevMSbRy73tE7rs1ZonOCI/VVvlML/b2c3fJLqG94gsLw8pf1peGsK/cN1gLzGJd4Vqp3tXiHaX7TWh0lTK+4xQ7iVyAdtEzoD8Gv82GVJJkS4wP8DqKsyA/nHfbIp/rDebONg0LzXJFvk/0QTtg/5zXuM6NV6LRmQ6TUhhkBLYJ1j/LAH4dmyjZxUJfPynJkMx+L6Wxent+sPBFGOUbE8Nu1lBc+AqN8RYPj+2oTKVWrkjOzKSHerS1P5zbWzXieHGuvw3nafyU5uO3r3v4f4CbvsfgR4N/r3oqgC5tCod3elLtccXpeekUjdmlo7pnUW6Oltj8/PHKWikZQzxQmW83X54MrxSZAANZb+3IZXKD7ypg/wh/QiVv5aQt+V5mpQBd4Kd78VaSP3js/FE6oaaunB1pKQj6SRyb0H1WZGbIpPk75g3rTPzpomkyEuRyVTXUHbkKwM7VqbeBvrEkp7+/p7+h/fdfXTTunw/UCWGT+zCN1FWkHeotd6k3rnylKmsLCyY2rsuumxgTR+vUcn68vC5dYlV61f3sAKVqfxvOtuWzCNb8vXbdrFaTlMfOOecZ0VlVu9JgJ6mqVNw5NFzv3js+I7VtTs79jx2bPfgl0vzE+RLp0rHn3jyZ4cWL257YmT/k/dsWf/1cyJGN0j3ZMGa12J0CfbwYSV57d8nIUTXuZ2F6HruLH6d1GOMbt3Bgcyh23tXP8Tj71S/0HrqD96sVvYK+evqrJAk0q/ZtQ4tBi7plVMW7cWdx0Hg7NWpmI5PW5xCCVhlaZXzAqDl6ozW0bbl/wF9H2a5xes87J+GgPH4ucEM6rS3VCMMZbzNxXtmbKzCvMKDoUPCb/weNRT4lKXlGvqAObhY67mJzq0qnvcNs7yvG0npJMUDqWwWJ1l7PPGXFQnSnf9rckXytzDXOpI/lONFwlCzMCzqFaozlYSpE1EqpyuWIDTnLLsbUAZv98+3MbEaNIk/NkuDS+F6kzUQrFfc4ZxEDOK5XWRo3WGAHJEgzpCKkturtyWE6w/UfGMsGOiRioBV6Je0ew7ZViIslGhbj7wYzPENwBimrjCZbwWJTYtRiFl+yQL2h3kO3dvv2oEYN9gKhWcWivUI+IO1bD5azigBwC9pviGptyqwR3EVc/uD2szq/kVZbs9+RgvqgkHLgW3Iqo5RLDD3prVrZN9gHcQIiyARSy3EIJ3qjTqJ79v10Yon5r5vUUf0z33S7uhyGIT8DqPq11jh0i25B4LGgNWSrNF3nSCkN9yi4lY4rD+Z22TtZLaGfdpppj7DJ2EdditRq3hhrBvZoMA6xXgNdKaEdHobF1yQsPxmqASdR6K3tP1aIjvoV8A8rpW1Xv29C/ICXSvutHgYbKm4cr+fm0GlIw7OryZrTedA3Ge1+XWrTQN1dl0546sKjm/oIO1rNs+Xejy0Kp2Qxt4VUzp8AfLTVNetY//2ffkDWJq3Z+d9y5VBz0I13pDo/swXj+2tgGq8w1ExBm91bt/WVfB/864p+lusJrS74gY5W7NxxV1o9z+wbPhRHz8LseL0LB6hf8uHb/29njG4H9Hmg3Uerj/kiAVN+HQTtG/n+XulIlxic04fUu/rSzeGvKq8k8F8Rlat2Fe+vPVhA7iMD2UY8v8k38mYgXZL5yrabfLjWS6EV67JekfonJ/WgslpjEeJ9aQQea/cfoKm9hh27HLbnGZbdsCywn2qVXA+qzZPaC7LzT2rbcTcnnpkI0TcCIAzLB1HPEtH/M6UGohxeG6QSNqxcqPuovEz+1oec0heU8zBA+8ffYga2liDEIZu/wVRVRL5eNq1k89u00AQxj/baaOooX85IECwp5JKjWO3KlTOqfTAqVGUSD3AyXLcxErsjWzXaZ+jRx4A3qCvwJUbJ25InBAnuDLeTKokkAgJ4ZW9v13PznwzHgN4rJ1Dw/h6gSGzhg18YNZRxFdmAxXtJXMBO9oN8wqeaT+ZV7Gjv2IuoqrfMpdwz9CY1/DImNiUid8yb6JsfGTeQtH4xryN+wVB0bVCiVaRUpKzhid4z6xjHZ+YDTTxnbmAXa3PvIKG9o55Fbv6U+YiXutvmEt4qH9hXsNzY4O5TOwxb+KBccu8hXXjM/M2KsYPnEJSJa8RI0AXPaQQqMDDHs1ncGm/T9SmtyFZRkjUc5/2DmDROIJJfIIBDTHlJVErn2af5oyeHbLEqRxex0G3l4qKtyfO3Lgv2kEoo0RG++LAso5McTIYCGWSiNhP/DjzO3SwSV4krpQOl3w3aJUpalFENGN5FYSuaMjMFS3aaFHELi5JVZ4DWn73cuASTHKaz8ghT8tiTHtzprJHnsMkBUfM6hgHdVRi8ylMnFfnpbKL3EP1Tva5KmNCZ3OxAjYV0yYBNurkt007llqZPNfpI0j6DJ6yz/iERfchjsmdHyeBjIRt2pZdb7aFZdkm3fWeTD0ZZfTCMg+P/03z4nIGqj1ySsnGpdbwlc242SQuljafOfe5g0S4Io3djh/m/SQvZvvKxBJfmDGFat2UfggHNRojNcw7bclvSvL6hnQsTYdOrTYajcxcQzIJ7cnw//hcVNuZyiz+C/620/GnfsYvTNIM7wAAeNptWAV428gSnn+a2nHkQPGYmXKFa689TlM3dZvGbRK3TQ56ii3bamQrle226TEzMzMzc4+Z3zEzM77je9KuIsnuy/dJ88/u7NCudiYmJvH37xIaTf/nj1faLxDTMKqh4RSiMNVShOpIoSjVUwM1UhONoJE0yl4/hsbSarQ6rUFr0lq0Nq1D69J6tD5tQBvSRrQxbUKb0ma0OW1BW9JWtDVtQ820LY2j8TSBJtJ2NIkm0/Y0habSDrQj7UQ70y60K+1GLTSNWmk6xWgGtdFMitMsmk3tNIc6KEFzaR51Uhd1U5Lm0wJaSD3US7vTHrQn7UWLaG9SwXQJHUqH0X10On1Oh9PxdAydR1fRpXQ0vUmH0Cn0I/1Ex9EZdCQ9TO/SD3Q+XU2/0M/0K11M19GT9DhdT32UohMpTU+TRk/QU/Q8PUPP0nP0BWXoJXqBXqQbKEvf00n0Kr1Mr1COvqJv6ChaTDr1U54MKtCFZNISGiCLilSmEi2lZfQlLacVNEj70H60L91JF9EBtD8dSAfR1/Qt3Y1hqMFwhBBGLf1N/yCCOiiI0r8g1KMBjQCaMAIjMQqjMQZjsRpWxxpYE2vRb/Q71sY6WBfrYX1sgA2xETbGJtgUm2FzbIEtsRX9Qa9ha2yDZmyLcRiPCZiI7TAJk7E9pmAqdqAP6SPsiJ2wM3bBrtgNLZiGVkxHDDPQhpmI0410E2ZhNtoxBx1IYC7moRNd9Cf9RR/TJ+hGEvOxAAvRg17sjj2wJ/bCIuwNFX1IIQ0NGWSRg073YDH6YSBPn9JnKNDlMDGAJbBQRAllep0+oLfobXqH3qc36D26ki6gc+hmuoVupzvoEbqVbqNH6WB6iI6ga+gxWkn3071YimVYjkGswD7YF/thfxyAA3EQDsYhOBSH4XAcgSNxFI7GMTgWx+F4nIATcRJOxik4FafhdJyBM+lYnIWzcQ7OxXk4HxfgQlyEi3EJnUln01n0HV1GJ9O5dAWdQKfSabgUl+FyXIErcRXdhatxDa7FdbgeN+BG3ISbcQtuxW24HXfgTtyFu3EP7sV9WIn78QAexEN4GI/gUTyGx/EEnsRTeBrP4Fk8h+fxAl7Ef/ASXsYreBWv4XW8gTfxFt7GO3gX7+F9fIAP8RE+xif4FJ/hc3yBL/EVvsY3+Bbf4Xv8gB/xE37GL/gV/8Vv+B1/4E/8hb/xD/5lYjDzMK7h4RziMNdyhOtY4SjXcwM3chOP4JE8ikfzGB7Lq/HqvAavyWvx2rwOr8vr8fq8AW/IG/HGvAlvypvx5rwFb8lb8da8DTfztjyOx/MEnsjb8SSezNvzFJ7KO/COvBPvzLvwrrwbt/A0buXpHOMZ3MYzOc6zeDa38xzu4ATP5XncyV3czUmezwt4IfdwL+/Oe/CevBcv4r1Z5T5OcZo1znCWc6zzYu5ng/NcYJMHeAlbXOQSl3kpL+PlPMgreB/el/fj/fkAPpAP4oP5ED6UD+PD+Qg+ko/io/kYPpaP4+P5BD6RT+KT+RQ+lU/j0/kMeoAe5DP5LD6bz+Fz+Tw+ny/gC/kivpgv4Uv5Mr6cr+Ar+Sq+mq/ha/k6vp5v4Bv5Jr6Zb+Fb+Ta+ne/gO/kuvpvv4Xv5Pl7J9/MD4UJfcUBNaeGWvJqyzEJYlTTU0mdpS7WQKki4xcyaBa0/rEqqtKZ0K1XOZwxtuZLycV1r2iypqZRWKNWlPBianlIdlWlJptv61VI45hrUXIMxaVATpC7mK9I8GI65bmiShmJSoyaI0hZwKhtwqs3XlfVgtC1l5vOqy2QDjDIzoCfn45qZfapVk7NfoXhJN9JaSBckHHcj0d1I4jISXaYu7vqsS8rxWawvVmYFbCz2cXR20Kv+CiZraVrBUAtpPRVqV1PlkhYyBIm2B+WMABNqlwkyBKlpt6OvMexXqEOuL8j1HcH1heD6Drm+IBNcUAfMYskyB3LasFghO0wrZMMJN3jTDT4hgzcFqU/kyoWsapXzhlou1ZtBLtQpfbCkD51BH6ygD53SB0uSLrmqKIjSFUhjMZDG7qC2UlBbt1RTkhnpdra05GxpUm5pWW5p0o2q7EaVlFGVBRmetPRCdnjZedcnKyIsB7lw0t36svvVLAh4uyyAewJ40MehXhnrCkHqev1jvMKDww2zkC2GW2JCJqxqMi+JoqEWcxKbPo52BfNSDDCRXLE8oFm6aUVXaJbpMRmzbPmMvlQbYpSivnwI1xftrBQ8TtOzuZK3qKAXvEUjBlTLPsNaxpseKUas4IpIocIVvZCRBu0Ueri0zBuvL+XsD2OIEw77jO2wt8Z22FsjHPY44bC3yHF4iPEdHhoJOOytT5n2LuRt/0qqNahk7PlULmOphVSNoVtquFzQJ4xrmRwa0Iq2xHDLjk5zB6dG1IyuT9p+8sTJNbGyZQp28vgJU6a6aOKkCZGBcp+hF3NaWilq1lI9Zd+YVn9EK5bsC6ekpWsdwzndSkfsrAhQjNhDIqhcVGRH4qLi5MPFUZECl4molmUuc8IMC1QeqBNUhCkn0+ayQn3J0tVC1tDEeHSIE+uceCaOn6L02XdSf3FJ2c5S2BHIlgckTRcU52gbWtE09HREytkJi/SphmGW+szldfaTymmpfi0dTuuqndB0RPBOvMMzizKLFg+znyb7cJRyZrloX4XNZqGcr3OOSXPJeUcktAdr7WQIUCcyIGDEORwusjMh5exjIeVEQiQUaZGCzmkQKGqbdb6UoEkHOrl2kTDpIMW1KUSlUQmFVSErzApZ167ArmEhLC07cGTFARMORJzTIpCSMUz7xAvcaD99mlXUs5KvL5Y0y7CvKcHVDmpyOOLFIfOVLph55xRJ4EThADdxDpSJk8gJQcg5EQg5GYCA0n8hKNwXSNiwjVnChgCODQe4NhwobUjk2BByjg0hJ20IKG0IQWHDQYpsV5qL+dRA1G1lXEbevS4jr0nBKK1BLMqBwE2B3kYMNPpNjRSe7gsrspmROOb7oMR8mcZY5fpoLOBfrV1H3dGAo0qbr6qprcqfEcHORVpoq7TQNLNqScRpXaTmuK85HJ8lTceDCYsH/ZCNjlQ6q9qP2dV+KO2BlLb7GRjRXi0ZcVoRKdcRWNMRWNOxivaE7/rIisZCOp4IRNEUKIBycWcQB8x0rmKmy5es70ppad0wVKm0qzoDXavE1e0lujtgpHsVI8lALMlVY0kGdyQZ2JE60Xu4OgKbs6DKtaaeqgGl1w+rsbfyvDTGK/kGr+o1p9Si1uiXPME39dk9W79W8gRGuAO+SIMzovkaBOtPN2rLU4aad2qKVLCk7JQz+8IfGhmZLdt51/Kmb2WUN+QrEmJFOyNGpZgY8sWU3KDds0rNilZI20fDxXkPjxI9R9pJgmZpaTnfV7YVSx3y0hSjgd0UV5pTHkJ2WdfVXNQZ9FoJh/HaIrEq0DPY3NBcQ9q0D5nXt7isNyu992Yl681Kv71ZyXrNlGcj0uchf9brzCK6hwwP5T3kNYQRz6tI0UNejEq7+Ozk7ZKIud9T4LrsDWB5BiSWAYuS1KDmbWWiuIsvSlQPUb6cVJtDpd30S7vplXbTK+3mUGk3/dJu+qXd9Eq7KJNDx09YDLVIMk2SVkmmSyJjCs2QpE2SmZLEJZGXami2JO2SzJGkQ5KEJHMlmSdJpyRdknRLkpRkviQLJFkoSY8kvfIbDnxS4s6p+KREkluyljpUn1r826CppfqqaPEvloaWtG5/DkW9KK+fFu/6sf/nkHdka/COVGIBI4Fq2xSrMtIQq1CsxAPr4oF18ep18Yp1tbFSzq0dvtNKIqAsEVCWqI40EYg0UelQwj/KSjKgLxnQl6x2Llmpo8eXrevOmZbciIaeCim7p82I7lYXbyOUaVaN0nh7uM9+cvbTHzLEUEiVZFCSNkEUeQhdLMuKg5sCPYQYqOwbnJGxq3QSUoshQ5dYhiAUGNUKFPnDgsSqL6moMmHCDzWQJGegQfXCl7JyDxxcp4rj5cCo+0OUK+PHFXV/g5ITg77RhsEKvfb/wlKnuEAGnHdFK+XMBRsnhx9T3WuJ0dFV7ZXrhuabbhqsUhxxfmWRbmTk3tWJvRXwf+FDayAAAAAAAAH//wACeNodzDsSQEAAA9AklA7oMHYoaZhV7Bpu4HMC3E1GkZmXIgEBVE7tyCrQgAho3Tr2IAeOECfu9sHTvhRBzUqQsrK9aLU33faj19vy/8MHasQOaQAAeNq9WAd0VdUS3XsneYQQQkiHYIgYUaNiKALWrxB6IICAqIik0DQkmAeKWMAuCChYPjZs2EBApSWA2AvYe8OG2BV7L/y5596EvJAo/7vWX1lv5p5z5+wzM2fmnpmAAOIwjteDZUVTyhGLRGhgYUE28ocWDsxGAbBjB9JNihCiEI0Yk2lqa5ohHs2RgBa2oiWSkIwUpCLNZDPcGiIU8CZoVdIpXIKFJUXhsVhUWl4xCYvHVRaVYEnZxPFFqCornzoJG8sqSsrwqKObbaISz1d4869WVJaWY8tk73lruKhsCj4JTywfh+3hSSWT8X04nNcRvxrtRBjtzJDRLow32pVJRrsxIzy1OMys8NTJYeZMMRzmTh9bWcE8Z1VzRzMdjTIa42wMmdaxbi7NUd8DcJSBNzya4Wi8o60dTXW0maMJjrZwNNHRlo4mOZrsaIqjcY42dbSVo23QFkehLwZjJMZgAmbiElyOhbgJd+IevIdP8DV+NmVimcgMZnNf5rE7j2JfDuZIjuEEX0+z0udHBrwg4MMCPso7JzRlKedwFbcoWgdomM7SYv+9Vrn31IZg/G3Af/R5VPeAT3dyqVEbot6JRnRu9LDoi6KrorfGxMZ0iBkcUx6zMGZjzLZQKJQTGhSaEro2tNlfV8Njt/i8WfuAzwz4mz6Pjw5414APDnixnZfHt/nj5oFdzZf4PCEn4MUBv8nnLYJ1Lcr8ceJRdqLxiGJv9lG8Fwtsy2zFNTJr0c2H7J13im3ceYW4tt647vso90uxGGkXRNIeLpJSXCQlscSNUndTLr1RubTdlIvES2tULnU35SLxMndTv8blMnZTrnU9uV397mVSTcYBWd47vsy37VmW50nuzdmYYbMlhhLNWZyHGG7mS5bDHtoQh5xk0vuipQ7mKSxTZ3XTISzFdIQxhWM5juM5gRN5sjo61Cb2B/eF9LK/pWnhaRNCqf0lBkhdOI1nqJO6qjvLWcHJPJWVDHMKp/I0nq68/ytSVODznX7yrM6v58ldJYZGSMjOI7v2m7YThe7L9/eSQxuUbIP2QeQcUEf22Ihs8yOQGGAromyunZNNi0Af4FHl77LO2yPDySTZLyeYH1EHNSXYMSqIOG+cXQd5RD2phq071u3fs86uaS42E2vvlT61OedLNOTxPrVfioa0HhKB4Ms3pnVd2T6Nau3246Q6uzasddpuaJ3WiNbDIxD+Wuu6sn+jtXrU7roTK7deDMliwbuJ051VNTHUMOrOCIpcJSbgAvXTAI3QsRqp43S8TtAonajROkljVKRilahUYzVO4zVBE3WyTlGZJqlcFZqsU1WpsKZoqk7T6ZqmMzRdZ9odfLbO0QzN1Lk6T+frAl2oi3SxLtEszdalmqO5mqfLdDnf5Tt8j1u5jR/yA37Ej/k5P+Fn/JKf8itu5zf8mt/yO/7MH/k9f1Jr/sBf+Ct/4x/8nX+qF3eIlhZf2O0vRam3QopVEzVVM8Wpj1ooQc2VqiQlKkUtlaw0pWu+MtRKffm+YhSvG3WzqnSr1po/LrC7tanlYA72ttzdx75S+5nf97ecPBAdcBDy0BGd0BldcDC6ohu64xAcisNwOI5AiVU65+I8nG8oF+IiXGx1zyzMxqWYg7mYh8usCpqPBbgCV+IqXI1/4xpci+twPW7AItyIh/AIHsMT2ISn8Ayewwt4Ca/gNbyBt/A23sX7+AAf4mN8is/xJb7CN/gOP+An/Irf8ad3vIxmyKqqZmzOFmzJZKYyna2YyT3s7t+Te3Fv7sP9uD8P5EHsyM48mN14CA/l4TySPZjP3lqkm3SLVmuNRUYuFvxPMfEP4kHz/+uIOMmPCBX9w5hwEaGJQUwUm+UVhuQwzZ6wWXS62TTN1890na8zTDadf1rULLCbohd6W+72RT/0t2wrwEAMQqHVwEPsbjgGwyz7R1jWjsRxOB4nYBROxM24BbdiMW7D7bjDauO7sARLcTeWYTlWWKV8L+7DSqzCaqzBWlRjHdZjA+7HRjyAB/EwHsXjeBKb8TSexfN4ES/jVbyON7EF71iVvRXb8JHV2p/hC2y3ivtbfI8f8TN+wW/4AztIRjGGTdiU8UywSjyJKUyzerw12zDLqvJ2zGF7q81zeQA7WIXeiV3Y1er0w3gE/2XVek/2ssryOl2vG7RYt+l23aE7dZeWaKnu1jIt1wrdo3t1n1aqWuu03r48nZBm8tfZirtMdonJLTXJlU7Kl/dx1hviOlW7L2C+eXFUPV9trLV/py3d2TPYYZHtEYnvY6+22F5j0V1t+b7W8r1KN7odcm2PSHwfO8g5s3S7Rd7X/EYnuq9rnO1Qg1UXKc6QatbUXZGF+EY0qnYdWIO7O2uSEDJv1frEdaaFO202iQREmzc9/62zt9HmKfMNu9ub3sh2nvgrb9dYEeH1CJuynXf+6gRqvkwRJ1HHfqLSfrFmp1cB59oJHWrdYW/LkKGWDaNRqqvt1uqHQl3leAGXOj5Q93vc9F9g1vTj3UYHWi8nm7nWngfpGqMDtNBoL11ptFBXGC1w910/e+qBLI5BLFeoA+/hvbyPK61PXM01XMvpPI9HmzfHYrxVkU0i/gfQyjTNtNtRVlMv4zK7Rqu4yT6v/dUfySrQcJP10R9Xf1bZzEANUqEGa4iG6hjrQYdzE5/gk3zM1j/CR1nN9dzA+7mRD/BBPsSH6Z1WVtCrN7R3qacZj7Zu2NN0RX391cE0yENqg7ZVc90u+y13/wNxtaOzIE6rrD9O8VHsKbm+Bg1Z5eSjuNz6RdguDxtKB9PEmx2HPGWqjfbRHspSW2VrT+vG91KuctRO+2o/7a+91f4fnQdNV68LSMSRFkGjMcZu3FJMwjSchZkcxuEczSIWm8+rGvSBdxKP8XF3MpvsNBuyUJbF0irzl9edJXOF8WetB0lEse1zC6rsvJLqRHIP9Ocs82wS0jxufVgaL3XjTI/bONN6NG+c7nEbp+McN071uI1TbZ8QEjg7QJnto1gux/k7cU6ANyfAmxHgzQjw/PVzA6m5gZQ/Oy+YnRfM0mzxPZth2DIrklCmw9nX6uQz1UM9lW8d5FN8ms/wWT7H5/kCX7SO0qt68+1+G+DuM3eXWS/6Cl/la3ydb/BNvsUtfPs/S/kFGnjavZoLdBzldcfvvTM7syPtajVaSfuSVrIkPwnhUCAYQigngCHhtKcQAsbYBgqEEF45TZqStE3DOyE8witgDBhwQklJiFsTKCR28Kl5BBoHU0xwzNPETl0b7FrBLm6c6f/77xqvbcmWjU51j76dnZ39Zuab+93f/95vRUWkSaryEdELz/ryxZIWH3skScR9ohec+1dun9Te4TPDayBtwcaWOzoXd/1w3CSx4CT3HTvT+xiOHIvPo2RjsiBZkazG/3PJ0mRRMj+Zje2lyRy0c5LNyXvJ75N1yXr+b0K7Llkiw/wldyXL8I2V6GlJ8lNsP8m98/GdeTsc53paib2vSICtZUP0tL7+OuiO3OGTTcOce/3QnybP1l/X4f+Voc610/Fr9njEH5OtyYZkK7a2Jltkj384autOe35Sf92M+1uebG74ZMuevr99m3e0atu2G81kwwjGicdg9FewXf9BDz+ujTOe3MrkkeTNhm+s26WPdckqHDVYf5brkzXJc9haC4/rh1eNxes4mC/jYYH8CSyQg2GBfBPmy02wQG6R29HOggUyBxbIMzBffgHz5XmYL7+E+fIrWCBLYYFmNYs2pzm0scZoj9Fj0L6ub4rqSl0lKV2tv5PQzFJoT7VTRW2qTRXPTrPTJGXTbBr2n2vnoj3PzkP7JbsUx3zNvoZPr7ArsOcquxbtd+w7EuJurpQUrBWzrwltFtYsOdiAxLAB6YM14XVAennngUyCBbI/THe4/4/BTA6FeTIZlpLDYKEcDkvLx2F9cgQskk/A+uVTsFhOhbXJVFheToO1yzRYh0yHdcolsFa5TK7B2d347jiyd8rdOMs9sEgWwjrlSVinLIL1yr/BeuUpWC9HP+DoBxz9gKMfyGuwQN6ABfIWLJC3YYG8B9Mhnkde82grWhHTbu1G26M9aMfoGLT92i+eDuiAtOlYHYvtcToO2+N1PLYn6ARs76f74Snur/ujPUAPQHugHoj2ID0I7cF6sOT1ED1E0nqoHiqRTtbJ0qmH6WHYPlwPl349Qo9Ae6QeifYoPUpi/aR+UnrrvjJFp+BKTtQTsecUPVVadapOlQE9Tadh+3Q9HdvTdbq06AydITmdqTOlW8/QM7D/Gr0GxzykP0Sfr+tb0kOfK+i7+t9o39f3pYueV7Cs5cS3VmuXonVap5StYAWp2HibJFnbz/aTjE2xKTjyFDtFqvTUHvpowWbYDLRn2pnozXlqgZ5asC/YF9DnBXYB+rzQLpSSXWQXoeeL7WIZY5fYJej/S/ZV9OO8uUA/Lti37QYcf6PdiE9vspvQ3my3S2yz7E60d9vdkrd77B4JbI7NwfH32r3Yvs/uw/b9dj+259pcbP/EHsX2Y/av2P6ZLYBnqhwLrx8Lnx8PLz8YXni5XIH5cpVcDU+8CZ54q9wm34U/zsIMXwRvewpe9gt41y8xp5fCe3LwmmPwLF7XN/RNjOXb+ltd5WYwRtEz31IYl6kYlWkYh/Nwb1+2v7av2N/YpbjDK3B/V9s19k37ll2LuWrhZPJto/czePtExKSNMup/yavJU8kWxMnlybOg55oP3R/6SF4l69YkLzLef8g+hyAOSIX/zSPh1ZA9vjTstb+z69lG1OOiIfatQ19v7EtvQ3FuWz/gkmsXQ5U8mjwBWr0OtbMc51oMYq5GuyR5Bu+ex+syKJLGPl4b8hrX1xm6fFcy1o9Z4XTGBxpmXbJ0u0Ji+/4ORz+QLEyuSm5Irk7+Cdd2LfTSRnfNGImNuDLH6Wfw/2sqqf/EdS51zE5OSr6ezAZLxsDPJ2IeOuJ48lFYIAfA0ozbHuO2x7jtMW57shkWyBZYWv4AS6upoX1X3xVfN+gGtIM6iEi7STej3aJbJNTEFHQsWxntdJsuxhjl20w7A3vOsrPAy7PtHGz/g12O9koDNRlVPEYVn1HFY1TxGVU8RhWfUcXDndxKyuYwcyPMYsfaHFk7jqx1/G2VbhI3ReK2kLg1rRHz/mMS1yNxYxI3JmuVrB0ga5vJ2gxZ20TWZuUYWLtMkePBVEfcTvk0rENOgnXIybAOMrhABhfJ4BIZXJbTYRWSuIskzsmlsG7y2MjjmDyOyeOYPB4gj7Pyj7B2eRDWIf8M65DHYR3kdBc53UVOGzlt5LTJ07B20jomrWPSOiatY3kB1iG/gXXQA2J6QEwPiOkBMcntkdwxyR2T3DHJHWu7tksHOa3kdIGcVnK6QE4rOV0gpwfI6QFyeoCcHiCnB8jpIjmdIaez5HQXOZ0llTtJZdOj9WhpJ5tjUtn0ZP0siOvYnCObU2RzjmxOkc3jyeYJZPNYsjlFNufI5k6yOSCbq2RzlWyuqcKqRZYBIx2he0noMSR0PwndSkLnSeg2Erpqx9lxOP4EO0Eicjogp6ucA1VyuqYoq+R01c6383G8o3UvaT2GtO4jrftJ6zRp3UpaB6R1lbSuktZjSOtW0rqVtO4krTvtLrtLOsjsImdXzNlV5eyKObuqnF0xZ1fV5tk8HD/f5qN1My0mv6v2uMHTSPFOzI9DEEMmIXYcAI95A57yNmLEFvkDIsMa/S9dq+9gDDcgKiAiIB4khkeEWDDFTkcsmOFiACIAZr991f7W/s7+3r6OKPANu8wuRxy4B1d4L67sflyRuwILX3KU9nxSehJi2beTtYh8tyHffDG5Lrk5+QEi9eJarBwVFjTmT/OTW8DB1cn9iMuDOOu85F5H31E5z9P116XJ/L341nqXrbl8rYFZDa+4zpUN2fCICV47kv069rucddPw18BjBvfUO7L6DaOqpX68Lf/ku98mr9EWJD9y1EvmJvcl1ztPoG88nHzf5fOwhfjfCl4vSd5KHoIa+znev5a8nDxUy23Z084KaEVNxySL6++XJY9t5/I+Xv3q5Pf7+FWTKlmVloNgbv4dAm657NAnsQISK01apGUQltYO7UDULmgBbUlLaF2O5TPH8plj+cyxfMbugFE7YLwOGKnTjNRpRuo0I3WakTrNfMhnTEwxJoaMdyn7nH0OnHexLMVY5nLhh0npNCldy4jTpLSS0jEp3U5Kx6BgFXmlo3SWlPbqKsXdeQsp7ZHStTvv4Z37pHSKlA5I6RwpHZLSbaR0npTuI6Xz8hdyIjJlx+q8fAbWT2Ln5bOwfjkFViK9y6T3RNK7Qnp3kd7dpHdVZsD6yfA0Gd5OhmfJcI8M98hwj/QOSe820jtPeudJ7zzpXSW9q6R3lvTOkt5Z0ruN9PZIb4/09khvj/TOk975YfWbo3eLhhoit81oBq0juUeSeyS5R5J7JHlei1rEMc5XeugrPfSVHu3VXinRY3roMT5pX6bf+KR9md7jk/Zl8nwieR6Q5yF5XiXPQ/K8jzzPkudt5LlH3+rR4/Q4nMuxPUu2t5PtabI9JtvTZHtMksckeZok7yPJO0hyY2VnAExai/YdfQetY7vpRujVAerVAXK+E5Taim2nWgfIfLPA0th2Xj6WXh6R/ONI/maSP2NFK8kEqtwBqoAxVAFFO9aQ51ILGOfGWDvejseRThEUqAg6WGMaoC4wZKvTse3UgVEhD1AjdIKS52DbKQXj7BqgXjD7vH0e226mjeVMi6gaxlE1NFE1NFM1jKdqyNgX7Ys4u9MOHdQOBu5eiR6cgjAqiHFUEBkqiAwVRB8VRB8VRJ4KYmKDPrcGfW4N+tyoIPJUEPmaVqeCMCqIPBVEH/OP/RHJDsE8PhSR606ZLXchdg0iahUQrSrwvB74Wj+8azyi0f6IQgci+kzR/9WteCZN1mwZPJUWy2Gsj7O/xOicj3Gw1PecVtAXrA8zrpc1y837HHVrGesm8vbZ4bK3PXz/AeSRc1y9k2Sem7yNK3J188XI3l9GTjiIFhzFuy3MKddha6vLL+vffxnHP4b39dxyx+r2rtnmLnsWoM8Xa+RCL79hzuxqv6/grCuRjbvWqYY1zKVX7sLBpTh6ecP5B3d7/lVD3P9PodGYveOcN+K+50CvXZNclvwKn90FJj6AfYtxj4tx3CO4huUf5MEue8kyvhvju8/IHjCe1mJKwGgS6Hv6nijnp3LmKOeDcj54nA8permip9vIooj8UfKnQPoo+dND/vjkT0j+hHXyOv6E5E9I/lTJn1pFNiBtMqRNlrRpIW2ypE2OtMmSNjnSJkva5EibVtImJm3aSJs8adNO2myr2jra1HLFAjnjkzMhOROSMzXCZEiYLAmTJWGyu9RxfRLGJ2F8EiZDwoQkTEjChCRMSMJkSZgsCROSMCEJE5IwIQmTJmFyJEyOhAlJmJCECUmYkITJkjA5EqZKwlRJmCoJ00rCVEmYFAkTkzApEiYmYVIkTEzCtNWruY4nLeSJT55kyJOQPKmSJ63kiU+eFEgSJUOUDFHSo4X0MNKjSHqUSI8S6VEiPYqkR4n0KJEeHulRIj1KpEeR9CiRHmXSo0Lv7CIrSmRFE1nRTFaUyIoiWVEmJbpJCSMlSqREkZQokRJFUqJEX/dIiRIpUSQlSqREkZQokRJlUqLCWdFFDhg5UCQHSuRAkTOki7G/hbG/hbE/y9jfxtgfMvYXGftDxv4iY3/I2F9k7M8y9mcZ+0PG/iJjf5axvwXzrBfzaTJmzeGYzdsi/z2I/dvj/KGY1+9hxGJrs7y14z4vwFy+CFd4nV2Pq7RIXJz3L0x9F3Omh+tQryG+rEyeQHxZti167nPUX588XVuNHOHxL3+os906ZNV4CzLbhSNYgXx0mP3fx5i8kDwJe2U3mdzs3fWL7y7ezZlnuyO4NWu3V3jdMPuvH6K6+SJYe6Wrte6ciw3x/U37POIrkoeH+eQHjngfvJvHSvDTu+ahQ60Eg6CL8Nz2vCI8zIo4eDeSa589xKi9inPfDP3wynAr4zvtfX8fB25CLRfeYc3gMDkas/lPYTseOQH7P422UPsWvvPQ0OvnUAAv71bXfJQ6ZLhRm9OoWpIFrNmMeO4mt2DU3thhz7Jdcu8D6zVml7cGVAy1XLWZq65K9ntyLCyEApiCHPd4WKZBB+TkBJhHNeBBC3wGRzodkJNzYE3ketzA76YGfofyc1hITnskcUZWwzwS19MmbUJb467ja4Zrmso1TeWaptbpWOOi41/MOmia+YuRRq2kUcQ8xUigFLMGAw9uBgluJxXusDsQ02cZslpSIcdYn2F8z2CkbsIo+ciWXc6f5aiFzPmz+BQk5AiW6vX57ZX5DDWX8rcAFSqvSMYj865Qf0Wyn3wE206FdcAXDsS202IRayEVKrKIFZEKdVkXdZmxItJNdZajemxldaBADdnCJ1eUo2Bl+TNYlWqrU86ElZnVZ6mzlDorkm/Jzejfqa2IaitiraWbWrSFqkqpqpSqSqmnIuqpiHoqop6K+NuECn+bUJH/gFXk17CKLIdVZAWsQp0VUWdF1FkRdVYkq2AV+R2sImthFVkPq1B/dcgmWJWrNRWu1lS4WlORP8IqXLOpqK94OhpogDatabROqUVUahGVWkSlFrF6VGH1qMLqUYV6rYt6rYt6rYtKrYtKzajRjOrMWD3qZvWom9WjblaPulk96mZFoJXqvYXqvYX+WqS/FumvReo4pYKLqOC6qN2UVYBsQ4U/W6/wb6/nZ6ngPCo4n3rNp0YLqMt8arE25vDtzOFj67Iu6KOqVdH2Wi9aNx+aOR+aqMt8zoc0FVntVyF+fTXL6a+Aysun5vKps9qYd+SZd7QzA4+puTxqLp9qy2e+HTPfjqmtooZ1r6hh3StqWPeKqKd8+Ncn4A9ZrnBVsX0MYo/LPT6FWHMCo4yLMScjtlyKmPIgYsnjiCFPI3asRtRoQrRox6gfgdE+ClEBEUFnYjQQDXDvE2yiTcLdH4+7vgQx4EZcIzQh5v4szPn5mOnWtM6pr+Ar4a3wu/GkwSrYQuR6a0Zhhfv9euY4FzRegOi+1vWKrZeSZ5J/Sd7CeRaDGBvBhCeSR7bRZZT+7h3RFc5N7kDGumjUfyuwhxoDzro1mYcR+R7ue1h1AdW3Zu9W7pMfNf6qbKc7fRB6evneXTeuckjdiuz+35HxD47SaD2QPLQH5bAXv9mDTz2bDI7k1wQN+nDBsNrU9TaiZ7BdocG/X9pdb3t5bc9A5Q7xjcYnkzwHX1qJ414a9j5W7nQdQ6xUfVAbWjP6Hj+iPt4a1Tk4Z6h8ge1jiDyjEN/28u/i/5ez9I/qGC4Z5bi4BMrM5ADqytpvPXyo72YoyFoVr1a/y8NaoN7K2NcFa6Hiy8iRsJgVtxQrbgErbiErbmlW3CJW3JqoAVtZcWtmxS0tM2GxfANmrKM1s47WrJ3aCcXhKlkpLWsZrateBaxYhaxPhaxPpVmfamYFKqB+8eu1J6df/B0qUGfr2dKuy3SZtOkKXQEFUbEK1EG3daPtsR60fdYHHeFq+1lWZ9KsuaRxdTdwdApU3f0cowJHp8qMxeMYVTlGbsWtHZ+UYK0cr5g6vLb2VqICL1N7l6m6u6m3y1Ta5XrVs7beWKt9OnUdcqx7qK59ahFl/tPE/EepsYusgyozH+WT6OKTaOYzyPAZZDn6LVTgBeZFHnV4iTq8TAVepgIv11c7nQL3mTUpsyZl1qR8Wi18WjV9XqI+L1Gfl6jPy9TnZerzMvV5mfVOZZal1OFl6vAydXiZOrxMvd1NvV2kfi5TP5epn8vUz2VmYkqf6GqoZTY31DKbG2qZzXtYcXWaOaRm9ulPNeXsM69rolouUS2X6Wc1tVxipufR52r1zip9rkCfqzIDNHpelZ5X+61qgXXQJn1en5dxukSXyFgq6goVdURFHVFLR3Ut7eqa7VTUHVTUndTPfdTPY6ifa7+BqVA5R1TOETVzRM0c1TWzq022NyjnDirnTirnCpVzROUcsU7ZTv3cSf3cyZplE2uWTZwVSkVdpqKOqKjLVNQRFXWZijrizFFmsEp1Xaa6jpjNKquVTVxrT+G1mavVeLLw2Y8jnvw5oskp8N2p8NxpiBrTES1mIkoshL/9j7yP+FBEXOjFU5+AODAZzwXPAU8BTwDjfwZGfJmuwPzuxrzuw3y+E9c97/8AHkWFkwB42mNgYGBkAIJLjGq3QPT+/SbvYTQAQ/4HFwAA`; diff --git a/src/assets/images/flat.png b/src/assets/images/flat.png deleted file mode 100644 index e4788c92c..000000000 Binary files a/src/assets/images/flat.png and /dev/null differ diff --git a/src/assets/svgs/closed-issue.ts b/src/assets/svgs/closed-issue.ts deleted file mode 100644 index a49bbd57a..000000000 --- a/src/assets/svgs/closed-issue.ts +++ /dev/null @@ -1,15 +0,0 @@ -export const ClosedIssueIcon = ` - - - - - - - - - -`; diff --git a/src/assets/svgs/commit.ts b/src/assets/svgs/commit.ts deleted file mode 100644 index 900e00629..000000000 --- a/src/assets/svgs/commit.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const CommitIcon = ` - -`; diff --git a/src/assets/svgs/index.ts b/src/assets/svgs/index.ts deleted file mode 100644 index 35c318d80..000000000 --- a/src/assets/svgs/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from "./commit"; -export * from "./opened-issue"; -export * from "./closed-issue"; -export * from "./opened-pull"; -export * from "./merged-pull"; diff --git a/src/assets/svgs/merged-pull.ts b/src/assets/svgs/merged-pull.ts deleted file mode 100644 index e014acd34..000000000 --- a/src/assets/svgs/merged-pull.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const MergedPullIcon = ` - -`; diff --git a/src/assets/svgs/opened-issue.ts b/src/assets/svgs/opened-issue.ts deleted file mode 100644 index 235b9d6b7..000000000 --- a/src/assets/svgs/opened-issue.ts +++ /dev/null @@ -1,15 +0,0 @@ -export const OpenedIssueIcon = ` - - - - - - - - - -`; diff --git a/src/assets/svgs/opened-pull.ts b/src/assets/svgs/opened-pull.ts deleted file mode 100644 index be745fa0f..000000000 --- a/src/assets/svgs/opened-pull.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const OpenedPullIcon = ` - -`; diff --git a/src/bindings/bot-runtime.ts b/src/bindings/bot-runtime.ts new file mode 100644 index 000000000..8fadaba14 --- /dev/null +++ b/src/bindings/bot-runtime.ts @@ -0,0 +1,38 @@ +import { createAdapters } from "../adapters/adapters"; +import { Logs } from "ubiquibot-logger"; + +class Runtime { + private static _instance: Runtime; + private _adapters: ReturnType; + private _logger: Logs; + + private constructor() { + this._adapters = {} as ReturnType; + this._logger = {} as Logs; + } + + public static getState(): Runtime { + if (!Runtime._instance) { + Runtime._instance = new Runtime(); + } + return Runtime._instance; + } + + public get adapters(): ReturnType { + return this._adapters; + } + + public set adapters(adapters: ReturnType) { + this._adapters = adapters; + } + + public get logger(): Logs { + return this._logger; + } + + public set logger(logger: Logs) { + this._logger = logger; + } +} + +export default Runtime; diff --git a/src/bindings/config.ts b/src/bindings/config.ts deleted file mode 100644 index de73ece87..000000000 --- a/src/bindings/config.ts +++ /dev/null @@ -1,95 +0,0 @@ -import ms from "ms"; - -import { BotConfig, BotConfigSchema, LogLevel } from "../types"; -import { - DEFAULT_DISQUALIFY_TIME, - DEFAULT_FOLLOWUP_TIME, - DEFAULT_PERMIT_BASE_URL, - DEFAULT_TIME_RANGE_FOR_MAX_ISSUE, - DEFAULT_TIME_RANGE_FOR_MAX_ISSUE_ENABLED, -} from "../configs"; -import { getPayoutConfigByNetworkId } from "../helpers"; -import { ajv } from "../utils"; -import { Context } from "probot"; -import { getScalarKey, getConfig } from "../utils/private"; - -export const loadConfig = async (context: Context): Promise => { - const { - assistivePricing, - baseMultiplier, - commandSettings, - defaultLabels, - disableAnalytics, - evmNetworkId, - incentiveMode, - incentives, - issueCreatorMultiplier, - maxConcurrentTasks, - newContributorGreeting, - openAIKey, - openAITokenLimit, - permitMaxPrice, - priorityLabels, - privateKey, - promotionComment, - publicAccessControl, - registerWalletWithVerification, - staleTaskTime, - timeLabels, - } = await getConfig(context); - - const publicKey = await getScalarKey(process.env.X25519_PRIVATE_KEY); - const { rpc, paymentToken } = getPayoutConfigByNetworkId(evmNetworkId); - - const botConfig: BotConfig = { - log: { - logEnvironment: process.env.LOG_ENVIRONMENT || "production", - level: (process.env.LOG_LEVEL as LogLevel) || LogLevel.DEBUG, - retryLimit: Number(process.env.LOG_RETRY) || 0, - }, - price: { baseMultiplier, issueCreatorMultiplier, timeLabels, priorityLabels, incentives, defaultLabels }, - comments: { promotionComment: promotionComment }, - payout: { - evmNetworkId: evmNetworkId, - rpc: rpc, - privateKey: privateKey, - paymentToken: paymentToken, - permitBaseUrl: process.env.PERMIT_BASE_URL || DEFAULT_PERMIT_BASE_URL, - }, - unassign: { - timeRangeForMaxIssue: process.env.DEFAULT_TIME_RANGE_FOR_MAX_ISSUE - ? Number(process.env.DEFAULT_TIME_RANGE_FOR_MAX_ISSUE) - : DEFAULT_TIME_RANGE_FOR_MAX_ISSUE, - timeRangeForMaxIssueEnabled: process.env.DEFAULT_TIME_RANGE_FOR_MAX_ISSUE_ENABLED - ? process.env.DEFAULT_TIME_RANGE_FOR_MAX_ISSUE_ENABLED == "true" - : DEFAULT_TIME_RANGE_FOR_MAX_ISSUE_ENABLED, - followUpTime: ms(process.env.FOLLOW_UP_TIME || DEFAULT_FOLLOWUP_TIME), - disqualifyTime: ms(process.env.DISQUALIFY_TIME || DEFAULT_DISQUALIFY_TIME), - }, - supabase: { url: process.env.SUPABASE_URL ?? "", key: process.env.SUPABASE_KEY ?? "" }, - mode: { permitMaxPrice: permitMaxPrice, disableAnalytics: disableAnalytics, incentiveMode: incentiveMode, assistivePricing: assistivePricing }, - command: commandSettings, - assign: { maxConcurrentTasks: maxConcurrentTasks, staleTaskTime: ms(staleTaskTime) }, - sodium: { privateKey: process.env.X25519_PRIVATE_KEY ?? "", publicKey: publicKey ?? "" }, - wallet: { registerWalletWithVerification: registerWalletWithVerification }, - ask: { apiKey: process.env.OPENAI_API_KEY || openAIKey, tokenLimit: openAITokenLimit || 0 }, - publicAccessControl: publicAccessControl, - newContributorGreeting: newContributorGreeting, - }; - - if (botConfig.payout.privateKey == "") { - botConfig.mode.permitMaxPrice = 0; - } - - const validate = ajv.compile(BotConfigSchema); - const valid = validate(botConfig); - if (!valid) { - throw new Error(validate.errors?.map((err: unknown) => JSON.stringify(err, null, 2)).join(",")); - } - - if (botConfig.unassign.followUpTime < 0 || botConfig.unassign.disqualifyTime < 0) { - throw new Error(`Invalid time interval, followUpTime: ${botConfig.unassign.followUpTime}, disqualifyTime: ${botConfig.unassign.disqualifyTime}`); - } - - return botConfig; -}; diff --git a/src/bindings/env.ts b/src/bindings/env.ts new file mode 100644 index 000000000..d2f300a08 --- /dev/null +++ b/src/bindings/env.ts @@ -0,0 +1,10 @@ +import { EnvConfig, validateEnvConfig } from "../types/configuration-types"; +import dotenv from "dotenv"; +dotenv.config(); + +export const env = { ...process.env } as unknown as EnvConfig; + +const isValid = validateEnvConfig(env); +if (!isValid) { + throw new Error("Invalid env configuration: " + JSON.stringify(validateEnvConfig.errors, null, 2)); +} diff --git a/src/bindings/event.ts b/src/bindings/event.ts index 861713cf9..92231a85c 100644 --- a/src/bindings/event.ts +++ b/src/bindings/event.ts @@ -1,137 +1,269 @@ -import { Context } from "probot"; -import { createAdapters } from "../adapters"; +import OpenAI from "openai"; +import { Context as ProbotContext } from "probot"; +import { LogReturn, Logs } from "ubiquibot-logger"; +import zlib from "zlib"; +import { createAdapters, supabaseClient } from "../adapters/adapters"; import { processors, wildcardProcessors } from "../handlers/processors"; -import { shouldSkip } from "../helpers"; -import { BotConfig, GithubEvent, Payload, PayloadSchema, LogLevel } from "../types"; -import { Adapters } from "../types/adapters"; -import { ajv } from "../utils"; -import { loadConfig } from "./config"; -import { GitHubLogger } from "../adapters/supabase"; -import { validateConfigChange } from "../handlers/push"; - -let botContext: Context = {} as Context; -export const getBotContext = () => botContext; - -let botConfig: BotConfig = {} as BotConfig; -export const getBotConfig = () => botConfig; - -let adapters: Adapters = {} as Adapters; -export const getAdapters = () => adapters; - -export type Logger = { - info: (msg: string | object, options?: JSON) => void; - debug: (msg: string | object, options?: JSON) => void; - warn: (msg: string | object, options?: JSON) => void; - error: (msg: string | object, options?: JSON) => void; -}; - -let logger: Logger; -export const getLogger = (): Logger => logger; - -const NO_VALIDATION = [GithubEvent.INSTALLATION_ADDED_EVENT as string, GithubEvent.PUSH_EVENT as string]; - -export const bindEvents = async (context: Context): Promise => { - const { id, name } = context; - botContext = context; - const payload = context.payload as Payload; - const allowedEvents = Object.values(GithubEvent) as string[]; - const eventName = payload.action ? `${name}.${payload.action}` : name; // some events wont have actions as this grows - - let botConfigError; - try { - botConfig = await loadConfig(context); - } catch (err) { - botConfigError = err; - } +import { validateConfigChange } from "../handlers/push/push"; +import structuredMetadata from "../handlers/shared/structured-metadata"; +import { BotConfig } from "../types/configuration-types"; - adapters = createAdapters(botConfig); +import { addCommentToIssue } from "../helpers/issue"; +import { shouldSkip } from "../helpers/shared"; +import { Context } from "../types/context"; +import { + HandlerReturnValuesNoVoid, + MainActionHandler, + PostActionHandler, + PreActionHandler, + WildCardHandler +} from "../types/handlers"; +import { GitHubEvent, GitHubPayload, payloadSchema } from "../types/payload"; +import { ajv } from "../utils/ajv"; +import { generateConfiguration } from "../utils/generate-configuration"; +import Runtime from "./bot-runtime"; +import { env } from "./env"; - const options = { - app: "UbiquiBot", - // level: botConfig.log.level, - }; +const allowedEvents = Object.values(GitHubEvent) as string[]; - logger = new GitHubLogger( - options.app, - botConfig?.log?.logEnvironment ?? "development", - botConfig?.log?.level ?? LogLevel.DEBUG, - botConfig?.log?.retryLimit ?? 0 - ); // contributors will see logs in console while on development env - if (!logger) { - return; - } +const NO_VALIDATION = [GitHubEvent.INSTALLATION_ADDED_EVENT, GitHubEvent.PUSH_EVENT] as string[]; +type PreHandlerWithType = { type: string; actions: PreActionHandler[] }; +type HandlerWithType = { type: string; actions: MainActionHandler[] }; +type WildCardHandlerWithType = { type: string; actions: WildCardHandler[] }; +type PostHandlerWithType = { type: string; actions: PostActionHandler[] }; +type AllHandlersWithTypes = PreHandlerWithType | HandlerWithType | PostHandlerWithType; +type AllHandlers = PreActionHandler | MainActionHandler | PostActionHandler; - if (botConfigError) { - logger.error(botConfigError.toString()); - if (eventName === GithubEvent.PUSH_EVENT) { - await validateConfigChange(); - } - return; - } +const validatePayload = ajv.compile(payloadSchema); - // Create adapters for telegram, supabase, twitter, discord, etc - logger.info("Creating adapters for supabase, twitter, etc..."); +const runtime = Runtime.getState(); +runtime.adapters = createAdapters(); +runtime.logger = runtime.adapters.supabase.logs; - logger.info(`Config loaded! config: ${JSON.stringify(botConfig)}`); +export async function bindEvents(eventContext: ProbotContext) { + const payload = eventContext.payload as GitHubPayload; + const eventName = payload?.action ? `${eventContext.name}.${payload?.action}` : eventContext.name; // some events wont have actions as this grows + const logger = new Logs(supabaseClient, env.LOG_RETRY_LIMIT, env.LOG_LEVEL, eventContext); - logger.info(`Started binding events... id: ${id}, name: ${eventName}, allowedEvents: ${allowedEvents}`); + logger.info("Event received", { id: eventContext.id, name: eventName }); - if (!allowedEvents.includes(eventName)) { + if (!allowedEvents.includes(eventName) && eventContext.name !== "repository_dispatch") { // just check if its on the watch list - logger.info(`Skipping the event. reason: not configured`); - return; + return logger.info(`Skipping the event. reason: not configured`); } // Skip validation for installation event and push if (!NO_VALIDATION.includes(eventName)) { // Validate payload - const validate = ajv.compile(PayloadSchema); - const valid = validate(payload); - if (!valid) { - logger.info("Payload schema validation failed!", payload); - if (validate.errors) logger.warn(validate.errors); - return; + const isValid = validatePayload(payload); + if (!isValid && validatePayload.errors) { + return logger.error("Payload schema validation failed!", validatePayload.errors); } // Check if we should skip the event - const { skip, reason } = shouldSkip(); - if (skip) { - logger.info(`Skipping the event. reason: ${reason}`); - return; + const should = shouldSkip(eventContext); + if (should.stop) { + return logger.info("Skipping the event.", { reason: should.reason }); } } - // Get the handlers for the action - const handlers = processors[eventName]; - if (!handlers) { - logger.warn(`No handler configured for event: ${eventName}`); + if (eventName === GitHubEvent.PUSH_EVENT) { + await validateConfigChange(eventContext); + } + + let botConfig: BotConfig; + try { + botConfig = await generateConfiguration(eventContext); + } catch (error) { return; } + const context: Context = { + event: eventContext, + config: botConfig, + openAi: botConfig.keys.openAi ? new OpenAI({ apiKey: botConfig.keys.openAi }) : null, + logger: logger, + payload: payload, + octokit: eventContext.octokit, + }; + + if (!context.config.keys.evmPrivateEncrypted) { + context.logger.error("No EVM private key found"); + } - const { pre, action, post } = handlers; - // Run pre-handlers - logger.info(`Running pre handlers: ${pre.map((fn) => fn.name)}, event: ${eventName}`); - for (const preAction of pre) { - await preAction(); + if (!context.logger) { + throw new Error("Failed to create logger"); } - // Run main handlers - logger.info(`Running main handlers: ${action.map((fn) => fn.name)}, event: ${eventName}`); - for (const mainAction of action) { - await mainAction(); + + if (eventContext.name === GitHubEvent.REPOSITORY_DISPATCH) { + const dispatchPayload = payload as any; + if (payload.action === "issueClosed") { + //This is response for issueClosed request + const response = dispatchPayload.client_payload.result; + if (response) { + const uncompressedComment = zlib.gunzipSync(Buffer.from(response)); + await addCommentToIssue( + context, + uncompressedComment.toString(), + parseInt(dispatchPayload.client_payload.issueNumber) + ); + } + } + } + + // Get the handlers for the action + const handlers = processors[eventName]; + + if (!handlers) { + return context.logger.error("No handler configured for event:", { eventName }); } + const { pre, action, post } = handlers; + + const handlerWithTypes: AllHandlersWithTypes[] = [ + { type: "pre", actions: pre }, + { type: "main", actions: action }, + { type: "post", actions: post }, + ]; - // Run post-handlers - logger.info(`Running post handlers: ${post.map((fn) => fn.name)}, event: ${eventName}`); - for (const postAction of post) { - await postAction(); + for (const handlerWithType of handlerWithTypes) { + // List all the function names of handlerType.actions + const functionNames = handlerWithType.actions.map((action) => action?.name); + + context.logger.info( + `Running "${handlerWithType.type}" \ + for event: "${eventName}". \ + handlers: "${functionNames.join(", ")}"` + ); + + await logAnyReturnFromHandlers(context, handlerWithType); } // Skip wildcard handlers for installation event and push event - if (eventName !== GithubEvent.INSTALLATION_ADDED_EVENT && eventName !== GithubEvent.PUSH_EVENT) { + if (eventName == GitHubEvent.INSTALLATION_ADDED_EVENT || eventName == GitHubEvent.PUSH_EVENT) { + return context.logger.info("Skipping wildcard handlers for event:", eventName); + } else { // Run wildcard handlers - logger.info(`Running wildcard handlers: ${wildcardProcessors.map((fn) => fn.name)}`); - for (const wildcardProcessor of wildcardProcessors) { - await wildcardProcessor(); + const functionNames = wildcardProcessors.map((action) => action?.name); + context.logger.info(`Running wildcard handlers: "${functionNames.join(", ")}"`); + const wildCardHandlerType: WildCardHandlerWithType = { type: "wildcard", actions: wildcardProcessors }; + await logAnyReturnFromHandlers(context, wildCardHandlerType); + } +} + +async function logAnyReturnFromHandlers(context: Context, handlerType: AllHandlersWithTypes) { + for (const action of handlerType.actions) { + const renderCatchAllWithContext = createRenderCatchAll(context, handlerType, action); + try { + // checkHandler(action); + const response = await action(context); + + if (handlerType.type === "main") { + // only log main handler results + await renderMainActionOutput(context, response, action); + } else { + // context.logger.ok("Completed", { action: action.name, type: handlerType.type }); + } + } catch (report: unknown) { + await renderCatchAllWithContext(report); } } -}; +} + +async function renderMainActionOutput( + context: Context, + response: void | HandlerReturnValuesNoVoid, + action: AllHandlers +) { + const { payload, logger } = context; + const issueNumber = payload.issue?.number; + if (!issueNumber) { + throw new Error("No issue number found"); + } + + if (response instanceof LogReturn) { + let serializedComment; + if (response.metadata) { + serializedComment = [ + response.logMessage.diff, + structuredMetadata.create(response.logMessage.type, response.metadata), + ].join("\n"); + } else { + serializedComment = response.logMessage.diff; + } + + await addCommentToIssue(context, serializedComment, issueNumber); + } else if (typeof response == "string") { + await addCommentToIssue(context, response, issueNumber); + } else if (response === null) { + logger.debug("null response", { action: action.name }); + } else { + logger.error( + "No response from action. Ensure return of string, null, or LogReturn object", + { action: action.name }, + true + ); + } +} + +function createRenderCatchAll(context: Context, handlerType: AllHandlersWithTypes, activeHandler: AllHandlers) { + return async function renderCatchAll(report: LogReturn | Error | unknown) { + const payload = context.event.payload as GitHubPayload; + const issue = payload.issue; + if (!issue) { + return context.logger.error("Issue is null. Skipping", { issue }); + } + + if (report instanceof LogReturn) { + // already made it to console so it should just post the comment + + if (report.metadata) { + return await addCommentToIssue( + context, + [report.logMessage.diff, structuredMetadata.create(report.logMessage.type, report.metadata)].join("\n"), + issue.number + ); + } else { + return await addCommentToIssue(context, report.logMessage.diff, issue.number); + } + } else if (report instanceof Error) { + // convert error to normal object + // this is now handled inside of the logger + // TODO: test this + + // const error = { + // name: report.name, + // message: report.message, + // stack: report.stack, + // }; + + return context.logger.error( + "action has an uncaught error", + { + handlerType, + activeHandler: activeHandler.name, + error: report, + }, + true + ); + } else { + // could be supabase error + // interface SupabaseError { + // code: "PGRST116"; + // details: "The result contains 0 rows"; + // hint: null; + // message: "JSON object requested, multiple (or no) rows returned"; + // } + + // report as SupabaseError + + return context.logger.error( + "action returned an unexpected value", + { + logReturn: report, + handlerType, + activeHandler: activeHandler.name, + }, + true + ); + } + }; +} diff --git a/src/bindings/index.ts b/src/bindings/index.ts deleted file mode 100644 index 1258c85f4..000000000 --- a/src/bindings/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./event"; -export * from "./config"; diff --git a/src/commit-hash.ts b/src/commit-hash.ts new file mode 100644 index 000000000..be71043ba --- /dev/null +++ b/src/commit-hash.ts @@ -0,0 +1,8 @@ +import { execSync } from "child_process"; +export let COMMIT_HASH: null | string = null; // "0000000000000000000000000000000000000000"; + +try { + COMMIT_HASH = execSync("git rev-parse --short HEAD").toString().trim(); +} catch (e) { + // netlify has no git binary +} diff --git a/src/configs/abis.ts b/src/configs/abis.ts deleted file mode 100644 index 6f2c9ed85..000000000 --- a/src/configs/abis.ts +++ /dev/null @@ -1,159 +0,0 @@ -export const ERC20ABI = [ - { - constant: true, - inputs: [], - name: "name", - outputs: [{ name: "", type: "string" }], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { name: "_spender", type: "address" }, - { name: "_value", type: "uint256" }, - ], - name: "approve", - outputs: [{ name: "success", type: "bool" }], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "totalSupply", - outputs: [{ name: "", type: "uint256" }], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { name: "_from", type: "address" }, - { name: "_to", type: "address" }, - { name: "_value", type: "uint256" }, - ], - name: "transferFrom", - outputs: [{ name: "success", type: "bool" }], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "decimals", - outputs: [{ name: "", type: "uint8" }], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [{ name: "_value", type: "uint256" }], - name: "burn", - outputs: [{ name: "success", type: "bool" }], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [{ name: "", type: "address" }], - name: "balanceOf", - outputs: [{ name: "", type: "uint256" }], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { name: "_from", type: "address" }, - { name: "_value", type: "uint256" }, - ], - name: "burnFrom", - outputs: [{ name: "success", type: "bool" }], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "symbol", - outputs: [{ name: "", type: "string" }], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { name: "_to", type: "address" }, - { name: "_value", type: "uint256" }, - ], - name: "transfer", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { name: "_spender", type: "address" }, - { name: "_value", type: "uint256" }, - { name: "_extraData", type: "bytes" }, - ], - name: "approveAndCall", - outputs: [{ name: "success", type: "bool" }], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [ - { name: "", type: "address" }, - { name: "", type: "address" }, - ], - name: "allowance", - outputs: [{ name: "", type: "uint256" }], - payable: false, - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { name: "initialSupply", type: "uint256" }, - { name: "tokenName", type: "string" }, - { name: "tokenSymbol", type: "string" }, - ], - payable: false, - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { indexed: true, name: "from", type: "address" }, - { indexed: true, name: "to", type: "address" }, - { indexed: false, name: "value", type: "uint256" }, - ], - name: "Transfer", - type: "event", - }, - { - anonymous: false, - inputs: [ - { indexed: true, name: "from", type: "address" }, - { indexed: false, name: "value", type: "uint256" }, - ], - name: "Burn", - type: "event", - }, -]; diff --git a/src/configs/index.ts b/src/configs/index.ts deleted file mode 100644 index a449ff0d2..000000000 --- a/src/configs/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from "./shared"; -export * from "./strings"; -export * from "./abis"; -export * from "./ubiquibot-config-default"; diff --git a/src/configs/shared.ts b/src/configs/shared.ts deleted file mode 100644 index 16fff1ebf..000000000 --- a/src/configs/shared.ts +++ /dev/null @@ -1,30 +0,0 @@ -// cspell:disable -export const COLORS = { - default: "ededed", - price: "1f883d", -}; -// cspell:enable -export const DEFAULT_TIME_RANGE_FOR_MAX_ISSUE = 24; -export const DEFAULT_TIME_RANGE_FOR_MAX_ISSUE_ENABLED = true; - -export const ASSIGN_COMMAND_ENABLED = true; -/** - * ms('2 days') // 172800000 - * ms('1d') // 86400000 - * ms('10h') // 36000000 - * ms('2.5 hrs') // 9000000 - * ms('2h') // 7200000 - * ms('1m') // 60000 - * ms('5s') // 5000 - * ms('1y') // 31557600000 - * ms('100') // 100 - * ms('-3 days') // -259200000 - * ms('-1h') // -3600000 - * ms('-200') // -200 - */ -export const DEFAULT_FOLLOWUP_TIME = "4 days"; // 4 days -export const DEFAULT_DISQUALIFY_TIME = "7 days"; // 7 days - -export const DEFAULT_NETWORK_ID = 1; // ethereum -export const DEFAULT_RPC_ENDPOINT = "https://rpc-bot.ubq.fi/v1/mainnet"; -export const DEFAULT_PERMIT_BASE_URL = "https://pay.ubq.fi"; diff --git a/src/configs/strings.ts b/src/configs/strings.ts deleted file mode 100644 index fe3543631..000000000 --- a/src/configs/strings.ts +++ /dev/null @@ -1,9 +0,0 @@ -export const GLOBAL_STRINGS = { - unassignComment: "Releasing the task due to lack of updates.", - askUpdate: "Do you have any updates", - assignCommandDisabledComment: "The `/assign` command is disabled for this repository.", - skipPriceLabelGenerationComment: "Pricing is disabled on parent issues.", - ignoreStartCommandForParentIssueComment: - "Please select a child issue from the specification checklist to work on. The `/start` command is disabled on parent issues.", - autopayComment: "Automatic payment for this issue is enabled:", -}; diff --git a/src/configs/ubiquibot-config-default.ts b/src/configs/ubiquibot-config-default.ts deleted file mode 100644 index b2306faff..000000000 --- a/src/configs/ubiquibot-config-default.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { MergedConfig } from "../types"; - -export const DefaultConfig: MergedConfig = { - evmNetworkId: 1, - priceMultiplier: 1, - issueCreatorMultiplier: 1, - permitMaxPrice: Number.MAX_SAFE_INTEGER, - maxConcurrentAssigns: Number.MAX_SAFE_INTEGER, - assistivePricing: false, - disableAnalytics: false, - commentIncentives: false, - registerWalletWithVerification: false, - promotionComment: - "\n
If you enjoy the DevPool experience, please follow Ubiquity on GitHub and star this repo to show your support. It helps a lot!
", - defaultLabels: [], - timeLabels: [ - { - name: "Time: <1 Hour", - }, - { - name: "Time: <2 Hours", - }, - { - name: "Time: <4 Hours", - }, - { - name: "Time: <1 Day", - }, - { - name: "Time: <1 Week", - }, - ], - priorityLabels: [ - { - name: "Priority: 1 (Normal)", - }, - { - name: "Priority: 2 (Medium)", - }, - { - name: "Priority: 3 (High)", - }, - { - name: "Priority: 4 (Urgent)", - }, - { - name: "Priority: 5 (Emergency)", - }, - ], - commandSettings: [ - { - name: "start", - enabled: false, - }, - { - name: "stop", - enabled: false, - }, - { - name: "wallet", - enabled: false, - }, - { - name: "payout", - enabled: false, - }, - { - name: "multiplier", - enabled: false, - }, - { - name: "query", - enabled: false, - }, - { - name: "ask", - enabled: false, - }, - { - name: "allow", - enabled: false, - }, - { - name: "autopay", - enabled: false, - }, - ], - incentives: { - comment: { - elements: {}, - totals: { - word: 0, - }, - }, - }, - publicAccessControl: { - setLabel: true, - fundExternalClosedIssue: true, - }, - staleTaskTime: "0d", - newContributorGreeting: { - enabled: false, - header: - "Thank you for contributing! Please be sure to set your wallet address before completing your first task so that the automatic payout upon task completion will work for you.", - helpMenu: true, - footer: - "###### Also please star this repository and [@ubiquity/devpool-directory](https://github.com/ubiquity/devpool-directory/) to show your support. It helps a lot!", - }, -}; diff --git a/src/configs/weekly.ts b/src/configs/weekly.ts deleted file mode 100644 index b0ddb7f09..000000000 --- a/src/configs/weekly.ts +++ /dev/null @@ -1,12 +0,0 @@ -export const weeklyConfig = { - remoteAsset: { - flat: { - remoteUrl: "https://example.org/flat.png", - isUsing: false, - }, - brand: { - remoteUrl: "https://example.org/brand.png", - isUsing: false, - }, - }, -}; diff --git a/src/handlers/access/index.ts b/src/handlers/access/index.ts deleted file mode 100644 index c540a8f9c..000000000 --- a/src/handlers/access/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./labels-access"; diff --git a/src/handlers/access/labels-access.ts b/src/handlers/access/labels-access.ts index 0d269a60a..44aaf8cf4 100644 --- a/src/handlers/access/labels-access.ts +++ b/src/handlers/access/labels-access.ts @@ -1,20 +1,23 @@ -import { getAccessLevel } from "../../adapters/supabase"; -import { getBotConfig, getBotContext, getLogger } from "../../bindings"; -import { addCommentToIssue, getUserPermission, removeLabel, addLabelToIssue } from "../../helpers"; -import { Payload } from "../../types"; +import Runtime from "../../bindings/bot-runtime"; +import { isUserAdminOrBillingManager, addLabelToIssue, addCommentToIssue } from "../../helpers/issue"; +import { Context } from "../../types/context"; +import { UserType } from "../../types/payload"; -export const handleLabelsAccess = async () => { - const { publicAccessControl } = getBotConfig(); +export async function labelAccessPermissionsCheck(context: Context) { + const runtime = Runtime.getState(); + const { logger, payload } = context; + const { + features: { publicAccessControl }, + } = context.config; if (!publicAccessControl.setLabel) return true; - const context = getBotContext(); - const logger = getLogger(); - const payload = context.payload as Payload; if (!payload.issue) return; if (!payload.label?.name) return; + if (payload.sender.type === UserType.Bot) return true; + const sender = payload.sender.login; const repo = payload.repository; - const permissionLevel = await getUserPermission(sender, context); + const sufficientPrivileges = await isUserAdminOrBillingManager(context, sender); // event in plain english const eventName = payload.action === "labeled" ? "add" : "remove"; const labelName = payload.label.name; @@ -22,26 +25,58 @@ export const handleLabelsAccess = async () => { // get text before : const match = payload.label?.name?.split(":"); if (match.length == 0) return; - const label_type = match[0].toLowerCase(); - if (permissionLevel !== "admin") { - logger.info(`Getting ${label_type} access for ${sender} on ${repo.full_name}`); - // check permission - const accessible = await getAccessLevel(sender, repo.full_name, label_type); + const labelType = match[0].toLowerCase(); + if (sufficientPrivileges) { + logger.info("Admin and billing managers have full control over all labels", { + repo: repo.full_name, + user: sender, + labelType, + }); + return true; + } else { + logger.info("Checking access for labels", { repo: repo.full_name, user: sender, labelType }); + // check permission + const { access, user } = runtime.adapters.supabase; + const userId = await user.getUserId(context.event, sender); + const accessible = await access.getAccess(userId); if (accessible) { return true; } + console.trace({ "payload.action": payload.action }); + if (payload.action === "labeled") { // remove the label - await removeLabel(labelName); + await removeLabel(context, labelName); } else if (payload.action === "unlabeled") { // add the label - await addLabelToIssue(labelName); + await addLabelToIssue(context, labelName); } - await addCommentToIssue(`@${sender}, You are not allowed to ${eventName} ${labelName}`, payload.issue.number); - logger.info(`@${sender} is not allowed to ${eventName} ${labelName}`); + await addCommentToIssue( + context, + `@${sender}, You are not allowed to ${eventName} ${labelName}`, + payload.issue.number + ); + logger.info("No access to edit label", { sender, label: labelName }); return false; } - return true; -}; +} +async function removeLabel(context: Context, name: string) { + const payload = context.payload; + if (!payload.issue) { + context.logger.debug("Invalid issue object"); + return; + } + + try { + await context.octokit.issues.removeLabel({ + owner: payload.repository.owner.login, + repo: payload.repository.name, + issue_number: payload.issue.number, + name: name, + }); + } catch (e: unknown) { + context.logger.fatal("Removing label failed!", e); + } +} diff --git a/src/handlers/assign/action.ts b/src/handlers/assign/action.ts deleted file mode 100644 index d02d1589c..000000000 --- a/src/handlers/assign/action.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { getBotConfig, getBotContext, getLogger } from "../../bindings"; -import { addCommentToIssue, closePullRequest, calculateWeight, calculateDuration } from "../../helpers"; -import { gitLinkedPrParser } from "../../helpers/parser"; -import { Payload, LabelItem } from "../../types"; -import { deadLinePrefix } from "../shared"; - -const exclude_accounts: string[] = []; -export const commentWithAssignMessage = async (): Promise => { - const context = getBotContext(); - const config = getBotConfig(); - const logger = getLogger(); - const payload = context.payload as Payload; - if (!payload.issue) { - logger.debug(`Empty issue object`); - return; - } - - logger.info(`Commenting timeline message for issue: ${payload.issue.number}`); - - const _assignees = payload.issue?.assignees; - const assignees = _assignees ? _assignees?.filter((i) => !exclude_accounts.includes(i.login)) : []; - const existAssignees = assignees && assignees.length > 0; - if (!existAssignees) { - logger.debug(`No assignees for comment`); - return; - } - - const flattened_assignees = assignees.reduce((acc, cur) => `${acc} @${cur.login}`, ""); - - // get the time label from the `labels` - const labels = payload.issue?.labels; - if (!labels) { - logger.debug(`No labels to calculate timeline`); - return; - } - const timeLabelsDefined = config.price.timeLabels; - const timeLabelsAssigned: LabelItem[] = []; - for (const _label of labels) { - const _label_type = typeof _label; - const _label_name = _label_type === "string" ? _label.toString() : _label_type === "object" ? _label.name : "unknown"; - - const timeLabel = timeLabelsDefined.find((item) => item.name === _label_name); - if (timeLabel) { - timeLabelsAssigned.push(timeLabel); - } - } - - if (timeLabelsAssigned.length == 0) { - logger.debug(`No labels to calculate timeline`); - return; - } - - const sorted = timeLabelsAssigned.sort((a, b) => calculateWeight(a) - calculateWeight(b)); - const targetTimeLabel = sorted[0]; - const duration = calculateDuration(targetTimeLabel); - if (!duration) { - logger.debug(`Missing configure for timelabel: ${targetTimeLabel.name}`); - return; - } - - const currentDate = new Date(); - const currentDateInMilliseconds = currentDate.getTime(); - const endDate = new Date(currentDateInMilliseconds + duration * 1000); - const commitMessage = `${flattened_assignees} ${deadLinePrefix} ${endDate.toUTCString().replace("GMT", "UTC")}`; - logger.debug(`Creating an issue comment, commit_msg: ${commitMessage}`); - - await addCommentToIssue(commitMessage, payload.issue?.number); -}; - -export const closePullRequestForAnIssue = async (): Promise => { - const context = getBotContext(); - const logger = getLogger(); - const payload = context.payload as Payload; - if (!payload.issue?.number) return; - - const prs = await gitLinkedPrParser({ - owner: payload.repository.owner.login, - repo: payload.repository.name, - issue_number: payload.issue.number, - }); - - if (!prs.length) return; - - logger.info(`Opened prs for this issue: ${JSON.stringify(prs)}`); - let comment = `These linked pull requests are closed: `; - for (let i = 0; i < prs.length; i++) { - await closePullRequest(prs[i].prNumber); - comment += ` #${prs[i].prNumber} `; - } - await addCommentToIssue(comment, payload.issue.number); -}; diff --git a/src/handlers/assign/assign-command-handler.ts b/src/handlers/assign/assign-command-handler.ts new file mode 100644 index 000000000..7897880c6 --- /dev/null +++ b/src/handlers/assign/assign-command-handler.ts @@ -0,0 +1,115 @@ +import { getLinkedPullRequests } from "../../helpers/get-linked-pull-requests"; +import { calculateDurations, calculateLabelValue } from "../../helpers/shared"; +import { Context } from "../../types/context"; +import { Label } from "../../types/label"; +import { GitHubPayload } from "../../types/payload"; + +export async function assignCommandHandler(context: Context) { + const config = context.config; + const logger = context.logger; + const payload = context.event.payload as GitHubPayload; + if (!payload.issue) { + return logger.fatal("Issue is not defined"); + } + + const assignees = payload.issue.assignees; + + // If no valid assignees exist, log a debug message and return + if (assignees.length === 0) { + return logger.error("No assignees"); + } + + // Flatten assignees into a string + const flattenedAssignees = assignees.reduce((acc, assignee) => `${acc} @${assignee?.login}`, ""); + + // Extract labels from payload + const labels = payload.issue?.labels; + + // If no labels exist, log a debug message and return + if (!labels) { + return logger.error(`No labels to calculate timeline`); + } + + // Filter out labels that match the time labels defined in the config + const timeLabelsAssigned: Label[] = labels.filter((assignedLabel) => + typeof assignedLabel === "string" || typeof assignedLabel === "object" + ? config.labels.time.some((label) => label === assignedLabel.name) + : false + ); + + if (timeLabelsAssigned.length == 0) { + return logger.debug("No labels to calculate timeline"); + } + + // Sort labels by weight and select the one with the smallest weight + const sortedLabels = timeLabelsAssigned + .sort((a, b) => { + const fullLabelA = labels.find((label) => label.name === a.name)?.name; + const fullLabelB = labels.find((label) => label.name === b.name)?.name; + + if (!fullLabelA || !fullLabelB) { + return 0; // return a default value + } + + return calculateLabelValue(fullLabelA) - calculateLabelValue(fullLabelB); + }) + .map((label) => labels.find((fullLabel) => fullLabel.name === label.name)); + + // Filter out undefined values + const validSortedLabels = sortedLabels.filter((label) => label !== undefined); + + // Calculate the duration for the target label + const labelDuration = calculateDurations(validSortedLabels as Label[]); + const shortestDurationLabel = labelDuration[0]; + + // Calculate the end date based on the current date and the label duration + const currentDate = new Date(); + const endDate = new Date(currentDate.getTime() + shortestDurationLabel * 1000); + + // Format the comment + const comment = `${flattenedAssignees} the deadline is at ${endDate.toISOString()}`; + + // Add the comment to the issue + return comment; +} + +export async function closePullRequestForAnIssue(context: Context) { + const logger = context.logger; + const payload = context.event.payload as GitHubPayload; + if (!payload.issue?.number) { + throw logger.fatal("Issue is not defined"); + } + + const linkedPullRequests = await getLinkedPullRequests(context, { + owner: payload.repository.owner.login, + repository: payload.repository.name, + issue: payload.issue.number, + }); + + if (!linkedPullRequests.length) { + return logger.info(`No linked pull requests to close`); + } + + logger.info(`Opened prs`, linkedPullRequests); + let comment = `These linked pull requests are closed: `; + for (let i = 0; i < linkedPullRequests.length; i++) { + await closePullRequest(context, linkedPullRequests[i].number); + comment += ` #${linkedPullRequests[i].number} `; + } + return logger.info(comment); + // await addCommentToIssue(comment, payload.issue.number); +} + +async function closePullRequest(context: Context, pullNumber: number) { + const payload = context.payload as GitHubPayload; + try { + await context.octokit.rest.pulls.update({ + owner: payload.repository.owner.login, + repo: payload.repository.name, + pull_number: pullNumber, + state: "closed", + }); + } catch (err: unknown) { + context.logger.fatal("Closing pull requests failed!", err); + } +} diff --git a/src/handlers/assign/auto.ts b/src/handlers/assign/auto.ts deleted file mode 100644 index 380b59983..000000000 --- a/src/handlers/assign/auto.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { getBotContext, getLogger } from "../../bindings"; -import { addAssignees, getAllPullRequests, getIssueByNumber, getPullByNumber } from "../../helpers"; -import { gitLinkedIssueParser } from "../../helpers/parser"; -import { Payload } from "../../types"; - -// Check for pull requests linked to their respective issues but not assigned to them -export const checkPullRequests = async () => { - const context = getBotContext(); - const logger = getLogger(); - const pulls = await getAllPullRequests(context); - - if (pulls.length === 0) { - logger.debug(`No pull requests found at this time`); - return; - } - - const payload = context.payload as Payload; - - // Loop through the pull requests and assign them to their respective issues if needed - for (const pull of pulls) { - const linkedIssue = await gitLinkedIssueParser({ - owner: payload.repository.owner.login, - repo: payload.repository.name, - pull_number: pull.number, - }); - - // if pullRequestLinked is empty, continue - if (linkedIssue == "" || !pull.user || !linkedIssue) { - continue; - } - - const connectedPull = await getPullByNumber(context, pull.number); - - // Newly created PULL (draft or direct) pull does have same `created_at` and `updated_at`. - if (connectedPull?.created_at !== connectedPull?.updated_at) { - logger.debug("It's an updated Pull Request, reverting"); - continue; - } - - const linkedIssueNumber = linkedIssue.substring(linkedIssue.lastIndexOf("/") + 1); - - // Check if the pull request opener is assigned to the issue - const opener = pull.user.login; - - const issue = await getIssueByNumber(context, +linkedIssueNumber); - if (!issue?.assignees) continue; - - // if issue is already assigned, continue - if (issue.assignees.length > 0) { - logger.debug(`Issue already assigned, ignoring...`); - continue; - } - - const assignedUsernames = issue.assignees.map((assignee) => assignee.login); - if (!assignedUsernames.includes(opener)) { - await addAssignees(+linkedIssueNumber, [opener]); - logger.debug(`Assigned pull request #${pull.number} opener to issue ${linkedIssueNumber}.`); - } - } -}; diff --git a/src/handlers/assign/check-pull-requests.ts b/src/handlers/assign/check-pull-requests.ts new file mode 100644 index 000000000..4625aedd4 --- /dev/null +++ b/src/handlers/assign/check-pull-requests.ts @@ -0,0 +1,112 @@ +import axios from "axios"; +import { HTMLElement, parse } from "node-html-parser"; +import { getAllPullRequests, addAssignees } from "../../helpers/issue"; +import { Context } from "../../types/context"; + +// Check for pull requests linked to their respective issues but not assigned to them +export async function checkPullRequests(context: Context) { + const { logger, payload } = context; + const pulls = await getAllPullRequests(context); + + if (pulls.length === 0) { + return logger.debug(`No pull requests found at this time`); + } + + // Loop through the pull requests and assign them to their respective issues if needed + for (const pull of pulls) { + const linkedIssue = await getLinkedIssues({ + owner: payload.repository.owner.login, + repository: payload.repository.name, + pull: pull.number, + }); + + // if pullRequestLinked is empty, continue + if (linkedIssue == null || !pull.user || !linkedIssue) { + continue; + } + + const connectedPull = await getPullByNumber(context, pull.number); + + // Newly created PULL (draft or direct) pull does have same `created_at` and `updated_at`. + if (connectedPull?.created_at !== connectedPull?.updated_at) { + logger.debug("It's an updated Pull Request, reverting"); + continue; + } + + const linkedIssueNumber = linkedIssue.substring(linkedIssue.lastIndexOf("/") + 1); + + // Check if the pull request opener is assigned to the issue + const opener = pull.user.login; + + const issue = await getIssueByNumber(context, +linkedIssueNumber); + if (!issue?.assignees) continue; + + // if issue is already assigned, continue + if (issue.assignees.length > 0) { + logger.debug(`Issue already assigned, ignoring...`); + continue; + } + + const assignedUsernames = issue.assignees.map((assignee) => assignee.login); + if (!assignedUsernames.includes(opener)) { + await addAssignees(context, +linkedIssueNumber, [opener]); + logger.debug("Assigned pull request opener to issue", { + pullRequest: pull.number, + issue: linkedIssueNumber, + opener, + }); + } + } + return logger.debug(`Checking pull requests done!`); +} + +export async function getLinkedIssues({ owner, repository, pull }: GetLinkedParams) { + const { data } = await axios.get(`https://github.com/${owner}/${repository}/pull/${pull}`); + const dom = parse(data); + const devForm = dom.querySelector("[data-target='create-branch.developmentForm']") as HTMLElement; + const linkedIssues = devForm.querySelectorAll(".my-1"); + + if (linkedIssues.length === 0) { + return null; + } + + const issueUrl = linkedIssues[0].querySelector("a")?.attrs?.href || null; + return issueUrl; +} + +export async function getPullByNumber(context: Context, pull: number) { + const payload = context.payload; + + try { + const response = await context.octokit.rest.pulls.get({ + owner: payload.repository.owner.login, + repo: payload.repository.name, + pull_number: pull, + }); + return response.data; + } catch (err: unknown) { + context.logger.fatal("Fetching pull request failed!", err); + return; + } +} +// Get issues by issue number +export async function getIssueByNumber(context: Context, issueNumber: number) { + const payload = context.payload; + try { + const { data: issue } = await context.octokit.rest.issues.get({ + owner: payload.repository.owner.login, + repo: payload.repository.name, + issue_number: issueNumber, + }); + return issue; + } catch (e: unknown) { + context.logger.fatal("Fetching issue failed!", e); + return; + } +} +export interface GetLinkedParams { + owner: string; + repository: string; + issue?: number; + pull?: number; +} diff --git a/src/handlers/assign/index.ts b/src/handlers/assign/index.ts deleted file mode 100644 index 30697c06e..000000000 --- a/src/handlers/assign/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./action"; diff --git a/src/handlers/comment/action.ts b/src/handlers/comment/action.ts deleted file mode 100644 index 60ea5bbae..000000000 --- a/src/handlers/comment/action.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { getBotConfig, getBotContext, getLogger } from "../../bindings"; -import { Payload } from "../../types"; -import { ErrorDiff } from "../../utils/helpers"; -import { IssueCommentCommands } from "./commands"; -import { commentParser, userCommands } from "./handlers"; -import { verifyFirstCheck } from "./handlers/first"; - -export const handleComment = async (): Promise => { - const context = getBotContext(); - const config = getBotConfig(); - const logger = getLogger(); - const payload = context.payload as Payload; - - logger.info(`Handling an issue comment on issue ${payload.issue?.number}`); - const comment = payload.comment; - if (!comment) { - logger.info(`Comment is null. Skipping`); - return; - } - - const body = comment.body; - const commentedCommands = commentParser(body); - - if (commentedCommands.length === 0) { - await verifyFirstCheck(); - return; - } - - const allCommands = userCommands(); - for (const command of commentedCommands) { - const userCommand = allCommands.find((i) => i.id == command); - - if (userCommand) { - const { id, handler, callback, successComment, failureComment } = userCommand; - logger.info(`Running a comment handler: ${handler.name}`); - - const { payload: _payload } = getBotContext(); - const issue = (_payload as Payload).issue; - if (!issue) continue; - - const feature = config.command.find((e) => e.name === id.split("/")[1]); - - if (!feature?.enabled && id !== IssueCommentCommands.HELP) { - logger.info(`Skipping '${id}' because it is disabled on this repo.`); - await callback(issue.number, `Skipping \`${id}\` because it is disabled on this repo.`, payload.action, payload.comment); - continue; - } - - try { - const response = await handler(body); - const callbackComment = response ?? successComment ?? ""; - if (callbackComment) await callback(issue.number, callbackComment, payload.action, payload.comment); - } catch (err: unknown) { - // Use failureComment for failed command if it is available - if (failureComment) { - await callback(issue.number, failureComment, payload.action, payload.comment); - } - await callback(issue.number, ErrorDiff(err), payload.action, payload.comment); - } - } else { - logger.info(`Skipping for a command: ${command}`); - } - } -}; diff --git a/src/handlers/comment/commands.ts b/src/handlers/comment/commands.ts deleted file mode 100644 index bed9a17f5..000000000 --- a/src/handlers/comment/commands.ts +++ /dev/null @@ -1,14 +0,0 @@ -export enum IssueCommentCommands { - HELP = "/help", // list available commands - START = "/start", // assign the hunter to the issue automatically - STOP = "/stop", // unassign to default - WALLET = "/wallet", // register wallet address - PAYOUT = "/payout", // request permit payout - MULTIPLIER = "/multiplier", // set task multiplier (for contributor) - QUERY = "/query", - ASK = "/ask", // ask GPT a question - // Access Controls - - ALLOW = "/allow", - AUTOPAY = "/autopay", -} diff --git a/src/handlers/comment/comment-created.ts b/src/handlers/comment/comment-created.ts new file mode 100644 index 000000000..6db717bbe --- /dev/null +++ b/src/handlers/comment/comment-created.ts @@ -0,0 +1,48 @@ +import { Context } from "../../types/context"; +import { GitHubComment, GitHubPayload } from "../../types/payload"; +import { commentParser, userCommands } from "./handlers/comment-handler-main"; +import { verifyFirstCommentInRepository } from "./handlers/first"; + +export async function commentCreated(context: Context) { + const config = context.config, + logger = context.logger, + payload = context.event.payload as GitHubPayload; + + const comment = payload.comment as GitHubComment; + + const body = comment.body; + const commentedCommand = commentParser(body); + + if (!comment) { + logger.info(`Comment is null. Skipping`); + } + const issue = payload.issue; + if (!issue) { + throw logger.error("Issue is null. Skipping", { issue }); + } + + if (commentedCommand) { + await verifyFirstCommentInRepository(context); + } + + const allCommands = userCommands(config.miscellaneous.registerWalletWithVerification); + const userCommand = allCommands.find((i) => i.id == commentedCommand); + + if (userCommand) { + const { id, handler } = userCommand; + logger.info("Running a comment handler", { id, handler: handler.name }); + + const isDisabled = config.disabledCommands.some((command) => command === id.replace("/", "")); + + if (isDisabled && id !== "/help") { + return logger.error("Skipping because it is disabled on this repo.", { id }); + } + + return await handler(context, body); + } else { + const sanitizedBody = body.replace(//g, ""); + return logger.verbose("Comment event received without a recognized user command.", { + sanitizedBody, + }); + } +} diff --git a/src/handlers/comment/handlers/allow.ts b/src/handlers/comment/handlers/allow.ts deleted file mode 100644 index aa867985c..000000000 --- a/src/handlers/comment/handlers/allow.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { upsertAccessControl } from "../../../adapters/supabase"; -import { getBotContext, getLogger } from "../../../bindings"; -import { getUserPermission } from "../../../helpers"; -import { Payload } from "../../../types"; - -export const setAccess = async (body: string) => { - const context = getBotContext(); - const logger = getLogger(); - const payload = context.payload as Payload; - const sender = payload.sender.login; - - const validAccessString = ["priority", "time", "price", "multiplier"]; - - logger.info(`Received '/allow' command from user: ${sender}`); - - const issue = payload.issue; - const repo = payload.repository; - if (!issue) { - logger.info(`Skipping '/allow' because of no issue instance`); - return; - } - - const regex = /\/allow\s+(\S+)\s+(\S+)\s+(\S+)/; - const matches = body.match(regex); - - if (matches) { - let accessType, username, bool; - matches.slice(1).forEach((part) => { - if (part.startsWith("@")) username = part.slice(1); - else if (part.startsWith("set-")) accessType = part.slice(4); - else if (part === "true" || part === "false") bool = part; - }); - if (!accessType || !username || !bool) { - logger.error("Invalid body for allow command"); - return `Invalid syntax for allow \n usage: '/allow set-(access type) @user true|false' \n ex-1 /allow set-multiplier @user false`; - } - // Check if access control demand is valid - if (!validAccessString.includes(accessType)) { - logger.info(`Access control setting for ${accessType} does not exist.`); - return `Access control setting for ${accessType} does not exist.`; - } - - // check if sender is admin - // passing in context so we don't have to make another request to get the user - const permissionLevel = await getUserPermission(sender, context); - - // if sender is not admin, return - if (permissionLevel !== "admin") { - logger.info(`User ${sender} is not an admin`); - return `You are not an admin and do not have the required permissions to access this function.`; - } - - // convert accessType to valid table - const tableName = `${accessType}_access`; - - await upsertAccessControl(username, repo.full_name, tableName, bool === "true"); - return `Updated access for @${username} successfully!\t Access: **${accessType}** for "${repo.full_name}"`; - } else { - logger.error("Invalid body for allow command"); - return `Invalid syntax for allow \n usage: '/allow set-(access type) @user true|false' \n ex-1 /allow set-multiplier @user false`; - } -}; diff --git a/src/handlers/comment/handlers/ask.ts b/src/handlers/comment/handlers/ask.ts index 63777d4ae..7af2d94f6 100644 --- a/src/handlers/comment/handlers/ask.ts +++ b/src/handlers/comment/handlers/ask.ts @@ -1,18 +1,15 @@ -import { getBotContext, getLogger } from "../../../bindings"; -import { Payload, StreamlinedComment, UserType } from "../../../types"; -import { getAllIssueComments, getAllLinkedIssuesAndPullsInBody } from "../../../helpers"; import { CreateChatCompletionRequestMessage } from "openai/resources/chat"; -import { askGPT, decideContextGPT, sysMsg } from "../../../helpers/gpt"; -import { ErrorDiff } from "../../../utils/helpers"; +import { getAllIssueComments } from "../../../helpers/issue"; +import { Context } from "../../../types/context"; +import { StreamlinedComment } from "../../../types/openai"; +import { GitHubPayload, UserType } from "../../../types/payload"; +import { askGPT, decideContextGPT, getAllLinkedIssuesAndPullsInBody, sysMsg } from "./ask/ask-gpt"; -/** - * @param body The question to ask - */ -export const ask = async (body: string) => { - const context = getBotContext(); - const logger = getLogger(); +export async function ask(context: Context, body: string) { + // The question to ask + const logger = context.logger; - const payload = context.payload as Payload; + const payload = context.event.payload as GitHubPayload; const sender = payload.sender.login; const issue = payload.issue; @@ -21,7 +18,7 @@ export const ask = async (body: string) => { } if (!issue) { - return `This command can only be used on issues`; + return `This command can only be used on issues and pull requests`; } const chatHistory: CreateChatCompletionRequestMessage[] = []; @@ -36,13 +33,12 @@ export const ask = async (body: string) => { const [, body] = matches; // standard comments - const comments = await getAllIssueComments(issue.number); - // raw so we can grab the tag - const commentsRaw = await getAllIssueComments(issue.number, "raw"); + const comments = await getAllIssueComments(context, issue.number); + // raw so we can grab the tag + const commentsRaw = await getAllIssueComments(context, issue.number, "raw"); if (!comments) { - logger.info(`Error getting issue comments`); - return ErrorDiff(`Error getting issue comments`); + throw logger.fatal(`Error getting issue comments`); } // add the first comment of the issue/pull request @@ -53,7 +49,7 @@ export const ask = async (body: string) => { // add the rest comments.forEach(async (comment, i) => { - if (comment.user.type == UserType.User || commentsRaw[i].body.includes("")) { + if (comment.user.type == UserType.User || commentsRaw[i].body.includes("")) { streamlined.push({ login: comment.user.login, body: comment.body, @@ -62,17 +58,23 @@ export const ask = async (body: string) => { }); // returns the conversational context from all linked issues and prs - const links = await getAllLinkedIssuesAndPullsInBody(issue.number); + const links = await getAllLinkedIssuesAndPullsInBody(context, issue.number); if (typeof links === "string") { - logger.info(`Error getting linked issues or prs: ${links}`); + logger.info("Error getting linked issues or prs: ", links); } else { linkedIssueStreamlined = links.linkedIssues; linkedPRStreamlined = links.linkedPrs; } // let chatgpt deduce what is the most relevant context - const gptDecidedContext = await decideContextGPT(chatHistory, streamlined, linkedPRStreamlined, linkedIssueStreamlined); + const gptDecidedContext = await decideContextGPT( + context, + chatHistory, + streamlined, + linkedPRStreamlined, + linkedIssueStreamlined + ); if (linkedIssueStreamlined.length == 0 && linkedPRStreamlined.length == 0) { // No external context to add @@ -80,7 +82,7 @@ export const ask = async (body: string) => { { role: "system", content: sysMsg, - name: "UbiquityAI", + name: "UbiquiBot", } as CreateChatCompletionRequestMessage, { role: "user", @@ -92,32 +94,32 @@ export const ask = async (body: string) => { chatHistory.push( { role: "system", - content: sysMsg, // provide the answer template - name: "UbiquityAI", + content: sysMsg, + name: "UbiquiBot", } as CreateChatCompletionRequestMessage, { role: "system", - content: "Original Context: " + JSON.stringify(gptDecidedContext), // provide the context + content: "Original Context: " + JSON.stringify(gptDecidedContext), name: "system", } as CreateChatCompletionRequestMessage, { role: "user", - content: "Question: " + JSON.stringify(body), // provide the question + content: "Question: " + JSON.stringify(body), name: "user", } as CreateChatCompletionRequestMessage ); } - const gptResponse = await askGPT(body, chatHistory); + const gptResponse = await askGPT(context, chatHistory); if (typeof gptResponse === "string") { return gptResponse; } else if (gptResponse.answer) { return gptResponse.answer; } else { - return ErrorDiff(`Error getting response from GPT`); + throw logger.fatal("Error getting response from OpenAI"); } } else { - return "Invalid syntax for ask \n usage: '/ask What is pi?"; + return logger.error("Invalid syntax for ask. usage: '/ask What is pi?'"); } -}; +} diff --git a/src/handlers/comment/handlers/ask/ask-gpt.ts b/src/handlers/comment/handlers/ask/ask-gpt.ts new file mode 100644 index 000000000..130b1bb2f --- /dev/null +++ b/src/handlers/comment/handlers/ask/ask-gpt.ts @@ -0,0 +1,277 @@ +import OpenAI from "openai"; +import { CreateChatCompletionRequestMessage } from "openai/resources/chat"; +import { getAllIssueComments } from "../../../../helpers/issue"; +import { Context } from "../../../../types/context"; +import { StreamlinedComment } from "../../../../types/openai"; +import { GitHubPayload, UserType } from "../../../../types/payload"; +import { getIssueByNumber, getPullByNumber } from "../../../assign/check-pull-requests"; + +export const sysMsg = `You are the UbiquiBot, designed to provide accurate technical answers. \n +Whenever appropriate, format your response using GitHub Flavored Markdown. Utilize tables, lists, and code blocks for clear and organized answers. \n +Do not make up answers. If you are unsure, say so. \n +Original Context exists only to provide you with additional information to the current question, use it to formulate answers. \n +Infer the context of the question from the Original Context using your best judgement. \n +All replies MUST end with "\n\n ".\n +`; + +// export const gptContextTemplate = ` +// You are the UbiquiBot, designed to review and analyze pull requests. +// You have been provided with the spec of the issue and all linked issues or pull requests. +// Using this full context, Reply in pure JSON format, with the following structure omitting irrelevant information pertaining to the specification. +// You MUST provide the following structure, but you may add additional information if you deem it relevant. +// Example:[ +// { +// "source": "issue #123" +// "spec": "This is the issue spec" +// "relevant": [ +// { +// "login": "user", +// "body": "This is the relevant context" +// "relevancy": "Why is this relevant to the spec?" +// }, +// { +// "login": "other_user", +// "body": "This is other relevant context" +// "relevancy": "Why is this relevant to the spec?" +// } +// ] +// }, +// { +// "source": "Pull #456" +// "spec": "This is the pull request spec" +// "relevant": [ +// { +// "login": "user", +// "body": "This is the relevant context" +// "relevancy": "Why is this relevant to the spec?" +// }, +// { +// "login": "other_user", +// "body": "This is other relevant context" +// "relevancy": "Why is this relevant to the spec?" +// } +// ] +// } +// ] +// `; + +// best used alongside getAllLinkedIssuesAndPullsInBody() in helpers/issue +export async function decideContextGPT( + context: Context, + chatHistory: CreateChatCompletionRequestMessage[], + streamlined: StreamlinedComment[], + linkedPRStreamlined: StreamlinedComment[], + linkedIssueStreamlined: StreamlinedComment[] +) { + const logger = context.logger; + + const payload = context.event.payload as GitHubPayload; + const issue = payload.issue; + + if (!issue) { + return `Payload issue is undefined`; + } + + // standard comments + const comments = await getAllIssueComments(context, issue.number); + // raw so we can grab the tag + const commentsRaw = await getAllIssueComments(context, issue.number, "raw"); + + if (!comments) { + logger.info(`Error getting issue comments`); + return `Error getting issue comments`; + } + + // add the first comment of the issue/pull request + streamlined.push({ + login: issue.user.login, + body: issue.body, + }); + + // add the rest + comments.forEach(async (comment, i) => { + if (comment.user.type == UserType.User || commentsRaw[i].body.includes("")) { + streamlined.push({ + login: comment.user.login, + body: comment.body, + }); + } + }); + + // returns the conversational context from all linked issues and prs + const links = await getAllLinkedIssuesAndPullsInBody(context, issue.number); + + if (typeof links === "string") { + return logger.info("Error getting linked issues or prs: ", { links }); + } + + linkedIssueStreamlined = links.linkedIssues; + linkedPRStreamlined = links.linkedPrs; + + chatHistory.push( + { + role: "system", + content: "This issue/Pr context: \n" + JSON.stringify(streamlined), + name: "UbiquiBot", + } as CreateChatCompletionRequestMessage, + { + role: "system", + content: "Linked issue(s) context: \n" + JSON.stringify(linkedIssueStreamlined), + name: "UbiquiBot", + } as CreateChatCompletionRequestMessage, + { + role: "system", + content: "Linked Pr(s) context: \n" + JSON.stringify(linkedPRStreamlined), + name: "UbiquiBot", + } as CreateChatCompletionRequestMessage + ); + + // we'll use the first response to determine the context of future calls + const res = await askGPT(context, chatHistory); + + return res; +} + +export async function askGPT(context: Context, chatHistory: CreateChatCompletionRequestMessage[]) { + // base askGPT function + const logger = context.logger; + const config = context.config; + const { keys } = config; + + if (!keys.openAi) { + throw logger.fatal( + "You must configure the `openai-api-key` property in the bot configuration in order to use AI powered features." + ); + } + + const openAI = new OpenAI({ + apiKey: keys.openAi, + }); + + const res: OpenAI.Chat.Completions.ChatCompletion = await openAI.chat.completions.create({ + messages: chatHistory, + model: "gpt-3.5-turbo-16k", + max_tokens: config.miscellaneous.openAiTokenLimit, + temperature: 0, + }); + + const answer = res.choices[0].message.content; + + const tokenUsage = { + output: res.usage?.completion_tokens, + input: res.usage?.prompt_tokens, + total: res.usage?.total_tokens, + }; + + if (!res) { + throw context.logger.fatal("Error getting GPT response", { res }); + } + + return { answer, tokenUsage }; +} + +// Strips out all links from the body of an issue or pull request and fetches the conversational context from each linked issue or pull request +export async function getAllLinkedIssuesAndPullsInBody(context: Context, issueNumber: number) { + const logger = context.logger; + + const issue = await getIssueByNumber(context, issueNumber); + + if (!issue) { + throw logger.fatal("No issue found!", { issueNumber }); + } + + if (!issue.body) { + throw logger.fatal("No body found!", { issueNumber }); + } + + const body = issue.body; + const linkedPRStreamlined: StreamlinedComment[] = []; + const linkedIssueStreamlined: StreamlinedComment[] = []; + + const regex = /https:\/\/github\.com\/[^/\s]+\/[^/\s]+\/(issues|pull)\/(\d+)/gi; + const matches = body.match(regex); + + if (matches) { + const linkedIssues: number[] = []; + const linkedPrs: number[] = []; + + // this finds refs via all patterns: #, full url or [#25](url.to.issue) + const issueRef = issue.body.match(/(#(\d+)|https:\/\/github\.com\/[^/\s]+\/[^/\s]+\/(issues|pull)\/(\d+))/gi); + + // if they exist, strip out the # or the url and push them to their arrays + if (issueRef) { + issueRef.forEach((issue) => { + if (issue.includes("#")) { + linkedIssues.push(Number(issue.slice(1))); + } else { + if (issue.split("/")[5] == "pull") { + linkedPrs.push(Number(issue.split("/")[6])); + } else linkedIssues.push(Number(issue.split("/")[6])); + } + }); + } else { + logger.info(`No linked issues or prs found`); + } + + if (linkedPrs.length > 0) { + for (let i = 0; i < linkedPrs.length; i++) { + const pr = await getPullByNumber(context, linkedPrs[i]); + if (pr) { + linkedPRStreamlined.push({ + login: "system", + body: `=============== Pull Request #${pr.number}: ${pr.title} + ===============\n ${pr.body}}`, + }); + const prComments = await getAllIssueComments(context, linkedPrs[i]); + const prCommentsRaw = await getAllIssueComments(context, linkedPrs[i], "raw"); + prComments.forEach(async (comment, i) => { + if ( + comment.user.type == UserType.User || + prCommentsRaw[i].body.includes("") + ) { + linkedPRStreamlined.push({ + login: comment.user.login, + body: comment.body, + }); + } + }); + } + } + } + + if (linkedIssues.length > 0) { + for (let i = 0; i < linkedIssues.length; i++) { + const issue = await getIssueByNumber(context, linkedIssues[i]); + if (issue) { + linkedIssueStreamlined.push({ + login: "system", + body: `=============== Issue #${issue.number}: ${issue.title} + ===============\n ${issue.body} `, + }); + const issueComments = await getAllIssueComments(context, linkedIssues[i]); + const issueCommentsRaw = await getAllIssueComments(context, linkedIssues[i], "raw"); + issueComments.forEach(async (comment, i) => { + if ( + comment.user.type == UserType.User || + issueCommentsRaw[i].body.includes("") + ) { + linkedIssueStreamlined.push({ + login: comment.user.login, + body: comment.body, + }); + } + }); + } + } + } + + return { + linkedIssues: linkedIssueStreamlined, + linkedPrs: linkedPRStreamlined, + }; + } else { + logger.info(`No matches found`); + return { + linkedIssues: [], + linkedPrs: [], + }; + } +} diff --git a/src/handlers/comment/handlers/assign.ts b/src/handlers/comment/handlers/assign.ts deleted file mode 100644 index 652e5406f..000000000 --- a/src/handlers/comment/handlers/assign.ts +++ /dev/null @@ -1,162 +0,0 @@ -import { addAssignees, getAssignedIssues, getAvailableOpenedPullRequests, getAllIssueComments, calculateWeight, calculateDuration } from "../../../helpers"; -import { getBotConfig, getBotContext, getLogger } from "../../../bindings"; -import { Payload, LabelItem, Comment, IssueType, Issue } from "../../../types"; -import { deadLinePrefix } from "../../shared"; -import { getWalletAddress, getWalletMultiplier } from "../../../adapters/supabase"; -import { tableComment } from "./table"; -import { taskInfo } from "../../wildcard"; -import { ASSIGN_COMMAND_ENABLED, GLOBAL_STRINGS } from "../../../configs"; -import { isParentIssue } from "../../pricing"; - -export const assign = async (body: string) => { - const { payload: _payload } = getBotContext(); - const logger = getLogger(); - const config = getBotConfig(); - - const payload = _payload as Payload; - const { repository, organization } = payload; - - const id = organization?.id || repository?.id; // repository?.id as fallback - - const staleTask = config.assign.staleTaskTime; - - logger.info(`Received '/start' command from user: ${payload.sender.login}, body: ${body}`); - const issue = (_payload as Payload).issue; - - if (!issue) { - logger.info(`Skipping '/start' because of no issue instance`); - return "Skipping '/start' because of no issue instance"; - } - - if (!ASSIGN_COMMAND_ENABLED) { - logger.info(`Ignore '/start' command from user: ASSIGN_COMMAND_ENABLED config is set false`); - return GLOBAL_STRINGS.assignCommandDisabledComment; - } - - if (issue.body && isParentIssue(issue.body)) { - logger.info(`Ignore '/start' command from user: identified as parent issue`); - return GLOBAL_STRINGS.ignoreStartCommandForParentIssueComment; - } - - const openedPullRequests = await getAvailableOpenedPullRequests(payload.sender.login); - logger.info(`Opened Pull Requests with approved reviews or with no reviews but over 24 hours have passed: ${JSON.stringify(openedPullRequests)}`); - - const assignedIssues = await getAssignedIssues(payload.sender.login); - logger.info(`Max issue allowed is ${config.assign.maxConcurrentTasks}`); - - // check for max and enforce max - if (assignedIssues.length - openedPullRequests.length >= config.assign.maxConcurrentTasks) { - return `Too many assigned issues, you have reached your max of ${config.assign.maxConcurrentTasks}`; - } - - if (issue.state == IssueType.CLOSED) { - logger.info("Skipping '/start', reason: closed "); - return "Skipping `/start` since the issue is closed"; - } - const _assignees = payload.issue?.assignees; - const assignees = _assignees ?? []; - - if (assignees.length !== 0) { - logger.info(`Skipping '/start', reason: already assigned. assignees: ${assignees.length > 0 ? assignees.map((i) => i.login).join() : "NoAssignee"}`); - return "Skipping `/start` since the issue is already assigned"; - } - - // get the time label from the `labels` - const labels = payload.issue?.labels; - if (!labels) { - logger.info(`No labels to calculate timeline`); - return "Skipping `/start` since no issue labels are set to calculate the timeline"; - } - const timeLabelsDefined = config.price.timeLabels; - const timeLabelsAssigned: LabelItem[] = []; - for (const _label of labels) { - const _labelType = typeof _label; - const _labelName = _labelType === "string" ? _label.toString() : _labelType === "object" ? _label.name : "unknown"; - - const timeLabel = timeLabelsDefined.find((item) => item.name === _labelName); - if (timeLabel) { - timeLabelsAssigned.push(timeLabel); - } - } - - if (timeLabelsAssigned.length == 0) { - logger.info(`No time labels to calculate timeline`); - return "Skipping `/start` since no time labels are set to calculate the timeline"; - } - - const sorted = timeLabelsAssigned.sort((a, b) => calculateWeight(a) - calculateWeight(b)); - const targetTimeLabel = sorted[0]; - const duration = calculateDuration(targetTimeLabel); - if (!duration) { - logger.info(`Missing configure for time label: ${targetTimeLabel.name}`); - return "Skipping `/start` since configuration is missing for the following labels"; - } - - const startTime = new Date().getTime(); - const endTime = new Date(startTime + duration * 1000); - - const comment = { - deadline: endTime.toUTCString().replace("GMT", "UTC"), - wallet: (await getWalletAddress(payload.sender.login)) || "Please set your wallet address to use `/wallet 0x0000...0000`", - commit: `@${payload.sender.login} ${deadLinePrefix} ${endTime.toUTCString()}`, - tips: `
Tips:
-
    -
  • Use /wallet 0x0000...0000 if you want to update your registered payment wallet address @${payload.sender.login}.
  • -
  • Be sure to open a draft pull request as soon as possible to communicate updates on your progress.
  • -
  • Be sure to provide timely updates to us when requested, or you will be automatically unassigned from the task.
  • -
      `, - }; - - if (!assignees.map((i) => i.login).includes(payload.sender.login)) { - logger.info(`Adding the assignee: ${payload.sender.login}`); - await addAssignees(issue.number, [payload.sender.login]); - } - - let days: number | undefined; - let staleToDays: number | undefined; - let isTaskStale = false; - - if (staleTask !== 0) { - days = Math.floor((new Date().getTime() - new Date(issue.created_at).getTime()) / (1000 * 60 * 60 * 24)); - staleToDays = Math.floor(staleTask / (1000 * 60 * 60 * 24)); - isTaskStale = days >= staleToDays; - } - - // double check whether the assign message has been already posted or not - logger.info(`Creating an issue comment: ${comment.commit}`); - const issueComments = await getAllIssueComments(issue.number); - const comments = issueComments.sort((a: Comment, b: Comment) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()); - const latestComment = comments.length > 0 ? comments[0].body : undefined; - if (latestComment && comment.commit != latestComment) { - const { multiplier, reason, task } = await getMultiplierInfoToDisplay(payload.sender.login, id?.toString(), issue); - return tableComment({ ...comment, multiplier, reason, task, isTaskStale, days }) + comment.tips; - } - return; -}; - -const getMultiplierInfoToDisplay = async (senderLogin: string, org_id: string, issue: Issue) => { - const { reason, value } = await getWalletMultiplier(senderLogin, org_id); - - const multiplier = value?.toFixed(2) || "1.00"; - - let _multiplierToDisplay, _reasonToDisplay, _taskToDisplay; - - if (value == 1) { - if (reason) { - _multiplierToDisplay = multiplier; - _reasonToDisplay = reason; - } else { - // default mode: normal contributor with default multiplier 1 and no reason - // nothing to show about multiplier - } - } else { - _multiplierToDisplay = multiplier; - _reasonToDisplay = reason; - _taskToDisplay = `Permit generation disabled because price label is not set.`; - const issueDetailed = taskInfo(issue); - if (issueDetailed.priceLabel) { - _taskToDisplay = (+issueDetailed.priceLabel.substring(7, issueDetailed.priceLabel.length - 4) * value).toString() + " USD"; - } - } - return { multiplier: _multiplierToDisplay, reason: _reasonToDisplay, task: _taskToDisplay }; -}; diff --git a/src/handlers/comment/handlers/authorize.ts b/src/handlers/comment/handlers/authorize.ts new file mode 100644 index 000000000..180fa9ace --- /dev/null +++ b/src/handlers/comment/handlers/authorize.ts @@ -0,0 +1,51 @@ +import Runtime from "../../../bindings/bot-runtime"; +import { isUserAdminOrBillingManager } from "../../../helpers/issue"; +import { Context } from "../../../types/context"; +import { GitHubPayload } from "../../../types/payload"; +import { taskPaymentMetaData } from "../../wildcard/analytics"; + +export async function authorizeLabelChanges(context: Context) { + const runtime = Runtime.getState(); + const { label } = runtime.adapters.supabase; + const logger = context.logger; + const payload = context.event.payload as GitHubPayload; + const sender = payload.sender.login; + + logger.info("Running '/authorize' command handler", { sender }); + + const { issue, repository } = payload; + if (!issue) { + return logger.info(`Skipping '/authorize' because of no issue instance`); + } + + // check if sender is admin + // passing in context so we don't have to make another request to get the user + const sufficientPrivileges = await isUserAdminOrBillingManager(context, sender); + + // if sender is not admin, return + if (sufficientPrivileges) { + throw logger.fatal( + "User is not an admin/billing_manager and do not have the required permissions to access this function.", + { sender } + ); + } + + const task = taskPaymentMetaData(context, issue); + + if (!task.priceLabel || !task.priorityLabel || !task.timeLabel) { + throw logger.fatal("Missing required labels", { issueDetailed: task }); + } + + // get current repository node id from payload and pass it to getLabelChanges function to get label changes + const labelChanges = await label.getLabelChanges(repository.node_id); + + if (labelChanges) { + // Approve label changes + labelChanges.forEach(async (labelChange) => { + await label.approveLabelChange(labelChange.id); + return logger.info("Approved label change", { labelChange }); + }); + } + + return logger.ok("Label change has been approved, permit can now be generated"); +} diff --git a/src/handlers/comment/handlers/comment-handler-main.ts b/src/handlers/comment/handlers/comment-handler-main.ts new file mode 100644 index 000000000..2f7e3dc6f --- /dev/null +++ b/src/handlers/comment/handlers/comment-handler-main.ts @@ -0,0 +1,134 @@ +import { listAvailableCommands } from "./help"; +import { start } from "./start/start"; +// Commented out until Gnosis Safe is integrated (https://github.com/ubiquity/ubiquibot/issues/353) +// import { payout } from "./payout"; +import { ask } from "./ask"; +import { authorizeLabelChanges } from "./authorize"; +import { setLabels } from "./labels"; +import { multiplier } from "./multiplier"; +import { stop } from "./stop"; +import { registerWallet } from "./wallet"; +// import { addPenalty } from "../../../adapters/supabase"; + +import { UserCommands } from "../../../types/handlers"; +import { query } from "./query"; + +export * from "./ask"; +export * from "./authorize"; +export * from "./help"; +export * from "./multiplier"; +export * from "./query"; +export * from "./start/start"; +export * from "./stop"; +export * from "./wallet"; + +// Parses the comment body and figure out the command name a user wants +export function commentParser(body: string): null | string { + const userCommandIds = userCommands(false).map((cmd) => cmd.id); + const regex = new RegExp(`^(${userCommandIds.join("|")})\\b`); // Regex pattern to match any command at the beginning of the body + + const matches = regex.exec(body); + if (matches) { + const command = matches[0] as string; + if (userCommandIds.includes(command)) { + return command; + } + } + + return null; +} + +export function userCommands(walletVerificationEnabled: boolean): UserCommands[] { + const accountForWalletVerification = walletVerificationDetails(walletVerificationEnabled); + return [ + { + id: "/start", + description: "Assign yourself to the issue.", + example: "/start", + handler: start, + }, + { + id: "/stop", + description: "Unassign yourself from the issue.", + example: "/stop", + handler: stop, + }, + { + id: "/help", + description: "List all available commands.", + example: "/help", + handler: listAvailableCommands, + }, + // Commented out until Gnosis Safe is integrated (https://github.com/ubiquity/ubiquibot/issues/353) + /*{ + id: "/payout", + description: "Disable automatic payment for the issue.", + handler: payout, + },*/ + // { + // id: "/autopay", + // description: "Toggle automatic payment for the completion of the current issue.", + // example: "/autopay true", + // handler: autoPay, + // }, + { + id: "/query", + description: "Returns the user's wallet, access, and multiplier information.", + example: "/query @user", + handler: query, + }, + { + id: "/ask", + description: "Ask a context aware question.", + example: "/ask is x or y the best approach?", + handler: ask, + }, + { + id: "/multiplier", + description: "Set the task payout multiplier for a specific contributor, and provide a reason for why.", + example: '/multiplier @user 0.5 "multiplier reason"', + handler: multiplier, + }, + { + id: "/labels", + description: "Set access control, for admins only.", + example: "/labels @user priority time price", // Ensure there are spaces between words + handler: setLabels, + }, + { + id: "/authorize", + description: "Approve a label change, for admins only.", + example: "/authorize", + handler: authorizeLabelChanges, + }, + { + id: "/wallet", + description: accountForWalletVerification.description, + example: accountForWalletVerification.example, + handler: registerWallet, + }, + ]; +} + +function walletVerificationDetails(walletVerificationEnabled: boolean) { + const base = { + description: "Register your wallet address for payments.", + example: "/wallet ubq.eth", + }; + + const withVerification = { + description: + 'Your message to sign is: "UbiquiBot". You can generate a signature hash using https://etherscan.io/verifiedSignatures', + example: + "0xe2a3e34a63f3def2c29605de82225b79e1398190b542be917ef88a8e93ff9dc91bdc3ef9b12ed711550f6d2cbbb50671aa3f14a665b709ec391f3e603d0899a41b", + }; + + if (walletVerificationEnabled) { + return { + description: `${base.description} ${withVerification.description}`, + example: `${base.example} ${withVerification.example}`, + }; + } else { + return base; + } +} diff --git a/src/handlers/comment/handlers/delegate-compute/delegated-compute.ts b/src/handlers/comment/handlers/delegate-compute/delegated-compute.ts new file mode 100644 index 000000000..56a4812ff --- /dev/null +++ b/src/handlers/comment/handlers/delegate-compute/delegated-compute.ts @@ -0,0 +1,88 @@ +import { Context } from "../../../../types/context"; +import { GitHubEvent } from "../../../../types/github-events"; +import { dispatchWorkflow } from "./remote-permissions"; +export interface DelegatedComputeInputs { + eventName: GitHubEvent; + issueOwner: string; + issueRepository: string; + issueNumber: string; + collaborators: string; +} + +export const computeLocation = { + // // TODO: Make this configurable + owner: "ubiquibot", // "ubiquity", + repository: "comment-incentives", + workflowId: "compute.yml", +}; + +export async function delegateCompute(context: Context, inputs: DelegatedComputeInputs) { + // computeLocation.owner = context.payload?.organization?.login || context.payload.repository.owner.login; + // if (!computeLocation.owner) { + // throw context.logger.error("Compute repository owner is not defined"); + // } + const ref = await getDefaultBranch(context, computeLocation.owner, computeLocation.repository); + + // You must authenticate using an access token with the repo scope to use this endpoint. GitHub Apps must have the actions:write permission to use this endpoint. + // For more information, see "Creating a personal access token for the command line." + // https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens + // const response = await context.octokit.actions.createWorkflowDispatch({ + // owner: computeLocation.owner, + // repo: computeLocation.repository, + // workflow_id: computeLocation.workflowId, + // ref, + + // }); + + // const response = await remoteAuthenticatedDispatch(context, ref, inputs); + + // Example usage in your Probot app: + // Trigger the workflow dispatch here + const response = await dispatchWorkflow(context, { + org: computeLocation.owner, + repo: computeLocation.repository, + workflowId: computeLocation.workflowId, + ref, + inputs: inputs as unknown as { [key: string]: string }, + }); + + if (response.status !== 204) { + throw new Error(`Failed to dispatch workflow. Status: ${response.status}`); + } +} + +async function getDefaultBranch(context: Context, owner: string, repository: string) { + const computeRepositoryFull = await context.octokit.repos.get({ + owner: owner, + repo: repository, + }); + return computeRepositoryFull.data.default_branch; +} +// async function remoteAuthenticatedDispatch(context: Context, ref: string, inputs: DelegatedComputeInputs) { +// // Get the installation ID for the other organization +// const { data: installations } = await context.octokit.apps.listInstallations(); +// if (!installations) { +// throw new Error("No installations found"); +// } +// const installationId = installations.find((installation) => installation.account.login === "ubiquibot").id; + +// // Create a new Octokit instance +// const installationOctokit = new Octokit({ +// authStrategy: Octokit.auth.App, +// auth: { +// id: context.octokit.auth, // replace with your GitHub App's ID +// privateKey: YOUR_PRIVATE_KEY, // replace with your GitHub App's private key +// installationId: installationId, +// }, +// }); + +// // Use the new Octokit instance to dispatch the workflow +// const response = await installationOctokit.actions.createWorkflowDispatch({ +// owner: computeLocation.owner, +// repo: computeLocation.repository, +// workflow_id: computeLocation.workflowId, +// ref, +// inputs: inputs as unknown as { [key: string]: string }, +// }); +// return response; +// } diff --git a/src/handlers/comment/handlers/delegate-compute/remote-permissions.ts b/src/handlers/comment/handlers/delegate-compute/remote-permissions.ts new file mode 100644 index 000000000..d47575162 --- /dev/null +++ b/src/handlers/comment/handlers/delegate-compute/remote-permissions.ts @@ -0,0 +1,99 @@ +import { Octokit } from "@octokit/rest"; +import { Context } from "../../../../types/context"; +import { GitHubEvent, GitHubUser } from "../../../../types/payload"; + +interface WorkflowDispatchOptions { + org: string; + repo: string; + workflowId: string; + ref: string; + inputs?: { [key: string]: string }; +} + +async function getInstallationOctokitForOrg(context: Context, org: string) { + // You might need to adapt this part based on the actual event type your app handles + const installations = await context.octokit.apps.listInstallations(); + // context.logger.debug("installations", installations); + const installation = installations.data.find((inst) => inst.account?.login === org) as ExampleResponse; + // context.logger.debug("installation", installation); + + if (!installation) { + throw new Error(`No installation found for organization: ${org}`); + } + + return context.octokit.auth({ + type: "installation", + installationId: installation.id, + }) as Promise>; +} + +export async function dispatchWorkflow(context: Context, options: WorkflowDispatchOptions) { + const installationOctokit = (await getInstallationOctokitForOrg( + context, + options.org + )) as unknown as ExampleInstallation; // I took a real response so ignore this type cast. + + context.logger.debug("installationOctokit", installationOctokit); + const authenticatedOctokit = new Octokit({ auth: installationOctokit.token }); + + console.trace(options.inputs); + + return await authenticatedOctokit.actions.createWorkflowDispatch({ + owner: options.org, + repo: options.repo, + workflow_id: options.workflowId, + ref: options.ref, + inputs: options.inputs, + }); +} + +interface ExampleResponse { + id: 37628281; + account: GitHubUser; + repository_selection: "all"; + access_tokens_url: "https://api.github.com/app/installations/37628281/access_tokens"; + repositories_url: "https://api.github.com/installation/repositories"; + html_url: "https://github.com/organizations/ubiquibot/settings/installations/37628281"; + app_id: 236521; + app_slug: "ubiquibot"; + target_id: 133917611; + target_type: "Organization"; + permissions: { + issues: "write"; + actions: "write"; + members: "read"; + contents: "write"; + metadata: "read"; + pull_requests: "write"; + }; + events: GitHubEvent[]; + created_at: "2023-05-17T20:52:25.000Z"; + updated_at: "2023-12-23T09:58:37.000Z"; + single_file_name: null; + has_multiple_single_files: false; + single_file_paths: []; + suspended_by: null; + suspended_at: null; + caller: "getInstallationOctokitForOrg"; + revision: "4c15837"; +} + +interface ExampleInstallation { + type: "token"; + tokenType: "installation"; + token: "ghs_Pm5WyIfH7OjYg6uDv9MQGflRuaGeub2LYHu9"; + installationId: 37628281; + permissions: { + members: "read"; + actions: "write"; + contents: "write"; + issues: "write"; + metadata: "read"; + pull_requests: "write"; + }; + createdAt: "2023-12-23T15:08:59.876Z"; + expiresAt: "2023-12-23T16:08:59Z"; + repositorySelection: "all"; + caller: "dispatchWorkflow"; + revision: "4c15837"; +} diff --git a/src/handlers/comment/handlers/first.ts b/src/handlers/comment/handlers/first.ts index 77e898420..d013be487 100644 --- a/src/handlers/comment/handlers/first.ts +++ b/src/handlers/comment/handlers/first.ts @@ -1,51 +1,39 @@ -import { getBotConfig, getBotContext, getLogger } from "../../../bindings"; -import { upsertCommentToIssue } from "../../../helpers"; -import { Payload } from "../../../types"; +import { Context } from "../../../types/context"; +import { GitHubPayload } from "../../../types/payload"; import { generateHelpMenu } from "./help"; -export const verifyFirstCheck = async (): Promise => { - const context = getBotContext(); - const logger = getLogger(); - const payload = context.payload as Payload; - let msg = ""; - if (!payload.issue) return; +export async function verifyFirstCommentInRepository(context: Context) { + const payload = context.event.payload as GitHubPayload; + if (!payload.issue) { + throw context.logger.error("Issue is null. Skipping", { issue: payload.issue }, true); + } const { - newContributorGreeting: { header, helpMenu, footer, enabled }, - } = getBotConfig(); - try { - const response_issue = await context.octokit.rest.search.issuesAndPullRequests({ - q: `is:issue repo:${payload.repository.owner.login}/${payload.repository.name} commenter:${payload.sender.login}`, - per_page: 2, - }); - const response_pr = await context.octokit.rest.search.issuesAndPullRequests({ - q: `is:pull-request repo:${payload.repository.owner.login}/${payload.repository.name} commenter:${payload.sender.login}`, - per_page: 2, + features: { + newContributorGreeting: { header, footer, enabled: isEnabled }, + }, + } = context.config; + const responseIssue = await context.event.octokit.rest.search.issuesAndPullRequests({ + q: `is:issue repo:${payload.repository.owner.login}/${payload.repository.name} commenter:${payload.sender.login}`, + per_page: 2, + }); + const responsePr = await context.event.octokit.rest.search.issuesAndPullRequests({ + q: `is:pull-request repo:${payload.repository.owner.login}/${payload.repository.name} commenter:${payload.sender.login}`, + per_page: 2, + }); + if (responseIssue.data.total_count + responsePr.data.total_count === 1) { + //continue_first_search + const data = responseIssue.data.total_count > 0 ? responseIssue.data : responsePr.data; + const resp = await context.event.octokit.rest.issues.listComments({ + issue_number: data.items[0].number, + owner: payload.repository.owner.login, + repo: payload.repository.name, + per_page: 100, }); - if (response_issue.data.total_count + response_pr.data.total_count === 1) { - //continue_first_search - const data = response_issue.data.total_count > 0 ? response_issue.data : response_pr.data; - const resp = await context.octokit.rest.issues.listComments({ - issue_number: data.items[0].number, - owner: payload.repository.owner.login, - repo: payload.repository.name, - per_page: 100, - }); - const isFirstComment = resp.data.filter((item) => item.user?.login === payload.sender.login).length === 1; - if (isFirstComment && enabled) { - //first_comment - if (header) { - msg += `${header}\n`; - } - if (helpMenu) { - msg += `${generateHelpMenu()}\n@${payload.sender.login}\n`; - } - if (footer) { - msg += `${footer}`; - } - await upsertCommentToIssue(payload.issue.number, msg, payload.action, payload.comment); - } + const isFirstComment = resp.data.filter((item) => item.user?.login === payload.sender.login).length === 1; + if (isFirstComment && isEnabled) { + return [header, generateHelpMenu(context), `@${payload.sender.login}`, footer].join("\n"); + // await upsertCommentToIssue(payload.issue.number, msg, payload.action, payload.comment); } - } catch (error: unknown) { - logger.info(`First comment verification failed, reason: ${error}`); } -}; + return context.logger.info(`Skipping first comment`); +} diff --git a/src/handlers/comment/handlers/help.ts b/src/handlers/comment/handlers/help.ts index a9cae90a8..64ca7e29b 100644 --- a/src/handlers/comment/handlers/help.ts +++ b/src/handlers/comment/handlers/help.ts @@ -1,49 +1,61 @@ -import { userCommands } from "."; -import { getBotContext, getLogger } from "../../../bindings"; -import { ASSIGN_COMMAND_ENABLED } from "../../../configs"; -import { IssueType, Payload } from "../../../types"; -import { IssueCommentCommands } from "../commands"; - -export const listAvailableCommands = async (body: string) => { - const { payload: _payload } = getBotContext(); - const logger = getLogger(); - if (body != IssueCommentCommands.HELP && body.replace(/`/g, "") != IssueCommentCommands.HELP) { - logger.info(`Skipping to list available commands. body: ${body}`); - return; +import { Context } from "../../../types/context"; +import { userCommands } from "./comment-handler-main"; + +export async function listAvailableCommands(context: Context, body: string) { + const logger = context.logger; + if (body != "/help") { + return logger.info("Skipping to list available commands.", { body }); } - const payload = _payload as Payload; - const issue = payload.issue; + const issue = context.payload.issue; if (!issue) { - logger.info("Skipping /help, reason: not issue"); - return; + return context.logger.info("Skipping /help, reason: not issue"); } - if (issue.state == IssueType.CLOSED) { - logger.info("Skipping '/start', reason: closed "); - return; - } + return generateHelpMenu(context); +} + +export function generateHelpMenu(context: Context) { + const config = context.config; + const disabledCommands = config.disabledCommands; + const isStartDisabled = config.disabledCommands.some((command) => command === "start"); + let helpMenu = "### Available Commands\n\n| Command | Description | Example |\n| --- | --- | --- |\n"; + const commands = userCommands(config.miscellaneous.registerWalletWithVerification); - return generateHelpMenu(); -}; - -export const generateHelpMenu = () => { - let helpMenu = "### Available Commands\n```"; - const commands = userCommands(); - commands.map((command) => { - // if first command, add a new line - if (command.id === commands[0].id) { - helpMenu += `\n`; - if (!ASSIGN_COMMAND_ENABLED) return; - } - helpMenu += `- ${command.id}: ${command.description}`; - // if not last command, add a new line (fixes too much space below) - if (command.id !== commands[commands.length - 1].id) { - helpMenu += `\n`; - } - }); - if (!ASSIGN_COMMAND_ENABLED) { - helpMenu += "\n***_To assign yourself to an issue, please open a draft pull request that is linked to it._***"; + commands + .filter((command) => !disabledCommands.includes(command.id)) + .map( + (command) => + (helpMenu += `| \`${command.id}\` | ${breakSentences(command.description) || ""} | ${ + (command.example && breakLongString(command.example)) || "" + } |\n`) // add to help menu + ); + + if (isStartDisabled) { + helpMenu += "\n\n**To assign yourself to an issue, please open a draft pull request that is linked to it.**"; } return helpMenu; -}; +} + +function breakLongString(str: string, maxLen = 24) { + const newStr = [] as string[]; + let spaceIndex = str.indexOf(" ", maxLen); // Find the first space after maxLen + + while (str.length > maxLen && spaceIndex !== -1) { + newStr.push(str.slice(0, spaceIndex)); + str = str.slice(spaceIndex + 1); + spaceIndex = str.indexOf(" ", maxLen); + } + + newStr.push(str); // Push the remaining part of the string + + return newStr.join("
      "); +} + +function breakSentences(str: string) { + const sentences = str.endsWith(".") ? str.slice(0, -1).split(". ") : str.split(". "); + if (sentences.length <= 1) { + return str; + } + return sentences.join(".

      "); +} diff --git a/src/handlers/comment/handlers/index.ts b/src/handlers/comment/handlers/index.ts deleted file mode 100644 index fd2f723a0..000000000 --- a/src/handlers/comment/handlers/index.ts +++ /dev/null @@ -1,312 +0,0 @@ -import { Comment, Payload, UserCommands } from "../../../types"; -import { IssueCommentCommands } from "../commands"; -import { assign } from "./assign"; -import { listAvailableCommands } from "./help"; -// Commented out until Gnosis Safe is integrated (https://github.com/ubiquity/ubiquibot/issues/353) -// import { payout } from "./payout"; -import { unassign } from "./unassign"; -import { registerWallet } from "./wallet"; -import { setAccess } from "./allow"; -import { ask } from "./ask"; -import { multiplier } from "./multiplier"; -import { BigNumber, ethers } from "ethers"; -import { addPenalty } from "../../../adapters/supabase"; -import { - addCommentToIssue, - createLabel, - addLabelToIssue, - getLabel, - upsertCommentToIssue, - getAllIssueComments, - getPayoutConfigByNetworkId, - getTokenSymbol, - getAllIssueAssignEvents, - calculateWeight, -} from "../../../helpers"; -import { getBotConfig, getBotContext, getLogger } from "../../../bindings"; -import { - handleIssueClosed, - incentivesCalculation, - calculateIssueConversationReward, - calculateIssueCreatorReward, - calculateIssueAssigneeReward, - calculatePullRequestReviewsReward, -} from "../../payout"; -import { query } from "./query"; -import { autoPay } from "./payout"; -import { getTargetPriceLabel } from "../../shared"; -import Decimal from "decimal.js"; -import { ErrorDiff } from "../../../utils/helpers"; - -export * from "./assign"; -export * from "./wallet"; -export * from "./unassign"; -export * from "./payout"; -export * from "./help"; -export * from "./multiplier"; -export * from "./query"; -export * from "./ask"; - -export interface RewardsResponse { - error: string | null; - title?: string; - userId?: string; - username?: string; - reward?: { - account: string; - priceInEth: Decimal; - penaltyAmount: BigNumber; - user: string; - userId: string; - }[]; - fallbackReward?: Record; -} - -/** - * Parses the comment body and figure out the command name a user wants - * - * - * @param body - The comment body - * @returns The list of command names the comment includes - */ - -export const commentParser = (body: string): IssueCommentCommands[] => { - const regex = /^\/(\w+)\b/; // Regex pattern to match the command at the beginning of the body - - const matches = regex.exec(body); - if (matches) { - const command = matches[0] as IssueCommentCommands; - if (Object.values(IssueCommentCommands).includes(command)) { - return [command]; - } - } - - return []; -}; - -/** - * Callback for issues closed - Processor - */ - -export const issueClosedCallback = async (): Promise => { - const { payload: _payload } = getBotContext(); - const issue = (_payload as Payload).issue; - if (!issue) return; - try { - // assign function incentivesCalculation to a variable - const calculateIncentives = await incentivesCalculation(); - - const creatorReward = await calculateIssueCreatorReward(calculateIncentives); - const assigneeReward = await calculateIssueAssigneeReward(calculateIncentives); - const conversationRewards = await calculateIssueConversationReward(calculateIncentives); - const pullRequestReviewersReward = await calculatePullRequestReviewsReward(calculateIncentives); - - const { error } = await handleIssueClosed(creatorReward, assigneeReward, conversationRewards, pullRequestReviewersReward, calculateIncentives); - - if (error) { - throw new Error(error); - } - } catch (err: unknown) { - return await addCommentToIssue(ErrorDiff(err), issue.number); - } -}; - -/** - * Callback for issues created - Processor - */ - -export const issueCreatedCallback = async (): Promise => { - const logger = getLogger(); - const { payload: _payload } = getBotContext(); - const config = getBotConfig(); - const issue = (_payload as Payload).issue; - if (!issue) return; - const labels = issue.labels; - - const { assistivePricing } = config.mode; - - if (!assistivePricing) { - logger.info("Skipping adding label to issue because assistive pricing is disabled."); - return; - } - - try { - const timeLabels = config.price.timeLabels.filter((item) => labels.map((i) => i.name).includes(item.name)); - const priorityLabels = config.price.priorityLabels.filter((item) => labels.map((i) => i.name).includes(item.name)); - - const minTimeLabel = - timeLabels.length > 0 ? timeLabels.reduce((a, b) => (calculateWeight(a) < calculateWeight(b) ? a : b)).name : config.price.defaultLabels[0]; - const minPriorityLabel = - priorityLabels.length > 0 ? priorityLabels.reduce((a, b) => (calculateWeight(a) < calculateWeight(b) ? a : b)).name : config.price.defaultLabels[1]; - if (!timeLabels.length) await addLabelToIssue(minTimeLabel); - if (!priorityLabels.length) await addLabelToIssue(minPriorityLabel); - - const targetPriceLabel = getTargetPriceLabel(minTimeLabel, minPriorityLabel); - if (targetPriceLabel && !labels.map((i) => i.name).includes(targetPriceLabel)) { - const exist = await getLabel(targetPriceLabel); - if (!exist) await createLabel(targetPriceLabel, "price"); - await addLabelToIssue(targetPriceLabel); - } - } catch (err: unknown) { - await addCommentToIssue(ErrorDiff(err), issue.number); - } -}; - -/** - * Callback for issues reopened - Processor - */ - -export const issueReopenedCallback = async (): Promise => { - const { payload: _payload } = getBotContext(); - const { - payout: { permitBaseUrl }, - } = getBotConfig(); - const logger = getLogger(); - const issue = (_payload as Payload).issue; - const repository = (_payload as Payload).repository; - if (!issue) return; - try { - // find permit comment from the bot - const comments = await getAllIssueComments(issue.number); - const claimUrlRegex = new RegExp(`\\((${permitBaseUrl}\\?claim=\\S+)\\)`); - const permitCommentIdx = comments.findIndex((e) => e.user.type === "Bot" && e.body.match(claimUrlRegex)); - if (permitCommentIdx === -1) { - return; - } - - // extract permit amount and token - const permitComment = comments[permitCommentIdx]; - const permitUrl = permitComment.body.match(claimUrlRegex); - if (!permitUrl || permitUrl.length < 2) { - logger.error(`Permit URL not found`); - return; - } - const url = new URL(permitUrl[1]); - const claimBase64 = url.searchParams.get("claim"); - if (!claimBase64) { - logger.error(`Permit claim search parameter not found`); - return; - } - let networkId = url.searchParams.get("network"); - if (!networkId) { - networkId = "1"; - } - const { rpc } = getPayoutConfigByNetworkId(Number(networkId)); - let claim; - try { - claim = JSON.parse(Buffer.from(claimBase64, "base64").toString("utf-8")); - } catch (err: unknown) { - logger.error(`Error parsing claim: ${err}`); - return; - } - const amount = BigNumber.from(claim.permit.permitted.amount); - const formattedAmount = ethers.utils.formatUnits(amount, 18); - const tokenAddress = claim.permit.permitted.token; - const tokenSymbol = await getTokenSymbol(tokenAddress, rpc); - - // find latest assignment before the permit comment - const events = await getAllIssueAssignEvents(issue.number); - if (events.length === 0) { - logger.error(`No assignment found`); - return; - } - const assignee = events[0].assignee.login; - - if (parseFloat(formattedAmount) > 0) { - // write penalty to db - try { - await addPenalty(assignee, repository.full_name, tokenAddress, networkId.toString(), amount); - } catch (err) { - logger.error(`Error writing penalty to db: ${err}`); - return; - } - - await addCommentToIssue( - `@${assignee} please be sure to review this conversation and implement any necessary fixes. Unless this is closed as completed, its payment of **${formattedAmount} ${tokenSymbol}** will be deducted from your next task.`, - issue.number - ); - } else { - logger.info(`Skipped penalty because amount is 0`); - } - } catch (err: unknown) { - await addCommentToIssue(ErrorDiff(err), issue.number); - } -}; - -/** - * Default callback for slash commands - * - * - * @param issue_number - The issue number - * @param comment - Comment string - */ - -const commandCallback = async (issue_number: number, comment: string, action: string, reply_to?: Comment) => { - await upsertCommentToIssue(issue_number, comment, action, reply_to); -}; - -export const userCommands = (): UserCommands[] => { - return [ - { - id: IssueCommentCommands.START, - description: "Assign yourself to the issue.", - handler: assign, - callback: commandCallback, - }, - { - id: IssueCommentCommands.STOP, - description: "Unassign yourself from the issue.", - handler: unassign, - callback: commandCallback, - }, - { - handler: listAvailableCommands, - id: IssueCommentCommands.HELP, - description: "List all available commands.", - callback: commandCallback, - }, - // Commented out until Gnosis Safe is integrated (https://github.com/ubiquity/ubiquibot/issues/353) - /*{ - id: IssueCommentCommands.PAYOUT, - description: "Disable automatic payment for the issue.", - handler: payout, - callback: commandCallback, - },*/ - { - id: IssueCommentCommands.AUTOPAY, - description: "Toggle automatic payment for the completion of the current issue.", - handler: autoPay, - callback: commandCallback, - }, - { - id: IssueCommentCommands.QUERY, - description: `Comments the users multiplier and address`, - handler: query, - callback: commandCallback, - }, - { - id: IssueCommentCommands.ASK, - description: `Ask a technical question to UbiquiBot. \n example usage: "/ask How do I do X?"`, - handler: ask, - callback: commandCallback, - }, - { - id: IssueCommentCommands.MULTIPLIER, - description: `Set the task payout multiplier for a specific contributor, and provide a reason for why.\n\te.g. /wallet @user 0.5 "Multiplier reason"`, - handler: multiplier, - callback: commandCallback, - }, - { - id: IssueCommentCommands.ALLOW, - description: `Set access control. Superuser only.`, - handler: setAccess, - callback: commandCallback, - }, - { - id: IssueCommentCommands.WALLET, - description: ` : Register your wallet address for payments.\n\tYour message to sign is: "DevPool"\n\tYou can generate SIGNATURE_HASH at https://etherscan.io/verifiedSignatures\n\te.g. "/wallet 0x16ce4d863eD687455137576da2A0cbaf4f1E8f76 0xe2a3e34a63f3def2c29605de82225b79e1398190b542be917ef88a8e93ff9dc91bdc3ef9b12ed711550f6d2cbbb50671aa3f14a665b709ec391f3e603d0899a41b"`, - handler: registerWallet, - callback: commandCallback, - }, - ]; -}; diff --git a/src/handlers/comment/handlers/issue-closed.ts b/src/handlers/comment/handlers/issue-closed.ts new file mode 100644 index 000000000..b6dbfafbb --- /dev/null +++ b/src/handlers/comment/handlers/issue-closed.ts @@ -0,0 +1,134 @@ +import Runtime from "../../../bindings/bot-runtime"; +import { getAllIssueComments, isUserAdminOrBillingManager } from "../../../helpers/issue"; +import { Context } from "../../../types/context"; +import { GitHubEvent } from "../../../types/github-events"; +import { GitHubComment, GitHubIssue, GitHubPayload, StateReason } from "../../../types/payload"; +import structuredMetadata from "../../shared/structured-metadata"; +import { delegateCompute } from "./delegate-compute/delegated-compute"; +import { getCollaboratorsForRepo } from "./issue/get-collaborator-ids-for-repo"; +// import { getCollaboratorsForRepo } from "./issue/get-collaborator-ids-for-repo"; +// import { getPullRequestComments } from "./issue/get-pull-request-comments"; + +export async function issueClosed(context: Context) { + const payload = context.event.payload as GitHubPayload; + const issue = payload.issue as GitHubIssue; + + const { issueComments, issueOwner, issueRepository, issueNumber } = await getEssentials(context); + await preflightChecks({ issue, issueComments, context }); + + // === Calculate Permit === // + + // const pullRequestComments = await getPullRequestComments(context, owner, repository, issueNumber); + + const collaborators = await getCollaboratorsForRepo(context); + + const installationId = (context.payload.installation as { id: number }).id.toString(); // probot always includes this on issue related events. + + const computeParams = { + eventName: GitHubEvent.ISSUES_CLOSED, + issueOwner, + issueRepository, + issueNumber: `${issueNumber}`, + collaborators: JSON.stringify(collaborators.map((collaborator) => collaborator.login)), // need to serialize to be accepted by workflow + installationId: installationId, + }; + await delegateCompute(context, computeParams); + return Runtime.getState().logger.ok("Evaluating results. Please wait...", computeParams); +} + +async function getEssentials(context: Context) { + const payload = context.event.payload as GitHubPayload; + const issue = payload.issue as GitHubIssue; + const runtime = Runtime.getState(); + const logger = runtime.logger; + if (!issue) throw context.logger.error("Issue is not defined"); + const issueComments = await getAllIssueComments(context, issue.number); + const issueOwner = payload?.organization?.login || payload.repository.owner.login; + if (!issueOwner) throw context.logger.error("Owner is not defined"); + const issueRepository = payload?.repository?.name; + const issueNumber = issue.number; + return { issue, runtime, logger, issueComments, issueOwner, issueRepository, issueNumber }; +} + +interface PreflightChecksParams { + issue: GitHubIssue; + issueComments: GitHubComment[]; + context: Context; +} + +async function preflightChecks({ issue, issueComments, context }: PreflightChecksParams) { + const { payload, config } = context; + if (!issue) throw context.logger.error("Permit generation skipped because issue is undefined"); + if (issue.state_reason !== StateReason.COMPLETED) + throw context.logger.info("Issue was not closed as completed. Skipping.", { issue }); + if (config.features.publicAccessControl.fundExternalClosedIssue) { + const hasPermission = await checkUserPermissionForRepoAndOrg(context, payload.sender.login); + if (!hasPermission) + throw context.logger.error( + "Permit generation disabled because this issue has been closed by an external contributor." + ); + } + + const priceLabels = issue.labels.find((label) => label.name.startsWith("Price: ")); + if (!priceLabels) { + throw context.logger.error("No price label has been set. Skipping permit generation.", { + labels: issue.labels, + }); + } + + const botComments = issueComments.filter((comment: GitHubComment) => comment.user.type === "Bot" /* No Humans */); + checkIfPermitsAlreadyPosted(context, botComments); +} + +function checkIfPermitsAlreadyPosted(context: Context, botComments: GitHubComment[]) { + botComments.forEach((comment) => { + const botComment = structuredMetadata.parse(comment.body); + // if (botComment) { + // console.trace({ parsed: botComment }); + if (botComment?.className === "Permits") { + // in the comment metadata we store what function rendered the comment + console.trace({ parsed: botComment }); + throw context.logger.error("Permit already posted"); + } + // } + }); +} +async function checkUserPermissionForRepoAndOrg(context: Context, username: string): Promise { + const hasPermissionForRepo = await checkUserPermissionForRepo(context, username); + const hasPermissionForOrg = await checkUserPermissionForOrg(context, username); + const userPermission = await isUserAdminOrBillingManager(context, username); + + return hasPermissionForOrg || hasPermissionForRepo || userPermission === "admin"; +} +async function checkUserPermissionForRepo(context: Context, username: string): Promise { + const payload = context.payload; + try { + const res = await context.octokit.rest.repos.checkCollaborator({ + owner: payload.repository.owner.login, + repo: payload.repository.name, + username, + }); + + return res.status === 204; + } catch (e: unknown) { + context.logger.fatal("Checking if user permisson for repo failed!", e); + return false; + } +} + +async function checkUserPermissionForOrg(context: Context, username: string): Promise { + const payload = context.payload; + if (!payload.organization) return false; + + try { + await context.event.octokit.rest.orgs.checkMembershipForUser({ + org: payload.organization.login, + username, + }); + // skipping status check due to type error of checkMembershipForUser function of octokit + return true; + } catch (e: unknown) { + context.logger.fatal("Checking if user permisson for org failed!", e); + return false; + } +} diff --git a/src/handlers/comment/handlers/issue/get-collaborator-ids-for-repo.ts b/src/handlers/comment/handlers/issue/get-collaborator-ids-for-repo.ts new file mode 100644 index 000000000..f9d1c3926 --- /dev/null +++ b/src/handlers/comment/handlers/issue/get-collaborator-ids-for-repo.ts @@ -0,0 +1,18 @@ +import { Context } from "../../../../types/context"; +import { GitHubUser } from "../../../../types/payload"; + +export async function getCollaboratorsForRepo(context: Context): Promise { + const payload = context.payload; + + try { + const collaboratorUsers = (await context.octokit.paginate(context.octokit.rest.repos.listCollaborators, { + owner: payload.repository.owner.login, + repo: payload.repository.name, + per_page: 100, + })) as GitHubUser[]; + return collaboratorUsers; + } catch (err: unknown) { + context.logger.error("Failed to fetch lists of collaborators", err); + return []; + } +} diff --git a/src/handlers/comment/handlers/issue/get-pull-request-comments.ts b/src/handlers/comment/handlers/issue/get-pull-request-comments.ts new file mode 100644 index 000000000..c2722a972 --- /dev/null +++ b/src/handlers/comment/handlers/issue/get-pull-request-comments.ts @@ -0,0 +1,18 @@ +import { getLinkedPullRequests } from "../../../../helpers/get-linked-pull-requests"; +import { getAllIssueComments } from "../../../../helpers/issue"; +import { Context } from "../../../../types/context"; + +import { GitHubComment } from "../../../../types/payload"; + +export async function getPullRequestComments(context: Context, owner: string, repository: string, issueNumber: number) { + const pullRequestComments: GitHubComment[] = []; + const linkedPullRequests = await getLinkedPullRequests(context, { owner, repository, issue: issueNumber }); + if (linkedPullRequests.length) { + const linkedCommentsPromises = linkedPullRequests.map((pull) => getAllIssueComments(context, pull.number)); + const linkedCommentsResolved = await Promise.all(linkedCommentsPromises); + for (const linkedComments of linkedCommentsResolved) { + pullRequestComments.push(...linkedComments); + } + } + return pullRequestComments; +} diff --git a/src/handlers/comment/handlers/labels.ts b/src/handlers/comment/handlers/labels.ts new file mode 100644 index 000000000..3252363be --- /dev/null +++ b/src/handlers/comment/handlers/labels.ts @@ -0,0 +1,58 @@ +import Runtime from "../../../bindings/bot-runtime"; +import { isUserAdminOrBillingManager } from "../../../helpers/issue"; +import { Context } from "../../../types/context"; +import { GitHubPayload } from "../../../types/payload"; + +export async function setLabels(context: Context, body: string) { + const logger = context.logger; + const payload = context.event.payload as GitHubPayload; + const sender = payload.sender.login; + + const sufficientPrivileges = await isUserAdminOrBillingManager(context, sender); + if (!sufficientPrivileges) + return logger.info(`You are not an admin and do not have the required permissions to access this function.`); // if sender is not admin, return + + if (!payload.issue) return context.logger.info(`Skipping '/labels' because of no issue instance`); + + if (body.startsWith("/labels")) { + const { username, labels } = parseComment(body); + const { access, user } = Runtime.getState().adapters.supabase; + const url = payload.comment?.html_url as string; + if (!url) throw new Error("Comment url is undefined"); + + const nodeInfo = { + node_id: payload.comment?.node_id, + node_type: "IssueComment" as const, + node_url: url, + }; + + const userId = await user.getUserId(context.event, username); + await access.setAccess(labels, nodeInfo, userId); + if (!labels.length) { + return context.logger.ok("Successfully cleared access", { username }); + } + return context.logger.ok("Successfully set access", { username, labels }); + } else { + throw logger.fatal( + `Invalid syntax for allow \n usage: '/labels set-(access type) @user true|false' \n ex-1 /labels set-multiplier @user false` + ); + } +} + +function parseComment(comment: string): { username: string; labels: string[] } { + // Extract the @username using a regular expression + const usernameMatch = comment.match(/@(\w+)/); + if (!usernameMatch) throw new Error("Username not found in comment"); + const username = usernameMatch[1]; + + // Split the comment into words and filter out the command and the username + const labels = comment.split(/\s+/).filter((word) => word !== "/labels" && !word.startsWith("@")); + // if (!labels.length) throw new Error("No labels found in comment"); + + // no labels means clear access + + return { + username: username, + labels: labels, + }; +} diff --git a/src/handlers/comment/handlers/multiplier.ts b/src/handlers/comment/handlers/multiplier.ts index cc28ee83b..c9b04ab6f 100644 --- a/src/handlers/comment/handlers/multiplier.ts +++ b/src/handlers/comment/handlers/multiplier.ts @@ -1,46 +1,36 @@ -import { getAccessLevel, upsertWalletMultiplier } from "../../../adapters/supabase"; -import { getBotContext, getLogger } from "../../../bindings"; -import { getUserPermission } from "../../../helpers"; -import { Payload } from "../../../types"; +import Runtime from "../../../bindings/bot-runtime"; +import { isUserAdminOrBillingManager } from "../../../helpers/issue"; +import { Context } from "../../../types/context"; +import { GitHubPayload } from "../../../types/payload"; -export const multiplier = async (body: string) => { - const context = getBotContext(); - const logger = getLogger(); - const payload = context.payload as Payload; +/** + * You can use this command to set a multiplier for a user. + * It will accept arguments in any order. + * Example usage: + * + * /multiplier @user 0.5 "Multiplier reason" + * /multiplier 0.5 @user "Multiplier reason" + * /multiplier "Multiplier reason" @user 0.5 + * /multiplier 0.5 "Multiplier reason" @user + * /multiplier @user "Multiplier reason" 0.5 + **/ +export async function multiplier(context: Context, body: string) { + const logger = context.logger; + const payload = context.event.payload as GitHubPayload; const sender = payload.sender.login; const repo = payload.repository; - const { repository, organization } = payload; - - const id = organization?.id || repository?.id; // repository?.id as fallback - - logger.info(`Received '/multiplier' command from user: ${sender}`); - + const comment = payload.comment; + if (!comment) return context.logger.info(`Skipping '/multiplier' because of no comment instance`); const issue = payload.issue; - if (!issue) { - logger.info(`Skipping '/multiplier' because of no issue instance`); - return `Skipping '/multiplier' because of no issue instance`; - } - + context.logger.info("Running '/multiplier' command handler", { sender }); + if (!issue) return context.logger.info(`Skipping '/multiplier' because of no issue instance`); const regex = /(".*?"|[^"\s]+)(?=\s*|\s*$)/g; - /** You can use this command to set a multiplier for a user. - * It will accept arguments in any order. - * Example usage: - * - * /multiplier @user 0.5 "Multiplier reason" - * /multiplier 0.5 @user "Multiplier reason" - * /multiplier "Multiplier reason" @user 0.5 - * /multiplier 0.5 "Multiplier reason" @user - * /multiplier @user "Multiplier reason" 0.5 - * - **/ - const matches = body.match(regex); - matches?.shift(); if (matches) { let taskMultiplier = 1; - let username = ""; + let username; let reason = ""; for (const part of matches) { @@ -55,33 +45,65 @@ export const multiplier = async (body: string) => { username = username || sender; // check if sender is admin or billing_manager // passing in context so we don't have to make another request to get the user - const permissionLevel = await getUserPermission(sender, context); + const sufficientPrivileges = await isUserAdminOrBillingManager(context, sender); // if sender is not admin or billing_manager, check db for access - if (permissionLevel !== "admin" && permissionLevel !== "billing_manager") { - logger.info(`Getting multiplier access for ${sender} on ${repo.full_name}`); + if (sufficientPrivileges) { + context.logger.info("Getting multiplier access", { + repo: repo.full_name, + user: sender, + }); + // check db permission - const accessible = await getAccessLevel(sender, repo.full_name, "multiplier"); + // await getMultiplier(sender.id, repo.id); + const accessible = await getAccessLevel( + payload.sender.id + // , repo.full_name, "multiplier" + ); if (!accessible) { - logger.info(`User ${sender} is not an admin or billing_manager`); - return "Insufficient permissions to update the payout multiplier. You are not an `admin` or `billing_manager`"; + return logger.error( + "Insufficient permissions to update the payout multiplier. User is not an 'admin' or 'billing_manager'", + { + repo: repo.full_name, + user: sender, + } + ); } } - logger.info(`Upserting to the wallet table, username: ${username}, taskMultiplier: ${taskMultiplier}, reason: ${reason}}`); + context.logger.info("Upserting to the wallet table", { username, taskMultiplier, reason }); + + const { access } = Runtime.getState().adapters.supabase; + await access.upsertMultiplier(payload.sender.id, taskMultiplier, reason, comment); - await upsertWalletMultiplier(username, taskMultiplier?.toString(), reason, id?.toString()); if (taskMultiplier > 1) { - return `Successfully changed the payout multiplier for @${username} to ${taskMultiplier}. The reason ${ - reason ? `provided is "${reason}"` : "is not provided" - }. This feature is designed to limit the contributor's compensation for any task on the current repository due to other compensation structures (i.e. salary.) are you sure you want to use a price multiplier above 1?`; + return logger.ok( + "Successfully changed the payout multiplier. \ + This feature is designed to limit the contributor's compensation \ + for any task on the current repository \ + due to other compensation structures (i.e. salary.) \ + are you sure you want to use a price multiplier above 1?", + { + username, + taskMultiplier, + reason, + } + ); } else { - return `Successfully changed the payout multiplier for @${username} to ${taskMultiplier}. The reason ${ - reason ? `provided is "${reason}"` : "is not provided" - }.`; + return context.logger.ok("Successfully changed the payout multiplier", { + username, + taskMultiplier, + reason, + }); } } else { - logger.error("Invalid body for taskMultiplier command"); - return `Invalid syntax for wallet command \n example usage: "/multiplier @user 0.5 'Multiplier reason'"`; + return logger.fatal( + "Invalid body for taskMultiplier command. Example usage: /multiplier @user 0.5 'Multiplier reason'" + ); } -}; +} + +async function getAccessLevel(userId: number) { + const { access } = Runtime.getState().adapters.supabase; + return await access.getAccess(userId); +} diff --git a/src/handlers/comment/handlers/payout.ts b/src/handlers/comment/handlers/payout.ts deleted file mode 100644 index d5aabc7d6..000000000 --- a/src/handlers/comment/handlers/payout.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { getBotContext, getLogger } from "../../../bindings"; -import { Payload } from "../../../types"; -import { IssueCommentCommands } from "../commands"; -import { - calculateIssueAssigneeReward, - calculateIssueConversationReward, - calculateIssueCreatorReward, - calculatePullRequestReviewsReward, - handleIssueClosed, - incentivesCalculation, -} from "../../payout"; -import { getAllIssueComments, getUserPermission } from "../../../helpers"; -import { GLOBAL_STRINGS } from "../../../configs"; - -export const payout = async (body: string) => { - const { payload: _payload } = getBotContext(); - const logger = getLogger(); - if (body != IssueCommentCommands.PAYOUT && body.replace(/`/g, "") != IssueCommentCommands.PAYOUT) { - logger.info(`Skipping to payout. body: ${body}`); - return; - } - - const payload = _payload as Payload; - logger.info(`Received '/payout' command from user: ${payload.sender.login}`); - const issue = (_payload as Payload).issue; - if (!issue) { - logger.info(`Skipping '/payout' because of no issue instance`); - return; - } - - const _labels = payload.issue?.labels; - if (_labels?.some((e) => e.name.toLowerCase() === "Permitted".toLowerCase())) { - logger.info(`Permit already generated for ${payload.issue?.number}`); - return; - } - - const IssueComments = await getAllIssueComments(issue.number); - if (IssueComments.length === 0) { - return `Permit generation failed due to internal GitHub Error`; - } - - const hasPosted = IssueComments.find((e) => e.user.type === "Bot" && e.body.includes("https://pay.ubq.fi?claim")); - if (hasPosted) { - logger.info(`Permit already generated for ${payload.issue?.number}`); - return; - } - - // assign function incentivesCalculation to a variable - const calculateIncentives = await incentivesCalculation(); - - const creatorReward = await calculateIssueCreatorReward(calculateIncentives); - const assigneeReward = await calculateIssueAssigneeReward(calculateIncentives); - const conversationRewards = await calculateIssueConversationReward(calculateIncentives); - const pullRequestReviewersReward = await calculatePullRequestReviewsReward(calculateIncentives); - - return await handleIssueClosed(creatorReward, assigneeReward, conversationRewards, pullRequestReviewersReward, calculateIncentives); -}; - -export const autoPay = async (body: string) => { - const context = getBotContext(); - const _payload = context.payload; - const logger = getLogger(); - - const payload = _payload as Payload; - logger.info(`Received '/autopay' command from user: ${payload.sender.login}`); - - const pattern = /^\/autopay (true|false)$/; - const res = body.match(pattern); - - if (res) { - const userPermission = await getUserPermission(payload.sender.login, context); - if (userPermission !== "admin" && userPermission !== "billing_manager") { - return "You must be an `admin` or `billing_manager` to toggle automatic payments for completed issues."; - } - if (res.length > 1) { - return `${GLOBAL_STRINGS.autopayComment} **${res[1]}**`; - } - } - return "Invalid body for autopay command: e.g. /autopay false"; -}; diff --git a/src/handlers/comment/handlers/query.ts b/src/handlers/comment/handlers/query.ts index c80f1f15a..feaecab3a 100644 --- a/src/handlers/comment/handlers/query.ts +++ b/src/handlers/comment/handlers/query.ts @@ -1,63 +1,71 @@ -import { getAllAccessLevels, getWalletInfo, upsertAccessControl } from "../../../adapters/supabase"; -import { getBotContext, getLogger } from "../../../bindings"; -import { Payload } from "../../../types"; -import { ErrorDiff } from "../../../utils/helpers"; +import Runtime from "../../../bindings/bot-runtime"; -export const query = async (body: string) => { - const context = getBotContext(); - const logger = getLogger(); - const payload = context.payload as Payload; - const sender = payload.sender.login; - const { repository, organization } = payload; +import _ from "lodash"; +import { Context } from "../../../types/context"; +import { GitHubPayload } from "../../../types/payload"; - const id = organization?.id || repository?.id; // repository?.id as fallback +export async function query(context: Context, body: string) { + const runtime = Runtime.getState(), + logger = context.logger, + payload = context.event.payload as GitHubPayload, + sender = payload.sender.login; - logger.info(`Received '/query' command from user: ${sender}`); + logger.info("Running '/query' command handler", { sender }); const issue = payload.issue; - if (!issue) { - logger.info(`Skipping '/query' because of no issue instance`); - return `Skipping '/query' because of no issue instance`; - } + if (!issue) return logger.info(`Skipping '/query' because of no issue instance`); const regex = /^\/query\s+@([\w-]+)\s*$/; const matches = body.match(regex); - const user = matches?.[1]; - const repo = payload.repository; - - if (user) { - let data = await getAllAccessLevels(user, repo.full_name); - if (!data) { - logger.info(`Access info does not exist for @${user}`); - try { - await upsertAccessControl(user, repo.full_name, "time_access", true); - data = { - multiplier: false, - priority: false, - time: true, - price: false, - }; - } catch (e) { - ErrorDiff(e); - return `Error upserting access info for @${user}`; + const username = matches?.[1]; + + if (!username) { + throw logger.fatal("Invalid body for query command \n usage /query @user"); + } + + const database = runtime.adapters.supabase; + const usernameResponse = await context.event.octokit.users.getByUsername({ username }); + const user = usernameResponse.data; + if (!user) { + throw logger.fatal("User not found", { username }); + } + const accessData = await database.access.getAccess(user.id); + const walletAddress = await database.wallet.getAddress(user.id); + const messageBuffer = [] as string[]; + + messageBuffer.push(renderMarkdownTableHeader()); + + if (!accessData && !walletAddress) { + return logger.error("No access or wallet found for user", { username }); + } + if (accessData) { + messageBuffer.push(appendToMarkdownTableBody(accessData)); + } + if (walletAddress) { + messageBuffer.push(appendToMarkdownTableBody({ wallet: walletAddress })); + } + + return messageBuffer.join(""); + + function appendToMarkdownTableBody(data: Record, parentKey = ""): string { + const tableStringBuffer = [] as string[]; + + for (const key in data) { + const deCamelKey = _.startCase(_.toLower(key)); + const value = data[key]; + if (typeof value === "object" && value !== null) { + tableStringBuffer.push( + appendToMarkdownTableBody(value as Record, `${parentKey}${deCamelKey} - `) + ); + } else { + tableStringBuffer.push(`| ${parentKey}${deCamelKey} | ${value} |\n`); // Table row } } - const walletInfo = await getWalletInfo(user, id?.toString()); - if (!walletInfo?.address) { - return `Error retrieving multiplier and wallet address for @${user}`; - } else { - return `@${user}'s wallet address is ${walletInfo?.address}, multiplier is ${walletInfo?.multiplier} and access levels are - -| access type | access level | -| ----------- | ------------------- | -| multiplier | ${data.multiplier} | -| priority | ${data.priority} | -| time | ${data.time} | -| price | ${data.price} | - `; - } - } else { - logger.error("Invalid body for query command"); - return `Invalid syntax for query command \n usage /query @user`; + + return tableStringBuffer.join(""); } -}; +} + +function renderMarkdownTableHeader(): string { + return "| Property | Value |\n| --- | --- |\n"; // Table header +} diff --git a/src/handlers/comment/handlers/start/check-task-stale.ts b/src/handlers/comment/handlers/start/check-task-stale.ts new file mode 100644 index 000000000..c148b980c --- /dev/null +++ b/src/handlers/comment/handlers/start/check-task-stale.ts @@ -0,0 +1,14 @@ +import { GitHubIssue } from "../../../../types/payload"; + +export function checkTaskStale(staleTask: number, issue: GitHubIssue) { + let days: number | undefined; + let staleToDays: number | undefined; + let isTaskStale = false; + + if (staleTask !== 0) { + days = Math.floor((new Date().getTime() - new Date(issue.created_at).getTime()) / (1000 * 60 * 60 * 24)); + staleToDays = Math.floor(staleTask / (1000 * 60 * 60 * 24)); + isTaskStale = days >= staleToDays; + } + return isTaskStale; +} diff --git a/src/handlers/comment/handlers/start/generate-assignment-comment.ts b/src/handlers/comment/handlers/start/generate-assignment-comment.ts new file mode 100644 index 000000000..9274723ba --- /dev/null +++ b/src/handlers/comment/handlers/start/generate-assignment-comment.ts @@ -0,0 +1,47 @@ +import Runtime from "../../../../bindings/bot-runtime"; +import { Context } from "../../../../types/context"; +import { GitHubPayload } from "../../../../types/payload"; + +const options: Intl.DateTimeFormatOptions = { + weekday: "short", + month: "short", + day: "numeric", + hour: "numeric", + minute: "numeric", + timeZone: "UTC", + timeZoneName: "short", +}; + +export async function generateAssignmentComment( + context: Context, + payload: GitHubPayload, + duration: number | null = null +) { + const runtime = Runtime.getState(); + const startTime = new Date().getTime(); + let endTime: null | Date = null; + let deadline: null | string = null; + if (duration) { + endTime = new Date(startTime + duration * 1000); + deadline = endTime.toLocaleString("en-US", options); + } + + const issueCreationTime = payload.issue?.created_at; + if (!issueCreationTime) { + throw context.logger.fatal("Issue creation time is not defined"); + } + + return { + daysElapsedSinceTaskCreation: Math.floor((startTime - new Date(issueCreationTime).getTime()) / 1000 / 60 / 60 / 24), + deadline, + registeredWallet: + (await runtime.adapters.supabase.wallet.getAddress(payload.sender.id)) || + "Please set your wallet address to use `/wallet 0x0000...0000`", + tips: `
      Tips:
      +
        +
      • Use /wallet 0x0000...0000 if you want to update your registered payment wallet address.
      • +
      • Be sure to open a draft pull request as soon as possible to communicate updates on your progress.
      • +
      • Be sure to provide timely updates to us when requested, or you will be automatically unassigned from the task.
      • +
          `, + }; +} diff --git a/src/handlers/comment/handlers/start/get-multiplier-info-to-display.ts b/src/handlers/comment/handlers/start/get-multiplier-info-to-display.ts new file mode 100644 index 000000000..11a0d3c38 --- /dev/null +++ b/src/handlers/comment/handlers/start/get-multiplier-info-to-display.ts @@ -0,0 +1,47 @@ +import { Context } from "../../../../types/context"; +import { GitHubIssue } from "../../../../types/payload"; +import { taskPaymentMetaData } from "../../../wildcard/analytics"; +import { getUserMultiplier } from "./get-user-multiplier"; + +export async function getMultiplierInfoToDisplay( + context: Context, + senderId: number, + repoId: number, + issue: GitHubIssue +) { + const userMultiplier = await getUserMultiplier(senderId, repoId); + const value = userMultiplier?.value || null; + const reason = userMultiplier?.reason || null; + + let totalPriceOfTask: string | null = null; + + if (value && value != 1) { + const task = taskPaymentMetaData(context, issue); + + if (task.priceLabel) { + const price = parsePrice(task.priceLabel); + price.number *= value; + totalPriceOfTask = `${price.number} ${price.currency}`; + } else { + totalPriceOfTask = "Permit generation disabled because price label is not set."; + } + } + + return { + multiplierAmount: value, + multiplierReason: reason, + totalPriceOfTask: totalPriceOfTask, + }; +} + +function parsePrice(priceString: string) { + const match = priceString.match(/Price: ([\d.]+) (\w+)/); + if (!match) { + throw new Error("Invalid price string"); + } + + const number = parseFloat(match[1]); + const currency = match[3]; + + return { number, currency }; +} diff --git a/src/handlers/comment/handlers/start/get-time-labels-assigned.ts b/src/handlers/comment/handlers/start/get-time-labels-assigned.ts new file mode 100644 index 000000000..4f65ca58a --- /dev/null +++ b/src/handlers/comment/handlers/start/get-time-labels-assigned.ts @@ -0,0 +1,25 @@ +import { BotConfig } from "../../../../types/configuration-types"; +import { Context } from "../../../../types/context"; +import { Label } from "../../../../types/label"; +import { GitHubPayload } from "../../../../types/payload"; + +export function getTimeLabelsAssigned(context: Context, payload: GitHubPayload, config: BotConfig) { + const logger = context.logger; + const labels = payload.issue?.labels; + if (!labels?.length) { + logger.error("Skipping '/start' since no labels are set to calculate the timeline", { labels }); + return; + } + const timeLabelsDefined = config.labels.time; + const timeLabelsAssigned: Label[] = []; + for (const _label of labels) { + const _labelType = typeof _label; + const _labelName = _labelType === "string" ? _label.toString() : _labelType === "object" ? _label.name : "unknown"; + + const timeLabel = timeLabelsDefined.find((label) => label === _labelName); + if (timeLabel) { + timeLabelsAssigned.push(_label); + } + } + return timeLabelsAssigned; +} diff --git a/src/handlers/comment/handlers/start/get-user-multiplier.ts b/src/handlers/comment/handlers/start/get-user-multiplier.ts new file mode 100644 index 000000000..2dfca3b38 --- /dev/null +++ b/src/handlers/comment/handlers/start/get-user-multiplier.ts @@ -0,0 +1,6 @@ +import Runtime from "../../../../bindings/bot-runtime"; + +export async function getUserMultiplier(userId: number, repoId: number) { + const { user } = Runtime.getState().adapters.supabase; + return await user.getMultiplier(userId, repoId); +} diff --git a/src/handlers/comment/handlers/start/start.ts b/src/handlers/comment/handlers/start/start.ts new file mode 100644 index 000000000..8cc3f0401 --- /dev/null +++ b/src/handlers/comment/handlers/start/start.ts @@ -0,0 +1,202 @@ +import { addAssignees, getAllPullRequests } from "../../../../helpers/issue"; +import { calculateDurations } from "../../../../helpers/shared"; +import { Context } from "../../../../types/context"; +import { GitHubIssue, GitHubPayload, GitHubUser, IssueType } from "../../../../types/payload"; +import { isParentIssue } from "../../../pricing/handle-parent-issue"; + +import structuredMetadata from "../../../shared/structured-metadata"; +import { assignTableComment } from "../table"; +import { checkTaskStale } from "./check-task-stale"; +import { generateAssignmentComment } from "./generate-assignment-comment"; +import { getMultiplierInfoToDisplay } from "./get-multiplier-info-to-display"; +import { getTimeLabelsAssigned } from "./get-time-labels-assigned"; +import Runtime from "../../../../bindings/bot-runtime"; + +export async function start(context: Context, body: string) { + const logger = context.logger; + const config = context.config; + const payload = context.event.payload as GitHubPayload; + const issue = payload.issue; + const { + miscellaneous: { maxConcurrentTasks }, + timers: { taskStaleTimeoutDuration }, + disabledCommands, + } = context.config; + + const isStartDisabled = disabledCommands.some((command: string) => command === "start"); + + logger.info("Received '/start' command", { sender: payload.sender.login, body }); + + if (!issue) { + throw logger.error(`Skipping '/start' because of no issue instance`); + } + + if (isStartDisabled) { + throw logger.error("The `/start` command is disabled for this repository."); + } + + if (issue.body && isParentIssue(issue.body)) { + throw logger.error( + "Please select a child issue from the specification checklist to work on. The '/start' command is disabled on parent issues." + ); + } + + const openedPullRequests = await getAvailableOpenedPullRequests(context, payload.sender.login); + logger.info( + `Opened Pull Requests with approved reviews or with no reviews but over 24 hours have passed: ${JSON.stringify( + openedPullRequests + )}` + ); + + const assignedIssues = await getAssignedIssues(context, payload.sender.login); + logger.info("Max issue allowed is", maxConcurrentTasks); + + // check for max and enforce max + if (assignedIssues.length - openedPullRequests.length >= maxConcurrentTasks) { + throw logger.error("Too many assigned issues, you have reached your max limit", { + maxConcurrentTasks, + }); + } + + if (issue.state == IssueType.CLOSED) { + throw logger.error("Skipping '/start' because the issue is closed."); + } + const assignees: GitHubUser[] = (payload.issue?.assignees ?? []).filter(Boolean) as GitHubUser[]; + + if (assignees.length !== 0) { + throw logger.error("Skipping '/start' because the issue is already assigned."); + } + + // check if wallet is set, if not then throw an error + const sender = payload.sender; + const database = Runtime.getState().adapters.supabase; + const address = database.wallet.getAddress(sender.id); + if (!address) { + throw logger.error("Skipping '/start' because the wallet is not set. Please set your wallet first. /wallet 0x0000"); + } + + // ==== preamble checks completed ==== // + + const labels = issue.labels; + const priceLabel = labels.find((label) => label.name.startsWith("Price: ")); + + let duration: number | null = null; + if (!priceLabel) { + throw logger.error("No price label is set, so this is not ready to be self assigned yet.", priceLabel); + } else { + const timeLabelsAssigned = getTimeLabelsAssigned(context, payload, config); + if (timeLabelsAssigned) { + duration = calculateDurations(timeLabelsAssigned).shift() || null; + } + } + + const comment = await generateAssignmentComment(context, payload, duration); + const metadata = structuredMetadata.create("Assignment", { duration, priceLabel }); + + if (!assignees.map((i) => i.login).includes(payload.sender.login)) { + logger.info("Adding the assignee", { assignee: payload.sender.login }); + await addAssignees(context, issue.number, [payload.sender.login]); + } + + const isTaskStale = checkTaskStale(taskStaleTimeoutDuration, issue); + + // double check whether the assign message has been already posted or not + logger.info("Creating an issue comment", { comment }); + + const { multiplierAmount, multiplierReason, totalPriceOfTask } = await getMultiplierInfoToDisplay( + context, + payload.sender.id, + payload.repository.id, + issue + ); + return [ + assignTableComment({ + multiplierAmount, + multiplierReason, + totalPriceOfTask, + isTaskStale, + daysElapsedSinceTaskCreation: comment.daysElapsedSinceTaskCreation, + taskDeadline: comment.deadline, + registeredWallet: comment.registeredWallet, + }), + comment.tips, + metadata, + ].join("\n"); +} +async function getAvailableOpenedPullRequests(context: Context, username: string) { + const { reviewDelayTolerance } = context.config.timers; + if (!reviewDelayTolerance) return []; + + const openedPullRequests = await getOpenedPullRequests(context, username); + const result = [] as typeof openedPullRequests; + + for (let i = 0; i < openedPullRequests.length; i++) { + const openedPullRequest = openedPullRequests[i]; + const reviews = await getAllPullRequestReviews(context, openedPullRequest.number); + + if (reviews.length > 0) { + const approvedReviews = reviews.find((review) => review.state === "APPROVED"); + if (approvedReviews) { + result.push(openedPullRequest); + } + } + + if ( + reviews.length === 0 && + (new Date().getTime() - new Date(openedPullRequest.created_at).getTime()) / (1000 * 60 * 60) >= + reviewDelayTolerance + ) { + result.push(openedPullRequest); + } + } + return result; +} + +async function getOpenedPullRequests(context: Context, username: string) { + const prs = await getAllPullRequests(context, "open"); + return prs.filter((pr) => !pr.draft && (pr.user?.login === username || !username)); +} +async function getAllPullRequestReviews( + context: Context, + pullNumber: number, + format: "raw" | "html" | "text" | "full" = "raw" +) { + const payload = context.payload; + + try { + const reviews = await context.octokit.paginate(context.octokit.rest.pulls.listReviews, { + owner: payload.repository.owner.login, + repo: payload.repository.name, + pull_number: pullNumber, + per_page: 100, + mediaType: { + format, + }, + }); + return reviews; + } catch (err: unknown) { + context.logger.fatal("Fetching all pull request reviews failed!", err); + return []; + } +} +async function getAssignedIssues(context: Context, username: string): Promise { + const payload = context.payload; + + try { + const issues = (await context.octokit.paginate( + context.octokit.issues.listForRepo, + { + owner: payload.repository.owner.login, + repo: payload.repository.name, + state: IssueType.OPEN, + per_page: 1000, + }, + ({ data: issues }) => + issues.filter((issue) => !issue.pull_request && issue.assignee && issue.assignee.login === username) + )) as GitHubIssue[]; + return issues; + } catch (err: unknown) { + context.logger.fatal("Fetching assigned issues failed!", err); + return []; + } +} diff --git a/src/handlers/comment/handlers/stop.ts b/src/handlers/comment/handlers/stop.ts new file mode 100644 index 000000000..6c347f8e2 --- /dev/null +++ b/src/handlers/comment/handlers/stop.ts @@ -0,0 +1,47 @@ +import { Context } from "../../../types/context"; +import { GitHubPayload } from "../../../types/payload"; +import { closePullRequestForAnIssue } from "../../assign/assign-command-handler"; + +export async function stop(context: Context, body: string) { + const logger = context.logger; + if (!body.startsWith("/stop")) { + return logger.fatal("Skipping to unassign", { body }); + } + + const payload = context.event.payload as GitHubPayload; + logger.info("Running '/stop' command handler", { sender: payload.sender.login }); + const issue = payload.issue; + if (!issue) { + return logger.info(`Skipping '/stop' because of no issue instance`); + } + + const issueNumber = issue.number; + const assignees = payload.issue?.assignees ?? []; + + if (assignees.length == 0) { + return logger.error("No assignees found for issue", { issueNumber }); + } + const shouldUnassign = assignees[0]?.login.toLowerCase() == payload.sender.login.toLowerCase(); + logger.debug("Unassigning sender", { + sender: payload.sender.login.toLowerCase(), + assignee: assignees[0]?.login.toLowerCase(), + shouldUnassign, + }); + + if (shouldUnassign) { + await closePullRequestForAnIssue(context); + const { login } = payload.repository.owner; + const { name: repo } = payload.repository; + await context.event.octokit.rest.issues.removeAssignees({ + owner: login, + repo: repo, + issue_number: issueNumber, + assignees: [payload.sender.login], + }); + return logger.ok("You have been unassigned from the task", { + issueNumber, + user: payload.sender.login, + }); + } + return logger.error("You are not assigned to this task", { issueNumber, user: payload.sender.login }); +} diff --git a/src/handlers/comment/handlers/table.ts b/src/handlers/comment/handlers/table.ts index bcb614ef4..c204c2674 100644 --- a/src/handlers/comment/handlers/table.ts +++ b/src/handlers/comment/handlers/table.ts @@ -1,38 +1,42 @@ -export const tableComment = ({ - deadline, - wallet, - multiplier, - reason, - task, +export function assignTableComment({ + taskDeadline, + registeredWallet, + multiplierAmount, + multiplierReason, + totalPriceOfTask, isTaskStale, - days, -}: { - deadline: string; - wallet: string; - multiplier?: string; - reason?: string; - task?: string; - isTaskStale?: boolean; - days?: number; -}) => { + daysElapsedSinceTaskCreation, +}: AssignTableCommentParams) { + let taskStaleWarning = ``; + if (isTaskStale) { + taskStaleWarning = `Warning! This task was created over ${daysElapsedSinceTaskCreation} days ago. Please confirm that this issue specification is accurate before starting.`; + } + let deadlineWarning = ``; + if (taskDeadline) { + deadlineWarning = `Deadline${taskDeadline}`; + } + return ` -${ - isTaskStale - ? `` - : `` -} - - - - +${taskStaleWarning} +${deadlineWarning} - + -${multiplier ? `` : ``} -${reason ? `` : ``} -${task ? `` : ``} +${multiplierAmount ? `` : ``} +${multiplierReason ? `` : ``} +${totalPriceOfTask ? `` : ``}
          Warning! This task was created over ${days} days ago. Please confirm that this issue specification is accurate before starting.
          Deadline${deadline}
          Registered Wallet${wallet}${registeredWallet}
          Payment Multiplier${multiplier}
          Multiplier Reason${reason}
          Total Price${task}
          Payment Multiplier${multiplierAmount}
          Multiplier Reason${multiplierReason}
          Total Price${totalPriceOfTask}
          `; -}; +} + +interface AssignTableCommentParams { + taskDeadline: string | null; + registeredWallet: string; + multiplierAmount: number | null; + multiplierReason: string | null; + totalPriceOfTask: string | null; + isTaskStale: boolean; + daysElapsedSinceTaskCreation: number; +} diff --git a/src/handlers/comment/handlers/unassign.ts b/src/handlers/comment/handlers/unassign.ts deleted file mode 100644 index 9bd9ea1ef..000000000 --- a/src/handlers/comment/handlers/unassign.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { removeAssignees } from "../../../helpers"; -import { getBotContext, getLogger } from "../../../bindings"; -import { Payload } from "../../../types"; -import { IssueCommentCommands } from "../commands"; -import { closePullRequestForAnIssue } from "../../assign/index"; - -export const unassign = async (body: string) => { - const { payload: _payload } = getBotContext(); - const logger = getLogger(); - if (body != IssueCommentCommands.STOP && body.replace(/`/g, "") != IssueCommentCommands.STOP) { - logger.info(`Skipping to unassign. body: ${body}`); - return; - } - - const payload = _payload as Payload; - logger.info(`Received '/stop' command from user: ${payload.sender.login}`); - const issue = (_payload as Payload).issue; - if (!issue) { - logger.info(`Skipping '/stop' because of no issue instance`); - return; - } - - const issue_number = issue.number; - const _assignees = payload.issue?.assignees; - const assignees = _assignees ?? []; - if (assignees.length == 0) return; - const shouldUnassign = payload.sender.login.toLowerCase() == assignees[0].login.toLowerCase(); - logger.debug(`Unassigning sender: ${payload.sender.login.toLowerCase()}, assignee: ${assignees[0].login.toLowerCase()}, shouldUnassign: ${shouldUnassign}`); - - if (shouldUnassign) { - await closePullRequestForAnIssue(); - await removeAssignees( - issue_number, - assignees.map((i) => i.login) - ); - return `You have been unassigned from the task @${payload.sender.login}`; - } - return; -}; diff --git a/src/handlers/comment/handlers/wallet.ts b/src/handlers/comment/handlers/wallet.ts index 6cabfd357..bdd7c2063 100644 --- a/src/handlers/comment/handlers/wallet.ts +++ b/src/handlers/comment/handlers/wallet.ts @@ -1,13 +1,10 @@ -import { ethers } from "ethers"; -import { upsertWalletAddress } from "../../../adapters/supabase"; -import { getBotConfig, getBotContext, getLogger } from "../../../bindings"; -import { resolveAddress } from "../../../helpers"; -import { Payload } from "../../../types"; -import { formatEthAddress } from "../../../utils"; -import { IssueCommentCommands } from "../commands"; -import { constants } from "ethers"; +import { constants, ethers } from "ethers"; +import Runtime from "../../../bindings/bot-runtime"; +import { Context } from "../../../types/context"; +import { GitHubPayload } from "../../../types/payload"; + // Extracts ensname from raw text. -const extractEnsName = (text: string): string | undefined => { +function extractEnsName(text: string) { // Define a regular expression to match ENS names const ensRegex = /^(?=.{3,40}$)([a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z]{2,}$/gm; @@ -18,70 +15,79 @@ const extractEnsName = (text: string): string | undefined => { const ensName = match[0]; return ensName.toLowerCase(); } +} - return undefined; -}; - -export const registerWallet = async (body: string) => { - const { payload: _payload } = getBotContext(); - const config = getBotConfig(); - const logger = getLogger(); - const payload = _payload as Payload; +export async function registerWallet(context: Context, body: string) { + const runtime = Runtime.getState(); + const payload = context.event.payload as GitHubPayload; + const config = context.config; + const logger = context.logger; const sender = payload.sender.login; + const regexForAddress = /(0x[a-fA-F0-9]{40})/g; const addressMatches = body.match(regexForAddress); let address = addressMatches ? addressMatches[0] : null; - const ensName = extractEnsName(body.replace(IssueCommentCommands.WALLET, "").trim()); - logger.info(`Received '/wallet' command from user: ${sender}, body: ${body}, ${ensName}`); - - if (!address && !ensName) { - logger.info("Skipping to register a wallet address because both address/ens doesn't exist"); - if (config.wallet.registerWalletWithVerification) { - return `Please include your wallet or ENS address.\n usage: /wallet 0x0000000000000000000000000000000000000000 0x0830f316c982a7fd4ff050c8fdc1212a8fd92f6bb42b2337b839f2b4e156f05a359ef8f4acd0b57cdedec7874a865ee07076ab2c81dc9f9de28ced55228587f81c`; - } - return `Please include your wallet or ENS address.\n usage: /wallet 0x0000000000000000000000000000000000000000`; - } + const ensName = extractEnsName(body.replace("/wallet", "").trim()); if (!address && ensName) { - logger.info(`Trying to resolve address from Ens name: ${ensName}`); + context.logger.info("Trying to resolve address from ENS name", { ensName }); address = await resolveAddress(ensName); if (!address) { - logger.info(`Resolving address from Ens name failed, EnsName: ${ensName}`); - return `Resolving address from Ens name failed, Try again`; + throw context.logger.fatal("Resolving address from ENS name failed", { ensName }); } - logger.info(`Resolved address from Ens name: ${ensName}, address: ${address}`); + context.logger.ok("Resolved address from ENS name", { ensName, address }); + } + + if (!address) { + return context.logger.info("Skipping to register a wallet address because both address/ens doesn't exist"); } - if (config.wallet.registerWalletWithVerification) { - const regexForSigHash = /(0x[a-fA-F0-9]{130})/g; - const sigHashMatches = body.match(regexForSigHash); - const sigHash = sigHashMatches ? sigHashMatches[0] : null; + if (config.miscellaneous.registerWalletWithVerification) { + registerWalletWithVerification(context, body, address); + } - const messageToSign = "DevPool"; - const failedSigLogMsg = `Skipping to register the wallet address because you have not provided a valid SIGNATURE_HASH.`; - const failedSigResponse = `Skipping to register the wallet address because you have not provided a valid SIGNATURE_HASH. \nUse [etherscan](https://etherscan.io/verifiedSignatures) to sign the message \`${messageToSign}\` and register your wallet by appending the signature hash.\n\n**Usage:**\n/wallet \n\n**Example:**\n/wallet 0x0000000000000000000000000000000000000000 0x0830f316c982a7fd4ff050c8fdc1212a8fd92f6bb42b2337b839f2b4e156f05a359ef8f4acd0b57cdedec7874a865ee07076ab2c81dc9f9de28ced55228587f81c`; - try { - //verifyMessage throws an error when some parts(r,s,v) of the signature are correct but some are not - const isSigHashValid = address && sigHash && ethers.utils.verifyMessage(messageToSign, sigHash) == ethers.utils.getAddress(address); - if (!isSigHashValid) { - logger.info(failedSigLogMsg); - return failedSigResponse; - } - } catch (e) { - logger.info(`Exception thrown by verifyMessage for /wallet: ${e}`); - logger.info(failedSigLogMsg); - return failedSigResponse; - } + if (address == constants.AddressZero) { + return logger.error( + "Skipping to register a wallet address because user is trying to set their address to null address" + ); } - if (address) { - if (address == constants.AddressZero) { - logger.info("Skipping to register a wallet address because user is trying to set their address to null address"); - return `Cannot set address to null address`; + if (payload.comment) { + const { wallet } = runtime.adapters.supabase; + await wallet.upsertWalletAddress(context.event, address); + return context.logger.ok("Successfully registered wallet address", { sender, address }); + } else { + throw new Error("Payload comment is undefined"); + } +} + +function registerWalletWithVerification(context: Context, body: string, address: string) { + const regexForSigHash = /(0x[a-fA-F0-9]{130})/g; + const sigHashMatches = body.match(regexForSigHash); + const sigHash = sigHashMatches ? sigHashMatches[0] : null; + const messageToSign = "UbiquiBot"; + const failedSigLogMsg = `Skipping to register the wallet address because you have not provided a valid SIGNATURE_HASH.`; + + try { + const isSigHashValid = + sigHash && ethers.utils.verifyMessage(messageToSign, sigHash) == ethers.utils.getAddress(address); + if (!isSigHashValid) { + throw context.logger.fatal(failedSigLogMsg); } - await upsertWalletAddress(sender, address); - return `Updated the wallet address for @${sender} successfully!\t Your new address: ${formatEthAddress(address)}`; + } catch (e) { + context.logger.fatal("Exception thrown by verifyMessage for /wallet: ", e); + throw context.logger.fatal(failedSigLogMsg); } +} + +export async function resolveAddress(ensName: string): Promise { + // Gets the Ethereum address associated with an ENS (Ethereum Name Service) name + // Explicitly set provider to Ethereum mainnet + const provider = new ethers.providers.JsonRpcProvider(`https://rpc-bot.ubq.fi/v1/mainnet`); // mainnet required for ENS + const address = await provider.resolveName(ensName).catch((err) => { + console.trace({ err }); + return null; + }); - return; -}; + return address; +} diff --git a/src/handlers/comment/index.ts b/src/handlers/comment/index.ts deleted file mode 100644 index 65dfc5193..000000000 --- a/src/handlers/comment/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./action"; -export * from "./handlers"; diff --git a/src/handlers/index.ts b/src/handlers/index.ts deleted file mode 100644 index 6ccf96f9a..000000000 --- a/src/handlers/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export * from "./processors"; - -// issues handlers -export * from "./pricing"; -export * from "./shared"; -export * from "./assign"; - -// issue_comment handlers -export * from "./comment"; diff --git a/src/handlers/issue/index.ts b/src/handlers/issue/index.ts deleted file mode 100644 index 12e1212ae..000000000 --- a/src/handlers/issue/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./pre"; diff --git a/src/handlers/issue/pre.ts b/src/handlers/issue/pre.ts deleted file mode 100644 index bebda5dce..000000000 --- a/src/handlers/issue/pre.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { extractImportantWords, upsertCommentToIssue, measureSimilarity } from "../../helpers"; -import { getBotContext, getLogger } from "../../bindings"; -import { Issue, Payload } from "../../types"; - -export const findDuplicateOne = async () => { - const logger = getLogger(); - const context = getBotContext(); - const payload = context.payload as Payload; - const issue = payload.issue; - - if (!issue?.body) return; - const importantWords = await extractImportantWords(issue); - const perPage = 10; - let curPage = 1; - - for (const importantWord of importantWords) { - let fetchDone = false; - try { - while (!fetchDone) { - const response = await context.octokit.rest.search.issuesAndPullRequests({ - q: `${importantWord} repo:${payload.repository.owner.login}/${payload.repository.name} is:issue`, - sort: "created", - order: "desc", - per_page: perPage, - page: curPage, - }); - if (response.data.items.length > 0) { - for (const result of response.data.items) { - if (!result.body) continue; - if (result.id === issue.id) continue; - const similarity = await measureSimilarity(issue, result as Issue); - if (similarity > parseInt(process.env.SIMILARITY_THRESHOLD || "80")) { - await upsertCommentToIssue( - issue.number, - `Similar issue (${result.title}) found at ${result.html_url}.\nSimilarity is about ${similarity}%`, - "created" - ); - return; - } - } - } - if (response.data.items.length < perPage) fetchDone = true; - else curPage++; - } - } catch (e: unknown) { - logger.error(`Could not find any issues, reason: ${e}`); - } - } -}; diff --git a/src/handlers/label/label.ts b/src/handlers/label/label.ts new file mode 100644 index 000000000..914e7fe37 --- /dev/null +++ b/src/handlers/label/label.ts @@ -0,0 +1,56 @@ +import Runtime from "../../bindings/bot-runtime"; +import { isUserAdminOrBillingManager } from "../../helpers/issue"; +import { Context } from "../../types/context"; +import { GitHubPayload } from "../../types/payload"; + +export async function watchLabelChange(context: Context) { + const logger = context.logger; + + const payload = context.event.payload as GitHubPayload; + const { label, changes, sender } = payload; + + const previousLabel = changes?.name?.from; + if (!previousLabel) { + throw logger.error("previous label name is undefined"); + } + const currentLabel = label?.name; + const triggerUser = sender.login; + + if (!previousLabel || !currentLabel) { + return logger.debug("No label name change.. skipping"); + } + + // check if user is authorized to make the change + const hasAccess = await hasLabelEditPermission(context, currentLabel, triggerUser); + + const { supabase } = Runtime.getState().adapters; + + await supabase.label.saveLabelChange({ + previousLabel, + currentLabel, + authorized: hasAccess, + repository: payload.repository, + }); + return logger.debug("label name change saved to db"); +} + +async function hasLabelEditPermission(context: Context, label: string, caller: string) { + const logger = context.logger; + const sufficientPrivileges = await isUserAdminOrBillingManager(context, caller); + + // get text before : + const match = label.split(":"); + if (match.length == 0) return false; + + if (sufficientPrivileges) { + // check permission + const { access, user } = Runtime.getState().adapters.supabase; + const userId = await user.getUserId(context.event, caller); + const accessible = await access.getAccess(userId); + if (accessible) return true; + logger.info("No access to edit label", { caller, label }); + return false; + } + + return true; +} diff --git a/src/handlers/payout/action.ts b/src/handlers/payout/action.ts deleted file mode 100644 index 53ff44f40..000000000 --- a/src/handlers/payout/action.ts +++ /dev/null @@ -1,511 +0,0 @@ -import { BigNumber, ethers } from "ethers"; -import { getPenalty, getWalletAddress, getWalletMultiplier, removePenalty } from "../../adapters/supabase"; -import { getBotConfig, getBotContext, getLogger } from "../../bindings"; -import { - addLabelToIssue, - checkUserPermissionForRepoAndOrg, - clearAllPriceLabelsOnIssue, - deleteLabel, - generatePermit2Signature, - getAllIssueComments, - getTokenSymbol, - savePermitToDB, - wasIssueReopened, - getAllIssueAssignEvents, - addCommentToIssue, -} from "../../helpers"; -import { UserType, Payload, StateReason, Comment, User, Incentives, Issue } from "../../types"; -import { shortenEthAddress } from "../../utils"; -import { taskInfo } from "../wildcard"; -import Decimal from "decimal.js"; -import { GLOBAL_STRINGS } from "../../configs"; -import { isParentIssue } from "../pricing"; -import { RewardsResponse } from "../comment"; -import { isEmpty } from "lodash"; - -export interface IncentivesCalculationResult { - paymentToken: string; - rpc: string; - evmNetworkId: number; - privateKey: string; - permitMaxPrice: number; - baseMultiplier: number; - incentives: Incentives; - issueCreatorMultiplier: number; - recipient: string; - multiplier: number; - issue: Issue; - payload: Payload; - comments: Comment[]; - issueDetailed: { - isTask: boolean; - timelabel: string; - priorityLabel: string; - priceLabel: string; - }; - assignee: User; - tokenSymbol: string; - claimUrlRegex: RegExp; -} - -export interface RewardByUser { - account: string; - priceInEth: Decimal; - userId: string | undefined; - issueId: string; - type: string | undefined; - user: string | undefined; -} - -/** - * Collect the information required for the permit generation and error handling - */ - -export const incentivesCalculation = async (): Promise => { - const context = getBotContext(); - const { - payout: { paymentToken, rpc, permitBaseUrl, evmNetworkId, privateKey }, - mode: { incentiveMode, permitMaxPrice }, - price: { incentives, issueCreatorMultiplier, baseMultiplier }, - publicAccessControl: accessControl, - } = getBotConfig(); - const logger = getLogger(); - const payload = context.payload as Payload; - const issue = payload.issue; - const { repository, organization } = payload; - - const id = organization?.id || repository?.id; // repository?.id as fallback - - if (!issue) { - throw new Error("Permit generation skipped because issue is undefined"); - } - - if (accessControl.fundExternalClosedIssue) { - const userHasPermission = await checkUserPermissionForRepoAndOrg(payload.sender.login, context); - - if (!userHasPermission) { - throw new Error("Permit generation disabled because this issue has been closed by an external contributor."); - } - } - - const comments = await getAllIssueComments(issue.number); - - const wasReopened = await wasIssueReopened(issue.number); - const claimUrlRegex = new RegExp(`\\((${permitBaseUrl}\\?claim=\\S+)\\)`); - const permitCommentIdx = comments.findIndex((e) => e.user.type === UserType.Bot && e.body.match(claimUrlRegex)); - - if (wasReopened && permitCommentIdx !== -1) { - const permitComment = comments[permitCommentIdx]; - const permitUrl = permitComment.body.match(claimUrlRegex); - if (!permitUrl || permitUrl.length < 2) { - logger.error(`Permit URL not found`); - throw new Error("Permit generation skipped because permit URL not found"); - } - const url = new URL(permitUrl[1]); - const claimBase64 = url.searchParams.get("claim"); - if (!claimBase64) { - logger.error(`Permit claim search parameter not found`); - throw new Error("Permit generation skipped because permit claim search parameter not found"); - } - let evmNetworkId = url.searchParams.get("network"); - if (!evmNetworkId) { - evmNetworkId = "1"; - } - let claim; - try { - claim = JSON.parse(Buffer.from(claimBase64, "base64").toString("utf-8")); - } catch (err: unknown) { - logger.error(`${err}`); - throw new Error("Permit generation skipped because permit claim is invalid"); - } - const amount = BigNumber.from(claim.permit.permitted.amount); - const tokenAddress = claim.permit.permitted.token; - - // extract assignee - const events = await getAllIssueAssignEvents(issue.number); - if (events.length === 0) { - logger.error(`No assignment found`); - throw new Error("Permit generation skipped because no assignment found"); - } - const assignee = events[0].assignee.login; - - try { - await removePenalty(assignee, payload.repository.full_name, tokenAddress, evmNetworkId, amount); - } catch (err) { - logger.error(`Failed to remove penalty: ${err}`); - throw new Error("Permit generation skipped because failed to remove penalty"); - } - - logger.info(`Penalty removed`); - throw new Error("Permit generation skipped, penalty removed"); - } - - if (!incentiveMode) { - logger.info(`No incentive mode. skipping to process`); - throw new Error("No incentive mode. skipping to process"); - } - - if (privateKey == "") { - logger.info("Permit generation disabled because wallet private key is not set."); - throw new Error("Permit generation disabled because wallet private key is not set."); - } - - if (issue.state_reason !== StateReason.COMPLETED) { - logger.info("Permit generation disabled because this is marked as unplanned."); - throw new Error("Permit generation disabled because this is marked as unplanned."); - } - - logger.info(`Checking if the issue is a parent issue.`); - if (issue.body && isParentIssue(issue.body)) { - logger.error("Permit generation disabled because this is a collection of issues."); - await clearAllPriceLabelsOnIssue(); - throw new Error("Permit generation disabled because this is a collection of issues."); - } - - logger.info(`Handling issues.closed event, issue: ${issue.number}`); - for (const botComment of comments.filter((cmt) => cmt.user.type === UserType.Bot).reverse()) { - const botCommentBody = botComment.body; - if (botCommentBody.includes(GLOBAL_STRINGS.autopayComment)) { - const pattern = /\*\*(\w+)\*\*/; - const res = botCommentBody.match(pattern); - if (res) { - if (res[1] === "false") { - logger.info(`Skipping to generate permit2 url, reason: autoPayMode for this issue: false`); - throw new Error(`Permit generation disabled because automatic payment for this issue is disabled.`); - } - break; - } - } - } - - if (permitMaxPrice == 0 || !permitMaxPrice) { - logger.info(`Skipping to generate permit2 url, reason: { permitMaxPrice: ${permitMaxPrice}}`); - throw new Error(`Permit generation disabled because permitMaxPrice is 0.`); - } - - const issueDetailed = taskInfo(issue); - if (!issueDetailed.isTask) { - logger.info(`Skipping... its not a task`); - throw new Error(`Permit generation disabled because this issue didn't qualify for funding.`); - } - - if (!issueDetailed.priceLabel || !issueDetailed.priorityLabel || !issueDetailed.timelabel) { - logger.info(`Skipping... its not a task`); - throw new Error(`Permit generation disabled because this issue didn't qualify for funding.`); - } - - const assignees = issue?.assignees ?? []; - const assignee = assignees.length > 0 ? assignees[0] : undefined; - if (!assignee) { - logger.info("Skipping to proceed the payment because `assignee` is undefined"); - throw new Error(`Permit generation disabled because assignee is undefined.`); - } - - if (!issueDetailed.priceLabel) { - logger.info("Skipping to proceed the payment because price not set"); - throw new Error(`Permit generation disabled because price label is not set.`); - } - - const recipient = await getWalletAddress(assignee.login); - if (!recipient || recipient?.trim() === "") { - logger.info(`Recipient address is missing`); - throw new Error(`Permit generation skipped because recipient address is missing`); - } - - const { value: multiplier } = await getWalletMultiplier(assignee.login, id?.toString()); - - if (multiplier === 0) { - const errMsg = "Refusing to generate the payment permit because " + `@${assignee.login}` + "'s payment `multiplier` is `0`"; - logger.info(errMsg); - throw new Error(errMsg); - } - - const tokenSymbol = await getTokenSymbol(paymentToken, rpc); - - return { - paymentToken, - rpc, - evmNetworkId, - privateKey, - recipient, - multiplier, - permitMaxPrice, - baseMultiplier, - incentives, - issueCreatorMultiplier, - issue, - payload, - comments, - issueDetailed: { - isTask: issueDetailed.isTask, - timelabel: issueDetailed.timelabel, - priorityLabel: issueDetailed.priorityLabel, - priceLabel: issueDetailed.priceLabel, - }, - assignee, - tokenSymbol, - claimUrlRegex, - }; -}; - -/** - * Calculate the reward for the assignee - */ - -export const calculateIssueAssigneeReward = async (incentivesCalculation: IncentivesCalculationResult): Promise => { - const logger = getLogger(); - const assigneeLogin = incentivesCalculation.assignee.login; - - let priceInEth = new Decimal(incentivesCalculation.issueDetailed.priceLabel.substring(7, incentivesCalculation.issueDetailed.priceLabel.length - 4)).mul( - incentivesCalculation.multiplier - ); - if (priceInEth.gt(incentivesCalculation.permitMaxPrice)) { - logger.info("Skipping to proceed the payment because task payout is higher than permitMaxPrice."); - return { error: `Permit generation disabled because issue's task is higher than ${incentivesCalculation.permitMaxPrice}` }; - } - - // if contributor has any penalty then deduct it from the task - const penaltyAmount = await getPenalty( - assigneeLogin, - incentivesCalculation.payload.repository.full_name, - incentivesCalculation.paymentToken, - incentivesCalculation.evmNetworkId.toString() - ); - if (penaltyAmount.gt(0)) { - logger.info(`Deducting penalty from task`); - const taskAmount = ethers.utils.parseUnits(priceInEth.toString(), 18); - const taskAmountAfterPenalty = taskAmount.sub(penaltyAmount); - if (taskAmountAfterPenalty.lte(0)) { - await removePenalty( - assigneeLogin, - incentivesCalculation.payload.repository.full_name, - incentivesCalculation.paymentToken, - incentivesCalculation.evmNetworkId.toString(), - taskAmount - ); - const msg = `Permit generation disabled because task amount after penalty is 0.`; - logger.info(msg); - return { error: msg }; - } - priceInEth = new Decimal(ethers.utils.formatUnits(taskAmountAfterPenalty, 18)); - } - - const account = await getWalletAddress(assigneeLogin); - - return { - error: "", - userId: incentivesCalculation.assignee.node_id, - username: assigneeLogin, - reward: [ - { - priceInEth, - penaltyAmount, - account: account || "0x", - user: "", - userId: "", - }, - ], - }; -}; - -export const handleIssueClosed = async ( - creatorReward: RewardsResponse, - assigneeReward: RewardsResponse, - conversationRewards: RewardsResponse, - pullRequestReviewersReward: RewardsResponse, - incentivesCalculation: IncentivesCalculationResult -): Promise<{ error: string }> => { - const logger = getLogger(); - const { comments } = getBotConfig(); - const issueNumber = incentivesCalculation.issue.number; - - let commentersComment = "", - title = "Task Assignee", - assigneeComment = "", - creatorComment = "", - mergedComment = "", - pullRequestReviewerComment = ""; - // The mapping between gh handle and comment with a permit url - const commentersReward: Record = {}; - const prReviewersReward: Record = {}; - - // Rewards by user - const rewardByUser: RewardByUser[] = []; - - // ASSIGNEE REWARD PRICE PROCESSOR - let priceInEth = new Decimal(incentivesCalculation.issueDetailed.priceLabel.substring(7, incentivesCalculation.issueDetailed.priceLabel.length - 4)).mul( - incentivesCalculation.multiplier - ); - if (priceInEth.gt(incentivesCalculation.permitMaxPrice)) { - logger.info("Skipping to proceed the payment because task payout is higher than permitMaxPrice"); - return { error: `Permit generation skipped since issue's task is higher than ${incentivesCalculation.permitMaxPrice}` }; - } - - // COMMENTERS REWARD HANDLER - if (conversationRewards.reward && conversationRewards.reward.length > 0) { - commentersComment = `#### ${conversationRewards.title} Rewards \n`; - - conversationRewards.reward.map(async (permit) => { - // Exclude issue creator from commenter rewards - if (permit.userId !== creatorReward.userId) { - rewardByUser.push({ - account: permit.account, - priceInEth: permit.priceInEth, - userId: permit.userId, - issueId: incentivesCalculation.issue.node_id, - type: conversationRewards.title, - user: permit.user, - }); - } - }); - } - - // PULL REQUEST REVIEWERS REWARD HANDLER - if (pullRequestReviewersReward.reward && pullRequestReviewersReward.reward.length > 0) { - pullRequestReviewerComment = `#### ${pullRequestReviewersReward.title} Rewards \n`; - - pullRequestReviewersReward.reward.map(async (permit) => { - // Exclude issue creator from commenter rewards - if (permit.userId !== creatorReward.userId) { - rewardByUser.push({ - account: permit.account, - priceInEth: permit.priceInEth, - userId: permit.userId, - issueId: incentivesCalculation.issue.node_id, - type: pullRequestReviewersReward.title, - user: permit.user, - }); - } - }); - } - - // CREATOR REWARD HANDLER - // Generate permit for user if its not the same id as assignee - if (creatorReward && creatorReward.reward && creatorReward.reward[0].account !== "0x" && creatorReward.userId !== incentivesCalculation.assignee.node_id) { - const { payoutUrl } = await generatePermit2Signature( - creatorReward.reward[0].account, - creatorReward.reward[0].priceInEth, - incentivesCalculation.issue.node_id, - creatorReward.userId - ); - - creatorComment = `#### ${creatorReward.title} Reward \n### [ **${creatorReward.username}: [ CLAIM ${ - creatorReward.reward[0].priceInEth - } ${incentivesCalculation.tokenSymbol.toUpperCase()} ]** ](${payoutUrl})\n`; - if (payoutUrl) { - logger.info(`Permit url generated for creator. reward: ${payoutUrl}`); - } - // Add amount to assignee if assignee is the creator - } else if ( - creatorReward && - creatorReward.reward && - creatorReward.reward[0].account !== "0x" && - creatorReward.userId === incentivesCalculation.assignee.node_id - ) { - priceInEth = priceInEth.add(creatorReward.reward[0].priceInEth); - title += " and Creator"; - } else if (creatorReward && creatorReward.reward && creatorReward.reward[0].account === "0x") { - logger.info(`Skipping to generate a permit url for missing account. fallback: ${creatorReward.fallbackReward}`); - } - - // ASSIGNEE REWARD HANDLER - if (assigneeReward && assigneeReward.reward && assigneeReward.reward[0].account !== "0x") { - const { txData, payoutUrl } = await generatePermit2Signature( - assigneeReward.reward[0].account, - assigneeReward.reward[0].priceInEth, - incentivesCalculation.issue.node_id, - incentivesCalculation.assignee.node_id - ); - const tokenSymbol = await getTokenSymbol(incentivesCalculation.paymentToken, incentivesCalculation.rpc); - const shortenRecipient = shortenEthAddress(assigneeReward.reward[0].account, `[ CLAIM ${priceInEth} ${tokenSymbol.toUpperCase()} ]`.length); - logger.info(`Posting a payout url to the issue, url: ${payoutUrl}`); - assigneeComment = - `#### ${title} Reward \n### [ **[ CLAIM ${priceInEth} ${tokenSymbol.toUpperCase()} ]** ](${payoutUrl})\n` + "```" + shortenRecipient + "```"; - const permitComments = incentivesCalculation.comments.filter((content) => { - const permitUrlMatches = content.body.match(incentivesCalculation.claimUrlRegex); - if (!permitUrlMatches || permitUrlMatches.length < 2) return false; - else return true; - }); - - if (permitComments.length > 0) { - logger.info(`Skip to generate a permit url because it has been already posted.`); - return { error: `Permit generation disabled because it was already posted to this issue.` }; - } - - if (assigneeReward.reward[0].penaltyAmount.gt(0)) { - await removePenalty( - incentivesCalculation.assignee.login, - incentivesCalculation.payload.repository.full_name, - incentivesCalculation.paymentToken, - incentivesCalculation.evmNetworkId.toString(), - assigneeReward.reward[0].penaltyAmount - ); - } - - await savePermitToDB(incentivesCalculation.assignee.id, txData); - } - - // MERGE ALL REWARDS - const rewards = rewardByUser.reduce((acc, curr) => { - const existing = acc.find((item) => item.userId === curr.userId); - if (existing) { - existing.priceInEth = existing.priceInEth.add(curr.priceInEth); - // merge type by adding comma and - existing.type = `${existing.type} and ${curr.type}`; - } else { - acc.push(curr); - } - return acc; - }, [] as RewardByUser[]); - - // CREATE PERMIT URL FOR EACH USER - for (const reward of rewards) { - const { payoutUrl } = await generatePermit2Signature(reward.account, reward.priceInEth, reward.issueId, reward.userId); - - if (!reward.user) { - logger.info(`Skipping to generate a permit url for missing user. fallback: ${reward.user}`); - continue; - } - - switch (reward.type) { - case "Conversation and Reviewer": - case "Reviewer and Conversation": - if (mergedComment === "") mergedComment = `#### ${reward.type} Rewards `; - mergedComment = `${mergedComment}\n### [ **${reward.user}: [ CLAIM ${ - reward.priceInEth - } ${incentivesCalculation.tokenSymbol.toUpperCase()} ]** ](${payoutUrl})\n`; - break; - case "Conversation": - commentersComment = `${commentersComment}\n### [ **${reward.user}: [ CLAIM ${ - reward.priceInEth - } ${incentivesCalculation.tokenSymbol.toUpperCase()} ]** ](${payoutUrl})\n`; - commentersReward[reward.user] = payoutUrl; - break; - case "Reviewer": - pullRequestReviewerComment = `${pullRequestReviewerComment}\n### [ **${reward.user}: [ CLAIM ${ - reward.priceInEth - } ${incentivesCalculation.tokenSymbol.toUpperCase()} ]** ](${payoutUrl})\n`; - prReviewersReward[reward.user] = payoutUrl; - break; - default: - break; - } - - logger.info(`Permit url generated for contributors. reward: ${JSON.stringify(commentersReward)}`); - logger.info(`Skipping to generate a permit url for missing accounts. fallback: ${JSON.stringify(conversationRewards.fallbackReward)}`); - - logger.info(`Permit url generated for pull request reviewers. reward: ${JSON.stringify(prReviewersReward)}`); - logger.info(`Skipping to generate a permit url for missing accounts. fallback: ${JSON.stringify(pullRequestReviewersReward.fallbackReward)}`); - } - - if (commentersComment && !isEmpty(commentersReward)) await addCommentToIssue(commentersComment, issueNumber); - if (creatorComment) await addCommentToIssue(creatorComment, issueNumber); - if (pullRequestReviewerComment && !isEmpty(prReviewersReward)) await addCommentToIssue(pullRequestReviewerComment, issueNumber); - if (mergedComment) await addCommentToIssue(mergedComment, issueNumber); - if (assigneeComment) await addCommentToIssue(assigneeComment + comments.promotionComment, issueNumber); - - await deleteLabel(incentivesCalculation.issueDetailed.priceLabel); - await addLabelToIssue("Permitted"); - - return { error: "" }; -}; diff --git a/src/handlers/payout/index.ts b/src/handlers/payout/index.ts deleted file mode 100644 index b6ab81422..000000000 --- a/src/handlers/payout/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./action"; -export * from "./post"; diff --git a/src/handlers/payout/post.ts b/src/handlers/payout/post.ts deleted file mode 100644 index cd51b43c1..000000000 --- a/src/handlers/payout/post.ts +++ /dev/null @@ -1,333 +0,0 @@ -import { getWalletAddress } from "../../adapters/supabase"; -import { getBotContext, getLogger } from "../../bindings"; -import { getAllIssueComments, getAllPullRequestReviews, getIssueDescription, parseComments } from "../../helpers"; -import { getLatestPullRequest, gitLinkedPrParser } from "../../helpers/parser"; -import { Incentives, MarkdownItem, Payload, UserType } from "../../types"; -import { RewardsResponse, commentParser } from "../comment"; -import Decimal from "decimal.js"; -import { taskInfo } from "../wildcard"; -import { IncentivesCalculationResult } from "./action"; -import { BigNumber } from "ethers"; - -export interface CreatorCommentResult { - title: string; - account?: string | undefined; - amountInETH?: Decimal | undefined; - userId?: string | undefined; - tokenSymbol?: string | undefined; - node_id?: string | undefined; - user?: string | undefined; -} - -const ItemsToExclude: string[] = [MarkdownItem.BlockQuote]; -/** - * Incentivize the contributors based on their contribution. - * The default formula has been defined in https://github.com/ubiquity/ubiquibot/issues/272 - */ -export const calculateIssueConversationReward = async (calculateIncentives: IncentivesCalculationResult): Promise => { - const title = `Conversation`; - const logger = getLogger(); - - const context = getBotContext(); - const payload = context.payload as Payload; - const issue = payload.issue; - - const permitComments = calculateIncentives.comments.filter( - (content) => content.body.includes(title) && content.body.includes("https://pay.ubq.fi?claim=") && content.user.type == UserType.Bot - ); - if (permitComments.length > 0) { - logger.info(`incentivizeComments: skip to generate a permit url because it has been already posted`); - return { error: `incentivizeComments: skip to generate a permit url because it has been already posted` }; - } - - const assignees = issue?.assignees ?? []; - const assignee = assignees.length > 0 ? assignees[0] : undefined; - if (!assignee) { - logger.info("incentivizeComments: skipping payment permit generation because `assignee` is `undefined`."); - return { error: "incentivizeComments: skipping payment permit generation because `assignee` is `undefined`." }; - } - - const issueComments = await getAllIssueComments(calculateIncentives.issue.number, "full"); - logger.info(`Getting the issue comments done. comments: ${JSON.stringify(issueComments)}`); - const issueCommentsByUser: Record = {}; - for (const issueComment of issueComments) { - const user = issueComment.user; - if (user.type == UserType.Bot || user.login == assignee.login) continue; - const commands = commentParser(issueComment.body); - if (commands.length > 0) { - logger.info(`Skipping to parse the comment because it contains commands. comment: ${JSON.stringify(issueComment)}`); - continue; - } - if (!issueComment.body_html) { - logger.info(`Skipping to parse the comment because body_html is undefined. comment: ${JSON.stringify(issueComment)}`); - continue; - } - - // Store the comment along with user's login and node_id - if (!issueCommentsByUser[user.login]) { - issueCommentsByUser[user.login] = { id: user.node_id, comments: [] }; - } - issueCommentsByUser[user.login].comments.push(issueComment.body_html); - } - logger.info(`Filtering by the user type done. commentsByUser: ${JSON.stringify(issueCommentsByUser)}`); - - // The mapping between gh handle and amount in ETH - const fallbackReward: Record = {}; - - // array of awaiting permits to generate - const reward: { account: string; priceInEth: Decimal; userId: string; user: string; penaltyAmount: BigNumber }[] = []; - - for (const user of Object.keys(issueCommentsByUser)) { - const commentsByUser = issueCommentsByUser[user]; - const commentsByNode = await parseComments(commentsByUser.comments, ItemsToExclude); - const rewardValue = calculateRewardValue(commentsByNode, calculateIncentives.incentives); - if (rewardValue.equals(0)) { - logger.info(`Skipping to generate a permit url because the reward value is 0. user: ${user}`); - continue; - } - logger.debug(`Comment parsed for the user: ${user}. comments: ${JSON.stringify(commentsByNode)}, sum: ${rewardValue}`); - const account = await getWalletAddress(user); - const priceInEth = rewardValue.mul(calculateIncentives.baseMultiplier); - if (priceInEth.gt(calculateIncentives.permitMaxPrice)) { - logger.info(`Skipping comment reward for user ${user} because reward is higher than payment permit max price`); - continue; - } - if (account) { - reward.push({ account, priceInEth, userId: commentsByUser.id, user, penaltyAmount: BigNumber.from(0) }); - } else { - fallbackReward[user] = priceInEth; - } - } - - return { error: "", title, reward, fallbackReward }; -}; - -export const calculateIssueCreatorReward = async (incentivesCalculation: IncentivesCalculationResult): Promise => { - const title = `Task Creator`; - const logger = getLogger(); - - const issueDetailed = taskInfo(incentivesCalculation.issue); - if (!issueDetailed.isTask) { - logger.info(`incentivizeCreatorComment: its not a funded task`); - return { error: `incentivizeCreatorComment: its not a funded task` }; - } - - const comments = await getAllIssueComments(incentivesCalculation.issue.number); - const permitComments = comments.filter( - (content) => content.body.includes(title) && content.body.includes("https://pay.ubq.fi?claim=") && content.user.type == UserType.Bot - ); - if (permitComments.length > 0) { - logger.info(`incentivizeCreatorComment: skip to generate a permit url because it has been already posted`); - return { error: `incentivizeCreatorComment: skip to generate a permit url because it has been already posted` }; - } - - const assignees = incentivesCalculation.issue.assignees ?? []; - const assignee = assignees.length > 0 ? assignees[0] : undefined; - if (!assignee) { - logger.info("incentivizeCreatorComment: skipping payment permit generation because `assignee` is `undefined`."); - return { error: "incentivizeCreatorComment: skipping payment permit generation because `assignee` is `undefined`." }; - } - - const description = await getIssueDescription(incentivesCalculation.issue.number, "html"); - if (!description) { - logger.info(`Skipping to generate a permit url because issue description is empty. description: ${description}`); - return { error: `Skipping to generate a permit url because issue description is empty. description: ${description}` }; - } - logger.info(`Getting the issue description done. description: ${description}`); - const creator = incentivesCalculation.issue.user; - if (creator.type === UserType.Bot || creator.login === incentivesCalculation.issue.assignee) { - logger.info("Issue creator assigneed himself or Bot created this issue."); - return { error: "Issue creator assigneed himself or Bot created this issue." }; - } - - const result = await generatePermitForComments( - creator.login, - [description], - incentivesCalculation.issueCreatorMultiplier, - incentivesCalculation.incentives, - incentivesCalculation.permitMaxPrice - ); - - if (!result || !result.account || !result.amountInETH) { - throw new Error("Failed to generate permit for issue creator because of missing account or amountInETH"); - } - - return { - error: "", - title, - userId: creator.node_id, - username: creator.login, - reward: [ - { - priceInEth: result?.amountInETH ?? new Decimal(0), - account: result?.account, - userId: "", - user: "", - penaltyAmount: BigNumber.from(0), - }, - ], - }; -}; - -export const calculatePullRequestReviewsReward = async (incentivesCalculation: IncentivesCalculationResult): Promise => { - const logger = getLogger(); - const context = getBotContext(); - const title = "Reviewer"; - - const linkedPullRequest = await gitLinkedPrParser({ - owner: incentivesCalculation.payload.repository.owner.login, - repo: incentivesCalculation.payload.repository.name, - issue_number: incentivesCalculation.issue.number, - }); - - const latestLinkedPullRequest = await getLatestPullRequest(linkedPullRequest); - - if (!latestLinkedPullRequest) { - logger.debug(`calculatePullRequestReviewsReward: No linked pull requests found`); - return { error: `calculatePullRequestReviewsReward: No linked pull requests found` }; - } - - const comments = await getAllIssueComments(incentivesCalculation.issue.number); - const permitComments = comments.filter( - (content) => content.body.includes(title) && content.body.includes("https://pay.ubq.fi?claim=") && content.user.type == UserType.Bot - ); - if (permitComments.length > 0) { - logger.info(`calculatePullRequestReviewsReward: skip to generate a permit url because it has been already posted`); - return { error: `calculatePullRequestReviewsReward: skip to generate a permit url because it has been already posted` }; - } - - const assignees = incentivesCalculation.issue?.assignees ?? []; - const assignee = assignees.length > 0 ? assignees[0] : undefined; - if (!assignee) { - logger.info("calculatePullRequestReviewsReward: skipping payment permit generation because `assignee` is `undefined`."); - return { error: "calculatePullRequestReviewsReward: skipping payment permit generation because `assignee` is `undefined`." }; - } - - const prReviews = await getAllPullRequestReviews(context, latestLinkedPullRequest.number, "full"); - const prComments = await getAllIssueComments(latestLinkedPullRequest.number, "full"); - logger.info(`Getting the PR reviews done. comments: ${JSON.stringify(prReviews)}`); - const prReviewsByUser: Record = {}; - for (const review of prReviews) { - const user = review.user; - if (!user) continue; - if (user.type == UserType.Bot || user.login == assignee) continue; - if (!review.body_html) { - logger.info(`calculatePullRequestReviewsReward: Skipping to parse the comment because body_html is undefined. comment: ${JSON.stringify(review)}`); - continue; - } - if (!prReviewsByUser[user.login]) { - prReviewsByUser[user.login] = { id: user.node_id, comments: [] }; - } - prReviewsByUser[user.login].comments.push(review.body_html); - } - - for (const comment of prComments) { - const user = comment.user; - if (!user) continue; - if (user.type == UserType.Bot || user.login == assignee) continue; - if (!comment.body_html) { - logger.info(`calculatePullRequestReviewsReward: Skipping to parse the comment because body_html is undefined. comment: ${JSON.stringify(comment)}`); - continue; - } - if (!prReviewsByUser[user.login]) { - prReviewsByUser[user.login] = { id: user.node_id, comments: [] }; - } - prReviewsByUser[user.login].comments.push(comment.body_html); - } - - logger.info(`calculatePullRequestReviewsReward: Filtering by the user type done. commentsByUser: ${JSON.stringify(prReviewsByUser)}`); - - // array of awaiting permits to generate - const reward: { account: string; priceInEth: Decimal; userId: string; user: string; penaltyAmount: BigNumber }[] = []; - - // The mapping between gh handle and amount in ETH - const fallbackReward: Record = {}; - - for (const user of Object.keys(prReviewsByUser)) { - const commentByUser = prReviewsByUser[user]; - const commentsByNode = await parseComments(commentByUser.comments, ItemsToExclude); - const rewardValue = calculateRewardValue(commentsByNode, incentivesCalculation.incentives); - if (rewardValue.equals(0)) { - logger.info(`calculatePullRequestReviewsReward: Skipping to generate a permit url because the reward value is 0. user: ${user}`); - continue; - } - logger.info(`calculatePullRequestReviewsReward: Comment parsed for the user: ${user}. comments: ${JSON.stringify(commentsByNode)}, sum: ${rewardValue}`); - const account = await getWalletAddress(user); - const priceInEth = rewardValue.mul(incentivesCalculation.baseMultiplier); - if (priceInEth.gt(incentivesCalculation.permitMaxPrice)) { - logger.info(`calculatePullRequestReviewsReward: Skipping comment reward for user ${user} because reward is higher than payment permit max price`); - continue; - } - - if (account) { - reward.push({ account, priceInEth, userId: commentByUser.id, user, penaltyAmount: BigNumber.from(0) }); - } else { - fallbackReward[user] = priceInEth; - } - } - - logger.info(`calculatePullRequestReviewsReward: Permit url generated for pull request reviewers. reward: ${JSON.stringify(reward)}`); - logger.info(`calculatePullRequestReviewsReward: Skipping to generate a permit url for missing accounts. fallback: ${JSON.stringify(fallbackReward)}`); - - return { error: "", title, reward, fallbackReward }; -}; - -const generatePermitForComments = async ( - user: string, - comments: string[], - multiplier: number, - incentives: Incentives, - permitMaxPrice: number -): Promise => { - const logger = getLogger(); - const commentsByNode = await parseComments(comments, ItemsToExclude); - const rewardValue = calculateRewardValue(commentsByNode, incentives); - if (rewardValue.equals(0)) { - logger.info(`No reward for the user: ${user}. comments: ${JSON.stringify(commentsByNode)}, sum: ${rewardValue}`); - return; - } - logger.debug(`Comment parsed for the user: ${user}. comments: ${JSON.stringify(commentsByNode)}, sum: ${rewardValue}`); - const account = await getWalletAddress(user); - const amountInETH = rewardValue.mul(multiplier); - if (amountInETH.gt(permitMaxPrice)) { - logger.info(`Skipping issue creator reward for user ${user} because reward is higher than payment permit max price`); - return; - } - if (account) { - return { account, amountInETH }; - } else { - return { account: "0x", amountInETH: new Decimal(0) }; - } -}; -/** - * @dev Calculates the reward values for a given comments. We'll improve the formula whenever we get the better one. - * - * @param comments - The comments to calculate the reward for - * @param incentives - The basic price table for reward calculation - * @returns - The reward value - */ -const calculateRewardValue = (comments: Record, incentives: Incentives): Decimal => { - let sum = new Decimal(0); - for (const key of Object.keys(comments)) { - const value = comments[key]; - - // if it's a text node calculate word count and multiply with the reward value - if (key == "#text") { - if (!incentives.comment.totals.word) { - continue; - } - const wordReward = new Decimal(incentives.comment.totals.word); - const reward = wordReward.mul(value.map((str) => str.trim().split(" ").length).reduce((totalWords, wordCount) => totalWords + wordCount, 0)); - sum = sum.add(reward); - } else { - if (!incentives.comment.elements[key]) { - continue; - } - const rewardValue = new Decimal(incentives.comment.elements[key]); - const reward = rewardValue.mul(value.length); - sum = sum.add(reward); - } - } - - return sum; -}; diff --git a/src/handlers/penalty/add-penalty.ts b/src/handlers/penalty/add-penalty.ts new file mode 100644 index 000000000..4ee1f2050 --- /dev/null +++ b/src/handlers/penalty/add-penalty.ts @@ -0,0 +1,151 @@ +import { Context } from "../../types/context"; + +export async function addPenalty(context: Context) { + return context.logger.debug("Need to reimplement penalty system"); + // const { payload: _payload } = context; + // const { + // payout: { permitBaseUrl }, + // } = context.config; + // const logger = context.logger; + // const issue = context.payload.issue; + // const repository = context.payload.repository; + // if (!issue) return; + // try { + // // find permit comment from the bot + // const comments = await getAllIssueComments(issue.number); + // const claimUrlRegex = new RegExp(`\\((${permitBaseUrl}\\?claim=\\S+)\\)`); + // const permitCommentIdx = comments.findIndex((e) => e.user.type === "Bot" && e.body.match(claimUrlRegex)); + // if (permitCommentIdx === -1) { + // return; + // } + + // // extract permit amount and token + // const permitComment = comments[permitCommentIdx]; + // const permitUrl = permitComment.body.match(claimUrlRegex); + // if (!permitUrl || permitUrl.length < 2) { + // logger.error(`Permit URL not found`); + // return; + // } + // const url = new URL(permitUrl[1]); + // const claimBase64 = url.searchParams.get("claim"); + // if (!claimBase64) { + // logger.error(`Permit claim search parameter not found`); + // return; + // } + // let networkId = url.searchParams.get("network"); + // if (!networkId) { + // networkId = "1"; + // } + // const { rpc } = getPayoutConfigByNetworkId(Number(networkId)); + // let claim; + // try { + // claim = JSON.parse(Buffer.from(claimBase64, "base64").toString("utf-8")); + // } catch (err: unknown) { + // logger.error(`Error parsing claim: ${err}`); + // return; + // } + // const amount = BigNumber.from(claim.permit.permitted.amount); + // const formattedAmount = ethers.utils.formatUnits(amount, 18); + // const tokenAddress = claim.permit.permitted.token; + // const tokenSymbol = await getTokenSymbol(tokenAddress, rpc); + + // // find latest assignment before the permit comment + // const events = await getAllIssueAssignEvents(issue.number); + // if (events.length === 0) { + // logger.error(`No assignment found`); + // return; + // } + // const assignee = events[0].assignee.login; + + // if (parseFloat(formattedAmount) > 0) { + // // write penalty to db + // try { + // await addPenalty(assignee, repository.full_name, tokenAddress, networkId.toString(), amount); + // } catch (err) { + // logger.error(`Error writing penalty to db: ${err}`); + // return; + // } + + // await addCommentToIssue( + // `@${assignee} please be sure to review this conversation and implement any necessary fixes. Unless this is closed as completed, its payment of **${formattedAmount} ${tokenSymbol}** will be deducted from your next bounty.`, + // issue.number + // ); + // } else { + // logger.info(`Skipped penalty because amount is 0`); + // } + // } catch (err: unknown) { + // await addCommentToIssue(ErrorDiff(err), issue.number); + // } +} + +// export async function addPenalty( +// context: Context, +// username: string, +// repoName: string, +// tokenAddress: string, +// networkId: string, +// penalty: string +// ) { +// // const { supabase } = Runtime.getState().adapters; +// // const logger = context.logger; +// // const { error } = await supabase.rpc("add_penalty", { +// // _username: username, +// // _repository_name: repoName, +// // _token_address: tokenAddress, +// // _network_id: networkId, +// // _penalty_amount: penalty.toString(), +// // }); +// // logger.debug(`Adding penalty done, { data: ${JSON.stringify(error)}, error: ${JSON.stringify(error)} }`); +// // if (error) { +// // throw new Error(`Error adding penalty: ${error.message}`); +// // } +// } + +// export async function getPenalty( +// context: Context, +// username: string, +// repoName: string, +// tokenAddress: string, +// networkId: string +// ) { +// // const { supabase } = Runtime.getState().adapters; +// // const logger = context.logger; +// // const { data, error } = await supabase +// // .from("penalty") +// // .select("amount") +// // .eq("username", username) +// // .eq("repository_name", repoName) +// // .eq("network_id", networkId) +// // .eq("token_address", tokenAddress); +// // logger.debug(`Getting penalty done, { data: ${JSON.stringify(error)}, error: ${JSON.stringify(error)} }`); +// // if (error) { +// // throw new Error(`Error getting penalty: ${error.message}`); +// // } +// // if (data.length === 0) { +// // return BigNumber.from(0); +// // } +// // return BigNumber.from(data[0].amount); +// } + +// export async function removePenalty( +// context: Context, +// username: string, +// repoName: string, +// tokenAddress: string, +// networkId: string, +// penalty: string +// ) { +// // const { supabase } = Runtime.getState().adapters; +// // const logger = context.logger; +// // const { error } = await supabase.rpc("remove_penalty", { +// // _username: username, +// // _repository_name: repoName, +// // _network_id: networkId, +// // _token_address: tokenAddress, +// // _penalty_amount: penalty, +// // }); +// // logger.debug(`Removing penalty done, { data: ${JSON.stringify(error)}, error: ${JSON.stringify(error)} }`); +// // if (error) { +// // throw new Error(`Error removing penalty: ${error.message}`); +// // } +// } diff --git a/src/handlers/pricing/action.ts b/src/handlers/pricing/action.ts deleted file mode 100644 index 69159fcd7..000000000 --- a/src/handlers/pricing/action.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { getBotConfig, getBotContext, getLogger } from "../../bindings"; -import { GLOBAL_STRINGS } from "../../configs"; -import { addCommentToIssue, addLabelToIssue, clearAllPriceLabelsOnIssue, createLabel, getLabel, calculateWeight } from "../../helpers"; -import { Payload } from "../../types"; -import { handleLabelsAccess } from "../access"; -import { getTargetPriceLabel } from "../shared"; - -export const pricingLabelLogic = async (): Promise => { - const context = getBotContext(); - const config = getBotConfig(); - const logger = getLogger(); - const payload = context.payload as Payload; - if (!payload.issue) return; - const labels = payload.issue.labels; - - logger.info(`Checking if the issue is a parent issue.`); - if (payload.issue.body && isParentIssue(payload.issue.body)) { - logger.error("Identified as parent issue. Disabling price label."); - const issuePrices = labels.filter((label) => label.name.toString().startsWith("Price:")); - if (issuePrices.length) { - await addCommentToIssue(GLOBAL_STRINGS.skipPriceLabelGenerationComment, payload.issue.number); - await clearAllPriceLabelsOnIssue(); - } - return; - } - const valid = await handleLabelsAccess(); - - if (!valid && config.publicAccessControl.setLabel) { - return; - } - - const { assistivePricing } = config.mode; - const timeLabels = config.price.timeLabels.filter((item) => labels.map((i) => i.name).includes(item.name)); - const priorityLabels = config.price.priorityLabels.filter((item) => labels.map((i) => i.name).includes(item.name)); - - const minTimeLabel = timeLabels.length > 0 ? timeLabels.reduce((a, b) => (calculateWeight(a) < calculateWeight(b) ? a : b)).name : undefined; - const minPriorityLabel = priorityLabels.length > 0 ? priorityLabels.reduce((a, b) => (calculateWeight(a) < calculateWeight(b) ? a : b)).name : undefined; - - const targetPriceLabel = getTargetPriceLabel(minTimeLabel, minPriorityLabel); - if (targetPriceLabel) { - if (labels.map((i) => i.name).includes(targetPriceLabel)) { - logger.info(`Skipping... already exists`); - } else { - logger.info(`Adding price label to issue`); - await clearAllPriceLabelsOnIssue(); - - const exist = await getLabel(targetPriceLabel); - - if (assistivePricing && !exist) { - logger.info(`${targetPriceLabel} doesn't exist on the repo, creating...`); - await createLabel(targetPriceLabel, "price"); - } - await addLabelToIssue(targetPriceLabel); - } - } else { - await clearAllPriceLabelsOnIssue(); - logger.info(`Skipping action...`); - } -}; - -export const isParentIssue = (body: string) => { - const parentPattern = /-\s+\[( |x)\]\s+#\d+/; - return body.match(parentPattern); -}; diff --git a/src/handlers/pricing/handle-parent-issue.ts b/src/handlers/pricing/handle-parent-issue.ts new file mode 100644 index 000000000..590a63aef --- /dev/null +++ b/src/handlers/pricing/handle-parent-issue.ts @@ -0,0 +1,21 @@ +import { clearAllPriceLabelsOnIssue } from "../../helpers/issue"; +import { calculateLabelValue } from "../../helpers/shared"; +import { Context } from "../../types/context"; +import { Label } from "../../types/label"; + +export async function handleParentIssue(context: Context, labels: Label[]) { + const issuePrices = labels.filter((label) => label.name.toString().startsWith("Price:")); + if (issuePrices.length) { + await clearAllPriceLabelsOnIssue(context); + } + throw context.logger.error("Pricing is disabled on parent issues."); +} + +export function sortLabelsByValue(labels: Label[]) { + return labels.sort((a, b) => calculateLabelValue(a.name) - calculateLabelValue(b.name)); +} + +export function isParentIssue(body: string) { + const parentPattern = /-\s+\[( |x)\]\s+#\d+/; + return body.match(parentPattern); +} diff --git a/src/handlers/pricing/index.ts b/src/handlers/pricing/index.ts deleted file mode 100644 index 903db3cc9..000000000 --- a/src/handlers/pricing/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./action"; -export * from "./pre"; diff --git a/src/handlers/pricing/pre.ts b/src/handlers/pricing/pre.ts deleted file mode 100644 index eecbad2bb..000000000 --- a/src/handlers/pricing/pre.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { getBotConfig, getLogger } from "../../bindings"; -import { calculateWeight, createLabel, listLabelsForRepo } from "../../helpers"; -import { calculateTaskPrice } from "../shared"; - -/** - * @dev This just checks all the labels in the config have been set in gh issue - * If there's something missing, they will be added - */ -export const validatePriceLabels = async (): Promise => { - const config = getBotConfig(); - const logger = getLogger(); - - const { assistivePricing } = config.mode; - - if (!assistivePricing) { - logger.info(`Assistive Pricing is disabled`); - return; - } - - const timeLabels = config.price.timeLabels.map((i) => i.name); - const priorityLabels = config.price.priorityLabels.map((i) => i.name); - const aiLabels: string[] = []; - for (const timeLabel of config.price.timeLabels) { - for (const priorityLabel of config.price.priorityLabels) { - const targetPrice = calculateTaskPrice(calculateWeight(timeLabel), calculateWeight(priorityLabel), config.price.baseMultiplier); - const targetPriceLabel = `Price: ${targetPrice} USD`; - aiLabels.push(targetPriceLabel); - } - } - - const neededLabels: string[] = [...timeLabels, ...priorityLabels]; - logger.debug(`Got needed labels for setting up price, neededLabels: ${neededLabels.toString()}`); - - // List all the labels for a repository - const repoLabels = await listLabelsForRepo(); - - // Get the missing labels - const missingLabels = neededLabels.filter((label) => !repoLabels.map((i) => i.name).includes(label)); - - // Create missing labels - if (missingLabels.length > 0) { - logger.info(`Creating missing labels: ${missingLabels}`); - await Promise.all(missingLabels.map((label) => createLabel(label))); - logger.info(`Creating missing labels done`); - } -}; diff --git a/src/handlers/pricing/pricing-label.ts b/src/handlers/pricing/pricing-label.ts new file mode 100644 index 000000000..0dd16371b --- /dev/null +++ b/src/handlers/pricing/pricing-label.ts @@ -0,0 +1,179 @@ +import { Context } from "../../types/context"; + +import { addLabelToIssue, clearAllPriceLabelsOnIssue } from "../../helpers/issue"; +import { createLabel, listLabelsForRepo } from "../../helpers/label"; +import { BotConfig } from "../../types/configuration-types"; +import { Label } from "../../types/label"; +import { GitHubPayload, UserType } from "../../types/payload"; +import { labelAccessPermissionsCheck } from "../access/labels-access"; +import { setPrice } from "../shared/pricing"; +import { handleParentIssue, isParentIssue, sortLabelsByValue } from "./handle-parent-issue"; + +export async function onLabelChangeSetPricing(context: Context): Promise { + const config = context.config; + const logger = context.logger; + const payload = context.event.payload as GitHubPayload; + if (!payload.issue) throw context.logger.fatal("Issue is not defined"); + + const labels = payload.issue.labels; + const labelNames = labels.map((i) => i.name); + + if (payload.issue.body && isParentIssue(payload.issue.body)) { + await handleParentIssue(context, labels); + return; + } + const hasPermission = await labelAccessPermissionsCheck(context); + if (!hasPermission) { + if (config.features.publicAccessControl.setLabel === false) { + throw logger.error("No public access control to set labels"); + } + throw logger.error("No permission to set labels"); + } + + const { assistivePricing: hasAssistivePricing } = config.features; + + if (!labels) throw logger.error(`No labels to calculate price`); + + // here we should make an exception if it was a price label that was just set to just skip this action + const isPayloadToSetPrice = payload.label?.name.includes("Price: "); + if (isPayloadToSetPrice) { + logger.info("This is setting the price label directly so skipping the rest of the action."); + + // make sure to clear all other price labels except for the smallest price label. + + const priceLabels = labels.filter((label) => label.name.includes("Price: ")); + const sortedPriceLabels = sortLabelsByValue(priceLabels); + const smallestPriceLabel = sortedPriceLabels.shift(); + const smallestPriceLabelName = smallestPriceLabel?.name; + if (smallestPriceLabelName) { + for (const label of sortedPriceLabels) { + await context.event.octokit.issues.removeLabel({ + owner: payload.repository.owner.login, + repo: payload.repository.name, + issue_number: payload.issue.number, + name: label.name, + }); + } + } + + return; + } + + const recognizedLabels = getRecognizedLabels(labels, config); + + if (!recognizedLabels.time.length || !recognizedLabels.priority.length) { + logger.error("No recognized labels to calculate price"); + await clearAllPriceLabelsOnIssue(context); + return; + } + + const minLabels = getMinLabels(recognizedLabels); + + if (!minLabels.time || !minLabels.priority) { + logger.error("No label to calculate price"); + return; + } + + if (!hasAssistivePricing) return; + + const targetPriceLabel = setPrice(context, minLabels.time, minLabels.priority); + + if (targetPriceLabel) { + await handleTargetPriceLabel(context, targetPriceLabel, labelNames); + } else { + await clearAllPriceLabelsOnIssue(context); + logger.info(`Skipping action...`); + } +} + +function getRecognizedLabels(labels: Label[], config: BotConfig) { + function isRecognizedLabel(label: Label, configLabels: string[]) { + return ( + (typeof label === "string" || typeof label === "object") && + configLabels.some((configLabel) => configLabel === label.name) + ); + } + + const recognizedTimeLabels: Label[] = labels.filter((label: Label) => isRecognizedLabel(label, config.labels.time)); + + const recognizedPriorityLabels: Label[] = labels.filter((label: Label) => + isRecognizedLabel(label, config.labels.priority) + ); + + return { time: recognizedTimeLabels, priority: recognizedPriorityLabels }; +} + +function getMinLabels(recognizedLabels: { time: Label[]; priority: Label[] }) { + const minTimeLabel = sortLabelsByValue(recognizedLabels.time).shift(); + const minPriorityLabel = sortLabelsByValue(recognizedLabels.priority).shift(); + + return { time: minTimeLabel, priority: minPriorityLabel }; +} + +async function handleTargetPriceLabel(context: Context, targetPriceLabel: string, labelNames: string[]) { + const _targetPriceLabel = labelNames.find((name) => name.includes("Price") && name.includes(targetPriceLabel)); + + if (_targetPriceLabel) { + await handleExistingPriceLabel(context, targetPriceLabel); + } else { + const allLabels = await listLabelsForRepo(context); + if (allLabels.filter((i) => i.name.includes(targetPriceLabel)).length === 0) { + await createLabel(context, targetPriceLabel, "price"); + } + await addPriceLabelToIssue(context, targetPriceLabel); + } +} + +async function handleExistingPriceLabel(context: Context, targetPriceLabel: string) { + const logger = context.logger; + let labeledEvents = await getAllLabeledEvents(context); + if (!labeledEvents) return logger.error("No labeled events found"); + + labeledEvents = labeledEvents.filter((event) => event.label?.name.includes("Price")); + if (!labeledEvents.length) return logger.error("No price labeled events found"); + + if (labeledEvents[labeledEvents.length - 1].actor?.type == UserType.User) { + logger.info(`Skipping... already exists`); + } else { + await addPriceLabelToIssue(context, targetPriceLabel); + } +} + +async function addPriceLabelToIssue(context: Context, targetPriceLabel: string) { + await clearAllPriceLabelsOnIssue(context); + await addLabelToIssue(context, targetPriceLabel); +} + +export async function labelExists(context: Context, name: string): Promise { + const payload = context.event.payload as GitHubPayload; + try { + await context.event.octokit.rest.issues.getLabel({ + owner: payload.repository.owner.login, + repo: payload.repository.name, + name, + }); + return true; + } catch (error) { + return false; + } +} + +async function getAllLabeledEvents(context: Context) { + const events = await getAllIssueEvents(context); + if (!events) return null; + return events.filter((event) => event.event === "labeled"); +} +async function getAllIssueEvents(context: Context) { + if (!context.payload.issue) return; + + try { + const events = await context.octokit.paginate(context.octokit.issues.listEvents, { + ...context.event.issue(), + per_page: 100, + }); + return events; + } catch (err: unknown) { + context.logger.fatal("Failed to fetch lists of events", err); + return []; + } +} diff --git a/src/handlers/pricing/sync-labels-to-config.ts b/src/handlers/pricing/sync-labels-to-config.ts new file mode 100644 index 000000000..ec058990a --- /dev/null +++ b/src/handlers/pricing/sync-labels-to-config.ts @@ -0,0 +1,51 @@ +import { createLabel, listLabelsForRepo } from "../../helpers/label"; +import { calculateLabelValue } from "../../helpers/shared"; +import { Context } from "../../types/context"; + +import { calculateTaskPrice } from "../shared/pricing"; + +// This just checks all the labels in the config have been set in gh issue +// If there's something missing, they will be added + +export async function syncPriceLabelsToConfig(context: Context) { + const config = context.config; + const logger = context.logger; + + const { + features: { assistivePricing: hasAssistivePricing }, + } = config; + + if (!hasAssistivePricing) { + logger.info(`Assistive pricing is disabled`); + return; + } + + const aiLabels: string[] = []; + for (const timeLabel of config.labels.time) { + for (const priorityLabel of config.labels.priority) { + const targetPrice = calculateTaskPrice( + context, + calculateLabelValue(timeLabel), + calculateLabelValue(priorityLabel), + config.payments.basePriceMultiplier + ); + const targetPriceLabel = `Price: ${targetPrice} USD`; + aiLabels.push(targetPriceLabel); + } + } + + const pricingLabels: string[] = [...config.labels.time, ...config.labels.priority]; + + // List all the labels for a repository + const allLabels = await listLabelsForRepo(context); + + // Get the missing labels + const missingLabels = pricingLabels.filter((label) => !allLabels.map((i) => i.name).includes(label)); + + // Create missing labels + if (missingLabels.length > 0) { + logger.info("Missing labels found, creating them", { missingLabels }); + await Promise.all(missingLabels.map((label) => createLabel(context, label))); + logger.info(`Creating missing labels done`); + } +} diff --git a/src/handlers/processors.ts b/src/handlers/processors.ts index d250829ca..21b7a8239 100644 --- a/src/handlers/processors.ts +++ b/src/handlers/processors.ts @@ -1,78 +1,90 @@ -import { GithubEvent, Handler, ActionHandler } from "../types"; -import { closePullRequestForAnIssue, commentWithAssignMessage } from "./assign"; -import { pricingLabelLogic, validatePriceLabels } from "./pricing"; -import { checkTasksToUnassign, collectAnalytics } from "./wildcard"; -import { nullHandler } from "./shared"; -import { handleComment, issueClosedCallback, issueCreatedCallback, issueReopenedCallback } from "./comment"; -import { checkPullRequests } from "./assign/auto"; -import { createDevPoolPR } from "./pull-request"; -import { runOnPush, validateConfigChange } from "./push"; -import { findDuplicateOne } from "./issue"; +import { GitHubEvent } from "../types/github-events"; +import { Handler, WildCardHandler } from "../types/handlers"; +import { assignCommandHandler, closePullRequestForAnIssue } from "./assign/assign-command-handler"; +import { checkPullRequests } from "./assign/check-pull-requests"; +import { commentCreated } from "./comment/comment-created"; +import { issueClosed } from "./comment/handlers/issue-closed"; +import { watchLabelChange } from "./label/label"; +import { addPenalty } from "./penalty/add-penalty"; +import { onLabelChangeSetPricing } from "./pricing/pricing-label"; +import { syncPriceLabelsToConfig } from "./pricing/sync-labels-to-config"; +import { createDevPoolPR } from "./pull-request/create-devpool-pr"; +import { checkModifiedBaseRate } from "./push/check-modified-base-rate"; +import { checkTasksToUnassign } from "./wildcard/unassign/check-tasks-to-unassign"; + +/** + * @dev + * pre and post handlers do not return a message to comment on the issue. their return type MUST BE `void` + * main action MUST return a message to comment on the issue. its return type MUST BE either `string` for plaintext or `LogReturn` for color to signal success, warning, or failure status + * TODO: all MUST receive `Context` as the only parameter + */ export const processors: Record = { - [GithubEvent.ISSUES_OPENED]: { - pre: [nullHandler], - action: [findDuplicateOne, issueCreatedCallback], - post: [nullHandler], + [GitHubEvent.ISSUES_OPENED]: { + pre: [], + action: [], + post: [], }, - [GithubEvent.ISSUES_REOPENED]: { - pre: [nullHandler], - action: [issueReopenedCallback], - post: [nullHandler], + [GitHubEvent.ISSUES_REOPENED]: { + pre: [], + action: [addPenalty], + post: [], }, - [GithubEvent.ISSUES_LABELED]: { - pre: [validatePriceLabels], - action: [pricingLabelLogic], - post: [nullHandler], + [GitHubEvent.ISSUES_LABELED]: { + pre: [syncPriceLabelsToConfig], + action: [], + post: [onLabelChangeSetPricing], }, - [GithubEvent.ISSUES_UNLABELED]: { - pre: [validatePriceLabels], - action: [pricingLabelLogic], - post: [nullHandler], + [GitHubEvent.ISSUES_UNLABELED]: { + pre: [syncPriceLabelsToConfig], + action: [], + post: [onLabelChangeSetPricing], }, - [GithubEvent.ISSUES_ASSIGNED]: { - pre: [nullHandler], - action: [commentWithAssignMessage], - post: [nullHandler], + [GitHubEvent.ISSUES_ASSIGNED]: { + pre: [], + action: [assignCommandHandler], + post: [], }, - [GithubEvent.ISSUES_UNASSIGNED]: { - pre: [nullHandler], + [GitHubEvent.ISSUES_UNASSIGNED]: { + pre: [], action: [closePullRequestForAnIssue], - post: [nullHandler], + post: [], }, - [GithubEvent.ISSUE_COMMENT_CREATED]: { - pre: [nullHandler], - action: [handleComment], - post: [nullHandler], + [GitHubEvent.ISSUE_COMMENT_CREATED]: { + pre: [], + action: [commentCreated], + post: [], }, - [GithubEvent.ISSUE_COMMENT_EDITED]: { - pre: [nullHandler], - action: [handleComment], - post: [nullHandler], + [GitHubEvent.ISSUE_COMMENT_EDITED]: { + pre: [], + action: [], + post: [], }, - [GithubEvent.ISSUES_CLOSED]: { - pre: [nullHandler], - action: [issueClosedCallback], - post: [nullHandler], + [GitHubEvent.ISSUES_CLOSED]: { + pre: [], + action: [issueClosed], + post: [], }, - [GithubEvent.PULL_REQUEST_OPENED]: { - pre: [nullHandler], + [GitHubEvent.PULL_REQUEST_OPENED]: { + pre: [], action: [checkPullRequests], - post: [nullHandler], + post: [], }, - [GithubEvent.INSTALLATION_ADDED_EVENT]: { - pre: [nullHandler], + [GitHubEvent.INSTALLATION_CREATED]: { + pre: [], action: [createDevPoolPR], - post: [nullHandler], + post: [], }, - [GithubEvent.PUSH_EVENT]: { - pre: [nullHandler], - action: [validateConfigChange, runOnPush], - post: [nullHandler], + [GitHubEvent.PUSH]: { + pre: [], + action: [], + post: [checkModifiedBaseRate], + }, + [GitHubEvent.LABEL_EDITED]: { + pre: [], + action: [watchLabelChange], + post: [], }, }; -/** - * @dev The handlers which will run on every event hooked - */ -export const wildcardProcessors: ActionHandler[] = [checkTasksToUnassign, collectAnalytics]; +export const wildcardProcessors: WildCardHandler[] = [checkTasksToUnassign]; // The handlers which will run after every event diff --git a/src/handlers/pull-request/create-devpool-pr.ts b/src/handlers/pull-request/create-devpool-pr.ts index 08046bfbc..a2e18fd0c 100644 --- a/src/handlers/pull-request/create-devpool-pr.ts +++ b/src/handlers/pull-request/create-devpool-pr.ts @@ -1,22 +1,20 @@ -import { getBotContext, getLogger } from "../../bindings"; -import { GithubContent, Payload } from "../../types"; +import { Context } from "../../types/context"; +import { GithubContent, GitHubPayload } from "../../types/payload"; -export const createDevPoolPR = async () => { - const logger = getLogger(); - - const context = getBotContext(); - const payload = context.payload as Payload; +export async function createDevPoolPR(context: Context) { + const logger = context.logger; + const payload = context.event.payload as GitHubPayload; const devPoolOwner = "ubiquity"; const devPoolRepo = "devpool-directory"; if (!payload.repositories_added) { - return; + return logger.info("No repositories added"); } const repository = payload.repositories_added[0]; - logger.info(`New Install: ${repository.full_name}`); + logger.info("New Install: ", { repository: repository.full_name }); const [owner, repo] = repository.full_name.split("/"); @@ -25,14 +23,14 @@ export const createDevPoolPR = async () => { const baseRef = "development"; const path = "projects.json"; - const { data: branch } = await context.octokit.repos.getBranch({ + const { data: branch } = await context.event.octokit.repos.getBranch({ owner: devPoolOwner, repo: devPoolRepo, branch: "development", }); // Get the current projects json file - const { data: file } = await context.octokit.repos.getContent({ + const { data: file } = await context.event.octokit.repos.getContent({ owner: devPoolOwner, repo: devPoolRepo, path, @@ -52,7 +50,7 @@ export const createDevPoolPR = async () => { const mainSha = branch.commit.sha; // create branch from sha - await context.octokit.git.createRef({ + await context.event.octokit.git.createRef({ owner: devPoolOwner, repo: devPoolRepo, ref: `refs/heads/add-${owner}-${repo}`, @@ -61,7 +59,7 @@ export const createDevPoolPR = async () => { logger.info("Branch created on DevPool Directory"); - await context.octokit.repos.createOrUpdateFileContents({ + await context.event.octokit.repos.createOrUpdateFileContents({ owner: devPoolOwner, repo: devPoolRepo, path, @@ -72,14 +70,13 @@ export const createDevPoolPR = async () => { }); // create the pull request - await context.octokit.pulls.create({ + await context.event.octokit.pulls.create({ owner: devPoolOwner, repo: devPoolRepo, title: `Add ${repository.full_name} to repo`, head: branchName, base: baseRef, - body: "", }); - logger.info("Pull request created on DevPool Directory"); -}; + return logger.info("Pull request created on DevPool Directory"); +} diff --git a/src/handlers/pull-request/index.ts b/src/handlers/pull-request/index.ts deleted file mode 100644 index d0761df96..000000000 --- a/src/handlers/pull-request/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./create-devpool-pr"; diff --git a/src/handlers/push/check-modified-base-rate.ts b/src/handlers/push/check-modified-base-rate.ts new file mode 100644 index 000000000..418b7a762 --- /dev/null +++ b/src/handlers/push/check-modified-base-rate.ts @@ -0,0 +1,28 @@ +import { Context } from "../../types/context"; +import { GitHubPushPayload } from "../../types/payload"; +import { BASE_RATE_FILE, getCommitChanges, ZERO_SHA } from "./push"; +import { updateBaseRate } from "./update-base-rate"; + +export async function checkModifiedBaseRate(context: Context): Promise { + const logger = context.logger; + + const payload = context.event.payload as GitHubPushPayload; + + // if zero sha, push is a pr change + if (payload.before === ZERO_SHA) { + logger.info("Skipping push events. A new branch was created"); + } + + const changes = getCommitChanges(payload.commits); + + // skip if empty + if (changes && changes.length === 0) { + logger.info("No files were changed in the commits, so no action is required."); + } + + // check for modified or added files and check for specified file + if (changes.includes(BASE_RATE_FILE)) { + // update base rate + await updateBaseRate(context, BASE_RATE_FILE); + } +} diff --git a/src/handlers/push/index.ts b/src/handlers/push/index.ts deleted file mode 100644 index 2abc418c8..000000000 --- a/src/handlers/push/index.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { getBotContext, getLogger } from "../../bindings"; -import { createCommitComment, getFileContent } from "../../helpers"; -import { CommitsPayload, PushPayload, ConfigSchema } from "../../types"; -import { parseYAML } from "../../utils/private"; -import { updateBaseRate } from "./update-base"; -import { validate } from "../../utils/ajv"; - -const ZERO_SHA = "0000000000000000000000000000000000000000"; -const BASE_RATE_FILE = ".github/ubiquibot-config.yml"; - -function getCommitChanges(commits: CommitsPayload[]) { - const changes = []; - - for (const commit of commits) { - for (const modifiedFile of commit.modified) { - changes.push(modifiedFile); - } - for (const addedFile of commit.added) { - changes.push(addedFile); - } - } - return changes; -} - -export const runOnPush = async () => { - const logger = getLogger(); - - const context = getBotContext(); - const payload = context.payload as PushPayload; - - // if zero sha, push is a pr change - if (payload.before === ZERO_SHA) { - logger.debug("Skipping push events, not a master write"); - return; - } - - const changes = getCommitChanges(payload.commits); - - // skip if empty - if (changes && changes.length === 0) { - logger.debug("Skipping push events, file change empty"); - return; - } - - // check for modified or added files and check for specified file - if (changes.includes(BASE_RATE_FILE)) { - // update base rate - await updateBaseRate(context, payload, BASE_RATE_FILE); - } -}; - -export const validateConfigChange = async () => { - const logger = getLogger(); - - const context = getBotContext(); - const payload = context.payload as PushPayload; - - if (!payload.ref.startsWith("refs/heads/")) { - logger.debug("Skipping push events, not a branch"); - return; - } - - const changes = getCommitChanges(payload.commits); - - // skip if empty - if (changes && changes.length === 0) { - logger.debug("Skipping push events, file change empty"); - return; - } - - // check for modified or added files and check for specified file - if (changes.includes(BASE_RATE_FILE)) { - const commitSha = payload.commits.filter((commit) => commit.modified.includes(BASE_RATE_FILE) || commit.added.includes(BASE_RATE_FILE)).reverse()[0]?.id; - if (!commitSha) { - logger.debug("Skipping push events, commit sha not found"); - return; - } - - const configFileContent = await getFileContent( - payload.repository.owner.login, - payload.repository.name, - payload.ref.split("refs/heads/")[1], - BASE_RATE_FILE, - commitSha - ); - - if (configFileContent) { - const decodedConfig = Buffer.from(configFileContent, "base64").toString(); - const config = parseYAML(decodedConfig); - const { valid, error } = validate(ConfigSchema, config); - if (!valid) { - await createCommitComment(`@${payload.sender.login} Config validation failed! ${error}`, commitSha, BASE_RATE_FILE); - } - } - } -}; diff --git a/src/handlers/push/push.ts b/src/handlers/push/push.ts new file mode 100644 index 000000000..ebd9acd93 --- /dev/null +++ b/src/handlers/push/push.ts @@ -0,0 +1,200 @@ +import { Context as ProbotContext } from "probot"; +import Runtime from "../../bindings/bot-runtime"; + +import { DefinedError } from "ajv"; +import { BotConfig, validateBotConfig } from "../../types/configuration-types"; +import { GitHubCommitsPayload, GitHubPayload, GitHubPushPayload } from "../../types/payload"; +import { parseYaml, transformConfig } from "../../utils/generate-configuration"; + +export const ZERO_SHA = "0000000000000000000000000000000000000000"; +export const BASE_RATE_FILE = ".github/ubiquibot-config.yml"; + +export function getCommitChanges(commits: GitHubCommitsPayload[]) { + const changes = [] as string[]; + + for (const commit of commits) { + for (const modifiedFile of commit.modified) { + changes.push(modifiedFile); + } + for (const addedFile of commit.added) { + changes.push(addedFile); + } + } + return changes; +} + +export async function validateConfigChange(context: ProbotContext) { + const runtime = Runtime.getState(); + const logger = runtime.logger; + + const payload = context.payload as GitHubPushPayload; + + if (!payload.ref.startsWith("refs/heads/")) { + logger.info("Skipping push events, not a branch"); + return; + } + + const changes = getCommitChanges(payload.commits); + + // skip if empty + if (changes && changes.length === 0) { + logger.info("Skipping push events as there are no file changes in the latest commit."); + return; + } + + // check for modified or added files and check for specified file + if (changes.includes(BASE_RATE_FILE)) { + const commitSha = payload.commits + .filter((commit) => commit.modified.includes(BASE_RATE_FILE) || commit.added.includes(BASE_RATE_FILE)) + .reverse()[0]?.id; + if (!commitSha) { + logger.info("Skipping push events, commit SHA not found"); + return; + } + + const configFileContent = await getFileContent( + context, + payload.repository.owner.login, + payload.repository.name, + payload.ref.split("refs/heads/")[1], + BASE_RATE_FILE, + commitSha + ); + + if (configFileContent) { + const decodedConfig = Buffer.from(configFileContent, "base64").toString(); + const config = parseYaml(decodedConfig); + const isValid = validateBotConfig(config); + let errorMsg: string | undefined; + + if (!isValid) { + const errMsg = generateValidationError(validateBotConfig.errors as DefinedError[]); + errorMsg = `@${payload.sender.login} ${errMsg}`; + } + + try { + transformConfig(config as BotConfig); + } catch (err) { + if (errorMsg) { + errorMsg += `\nConfig transformation failed:\n${err}`; + } else { + errorMsg = `@${payload.sender.login} Config transformation failed:\n${err}`; + } + } + + if (errorMsg) { + logger.info("Config validation failed!", errorMsg); + await createCommitComment(context, errorMsg, commitSha, BASE_RATE_FILE); + } else { + logger.info(`Config validation passed!`); + } + } + } else { + logger.info(`Skipping push events, file change doesn't include config file.`, changes); + } +} + +function generateValidationError(errors: DefinedError[]) { + const errorsWithoutStrict = errors.filter((error) => error.keyword !== "additionalProperties"); + const errorsOnlyStrict = errors.filter((error) => error.keyword === "additionalProperties"); + const isValid = errorsWithoutStrict.length === 0; + const errorMsg = isValid + ? "" + : errorsWithoutStrict.map((error) => error.instancePath.replaceAll("/", ".") + " " + error.message).join("\n"); + const warningMsg = + errorsOnlyStrict.length > 0 + ? "Warning! Unnecessary properties: \n" + + errorsOnlyStrict + .map( + (error) => + error.keyword === "additionalProperties" && + error.instancePath.replaceAll("/", ".") + "." + error.params.additionalProperty + ) + .join("\n") + : ""; + return `${isValid ? "Valid" : "Invalid"} configuration. \n${errorMsg}\n${warningMsg}`; +} + +async function createCommitComment( + context: ProbotContext, + body: string, + commitSha: string, + path?: string, + owner?: string, + repo?: string +) { + const payload = context.payload as GitHubPayload; + if (!owner) { + owner = payload.repository.owner.login; + } + if (!repo) { + repo = payload.repository.name; + } + + await context.octokit.rest.repos.createCommitComment({ + owner: owner, + repo: repo, + commit_sha: commitSha, + body: body, + path: path, + }); +} + +async function getFileContent( + context: ProbotContext, + owner: string, + repo: string, + branch: string, + filePath: string, + commitSha?: string +): Promise { + const runtime = Runtime.getState(); + const logger = runtime.logger; + + try { + if (!commitSha) { + // Get the latest commit of the branch + const branchData = await context.octokit.repos.getBranch({ + owner, + repo, + branch, + }); + commitSha = branchData.data.commit.sha; + } + + // Get the commit details + const commitData = await context.octokit.repos.getCommit({ + owner, + repo, + ref: commitSha, + }); + + // Find the file in the commit tree + const file = commitData.data.files ? commitData.data.files.find((file) => file.filename === filePath) : undefined; + if (file) { + // Retrieve the file tree + const tree = await context.octokit.git.getTree({ + owner, + repo, + tree_sha: commitData.data.commit.tree.sha, + recursive: "true", + }); + + // Find the previous file content in the tree + const file = tree.data.tree.find((item) => item.path === filePath); + if (file && file.sha) { + // Get the previous file content + const fileContent = await context.octokit.git.getBlob({ + owner, + repo, + file_sha: file.sha, + }); + return fileContent.data.content; + } + } + return null; + } catch (error: unknown) { + logger.debug("Error retrieving file content.", { error }); + return null; + } +} diff --git a/src/handlers/push/update-base-rate.ts b/src/handlers/push/update-base-rate.ts new file mode 100644 index 000000000..d1b8ca7c4 --- /dev/null +++ b/src/handlers/push/update-base-rate.ts @@ -0,0 +1,196 @@ +import { Context } from "../../types/context"; +import { Label } from "../../types/label"; +import { GitHubPushPayload } from "../../types/payload"; + +import { listLabelsForRepo } from "../../helpers/label"; +import { calculateLabelValue } from "../../helpers/shared"; +import { parseYaml } from "../../utils/generate-configuration"; +import { labelExists } from "../pricing/pricing-label"; +import { calculateTaskPrice } from "../shared/pricing"; + +export async function updateBaseRate(context: Context, filePath: string) { + const logger = context.logger; + // Get default branch from ref + const payload = context.event.payload as GitHubPushPayload; + const branch = payload.ref?.split("refs/heads/")[1]; + const owner = payload.repository.owner.login; + const repo = payload.repository.name; + + // get previous config + const previousFileContent = await getPreviousFileContent(context, owner, repo, branch, filePath); + + if (!previousFileContent) { + throw logger.fatal("Getting previous file content failed"); + } + const previousConfigRaw = Buffer.from(previousFileContent, "base64").toString(); + const previousConfigParsed = parseYaml(previousConfigRaw); + + if (!previousConfigParsed || !previousConfigParsed.payments.basePriceMultiplier) { + throw logger.error("No multiplier found in previous config"); + } + + const previousBaseRate = previousConfigParsed.payments.basePriceMultiplier; + + if (!previousBaseRate) { + throw logger.error("No base rate found in previous config"); + } + + // fetch all labels + const repoLabels = await listLabelsForRepo(context); + + if (repoLabels.length === 0) { + throw logger.error("No labels on this repo"); + } + + return await updateLabelsFromBaseRate(context, owner, repo, repoLabels as Label[], previousBaseRate); +} + +// Get the previous file content +async function getPreviousFileContent(context: Context, owner: string, repo: string, branch: string, filePath: string) { + const logger = context.logger; + + try { + // Get the latest commit of the branch + const branchData = await context.event.octokit.repos.getBranch({ + owner, + repo, + branch, + }); + const latestCommitSha = branchData.data.commit.sha; + + // Get the commit details + const commitData = await context.event.octokit.repos.getCommit({ + owner, + repo, + ref: latestCommitSha, + }); + + // Find the file in the commit tree + const file = commitData.data.files ? commitData.data.files.find((file) => file.filename === filePath) : undefined; + if (file) { + // Retrieve the previous file content from the commit's parent + const previousCommitSha = commitData.data.parents[0].sha; + const previousCommit = await context.event.octokit.git.getCommit({ + owner, + repo, + commit_sha: previousCommitSha, + }); + + // Retrieve the previous file tree + const previousTreeSha = previousCommit.data.tree.sha; + const previousTree = await context.event.octokit.git.getTree({ + owner, + repo, + tree_sha: previousTreeSha, + recursive: "true", + }); + + // Find the previous file content in the tree + const previousFile = previousTree.data.tree.find((item) => item.path === filePath); + if (previousFile && previousFile.sha) { + // Get the previous file content + const previousFileContent = await context.event.octokit.git.getBlob({ + owner, + repo, + file_sha: previousFile.sha, + }); + return previousFileContent.data.content; + } + } + return null; + } catch (error: unknown) { + logger.debug("Error retrieving previous file content.", { error }); + return null; + } +} +// Function to update labels based on the base rate difference +async function updateLabelsFromBaseRate( + context: Context, + owner: string, + repo: string, + labels: Label[], + previousBaseRate: number +) { + const logger = context.logger; + const config = context.config; + + const newLabels: string[] = []; + const previousLabels: string[] = []; + + for (const timeLabel of config.labels.time) { + for (const priorityLabel of config.labels.priority) { + const targetPrice = calculateTaskPrice( + context, + calculateLabelValue(timeLabel), + calculateLabelValue(priorityLabel), + config.payments.basePriceMultiplier + ); + const targetPriceLabel = `Price: ${targetPrice} USD`; + newLabels.push(targetPriceLabel); + + const previousTargetPrice = calculateTaskPrice( + context, + calculateLabelValue(timeLabel), + calculateLabelValue(priorityLabel), + previousBaseRate + ); + const previousTargetPriceLabel = `Price: ${previousTargetPrice} USD`; + previousLabels.push(previousTargetPriceLabel); + } + } + + const uniqueNewLabels = [...new Set(newLabels)]; + const uniquePreviousLabels = [...new Set(previousLabels)]; + + const labelsFiltered: string[] = labels.map((obj) => obj["name"]); + const usedLabels = uniquePreviousLabels.filter((value: string) => labelsFiltered.includes(value)); + + logger.debug("Got used labels: ", { usedLabels }); + + for (const label of usedLabels) { + if (label.startsWith("Price: ")) { + const labelData = labels.find((obj) => obj["name"] === label) as Label; + const index = uniquePreviousLabels.findIndex((obj) => obj === label); + + const doesExist = await labelExists(context, uniqueNewLabels[index]); + if (doesExist) { + // we have to delete first + logger.debug("Label already exists, deleting it", { label }); + await deleteLabel(context, uniqueNewLabels[index]); + } + + // we can update safely + await context.event.octokit.issues.updateLabel({ + owner, + repo, + name: label, + new_name: uniqueNewLabels[index], + color: labelData.color, + description: labelData.description, + headers: { + "X-GitHub-Api-Version": "2022-11-28", + }, + }); + + logger.debug("Label updated", { label, to: uniqueNewLabels[index] }); + } + } +} +async function deleteLabel(context: Context, label: string) { + const payload = context.payload; + try { + const response = await context.octokit.rest.search.issuesAndPullRequests({ + q: `repo:${payload.repository.owner.login}/${payload.repository.name} label:"${label}" state:open`, + }); + if (response.data.items.length === 0) { + //remove label + await context.octokit.rest.issues.deleteLabel({ + owner: payload.repository.owner.login, + repo: payload.repository.name, + name: label, + }); + } + } catch (e: unknown) { + context.logger.fatal("Deleting label failed!", e); + } +} diff --git a/src/handlers/push/update-base.ts b/src/handlers/push/update-base.ts deleted file mode 100644 index da67c8e6c..000000000 --- a/src/handlers/push/update-base.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Context } from "probot"; -import { getLogger } from "../../bindings"; -import { getPreviousFileContent, listLabelsForRepo, updateLabelsFromBaseRate } from "../../helpers"; -import { Label, PushPayload } from "../../types"; -import { parseYAML } from "../../utils/private"; - -export const updateBaseRate = async (context: Context, payload: PushPayload, filePath: string) => { - const logger = getLogger(); - // Get default branch from ref - const branch = payload.ref?.split("refs/heads/")[1]; - const owner = payload.repository.owner.login; - const repo = payload.repository.name; - - // get previous config - const preFileContent = await getPreviousFileContent(owner, repo, branch, filePath); - - if (!preFileContent) { - logger.debug("Getting previous file content failed"); - return; - } - const previousContent = Buffer.from(preFileContent, "base64").toString(); - const previousConfig = await parseYAML(previousContent); - - if (!previousConfig || !previousConfig["priceMultiplier"]) { - logger.debug("No multiplier found in file object"); - return; - } - - const previousBaseRate = previousConfig["priceMultiplier"]; - - // fetch all labels - const repoLabels = await listLabelsForRepo(); - - if (repoLabels.length === 0) { - logger.debug("No labels on this repo"); - return; - } - - await updateLabelsFromBaseRate(owner, repo, context, repoLabels as Label[], previousBaseRate); -}; diff --git a/src/handlers/shared/handler.ts b/src/handlers/shared/handler.ts deleted file mode 100644 index 3102be164..000000000 --- a/src/handlers/shared/handler.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { getLogger } from "../../bindings"; -import { ActionHandler } from "../../types"; - -export const nullHandler: ActionHandler = async (): Promise => { - // ToDo: This is just a null handler to do nothing. just needed for mockup - // This would be replaced with the meaningful handler once its feature determined - - const logger = getLogger(); - logger.debug(`Running handler, name: ${nullHandler.name}`); -}; diff --git a/src/handlers/shared/index.ts b/src/handlers/shared/index.ts deleted file mode 100644 index c50fe5031..000000000 --- a/src/handlers/shared/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from "./handler"; -export * from "./pricing"; - -export const deadLinePrefix = "The time limit for this task is on"; diff --git a/src/handlers/shared/pricing.ts b/src/handlers/shared/pricing.ts index f5cbd9c60..d8e0f7505 100644 --- a/src/handlers/shared/pricing.ts +++ b/src/handlers/shared/pricing.ts @@ -1,24 +1,37 @@ -import { getBotConfig } from "../../bindings"; -import { calculateWeight } from "../../helpers"; +import { calculateLabelValue } from "../../helpers/shared"; +import { Context } from "../../types/context"; +import { Label } from "../../types/label"; -export const calculateTaskPrice = (timeValue: number, priorityValue: number, baseValue?: number): number => { - const botConfig = getBotConfig(); - const base = baseValue ?? botConfig.price.baseMultiplier; +export function calculateTaskPrice( + context: Context, + timeValue: number, + priorityValue: number, + baseValue?: number +): number { + const base = baseValue ?? context.config.payments.basePriceMultiplier; const priority = priorityValue / 10; // floats cause bad math const price = 1000 * base * timeValue * priority; return price; -}; - -export const getTargetPriceLabel = (timeLabel: string | undefined, priorityLabel: string | undefined): string | undefined => { - const botConfig = getBotConfig(); - let targetPriceLabel: string | undefined = undefined; - if (timeLabel && priorityLabel) { - const timeWeight = calculateWeight(botConfig.price.timeLabels.find((item) => item.name === timeLabel)); - const priorityWeight = calculateWeight(botConfig.price.priorityLabels.find((item) => item.name === priorityLabel)); - if (timeWeight && priorityWeight) { - const taskPrice = calculateTaskPrice(timeWeight, priorityWeight); - targetPriceLabel = `Price: ${taskPrice} USD`; - } - } - return targetPriceLabel; -}; +} + +export function setPrice(context: Context, timeLabel: Label, priorityLabel: Label) { + const logger = context.logger; + const { labels } = context.config; + + if (!timeLabel || !priorityLabel) throw logger.error("Time or priority label is not defined"); + + const recognizedTimeLabels = labels.time.find((configLabel) => configLabel === timeLabel.name); + if (!recognizedTimeLabels) throw logger.error("Time label is not recognized"); + + const recognizedPriorityLabels = labels.priority.find((configLabel) => configLabel === priorityLabel.name); + if (!recognizedPriorityLabels) throw logger.error("Priority label is not recognized"); + + const timeValue = calculateLabelValue(recognizedTimeLabels); + if (!timeValue) throw logger.error("Time value is not defined"); + + const priorityValue = calculateLabelValue(recognizedPriorityLabels); + if (!priorityValue) throw logger.error("Priority value is not defined"); + + const taskPrice = calculateTaskPrice(context, timeValue, priorityValue); + return `Price: ${taskPrice} USD`; +} diff --git a/src/handlers/shared/structured-metadata.ts b/src/handlers/shared/structured-metadata.ts new file mode 100644 index 000000000..548bbd4c6 --- /dev/null +++ b/src/handlers/shared/structured-metadata.ts @@ -0,0 +1,59 @@ +import { LogLevel } from "ubiquibot-logger/pretty-logs"; +import { COMMIT_HASH } from "../../commit-hash"; + +function createStructuredMetadata(className: string, metadata: any) { + const jsonPretty = JSON.stringify(metadata, null, 2); + const stackLine = new Error().stack?.split("\n")[2] ?? ""; + const caller = stackLine.match(/at (\S+)/)?.[1] ?? ""; + const revision = COMMIT_HASH?.substring(0, 7) ?? null; + const ubiquityMetadataHeader = `"].join("\n"); + + if (metadata?.logMessage?.type === LogLevel.FATAL) { + // if the log message is fatal, then we want to show the metadata + metadataSerialized = [metadataSerializedVisible, metadataSerializedHidden].join("\n"); + } else { + // otherwise we want to hide it + metadataSerialized = metadataSerializedHidden; + } + + return metadataSerialized; +} + +function parseStructuredMetadata(comment: string) { + const regex = //gs; + + const match = regex.exec(comment); + + if (!match) { + return null; + } + + const [, type, caller, revision, jsonString] = match; + + let metadata; + try { + // TODO: fix metadata writing to encode html comments inside json without the html parser getting confused + metadata = JSON.parse(jsonString.trim()); + } catch (error) { + console.trace(jsonString); + console.error("Failed to parse JSON:", error); + + return null; + } + + return { + className: type.trim(), + caller: caller.trim(), + revision: revision.trim(), + metadata, + }; +} + +export default { + create: createStructuredMetadata, + parse: parseStructuredMetadata, +}; diff --git a/src/handlers/wildcard/analytics.ts b/src/handlers/wildcard/analytics.ts index bc0f227f5..14be81657 100644 --- a/src/handlers/wildcard/analytics.ts +++ b/src/handlers/wildcard/analytics.ts @@ -1,110 +1,40 @@ -import { getMaxIssueNumber, upsertIssue, upsertUser } from "../../adapters/supabase"; -import { getBotConfig, getLogger } from "../../bindings"; -import { listIssuesForRepo, getUser, calculateWeight } from "../../helpers"; -import { Issue, IssueType, User, UserProfile } from "../../types"; -import { getTargetPriceLabel } from "../shared"; - -/** - * Checks the issue whether it's a task for hunters or an issue for not - * @param issue - The issue object - * @returns If task - true, If issue - false - */ -export const taskInfo = ( - issue: Issue +import { calculateLabelValue } from "../../helpers/shared"; +import { Context } from "../../types/context"; +import { GitHubIssue } from "../../types/payload"; + +// Checks the issue whether it's an open task for public self assignment +export function taskPaymentMetaData( + context: Context, + issue: GitHubIssue ): { - isTask: boolean; - timelabel: string | undefined; - priorityLabel: string | undefined; - priceLabel: string | undefined; -} => { - const config = getBotConfig(); - const labels = issue.labels; - const timeLabels = config.price.timeLabels.filter((item) => labels.map((i) => i.name).includes(item.name)); - const priorityLabels = config.price.priorityLabels.filter((item) => labels.map((i) => i.name).includes(item.name)); + eligibleForPayment: boolean; + timeLabel: string | null; + priorityLabel: string | null; + priceLabel: string | null; +} { + const { labels } = context.config; + + const timeLabels = labels.time.filter((configLabel) => issue.labels.map((i) => i.name).includes(configLabel)); + const priorityLabels = labels.priority.filter((configLabel) => issue.labels.map((i) => i.name).includes(configLabel)); const isTask = timeLabels.length > 0 && priorityLabels.length > 0; - const minTimeLabel = timeLabels.length > 0 ? timeLabels.reduce((a, b) => (calculateWeight(a) < calculateWeight(b) ? a : b)).name : undefined; - const minPriorityLabel = priorityLabels.length > 0 ? priorityLabels.reduce((a, b) => (calculateWeight(a) < calculateWeight(b) ? a : b)).name : undefined; + const minTimeLabel = + timeLabels.length > 0 + ? timeLabels.reduce((a, b) => (calculateLabelValue(a) < calculateLabelValue(b) ? a : b)) + : null; + + const minPriorityLabel = + priorityLabels.length > 0 + ? priorityLabels.reduce((a, b) => (calculateLabelValue(a) < calculateLabelValue(b) ? a : b)) + : null; - const priceLabel = getTargetPriceLabel(minTimeLabel, minPriorityLabel); + const priceLabel = issue.labels.find((label) => label.name.includes("Price"))?.name || null; return { - isTask, - timelabel: minTimeLabel, + eligibleForPayment: isTask, + timeLabel: minTimeLabel, priorityLabel: minPriorityLabel, priceLabel, }; -}; - -/** - * Collects all the analytics information by scanning the issues opened | closed - */ -export const collectAnalytics = async (): Promise => { - const logger = getLogger(); - const { - mode: { disableAnalytics }, - } = getBotConfig(); - if (disableAnalytics) { - logger.info(`Skipping to collect analytics, reason: mode=${disableAnalytics}`); - return; - } - logger.info("Collecting analytics information..."); - const maximumIssueNumber = await getMaxIssueNumber(); - - let fetchDone = false; - const perPage = 30; - let curPage = 1; - while (!fetchDone) { - const issues = await listIssuesForRepo(IssueType.ALL, perPage, curPage); - - // need to skip checking the closed issues already stored in the db and filter them by doing a sanitation checks. - // sanitation checks would be basically checking labels of the issue - // whether the issue has both `priority` label and `timeline` label - const tasks = issues.filter((issue) => taskInfo(issue as Issue).isTask); - - // collect assignees from both type of issues (opened/closed) - const assignees = tasks.filter((task) => task.assignee).map((task) => task.assignee as User); - - // remove duplication by assignee - const tmp = assignees.map((i) => i.login); - const assigneesToUpsert = assignees.filter((assignee, pos) => tmp.indexOf(assignee.login) == pos); - const userProfilesToUpsert = await Promise.all( - assigneesToUpsert.map(async (assignee) => { - const res = await getUser(assignee.login); - return res as UserProfile; - }) - ); - - logger.info( - `Upserting users: ${userProfilesToUpsert - .filter((i) => i.login) - .map((i) => i.login) - .toString()}` - ); - - await Promise.all(userProfilesToUpsert.map((i) => upsertUser(i))); - - // No need to update the record for the tasks already closed - const tasksToUpsert = tasks.filter((task) => (task.state === IssueType.CLOSED ? task.number > maximumIssueNumber : true)); - logger.info(`Upserting tasks: ${tasksToUpsert.map((i) => i.title).toString()}`); - await Promise.all( - tasksToUpsert.map((i) => { - const additions = taskInfo(i as Issue); - if (additions.timelabel && additions.priorityLabel && additions.priceLabel) - return upsertIssue(i as Issue, { - labels: { - timeline: additions.timelabel, - priority: additions.priorityLabel, - price: additions.priceLabel, - }, - }); - return undefined; - }) - ); - - if (issues.length < perPage) fetchDone = true; - else curPage++; - } - logger.info("Collecting analytics finished..."); -}; +} diff --git a/src/handlers/wildcard/index.ts b/src/handlers/wildcard/index.ts deleted file mode 100644 index 35158c20f..000000000 --- a/src/handlers/wildcard/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./unassign"; -export * from "./analytics"; diff --git a/src/handlers/wildcard/unassign.ts b/src/handlers/wildcard/unassign.ts deleted file mode 100644 index 285adaf51..000000000 --- a/src/handlers/wildcard/unassign.ts +++ /dev/null @@ -1,131 +0,0 @@ -import { getBotConfig, getBotContext, getLogger } from "../../bindings"; -import { GLOBAL_STRINGS } from "../../configs/strings"; -import { - addCommentToIssue, - getAllIssueComments, - getCommitsOnPullRequest, - getOpenedPullRequestsForAnIssue, - getReviewRequests, - listAllIssuesForRepo, - removeAssignees, -} from "../../helpers"; -import { Comment, Issue, IssueType, Payload, UserType } from "../../types"; -import { deadLinePrefix } from "../shared"; - -/** - * @dev Check out the tasks which haven't been completed within the initial timeline - * and try to release the task back to dev pool - */ -export const checkTasksToUnassign = async () => { - const logger = getLogger(); - logger.info(`Getting all the issues...`); - - // List all the issues in the repository. It may include `pull_request` - // because GitHub's REST API v3 considers every pull request an issue - const issues_opened = await listAllIssuesForRepo(IssueType.OPEN); - - const assigned_issues = issues_opened.filter((issue) => issue.assignee); - - // Checking the tasks in parallel - const res = await Promise.all(assigned_issues.map(async (issue) => checkTaskToUnassign(issue as Issue))); - logger.info(`Checking expired tasks done! total: ${res.length}, unassigned: ${res.filter((i) => i).length}`); -}; - -const checkTaskToUnassign = async (issue: Issue): Promise => { - const context = getBotContext(); - const payload = context.payload as Payload; - const logger = getLogger(); - const { - unassign: { followUpTime, disqualifyTime }, - } = getBotConfig(); - logger.info(`Checking the task to unassign, issue_number: ${issue.number}`); - const { unassignComment, askUpdate } = GLOBAL_STRINGS; - const assignees = issue.assignees.map((i) => i.login); - const comments = await getAllIssueComments(issue.number); - if (!comments || comments.length == 0) return false; - - const askUpdateComments = comments - .filter((comment: Comment) => comment.body.includes(askUpdate)) - .sort((a: Comment, b: Comment) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()); - - const lastAskTime = askUpdateComments.length > 0 ? new Date(askUpdateComments[0].created_at).getTime() : new Date(issue.created_at).getTime(); - const curTimestamp = new Date().getTime(); - const lastActivity = await lastActivityTime(issue, comments); - const passedDuration = curTimestamp - lastActivity.getTime(); - const pullRequest = await getOpenedPullRequestsForAnIssue(issue.number, issue.assignee.login); - - if (pullRequest.length > 0) { - const reviewRequests = await getReviewRequests(context, pullRequest[0].number, payload.repository.owner.login, payload.repository.name); - if (!reviewRequests || reviewRequests.users?.length > 0) { - return false; - } - } - - if (passedDuration >= disqualifyTime || passedDuration >= followUpTime) { - if (passedDuration >= disqualifyTime) { - logger.info( - `Unassigning... lastActivityTime: ${lastActivity.getTime()}, curTime: ${curTimestamp}, passedDuration: ${passedDuration}, followUpTime: ${followUpTime}, disqualifyTime: ${disqualifyTime}` - ); - // remove assignees from the issue - await removeAssignees(issue.number, assignees); - await addCommentToIssue(`@${assignees[0]} - ${unassignComment} \nLast activity time: ${lastActivity}`, issue.number); - - return true; - } else if (passedDuration >= followUpTime) { - logger.info( - `Asking for updates... lastActivityTime: ${lastActivity.getTime()}, curTime: ${curTimestamp}, passedDuration: ${passedDuration}, followUpTime: ${followUpTime}, disqualifyTime: ${disqualifyTime}` - ); - - if (lastAskTime > lastActivity.getTime()) { - logger.info( - `Skipping posting an update message cause its been already asked, lastAskTime: ${lastAskTime}, lastActivityTime: ${lastActivity.getTime()}` - ); - } else { - await addCommentToIssue( - `${askUpdate} @${assignees[0]}? If you would like to release the task back to the DevPool, please comment \`/stop\` \nLast activity time: ${lastActivity}`, - issue.number - ); - } - } - } - - return false; -}; - -const lastActivityTime = async (issue: Issue, comments: Comment[]): Promise => { - const logger = getLogger(); - logger.info(`Checking the latest activity for the issue, issue_number: ${issue.number}`); - const assignees = issue.assignees.map((i) => i.login); - const activities: Date[] = [new Date(issue.created_at)]; - - const lastAssignCommentOfHunter = comments - .filter((comment) => comment.user.type === UserType.Bot && comment.body.includes(assignees[0]) && comment.body.includes(deadLinePrefix)) - .sort((a: Comment, b: Comment) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()); - if (lastAssignCommentOfHunter.length > 0) activities.push(new Date(lastAssignCommentOfHunter[0].created_at)); - - // get last comment on the issue - const lastCommentsOfHunterForIssue = comments - .filter((comment) => assignees.includes(comment.user.login)) - .sort((a: Comment, b: Comment) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()); - - if (lastCommentsOfHunterForIssue.length > 0) activities.push(new Date(lastCommentsOfHunterForIssue[0].created_at)); - - const openedPrsForIssue = await getOpenedPullRequestsForAnIssue(issue.number, assignees[0]); - const pr = openedPrsForIssue.length > 0 ? openedPrsForIssue[0] : undefined; - // get last commit and last comment on the linked pr - if (pr) { - const commits = (await getCommitsOnPullRequest(pr.number)) - .filter((it) => it.commit.committer?.date) - .sort((a, b) => new Date(b.commit.committer?.date ?? 0).getTime() - new Date(a.commit.committer?.date ?? 0).getTime()); - const prComments = (await getAllIssueComments(pr.number)) - .filter((comment) => comment.user.login === assignees[0]) - .sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()); - - if (commits.length > 0) activities.push(new Date(commits[0].commit.committer?.date ?? 0)); - if (prComments.length > 0) activities.push(new Date(prComments[0].created_at)); - } - - activities.sort((a, b) => b.getTime() - a.getTime()); - - return activities[0]; -}; diff --git a/src/handlers/wildcard/unassign/aggregate-assignee-activity.ts b/src/handlers/wildcard/unassign/aggregate-assignee-activity.ts new file mode 100644 index 000000000..76717d1ac --- /dev/null +++ b/src/handlers/wildcard/unassign/aggregate-assignee-activity.ts @@ -0,0 +1,53 @@ +import { getLinkedPullRequests } from "../../../helpers/get-linked-pull-requests"; +import { Commit } from "../../../types/commit"; +import { Context } from "../../../types/context"; +import { getAllCommitsFromPullRequest } from "./get-all-commits-from-pull-request"; +import { getAllEvents } from "./get-all-events"; + +export async function aggregateAssigneeActivity({ + context, + login, + name, + number, + assignees, +}: AggregateAssigneeActivity) { + const allEvents = await getAllEvents({ context, owner: login, repo: name, issueNumber: number }); + const assigneeEvents = allEvents.filter((event) => assignees.includes(event.actor.login)); // Filter all events by assignees + + // check the linked pull request and then check that pull request's commits + const linkedPullRequests = await getLinkedPullRequests(context, { owner: login, repository: name, issue: number }); + + const allCommits = [] as Commit[]; + for (const pullRequest of linkedPullRequests) { + try { + const commits = await getAllCommitsFromPullRequest({ + context, + owner: login, + repo: name, + pullNumber: pullRequest.number, + }); + allCommits.push(...commits); + } catch (error) { + console.trace({ error }); + // return []; + } + } + + // DONE: check commits - e.g. https://api.github.com/repos/ubiquity/ubiquibot/pulls/644/commits?per_page=100 + // Filter all commits by assignees + const assigneeCommits = allCommits.filter((commit) => { + const name = commit.author?.login || commit.commit.committer?.name; + if (!name) { + return false; + } + assignees.includes(name); + }); + return { assigneeEvents, assigneeCommits }; +} +interface AggregateAssigneeActivity { + context: Context; + login: string; + name: string; + number: number; + assignees: string[]; +} diff --git a/src/handlers/wildcard/unassign/assign-event-found.ts b/src/handlers/wildcard/unassign/assign-event-found.ts new file mode 100644 index 000000000..acf51154e --- /dev/null +++ b/src/handlers/wildcard/unassign/assign-event-found.ts @@ -0,0 +1,57 @@ +import { Logs } from "ubiquibot-logger"; +import { Context } from "../../../types/context"; +import { GitHubAssignEvent, GitHubUser } from "../../../types/payload"; +import { disqualifyIdleAssignees } from "./disqualify-idle-assignees"; +import { remindNonEliminatedAssignees } from "./remind-non-eliminated-assignees"; + +export async function assignEventFound({ + latestAssignEvent, + logger, + assignees, + disqualifiedAssignees, + context, + login, + name, + number, + taskDisqualifyDuration, + activeAssigneesInDisqualifyDuration, + activeAssigneesInFollowUpDuration, +}: AssignEventFoundParams) { + const latestAssignEventTime = new Date(latestAssignEvent.created_at).getTime(); + logger.debug("Latest assign event time", { latestAssignEventTime }); + const now = Date.now(); + const assigneesWithinGracePeriod = assignees.filter(() => now - latestAssignEventTime < taskDisqualifyDuration); + const assigneesOutsideGracePeriod = assignees.filter((assignee) => !assigneesWithinGracePeriod.includes(assignee)); + disqualifiedAssignees = await disqualifyIdleAssignees(context, { + assignees: assigneesOutsideGracePeriod.map((assignee) => assignee.login), + activeAssigneesInDisqualifyDuration, + login, + name, + number, + }); + + // DONE: follow up with those who are in `assignees` and not inside of `disqualifiedAssignees` or `activeAssigneesInFollowUpDuration` + await remindNonEliminatedAssignees(context, { + assignees: assigneesOutsideGracePeriod.map((assignee) => assignee.login), + disqualifiedAssignees, + activeAssigneesInFollowUpDuration, + login, + name, + number, + taskDisqualifyDuration, + }); + return disqualifiedAssignees; +} +interface AssignEventFoundParams { + latestAssignEvent: GitHubAssignEvent; + logger: Logs; + assignees: GitHubUser[]; + context: Context; + login: string; + name: string; + number: number; + disqualifiedAssignees: null | string[]; + taskDisqualifyDuration: number; + activeAssigneesInDisqualifyDuration: string[]; + activeAssigneesInFollowUpDuration: string[]; +} diff --git a/src/handlers/wildcard/unassign/check-if-follow-up-already-posted.ts b/src/handlers/wildcard/unassign/check-if-follow-up-already-posted.ts new file mode 100644 index 000000000..d7d98858c --- /dev/null +++ b/src/handlers/wildcard/unassign/check-if-follow-up-already-posted.ts @@ -0,0 +1,35 @@ +import { Context } from "../../../types/context"; + +export async function checkIfFollowUpAlreadyPosted( + context: Context, + login: string, + name: string, + number: number, + followUpMessage: string, + disqualificationPeriod: number +) { + const comments = await context.event.octokit.rest.issues.listComments({ + owner: login, + repo: name, + issue_number: number, + }); + + // Get the current time + const now = new Date().getTime(); + + // Check if a similar comment has already been posted within the disqualification period + let hasRecentFollowUp = false; + for (const comment of comments.data) { + context.logger.debug("Checking comment for follow-up", { comment }); + if ( + comment && + comment.body === followUpMessage && + comment.user?.type === "Bot" && + now - new Date(comment?.created_at).getTime() <= disqualificationPeriod + ) { + hasRecentFollowUp = true; + break; + } + } + return hasRecentFollowUp; +} diff --git a/src/handlers/wildcard/unassign/check-task-to-unassign.ts b/src/handlers/wildcard/unassign/check-task-to-unassign.ts new file mode 100644 index 000000000..c70d93ca5 --- /dev/null +++ b/src/handlers/wildcard/unassign/check-task-to-unassign.ts @@ -0,0 +1,116 @@ +import { Context } from "../../../types/context"; +import { GitHubAssignEvent, GitHubIssue, GitHubPayload, GitHubUser } from "../../../types/payload"; +import { aggregateAssigneeActivity } from "./aggregate-assignee-activity"; +import { assignEventFound } from "./assign-event-found"; +import { getActiveAssignees } from "./get-active-assignees"; + +export async function checkTaskToUnassign(context: Context, assignedIssue: GitHubIssue) { + const logger = context.logger; + const payload = context.event.payload as GitHubPayload; + const { + timers: { taskDisqualifyDuration, taskFollowUpDuration }, + } = context.config; + + logger.info("Checking for neglected tasks", { issueNumber: assignedIssue.number }); + + if (!assignedIssue.assignees) { + throw logger.error("No assignees found when there are supposed to be assignees.", { + issueNumber: assignedIssue.number, + }); + } + const assignees = assignedIssue.assignees.filter((item): item is GitHubUser => item !== null); + const assigneeLoginsOnly = assignees.map((assignee) => assignee.login); + + const login = payload.repository.owner.login; + const name = payload.repository.name; + const number = assignedIssue.number; + + // DONE: check events - e.g. https://api.github.com/repos/ubiquity/ubiquibot/issues/644/events?per_page=100 + const { assigneeEvents, assigneeCommits } = await aggregateAssigneeActivity({ + context, + login, + name, + number, + assignees: assigneeLoginsOnly, + }); + + // Check if the assignee did any "event activity" or commit within the timeout window + const { activeAssigneesInDisqualifyDuration, activeAssigneesInFollowUpDuration } = getActiveAssignees( + context, + assigneeLoginsOnly, + assigneeEvents, + taskDisqualifyDuration, + assigneeCommits, + taskFollowUpDuration + ); + + // assigneeEvents + const assignEventsOfAssignee: AssignedEvent[] = assigneeEvents.filter( + (event): event is AssignedEvent => event.event === "assigned" && "assignee" in event && "assigner" in event + ); + + const issueAssignEvents = await getAllIssueAssignEvents(context, assignedIssue.number); + const latestAssignEvent = issueAssignEvents[0]; + + logger.debug("Latest assign event", { latestAssignEvent }); + + let disqualifiedAssignees: null | string[] = null; + + if (!latestAssignEvent) { + return logger.debug("No latest assign event found.", { assignEventsOfAssignee }); + } else { + disqualifiedAssignees = await assignEventFound({ + latestAssignEvent, + logger, + assignees, + taskDisqualifyDuration, + disqualifiedAssignees, + context, + activeAssigneesInDisqualifyDuration, + login, + name, + number, + activeAssigneesInFollowUpDuration, + }); + } + return logger.ok("Checked task to unassign", { + issueNumber: assignedIssue.number, + disqualifiedAssignees, + }); +} + +type AssignedEvent = { + id: number; + node_id: string; + url: string; + actor: GitHubUser; + event: "assigned"; + commit_id: string; + commit_url: string; + created_at: string; + assignee: GitHubUser; + assigner: GitHubUser; + performed_via_github_app: null; +}; + +async function getAllIssueAssignEvents(context: Context, issueNumber: number): Promise { + const payload = context.payload; + + try { + const events = (await context.octokit.paginate( + context.octokit.issues.listEvents, + { + owner: payload.repository.owner.login, + repo: payload.repository.name, + issue_number: issueNumber, + per_page: 100, + }, + (response) => response.data.filter((item) => item.event === "assigned") + )) as GitHubAssignEvent[]; + + return events.sort((a, b) => (new Date(a.created_at) > new Date(b.created_at) ? -1 : 1)); + } catch (err: unknown) { + context.logger.fatal("Fetching all issue assign events failed!", err); + return []; + } +} diff --git a/src/handlers/wildcard/unassign/check-tasks-to-unassign.ts b/src/handlers/wildcard/unassign/check-tasks-to-unassign.ts new file mode 100644 index 000000000..d80445c6b --- /dev/null +++ b/src/handlers/wildcard/unassign/check-tasks-to-unassign.ts @@ -0,0 +1,46 @@ +import { Context } from "../../../types/context"; +import { GitHubIssue, IssueType } from "../../../types/payload"; +import { checkTaskToUnassign } from "./check-task-to-unassign"; + +// type Commit[] = Commit[]; // RestEndpointMethodTypes["pulls"]["listCommits"]["response"]["data"]; +export async function checkTasksToUnassign(context: Context) { + const logger = context.logger; + logger.debug("Checking tasks to unassign"); + + const issuesAndPullsOpened = await listAllIssuesAndPullsForRepo(context, IssueType.OPEN); + + // logger.debug("Fetched all issues and pulls opened", { issuesAndPullsOpened }); + const assignedIssues = issuesAndPullsOpened.filter((issue) => issue.assignee); + + const tasksToUnassign = await Promise.all( + assignedIssues.map((assignedIssue: GitHubIssue) => checkTaskToUnassign(context, assignedIssue)) + ); + + logger.debug("Checked tasks to unassign", { tasksToUnassign }); + + logger.ok("Checked all the tasks to unassign", { + tasksToUnassign: tasksToUnassign.filter(Boolean).map((task) => task?.metadata), + }); +} +async function listAllIssuesAndPullsForRepo( + context: Context, + state: "open" | "closed" | "all" = "open", + sort: "created" | "updated" | "comments" = "created", + direction: "desc" | "asc" = "desc" +) { + const payload = context.payload; + try { + const issues = (await context.octokit.paginate(context.octokit.issues.listForRepo, { + owner: payload.repository.owner.login, + repo: payload.repository.name, + state, + sort, + direction, + per_page: 100, + })) as GitHubIssue[]; + return issues; + } catch (err: unknown) { + context.logger.fatal("Listing all issues and pulls failed!", err); + return []; + } +} diff --git a/src/handlers/wildcard/unassign/disqualify-idle-assignees.ts b/src/handlers/wildcard/unassign/disqualify-idle-assignees.ts new file mode 100644 index 000000000..90e992e29 --- /dev/null +++ b/src/handlers/wildcard/unassign/disqualify-idle-assignees.ts @@ -0,0 +1,30 @@ +import { Context } from "../../../types/context"; + +export async function disqualifyIdleAssignees( + context: Context, + { assignees, activeAssigneesInDisqualifyDuration, login, name, number }: DisqualifyIdleAssignees +) { + const idleAssignees = assignees.filter((assignee) => !activeAssigneesInDisqualifyDuration.includes(assignee)); + + if (idleAssignees.length > 0) { + try { + await context.event.octokit.rest.issues.removeAssignees({ + owner: login, + repo: name, + issue_number: number, + assignees: idleAssignees, + }); + context.logger.info("Unassigned idle assignees", { idleAssignees }); + } catch (e: unknown) { + context.logger.error("Failed to unassign idle assignees", e); + } + } + return idleAssignees; +} +interface DisqualifyIdleAssignees { + assignees: string[]; + activeAssigneesInDisqualifyDuration: string[]; + login: string; + name: string; + number: number; +} diff --git a/src/handlers/wildcard/unassign/get-active-assignees-in-disqualify-duration.ts b/src/handlers/wildcard/unassign/get-active-assignees-in-disqualify-duration.ts new file mode 100644 index 000000000..b93c7257c --- /dev/null +++ b/src/handlers/wildcard/unassign/get-active-assignees-in-disqualify-duration.ts @@ -0,0 +1,29 @@ +import { Commit } from "../../../types/commit"; +import { Context } from "../../../types/context"; +import { IssuesListEventsResponseData } from "./unassign"; + +export function getActiveAssigneesInDisqualifyDuration( + context: Context, + assignees: string[], + assigneeEvents: IssuesListEventsResponseData, + taskDisqualifyDuration: number, + assigneeCommits: Commit[] +) { + return assignees.filter(() => { + const currentTime = new Date().getTime(); + const assigneeEventsWithinDuration = assigneeEvents.filter((event) => { + if (!event?.created_at) { + context.logger.debug("Event does not have a created_at property", { event }); + return false; + } + const eventTime = new Date(event?.created_at).getTime(); + return currentTime - eventTime <= taskDisqualifyDuration; + }); + + const assigneeCommitsWithinDuration = assigneeCommits.filter((commit) => { + const date = commit.commit.author?.date || commit.commit.committer?.date || ""; + return date && new Date().getTime() - new Date(date).getTime() <= taskDisqualifyDuration; + }); + return assigneeEventsWithinDuration.length === 0 && assigneeCommitsWithinDuration.length === 0; + }); +} diff --git a/src/handlers/wildcard/unassign/get-active-assignees-in-follow-up-duration.ts b/src/handlers/wildcard/unassign/get-active-assignees-in-follow-up-duration.ts new file mode 100644 index 000000000..2c5a06150 --- /dev/null +++ b/src/handlers/wildcard/unassign/get-active-assignees-in-follow-up-duration.ts @@ -0,0 +1,29 @@ +import { Commit } from "../../../types/commit"; +import { Context } from "../../../types/context"; +import { IssuesListEventsResponseData } from "./unassign"; + +export function getActiveAssigneesInFollowUpDuration( + context: Context, + assignees: string[], + assigneeEvents: IssuesListEventsResponseData, + taskFollowUpDuration: number, + assigneeCommits: Commit[], + taskDisqualifyDuration: number +) { + return assignees.filter(() => { + const currentTime = new Date().getTime(); + const assigneeEventsWithinDuration = assigneeEvents.filter((event) => { + if (!event?.created_at) { + context.logger.debug("Event does not have a created_at property", { event }); + return false; + } + const eventTime = new Date(event?.created_at).getTime(); + return currentTime - eventTime <= taskFollowUpDuration; + }); + const assigneeCommitsWithinDuration = assigneeCommits.filter((commit) => { + const date = commit.commit.author?.date || commit.commit.committer?.date || ""; + return date && new Date().getTime() - new Date(date).getTime() <= taskDisqualifyDuration; + }); + return assigneeEventsWithinDuration.length === 0 && assigneeCommitsWithinDuration.length === 0; + }); +} diff --git a/src/handlers/wildcard/unassign/get-active-assignees.ts b/src/handlers/wildcard/unassign/get-active-assignees.ts new file mode 100644 index 000000000..ef8ea848c --- /dev/null +++ b/src/handlers/wildcard/unassign/get-active-assignees.ts @@ -0,0 +1,36 @@ +import { Commit } from "../../../types/commit"; +import { Context } from "../../../types/context"; +import { getActiveAssigneesInDisqualifyDuration } from "./get-active-assignees-in-disqualify-duration"; +import { getActiveAssigneesInFollowUpDuration } from "./get-active-assignees-in-follow-up-duration"; +import { IssuesListEventsResponseData } from "./unassign"; + +export function getActiveAssignees( + context: Context, + assignees: string[], + assigneeEvents: IssuesListEventsResponseData, + taskDisqualifyDuration: number, + assigneeCommits: Commit[], + taskFollowUpDuration: number +) { + const activeAssigneesInDisqualifyDuration = getActiveAssigneesInDisqualifyDuration( + context, + assignees, + assigneeEvents, + taskDisqualifyDuration, + assigneeCommits + ); + + const activeAssigneesInFollowUpDuration = getActiveAssigneesInFollowUpDuration( + context, + assignees, + assigneeEvents, + taskFollowUpDuration, + assigneeCommits, + taskDisqualifyDuration + ); + + return { + activeAssigneesInDisqualifyDuration, + activeAssigneesInFollowUpDuration, + }; +} diff --git a/src/handlers/wildcard/unassign/get-all-commits-from-pull-request.ts b/src/handlers/wildcard/unassign/get-all-commits-from-pull-request.ts new file mode 100644 index 000000000..93c5587bd --- /dev/null +++ b/src/handlers/wildcard/unassign/get-all-commits-from-pull-request.ts @@ -0,0 +1,23 @@ +import { Commit } from "../../../types/commit"; +import { Context } from "../../../types/context"; + +export async function getAllCommitsFromPullRequest({ context, owner, repo, pullNumber }: GetAllCommits) { + try { + const commits = (await context.octokit.paginate(context.octokit.pulls.listCommits, { + owner, + repo, + pull_number: pullNumber, + per_page: 100, + })) as Commit[]; + return commits; + } catch (err: unknown) { + context.logger.error("Failed to fetch lists of commits", err); + return []; + } +} +interface GetAllCommits { + context: Context; + owner: string; + repo: string; + pullNumber: number; +} diff --git a/src/handlers/wildcard/unassign/get-all-events.ts b/src/handlers/wildcard/unassign/get-all-events.ts new file mode 100644 index 000000000..77e41b976 --- /dev/null +++ b/src/handlers/wildcard/unassign/get-all-events.ts @@ -0,0 +1,29 @@ +import { Context } from "../../../types/context"; +import { isCorrectType } from "./is-correct-type"; +import { IssuesListEventsResponseData } from "./unassign"; + +export async function getAllEvents({ context, owner, repo, issueNumber }: GetAllEvents) { + try { + const events = (await context.octokit.paginate( + context.octokit.rest.issues.listEvents, + { + owner, + repo, + issue_number: issueNumber, + per_page: 100, + }, + (response: { data: any[] }) => + response.data.filter((event) => isCorrectType(event as IssuesListEventsResponseData[0])) + )) as IssuesListEventsResponseData; + return events; + } catch (err: unknown) { + context.logger.error("Failed to fetch lists of events", err); + return []; + } +} +interface GetAllEvents { + context: Context; + owner: string; + repo: string; + issueNumber: number; +} diff --git a/src/handlers/wildcard/unassign/is-correct-type.ts b/src/handlers/wildcard/unassign/is-correct-type.ts new file mode 100644 index 000000000..2221cf725 --- /dev/null +++ b/src/handlers/wildcard/unassign/is-correct-type.ts @@ -0,0 +1,5 @@ +import { IssuesListEventsResponseData } from "./unassign"; + +export function isCorrectType(event: IssuesListEventsResponseData[0]) { + return event && typeof event.id === "number"; +} diff --git a/src/handlers/wildcard/unassign/remind-non-eliminated-assignees.ts b/src/handlers/wildcard/unassign/remind-non-eliminated-assignees.ts new file mode 100644 index 000000000..9a9f7a8b8 --- /dev/null +++ b/src/handlers/wildcard/unassign/remind-non-eliminated-assignees.ts @@ -0,0 +1,58 @@ +import { Context } from "../../../types/context"; +import { checkIfFollowUpAlreadyPosted } from "./check-if-follow-up-already-posted"; + +export async function remindNonEliminatedAssignees( + context: Context, + { + assignees, + disqualifiedAssignees, + activeAssigneesInFollowUpDuration, + login, + name, + number, + taskDisqualifyDuration, + }: FollowUpWithTheRest +) { + const followUpAssignees = assignees.filter( + (assignee) => !disqualifiedAssignees.includes(assignee) && !activeAssigneesInFollowUpDuration.includes(assignee) + ); + + if (followUpAssignees.length > 0) { + const followUpMessage = `@${followUpAssignees.join( + ", @" + )}, this task has been idle for a while. Please provide an update.`; + + // Fetch recent comments + const hasRecentFollowUp = await checkIfFollowUpAlreadyPosted( + context, + login, + name, + number, + followUpMessage, + taskDisqualifyDuration + ); + + if (!hasRecentFollowUp) { + try { + await context.event.octokit.rest.issues.createComment({ + owner: login, + repo: name, + issue_number: number, + body: followUpMessage, + }); + context.logger.info("Followed up with idle assignees", { followUpAssignees }); + } catch (e: unknown) { + context.logger.error("Failed to follow up with idle assignees", e); + } + } + } +} +interface FollowUpWithTheRest { + assignees: string[]; + disqualifiedAssignees: string[]; + activeAssigneesInFollowUpDuration: string[]; + login: string; + name: string; + number: number; + taskDisqualifyDuration: number; +} diff --git a/src/handlers/wildcard/unassign/unassign.ts b/src/handlers/wildcard/unassign/unassign.ts new file mode 100644 index 000000000..0f493c018 --- /dev/null +++ b/src/handlers/wildcard/unassign/unassign.ts @@ -0,0 +1,3 @@ +import { RestEndpointMethodTypes } from "@octokit/rest"; + +export type IssuesListEventsResponseData = RestEndpointMethodTypes["issues"]["listEvents"]["response"]["data"]; diff --git a/src/helpers/comment.ts b/src/helpers/comment.ts deleted file mode 100644 index cba6c165f..000000000 --- a/src/helpers/comment.ts +++ /dev/null @@ -1,42 +0,0 @@ -import * as parse5 from "parse5"; - -type Node = { - nodeName: string; - tagName?: string; - value?: string; - childNodes?: Node[]; -}; - -const traverse = (result: Record, node: Node, itemsToExclude: string[]): Record => { - if (itemsToExclude.includes(node.nodeName)) { - return result; - } - - if (!result[node.nodeName]) { - result[node.nodeName] = []; - } - - result[node.nodeName].push(node.value?.trim() ?? ""); - - if (node.childNodes && node.childNodes.length > 0) { - node.childNodes.forEach((child) => traverse(result, child, itemsToExclude)); - } - - return result; -}; - -export const parseComments = (comments: string[], itemsToExclude: string[]): Record => { - const result: Record = {}; - - for (const comment of comments) { - const fragment = parse5.parseFragment(comment); - traverse(result, fragment as Node, itemsToExclude); - } - - // remove empty values - if (result["#text"]) { - result["#text"] = result["#text"].filter((str) => str.length > 0); - } - - return result; -}; diff --git a/src/helpers/commit.ts b/src/helpers/commit.ts deleted file mode 100644 index 678b4d774..000000000 --- a/src/helpers/commit.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { getBotContext } from "../bindings"; -import { Payload } from "../types"; - -export async function createCommitComment(body: string, commitSha: string, path?: string, owner?: string, repo?: string) { - const context = getBotContext(); - const payload = context.payload as Payload; - if (!owner) { - owner = payload.repository.owner.login; - } - if (!repo) { - repo = payload.repository.name; - } - - await context.octokit.rest.repos.createCommitComment({ - owner: owner, - repo: repo, - commit_sha: commitSha, - body: body, - path: path, - }); -} diff --git a/src/helpers/contracts.ts b/src/helpers/contracts.ts index 28f04e803..6e3c0152a 100644 --- a/src/helpers/contracts.ts +++ b/src/helpers/contracts.ts @@ -1,9 +1,9 @@ import { ethers } from "ethers"; -import { ERC20ABI } from "../configs"; +import { abi as ERC20ABI } from "@openzeppelin/contracts/build/contracts/ERC20.json"; -export const getTokenSymbol = async (tokenAddress: string, rpcUrl: string): Promise => { +export async function getTokenSymbol(tokenAddress: string, rpcUrl: string): Promise { const provider = new ethers.providers.JsonRpcProvider(rpcUrl); const contractInstance = new ethers.Contract(tokenAddress, ERC20ABI, provider); const symbol = await contractInstance.symbol(); return symbol; -}; +} diff --git a/src/helpers/ens.ts b/src/helpers/ens.ts deleted file mode 100644 index a9344c41a..000000000 --- a/src/helpers/ens.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { ethers } from "ethers"; -import { getBotConfig } from "../bindings"; - -/** - * Gets the Ethereum address associated with an ENS (Ethereum Name Service) name - * @param ensName - The ENS name, i.e. alice12345.crypto - */ -export const resolveAddress = async (ensName: string): Promise => { - const { - payout: { rpc }, - } = getBotConfig(); - const provider = new ethers.providers.JsonRpcProvider(rpc); - const address = await provider.resolveName(ensName); - return address; -}; diff --git a/src/helpers/file.ts b/src/helpers/file.ts deleted file mode 100644 index b21905098..000000000 --- a/src/helpers/file.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { getBotContext, getLogger } from "../bindings"; - -// Get the previous file content -export async function getPreviousFileContent(owner: string, repo: string, branch: string, filePath: string) { - const logger = getLogger(); - const context = getBotContext(); - - try { - // Get the latest commit of the branch - const branchData = await context.octokit.repos.getBranch({ - owner, - repo, - branch, - }); - const latestCommitSha = branchData.data.commit.sha; - - // Get the commit details - const commitData = await context.octokit.repos.getCommit({ - owner, - repo, - ref: latestCommitSha, - }); - - // Find the file in the commit tree - const file = commitData.data.files ? commitData.data.files.find((file) => file.filename === filePath) : undefined; - if (file) { - // Retrieve the previous file content from the commit's parent - const previousCommitSha = commitData.data.parents[0].sha; - const previousCommit = await context.octokit.git.getCommit({ - owner, - repo, - commit_sha: previousCommitSha, - }); - - // Retrieve the previous file tree - const previousTreeSha = previousCommit.data.tree.sha; - const previousTree = await context.octokit.git.getTree({ - owner, - repo, - tree_sha: previousTreeSha, - recursive: "true", - }); - - // Find the previous file content in the tree - const previousFile = previousTree.data.tree.find((item) => item.path === filePath); - if (previousFile && previousFile.sha) { - // Get the previous file content - const previousFileContent = await context.octokit.git.getBlob({ - owner, - repo, - file_sha: previousFile.sha, - }); - return previousFileContent.data.content; - } - } - return ""; - } catch (error: unknown) { - logger.debug(`Error retrieving previous file content. error: ${error}`); - return ""; - } -} - -export async function getFileContent(owner: string, repo: string, branch: string, filePath: string, commitSha?: string): Promise { - const logger = getLogger(); - const context = getBotContext(); - - try { - if (!commitSha) { - // Get the latest commit of the branch - const branchData = await context.octokit.repos.getBranch({ - owner, - repo, - branch, - }); - commitSha = branchData.data.commit.sha; - } - - // Get the commit details - const commitData = await context.octokit.repos.getCommit({ - owner, - repo, - ref: commitSha, - }); - - // Find the file in the commit tree - const file = commitData.data.files ? commitData.data.files.find((file) => file.filename === filePath) : undefined; - if (file) { - // Retrieve the file tree - const tree = await context.octokit.git.getTree({ - owner, - repo, - tree_sha: commitData.data.commit.tree.sha, - recursive: "true", - }); - - // Find the previous file content in the tree - const file = tree.data.tree.find((item) => item.path === filePath); - if (file && file.sha) { - // Get the previous file content - const fileContent = await context.octokit.git.getBlob({ - owner, - repo, - file_sha: file.sha, - }); - return fileContent.data.content; - } - } - return null; - } catch (error: unknown) { - logger.debug(`Error retrieving previous file content. error: ${error}`); - return null; - } -} diff --git a/src/helpers/get-linked-pull-requests.ts b/src/helpers/get-linked-pull-requests.ts new file mode 100644 index 000000000..c265d81c8 --- /dev/null +++ b/src/helpers/get-linked-pull-requests.ts @@ -0,0 +1,49 @@ +import axios from "axios"; +import { HTMLElement, parse } from "node-html-parser"; +import { GetLinkedParams } from "../handlers/assign/check-pull-requests"; +import { Context } from "../types/context"; +interface GetLinkedResults { + organization: string; + repository: string; + number: number; + href: string; +} +export async function getLinkedPullRequests( + context: Context, + { owner, repository, issue }: GetLinkedParams +): Promise { + const logger = context.logger; + const collection = [] as GetLinkedResults[]; + const { data } = await axios.get(`https://github.com/${owner}/${repository}/issues/${issue}`); + const dom = parse(data); + const devForm = dom.querySelector("[data-target='create-branch.developmentForm']") as HTMLElement; + const linkedList = devForm.querySelectorAll(".my-1"); + if (linkedList.length === 0) { + context.logger.info(`No linked pull requests found`); + return []; + } + + for (const linked of linkedList) { + const relativeHref = linked.querySelector("a")?.attrs?.href; + if (!relativeHref) continue; + const parts = relativeHref.split("/"); + + // check if array size is at least 4 + if (parts.length < 4) continue; + + // extract the organization name and repo name from the link:(e.g. " + const organization = parts[parts.length - 4]; + const repository = parts[parts.length - 3]; + const number = Number(parts[parts.length - 1]); + const href = `https://github.com${relativeHref}`; + + if (`${organization}/${repository}` !== `${owner}/${repository}`) { + logger.info("Skipping linked pull request from another repository", href); + continue; + } + + collection.push({ organization, repository, number, href }); + } + + return collection; +} diff --git a/src/helpers/gpt.ts b/src/helpers/gpt.ts deleted file mode 100644 index d58bb7257..000000000 --- a/src/helpers/gpt.ts +++ /dev/null @@ -1,180 +0,0 @@ -import { getBotConfig, getBotContext, getLogger } from "../bindings"; -import { Payload, StreamlinedComment, UserType } from "../types"; -import { getAllIssueComments, getAllLinkedIssuesAndPullsInBody } from "../helpers"; -import OpenAI from "openai"; -import { CreateChatCompletionRequestMessage } from "openai/resources/chat"; -import { ErrorDiff } from "../utils/helpers"; - -export const sysMsg = `You are the UbiquiBot, designed to provide accurate technical answers. \n -Whenever appropriate, format your response using GitHub Flavored Markdown. Utilize tables, lists, and code blocks for clear and organized answers. \n -Do not make up answers. If you are unsure, say so. \n -Original Context exists only to provide you with additional information to the current question, use it to formulate answers. \n -Infer the context of the question from the Original Context using your best judgement. \n -All replies MUST end with "\n\n ".\n -`; - -export const gptContextTemplate = ` -You are the UbiquiBot, designed to review and analyze pull requests. -You have been provided with the spec of the issue and all linked issues or pull requests. -Using this full context, Reply in pure JSON format, with the following structure omitting irrelvant information pertaining to the specification. -You MUST provide the following structure, but you may add additional information if you deem it relevant. -Example:[ - { - "source": "issue #123" - "spec": "This is the issue spec" - "relevant": [ - { - "login": "user", - "body": "This is the relevant context" - "relevancy": "Why is this relevant to the spec?" - }, - { - "login": "other_user", - "body": "This is other relevant context" - "relevancy": "Why is this relevant to the spec?" - } - ] - }, - { - "source": "Pull #456" - "spec": "This is the pull request spec" - "relevant": [ - { - "login": "user", - "body": "This is the relevant context" - "relevancy": "Why is this relevant to the spec?" - }, - { - "login": "other_user", - "body": "This is other relevant context" - "relevancy": "Why is this relevant to the spec?" - } - ] - } -] -`; - -/** - * @notice best used alongside getAllLinkedIssuesAndPullsInBody() in helpers/issue - * @param chatHistory the conversational context to provide to GPT - * @param streamlined an array of comments in the form of { login: string, body: string } - * @param linkedPRStreamlined an array of comments in the form of { login: string, body: string } - * @param linkedIssueStreamlined an array of comments in the form of { login: string, body: string } - */ -export const decideContextGPT = async ( - chatHistory: CreateChatCompletionRequestMessage[], - streamlined: StreamlinedComment[], - linkedPRStreamlined: StreamlinedComment[], - linkedIssueStreamlined: StreamlinedComment[] -) => { - const context = getBotContext(); - const logger = getLogger(); - - const payload = context.payload as Payload; - const issue = payload.issue; - - if (!issue) { - return `Payload issue is undefined`; - } - - // standard comments - const comments = await getAllIssueComments(issue.number); - // raw so we can grab the tag - const commentsRaw = await getAllIssueComments(issue.number, "raw"); - - if (!comments) { - logger.info(`Error getting issue comments`); - return `Error getting issue comments`; - } - - // add the first comment of the issue/pull request - streamlined.push({ - login: issue.user.login, - body: issue.body, - }); - - // add the rest - comments.forEach(async (comment, i) => { - if (comment.user.type == UserType.User || commentsRaw[i].body.includes("")) { - streamlined.push({ - login: comment.user.login, - body: comment.body, - }); - } - }); - - // returns the conversational context from all linked issues and prs - const links = await getAllLinkedIssuesAndPullsInBody(issue.number); - - if (typeof links === "string") { - logger.info(`Error getting linked issues or prs: ${links}`); - return `Error getting linked issues or prs: ${links}`; - } - - linkedIssueStreamlined = links.linkedIssues; - linkedPRStreamlined = links.linkedPrs; - - chatHistory.push( - { - role: "system", - content: "This issue/Pr context: \n" + JSON.stringify(streamlined), - name: "UbiquiBot", - } as CreateChatCompletionRequestMessage, - { - role: "system", - content: "Linked issue(s) context: \n" + JSON.stringify(linkedIssueStreamlined), - name: "UbiquiBot", - } as CreateChatCompletionRequestMessage, - { - role: "system", - content: "Linked Pr(s) context: \n" + JSON.stringify(linkedPRStreamlined), - name: "UbiquiBot", - } as CreateChatCompletionRequestMessage - ); - - // we'll use the first response to determine the context of future calls - const res = await askGPT("", chatHistory); - - return res; -}; - -/** - * @notice base askGPT function - * @param question the question to ask - * @param chatHistory the conversational context to provide to GPT - */ -export const askGPT = async (question: string, chatHistory: CreateChatCompletionRequestMessage[]) => { - const logger = getLogger(); - const config = getBotConfig(); - - if (!config.ask.apiKey) { - logger.info(`No OpenAI API Key provided`); - return ErrorDiff("You must configure the `openai-api-key` property in the bot configuration in order to use AI powered features."); - } - - const openAI = new OpenAI({ - apiKey: config.ask.apiKey, - }); - - const res: OpenAI.Chat.Completions.ChatCompletion = await openAI.chat.completions.create({ - messages: chatHistory, - model: "gpt-3.5-turbo-16k", - max_tokens: config.ask.tokenLimit, - temperature: 0, - }); - - const answer = res.choices[0].message.content; - - const tokenUsage = { - output: res.usage?.completion_tokens, - input: res.usage?.prompt_tokens, - total: res.usage?.total_tokens, - }; - - if (!res) { - logger.info(`No answer found for question: ${question}`); - return `No answer found for question: ${question}`; - } - - return { answer, tokenUsage }; -}; diff --git a/src/helpers/index.ts b/src/helpers/index.ts deleted file mode 100644 index 07cf66d74..000000000 --- a/src/helpers/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -export * from "./shared"; -export * from "./issue"; -export * from "./label"; -export * from "./user"; -export * from "./permit"; -export * from "./ens"; -export * from "./contracts"; -export * from "./comment"; -export * from "./payout"; -export * from "./file"; -export * from "./similarity"; -export * from "./commit"; diff --git a/src/helpers/issue.ts b/src/helpers/issue.ts index 27ab9562d..674a7c547 100644 --- a/src/helpers/issue.ts +++ b/src/helpers/issue.ts @@ -1,796 +1,240 @@ -import { Context } from "probot"; -import { getBotConfig, getBotContext, getLogger } from "../bindings"; -import { AssignEvent, Comment, IssueType, Payload, StreamlinedComment, UserType } from "../types"; -import { checkRateLimitGit } from "../utils"; - -export const clearAllPriceLabelsOnIssue = async (): Promise => { - const context = getBotContext(); - const logger = getLogger(); - const payload = context.payload as Payload; +import { LogReturn } from "ubiquibot-logger"; +import { Context } from "../types/context"; +import { HandlerReturnValuesNoVoid } from "../types/handlers"; +import { GitHubComment } from "../types/payload"; +export async function clearAllPriceLabelsOnIssue(context: Context) { + const payload = context.payload; if (!payload.issue) return; const labels = payload.issue.labels; - const issuePrices = labels.filter((label) => label.name.toString().startsWith("Price:")); + const issuePrices = labels.filter((label) => label.name.toString().startsWith("Price: ")); if (!issuePrices.length) return; try { - await context.octokit.issues.removeLabel({ - owner: payload.repository.owner.login, - repo: payload.repository.name, - issue_number: payload.issue.number, - name: issuePrices[0].name.toString(), + await context.event.octokit.issues.removeLabel({ + ...context.event.issue(), + name: issuePrices[0].name, }); } catch (e: unknown) { - logger.debug(`Clearing all price labels failed! reason: ${e}`); + context.logger.fatal("Clearing all price labels failed!", e); } -}; +} -export const addLabelToIssue = async (labelName: string) => { - const context = getBotContext(); - const logger = getLogger(); - const payload = context.payload as Payload; +export async function addLabelToIssue(context: Context, labelName: string) { + const payload = context.payload; if (!payload.issue) { - logger.debug("Issue object is null"); - return; + throw context.logger.fatal("Issue object is null"); } try { await context.octokit.issues.addLabels({ - owner: payload.repository.owner.login, - repo: payload.repository.name, - issue_number: payload.issue.number, + ...context.event.issue(), labels: [labelName], }); } catch (e: unknown) { - logger.debug(`Adding a label to issue failed! reason: ${e}`); - } -}; - -export const listIssuesForRepo = async ( - state: "open" | "closed" | "all" = "open", - per_page = 30, - page = 1, - sort: "created" | "updated" | "comments" = "created", - direction: "desc" | "asc" = "desc" -) => { - const context = getBotContext(); - const payload = context.payload as Payload; - - const response = await context.octokit.issues.listForRepo({ - owner: payload.repository.owner.login, - repo: payload.repository.name, - state, - per_page, - page, - sort, - direction, - }); - - await checkRateLimitGit(response.headers); - - if (response.status === 200) { - return response.data; - } else { - return []; + context.logger.fatal("Adding a label to issue failed!", e); } -}; - -export const listAllIssuesForRepo = async (state: "open" | "closed" | "all" = "open") => { - const issuesArr = []; - let fetchDone = false; - const perPage = 100; - let curPage = 1; - while (!fetchDone) { - const issues = await listIssuesForRepo(state, perPage, curPage); - - // push the objects to array - issuesArr.push(...issues); - - if (issues.length < perPage) fetchDone = true; - else curPage++; - } - - return issuesArr; -}; - -export const addCommentToIssue = async (msg: string, issue_number: number) => { - const context = getBotContext(); - const logger = getLogger(); - const payload = context.payload as Payload; +} +export async function addCommentToIssue( + context: Context, + message: HandlerReturnValuesNoVoid, + issueNumber: number, + owner?: string, + repo?: string +) { + let comment = message as string; + if (message instanceof LogReturn) { + comment = message.logMessage.diff; + console.trace( + "one of the places that metadata is being serialized as an html comment. this one is unexpected and serves as a fallback" + ); + const metadataSerialized = JSON.stringify(message.metadata); + const metadataSerializedAsComment = ``; + comment = comment.concat(metadataSerializedAsComment); + } + + const payload = context.payload; try { await context.octokit.issues.createComment({ - owner: payload.repository.owner.login, - repo: payload.repository.name, - issue_number, - body: msg, - }); - } catch (e: unknown) { - logger.debug(`Adding a comment failed! reason: ${e}`); - } -}; - -export const updateCommentOfIssue = async (msg: string, issue_number: number, reply_to: Comment) => { - const context = getBotContext(); - const logger = getLogger(); - const payload = context.payload as Payload; - - try { - const appResponse = await context.octokit.apps.getAuthenticated(); - const { name, slug } = appResponse.data; - logger.info(`App name/slug ${name}/${slug}`); - - const editCommentBy = `${slug}[bot]`; - logger.info(`Bot slug: ${editCommentBy}`); - - const comments = await context.octokit.issues.listComments({ - owner: payload.repository.owner.login, - repo: payload.repository.name, - issue_number: issue_number, - since: reply_to.created_at, - per_page: 30, - }); - - const comment_to_edit = comments.data.find((comment) => { - return comment?.user?.login == editCommentBy && comment.id > reply_to.id; - }); - - if (comment_to_edit) { - logger.info(`For comment_id: ${reply_to.id} found comment_to_edit with id: ${comment_to_edit.id}`); - await context.octokit.issues.updateComment({ - owner: payload.repository.owner.login, - repo: payload.repository.name, - comment_id: comment_to_edit.id, - body: msg, - }); - } else { - logger.info(`Falling back to add comment. Couldn't find response to edit for comment_id: ${reply_to.id}`); - await addCommentToIssue(msg, issue_number); - } - } catch (e: unknown) { - logger.debug(`Updating a comment failed! reason: ${e}`); - } -}; - -export const upsertCommentToIssue = async (issue_number: number, comment: string, action: string, reply_to?: Comment) => { - if (action == "edited" && reply_to) { - await updateCommentOfIssue(comment, issue_number, reply_to); - } else { - await addCommentToIssue(comment, issue_number); - } -}; - -export const getCommentsOfIssue = async (issue_number: number): Promise => { - const context = getBotContext(); - const logger = getLogger(); - const payload = context.payload as Payload; - - let result: Comment[] = []; - try { - const response = await context.octokit.rest.issues.listComments({ - owner: payload.repository.owner.login, - repo: payload.repository.name, - issue_number, - }); - - if (response.data) result = response.data as Comment[]; - } catch (e: unknown) { - logger.debug(`Listing issue comments failed! reason: ${e}`); - } - - return result; -}; - -export const getIssueDescription = async (issue_number: number, format: "raw" | "html" | "text" = "raw"): Promise => { - const context = getBotContext(); - const logger = getLogger(); - const payload = context.payload as Payload; + owner: owner ?? payload.repository.owner.login, + repo: repo ?? payload.repository.name, + issue_number: issueNumber, + body: comment, + }); + } catch (e: unknown) { + context.logger.fatal("Adding a comment failed!", e); + } +} + +// async function upsertLastCommentToIssue(context: Context, issueNumber: number, commentBody: string) { +// try { +// const comments = await getAllIssueComments(context, issueNumber); + +// if (comments.length > 0 && comments[comments.length - 1].body !== commentBody) +// await addCommentToIssue(context, commentBody, issueNumber); +// } catch (e: unknown) { +// context.logger.fatal("Upserting last comment failed!", e); +// } +// } + +// async function getIssueDescription( +// context: Context, +// issueNumber: number, +// format: "raw" | "html" | "text" = "raw" +// ): Promise { +// const payload = context.payload; + +// try { +// const response = await context.octokit.rest.issues.get({ +// owner: payload.repository.owner.login, +// repo: payload.repository.name, +// issue_number: issueNumber, +// mediaType: { +// format, +// }, +// }); + +// let result = response.data.body; + +// if (format === "html") { +// result = response.data.body_html; +// } else if (format === "text") { +// result = response.data.body_text; +// } + +// return result as string; +// } catch (e: unknown) { +// throw context.logger.fatal("Fetching issue description failed!", e); +// } +// } + +export async function getAllIssueComments( + context: Context, + issueNumber: number, + format: "raw" | "html" | "text" | "full" = "raw" +): Promise { + const payload = context.payload; - let result = ""; try { - const response = await context.octokit.rest.issues.get({ + const comments = (await context.octokit.paginate(context.octokit.rest.issues.listComments, { owner: payload.repository.owner.login, repo: payload.repository.name, - issue_number: issue_number, + issue_number: issueNumber, + per_page: 100, mediaType: { format, }, - }); - - await checkRateLimitGit(response?.headers); - switch (format) { - case "raw": - result = response.data.body ?? ""; - break; - case "html": - result = response.data.body_html ?? ""; - break; - case "text": - result = response.data.body_text ?? ""; - break; - } - } catch (e: unknown) { - logger.debug(`Getting issue description failed! reason: ${e}`); - } - return result; -}; - -export const getAllIssueComments = async (issue_number: number, format: "raw" | "html" | "text" | "full" = "raw"): Promise => { - const context = getBotContext(); - const payload = context.payload as Payload; - - const result: Comment[] = []; - let shouldFetch = true; - let page_number = 1; - try { - while (shouldFetch) { - const response = await context.octokit.rest.issues.listComments({ - owner: payload.repository.owner.login, - repo: payload.repository.name, - issue_number: issue_number, - per_page: 100, - page: page_number, - mediaType: { - format, - }, - }); - - await checkRateLimitGit(response?.headers); - - // Fixing infinite loop here, it keeps looping even when its an empty array - if (response?.data?.length > 0) { - response.data.forEach((item) => result?.push(item as Comment)); - page_number++; - } else { - shouldFetch = false; - } - } - } catch (e: unknown) { - shouldFetch = false; - } - - return result; -}; - -export const getAllIssueAssignEvents = async (issue_number: number): Promise => { - const context = getBotContext(); - const payload = context.payload as Payload; - - const result: AssignEvent[] = []; - let shouldFetch = true; - let page_number = 1; - try { - while (shouldFetch) { - const response = await context.octokit.rest.issues.listEvents({ - owner: payload.repository.owner.login, - repo: payload.repository.name, - issue_number: issue_number, - per_page: 100, - page: page_number, - }); - - await checkRateLimitGit(response?.headers); - - // Fixing infinite loop here, it keeps looping even when its an empty array - if (response?.data?.length > 0) { - response.data.filter((item) => item.event === "assigned").forEach((item) => result?.push(item as AssignEvent)); - page_number++; - } else { - shouldFetch = false; - } - } + })) as GitHubComment[]; + return comments; } catch (e: unknown) { - shouldFetch = false; + context.logger.fatal("Fetching all issue comments failed!", e); + return []; } +} - return result.sort((a, b) => (new Date(a.created_at) > new Date(b.created_at) ? -1 : 1)); -}; - -export const wasIssueReopened = async (issue_number: number): Promise => { - const context = getBotContext(); - const payload = context.payload as Payload; +export async function isUserAdminOrBillingManager( + context: Context, + username: string +): Promise<"admin" | "billing_manager" | false> { + const payload = context.payload; + const isAdmin = await checkIfIsAdmin(); + if (isAdmin) return "admin"; - let shouldFetch = true; - let page_number = 1; - try { - while (shouldFetch) { - const response = await context.octokit.rest.issues.listEvents({ - owner: payload.repository.owner.login, - repo: payload.repository.name, - issue_number: issue_number, - per_page: 100, - page: page_number, - }); - - await checkRateLimitGit(response?.headers); - - // Fixing infinite loop here, it keeps looping even when its an empty array - if (response?.data?.length > 0) { - if (response.data.filter((item) => item.event === "reopened").length > 0) return true; - page_number++; - } else { - shouldFetch = false; - } - } - } catch (e: unknown) { - shouldFetch = false; - } + const isBillingManager = await checkIfIsBillingManager(); + if (isBillingManager) return "billing_manager"; return false; -}; - -export const removeAssignees = async (issue_number: number, assignees: string[]): Promise => { - const context = getBotContext(); - const logger = getLogger(); - const payload = context.payload as Payload; - try { - await context.octokit.rest.issues.removeAssignees({ - owner: payload.repository.owner.login, - repo: payload.repository.name, - issue_number, - assignees, - }); - } catch (e: unknown) { - logger.debug(`Removing assignees failed! reason: ${e}`); - } -}; - -export const checkUserPermissionForRepoAndOrg = async (username: string, context: Context): Promise => { - const permissionForRepo = await checkUserPermissionForRepo(username, context); - const permissionForOrg = await checkUserPermissionForOrg(username, context); - const userPermission = await getUserPermission(username, context); - - return permissionForOrg || permissionForRepo || userPermission === "admin" || userPermission === "billing_manager"; -}; - -export const checkUserPermissionForRepo = async (username: string, context: Context): Promise => { - const logger = getLogger(); - const payload = context.payload as Payload; - - try { - const res = await context.octokit.rest.repos.checkCollaborator({ + async function checkIfIsAdmin() { + const response = await context.octokit.rest.repos.getCollaboratorPermissionLevel({ owner: payload.repository.owner.login, repo: payload.repository.name, username, }); - - return res.status === 204; - } catch (e: unknown) { - logger.error(`Checking if user permisson for repo failed! reason: ${e}`); - return false; + if (response.data.permission === "admin") { + return true; + } else { + return false; + } } -}; - -export const checkUserPermissionForOrg = async (username: string, context: Context): Promise => { - const logger = getLogger(); - const payload = context.payload as Payload; - if (!payload.organization) return false; - try { - await context.octokit.rest.orgs.checkMembershipForUser({ + async function checkIfIsBillingManager() { + if (!payload.organization) throw context.logger.fatal(`No organization found in payload!`); + const { data: membership } = await context.octokit.rest.orgs.getMembershipForUser({ org: payload.organization.login, - username, + username: payload.repository.owner.login, }); - // skipping status check due to type error of checkMembershipForUser function of octokit - return true; - } catch (e: unknown) { - logger.error(`Checking if user permisson for org failed! reason: ${e}`); - return false; - } -}; - -export const getUserPermission = async (username: string, context: Context): Promise => { - const logger = getLogger(); - const payload = context.payload as Payload; - try { - const response = await context.octokit.rest.repos.getCollaboratorPermissionLevel({ - owner: payload.repository.owner.login, - repo: payload.repository.name, - username, - }); - - if (response.status === 200) { - return response.data.permission; + console.trace(membership); + if (membership.role === "billing_manager") { + return true; } else { - return ""; + return false; } - } catch (e: unknown) { - logger.debug(`Checking if user is admin failed! reason: ${e}`); - return ""; } -}; - -export const addAssignees = async (issue_number: number, assignees: string[]): Promise => { - const context = getBotContext(); - const logger = getLogger(); - const payload = context.payload as Payload; +} +export async function addAssignees(context: Context, issue: number, assignees: string[]) { + const payload = context.payload; try { await context.octokit.rest.issues.addAssignees({ owner: payload.repository.owner.login, repo: payload.repository.name, - issue_number, + issue_number: issue, assignees, }); } catch (e: unknown) { - logger.debug(`Adding assignees failed! reason: ${e}`); - } -}; - -export const deleteLabel = async (label: string): Promise => { - const context = getBotContext(); - const logger = getLogger(); - const payload = context.payload as Payload; - - try { - const response = await context.octokit.rest.search.issuesAndPullRequests({ - q: `repo:${payload.repository.owner.login}/${payload.repository.name} label:"${label}" state:open`, - }); - if (response.data.items.length === 0) { - //remove label - await context.octokit.rest.issues.deleteLabel({ - owner: payload.repository.owner.login, - repo: payload.repository.name, - name: label, - }); - } - } catch (e: unknown) { - logger.debug(`Label deletion failed! reason: ${e}`); - } -}; - -export const removeLabel = async (name: string) => { - const context = getBotContext(); - const logger = getLogger(); - const payload = context.payload as Payload; - if (!payload.issue) { - logger.debug("Invalid issue object"); - return; - } - - try { - await context.octokit.issues.removeLabel({ - owner: payload.repository.owner.login, - repo: payload.repository.name, - issue_number: payload.issue.number, - name: name, - }); - } catch (e: unknown) { - logger.debug(`Label removal failed! reason: ${e}`); + context.logger.fatal("Adding assignees failed!", e); } -}; - -export const getAllPullRequests = async (context: Context, state: "open" | "closed" | "all" = "open") => { - const prArr = []; - let fetchDone = false; - const perPage = 100; - let curPage = 1; - while (!fetchDone) { - const prs = await getPullRequests(context, state, perPage, curPage); +} - // push the objects to array - prArr.push(...prs); +export async function getAllPullRequests(context: Context, state: "open" | "closed" | "all" = "open") { + const payload = context.payload; - if (prs.length < perPage) fetchDone = true; - else curPage++; - } - return prArr; -}; -// Use `context.octokit.rest` to get the pull requests for the repository -export const getPullRequests = async (context: Context, state: "open" | "closed" | "all" = "open", per_page: number, page: number) => { - const logger = getLogger(); - const payload = context.payload as Payload; try { - const { data: pulls } = await context.octokit.rest.pulls.list({ + const pulls = await context.octokit.paginate(context.octokit.rest.pulls.list, { owner: payload.repository.owner.login, repo: payload.repository.name, state, - per_page, - page, + per_page: 100, }); return pulls; - } catch (e: unknown) { - logger.debug(`Fetching pull requests failed! reason: ${e}`); - return []; - } -}; - -export const closePullRequest = async (pull_number: number) => { - const context = getBotContext(); - const payload = context.payload as Payload; - const logger = getLogger(); - try { - await getBotContext().octokit.rest.pulls.update({ - owner: payload.repository.owner.login, - repo: payload.repository.name, - pull_number, - state: "closed", - }); - } catch (e: unknown) { - logger.debug(`Closing pull requests failed! reason: ${e}`); - } -}; - -export const getAllPullRequestReviews = async (context: Context, pull_number: number, format: "raw" | "html" | "text" | "full" = "raw") => { - const prArr = []; - let fetchDone = false; - const perPage = 30; - let curPage = 1; - while (!fetchDone) { - const prs = await getPullRequestReviews(context, pull_number, perPage, curPage, format); - - // push the objects to array - prArr.push(...prs); - - if (prs.length < perPage) fetchDone = true; - else curPage++; - } - return prArr; -}; - -export const getPullRequestReviews = async ( - context: Context, - pull_number: number, - per_page: number, - page: number, - format: "raw" | "html" | "text" | "full" = "raw" -) => { - const logger = getLogger(); - const payload = context.payload as Payload; - try { - const { data: reviews } = await context.octokit.rest.pulls.listReviews({ - owner: payload.repository.owner.login, - repo: payload.repository.name, - pull_number, - per_page, - page, - mediaType: { - format, - }, - }); - return reviews; - } catch (e: unknown) { - logger.debug(`Fetching pull request reviews failed! reason: ${e}`); + } catch (err: unknown) { + context.logger.fatal("Fetching all pull requests failed!", err); return []; } -}; - -export const getReviewRequests = async (context: Context, pull_number: number, owner: string, repo: string) => { - const logger = getLogger(); - try { - const response = await context.octokit.pulls.listRequestedReviewers({ - owner: owner, - repo: repo, - pull_number: pull_number, - }); - return response.data; - } catch (e: unknown) { - logger.error(`Error: could not get requested reviewers, reason: ${e}`); - return null; - } -}; -// Get issues by issue number -export const getIssueByNumber = async (context: Context, issue_number: number) => { - const logger = getLogger(); - const payload = context.payload as Payload; - try { - const { data: issue } = await context.octokit.rest.issues.get({ - owner: payload.repository.owner.login, - repo: payload.repository.name, - issue_number, - }); - return issue; - } catch (e: unknown) { - logger.debug(`Fetching issue failed! reason: ${e}`); - return; - } -}; - -export const getPullByNumber = async (context: Context, pull_number: number) => { - const logger = getLogger(); - const payload = context.payload as Payload; - try { - const { data: pull } = await context.octokit.rest.pulls.get({ owner: payload.repository.owner.login, repo: payload.repository.name, pull_number }); - return pull; - } catch (error) { - logger.debug(`Fetching pull failed! reason: ${error}`); - return; - } -}; +} + +// async function getReviewRequests(context: Context, pullNumber: number, owner: string, repo: string) { +// try { +// const response = await context.octokit.pulls.listRequestedReviewers({ +// owner: owner, +// repo: repo, +// pull_number: pullNumber, +// }); +// return response.data; +// } catch (err: unknown) { +// context.logger.fatal("Could not get requested reviewers", err); +// return null; +// } +// } // Get issues assigned to a username -export const getAssignedIssues = async (username: string) => { - const issuesArr = []; - let fetchDone = false; - const perPage = 30; - let curPage = 1; - while (!fetchDone) { - const issues = await listIssuesForRepo(IssueType.OPEN, perPage, curPage); - - // push the objects to array - issuesArr.push(...issues); - - if (issues.length < perPage) fetchDone = true; - else curPage++; - } - - // get only issues assigned to username - const assigned_issues = issuesArr.filter((issue) => !issue.pull_request && issue.assignee && issue.assignee.login === username); - - return assigned_issues; -}; - -export const getOpenedPullRequestsForAnIssue = async (issueNumber: number, userName: string) => { - const pulls = await getOpenedPullRequests(userName); - - return pulls.filter((pull) => { - if (!pull.body) return false; - const issues = pull.body.match(/#(\d+)/gi); - - if (!issues) return false; - const linkedIssueNumbers = Array.from(new Set(issues.map((issue) => issue.replace("#", "")))); - if (linkedIssueNumbers.indexOf(`${issueNumber}`) !== -1) return true; - return false; - }); -}; +// async function getOpenedPullRequestsForAnIssue(context: Context, issueNumber: number, userName: string) { +// const pulls = await getOpenedPullRequests(context, userName); -export const getOpenedPullRequests = async (username: string) => { - const context = getBotContext(); - const prs = await getAllPullRequests(context, "open"); - return prs.filter((pr) => !pr.draft && (pr.user?.login === username || !username)); -}; +// return pulls.filter((pull) => { +// if (!pull.body) return false; +// const issues = pull.body.match(/#(\d+)/gi); -export const getCommitsOnPullRequest = async (pullNumber: number) => { - const logger = getLogger(); - const context = getBotContext(); - const payload = getBotContext().payload as Payload; - try { - const { data: commits } = await context.octokit.rest.pulls.listCommits({ - owner: payload.repository.owner.login, - repo: payload.repository.name, - pull_number: pullNumber, - }); - return commits; - } catch (e: unknown) { - logger.debug(`Fetching pull request commits failed! reason: ${e}`); - return []; - } -}; - -export const getAvailableOpenedPullRequests = async (username: string) => { - const context = getBotContext(); - const { - unassign: { timeRangeForMaxIssue, timeRangeForMaxIssueEnabled }, - } = await getBotConfig(); - if (!timeRangeForMaxIssueEnabled) return []; - - const opened_prs = await getOpenedPullRequests(username); - - const result = []; - - for (let i = 0; i < opened_prs.length; i++) { - const pr = opened_prs[i]; - const reviews = await getAllPullRequestReviews(context, pr.number); - - if (reviews.length > 0) { - const approvedReviews = reviews.find((review) => review.state === "APPROVED"); - if (approvedReviews) result.push(pr); - } - - if (reviews.length === 0 && (new Date().getTime() - new Date(pr.created_at).getTime()) / (1000 * 60 * 60) >= timeRangeForMaxIssue) { - result.push(pr); - } - } - return result; -}; - -// Strips out all links from the body of an issue or pull request and fetches the conversational context from each linked issue or pull request -export const getAllLinkedIssuesAndPullsInBody = async (issueNumber: number) => { - const context = getBotContext(); - const logger = getLogger(); - - const issue = await getIssueByNumber(context, issueNumber); +// if (!issues) return false; - if (!issue) { - return `Failed to fetch using issueNumber: ${issueNumber}`; - } - - if (!issue.body) { - return `No body found for issue: ${issueNumber}`; - } - - const body = issue.body; - const linkedPRStreamlined: StreamlinedComment[] = []; - const linkedIssueStreamlined: StreamlinedComment[] = []; - - const regex = /https:\/\/github\.com\/[^/\s]+\/[^/\s]+\/(issues|pull)\/(\d+)/gi; - const matches = body.match(regex); - - if (matches) { - try { - const linkedIssues: number[] = []; - const linkedPrs: number[] = []; - - // this finds refs via all patterns: #, full url or [#25](url.to.issue) - const issueRef = issue.body.match(/(#(\d+)|https:\/\/github\.com\/[^/\s]+\/[^/\s]+\/(issues|pull)\/(\d+))/gi); - - // if they exist, strip out the # or the url and push them to their arrays - if (issueRef) { - issueRef.forEach((issue) => { - if (issue.includes("#")) { - linkedIssues.push(Number(issue.slice(1))); - } else { - if (issue.split("/")[5] == "pull") { - linkedPrs.push(Number(issue.split("/")[6])); - } else linkedIssues.push(Number(issue.split("/")[6])); - } - }); - } else { - logger.info(`No linked issues or prs found`); - } - - if (linkedPrs.length > 0) { - for (let i = 0; i < linkedPrs.length; i++) { - const pr = await getPullByNumber(context, linkedPrs[i]); - if (pr) { - linkedPRStreamlined.push({ - login: "system", - body: `=============== Pull Request #${pr.number}: ${pr.title} + ===============\n ${pr.body}}`, - }); - const prComments = await getAllIssueComments(linkedPrs[i]); - const prCommentsRaw = await getAllIssueComments(linkedPrs[i], "raw"); - prComments.forEach(async (comment, i) => { - if (comment.user.type == UserType.User || prCommentsRaw[i].body.includes("")) { - linkedPRStreamlined.push({ - login: comment.user.login, - body: comment.body, - }); - } - }); - } - } - } - - if (linkedIssues.length > 0) { - for (let i = 0; i < linkedIssues.length; i++) { - const issue = await getIssueByNumber(context, linkedIssues[i]); - if (issue) { - linkedIssueStreamlined.push({ - login: "system", - body: `=============== Issue #${issue.number}: ${issue.title} + ===============\n ${issue.body} `, - }); - const issueComments = await getAllIssueComments(linkedIssues[i]); - const issueCommentsRaw = await getAllIssueComments(linkedIssues[i], "raw"); - issueComments.forEach(async (comment, i) => { - if (comment.user.type == UserType.User || issueCommentsRaw[i].body.includes("")) { - linkedIssueStreamlined.push({ - login: comment.user.login, - body: comment.body, - }); - } - }); - } - } - } - - return { - linkedIssues: linkedIssueStreamlined, - linkedPrs: linkedPRStreamlined, - }; - } catch (error) { - logger.info(`Error getting linked issues or prs: ${error}`); - return `Error getting linked issues or prs: ${error}`; - } - } else { - logger.info(`No matches found`); - return { - linkedIssues: [], - linkedPrs: [], - }; - } -}; +// const linkedIssueNumbers = Array.from(new Set(issues.map((issue) => issue.replace("#", "")))); +// if (linkedIssueNumbers.indexOf(`${issueNumber}`) !== -1) return true; +// return false; +// }); +// } diff --git a/src/helpers/label.ts b/src/helpers/label.ts index c9bba061f..69af46233 100644 --- a/src/helpers/label.ts +++ b/src/helpers/label.ts @@ -1,121 +1,38 @@ -import { Context } from "probot"; -import { getBotConfig, getBotContext, getLogger } from "../bindings"; -import { COLORS } from "../configs"; -import { calculateTaskPrice } from "../handlers"; -import { Label, Payload } from "../types"; -import { deleteLabel } from "./issue"; -import { calculateWeight } from "../helpers"; +import { Context } from "../types/context"; +import { Label } from "../types/label"; +import { GitHubPayload } from "../types/payload"; -export const listLabelsForRepo = async (per_page?: number, page?: number): Promise => { - const context = getBotContext(); - const payload = context.payload as Payload; +// cspell:disable +const COLORS = { default: "ededed", price: "1f883d" }; +// cspell:enable - const res = await context.octokit.rest.issues.listLabelsForRepo({ +export async function listLabelsForRepo(context: Context): Promise { + const payload = context.event.payload as GitHubPayload; + + const res = await context.event.octokit.rest.issues.listLabelsForRepo({ owner: payload.repository.owner.login, repo: payload.repository.name, - per_page: per_page ?? 100, - page: page ?? 1, + per_page: 100, + page: 1, }); if (res.status === 200) { return res.data; } - throw new Error(`Failed to fetch lists of labels, code: ${res.status}`); -}; - -export const createLabel = async (name: string, labelType?: keyof typeof COLORS): Promise => { - const context = getBotContext(); - const logger = getLogger(); - const payload = context.payload as Payload; - try { - await context.octokit.rest.issues.createLabel({ - owner: payload.repository.owner.login, - repo: payload.repository.name, - name, - color: COLORS[labelType ?? "default"], - }); - } catch (err: unknown) { - logger.debug(`Error creating a label: ${name}. Is it already there?`); - } -}; - -export const getLabel = async (name: string): Promise => { - const context = getBotContext(); - const logger = getLogger(); - const payload = context.payload as Payload; - try { - const res = await context.octokit.rest.issues.getLabel({ - owner: payload.repository.owner.login, - repo: payload.repository.name, - name, - }); - return res.status === 200 ? true : false; - } catch (err: unknown) { - logger.debug(`Error creating a label: ${name}. Is it already there?`); - } - - return false; -}; - -// Function to update labels based on the base rate difference -export const updateLabelsFromBaseRate = async (owner: string, repo: string, context: Context, labels: Label[], previousBaseRate: number) => { - const logger = getLogger(); - const config = getBotConfig(); - - const newLabels: string[] = []; - const previousLabels: string[] = []; - - for (const timeLabel of config.price.timeLabels) { - for (const priorityLabel of config.price.priorityLabels) { - const targetPrice = calculateTaskPrice(calculateWeight(timeLabel), calculateWeight(priorityLabel), config.price.baseMultiplier); - const targetPriceLabel = `Price: ${targetPrice} USD`; - newLabels.push(targetPriceLabel); - - const previousTargetPrice = calculateTaskPrice(calculateWeight(timeLabel), calculateWeight(priorityLabel), previousBaseRate); - const previousTargetPriceLabel = `Price: ${previousTargetPrice} USD`; - previousLabels.push(previousTargetPriceLabel); - } - } + throw context.logger.fatal("Failed to fetch lists of labels", { status: res.status }); +} - const uniqueNewLabels = [...new Set(newLabels)]; - const uniquePreviousLabels = [...new Set(previousLabels)]; - - const labelsFiltered: string[] = labels.map((obj) => obj["name"]); - const usedLabels = uniquePreviousLabels.filter((value: string) => labelsFiltered.includes(value)); - - logger.debug(`${usedLabels.length} previous labels used on issues`); - - try { - for (const label of usedLabels) { - if (label.startsWith("Price: ")) { - const labelData = labels.find((obj) => obj["name"] === label) as Label; - const index = uniquePreviousLabels.findIndex((obj) => obj === label); - - const exist = await getLabel(uniqueNewLabels[index]); - if (exist) { - // we have to delete first - logger.debug(`Deleted ${uniqueNewLabels[index]}, updating it`); - await deleteLabel(uniqueNewLabels[index]); - } - - // we can update safely - await context.octokit.issues.updateLabel({ - owner, - repo, - name: label, - new_name: uniqueNewLabels[index], - color: labelData.color, - description: labelData.description, - headers: { - "X-GitHub-Api-Version": "2022-11-28", - }, - }); - - logger.debug(`Label updated: ${label} -> ${uniqueNewLabels[index]}`); - } - } - } catch (error: unknown) { - logger.error(`Error updating labels, error: ${error}`); - } -}; +export async function createLabel( + context: Context, + name: string, + labelType = "default" as keyof typeof COLORS +): Promise { + const payload = context.event.payload as GitHubPayload; + await context.event.octokit.rest.issues.createLabel({ + owner: payload.repository.owner.login, + repo: payload.repository.name, + name, + color: COLORS[labelType], + }); +} diff --git a/src/helpers/parser.ts b/src/helpers/parser.ts deleted file mode 100644 index 42821a5b5..000000000 --- a/src/helpers/parser.ts +++ /dev/null @@ -1,93 +0,0 @@ -import axios from "axios"; -import { HTMLElement, parse } from "node-html-parser"; -import { getPullByNumber } from "./issue"; -import { getBotContext, getLogger } from "../bindings"; - -interface GitParser { - owner: string; - repo: string; - issue_number?: number; - pull_number?: number; -} - -export interface LinkedPR { - prOrganization: string; - prRepository: string; - prNumber: number; - prHref: string; -} - -export const gitLinkedIssueParser = async ({ owner, repo, pull_number }: GitParser) => { - const logger = getLogger(); - try { - const { data } = await axios.get(`https://github.com/${owner}/${repo}/pull/${pull_number}`); - const dom = parse(data); - const devForm = dom.querySelector("[data-target='create-branch.developmentForm']") as HTMLElement; - const linkedIssues = devForm.querySelectorAll(".my-1"); - - if (linkedIssues.length === 0) { - return null; - } - - const issueUrl = linkedIssues[0].querySelector("a")?.attrs?.href || ""; - return issueUrl; - } catch (error) { - logger.error(`${JSON.stringify(error)}`); - return null; - } -}; - -export const gitLinkedPrParser = async ({ owner, repo, issue_number }: GitParser): Promise => { - const logger = getLogger(); - try { - const prData = []; - const { data } = await axios.get(`https://github.com/${owner}/${repo}/issues/${issue_number}`); - const dom = parse(data); - const devForm = dom.querySelector("[data-target='create-branch.developmentForm']") as HTMLElement; - const linkedPRs = devForm.querySelectorAll(".my-1"); - if (linkedPRs.length === 0) return []; - - for (const linkedPr of linkedPRs) { - const prUrl = linkedPr.querySelector("a")?.attrs?.href; - - if (!prUrl) continue; - - const parts = prUrl.split("/"); - - // check if array size is at least 4 - if (parts.length < 4) continue; - - // extract the organization name and repo name from the link:(e.g. " - const prOrganization = parts[parts.length - 4]; - const prRepository = parts[parts.length - 3]; - const prNumber = Number(parts[parts.length - 1]); - const prHref = `https://github.com${prUrl}`; - - if (`${prOrganization}/${prRepository}` !== `${owner}/${repo}`) continue; - - prData.push({ prOrganization, prRepository, prNumber, prHref }); - } - - return prData; - } catch (error) { - logger.error(`${JSON.stringify(error)}`); - return []; - } -}; - -export const getLatestPullRequest = async (prs: LinkedPR[]) => { - const context = getBotContext(); - let linkedPullRequest = null; - for (const _pr of prs) { - if (Number.isNaN(_pr.prNumber)) return null; - const pr = await getPullByNumber(context, _pr.prNumber); - if (!pr || !pr.merged) continue; - - if (!linkedPullRequest) linkedPullRequest = pr; - else if (linkedPullRequest.merged_at && pr.merged_at && new Date(linkedPullRequest.merged_at) < new Date(pr.merged_at)) { - linkedPullRequest = pr; - } - } - - return linkedPullRequest; -}; diff --git a/src/helpers/payout.ts b/src/helpers/payout.ts index 4ec44ebaa..e40baf047 100644 --- a/src/helpers/payout.ts +++ b/src/helpers/payout.ts @@ -11,14 +11,10 @@ * 2. Gelato network should support the added payment token (https://docs.gelato.network/developer-services/relay/api#oracles-chainid-paymenttokens) */ -import { Static } from "@sinclair/typebox"; -import { DEFAULT_RPC_ENDPOINT } from "../configs"; -import { PayoutConfigSchema } from "../types"; - // available tokens for payouts const PAYMENT_TOKEN_PER_NETWORK: Record = { "1": { - rpc: DEFAULT_RPC_ENDPOINT, + rpc: "https://rpc-bot.ubq.fi/v1/mainnet", token: "0x6B175474E89094C44Da98b954EedeAC495271d0F", // DAI }, "100": { @@ -27,14 +23,7 @@ const PAYMENT_TOKEN_PER_NETWORK: Record }, }; -type PayoutConfigPartial = Omit, "evmNetworkId" | "privateKey" | "permitBaseUrl">; - -/** - * Returns payout config for a particular network - * @param evmNetworkId network id - * @returns RPC URL and payment token - */ -export const getPayoutConfigByNetworkId = (evmNetworkId: number): PayoutConfigPartial => { +export function getPayoutConfigByNetworkId(evmNetworkId: number) { const paymentToken = PAYMENT_TOKEN_PER_NETWORK[evmNetworkId.toString()]; if (!paymentToken) { throw new Error(`No config setup for evmNetworkId: ${evmNetworkId}`); @@ -44,4 +33,4 @@ export const getPayoutConfigByNetworkId = (evmNetworkId: number): PayoutConfigPa rpc: paymentToken.rpc, paymentToken: paymentToken.token, }; -}; +} diff --git a/src/helpers/permit.ts b/src/helpers/permit.ts deleted file mode 100644 index fb6304693..000000000 --- a/src/helpers/permit.ts +++ /dev/null @@ -1,143 +0,0 @@ -import { MaxUint256, PermitTransferFrom, SignatureTransfer } from "@uniswap/permit2-sdk"; -import { BigNumber, ethers } from "ethers"; -import { getBotConfig, getBotContext, getLogger } from "../bindings"; -import { keccak256, toUtf8Bytes } from "ethers/lib/utils"; -import Decimal from "decimal.js"; -import { Payload } from "../types"; -import { savePermit } from "../adapters/supabase"; - -const PERMIT2_ADDRESS = "0x000000000022D473030F116dDEE9F6B43aC78BA3"; // same on all networks - -export type Permit = { - id: number; - createdAt: Date; - organizationId: number | null; - repositoryId: number; - issueId: number; - evmNetworkId: number; - contributorId: number; - contributorWallet: string; - tokenAddress: string; - payoutAmount: string; - nonce: string; - deadline: string; - signature: string; - partnerWallet: string; -}; - -export type InsertPermit = Omit; - -type TxData = { - permit: { - permitted: { - token: string; - amount: string; - }; - nonce: string; - deadline: string; - }; - transferDetails: { - to: string; - requestedAmount: string; - }; - owner: string; - signature: string; -}; - -/** - * Generates permit2 signature data with `spender` and `amountInETH` - * - * @param spender The recipient address we're going to send tokens - * @param amountInETH The token amount in ETH - * - * @returns Permit2 url including base64 encoded data - */ -export const generatePermit2Signature = async ( - spender: string, - amountInEth: Decimal, - identifier: string, - userId = "" -): Promise<{ txData: TxData; payoutUrl: string }> => { - const { - payout: { evmNetworkId, privateKey, permitBaseUrl, rpc, paymentToken }, - } = getBotConfig(); - const logger = getLogger(); - const provider = new ethers.providers.JsonRpcProvider(rpc); - const adminWallet = new ethers.Wallet(privateKey, provider); - - const permitTransferFromData: PermitTransferFrom = { - permitted: { - // token we are permitting to be transferred - token: paymentToken, - // amount we are permitting to be transferred - amount: ethers.utils.parseUnits(amountInEth.toString(), 18), - }, - // who can transfer the tokens - spender: spender, - nonce: BigNumber.from(keccak256(toUtf8Bytes(identifier + userId))), - // signature deadline - deadline: MaxUint256, - }; - - const { domain, types, values } = SignatureTransfer.getPermitData(permitTransferFromData, PERMIT2_ADDRESS, evmNetworkId); - - const signature = await adminWallet._signTypedData(domain, types, values); - const txData: TxData = { - permit: { - permitted: { - token: permitTransferFromData.permitted.token, - amount: permitTransferFromData.permitted.amount.toString(), - }, - nonce: permitTransferFromData.nonce.toString(), - deadline: permitTransferFromData.deadline.toString(), - }, - transferDetails: { - to: permitTransferFromData.spender, - requestedAmount: permitTransferFromData.permitted.amount.toString(), - }, - owner: adminWallet.address, - signature: signature, - }; - - const base64encodedTxData = Buffer.from(JSON.stringify(txData)).toString("base64"); - - const payoutUrl = `${permitBaseUrl}?claim=${base64encodedTxData}&network=${evmNetworkId}`; - logger.info(`Generated permit2 url: ${payoutUrl}`); - return { txData, payoutUrl }; -}; - -export const savePermitToDB = async (contributorId: number, txData: TxData): Promise => { - const logger = getLogger(); - - const context = getBotContext(); - const payload = context.payload as Payload; - const issue = payload.issue; - const repository = payload.repository; - const organization = payload.organization; - if (!issue || !repository) { - logger.error("Cannot save permit to DB, missing issue, repository or organization"); - throw new Error("Cannot save permit to DB, missing issue, repository or organization"); - } - - const { payout } = getBotConfig(); - const { evmNetworkId } = payout; - - const permit: InsertPermit = { - organizationId: organization?.id ?? null, - repositoryId: repository?.id, - issueId: issue?.id, - evmNetworkId: evmNetworkId, - contributorId: contributorId, - tokenAddress: txData.permit.permitted.token, - payoutAmount: txData.permit.permitted.amount, - contributorWallet: txData.transferDetails.to, - nonce: txData.permit.nonce, - deadline: txData.permit.deadline, - signature: txData.signature, - partnerWallet: txData.owner, - }; - - const savedPermit = await savePermit(permit); - logger.info(`Saved permit to DB: ${JSON.stringify(savedPermit)}`); - return savedPermit; -}; diff --git a/src/helpers/shared.ts b/src/helpers/shared.ts index 86e1599eb..650342f01 100644 --- a/src/helpers/shared.ts +++ b/src/helpers/shared.ts @@ -1,46 +1,52 @@ import ms from "ms"; -import { getBotContext } from "../bindings"; -import { LabelItem, Payload, UserType } from "../types"; + +import { Context as ProbotContext } from "probot"; +import { Label } from "../types/label"; +import { GitHubPayload, UserType } from "../types/payload"; const contextNamesToSkip = ["workflow_run"]; -export const shouldSkip = (): { skip: boolean; reason: string } => { - const context = getBotContext(); - const { name } = context; - const payload = context.payload as Payload; - const res: { skip: boolean; reason: string } = { skip: false, reason: "" }; - if (contextNamesToSkip.includes(name)) { - res.skip = true; - res.reason = `excluded context name: ${name}`; +export function shouldSkip(context: ProbotContext) { + const payload = context.payload as GitHubPayload; + const response = { stop: false, reason: null } as { stop: boolean; reason: string | null }; + + if (contextNamesToSkip.includes(context.name)) { + response.stop = true; + response.reason = `excluded context name: "${context.name}"`; } else if (payload.sender.type === UserType.Bot) { - res.skip = true; - res.reason = "sender is a bot"; + response.stop = true; + response.reason = "sender is a bot"; } - return res; -}; -export const wait = (ms: number) => new Promise((r) => setTimeout(r, ms)); + return response; +} -export const calculateWeight = (label: LabelItem | undefined): number => { - if (!label) return 0; - const matches = label.name.match(/\d+/); +export function calculateLabelValue(label: string): number { + const matches = label.match(/\d+/); const number = matches && matches.length > 0 ? parseInt(matches[0]) || 0 : 0; - if (label.name.toLowerCase().includes("priority")) return number; - if (label.name.toLowerCase().includes("minute")) return number * 0.002; - if (label.name.toLowerCase().includes("hour")) return number * 0.125; - if (label.name.toLowerCase().includes("day")) return 1 + (number - 1) * 0.25; - if (label.name.toLowerCase().includes("week")) return number + 1; - if (label.name.toLowerCase().includes("month")) return 5 + (number - 1) * 8; + if (label.toLowerCase().includes("priority")) return number; + // throw new Error(`Label ${label} is not a priority label`); + if (label.toLowerCase().includes("minute")) return number * 0.002; + if (label.toLowerCase().includes("hour")) return number * 0.125; + if (label.toLowerCase().includes("day")) return 1 + (number - 1) * 0.25; + if (label.toLowerCase().includes("week")) return number + 1; + if (label.toLowerCase().includes("month")) return 5 + (number - 1) * 8; return 0; -}; +} -export const calculateDuration = (label: LabelItem): number => { - if (!label) return 0; - if (label.name.toLowerCase().includes("priority")) return 0; +export function calculateDurations(labels: Label[]): number[] { + // from shortest to longest + const durations: number[] = []; - const pattern = /<(\d+\s\w+)/; - const result = label.name.match(pattern); - if (!result) return 0; + labels.forEach((label: Label) => { + const matches = label.name.match(/<(\d+)\s*(\w+)/); + if (matches && matches.length >= 3) { + const number = parseInt(matches[1]); + const unit = matches[2]; + const duration = ms(`${number} ${unit}`) / 1000; + durations.push(duration); + } + }); - return ms(result[1]) / 1000; -}; + return durations.sort((a, b) => a - b); +} diff --git a/src/helpers/similarity.ts b/src/helpers/similarity.ts deleted file mode 100644 index a5743e562..000000000 --- a/src/helpers/similarity.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { getLogger } from "../bindings"; -import axios, { AxiosError } from "axios"; -import { ajv } from "../utils"; -import { Static, Type } from "@sinclair/typebox"; -import { backOff } from "exponential-backoff"; -import { Issue } from "../types"; - -export const extractImportantWords = async (issue: Issue): Promise => { - const res = await getAnswerFromChatGPT( - "", - `${ - process.env.CHATGPT_USER_PROMPT_FOR_IMPORTANT_WORDS || - "I need your help to find important words (e.g. unique adjectives) from github issue below and I want to parse them easily so please separate them using #(No other contexts needed). Please separate the words by # so I can parse them easily. Please answer simply as I only need the important words. Here is the issue content.\n" - } '${`Issue title: ${issue.title}\nIssue content: ${issue.body}`}'`, - parseFloat(process.env.IMPORTANT_WORDS_AI_TEMPERATURE || "0") - ); - if (res === "") return []; - return res.split(/[,# ]/); -}; - -export const measureSimilarity = async (first: Issue, second: Issue): Promise => { - const res = await getAnswerFromChatGPT( - "", - `${( - process.env.CHATGPT_USER_PROMPT_FOR_MEASURE_SIMILARITY || - 'I have two github issues and I need to measure the possibility of the 2 issues are the same content (I need to parse the % so other contents are not needed and give me only the number in %).\n Give me in number format and add % after the number.\nDo not tell other things since I only need the number (e.g. 85%). Here are two issues:\n 1. "%first%"\n2. "%second%"' - ) - .replace("%first%", `Issue title: ${first.title}\nIssue content: ${first.body}`) - .replace("%second%", `Issue title: ${second.title}\nIssue content: ${second.body}`)}`, - parseFloat(process.env.MEASURE_SIMILARITY_AI_TEMPERATURE || "0") - ); - const matches = res.match(/\d+/); - const percent = matches && matches.length > 0 ? parseInt(matches[0]) || 0 : 0; - return percent; -}; - -const ChatMessageSchema = Type.Object({ - content: Type.String(), -}); - -const ChoiceSchema = Type.Object({ - message: ChatMessageSchema, -}); - -const ChoicesSchema = Type.Object({ - choices: Type.Array(ChoiceSchema), -}); - -type Choices = Static; - -export const getAnswerFromChatGPT = async (systemPrompt: string, userPrompt: string, temperature = 0, max_tokens = 1500): Promise => { - const logger = getLogger(); - const body = JSON.stringify({ - model: "gpt-3.5-turbo", - messages: [ - { - role: "system", - content: systemPrompt, - }, - { - role: "user", - content: userPrompt, - }, - ], - max_tokens, - temperature, - stream: false, - }); - const config = { - method: "post", - url: `${process.env.OPENAI_API_HOST || "https://api.openai.com"}/v1/chat/completions`, - headers: { - Authorization: `Bearer ${process.env.OPENAI_API_KEY}`, - "Content-Type": "application/json", - }, - data: body, - }; - try { - const response = await backOff(() => axios(config), { - startingDelay: 6000, - retry: (e: AxiosError) => { - if (e.response && e.response.status === 429) return true; - return false; - }, - }); - const data: Choices = response.data; - const validate = ajv.compile(ChoicesSchema); - const valid = validate(data); - if (!valid) { - logger.error(`Error occured from OpenAI`); - return ""; - } - const { choices: choice } = data; - if (choice.length <= 0) { - logger.error(`No result from OpenAI`); - return ""; - } - const answer = choice[0].message.content; - return answer; - } catch (error) { - logger.error(`Getting response from ChatGPT failed: ${error}`); - return ""; - } -}; diff --git a/src/helpers/user.ts b/src/helpers/user.ts deleted file mode 100644 index 5f151f241..000000000 --- a/src/helpers/user.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { getBotContext, getLogger } from "../bindings"; -import { User } from "../types"; - -/** - * @dev Gets the publicly available information about `username` - * - * @param username The username you're getting information for - */ -export const getUser = async (username: string): Promise => { - const context = getBotContext(); - const logger = getLogger(); - - try { - const res = await context.octokit.rest.users.getByUsername({ - username, - }); - - if (res.status === 200) return res.data as User; - else { - logger.debug(`Unsatisfied response { status: ${res.status}, data: ${res.data}`); - } - } catch (err: unknown) { - logger.info(`Getting user info failed! err: ${err}`); - } - - return undefined; -}; - -/** - * @dev Gets organization membership of a user - * @param orgname The organization name - * @param username The user name - * - * @returns The role name of a user in the organization. "admin" || "member" || "billing_manager" - */ -export const getOrgMembershipOfUser = async (org: string, username: string): Promise => { - const context = getBotContext(); - const logger = getLogger(); - let membership: string | undefined = undefined; - - try { - const res = await context.octokit.rest.orgs.getMembershipForUser({ - org, - username, - }); - - if (res.status === 200) { - membership = res.data.role; - } else { - logger.debug(`Unsatisfied response { status: ${res.status}, data: ${res.data}`); - } - } catch (err: unknown) { - logger.info(`Getting organization membership failed! err: ${err}`); - } - - return membership; -}; diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index 2028d5c27..000000000 --- a/src/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Probot } from "probot"; -import { EmitterWebhookEventName } from "@octokit/webhooks"; -import { bindEvents } from "./bindings"; -import { GithubEvent } from "./types"; - -const UBIQUITY = ` - _| _| _|_|_| _|_|_| _|_| _| _| _|_|_| _|_|_|_|_| _| _| - _| _| _| _| _| _| _| _| _| _| _| _| _| - _| _| _|_|_| _| _| _|_| _| _| _| _| _| - _| _| _| _| _| _| _| _| _| _| _| _| - _|_| _|_|_| _|_|_| _|_| _| _|_| _|_|_| _| _| - - `; - -export default function main(app: Probot) { - console.log(UBIQUITY); - const allowedEvents = Object.values(GithubEvent) as EmitterWebhookEventName[]; - app.on(allowedEvents, bindEvents); -} diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 000000000..f7ab9f4c2 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,13 @@ +import sourceMapSupport from "source-map-support"; +sourceMapSupport.install(); + +import { Probot } from "probot"; +import { bindEvents } from "./bindings/event"; +import { GitHubEvent } from "./types/github-events"; + +export default function main(app: Probot) { + const allowedEvents = Object.values(GitHubEvent); + app.on(allowedEvents, async (context) => { + await bindEvents(context); + }); +} diff --git a/src/tests/after-all-handler.ts b/src/tests/after-all-handler.ts new file mode 100644 index 000000000..4dc6135b8 --- /dev/null +++ b/src/tests/after-all-handler.ts @@ -0,0 +1,7 @@ +import { getServer } from "./commands-test"; + +export function afterAllHandler(): () => Promise { + return async () => { + await getServer().stop(); + }; +} diff --git a/src/tests/before-all-handler.ts b/src/tests/before-all-handler.ts new file mode 100644 index 000000000..11e27fa34 --- /dev/null +++ b/src/tests/before-all-handler.ts @@ -0,0 +1,105 @@ +import { Probot, run } from "probot"; + +import { bindEvents } from "../bindings/event"; +import { GitHubEvent } from "../types/github-events"; +import { + customOctokit, + getAdminUser, + getAdminUsername, + getCollaboratorUser, + getCollaboratorUsername, + owner, + repo, + setAdminUser, + setAdminUsername, + setCollaboratorUser, + setCollaboratorUsername, + setServer, +} from "./commands-test"; +import { waitForNWebhooks, webhookEventEmitter } from "./utils"; + +export function beforeAllHandler(): jest.ProvidesHookCallback { + return async () => { + const adminPAT = process.env.TEST_ADMIN_PAT; + if (!adminPAT) { + throw new Error("missing TEST_ADMIN_PAT"); + } + + setAdminUser(new customOctokit({ auth: adminPAT })); + + const { data } = await getAdminUser().rest.users.getAuthenticated(); + setAdminUsername(data.login); + + // check if the user is admin + const adminUsername = getAdminUsername(); + if (!adminUsername) { + throw new Error("TEST_ADMIN_PAT is not admin"); + } + + const { data: data1 } = await getAdminUser().rest.repos.getCollaboratorPermissionLevel({ + repo, + owner, + username: adminUsername, + }); + if (data1.permission !== "admin") { + throw new Error("TEST_ADMIN_PAT is not admin"); + } + + const outsideCollaboratorPAT = process.env.TEST_OUTSIDE_COLLABORATOR_PAT; + if (!outsideCollaboratorPAT) { + throw new Error("missing TEST_OUTSIDE_COLLABORATOR_PAT"); + } + + setCollaboratorUser(new customOctokit({ auth: outsideCollaboratorPAT })); + + const { data: data2 } = await getCollaboratorUser().rest.users.getAuthenticated(); + setCollaboratorUsername(data2.login); + + // check if the user is outside collaborator + const collaboratorUsername = getCollaboratorUsername(); + if (!collaboratorUsername) { + throw new Error("TEST_OUTSIDE_COLLABORATOR_PAT is not outside collaborator"); + } + const { data: data3 } = await getAdminUser().rest.repos.getCollaboratorPermissionLevel({ + repo, + owner, + username: collaboratorUsername, + }); + if (data3.permission === "admin" || data3.permission === "write") { + throw new Error("TEST_OUTSIDE_COLLABORATOR_PAT is not outside collaborator"); + } + if (data3.permission !== "read") { + throw new Error("TEST_OUTSIDE_COLLABORATOR_PAT does not have read access"); + } + + const server = await run((app: Probot) => { + const allowedEvents = Object.values(GitHubEvent) as GitHubEvent[]; + app.on(allowedEvents, async (context) => { + await bindEvents(context); + webhookEventEmitter.emit("event", context.payload); + }); + }); + + setServer(server); + + // FIXME: this is a hack to get around the fact that the config is not being updated + // build errors were happening because the config was not being updated + + // await updateConfig({ + // octokit: getAdminUser(), + // owner, + // repo: "ubiquibot-config", + // path: ".github/ubiquibot-config.yml", + // config: {}, //orgConfig, + // }); + // await waitForNWebhooks(1); + // await updateConfig({ + // octokit: getAdminUser(), + // owner, + // repo: "ubiquibot-config", + // path: ".github/ubiquibot-config.yml", + // config: {}, //repoConfig, + // }); + await waitForNWebhooks(1); + }; +} diff --git a/src/tests/commands-test.ts b/src/tests/commands-test.ts new file mode 100644 index 000000000..ac72630c7 --- /dev/null +++ b/src/tests/commands-test.ts @@ -0,0 +1,70 @@ +import { describe } from "@jest/globals"; +import "dotenv/config"; +import { Octokit } from "octokit"; +import { Server } from "probot"; +import { COMMIT_HASH } from "../commit-hash"; +import { afterAllHandler } from "./after-all-handler"; +import { beforeAllHandler } from "./before-all-handler"; +import { testSuite } from "./test-suite"; + +export const TEST_TIME_LABEL = "Time: <1 Hour"; +export const TEST_PRIORITY_LABEL = "Priority: 1 (Normal)"; + +export const SIX_HOURS = 6 * 60 * 60 * 1000; // 6 hours + +// return the current 7 character git commit hash using git rev-parse +export const GIT_COMMIT_HASH = COMMIT_HASH?.substring(0, 7) ?? null; + +export const owner = process.env.TEST_ORGANIZATION_NAME || "ubiquibot"; +export const repo = process.env.TEST_REPOSITORY_NAME || "staging"; + +// generate setters and getters for the following variables +let octokitAdmin: Octokit; +let octokitCollaborator: Octokit; +let adminUsername: string | null = null; +let collaboratorUsername: string | null = null; +let server: Server; + +export function getAdminUser(): Octokit { + return octokitAdmin; +} +export function setAdminUser(value: Octokit) { + octokitAdmin = value; +} +export function getCollaboratorUser(): Octokit { + return octokitCollaborator; +} +export function setCollaboratorUser(value: Octokit) { + octokitCollaborator = value; +} +export function getAdminUsername(): string | null { + return adminUsername; +} +export function setAdminUsername(value: string) { + adminUsername = value; +} +export function getCollaboratorUsername(): string | null { + return collaboratorUsername; +} +export function setCollaboratorUsername(value: string) { + collaboratorUsername = value; +} +export function getServer(): Server { + return server; +} +export function setServer(value: Server) { + server = value; +} + +export const customOctokit = Octokit.defaults({ + throttle: { + onRateLimit: () => true, + onSecondaryRateLimit: () => true, + }, +}); + +beforeAll(beforeAllHandler(), SIX_HOURS); + +afterAll(afterAllHandler(), SIX_HOURS); + +describe("commands test", testSuite()); diff --git a/src/tests/test-repo-config.ts b/src/tests/test-repo-config.ts new file mode 100644 index 000000000..8b333629a --- /dev/null +++ b/src/tests/test-repo-config.ts @@ -0,0 +1,63 @@ +export const configuration = { + evmNetworkId: 100, + basePriceMultiplier: 1, + issueCreatorMultiplier: 1, + timeLabels: [ + { name: "Time: <1 Hour" }, + { name: "Time: <2 Hours" }, + { name: "Time: <4 Hours" }, + { name: "Time: <1 Day" }, + { name: "Time: <1 Week" }, + ], + priorityLabels: [ + { name: "Priority: 1 (Normal)" }, + { name: "Priority: 2 (Medium)" }, + { name: "Priority: 3 (High)" }, + { name: "Priority: 4 (Urgent)" }, + { name: "Priority: 5 (Emergency)" }, + ], + defaultLabels: ["Time: <1 Hour", "Priority: 1 (Normal)"], + maxPermitPrice: 1000, + maxConcurrentTasks: 5, + promotionComment: null, + assistivePricing: true, + registerWalletWithVerification: false, + commandSettings: [ + { name: "start", enabled: true }, + { name: "stop", enabled: true }, + { name: "wallet", enabled: true }, + { name: "multiplier", enabled: true }, + { name: "query", enabled: true }, + { name: "autopay", enabled: true }, + { name: "labels", enabled: true }, + { name: "help", enabled: true }, + { name: "payout", enabled: true }, + ], + publicAccessControl: { + setLabel: true, + fundExternalClosedIssue: true, + }, + incentives: { + comment: { + elements: { + code: 5, + img: 5, + h1: 1, + li: 0.5, + a: 0.5, + blockquote: 0, + }, + totals: { + word: 0.1, + }, + }, + }, + taskStaleTimeoutDuration: "15 minutes", + + newContributorGreeting: { + enabled: true, + header: "Welcome to the test sandbox! My Header!", + helpMenu: true, + footer: "Please note that this is a footer from a bot. Thanks!", + }, +}; diff --git a/src/tests/test-suite.ts b/src/tests/test-suite.ts new file mode 100644 index 000000000..6248fe826 --- /dev/null +++ b/src/tests/test-suite.ts @@ -0,0 +1,506 @@ +import { expect, test } from "@jest/globals"; +import { GitHubIssue } from "../types/payload"; +import { + // getCollaboratorUsername, + getAdminUser, + // TEST_PRIORITY_LABEL, + // TEST_TIME_LABEL, + getAdminUsername, + GIT_COMMIT_HASH, + owner, + repo, + SIX_HOURS, +} from "./commands-test"; +import checkLastComment, { + createComment, + // createLabel, + getLastComment, + // removeLabelFromIssue, + waitForNWebhooks, +} from "./utils"; + +let issue: GitHubIssue; + +export function testSuite(): () => void { + beforeAll(createAndAlwaysUseThisTestIssue(), SIX_HOURS); + + return allTests(); +} + +function createAndAlwaysUseThisTestIssue(): jest.ProvidesHookCallback { + return async () => { + const res = await getAdminUser().rest.issues.create({ + repo, + owner, + title: `${GIT_COMMIT_HASH} - E2E TEST`, + }); + issue = res.data as GitHubIssue; + + await waitForNWebhooks(4); + }; +} + +function allTests(): () => void { + return () => { + test( + "/wallet correct address", + async () => { + const newWallet = "0x82AcFE58e0a6bE7100874831aBC56Ee13e2149e7"; + await createComment({ + octokit: getAdminUser(), + owner, + repo, + issueNumber: issue.number, + body: `/wallet ${newWallet}`, + }); + await waitForNWebhooks(2); + await checkLastComment({ + octokit: getAdminUser(), + owner, + repo, + issueNumber: issue.number, + expectedComment: `Updated the wallet address for @${getAdminUsername()} successfully!\t Your new address: \`${newWallet}\``, + }); + }, + SIX_HOURS + ); + + test( + "/wallet wrong address", + async () => { + const newWallet = "0x82AcFE58e0a6bE7100874831aBC56"; + await createComment({ + octokit: getAdminUser(), + owner, + repo, + issueNumber: issue.number, + body: `/wallet ${newWallet}`, + }); + await waitForNWebhooks(2); + await checkLastComment({ + octokit: getAdminUser(), + owner, + repo, + issueNumber: issue.number, + expectedComment: `Please include your wallet or ENS address.\n usage: /wallet 0x0000000000000000000000000000000000000000`, + }); + }, + SIX_HOURS + ); + + test( + "/multiplier", + async () => { + await createComment({ + octokit: getAdminUser(), + owner, + repo, + issueNumber: issue.number, + body: `/multiplier @${getAdminUsername()}`, + }); + await waitForNWebhooks(2); + + await checkLastComment({ + octokit: getAdminUser(), + owner, + repo, + issueNumber: issue.number, + expectedComment: `Successfully changed the payout multiplier for @${getAdminUsername()} to 1. The reason is not provided.`, + }); + + await createComment({ + octokit: getAdminUser(), + owner, + repo, + issueNumber: issue.number, + body: `/multiplier @${getAdminUsername()} 2`, + }); + await waitForNWebhooks(2); + + await checkLastComment({ + octokit: getAdminUser(), + owner, + repo, + issueNumber: issue.number, + expectedComment: `Successfully changed the payout multiplier for @${getAdminUsername()} to 2. The reason is not provided. This feature is designed to limit the contributor's compensation for any task on the current repository due to other compensation structures (i.e. salary.) are you sure you want to use a price multiplier above 1?`, + }); + + await createComment({ + octokit: getAdminUser(), + owner, + repo, + issueNumber: issue.number, + body: `/multiplier @${getAdminUsername()} 2 "Testing reason"`, + }); + await waitForNWebhooks(2); + + await checkLastComment({ + octokit: getAdminUser(), + owner, + repo, + issueNumber: issue.number, + expectedComment: `Successfully changed the payout multiplier for @${getAdminUsername()} to 2. The reason provided is "Testing reason". This feature is designed to limit the contributor's compensation for any task on the current repository due to other compensation structures (i.e. salary.) are you sure you want to use a price multiplier above 1?`, + }); + + await createComment({ + octokit: getAdminUser(), + owner, + repo, + issueNumber: issue.number, + body: `/multiplier @${getAdminUsername()} abcd`, + }); + await waitForNWebhooks(2); + + await checkLastComment({ + octokit: getAdminUser(), + owner, + repo, + issueNumber: issue.number, + expectedComment: `Successfully changed the payout multiplier for @${getAdminUsername()} to 1. The reason provided is "abcd".`, + }); + + await createComment({ + octokit: getAdminUser(), + owner, + repo, + issueNumber: issue.number, + body: `/multiplier abcd`, + }); + await waitForNWebhooks(2); + + await checkLastComment({ + octokit: getAdminUser(), + owner, + repo, + issueNumber: issue.number, + expectedComment: `Successfully changed the payout multiplier for @${getAdminUsername()} to 1. The reason provided is "abcd".`, + }); + }, + SIX_HOURS + ); + + test( + "/query", + async () => { + const newWallet = "0x82AcFE58e0a6bE7100874831aBC56Ee13e2149e7"; + await createComment({ + octokit: getAdminUser(), + owner, + repo, + issueNumber: issue.number, + body: `/wallet ${newWallet}`, + }); + await waitForNWebhooks(2); + + const multiplier = "5"; + await createComment({ + octokit: getAdminUser(), + owner, + repo, + issueNumber: issue.number, + body: `/multiplier @${getAdminUsername()} ${multiplier} 'Testing'`, + }); + await waitForNWebhooks(2); + + await createComment({ + octokit: getAdminUser(), + owner, + repo, + issueNumber: issue.number, + body: `/query @${getAdminUsername()}`, + }); + await waitForNWebhooks(2); + + const lastComment = await getLastComment({ octokit: getAdminUser(), owner, repo, issueNumber: issue.number }); + expect(lastComment.body).toContain( + `@${getAdminUsername()}'s wallet address is ${newWallet}, multiplier is ${multiplier}` + ); + }, + SIX_HOURS + ); + + test( + "/query wrong username", + async () => { + await createComment({ + octokit: getAdminUser(), + owner, + repo, + issueNumber: issue.number, + body: `/query @INVALID_$USERNAME`, + }); + await waitForNWebhooks(2); + + await checkLastComment({ + octokit: getAdminUser(), + owner, + repo, + issueNumber: issue.number, + expectedComment: `Invalid syntax for query command \n usage /query @user`, + }); + }, + SIX_HOURS + ); + + test( + "/help", + async () => { + await createComment({ octokit: getAdminUser(), owner, repo, issueNumber: issue.number, body: `/help` }); + await waitForNWebhooks(2); + + const lastComment = await getLastComment({ octokit: getAdminUser(), owner, repo, issueNumber: issue.number }); + expect(lastComment.body?.includes("Available Commands")).toBe(true); + }, + SIX_HOURS + ); + + // test( + // "/labels", + // async () => { + // await createLabel(getAdminUser(), owner, repo, TEST_PRIORITY_LABEL); + + // await getAdminUser().rest.issues.update({ + // owner, + // repo, + // issue_number: issue.number, + // labels: [], + // }); + + // await createComment(getAdminUser(), owner, repo, issue.number, `/labels set-priority @${getCollaboratorUsername()} false`); + // await waitForNWebhooks(2); + + // let lastComment = await getLastComment(getAdminUser(), owner, repo, issue.number); + // expect(lastComment.body).toContain(`Updated access for @${getCollaboratorUsername()} successfully!\t Access: **priority** for "${owner}/${repo}"`); + + // // collaborator adds label + // await addLabelToIssue(getCollaboratorUser(), owner, repo, issue.number, TEST_PRIORITY_LABEL); + // await waitForNWebhooks(3); + + // let issueDetails = await getAdminUser().rest.issues.get({ + // owner, + // repo, + // issue_number: issue.number, + // }); + // expect(issueDetails.data.labels?.length).toBe(0); + + // lastComment = await getLastComment(getAdminUser(), owner, repo, issue.number); + // expect(lastComment.body).toContain(`@${getCollaboratorUsername()}, You are not allowed to add Priority: 1 (Normal)`); + + // await getAdminUser().rest.issues.update({ + // owner, + // repo, + // issue_number: issue.number, + // labels: [TEST_PRIORITY_LABEL], + // }); + + // await removeLabelFromIssue(getCollaboratorUser(), owner, repo, issue.number, TEST_PRIORITY_LABEL); + // await waitForNWebhooks(3); + + // issueDetails = await getAdminUser().rest.issues.get({ + // owner, + // repo, + // issue_number: issue.number, + // }); + // expect(issueDetails.data.labels?.length).toBe(1); + + // lastComment = await getLastComment(getAdminUser(), owner, repo, issue.number); + // expect(lastComment.body).toContain(`@${getCollaboratorUsername()}, You are not allowed to remove Priority: 1 (Normal)`); + + // await createComment(getAdminUser(), owner, repo, issue.number, `/labels set-priority @${getCollaboratorUsername()} true`); + // await waitForNWebhooks(2); + + // lastComment = await getLastComment(getAdminUser(), owner, repo, issue.number); + // expect(lastComment.body).toContain(`Updated access for @${getCollaboratorUsername()} successfully!\t Access: **priority** for "${owner}/${repo}"`); + + // await removeLabelFromIssue(getCollaboratorUser(), owner, repo, issue.number, TEST_PRIORITY_LABEL); + // await waitForNWebhooks(1); + + // issueDetails = await getAdminUser().rest.issues.get({ + // owner, + // repo, + // issue_number: issue.number, + // }); + // expect(issueDetails.data.labels?.length).toBe(0); + + // await addLabelToIssue(getCollaboratorUser(), owner, repo, issue.number, TEST_PRIORITY_LABEL); + // await waitForNWebhooks(1); + + // issueDetails = await getAdminUser().rest.issues.get({ + // owner, + // repo, + // issue_number: issue.number, + // }); + // expect(issueDetails.data.labels?.length).toBe(1); + // }, + // SIX_HOURS + // ); + + // test( + // "/start and /stop", + // async () => { + // await getAdminUser().rest.issues.update({ + // owner, + // repo, + // issue_number: issue.number, + // labels: [], + // }); + + // await getAdminUser().rest.issues.update({ + // owner, + // repo, + // issue_number: issue.number, + // state: "closed", + // }); + // await waitForNWebhooks(2); + + // let lastComment = await getLastComment(getAdminUser(), owner, repo, issue.number); + // expect(lastComment.body).toContain("Permit generation disabled because this issue didn't qualify for funding"); + + // await getAdminUser().rest.issues.update({ + // owner, + // repo, + // issue_number: issue.number, + // state: "open", + // }); + // await waitForNWebhooks(1); + + // try { + // await getAdminUser().rest.issues.createLabel({ + // owner, + // repo, + // name: TEST_TIME_LABEL, + // }); + // } catch (err) { + // expect(err).toBeDefined(); + // } finally { + // await getAdminUser().rest.issues.addLabels({ + // owner, + // repo, + // issue_number: issue.number, + // labels: [TEST_TIME_LABEL], + // }); + // await waitForNWebhooks(1); + // } + + // try { + // await getAdminUser().rest.issues.createLabel({ + // owner, + // repo, + // name: TEST_PRIORITY_LABEL, + // }); + // } catch (err) { + // expect(err).toBeDefined(); + // } finally { + // await getAdminUser().rest.issues.addLabels({ + // owner, + // repo, + // issue_number: issue.number, + // labels: [TEST_PRIORITY_LABEL], + // }); + // await waitForNWebhooks(2); + // } + + // await getAdminUser().rest.issues.update({ + // owner, + // repo, + // issue_number: issue.number, + // state: "closed", + // }); + // await waitForNWebhooks(2); + + // lastComment = await getLastComment(getAdminUser(), owner, repo, issue.number); + // expect(lastComment.body).toContain("Permit generation disabled because assignee is undefined"); + + // await getAdminUser().rest.issues.update({ + // owner, + // repo, + // issue_number: issue.number, + // state: "open", + // }); + // await waitForNWebhooks(1); + + // await createComment(getAdminUser(), owner, repo, issue.number, `/autopay false`); + // await waitForNWebhooks(2); + + // lastComment = await getLastComment(getAdminUser(), owner, repo, issue.number); + // expect(lastComment.body).toContain("Automatic payment for this issue is enabled: **false**"); + + // await createComment(getAdminUser(), owner, repo, issue.number, '/start'); + // await waitForNWebhooks(3); + + // lastComment = await getLastComment(getAdminUser(), owner, repo, issue.number); + // const lastCommentBody = lastComment.body?.toLowerCase(); + // expect(lastCommentBody).toContain("deadline"); + // expect(lastCommentBody).toContain("registered wallet"); + // expect(lastCommentBody).toContain("payment multiplier"); + // expect(lastCommentBody).toContain("multiplier reason"); + + // await createComment(getAdminUser(), owner, repo, issue.number, `/stop`); + // await waitForNWebhooks(3); + + // lastComment = await getLastComment(getAdminUser(), owner, repo, issue.number); + // expect(lastComment.body).toBe(`You have been unassigned from the task @${getAdminUsername()}`); + + // await createComment(getAdminUser(), owner, repo, issue.number, '/start'); + // await waitForNWebhooks(3); + + // await getAdminUser().rest.issues.update({ + // owner, + // repo, + // issue_number: issue.number, + // state: "closed", + // }); + // await waitForNWebhooks(2); + + // lastComment = await getLastComment(getAdminUser(), owner, repo, issue.number); + // expect(lastComment.body).toContain("Permit generation disabled because automatic payment for this issue is disabled."); + + // await getAdminUser().rest.issues.update({ + // owner, + // repo, + // issue_number: issue.number, + // state: "open", + // }); + // await waitForNWebhooks(1); + + // await createComment(getAdminUser(), owner, repo, issue.number, `/autopay true`); + // await waitForNWebhooks(2); + + // lastComment = await getLastComment(getAdminUser(), owner, repo, issue.number); + // expect(lastComment.body).toBe("Automatic payment for this issue is enabled: **true**"); + + // await getAdminUser().rest.issues.update({ + // owner, + // repo, + // issue_number: issue.number, + // state: "closed", + // state_reason: "not_planned", + // }); + // await waitForNWebhooks(2); + + // lastComment = await getLastComment(getAdminUser(), owner, repo, issue.number); + // expect(lastComment.body).toContain("Permit generation disabled because this is marked as unplanned"); + + // await getAdminUser().rest.issues.update({ + // owner, + // repo, + // issue_number: issue.number, + // state: "open", + // }); + // await waitForNWebhooks(1); + + // await getAdminUser().rest.issues.update({ + // owner, + // repo, + // issue_number: issue.number, + // state: "closed", + // }); + // await waitForNWebhooks(2); + + // lastComment = await getLastComment(getAdminUser(), owner, repo, issue.number); + // expect(lastComment.body).toContain("Task Assignee Reward"); + // }, + // SIX_HOURS + // ); + }; +} diff --git a/src/tests/utils.ts b/src/tests/utils.ts new file mode 100644 index 000000000..1e8eb62fb --- /dev/null +++ b/src/tests/utils.ts @@ -0,0 +1,181 @@ +import { expect } from "@jest/globals"; +import { RequestError } from "@octokit/request-error"; +import EventEmitter from "events"; +import { Octokit } from "octokit"; +import YAML from "yaml"; +import { BotConfig } from "../types/configuration-types"; + +export const webhookEventEmitter = new EventEmitter(); + +export function waitForNWebhooks(n = 1) { + return new Promise((resolve, reject) => { + let i = 0; + + const timer = setTimeout(() => { + reject(new Error(`timeout, received ${i} webhooks, expected ${n}`)); + }, 30000); + + webhookEventEmitter.on("event", () => { + i += 1; + if (i == n) { + clearTimeout(timer); + setTimeout(resolve, 1000); + } + }); + }); +} + +export async function createLabel({ octokit, owner, repo, label, color }: CreateLabel) { + try { + await octokit.rest.issues.createLabel({ + owner, + repo, + name: label, + color, + }); + } catch (err: unknown) { + if (err instanceof RequestError) { + expect(err).toBeDefined(); + expect(err?.status).toBe(422); + } + } +} + +export async function addLabelToIssue({ octokit, owner, repo, issueNumber, label }: LabelParams) { + await octokit.rest.issues.addLabels({ + owner, + repo, + issue_number: issueNumber, + labels: [label], + }); +} + +export async function removeLabelFromIssue({ octokit, owner, repo, issueNumber, label }: LabelParams) { + await octokit.rest.issues.removeLabel({ + owner, + repo, + issue_number: issueNumber, + name: label, + }); +} +export async function createAndAddLabel({ octokit, owner, repo, issueNumber, label }: LabelParams) { + try { + await octokit.rest.issues.createLabel({ + owner, + repo, + name: label, + }); + } catch (err: unknown) { + if (err instanceof RequestError) { + expect(err).toBeDefined(); + expect(err?.status).toBe(422); + } + } finally { + await octokit.rest.issues.addLabels({ + owner, + repo, + issue_number: issueNumber, + labels: [label], + }); + await waitForNWebhooks(1); + } +} + +export async function updateConfig({ octokit, owner, repo, path, config }: UpdateConfig) { + let sha: string | undefined = undefined; + try { + const fileContent = await octokit.rest.repos.getContent({ + owner, + repo, + path, + }); + if (Array.isArray(fileContent.data)) { + throw new Error("ubiquibot-config.yml should not be directory"); + } + if (fileContent.data.type !== "file") { + throw new Error("ubiquibot-config.yml is not a file"); + } + sha = fileContent.data.sha; + } catch (err: unknown) { + if (err instanceof RequestError) { + expect(err).toBeDefined(); + expect(err?.status).toBe(404); + } + } + + await octokit.rest.repos.createOrUpdateFileContents({ + owner, + repo, + path, + message: "test(e2e): automated update config for test", + content: Buffer.from(YAML.stringify(config)).toString("base64"), + sha, + }); +} + +export async function createComment({ octokit, owner, repo, issueNumber, body }: CreateComment) { + await octokit.rest.issues.createComment({ + repo, + owner, + issue_number: issueNumber, + body: body, + }); +} +interface GetLastComment { + octokit: Octokit; + owner: string; + repo: string; + issueNumber: number; +} +export async function getLastComment({ octokit, owner, repo, issueNumber }: GetLastComment) { + const { data } = await octokit.rest.issues.listComments({ + repo, + owner, + issue_number: issueNumber, + per_page: 100, + }); + expect(data.length).toBeGreaterThan(0); + return data[data.length - 1]; +} + +export default async function checkLastComment({ + octokit, + owner, + repo, + issueNumber, + expectedComment, +}: CheckLastComment) { + const lastComment = await getLastComment({ octokit, owner, repo, issueNumber }); + expect(lastComment.body).toBe(expectedComment); +} + +interface OctokitParams { + octokit: Octokit; + owner: string; + repo: string; +} + +interface IssueParams extends OctokitParams { + issueNumber: number; +} + +interface LabelParams extends IssueParams { + label: string; +} + +interface CreateLabel extends LabelParams { + color?: string; +} + +interface UpdateConfig extends OctokitParams { + path: string; + config: BotConfig; +} + +interface CreateComment extends IssueParams { + body: string; +} + +interface CheckLastComment extends IssueParams { + expectedComment: string; +} diff --git a/src/types/adapters.ts b/src/types/adapters.ts deleted file mode 100644 index d2b97baa5..000000000 --- a/src/types/adapters.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { SupabaseClient } from "@supabase/supabase-js"; - -export type Adapters = { - supabase: SupabaseClient; -}; diff --git a/src/types/commit.ts b/src/types/commit.ts new file mode 100644 index 000000000..87f97fe1c --- /dev/null +++ b/src/types/commit.ts @@ -0,0 +1,79 @@ +export interface Commit { + sha: string; + node_id: string; + commit: { + author: { + name: string; + email: string; + date: string; + }; + committer: { + name: string; + email: string; + date: string; + }; + message: string; + tree: { + sha: string; + url: string; + }; + url: string; + comment_count: number; + verification: { + verified: boolean; + reason: string; + signature: string; + payload: string; + }; + }; + url: string; + html_url: string; + comments_url: string; + author: { + login: string; + id: number; + node_id: string; + avatar_url: string; + gravatar_id: string; + url: string; + html_url: string; + followers_url: string; + following_url: string; + gists_url: string; + starred_url: string; + subscriptions_url: string; + organizations_url: string; + repos_url: string; + events_url: string; + received_events_url: string; + type: string; + site_admin: boolean; + }; + committer: { + login: string; + id: number; + node_id: string; + avatar_url: string; + gravatar_id: string; + url: string; + html_url: string; + followers_url: string; + following_url: string; + gists_url: string; + starred_url: string; + subscriptions_url: string; + organizations_url: string; + repos_url: string; + events_url: string; + received_events_url: string; + type: string; + site_admin: boolean; + }; + parents: [ + { + sha: string; + url: string; + html_url: string; + } + ]; +} diff --git a/src/types/config.ts b/src/types/config.ts deleted file mode 100644 index 5f566aa10..000000000 --- a/src/types/config.ts +++ /dev/null @@ -1,224 +0,0 @@ -import { Static, Type } from "@sinclair/typebox"; -import { LogLevel } from "./log"; - -const LabelItemSchema = Type.Object( - { - name: Type.String(), - }, - { - additionalProperties: false, - } -); -export type LabelItem = Static; - -const CommentIncentivesSchema = Type.Object( - { - elements: Type.Record(Type.String(), Type.Number()), - totals: Type.Object( - { - word: Type.Number(), - }, - { additionalProperties: false } - ), - }, - { additionalProperties: false } -); -export type CommentIncentives = Static; - -const IncentivesSchema = Type.Object( - { - comment: CommentIncentivesSchema, - }, - { additionalProperties: false } -); - -export type Incentives = Static; - -const CommandItemSchema = Type.Object( - { - name: Type.String(), - enabled: Type.Boolean(), - }, - { additionalProperties: false } -); -export type CommandItem = Static; - -export const PriceConfigSchema = Type.Object({ - baseMultiplier: Type.Number(), - issueCreatorMultiplier: Type.Number(), - timeLabels: Type.Array(LabelItemSchema), - priorityLabels: Type.Array(LabelItemSchema), - incentives: IncentivesSchema, - defaultLabels: Type.Array(Type.String()), -}); -export type PriceConfig = Static; - -export const SupabaseConfigSchema = Type.Object({ - url: Type.String(), - key: Type.String(), -}); - -export const PayoutConfigSchema = Type.Object({ - evmNetworkId: Type.Number(), - rpc: Type.String(), - privateKey: Type.String(), - paymentToken: Type.String(), - permitBaseUrl: Type.String(), -}); - -export const UnassignConfigSchema = Type.Object({ - followUpTime: Type.Number(), - disqualifyTime: Type.Number(), - timeRangeForMaxIssue: Type.Number(), - timeRangeForMaxIssueEnabled: Type.Boolean(), -}); - -export const ModeSchema = Type.Object({ - permitMaxPrice: Type.Number(), - disableAnalytics: Type.Boolean(), - incentiveMode: Type.Boolean(), - assistivePricing: Type.Boolean(), -}); - -export const AssignSchema = Type.Object({ - maxConcurrentTasks: Type.Number(), - staleTaskTime: Type.Number(), -}); - -export const LogConfigSchema = Type.Object({ - logEnvironment: Type.String(), - level: Type.Enum(LogLevel), - retryLimit: Type.Number(), -}); - -export const SodiumSchema = Type.Object({ - publicKey: Type.String(), - privateKey: Type.String(), -}); - -export const CommentsSchema = Type.Object({ - promotionComment: Type.String(), -}); - -export const AskSchema = Type.Object({ - apiKey: Type.Optional(Type.String()), - tokenLimit: Type.Number(), -}); - -export const NewContributorGreetingSchema = Type.Object({ - enabled: Type.Boolean(), - header: Type.String(), - helpMenu: Type.Boolean(), - footer: Type.String(), -}); -export type NewContributorGreeting = Static; - -export const CommandConfigSchema = Type.Array(CommandItemSchema); - -export type CommandConfig = Static; -export const WalletSchema = Type.Object({ - registerWalletWithVerification: Type.Boolean(), -}); - -export const PublicAccessControlSchema = Type.Object({ - setLabel: Type.Boolean(), - fundExternalClosedIssue: Type.Boolean(), -}); - -export type AccessControl = Static; - -export const BotConfigSchema = Type.Object({ - log: LogConfigSchema, - price: PriceConfigSchema, - payout: PayoutConfigSchema, - unassign: UnassignConfigSchema, - supabase: SupabaseConfigSchema, - mode: ModeSchema, - assign: AssignSchema, - sodium: SodiumSchema, - comments: CommentsSchema, - command: CommandConfigSchema, - wallet: WalletSchema, - ask: AskSchema, - publicAccessControl: PublicAccessControlSchema, - newContributorGreeting: NewContributorGreetingSchema, -}); - -export type BotConfig = Static; - -export const StreamlinedCommentSchema = Type.Object({ - login: Type.Optional(Type.String()), - body: Type.Optional(Type.String()), -}); - -export type StreamlinedComment = Static; - -export const GPTResponseSchema = Type.Object({ - answer: Type.Optional(Type.String()), - tokenUsage: Type.Object({ - output: Type.Optional(Type.Number()), - input: Type.Optional(Type.Number()), - total: Type.Optional(Type.Number()), - }), -}); - -export type GPTResponse = Static; - -export const ConfigSchema = Type.Object( - { - evmNetworkId: Type.Optional(Type.Number()), - priceMultiplier: Type.Optional(Type.Number()), - issueCreatorMultiplier: Type.Optional(Type.Number()), - timeLabels: Type.Optional(Type.Array(LabelItemSchema)), - priorityLabels: Type.Optional(Type.Array(LabelItemSchema)), - permitMaxPrice: Type.Optional(Type.Number()), - commandSettings: Type.Optional(Type.Array(CommandItemSchema)), - promotionComment: Type.Optional(Type.String()), - disableAnalytics: Type.Optional(Type.Boolean()), - commentIncentives: Type.Optional(Type.Boolean()), - assistivePricing: Type.Optional(Type.Boolean()), - maxConcurrentAssigns: Type.Optional(Type.Number()), - incentives: Type.Optional(IncentivesSchema), - defaultLabels: Type.Optional(Type.Array(Type.String())), - registerWalletWithVerification: Type.Optional(Type.Boolean()), - publicAccessControl: Type.Optional(PublicAccessControlSchema), - openAIKey: Type.Optional(Type.String()), - openAITokenLimit: Type.Optional(Type.Number()), - staleTaskTime: Type.Optional(Type.String()), - privateKeyEncrypted: Type.Optional(Type.String()), - newContributorGreeting: Type.Optional(NewContributorGreetingSchema), - }, - { - additionalProperties: false, - } -); - -export type Config = Static; - -export type RepositoryConfig = Config; - -export const MergedConfigSchema = Type.Object({ - assistivePricing: Type.Boolean(), - commandSettings: Type.Array(CommandItemSchema), - commentIncentives: Type.Boolean(), - defaultLabels: Type.Array(Type.String()), - disableAnalytics: Type.Boolean(), - evmNetworkId: Type.Number(), - incentives: IncentivesSchema, - issueCreatorMultiplier: Type.Number(), - maxConcurrentAssigns: Type.Number(), - newContributorGreeting: NewContributorGreetingSchema, - openAIKey: Type.Optional(Type.String()), - openAITokenLimit: Type.Optional(Type.Number()), - permitMaxPrice: Type.Number(), - priceMultiplier: Type.Number(), - priorityLabels: Type.Array(LabelItemSchema), - privateKeyEncrypted: Type.Optional(Type.String()), - promotionComment: Type.String(), - publicAccessControl: PublicAccessControlSchema, - registerWalletWithVerification: Type.Boolean(), - staleTaskTime: Type.String(), - timeLabels: Type.Array(LabelItemSchema), -}); - -export type MergedConfig = Static; diff --git a/src/types/configuration-types.ts b/src/types/configuration-types.ts new file mode 100644 index 000000000..0ff6e633c --- /dev/null +++ b/src/types/configuration-types.ts @@ -0,0 +1,124 @@ +import { ObjectOptions, Static, StaticDecode, StringOptions, TProperties, Type as T } from "@sinclair/typebox"; +import ms from "ms"; +import { LogLevel } from "ubiquibot-logger/pretty-logs"; +import { userCommands } from "../handlers/comment/handlers/comment-handler-main"; + +import { ajv } from "../utils/ajv"; +import { validHTMLElements } from "./valid-html-elements"; + +const promotionComment = + "###### If you enjoy the DevPool experience, please follow [Ubiquity on GitHub](https://github.com/ubiquity) and star [this repo](https://github.com/ubiquity/devpool-directory) to show your support. It helps a lot!"; +const defaultGreetingHeader = + "Thank you for contributing! Please be sure to set your wallet address before completing your first task so that you can collect your reward."; + +const htmlEntities = validHTMLElements.map((value) => T.Literal(value)); + +const allHtmlElementsSetToZero = validHTMLElements.reduce((accumulator, current) => { + accumulator[current] = 0; + return accumulator; +}, {} as Record); + +const allCommands = userCommands(false).map((cmd) => cmd.id.replace("/", "")); + +const defaultTimeLabels = ["Time: <1 Hour", "Time: <2 Hours", "Time: <4 Hours", "Time: <1 Day", "Time: <1 Week"]; + +const defaultPriorityLabels = [ + "Priority: 1 (Normal)", + "Priority: 2 (Medium)", + "Priority: 3 (High)", + "Priority: 4 (Urgent)", + "Priority: 5 (Emergency)", +]; + +function strictObject(obj: T, options?: ObjectOptions) { + return T.Object(obj, { additionalProperties: false, default: {}, ...options }); +} + +export function stringDuration(options?: StringOptions) { + return T.Transform(T.String(options)) + .Decode((value) => { + const decoded = ms(value); + if (decoded === undefined || isNaN(decoded)) { + throw new Error(`Invalid duration string: ${value}`); + } + return ms(value); + }) + .Encode((value) => ms(value)); +} + +const envConfigSchema = T.Object({ + WEBHOOK_PROXY_URL: T.Optional(T.String({ format: "uri" })), // optional for production + LOG_LEVEL: T.Enum(LogLevel, { default: LogLevel.DEBUG }), + LOG_RETRY_LIMIT: T.Number({ default: 8 }), + SUPABASE_URL: T.String({ format: "uri" }), + SUPABASE_KEY: T.String(), + PRIVATE_KEY: T.String(), + APP_ID: T.Number(), +}); + +export const validateEnvConfig = ajv.compile(envConfigSchema); +export type EnvConfig = Static; + +const botConfigSchema = strictObject( + { + keys: strictObject({ + evmPrivateEncrypted: T.Optional(T.String()), + openAi: T.Optional(T.String()), + }), + features: strictObject({ + assistivePricing: T.Boolean({ default: false }), + defaultLabels: T.Array(T.String(), { default: [] }), + newContributorGreeting: strictObject({ + enabled: T.Boolean({ default: false }), + header: T.String({ default: defaultGreetingHeader }), + displayHelpMenu: T.Boolean({ default: true }), + footer: T.String({ default: promotionComment }), + }), + publicAccessControl: strictObject({ + setLabel: T.Boolean({ default: true }), + fundExternalClosedIssue: T.Boolean({ default: true }), + }), + isNftRewardEnabled: T.Boolean({ default: false }), + }), + + timers: strictObject({ + reviewDelayTolerance: stringDuration({ default: "1 day" }), + taskStaleTimeoutDuration: stringDuration({ default: "4 weeks" }), + taskFollowUpDuration: stringDuration({ default: "0.5 weeks" }), + taskDisqualifyDuration: stringDuration({ default: "1 week" }), + }), + payments: strictObject({ + maxPermitPrice: T.Number({ default: Number.MAX_SAFE_INTEGER }), + evmNetworkId: T.Number({ default: 1 }), + basePriceMultiplier: T.Number({ default: 1 }), + issueCreatorMultiplier: T.Number({ default: 1 }), + }), + disabledCommands: T.Array(T.String(), { default: allCommands }), + incentives: strictObject({ + comment: strictObject({ + elements: T.Record(T.Union(htmlEntities), T.Number({ default: 0 }), { default: allHtmlElementsSetToZero }), + totals: strictObject({ + character: T.Number({ default: 0, minimum: 0 }), + word: T.Number({ default: 0, minimum: 0 }), + sentence: T.Number({ default: 0, minimum: 0 }), + paragraph: T.Number({ default: 0, minimum: 0 }), + comment: T.Number({ default: 0, minimum: 0 }), + }), + }), + }), + labels: strictObject({ + time: T.Array(T.String(), { default: defaultTimeLabels }), + priority: T.Array(T.String(), { default: defaultPriorityLabels }), + }), + miscellaneous: strictObject({ + maxConcurrentTasks: T.Number({ default: Number.MAX_SAFE_INTEGER }), + promotionComment: T.String({ default: promotionComment }), + registerWalletWithVerification: T.Boolean({ default: false }), + openAiTokenLimit: T.Number({ default: 100000 }), + }), + }, + { default: undefined } // top level object can't have default! +); +export const validateBotConfig = ajv.compile(botConfigSchema); + +export type BotConfig = StaticDecode; diff --git a/src/types/context.ts b/src/types/context.ts new file mode 100644 index 000000000..cef586ce1 --- /dev/null +++ b/src/types/context.ts @@ -0,0 +1,14 @@ +import OpenAI from "openai"; +import { Context as ProbotContext, ProbotOctokit } from "probot"; +import { Logs } from "ubiquibot-logger"; +import { BotConfig } from "./configuration-types"; +import { GitHubPayload } from "./payload"; + +export interface Context { + event: ProbotContext; + config: BotConfig; + openAi: OpenAI | null; + logger: Logs; + payload: GitHubPayload; + octokit: InstanceType; +} diff --git a/src/types/github-events.ts b/src/types/github-events.ts new file mode 100644 index 000000000..67397a629 --- /dev/null +++ b/src/types/github-events.ts @@ -0,0 +1,242 @@ +export enum GitHubEvent { + // "BRANCH_PROTECTION_RULE" = "branch_protection_rule", + "BRANCH_PROTECTION_RULE_CREATED" = "branch_protection_rule.created", + "BRANCH_PROTECTION_RULE_DELETED" = "branch_protection_rule.deleted", + "BRANCH_PROTECTION_RULE_EDITED" = "branch_protection_rule.edited", + // "CHECK_RUN" = "check_run", + "CHECK_RUN_COMPLETED" = "check_run.completed", + "CHECK_RUN_CREATED" = "check_run.created", + "CHECK_RUN_REQUESTED_ACTION" = "check_run.requested_action", + "CHECK_RUN_REREQUESTED" = "check_run.rerequested", + // "CHECK_SUITE" = "check_suite", + "CHECK_SUITE_COMPLETED" = "check_suite.completed", + "CHECK_SUITE_REQUESTED" = "check_suite.requested", + "CHECK_SUITE_REREQUESTED" = "check_suite.rerequested", + // "CODE_SCANNING_ALERT" = "code_scanning_alert", + "CODE_SCANNING_ALERT_APPEARED_IN_BRANCH" = "code_scanning_alert.appeared_in_branch", + "CODE_SCANNING_ALERT_CLOSED_BY_USER" = "code_scanning_alert.closed_by_user", + "CODE_SCANNING_ALERT_CREATED" = "code_scanning_alert.created", + "CODE_SCANNING_ALERT_FIXED" = "code_scanning_alert.fixed", + "CODE_SCANNING_ALERT_REOPENED" = "code_scanning_alert.reopened", + "CODE_SCANNING_ALERT_REOPENED_BY_USER" = "code_scanning_alert.reopened_by_user", + // "COMMIT_COMMENT" = "commit_comment", + "COMMIT_COMMENT_CREATED" = "commit_comment.created", + // "CREATE" = "create", + // "DELETE" = "delete", + // "DEPLOY_KEY" = "deploy_key", + "DEPLOY_KEY_CREATED" = "deploy_key.created", + "DEPLOY_KEY_DELETED" = "deploy_key.deleted", + // "DEPLOYMENT" = "deployment", + "DEPLOYMENT_CREATED" = "deployment.created", + // "DEPLOYMENT_STATUS" = "deployment_status", + "DEPLOYMENT_STATUS_CREATED" = "deployment_status.created", + // "DISCUSSION" = "discussion", + "DISCUSSION_ANSWERED" = "discussion.answered", + "DISCUSSION_CATEGORY_CHANGED" = "discussion.category_changed", + "DISCUSSION_CREATED" = "discussion.created", + "DISCUSSION_DELETED" = "discussion.deleted", + "DISCUSSION_EDITED" = "discussion.edited", + "DISCUSSION_LABELED" = "discussion.labeled", + "DISCUSSION_LOCKED" = "discussion.locked", + "DISCUSSION_PINNED" = "discussion.pinned", + "DISCUSSION_TRANSFERRED" = "discussion.transferred", + "DISCUSSION_UNANSWERED" = "discussion.unanswered", + "DISCUSSION_UNLABELED" = "discussion.unlabeled", + "DISCUSSION_UNLOCKED" = "discussion.unlocked", + "DISCUSSION_UNPINNED" = "discussion.unpinned", + // "DISCUSSION_COMMENT" = "discussion_comment", + "DISCUSSION_COMMENT_CREATED" = "discussion_comment.created", + "DISCUSSION_COMMENT_DELETED" = "discussion_comment.deleted", + "DISCUSSION_COMMENT_EDITED" = "discussion_comment.edited", + // "FORK" = "fork", + // "GITHUB_APP_AUTHORIZATION" = "github_app_authorization", + "GITHUB_APP_AUTHORIZATION_REVOKED" = "github_app_authorization.revoked", + // "GOLLUM" = "gollum", + // "INSTALLATION" = "installation", + "INSTALLATION_CREATED" = "installation.created", + "INSTALLATION_DELETED" = "installation.deleted", + "INSTALLATION_NEW_PERMISSIONS_ACCEPTED" = "installation.new_permissions_accepted", + "INSTALLATION_SUSPEND" = "installation.suspend", + "INSTALLATION_UNSUSPEND" = "installation.unsuspend", + // "INSTALLATION_REPOSITORIES" = "installation_repositories", + "INSTALLATION_REPOSITORIES_ADDED" = "installation_repositories.added", + "INSTALLATION_REPOSITORIES_REMOVED" = "installation_repositories.removed", + // "ISSUE_COMMENT" = "issue_comment", + "ISSUE_COMMENT_CREATED" = "issue_comment.created", + "ISSUE_COMMENT_DELETED" = "issue_comment.deleted", + "ISSUE_COMMENT_EDITED" = "issue_comment.edited", + // "ISSUES" = "issues", + "ISSUES_ASSIGNED" = "issues.assigned", + "ISSUES_CLOSED" = "issues.closed", + "ISSUES_DELETED" = "issues.deleted", + "ISSUES_DEMILESTONED" = "issues.demilestoned", + "ISSUES_EDITED" = "issues.edited", + "ISSUES_LABELED" = "issues.labeled", + "ISSUES_LOCKED" = "issues.locked", + "ISSUES_MILESTONED" = "issues.milestoned", + "ISSUES_OPENED" = "issues.opened", + "ISSUES_PINNED" = "issues.pinned", + "ISSUES_REOPENED" = "issues.reopened", + "ISSUES_TRANSFERRED" = "issues.transferred", + "ISSUES_UNASSIGNED" = "issues.unassigned", + "ISSUES_UNLABELED" = "issues.unlabeled", + "ISSUES_UNLOCKED" = "issues.unlocked", + "ISSUES_UNPINNED" = "issues.unpinned", + // "LABEL" = "label", + "LABEL_CREATED" = "label.created", + "LABEL_DELETED" = "label.deleted", + "LABEL_EDITED" = "label.edited", + // "MARKETPLACE_PURCHASE" = "marketplace_purchase", + "MARKETPLACE_PURCHASE_CANCELLED" = "marketplace_purchase.cancelled", + "MARKETPLACE_PURCHASE_CHANGED" = "marketplace_purchase.changed", + "MARKETPLACE_PURCHASE_PENDING_CHANGE" = "marketplace_purchase.pending_change", + "MARKETPLACE_PURCHASE_PENDING_CHANGE_CANCELLED" = "marketplace_purchase.pending_change_cancelled", + "MARKETPLACE_PURCHASE_PURCHASED" = "marketplace_purchase.purchased", + // "MEMBER" = "member", + "MEMBER_ADDED" = "member.added", + "MEMBER_EDITED" = "member.edited", + "MEMBER_REMOVED" = "member.removed", + // "MEMBERSHIP" = "membership", + "MEMBERSHIP_ADDED" = "membership.added", + "MEMBERSHIP_REMOVED" = "membership.removed", + // "META" = "meta", + "META_DELETED" = "meta.deleted", + // "MILESTONE" = "milestone", + "MILESTONE_CLOSED" = "milestone.closed", + "MILESTONE_CREATED" = "milestone.created", + "MILESTONE_DELETED" = "milestone.deleted", + "MILESTONE_EDITED" = "milestone.edited", + "MILESTONE_OPENED" = "milestone.opened", + // "ORG_BLOCK" = "org_block", + "ORG_BLOCK_BLOCKED" = "org_block.blocked", + "ORG_BLOCK_UNBLOCKED" = "org_block.unblocked", + // "ORGANIZATION" = "organization", + "ORGANIZATION_DELETED" = "organization.deleted", + "ORGANIZATION_MEMBER_ADDED" = "organization.member_added", + "ORGANIZATION_MEMBER_INVITED" = "organization.member_invited", + "ORGANIZATION_MEMBER_REMOVED" = "organization.member_removed", + "ORGANIZATION_RENAMED" = "organization.renamed", + // "PACKAGE" = "package", + "PACKAGE_PUBLISHED" = "package.published", + "PACKAGE_UPDATED" = "package.updated", + // "PAGE_BUILD" = "page_build", + // "PING" = "ping", + // "PROJECT" = "project", + "PROJECT_CLOSED" = "project.closed", + "PROJECT_CREATED" = "project.created", + "PROJECT_DELETED" = "project.deleted", + "PROJECT_EDITED" = "project.edited", + "PROJECT_REOPENED" = "project.reopened", + // "PROJECT_CARD" = "project_card", + "PROJECT_CARD_CONVERTED" = "project_card.converted", + "PROJECT_CARD_CREATED" = "project_card.created", + "PROJECT_CARD_DELETED" = "project_card.deleted", + "PROJECT_CARD_EDITED" = "project_card.edited", + "PROJECT_CARD_MOVED" = "project_card.moved", + // "PROJECT_COLUMN" = "project_column", + "PROJECT_COLUMN_CREATED" = "project_column.created", + "PROJECT_COLUMN_DELETED" = "project_column.deleted", + "PROJECT_COLUMN_EDITED" = "project_column.edited", + "PROJECT_COLUMN_MOVED" = "project_column.moved", + // "PROJECTS_V2_ITEM" = "projects_v2_item", + "PROJECTS_V2_ITEM_ARCHIVED" = "projects_v2_item.archived", + "PROJECTS_V2_ITEM_CONVERTED" = "projects_v2_item.converted", + "PROJECTS_V2_ITEM_CREATED" = "projects_v2_item.created", + "PROJECTS_V2_ITEM_DELETED" = "projects_v2_item.deleted", + "PROJECTS_V2_ITEM_EDITED" = "projects_v2_item.edited", + "PROJECTS_V2_ITEM_REORDERED" = "projects_v2_item.reordered", + "PROJECTS_V2_ITEM_RESTORED" = "projects_v2_item.restored", + // "PUBLIC" = "public", + // "PULL_REQUEST" = "pull_request", + "PULL_REQUEST_ASSIGNED" = "pull_request.assigned", + "PULL_REQUEST_AUTO_MERGE_DISABLED" = "pull_request.auto_merge_disabled", + "PULL_REQUEST_AUTO_MERGE_ENABLED" = "pull_request.auto_merge_enabled", + "PULL_REQUEST_CLOSED" = "pull_request.closed", + "PULL_REQUEST_CONVERTED_TO_DRAFT" = "pull_request.converted_to_draft", + "PULL_REQUEST_EDITED" = "pull_request.edited", + "PULL_REQUEST_LABELED" = "pull_request.labeled", + "PULL_REQUEST_LOCKED" = "pull_request.locked", + "PULL_REQUEST_OPENED" = "pull_request.opened", + "PULL_REQUEST_READY_FOR_REVIEW" = "pull_request.ready_for_review", + "PULL_REQUEST_REOPENED" = "pull_request.reopened", + "PULL_REQUEST_REVIEW_REQUEST_REMOVED" = "pull_request.review_request_removed", + "PULL_REQUEST_REVIEW_REQUESTED" = "pull_request.review_requested", + "PULL_REQUEST_SYNCHRONIZE" = "pull_request.synchronize", + "PULL_REQUEST_UNASSIGNED" = "pull_request.unassigned", + "PULL_REQUEST_UNLABELED" = "pull_request.unlabeled", + "PULL_REQUEST_UNLOCKED" = "pull_request.unlocked", + // "PULL_REQUEST_REVIEW" = "pull_request_review", + "PULL_REQUEST_REVIEW_DISMISSED" = "pull_request_review.dismissed", + "PULL_REQUEST_REVIEW_EDITED" = "pull_request_review.edited", + "PULL_REQUEST_REVIEW_SUBMITTED" = "pull_request_review.submitted", + // "PULL_REQUEST_REVIEW_COMMENT" = "pull_request_review_comment", + "PULL_REQUEST_REVIEW_COMMENT_CREATED" = "pull_request_review_comment.created", + "PULL_REQUEST_REVIEW_COMMENT_DELETED" = "pull_request_review_comment.deleted", + "PULL_REQUEST_REVIEW_COMMENT_EDITED" = "pull_request_review_comment.edited", + // "PULL_REQUEST_REVIEW_THREAD" = "pull_request_review_thread", + "PULL_REQUEST_REVIEW_THREAD_RESOLVED" = "pull_request_review_thread.resolved", + "PULL_REQUEST_REVIEW_THREAD_UNRESOLVED" = "pull_request_review_thread.unresolved", + "PUSH" = "push", + // "RELEASE" = "release", + "RELEASE_CREATED" = "release.created", + "RELEASE_DELETED" = "release.deleted", + "RELEASE_EDITED" = "release.edited", + "RELEASE_PRERELEASED" = "release.prereleased", + "RELEASE_PUBLISHED" = "release.published", + "RELEASE_RELEASED" = "release.released", + "RELEASE_UNPUBLISHED" = "release.unpublished", + // "REPOSITORY" = "repository", + "REPOSITORY_ARCHIVED" = "repository.archived", + "REPOSITORY_CREATED" = "repository.created", + "REPOSITORY_DELETED" = "repository.deleted", + "REPOSITORY_EDITED" = "repository.edited", + "REPOSITORY_PRIVATIZED" = "repository.privatized", + "REPOSITORY_PUBLICIZED" = "repository.publicized", + "REPOSITORY_RENAMED" = "repository.renamed", + "REPOSITORY_TRANSFERRED" = "repository.transferred", + "REPOSITORY_UNARCHIVED" = "repository.unarchived", + // "REPOSITORY_DISPATCH" = "repository_dispatch", + // "REPOSITORY_IMPORT" = "repository_import", + // "REPOSITORY_VULNERABILITY_ALERT" = "repository_vulnerability_alert", + "REPOSITORY_VULNERABILITY_ALERT_CREATE" = "repository_vulnerability_alert.create", + "REPOSITORY_VULNERABILITY_ALERT_DISMISS" = "repository_vulnerability_alert.dismiss", + "REPOSITORY_VULNERABILITY_ALERT_REOPEN" = "repository_vulnerability_alert.reopen", + "REPOSITORY_VULNERABILITY_ALERT_RESOLVE" = "repository_vulnerability_alert.resolve", + // "SECRET_SCANNING_ALERT" = "secret_scanning_alert", + "SECRET_SCANNING_ALERT_CREATED" = "secret_scanning_alert.created", + "SECRET_SCANNING_ALERT_REOPENED" = "secret_scanning_alert.reopened", + "SECRET_SCANNING_ALERT_RESOLVED" = "secret_scanning_alert.resolved", + // "SECURITY_ADVISORY" = "security_advisory", + "SECURITY_ADVISORY_PERFORMED" = "security_advisory.performed", + "SECURITY_ADVISORY_PUBLISHED" = "security_advisory.published", + "SECURITY_ADVISORY_UPDATED" = "security_advisory.updated", + "SECURITY_ADVISORY_WITHDRAWN" = "security_advisory.withdrawn", + // "SPONSORSHIP" = "sponsorship", + "SPONSORSHIP_CANCELLED" = "sponsorship.cancelled", + "SPONSORSHIP_CREATED" = "sponsorship.created", + "SPONSORSHIP_EDITED" = "sponsorship.edited", + "SPONSORSHIP_PENDING_CANCELLATION" = "sponsorship.pending_cancellation", + "SPONSORSHIP_PENDING_TIER_CHANGE" = "sponsorship.pending_tier_change", + "SPONSORSHIP_TIER_CHANGED" = "sponsorship.tier_changed", + // "STAR" = "star", + "STAR_CREATED" = "star.created", + "STAR_DELETED" = "star.deleted", + // "STATUS" = "status", + // "TEAM" = "team", + "TEAM_ADDED_TO_REPOSITORY" = "team.added_to_repository", + "TEAM_CREATED" = "team.created", + "TEAM_DELETED" = "team.deleted", + "TEAM_EDITED" = "team.edited", + "TEAM_REMOVED_FROM_REPOSITORY" = "team.removed_from_repository", + // "TEAM_ADD" = "team_add", + // "WATCH" = "watch", + "WATCH_STARTED" = "watch.started", + // "WORKFLOW_DISPATCH" = "workflow_dispatch", + // "WORKFLOW_JOB" = "workflow_job", + "WORKFLOW_JOB_COMPLETED" = "workflow_job.completed", + "WORKFLOW_JOB_IN_PROGRESS" = "workflow_job.in_progress", + "WORKFLOW_JOB_QUEUED" = "workflow_job.queued", + // "WORKFLOW_RUN" = "workflow_run", + "WORKFLOW_RUN_COMPLETED" = "workflow_run.completed", + "WORKFLOW_RUN_REQUESTED" = "workflow_run.requested", +} diff --git a/src/types/handlers.ts b/src/types/handlers.ts index 5a79f4dd0..698f47e34 100644 --- a/src/types/handlers.ts +++ b/src/types/handlers.ts @@ -1,10 +1,15 @@ -import { Comment } from "./payload"; +import { LogReturn } from "ubiquibot-logger"; +import { Context } from "./context"; -export type CommandsHandler = (args: string) => Promise; -export type ActionHandler = (args?: string) => Promise; -export type CallbackHandler = (issue_number: number, text: string, action: string, reply_to?: Comment) => Promise; -export type PreActionHandler = ActionHandler; -export type PostActionHandler = ActionHandler; +export type HandlerReturnValuesNoVoid = null | string | LogReturn; + +export type MainActionHandler = (context: Context) => Promise; +type CommandsHandler = (context: Context, body: string) => Promise; + +export type PreActionHandler = (context: Context) => Promise; +export type PostActionHandler = (context: Context) => Promise; + +export type WildCardHandler = (context: Context) => Promise; /** * @dev A set of handlers to do a pre/main/post action for a given action @@ -15,15 +20,13 @@ export type PostActionHandler = ActionHandler; */ export type Handler = { pre: PreActionHandler[]; - action: ActionHandler[]; + action: MainActionHandler[]; post: PostActionHandler[]; }; export type UserCommands = { id: string; description: string; + example: string; handler: CommandsHandler; - callback: CallbackHandler; - successComment?: string; - failureComment?: string; }; diff --git a/src/types/index.ts b/src/types/index.ts deleted file mode 100644 index 83eac7e89..000000000 --- a/src/types/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export * from "./payload"; -export * from "./shared"; -export * from "./label"; -export * from "./handlers"; -export * from "./config"; -export * from "./markdown"; -export * from "./log"; diff --git a/src/types/label.ts b/src/types/label.ts index 48da78856..359595485 100644 --- a/src/types/label.ts +++ b/src/types/label.ts @@ -1,6 +1,6 @@ import { Static, Type } from "@sinclair/typebox"; -export const LabelSchema = Type.Object({ +export const labelSchema = Type.Object({ id: Type.Number(), node_id: Type.String(), url: Type.String(), @@ -10,4 +10,4 @@ export const LabelSchema = Type.Object({ description: Type.Any(), }); -export type Label = Static; +export type Label = Static; diff --git a/src/types/log.ts b/src/types/log.ts deleted file mode 100644 index 8e3e1b913..000000000 --- a/src/types/log.ts +++ /dev/null @@ -1,9 +0,0 @@ -export enum LogLevel { - ERROR = "error", - WARN = "warn", - INFO = "info", - HTTP = "http", - VERBOSE = "verbose", - DEBUG = "debug", - SILLY = "silly", -} diff --git a/src/types/markdown.ts b/src/types/markdown.ts deleted file mode 100644 index 3b5d8f5d3..000000000 --- a/src/types/markdown.ts +++ /dev/null @@ -1,10 +0,0 @@ -export const MarkdownItem = { - Paragraph: "paragraph", - List: "list", - Link: "link", - Text: "text", - Code: "code", - Image: "image", - BlockQuote: "blockquote", -} as const; -export type MarkdownItem = (typeof MarkdownItem)[keyof typeof MarkdownItem]; diff --git a/src/types/openai.ts b/src/types/openai.ts new file mode 100644 index 000000000..e0c94608f --- /dev/null +++ b/src/types/openai.ts @@ -0,0 +1,8 @@ +import { Type as T, Static } from "@sinclair/typebox"; + +const streamlinedCommentSchema = T.Object({ + login: T.Optional(T.String()), + body: T.Optional(T.String()), +}); + +export type StreamlinedComment = Static; diff --git a/src/types/payload.ts b/src/types/payload.ts index 527363b6d..e97a42963 100644 --- a/src/types/payload.ts +++ b/src/types/payload.ts @@ -1,9 +1,9 @@ // https://docs.github.com/en/developers/webhooks-and-events/webhooks/webhook-events-and-payloads import { Static, Type } from "@sinclair/typebox"; -import { LabelSchema } from "./label"; +import { labelSchema } from "./label"; -export enum GithubEvent { +export enum GitHubEvent { // issues events ISSUES_LABELED = "issues.labeled", ISSUES_UNLABELED = "issues.unlabeled", @@ -25,6 +25,11 @@ export enum GithubEvent { // push event PUSH_EVENT = "push", + + // label + LABEL_EDITED = "label.edited", + + REPOSITORY_DISPATCH = "repository_dispatch", } export enum UserType { @@ -36,21 +41,21 @@ export enum UserType { export enum IssueType { OPEN = "open", CLOSED = "closed", - ALL = "all", + // ALL = "all", } export enum StateReason { COMPLETED = "completed", - NOT_PLANNED = "not_planned", + NOT_PLANNED = "not_planned", // these are all used at runtime, not necessarily in the code. REOPENED = "reopened", } -const UserSchema = Type.Object({ +const userSchema = Type.Object({ login: Type.String(), id: Type.Number(), node_id: Type.String(), avatar_url: Type.String(), - gravatar_id: Type.String(), + gravatar_id: Type.Union([Type.Null(), Type.String()]), url: Type.String(), html_url: Type.String(), followers_url: Type.String(), @@ -66,136 +71,156 @@ const UserSchema = Type.Object({ site_admin: Type.Boolean(), }); -const UserProfileSchema = Type.Intersect([ - UserSchema, - Type.Object({ - name: Type.String(), - company: Type.String(), - blog: Type.String(), - location: Type.String(), - email: Type.String(), - hireable: Type.Boolean(), - bio: Type.String(), - twitter_username: Type.String(), - public_repos: Type.Number(), - public_gists: Type.Number(), - followers: Type.Number(), - following: Type.Number(), - created_at: Type.String(), - updated_at: Type.String(), - }), -]); +// const UserProfileSchema = Type.Intersect([ +// UserSchema, +// Type.Object({ +// name: Type.String(), +// company: Type.String(), +// blog: Type.String(), +// location: Type.String(), +// email: Type.String(), +// hireable: Type.Boolean(), +// bio: Type.String(), +// twitter_username: Type.String(), +// public_repos: Type.Number(), +// public_gists: Type.Number(), +// followers: Type.Number(), +// following: Type.Number(), +// created_at: Type.String(), +// updated_at: Type.String(), +// }), +// ]); -export type User = Static; -export type UserProfile = Static; +export type GitHubUser = Static; +// type UserProfile= Static; +export enum AuthorAssociation { + OWNER = "OWNER", + COLLABORATOR = "COLLABORATOR", + MEMBER = "MEMBER", + CONTRIBUTOR = "CONTRIBUTOR", + FIRST_TIMER = "FIRST_TIMER", + FIRST_TIME_CONTRIBUTOR = "FIRST_TIME_CONTRIBUTOR", + NONE = "NONE", +} +// const AuthorAssociation = Type.Enum(_AuthorAssociation); -const IssueSchema = Type.Object({ - url: Type.String(), - repository_url: Type.String(), - labels_url: Type.String(), +const issueSchema = Type.Object({ + assignee: Type.Union([Type.Null(), userSchema]), + assignees: Type.Array(Type.Union([Type.Null(), userSchema])), + author_association: Type.Enum(AuthorAssociation), + body: Type.String(), + closed_at: Type.Union([Type.String({ format: "date-time" }), Type.Null()]), comments_url: Type.String(), + comments: Type.Number(), + created_at: Type.String({ format: "date-time" }), events_url: Type.String(), html_url: Type.String(), id: Type.Number(), - body: Type.Any(), + labels_url: Type.String(), + labels: Type.Array(labelSchema), + locked: Type.Boolean(), node_id: Type.String(), number: Type.Number(), - title: Type.String(), - user: UserSchema, - labels: Type.Array(LabelSchema), - state: Type.Enum(IssueType), + repository_url: Type.String(), state_reason: Type.Union([Type.Enum(StateReason), Type.Null()]), - locked: Type.Boolean(), - assignee: Type.Any(), - assignees: Type.Array(Type.Any()), - comments: Type.Number(), - created_at: Type.String({ format: "date-time" }), + state: Type.Enum(IssueType), + title: Type.String(), updated_at: Type.String({ format: "date-time" }), - closed_at: Type.Any(), - author_association: Type.String(), + url: Type.String(), + user: userSchema, + // OWNER: The author is an owner of the repository. + // COLLABORATOR: The author is a collaborator on the repository. + // MEMBER: The author is a member of the organization that owns the repository. + // CONTRIBUTOR: The author has contributed to the repository but is not a collaborator, member, or owner. + // FIRST_TIMER: The author is a first-time contributor to the repository. + // FIRST_TIME_CONTRIBUTOR: Similar to "FIRST_TIMER," the author is a first-time contributor to the repository. + // NONE: The author does not have any specific association with the repository. }); -export type Issue = Static; -const RepositorySchema = Type.Object({ - id: Type.Number(), - node_id: Type.String(), - name: Type.String(), - full_name: Type.String(), - private: Type.Boolean(), - owner: UserSchema, - html_url: Type.String(), +export type GitHubIssue = Static; + +const repositorySchema = Type.Object({ + allow_forking: Type.Boolean(), + archive_url: Type.String(), + archived: Type.Boolean(), + assignees_url: Type.String(), + blobs_url: Type.String(), + branches_url: Type.String(), + clone_url: Type.String(), + collaborators_url: Type.String(), + comments_url: Type.String(), + commits_url: Type.String(), + compare_url: Type.String(), + contents_url: Type.String(), + contributors_url: Type.String(), + created_at: Type.String({ format: "date-time" }), + default_branch: Type.String(), + deployments_url: Type.String(), description: Type.Union([Type.String(), Type.Null()]), + disabled: Type.Boolean(), + downloads_url: Type.String(), + events_url: Type.String(), fork: Type.Boolean(), - url: Type.String(), + forks_count: Type.Number(), forks_url: Type.String(), - keys_url: Type.String(), - collaborators_url: Type.String(), - teams_url: Type.String(), + forks: Type.Number(), + full_name: Type.String(), + git_commits_url: Type.String(), + git_refs_url: Type.String(), + git_tags_url: Type.String(), + git_url: Type.String(), + has_downloads: Type.Boolean(), + has_issues: Type.Boolean(), + has_pages: Type.Boolean(), + has_projects: Type.Boolean(), + has_wiki: Type.Boolean(), hooks_url: Type.String(), + html_url: Type.String(), + id: Type.Number(), + is_template: Type.Boolean(), + issue_comment_url: Type.String(), issue_events_url: Type.String(), - events_url: Type.String(), - assignees_url: Type.String(), - branches_url: Type.String(), - tags_url: Type.String(), - blobs_url: Type.String(), - git_tags_url: Type.String(), - git_refs_url: Type.String(), - trees_url: Type.String(), - statuses_url: Type.String(), + issues_url: Type.String(), + keys_url: Type.String(), + labels_url: Type.String(), + language: Type.Any(), languages_url: Type.String(), - stargazers_url: Type.String(), - contributors_url: Type.String(), - subscribers_url: Type.String(), - subscription_url: Type.String(), - commits_url: Type.String(), - git_commits_url: Type.String(), - comments_url: Type.String(), - issue_comment_url: Type.String(), - contents_url: Type.String(), - compare_url: Type.String(), + license: Type.Any(), merges_url: Type.String(), - archive_url: Type.String(), - downloads_url: Type.String(), - issues_url: Type.String(), - pulls_url: Type.String(), milestones_url: Type.String(), + name: Type.String(), + node_id: Type.String(), notifications_url: Type.String(), - labels_url: Type.String(), - releases_url: Type.String(), - deployments_url: Type.String(), - created_at: Type.String({ format: "date-time" }), - updated_at: Type.String({ format: "date-time" }), + open_issues_count: Type.Number(), + open_issues: Type.Number(), + owner: userSchema, + private: Type.Boolean(), + pulls_url: Type.String(), pushed_at: Type.String({ format: "date-time" }), - git_url: Type.String(), - ssh_url: Type.String(), - clone_url: Type.String(), - svn_url: Type.String(), + releases_url: Type.String(), size: Type.Number(), + ssh_url: Type.String(), stargazers_count: Type.Number(), - watchers_count: Type.Number(), - language: Type.Any(), - has_issues: Type.Boolean(), - has_projects: Type.Boolean(), - has_downloads: Type.Boolean(), - has_wiki: Type.Boolean(), - has_pages: Type.Boolean(), - forks_count: Type.Number(), - archived: Type.Boolean(), - disabled: Type.Boolean(), - open_issues_count: Type.Number(), - license: Type.Any(), - allow_forking: Type.Boolean(), - is_template: Type.Boolean(), - web_commit_signoff_required: Type.Boolean(), + stargazers_url: Type.String(), + statuses_url: Type.String(), + subscribers_url: Type.String(), + subscription_url: Type.String(), + svn_url: Type.String(), + tags_url: Type.String(), + teams_url: Type.String(), topics: Type.Array(Type.Any()), + trees_url: Type.String(), + updated_at: Type.String({ format: "date-time" }), + url: Type.String(), visibility: Type.String(), - forks: Type.Number(), - open_issues: Type.Number(), + watchers_count: Type.Number(), watchers: Type.Number(), - default_branch: Type.String(), + web_commit_signoff_required: Type.Boolean(), }); -const OrganizationSchema = Type.Object({ +export type GitHubRepository = Static; + +const organizationSchema = Type.Object({ login: Type.String(), id: Type.Number(), node_id: Type.String(), @@ -210,7 +235,7 @@ const OrganizationSchema = Type.Object({ description: Type.Union([Type.String(), Type.Null()]), }); -const CommitsSchema = Type.Object({ +const commitsSchema = Type.Object({ id: Type.String(), distinct: Type.Boolean(), added: Type.Array(Type.String()), @@ -218,31 +243,44 @@ const CommitsSchema = Type.Object({ modified: Type.Array(Type.String()), }); -export type CommitsPayload = Static; +export type GitHubCommitsPayload = Static; -const InstallationSchema = Type.Object({ +const installationSchema = Type.Object({ id: Type.Number(), node_id: Type.String(), }); -export const CommentSchema = Type.Object({ - url: Type.String(), +const commentSchema = Type.Object({ + author_association: Type.String(), + body_html: Type.Optional(Type.String()), + body_text: Type.Optional(Type.String()), + body: Type.String(), + created_at: Type.String({ format: "date-time" }), html_url: Type.String(), - issue_url: Type.String(), id: Type.Number(), + issue_url: Type.String(), node_id: Type.String(), - user: UserSchema, - created_at: Type.String({ format: "date-time" }), updated_at: Type.String({ format: "date-time" }), - author_association: Type.String(), - body: Type.String(), - body_html: Type.Optional(Type.String()), - body_text: Type.Optional(Type.String()), + url: Type.String(), + user: userSchema, + reactions: Type.Object({ + url: Type.String(), + total_count: Type.Number(), + "+1": Type.Number(), + "-1": Type.Number(), + laugh: Type.Number(), + hooray: Type.Number(), + confused: Type.Number(), + heart: Type.Number(), + rocket: Type.Number(), + eyes: Type.Number(), + }), + // performed_via_github_app: Type.Optional(Type.Boolean()), }); -export type Comment = Static; +export type GitHubComment = Static; -export const AssignEventSchema = Type.Object({ +const assignEventSchema = Type.Object({ url: Type.String(), id: Type.Number(), node_id: Type.String(), @@ -250,45 +288,59 @@ export const AssignEventSchema = Type.Object({ commit_id: Type.String(), commit_url: Type.String(), created_at: Type.String({ format: "date-time" }), - actor: UserSchema, - assignee: UserSchema, - assigner: UserSchema, + actor: userSchema, + assignee: userSchema, + assigner: userSchema, }); -export type AssignEvent = Static; +export type GitHubAssignEvent = Static; -export const PayloadSchema = Type.Object({ +const changesSchema = Type.Object({ + body: Type.Optional( + Type.Object({ + from: Type.String(), + }) + ), + name: Type.Optional( + Type.Object({ + from: Type.String(), + }) + ), +}); + +export const payloadSchema = Type.Object({ action: Type.String(), - issue: Type.Optional(IssueSchema), - label: Type.Optional(LabelSchema), - comment: Type.Optional(CommentSchema), - sender: UserSchema, - repository: RepositorySchema, - organization: Type.Optional(OrganizationSchema), - installation: Type.Optional(InstallationSchema), - repositories_added: Type.Optional(Type.Array(RepositorySchema)), + issue: Type.Optional(issueSchema), + label: Type.Optional(labelSchema), + comment: Type.Optional(commentSchema), + sender: userSchema, + repository: repositorySchema, + organization: Type.Optional(organizationSchema), + installation: Type.Optional(installationSchema), + repositories_added: Type.Optional(Type.Array(repositorySchema)), + changes: Type.Optional(changesSchema), }); -export type Payload = Static; +export type GitHubPayload = Static; -export const PushSchema = Type.Object({ +const pushSchema = Type.Object({ ref: Type.String(), action: Type.String(), before: Type.String(), after: Type.String(), - repository: RepositorySchema, - sender: UserSchema, + repository: repositorySchema, + sender: userSchema, created: Type.Boolean(), deleted: Type.Boolean(), forced: Type.Boolean(), - commits: Type.Array(CommitsSchema), - head_commit: CommitsSchema, - installation: Type.Optional(InstallationSchema), + commits: Type.Array(commitsSchema), + head_commit: commitsSchema, + installation: Type.Optional(installationSchema), }); -export type PushPayload = Static; +export type GitHubPushPayload = Static; -export const GithubContentSchema = Type.Object({ +const githubContentSchema = Type.Object({ type: Type.String(), encoding: Type.String(), size: Type.Number(), @@ -310,4 +362,69 @@ export const GithubContentSchema = Type.Object({ ]), }); -export type GithubContent = Static; +export type GithubContent = Static; +// type GitHubOrganization = { +// login: string; +// id: number; +// node_id: string; +// url: string; +// repos_url: string; +// events_url: string; +// hooks_url: string; +// issues_url: string; +// members_url: string; +// public_members_url: string; +// avatar_url: string; +// description: string; +// }; + +// type GitHubOrganizationPayload = { +// action: string; +// membership?: { +// url: string; +// state: string; +// role: string; +// organization_url: string; +// user: { +// login: string; +// id: number; +// node_id: string; +// avatar_url: string; +// gravatar_id: string; +// url: string; +// html_url: string; +// followers_url: string; +// following_url: string; +// gists_url: string; +// starred_url: string; +// subscriptions_url: string; +// organizations_url: string; +// repos_url: string; +// events_url: string; +// received_events_url: string; +// type: string; +// site_admin: boolean; +// }; +// }; +// organization: GitHubOrganization; +// sender: { +// login: string; +// id: number; +// node_id: string; +// avatar_url: string; +// gravatar_id: string; +// url: string; +// html_url: string; +// followers_url: string; +// following_url: string; +// gists_url: string; +// starred_url: string; +// subscriptions_url: string; +// organizations_url: string; +// repos_url: string; +// events_url: string; +// received_events_url: string; +// type: string; +// site_admin: boolean; +// }; +// }; diff --git a/src/types/shared.ts b/src/types/shared.ts deleted file mode 100644 index 8a60db53a..000000000 --- a/src/types/shared.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Type } from "@sinclair/typebox"; - -export const TURL = Type.String({ format: "ipv4" }); diff --git a/src/types/valid-html-elements.ts b/src/types/valid-html-elements.ts new file mode 100644 index 000000000..b752853bc --- /dev/null +++ b/src/types/valid-html-elements.ts @@ -0,0 +1,110 @@ +export const validHTMLElements: Array = [ + "a", + "abbr", + "address", + "area", + "article", + "aside", + "audio", + "b", + "base", + "bdi", + "bdo", + "blockquote", + "body", + "br", + "button", + "canvas", + "caption", + "cite", + "code", + "col", + "colgroup", + "data", + "datalist", + "dd", + "del", + "details", + "dfn", + "dialog", + "div", + "dl", + "dt", + "em", + "embed", + "fieldset", + "figcaption", + "figure", + "footer", + "form", + "h1", + "h2", + "h3", + "h4", + "h5", + "h6", + "head", + "header", + "hgroup", + "hr", + "html", + "i", + "iframe", + "img", + "input", + "ins", + "kbd", + "label", + "legend", + "li", + "link", + "main", + "map", + "mark", + "meta", + "meter", + "nav", + "noscript", + "object", + "ol", + "optgroup", + "option", + "output", + "p", + "picture", + "pre", + "progress", + "q", + "rp", + "rt", + "ruby", + "s", + "samp", + "script", + "section", + "select", + "small", + "source", + "span", + "strong", + "style", + "sub", + "summary", + "sup", + "table", + "tbody", + "td", + "textarea", + "tfoot", + "th", + "thead", + "time", + "title", + "tr", + "track", + "u", + "ul", + "var", + "video", + "wbr", +]; diff --git a/src/utils/address.ts b/src/utils/address.ts deleted file mode 100644 index adebe3a3c..000000000 --- a/src/utils/address.ts +++ /dev/null @@ -1,18 +0,0 @@ -export const shortenEthAddress = (address: string, len: number) => { - let prefixLength = 6; - let suffixLength = 5; - - if (len > 13) { - const isEven = len % 2 === 0; - prefixLength = isEven ? len / 2 + 1 : Math.ceil(len / 2); - suffixLength = isEven ? len / 2 - 1 : Math.floor(len / 2); - } - const prefix = address.substring(0, prefixLength); - const suffix = address.substring(address.length - suffixLength); - - return `${prefix}...${suffix}`; -}; - -export const formatEthAddress = (address: string) => { - return "`" + address + "`"; -}; diff --git a/src/utils/ajv.ts b/src/utils/ajv.ts index ce632101e..861c9233d 100644 --- a/src/utils/ajv.ts +++ b/src/utils/ajv.ts @@ -1,47 +1,38 @@ -import Ajv, { Schema } from "ajv"; +import Ajv from "ajv"; import addFormats from "ajv-formats"; -export const ajv = addFormats(new Ajv(), { - formats: [ - "date", - "time", - "date-time", - "duration", - "uri", - "uri-reference", - "uri-template", - "email", - "hostname", - "ipv4", - "ipv6", - "regex", - "uuid", - "json-pointer", - "relative-json-pointer", - "byte", - "int32", - "int64", - "float", - "double", - "password", - "binary", - ], -}); - -export function getAdditionalProperties() { - return ajv.errors?.filter((error) => error.keyword === "additionalProperties").map((error) => error.params.additionalProperty); -} - -export function validate(scheme: string | Schema, data: unknown): { valid: true; error: undefined } | { valid: false; error: string } { - const valid = ajv.validate(scheme, data); - if (!valid) { - const additionalProperties = getAdditionalProperties(); - return { - valid: false, - error: `${ajv.errorsText()}. ${ - additionalProperties && additionalProperties.length > 0 ? `Unnecessary properties: ${additionalProperties.join(", ")}` : "" - }`, - }; +export const ajv = addFormats( + new Ajv({ + strict: true, + removeAdditional: false, + useDefaults: true, + allErrors: true, + coerceTypes: true, + }), + { + formats: [ + "date", + "time", + "date-time", + "duration", + "uri", + "uri-reference", + "uri-template", + "email", + "hostname", + "ipv4", + "ipv6", + "regex", + "uuid", + "json-pointer", + "relative-json-pointer", + "byte", + "int32", + "int64", + "float", + "double", + "password", + "binary", + ], } - return { valid: true, error: undefined }; -} +); diff --git a/src/utils/check-github-rate-limit.ts b/src/utils/check-github-rate-limit.ts new file mode 100644 index 000000000..7d73c2145 --- /dev/null +++ b/src/utils/check-github-rate-limit.ts @@ -0,0 +1,18 @@ +import Runtime from "../bindings/bot-runtime"; + +export async function checkRateLimitGit(headers: { "x-ratelimit-remaining"?: string; "x-ratelimit-reset"?: string }) { + const remainingRequests = headers["x-ratelimit-remaining"] ? parseInt(headers["x-ratelimit-remaining"]) : 0; + if (remainingRequests === 0) { + const resetTime = new Date((headers["x-ratelimit-reset"] ? parseInt(headers["x-ratelimit-reset"]) : 0) * 1000); + const now = new Date(); + const timeToWait = resetTime.getTime() - now.getTime(); + const logger = Runtime.getState().logger; + logger.error("No remaining requests.", { resetTime, now, timeToWait }); + await wait(timeToWait); + } + return remainingRequests; +} + +function wait(ms: number) { + return new Promise((r) => setTimeout(r, ms)); +} diff --git a/src/utils/generate-configuration.ts b/src/utils/generate-configuration.ts new file mode 100644 index 000000000..0f16c3aa5 --- /dev/null +++ b/src/utils/generate-configuration.ts @@ -0,0 +1,151 @@ +import { Value } from "@sinclair/typebox/value"; +import { DefinedError } from "ajv"; +import mergeWith from "lodash/merge"; +import { Context as ProbotContext } from "probot"; +import YAML from "yaml"; +import Runtime from "../bindings/bot-runtime"; +import { BotConfig, stringDuration, validateBotConfig } from "../types/configuration-types"; +import { GitHubPayload } from "../types/payload"; + +const UBIQUIBOT_CONFIG_REPOSITORY = "ubiquibot-config"; +const UBIQUIBOT_CONFIG_FULL_PATH = ".github/ubiquibot-config.yml"; + +export async function generateConfiguration(context: ProbotContext): Promise { + const payload = context.payload as GitHubPayload; + + const orgConfig = parseYaml( + await download({ + context, + repository: UBIQUIBOT_CONFIG_REPOSITORY, + owner: payload.organization?.login || payload.repository.owner.login, + }) + ); + + const repoConfig = parseYaml( + await download({ + context, + repository: payload.repository.name, + owner: payload.repository.owner.login, + }) + ); + + const merged = mergeWith({}, orgConfig, repoConfig, (objValue: unknown, srcValue: unknown) => { + if (Array.isArray(objValue) && Array.isArray(srcValue)) { + // if it's string array, concat and remove duplicates + if (objValue.every((value) => typeof value === "string")) { + return [...new Set(objValue.concat(srcValue))]; + } + // otherwise just concat + return objValue.concat(srcValue); + } + }); + + const logger = Runtime.getState().logger; + + const isValid = validateBotConfig(merged); + if (!isValid) { + const errorMessage = getErrorMsg(validateBotConfig.errors as DefinedError[]); + if (errorMessage) { + throw logger.fatal("Invalid merged configuration", { errorMessage }, true); + } + } + + // this will run transform functions + try { + transformConfig(merged); + } catch (err) { + if (err instanceof Error && payload.issue?.number) { + throw logger.fatal("Configuration error", { err }, true); + } + } + + // console.dir(merged, { depth: null, colors: true }); + return merged as BotConfig; +} + +// Transforming the config only works with Typebox and not Ajv +// When you use Decode() it not only transforms the values but also validates the whole config and Typebox doesn't return all errors so we can filter for correct ones +// That's why we have transform every field manually and catch errors +export function transformConfig(config: BotConfig) { + let errorMsg = ""; + try { + config.timers.reviewDelayTolerance = Value.Decode(stringDuration(), config.timers.reviewDelayTolerance); + } catch (err: unknown) { + const decodeError = err as DecodeError; + if (decodeError.value) { + errorMsg += `Invalid reviewDelayTolerance value: ${decodeError.value}\n`; + } + } + try { + config.timers.taskStaleTimeoutDuration = Value.Decode(stringDuration(), config.timers.taskStaleTimeoutDuration); + } catch (err: unknown) { + const decodeError = err as DecodeError; + if (decodeError.value) { + errorMsg += `Invalid taskStaleTimeoutDuration value: ${decodeError.value}\n`; + } + } + try { + config.timers.taskFollowUpDuration = Value.Decode(stringDuration(), config.timers.taskFollowUpDuration); + } catch (err: unknown) { + const decodeError = err as DecodeError; + if (decodeError.value) { + errorMsg += `Invalid taskFollowUpDuration value: ${decodeError.value}\n`; + } + } + try { + config.timers.taskDisqualifyDuration = Value.Decode(stringDuration(), config.timers.taskDisqualifyDuration); + } catch (err: unknown) { + const decodeError = err as DecodeError; + if (decodeError.value) { + errorMsg += `Invalid taskDisqualifyDuration value: ${decodeError.value}\n`; + } + } + if (errorMsg) throw new Error(errorMsg); +} + +function getErrorMsg(errors: DefinedError[]) { + const errorsWithoutStrict = errors.filter((error) => error.keyword !== "additionalProperties"); + return errorsWithoutStrict.length === 0 + ? null + : errorsWithoutStrict.map((error) => error.instancePath.replaceAll("/", ".") + " " + error.message).join("\n"); +} + +async function download({ + context, + repository, + owner, +}: { + context: ProbotContext; + repository: string; + owner: string; +}): Promise { + if (!repository || !owner) throw new Error("Repo or owner is not defined"); + try { + const { data } = await context.octokit.rest.repos.getContent({ + owner, + repo: repository, + path: UBIQUIBOT_CONFIG_FULL_PATH, + mediaType: { format: "raw" }, + }); + return data as unknown as string; // this will be a string if media format is raw + } catch (err) { + return null; + } +} + +export function parseYaml(data: null | string) { + try { + if (data) { + const parsedData = YAML.parse(data); + return parsedData ?? null; + } + } catch (error) { + const logger = Runtime.getState().logger; + logger.fatal("Failed to parse YAML", { error }); + } + return null; +} + +interface DecodeError extends Error { + value?: string; +} diff --git a/src/utils/github.ts b/src/utils/github.ts deleted file mode 100644 index dabfdd006..000000000 --- a/src/utils/github.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { wait } from "../helpers"; - -// explain how this works -/** - * Checks the rate limit for the GitHub API and waits if necessary - * @param headers The headers of the response - * @returns The remaining requests - * @example - * const remainingRequests = await checkRateLimitGit(headers); - * console.log(`Remaining requests: ${remainingRequests}`); - **/ - -export const checkRateLimitGit = async (headers: { "x-ratelimit-remaining"?: string; "x-ratelimit-reset"?: string }) => { - // Check the remaining limit - const remainingRequests = headers["x-ratelimit-remaining"] ? parseInt(headers["x-ratelimit-remaining"]) : 0; - - // If there are no more remaining requests for this hour, we wait for the reset time - if (remainingRequests === 0) { - // const resetTime = new Date(parseInt(headers["x-ratelimit-reset"]! || "0") * 1000); - const resetTime = new Date((headers["x-ratelimit-reset"] ? parseInt(headers["x-ratelimit-reset"]) : 0) * 1000); - const now = new Date(); - const timeToWait = resetTime.getTime() - now.getTime(); - console.log(`No remaining requests. Waiting for ${timeToWait}ms...`); - await wait(timeToWait); - } - - return remainingRequests; -}; diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts deleted file mode 100644 index 3ce69951f..000000000 --- a/src/utils/helpers.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const ErrorDiff = (message: unknown) => { - return "```diff\n! " + message + "\n```"; -}; diff --git a/src/utils/index.ts b/src/utils/index.ts deleted file mode 100644 index 4f3d54df8..000000000 --- a/src/utils/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from "./ajv"; -export * from "./address"; -export * from "./github"; diff --git a/src/utils/private.ts b/src/utils/private.ts deleted file mode 100644 index dffbde8cc..000000000 --- a/src/utils/private.ts +++ /dev/null @@ -1,168 +0,0 @@ -import _sodium from "libsodium-wrappers"; -import YAML from "yaml"; -import { MergedConfig, Payload } from "../types"; -import { Context } from "probot"; -import merge from "lodash/merge"; - -import { DefaultConfig } from "../configs"; -import { validate } from "./ajv"; -import { Config, RepositoryConfig, ConfigSchema } from "../types"; - -const CONFIG_REPO = "ubiquibot-config"; -const CONFIG_PATH = ".github/ubiquibot-config.yml"; -const KEY_NAME = "privateKeyEncrypted"; -const KEY_PREFIX = "HSK_"; - -export const getConfigSuperset = async (context: Context, type: "org" | "repo", filePath: string): Promise => { - try { - const payload = context.payload as Payload; - const repo = type === "org" ? CONFIG_REPO : payload.repository.name; - const owner = type === "org" ? payload.organization?.login : payload.repository.owner.login; - if (!repo || !owner) return undefined; - const { data } = await context.octokit.rest.repos.getContent({ - owner, - repo, - path: filePath, - mediaType: { - format: "raw", - }, - }); - return data as unknown as string; - } catch (error: unknown) { - return undefined; - } -}; - -export interface MergedConfigs { - parsedRepo: RepositoryConfig | undefined; - parsedOrg: RepositoryConfig | undefined; - parsedDefault: MergedConfig; -} - -export const parseYAML = (data?: string): Config | undefined => { - try { - if (data) { - const parsedData = YAML.parse(data); - return parsedData ?? undefined; - } - return undefined; - } catch (error) { - return undefined; - } -}; - -export const getOrgAndRepoFromPath = (path: string) => { - const parts = path.split("/"); - - if (parts.length !== 2) { - return { org: null, repo: null }; - } - - const [org, repo] = parts; - - return { org, repo }; -}; - -export const getPrivateKey = async (cipherText: string): Promise => { - try { - await _sodium.ready; - const sodium = _sodium; - - const privateKey = process.env.X25519_PRIVATE_KEY; - const publicKey = await getScalarKey(privateKey); - - if (!publicKey || !privateKey) { - return undefined; - } - - const binPub = sodium.from_base64(publicKey, sodium.base64_variants.URLSAFE_NO_PADDING); - const binPriv = sodium.from_base64(privateKey, sodium.base64_variants.URLSAFE_NO_PADDING); - const binCipher = sodium.from_base64(cipherText, sodium.base64_variants.URLSAFE_NO_PADDING); - - let walletPrivateKey: string | undefined = sodium.crypto_box_seal_open(binCipher, binPub, binPriv, "text"); - walletPrivateKey = walletPrivateKey.replace(KEY_PREFIX, ""); - return walletPrivateKey; - } catch (error: unknown) { - return undefined; - } -}; - -export const getScalarKey = async (X25519_PRIVATE_KEY: string | undefined): Promise => { - try { - if (X25519_PRIVATE_KEY !== undefined) { - await _sodium.ready; - const sodium = _sodium; - - const binPriv = sodium.from_base64(X25519_PRIVATE_KEY, sodium.base64_variants.URLSAFE_NO_PADDING); - const scalerPub = sodium.crypto_scalarmult_base(binPriv, "base64"); - return scalerPub; - } - return undefined; - } catch (error: unknown) { - return undefined; - } -}; - -const mergeConfigs = (configs: MergedConfigs) => { - return merge({}, configs.parsedDefault, configs.parsedOrg, configs.parsedRepo); -}; - -export const getConfig = async (context: Context) => { - const orgConfig = await getConfigSuperset(context, "org", CONFIG_PATH); - const repoConfig = await getConfigSuperset(context, "repo", CONFIG_PATH); - - const parsedOrg: RepositoryConfig | undefined = parseYAML(orgConfig); - - if (parsedOrg) { - const { valid, error } = validate(ConfigSchema, parsedOrg); - if (!valid) { - throw new Error(`Invalid org config: ${error}`); - } - } - const parsedRepo: RepositoryConfig | undefined = parseYAML(repoConfig); - if (parsedRepo) { - const { valid, error } = validate(ConfigSchema, parsedRepo); - if (!valid) { - throw new Error(`Invalid repo config: ${error}`); - } - } - const parsedDefault: MergedConfig = DefaultConfig; - - let privateKeyDecrypted; - if (parsedRepo && parsedRepo[KEY_NAME]) { - privateKeyDecrypted = await getPrivateKey(parsedRepo[KEY_NAME]); - } else if (parsedOrg && parsedOrg[KEY_NAME]) { - privateKeyDecrypted = await getPrivateKey(parsedOrg[KEY_NAME]); - } else { - privateKeyDecrypted = undefined; - } - - const configs: MergedConfigs = { parsedDefault, parsedOrg, parsedRepo }; - const mergedConfigData: MergedConfig = mergeConfigs(configs); - - const configData = { - assistivePricing: mergedConfigData.assistivePricing, - baseMultiplier: mergedConfigData.priceMultiplier, - commandSettings: mergedConfigData.commandSettings, - defaultLabels: mergedConfigData.defaultLabels, - disableAnalytics: mergedConfigData.disableAnalytics, - evmNetworkId: mergedConfigData.evmNetworkId, - incentiveMode: mergedConfigData.commentIncentives, - incentives: mergedConfigData.incentives, - issueCreatorMultiplier: mergedConfigData.issueCreatorMultiplier, - maxConcurrentTasks: mergedConfigData.maxConcurrentAssigns, - newContributorGreeting: mergedConfigData.newContributorGreeting, - openAIKey: mergedConfigData.openAIKey, - openAITokenLimit: mergedConfigData.openAITokenLimit, - permitMaxPrice: mergedConfigData.permitMaxPrice, - priorityLabels: mergedConfigData.priorityLabels, - privateKey: privateKeyDecrypted ?? "", - promotionComment: mergedConfigData.promotionComment, - publicAccessControl: mergedConfigData.publicAccessControl, - registerWalletWithVerification: mergedConfigData.registerWalletWithVerification, - staleTaskTime: mergedConfigData.staleTaskTime, - timeLabels: mergedConfigData.timeLabels, - }; - - return configData; -}; diff --git a/src/utils/web-assets.ts b/src/utils/web-assets.ts deleted file mode 100644 index 8d85225b4..000000000 --- a/src/utils/web-assets.ts +++ /dev/null @@ -1,20 +0,0 @@ -import axios from "axios"; -import { createWriteStream } from "fs"; - -export const fetchImage = async (url: string): Promise => { - const dir = "../assets/images/flat.png"; - const writer = createWriteStream(dir); - - const response = await axios({ - url, - method: "GET", - responseType: "stream", - }); - - response.data.pipe(writer); - - return new Promise((resolve, reject) => { - writer.on("finish", resolve); - writer.on("error", reject); - }); -}; diff --git a/supabase/.gitignore b/supabase/.gitignore new file mode 100644 index 000000000..773c7c3e0 --- /dev/null +++ b/supabase/.gitignore @@ -0,0 +1,3 @@ +# Supabase +.branches +.temp diff --git a/supabase/config.toml b/supabase/config.toml index 2708cc34f..2d666002b 100644 --- a/supabase/config.toml +++ b/supabase/config.toml @@ -1,8 +1,9 @@ -# A string used to distinguish different Supabase projects on the same host. Defaults to the working -# directory name when running `supabase init`. -project_id = "supa_demo" +# A string used to distinguish different Supabase projects on the same host. Defaults to the +# working directory name when running `supabase init`. +project_id = "ubiquibot" [api] +enabled = true # Port to use for the API URL. port = 54321 # Schemas to expose in your API. Tables, views and stored procedures in this schema will get API @@ -17,35 +18,65 @@ max_rows = 1000 [db] # Port to use for the local database URL. port = 54322 +# Port used by db diff command to initialise the shadow database. +shadow_port = 54320 # The database major version to use. This has to be the same as your remote database's. Run `SHOW # server_version;` on the remote database to check. major_version = 15 +[db.pooler] +enabled = false +# Port to use for the local connection pooler. +port = 54329 +# Specifies when a server connection can be reused by other clients. +# Configure one of the supported pooler modes: `transaction`, `session`. +pool_mode = "transaction" +# How many server connections to allow per user/database pair. +default_pool_size = 20 +# Maximum number of client connections allowed. +max_client_conn = 100 + +[realtime] +enabled = true +# Bind realtime via either IPv4 or IPv6. (default: IPv6) +# ip_version = "IPv6" + [studio] +enabled = true # Port to use for Supabase Studio. port = 54323 +# External URL of the API server that frontend connects to. +api_url = "http://localhost" # Email testing server. Emails sent with the local dev setup are not actually sent - rather, they # are monitored, and you can view the emails that would have been sent from the web interface. [inbucket] +enabled = true # Port to use for the email testing server web interface. port = 54324 -smtp_port = 54325 -pop3_port = 54326 +# Uncomment to expose additional ports for testing user applications that send emails. +# smtp_port = 54325 +# pop3_port = 54326 [storage] +enabled = true # The maximum file size allowed (e.g. "5MB", "500KB"). file_size_limit = "50MiB" [auth] +enabled = true # The base URL of your website. Used as an allow-list for redirects and for constructing URLs used # in emails. site_url = "http://localhost:3000" # A list of *exact* URLs that auth providers are permitted to redirect to post authentication. additional_redirect_urls = ["https://localhost:3000"] -# How long tokens are valid for, in seconds. Defaults to 3600 (1 hour), maximum 604,800 seconds (one -# week). +# How long tokens are valid for, in seconds. Defaults to 3600 (1 hour), maximum 604,800 (1 week). jwt_expiry = 3600 +# If disabled, the refresh token will never expire. +enable_refresh_token_rotation = true +# Allows refresh tokens to be reused after expiry, up to the specified interval in seconds. +# Requires enable_refresh_token_rotation = true. +refresh_token_reuse_interval = 10 # Allow/disallow new user signups to your project. enable_signup = true @@ -58,15 +89,46 @@ double_confirm_changes = true # If enabled, users need to confirm their email address before signing in. enable_confirmations = false +# Uncomment to customize email template +# [auth.email.template.invite] +# subject = "You have been invited" +# content_path = "./supabase/templates/invite.html" + +[auth.sms] +# Allow/disallow new user signups via SMS to your project. +enable_signup = true +# If enabled, users need to confirm their phone number before signing in. +enable_confirmations = false + +# Use pre-defined map of phone number to OTP for testing. +[auth.sms.test_otp] +# 4152127777 = "123456" + +# Configure one of the supported SMS providers: `twilio`, `twilio_verify`, `messagebird`, `textlocal`, `vonage`. +[auth.sms.twilio] +enabled = false +account_sid = "" +message_service_sid = "" +# DO NOT commit your Twilio auth token to git. Use environment variable substitution instead: +auth_token = "env(SUPABASE_AUTH_SMS_TWILIO_AUTH_TOKEN)" + # Use an external OAuth provider. The full list of providers are: `apple`, `azure`, `bitbucket`, # `discord`, `facebook`, `github`, `gitlab`, `google`, `keycloak`, `linkedin`, `notion`, `twitch`, # `twitter`, `slack`, `spotify`, `workos`, `zoom`. [auth.external.apple] enabled = false client_id = "" -secret = "" +# DO NOT commit your OAuth provider secret to git. Use environment variable substitution instead: +secret = "env(SUPABASE_AUTH_EXTERNAL_APPLE_SECRET)" # Overrides the default auth redirectUrl. redirect_uri = "" # Overrides the default auth provider URL. Used to support self-hosted gitlab, single-tenant Azure, # or any other third-party OIDC providers. -url = "" \ No newline at end of file +url = "" + +[analytics] +enabled = false +port = 54327 +vector_port = 54328 +# Configure one of the supported backends: `postgres`, `bigquery`. +backend = "postgres" diff --git a/supabase/functions/.vscode/extensions.json b/supabase/functions/.vscode/extensions.json new file mode 100644 index 000000000..74baffcc4 --- /dev/null +++ b/supabase/functions/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["denoland.vscode-deno"] +} diff --git a/supabase/functions/.vscode/settings.json b/supabase/functions/.vscode/settings.json new file mode 100644 index 000000000..97e437224 --- /dev/null +++ b/supabase/functions/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "deno.enable": true, + "deno.lint": true, + "editor.defaultFormatter": "denoland.vscode-deno", + "jest.jestCommandLine": "npx jest" +} diff --git a/supabase/migrations/20230924193504_label_changes.sql b/supabase/migrations/20230924193504_label_changes.sql new file mode 100644 index 000000000..8198ff825 --- /dev/null +++ b/supabase/migrations/20230924193504_label_changes.sql @@ -0,0 +1,10 @@ +CREATE TABLE IF NOT EXISTS label_changes ( + id serial PRIMARY KEY, + created timestamptz NOT NULL, + updated timestamptz NOT NULL, + username text NOT NULL, + repository text NOT NULL, + label_from text NOT NULL, + label_to text NOT NULL, + authorized boolean NOT NULL +); \ No newline at end of file diff --git a/supabase/migrations/20230924193752_label_changes_rls.sql b/supabase/migrations/20230924193752_label_changes_rls.sql new file mode 100644 index 000000000..3c39eb518 --- /dev/null +++ b/supabase/migrations/20230924193752_label_changes_rls.sql @@ -0,0 +1 @@ +ALTER TABLE label_changes ENABLE ROW LEVEL SECURITY \ No newline at end of file diff --git a/supabase/seed.sql b/supabase/seed.sql new file mode 100644 index 000000000..e69de29bb diff --git a/tsconfig.json b/tsconfig.json index 6dacfb57e..ca43e17b5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,20 +1,19 @@ { - "exclude": ["src/reference"], "compilerOptions": { /* Basic Options */ - "incremental": true /* Enable incremental compilation */, + "incremental": false /* Enable incremental compilation */, "target": "ESNEXT" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */, "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */, - "lib": ["es2015", "es2017"] /* Specify library files to be included in the compilation. */, + "lib": ["DOM", "ESNext"] /* Specify library files to be included in the compilation. */, "allowJs": true /* Allow javascript files to be compiled. */, "checkJs": true /* Report errors in .js files. */, // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ "declaration": true /* Generates corresponding '.d.ts' file. */, // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ - "sourceMap": true /* Generates corresponding '.map' file. */, + // "sourceMap": true /* Generates corresponding '.map' file. */, // "outFile": "./", /* Concatenate and emit output to single file. */ - "outDir": "./lib" /* Redirect output structure to the directory. */, - // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + "outDir": "./dist" /* Redirect output structure to the directory. */, + "rootDir": "./src" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */, // "composite": true, /* Enable project compilation */ // "tsBuildInfoFile": "./" /* Specify file to store incremental compilation information */, // "removeComments": true, /* Do not emit comments to output. */ @@ -34,7 +33,7 @@ /* Additional Checks */ "noUnusedLocals": true /* Report errors on unused locals. */, "noUnusedParameters": true /* Report errors on unused parameters. */, - "noImplicitReturns": true /* Report error when not all code paths in function return a value. */, + "noImplicitReturns": false /* Report error when not all code paths in function return a value. */, "noFallthroughCasesInSwitch": true /* Report errors for fallthrough cases in switch statement. */, /* Module Resolution Options */ "moduleResolution": "node" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */, @@ -50,8 +49,8 @@ /* Source Map Options */ // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + "inlineSourceMap": false /* Emit a single file with source maps instead of having a separate file. */, + "inlineSources": true /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */, /* Experimental Options */ "experimentalDecorators": true /* Enables experimental support for ES7 decorators. */, "emitDecoratorMetadata": true /* Enables experimental support for emitting type metadata for decorators. */, @@ -59,8 +58,10 @@ "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */, "resolveJsonModule": true, "pretty": false, - "skipLibCheck": true + "skipLibCheck": true, + "sourceMap": true }, - "include": ["src/"], + "include": ["src/", "research"], + "exclude": ["src/coverage/"], "compileOnSave": false } diff --git a/ubiquibot.code-workspace b/ubiquibot.code-workspace new file mode 100644 index 000000000..a9ad457db --- /dev/null +++ b/ubiquibot.code-workspace @@ -0,0 +1,17 @@ +{ + "folders": [ + { + "name": "project-root", + "path": "./" + }, + { + "name": "supabase-functions", + "path": "supabase/functions" + } + ], + "settings": { + "files.exclude": { + "supabase/functions/": true + } + } +} diff --git a/yarn.lock b/yarn.lock index f345f75d5..7062072bf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,9715 +1,19756 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - -"@actions/core@^1.10.0", "@actions/core@^1.2.6": - version "1.10.1" - resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.10.1.tgz#61108e7ac40acae95ee36da074fa5850ca4ced8a" - integrity sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g== - dependencies: - "@actions/http-client" "^2.0.1" - uuid "^8.3.2" - -"@actions/http-client@^2.0.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-2.1.1.tgz#a8e97699c315bed0ecaeaaeb640948470d4586a0" - integrity sha512-qhrkRMB40bbbLo7gF+0vu+X+UawOvQQqNAA/5Unx774RS8poaOhThDOG6BGmxvAnxhQnDp2BG/ZUm65xZILTpw== - dependencies: - tunnel "^0.0.6" - -"@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== - dependencies: - "@babel/highlight" "^7.22.13" - chalk "^2.4.2" - -"@babel/compat-data@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" - integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== - -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.5": - version "7.22.17" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.17.tgz#2f9b0b395985967203514b24ee50f9fd0639c866" - integrity sha512-2EENLmhpwplDux5PSsZnSbnSkB3tZ6QTksgO25xwEL7pIDcNOMhF5v/s6RzwjMZzZzw9Ofc30gHv5ChCC8pifQ== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.22.15" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.22.17" - "@babel/helpers" "^7.22.15" - "@babel/parser" "^7.22.16" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.22.17" - "@babel/types" "^7.22.17" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.15.tgz#1564189c7ec94cb8f77b5e8a90c4d200d21b2339" - integrity sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA== - dependencies: - "@babel/types" "^7.22.15" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-compilation-targets@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-environment-visitor@^7.22.5": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" - integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== - dependencies: - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-module-imports@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-module-transforms@^7.22.17": - version "7.22.17" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.17.tgz#7edf129097a51ccc12443adbc6320e90eab76693" - integrity sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.15" - -"@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.8.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== - -"@babel/helper-validator-identifier@^7.22.15", "@babel/helper-validator-identifier@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz#601fa28e4cc06786c18912dca138cec73b882044" - integrity sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ== - -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== - -"@babel/helpers@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.15.tgz#f09c3df31e86e3ea0b7ff7556d85cdebd47ea6f1" - integrity sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.22.15" - "@babel/types" "^7.22.15" - -"@babel/highlight@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.13.tgz#9cda839e5d3be9ca9e8c26b6dd69e7548f0cbf16" - integrity sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ== - dependencies: - "@babel/helper-validator-identifier" "^7.22.5" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.22.16": - version "7.22.16" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.16.tgz#180aead7f247305cce6551bea2720934e2fa2c95" - integrity sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA== - -"@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/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.3.3": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.22.15", "@babel/traverse@^7.22.17": - version "7.22.17" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.17.tgz#b23c203ab3707e3be816043081b4a994fcacec44" - integrity sha512-xK4Uwm0JnAMvxYZxOVecss85WxTEIbTa7bnGyf/+EgCL5Zt3U7htUpEOWv9detPlamGKuRzCqw74xVglDWpPdg== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.22.16" - "@babel/types" "^7.22.17" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.17", "@babel/types@^7.22.5", "@babel/types@^7.3.3": - version "7.22.17" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.17.tgz#f753352c4610ffddf9c8bc6823f9ff03e2303eee" - integrity sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.15" - 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== - -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - -"@commitlint/cli@^17.4.3": - version "17.7.1" - resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-17.7.1.tgz#f3ab35bd38d82fcd4ab03ec5a1e9db26d57fe1b0" - integrity sha512-BCm/AT06SNCQtvFv921iNhudOHuY16LswT0R3OeolVGLk8oP+Rk9TfQfgjH7QPMjhvp76bNqGFEcpKojxUNW1g== - dependencies: - "@commitlint/format" "^17.4.4" - "@commitlint/lint" "^17.7.0" - "@commitlint/load" "^17.7.1" - "@commitlint/read" "^17.5.1" - "@commitlint/types" "^17.4.4" - execa "^5.0.0" - lodash.isfunction "^3.0.9" - resolve-from "5.0.0" - resolve-global "1.0.0" - yargs "^17.0.0" - -"@commitlint/config-conventional@^17.4.3": - version "17.7.0" - resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-17.7.0.tgz#1bbf2bce7851db63c1a8aa8d924277ad4938247e" - integrity sha512-iicqh2o6et+9kWaqsQiEYZzfLbtoWv9uZl8kbI8EGfnc0HeGafQBF7AJ0ylN9D/2kj6txltsdyQs8+2fTMwWEw== - dependencies: - conventional-changelog-conventionalcommits "^6.1.0" - -"@commitlint/config-validator@^17.6.7": - version "17.6.7" - resolved "https://registry.yarnpkg.com/@commitlint/config-validator/-/config-validator-17.6.7.tgz#c664d42a1ecf5040a3bb0843845150f55734df41" - integrity sha512-vJSncmnzwMvpr3lIcm0I8YVVDJTzyjy7NZAeXbTXy+MPUdAr9pKyyg7Tx/ebOQ9kqzE6O9WT6jg2164br5UdsQ== - dependencies: - "@commitlint/types" "^17.4.4" - ajv "^8.11.0" - -"@commitlint/ensure@^17.6.7": - version "17.6.7" - resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-17.6.7.tgz#77a77a0c05e6a1c34589f59e82e6cb937101fc4b" - integrity sha512-mfDJOd1/O/eIb/h4qwXzUxkmskXDL9vNPnZ4AKYKiZALz4vHzwMxBSYtyL2mUIDeU9DRSpEUins8SeKtFkYHSw== - dependencies: - "@commitlint/types" "^17.4.4" - lodash.camelcase "^4.3.0" - lodash.kebabcase "^4.1.1" - lodash.snakecase "^4.1.1" - lodash.startcase "^4.4.0" - lodash.upperfirst "^4.3.1" - -"@commitlint/execute-rule@^17.4.0": - version "17.4.0" - resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz#4518e77958893d0a5835babe65bf87e2638f6939" - integrity sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA== - -"@commitlint/format@^17.4.4": - version "17.4.4" - resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-17.4.4.tgz#0f6e1b4d7a301c7b1dfd4b6334edd97fc050b9f5" - integrity sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ== - dependencies: - "@commitlint/types" "^17.4.4" - chalk "^4.1.0" - -"@commitlint/is-ignored@^17.7.0": - version "17.7.0" - resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-17.7.0.tgz#df9b284420bdb1aed5fdb2be44f4e98cc4826014" - integrity sha512-043rA7m45tyEfW7Zv2vZHF++176MLHH9h70fnPoYlB1slKBeKl8BwNIlnPg4xBdRBVNPaCqvXxWswx2GR4c9Hw== - dependencies: - "@commitlint/types" "^17.4.4" - semver "7.5.4" - -"@commitlint/lint@^17.7.0": - version "17.7.0" - resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-17.7.0.tgz#33f831298dc43679e4de6b088aea63d1f884c7e7" - integrity sha512-TCQihm7/uszA5z1Ux1vw+Nf3yHTgicus/+9HiUQk+kRSQawByxZNESeQoX9ujfVd3r4Sa+3fn0JQAguG4xvvbA== - dependencies: - "@commitlint/is-ignored" "^17.7.0" - "@commitlint/parse" "^17.7.0" - "@commitlint/rules" "^17.7.0" - "@commitlint/types" "^17.4.4" - -"@commitlint/load@^17.7.1": - version "17.7.1" - resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-17.7.1.tgz#0723b11723a20043a304a74960602dead89b5cdd" - integrity sha512-S/QSOjE1ztdogYj61p6n3UbkUvweR17FQ0zDbNtoTLc+Hz7vvfS7ehoTMQ27hPSjVBpp7SzEcOQu081RLjKHJQ== - dependencies: - "@commitlint/config-validator" "^17.6.7" - "@commitlint/execute-rule" "^17.4.0" - "@commitlint/resolve-extends" "^17.6.7" - "@commitlint/types" "^17.4.4" - "@types/node" "20.4.7" - chalk "^4.1.0" - cosmiconfig "^8.0.0" - cosmiconfig-typescript-loader "^4.0.0" - lodash.isplainobject "^4.0.6" - lodash.merge "^4.6.2" - lodash.uniq "^4.5.0" - resolve-from "^5.0.0" - ts-node "^10.8.1" - typescript "^4.6.4 || ^5.0.0" - -"@commitlint/message@^17.4.2": - version "17.4.2" - resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-17.4.2.tgz#f4753a79701ad6db6db21f69076e34de6580e22c" - integrity sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q== - -"@commitlint/parse@^17.7.0": - version "17.7.0" - resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-17.7.0.tgz#aacb2d189e50ab8454154b1df150aaf20478ae47" - integrity sha512-dIvFNUMCUHqq5Abv80mIEjLVfw8QNuA4DS7OWip4pcK/3h5wggmjVnlwGCDvDChkw2TjK1K6O+tAEV78oxjxag== - dependencies: - "@commitlint/types" "^17.4.4" - conventional-changelog-angular "^6.0.0" - conventional-commits-parser "^4.0.0" - -"@commitlint/read@^17.5.1": - version "17.5.1" - resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-17.5.1.tgz#fec903b766e2c41e3cefa80630040fcaba4f786c" - integrity sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg== - dependencies: - "@commitlint/top-level" "^17.4.0" - "@commitlint/types" "^17.4.4" - fs-extra "^11.0.0" - git-raw-commits "^2.0.11" - minimist "^1.2.6" - -"@commitlint/resolve-extends@^17.6.7": - version "17.6.7" - resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-17.6.7.tgz#9c53a4601c96ab2dd20b90fb35c988639307735d" - integrity sha512-PfeoAwLHtbOaC9bGn/FADN156CqkFz6ZKiVDMjuC2N5N0740Ke56rKU7Wxdwya8R8xzLK9vZzHgNbuGhaOVKIg== - dependencies: - "@commitlint/config-validator" "^17.6.7" - "@commitlint/types" "^17.4.4" - import-fresh "^3.0.0" - lodash.mergewith "^4.6.2" - resolve-from "^5.0.0" - resolve-global "^1.0.0" - -"@commitlint/rules@^17.7.0": - version "17.7.0" - resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-17.7.0.tgz#b97a4933c5cba11a659a19ee467f6f000f31533e" - integrity sha512-J3qTh0+ilUE5folSaoK91ByOb8XeQjiGcdIdiB/8UT1/Rd1itKo0ju/eQVGyFzgTMYt8HrDJnGTmNWwcMR1rmA== - dependencies: - "@commitlint/ensure" "^17.6.7" - "@commitlint/message" "^17.4.2" - "@commitlint/to-lines" "^17.4.0" - "@commitlint/types" "^17.4.4" - execa "^5.0.0" - -"@commitlint/to-lines@^17.4.0": - version "17.4.0" - resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-17.4.0.tgz#9bd02e911e7d4eab3fb4a50376c4c6d331e10d8d" - integrity sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg== - -"@commitlint/top-level@^17.4.0": - version "17.4.0" - resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-17.4.0.tgz#540cac8290044cf846fbdd99f5cc51e8ac5f27d6" - integrity sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g== - dependencies: - find-up "^5.0.0" - -"@commitlint/types@^17.4.4": - version "17.4.4" - resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-17.4.4.tgz#1416df936e9aad0d6a7bbc979ecc31e55dade662" - integrity sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ== - dependencies: - chalk "^4.1.0" - -"@cspell/cspell-bundled-dicts@7.3.6": - version "7.3.6" - resolved "https://registry.yarnpkg.com/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-7.3.6.tgz#243b6803a563debfc52e265ac559f782946be0aa" - integrity sha512-9T0fFdHbKJXAQgQjLJ9SjtlHvKceKE2Vpa2sdnIXz3K1/coLLF04wHM/wzEPe2VXjYZjbjBatBRfTGjzRGJlbw== - dependencies: - "@cspell/dict-ada" "^4.0.2" - "@cspell/dict-aws" "^4.0.0" - "@cspell/dict-bash" "^4.1.1" - "@cspell/dict-companies" "^3.0.22" - "@cspell/dict-cpp" "^5.0.5" - "@cspell/dict-cryptocurrencies" "^4.0.0" - "@cspell/dict-csharp" "^4.0.2" - "@cspell/dict-css" "^4.0.7" - "@cspell/dict-dart" "^2.0.3" - "@cspell/dict-django" "^4.1.0" - "@cspell/dict-docker" "^1.1.7" - "@cspell/dict-dotnet" "^5.0.0" - "@cspell/dict-elixir" "^4.0.3" - "@cspell/dict-en-common-misspellings" "^1.0.2" - "@cspell/dict-en-gb" "1.1.33" - "@cspell/dict-en_us" "^4.3.7" - "@cspell/dict-filetypes" "^3.0.1" - "@cspell/dict-fonts" "^4.0.0" - "@cspell/dict-fsharp" "^1.0.0" - "@cspell/dict-fullstack" "^3.1.5" - "@cspell/dict-gaming-terms" "^1.0.4" - "@cspell/dict-git" "^2.0.0" - "@cspell/dict-golang" "^6.0.2" - "@cspell/dict-haskell" "^4.0.1" - "@cspell/dict-html" "^4.0.3" - "@cspell/dict-html-symbol-entities" "^4.0.0" - "@cspell/dict-java" "^5.0.5" - "@cspell/dict-k8s" "^1.0.1" - "@cspell/dict-latex" "^4.0.0" - "@cspell/dict-lorem-ipsum" "^4.0.0" - "@cspell/dict-lua" "^4.0.1" - "@cspell/dict-node" "^4.0.3" - "@cspell/dict-npm" "^5.0.8" - "@cspell/dict-php" "^4.0.2" - "@cspell/dict-powershell" "^5.0.2" - "@cspell/dict-public-licenses" "^2.0.3" - "@cspell/dict-python" "^4.1.8" - "@cspell/dict-r" "^2.0.1" - "@cspell/dict-ruby" "^5.0.0" - "@cspell/dict-rust" "^4.0.1" - "@cspell/dict-scala" "^5.0.0" - "@cspell/dict-software-terms" "^3.2.3" - "@cspell/dict-sql" "^2.1.1" - "@cspell/dict-svelte" "^1.0.2" - "@cspell/dict-swift" "^2.0.1" - "@cspell/dict-typescript" "^3.1.1" - "@cspell/dict-vue" "^3.0.0" - -"@cspell/cspell-json-reporter@7.3.6": - version "7.3.6" - resolved "https://registry.yarnpkg.com/@cspell/cspell-json-reporter/-/cspell-json-reporter-7.3.6.tgz#acf4dd67891f519e6bcd858f0e01a926663141c7" - integrity sha512-Op0pSKiImhqXHtQGMVCfx+Fc5tFCGeZwww+fFVQnnPwbU/JkhqbW8ZcYgyPF2KK18lzB8bDOHaltKcePkz13OA== - dependencies: - "@cspell/cspell-types" "7.3.6" - -"@cspell/cspell-pipe@7.3.6": - version "7.3.6" - resolved "https://registry.yarnpkg.com/@cspell/cspell-pipe/-/cspell-pipe-7.3.6.tgz#228a01be64c415ffd0f843c0792262239e604728" - integrity sha512-tvNgi31f/p8M108YlDhkC8nqLJBpD1mvVqYNxL+kB/aQtkaw0AHKDsuRhg0rU6xL5MAEnoi3fXgT1HoADhJpbA== - -"@cspell/cspell-resolver@7.3.6": - version "7.3.6" - resolved "https://registry.yarnpkg.com/@cspell/cspell-resolver/-/cspell-resolver-7.3.6.tgz#234e2b9be224ae478eed6a70098b080add2be445" - integrity sha512-rFmeqhRFfmlq4oh9tYQIIVZ9aWlP88cU48oCBjvwxjj+GambrD/qobWiW9VYl/CQBPVq4S39cTirf5RXbBHMJA== - dependencies: - global-dirs "^3.0.1" - -"@cspell/cspell-service-bus@7.3.6": - version "7.3.6" - resolved "https://registry.yarnpkg.com/@cspell/cspell-service-bus/-/cspell-service-bus-7.3.6.tgz#b5f73ccedda11e072d87259f14c62d91380d632f" - integrity sha512-jRXII9ceuostAqr/eft9RJR44TMzivuUkufhNZG4657alfhjHQBv/gME4QeFt/jOQqsDi/ifDhw5+r8ew/LsJA== - -"@cspell/cspell-types@7.3.6": - version "7.3.6" - resolved "https://registry.yarnpkg.com/@cspell/cspell-types/-/cspell-types-7.3.6.tgz#d399741fdf510e9b0afb57bf8a19c7b16ae56898" - integrity sha512-JnuIMJasZtJpZm0+hzr3emkRJ0PP6QWc9zgd3fx4U8W0lHGZ3Zil5peg67SnjmdTVm4UE63UviAl1y6DyD4kLg== - -"@cspell/dict-ada@^4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@cspell/dict-ada/-/dict-ada-4.0.2.tgz#8da2216660aeb831a0d9055399a364a01db5805a" - integrity sha512-0kENOWQeHjUlfyId/aCM/mKXtkEgV0Zu2RhUXCBr4hHo9F9vph+Uu8Ww2b0i5a4ZixoIkudGA+eJvyxrG1jUpA== - -"@cspell/dict-aws@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-aws/-/dict-aws-4.0.0.tgz#ab71fe0c05d9ad662d27495e74361bdcb5b470eb" - integrity sha512-1YkCMWuna/EGIDN/zKkW+j98/55mxigftrSFgsehXhPld+ZMJM5J9UuBA88YfL7+/ETvBdd7mwW6IwWsC+/ltQ== - -"@cspell/dict-bash@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-bash/-/dict-bash-4.1.1.tgz#fe28016096f44d4a09fe4c5bcaf6fa40f33d98c6" - integrity sha512-8czAa/Mh96wu2xr0RXQEGMTBUGkTvYn/Pb0o+gqOO1YW+poXGQc3gx0YPqILDryP/KCERrNvkWUJz3iGbvwC2A== - -"@cspell/dict-companies@^3.0.22": - version "3.0.22" - resolved "https://registry.yarnpkg.com/@cspell/dict-companies/-/dict-companies-3.0.22.tgz#98c709227b55e41f0e14ecf043d499457438e371" - integrity sha512-hUN4polifWv1IIXb4NDNXctr/smJ7/1IrOy0rU6fOwPCY/u9DkQO+xeASzuFJasvs6v0Pub/y+NUQLaeXNRW6g== - -"@cspell/dict-cpp@^5.0.5": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@cspell/dict-cpp/-/dict-cpp-5.0.5.tgz#b544edd0d06c55f45959d5f9c1518640ac64319f" - integrity sha512-ojCpQ4z+sHHLJYfvA3SApqQ1BjO/k3TUdDgqR3sVhFl5qjT9yz1/srBNzqCaBBSz/fiO5A8NKdSA9+IFrUHcig== - -"@cspell/dict-cryptocurrencies@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-cryptocurrencies/-/dict-cryptocurrencies-4.0.0.tgz#6517a7e1b0ed184cf3fc18f03230c82508369dec" - integrity sha512-EiZp91ATyRxTmauIQfOX9adLYCunKjHEh092rrM7o2eMXP9n7zpXAL9BK7LviL+LbB8VDOm21q+s83cKrrRrsg== - -"@cspell/dict-csharp@^4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@cspell/dict-csharp/-/dict-csharp-4.0.2.tgz#e55659dbe594e744d86b1baf0f3397fe57b1e283" - integrity sha512-1JMofhLK+4p4KairF75D3A924m5ERMgd1GvzhwK2geuYgd2ZKuGW72gvXpIV7aGf52E3Uu1kDXxxGAiZ5uVG7g== - -"@cspell/dict-css@^4.0.7": - version "4.0.7" - resolved "https://registry.yarnpkg.com/@cspell/dict-css/-/dict-css-4.0.7.tgz#4af78bea4655d2f55669be9a8738b50e48827522" - integrity sha512-NNlUTx/sYg+74kC0EtRewb7pjkEtPlIsu9JFNWAXa0JMTqqpQXqM3aEO4QJvUZFZF09bObeCAvzzxemAwxej7Q== - -"@cspell/dict-dart@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@cspell/dict-dart/-/dict-dart-2.0.3.tgz#75e7ffe47d5889c2c831af35acdd92ebdbd4cf12" - integrity sha512-cLkwo1KT5CJY5N5RJVHks2genFkNCl/WLfj+0fFjqNR+tk3tBI1LY7ldr9piCtSFSm4x9pO1x6IV3kRUY1lLiw== - -"@cspell/dict-data-science@^1.0.11": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@cspell/dict-data-science/-/dict-data-science-1.0.11.tgz#4eabba75c21d27253c1114b4fbbade0ead739ffc" - integrity sha512-TaHAZRVe0Zlcc3C23StZqqbzC0NrodRwoSAc8dis+5qLeLLnOCtagYQeROQvDlcDg3X/VVEO9Whh4W/z4PAmYQ== - -"@cspell/dict-django@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-django/-/dict-django-4.1.0.tgz#2d4b765daf3c83e733ef3e06887ea34403a4de7a" - integrity sha512-bKJ4gPyrf+1c78Z0Oc4trEB9MuhcB+Yg+uTTWsvhY6O2ncFYbB/LbEZfqhfmmuK/XJJixXfI1laF2zicyf+l0w== - -"@cspell/dict-docker@^1.1.7": - version "1.1.7" - resolved "https://registry.yarnpkg.com/@cspell/dict-docker/-/dict-docker-1.1.7.tgz#bcf933283fbdfef19c71a642e7e8c38baf9014f2" - integrity sha512-XlXHAr822euV36GGsl2J1CkBIVg3fZ6879ZOg5dxTIssuhUOCiV2BuzKZmt6aIFmcdPmR14+9i9Xq+3zuxeX0A== - -"@cspell/dict-dotnet@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-dotnet/-/dict-dotnet-5.0.0.tgz#13690aafe14b240ad17a30225ac1ec29a5a6a510" - integrity sha512-EOwGd533v47aP5QYV8GlSSKkmM9Eq8P3G/eBzSpH3Nl2+IneDOYOBLEUraHuiCtnOkNsz0xtZHArYhAB2bHWAw== - -"@cspell/dict-elixir@^4.0.3": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@cspell/dict-elixir/-/dict-elixir-4.0.3.tgz#57c25843e46cf3463f97da72d9ef8e37c818296f" - integrity sha512-g+uKLWvOp9IEZvrIvBPTr/oaO6619uH/wyqypqvwpmnmpjcfi8+/hqZH8YNKt15oviK8k4CkINIqNhyndG9d9Q== - -"@cspell/dict-en-common-misspellings@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-1.0.2.tgz#3c4ebab8e9e906d66d60f53c8f8c2e77b7f108e7" - integrity sha512-jg7ZQZpZH7+aAxNBlcAG4tGhYF6Ksy+QS5Df73Oo+XyckBjC9QS+PrRwLTeYoFIgXy5j3ICParK5r3MSSoL4gw== - -"@cspell/dict-en-gb@1.1.33": - version "1.1.33" - resolved "https://registry.yarnpkg.com/@cspell/dict-en-gb/-/dict-en-gb-1.1.33.tgz#7f1fd90fc364a5cb77111b5438fc9fcf9cc6da0e" - integrity sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g== - -"@cspell/dict-en_us@^4.3.7": - version "4.3.7" - resolved "https://registry.yarnpkg.com/@cspell/dict-en_us/-/dict-en_us-4.3.7.tgz#0e157984c4c102ec30c75572b99e4cb7388204cd" - integrity sha512-83V0XXqiXJvXa1pj5cVpviYKeLTN2Dxvouz8ullrwgcfPtY57pYBy+3ACVAMYK0eGByhRPc/xVXlIgv4o0BNZw== - -"@cspell/dict-filetypes@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-filetypes/-/dict-filetypes-3.0.1.tgz#61642b14af90894e6acf4c00f20ab2d097c1ed12" - integrity sha512-8z8mY1IbrTyTRumx2vvD9yzRhNMk9SajM/GtI5hdMM2pPpNSp25bnuauzjRf300eqlqPY2MNb5MmhBFO014DJw== - -"@cspell/dict-fonts@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-fonts/-/dict-fonts-4.0.0.tgz#9bc8beb2a7b068b4fdb45cb994b36fd184316327" - integrity sha512-t9V4GeN/m517UZn63kZPUYP3OQg5f0OBLSd3Md5CU3eH1IFogSvTzHHnz4Wqqbv8NNRiBZ3HfdY/pqREZ6br3Q== - -"@cspell/dict-fsharp@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-fsharp/-/dict-fsharp-1.0.0.tgz#420df73069f7bb8efe82bf823eef620647a571bc" - integrity sha512-dHPkMHwW4dWv3Lv9VWxHuVm4IylqvcfRBSnZ7usJTRThraetSVrOPIJwr6UJh7F5un/lGJx2lxWVApf2WQaB/A== - -"@cspell/dict-fullstack@^3.1.5": - version "3.1.5" - resolved "https://registry.yarnpkg.com/@cspell/dict-fullstack/-/dict-fullstack-3.1.5.tgz#35d18678161f214575cc613dd95564e05422a19c" - integrity sha512-6ppvo1dkXUZ3fbYn/wwzERxCa76RtDDl5Afzv2lijLoijGGUw5yYdLBKJnx8PJBGNLh829X352ftE7BElG4leA== - -"@cspell/dict-gaming-terms@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.0.4.tgz#b67d89d014d865da6cb40de4269d4c162a00658e" - integrity sha512-hbDduNXlk4AOY0wFxcDMWBPpm34rpqJBeqaySeoUH70eKxpxm+dvjpoRLJgyu0TmymEICCQSl6lAHTHSDiWKZg== - -"@cspell/dict-git@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-git/-/dict-git-2.0.0.tgz#fa5cb298845da9c69efc01c6af07a99097718dc9" - integrity sha512-n1AxyX5Kgxij/sZFkxFJlzn3K9y/sCcgVPg/vz4WNJ4K9YeTsUmyGLA2OQI7d10GJeiuAo2AP1iZf2A8j9aj2w== - -"@cspell/dict-golang@^6.0.2": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@cspell/dict-golang/-/dict-golang-6.0.2.tgz#dcba58b9e658c1cc713c19965a358185d15d1987" - integrity sha512-5pyZn4AAiYukAW+gVMIMVmUSkIERFrDX2vtPDjg8PLQUhAHWiVeQSDjuOhq9/C5GCCEZU/zWSONkGiwLBBvV9A== - -"@cspell/dict-haskell@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-haskell/-/dict-haskell-4.0.1.tgz#e9fca7c452411ff11926e23ffed2b50bb9b95e47" - integrity sha512-uRrl65mGrOmwT7NxspB4xKXFUenNC7IikmpRZW8Uzqbqcu7ZRCUfstuVH7T1rmjRgRkjcIjE4PC11luDou4wEQ== - -"@cspell/dict-html-symbol-entities@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.0.tgz#4d86ac18a4a11fdb61dfb6f5929acd768a52564f" - integrity sha512-HGRu+48ErJjoweR5IbcixxETRewrBb0uxQBd6xFGcxbEYCX8CnQFTAmKI5xNaIt2PKaZiJH3ijodGSqbKdsxhw== - -"@cspell/dict-html@^4.0.3": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@cspell/dict-html/-/dict-html-4.0.3.tgz#155450cb57750774583fce463d01d6323ab41701" - integrity sha512-Gae8i8rrArT0UyG1I6DHDK62b7Be6QEcBSIeWOm4VIIW1CASkN9B0qFgSVnkmfvnu1Y3H7SSaaEynKjdj3cs8w== - -"@cspell/dict-java@^5.0.5": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@cspell/dict-java/-/dict-java-5.0.5.tgz#c673f27ce7a5d96e205f42e8be540aeda0beef11" - integrity sha512-X19AoJgWIBwJBSWGFqSgHaBR/FEykBHTMjL6EqOnhIGEyE9nvuo32tsSHjXNJ230fQxQptEvRZoaldNLtKxsRg== - -"@cspell/dict-k8s@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-k8s/-/dict-k8s-1.0.1.tgz#6c0cc521dd42fee2c807368ebfef77137686f3a1" - integrity sha512-gc5y4Nm3hVdMZNBZfU2M1AsAmObZsRWjCUk01NFPfGhFBXyVne41T7E62rpnzu5330FV/6b/TnFcPgRmak9lLw== - -"@cspell/dict-latex@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-latex/-/dict-latex-4.0.0.tgz#85054903db834ea867174795d162e2a8f0e9c51e" - integrity sha512-LPY4y6D5oI7D3d+5JMJHK/wxYTQa2lJMSNxps2JtuF8hbAnBQb3igoWEjEbIbRRH1XBM0X8dQqemnjQNCiAtxQ== - -"@cspell/dict-lorem-ipsum@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-lorem-ipsum/-/dict-lorem-ipsum-4.0.0.tgz#2793a5dbfde474a546b0caecc40c38fdf076306e" - integrity sha512-1l3yjfNvMzZPibW8A7mQU4kTozwVZVw0AvFEdy+NcqtbxH+TvbSkNMqROOFWrkD2PjnKG0+Ea0tHI2Pi6Gchnw== - -"@cspell/dict-lua@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-lua/-/dict-lua-4.0.1.tgz#4c31975646cb2d71f1216c7aeaa0c5ab6994ea25" - integrity sha512-j0MFmeCouSoC6EdZTbvGe1sJ9V+ruwKSeF+zRkNNNload7R72Co5kX1haW2xLHGdlq0kqSy1ODRZKdVl0e+7hg== - -"@cspell/dict-node@^4.0.3": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@cspell/dict-node/-/dict-node-4.0.3.tgz#5ae0222d72871e82978049f8e11ea627ca42fca3" - integrity sha512-sFlUNI5kOogy49KtPg8SMQYirDGIAoKBO3+cDLIwD4MLdsWy1q0upc7pzGht3mrjuyMiPRUV14Bb0rkVLrxOhg== - -"@cspell/dict-npm@^5.0.8": - version "5.0.8" - resolved "https://registry.yarnpkg.com/@cspell/dict-npm/-/dict-npm-5.0.8.tgz#51b2e6dd54f915a2e8725ff7fd75769cb645ff6e" - integrity sha512-KuqH8tEsFD6DPKqKwIfWr9E+admE3yghaC0AKXG8jPaf77N0lkctKaS3dm0oxWUXkYKA/eXj6LCtz3VcTyxFPg== - -"@cspell/dict-php@^4.0.2": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@cspell/dict-php/-/dict-php-4.0.3.tgz#07d6288472f2fe433c9aaf6cd47aa5ef7404aade" - integrity sha512-PxtSmWJCDEB4M8R9ER9ijxBum/tvUqYT26QeuV58q2IFs5IrPZ6hocQKvnFGXItjCWH4oYXyAEAAzINlBC4Opg== - -"@cspell/dict-powershell@^5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@cspell/dict-powershell/-/dict-powershell-5.0.2.tgz#2b1d7d514354b6d7de405d5faaef30f8eca0ef09" - integrity sha512-IHfWLme3FXE7vnOmMncSBxOsMTdNWd1Vcyhag03WS8oANSgX8IZ+4lMI00mF0ptlgchf16/OU8WsV4pZfikEFw== - -"@cspell/dict-public-licenses@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.3.tgz#fa03649a5d6b8284e0c1da17eb449707df1a2a1c" - integrity sha512-JSLEdpEYufQ1H+93UHi+axlqQm1fhgK6kpdLHp6uPHu//CsvETcqNVawjB+qOdI/g38JTMw5fBqSd0aGNxa6Dw== - -"@cspell/dict-python@^4.1.8": - version "4.1.8" - resolved "https://registry.yarnpkg.com/@cspell/dict-python/-/dict-python-4.1.8.tgz#f7cbb275972037d9cde92915b0379f6b97cc0503" - integrity sha512-yFrO9gGI3KIbw0Y1odAEtagrzmthjJVank9B7qlsSQvN78RgD1JQQycTadNWpzdjCj+JuiiH8pJBFWflweZoxw== - dependencies: - "@cspell/dict-data-science" "^1.0.11" - -"@cspell/dict-r@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-r/-/dict-r-2.0.1.tgz#73474fb7cce45deb9094ebf61083fbf5913f440a" - integrity sha512-KCmKaeYMLm2Ip79mlYPc8p+B2uzwBp4KMkzeLd5E6jUlCL93Y5Nvq68wV5fRLDRTf7N1LvofkVFWfDcednFOgA== - -"@cspell/dict-ruby@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-ruby/-/dict-ruby-5.0.0.tgz#ca22ddf0842f29b485e3ef585c666c6be5227e6d" - integrity sha512-ssb96QxLZ76yPqFrikWxItnCbUKhYXJ2owkoIYzUGNFl2CHSoHCb5a6Zetum9mQ/oUA3gNeUhd28ZUlXs0la2A== - -"@cspell/dict-rust@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-rust/-/dict-rust-4.0.1.tgz#ef0b88cb3a45265824e2c9ce31b0baa4e1050351" - integrity sha512-xJSSzHDK2z6lSVaOmMxl3PTOtfoffaxMo7fTcbZUF+SCJzfKbO6vnN9TCGX2sx1RHFDz66Js6goz6SAZQdOwaw== - -"@cspell/dict-scala@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-scala/-/dict-scala-5.0.0.tgz#b64365ad559110a36d44ccd90edf7151ea648022" - integrity sha512-ph0twaRoV+ylui022clEO1dZ35QbeEQaKTaV2sPOsdwIokABPIiK09oWwGK9qg7jRGQwVaRPEq0Vp+IG1GpqSQ== - -"@cspell/dict-software-terms@^3.2.3": - version "3.2.3" - resolved "https://registry.yarnpkg.com/@cspell/dict-software-terms/-/dict-software-terms-3.2.3.tgz#cf69bc37466de9f9f25e002fb3fe680a7ab580c8" - integrity sha512-L1Fjkt+Q5MnjEOGPXQxdT4+8ieDBcaHSjh1gHzxdqFXTOnnfvsLUa5ykuv/fG06b/G/yget1066ftKosMaPcXA== - -"@cspell/dict-sql@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-sql/-/dict-sql-2.1.1.tgz#eb16c8bece4ff3154a193fe854a600ed0f75c64c" - integrity sha512-v1mswi9NF40+UDUMuI148YQPEQvWjac72P6ZsjlRdLjEiQEEMEsTQ+zlkIdnzC9QCNyJaqD5Liq9Mn78/8Zxtw== - -"@cspell/dict-svelte@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@cspell/dict-svelte/-/dict-svelte-1.0.2.tgz#0c866b08a7a6b33bbc1a3bdbe6a1b484ca15cdaa" - integrity sha512-rPJmnn/GsDs0btNvrRBciOhngKV98yZ9SHmg8qI6HLS8hZKvcXc0LMsf9LLuMK1TmS2+WQFAan6qeqg6bBxL2Q== - -"@cspell/dict-swift@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-swift/-/dict-swift-2.0.1.tgz#06ec86e52e9630c441d3c19605657457e33d7bb6" - integrity sha512-gxrCMUOndOk7xZFmXNtkCEeroZRnS2VbeaIPiymGRHj5H+qfTAzAKxtv7jJbVA3YYvEzWcVE2oKDP4wcbhIERw== - -"@cspell/dict-typescript@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-typescript/-/dict-typescript-3.1.1.tgz#25a9c241fa79c032f907db21b0aaf7c7baee6cc3" - integrity sha512-N9vNJZoOXmmrFPR4ir3rGvnqqwmQGgOYoL1+y6D4oIhyr7FhaYiyF/d7QT61RmjZQcATMa6PSL+ZisCeRLx9+A== - -"@cspell/dict-vue@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-vue/-/dict-vue-3.0.0.tgz#68ccb432ad93fcb0fd665352d075ae9a64ea9250" - integrity sha512-niiEMPWPV9IeRBRzZ0TBZmNnkK3olkOPYxC1Ny2AX4TGlYRajcW0WUtoSHmvvjZNfWLSg2L6ruiBeuPSbjnG6A== - -"@cspell/dynamic-import@7.3.6": - version "7.3.6" - resolved "https://registry.yarnpkg.com/@cspell/dynamic-import/-/dynamic-import-7.3.6.tgz#9fc0950c59ec0a208172bb5135c28745c2b940f8" - integrity sha512-NLWawhLkfTSkf36UwYJrRyMh3snXOHhuRFO7eVanPqE7oeU+1+OF/C467sYdiJGZnrCL3ojIr399JTVMz148Iw== - dependencies: - import-meta-resolve "^3.0.0" - -"@cspell/strong-weak-map@7.3.6": - version "7.3.6" - resolved "https://registry.yarnpkg.com/@cspell/strong-weak-map/-/strong-weak-map-7.3.6.tgz#9f25b5118687257b3ab0195b42a320a672f6b6f6" - integrity sha512-PoVFTvY8CGhc+7W3uvyPUWIBakc+ga9X5QpSkFI/HQghmaGDDaaQBfbuv/LsS7T9bkEoWz4jLtJoNBas870gZA== - -"@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" - -"@esbuild-kit/cjs-loader@^2.4.2": - version "2.4.4" - resolved "https://registry.yarnpkg.com/@esbuild-kit/cjs-loader/-/cjs-loader-2.4.4.tgz#8638177732e2de258a3243597bfdba082993c442" - integrity sha512-NfsJX4PdzhwSkfJukczyUiZGc7zNNWZcEAyqeISpDnn0PTfzMJR1aR8xAIPskBejIxBJbIgCCMzbaYa9SXepIg== - dependencies: - "@esbuild-kit/core-utils" "^3.2.3" - get-tsconfig "^4.7.0" - -"@esbuild-kit/core-utils@^3.2.2": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@esbuild-kit/core-utils/-/core-utils-3.2.2.tgz#ac3fe38d6ddcb3aa4658425034bb7a9cefa83495" - integrity sha512-Ub6LaRaAgF80dTSzUdXpFLM1pVDdmEVB9qb5iAzSpyDlX/mfJTFGOnZ516O05p5uWWteNviMKi4PAyEuRxI5gA== - dependencies: - esbuild "~0.18.20" - source-map-support "^0.5.21" - -"@esbuild-kit/core-utils@^3.2.3": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@esbuild-kit/core-utils/-/core-utils-3.3.1.tgz#b1c0c2fbd6d8c88abce21ae5d5490240b383586a" - integrity sha512-zg2aeGLgbZ/U8AnHRD6y085BkRqlw7jOsqpI/AFaQg6FhcCRycAe+aFLibs9okVVYTMqWANDC76UVSzd3qBoOw== - dependencies: - esbuild "~0.18.20" - source-map-support "^0.5.21" - -"@esbuild-kit/core-utils@^3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@esbuild-kit/core-utils/-/core-utils-3.3.2.tgz#186b6598a5066f0413471d7c4d45828e399ba96c" - integrity sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ== - dependencies: - esbuild "~0.18.20" - source-map-support "^0.5.21" - -"@esbuild-kit/esm-loader@^2.5.5": - version "2.6.5" - resolved "https://registry.yarnpkg.com/@esbuild-kit/esm-loader/-/esm-loader-2.6.5.tgz#6eedee46095d7d13b1efc381e2211ed1c60e64ea" - integrity sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA== - dependencies: - "@esbuild-kit/core-utils" "^3.3.2" - get-tsconfig "^4.7.0" - -"@esbuild/android-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" - integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== - -"@esbuild/android-arm@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" - integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== - -"@esbuild/android-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" - integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== - -"@esbuild/darwin-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" - integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== - -"@esbuild/darwin-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" - integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== - -"@esbuild/freebsd-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" - integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== - -"@esbuild/freebsd-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" - integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== - -"@esbuild/linux-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" - integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== - -"@esbuild/linux-arm@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" - integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== - -"@esbuild/linux-ia32@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" - integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== - -"@esbuild/linux-loong64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" - integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== - -"@esbuild/linux-mips64el@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" - integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== - -"@esbuild/linux-ppc64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" - integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== - -"@esbuild/linux-riscv64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" - integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== - -"@esbuild/linux-s390x@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" - integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== - -"@esbuild/linux-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" - integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== - -"@esbuild/netbsd-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" - integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== - -"@esbuild/openbsd-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" - integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== - -"@esbuild/sunos-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" - integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== - -"@esbuild/win32-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" - integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== - -"@esbuild/win32-ia32@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" - integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== - -"@esbuild/win32-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" - integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== - -"@eslint-community/eslint-utils@^4.2.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": - version "4.8.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.0.tgz#11195513186f68d42fbf449f9a7136b2c0c92005" - integrity sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg== - -"@eslint/eslintrc@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" - integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@8.49.0": - version "8.49.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.49.0.tgz#86f79756004a97fa4df866835093f1df3d03c333" - integrity sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w== - -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" - integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" - integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - -"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" - integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" - integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - -"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" - integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - -"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" - integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" - integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - bn.js "^5.2.1" - -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" - integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" - integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - -"@ethersproject/contracts@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" - integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - -"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" - integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" - integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" - integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - aes-js "3.0.0" - scrypt-js "3.0.1" - -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" - integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - js-sha3 "0.8.0" - -"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" - integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== - -"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" - integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" - integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - -"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" - integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/providers@5.7.2": - version "5.7.2" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" - integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - bech32 "1.1.4" - ws "7.4.6" - -"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" - integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" - integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" - integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - hash.js "1.1.7" - -"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" - integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - bn.js "^5.2.1" - elliptic "6.5.4" - hash.js "1.1.7" - -"@ethersproject/solidity@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" - integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" - integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" - integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - -"@ethersproject/units@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" - integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/wallet@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" - integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/json-wallets" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" - integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== - dependencies: - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" - integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@hapi/bourne@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-2.1.0.tgz#66aff77094dc3080bd5df44ec63881f2676eb020" - integrity sha512-i1BpaNDVLJdRBEKeJWkVO6tYX6DMFBuwMhSuWqLsY4ufeTKGVuV5rBsUhxPayXqnnWHgXUAmWK16H/ykO5Wj4Q== - -"@humanwhocodes/config-array@^0.11.11": - version "0.11.11" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" - integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@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@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" - integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^26.6.2" - jest-util "^26.6.2" - slash "^3.0.0" - -"@jest/core@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" - integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== - dependencies: - "@jest/console" "^26.6.2" - "@jest/reporters" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^26.6.2" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-resolve-dependencies "^26.6.3" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - jest-watcher "^26.6.2" - micromatch "^4.0.2" - p-each-series "^2.1.0" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" - integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== - dependencies: - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - -"@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/fake-timers@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" - integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== - dependencies: - "@jest/types" "^26.6.2" - "@sinonjs/fake-timers" "^6.0.1" - "@types/node" "*" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-util "^26.6.2" - -"@jest/globals@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" - integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/types" "^26.6.2" - expect "^26.6.2" - -"@jest/reporters@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" - integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.4" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.3" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^26.6.2" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^7.0.0" - optionalDependencies: - node-notifier "^8.0.0" - -"@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@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" - integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.4" - source-map "^0.6.0" - -"@jest/test-result@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" - integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== - dependencies: - "@jest/console" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" - integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== - dependencies: - "@jest/test-result" "^26.6.2" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - -"@jest/transform@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" - integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^26.6.2" - babel-plugin-istanbul "^6.0.0" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-regex-util "^26.0.0" - jest-util "^26.6.2" - micromatch "^4.0.2" - pirates "^4.0.1" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - -"@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - -"@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" - -"@jimp/bmp@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.22.10.tgz#e4fe8934a83f1e677cbfd74ad22a684bf1aad529" - integrity sha512-1UXRl1Nw1KptZ1r0ANqtXOst9vGH51dq7keVKQzyyTO2lz4dOaezS9StuSTNh+RmiHg/SVPaFRpPfB0S/ln4Kg== - dependencies: - "@jimp/utils" "^0.22.10" - bmp-js "^0.1.0" - -"@jimp/core@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/core/-/core-0.22.10.tgz#a106e719a9e1bc668c9595065a0872767cda3934" - integrity sha512-ZKyrehVy6wu1PnBXIUpn/fXmyMRQiVSbvHDubgXz4bfTOao3GiOurKHjByutQIgozuAN6ZHWiSge1dKA+dex3w== - dependencies: - "@jimp/utils" "^0.22.10" - any-base "^1.1.0" - buffer "^5.2.0" - exif-parser "^0.1.12" - file-type "^16.5.4" - isomorphic-fetch "^3.0.0" - pixelmatch "^4.0.2" - tinycolor2 "^1.6.0" - -"@jimp/custom@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/custom/-/custom-0.22.10.tgz#621f3ec418c59c78ca43c5bc6f91a467e48a7a87" - integrity sha512-sPZkUYe1hu0iIgNisjizxPJqq2vaaKvkCkPoXq2U6UV3ZA1si/WVdrg25da3IcGIEV+83AoHgM8TvqlLgrCJsg== - dependencies: - "@jimp/core" "^0.22.10" - -"@jimp/gif@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/gif/-/gif-0.22.10.tgz#fc47738edc5f5327a0c023ad40e89417fdb5ef60" - integrity sha512-yEX2dSpamvkSx1PPDWGnKeWDrBz0vrCKjVG/cn4Zr68MRRT75tbZIeOrBa+RiUpY3ho5ix7d36LkYvt3qfUIhQ== - dependencies: - "@jimp/utils" "^0.22.10" - gifwrap "^0.10.1" - omggif "^1.0.9" - -"@jimp/jpeg@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/jpeg/-/jpeg-0.22.10.tgz#b4aba85d607d598d5a4ce0c66cefe69a8fc45c26" - integrity sha512-6bu98pAcVN4DY2oiDLC4TOgieX/lZrLd1tombWZOFCN5PBmqaHQxm7IUmT+Wj4faEvh8QSHgVLSA+2JQQRJWVA== - dependencies: - "@jimp/utils" "^0.22.10" - jpeg-js "^0.4.4" - -"@jimp/plugin-blit@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/plugin-blit/-/plugin-blit-0.22.10.tgz#c351a27d52d8273b61d4f3cd68a9b73b03dd7b14" - integrity sha512-6EI8Sl+mxYHEIy6Yteh6eknD+EZguKpNdr3sCKxNezmLR0+vK99vHcllo6uGSjXXiwtwS67Xqxn8SsoatL+UJQ== - dependencies: - "@jimp/utils" "^0.22.10" - -"@jimp/plugin-blur@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/plugin-blur/-/plugin-blur-0.22.10.tgz#22a67bb8b21403ac28b44bef6cf9a934846fec83" - integrity sha512-4XRTWuPVdMXJeclJMisXPGizeHtTryVaVV5HnuQXpKqIZtzXReCCpNGH8q/i0kBQOQMXhGWS3mpqOEwtpPePKw== - dependencies: - "@jimp/utils" "^0.22.10" - -"@jimp/plugin-circle@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/plugin-circle/-/plugin-circle-0.22.10.tgz#2a4c81b5c1a49f583d2d5090496c1ecb29c52c1a" - integrity sha512-mhcwTO1ywRxiCgtLGge6tDDIDPlX6qkI3CY+BjgGG/XhVHccCddXgOGLdlf+5OuKIEF2Nqs0V01LQEQIJFTmEw== - dependencies: - "@jimp/utils" "^0.22.10" - -"@jimp/plugin-color@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/plugin-color/-/plugin-color-0.22.10.tgz#cf053aa30eb3bf7df3cceb8547ef78a841bfcd72" - integrity sha512-e4t3L7Kedd96E0x1XjsTM6NcgulKUU66HdFTao7Tc9FYJRFSlttARZ/C6LEryGDm/i69R6bJEpo7BkNz0YL55Q== - dependencies: - "@jimp/utils" "^0.22.10" - tinycolor2 "^1.6.0" - -"@jimp/plugin-contain@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/plugin-contain/-/plugin-contain-0.22.10.tgz#5302e088a09884ff0ae6656e0e682e2e487c2199" - integrity sha512-eP8KrzctuEoqibQAxi9WhbnoRosydhiwg+IYya3dKuKDBTrD9UHt+ERlPQ/lTNWHzV/l4S1ntV3r9s9saJgsXA== - dependencies: - "@jimp/utils" "^0.22.10" - -"@jimp/plugin-cover@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/plugin-cover/-/plugin-cover-0.22.10.tgz#746b25bbea92aa7f9b130feca5af02717122e6d5" - integrity sha512-kJCwL5T1igfa0InCfkE7bBeqg26m46aoRt10ug+rvm11P6RrvRMGrgINFyIKB+mnB7CiyBN/MOula1CvLhSInQ== - dependencies: - "@jimp/utils" "^0.22.10" - -"@jimp/plugin-crop@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/plugin-crop/-/plugin-crop-0.22.10.tgz#6204fd6be751d7edb64a86ab788ba762843b9877" - integrity sha512-BOZ+YGaZlhU7c5ye65RxikicXH0Ki0It6/XHISvipR5WZrfjLjL2Ke20G+AGnwBQc76gKenVcMXVUCnEjtZV+Q== - dependencies: - "@jimp/utils" "^0.22.10" - -"@jimp/plugin-displace@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/plugin-displace/-/plugin-displace-0.22.10.tgz#6dc277c84c0c6b2c2d793271ddf45b61284cb043" - integrity sha512-llNiWWMTKISDXt5+cXI0GaFmZWAjlT+4fFLYf4eXquuL/9wZoQsEBhv2GdGd48mkiS8jZq1Nnb2Q4ehEPTvrzw== - dependencies: - "@jimp/utils" "^0.22.10" - -"@jimp/plugin-dither@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/plugin-dither/-/plugin-dither-0.22.10.tgz#9cbad07fb16d2dcb88d86c16d5437dee9232426a" - integrity sha512-05WLmeV5M+P/0FS+bWf13hMew2X0oa8w9AtmevL2UyA/5GqiyvP2Xm5WfGQ8oFiiMvpnL6RFomJQOZtWca0C2w== - dependencies: - "@jimp/utils" "^0.22.10" - -"@jimp/plugin-fisheye@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/plugin-fisheye/-/plugin-fisheye-0.22.10.tgz#94cbb32947d24cdd596f7259754e390e69c3e7a6" - integrity sha512-InjiXvc7Gkzrx8VWtU97kDqV7ENnhHGPULymJWeZaF2aicud9Fpk4iCtd/DcZIrk7Cbe60A8RwNXN00HXIbSCg== - dependencies: - "@jimp/utils" "^0.22.10" - -"@jimp/plugin-flip@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/plugin-flip/-/plugin-flip-0.22.10.tgz#58f9e05c5038d1ab849bda41cee4f0416fe07fb5" - integrity sha512-42GkGtTHWnhnwTMPVK/kXObZbkYIpQWfuIfy5EMEMk6zRj05zpv4vsjkKWfuemweZINwfvD7wDJF7FVFNNcZZg== - dependencies: - "@jimp/utils" "^0.22.10" - -"@jimp/plugin-gaussian@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/plugin-gaussian/-/plugin-gaussian-0.22.10.tgz#69effed5dccd11eada36262bd65fbaa06bd8be84" - integrity sha512-ykrG/6lTp9Q5YA8jS5XzwMHtRxb9HOFMgtmnrUZ8kU+BK8REecfy9Ic5BUEOjCYvS1a/xLsnrZQU07iiYxBxFg== - dependencies: - "@jimp/utils" "^0.22.10" - -"@jimp/plugin-invert@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/plugin-invert/-/plugin-invert-0.22.10.tgz#370b4ce4634b3e2c5fbbe88270a74f5673c765bb" - integrity sha512-d8j9BlUJYs/c994t4azUWSWmQq4LLPG4ecm8m6SSNqap+S/HlVQGqjYhJEBbY9EXkOTYB9vBL9bqwSM1Rr6paA== - dependencies: - "@jimp/utils" "^0.22.10" - -"@jimp/plugin-mask@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/plugin-mask/-/plugin-mask-0.22.10.tgz#6404f54a782c952fecf7b6ae0f3d894d4fc99c51" - integrity sha512-yRBs1230XZkz24uFTdTcSlZ0HXZpIWzM3iFQN56MzZ7USgdVZjPPDCQ8I9RpqfZ36nDflQkUO0wV7ucsi4ogow== - dependencies: - "@jimp/utils" "^0.22.10" - -"@jimp/plugin-normalize@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/plugin-normalize/-/plugin-normalize-0.22.10.tgz#6a8d0f57a8f90a3ec15f2391c338b94f3eb49e72" - integrity sha512-Wk9GX6eJMchX/ZAazVa70Fagu+OXMvHiPY+HrcEwcclL+p1wo8xAHEsf9iKno7Ja4EU9lLhbBRY5hYJyiKMEkg== - dependencies: - "@jimp/utils" "^0.22.10" - -"@jimp/plugin-print@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/plugin-print/-/plugin-print-0.22.10.tgz#8c96df70851c1ead0b79c8ea74c8411445d921ca" - integrity sha512-1U3VloIR+beE1kWPdGEJMiE2h1Do29iv3w8sBbvPyRP4qXxRFcDpmCGtctsrKmb1krlBFlj8ubyAY90xL+5n9w== - dependencies: - "@jimp/utils" "^0.22.10" - load-bmfont "^1.4.1" - -"@jimp/plugin-resize@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/plugin-resize/-/plugin-resize-0.22.10.tgz#d968f0167069c9f7e612bceefdbcc4b3c65934b5" - integrity sha512-ixomxVcnAONXDgaq0opvAx4UAOiEhOA/tipuhFFOvPKFd4yf1BAnEviB5maB0SBHHkJXPUSzDp/73xVTMGSe7g== - dependencies: - "@jimp/utils" "^0.22.10" - -"@jimp/plugin-rotate@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/plugin-rotate/-/plugin-rotate-0.22.10.tgz#93d3781eca02d549a632db74bc63d27a6bb9a38c" - integrity sha512-eeFX8dnRyf3LAdsdXWKWuN18hLRg8zy1cP0cP9rHzQVWRK7ck/QsLxK1vHq7MADGwQalNaNTJ9SQxH6c8mz6jw== - dependencies: - "@jimp/utils" "^0.22.10" - -"@jimp/plugin-scale@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/plugin-scale/-/plugin-scale-0.22.10.tgz#69127d45eb0837cd23cd04cff3677344064670ac" - integrity sha512-TG/H0oUN69C9ArBCZg4PmuoixFVKIiru8282KzSB/Tp1I0xwX0XLTv3dJ5pobPlIgPcB+TmD4xAIdkCT4rtWxg== - dependencies: - "@jimp/utils" "^0.22.10" - -"@jimp/plugin-shadow@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/plugin-shadow/-/plugin-shadow-0.22.10.tgz#ccf379a8d41861eb07c35a60f3dcdede8e856de7" - integrity sha512-TN9xm6fI7XfxbMUQqFPZjv59Xdpf0tSiAQdINB4g6pJMWiVANR/74OtDONoy3KKpenu5Y38s+FkrtID/KcQAhw== - dependencies: - "@jimp/utils" "^0.22.10" - -"@jimp/plugin-threshold@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/plugin-threshold/-/plugin-threshold-0.22.10.tgz#590bda5ddf9071adad36f98197e710f33cb47a26" - integrity sha512-DA2lSnU0TgIRbAgmXaxroYw3Ad6J2DOFEoJp0NleSm2h3GWbZEE5yW9U2B6hD3iqn4AenG4E2b2WzHXZyzSutw== - dependencies: - "@jimp/utils" "^0.22.10" - -"@jimp/plugins@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/plugins/-/plugins-0.22.10.tgz#7062b6a36dc2d9c8dbd574a7697b6efaccecdee8" - integrity sha512-KDMZyM6pmvS8freB+UBLko1TO/k4D7URS/nphCozuH+P7i3UMe7NdckXKJ8u+WD6sqN0YFYvBehpkpnUiw/91w== - dependencies: - "@jimp/plugin-blit" "^0.22.10" - "@jimp/plugin-blur" "^0.22.10" - "@jimp/plugin-circle" "^0.22.10" - "@jimp/plugin-color" "^0.22.10" - "@jimp/plugin-contain" "^0.22.10" - "@jimp/plugin-cover" "^0.22.10" - "@jimp/plugin-crop" "^0.22.10" - "@jimp/plugin-displace" "^0.22.10" - "@jimp/plugin-dither" "^0.22.10" - "@jimp/plugin-fisheye" "^0.22.10" - "@jimp/plugin-flip" "^0.22.10" - "@jimp/plugin-gaussian" "^0.22.10" - "@jimp/plugin-invert" "^0.22.10" - "@jimp/plugin-mask" "^0.22.10" - "@jimp/plugin-normalize" "^0.22.10" - "@jimp/plugin-print" "^0.22.10" - "@jimp/plugin-resize" "^0.22.10" - "@jimp/plugin-rotate" "^0.22.10" - "@jimp/plugin-scale" "^0.22.10" - "@jimp/plugin-shadow" "^0.22.10" - "@jimp/plugin-threshold" "^0.22.10" - timm "^1.6.1" - -"@jimp/png@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/png/-/png-0.22.10.tgz#397da6479f515dc87525b0f25efe4cb11cb75156" - integrity sha512-RYinU7tZToeeR2g2qAMn42AU+8OUHjXPKZZ9RkmoL4bguA1xyZWaSdr22/FBkmnHhOERRlr02KPDN1OTOYHLDQ== - dependencies: - "@jimp/utils" "^0.22.10" - pngjs "^6.0.0" - -"@jimp/tiff@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/tiff/-/tiff-0.22.10.tgz#e5511e21c73719a308545732f1ec050f52a8e0ad" - integrity sha512-OaivlSYzpNTHyH/h7pEtl3A7F7TbsgytZs52GLX/xITW92ffgDgT6PkldIrMrET6ERh/hdijNQiew7IoEEr2og== - dependencies: - utif2 "^4.0.1" - -"@jimp/types@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/types/-/types-0.22.10.tgz#1ae01dfea9f36ba9751e63a1eedecb4c4da9ef16" - integrity sha512-u/r+XYzbCx4zZukDmxx8S0er3Yq3iDPI6+31WKX0N18i2qPPJYcn8qwIFurfupRumGvJ8SlGLCgt/T+Y8zzUIw== - dependencies: - "@jimp/bmp" "^0.22.10" - "@jimp/gif" "^0.22.10" - "@jimp/jpeg" "^0.22.10" - "@jimp/png" "^0.22.10" - "@jimp/tiff" "^0.22.10" - timm "^1.6.1" - -"@jimp/utils@^0.22.10": - version "0.22.10" - resolved "https://registry.yarnpkg.com/@jimp/utils/-/utils-0.22.10.tgz#d05934fae1c4bd988205d3decc2a649df0724a26" - integrity sha512-ztlOK9Mm2iLG2AMoabzM4i3WZ/FtshcgsJCbZCRUs/DKoeS2tySRJTnQZ1b7Roq0M4Ce+FUAxnCAcBV0q7PH9w== - dependencies: - regenerator-runtime "^0.13.3" - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - 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", "@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@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", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@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.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@netlify/functions@^1.4.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@netlify/functions/-/functions-1.6.0.tgz#c373423e6fef0e6f7422ac0345e8bbf2cb692366" - integrity sha512-6G92AlcpFrQG72XU8YH8pg94eDnq7+Q0YJhb8x4qNpdGsvuzvrfHWBmqFGp/Yshmv4wex9lpsTRZOocdrA2erQ== - dependencies: - is-promise "^4.0.0" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@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.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@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" - -"@octokit/auth-app@^4.0.2": - version "4.0.13" - resolved "https://registry.yarnpkg.com/@octokit/auth-app/-/auth-app-4.0.13.tgz#53323bee6bfefbb73ea544dd8e6a0144550e13e3" - integrity sha512-NBQkmR/Zsc+8fWcVIFrwDgNXS7f4XDrkd9LHdi9DPQw1NdGHLviLzRO2ZBwTtepnwHXW5VTrVU9eFGijMUqllg== - dependencies: - "@octokit/auth-oauth-app" "^5.0.0" - "@octokit/auth-oauth-user" "^2.0.0" - "@octokit/request" "^6.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - deprecation "^2.3.1" - lru-cache "^9.0.0" - universal-github-app-jwt "^1.1.1" - universal-user-agent "^6.0.0" - -"@octokit/auth-oauth-app@^5.0.0": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-app/-/auth-oauth-app-5.0.6.tgz#e5f922623eb261485efc87f5d0d5b509c71caec8" - integrity sha512-SxyfIBfeFcWd9Z/m1xa4LENTQ3l1y6Nrg31k2Dcb1jS5ov7pmwMJZ6OGX8q3K9slRgVpeAjNA1ipOAMHkieqyw== - dependencies: - "@octokit/auth-oauth-device" "^4.0.0" - "@octokit/auth-oauth-user" "^2.0.0" - "@octokit/request" "^6.0.0" - "@octokit/types" "^9.0.0" - "@types/btoa-lite" "^1.0.0" - btoa-lite "^1.0.0" - universal-user-agent "^6.0.0" - -"@octokit/auth-oauth-device@^4.0.0": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-device/-/auth-oauth-device-4.0.5.tgz#21e981f51ae63d419ca3db0b75e32c85b33fa0da" - integrity sha512-XyhoWRTzf2ZX0aZ52a6Ew5S5VBAfwwx1QnC2Np6Et3MWQpZjlREIcbcvVZtkNuXp6Z9EeiSLSDUqm3C+aMEHzQ== - dependencies: - "@octokit/oauth-methods" "^2.0.0" - "@octokit/request" "^6.0.0" - "@octokit/types" "^9.0.0" - universal-user-agent "^6.0.0" - -"@octokit/auth-oauth-user@^2.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-user/-/auth-oauth-user-2.1.2.tgz#7091e1b29527e577b16d0f1699d49fe3d39946ff" - integrity sha512-kkRqNmFe7s5GQcojE3nSlF+AzYPpPv7kvP/xYEnE57584pixaFBH8Vovt+w5Y3E4zWUEOxjdLItmBTFAWECPAg== - dependencies: - "@octokit/auth-oauth-device" "^4.0.0" - "@octokit/oauth-methods" "^2.0.0" - "@octokit/request" "^6.0.0" - "@octokit/types" "^9.0.0" - btoa-lite "^1.0.0" - universal-user-agent "^6.0.0" - -"@octokit/auth-token@^2.4.4": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.5.0.tgz#27c37ea26c205f28443402477ffd261311f21e36" - integrity sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g== - dependencies: - "@octokit/types" "^6.0.3" - -"@octokit/auth-token@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.4.tgz#70e941ba742bdd2b49bdb7393e821dea8520a3db" - integrity sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ== - -"@octokit/auth-unauthenticated@^3.0.0": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@octokit/auth-unauthenticated/-/auth-unauthenticated-3.0.5.tgz#a562bffd6ca0d0e80541eaf9f9b89b8d53020228" - integrity sha512-yH2GPFcjrTvDWPwJWWCh0tPPtTL5SMgivgKPA+6v/XmYN6hGQkAto8JtZibSKOpf8ipmeYhLNWQ2UgW0GYILCw== - dependencies: - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - -"@octokit/core@^3.2.4": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.6.0.tgz#3376cb9f3008d9b3d110370d90e0a1fcd5fe6085" - integrity sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q== - dependencies: - "@octokit/auth-token" "^2.4.4" - "@octokit/graphql" "^4.5.8" - "@octokit/request" "^5.6.3" - "@octokit/request-error" "^2.0.5" - "@octokit/types" "^6.0.3" - before-after-hook "^2.2.0" - universal-user-agent "^6.0.0" - -"@octokit/endpoint@^6.0.1": - version "6.0.12" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658" - integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA== - dependencies: - "@octokit/types" "^6.0.3" - is-plain-object "^5.0.0" - universal-user-agent "^6.0.0" - -"@octokit/endpoint@^7.0.0": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.6.tgz#791f65d3937555141fb6c08f91d618a7d645f1e2" - integrity sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg== - dependencies: - "@octokit/types" "^9.0.0" - is-plain-object "^5.0.0" - universal-user-agent "^6.0.0" - -"@octokit/graphql@^4.5.8": - version "4.8.0" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.8.0.tgz#664d9b11c0e12112cbf78e10f49a05959aa22cc3" - integrity sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg== - dependencies: - "@octokit/request" "^5.6.0" - "@octokit/types" "^6.0.3" - universal-user-agent "^6.0.0" - -"@octokit/oauth-authorization-url@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@octokit/oauth-authorization-url/-/oauth-authorization-url-5.0.0.tgz#029626ce87f3b31addb98cd0d2355c2381a1c5a1" - integrity sha512-y1WhN+ERDZTh0qZ4SR+zotgsQUE1ysKnvBt1hvDRB2WRzYtVKQjn97HEPzoehh66Fj9LwNdlZh+p6TJatT0zzg== - -"@octokit/oauth-methods@^2.0.0": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@octokit/oauth-methods/-/oauth-methods-2.0.6.tgz#3a089781e90171cbe8a0efa448a6a60229bdd3fb" - integrity sha512-l9Uml2iGN2aTWLZcm8hV+neBiFXAQ9+3sKiQe/sgumHlL6HDg0AQ8/l16xX/5jJvfxueqTW5CWbzd0MjnlfHZw== - dependencies: - "@octokit/oauth-authorization-url" "^5.0.0" - "@octokit/request" "^6.2.3" - "@octokit/request-error" "^3.0.3" - "@octokit/types" "^9.0.0" - btoa-lite "^1.0.0" - -"@octokit/openapi-types@^12.11.0": - version "12.11.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-12.11.0.tgz#da5638d64f2b919bca89ce6602d059f1b52d3ef0" - integrity sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ== - -"@octokit/openapi-types@^14.0.0": - version "14.0.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-14.0.0.tgz#949c5019028c93f189abbc2fb42f333290f7134a" - integrity sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw== - -"@octokit/openapi-types@^18.0.0": - version "18.0.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-18.0.0.tgz#f43d765b3c7533fd6fb88f3f25df079c24fccf69" - integrity sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw== - -"@octokit/plugin-enterprise-compatibility@^1.2.8": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-compatibility/-/plugin-enterprise-compatibility-1.3.0.tgz#034f035cc1789b0f0d616e71e41f50f73804e89e" - integrity sha512-h34sMGdEOER/OKrZJ55v26ntdHb9OPfR1fwOx6Q4qYyyhWA104o11h9tFxnS/l41gED6WEI41Vu2G2zHDVC5lQ== - dependencies: - "@octokit/request-error" "^2.1.0" - "@octokit/types" "^6.0.3" - -"@octokit/plugin-paginate-rest@^2.6.2": - version "2.21.3" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz#7f12532797775640dbb8224da577da7dc210c87e" - integrity sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw== - dependencies: - "@octokit/types" "^6.40.0" - -"@octokit/plugin-rest-endpoint-methods@^5.0.1": - version "5.16.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz#7ee8bf586df97dd6868cf68f641354e908c25342" - integrity sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw== - dependencies: - "@octokit/types" "^6.39.0" - deprecation "^2.3.1" - -"@octokit/plugin-retry@^3.0.6": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@octokit/plugin-retry/-/plugin-retry-3.0.9.tgz#ae625cca1e42b0253049102acd71c1d5134788fe" - integrity sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ== - dependencies: - "@octokit/types" "^6.0.3" - bottleneck "^2.15.3" - -"@octokit/plugin-throttling@^3.3.4": - version "3.7.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-throttling/-/plugin-throttling-3.7.0.tgz#a35cd05de22b2ef13fde45390d983ff8365b9a9e" - integrity sha512-qrKT1Yl/KuwGSC6/oHpLBot3ooC9rq0/ryDYBCpkRtoj+R8T47xTMDT6Tk2CxWopFota/8Pi/2SqArqwC0JPow== - dependencies: - "@octokit/types" "^6.0.1" - bottleneck "^2.15.3" - -"@octokit/request-error@^2.0.2", "@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677" - integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg== - dependencies: - "@octokit/types" "^6.0.3" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request-error@^3.0.0", "@octokit/request-error@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69" - integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== - dependencies: - "@octokit/types" "^9.0.0" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request@^5.6.0", "@octokit/request@^5.6.3": - version "5.6.3" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.3.tgz#19a022515a5bba965ac06c9d1334514eb50c48b0" - integrity sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A== - dependencies: - "@octokit/endpoint" "^6.0.1" - "@octokit/request-error" "^2.1.0" - "@octokit/types" "^6.16.1" - is-plain-object "^5.0.0" - node-fetch "^2.6.7" - universal-user-agent "^6.0.0" - -"@octokit/request@^6.0.0", "@octokit/request@^6.2.3": - version "6.2.8" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.8.tgz#aaf480b32ab2b210e9dadd8271d187c93171d8eb" - integrity sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw== - dependencies: - "@octokit/endpoint" "^7.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - is-plain-object "^5.0.0" - node-fetch "^2.6.7" - universal-user-agent "^6.0.0" - -"@octokit/types@^6.0.1", "@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.39.0", "@octokit/types@^6.40.0": - version "6.41.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.41.0.tgz#e58ef78d78596d2fb7df9c6259802464b5f84a04" - integrity sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg== - dependencies: - "@octokit/openapi-types" "^12.11.0" - -"@octokit/types@^8.0.0": - version "8.2.1" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-8.2.1.tgz#a6de091ae68b5541f8d4fcf9a12e32836d4648aa" - integrity sha512-8oWMUji8be66q2B9PmEIUyQm00VPDPun07umUWSaCwxmeaquFBro4Hcc3ruVoDo3zkQyZBlRvhIMEYS3pBhanw== - dependencies: - "@octokit/openapi-types" "^14.0.0" - -"@octokit/types@^9.0.0": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.3.2.tgz#3f5f89903b69f6a2d196d78ec35f888c0013cac5" - integrity sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA== - dependencies: - "@octokit/openapi-types" "^18.0.0" - -"@octokit/webhooks-methods@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@octokit/webhooks-methods/-/webhooks-methods-2.0.0.tgz#1108b9ea661ca6c81e4a8bfa63a09eb27d5bc2db" - integrity sha512-35cfQ4YWlnZnmZKmIxlGPUPLtbkF8lr/A/1Sk1eC0ddLMwQN06dOuLc+dI3YLQS+T+MoNt3DIQ0NynwgKPilig== - -"@octokit/webhooks-types@5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@octokit/webhooks-types/-/webhooks-types-5.8.0.tgz#b76d1a3e3ad82cec5680d3c6c3443a620047a6ef" - integrity sha512-8adktjIb76A7viIdayQSFuBEwOzwhDC+9yxZpKNHjfzrlostHCw0/N7JWpWMObfElwvJMk2fY2l1noENCk9wmw== - -"@octokit/webhooks@^9.8.4": - version "9.26.0" - resolved "https://registry.yarnpkg.com/@octokit/webhooks/-/webhooks-9.26.0.tgz#cf453bb313da3b66f1a90c84464d978e1c625cce" - integrity sha512-foZlsgrTDwAmD5j2Czn6ji10lbWjGDVsUxTIydjG9KTkAWKJrFapXJgO5SbGxRwfPd3OJdhK3nA2YPqVhxLXqA== - dependencies: - "@octokit/request-error" "^2.0.2" - "@octokit/webhooks-methods" "^2.0.0" - "@octokit/webhooks-types" "5.8.0" - aggregate-error "^3.1.0" - -"@probot/adapter-aws-lambda-serverless@^3.0.2": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@probot/adapter-aws-lambda-serverless/-/adapter-aws-lambda-serverless-3.0.3.tgz#e841201ba9d8bb408cc578c423422a3a5b8bf32f" - integrity sha512-zYx4pavXqxHj3ohILX2NeAcVF2eO0qmZ79/eBabSMqna+tixrlV8W6oUKkSvuyRQs5fZQjjw79ZhvK40GwhuhA== - dependencies: - "@probot/get-private-key" "^1.1.0" - "@types/aws-lambda" "^8.10.85" - lowercase-keys "^2.0.0" - probot "^12.1.1" - -"@probot/adapter-github-actions@^3.1.3": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@probot/adapter-github-actions/-/adapter-github-actions-3.1.3.tgz#133024a50b91d6ffe8d54623dc51a945b450c5aa" - integrity sha512-mQ0YZrurH1Xvo+2KxZBi2eE8vwywoPveg370aIxY22g47xP5lpGR46ahL4TChZN5RpL82Rp7wEl8+Ue2PUrZsw== - dependencies: - "@actions/core" "^1.2.6" - pino "^8.5.0" - probot "^12.2.1" - through2 "^4.0.2" - -"@probot/get-private-key@^1.1.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@probot/get-private-key/-/get-private-key-1.1.1.tgz#12bf61d00a15760d9b0bd713a794f9c4ba4ad5d3" - integrity sha512-hOmBNSAhSZc6PaNkTvj6CO9R5J67ODJ+w5XQlDW9w/6mtcpHWK4L+PZcW0YwVM7PpetLZjN6rsKQIR9yqIaWlA== - dependencies: - "@types/is-base64" "^1.1.0" - is-base64 "^1.1.0" - -"@probot/octokit-plugin-config@^1.0.0": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@probot/octokit-plugin-config/-/octokit-plugin-config-1.1.6.tgz#c450a746f082c8ec9b6d1a481a71778f7720fa9b" - integrity sha512-L29wmnFvilzSfWn9tUgItxdLv0LJh2ICjma3FmLr80Spu3wZ9nHyRrKMo9R5/K2m7VuWmgoKnkgRt2zPzAQBEQ== - dependencies: - "@types/js-yaml" "^4.0.5" - js-yaml "^4.1.0" - -"@probot/pino@^2.2.0": - version "2.3.5" - resolved "https://registry.yarnpkg.com/@probot/pino/-/pino-2.3.5.tgz#f1d051edfc080c9183592e90ac8ae03c14e3951a" - integrity sha512-IiyiNZonMw1dHC4EAdD55y5owV733d9Gll/IKsrLikB7EJ54+eMCOtL/qo+OmgWN9XV3NTDfziEQF2og/OBKog== - dependencies: - "@sentry/node" "^6.0.0" - pino-pretty "^6.0.0" - pump "^3.0.0" - readable-stream "^3.6.0" - split2 "^4.0.0" - -"@sentry/core@6.19.7": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.19.7.tgz#156aaa56dd7fad8c89c145be6ad7a4f7209f9785" - integrity sha512-tOfZ/umqB2AcHPGbIrsFLcvApdTm9ggpi/kQZFkej7kMphjT+SGBiQfYtjyg9jcRW+ilAR4JXC9BGKsdEQ+8Vw== - dependencies: - "@sentry/hub" "6.19.7" - "@sentry/minimal" "6.19.7" - "@sentry/types" "6.19.7" - "@sentry/utils" "6.19.7" - tslib "^1.9.3" - -"@sentry/hub@6.19.7": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.19.7.tgz#58ad7776bbd31e9596a8ec46365b45cd8b9cfd11" - integrity sha512-y3OtbYFAqKHCWezF0EGGr5lcyI2KbaXW2Ik7Xp8Mu9TxbSTuwTe4rTntwg8ngPjUQU3SUHzgjqVB8qjiGqFXCA== - dependencies: - "@sentry/types" "6.19.7" - "@sentry/utils" "6.19.7" - tslib "^1.9.3" - -"@sentry/minimal@6.19.7": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.19.7.tgz#b3ee46d6abef9ef3dd4837ebcb6bdfd01b9aa7b4" - integrity sha512-wcYmSJOdvk6VAPx8IcmZgN08XTXRwRtB1aOLZm+MVHjIZIhHoBGZJYTVQS/BWjldsamj2cX3YGbGXNunaCfYJQ== - dependencies: - "@sentry/hub" "6.19.7" - "@sentry/types" "6.19.7" - tslib "^1.9.3" - -"@sentry/node@^6.0.0": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.19.7.tgz#32963b36b48daebbd559e6f13b1deb2415448592" - integrity sha512-gtmRC4dAXKODMpHXKfrkfvyBL3cI8y64vEi3fDD046uqYcrWdgoQsffuBbxMAizc6Ez1ia+f0Flue6p15Qaltg== - dependencies: - "@sentry/core" "6.19.7" - "@sentry/hub" "6.19.7" - "@sentry/types" "6.19.7" - "@sentry/utils" "6.19.7" - cookie "^0.4.1" - https-proxy-agent "^5.0.0" - lru_map "^0.3.3" - tslib "^1.9.3" - -"@sentry/types@6.19.7": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.19.7.tgz#c6b337912e588083fc2896eb012526cf7cfec7c7" - integrity sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg== - -"@sentry/utils@6.19.7": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.19.7.tgz#6edd739f8185fd71afe49cbe351c1bbf5e7b7c79" - integrity sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA== - dependencies: - "@sentry/types" "6.19.7" - tslib "^1.9.3" - -"@sinclair/typebox@^0.24.1": - version "0.24.51" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" - integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== - -"@sinclair/typebox@^0.31.5": - version "0.31.15" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.31.15.tgz#182bff2527c2953540f0b5e8d1851888fb57b2eb" - integrity sha512-gheE0Z2QWB/EuUwirniP+vq17N0MdQ+9bKyy2lPJzcBin6piBxOrazTYOB18N+oeBwVVepAmlqqo9KbpSl9DOA== - -"@sinonjs/commons@^1.7.0": - version "1.8.6" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" - integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" - integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== - dependencies: - "@sinonjs/commons" "^1.7.0" - -"@supabase/functions-js@^2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@supabase/functions-js/-/functions-js-2.1.5.tgz#ed1b85f499dfda21d40fe39b86ab923117cb572b" - integrity sha512-BNzC5XhCzzCaggJ8s53DP+WeHHGT/NfTsx2wUSSGKR2/ikLFQTBCDzMvGz/PxYMqRko/LwncQtKXGOYp1PkPaw== - dependencies: - "@supabase/node-fetch" "^2.6.14" - -"@supabase/gotrue-js@^2.51.0": - version "2.52.0" - resolved "https://registry.yarnpkg.com/@supabase/gotrue-js/-/gotrue-js-2.52.0.tgz#120cbb369adf5560a522e383087766e987bc2b7e" - integrity sha512-UFCbydMYFn/LhPW08aeZ9sgFDA3kOQCjA2ieFj/sccye9m8Tv0pimMfnXh3A9TqBJ0/0utpkaGSad3XdpJ+Mbw== - dependencies: - "@supabase/node-fetch" "^2.6.14" - -"@supabase/node-fetch@^2.6.14": - version "2.6.14" - resolved "https://registry.yarnpkg.com/@supabase/node-fetch/-/node-fetch-2.6.14.tgz#6a3e2924e3de8aeeb82c193c786ffb25da9af23f" - integrity sha512-w/Tsd22e/5fAeoxqQ4P2MX6EyF+iM6rc9kmlMVFkHuG0rAltt2TLhFbDJfemnHbtvnazWaRfy5KnFU/SYT37dQ== - dependencies: - whatwg-url "^5.0.0" - -"@supabase/postgrest-js@^1.8.4": - version "1.8.4" - resolved "https://registry.yarnpkg.com/@supabase/postgrest-js/-/postgrest-js-1.8.4.tgz#89e8355503979ad25e7340b910d17704507ab325" - integrity sha512-ELjpvhb04wILUiJz9zIsTSwaz9LQNlX+Ig5/LgXQ7k68qQI6NqHVn+ISRNt53DngUIyOnLHjeqqIRHBZ7zpgGA== - dependencies: - "@supabase/node-fetch" "^2.6.14" - -"@supabase/realtime-js@^2.7.4": - version "2.7.4" - resolved "https://registry.yarnpkg.com/@supabase/realtime-js/-/realtime-js-2.7.4.tgz#de41195bd3f2cdd6db82d9f93c4c5b8fae9f809b" - integrity sha512-FzSzs1k9ruh/uds5AJ95Nc3beiMCCIhougExJ3O98CX1LMLAKUKFy5FivKLvcNhXnNfUEL0XUfGMb4UH2J7alg== - dependencies: - "@types/phoenix" "^1.5.4" - "@types/websocket" "^1.0.3" - websocket "^1.0.34" - -"@supabase/storage-js@^2.5.4": - version "2.5.4" - resolved "https://registry.yarnpkg.com/@supabase/storage-js/-/storage-js-2.5.4.tgz#15946fa03574e94cdeff2b7fa2cd5b85880239f5" - integrity sha512-yspHD19I9uQUgfTh0J94+/r/g6hnhdQmw6Y7OWqr/EbnL6uvicGV1i1UDkkmeUHqfF9Mbt2sLtuxRycYyKv2ew== - dependencies: - "@supabase/node-fetch" "^2.6.14" - -"@supabase/supabase-js@^2.4.0": - version "2.33.2" - resolved "https://registry.yarnpkg.com/@supabase/supabase-js/-/supabase-js-2.33.2.tgz#d2461506fa6229c9ca26db30c268f0c6a8943e10" - integrity sha512-r+xCaERasxI0fMqOTp4zwur200X6HCjif48WKIcWrZgtzdtyP6CsP6J3rwZWfR/mR5MN0qLdK0SGA0QCgxS3Nw== - dependencies: - "@supabase/functions-js" "^2.1.5" - "@supabase/gotrue-js" "^2.51.0" - "@supabase/node-fetch" "^2.6.14" - "@supabase/postgrest-js" "^1.8.4" - "@supabase/realtime-js" "^2.7.4" - "@supabase/storage-js" "^2.5.4" - -"@tokenizer/token@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276" - integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== - -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -"@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.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== - -"@types/aws-lambda@^8.10.85": - version "8.10.121" - resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-8.10.121.tgz#2702b77a77fadea98bbef43502a289882361854b" - integrity sha512-Y/jsUwO18HuC0a39BuMQkSOd/kMGATh/h5LNksw8FlTafbQ3Ge3578ZoT8w8gSOsWl2qH1p/SS/R61vc0X5jIQ== - -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.2.tgz#215db4f4a35d710256579784a548907237728756" - integrity sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA== - dependencies: - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.5" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.5.tgz#281f4764bcbbbc51fdded0f25aa587b4ce14da95" - integrity sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.2.tgz#843e9f1f47c957553b0c374481dc4772921d6a6b" - integrity sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.2.tgz#4ddf99d95cfdd946ff35d2b65c978d9c9bf2645d" - integrity sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw== - dependencies: - "@babel/types" "^7.20.7" - -"@types/body-parser@*": - version "1.19.3" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.3.tgz#fb558014374f7d9e56c8f34bab2042a3a07d25cd" - integrity sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/btoa-lite@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/btoa-lite/-/btoa-lite-1.0.0.tgz#e190a5a548e0b348adb0df9ac7fa5f1151c7cca4" - integrity sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg== - -"@types/connect@*": - version "3.4.36" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.36.tgz#e511558c15a39cb29bd5357eebb57bd1459cd1ab" - integrity sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w== - dependencies: - "@types/node" "*" - -"@types/eslint@^8.40.2": - version "8.44.2" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.2.tgz#0d21c505f98a89b8dd4d37fa162b09da6089199a" - integrity sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" - integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== - -"@types/express-serve-static-core@^4.17.33": - version "4.17.36" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.36.tgz#baa9022119bdc05a4adfe740ffc97b5f9360e545" - integrity sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@^4.17.9": - version "4.17.17" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" - integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/graceful-fs@^4.1.2": - version "4.1.6" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" - integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== - dependencies: - "@types/node" "*" - -"@types/http-errors@*": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.2.tgz#a86e00bbde8950364f8e7846687259ffcd96e8c2" - integrity sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg== - -"@types/ioredis@^4.27.1": - version "4.28.10" - resolved "https://registry.yarnpkg.com/@types/ioredis/-/ioredis-4.28.10.tgz#40ceb157a4141088d1394bb87c98ed09a75a06ff" - integrity sha512-69LyhUgrXdgcNDv7ogs1qXZomnfOEnSmrmMFqKgt1XMJxmoOSG/u3wYy13yACIfKuMJ8IhKgHafDO3sx19zVQQ== - dependencies: - "@types/node" "*" - -"@types/is-base64@^1.1.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/is-base64/-/is-base64-1.1.1.tgz#a17d2b0075f637f80f9ab5f76f0071a65f6965d4" - integrity sha512-JgnGhP+MeSHEQmvxcobcwPEP4Ew56voiq9/0hmP/41lyQ/3gBw/ZCIRy2v+QkEOdeCl58lRcrf6+Y6WMlJGETA== - -"@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.0": - version "28.1.8" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.8.tgz#6936409f3c9724ea431efd412ea0238a0f03b09b" - integrity sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw== - dependencies: - expect "^28.0.0" - pretty-format "^28.0.0" - -"@types/js-yaml@^4.0.5": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.6.tgz#4b3afd5158b8749095b1f096967b6d0f838d862f" - integrity sha512-ACTuifTSIIbyksx2HTon3aFtCKWcID7/h3XEmRpDYdMCXxPbl+m9GteOJeaAkiAta/NJaSFuA7ahZ0NkwajDSw== - -"@types/json-schema@*", "@types/json-schema@^7.0.9": - version "7.0.13" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.13.tgz#02c24f4363176d2d18fc8b70b9f3c54aba178a85" - integrity sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ== - -"@types/jsonwebtoken@^9.0.0": - version "9.0.3" - resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz#1f22283b8e1f933af9e195d720798b64b399d84c" - integrity sha512-b0jGiOgHtZ2jqdPgPnP6WLCXZk1T8p06A/vPGzUvxpFGgKMbjXJDjC5m52ErqBnIuWZFgGoIJyRdeG5AyreJjA== - dependencies: - "@types/node" "*" - -"@types/libsodium-wrappers@^0.7.10": - version "0.7.11" - resolved "https://registry.yarnpkg.com/@types/libsodium-wrappers/-/libsodium-wrappers-0.7.11.tgz#4ac53b8a16a4c80d062e32b3849e9d5b8c2f92ed" - integrity sha512-8avZYJny690B6lFZQEDz4PEdCgC8D8qmGE/mhJBzCwzZvsqne61tCRbtJOhxsjYMItEZd3k4SoR4xKKLnI9Ztg== - -"@types/lodash@^4.14.197": - version "4.14.198" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.198.tgz#4d27465257011aedc741a809f1269941fa2c5d4c" - integrity sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg== - -"@types/mime@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" - integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== - -"@types/mime@^1": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" - integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== - -"@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/ms@^0.7.31": - version "0.7.31" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" - integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== - -"@types/node-fetch@^2.6.4": - version "2.6.6" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.6.tgz#b72f3f4bc0c0afee1c0bc9cff68e041d01e3e779" - integrity sha512-95X8guJYhfqiuVVhRFxVQcf4hW/2bCuoPwDasMf/531STFoNoWTT7YDnWdXHEZKqAGUigmpG31r2FE70LwnzJw== - dependencies: - "@types/node" "*" - form-data "^4.0.0" - -"@types/node@*": - version "20.7.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.7.0.tgz#c03de4572f114a940bc2ca909a33ddb2b925e470" - integrity sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg== - -"@types/node@16.9.1": - version "16.9.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.9.1.tgz#0611b37db4246c937feef529ddcc018cf8e35708" - integrity sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g== - -"@types/node@20.4.7": - version "20.4.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.7.tgz#74d323a93f1391a63477b27b9aec56669c98b2ab" - integrity sha512-bUBrPjEry2QUTsnuEjzjbS7voGWCc30W0qzgMf90GPeDGFRakvrz47ju+oqDAKCXLUCe39u57/ORMl/O/04/9g== - -"@types/node@^14.18.37": - version "14.18.59" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.59.tgz#2b61a51d875e2a4deb0c6b498ff21a78e691edc6" - integrity sha512-NWJMpBL2Xs3MY93yrD6YrrTKep8eIA6iMnfG4oIc6LrTRlBZgiSCGiY3V/Owlp6umIBLyKb4F8Q7hxWatjYH5A== - -"@types/node@^18.11.18": - version "18.18.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.18.0.tgz#bd19d5133a6e5e2d0152ec079ac27c120e7f1763" - integrity sha512-3xA4X31gHT1F1l38ATDIL9GpRLdwVhnEFC8Uikv5ZLlXATwrCYyPq7ZWHxzxc3J/30SUiwiYT+bQe0/XvKlWbw== - -"@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/parse5@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-7.0.0.tgz#8b412a0a4461c84d6280a372bfa8c57a418a06bd" - integrity sha512-f2SeAxumolBmhuR62vNGTsSAvdz/Oj0k682xNrcKJ4dmRnTPODB74j6CPoNPzBPTHsu7Y7W7u93Mgp8Ovo8vWw== - dependencies: - parse5 "*" - -"@types/phoenix@^1.5.4": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@types/phoenix/-/phoenix-1.6.1.tgz#9551cd77a8f4c70c5d81db899f2af762066aabde" - integrity sha512-g2/8Ogi2zfiS25jdGT5iDSo5yjruhhXaOuOJCkOxMW28w16VxFvjtAXjBNRo7WlRS4+UXAMj3mK46UwieNM/5g== - -"@types/pino-http@^5.0.6": - version "5.8.1" - resolved "https://registry.yarnpkg.com/@types/pino-http/-/pino-http-5.8.1.tgz#ebb194750ad2f9245c3028b5d2c4e6d64f685ba9" - integrity sha512-A9MW6VCnx5ii7s+Fs5aFIw+aSZcBCpsZ/atpxamu8tTsvWFacxSf2Hrn1Ohn1jkVRB/LiPGOapRXcFawDBnDnA== - dependencies: - "@types/pino" "6.3" - -"@types/pino-pretty@*": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@types/pino-pretty/-/pino-pretty-5.0.0.tgz#aa7a61cfd553b051764acfa0a49872f7a09a1722" - integrity sha512-N1uzqSzioqz8R3AkDbSJwcfDWeI3YMPNapSQQhnB2ISU4NYgUIcAh+hYT5ygqBM+klX4htpEhXMmoJv3J7GrdA== - dependencies: - pino-pretty "*" - -"@types/pino-std-serializers@*": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz#1e28b80b554c8222858e99a4e0fc77fd070e10e8" - integrity sha512-gXfUZx2xIBbFYozGms53fT0nvkacx/+62c8iTxrEqH5PkIGAQvDbXg2774VWOycMPbqn5YJBQ3BMsg4Li3dWbg== - dependencies: - pino-std-serializers "*" - -"@types/pino@6.3", "@types/pino@^6.3.4": - version "6.3.12" - resolved "https://registry.yarnpkg.com/@types/pino/-/pino-6.3.12.tgz#4425db6ced806109c3df957100cba9dfcd73c228" - integrity sha512-dsLRTq8/4UtVSpJgl9aeqHvbh6pzdmjYD3C092SYgLD2TyoCqHpTJk6vp8DvCTGGc7iowZ2MoiYiVUUCcu7muw== - dependencies: - "@types/node" "*" - "@types/pino-pretty" "*" - "@types/pino-std-serializers" "*" - sonic-boom "^2.1.0" - -"@types/prettier@^2.0.0": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== - -"@types/qs@*": - version "6.9.8" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.8.tgz#f2a7de3c107b89b441e071d5472e6b726b4adf45" - integrity sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg== - -"@types/range-parser@*": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" - integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== - -"@types/semver@^7.3.12": - version "7.5.1" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.1.tgz#0480eeb7221eb9bc398ad7432c9d7e14b1a5a367" - integrity sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg== - -"@types/send@*": - version "0.17.1" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.1.tgz#ed4932b8a2a805f1fe362a70f4e62d0ac994e301" - integrity sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-static@*": - version "1.15.2" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.2.tgz#3e5419ecd1e40e7405d34093f10befb43f63381a" - integrity sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw== - dependencies: - "@types/http-errors" "*" - "@types/mime" "*" - "@types/node" "*" - -"@types/source-map-support@^0.5.6": - version "0.5.7" - resolved "https://registry.yarnpkg.com/@types/source-map-support/-/source-map-support-0.5.7.tgz#68b3cc568cc4cc4d141d58edfca164c1354044b9" - integrity sha512-rJqBfLel8jPuL5MwXxMH2Cdb6D80Snu3YJxDE+VJAmtT04l7j3OA7h+FYXlYDys0WeBVH/MPbExj3B8NCaDw9g== - dependencies: - source-map "^0.6.0" - -"@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/websocket@^1.0.3": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.6.tgz#ec8dce5915741632ac3a4b1f951b6d4156e32d03" - integrity sha512-JXkliwz93B2cMWOI1ukElQBPN88vMg3CruvW4KVSKpflt3NyNCJImnhIuB/f97rG7kakqRJGFiwkA895Kn02Dg== - dependencies: - "@types/node" "*" - -"@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@^15.0.0": - version "15.0.15" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.15.tgz#e609a2b1ef9e05d90489c2f5f45bbfb2be092158" - integrity sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg== - dependencies: - "@types/yargs-parser" "*" - -"@types/yargs@^17.0.8": - version "17.0.24" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" - integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== - dependencies: - "@types/yargs-parser" "*" - -"@types/yauzl@^2.9.1": - version "2.10.0" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" - integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== - dependencies: - "@types/node" "*" - -"@typescript-eslint/eslint-plugin@^5.59.11": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" - integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== - dependencies: - "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/type-utils" "5.62.0" - "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/parser@^5.59.11": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" - integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== - dependencies: - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" - integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - -"@typescript-eslint/type-utils@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" - integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== - dependencies: - "@typescript-eslint/typescript-estree" "5.62.0" - "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - tsutils "^3.21.0" - -"@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== - -"@typescript-eslint/typescript-estree@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - 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.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" - integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - eslint-scope "^5.1.1" - semver "^7.3.7" - -"@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== - dependencies: - "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" - -"@uniswap/permit2-sdk@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@uniswap/permit2-sdk/-/permit2-sdk-1.2.0.tgz#ed86440a87a6c318169c8e6f161fc263ad040891" - integrity sha512-Ietv3FxN7+RCXcPSED/i/8b0a2GUZrMdyX05k3FsSztvYKyPFAMS/hBXojF0NZqYB1bHecqYc7Ej+7tV/rdYXg== - dependencies: - ethers "^5.3.1" - tiny-invariant "^1.3.1" - -"@vercel/ncc@^0.34.0": - version "0.34.0" - resolved "https://registry.yarnpkg.com/@vercel/ncc/-/ncc-0.34.0.tgz#d0139528320e46670d949c82967044a8f66db054" - integrity sha512-G9h5ZLBJ/V57Ou9vz5hI8pda/YQX5HQszCs3AmIus3XzsmRn/0Ptic5otD3xVST8QLKk7AMk7AqpsyQGN7MZ9A== - -JSONStream@^1.3.5: - 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" - -abab@^2.0.3, abab@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -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@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.2.4, acorn@^8.4.1, acorn@^8.9.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -aes-js@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" - integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agentkeepalive@^4.2.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" - integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== - dependencies: - humanize-ms "^1.2.1" - -aggregate-error@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/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-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - -ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/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.0.0, ajv@^8.11.0, ajv@^8.11.2: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-escapes@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" - integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== - dependencies: - type-fest "^1.0.2" - -ansi-regex@^5.0.0, ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/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.yarnpkg.com/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.yarnpkg.com/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, ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -any-base@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/any-base/-/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe" - integrity sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg== - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -anymatch@^3.0.3, anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - 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.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -args@^5.0.1: - version "5.0.3" - resolved "https://registry.yarnpkg.com/args/-/args-5.0.3.tgz#943256db85021a85684be2f0882f25d796278702" - integrity sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA== - dependencies: - camelcase "5.0.0" - chalk "2.4.2" - leven "2.1.0" - mri "1.1.4" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -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-timsort@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-timsort/-/array-timsort-1.0.3.tgz#3c9e4199e54fb2b9c3fe5976396a21614ef0d926" - integrity sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== - -asap@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== - -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== - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -atomic-sleep@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" - integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== - -axios@^1.3.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.5.0.tgz#f02e4af823e2e46a9768cfc74691fdd0517ea267" - integrity sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ== - dependencies: - follow-redirects "^1.15.0" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -babel-jest@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" - integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== - dependencies: - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.6.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - slash "^3.0.0" - -babel-plugin-istanbul@^6.0.0: - 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@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" - integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" - "@types/babel__traverse" "^7.0.6" - -babel-preset-current-node-syntax@^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@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" - integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== - dependencies: - babel-plugin-jest-hoist "^26.6.2" - babel-preset-current-node-syntax "^1.0.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base-64@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb" - integrity sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -basic-auth@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" - integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== - dependencies: - safe-buffer "5.1.2" - -bech32@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" - integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== - -before-after-hook@^2.2.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" - integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== - -bin-links@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.2.tgz#13321472ea157e9530caded2b7281496d698665b" - integrity sha512-jxJ0PbXR8eQyPlExCvCs3JFnikvs1Yp4gUJt6nmgathdOwvur+q22KWC3h20gvWl4T/14DXKj2IlkJwwZkZPOw== - dependencies: - cmd-shim "^6.0.0" - npm-normalize-package-bin "^3.0.0" - read-cmd-shim "^4.0.0" - write-file-atomic "^5.0.0" - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bl@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -bmp-js@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.1.0.tgz#e05a63f796a6c1ff25f4771ec7adadc148c07233" - integrity sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw== - -bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -bottleneck@^2.15.3: - version "2.19.5" - resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" - integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/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.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browserslist@^4.21.9: - version "4.21.10" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" - integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== - dependencies: - caniuse-lite "^1.0.30001517" - electron-to-chromium "^1.4.477" - node-releases "^2.0.13" - update-browserslist-db "^1.0.11" - -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" - -btoa-lite@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" - integrity sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA== - -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== - -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== - -buffer-equal@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b" - integrity sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA== - -buffer-from@1.x, 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== - -buffer@^5.2.0, buffer@^5.2.1, buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -bufferutil@^4.0.1: - version "4.0.7" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" - integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== - dependencies: - node-gyp-build "^4.3.0" - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -call-bind@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -callsites@^3.0.0, callsites@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/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: - version "5.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" - integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== - -camelcase@^5.0.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.0.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001517: - version "1.0.30001532" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001532.tgz#c6a4d5d2da6d2b967f0ee5e12e7f680db6ad2fca" - integrity sha512-FbDFnNat3nMnrROzqrsg314zhqN5LGQ1kyyMk2opcrwGbVGpHRhgCWtAgD5YJUqNAiQ+dklreil/c3Qf1dfCTw== - -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -chalk-template@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/chalk-template/-/chalk-template-1.1.0.tgz#ffc55db6dd745e9394b85327c8ac8466edb7a7b1" - integrity sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg== - dependencies: - chalk "^5.2.0" - -chalk@2.4.2, chalk@^2.4.2: - 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@5.3.0, chalk@^5.2.0, chalk@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" - integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== - -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/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== - -charenc@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== - -chokidar@^3.5.2: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -ci-info@^3.2.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== - -cjs-module-lexer@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" - integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -clear-module@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/clear-module/-/clear-module-4.1.2.tgz#5a58a5c9f8dccf363545ad7284cad3c887352a80" - integrity sha512-LWAxzHqdHsAZlPlEyJ2Poz6AIs384mPeqLVCru2p0BrP9G/kVGuhNyZYClLO6cXlnuJjzC8xtsJIuMjKqLXoAw== - dependencies: - parent-module "^2.0.0" - resolve-from "^5.0.0" - -cli-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" - integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== - dependencies: - restore-cursor "^4.0.0" - -cli-truncate@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" - integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== - dependencies: - slice-ansi "^5.0.0" - string-width "^5.0.0" - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.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" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -cluster-key-slot@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" - integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== - -cmd-shim@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.1.tgz#a65878080548e1dca760b3aea1e21ed05194da9d" - integrity sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q== - -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.2" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -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.yarnpkg.com/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.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colorette@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" - integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== - -colorette@^2.0.20, colorette@^2.0.7: - version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -combined-stream@^1.0.8: - 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@11.0.0, commander@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-11.0.0.tgz#43e19c25dbedc8256203538e8d7e9346877a6f67" - integrity sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ== - -commander@^2.19.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== - -comment-json@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/comment-json/-/comment-json-4.2.3.tgz#50b487ebbf43abe44431f575ebda07d30d015365" - integrity sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw== - dependencies: - array-timsort "^1.0.3" - core-util-is "^1.0.3" - esprima "^4.0.1" - has-own-prop "^2.0.0" - repeat-string "^1.6.1" - -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" - -component-emitter@^1.2.1, component-emitter@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -configstore@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-6.0.0.tgz#49eca2ebc80983f77e09394a1a56e0aca8235566" - integrity sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA== - dependencies: - dot-prop "^6.0.1" - graceful-fs "^4.2.6" - unique-string "^3.0.0" - write-file-atomic "^3.0.3" - xdg-basedir "^5.0.1" - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -conventional-changelog-angular@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz#a9a9494c28b7165889144fd5b91573c4aa9ca541" - integrity sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg== - dependencies: - compare-func "^2.0.0" - -conventional-changelog-conventionalcommits@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-6.1.0.tgz#3bad05f4eea64e423d3d90fc50c17d2c8cf17652" - integrity sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw== - dependencies: - compare-func "^2.0.0" - -conventional-commits-parser@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz#02ae1178a381304839bce7cea9da5f1b549ae505" - integrity sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg== - dependencies: - JSONStream "^1.3.5" - is-text-path "^1.0.1" - meow "^8.1.2" - split2 "^3.2.2" - -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -cookie@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - -cookiejar@^2.1.3: - version "2.1.4" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" - integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== - -copyfiles@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/copyfiles/-/copyfiles-2.4.1.tgz#d2dcff60aaad1015f09d0b66e7f0f1c5cd3c5da5" - integrity sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg== - dependencies: - glob "^7.0.5" - minimatch "^3.0.3" - mkdirp "^1.0.4" - noms "0.0.0" - through2 "^2.0.1" - untildify "^4.0.0" - yargs "^16.1.0" - -core-util-is@^1.0.3, core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig-typescript-loader@^4.0.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.4.0.tgz#f3feae459ea090f131df5474ce4b1222912319f9" - integrity sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw== - -cosmiconfig@8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.0.0.tgz#e9feae014eab580f858f8a0288f38997a7bebe97" - integrity sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ== - dependencies: - import-fresh "^3.2.1" - js-yaml "^4.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - -cosmiconfig@^8.0.0: - version "8.3.5" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.5.tgz#3b3897ddd042d022d5a207d4c8832e54f5301977" - integrity sha512-A5Xry3xfS96wy2qbiLkQLAg4JUrR2wvfybxj6yqLmrUfMAvhS3MZxIP2oQn0grgYIvJqzpeTEWu4vK0t+12NNw== - dependencies: - import-fresh "^3.3.0" - js-yaml "^4.1.0" - parse-json "^5.2.0" - path-type "^4.0.0" - -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-fetch@3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== - dependencies: - node-fetch "2.6.7" - -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/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" - -crypt@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== - -crypto-random-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-4.0.0.tgz#5a3cc53d7dd86183df5da0312816ceeeb5bb1fc2" - integrity sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA== - dependencies: - type-fest "^1.0.1" - -cspell-dictionary@7.3.6: - version "7.3.6" - resolved "https://registry.yarnpkg.com/cspell-dictionary/-/cspell-dictionary-7.3.6.tgz#e7d0455926c81301b47d94d6ba7181aee1df4ad7" - integrity sha512-8E0qsGTP7uHZeQ0qD6au+bjaj4M9F4AgurssG3VQuvsYpzEI6S/81U3GQVzcn/4mn7Z5KE286CElZQWAiQPLQA== - dependencies: - "@cspell/cspell-pipe" "7.3.6" - "@cspell/cspell-types" "7.3.6" - cspell-trie-lib "7.3.6" - fast-equals "^4.0.3" - gensequence "^6.0.0" - -cspell-gitignore@7.3.6: - version "7.3.6" - resolved "https://registry.yarnpkg.com/cspell-gitignore/-/cspell-gitignore-7.3.6.tgz#2e63ee94af8260632fb32f360a38695239e9caa4" - integrity sha512-D/oWUoeW3kgKIIpLpJCJk4KmtxPdb6yqkMX8Ze4rzMXAUjHkw6PPjMd8hcJl7uTJa4T8vHM+UR6L4t3huDuVoA== - dependencies: - cspell-glob "7.3.6" - find-up "^5.0.0" - -cspell-glob@7.3.6: - version "7.3.6" - resolved "https://registry.yarnpkg.com/cspell-glob/-/cspell-glob-7.3.6.tgz#1ee6a6dd5b1ec17e0089470b90fd7f5c8fe12e8a" - integrity sha512-xfVmqkkg/Pznij3VJCLbUvEKWqs/+AyyHIXo9s1j/d4M0Nw/O4HJFoHwNiMoAk6aceMTgjjVIneGmSZsHVGYZg== - dependencies: - micromatch "^4.0.5" - -cspell-grammar@7.3.6: - version "7.3.6" - resolved "https://registry.yarnpkg.com/cspell-grammar/-/cspell-grammar-7.3.6.tgz#8743212badfda8c7cda209bd8b22c4909cfb5986" - integrity sha512-04kvcptwvJBSMfcOTbanEFa194Xkpkjo4wkTImO26Zzu06tGawbL4FPPQdGygMz7yTdc6Wlrlks5TNChWlcn+Q== - dependencies: - "@cspell/cspell-pipe" "7.3.6" - "@cspell/cspell-types" "7.3.6" - -cspell-io@7.3.6: - version "7.3.6" - resolved "https://registry.yarnpkg.com/cspell-io/-/cspell-io-7.3.6.tgz#d2821089bff5d4bca3a2aa400d5c182550ec893f" - integrity sha512-FzynVc3OE9rS4t0cxTCVD9VFwOAnhvhV/WBWMrMUtvi8DVnRu7of/1ZJsC+XDtij+G1Kd6EOrzSnTj5gn9aQaQ== - dependencies: - "@cspell/cspell-service-bus" "7.3.6" - node-fetch "^2.7.0" - -cspell-lib@7.3.6: - version "7.3.6" - resolved "https://registry.yarnpkg.com/cspell-lib/-/cspell-lib-7.3.6.tgz#9d1f0b3fccb24665dbcbe08db6818c98e8302ec4" - integrity sha512-ixPnudlaNh4UwFkHeKUXbBYB/wLHNv1Gf+zBGy4oz2Uu9ZZTVgczhE/t2pPTD6ZRcq4+YulGuqxYCS+3qqOQQQ== - dependencies: - "@cspell/cspell-bundled-dicts" "7.3.6" - "@cspell/cspell-pipe" "7.3.6" - "@cspell/cspell-resolver" "7.3.6" - "@cspell/cspell-types" "7.3.6" - "@cspell/dynamic-import" "7.3.6" - "@cspell/strong-weak-map" "7.3.6" - clear-module "^4.1.2" - comment-json "^4.2.3" - configstore "^6.0.0" - cosmiconfig "8.0.0" - cspell-dictionary "7.3.6" - cspell-glob "7.3.6" - cspell-grammar "7.3.6" - cspell-io "7.3.6" - cspell-trie-lib "7.3.6" - fast-equals "^5.0.1" - find-up "^6.3.0" - gensequence "^6.0.0" - import-fresh "^3.3.0" - resolve-from "^5.0.0" - vscode-languageserver-textdocument "^1.0.8" - vscode-uri "^3.0.7" - -cspell-trie-lib@7.3.6: - version "7.3.6" - resolved "https://registry.yarnpkg.com/cspell-trie-lib/-/cspell-trie-lib-7.3.6.tgz#4b186b7da4630f96c13955cbb058867ddbf23507" - integrity sha512-75lSsKTdmFpewEl8Q+/WnSbpZ+JjoNnSDobNDcjZHTTnj/TlgCVxXASTaFLlXnqWU51QX+5798smnqpWBcJigg== - dependencies: - "@cspell/cspell-pipe" "7.3.6" - "@cspell/cspell-types" "7.3.6" - gensequence "^6.0.0" - -cspell@^7.0.0: - version "7.3.6" - resolved "https://registry.yarnpkg.com/cspell/-/cspell-7.3.6.tgz#6b3a031da25e4b04daf46ce14a667060ea03dc7a" - integrity sha512-iN3D05nwCbS6MdignKwK97vQPX3yrT/Nsu3LhhFptU0O5PO4hvRzFuSzEq+AumMby4Tuf9HcGP5Ugvyi7Gb3gw== - dependencies: - "@cspell/cspell-json-reporter" "7.3.6" - "@cspell/cspell-pipe" "7.3.6" - "@cspell/cspell-types" "7.3.6" - "@cspell/dynamic-import" "7.3.6" - chalk "^5.3.0" - chalk-template "^1.1.0" - commander "^11.0.0" - cspell-gitignore "7.3.6" - cspell-glob "7.3.6" - cspell-io "7.3.6" - cspell-lib "7.3.6" - fast-glob "^3.3.1" - fast-json-stable-stringify "^2.1.0" - file-entry-cache "^7.0.0" - get-stdin "^9.0.0" - semver "^7.5.4" - strip-ansi "^7.1.0" - vscode-uri "^3.0.7" - -css-select@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" - integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== - dependencies: - boolbase "^1.0.0" - css-what "^6.1.0" - domhandler "^5.0.2" - domutils "^3.0.1" - nth-check "^2.0.1" - -css-what@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.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== - -data-uri-to-buffer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" - integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== - -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - -dateformat@^4.5.1, dateformat@^4.6.3: - version "4.6.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5" - integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== - -debug@2.6.9, debug@^2.2.0, debug@^2.3.3: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, 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@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -decamelize-keys@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" - integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== - 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.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - -decimal.js@^10.2.1, decimal.js@^10.4.3: - version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== - -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/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.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -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== - -denque@^1.1.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf" - integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw== - -depd@2.0.0, depd@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -deprecation@^2.0.0, deprecation@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" - integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -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== - -devtools-protocol@0.0.1019158: - version "0.0.1019158" - resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1019158.tgz#4b08d06108a784a2134313149626ba55f030a86f" - integrity sha512-wvq+KscQ7/6spEV7czhnZc9RM/woz1AY+/Vpd8/h2HFMwJSdTliu7f/yr1A6vDdJfKICZsShqsYpEQbdhg8AFQ== - -dezalgo@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" - integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== - dependencies: - asap "^2.0.0" - wrappy "1" - -diff-sequences@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" - integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== - -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== - -digest-fetch@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/digest-fetch/-/digest-fetch-1.3.0.tgz#898e69264d00012a23cf26e8a3e40320143fc661" - integrity sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA== - dependencies: - base-64 "^0.1.0" - md5 "^2.3.0" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/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.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-serializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" - integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - entities "^4.2.0" - -dom-walk@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" - integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== - -domelementtype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" - -domhandler@^5.0.2, domhandler@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" - integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== - dependencies: - domelementtype "^2.3.0" - -domutils@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" - integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== - dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - -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" - -dot-prop@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" - integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== - dependencies: - is-obj "^2.0.0" - -dotenv@^8.2.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" - integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -ecdsa-sig-formatter@1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.4.477: - version "1.4.513" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.513.tgz#41a50bf749aa7d8058ffbf7a131fc3327a7b1675" - integrity sha512-cOB0xcInjm+E5qIssHeXJ29BaUyWpMyFKT5RB3bsLENDheCja0wMkHJyiPl0NBE/VzDI7JDuNEQWhe6RitEUcw== - -elliptic@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emittery@^0.7.1: - version "0.7.2" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" - integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/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.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -entities@^4.2.0, entities@^4.4.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - -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" - -es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.62" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" - integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - next-tick "^1.1.0" - -es6-iterator@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - -esbuild@~0.18.20: - version "0.18.20" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" - integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== - optionalDependencies: - "@esbuild/android-arm" "0.18.20" - "@esbuild/android-arm64" "0.18.20" - "@esbuild/android-x64" "0.18.20" - "@esbuild/darwin-arm64" "0.18.20" - "@esbuild/darwin-x64" "0.18.20" - "@esbuild/freebsd-arm64" "0.18.20" - "@esbuild/freebsd-x64" "0.18.20" - "@esbuild/linux-arm" "0.18.20" - "@esbuild/linux-arm64" "0.18.20" - "@esbuild/linux-ia32" "0.18.20" - "@esbuild/linux-loong64" "0.18.20" - "@esbuild/linux-mips64el" "0.18.20" - "@esbuild/linux-ppc64" "0.18.20" - "@esbuild/linux-riscv64" "0.18.20" - "@esbuild/linux-s390x" "0.18.20" - "@esbuild/linux-x64" "0.18.20" - "@esbuild/netbsd-x64" "0.18.20" - "@esbuild/openbsd-x64" "0.18.20" - "@esbuild/sunos-x64" "0.18.20" - "@esbuild/win32-arm64" "0.18.20" - "@esbuild/win32-ia32" "0.18.20" - "@esbuild/win32-x64" "0.18.20" - -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-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -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.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escodegen@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/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.2.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint@^8.43.0: - version "8.49.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.49.0.tgz#09d80a89bdb4edee2efcf6964623af1054bf6d42" - integrity sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "8.49.0" - "@humanwhocodes/config-array" "^0.11.11" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esprima@^4.0.0, esprima@^4.0.1: - 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.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/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.yarnpkg.com/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.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -ethers@^5.3.1, ethers@^5.7.2: - version "5.7.2" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" - integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== - dependencies: - "@ethersproject/abi" "5.7.0" - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/abstract-signer" "5.7.0" - "@ethersproject/address" "5.7.0" - "@ethersproject/base64" "5.7.0" - "@ethersproject/basex" "5.7.0" - "@ethersproject/bignumber" "5.7.0" - "@ethersproject/bytes" "5.7.0" - "@ethersproject/constants" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/hash" "5.7.0" - "@ethersproject/hdnode" "5.7.0" - "@ethersproject/json-wallets" "5.7.0" - "@ethersproject/keccak256" "5.7.0" - "@ethersproject/logger" "5.7.0" - "@ethersproject/networks" "5.7.1" - "@ethersproject/pbkdf2" "5.7.0" - "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@ethersproject/random" "5.7.0" - "@ethersproject/rlp" "5.7.0" - "@ethersproject/sha2" "5.7.0" - "@ethersproject/signing-key" "5.7.0" - "@ethersproject/solidity" "5.7.0" - "@ethersproject/strings" "5.7.0" - "@ethersproject/transactions" "5.7.0" - "@ethersproject/units" "5.7.0" - "@ethersproject/wallet" "5.7.0" - "@ethersproject/web" "5.7.1" - "@ethersproject/wordlists" "5.7.0" - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -eventemitter3@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" - integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== - -events@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -eventsource@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.2.tgz#bc75ae1c60209e7cb1541231980460343eaea7c2" - integrity sha512-xAH3zWhgO2/3KIniEKYPr8plNSzlGINOUqYj0m0u7AB81iRw8b/3E73W6AuU+6klLbaSFmZnaETQ2lXPfAydrA== - -eventsource@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-2.0.2.tgz#76dfcc02930fb2ff339520b6d290da573a9e8508" - integrity sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA== - -exec-sh@^0.3.2: - version "0.3.6" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" - integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== - -execa@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" - integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^4.3.0" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^3.0.7" - strip-final-newline "^3.0.0" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/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" - -exif-parser@^0.1.12: - version "0.1.12" - resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922" - integrity sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw== - -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== - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expect@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" - integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== - dependencies: - "@jest/types" "^26.6.2" - ansi-styles "^4.0.0" - jest-get-type "^26.3.0" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - -expect@^28.0.0: - 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" - -exponential-backoff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" - integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== - -express-handlebars@^6.0.3: - version "6.0.7" - resolved "https://registry.yarnpkg.com/express-handlebars/-/express-handlebars-6.0.7.tgz#f779254664eff0e250362ef1c2b30587059c212a" - integrity sha512-iYeMFpc/hMD+E6FNAZA5fgWeXnXr4rslOSPkeEV6TwdmpJ5lEXuWX0u9vFYs31P2MURctQq2batR09oeNj0LIg== - dependencies: - glob "^8.1.0" - graceful-fs "^4.2.10" - handlebars "^4.7.7" - -express@^4.17.1: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.1" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -ext@^1.1.2: - version "1.7.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" - integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== - dependencies: - type "^2.7.2" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extract-zip@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" - integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== - dependencies: - debug "^4.1.1" - get-stream "^5.1.0" - yauzl "^2.10.0" - optionalDependencies: - "@types/yauzl" "^2.9.1" - -fast-copy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/fast-copy/-/fast-copy-3.0.1.tgz#9e89ef498b8c04c1cd76b33b8e14271658a732aa" - integrity sha512-Knr7NOtK3HWRYGtHoJrjkaWepqT8thIVGAwt0p0aUs1zqkAzXZV4vo9fFNwyb5fcqK1GKYFYxldQdIDVKhUAfA== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-equals@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-4.0.3.tgz#72884cc805ec3c6679b99875f6b7654f39f0e8c7" - integrity sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg== - -fast-equals@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-5.0.1.tgz#a4eefe3c5d1c0d021aeed0bc10ba5e0c12ee405d" - integrity sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ== - -fast-glob@^3.2.9, fast-glob@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== - 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, fast-json-stable-stringify@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/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.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fast-redact@^3.0.0, fast-redact@^3.1.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.3.0.tgz#7c83ce3a7be4898241a46560d51de10f653f7634" - integrity sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ== - -fast-safe-stringify@^2.0.7, fast-safe-stringify@^2.0.8, fast-safe-stringify@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" - integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== - -fast-url-parser@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" - integrity sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ== - dependencies: - punycode "^1.3.2" - -fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - dependencies: - reusify "^1.0.4" - -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== - dependencies: - bser "2.1.1" - -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== - dependencies: - pend "~1.2.0" - -fetch-blob@^3.1.2, fetch-blob@^3.1.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" - integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== - dependencies: - node-domexception "^1.0.0" - web-streams-polyfill "^3.0.3" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -file-entry-cache@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-7.0.0.tgz#5bb4aef4f0a7dd2ff95966c6d97256b61504bd0a" - integrity sha512-OWhoO9dvvwspdI7YjGrs5wD7bPggVHc5b1NFAdyd1fEPIeno3Fj70fjBhklAqzUefgX7KCNDBnvrT8rZhS8Shw== - dependencies: - flat-cache "^3.1.0" - -file-type@^16.5.4: - version "16.5.4" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-16.5.4.tgz#474fb4f704bee427681f98dd390058a172a6c2fd" - integrity sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw== - dependencies: - readable-web-to-node-stream "^3.0.0" - strtok3 "^6.2.4" - token-types "^4.1.1" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/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" - -find-up@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" - integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== - dependencies: - locate-path "^7.1.0" - path-exists "^5.0.0" - -flat-cache@^3.0.4, flat-cache@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f" - integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== - dependencies: - flatted "^3.2.7" - keyv "^4.5.3" - rimraf "^3.0.2" - -flatstr@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/flatstr/-/flatstr-1.0.12.tgz#c2ba6a08173edbb6c9640e3055b95e287ceb5931" - integrity sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw== - -flatted@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== - -follow-redirects@^1.15.0: - version "1.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== - -form-data-encoder@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.2.tgz#1f1ae3dccf58ed4690b86d87e4f57c654fbab040" - integrity sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A== - -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -formdata-node@^4.3.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/formdata-node/-/formdata-node-4.4.1.tgz#23f6a5cb9cb55315912cbec4ff7b0f59bbd191e2" - integrity sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ== - dependencies: - node-domexception "1.0.0" - web-streams-polyfill "4.0.0-beta.3" - -formdata-polyfill@^4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" - integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== - dependencies: - fetch-blob "^3.1.2" - -formidable@^2.0.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/formidable/-/formidable-2.1.2.tgz#fa973a2bec150e4ce7cac15589d7a25fc30ebd89" - integrity sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g== - dependencies: - dezalgo "^1.0.4" - hexoid "^1.0.0" - once "^1.4.0" - qs "^6.11.0" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@^11.0.0: - version "11.1.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" - integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@^2.1.2, fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -gensequence@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/gensequence/-/gensequence-6.0.0.tgz#ae46a0f89ebd7cc334e45cfb8f1c99a65248694e" - integrity sha512-8WwuywE9pokJRAcg2QFR/plk3cVPebSUqRPzpGQh3WQ0wIiHAw+HyOQj5IuHyUTQBHpBKFoB2JUMu9zT3vJ16Q== - -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.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-proto "^1.0.1" - has-symbols "^1.0.3" - -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-stdin@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575" - integrity sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA== - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.0.0, get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-stream@^6.0.0, get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-tsconfig@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.0.tgz#06ce112a1463e93196aa90320c35df5039147e34" - integrity sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw== - dependencies: - resolve-pkg-maps "^1.0.0" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== - -gifwrap@^0.10.1: - version "0.10.1" - resolved "https://registry.yarnpkg.com/gifwrap/-/gifwrap-0.10.1.tgz#9ed46a5d51913b482d4221ce9c727080260b681e" - integrity sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw== - dependencies: - image-q "^4.0.0" - omggif "^1.0.10" - -git-raw-commits@^2.0.11: - 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, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, 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" - -glob@^8.0.0, glob@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.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" - -global-dirs@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485" - integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== - dependencies: - ini "2.0.0" - -global@~4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" - integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== - dependencies: - min-document "^2.19.0" - process "^0.11.10" - -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.19.0: - version "13.21.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.21.0.tgz#163aae12f34ef502f5153cfbdd3600f36c63c571" - integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== - dependencies: - type-fest "^0.20.2" - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/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" - -graceful-fs@^4.1.15, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw== - -handlebars@^4.5.3, handlebars@^4.7.7: - version "4.7.8" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" - integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.2" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - -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.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-own-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-own-prop/-/has-own-prop-2.0.0.tgz#f0f95d58f65804f5d218db32563bb85b8e0417af" - integrity sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ== - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -he@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -help-me@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/help-me/-/help-me-4.2.0.tgz#50712bfd799ff1854ae1d312c36eafcea85b0563" - integrity sha512-TAOnTB8Tz5Dw8penUuzHVrKNKlCIbwwbHnXraNJxPwf8LRtE2HlM84RYuezMFcwOJmoYOCWVDyJ8TQGxn9PgxA== - dependencies: - glob "^8.0.0" - readable-stream "^3.6.0" - -hexoid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hexoid/-/hexoid-1.0.0.tgz#ad10c6573fb907de23d9ec63a711267d9dc9bc18" - integrity sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g== - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.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-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== - dependencies: - whatwg-encoding "^1.0.5" - -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-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -https-proxy-agent@5.0.1, https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -human-signals@^4.3.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" - integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - -husky@^8.0.2: - version "8.0.3" - resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" - integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ieee754@^1.1.13, ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore-by-default@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" - integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== - -ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -image-q@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/image-q/-/image-q-4.0.0.tgz#31e075be7bae3c1f42a85c469b4732c358981776" - integrity sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw== - dependencies: - "@types/node" "16.9.1" - -import-fresh@^3.0.0, import-fresh@^3.2.1, import-fresh@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/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" - -import-meta-resolve@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-3.0.0.tgz#94a6aabc623874fbc2f3525ec1300db71c6cbc11" - integrity sha512-4IwhLhNNA8yy445rPjD/lWh++7hMDOml2eHtd58eG7h+qK3EryMuuRbsHGPikCoAgIkkDnckKfWSk2iDla/ejg== - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/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.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" - integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== - -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== - -ioredis@^4.27.8: - version "4.28.5" - resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.28.5.tgz#5c149e6a8d76a7f8fa8a504ffc85b7d5b6797f9f" - integrity sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A== - dependencies: - cluster-key-slot "^1.1.0" - debug "^4.3.1" - denque "^1.1.0" - lodash.defaults "^4.2.0" - lodash.flatten "^4.4.0" - lodash.isarguments "^3.1.0" - p-map "^2.1.0" - redis-commands "1.7.0" - redis-errors "^1.2.0" - redis-parser "^3.0.0" - standard-as-callback "^2.1.0" - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -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-base64@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-base64/-/is-base64-1.1.0.tgz#8ce1d719895030a457c59a7dcaf39b66d99d56b4" - integrity sha512-Nlhg7Z2dVC4/PTvIFkgVVNvPHSO2eR/Yd0XzhGiXCXEvWnptXlXa/clQ8aePPiMuxEGcWfzWbGw2Fe3d+Y3v1g== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-buffer@^1.1.5, is-buffer@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-core-module@^2.13.0, is-core-module@^2.5.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== - dependencies: - has "^1.0.3" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-docker@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/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.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" - integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== - -is-function@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" - integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== - -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, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== - dependencies: - kind-of "^3.0.2" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/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-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -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-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - -is-promise@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" - integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - -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== - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -isomorphic-fetch@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4" - integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== - dependencies: - node-fetch "^2.6.1" - whatwg-fetch "^3.4.1" - -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@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== - dependencies: - "@babel/core" "^7.7.5" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - -istanbul-lib-instrument@^5.0.4: - version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" - integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== - 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.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" - integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^4.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.0.2: - version "3.1.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jest-changed-files@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" - integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== - dependencies: - "@jest/types" "^26.6.2" - execa "^4.0.0" - throat "^5.0.0" - -jest-cli@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" - integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== - dependencies: - "@jest/core" "^26.6.3" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^26.6.3" - jest-util "^26.6.2" - jest-validate "^26.6.2" - prompts "^2.0.1" - yargs "^15.4.1" - -jest-config@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" - integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== - dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^26.6.3" - "@jest/types" "^26.6.2" - babel-jest "^26.6.3" - chalk "^4.0.0" - deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.4" - jest-environment-jsdom "^26.6.2" - jest-environment-node "^26.6.2" - jest-get-type "^26.3.0" - jest-jasmine2 "^26.6.3" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - micromatch "^4.0.2" - pretty-format "^26.6.2" - -jest-diff@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" - integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== - dependencies: - chalk "^4.0.0" - diff-sequences "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -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@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" - integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== - dependencies: - detect-newline "^3.0.0" - -jest-each@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" - integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== - dependencies: - "@jest/types" "^26.6.2" - chalk "^4.0.0" - jest-get-type "^26.3.0" - jest-util "^26.6.2" - pretty-format "^26.6.2" - -jest-environment-jsdom@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" - integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" - jsdom "^16.4.0" - -jest-environment-node@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" - integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" - -jest-get-type@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" - integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== - -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@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" - integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== - dependencies: - "@jest/types" "^26.6.2" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^26.0.0" - jest-serializer "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.1.2" - -jest-jasmine2@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" - integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^26.6.2" - is-generator-fn "^2.0.0" - jest-each "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - pretty-format "^26.6.2" - throat "^5.0.0" - -jest-leak-detector@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" - integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== - dependencies: - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-matcher-utils@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" - integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== - dependencies: - chalk "^4.0.0" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -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@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" - integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/types" "^26.6.2" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.2" - pretty-format "^26.6.2" - slash "^3.0.0" - stack-utils "^2.0.2" - -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@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" - integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - -jest-pnp-resolver@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" - integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== - -jest-regex-util@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" - integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== - -jest-resolve-dependencies@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" - integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== - dependencies: - "@jest/types" "^26.6.2" - jest-regex-util "^26.0.0" - jest-snapshot "^26.6.2" - -jest-resolve@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" - integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== - dependencies: - "@jest/types" "^26.6.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - jest-pnp-resolver "^1.2.2" - jest-util "^26.6.2" - read-pkg-up "^7.0.1" - resolve "^1.18.1" - slash "^3.0.0" - -jest-runner@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" - integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== - dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.7.1" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-docblock "^26.0.0" - jest-haste-map "^26.6.2" - jest-leak-detector "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - jest-runtime "^26.6.3" - jest-util "^26.6.2" - jest-worker "^26.6.2" - source-map-support "^0.5.6" - throat "^5.0.0" - -jest-runtime@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" - integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== - dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/globals" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - cjs-module-lexer "^0.6.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - slash "^3.0.0" - strip-bom "^4.0.0" - yargs "^15.4.1" - -jest-serializer@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" - integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.4" - -jest-snapshot@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" - integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== - dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^26.6.2" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.0.0" - chalk "^4.0.0" - expect "^26.6.2" - graceful-fs "^4.2.4" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - jest-haste-map "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - natural-compare "^1.4.0" - pretty-format "^26.6.2" - semver "^7.3.2" - -jest-util@^26.1.0, jest-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" - integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" - -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@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" - integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== - dependencies: - "@jest/types" "^26.6.2" - camelcase "^6.0.0" - chalk "^4.0.0" - jest-get-type "^26.3.0" - leven "^3.1.0" - pretty-format "^26.6.2" - -jest-watcher@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" - integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== - dependencies: - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - jest-util "^26.6.2" - string-length "^4.0.1" - -jest-worker@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - -jest@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" - integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== - dependencies: - "@jest/core" "^26.6.3" - import-local "^3.0.2" - jest-cli "^26.6.3" - -jimp@^0.22.4: - version "0.22.10" - resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.22.10.tgz#2cc3e265a99cdbe69ec60ddd57cbcde6a6cf0519" - integrity sha512-lCaHIJAgTOsplyJzC1w/laxSxrbSsEBw4byKwXgUdMmh+ayPsnidTblenQm+IvhIs44Gcuvlb6pd2LQ0wcKaKg== - dependencies: - "@jimp/custom" "^0.22.10" - "@jimp/plugins" "^0.22.10" - "@jimp/types" "^0.22.10" - regenerator-runtime "^0.13.3" - -jmespath@^0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" - integrity sha512-+kHj8HXArPfpPEKGLZ+kB5ONRTCiGQXo8RQYL0hH8t6pWXUBBK5KkkQmTNOwKK4LEsd0yTsgtjJVm4UBSZea4w== - -joycon@^3.0.0, joycon@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" - integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== - -jpeg-js@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.4.tgz#a9f1c6f1f9f0fa80cdb3484ed9635054d28936aa" - integrity sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg== - -js-sha3@0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== - -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, js-yaml@^3.14.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.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsdom@^16.4.0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - -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-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -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.yarnpkg.com/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-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -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.x, json5@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -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== - -jsonwebtoken@^9.0.0: - version "9.0.2" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3" - integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== - dependencies: - jws "^3.2.2" - lodash.includes "^4.3.0" - lodash.isboolean "^3.0.3" - lodash.isinteger "^4.0.4" - lodash.isnumber "^3.0.3" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.once "^4.0.0" - ms "^2.1.1" - semver "^7.5.4" - -jwa@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" - integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jws@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" - integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== - dependencies: - jwa "^1.4.1" - safe-buffer "^5.0.1" - -keyv@^4.5.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== - dependencies: - json-buffer "3.0.1" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2, 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== - -leven@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - integrity sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA== - -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.yarnpkg.com/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" - -libsodium-wrappers@^0.7.11: - version "0.7.13" - resolved "https://registry.yarnpkg.com/libsodium-wrappers/-/libsodium-wrappers-0.7.13.tgz#83299e06ee1466057ba0e64e532777d2929b90d3" - integrity sha512-kasvDsEi/r1fMzKouIDv7B8I6vNmknXwGiYodErGuESoFTohGSKZplFtVxZqHaoQ217AynyIFgnOVRitpHs0Qw== - dependencies: - libsodium "^0.7.13" - -libsodium@^0.7.13: - version "0.7.13" - resolved "https://registry.yarnpkg.com/libsodium/-/libsodium-0.7.13.tgz#230712ec0b7447c57b39489c48a4af01985fb393" - integrity sha512-mK8ju0fnrKXXfleL53vtp9xiPq5hKM0zbDQtcxQIsSmxNgSxqCj6R7Hl9PkrNe2j29T4yoDaF7DJLK9/i5iWUw== - -lilconfig@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - -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@^13.1.0: - version "13.3.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.3.0.tgz#7965d72a8d6a6c932f85e9c13ccf3596782d28a5" - integrity sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ== - dependencies: - chalk "5.3.0" - commander "11.0.0" - debug "4.3.4" - execa "7.2.0" - lilconfig "2.1.0" - listr2 "6.6.1" - micromatch "4.0.5" - pidtree "0.6.0" - string-argv "0.3.2" - yaml "2.3.1" - -listr2@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-6.6.1.tgz#08b2329e7e8ba6298481464937099f4a2cd7f95d" - integrity sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg== - dependencies: - cli-truncate "^3.1.0" - colorette "^2.0.20" - eventemitter3 "^5.0.1" - log-update "^5.0.1" - rfdc "^1.3.0" - wrap-ansi "^8.1.0" - -load-bmfont@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.4.1.tgz#c0f5f4711a1e2ccff725a7b6078087ccfcddd3e9" - integrity sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA== - dependencies: - buffer-equal "0.0.1" - mime "^1.3.4" - parse-bmfont-ascii "^1.0.3" - parse-bmfont-binary "^1.0.5" - parse-bmfont-xml "^1.1.4" - phin "^2.9.1" - xhr "^2.0.1" - xtend "^4.0.0" - -load-json-file@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" - integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== - dependencies: - graceful-fs "^4.1.15" - parse-json "^4.0.0" - pify "^4.0.1" - strip-bom "^3.0.0" - type-fest "^0.3.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/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" - -locate-path@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" - integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== - dependencies: - p-locate "^6.0.0" - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== - -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== - -lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== - -lodash.includes@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" - integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== - -lodash.isarguments@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== - -lodash.isboolean@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" - integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== - -lodash.isfunction@^3.0.9: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" - integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw== - -lodash.isinteger@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" - integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== - -lodash.isnumber@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" - integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== - -lodash.kebabcase@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" - integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.mergewith@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" - integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== - -lodash.once@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" - integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== - -lodash.snakecase@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" - integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== - -lodash.startcase@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8" - integrity sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg== - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== - -lodash.upperfirst@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" - integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== - -lodash@4.x, lodash@^4.17.15, lodash@^4.17.21, lodash@^4.7.0: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-update@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-5.0.1.tgz#9e928bf70cb183c1f0c9e91d9e6b7115d597ce09" - integrity sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw== - dependencies: - ansi-escapes "^5.0.0" - cli-cursor "^4.0.0" - slice-ansi "^5.0.0" - strip-ansi "^7.0.1" - wrap-ansi "^8.0.1" - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lru-cache@^9.0.0: - version "9.1.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.2.tgz#255fdbc14b75589d6d0e73644ca167a8db506835" - integrity sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ== - -lru_map@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" - integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== - -make-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" - integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - dependencies: - semver "^7.5.3" - -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-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== - -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== - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== - dependencies: - object-visit "^1.0.0" - -md5@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" - integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== - dependencies: - charenc "0.0.2" - crypt "0.0.2" - is-buffer "~1.1.6" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -meow@^8.0.0, meow@^8.1.2: - 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-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/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.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@^1.1.2, methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micromatch@4.0.5, micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -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.24, mime-types@~2.1.34: - 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" - -mime@1.6.0, mime@^1.3.4: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mime@2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" - integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - -min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== - dependencies: - dom-walk "^0.1.0" - -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== - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - -minimatch@^3.0.3, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - 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.0.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - 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.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass@^3.0.0: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp-classic@^0.5.2: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - -mkdirp@1.x, mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -morgan@^1.9.1: - version "1.10.0" - resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7" - integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ== - dependencies: - basic-auth "~2.0.1" - debug "2.6.9" - depd "~2.0.0" - on-finished "~2.3.0" - on-headers "~1.0.2" - -mri@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" - integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.0.0, ms@^2.1.1, ms@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -next-tick@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -nock@^13.0.5: - version "13.3.3" - resolved "https://registry.yarnpkg.com/nock/-/nock-13.3.3.tgz#179759c07d3f88ad3e794ace885629c1adfd3fe7" - integrity sha512-z+KUlILy9SK/RjpeXDiDUEAq4T94ADPHE3qaRkf66mpEhzc/ytOMm3Bwdrbq6k1tMWkbdujiKim3G2tfQARuJw== - dependencies: - debug "^4.1.0" - json-stringify-safe "^5.0.1" - lodash "^4.17.21" - propagate "^2.0.0" - -node-domexception@1.0.0, node-domexception@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" - integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== - -node-fetch@2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@^2.6.1, node-fetch@^2.6.7, node-fetch@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@^3.2.10: - version "3.3.2" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" - integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== - dependencies: - data-uri-to-buffer "^4.0.0" - fetch-blob "^3.1.4" - formdata-polyfill "^4.0.10" - -node-gyp-build@^4.3.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.1.tgz#24b6d075e5e391b8d5539d98c7fc5c210cac8a3e" - integrity sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ== - -node-html-parser@^6.1.5: - version "6.1.8" - resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-6.1.8.tgz#e4865b891d4e356c1e3171d25101cbb062b68940" - integrity sha512-bi3ChNi5Ne8XM2vDPvE2TOS6+AjgD9ASRJ81P1+45VTe9odNbsNb3SvVZzHho4qnu5gJ1yUYLGlQZ7tveSYNSg== - dependencies: - css-select "^5.1.0" - he "1.2.0" - -node-html-to-image@^3.3.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/node-html-to-image/-/node-html-to-image-3.4.0.tgz#d31174e5df71299280899b3884a619221c6f21f0" - integrity sha512-oQlQmOaiUZP2gG7rokVvynJaEEaWCaa0JxN24DQmFdkQY6QQ4tFSiFw2wcP52ddvdQ+WetFL90QdTZXS7V7uiQ== - dependencies: - handlebars "^4.5.3" - puppeteer "^15.3.0" - puppeteer-cluster "^0.23.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-notifier@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" - integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== - dependencies: - growly "^1.3.0" - is-wsl "^2.2.0" - semver "^7.3.2" - shellwords "^0.1.1" - uuid "^8.3.0" - which "^2.0.2" - -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - -nodemon@^2.0.19: - version "2.0.22" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.22.tgz#182c45c3a78da486f673d6c1702e00728daf5258" - integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ== - dependencies: - chokidar "^3.5.2" - debug "^3.2.7" - ignore-by-default "^1.0.1" - minimatch "^3.1.2" - pstree.remy "^1.1.8" - semver "^5.7.1" - simple-update-notifier "^1.0.7" - supports-color "^5.5.0" - touch "^3.1.0" - undefsafe "^2.0.5" - -noms@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/noms/-/noms-0.0.0.tgz#da8ebd9f3af9d6760919b27d9cdc8092a7332859" - integrity sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow== - dependencies: - inherits "^2.0.1" - readable-stream "~1.0.31" - -nopt@~1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" - integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== - dependencies: - abbrev "1" - -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@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-normalize-package-bin@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" - integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.0, npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npm-run-path@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" - integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== - dependencies: - path-key "^4.0.0" - -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - -nwsapi@^2.2.0: - version "2.2.7" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== - dependencies: - isobject "^3.0.0" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== - dependencies: - isobject "^3.0.1" - -octokit-auth-probot@^1.2.2: - version "1.2.9" - resolved "https://registry.yarnpkg.com/octokit-auth-probot/-/octokit-auth-probot-1.2.9.tgz#835178f2f13209687c23e794af84b373f234b01a" - integrity sha512-mMjw6Y760EwJnW2tSVooJK8BMdsG6D40SoCclnefVf/5yWjaNVquEu8NREBVWb60OwbpnMEz4vREXHB5xdMFYQ== - dependencies: - "@octokit/auth-app" "^4.0.2" - "@octokit/auth-token" "^3.0.0" - "@octokit/auth-unauthenticated" "^3.0.0" - "@octokit/types" "^8.0.0" - -omggif@^1.0.10, omggif@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/omggif/-/omggif-1.0.10.tgz#ddaaf90d4a42f532e9e7cb3a95ecdd47f17c7b19" - integrity sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw== - -on-exit-leak-free@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz#5c703c968f7e7f851885f6459bf8a8a57edc9cc4" - integrity sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w== - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - -openai@^4.2.0: - version "4.10.0" - resolved "https://registry.yarnpkg.com/openai/-/openai-4.10.0.tgz#60d8f2a469ac7109a34115c75b6d66edbac1d914" - integrity sha512-II4b5/7qzwYkqA9MSjgqdofCc798EW+dtF2h6qNaVLet+qO7FShAJTWnoyzb50J4ZH1rPxRFAsmDLIhY3PT6DQ== - dependencies: - "@types/node" "^18.11.18" - "@types/node-fetch" "^2.6.4" - abort-controller "^3.0.0" - agentkeepalive "^4.2.1" - digest-fetch "^1.3.0" - form-data-encoder "1.7.2" - formdata-node "^4.3.2" - node-fetch "^2.6.7" - -optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== - dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - -p-each-series@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" - integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2: - 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-limit@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" - integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== - dependencies: - yocto-queue "^1.0.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/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-locate@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" - integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== - dependencies: - p-limit "^4.0.0" - -p-map@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -pako@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parent-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-2.0.0.tgz#fa71f88ff1a50c27e15d8ff74e0e3a9523bf8708" - integrity sha512-uo0Z9JJeWzv8BG+tRcapBKNJ0dro9cLyczGzulS6EfeyAdeC9sbojtW6XwvYxJkEne9En+J2XEl4zyglVeIwFg== - dependencies: - callsites "^3.1.0" - -parse-bmfont-ascii@^1.0.3: - version "1.0.6" - resolved "https://registry.yarnpkg.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz#11ac3c3ff58f7c2020ab22769079108d4dfa0285" - integrity sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA== - -parse-bmfont-binary@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz#d038b476d3e9dd9db1e11a0b0e53a22792b69006" - integrity sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA== - -parse-bmfont-xml@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz#015319797e3e12f9e739c4d513872cd2fa35f389" - integrity sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ== - dependencies: - xml-parse-from-string "^1.0.0" - xml2js "^0.4.5" - -parse-headers@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9" - integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -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" - -parse5@*, parse5@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" - integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== - dependencies: - entities "^4.4.0" - -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-exists@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" - integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-key@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" - integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -peek-readable@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-4.1.0.tgz#4ece1111bf5c2ad8867c314c81356847e8a62e72" - integrity sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg== - -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== - -phin@^2.9.1: - version "2.9.3" - resolved "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c" - integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA== - -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, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pidtree@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" - integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pino-abstract-transport@^1.0.0, pino-abstract-transport@v1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz#083d98f966262164504afb989bccd05f665937a8" - integrity sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA== - dependencies: - readable-stream "^4.0.0" - split2 "^4.0.0" - -pino-http@^5.3.0: - version "5.8.0" - resolved "https://registry.yarnpkg.com/pino-http/-/pino-http-5.8.0.tgz#6e688fd5f965c5b6991f340eb660ea2927be9aa7" - integrity sha512-YwXiyRb9y0WCD1P9PcxuJuh3Dc5qmXde/paJE86UGYRdiFOi828hR9iUGmk5gaw6NBT9gLtKANOHFimvh19U5w== - dependencies: - fast-url-parser "^1.1.3" - pino "^6.13.0" - pino-std-serializers "^4.0.0" - -pino-pretty@*: - version "10.2.0" - resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-10.2.0.tgz#c674a153e15c08d7032a826d0051d786feace1d9" - integrity sha512-tRvpyEmGtc2D+Lr3FulIZ+R1baggQ4S3xD2Ar93KixFEDx6SEAUP3W5aYuEw1C73d6ROrNcB2IXLteW8itlwhA== - dependencies: - colorette "^2.0.7" - dateformat "^4.6.3" - fast-copy "^3.0.0" - fast-safe-stringify "^2.1.1" - help-me "^4.0.1" - joycon "^3.1.1" - minimist "^1.2.6" - on-exit-leak-free "^2.1.0" - pino-abstract-transport "^1.0.0" - pump "^3.0.0" - readable-stream "^4.0.0" - secure-json-parse "^2.4.0" - sonic-boom "^3.0.0" - strip-json-comments "^3.1.1" - -pino-pretty@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-6.0.0.tgz#4d7ac8528ad74d90040082816202bb7d48eb1c95" - integrity sha512-jyeR2fXXWc68st1DTTM5NhkHlx8p+1fKZMfm84Jwq+jSw08IwAjNaZBZR6ts69hhPOfOjg/NiE1HYW7vBRPL3A== - dependencies: - "@hapi/bourne" "^2.0.0" - args "^5.0.1" - colorette "^1.3.0" - dateformat "^4.5.1" - fast-safe-stringify "^2.0.7" - jmespath "^0.15.0" - joycon "^3.0.0" - pump "^3.0.0" - readable-stream "^3.6.0" - rfdc "^1.3.0" - split2 "^3.1.1" - strip-json-comments "^3.1.1" - -pino-std-serializers@*, pino-std-serializers@^6.0.0: - version "6.2.2" - resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz#d9a9b5f2b9a402486a5fc4db0a737570a860aab3" - integrity sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA== - -pino-std-serializers@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz#b56487c402d882eb96cd67c257868016b61ad671" - integrity sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg== - -pino-std-serializers@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz#1791ccd2539c091ae49ce9993205e2cd5dbba1e2" - integrity sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q== - -pino@^6.13.0, pino@^6.7.0: - version "6.14.0" - resolved "https://registry.yarnpkg.com/pino/-/pino-6.14.0.tgz#b745ea87a99a6c4c9b374e4f29ca7910d4c69f78" - integrity sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg== - dependencies: - fast-redact "^3.0.0" - fast-safe-stringify "^2.0.8" - flatstr "^1.0.12" - pino-std-serializers "^3.1.0" - process-warning "^1.0.0" - quick-format-unescaped "^4.0.3" - sonic-boom "^1.0.2" - -pino@^8.5.0: - version "8.15.1" - resolved "https://registry.yarnpkg.com/pino/-/pino-8.15.1.tgz#04b815ff7aa4e46b1bbab88d8010aaa2b17eaba4" - integrity sha512-Cp4QzUQrvWCRJaQ8Lzv0mJzXVk4z2jlq8JNKMGaixC2Pz5L4l2p95TkuRvYbrEbe85NQsDKrAd4zalf7Ml6WiA== - dependencies: - atomic-sleep "^1.0.0" - fast-redact "^3.1.1" - on-exit-leak-free "^2.1.0" - pino-abstract-transport v1.1.0 - pino-std-serializers "^6.0.0" - process-warning "^2.0.0" - quick-format-unescaped "^4.0.3" - real-require "^0.2.0" - safe-stable-stringify "^2.3.1" - sonic-boom "^3.1.0" - thread-stream "^2.0.0" - -pirates@^4.0.1: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pixelmatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854" - integrity sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA== - dependencies: - pngjs "^3.0.0" - -pkg-conf@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-3.1.0.tgz#d9f9c75ea1bae0e77938cde045b276dac7cc69ae" - integrity sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ== - dependencies: - find-up "^3.0.0" - load-json-file "^5.2.0" - -pkg-dir@4.2.0, pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -pngjs@^3.0.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" - integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== - -pngjs@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-6.0.0.tgz#ca9e5d2aa48db0228a52c419c3308e87720da821" - integrity sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg== - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier@^2.7.1: - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -pretty-format@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" - integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== - dependencies: - "@jest/types" "^26.6.2" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^17.0.1" - -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" - -probot@^12.1.1, probot@^12.2.1, probot@^12.2.4: - version "12.3.1" - resolved "https://registry.yarnpkg.com/probot/-/probot-12.3.1.tgz#6a19f3faf941978df04afb2dd3f5f65422450c03" - integrity sha512-ECSgycmAC0ILEK6cOa+x3QPufP5JybsuohOFCYr3glQU5SkbmypZJE/Sfio9mxAFHK5LCXveIDsfZCxf6ck4JA== - dependencies: - "@octokit/core" "^3.2.4" - "@octokit/plugin-enterprise-compatibility" "^1.2.8" - "@octokit/plugin-paginate-rest" "^2.6.2" - "@octokit/plugin-rest-endpoint-methods" "^5.0.1" - "@octokit/plugin-retry" "^3.0.6" - "@octokit/plugin-throttling" "^3.3.4" - "@octokit/types" "^8.0.0" - "@octokit/webhooks" "^9.8.4" - "@probot/get-private-key" "^1.1.0" - "@probot/octokit-plugin-config" "^1.0.0" - "@probot/pino" "^2.2.0" - "@types/express" "^4.17.9" - "@types/ioredis" "^4.27.1" - "@types/pino" "^6.3.4" - "@types/pino-http" "^5.0.6" - commander "^6.2.0" - deepmerge "^4.2.2" - deprecation "^2.3.1" - dotenv "^8.2.0" - eventsource "^2.0.2" - express "^4.17.1" - express-handlebars "^6.0.3" - ioredis "^4.27.8" - js-yaml "^3.14.1" - lru-cache "^6.0.0" - octokit-auth-probot "^1.2.2" - pino "^6.7.0" - pino-http "^5.3.0" - pkg-conf "^3.1.0" - resolve "^1.19.0" - semver "^7.3.4" - update-dotenv "^1.1.1" - uuid "^8.3.2" - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process-warning@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-1.0.0.tgz#980a0b25dc38cd6034181be4b7726d89066b4616" - integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== - -process-warning@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-2.2.0.tgz#008ec76b579820a8e5c35d81960525ca64feb626" - integrity sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -progress@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/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" - -propagate@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45" - integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag== - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -proxy-from-env@1.1.0, proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -psl@^1.1.33: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -pstree.remy@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" - integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== - -punycode@^2.1.0, punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -puppeteer-cluster@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/puppeteer-cluster/-/puppeteer-cluster-0.23.0.tgz#da3f5c07de8a3069962bd9af6ee1767ba08fdbaf" - integrity sha512-108terIWDzPrQopmoYSPd5yDoy3FGJ2dNnoGMkGYPs6xtkdhgaECwpfZkzaRToMQPZibUOz0/dSSGgPEdXEhkQ== - dependencies: - debug "^4.3.3" - -puppeteer@^15.3.0: - version "15.5.0" - resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-15.5.0.tgz#446e01547ba0f47c37ac2148e5333433b4ecb371" - integrity sha512-+vZPU8iBSdCx1Kn5hHas80fyo0TiVyMeqLGv/1dygX2HKhAZjO9YThadbRTCoTYq0yWw+w/CysldPsEekDtjDQ== - dependencies: - cross-fetch "3.1.5" - debug "4.3.4" - devtools-protocol "0.0.1019158" - extract-zip "2.0.1" - https-proxy-agent "5.0.1" - pkg-dir "4.2.0" - progress "2.0.3" - proxy-from-env "1.1.0" - rimraf "3.0.2" - tar-fs "2.1.1" - unbzip2-stream "1.4.3" - ws "8.8.0" - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -qs@^6.10.3, qs@^6.11.0: - version "6.11.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== - dependencies: - side-channel "^1.0.4" - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-format-unescaped@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" - integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== - -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== - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - -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-cmd-shim@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" - integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== - -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, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^4.0.0: - version "4.4.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.4.2.tgz#e6aced27ad3b9d726d8308515b9a1b98dc1b9d13" - integrity sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA== - dependencies: - abort-controller "^3.0.0" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" - string_decoder "^1.3.0" - -readable-stream@~1.0.31: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@~2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-web-to-node-stream@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz#5d52bb5df7b54861fd48d015e93a2cb87b3ee0bb" - integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== - dependencies: - readable-stream "^3.6.0" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -real-require@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" - integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== - -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" - -redis-commands@1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.7.0.tgz#15a6fea2d58281e27b1cd1acfb4b293e278c3a89" - integrity sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ== - -redis-errors@^1.0.0, redis-errors@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" - integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== - -redis-parser@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" - integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== - dependencies: - redis-errors "^1.0.0" - -regenerator-runtime@^0.13.3: - version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.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.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - -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.yarnpkg.com/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-pkg-maps@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" - integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== - -resolve@^1.10.0, resolve@^1.18.1, resolve@^1.19.0: - version "1.22.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" - integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -restore-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" - integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== - -rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, 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== - -safe-buffer@5.2.1, safe-buffer@^5.0.1, 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-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== - dependencies: - ret "~0.1.10" - -safe-stable-stringify@^2.3.1: - version "2.4.3" - resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" - integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - -sax@>=0.6.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - -scrypt-js@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" - integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== - -secure-json-parse@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.7.0.tgz#5a5f9cd6ae47df23dba3151edd06855d47e09862" - integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== - -"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.7.1: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@7.5.4, semver@7.x, semver@^7.3.2, semver@^7.3.4, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -semver@^6.3.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@~7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, 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== - -signal-exit@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -simple-update-notifier@^1.0.7: - version "1.1.0" - resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" - integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== - dependencies: - semver "~7.0.0" - -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.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/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" - -smee-client@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/smee-client/-/smee-client-1.2.3.tgz#a0ef5e86e3640870f19f3953aaf228fa478b082c" - integrity sha512-uDrU8u9/Ln7aRXyzGHgVaNUS8onHZZeSwQjCdkMoSL7U85xI+l+Y2NgjibkMJAyXkW7IAbb8rw9RMHIjS6lAwA== - dependencies: - commander "^2.19.0" - eventsource "^1.1.0" - morgan "^1.9.1" - superagent "^7.1.3" - validator "^13.7.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sonic-boom@^1.0.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-1.4.1.tgz#d35d6a74076624f12e6f917ade7b9d75e918f53e" - integrity sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg== - dependencies: - atomic-sleep "^1.0.0" - flatstr "^1.0.12" - -sonic-boom@^2.1.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-2.8.0.tgz#c1def62a77425090e6ad7516aad8eb402e047611" - integrity sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg== - dependencies: - atomic-sleep "^1.0.0" - -sonic-boom@^3.0.0, sonic-boom@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-3.3.0.tgz#cffab6dafee3b2bcb88d08d589394198bee1838c" - integrity sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g== - dependencies: - atomic-sleep "^1.0.0" - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.5.21, source-map-support@^0.5.6: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - -source-map@^0.6.0, source-map@^0.6.1, 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== - -source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - -spdx-correct@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" - integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== - 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.13" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" - integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -split2@^3.0.0, split2@^3.1.1, split2@^3.2.2: - 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" - -split2@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" - integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== - -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== - -stack-utils@^2.0.2, stack-utils@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - dependencies: - escape-string-regexp "^2.0.0" - -standard-as-callback@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" - integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -string-argv@0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" - integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== - -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.yarnpkg.com/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, string-width@^5.0.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string_decoder@^1.1.1, string_decoder@^1.3.0: - 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" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1, strip-ansi@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - 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-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== - -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.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strtok3@^6.2.4: - version "6.3.0" - resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-6.3.0.tgz#358b80ffe6d5d5620e19a073aa78ce947a90f9a0" - integrity sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw== - dependencies: - "@tokenizer/token" "^0.3.0" - peek-readable "^4.1.0" - -supabase@^1.38.1: - version "1.93.0" - resolved "https://registry.yarnpkg.com/supabase/-/supabase-1.93.0.tgz#35bd2706120379c7151622c548bdf95663b05e2f" - integrity sha512-7VKWPVy1QSnBcx/ubKIGFOWw9LjL6C1sMTh0d+ox0TP69+KhzphlA4Z/iFPvC6x9gUwhe9UTI0AdqJYsIwrPEA== - dependencies: - bin-links "^4.0.1" - node-fetch "^3.2.10" - tar "6.1.15" - -superagent@^7.1.3: - version "7.1.6" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-7.1.6.tgz#64f303ed4e4aba1e9da319f134107a54cacdc9c6" - integrity sha512-gZkVCQR1gy/oUXr+kxJMLDjla434KmSOKbx5iGD30Ql+AkJQ/YlPKECJy2nhqOsHLjGHzoDTXNSjhnvWhzKk7g== - dependencies: - component-emitter "^1.3.0" - cookiejar "^2.1.3" - debug "^4.3.4" - fast-safe-stringify "^2.1.1" - form-data "^4.0.0" - formidable "^2.0.1" - methods "^1.1.2" - mime "2.6.0" - qs "^6.10.3" - readable-stream "^3.6.0" - semver "^7.3.7" - -supports-color@^5.3.0, supports-color@^5.5.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.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-hyperlinks@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - 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== - -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - -tar-fs@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - -tar-stream@^2.1.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar@6.1.15: - version "6.1.15" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69" - integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -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.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -thread-stream@^2.0.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.4.0.tgz#5def29598d1d4171ba3bace7e023a71d87d99c07" - integrity sha512-xZYtOtmnA63zj04Q+F9bdEay5r47bvpo1CaNqsKi7TpoJHcotUez8Fkfo2RJWpW91lnnaApdpRbVwCWsy+ifcw== - dependencies: - real-require "^0.2.0" - -throat@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" - integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== - -through2@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through2@^4.0.0, through2@^4.0.2: - 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.8: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -timm@^1.6.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/timm/-/timm-1.7.1.tgz#96bab60c7d45b5a10a8a4d0f0117c6b7e5aff76f" - integrity sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw== - -tiny-invariant@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" - integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== - -tinycolor2@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.6.0.tgz#f98007460169b0263b97072c5ae92484ce02d09e" - integrity sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw== - -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-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -token-types@^4.1.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/token-types/-/token-types-4.2.1.tgz#0f897f03665846982806e138977dbe72d44df753" - integrity sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ== - dependencies: - "@tokenizer/token" "^0.3.0" - ieee754 "^1.2.1" - -touch@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" - integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== - dependencies: - nopt "~1.0.10" - -tough-cookie@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.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== - -ts-jest@^26.4.4: - version "26.5.6" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.6.tgz#c32e0746425274e1dfe333f43cd3c800e014ec35" - integrity sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA== - dependencies: - bs-logger "0.x" - buffer-from "1.x" - fast-json-stable-stringify "2.x" - jest-util "^26.1.0" - json5 "2.x" - lodash "4.x" - make-error "1.x" - mkdirp "1.x" - semver "7.x" - yargs-parser "20.x" - -ts-node@^10.8.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" - -tslib@^1.8.1, tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -tsx@^3.12.7: - version "3.12.8" - resolved "https://registry.yarnpkg.com/tsx/-/tsx-3.12.8.tgz#e9ec95c6b116e28f0187467f839029a3ce17a851" - integrity sha512-Lt9KYaRGF023tlLInPj8rgHwsZU8qWLBj4iRXNWxTfjIkU7canGL806AqKear1j722plHuiYNcL2ZCo6uS9UJA== - dependencies: - "@esbuild-kit/cjs-loader" "^2.4.2" - "@esbuild-kit/core-utils" "^3.2.2" - "@esbuild-kit/esm-loader" "^2.5.5" - optionalDependencies: - fsevents "~2.3.2" - -tunnel@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" - integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/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.yarnpkg.com/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.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" - integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== - -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== - -type-fest@^1.0.1, type-fest@^1.0.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" - integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -"typescript@^4.6.4 || ^5.0.0": - version "5.2.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" - integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== - -typescript@^4.9.5: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -uglify-js@^3.1.4: - version "3.17.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" - integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== - -unbzip2-stream@1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" - integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== - dependencies: - buffer "^5.2.1" - through "^2.3.8" - -undefsafe@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" - integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -unique-string@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-3.0.0.tgz#84a1c377aff5fd7a8bc6b55d8244b2bd90d75b9a" - integrity sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ== - dependencies: - crypto-random-string "^4.0.0" - -universal-github-app-jwt@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz#d57cee49020662a95ca750a057e758a1a7190e6e" - integrity sha512-G33RTLrIBMFmlDV4u4CBF7dh71eWwykck4XgaxaIVeZKOYZRAAxvcGMRFTUclVY6xoUPQvO4Ne5wKGxYm/Yy9w== - dependencies: - "@types/jsonwebtoken" "^9.0.0" - jsonwebtoken "^9.0.0" - -universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== - -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -untildify@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" - integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== - -update-browserslist-db@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -update-dotenv@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/update-dotenv/-/update-dotenv-1.1.1.tgz#17146f302f216c3c92419d5a327a45be910050ca" - integrity sha512-3cIC18In/t0X/yH793c00qqxcKD8jVCgNOPif/fGQkFpYMGecM9YAc+kaAKXuZsM2dE9I9wFI7KvAuNX22SGMQ== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== - -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -utf-8-validate@^5.0.2: - version "5.0.10" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" - integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== - dependencies: - node-gyp-build "^4.3.0" - -utif2@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/utif2/-/utif2-4.1.0.tgz#e768d37bd619b995d56d9780b5d2b4611a3d932b" - integrity sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w== - dependencies: - pako "^1.0.11" - -util-deprecate@^1.0.1, 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== - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@^8.3.0, uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -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-to-istanbul@^7.0.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" - integrity sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" - -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" - -validator@^13.7.0: - version "13.11.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b" - integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -vscode-languageserver-textdocument@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz#9eae94509cbd945ea44bca8dcfe4bb0c15bb3ac0" - integrity sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q== - -vscode-uri@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.7.tgz#6d19fef387ee6b46c479e5fb00870e15e58c1eb8" - integrity sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA== - -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walker@^1.0.7, walker@~1.0.5: - 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" - -web-streams-polyfill@4.0.0-beta.3: - version "4.0.0-beta.3" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz#2898486b74f5156095e473efe989dcf185047a38" - integrity sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug== - -web-streams-polyfill@^3.0.3: - version "3.2.1" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" - integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -websocket@^1.0.34: - version "1.0.34" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" - integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== - dependencies: - bufferutil "^4.0.1" - debug "^2.2.0" - es5-ext "^0.10.50" - typedarray-to-buffer "^3.1.5" - utf-8-validate "^5.0.2" - yaeti "^0.0.6" - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-fetch@^3.4.1: - version "3.6.18" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.18.tgz#2f640cdee315abced7daeaed2309abd1e44e62d4" - integrity sha512-ltN7j66EneWn5TFDO4L9inYC1D+Czsxlrw2SalgjMmEMkLfA5SIZxEFdE6QtHFiiM6Q7WL32c7AkI3w6yxM84Q== - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.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" - -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - -which-module@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" - integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/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.yarnpkg.com/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" - -wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -write-file-atomic@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" - integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^4.0.1" - -ws@7.4.6: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - -ws@8.8.0: - version "8.8.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.0.tgz#8e71c75e2f6348dbf8d78005107297056cb77769" - integrity sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ== - -ws@^7.4.6: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -xdg-basedir@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-5.1.0.tgz#1efba19425e73be1bc6f2a6ceb52a3d2c884c0c9" - integrity sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ== - -xhr@^2.0.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" - integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== - dependencies: - global "~4.4.0" - is-function "^1.0.1" - parse-headers "^2.0.0" - xtend "^4.0.0" - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xml-parse-from-string@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28" - integrity sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g== - -xml2js@^0.4.5: - version "0.4.23" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" - integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== - dependencies: - sax ">=0.6.0" - xmlbuilder "~11.0.0" - -xmlbuilder@~11.0.0: - version "11.0.1" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" - integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - -xtend@^4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.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== - -yaeti@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" - integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" - integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== - -yaml@^2.2.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.2.tgz#f522db4313c671a0ca963a75670f1c12ea909144" - integrity sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg== - -yargs-parser@20.x, yargs-parser@^20.2.2, 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@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.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@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^15.4.1: - version "15.4.1" - resolved "https://registry.yarnpkg.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@^16.1.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yargs@^17.0.0: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - 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.1.1" - -yauzl@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.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== - -yocto-queue@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" - integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@aashutoshrathi/word-wrap@npm:^1.2.3": + version: 1.2.6 + resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" + checksum: 53c2b231a61a46792b39a0d43bc4f4f776bb4542aa57ee04930676802e5501282c2fc8aac14e4cd1f1120ff8b52616b6ff5ab539ad30aa2277d726444b71619f + languageName: node + linkType: hard + +"@actions/core@npm:^1.2.6": + version: 1.10.1 + resolution: "@actions/core@npm:1.10.1" + dependencies: + "@actions/http-client": "npm:^2.0.1" + uuid: "npm:^8.3.2" + checksum: 7a61446697a23dcad3545cf0634dedbdedf20ae9a0ee6ee977554589a15deb4a93593ee48a41258933d58ce0778f446b0d2c162b60750956fb75e0b9560fb832 + languageName: node + linkType: hard + +"@actions/http-client@npm:^2.0.1": + version: 2.2.0 + resolution: "@actions/http-client@npm:2.2.0" + dependencies: + tunnel: "npm:^0.0.6" + undici: "npm:^5.25.4" + checksum: 868fe8529d78beb72f84ea2486e232fa6f66abe00d6ec4591b98c37e762c3d812868a3548638d75b49917961fd10ba1556916b47b1e9e4b55c266e2013c3ae8e + languageName: node + linkType: hard + +"@ampproject/remapping@npm:^2.2.0": + version: 2.2.1 + resolution: "@ampproject/remapping@npm:2.2.1" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.0" + "@jridgewell/trace-mapping": "npm:^0.3.9" + checksum: 92ce5915f8901d8c7cd4f4e6e2fe7b9fd335a29955b400caa52e0e5b12ca3796ada7c2f10e78c9c5b0f9c2539dff0ffea7b19850a56e1487aa083531e1e46d43 + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.22.13": + version: 7.22.13 + resolution: "@babel/code-frame@npm:7.22.13" + dependencies: + "@babel/highlight": "npm:^7.22.13" + chalk: "npm:^2.4.2" + checksum: f4cc8ae1000265677daf4845083b72f88d00d311adb1a93c94eb4b07bf0ed6828a81ae4ac43ee7d476775000b93a28a9cddec18fbdc5796212d8dcccd5de72bd + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.16.0": + version: 7.23.5 + resolution: "@babel/code-frame@npm:7.23.5" + dependencies: + "@babel/highlight": "npm:^7.23.4" + chalk: "npm:^2.4.2" + checksum: a10e843595ddd9f97faa99917414813c06214f4d9205294013e20c70fbdf4f943760da37dec1d998bf3e6fc20fa2918a47c0e987a7e458663feb7698063ad7c6 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.22.9": + version: 7.22.20 + resolution: "@babel/compat-data@npm:7.22.20" + checksum: 73c0f7cf4a1181a0a58bbee6a8b69dc4ba1beec1e764686a586db067e8160044d3a28da0a3542f044f3f31fa662ab22fd061dfe3fc9520dc1cee2252f460db30 + languageName: node + linkType: hard + +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3": + version: 7.23.0 + resolution: "@babel/core@npm:7.23.0" + dependencies: + "@ampproject/remapping": "npm:^2.2.0" + "@babel/code-frame": "npm:^7.22.13" + "@babel/generator": "npm:^7.23.0" + "@babel/helper-compilation-targets": "npm:^7.22.15" + "@babel/helper-module-transforms": "npm:^7.23.0" + "@babel/helpers": "npm:^7.23.0" + "@babel/parser": "npm:^7.23.0" + "@babel/template": "npm:^7.22.15" + "@babel/traverse": "npm:^7.23.0" + "@babel/types": "npm:^7.23.0" + convert-source-map: "npm:^2.0.0" + debug: "npm:^4.1.0" + gensync: "npm:^1.0.0-beta.2" + json5: "npm:^2.2.3" + semver: "npm:^6.3.1" + checksum: ba3604b28de28cdb07d7829f67127b03ad2e826c4e28a0560a037c8bbe16b8dc8cdb8baf344e916ad3c28c63aab88c1a1a38f5e3df6047ab79c910b41bb3a4e8 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.23.0, @babel/generator@npm:^7.7.2": + version: 7.23.0 + resolution: "@babel/generator@npm:7.23.0" + dependencies: + "@babel/types": "npm:^7.23.0" + "@jridgewell/gen-mapping": "npm:^0.3.2" + "@jridgewell/trace-mapping": "npm:^0.3.17" + jsesc: "npm:^2.5.1" + checksum: b7d8727c574119b5ef06e5d5d0d8d939527d51537db4b08273caebb18f3f2b1d4517b874776085e161fd47d28f26b22c08e7f270b64f43b2afd4a60c5936d6cd + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-compilation-targets@npm:7.22.15" + dependencies: + "@babel/compat-data": "npm:^7.22.9" + "@babel/helper-validator-option": "npm:^7.22.15" + browserslist: "npm:^4.21.9" + lru-cache: "npm:^5.1.1" + semver: "npm:^6.3.1" + checksum: 45b9286861296e890f674a3abb199efea14a962a27d9b8adeb44970a9fd5c54e73a9e342e8414d2851cf4f98d5994537352fbce7b05ade32e9849bbd327f9ff1 + languageName: node + linkType: hard + +"@babel/helper-environment-visitor@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-environment-visitor@npm:7.22.20" + checksum: e762c2d8f5d423af89bd7ae9abe35bd4836d2eb401af868a63bbb63220c513c783e25ef001019418560b3fdc6d9a6fb67e6c0b650bcdeb3a2ac44b5c3d2bdd94 + languageName: node + linkType: hard + +"@babel/helper-function-name@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/helper-function-name@npm:7.23.0" + dependencies: + "@babel/template": "npm:^7.22.15" + "@babel/types": "npm:^7.23.0" + checksum: d771dd1f3222b120518176733c52b7cadac1c256ff49b1889dbbe5e3fed81db855b8cc4e40d949c9d3eae0e795e8229c1c8c24c0e83f27cfa6ee3766696c6428 + languageName: node + linkType: hard + +"@babel/helper-hoist-variables@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-hoist-variables@npm:7.22.5" + dependencies: + "@babel/types": "npm:^7.22.5" + checksum: 60a3077f756a1cd9f14eb89f0037f487d81ede2b7cfe652ea6869cd4ec4c782b0fb1de01b8494b9a2d2050e3d154d7d5ad3be24806790acfb8cbe2073bf1e208 + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-module-imports@npm:7.22.15" + dependencies: + "@babel/types": "npm:^7.22.15" + checksum: 4e0d7fc36d02c1b8c8b3006dfbfeedf7a367d3334a04934255de5128115ea0bafdeb3e5736a2559917f0653e4e437400d54542da0468e08d3cbc86d3bbfa8f30 + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/helper-module-transforms@npm:7.23.0" + dependencies: + "@babel/helper-environment-visitor": "npm:^7.22.20" + "@babel/helper-module-imports": "npm:^7.22.15" + "@babel/helper-simple-access": "npm:^7.22.5" + "@babel/helper-split-export-declaration": "npm:^7.22.6" + "@babel/helper-validator-identifier": "npm:^7.22.20" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 15a52e401bd17fe44ba9be51cca693a3e182dc93264dc28ede732081c43211741df81ce8eb15e82e81c8ad51beb8893301ecc31d5c77add0f7be78dff6815318 + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.0": + version: 7.22.5 + resolution: "@babel/helper-plugin-utils@npm:7.22.5" + checksum: d2c4bfe2fa91058bcdee4f4e57a3f4933aed7af843acfd169cd6179fab8d13c1d636474ecabb2af107dc77462c7e893199aa26632bac1c6d7e025a17cbb9d20d + languageName: node + linkType: hard + +"@babel/helper-simple-access@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-simple-access@npm:7.22.5" + dependencies: + "@babel/types": "npm:^7.22.5" + checksum: f0cf81a30ba3d09a625fd50e5a9069e575c5b6719234e04ee74247057f8104beca89ed03e9217b6e9b0493434cedc18c5ecca4cea6244990836f1f893e140369 + languageName: node + linkType: hard + +"@babel/helper-split-export-declaration@npm:^7.22.6": + version: 7.22.6 + resolution: "@babel/helper-split-export-declaration@npm:7.22.6" + dependencies: + "@babel/types": "npm:^7.22.5" + checksum: d83e4b623eaa9622c267d3c83583b72f3aac567dc393dda18e559d79187961cb29ae9c57b2664137fc3d19508370b12ec6a81d28af73a50e0846819cb21c6e44 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-string-parser@npm:7.22.5" + checksum: 6b0ff8af724377ec41e5587fffa7605198da74cb8e7d8d48a36826df0c0ba210eb9fedb3d9bef4d541156e0bd11040f021945a6cbb731ccec4aefb4affa17aa4 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/helper-string-parser@npm:7.23.4" + checksum: f348d5637ad70b6b54b026d6544bd9040f78d24e7ec245a0fc42293968181f6ae9879c22d89744730d246ce8ec53588f716f102addd4df8bbc79b73ea10004ac + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.22.20, @babel/helper-validator-identifier@npm:^7.22.5": + version: 7.22.20 + resolution: "@babel/helper-validator-identifier@npm:7.22.20" + checksum: dcad63db345fb110e032de46c3688384b0008a42a4845180ce7cd62b1a9c0507a1bed727c4d1060ed1a03ae57b4d918570259f81724aaac1a5b776056f37504e + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-validator-option@npm:7.22.15" + checksum: e9661bf80ba18e2dd978217b350fb07298e57ac417f4f1ab9fa011505e20e4857f2c3b4b538473516a9dc03af5ce3a831e5ed973311c28326f4c330b6be981c2 + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.23.0": + version: 7.23.1 + resolution: "@babel/helpers@npm:7.23.1" + dependencies: + "@babel/template": "npm:^7.22.15" + "@babel/traverse": "npm:^7.23.0" + "@babel/types": "npm:^7.23.0" + checksum: ae5a34bb60a0d8bbf9dc4273d90cd5b9499c048f11e2f0df1b033ba3ef3876b96a411374817a20bb24e69619853a04f9a4e7d01b3d1cef5e0c054b9bce9e3128 + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.22.13": + version: 7.22.13 + resolution: "@babel/highlight@npm:7.22.13" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.22.5" + chalk: "npm:^2.4.2" + js-tokens: "npm:^4.0.0" + checksum: 65f20132c7ada5d82d343dc23ca61bcd040980f7bd59e480532bcd7f7895aa7abe58470ae8a4f851fd244b71b42a7ad915f7c515fef8f1c2e003777721ebdbe6 + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/highlight@npm:7.23.4" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.22.20" + chalk: "npm:^2.4.2" + js-tokens: "npm:^4.0.0" + checksum: fbff9fcb2f5539289c3c097d130e852afd10d89a3a08ac0b5ebebbc055cc84a4bcc3dcfed463d488cde12dd0902ef1858279e31d7349b2e8cee43913744bda33 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.15, @babel/parser@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/parser@npm:7.23.0" + bin: + parser: ./bin/babel-parser.js + checksum: ab4ea9360ed4ba3c728c5a9bf33035103ebde20a7e943c4ae1d42becb02a313d731d12a93c795c5a19777031e4022e64b92a52262eda902522a1a18649826283 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.21.8, @babel/parser@npm:^7.22.5": + version: 7.23.6 + resolution: "@babel/parser@npm:7.23.6" + bin: + parser: ./bin/babel-parser.js + checksum: 6f76cd5ccae1fa9bcab3525b0865c6222e9c1d22f87abc69f28c5c7b2c8816a13361f5bd06bddbd5faf903f7320a8feba02545c981468acec45d12a03db7755e + languageName: node + linkType: hard + +"@babel/plugin-syntax-async-generators@npm:^7.8.4": + version: 7.8.4 + resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d13efb282838481348c71073b6be6245b35d4f2f964a8f71e4174f235009f929ef7613df25f8d2338e2d3e44bc4265a9f8638c6aaa136d7a61fe95985f9725c8 + languageName: node + linkType: hard + +"@babel/plugin-syntax-bigint@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 686891b81af2bc74c39013655da368a480f17dd237bf9fbc32048e5865cb706d5a8f65438030da535b332b1d6b22feba336da8fa931f663b6b34e13147d12dde + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-properties@npm:^7.8.3": + version: 7.12.13 + resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.12.13" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 95168fa186416195280b1264fb18afcdcdcea780b3515537b766cb90de6ce042d42dd6a204a39002f794ae5845b02afb0fd4861a3308a861204a55e68310a120 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-meta@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0b08b5e4c3128523d8e346f8cfc86824f0da2697b1be12d71af50a31aff7a56ceb873ed28779121051475010c28d6146a6bfea8518b150b71eeb4e46190172ee + languageName: node + linkType: hard + +"@babel/plugin-syntax-json-strings@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e98f31b2ec406c57757d115aac81d0336e8434101c224edd9a5c93cefa53faf63eacc69f3138960c8b25401315af03df37f68d316c151c4b933136716ed6906e + languageName: node + linkType: hard + +"@babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.22.5 + resolution: "@babel/plugin-syntax-jsx@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b56ceaa9c6adc17fadfb48e1c801d07797195df2a581489e33c8034950e12e7778de6e1e70d6bcf7c5c7ada6222fe6bad5746187ab280df435f5a2799c8dd0d8 + languageName: node + linkType: hard + +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2594cfbe29411ad5bc2ad4058de7b2f6a8c5b86eda525a993959438615479e59c012c14aec979e538d60a584a1a799b60d1b8942c3b18468cb9d99b8fd34cd0b + languageName: node + linkType: hard + +"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2024fbb1162899094cfc81152449b12bd0cc7053c6d4bda8ac2852545c87d0a851b1b72ed9560673cbf3ef6248257262c3c04aabf73117215c1b9cc7dd2542ce + languageName: node + linkType: hard + +"@babel/plugin-syntax-numeric-separator@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c55a82b3113480942c6aa2fcbe976ff9caa74b7b1109ff4369641dfbc88d1da348aceb3c31b6ed311c84d1e7c479440b961906c735d0ab494f688bf2fd5b9bb9 + languageName: node + linkType: hard + +"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ee1eab52ea6437e3101a0a7018b0da698545230015fc8ab129d292980ec6dff94d265e9e90070e8ae5fed42f08f1622c14c94552c77bcac784b37f503a82ff26 + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 27e2493ab67a8ea6d693af1287f7e9acec206d1213ff107a928e85e173741e1d594196f99fec50e9dde404b09164f39dec5864c767212154ffe1caa6af0bc5af + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 46edddf2faa6ebf94147b8e8540dfc60a5ab718e2de4d01b2c0bdf250a4d642c2bd47cbcbb739febcb2bf75514dbcefad3c52208787994b8d0f8822490f55e81 + languageName: node + linkType: hard + +"@babel/plugin-syntax-top-level-await@npm:^7.8.3": + version: 7.14.5 + resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 14bf6e65d5bc1231ffa9def5f0ef30b19b51c218fcecaa78cd1bdf7939dfdf23f90336080b7f5196916368e399934ce5d581492d8292b46a2fb569d8b2da106f + languageName: node + linkType: hard + +"@babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.22.5 + resolution: "@babel/plugin-syntax-typescript@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 523a76627f17e67dc1999f4d7c7a71ed79e9f77f55a61cf05051101967ac23ec378ff0c93787b2cbd5d53720ad799658d796a649fa351682b2bf636f63b665a1 + languageName: node + linkType: hard + +"@babel/template@npm:^7.22.15, @babel/template@npm:^7.3.3": + version: 7.22.15 + resolution: "@babel/template@npm:7.22.15" + dependencies: + "@babel/code-frame": "npm:^7.22.13" + "@babel/parser": "npm:^7.22.15" + "@babel/types": "npm:^7.22.15" + checksum: 9312edd37cf1311d738907003f2aa321a88a42ba223c69209abe4d7111db019d321805504f606c7fd75f21c6cf9d24d0a8223104cd21ebd207e241b6c551f454 + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/traverse@npm:7.23.0" + dependencies: + "@babel/code-frame": "npm:^7.22.13" + "@babel/generator": "npm:^7.23.0" + "@babel/helper-environment-visitor": "npm:^7.22.20" + "@babel/helper-function-name": "npm:^7.23.0" + "@babel/helper-hoist-variables": "npm:^7.22.5" + "@babel/helper-split-export-declaration": "npm:^7.22.6" + "@babel/parser": "npm:^7.23.0" + "@babel/types": "npm:^7.23.0" + debug: "npm:^4.1.0" + globals: "npm:^11.1.0" + checksum: 84f93e64179965a0de6109a8b1ce92d66eb52a76e8ba325d27bdec6952cedd8fc98eabf09fe443ef667a051300dc7ed8924e7bf61a87ad456501d1da46657509 + languageName: node + linkType: hard + +"@babel/types@npm:7.23.4": + version: 7.23.4 + resolution: "@babel/types@npm:7.23.4" + dependencies: + "@babel/helper-string-parser": "npm:^7.23.4" + "@babel/helper-validator-identifier": "npm:^7.22.20" + to-fast-properties: "npm:^2.0.0" + checksum: 231954418e0d052a8e69c9d84dde31baffd91d38d99624d18f160e14aa32b094b9e3e91c9c065ea88ea80c6e1589b17bb8b843b950c20c112f32c17482f7cf1f + languageName: node + linkType: hard + +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.3.3": + version: 7.23.0 + resolution: "@babel/types@npm:7.23.0" + dependencies: + "@babel/helper-string-parser": "npm:^7.22.5" + "@babel/helper-validator-identifier": "npm:^7.22.20" + to-fast-properties: "npm:^2.0.0" + checksum: 70e4db41acb6793d0eb8d81a2fa88f19ee661219b84bd5f703dbdb54eb3a4d3c0dfc55e69034c945b479df9f43fd4b1376480aaccfc19797ce5af1c5d2576b36 + languageName: node + linkType: hard + +"@babel/types@npm:^7.8.3": + version: 7.23.6 + resolution: "@babel/types@npm:7.23.6" + dependencies: + "@babel/helper-string-parser": "npm:^7.23.4" + "@babel/helper-validator-identifier": "npm:^7.22.20" + to-fast-properties: "npm:^2.0.0" + checksum: 42cefce8a68bd09bb5828b4764aa5586c53c60128ac2ac012e23858e1c179347a4aac9c66fc577994fbf57595227611c5ec8270bf0cfc94ff033bbfac0550b70 + languageName: node + linkType: hard + +"@bcoe/v8-coverage@npm:^0.2.3": + version: 0.2.3 + resolution: "@bcoe/v8-coverage@npm:0.2.3" + checksum: 6b80ae4cb3db53f486da2dc63b6e190a74c8c3cca16bb2733f234a0b6a9382b09b146488ae08e2b22cf00f6c83e20f3e040a2f7894f05c045c946d6a090b1d52 + languageName: node + linkType: hard + +"@bugsnag/browser@npm:^7.20.2, @bugsnag/browser@npm:^7.21.0": + version: 7.21.0 + resolution: "@bugsnag/browser@npm:7.21.0" + dependencies: + "@bugsnag/core": "npm:^7.19.0" + checksum: bca4f4679cc0f8fed2b6f91739ac91baa1229a03915102b5b58f12950fdb19a10b94291818fcf6f5213b9bbfeb5dc09a305a110eef2fc9ac1b25a98c03fe7d98 + languageName: node + linkType: hard + +"@bugsnag/core@npm:^7.19.0": + version: 7.19.0 + resolution: "@bugsnag/core@npm:7.19.0" + dependencies: + "@bugsnag/cuid": "npm:^3.0.0" + "@bugsnag/safe-json-stringify": "npm:^6.0.0" + error-stack-parser: "npm:^2.0.3" + iserror: "npm:0.0.2" + stack-generator: "npm:^2.0.3" + checksum: a839a25a66baac0da18b02bc5fb871902ec2f9b6f6af2419114e17cb6ec9e73c7f960703f0ba5de1832741f92a3a503eb550ad7ddc90c2d34a619c79388125ea + languageName: node + linkType: hard + +"@bugsnag/cuid@npm:^3.0.0": + version: 3.0.2 + resolution: "@bugsnag/cuid@npm:3.0.2" + checksum: b95217503877a632ede48b1d5566b0d95ab1eac11c767241996db1db1ae0f24312335264895ee93ea15b5cc6eb37b538ad13dd612e815e2a49bd5477723dc214 + languageName: node + linkType: hard + +"@bugsnag/js@npm:7.20.2": + version: 7.20.2 + resolution: "@bugsnag/js@npm:7.20.2" + dependencies: + "@bugsnag/browser": "npm:^7.20.2" + "@bugsnag/node": "npm:^7.19.0" + checksum: 97156ffb6edb2893870b11b8dec29fe4b848ecb624727b59e4aaff86198aed27abb8d726ffd26ff90f6581856d8910bed093f6f5de766637f19acd78c01752e1 + languageName: node + linkType: hard + +"@bugsnag/js@npm:^7.0.0, @bugsnag/js@npm:^7.20.0": + version: 7.22.2 + resolution: "@bugsnag/js@npm:7.22.2" + dependencies: + "@bugsnag/browser": "npm:^7.21.0" + "@bugsnag/node": "npm:^7.19.0" + checksum: e3ef09104598d87903aed3025a83a2be30e3a882bf24b39a1cf9c28e8e749c2792d0543c88ad4584643c7ca4a47089058249e0a4e1dcea22c3015d5112843ed1 + languageName: node + linkType: hard + +"@bugsnag/node@npm:^7.19.0": + version: 7.19.0 + resolution: "@bugsnag/node@npm:7.19.0" + dependencies: + "@bugsnag/core": "npm:^7.19.0" + byline: "npm:^5.0.0" + error-stack-parser: "npm:^2.0.2" + iserror: "npm:^0.0.2" + pump: "npm:^3.0.0" + stack-generator: "npm:^2.0.3" + checksum: ec1b09597b8be50d1b02170de0eba25c4cf658a8a1b09899508fd6fe6484867d1cb61fbbd9d2ed3948817e2a5e1560dd62584e51c69a189b6fbe3ee81b65eb3a + languageName: node + linkType: hard + +"@bugsnag/safe-json-stringify@npm:^6.0.0": + version: 6.0.0 + resolution: "@bugsnag/safe-json-stringify@npm:6.0.0" + checksum: 817945431d269dc74e6cc6cd6e615b151a71ffc048ba428ab9eefea40e659631543be4a5c307aa37ed20c643344ff980c13b1fd604821a9c945b8508ecb0902b + languageName: node + linkType: hard + +"@colors/colors@npm:1.6.0, @colors/colors@npm:^1.6.0": + version: 1.6.0 + resolution: "@colors/colors@npm:1.6.0" + checksum: 9328a0778a5b0db243af54455b79a69e3fb21122d6c15ef9e9fcc94881d8d17352d8b2b2590f9bdd46fac5c2d6c1636dcfc14358a20c70e22daf89e1a759b629 + languageName: node + linkType: hard + +"@commitlint/cli@npm:^17.4.3": + version: 17.7.1 + resolution: "@commitlint/cli@npm:17.7.1" + dependencies: + "@commitlint/format": "npm:^17.4.4" + "@commitlint/lint": "npm:^17.7.0" + "@commitlint/load": "npm:^17.7.1" + "@commitlint/read": "npm:^17.5.1" + "@commitlint/types": "npm:^17.4.4" + execa: "npm:^5.0.0" + lodash.isfunction: "npm:^3.0.9" + resolve-from: "npm:5.0.0" + resolve-global: "npm:1.0.0" + yargs: "npm:^17.0.0" + bin: + commitlint: cli.js + checksum: d2d184c446289d9abf065a5925c6976237ce0a4e10ab890d439143d128532701da6140cae9497320a4072b50c2087473b2a9176bac2c86f67a5367269b08718c + languageName: node + linkType: hard + +"@commitlint/config-conventional@npm:^17.4.3": + version: 17.7.0 + resolution: "@commitlint/config-conventional@npm:17.7.0" + dependencies: + conventional-changelog-conventionalcommits: "npm:^6.1.0" + checksum: 582a087464a8e6f96deefe53da4761c75101eb657cc987fb2bfc50c4eeb7a5d9359b48c8084b67bdedaa2234f641f90aae38a4e8afb21a0f345005f2eee0f3cd + languageName: node + linkType: hard + +"@commitlint/config-validator@npm:^17.6.7": + version: 17.6.7 + resolution: "@commitlint/config-validator@npm:17.6.7" + dependencies: + "@commitlint/types": "npm:^17.4.4" + ajv: "npm:^8.11.0" + checksum: 42873d8ef71b911e1c06f3422479a41e92bdb573336a34ed2defc26a635097b07ef4bf3ec0b2eb2474eef851350f8a138341cec1573b52957d2bb91482efb1e0 + languageName: node + linkType: hard + +"@commitlint/ensure@npm:^17.6.7": + version: 17.6.7 + resolution: "@commitlint/ensure@npm:17.6.7" + dependencies: + "@commitlint/types": "npm:^17.4.4" + lodash.camelcase: "npm:^4.3.0" + lodash.kebabcase: "npm:^4.1.1" + lodash.snakecase: "npm:^4.1.1" + lodash.startcase: "npm:^4.4.0" + lodash.upperfirst: "npm:^4.3.1" + checksum: 9148bb9a38dd4262b2a4cfe4a7a4898cb0420a8ad63a0c46eac1d25a208dd6207906ef50dbd2f12b9dbb890c0ca49e9f92f4a1418cdd59fe7de95badfb5a9072 + languageName: node + linkType: hard + +"@commitlint/execute-rule@npm:^17.4.0": + version: 17.4.0 + resolution: "@commitlint/execute-rule@npm:17.4.0" + checksum: 832870273d6414663799ae3339317aeab629be01e3a5c0e6382628f5b84ab417c64475dcd63dfc55d55388d00d5cfdf97f72173b3553f33a6daf7ab9982c37db + languageName: node + linkType: hard + +"@commitlint/format@npm:^17.4.4": + version: 17.4.4 + resolution: "@commitlint/format@npm:17.4.4" + dependencies: + "@commitlint/types": "npm:^17.4.4" + chalk: "npm:^4.1.0" + checksum: 6b3e84c4dd9d8331505de6039f1cbfb37e129567a30fff12beb17c27f1e52b5dd8ca68ed7a8e9b66378ae29817cbe0d4bf24c42f151dee24582c8c1d6cdfb306 + languageName: node + linkType: hard + +"@commitlint/is-ignored@npm:^17.7.0": + version: 17.7.0 + resolution: "@commitlint/is-ignored@npm:17.7.0" + dependencies: + "@commitlint/types": "npm:^17.4.4" + semver: "npm:7.5.4" + checksum: f1374feb0c39f3d2b612a883d91d40295ed0b1491ec27a54444b0364ea677a7975825653ba222f07985bc9fafe03d5f9045130a46a4cdd0fd678f1d6552c45a9 + languageName: node + linkType: hard + +"@commitlint/lint@npm:^17.7.0": + version: 17.7.0 + resolution: "@commitlint/lint@npm:17.7.0" + dependencies: + "@commitlint/is-ignored": "npm:^17.7.0" + "@commitlint/parse": "npm:^17.7.0" + "@commitlint/rules": "npm:^17.7.0" + "@commitlint/types": "npm:^17.4.4" + checksum: 1a14c123d172af249b7fa64442af5185d5a421656fa35ab0c3a5f97625e2152ef44b0fbefb551d3eb9d23d8d77f77c06ca1554cfd5cdab81d94fd290c045e883 + languageName: node + linkType: hard + +"@commitlint/load@npm:^17.7.1": + version: 17.7.1 + resolution: "@commitlint/load@npm:17.7.1" + dependencies: + "@commitlint/config-validator": "npm:^17.6.7" + "@commitlint/execute-rule": "npm:^17.4.0" + "@commitlint/resolve-extends": "npm:^17.6.7" + "@commitlint/types": "npm:^17.4.4" + "@types/node": "npm:20.4.7" + chalk: "npm:^4.1.0" + cosmiconfig: "npm:^8.0.0" + cosmiconfig-typescript-loader: "npm:^4.0.0" + lodash.isplainobject: "npm:^4.0.6" + lodash.merge: "npm:^4.6.2" + lodash.uniq: "npm:^4.5.0" + resolve-from: "npm:^5.0.0" + ts-node: "npm:^10.8.1" + typescript: "npm:^4.6.4 || ^5.0.0" + checksum: 5861f72acf08cf5c18e83545b344cd76a4c1111ed149e9c3afe9084d9035ddb9b35100272291c2bd99736a5ed56032c8a3614ae5574ab862b7dcd920549b7721 + languageName: node + linkType: hard + +"@commitlint/message@npm:^17.4.2": + version: 17.4.2 + resolution: "@commitlint/message@npm:17.4.2" + checksum: 9ff0339852babf4c3f7af3ce43762a640a7e2664ccd86cc7b623efca079f13a9efe1567eb2d0cfed30e9d410bbd74e6ceb884d9d139e6761fdaabd81e0d1db51 + languageName: node + linkType: hard + +"@commitlint/parse@npm:^17.7.0": + version: 17.7.0 + resolution: "@commitlint/parse@npm:17.7.0" + dependencies: + "@commitlint/types": "npm:^17.4.4" + conventional-changelog-angular: "npm:^6.0.0" + conventional-commits-parser: "npm:^4.0.0" + checksum: d1872386e5435ffb702c121febaad4fb1d8449c1d605b19d433b17d9959928f39f2ac7a6cce6938038955a69bc9b86a064b9436f99c0a88cd6958014b8b48c48 + languageName: node + linkType: hard + +"@commitlint/read@npm:^17.5.1": + version: 17.5.1 + resolution: "@commitlint/read@npm:17.5.1" + dependencies: + "@commitlint/top-level": "npm:^17.4.0" + "@commitlint/types": "npm:^17.4.4" + fs-extra: "npm:^11.0.0" + git-raw-commits: "npm:^2.0.11" + minimist: "npm:^1.2.6" + checksum: 60c4351eb8c8bdafa331f690486bfc338ddb3c2341e6cd168ea38748116a75ad96711f08825e2faeb90d85b43d07ced221b2f69c6f228001b57372a39bdafefe + languageName: node + linkType: hard + +"@commitlint/resolve-extends@npm:^17.6.7": + version: 17.6.7 + resolution: "@commitlint/resolve-extends@npm:17.6.7" + dependencies: + "@commitlint/config-validator": "npm:^17.6.7" + "@commitlint/types": "npm:^17.4.4" + import-fresh: "npm:^3.0.0" + lodash.mergewith: "npm:^4.6.2" + resolve-from: "npm:^5.0.0" + resolve-global: "npm:^1.0.0" + checksum: cc5ac764662bebda63084c1fa8bf17692145abf3621dc60e735163bd06e90458a69f6e14c60854a792b51386f485f73930b290bc4d05c110639b27e89be0b7d5 + languageName: node + linkType: hard + +"@commitlint/rules@npm:^17.7.0": + version: 17.7.0 + resolution: "@commitlint/rules@npm:17.7.0" + dependencies: + "@commitlint/ensure": "npm:^17.6.7" + "@commitlint/message": "npm:^17.4.2" + "@commitlint/to-lines": "npm:^17.4.0" + "@commitlint/types": "npm:^17.4.4" + execa: "npm:^5.0.0" + checksum: 0d406abf63d8ffb11574a724d7c063208969d7dee109e0a51a0f2250ff82e708baaed10244c7c71ed78ba63dcf6f0541cdd139d88ae13ff9177e572b5667eb18 + languageName: node + linkType: hard + +"@commitlint/to-lines@npm:^17.4.0": + version: 17.4.0 + resolution: "@commitlint/to-lines@npm:17.4.0" + checksum: 6d02a4e731820168ce6fca7150587170a291786a7edc93438d4ec09997675d322ea38b7533d5c32de50ca0092d89d111bf8118a78d6025603dee6587a3fa68da + languageName: node + linkType: hard + +"@commitlint/top-level@npm:^17.4.0": + version: 17.4.0 + resolution: "@commitlint/top-level@npm:17.4.0" + dependencies: + find-up: "npm:^5.0.0" + checksum: 67677d11b55b27826cb7fb70556cd237435336280e0e65b622eca778f5761aa1011d99e78101a23726b3d6649338967369d3ccb0371b60a21f7f9c65ff565f2d + languageName: node + linkType: hard + +"@commitlint/types@npm:^17.4.4": + version: 17.4.4 + resolution: "@commitlint/types@npm:17.4.4" + dependencies: + chalk: "npm:^4.1.0" + checksum: d6419001d8044954f68ec077a54b21ad73f36901287abf496cf31ccf4d66ea7b816adf7143290d0f382f2ef625416b1d2fa99ad8b80876e1d5772a8c7165cd26 + languageName: node + linkType: hard + +"@cspell/cspell-bundled-dicts@npm:7.3.6": + version: 7.3.6 + resolution: "@cspell/cspell-bundled-dicts@npm:7.3.6" + dependencies: + "@cspell/dict-ada": "npm:^4.0.2" + "@cspell/dict-aws": "npm:^4.0.0" + "@cspell/dict-bash": "npm:^4.1.1" + "@cspell/dict-companies": "npm:^3.0.22" + "@cspell/dict-cpp": "npm:^5.0.5" + "@cspell/dict-cryptocurrencies": "npm:^4.0.0" + "@cspell/dict-csharp": "npm:^4.0.2" + "@cspell/dict-css": "npm:^4.0.7" + "@cspell/dict-dart": "npm:^2.0.3" + "@cspell/dict-django": "npm:^4.1.0" + "@cspell/dict-docker": "npm:^1.1.7" + "@cspell/dict-dotnet": "npm:^5.0.0" + "@cspell/dict-elixir": "npm:^4.0.3" + "@cspell/dict-en-common-misspellings": "npm:^1.0.2" + "@cspell/dict-en-gb": "npm:1.1.33" + "@cspell/dict-en_us": "npm:^4.3.7" + "@cspell/dict-filetypes": "npm:^3.0.1" + "@cspell/dict-fonts": "npm:^4.0.0" + "@cspell/dict-fsharp": "npm:^1.0.0" + "@cspell/dict-fullstack": "npm:^3.1.5" + "@cspell/dict-gaming-terms": "npm:^1.0.4" + "@cspell/dict-git": "npm:^2.0.0" + "@cspell/dict-golang": "npm:^6.0.2" + "@cspell/dict-haskell": "npm:^4.0.1" + "@cspell/dict-html": "npm:^4.0.3" + "@cspell/dict-html-symbol-entities": "npm:^4.0.0" + "@cspell/dict-java": "npm:^5.0.5" + "@cspell/dict-k8s": "npm:^1.0.1" + "@cspell/dict-latex": "npm:^4.0.0" + "@cspell/dict-lorem-ipsum": "npm:^4.0.0" + "@cspell/dict-lua": "npm:^4.0.1" + "@cspell/dict-node": "npm:^4.0.3" + "@cspell/dict-npm": "npm:^5.0.8" + "@cspell/dict-php": "npm:^4.0.2" + "@cspell/dict-powershell": "npm:^5.0.2" + "@cspell/dict-public-licenses": "npm:^2.0.3" + "@cspell/dict-python": "npm:^4.1.8" + "@cspell/dict-r": "npm:^2.0.1" + "@cspell/dict-ruby": "npm:^5.0.0" + "@cspell/dict-rust": "npm:^4.0.1" + "@cspell/dict-scala": "npm:^5.0.0" + "@cspell/dict-software-terms": "npm:^3.2.3" + "@cspell/dict-sql": "npm:^2.1.1" + "@cspell/dict-svelte": "npm:^1.0.2" + "@cspell/dict-swift": "npm:^2.0.1" + "@cspell/dict-typescript": "npm:^3.1.1" + "@cspell/dict-vue": "npm:^3.0.0" + checksum: 57cba9c23a25c7f749efd711406b2a60b2f591ab028dc9accc16398f0c8571435ad4c936db84a05200b19518b7c79527938e5a0e55eb7d90808780f090f149e3 + languageName: node + linkType: hard + +"@cspell/cspell-json-reporter@npm:7.3.6": + version: 7.3.6 + resolution: "@cspell/cspell-json-reporter@npm:7.3.6" + dependencies: + "@cspell/cspell-types": "npm:7.3.6" + checksum: 1d4b17406bf028601dbbd79b0fccd71cf1fec5709fe1c0fdb5f45b6fc8ab924078cc2d89d5bf7bcef6938c20bff22834570597ac5d693d296b68df5932fe3ae6 + languageName: node + linkType: hard + +"@cspell/cspell-pipe@npm:7.3.6": + version: 7.3.6 + resolution: "@cspell/cspell-pipe@npm:7.3.6" + checksum: 161ff113592c722060c3ed8ccb5454407edb1c4a654920f549ee85e2676cf981250c9f8d0034ad22943a31f5a417fad5a8cecbabee5f17a0e28de80671aa3092 + languageName: node + linkType: hard + +"@cspell/cspell-resolver@npm:7.3.6": + version: 7.3.6 + resolution: "@cspell/cspell-resolver@npm:7.3.6" + dependencies: + global-dirs: "npm:^3.0.1" + checksum: 3247fe3e16f6933b259bd4e0f0e6d329f063872de8f7b7077523a9586597381d2e450071f5735f84766abd8ba93c418673af0c50df2b1ec4cf93d99e50974790 + languageName: node + linkType: hard + +"@cspell/cspell-service-bus@npm:7.3.6": + version: 7.3.6 + resolution: "@cspell/cspell-service-bus@npm:7.3.6" + checksum: 5d12b44c0a52964f7bb4d9178d6784557e4fe8add949f53374cb7d859fd6e752ea98ca17a6bf2e108aa61f554b1ba898061aac5536020914874308791bd11953 + languageName: node + linkType: hard + +"@cspell/cspell-types@npm:7.3.6": + version: 7.3.6 + resolution: "@cspell/cspell-types@npm:7.3.6" + checksum: 4f3ea03aa185b3827c8557355b80c933f3d96fa9a62610e7aac1b4f078b70b2a705690d4f23f4b1605aa8ddef5bf3d028bf310a14dc685c30bf0be40182c71cc + languageName: node + linkType: hard + +"@cspell/dict-ada@npm:^4.0.2": + version: 4.0.2 + resolution: "@cspell/dict-ada@npm:4.0.2" + checksum: ef2e34ddfc635a398522a04b0193e2130051a644dffa52f31faa59e864f88d1624b50b53115ed16cc4508f36b43ba8819f504635f437f34ee7d451d3bb441a71 + languageName: node + linkType: hard + +"@cspell/dict-aws@npm:^4.0.0": + version: 4.0.0 + resolution: "@cspell/dict-aws@npm:4.0.0" + checksum: 8cffb856d7ef95f57cde46f0a0f58b2c8584ebf6b49b5fa784c4f63dbc236429b3e9acfc1067dc2f74c3e65a6ace143f48abcb7be35f84466d8ac71caf83d0f6 + languageName: node + linkType: hard + +"@cspell/dict-bash@npm:^4.1.1": + version: 4.1.1 + resolution: "@cspell/dict-bash@npm:4.1.1" + checksum: 5c541857694b5904951af0a94bcd81ed3acc7695b0943db9c4da2338be4d328dd09be7fd7f354fa29f8a7a1f32c8d111d5735cb0f9cbadd9c77a4c421dfa2a4f + languageName: node + linkType: hard + +"@cspell/dict-companies@npm:^3.0.22": + version: 3.0.22 + resolution: "@cspell/dict-companies@npm:3.0.22" + checksum: 069c4e28067e0904212725f27151772a559a73806de06d687c8decaeecd6db9c887fa2517c138f3ae377cc3035aa14a66353806dfc847ca83ba24c3f89f67486 + languageName: node + linkType: hard + +"@cspell/dict-cpp@npm:^5.0.5": + version: 5.0.5 + resolution: "@cspell/dict-cpp@npm:5.0.5" + checksum: 4c1dd1ec65072d04cdaa6b0082277fd6ae00851956bacadf13cceb62614a6a26d73831ff82033148d4984f48b228fb9395826bfb20288f5ee223fc6ad0a5ef4b + languageName: node + linkType: hard + +"@cspell/dict-cryptocurrencies@npm:^4.0.0": + version: 4.0.0 + resolution: "@cspell/dict-cryptocurrencies@npm:4.0.0" + checksum: 511901514f7c38613f22ff2c6ee752d6757600495ea4aaaf6c5e0e0753c8568736b4b3b049e6d194e4d813320edd325ba8c9f4a80d8d6953bb74f66df7656cb5 + languageName: node + linkType: hard + +"@cspell/dict-csharp@npm:^4.0.2": + version: 4.0.2 + resolution: "@cspell/dict-csharp@npm:4.0.2" + checksum: 146b7edeb8aa1acf6b0ccb283a2a5e0e8f2612e6fc67cca9b26e0fabe954a92042d314860bb5418522d6db265bd5933b6c68004d2b8225ad89498bf795b51f89 + languageName: node + linkType: hard + +"@cspell/dict-css@npm:^4.0.7": + version: 4.0.7 + resolution: "@cspell/dict-css@npm:4.0.7" + checksum: 9e43fbff001dad1c6ef23546a812f2b55a244f0cda2d192a881b31741830d3ddf79e7a07ff091727b6dd322e3a240daf6fb31609da618b1c4a0bf124361c9095 + languageName: node + linkType: hard + +"@cspell/dict-dart@npm:^2.0.3": + version: 2.0.3 + resolution: "@cspell/dict-dart@npm:2.0.3" + checksum: 640b432ced4888c4a6dbdeb2006ed778b59cab7eeb1445e85a66320c1eefe42e905da7c4c89003c42eca97f785380038d603200b8e1f3bea9bc39b81cfadabf7 + languageName: node + linkType: hard + +"@cspell/dict-data-science@npm:^1.0.11": + version: 1.0.11 + resolution: "@cspell/dict-data-science@npm:1.0.11" + checksum: c0d7ffc81c43d00c997ac759ef48541c758bbf4074a743f6aa88c896acb4ea7c291b59103e6b84964ba62603314b164d515ffd7f44379870f1d9614dfcc862a3 + languageName: node + linkType: hard + +"@cspell/dict-django@npm:^4.1.0": + version: 4.1.0 + resolution: "@cspell/dict-django@npm:4.1.0" + checksum: 85b7f58d772f169f7471f2c1bcb8a0207cdff7c32677bf470bcbcc74ce6498269623cfcc7910730eeac7f052633f8d4c63574367c1afe5f46a2917748ed397ca + languageName: node + linkType: hard + +"@cspell/dict-docker@npm:^1.1.7": + version: 1.1.7 + resolution: "@cspell/dict-docker@npm:1.1.7" + checksum: e34428f3e18d3ebb94854e4034746a8a0ef81354994f09d289254f75b9ce11fee53f64c706e1e598d5131fbe50d536401c4e5b854e44b965e6e193d454fa87b7 + languageName: node + linkType: hard + +"@cspell/dict-dotnet@npm:^5.0.0": + version: 5.0.0 + resolution: "@cspell/dict-dotnet@npm:5.0.0" + checksum: b55e2457f134aa99f9037c58a4441bb1e6b50a8ac399833b775517e14c84b84cf01e2ca8b75a93bccdc75ff9f656a4b0433c4bd82bfe830227848fc5a30ce1b4 + languageName: node + linkType: hard + +"@cspell/dict-elixir@npm:^4.0.3": + version: 4.0.3 + resolution: "@cspell/dict-elixir@npm:4.0.3" + checksum: c24b742b0615f310c89a05ded6648a63ee8e0a9d63326fd155846ce4acba2337a1cef3f58d653b9d8f4b6636d466dfeac2bf7122f374ae39a4d539894ebc5523 + languageName: node + linkType: hard + +"@cspell/dict-en-common-misspellings@npm:^1.0.2": + version: 1.0.2 + resolution: "@cspell/dict-en-common-misspellings@npm:1.0.2" + checksum: f7f0207fc93150b63a0ce3df6127ec56360832262bdd93ea9618b6bb9b254917a2e5d58868837cfbc411811ce48d7b7e22bd580cc312221cab04f72066e51e9e + languageName: node + linkType: hard + +"@cspell/dict-en-gb@npm:1.1.33": + version: 1.1.33 + resolution: "@cspell/dict-en-gb@npm:1.1.33" + checksum: 09563d1016f652dc8164a5f692be49beb78a847a54d5e470d406ae4db125bf8021db75d3db63f7a0c1d1b7a5dfbec4b709fb2ff3520447dcad690adb98d74130 + languageName: node + linkType: hard + +"@cspell/dict-en_us@npm:^4.3.7": + version: 4.3.7 + resolution: "@cspell/dict-en_us@npm:4.3.7" + checksum: cc13d01b9e25bef8631199ff882b65cd7d7ec0d12d547402ab43bdd2a31f424734c2dd6b298db1e83801d93c3611895ea3f6c195f6bef7fb1e1ad21b133bee22 + languageName: node + linkType: hard + +"@cspell/dict-filetypes@npm:^3.0.1": + version: 3.0.1 + resolution: "@cspell/dict-filetypes@npm:3.0.1" + checksum: 0cb4141360af43202460c573a12e900d79f285c58e9a3744e1339499ef47acc94984019681bc384ce135333cdce9ec10aa89600b7e2e6f3dbc741f69e4c2dd0e + languageName: node + linkType: hard + +"@cspell/dict-fonts@npm:^4.0.0": + version: 4.0.0 + resolution: "@cspell/dict-fonts@npm:4.0.0" + checksum: d7b62691ebb34cf5538f65e18e4188716a87e3fcd56cabde090040b5c81676bc0004304bda47bc14c58417ac710b4627b3513a5bbeb99be1fae6d9b5f291bd2c + languageName: node + linkType: hard + +"@cspell/dict-fsharp@npm:^1.0.0": + version: 1.0.0 + resolution: "@cspell/dict-fsharp@npm:1.0.0" + checksum: f553fe023ab80e80825cfd34f6bfee27e23dc1fab099cc84ee7ae3719c386bc243763c7f69f52230b1a9281cf55ae2484280e47d423c583f094d521ef173358a + languageName: node + linkType: hard + +"@cspell/dict-fullstack@npm:^3.1.5": + version: 3.1.5 + resolution: "@cspell/dict-fullstack@npm:3.1.5" + checksum: c6e02b9ac3cafee8e2fe913b725cb0fa9cb7ac35b5ec331160e1d4ec9c47237f12638a2b5637fd6b2933662ee9b6b1d1c524a9035df109e25fbacc6032ded6c4 + languageName: node + linkType: hard + +"@cspell/dict-gaming-terms@npm:^1.0.4": + version: 1.0.4 + resolution: "@cspell/dict-gaming-terms@npm:1.0.4" + checksum: 8ea51cb6a0b3c1f54ac4da9c97cfe007ddc2343382f8bc0c719df1dd9efe14d1d8178f4507884e7c780397775f6df5685d86544a069b6aff00e07e45889aa966 + languageName: node + linkType: hard + +"@cspell/dict-git@npm:^2.0.0": + version: 2.0.0 + resolution: "@cspell/dict-git@npm:2.0.0" + checksum: 3a14c96aaae224af32f1262cff81e30835727c633e3398ba54f3cfbf84719a1ff2a89a3833b842fc8aad0d9ae08c94cc186f4ac7684ad12a1f6500e595c1da6b + languageName: node + linkType: hard + +"@cspell/dict-golang@npm:^6.0.2": + version: 6.0.2 + resolution: "@cspell/dict-golang@npm:6.0.2" + checksum: d9b8dceb4376fb1411a8a6fd9e342934291afed68745e986b2a01116fb0951a460e1077e6826987c2752dc97dbfe169725efc7d43c8ca11d53f98a9bcc9f7fc2 + languageName: node + linkType: hard + +"@cspell/dict-haskell@npm:^4.0.1": + version: 4.0.1 + resolution: "@cspell/dict-haskell@npm:4.0.1" + checksum: 7693a06b74a393aec35b67304ae56dad1ce3509951bec64053d992011e0309e9c420edd13a073ab3e500c0ac53e15dd92472097d689f7602c6d9ad10a2ee0dab + languageName: node + linkType: hard + +"@cspell/dict-html-symbol-entities@npm:^4.0.0": + version: 4.0.0 + resolution: "@cspell/dict-html-symbol-entities@npm:4.0.0" + checksum: 35d3223f02f0d091ac6a93424d4c31a075ece530bee00853ee1f5827e5ed25d08407a522a3c747cbfbaa891333df3aa9cf6107a21f2a030667f74228655c9081 + languageName: node + linkType: hard + +"@cspell/dict-html@npm:^4.0.3": + version: 4.0.3 + resolution: "@cspell/dict-html@npm:4.0.3" + checksum: 12c457c8aaebe05fa226fc4abfa800b95ccfd95b6f10009907be399a1dd5a80648948a8795fa56f9ca42dc86ed90788f097bd02521bb85147926233b22231646 + languageName: node + linkType: hard + +"@cspell/dict-java@npm:^5.0.5": + version: 5.0.5 + resolution: "@cspell/dict-java@npm:5.0.5" + checksum: 5d71a08a5353986c16cabe454f6b704da8db76dd79ac36b5ac702f3ab406340bd8f7e63bb643ea0a8d2310a1a228e2956a848eb39ab4ef5e210e4e651da0e24f + languageName: node + linkType: hard + +"@cspell/dict-k8s@npm:^1.0.1": + version: 1.0.1 + resolution: "@cspell/dict-k8s@npm:1.0.1" + checksum: b8f86905c6bf130bac1587d027bfc83d490c16be9a7f89d2fc0ee96c7f5915011a23f8bd4ff9d22ed7a2568662880875a2c70fe1554af3f662d7f08f2d2bc8a7 + languageName: node + linkType: hard + +"@cspell/dict-latex@npm:^4.0.0": + version: 4.0.0 + resolution: "@cspell/dict-latex@npm:4.0.0" + checksum: d96392866378e680d2fe29770bb8f38b1abad8c2b5b29e003bdbfe7aee79de1841fe699b6e357629e7b94dbaf882fd33e5e316d066be7fc02f0cea6caa8dcde4 + languageName: node + linkType: hard + +"@cspell/dict-lorem-ipsum@npm:^4.0.0": + version: 4.0.0 + resolution: "@cspell/dict-lorem-ipsum@npm:4.0.0" + checksum: 9f518643664f4ccc8b3e4126abf78385d9ea4abd1d9fc4d5e89f3a140175c62e2d5f729a97845d912f899e908dd8a9ebbc3a0debd2a41f15cee7a2f15d44b04b + languageName: node + linkType: hard + +"@cspell/dict-lua@npm:^4.0.1": + version: 4.0.1 + resolution: "@cspell/dict-lua@npm:4.0.1" + checksum: e959948d5f4414aa617725bd756899a7f9fb07dce0c1dcfb7932747af759807f548d7bb1d54a207e349f08905e4aaf2ed9965c2194db486a599be18144ac7cdd + languageName: node + linkType: hard + +"@cspell/dict-node@npm:^4.0.3": + version: 4.0.3 + resolution: "@cspell/dict-node@npm:4.0.3" + checksum: 334ce75e5d3ad97dda48e33192ae2ce37d604b86e7f9d97dda1fe1468030735c6719257962d0e5a7413c63d194100e1348b86d05b5b724599175e75b0b3d29b2 + languageName: node + linkType: hard + +"@cspell/dict-npm@npm:^5.0.8": + version: 5.0.8 + resolution: "@cspell/dict-npm@npm:5.0.8" + checksum: 7d36effd540d7aa92b50a76070d7678a0b5af90b4e644211100d42156518f2123125d287bbc54779714a68b261831705740e8816a46834fee417af05878c295f + languageName: node + linkType: hard + +"@cspell/dict-php@npm:^4.0.2": + version: 4.0.3 + resolution: "@cspell/dict-php@npm:4.0.3" + checksum: 835aac7ee4b1806f4bf07174432a8c477cddb224f136831db8aa99c5ee138e443a1c74cc1bc9d8543f0f3fd0e90ce22b90b66a441c3825d233221638df6351d3 + languageName: node + linkType: hard + +"@cspell/dict-powershell@npm:^5.0.2": + version: 5.0.2 + resolution: "@cspell/dict-powershell@npm:5.0.2" + checksum: 4068e8a1b3b2c4a3d0a1f8a4a87277ac9ae04cd539149b715c7ac75f2a63757670c6b527ec70d0361a2f2d85c1d4713acf8d154536121a9ac18f3ff81d899589 + languageName: node + linkType: hard + +"@cspell/dict-public-licenses@npm:^2.0.3": + version: 2.0.3 + resolution: "@cspell/dict-public-licenses@npm:2.0.3" + checksum: ead1f0cd3b8c3bf756d23aafbea2e3652c6eec6ae86afc2129a15ee59b5b50d2200735b53a99dd47ca4642588498bdbae0271930d8cd39d51a60c1ec2459dd86 + languageName: node + linkType: hard + +"@cspell/dict-python@npm:^4.1.8": + version: 4.1.8 + resolution: "@cspell/dict-python@npm:4.1.8" + dependencies: + "@cspell/dict-data-science": "npm:^1.0.11" + checksum: cb4d658b236220f667f2c361575d34a1d4170c49560694c2058ea9b4ec4cfdf02c35fe1b817a7d2e3e257fcd2feecbecceead652937f29d851e3b6f3d18601d3 + languageName: node + linkType: hard + +"@cspell/dict-r@npm:^2.0.1": + version: 2.0.1 + resolution: "@cspell/dict-r@npm:2.0.1" + checksum: c8eead19fed04ff748c8ac75c55c4cf32b0383b0b9d05a23299e7e5d2d6f0c33fe94ff4c73080fdbd5b7e2fcdeaf726373a993122ec35e3a8f2b61f202c4a837 + languageName: node + linkType: hard + +"@cspell/dict-ruby@npm:^5.0.0": + version: 5.0.0 + resolution: "@cspell/dict-ruby@npm:5.0.0" + checksum: d591ff318733421c958b80a8e8c7dc791ac0232b8b9e628c857aec45fa8ebaffc6242679f75b411b109753613d2bf2ff468e7e0ee1207bdc1f24d3669bcb82e3 + languageName: node + linkType: hard + +"@cspell/dict-rust@npm:^4.0.1": + version: 4.0.1 + resolution: "@cspell/dict-rust@npm:4.0.1" + checksum: 724441dbc769d67ab3eac9a7d7b5c2734158619d2fea65069a955f036894551f8d074f223a8dbad7e5f326b42a9b5e4341f976210708ef16c27e428c024dae35 + languageName: node + linkType: hard + +"@cspell/dict-scala@npm:^5.0.0": + version: 5.0.0 + resolution: "@cspell/dict-scala@npm:5.0.0" + checksum: 6ca476b07610b0602b8e0d4e8147418c4d6046bee2d0d7d9468fa57e84c305e93ab4a4a8eded7cbd660792bf22869c435a4f9dcfab41584ffa03f1884d27ae94 + languageName: node + linkType: hard + +"@cspell/dict-software-terms@npm:^3.2.3": + version: 3.2.3 + resolution: "@cspell/dict-software-terms@npm:3.2.3" + checksum: 2484a2e0d0fec69f458f0a7f71e2bb9b09cadadd8cdaa46b35c407789b92110380bed8b4688f95017e8d7e859d5f9bf03ea355af76f4f048e0047d5b2cb81cba + languageName: node + linkType: hard + +"@cspell/dict-sql@npm:^2.1.1": + version: 2.1.1 + resolution: "@cspell/dict-sql@npm:2.1.1" + checksum: 21fdff472fa8047ad4bcb4e0b9c279d2d7ed530d02032090f7c4d36ff24b49976ec5c6b1b43e200d5e6a854da37ed9bef0ece7a953cb8bbcb28cc2d86ec081a7 + languageName: node + linkType: hard + +"@cspell/dict-svelte@npm:^1.0.2": + version: 1.0.2 + resolution: "@cspell/dict-svelte@npm:1.0.2" + checksum: bd650fd25d2ea83808a69eb2a6cb7a5b82295c3dde1c334fc54ff439287c5bf13e3293397e2c45e8b2d1b69fd133e17f4eb920b64df2571c5a399ac1e206f551 + languageName: node + linkType: hard + +"@cspell/dict-swift@npm:^2.0.1": + version: 2.0.1 + resolution: "@cspell/dict-swift@npm:2.0.1" + checksum: e29ffc8379d50ef9397018c25b1be05177d4ecb1e18d3b97834f9edf0306af349b5593d7d93a7f2624616c1beeb35eb1e56560d351f459b776c3dd6b2c0ac601 + languageName: node + linkType: hard + +"@cspell/dict-typescript@npm:^3.1.1": + version: 3.1.1 + resolution: "@cspell/dict-typescript@npm:3.1.1" + checksum: c80ffb5fc16ac0fe5d9f58ca120df8e34a1d2d7afad8293df7fa5f9f6236e8340c47745ffb1559cba24122cb429aa7af63c5b8efeb4d59edd49d556afe4994fe + languageName: node + linkType: hard + +"@cspell/dict-vue@npm:^3.0.0": + version: 3.0.0 + resolution: "@cspell/dict-vue@npm:3.0.0" + checksum: 2995b912e26cf88cb6ec9728a9adc5b24a0243c001887d425b14a61ef2be22aca38fa99a84d7698d8982aef65c8db4abf583c3d916c2166b9e8d99cec80800cd + languageName: node + linkType: hard + +"@cspell/dynamic-import@npm:7.3.6": + version: 7.3.6 + resolution: "@cspell/dynamic-import@npm:7.3.6" + dependencies: + import-meta-resolve: "npm:^3.0.0" + checksum: 43a7db2b8e0df17c837840a5a258d12922e3523e0c9c032b65030afd3d0db1f930cfccf6fe125baba3603aaa3543f4f933416c253212e38e0db81eec5c539248 + languageName: node + linkType: hard + +"@cspell/strong-weak-map@npm:7.3.6": + version: 7.3.6 + resolution: "@cspell/strong-weak-map@npm:7.3.6" + checksum: 912ad11194b85663bb513f1e94607e65aa881e2fab2b445a80bc99e75226718178f29cde51b1abfd153083d4faeafadd4e9671a2e21c3d07d08de0bfdb48cfb9 + languageName: node + linkType: hard + +"@cspotcode/source-map-support@npm:^0.8.0": + version: 0.8.1 + resolution: "@cspotcode/source-map-support@npm:0.8.1" + dependencies: + "@jridgewell/trace-mapping": "npm:0.3.9" + checksum: 05c5368c13b662ee4c122c7bfbe5dc0b613416672a829f3e78bc49a357a197e0218d6e74e7c66cfcd04e15a179acab080bd3c69658c9fbefd0e1ccd950a07fc6 + languageName: node + linkType: hard + +"@dabh/diagnostics@npm:^2.0.2": + version: 2.0.3 + resolution: "@dabh/diagnostics@npm:2.0.3" + dependencies: + colorspace: "npm:1.1.x" + enabled: "npm:2.0.x" + kuler: "npm:^2.0.0" + checksum: a5133df8492802465ed01f2f0a5784585241a1030c362d54a602ed1839816d6c93d71dde05cf2ddb4fd0796238c19774406bd62fa2564b637907b495f52425fe + languageName: node + linkType: hard + +"@dependents/detective-less@npm:^4.1.0": + version: 4.1.0 + resolution: "@dependents/detective-less@npm:4.1.0" + dependencies: + gonzales-pe: "npm:^4.3.0" + node-source-walk: "npm:^6.0.1" + checksum: 8a930cbcb2a288c9782854bbdb7e4d3fbbcc11b154d6a3296b0a4aed2d05c97c1ffb872e692b28f967ced85fa739afce68d3c4b8f2dc56015df0a2b2eda9d835 + languageName: node + linkType: hard + +"@ericcornelissen/bash-parser@npm:^0.5.2": + version: 0.5.2 + resolution: "@ericcornelissen/bash-parser@npm:0.5.2" + dependencies: + array-last: "npm:^1.1.1" + babylon: "npm:^6.9.1" + compose-function: "npm:^3.0.3" + deep-freeze: "npm:0.0.1" + filter-iterator: "npm:0.0.1" + filter-obj: "npm:^1.1.0" + has-own-property: "npm:^0.1.0" + identity-function: "npm:^1.0.0" + is-iterable: "npm:^1.1.0" + iterable-lookahead: "npm:^1.0.0" + lodash.curry: "npm:^4.1.1" + magic-string: "npm:^0.16.0" + map-obj: "npm:^2.0.0" + object-pairs: "npm:^0.1.0" + object-values: "npm:^1.0.0" + reverse-arguments: "npm:^1.0.0" + shell-quote-word: "npm:^1.0.1" + to-pascal-case: "npm:^1.0.0" + unescape-js: "npm:^1.0.5" + checksum: 0640a9203c903561ed15da4e1760d05cbb6b3c5be33864ac8596bfccddf5c974ffdd85851feff0a6bbfb475c6f17705f308ffa8a94c02c6664be22cfeaac781c + languageName: node + linkType: hard + +"@esbuild-kit/cjs-loader@npm:^2.4.2": + version: 2.4.4 + resolution: "@esbuild-kit/cjs-loader@npm:2.4.4" + dependencies: + "@esbuild-kit/core-utils": "npm:^3.2.3" + get-tsconfig: "npm:^4.7.0" + checksum: 021df0d4de26d4eb0fa1fb8dfe4da8f745a6e711ffaa352de566e9af4246e5d9e00a5926550c625e6ff5e439a362584cd7c4dda1130241c23cbd74c586670deb + languageName: node + linkType: hard + +"@esbuild-kit/core-utils@npm:^3.2.2, @esbuild-kit/core-utils@npm:^3.2.3, @esbuild-kit/core-utils@npm:^3.3.2": + version: 3.3.2 + resolution: "@esbuild-kit/core-utils@npm:3.3.2" + dependencies: + esbuild: "npm:~0.18.20" + source-map-support: "npm:^0.5.21" + checksum: d856f5bd720814593f911d781ed7558a3f8ec1a39802f3831d0eea0d1306e0e2dc11b7b2443af621c413ec6557f1f3034a9a4f1472a4cb40e52cd6e3b356aa05 + languageName: node + linkType: hard + +"@esbuild-kit/esm-loader@npm:^2.5.5": + version: 2.6.5 + resolution: "@esbuild-kit/esm-loader@npm:2.6.5" + dependencies: + "@esbuild-kit/core-utils": "npm:^3.3.2" + get-tsconfig: "npm:^4.7.0" + checksum: 6894b29176eda62bdce0d458d57f32daed5cb8fcff14cb3ddfbc995cfe3e2fa8599f3b0b1af66db446903b30167f57069f27e9cf79a69cf9b41f557115811cde + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/android-arm64@npm:0.18.20" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.19.6": + version: 0.19.6 + resolution: "@esbuild/android-arm64@npm:0.19.6" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/android-arm@npm:0.18.20" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.19.6": + version: 0.19.6 + resolution: "@esbuild/android-arm@npm:0.19.6" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/android-x64@npm:0.18.20" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.19.6": + version: 0.19.6 + resolution: "@esbuild/android-x64@npm:0.19.6" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/darwin-arm64@npm:0.18.20" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.19.6": + version: 0.19.6 + resolution: "@esbuild/darwin-arm64@npm:0.19.6" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/darwin-x64@npm:0.18.20" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.19.6": + version: 0.19.6 + resolution: "@esbuild/darwin-x64@npm:0.19.6" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/freebsd-arm64@npm:0.18.20" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.19.6": + version: 0.19.6 + resolution: "@esbuild/freebsd-arm64@npm:0.19.6" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/freebsd-x64@npm:0.18.20" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.19.6": + version: 0.19.6 + resolution: "@esbuild/freebsd-x64@npm:0.19.6" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-arm64@npm:0.18.20" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.19.6": + version: 0.19.6 + resolution: "@esbuild/linux-arm64@npm:0.19.6" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-arm@npm:0.18.20" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.19.6": + version: 0.19.6 + resolution: "@esbuild/linux-arm@npm:0.19.6" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-ia32@npm:0.18.20" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.19.6": + version: 0.19.6 + resolution: "@esbuild/linux-ia32@npm:0.19.6" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-loong64@npm:0.18.20" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.19.6": + version: 0.19.6 + resolution: "@esbuild/linux-loong64@npm:0.19.6" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-mips64el@npm:0.18.20" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.19.6": + version: 0.19.6 + resolution: "@esbuild/linux-mips64el@npm:0.19.6" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-ppc64@npm:0.18.20" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.19.6": + version: 0.19.6 + resolution: "@esbuild/linux-ppc64@npm:0.19.6" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-riscv64@npm:0.18.20" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.19.6": + version: 0.19.6 + resolution: "@esbuild/linux-riscv64@npm:0.19.6" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-s390x@npm:0.18.20" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.19.6": + version: 0.19.6 + resolution: "@esbuild/linux-s390x@npm:0.19.6" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-x64@npm:0.18.20" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.19.6": + version: 0.19.6 + resolution: "@esbuild/linux-x64@npm:0.19.6" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/netbsd-x64@npm:0.18.20" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.19.6": + version: 0.19.6 + resolution: "@esbuild/netbsd-x64@npm:0.19.6" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/openbsd-x64@npm:0.18.20" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.19.6": + version: 0.19.6 + resolution: "@esbuild/openbsd-x64@npm:0.19.6" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/sunos-x64@npm:0.18.20" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.19.6": + version: 0.19.6 + resolution: "@esbuild/sunos-x64@npm:0.19.6" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/win32-arm64@npm:0.18.20" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.19.6": + version: 0.19.6 + resolution: "@esbuild/win32-arm64@npm:0.19.6" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/win32-ia32@npm:0.18.20" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.19.6": + version: 0.19.6 + resolution: "@esbuild/win32-ia32@npm:0.19.6" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/win32-x64@npm:0.18.20" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.19.6": + version: 0.19.6 + resolution: "@esbuild/win32-x64@npm:0.19.6" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.2.0": + version: 4.4.0 + resolution: "@eslint-community/eslint-utils@npm:4.4.0" + dependencies: + eslint-visitor-keys: "npm:^3.3.0" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 7e559c4ce59cd3a06b1b5a517b593912e680a7f981ae7affab0d01d709e99cd5647019be8fafa38c350305bc32f1f7d42c7073edde2ab536c745e365f37b607e + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.4.0, @eslint-community/regexpp@npm:^4.6.1": + version: 4.8.0 + resolution: "@eslint-community/regexpp@npm:4.8.0" + checksum: 77252aecfea8a2eb02bb076803f78c1529963e9a7f1cb1be5305126f5582a0cbd1cb6ab38a8ac952633cfd5659c101e8b8b494c69376a2481ddd9bd156419fdd + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^2.1.2": + version: 2.1.2 + resolution: "@eslint/eslintrc@npm:2.1.2" + dependencies: + ajv: "npm:^6.12.4" + debug: "npm:^4.3.2" + espree: "npm:^9.6.0" + globals: "npm:^13.19.0" + ignore: "npm:^5.2.0" + import-fresh: "npm:^3.2.1" + js-yaml: "npm:^4.1.0" + minimatch: "npm:^3.1.2" + strip-json-comments: "npm:^3.1.1" + checksum: 00efdc3797e6f05518060522b7788e5f5aff02f13facbd0c83b176c3dee86554023283a5f68542df379c5137685d2d29745c87f62bf2406a1d38d95471f44ce6 + languageName: node + linkType: hard + +"@eslint/js@npm:8.49.0": + version: 8.49.0 + resolution: "@eslint/js@npm:8.49.0" + checksum: 40b4255866161e16b09eae1830c8ff7379276659ee7ce039e4708bcf3c5a5fd8b95418d32c355294e6c738f23ab42f3e3a55100dffb389edd5d5233ca47c01b3 + languageName: node + linkType: hard + +"@ethersproject/abi@npm:5.7.0, @ethersproject/abi@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/abi@npm:5.7.0" + dependencies: + "@ethersproject/address": "npm:^5.7.0" + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/constants": "npm:^5.7.0" + "@ethersproject/hash": "npm:^5.7.0" + "@ethersproject/keccak256": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/strings": "npm:^5.7.0" + checksum: 7de51bf52ff03df2526546dacea6e74f15d4c5ef762d931552082b9600dcefd8e333599f02d7906ba89f7b7f48c45ab72cee76f397212b4f17fa9d9ff5615916 + languageName: node + linkType: hard + +"@ethersproject/abstract-provider@npm:5.7.0, @ethersproject/abstract-provider@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/abstract-provider@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/networks": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/transactions": "npm:^5.7.0" + "@ethersproject/web": "npm:^5.7.0" + checksum: a5708e2811b90ddc53d9318ce152511a32dd4771aa2fb59dbe9e90468bb75ca6e695d958bf44d13da684dc3b6aab03f63d425ff7591332cb5d7ddaf68dff7224 + languageName: node + linkType: hard + +"@ethersproject/abstract-signer@npm:5.7.0, @ethersproject/abstract-signer@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/abstract-signer@npm:5.7.0" + dependencies: + "@ethersproject/abstract-provider": "npm:^5.7.0" + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + checksum: e174966b3be17269a5974a3ae5eef6d15ac62ee8c300ceace26767f218f6bbf3de66f29d9a9c9ca300fa8551aab4c92e28d2cc772f5475fdeaa78d9b5be0e745 + languageName: node + linkType: hard + +"@ethersproject/address@npm:5.7.0, @ethersproject/address@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/address@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/keccak256": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/rlp": "npm:^5.7.0" + checksum: db5da50abeaae8f6cf17678323e8d01cad697f9a184b0593c62b71b0faa8d7e5c2ba14da78a998d691773ed6a8eb06701f65757218e0eaaeb134e5c5f3e5a908 + languageName: node + linkType: hard + +"@ethersproject/base64@npm:5.7.0, @ethersproject/base64@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/base64@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + checksum: 4f748cd82af60ff1866db699fbf2bf057feff774ea0a30d1f03ea26426f53293ea10cc8265cda1695301da61093bedb8cc0d38887f43ed9dad96b78f19d7337e + languageName: node + linkType: hard + +"@ethersproject/basex@npm:5.7.0, @ethersproject/basex@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/basex@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + checksum: 02304de77477506ad798eb5c68077efd2531624380d770ef4a823e631a288fb680107a0f9dc4a6339b2a0b0f5b06ee77f53429afdad8f950cde0f3e40d30167d + languageName: node + linkType: hard + +"@ethersproject/bignumber@npm:5.7.0, @ethersproject/bignumber@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/bignumber@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + bn.js: "npm:^5.2.1" + checksum: 14263cdc91a7884b141d9300f018f76f69839c47e95718ef7161b11d2c7563163096fee69724c5fa8ef6f536d3e60f1c605819edbc478383a2b98abcde3d37b2 + languageName: node + linkType: hard + +"@ethersproject/bytes@npm:5.7.0, @ethersproject/bytes@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/bytes@npm:5.7.0" + dependencies: + "@ethersproject/logger": "npm:^5.7.0" + checksum: 07dd1f0341b3de584ef26c8696674ff2bb032f4e99073856fc9cd7b4c54d1d846cabe149e864be267934658c3ce799e5ea26babe01f83af0e1f06c51e5ac791f + languageName: node + linkType: hard + +"@ethersproject/constants@npm:5.7.0, @ethersproject/constants@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/constants@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": "npm:^5.7.0" + checksum: 6df63ab753e152726b84595250ea722165a5744c046e317df40a6401f38556385a37c84dadf5b11ca651c4fb60f967046125369c57ac84829f6b30e69a096273 + languageName: node + linkType: hard + +"@ethersproject/contracts@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/contracts@npm:5.7.0" + dependencies: + "@ethersproject/abi": "npm:^5.7.0" + "@ethersproject/abstract-provider": "npm:^5.7.0" + "@ethersproject/abstract-signer": "npm:^5.7.0" + "@ethersproject/address": "npm:^5.7.0" + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/constants": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/transactions": "npm:^5.7.0" + checksum: 97a10361dddaccfb3e9e20e24d071cfa570050adcb964d3452c5f7c9eaaddb4e145ec9cf928e14417948701b89e81d4907800e799a6083123e4d13a576842f41 + languageName: node + linkType: hard + +"@ethersproject/hash@npm:5.7.0, @ethersproject/hash@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/hash@npm:5.7.0" + dependencies: + "@ethersproject/abstract-signer": "npm:^5.7.0" + "@ethersproject/address": "npm:^5.7.0" + "@ethersproject/base64": "npm:^5.7.0" + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/keccak256": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/strings": "npm:^5.7.0" + checksum: 1a631dae34c4cf340dde21d6940dd1715fc7ae483d576f7b8ef9e8cb1d0e30bd7e8d30d4a7d8dc531c14164602323af2c3d51eb2204af18b2e15167e70c9a5ef + languageName: node + linkType: hard + +"@ethersproject/hdnode@npm:5.7.0, @ethersproject/hdnode@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/hdnode@npm:5.7.0" + dependencies: + "@ethersproject/abstract-signer": "npm:^5.7.0" + "@ethersproject/basex": "npm:^5.7.0" + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/pbkdf2": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/sha2": "npm:^5.7.0" + "@ethersproject/signing-key": "npm:^5.7.0" + "@ethersproject/strings": "npm:^5.7.0" + "@ethersproject/transactions": "npm:^5.7.0" + "@ethersproject/wordlists": "npm:^5.7.0" + checksum: 36d5c13fe69b1e0a18ea98537bc560d8ba166e012d63faac92522a0b5f405eb67d8848c5aca69e2470f62743aaef2ac36638d9e27fd8c68f51506eb61479d51d + languageName: node + linkType: hard + +"@ethersproject/json-wallets@npm:5.7.0, @ethersproject/json-wallets@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/json-wallets@npm:5.7.0" + dependencies: + "@ethersproject/abstract-signer": "npm:^5.7.0" + "@ethersproject/address": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/hdnode": "npm:^5.7.0" + "@ethersproject/keccak256": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/pbkdf2": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/random": "npm:^5.7.0" + "@ethersproject/strings": "npm:^5.7.0" + "@ethersproject/transactions": "npm:^5.7.0" + aes-js: "npm:3.0.0" + scrypt-js: "npm:3.0.1" + checksum: f1a84d19ff38d3506f453abc4702107cbc96a43c000efcd273a056371363767a06a8d746f84263b1300266eb0c329fe3b49a9b39a37aadd016433faf9e15a4bb + languageName: node + linkType: hard + +"@ethersproject/keccak256@npm:5.7.0, @ethersproject/keccak256@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/keccak256@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + js-sha3: "npm:0.8.0" + checksum: 3b1a91706ff11f5ab5496840b9c36cedca27db443186d28b94847149fd16baecdc13f6fc5efb8359506392f2aba559d07e7f9c1e17a63f9d5de9f8053cfcb033 + languageName: node + linkType: hard + +"@ethersproject/logger@npm:5.7.0, @ethersproject/logger@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/logger@npm:5.7.0" + checksum: d03d460fb2d4a5e71c627b7986fb9e50e1b59a6f55e8b42a545b8b92398b961e7fd294bd9c3d8f92b35d0f6ff9d15aa14c95eab378f8ea194e943c8ace343501 + languageName: node + linkType: hard + +"@ethersproject/networks@npm:5.7.1, @ethersproject/networks@npm:^5.7.0": + version: 5.7.1 + resolution: "@ethersproject/networks@npm:5.7.1" + dependencies: + "@ethersproject/logger": "npm:^5.7.0" + checksum: 9efcdce27f150459e85d74af3f72d5c32898823a99f5410e26bf26cca2d21fb14e403377314a93aea248e57fb2964e19cee2c3f7bfc586ceba4c803a8f1b75c0 + languageName: node + linkType: hard + +"@ethersproject/pbkdf2@npm:5.7.0, @ethersproject/pbkdf2@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/pbkdf2@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/sha2": "npm:^5.7.0" + checksum: e5a29cf28b4f4ca1def94d37cfb6a9c05c896106ed64881707813de01c1e7ded613f1e95febcccda4de96aae929068831d72b9d06beef1377b5a1a13a0eb3ff5 + languageName: node + linkType: hard + +"@ethersproject/properties@npm:5.7.0, @ethersproject/properties@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/properties@npm:5.7.0" + dependencies: + "@ethersproject/logger": "npm:^5.7.0" + checksum: 4fe5d36e5550b8e23a305aa236a93e8f04d891d8198eecdc8273914c761b0e198fd6f757877406ee3eb05033ec271132a3e5998c7bd7b9a187964fb4f67b1373 + languageName: node + linkType: hard + +"@ethersproject/providers@npm:5.7.2": + version: 5.7.2 + resolution: "@ethersproject/providers@npm:5.7.2" + dependencies: + "@ethersproject/abstract-provider": "npm:^5.7.0" + "@ethersproject/abstract-signer": "npm:^5.7.0" + "@ethersproject/address": "npm:^5.7.0" + "@ethersproject/base64": "npm:^5.7.0" + "@ethersproject/basex": "npm:^5.7.0" + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/constants": "npm:^5.7.0" + "@ethersproject/hash": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/networks": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/random": "npm:^5.7.0" + "@ethersproject/rlp": "npm:^5.7.0" + "@ethersproject/sha2": "npm:^5.7.0" + "@ethersproject/strings": "npm:^5.7.0" + "@ethersproject/transactions": "npm:^5.7.0" + "@ethersproject/web": "npm:^5.7.0" + bech32: "npm:1.1.4" + ws: "npm:7.4.6" + checksum: 4c8d19e6b31f769c24042fb2d02e483a4ee60dcbfca9e3291f0a029b24337c47d1ea719a390be856f8fd02997125819e834415e77da4fb2023369712348dae4c + languageName: node + linkType: hard + +"@ethersproject/random@npm:5.7.0, @ethersproject/random@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/random@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + checksum: 23e572fc55372653c22062f6a153a68c2e2d3200db734cd0d39621fbfd0ca999585bed2d5682e3ac65d87a2893048375682e49d1473d9965631ff56d2808580b + languageName: node + linkType: hard + +"@ethersproject/rlp@npm:5.7.0, @ethersproject/rlp@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/rlp@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + checksum: bc863d21dcf7adf6a99ae75c41c4a3fb99698cfdcfc6d5d82021530f3d3551c6305bc7b6f0475ad6de6f69e91802b7e872bee48c0596d98969aefcf121c2a044 + languageName: node + linkType: hard + +"@ethersproject/sha2@npm:5.7.0, @ethersproject/sha2@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/sha2@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + hash.js: "npm:1.1.7" + checksum: 0e7f9ce6b1640817b921b9c6dd9dab8d5bf5a0ce7634d6a7d129b7366a576c2f90dcf4bcb15a0aa9310dde67028f3a44e4fcc2f26b565abcd2a0f465116ff3b1 + languageName: node + linkType: hard + +"@ethersproject/signing-key@npm:5.7.0, @ethersproject/signing-key@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/signing-key@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + bn.js: "npm:^5.2.1" + elliptic: "npm:6.5.4" + hash.js: "npm:1.1.7" + checksum: fe2ca55bcdb6e370d81372191d4e04671234a2da872af20b03c34e6e26b97dc07c1ee67e91b673680fb13344c9d5d7eae52f1fa6117733a3d68652b778843e09 + languageName: node + linkType: hard + +"@ethersproject/solidity@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/solidity@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/keccak256": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/sha2": "npm:^5.7.0" + "@ethersproject/strings": "npm:^5.7.0" + checksum: bedf9918911144b0ec352b8aa7fa44abf63f0b131629c625672794ee196ba7d3992b0e0d3741935ca176813da25b9bcbc81aec454652c63113bdc3a1706beac6 + languageName: node + linkType: hard + +"@ethersproject/strings@npm:5.7.0, @ethersproject/strings@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/strings@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/constants": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + checksum: 570d87040ccc7d94de9861f76fc2fba6c0b84c5d6104a99a5c60b8a2401df2e4f24bf9c30afa536163b10a564a109a96f02e6290b80e8f0c610426f56ad704d1 + languageName: node + linkType: hard + +"@ethersproject/transactions@npm:5.7.0, @ethersproject/transactions@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/transactions@npm:5.7.0" + dependencies: + "@ethersproject/address": "npm:^5.7.0" + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/constants": "npm:^5.7.0" + "@ethersproject/keccak256": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/rlp": "npm:^5.7.0" + "@ethersproject/signing-key": "npm:^5.7.0" + checksum: aa4d51379caab35b9c468ed1692a23ae47ce0de121890b4f7093c982ee57e30bd2df0c743faed0f44936d7e59c55fffd80479f2c28ec6777b8de06bfb638c239 + languageName: node + linkType: hard + +"@ethersproject/units@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/units@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/constants": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + checksum: 4da2fdefe2a506cc9f8b408b2c8638ab35b843ec413d52713143f08501a55ff67a808897f9a91874774fb526423a0821090ba294f93e8bf4933a57af9677ac5e + languageName: node + linkType: hard + +"@ethersproject/wallet@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/wallet@npm:5.7.0" + dependencies: + "@ethersproject/abstract-provider": "npm:^5.7.0" + "@ethersproject/abstract-signer": "npm:^5.7.0" + "@ethersproject/address": "npm:^5.7.0" + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/hash": "npm:^5.7.0" + "@ethersproject/hdnode": "npm:^5.7.0" + "@ethersproject/json-wallets": "npm:^5.7.0" + "@ethersproject/keccak256": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/random": "npm:^5.7.0" + "@ethersproject/signing-key": "npm:^5.7.0" + "@ethersproject/transactions": "npm:^5.7.0" + "@ethersproject/wordlists": "npm:^5.7.0" + checksum: f872b957db46f9de247d39a398538622b6c7a12f93d69bec5f47f9abf0701ef1edc10497924dd1c14a68109284c39a1686fa85586d89b3ee65df49002c40ba4c + languageName: node + linkType: hard + +"@ethersproject/web@npm:5.7.1, @ethersproject/web@npm:^5.7.0": + version: 5.7.1 + resolution: "@ethersproject/web@npm:5.7.1" + dependencies: + "@ethersproject/base64": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/strings": "npm:^5.7.0" + checksum: c82d6745c7f133980e8dab203955260e07da22fa544ccafdd0f21c79fae127bd6ef30957319e37b1cc80cddeb04d6bfb60f291bb14a97c9093d81ce50672f453 + languageName: node + linkType: hard + +"@ethersproject/wordlists@npm:5.7.0, @ethersproject/wordlists@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/wordlists@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/hash": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/strings": "npm:^5.7.0" + checksum: da4f3eca6d691ebf4f578e6b2ec3a76dedba791be558f6cf7e10cd0bfbaeab5a6753164201bb72ced745fb02b6ef7ef34edcb7e6065ce2b624c6556a461c3f70 + languageName: node + linkType: hard + +"@fastify/accept-negotiator@npm:^1.0.0, @fastify/accept-negotiator@npm:^1.1.0": + version: 1.1.0 + resolution: "@fastify/accept-negotiator@npm:1.1.0" + checksum: 1cb9a298c992b812869158ddc6093557a877b30e5f77618a7afea985a0667c50bc7113593bf0f7f9dc9b82b94c16e8ab127a0afc3efde6677fd645539f6d08e5 + languageName: node + linkType: hard + +"@fastify/ajv-compiler@npm:^3.5.0": + version: 3.5.0 + resolution: "@fastify/ajv-compiler@npm:3.5.0" + dependencies: + ajv: "npm:^8.11.0" + ajv-formats: "npm:^2.1.1" + fast-uri: "npm:^2.0.0" + checksum: d10df76b7016984bf70bc6aca99962468ec43e0be5772d4aa3a7735ae78be44fdbcb2c078fe0cfdffec076080dfb7cbdbf4b729e52b168039477126f9d023af0 + languageName: node + linkType: hard + +"@fastify/busboy@npm:^2.0.0": + version: 2.1.0 + resolution: "@fastify/busboy@npm:2.1.0" + checksum: 7bb641080aac7cf01d88749ad331af10ba9ec3713ec07cabbe833908c75df21bd56249bb6173bdec07f5a41896b21e3689316f86684c06635da45f91ff4565a2 + languageName: node + linkType: hard + +"@fastify/deepmerge@npm:^1.0.0": + version: 1.3.0 + resolution: "@fastify/deepmerge@npm:1.3.0" + checksum: 8115ed7b891189ee4ebba554a105cb69111615bdb2961f8c58a80872fac9d7b74b2c6317d545a7d378325d094ce73a91fc9c5d7d6189476779cd5a5493cb1351 + languageName: node + linkType: hard + +"@fastify/error@npm:^3.0.0": + version: 3.4.1 + resolution: "@fastify/error@npm:3.4.1" + checksum: 1f1a0faa8c86639afb6f4bd47a9cdc1f0f20ce0d6944340fbdec8218aaba91dc9cae9ed78e24e61bceb782a867efda2b9a6320091f00dcbb896d9c8a9bdf5f96 + languageName: node + linkType: hard + +"@fastify/fast-json-stringify-compiler@npm:^4.3.0": + version: 4.3.0 + resolution: "@fastify/fast-json-stringify-compiler@npm:4.3.0" + dependencies: + fast-json-stringify: "npm:^5.7.0" + checksum: 513ef296f5ed682f7a460cfa6c5fb917a32fc540111b873c9937f944558e021492b18f30f9fd8dd20db252381a4428adbcc9f03a077f16c86d02f081eb490c7b + languageName: node + linkType: hard + +"@fastify/send@npm:^2.0.0": + version: 2.1.0 + resolution: "@fastify/send@npm:2.1.0" + dependencies: + "@lukeed/ms": "npm:^2.0.1" + escape-html: "npm:~1.0.3" + fast-decode-uri-component: "npm:^1.0.1" + http-errors: "npm:2.0.0" + mime: "npm:^3.0.0" + checksum: 0e1c10022660fa1f1959b7c414d1be2c47ab42be1da8e21cd72a4df3104c516fdf7b590ee67f897037dd4c85b716fac63929e894d7699623549646604f6db14b + languageName: node + linkType: hard + +"@fastify/static@npm:6.10.2": + version: 6.10.2 + resolution: "@fastify/static@npm:6.10.2" + dependencies: + "@fastify/accept-negotiator": "npm:^1.0.0" + "@fastify/send": "npm:^2.0.0" + content-disposition: "npm:^0.5.3" + fastify-plugin: "npm:^4.0.0" + glob: "npm:^8.0.1" + p-limit: "npm:^3.1.0" + readable-stream: "npm:^4.0.0" + checksum: 7f493bb6d470087f2ac2c81c229e97e27ee5feef2cc8aced133aa0260c26bba850fb0524af602b284be1d560edde9d60c24541309a9b16352cc346cb3232981d + languageName: node + linkType: hard + +"@grpc/grpc-js@npm:^1.7.1, @grpc/grpc-js@npm:^1.7.3": + version: 1.9.13 + resolution: "@grpc/grpc-js@npm:1.9.13" + dependencies: + "@grpc/proto-loader": "npm:^0.7.8" + "@types/node": "npm:>=12.12.47" + checksum: 5a2e5f88fa684e03bbfd13d5e0dffd1ea4eaacc87220bad76f758e85abb12668c1e44656fb2379f88a446f463932087463c8f0715db4f1b1747354fd4beeaa4f + languageName: node + linkType: hard + +"@grpc/proto-loader@npm:^0.7.8": + version: 0.7.10 + resolution: "@grpc/proto-loader@npm:0.7.10" + dependencies: + lodash.camelcase: "npm:^4.3.0" + long: "npm:^5.0.0" + protobufjs: "npm:^7.2.4" + yargs: "npm:^17.7.2" + bin: + proto-loader-gen-types: build/bin/proto-loader-gen-types.js + checksum: efd9a094afd90a271019adb7213dbbf6ae8788b7ad5b9b98e2b15848f0dcdd645ab8701b7feb981e3692846d4f81f71468be61bb10e85ced53dfd9a5aa2df7dd + languageName: node + linkType: hard + +"@hapi/bourne@npm:^2.0.0": + version: 2.1.0 + resolution: "@hapi/bourne@npm:2.1.0" + checksum: 0dddacffeb1874d60dd9309f2d8f7103d971c21c4bfb0cfadb406f1dcc0bc00c0b5eed09fbd45a27fe179b6c9f99015500c2197213914d6f93efa584b9313ffd + languageName: node + linkType: hard + +"@honeycombio/opentelemetry-node@npm:^0.5.0": + version: 0.5.0 + resolution: "@honeycombio/opentelemetry-node@npm:0.5.0" + dependencies: + "@grpc/grpc-js": "npm:^1.7.3" + "@opentelemetry/api": "npm:^1.4.1" + "@opentelemetry/core": "npm:^1.13.0" + "@opentelemetry/exporter-metrics-otlp-grpc": "npm:^0.41.0" + "@opentelemetry/exporter-metrics-otlp-proto": "npm:^0.39.1" + "@opentelemetry/exporter-trace-otlp-grpc": "npm:^0.41.0" + "@opentelemetry/exporter-trace-otlp-proto": "npm:^0.41.0" + "@opentelemetry/resources": "npm:^1.13.0" + "@opentelemetry/sdk-metrics": "npm:^1.13.0" + "@opentelemetry/sdk-node": "npm:^0.39.1" + "@opentelemetry/sdk-trace-base": "npm:^1.13.0" + axios: "npm:^1.1.3" + checksum: 9d75cc97f3cb3b085e925eb4285112e67507333853baf882a9ab679589895fb2f77ad36fd2b93d7c960e7e3ae7c07f0aa4cf218991cd52420142d410540dd4a7 + languageName: node + linkType: hard + +"@humanwhocodes/config-array@npm:^0.11.11": + version: 0.11.11 + resolution: "@humanwhocodes/config-array@npm:0.11.11" + dependencies: + "@humanwhocodes/object-schema": "npm:^1.2.1" + debug: "npm:^4.1.1" + minimatch: "npm:^3.0.5" + checksum: 4195f68e485f7d1a7c95cf0f126cc41f7223eeda2f1b46b893123c99b35bb76145c37d25e2ba452d54815ed69bb656c0ce9e343ffa984470c08afa6e82a4713f + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529 + languageName: node + linkType: hard + +"@humanwhocodes/momoa@npm:^2.0.2": + version: 2.0.4 + resolution: "@humanwhocodes/momoa@npm:2.0.4" + checksum: ff081fb5239eb23ae40c59bd51e8128d34b043be3b7c2adb2522cdff51b01ec3129e57d5a24a1eb3a082159d5b41fddfbaffc4cf46cae4fe11a51393f60424fd + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^1.2.1": + version: 1.2.1 + resolution: "@humanwhocodes/object-schema@npm:1.2.1" + checksum: c3c35fdb70c04a569278351c75553e293ae339684ed75895edc79facc7276e351115786946658d78133130c0cca80e57e2203bc07f8fa7fe7980300e8deef7db + languageName: node + linkType: hard + +"@import-maps/resolve@npm:^1.0.1": + version: 1.0.1 + resolution: "@import-maps/resolve@npm:1.0.1" + checksum: 4d9ff6f0f6250b2dba17abc4b6e8bdd9fdb1b0585eec2da84cbdf4df6d2acb7cd06e797525c3409f34ce9210d04c26f573b590e99b9215763d04bdad5fb47b6d + languageName: node + linkType: hard + +"@ioredis/commands@npm:^1.1.1": + version: 1.2.0 + resolution: "@ioredis/commands@npm:1.2.0" + checksum: a5d3c29dd84d8a28b7c67a441ac1715cbd7337a7b88649c0f17c345d89aa218578d2b360760017c48149ef8a70f44b051af9ac0921a0622c2b479614c4f65b36 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e + languageName: node + linkType: hard + +"@istanbuljs/load-nyc-config@npm:^1.0.0": + version: 1.1.0 + resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" + dependencies: + camelcase: "npm:^5.3.1" + find-up: "npm:^4.1.0" + get-package-type: "npm:^0.1.0" + js-yaml: "npm:^3.13.1" + resolve-from: "npm:^5.0.0" + checksum: dd2a8b094887da5a1a2339543a4933d06db2e63cbbc2e288eb6431bd832065df0c099d091b6a67436e71b7d6bf85f01ce7c15f9253b4cbebcc3b9a496165ba42 + languageName: node + linkType: hard + +"@istanbuljs/schema@npm:^0.1.2": + version: 0.1.3 + resolution: "@istanbuljs/schema@npm:0.1.3" + checksum: 61c5286771676c9ca3eb2bd8a7310a9c063fb6e0e9712225c8471c582d157392c88f5353581c8c9adbe0dff98892317d2fdfc56c3499aa42e0194405206a963a + languageName: node + linkType: hard + +"@jest/console@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/console@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + jest-message-util: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + slash: "npm:^3.0.0" + checksum: 7be408781d0a6f657e969cbec13b540c329671819c2f57acfad0dae9dbfe2c9be859f38fe99b35dba9ff1536937dc6ddc69fdcd2794812fa3c647a1619797f6c + languageName: node + linkType: hard + +"@jest/core@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/core@npm:29.7.0" + dependencies: + "@jest/console": "npm:^29.7.0" + "@jest/reporters": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + ansi-escapes: "npm:^4.2.1" + chalk: "npm:^4.0.0" + ci-info: "npm:^3.2.0" + exit: "npm:^0.1.2" + graceful-fs: "npm:^4.2.9" + jest-changed-files: "npm:^29.7.0" + jest-config: "npm:^29.7.0" + jest-haste-map: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-regex-util: "npm:^29.6.3" + jest-resolve: "npm:^29.7.0" + jest-resolve-dependencies: "npm:^29.7.0" + jest-runner: "npm:^29.7.0" + jest-runtime: "npm:^29.7.0" + jest-snapshot: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-validate: "npm:^29.7.0" + jest-watcher: "npm:^29.7.0" + micromatch: "npm:^4.0.4" + pretty-format: "npm:^29.7.0" + slash: "npm:^3.0.0" + strip-ansi: "npm:^6.0.0" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: 934f7bf73190f029ac0f96662c85cd276ec460d407baf6b0dbaec2872e157db4d55a7ee0b1c43b18874602f662b37cb973dda469a4e6d88b4e4845b521adeeb2 + languageName: node + linkType: hard + +"@jest/environment@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/environment@npm:29.7.0" + dependencies: + "@jest/fake-timers": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + jest-mock: "npm:^29.7.0" + checksum: c7b1b40c618f8baf4d00609022d2afa086d9c6acc706f303a70bb4b67275868f620ad2e1a9efc5edd418906157337cce50589a627a6400bbdf117d351b91ef86 + languageName: node + linkType: hard + +"@jest/expect-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect-utils@npm:29.7.0" + dependencies: + jest-get-type: "npm:^29.6.3" + checksum: 60b79d23a5358dc50d9510d726443316253ecda3a7fb8072e1526b3e0d3b14f066ee112db95699b7a43ad3f0b61b750c72e28a5a1cac361d7a2bb34747fa938a + languageName: node + linkType: hard + +"@jest/expect@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect@npm:29.7.0" + dependencies: + expect: "npm:^29.7.0" + jest-snapshot: "npm:^29.7.0" + checksum: b41f193fb697d3ced134349250aed6ccea075e48c4f803159db102b826a4e473397c68c31118259868fd69a5cba70e97e1c26d2c2ff716ca39dc73a2ccec037e + languageName: node + linkType: hard + +"@jest/fake-timers@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/fake-timers@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + "@sinonjs/fake-timers": "npm:^10.0.2" + "@types/node": "npm:*" + jest-message-util: "npm:^29.7.0" + jest-mock: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + checksum: cf0a8bcda801b28dc2e2b2ba36302200ee8104a45ad7a21e6c234148932f826cb3bc57c8df3b7b815aeea0861d7b6ca6f0d4778f93b9219398ef28749e03595c + languageName: node + linkType: hard + +"@jest/globals@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/globals@npm:29.7.0" + dependencies: + "@jest/environment": "npm:^29.7.0" + "@jest/expect": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + jest-mock: "npm:^29.7.0" + checksum: a385c99396878fe6e4460c43bd7bb0a5cc52befb462cc6e7f2a3810f9e7bcce7cdeb51908fd530391ee452dc856c98baa2c5f5fa8a5b30b071d31ef7f6955cea + languageName: node + linkType: hard + +"@jest/reporters@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/reporters@npm:29.7.0" + dependencies: + "@bcoe/v8-coverage": "npm:^0.2.3" + "@jest/console": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@jridgewell/trace-mapping": "npm:^0.3.18" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + collect-v8-coverage: "npm:^1.0.0" + exit: "npm:^0.1.2" + glob: "npm:^7.1.3" + graceful-fs: "npm:^4.2.9" + istanbul-lib-coverage: "npm:^3.0.0" + istanbul-lib-instrument: "npm:^6.0.0" + istanbul-lib-report: "npm:^3.0.0" + istanbul-lib-source-maps: "npm:^4.0.0" + istanbul-reports: "npm:^3.1.3" + jest-message-util: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-worker: "npm:^29.7.0" + slash: "npm:^3.0.0" + string-length: "npm:^4.0.1" + strip-ansi: "npm:^6.0.0" + v8-to-istanbul: "npm:^9.0.1" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: a754402a799541c6e5aff2c8160562525e2a47e7d568f01ebfc4da66522de39cbb809bbb0a841c7052e4270d79214e70aec3c169e4eae42a03bc1a8a20cb9fa2 + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" + dependencies: + "@sinclair/typebox": "npm:^0.27.8" + checksum: b329e89cd5f20b9278ae1233df74016ebf7b385e0d14b9f4c1ad18d096c4c19d1e687aa113a9c976b16ec07f021ae53dea811fb8c1248a50ac34fbe009fdf6be + languageName: node + linkType: hard + +"@jest/source-map@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/source-map@npm:29.6.3" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.18" + callsites: "npm:^3.0.0" + graceful-fs: "npm:^4.2.9" + checksum: a2f177081830a2e8ad3f2e29e20b63bd40bade294880b595acf2fc09ec74b6a9dd98f126a2baa2bf4941acd89b13a4ade5351b3885c224107083a0059b60a219 + languageName: node + linkType: hard + +"@jest/test-result@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-result@npm:29.7.0" + dependencies: + "@jest/console": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/istanbul-lib-coverage": "npm:^2.0.0" + collect-v8-coverage: "npm:^1.0.0" + checksum: 7de54090e54a674ca173470b55dc1afdee994f2d70d185c80236003efd3fa2b753fff51ffcdda8e2890244c411fd2267529d42c4a50a8303755041ee493e6a04 + languageName: node + linkType: hard + +"@jest/test-sequencer@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-sequencer@npm:29.7.0" + dependencies: + "@jest/test-result": "npm:^29.7.0" + graceful-fs: "npm:^4.2.9" + jest-haste-map: "npm:^29.7.0" + slash: "npm:^3.0.0" + checksum: 593a8c4272797bb5628984486080cbf57aed09c7cfdc0a634e8c06c38c6bef329c46c0016e84555ee55d1cd1f381518cf1890990ff845524c1123720c8c1481b + languageName: node + linkType: hard + +"@jest/transform@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/transform@npm:29.7.0" + dependencies: + "@babel/core": "npm:^7.11.6" + "@jest/types": "npm:^29.6.3" + "@jridgewell/trace-mapping": "npm:^0.3.18" + babel-plugin-istanbul: "npm:^6.1.1" + chalk: "npm:^4.0.0" + convert-source-map: "npm:^2.0.0" + fast-json-stable-stringify: "npm:^2.1.0" + graceful-fs: "npm:^4.2.9" + jest-haste-map: "npm:^29.7.0" + jest-regex-util: "npm:^29.6.3" + jest-util: "npm:^29.7.0" + micromatch: "npm:^4.0.4" + pirates: "npm:^4.0.4" + slash: "npm:^3.0.0" + write-file-atomic: "npm:^4.0.2" + checksum: 7f4a7f73dcf45dfdf280c7aa283cbac7b6e5a904813c3a93ead7e55873761fc20d5c4f0191d2019004fac6f55f061c82eb3249c2901164ad80e362e7a7ede5a6 + languageName: node + linkType: hard + +"@jest/types@npm:^27.5.1": + version: 27.5.1 + resolution: "@jest/types@npm:27.5.1" + dependencies: + "@types/istanbul-lib-coverage": "npm:^2.0.0" + "@types/istanbul-reports": "npm:^3.0.0" + "@types/node": "npm:*" + "@types/yargs": "npm:^16.0.0" + chalk: "npm:^4.0.0" + checksum: 4598b302398db0eb77168b75a6c58148ea02cc9b9f21c5d1bbe985c1c9257110a5653cf7b901c3cab87fba231e3fed83633687f1c0903b4bc6939ab2a8452504 + languageName: node + linkType: hard + +"@jest/types@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/types@npm:29.6.3" + dependencies: + "@jest/schemas": "npm:^29.6.3" + "@types/istanbul-lib-coverage": "npm:^2.0.0" + "@types/istanbul-reports": "npm:^3.0.0" + "@types/node": "npm:*" + "@types/yargs": "npm:^17.0.8" + chalk: "npm:^4.0.0" + checksum: ea4e493dd3fb47933b8ccab201ae573dcc451f951dc44ed2a86123cd8541b82aa9d2b1031caf9b1080d6673c517e2dcc25a44b2dc4f3fbc37bfc965d444888c0 + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": + version: 0.3.3 + resolution: "@jridgewell/gen-mapping@npm:0.3.3" + dependencies: + "@jridgewell/set-array": "npm:^1.0.1" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + "@jridgewell/trace-mapping": "npm:^0.3.9" + checksum: 376fc11cf5a967318ba3ddd9d8e91be528eab6af66810a713c49b0c3f8dc67e9949452c51c38ab1b19aa618fb5e8594da5a249977e26b1e7fea1ee5a1fcacc74 + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.1 + resolution: "@jridgewell/resolve-uri@npm:3.1.1" + checksum: 0dbc9e29bc640bbbdc5b9876d2859c69042bfcf1423c1e6421bcca53e826660bff4e41c7d4bcb8dbea696404231a6f902f76ba41835d049e20f2dd6cffb713bf + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.0.1": + version: 1.1.2 + resolution: "@jridgewell/set-array@npm:1.1.2" + checksum: bc7ab4c4c00470de4e7562ecac3c0c84f53e7ee8a711e546d67c47da7febe7c45cd67d4d84ee3c9b2c05ae8e872656cdded8a707a283d30bd54fbc65aef821ab + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: 0c6b5ae663087558039052a626d2d7ed5208da36cfd707dcc5cea4a07cfc918248403dcb5989a8f7afaf245ce0573b7cc6fd94c4a30453bd10e44d9363940ba5 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:0.3.9": + version: 0.3.9 + resolution: "@jridgewell/trace-mapping@npm:0.3.9" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.0.3" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + checksum: fa425b606d7c7ee5bfa6a31a7b050dd5814b4082f318e0e4190f991902181b4330f43f4805db1dd4f2433fd0ed9cc7a7b9c2683f1deeab1df1b0a98b1e24055b + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.19 + resolution: "@jridgewell/trace-mapping@npm:0.3.19" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 845e6c6efca621b2b85e4d13fd25c319b6e4ab1ea78d4385ff6c0f78322ea0fcdfec8ac763aa4b56e8378c96d7bef101a2638c7a1a076f7d62f6376230c940a7 + languageName: node + linkType: hard + +"@lukeed/ms@npm:^2.0.1": + version: 2.0.2 + resolution: "@lukeed/ms@npm:2.0.2" + checksum: 843b922717313bcde4943f478145d8bc13115b9b91d83bbaed53739b5644122984412310aed574792f4e6b492f2cbda178175f601856d310f67e14834c3f17a0 + languageName: node + linkType: hard + +"@mapbox/node-pre-gyp@npm:^1.0.5": + version: 1.0.11 + resolution: "@mapbox/node-pre-gyp@npm:1.0.11" + dependencies: + detect-libc: "npm:^2.0.0" + https-proxy-agent: "npm:^5.0.0" + make-dir: "npm:^3.1.0" + node-fetch: "npm:^2.6.7" + nopt: "npm:^5.0.0" + npmlog: "npm:^5.0.1" + rimraf: "npm:^3.0.2" + semver: "npm:^7.3.5" + tar: "npm:^6.1.11" + bin: + node-pre-gyp: bin/node-pre-gyp + checksum: 2b24b93c31beca1c91336fa3b3769fda98e202fb7f9771f0f4062588d36dcc30fcf8118c36aa747fa7f7610d8cf601872bdaaf62ce7822bb08b545d1bbe086cc + languageName: node + linkType: hard + +"@netlify/binary-info@npm:^1.0.0": + version: 1.0.0 + resolution: "@netlify/binary-info@npm:1.0.0" + checksum: 5ece1c6308b052f3967666cfe394cb1a0d9824f2dca0b873cc97b7e803cb3fbe282638b6ab9c0e659dae5a97c05bb32562333ce13faf283dfd9983007ed54a00 + languageName: node + linkType: hard + +"@netlify/blobs@npm:6.3.1, @netlify/blobs@npm:^6.3.1": + version: 6.3.1 + resolution: "@netlify/blobs@npm:6.3.1" + checksum: acf646e22d65194e3b74e5d97ba7d84908acb7cad9eb90fff4b487fbb9ed7e1fa32a4e14a7ba984c7919747cfe901c7a07c40c07e1b2284e20e9a037bd7aba3b + languageName: node + linkType: hard + +"@netlify/build-info@npm:7.11.3": + version: 7.11.3 + resolution: "@netlify/build-info@npm:7.11.3" + dependencies: + "@bugsnag/js": "npm:^7.20.0" + dot-prop: "npm:^7.2.0" + find-up: "npm:^6.3.0" + minimatch: "npm:^9.0.0" + read-pkg: "npm:^7.1.0" + semver: "npm:^7.3.8" + toml: "npm:^3.0.0" + yaml: "npm:^2.1.3" + yargs: "npm:^17.6.0" + bin: + build-info: bin.js + checksum: 18ffdfca32daefc2e76b62c56f68153990d5eca826a93d24ef40461e8868c9fd1d1e4b465325e94c3c9459322cf8d1f846a29c34bc283eb4bb096cad68d277d8 + languageName: node + linkType: hard + +"@netlify/build@npm:29.31.0": + version: 29.31.0 + resolution: "@netlify/build@npm:29.31.0" + dependencies: + "@bugsnag/js": "npm:^7.0.0" + "@honeycombio/opentelemetry-node": "npm:^0.5.0" + "@netlify/blobs": "npm:^6.3.1" + "@netlify/cache-utils": "npm:^5.1.5" + "@netlify/config": "npm:^20.10.0" + "@netlify/edge-bundler": "npm:10.1.3" + "@netlify/framework-info": "npm:^9.8.10" + "@netlify/functions-utils": "npm:^5.2.45" + "@netlify/git-utils": "npm:^5.1.1" + "@netlify/plugins-list": "npm:^6.72.0" + "@netlify/run-utils": "npm:^5.1.1" + "@netlify/zip-it-and-ship-it": "npm:9.28.1" + "@opentelemetry/api": "npm:^1.4.1" + "@opentelemetry/core": "npm:^1.17.1" + "@sindresorhus/slugify": "npm:^2.0.0" + ansi-escapes: "npm:^6.0.0" + chalk: "npm:^5.0.0" + clean-stack: "npm:^4.0.0" + execa: "npm:^6.0.0" + fdir: "npm:^6.0.1" + figures: "npm:^5.0.0" + filter-obj: "npm:^5.0.0" + got: "npm:^12.0.0" + hot-shots: "npm:10.0.0" + indent-string: "npm:^5.0.0" + is-plain-obj: "npm:^4.0.0" + js-yaml: "npm:^4.0.0" + keep-func-props: "npm:^4.0.0" + locate-path: "npm:^7.0.0" + log-process-errors: "npm:^8.0.0" + map-obj: "npm:^5.0.0" + memoize-one: "npm:^6.0.0" + node-fetch: "npm:^3.3.2" + os-name: "npm:^5.0.0" + p-event: "npm:^5.0.0" + p-every: "npm:^2.0.0" + p-filter: "npm:^3.0.0" + p-locate: "npm:^6.0.0" + p-map: "npm:^6.0.0" + p-reduce: "npm:^3.0.0" + path-exists: "npm:^5.0.0" + path-type: "npm:^5.0.0" + pkg-dir: "npm:^7.0.0" + pretty-ms: "npm:^8.0.0" + ps-list: "npm:^8.0.0" + read-pkg-up: "npm:^9.0.0" + readdirp: "npm:^3.4.0" + resolve: "npm:^2.0.0-next.1" + rfdc: "npm:^1.3.0" + safe-json-stringify: "npm:^1.2.0" + semver: "npm:^7.3.8" + string-width: "npm:^5.0.0" + strip-ansi: "npm:^7.0.0" + supports-color: "npm:^9.0.0" + terminal-link: "npm:^3.0.0" + ts-node: "npm:^10.9.1" + typescript: "npm:^5.0.0" + uuid: "npm:^9.0.0" + yargs: "npm:^17.6.0" + peerDependencies: + "@netlify/opentelemetry-sdk-setup": ^1.0.1 + peerDependenciesMeta: + "@netlify/opentelemetry-sdk-setup": + optional: true + bin: + netlify-build: bin.js + checksum: 1f3d5a0461b402b5edcdb93df9080a660f4ff4924f2c4741ad3b7b3364e39487f2ddf912fa842e17456f0c84094d064c35db31ea2f51fa7fe5b0ddb15fa3f3b2 + languageName: node + linkType: hard + +"@netlify/cache-utils@npm:^5.1.5": + version: 5.1.5 + resolution: "@netlify/cache-utils@npm:5.1.5" + dependencies: + cpy: "npm:^9.0.0" + get-stream: "npm:^6.0.0" + globby: "npm:^13.0.0" + junk: "npm:^4.0.0" + locate-path: "npm:^7.0.0" + move-file: "npm:^3.0.0" + path-exists: "npm:^5.0.0" + readdirp: "npm:^3.4.0" + checksum: 5c4656d1f094aad8eaf8e1a92e119f9a7f0023a2ca54093caa4ac51dd362c96392d423bc11c150f60c633a6d1091ed676990e4e74e9850cf33312b9debed462e + languageName: node + linkType: hard + +"@netlify/config@npm:20.10.0, @netlify/config@npm:^20.10.0": + version: 20.10.0 + resolution: "@netlify/config@npm:20.10.0" + dependencies: + chalk: "npm:^5.0.0" + cron-parser: "npm:^4.1.0" + deepmerge: "npm:^4.2.2" + dot-prop: "npm:^7.0.0" + execa: "npm:^6.0.0" + fast-safe-stringify: "npm:^2.0.7" + figures: "npm:^5.0.0" + filter-obj: "npm:^5.0.0" + find-up: "npm:^6.0.0" + indent-string: "npm:^5.0.0" + is-plain-obj: "npm:^4.0.0" + js-yaml: "npm:^4.0.0" + map-obj: "npm:^5.0.0" + netlify: "npm:^13.1.11" + netlify-headers-parser: "npm:^7.1.2" + netlify-redirect-parser: "npm:^14.2.0" + node-fetch: "npm:^3.3.1" + omit.js: "npm:^2.0.2" + p-locate: "npm:^6.0.0" + path-type: "npm:^5.0.0" + toml: "npm:^3.0.0" + tomlify-j0.4: "npm:^3.0.0" + validate-npm-package-name: "npm:^4.0.0" + yargs: "npm:^17.6.0" + bin: + netlify-config: bin.js + checksum: 9f93783a359317569a97afb1f714152a05f9099f62d3b44ea15935734c20480dfe575d1664595965eea47379a1540c1dce71b30524731e280d75ec43d514a97c + languageName: node + linkType: hard + +"@netlify/edge-bundler@npm:10.1.3": + version: 10.1.3 + resolution: "@netlify/edge-bundler@npm:10.1.3" + dependencies: + "@import-maps/resolve": "npm:^1.0.1" + "@vercel/nft": "npm:^0.24.3" + ajv: "npm:^8.11.2" + ajv-errors: "npm:^3.0.0" + better-ajv-errors: "npm:^1.2.0" + common-path-prefix: "npm:^3.0.0" + env-paths: "npm:^3.0.0" + esbuild: "npm:0.19.6" + execa: "npm:^6.0.0" + find-up: "npm:^6.3.0" + get-package-name: "npm:^2.2.0" + get-port: "npm:^6.1.2" + is-path-inside: "npm:^4.0.0" + jsonc-parser: "npm:^3.2.0" + node-fetch: "npm:^3.1.1" + node-stream-zip: "npm:^1.15.0" + p-retry: "npm:^5.1.1" + p-wait-for: "npm:^4.1.0" + path-key: "npm:^4.0.0" + regexp-tree: "npm:^0.1.24" + semver: "npm:^7.3.8" + tmp-promise: "npm:^3.0.3" + urlpattern-polyfill: "npm:8.0.2" + uuid: "npm:^9.0.0" + checksum: e1584a83f8ea5d9d1d304fbd8ca32fc56310c25a76aa87c0853f43ad96f516fd4b75dc08f99d6f320276c222a57308dd78694fdedf963dce3d31917f2d361fa9 + languageName: node + linkType: hard + +"@netlify/framework-info@npm:^9.8.10": + version: 9.8.10 + resolution: "@netlify/framework-info@npm:9.8.10" + dependencies: + ajv: "npm:^8.12.0" + filter-obj: "npm:^5.0.0" + find-up: "npm:^6.3.0" + is-plain-obj: "npm:^4.0.0" + locate-path: "npm:^7.0.0" + p-filter: "npm:^3.0.0" + p-locate: "npm:^6.0.0" + process: "npm:^0.11.10" + read-pkg-up: "npm:^9.0.0" + semver: "npm:^7.3.8" + checksum: 3738f095e6802ab1dfc03225f9eb3032abad9af05441b693d60ec06a89f8f2313e4a9c31ff9225c1f0ad487010e111be08cceb20909169305e6d807e39c0a176 + languageName: node + linkType: hard + +"@netlify/functions-utils@npm:^5.2.45": + version: 5.2.45 + resolution: "@netlify/functions-utils@npm:5.2.45" + dependencies: + "@netlify/zip-it-and-ship-it": "npm:9.28.1" + cpy: "npm:^9.0.0" + path-exists: "npm:^5.0.0" + checksum: 0595c4084fe05311afd19da7f0c43f0b31228f35769a24b16d45c751455709340648e7ff59d3d3b1dc554250198497cc7c83fcb5939c751f84529e21c02dd09c + languageName: node + linkType: hard + +"@netlify/functions@npm:^2.4.0": + version: 2.4.0 + resolution: "@netlify/functions@npm:2.4.0" + dependencies: + "@netlify/serverless-functions-api": "npm:1.11.0" + is-promise: "npm:^4.0.0" + checksum: 1de56e6c46a065f8e2530451484776782d39fdb4fb7c0a25388e688204c041bbd4a28ce7e3169d2cbbf6b638c03dce91130554e81f0ca24774b3edd48cde3e7b + languageName: node + linkType: hard + +"@netlify/git-utils@npm:^5.1.1": + version: 5.1.1 + resolution: "@netlify/git-utils@npm:5.1.1" + dependencies: + execa: "npm:^6.0.0" + map-obj: "npm:^5.0.0" + micromatch: "npm:^4.0.2" + moize: "npm:^6.1.3" + path-exists: "npm:^5.0.0" + checksum: 50fb6621bc945df6b6f958c6c26f44d67cd7ebb019a76109aea755d752be52b60868f021b1b47eb55469e063fa1b160a41bd3b29efb1f9505ac141e9264f9244 + languageName: node + linkType: hard + +"@netlify/local-functions-proxy-darwin-arm64@npm:1.1.1": + version: 1.1.1 + resolution: "@netlify/local-functions-proxy-darwin-arm64@npm:1.1.1" + bin: + local-functions-proxy: bin/local-functions-proxy + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@netlify/local-functions-proxy-darwin-x64@npm:1.1.1": + version: 1.1.1 + resolution: "@netlify/local-functions-proxy-darwin-x64@npm:1.1.1" + bin: + local-functions-proxy: bin/local-functions-proxy + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@netlify/local-functions-proxy-freebsd-arm64@npm:1.1.1": + version: 1.1.1 + resolution: "@netlify/local-functions-proxy-freebsd-arm64@npm:1.1.1" + bin: + local-functions-proxy: bin/local-functions-proxy + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@netlify/local-functions-proxy-freebsd-x64@npm:1.1.1": + version: 1.1.1 + resolution: "@netlify/local-functions-proxy-freebsd-x64@npm:1.1.1" + bin: + local-functions-proxy: bin/local-functions-proxy + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@netlify/local-functions-proxy-linux-arm64@npm:1.1.1": + version: 1.1.1 + resolution: "@netlify/local-functions-proxy-linux-arm64@npm:1.1.1" + bin: + local-functions-proxy: bin/local-functions-proxy + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@netlify/local-functions-proxy-linux-arm@npm:1.1.1": + version: 1.1.1 + resolution: "@netlify/local-functions-proxy-linux-arm@npm:1.1.1" + bin: + local-functions-proxy: bin/local-functions-proxy + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@netlify/local-functions-proxy-linux-ia32@npm:1.1.1": + version: 1.1.1 + resolution: "@netlify/local-functions-proxy-linux-ia32@npm:1.1.1" + bin: + local-functions-proxy: bin/local-functions-proxy + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@netlify/local-functions-proxy-linux-ppc64@npm:1.1.1": + version: 1.1.1 + resolution: "@netlify/local-functions-proxy-linux-ppc64@npm:1.1.1" + bin: + local-functions-proxy: bin/local-functions-proxy + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@netlify/local-functions-proxy-linux-x64@npm:1.1.1": + version: 1.1.1 + resolution: "@netlify/local-functions-proxy-linux-x64@npm:1.1.1" + bin: + local-functions-proxy: bin/local-functions-proxy + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@netlify/local-functions-proxy-openbsd-x64@npm:1.1.1": + version: 1.1.1 + resolution: "@netlify/local-functions-proxy-openbsd-x64@npm:1.1.1" + bin: + local-functions-proxy: bin/local-functions-proxy + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@netlify/local-functions-proxy-win32-ia32@npm:1.1.1": + version: 1.1.1 + resolution: "@netlify/local-functions-proxy-win32-ia32@npm:1.1.1" + bin: + local-functions-proxy.exe: bin/local-functions-proxy.exe + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@netlify/local-functions-proxy-win32-x64@npm:1.1.1": + version: 1.1.1 + resolution: "@netlify/local-functions-proxy-win32-x64@npm:1.1.1" + bin: + local-functions-proxy.exe: bin/local-functions-proxy.exe + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@netlify/local-functions-proxy@npm:1.1.1": + version: 1.1.1 + resolution: "@netlify/local-functions-proxy@npm:1.1.1" + dependencies: + "@netlify/local-functions-proxy-darwin-arm64": "npm:1.1.1" + "@netlify/local-functions-proxy-darwin-x64": "npm:1.1.1" + "@netlify/local-functions-proxy-freebsd-arm64": "npm:1.1.1" + "@netlify/local-functions-proxy-freebsd-x64": "npm:1.1.1" + "@netlify/local-functions-proxy-linux-arm": "npm:1.1.1" + "@netlify/local-functions-proxy-linux-arm64": "npm:1.1.1" + "@netlify/local-functions-proxy-linux-ia32": "npm:1.1.1" + "@netlify/local-functions-proxy-linux-ppc64": "npm:1.1.1" + "@netlify/local-functions-proxy-linux-x64": "npm:1.1.1" + "@netlify/local-functions-proxy-openbsd-x64": "npm:1.1.1" + "@netlify/local-functions-proxy-win32-ia32": "npm:1.1.1" + "@netlify/local-functions-proxy-win32-x64": "npm:1.1.1" + dependenciesMeta: + "@netlify/local-functions-proxy-darwin-arm64": + optional: true + "@netlify/local-functions-proxy-darwin-x64": + optional: true + "@netlify/local-functions-proxy-freebsd-arm64": + optional: true + "@netlify/local-functions-proxy-freebsd-x64": + optional: true + "@netlify/local-functions-proxy-linux-arm": + optional: true + "@netlify/local-functions-proxy-linux-arm64": + optional: true + "@netlify/local-functions-proxy-linux-ia32": + optional: true + "@netlify/local-functions-proxy-linux-ppc64": + optional: true + "@netlify/local-functions-proxy-linux-x64": + optional: true + "@netlify/local-functions-proxy-openbsd-x64": + optional: true + "@netlify/local-functions-proxy-win32-ia32": + optional: true + "@netlify/local-functions-proxy-win32-x64": + optional: true + checksum: 96374ec9478b8beab0128492cb2439f717a9ad61ae23961aeb9f964f6d8cac57e342ba8ce4c5defcb2b0b72c6ac6e293001ac7afe5705bf43137872344c5a363 + languageName: node + linkType: hard + +"@netlify/node-cookies@npm:^0.1.0": + version: 0.1.0 + resolution: "@netlify/node-cookies@npm:0.1.0" + checksum: 5d8034d1fd581930e8100af4e5710b79cb3bb0a0b743c716d0d8a1c347aad767fa75130323f1aaee78080a026a4cafd4eef7d11953de01098a661d765a497b16 + languageName: node + linkType: hard + +"@netlify/open-api@npm:^2.26.0": + version: 2.26.0 + resolution: "@netlify/open-api@npm:2.26.0" + checksum: 543f6a4aa92064d62ba928b6dcc301b953937cb02e84123473ea833fb2de33b93a10b49b9cce5ce87dc69a4cba68d537c9adedc1eac3bd4b08056a66f0a6a82e + languageName: node + linkType: hard + +"@netlify/plugins-list@npm:^6.72.0": + version: 6.73.0 + resolution: "@netlify/plugins-list@npm:6.73.0" + checksum: c790c504bf847f8387f2564de1011fb068cc568689134b5473a407d18d27bec685c6058fc0bef6a0f7acf668382ba7cecc9e36282291882709b7455afb1df3f3 + languageName: node + linkType: hard + +"@netlify/run-utils@npm:^5.1.1": + version: 5.1.1 + resolution: "@netlify/run-utils@npm:5.1.1" + dependencies: + execa: "npm:^6.0.0" + checksum: 284fab651b8e13e4fc21e9026aae7cff3a4f1b482a9977524ef189e01c5bb477cc579e1dcf6166c4d3c8529ff4e9ec62e179cc49966dd91769b7ca8c35c31670 + languageName: node + linkType: hard + +"@netlify/serverless-functions-api@npm:1.11.0": + version: 1.11.0 + resolution: "@netlify/serverless-functions-api@npm:1.11.0" + dependencies: + "@netlify/node-cookies": "npm:^0.1.0" + urlpattern-polyfill: "npm:8.0.2" + checksum: 491f80fdb257cebc2d2d029e2b7e153f609cf657faf8b73d36934359c0a504981f83d49d5426d6e0e1d3bc7019f03c815bfcae4a91dd061aef29de1eb046627f + languageName: node + linkType: hard + +"@netlify/serverless-functions-api@npm:^1.12.1": + version: 1.12.3 + resolution: "@netlify/serverless-functions-api@npm:1.12.3" + dependencies: + "@netlify/node-cookies": "npm:^0.1.0" + urlpattern-polyfill: "npm:8.0.2" + checksum: 591966071faf68eb620621d30f7d7bf4c336fb57699368d0fd89c77dce87c7c67ea375c8f80901a301a09026be0e55b099c44259bc7a4695890216a2dc8ce82a + languageName: node + linkType: hard + +"@netlify/zip-it-and-ship-it@npm:9.28.1": + version: 9.28.1 + resolution: "@netlify/zip-it-and-ship-it@npm:9.28.1" + dependencies: + "@babel/parser": "npm:^7.22.5" + "@babel/types": "npm:7.23.4" + "@netlify/binary-info": "npm:^1.0.0" + "@netlify/serverless-functions-api": "npm:^1.12.1" + "@vercel/nft": "npm:^0.23.0" + archiver: "npm:^6.0.0" + common-path-prefix: "npm:^3.0.0" + cp-file: "npm:^10.0.0" + es-module-lexer: "npm:^1.0.0" + esbuild: "npm:0.19.6" + execa: "npm:^6.0.0" + fast-glob: "npm:^3.3.2" + filter-obj: "npm:^5.0.0" + find-up: "npm:^6.0.0" + glob: "npm:^8.0.3" + is-builtin-module: "npm:^3.1.0" + is-path-inside: "npm:^4.0.0" + junk: "npm:^4.0.0" + locate-path: "npm:^7.0.0" + merge-options: "npm:^3.0.4" + minimatch: "npm:^9.0.0" + normalize-path: "npm:^3.0.0" + p-map: "npm:^5.0.0" + path-exists: "npm:^5.0.0" + precinct: "npm:^11.0.0" + require-package-name: "npm:^2.0.1" + resolve: "npm:^2.0.0-next.1" + semver: "npm:^7.3.8" + tmp-promise: "npm:^3.0.2" + toml: "npm:^3.0.0" + unixify: "npm:^1.0.0" + urlpattern-polyfill: "npm:8.0.2" + yargs: "npm:^17.0.0" + bin: + zip-it-and-ship-it: dist/bin.js + checksum: c906f6199ec40deafd1946831026c72b011054f6c2387d22baef7c8d69d105f47921a0de244af503c89f2eae20d445bd3e2fc4fb76b62afad28df088c611596d + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^2.0.0": + version: 2.2.0 + resolution: "@npmcli/agent@npm:2.2.0" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.1" + checksum: 7b89590598476dda88e79c473766b67c682aae6e0ab0213491daa6083dcc0c171f86b3868f5506f22c09aa5ea69ad7dfb78f4bf39a8dca375d89a42f408645b3 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/fs@npm:3.1.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 162b4a0b8705cd6f5c2470b851d1dc6cd228c86d2170e1769d738c1fbb69a87160901411c3c035331e9e99db72f1f1099a8b734bf1637cc32b9a5be1660e4e1e + languageName: node + linkType: hard + +"@npmcli/map-workspaces@npm:^3.0.4": + version: 3.0.4 + resolution: "@npmcli/map-workspaces@npm:3.0.4" + dependencies: + "@npmcli/name-from-folder": "npm:^2.0.0" + glob: "npm:^10.2.2" + minimatch: "npm:^9.0.0" + read-package-json-fast: "npm:^3.0.0" + checksum: caeb5f911d9b7ae0be01436442e6ec6b25aef750fe923de7a653eb62999d35b9f8be67c3f856790350ac86d9cea4a52532859b621eea81738f576302ecdd7475 + languageName: node + linkType: hard + +"@npmcli/name-from-folder@npm:^2.0.0": + version: 2.0.0 + resolution: "@npmcli/name-from-folder@npm:2.0.0" + checksum: 1aa551771d98ab366d4cb06b33efd3bb62b609942f6d9c3bb667c10e5bb39a223d3e330022bc980a44402133e702ae67603862099ac8254dad11f90e77409827 + languageName: node + linkType: hard + +"@octokit/app@npm:^14.0.2": + version: 14.0.2 + resolution: "@octokit/app@npm:14.0.2" + dependencies: + "@octokit/auth-app": "npm:^6.0.0" + "@octokit/auth-unauthenticated": "npm:^5.0.0" + "@octokit/core": "npm:^5.0.0" + "@octokit/oauth-app": "npm:^6.0.0" + "@octokit/plugin-paginate-rest": "npm:^9.0.0" + "@octokit/types": "npm:^12.0.0" + "@octokit/webhooks": "npm:^12.0.4" + checksum: 92b4193bfbe0b12196329f7b7d1d3f038575eb54680a95a68a70b62f5ecaa23de9a240a7ad64711f1639266f37c80f09a8975ae8a754fd680384dc1410ae477b + languageName: node + linkType: hard + +"@octokit/auth-app@npm:^4.0.2": + version: 4.0.13 + resolution: "@octokit/auth-app@npm:4.0.13" + dependencies: + "@octokit/auth-oauth-app": "npm:^5.0.0" + "@octokit/auth-oauth-user": "npm:^2.0.0" + "@octokit/request": "npm:^6.0.0" + "@octokit/request-error": "npm:^3.0.0" + "@octokit/types": "npm:^9.0.0" + deprecation: "npm:^2.3.1" + lru-cache: "npm:^9.0.0" + universal-github-app-jwt: "npm:^1.1.1" + universal-user-agent: "npm:^6.0.0" + checksum: 71289c45180b564f80cf508e15a5438678c9a16d4e2911e33f949644b6d1ac91294ab3e1af4d9f43e96763a79ae0c12ec91a2fdebbeea95d3f9b4a280f8ea1b4 + languageName: node + linkType: hard + +"@octokit/auth-app@npm:^6.0.0": + version: 6.0.1 + resolution: "@octokit/auth-app@npm:6.0.1" + dependencies: + "@octokit/auth-oauth-app": "npm:^7.0.0" + "@octokit/auth-oauth-user": "npm:^4.0.0" + "@octokit/request": "npm:^8.0.2" + "@octokit/request-error": "npm:^5.0.0" + "@octokit/types": "npm:^12.0.0" + deprecation: "npm:^2.3.1" + lru-cache: "npm:^10.0.0" + universal-github-app-jwt: "npm:^1.1.1" + universal-user-agent: "npm:^6.0.0" + checksum: b9dfbeaf90c5e999461701ce66f26a937a3acc7ceed81b0aaaffae181630086cf4cd7e82c6ecff7f025ce75726cd890ca116f7f5c5020e9786a4deb75af50c45 + languageName: node + linkType: hard + +"@octokit/auth-oauth-app@npm:^5.0.0": + version: 5.0.6 + resolution: "@octokit/auth-oauth-app@npm:5.0.6" + dependencies: + "@octokit/auth-oauth-device": "npm:^4.0.0" + "@octokit/auth-oauth-user": "npm:^2.0.0" + "@octokit/request": "npm:^6.0.0" + "@octokit/types": "npm:^9.0.0" + "@types/btoa-lite": "npm:^1.0.0" + btoa-lite: "npm:^1.0.0" + universal-user-agent: "npm:^6.0.0" + checksum: 94760dc9799c8a5b3f723892272b8852f8f15f5a1ff0d2eb4d145b984cb305622a625ffcc332f18f9359c6cc43ceb5fe07e31d4079e7b2a436ecbaed093ae986 + languageName: node + linkType: hard + +"@octokit/auth-oauth-app@npm:^7.0.0": + version: 7.0.1 + resolution: "@octokit/auth-oauth-app@npm:7.0.1" + dependencies: + "@octokit/auth-oauth-device": "npm:^6.0.0" + "@octokit/auth-oauth-user": "npm:^4.0.0" + "@octokit/request": "npm:^8.0.2" + "@octokit/types": "npm:^12.0.0" + "@types/btoa-lite": "npm:^1.0.0" + btoa-lite: "npm:^1.0.0" + universal-user-agent: "npm:^6.0.0" + checksum: 721bc0bfe31263f68a2f8c6d9d19e55853535f8d08efd2460e33f33b8a0c40ece943018b180635ffad34006fa45e6721b2dbc644675d4a3a8fb0222b0775e831 + languageName: node + linkType: hard + +"@octokit/auth-oauth-device@npm:^4.0.0": + version: 4.0.5 + resolution: "@octokit/auth-oauth-device@npm:4.0.5" + dependencies: + "@octokit/oauth-methods": "npm:^2.0.0" + "@octokit/request": "npm:^6.0.0" + "@octokit/types": "npm:^9.0.0" + universal-user-agent: "npm:^6.0.0" + checksum: e962835dcbb2138aa75077284968eb8e2d244859ed8c72dd0ecf2e55724c1bdedbe32e94bcd4f0a44c3e2fc382433ac10026ec0808b9b8bccece1741160227a1 + languageName: node + linkType: hard + +"@octokit/auth-oauth-device@npm:^6.0.0": + version: 6.0.1 + resolution: "@octokit/auth-oauth-device@npm:6.0.1" + dependencies: + "@octokit/oauth-methods": "npm:^4.0.0" + "@octokit/request": "npm:^8.0.0" + "@octokit/types": "npm:^12.0.0" + universal-user-agent: "npm:^6.0.0" + checksum: 9e969de43e5238bef62def6897dddf5c544fce2e582e3ce8ae2889d6ac9de954930e360b526d7f94c11a093709faff8ab4c77039ab218dde679865b09d85baf5 + languageName: node + linkType: hard + +"@octokit/auth-oauth-user@npm:^2.0.0": + version: 2.1.2 + resolution: "@octokit/auth-oauth-user@npm:2.1.2" + dependencies: + "@octokit/auth-oauth-device": "npm:^4.0.0" + "@octokit/oauth-methods": "npm:^2.0.0" + "@octokit/request": "npm:^6.0.0" + "@octokit/types": "npm:^9.0.0" + btoa-lite: "npm:^1.0.0" + universal-user-agent: "npm:^6.0.0" + checksum: 3adc7aa7cf277d50572120be22832a4ef2f88103371d888be6ad3a9d58b4b40f3c2e3b3dca4df583dd4c48f45ed0c4825c426fc1ff8a4570e9cba2857004452e + languageName: node + linkType: hard + +"@octokit/auth-oauth-user@npm:^4.0.0": + version: 4.0.1 + resolution: "@octokit/auth-oauth-user@npm:4.0.1" + dependencies: + "@octokit/auth-oauth-device": "npm:^6.0.0" + "@octokit/oauth-methods": "npm:^4.0.0" + "@octokit/request": "npm:^8.0.2" + "@octokit/types": "npm:^12.0.0" + btoa-lite: "npm:^1.0.0" + universal-user-agent: "npm:^6.0.0" + checksum: e887674a65a6083b4ad1d4ab9f48da71d3b386d5eba3c9715b6d9bc2b3837217d9f307c5a2da568941ff138a55b8113c077e952ca8d0295e96de895a521d6a6f + languageName: node + linkType: hard + +"@octokit/auth-token@npm:^2.4.4": + version: 2.5.0 + resolution: "@octokit/auth-token@npm:2.5.0" + dependencies: + "@octokit/types": "npm:^6.0.3" + checksum: e9f757b6acdee91885dab97069527c86829da0dc60476c38cdff3a739ff47fd026262715965f91e84ec9d01bc43d02678bc8ed472a85395679af621b3ddbe045 + languageName: node + linkType: hard + +"@octokit/auth-token@npm:^3.0.0": + version: 3.0.4 + resolution: "@octokit/auth-token@npm:3.0.4" + checksum: abdf5e2da36344de9727c70ba782d58004f5ae1da0f65fa9bc9216af596ef23c0e4675f386df2f6886806612558091d603564051b693b0ad1986aa6160b7a231 + languageName: node + linkType: hard + +"@octokit/auth-token@npm:^4.0.0": + version: 4.0.0 + resolution: "@octokit/auth-token@npm:4.0.0" + checksum: 57acaa6c394c5abab2f74e8e1dcf4e7a16b236f713c77a54b8f08e2d14114de94b37946259e33ec2aab0566b26f724c2b71d2602352b59e541a9854897618f3c + languageName: node + linkType: hard + +"@octokit/auth-unauthenticated@npm:^3.0.0": + version: 3.0.5 + resolution: "@octokit/auth-unauthenticated@npm:3.0.5" + dependencies: + "@octokit/request-error": "npm:^3.0.0" + "@octokit/types": "npm:^9.0.0" + checksum: d5c3e2f673762447207eff1fe0e09f2eba42c0cb9442f10b5660fa115a18fdb206f758b218d6d1ab048967d53f9da67c8baf4d2a6e46bb9dbe113ce24c009a0a + languageName: node + linkType: hard + +"@octokit/auth-unauthenticated@npm:^5.0.0": + version: 5.0.1 + resolution: "@octokit/auth-unauthenticated@npm:5.0.1" + dependencies: + "@octokit/request-error": "npm:^5.0.0" + "@octokit/types": "npm:^12.0.0" + checksum: c9cad429981a34021ec9f1fdc238c39eba36807683859a3bffb9dd66abf1ce016c9a2ff31fe09313458e59b37f8fa91522c0e34a1daecefdabcdf23a494fbcc2 + languageName: node + linkType: hard + +"@octokit/core@npm:^3.2.4": + version: 3.6.0 + resolution: "@octokit/core@npm:3.6.0" + dependencies: + "@octokit/auth-token": "npm:^2.4.4" + "@octokit/graphql": "npm:^4.5.8" + "@octokit/request": "npm:^5.6.3" + "@octokit/request-error": "npm:^2.0.5" + "@octokit/types": "npm:^6.0.3" + before-after-hook: "npm:^2.2.0" + universal-user-agent: "npm:^6.0.0" + checksum: 78d9799a57fe9cf155cce485ba8b7ec32f05024350bf5dd8ab5e0da8995cc22168c39dbbbcfc29bc6c562dd482c1c4a3064f466f49e2e9ce4efad57cf28a7360 + languageName: node + linkType: hard + +"@octokit/core@npm:^4.2.1": + version: 4.2.4 + resolution: "@octokit/core@npm:4.2.4" + dependencies: + "@octokit/auth-token": "npm:^3.0.0" + "@octokit/graphql": "npm:^5.0.0" + "@octokit/request": "npm:^6.0.0" + "@octokit/request-error": "npm:^3.0.0" + "@octokit/types": "npm:^9.0.0" + before-after-hook: "npm:^2.2.0" + universal-user-agent: "npm:^6.0.0" + checksum: e54081a56884e628d1804837fddcd48c10d516117bb891551c8dc9d8e3dad449aeb9b4677ca71e8f0e76268c2b7656c953099506679aaa4666765228474a3ce6 + languageName: node + linkType: hard + +"@octokit/core@npm:^5.0.0": + version: 5.0.1 + resolution: "@octokit/core@npm:5.0.1" + dependencies: + "@octokit/auth-token": "npm:^4.0.0" + "@octokit/graphql": "npm:^7.0.0" + "@octokit/request": "npm:^8.0.2" + "@octokit/request-error": "npm:^5.0.0" + "@octokit/types": "npm:^12.0.0" + before-after-hook: "npm:^2.2.0" + universal-user-agent: "npm:^6.0.0" + checksum: 3d29d3be4e7e66c397d535876e867ca0eb7e0034175202cd5061237cb21267fdf062c9b15e6511309917f6cc4ad544e97be15e910945270289b509b9a1ce06fb + languageName: node + linkType: hard + +"@octokit/endpoint@npm:^6.0.1": + version: 6.0.12 + resolution: "@octokit/endpoint@npm:6.0.12" + dependencies: + "@octokit/types": "npm:^6.0.3" + is-plain-object: "npm:^5.0.0" + universal-user-agent: "npm:^6.0.0" + checksum: b2d9c91f00ab7c997338d08a06bfd12a67d86060bc40471f921ba424e4de4e5a0a1117631f2a8a8787107d89d631172dd157cb5e2633674b1ae3a0e2b0dcfa3e + languageName: node + linkType: hard + +"@octokit/endpoint@npm:^7.0.0": + version: 7.0.6 + resolution: "@octokit/endpoint@npm:7.0.6" + dependencies: + "@octokit/types": "npm:^9.0.0" + is-plain-object: "npm:^5.0.0" + universal-user-agent: "npm:^6.0.0" + checksum: fd147a55010b54af7567bf90791359f7096a1c9916a2b7c72f8afd0c53141338b3d78da3a4ab3e3bdfeb26218a1b73735432d8987ccc04996b1019219299f115 + languageName: node + linkType: hard + +"@octokit/endpoint@npm:^9.0.0": + version: 9.0.1 + resolution: "@octokit/endpoint@npm:9.0.1" + dependencies: + "@octokit/types": "npm:^12.0.0" + is-plain-object: "npm:^5.0.0" + universal-user-agent: "npm:^6.0.0" + checksum: 757505b1cd634bcd7b71a18c8fe07dfda47790598ddd0d9d13f47d68713070f49953a672ac40ec39787defc2a7e07d08dca97756def7b907118f8f8d4c653f5c + languageName: node + linkType: hard + +"@octokit/graphql@npm:^4.5.8": + version: 4.8.0 + resolution: "@octokit/graphql@npm:4.8.0" + dependencies: + "@octokit/request": "npm:^5.6.0" + "@octokit/types": "npm:^6.0.3" + universal-user-agent: "npm:^6.0.0" + checksum: 2cfa0cbc636465d729f4a6a5827f7d36bed0fc9ea270a79427a431f1672fd109f463ca4509aeb3eb02342b91592ff06f318b39d6866d7424d2a16b0bfc01e62e + languageName: node + linkType: hard + +"@octokit/graphql@npm:^5.0.0": + version: 5.0.6 + resolution: "@octokit/graphql@npm:5.0.6" + dependencies: + "@octokit/request": "npm:^6.0.0" + "@octokit/types": "npm:^9.0.0" + universal-user-agent: "npm:^6.0.0" + checksum: de1d839d97fe6d96179925f6714bf96e7af6f77929892596bb4211adab14add3291fc5872b269a3d0e91a4dcf248d16096c82606c4a43538cf241b815c2e2a36 + languageName: node + linkType: hard + +"@octokit/graphql@npm:^7.0.0": + version: 7.0.2 + resolution: "@octokit/graphql@npm:7.0.2" + dependencies: + "@octokit/request": "npm:^8.0.1" + "@octokit/types": "npm:^12.0.0" + universal-user-agent: "npm:^6.0.0" + checksum: 96e5d6b970be60877134cc147b9249534f3a79d691b9932d731d453426fa1e1a0a36111a1b0a6ab43d61309c630903a65db5559b5c800300dc26cf588f50fea8 + languageName: node + linkType: hard + +"@octokit/oauth-app@npm:^6.0.0": + version: 6.0.0 + resolution: "@octokit/oauth-app@npm:6.0.0" + dependencies: + "@octokit/auth-oauth-app": "npm:^7.0.0" + "@octokit/auth-oauth-user": "npm:^4.0.0" + "@octokit/auth-unauthenticated": "npm:^5.0.0" + "@octokit/core": "npm:^5.0.0" + "@octokit/oauth-authorization-url": "npm:^6.0.2" + "@octokit/oauth-methods": "npm:^4.0.0" + "@types/aws-lambda": "npm:^8.10.83" + universal-user-agent: "npm:^6.0.0" + checksum: 47b6a6d434bf106de3f1ae358f72ef9022c1e724e0a0ea6636277abe742935d1efdb0768f1fec010d8fdcb16e4f93d6bcb66cb46df2c739160599a120b3ef539 + languageName: node + linkType: hard + +"@octokit/oauth-authorization-url@npm:^5.0.0": + version: 5.0.0 + resolution: "@octokit/oauth-authorization-url@npm:5.0.0" + checksum: f9059cc070a06a276c43adfd106f995883c4ac846f00f0fef9218c2675355d7321cf9e8f83855574ba5104f37bc06a599a4c3e5edc3dc07714d9c9f4d34a47e2 + languageName: node + linkType: hard + +"@octokit/oauth-authorization-url@npm:^6.0.2": + version: 6.0.2 + resolution: "@octokit/oauth-authorization-url@npm:6.0.2" + checksum: 8c06e538b3e392f0fa68f3347078c32f92c03474eb214e4e82774513a54c164bac14c228f7dbd79d22a920df1a8b2e0765dd6ee45929bda0b77e5cf7f0d92c71 + languageName: node + linkType: hard + +"@octokit/oauth-methods@npm:^2.0.0": + version: 2.0.6 + resolution: "@octokit/oauth-methods@npm:2.0.6" + dependencies: + "@octokit/oauth-authorization-url": "npm:^5.0.0" + "@octokit/request": "npm:^6.2.3" + "@octokit/request-error": "npm:^3.0.3" + "@octokit/types": "npm:^9.0.0" + btoa-lite: "npm:^1.0.0" + checksum: eeaaa772de3dbce954b6fea7aeaa77e87aafcae831618321e128ab65e8009aec518a0417db1a856cf55522bd0f5ff9916cba3fe9ed2287ca4c18a589ee8df05a + languageName: node + linkType: hard + +"@octokit/oauth-methods@npm:^4.0.0": + version: 4.0.1 + resolution: "@octokit/oauth-methods@npm:4.0.1" + dependencies: + "@octokit/oauth-authorization-url": "npm:^6.0.2" + "@octokit/request": "npm:^8.0.2" + "@octokit/request-error": "npm:^5.0.0" + "@octokit/types": "npm:^12.0.0" + btoa-lite: "npm:^1.0.0" + checksum: fcaa5636780e3f406ddea9c6c881e7ae0b2a9fe0ec3bcd2748825ff27219a9ea1e223020bff0c988748d3ec18c6aa91bc9bcb557c8522553b3eccdcd4494d925 + languageName: node + linkType: hard + +"@octokit/openapi-types@npm:^12.11.0": + version: 12.11.0 + resolution: "@octokit/openapi-types@npm:12.11.0" + checksum: b3bb3684d9686ef948d8805ab56f85818f36e4cb64ef97b8e48dc233efefef22fe0bddd9da705fb628ea618a1bebd62b3d81b09a3f7dce9522f124d998041896 + languageName: node + linkType: hard + +"@octokit/openapi-types@npm:^14.0.0": + version: 14.0.0 + resolution: "@octokit/openapi-types@npm:14.0.0" + checksum: d122bbfd4997ea7e056c7fcf5b3240982b5b090b816671eca01829ac5ce19d2a19f6da35d126ae19a956a4203c68302d8fb33d5c00c77996b4e4a746878ea589 + languageName: node + linkType: hard + +"@octokit/openapi-types@npm:^18.0.0": + version: 18.1.1 + resolution: "@octokit/openapi-types@npm:18.1.1" + checksum: 856d3bb9f8c666e837dd5e8b8c216ee4342b9ed63ff8da922ca4ce5883ed1dfbec73390eb13d69fbcb4703a4c8b8b6a586df3b0e675ff93bf3d46b5b4fe0968e + languageName: node + linkType: hard + +"@octokit/openapi-types@npm:^19.0.0": + version: 19.0.0 + resolution: "@octokit/openapi-types@npm:19.0.0" + checksum: 8270e0a224bbef6d1c82396cda873a3528111cb25a772184b39e1fbada4e6433b41c5f4634ecf204e8a2816a802048197e0132b7615b579fab217f7c1e29545b + languageName: node + linkType: hard + +"@octokit/openapi-types@npm:^19.0.2": + version: 19.0.2 + resolution: "@octokit/openapi-types@npm:19.0.2" + checksum: e003a3b7471edfa970911252c19ce9331d935699cc1e91a1e151316b585c3b2f5251bc5ba137b7e14aed8a9b3890fdf67edc5cc5af4805bf4b44f5869544e678 + languageName: node + linkType: hard + +"@octokit/plugin-enterprise-compatibility@npm:^1.2.8": + version: 1.3.0 + resolution: "@octokit/plugin-enterprise-compatibility@npm:1.3.0" + dependencies: + "@octokit/request-error": "npm:^2.1.0" + "@octokit/types": "npm:^6.0.3" + checksum: b997123182861ff65919f8b5fcfbc4dd76977dceb26e53743c98fd4a8ae683d02e3a78f54ea30198c8e6299f1e880f24a34600ee99ad6bf39bb2fdbeb010cfbc + languageName: node + linkType: hard + +"@octokit/plugin-paginate-graphql@npm:^4.0.0": + version: 4.0.0 + resolution: "@octokit/plugin-paginate-graphql@npm:4.0.0" + peerDependencies: + "@octokit/core": ">=5" + checksum: a76ede8b7ceef78f319f80083c7043f5e721c10468e520e1989c4b81fc57ccb549324ef323ee86bc62abfb7a75b0c1b30b1f64715da50737b4ec6ffb2a9b95a4 + languageName: node + linkType: hard + +"@octokit/plugin-paginate-rest@npm:^2.6.2": + version: 2.21.3 + resolution: "@octokit/plugin-paginate-rest@npm:2.21.3" + dependencies: + "@octokit/types": "npm:^6.40.0" + peerDependencies: + "@octokit/core": ">=2" + checksum: a16f7ed56db00ea9b72f77735e8d9463ddc84d017cb95c2767026c60a209f7c4176502c592847cf61613eb2f25dafe8d5437c01ad296660ebbfb2c821ef805e9 + languageName: node + linkType: hard + +"@octokit/plugin-paginate-rest@npm:^6.1.2": + version: 6.1.2 + resolution: "@octokit/plugin-paginate-rest@npm:6.1.2" + dependencies: + "@octokit/tsconfig": "npm:^1.0.2" + "@octokit/types": "npm:^9.2.3" + peerDependencies: + "@octokit/core": ">=4" + checksum: def241c4f00b864822ab6414eaadd8679a6d332004c7e77467cfc1e6d5bdcc453c76bd185710ee942e4df201f9dd2170d960f46af5b14ef6f261a0068f656364 + languageName: node + linkType: hard + +"@octokit/plugin-paginate-rest@npm:^9.0.0": + version: 9.0.0 + resolution: "@octokit/plugin-paginate-rest@npm:9.0.0" + dependencies: + "@octokit/types": "npm:^12.0.0" + peerDependencies: + "@octokit/core": ">=5" + checksum: 050861368f71a4ad337c2f242c3878e8ad95331e2ed549732fca916ee4a67ef18477bedd78afb32b2d4229b80083097551671b14c51bd2b2b85c7f101b6ba02d + languageName: node + linkType: hard + +"@octokit/plugin-request-log@npm:^1.0.4": + version: 1.0.4 + resolution: "@octokit/plugin-request-log@npm:1.0.4" + peerDependencies: + "@octokit/core": ">=3" + checksum: 7238585445555db553912e0cdef82801c89c6e5cbc62c23ae086761c23cc4a403d6c3fddd20348bbd42fb7508e2c2fce370eb18fdbe3fbae2c0d2c8be974f4cc + languageName: node + linkType: hard + +"@octokit/plugin-request-log@npm:^4.0.0": + version: 4.0.0 + resolution: "@octokit/plugin-request-log@npm:4.0.0" + peerDependencies: + "@octokit/core": ">=5" + checksum: ca6db112f288326d2f11de5170e7d6429ba54f04a22dc1e5d06c8d626f72bd2effeb0218a8f73bc9e23657b5a89194cd297964ace54693d2dfdfba3828920b45 + languageName: node + linkType: hard + +"@octokit/plugin-rest-endpoint-methods@npm:^10.0.0": + version: 10.0.1 + resolution: "@octokit/plugin-rest-endpoint-methods@npm:10.0.1" + dependencies: + "@octokit/types": "npm:^12.0.0" + peerDependencies: + "@octokit/core": ">=5" + checksum: 1564c9303ea190d3cfd25852a944f704dab5d5002fa4ebc82c601dd2f5c8e9f34aa2069d32f327ad61e39db3978f8993530fa28014f9f173ab556a0fe654860e + languageName: node + linkType: hard + +"@octokit/plugin-rest-endpoint-methods@npm:^5.0.1": + version: 5.16.2 + resolution: "@octokit/plugin-rest-endpoint-methods@npm:5.16.2" + dependencies: + "@octokit/types": "npm:^6.39.0" + deprecation: "npm:^2.3.1" + peerDependencies: + "@octokit/core": ">=3" + checksum: 32bfb30241140ad9bf17712856e1946374fb8d6040adfd5b9ea862e7149e5d2a38e0e037d3b468af34f7f2561129a6f170cffeb2a6225e548b04934e2c05eb93 + languageName: node + linkType: hard + +"@octokit/plugin-rest-endpoint-methods@npm:^7.1.2": + version: 7.2.3 + resolution: "@octokit/plugin-rest-endpoint-methods@npm:7.2.3" + dependencies: + "@octokit/types": "npm:^10.0.0" + peerDependencies: + "@octokit/core": ">=3" + checksum: 8bffbc5852695dd08d65cc64b6ab7d2871ed9df1e791608f48b488a3908b5b655e3686b5dd72fc37c824e82bdd4dfc9d24e2e50205bbc324667def1d705bc9da + languageName: node + linkType: hard + +"@octokit/plugin-retry@npm:^3.0.6": + version: 3.0.9 + resolution: "@octokit/plugin-retry@npm:3.0.9" + dependencies: + "@octokit/types": "npm:^6.0.3" + bottleneck: "npm:^2.15.3" + checksum: ea097c3b6fe507f45c71237463b4a4e0397b4175b5422528184d7d8a1ed9bf1dcb34f58ce10ec1f7ba8dfd173a221324206af7fa5bf5d2c322566412dfbe289d + languageName: node + linkType: hard + +"@octokit/plugin-retry@npm:^6.0.0": + version: 6.0.1 + resolution: "@octokit/plugin-retry@npm:6.0.1" + dependencies: + "@octokit/request-error": "npm:^5.0.0" + "@octokit/types": "npm:^12.0.0" + bottleneck: "npm:^2.15.3" + peerDependencies: + "@octokit/core": ">=5" + checksum: 721b5a7949e3defdec5f1b451850ab924162fd2712c9ab59a2aaaad5b9ed6ee2a9447fe82ec1f91086cf23aaaceb14ff4e74de67ba3c63c5029e59c67b50979c + languageName: node + linkType: hard + +"@octokit/plugin-throttling@npm:^3.3.4": + version: 3.7.0 + resolution: "@octokit/plugin-throttling@npm:3.7.0" + dependencies: + "@octokit/types": "npm:^6.0.1" + bottleneck: "npm:^2.15.3" + peerDependencies: + "@octokit/core": ^3.5.0 + checksum: e842ab4d0d14017627a2bb3fd6cdbab052fac10297a7b0ad1e8de381bc5f5538d8a07dda8b8e1583ca46f694a7c9830166683c328a661f73a5410fed4fa6fb29 + languageName: node + linkType: hard + +"@octokit/plugin-throttling@npm:^8.0.0": + version: 8.1.3 + resolution: "@octokit/plugin-throttling@npm:8.1.3" + dependencies: + "@octokit/types": "npm:^12.2.0" + bottleneck: "npm:^2.15.3" + peerDependencies: + "@octokit/core": ^5.0.0 + checksum: aa21da4078a64f8ce0e7f340d041ad8d58d2fc8eb3fa658ba82e0b3207d689ccfbdd0fd3e2104fb2eea1de37f7857bae835705465122dda310d0fd7041bfdf94 + languageName: node + linkType: hard + +"@octokit/request-error@npm:^2.0.2, @octokit/request-error@npm:^2.0.5, @octokit/request-error@npm:^2.1.0": + version: 2.1.0 + resolution: "@octokit/request-error@npm:2.1.0" + dependencies: + "@octokit/types": "npm:^6.0.3" + deprecation: "npm:^2.0.0" + once: "npm:^1.4.0" + checksum: eb50eb2734aa903f1e855ac5887bb76d6f237a3aaa022b09322a7676c79bb8020259b25f84ab895c4fc7af5cc736e601ec8cc7e9040ca4629bac8cb393e91c40 + languageName: node + linkType: hard + +"@octokit/request-error@npm:^3.0.0, @octokit/request-error@npm:^3.0.3": + version: 3.0.3 + resolution: "@octokit/request-error@npm:3.0.3" + dependencies: + "@octokit/types": "npm:^9.0.0" + deprecation: "npm:^2.0.0" + once: "npm:^1.4.0" + checksum: 1e252ac193c8af23b709909911aa327ed5372cbafcba09e4aff41e0f640a7c152579ab0a60311a92e37b4e7936392d59ee4c2feae5cdc387ee8587a33d8afa60 + languageName: node + linkType: hard + +"@octokit/request-error@npm:^5.0.0": + version: 5.0.1 + resolution: "@octokit/request-error@npm:5.0.1" + dependencies: + "@octokit/types": "npm:^12.0.0" + deprecation: "npm:^2.0.0" + once: "npm:^1.4.0" + checksum: e72a4627120de345b54876a1f007664095e5be9d624fce2e14fccf7668cd8f5e4929d444d8fc085d48e1fb5cd548538453974aab129a669101110d6679dce6c6 + languageName: node + linkType: hard + +"@octokit/request@npm:^5.6.0, @octokit/request@npm:^5.6.3": + version: 5.6.3 + resolution: "@octokit/request@npm:5.6.3" + dependencies: + "@octokit/endpoint": "npm:^6.0.1" + "@octokit/request-error": "npm:^2.1.0" + "@octokit/types": "npm:^6.16.1" + is-plain-object: "npm:^5.0.0" + node-fetch: "npm:^2.6.7" + universal-user-agent: "npm:^6.0.0" + checksum: a546dc05665c6cf8184ae7c4ac3ed4f0c339c2170dd7e2beeb31a6e0a9dd968ca8ad960edbd2af745e585276e692c9eb9c6dbf1a8c9d815eb7b7fd282f3e67fc + languageName: node + linkType: hard + +"@octokit/request@npm:^6.0.0, @octokit/request@npm:^6.2.3": + version: 6.2.8 + resolution: "@octokit/request@npm:6.2.8" + dependencies: + "@octokit/endpoint": "npm:^7.0.0" + "@octokit/request-error": "npm:^3.0.0" + "@octokit/types": "npm:^9.0.0" + is-plain-object: "npm:^5.0.0" + node-fetch: "npm:^2.6.7" + universal-user-agent: "npm:^6.0.0" + checksum: 6b6079ed45bac44c4579b40990bfd1905b03d4bc4e5255f3d5a10cf5182171578ebe19abeab32ebb11a806f1131947f2a06b7a077bd7e77ade7b15fe2882174b + languageName: node + linkType: hard + +"@octokit/request@npm:^8.0.0": + version: 8.1.6 + resolution: "@octokit/request@npm:8.1.6" + dependencies: + "@octokit/endpoint": "npm:^9.0.0" + "@octokit/request-error": "npm:^5.0.0" + "@octokit/types": "npm:^12.0.0" + universal-user-agent: "npm:^6.0.0" + checksum: ef84418e0b1f28335c105bca2b1518b04797791761024d26f80f60a528cdcf468baf9897fd34f535c42af0643a598884f882bc832e68edbfe1ea530c2df563a4 + languageName: node + linkType: hard + +"@octokit/request@npm:^8.0.1, @octokit/request@npm:^8.0.2": + version: 8.1.4 + resolution: "@octokit/request@npm:8.1.4" + dependencies: + "@octokit/endpoint": "npm:^9.0.0" + "@octokit/request-error": "npm:^5.0.0" + "@octokit/types": "npm:^12.0.0" + is-plain-object: "npm:^5.0.0" + universal-user-agent: "npm:^6.0.0" + checksum: 384f06404136b4136940e454333bcfbbbec61efee6ecc2fcec2b38c13b34c7ab3868013b5a51cbe45ccfbac46a57b30c827024ecc6a88636f39aa38feca52339 + languageName: node + linkType: hard + +"@octokit/rest@npm:19.0.13": + version: 19.0.13 + resolution: "@octokit/rest@npm:19.0.13" + dependencies: + "@octokit/core": "npm:^4.2.1" + "@octokit/plugin-paginate-rest": "npm:^6.1.2" + "@octokit/plugin-request-log": "npm:^1.0.4" + "@octokit/plugin-rest-endpoint-methods": "npm:^7.1.2" + checksum: 4a1dfa8a0a0284236159729771026330e48515917c7037d9d1a5a9cbf6ac743f2fa087aa195d2f3254e48379b0252ca3933b7bd91232586e81b8b013078d6ca9 + languageName: node + linkType: hard + +"@octokit/rest@npm:^20.0.2": + version: 20.0.2 + resolution: "@octokit/rest@npm:20.0.2" + dependencies: + "@octokit/core": "npm:^5.0.0" + "@octokit/plugin-paginate-rest": "npm:^9.0.0" + "@octokit/plugin-request-log": "npm:^4.0.0" + "@octokit/plugin-rest-endpoint-methods": "npm:^10.0.0" + checksum: e9bfc617d0e0bfb0ba9dea3d1e0a19167c5a255beac622dd34280e1754dfab7688323b3251f8e8c85494b39548ecc52385e8b84e21ce0627f58176562a6e2fae + languageName: node + linkType: hard + +"@octokit/tsconfig@npm:^1.0.2": + version: 1.0.2 + resolution: "@octokit/tsconfig@npm:1.0.2" + checksum: 84db70b495beeed69259dd4def14cdfb600edeb65ef32811558c99413ee2b414ed10bff9c4dcc7a43451d0fd36b4925ada9ef7d4272b5eae38cb005cc2f459ac + languageName: node + linkType: hard + +"@octokit/types@npm:^10.0.0": + version: 10.0.0 + resolution: "@octokit/types@npm:10.0.0" + dependencies: + "@octokit/openapi-types": "npm:^18.0.0" + checksum: 9bbbec1e452c271752e5ba735c161a558933f2e35f3004bb0b6e8d6ba574af48b68bab2f293112a8e68c595435a2fbcc76f3e7333f45ba1888bb5193777a943e + languageName: node + linkType: hard + +"@octokit/types@npm:^12.0.0": + version: 12.0.0 + resolution: "@octokit/types@npm:12.0.0" + dependencies: + "@octokit/openapi-types": "npm:^19.0.0" + checksum: 6e5b68f8855775638db53244348d2ca07896d36a15aad41d3cb652fafaa1b307c3b6222319174dd5716accd9076e101da838b82f988a7c380a8e9d188e3aadf1 + languageName: node + linkType: hard + +"@octokit/types@npm:^12.2.0": + version: 12.3.0 + resolution: "@octokit/types@npm:12.3.0" + dependencies: + "@octokit/openapi-types": "npm:^19.0.2" + checksum: 083f33d8df492ef4029b94b1b5ac5ac422bc5787fe6c086d4738007f207e2b8fa523a1397ecc902d808ba235ec7bf7e38f4659cae177d40002e43eadf3b6f3d8 + languageName: node + linkType: hard + +"@octokit/types@npm:^6.0.1, @octokit/types@npm:^6.0.3, @octokit/types@npm:^6.16.1, @octokit/types@npm:^6.39.0, @octokit/types@npm:^6.40.0": + version: 6.41.0 + resolution: "@octokit/types@npm:6.41.0" + dependencies: + "@octokit/openapi-types": "npm:^12.11.0" + checksum: 81cfa58e5524bf2e233d75a346e625fd6e02a7b919762c6ddb523ad6fb108943ef9d34c0298ff3c5a44122e449d9038263bc22959247fd6ff8894a48888ac705 + languageName: node + linkType: hard + +"@octokit/types@npm:^8.0.0": + version: 8.2.1 + resolution: "@octokit/types@npm:8.2.1" + dependencies: + "@octokit/openapi-types": "npm:^14.0.0" + checksum: 85a97bca714b88ea0d34066b4821e48ba4f8dda8f3970f1a00deb02b3e3f1cc315720d25430082dc651c400717510273193ac6af610268488160bb9e6a30bef8 + languageName: node + linkType: hard + +"@octokit/types@npm:^9.0.0, @octokit/types@npm:^9.2.3": + version: 9.3.2 + resolution: "@octokit/types@npm:9.3.2" + dependencies: + "@octokit/openapi-types": "npm:^18.0.0" + checksum: 2925479aa378a4491762b4fcf381bdc7daca39b4e0b2dd7062bce5d74a32ed7d79d20d3c65ceaca6d105cf4b1f7417fea634219bf90f79a57d03e2dac629ec45 + languageName: node + linkType: hard + +"@octokit/webhooks-methods@npm:^2.0.0": + version: 2.0.0 + resolution: "@octokit/webhooks-methods@npm:2.0.0" + checksum: ab61981a794eb34e59d60619f2f7794e2d3412d5a24e26437172316787ab19bf88ae7543358cc24813a504e7fa405feb3411d0338c964a7e6686b73d5d14277b + languageName: node + linkType: hard + +"@octokit/webhooks-methods@npm:^4.0.0": + version: 4.0.0 + resolution: "@octokit/webhooks-methods@npm:4.0.0" + checksum: 67182bf353b5fad1832d8d2647192348e3cf17aed8b8feeb8c10f680691c176b51f133d143aee43961f0eac3cd848b2f993fa03c7477980fc9a926bd8d7ba934 + languageName: node + linkType: hard + +"@octokit/webhooks-types@npm:5.8.0": + version: 5.8.0 + resolution: "@octokit/webhooks-types@npm:5.8.0" + checksum: 049bea2f73ccf2d520b4767146fbddc02f6cbaae7461ba56085236a3933123fc9eb7d4e9fc60bb4d2a65bebc0f19f2fecdc34cf84d34ebf53945f2b72fb6d171 + languageName: node + linkType: hard + +"@octokit/webhooks-types@npm:7.1.0": + version: 7.1.0 + resolution: "@octokit/webhooks-types@npm:7.1.0" + checksum: 5a293214d8c7ba72bab1e866c308005c55b3588c13f4d1ed101726fd362ff584282e7f9a486852d7fe87d15a547a3b234e31d8c559170ecf453d7305fbe4924a + languageName: node + linkType: hard + +"@octokit/webhooks@npm:^12.0.4": + version: 12.0.8 + resolution: "@octokit/webhooks@npm:12.0.8" + dependencies: + "@octokit/request-error": "npm:^5.0.0" + "@octokit/webhooks-methods": "npm:^4.0.0" + "@octokit/webhooks-types": "npm:7.1.0" + aggregate-error: "npm:^3.1.0" + checksum: 4cb85b662a29d1fbd9ad153cee62ca62ee7cfc88cb8a3ed016960afb3af8220b42a61df4b72ebc803b00b43eda9d6c565d23a3a57ea9cfab87f2a3c32e12d450 + languageName: node + linkType: hard + +"@octokit/webhooks@npm:^9.26.3": + version: 9.26.3 + resolution: "@octokit/webhooks@npm:9.26.3" + dependencies: + "@octokit/request-error": "npm:^2.0.2" + "@octokit/webhooks-methods": "npm:^2.0.0" + "@octokit/webhooks-types": "npm:5.8.0" + aggregate-error: "npm:^3.1.0" + checksum: c148ed6786618dc14bba13c5728b910db23eab813ad6aeda9422b8887310ab7892e3ee21ff452a1cc49cd283283248a24dfdc09a4364fb4dde85a5a195f626ba + languageName: node + linkType: hard + +"@opentelemetry/api-logs@npm:0.39.1": + version: 0.39.1 + resolution: "@opentelemetry/api-logs@npm:0.39.1" + dependencies: + "@opentelemetry/api": "npm:^1.0.0" + checksum: b63bec7382662885ef8ad9bfbf4fb847e8fc393b566a5380b389e06c3da99abc511574e28f21b3c90c1bd7430296d2e0d8b8d39117514b6227ed1b4bc756a8f6 + languageName: node + linkType: hard + +"@opentelemetry/api-logs@npm:0.41.2": + version: 0.41.2 + resolution: "@opentelemetry/api-logs@npm:0.41.2" + dependencies: + "@opentelemetry/api": "npm:^1.0.0" + checksum: 582f9ad3f55f5a8167c70f6388ef857727dea2c4b1b287ab803586832cb2e5717b7ea05d54118a05203de80dc79550710edbebc59bfda4e5b5901dbf8f9daaaf + languageName: node + linkType: hard + +"@opentelemetry/api@npm:^1.0.0, @opentelemetry/api@npm:^1.4.1": + version: 1.7.0 + resolution: "@opentelemetry/api@npm:1.7.0" + checksum: b5468115d1cec45dd2b86b39210fdc03620a93b9f07c3d20b14081f75e2f7c9b37ceceeb60d5f35c6d4f9819ae07eee0b4874e53e7362376db21db1e00f483f8 + languageName: node + linkType: hard + +"@opentelemetry/context-async-hooks@npm:1.13.0": + version: 1.13.0 + resolution: "@opentelemetry/context-async-hooks@npm:1.13.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.5.0" + checksum: 4d53dfe64899d4a400c64437c23e9a686d24741ba6068cf1e4fce8d2d5361b2938ed4a0ad51e8278154173e3132c58c2a7f4fd6e11ac9d68a1d0af87bc9fdc6a + languageName: node + linkType: hard + +"@opentelemetry/core@npm:1.13.0": + version: 1.13.0 + resolution: "@opentelemetry/core@npm:1.13.0" + dependencies: + "@opentelemetry/semantic-conventions": "npm:1.13.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.5.0" + checksum: 318e0783f328168e463e392ca91ccdcbfe96bf743bbd8c60da9f55cf6a924eebfad730cb47cb23bfe09699567398ab8a3ac0c26324eafd6c9ad8ec582423b0cc + languageName: node + linkType: hard + +"@opentelemetry/core@npm:1.15.2": + version: 1.15.2 + resolution: "@opentelemetry/core@npm:1.15.2" + dependencies: + "@opentelemetry/semantic-conventions": "npm:1.15.2" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.5.0" + checksum: 330f5905edec32f965151f2b314ae73344ac28672ea2c41ac41687413ac91dcd5c7ab99590dac9870ce189bb3d2a73a780c98e7bf1c8826c4c197a5698db96a4 + languageName: node + linkType: hard + +"@opentelemetry/core@npm:1.18.1, @opentelemetry/core@npm:^1.13.0, @opentelemetry/core@npm:^1.17.1": + version: 1.18.1 + resolution: "@opentelemetry/core@npm:1.18.1" + dependencies: + "@opentelemetry/semantic-conventions": "npm:1.18.1" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.8.0" + checksum: ceb17446ce32faaa8d71caaaf25c9abbc5fd72077c7b868ea6f51e08a4a3daeb9133682a3b299a64291111416f2dd0dbeeed66f44409995fa4540f7250e3ffe1 + languageName: node + linkType: hard + +"@opentelemetry/exporter-jaeger@npm:1.13.0": + version: 1.13.0 + resolution: "@opentelemetry/exporter-jaeger@npm:1.13.0" + dependencies: + "@opentelemetry/core": "npm:1.13.0" + "@opentelemetry/sdk-trace-base": "npm:1.13.0" + "@opentelemetry/semantic-conventions": "npm:1.13.0" + jaeger-client: "npm:^3.15.0" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 3d569d244c289aed9af4c819c257e7cba28e6c0cfecfd2f11ca3d16e3c19d3e0cb315bbd383a83d551f696c24d7de87b70701e5e48e5282afbd544d49580f28b + languageName: node + linkType: hard + +"@opentelemetry/exporter-metrics-otlp-grpc@npm:^0.41.0": + version: 0.41.2 + resolution: "@opentelemetry/exporter-metrics-otlp-grpc@npm:0.41.2" + dependencies: + "@grpc/grpc-js": "npm:^1.7.1" + "@opentelemetry/core": "npm:1.15.2" + "@opentelemetry/exporter-metrics-otlp-http": "npm:0.41.2" + "@opentelemetry/otlp-grpc-exporter-base": "npm:0.41.2" + "@opentelemetry/otlp-transformer": "npm:0.41.2" + "@opentelemetry/resources": "npm:1.15.2" + "@opentelemetry/sdk-metrics": "npm:1.15.2" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 66e293cdef5878f75e6d78cf0a812eef8344b97386c93dd4d5a99d7e4c97352d7bdb1096371a0c7495028e9c5aa8fa10b322596b2413022e9ba02a397a15b5b6 + languageName: node + linkType: hard + +"@opentelemetry/exporter-metrics-otlp-http@npm:0.39.1": + version: 0.39.1 + resolution: "@opentelemetry/exporter-metrics-otlp-http@npm:0.39.1" + dependencies: + "@opentelemetry/core": "npm:1.13.0" + "@opentelemetry/otlp-exporter-base": "npm:0.39.1" + "@opentelemetry/otlp-transformer": "npm:0.39.1" + "@opentelemetry/resources": "npm:1.13.0" + "@opentelemetry/sdk-metrics": "npm:1.13.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 44994839bab5e2084c79f60b24cb1b0981efe581667b7b772d1db5949e24286e0babf512c2612733afc5ef87816b418dda9b7a4f659130fea3f952d92bcbf2a2 + languageName: node + linkType: hard + +"@opentelemetry/exporter-metrics-otlp-http@npm:0.41.2": + version: 0.41.2 + resolution: "@opentelemetry/exporter-metrics-otlp-http@npm:0.41.2" + dependencies: + "@opentelemetry/core": "npm:1.15.2" + "@opentelemetry/otlp-exporter-base": "npm:0.41.2" + "@opentelemetry/otlp-transformer": "npm:0.41.2" + "@opentelemetry/resources": "npm:1.15.2" + "@opentelemetry/sdk-metrics": "npm:1.15.2" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 9a0414128589a25d2804607ecca794efa5627a1ed6dd29b9369b60af4b1dca4abc68526be5137327ce415aeb3d744db8ac1de3a00115af104bf87494931496b1 + languageName: node + linkType: hard + +"@opentelemetry/exporter-metrics-otlp-proto@npm:^0.39.1": + version: 0.39.1 + resolution: "@opentelemetry/exporter-metrics-otlp-proto@npm:0.39.1" + dependencies: + "@opentelemetry/core": "npm:1.13.0" + "@opentelemetry/exporter-metrics-otlp-http": "npm:0.39.1" + "@opentelemetry/otlp-exporter-base": "npm:0.39.1" + "@opentelemetry/otlp-proto-exporter-base": "npm:0.39.1" + "@opentelemetry/otlp-transformer": "npm:0.39.1" + "@opentelemetry/resources": "npm:1.13.0" + "@opentelemetry/sdk-metrics": "npm:1.13.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 01f8d092ce768f81e6a174a727fd6a6d7f2066ed0d15eee58babc41790f9406f88ed9c412ca1bcc8d70ca7ab43a434b4ecf29aff9a84b5405c49974404ddb4dc + languageName: node + linkType: hard + +"@opentelemetry/exporter-trace-otlp-grpc@npm:0.39.1": + version: 0.39.1 + resolution: "@opentelemetry/exporter-trace-otlp-grpc@npm:0.39.1" + dependencies: + "@grpc/grpc-js": "npm:^1.7.1" + "@opentelemetry/core": "npm:1.13.0" + "@opentelemetry/otlp-grpc-exporter-base": "npm:0.39.1" + "@opentelemetry/otlp-transformer": "npm:0.39.1" + "@opentelemetry/resources": "npm:1.13.0" + "@opentelemetry/sdk-trace-base": "npm:1.13.0" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 6f167e2f8d84b99f18f916d5b3efdb35d6b1b196679e53f86c6ef15526bd484774d282b7ced6e7828ec3790ed9e74e4fd45e8e0bc38859adf71cfd6592f10cf5 + languageName: node + linkType: hard + +"@opentelemetry/exporter-trace-otlp-grpc@npm:^0.41.0": + version: 0.41.2 + resolution: "@opentelemetry/exporter-trace-otlp-grpc@npm:0.41.2" + dependencies: + "@grpc/grpc-js": "npm:^1.7.1" + "@opentelemetry/core": "npm:1.15.2" + "@opentelemetry/otlp-grpc-exporter-base": "npm:0.41.2" + "@opentelemetry/otlp-transformer": "npm:0.41.2" + "@opentelemetry/resources": "npm:1.15.2" + "@opentelemetry/sdk-trace-base": "npm:1.15.2" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 7c0d35c73415980eac7f23b1420ab747f8af3ded8b9c2587c329200376eadde1d5f063197cd3a60cb905f2afd3460cf96ec3bcdf90ecb3ab7ea10b9aa549b812 + languageName: node + linkType: hard + +"@opentelemetry/exporter-trace-otlp-http@npm:0.39.1": + version: 0.39.1 + resolution: "@opentelemetry/exporter-trace-otlp-http@npm:0.39.1" + dependencies: + "@opentelemetry/core": "npm:1.13.0" + "@opentelemetry/otlp-exporter-base": "npm:0.39.1" + "@opentelemetry/otlp-transformer": "npm:0.39.1" + "@opentelemetry/resources": "npm:1.13.0" + "@opentelemetry/sdk-trace-base": "npm:1.13.0" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 10df39f39ccc2398dcb0c166ae0be77a60fe35f45de27dca188f807a72073c049ee30a4ae5f9e4da5b2d4d55f2704ee6cdf92c4c6b59428d507e524e0af97079 + languageName: node + linkType: hard + +"@opentelemetry/exporter-trace-otlp-proto@npm:0.39.1": + version: 0.39.1 + resolution: "@opentelemetry/exporter-trace-otlp-proto@npm:0.39.1" + dependencies: + "@opentelemetry/core": "npm:1.13.0" + "@opentelemetry/otlp-exporter-base": "npm:0.39.1" + "@opentelemetry/otlp-proto-exporter-base": "npm:0.39.1" + "@opentelemetry/otlp-transformer": "npm:0.39.1" + "@opentelemetry/resources": "npm:1.13.0" + "@opentelemetry/sdk-trace-base": "npm:1.13.0" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: b37a7838a19e21fe6aa591e8ba7539a6646d0038ee9cc31fbd8b201a94f62f163d8eb4907553ba21e4d1a741811a433afd39b57479c96f64c4742bc8ba026653 + languageName: node + linkType: hard + +"@opentelemetry/exporter-trace-otlp-proto@npm:^0.41.0": + version: 0.41.2 + resolution: "@opentelemetry/exporter-trace-otlp-proto@npm:0.41.2" + dependencies: + "@opentelemetry/core": "npm:1.15.2" + "@opentelemetry/otlp-exporter-base": "npm:0.41.2" + "@opentelemetry/otlp-proto-exporter-base": "npm:0.41.2" + "@opentelemetry/otlp-transformer": "npm:0.41.2" + "@opentelemetry/resources": "npm:1.15.2" + "@opentelemetry/sdk-trace-base": "npm:1.15.2" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 422471a0ab5d3c184f4e36eb38930cca78a3a1b6bff22f14245904f74233eb0913c81fbe486a7fdf946c27e8f37c028d001f6ebd9f8b8b1d9024f99594d935a8 + languageName: node + linkType: hard + +"@opentelemetry/exporter-zipkin@npm:1.13.0": + version: 1.13.0 + resolution: "@opentelemetry/exporter-zipkin@npm:1.13.0" + dependencies: + "@opentelemetry/core": "npm:1.13.0" + "@opentelemetry/resources": "npm:1.13.0" + "@opentelemetry/sdk-trace-base": "npm:1.13.0" + "@opentelemetry/semantic-conventions": "npm:1.13.0" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 7b7529d120855e213845a921ce9d56680d980cd65f07b312f6630b0f696b1d863f1738dcaecccb222f137424cf516e24ab5d05fe50b001b4772618aa7ee57cce + languageName: node + linkType: hard + +"@opentelemetry/instrumentation@npm:0.39.1": + version: 0.39.1 + resolution: "@opentelemetry/instrumentation@npm:0.39.1" + dependencies: + require-in-the-middle: "npm:^7.1.0" + semver: "npm:^7.3.2" + shimmer: "npm:^1.2.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: e942e0059ce5608bd281f731c11257bc74c7a40f6291c590ee6b9e1585f5cb77bd4133658e73f70231028194d907da460759bab3ecf692747d1cfc0268d1371d + languageName: node + linkType: hard + +"@opentelemetry/otlp-exporter-base@npm:0.39.1": + version: 0.39.1 + resolution: "@opentelemetry/otlp-exporter-base@npm:0.39.1" + dependencies: + "@opentelemetry/core": "npm:1.13.0" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 4cfca046f1e3920cd8b348bdd4722ac120d18af5ac1521820305dc5d1758efc31e4deaf0833710858e20b04f7f3132671d1b312a528e30ec68bae422f7a3e919 + languageName: node + linkType: hard + +"@opentelemetry/otlp-exporter-base@npm:0.41.2": + version: 0.41.2 + resolution: "@opentelemetry/otlp-exporter-base@npm:0.41.2" + dependencies: + "@opentelemetry/core": "npm:1.15.2" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: dc0d70579e4e0157d5e4f687b7e6a877469cd394f9db2e23550db762eedbbd0b1201913db6858e4402ffd4109d2dcceadb5fed1ee413ca432f0f0cbd3af52ef5 + languageName: node + linkType: hard + +"@opentelemetry/otlp-grpc-exporter-base@npm:0.39.1": + version: 0.39.1 + resolution: "@opentelemetry/otlp-grpc-exporter-base@npm:0.39.1" + dependencies: + "@grpc/grpc-js": "npm:^1.7.1" + "@opentelemetry/core": "npm:1.13.0" + "@opentelemetry/otlp-exporter-base": "npm:0.39.1" + protobufjs: "npm:^7.2.2" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 5ef441564396806f015113b970e53156a472a86e241e356ffa15d6b350ea7c017ab999203f880d0c3386a254dc215fadeb9d1b1020a9e0160b4e6c0360b4ad65 + languageName: node + linkType: hard + +"@opentelemetry/otlp-grpc-exporter-base@npm:0.41.2": + version: 0.41.2 + resolution: "@opentelemetry/otlp-grpc-exporter-base@npm:0.41.2" + dependencies: + "@grpc/grpc-js": "npm:^1.7.1" + "@opentelemetry/core": "npm:1.15.2" + "@opentelemetry/otlp-exporter-base": "npm:0.41.2" + protobufjs: "npm:^7.2.3" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: c571bdb7244435bc0e0d1058e1d59a725d0a4414802860ab5ed93c4eaaa319cdb5f3a7cee3cbb84e73ee1a502637f47e092389566ea042be1d5398cb4726d6ac + languageName: node + linkType: hard + +"@opentelemetry/otlp-proto-exporter-base@npm:0.39.1": + version: 0.39.1 + resolution: "@opentelemetry/otlp-proto-exporter-base@npm:0.39.1" + dependencies: + "@opentelemetry/core": "npm:1.13.0" + "@opentelemetry/otlp-exporter-base": "npm:0.39.1" + protobufjs: "npm:^7.1.2" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 4d68133f10028582218c6e2adc0a88de205d937a902d0d54666dead428f06dea9cab82518be0b3f45330e981fb69dd15b8fcd410ab2fac3bd8b510a3281363a7 + languageName: node + linkType: hard + +"@opentelemetry/otlp-proto-exporter-base@npm:0.41.2": + version: 0.41.2 + resolution: "@opentelemetry/otlp-proto-exporter-base@npm:0.41.2" + dependencies: + "@opentelemetry/core": "npm:1.15.2" + "@opentelemetry/otlp-exporter-base": "npm:0.41.2" + protobufjs: "npm:^7.2.3" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: fe5d2bd205ec0ec1a98dd976831936b4aaced9495e28d14c5ea7891fc2cb766b7fdeab0d12dc0dc2c76ff9137d10be87d00a565c1695a5da68b8c5ffcef020be + languageName: node + linkType: hard + +"@opentelemetry/otlp-transformer@npm:0.39.1": + version: 0.39.1 + resolution: "@opentelemetry/otlp-transformer@npm:0.39.1" + dependencies: + "@opentelemetry/api-logs": "npm:0.39.1" + "@opentelemetry/core": "npm:1.13.0" + "@opentelemetry/resources": "npm:1.13.0" + "@opentelemetry/sdk-logs": "npm:0.39.1" + "@opentelemetry/sdk-metrics": "npm:1.13.0" + "@opentelemetry/sdk-trace-base": "npm:1.13.0" + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.5.0" + checksum: e81d88ac20f04ed5a3689bd31f307185bb6e9f0c447c9a4ba452d29e0c9fcdc0718e4c76843091f93b5966c63644ff05073ee0aa88cab47eee8a56bbf1cea1bc + languageName: node + linkType: hard + +"@opentelemetry/otlp-transformer@npm:0.41.2": + version: 0.41.2 + resolution: "@opentelemetry/otlp-transformer@npm:0.41.2" + dependencies: + "@opentelemetry/api-logs": "npm:0.41.2" + "@opentelemetry/core": "npm:1.15.2" + "@opentelemetry/resources": "npm:1.15.2" + "@opentelemetry/sdk-logs": "npm:0.41.2" + "@opentelemetry/sdk-metrics": "npm:1.15.2" + "@opentelemetry/sdk-trace-base": "npm:1.15.2" + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.5.0" + checksum: 9d06300190020a1988378dea01fee3de8def099fcbbb40141d7986448f48414c2e5f292cc1167239cec7136f8c597da024404805a64ee88f7ad99ceeab0ca60f + languageName: node + linkType: hard + +"@opentelemetry/propagator-b3@npm:1.13.0": + version: 1.13.0 + resolution: "@opentelemetry/propagator-b3@npm:1.13.0" + dependencies: + "@opentelemetry/core": "npm:1.13.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.5.0" + checksum: fbe15965a642500e926fc4ec6d6646f78df6fab0944ab2b011698d84c8e43ac4ebe46faa918c264c1902db238bf344185e474a3d5b1f6e2a0ff8da65a86ba516 + languageName: node + linkType: hard + +"@opentelemetry/propagator-jaeger@npm:1.13.0": + version: 1.13.0 + resolution: "@opentelemetry/propagator-jaeger@npm:1.13.0" + dependencies: + "@opentelemetry/core": "npm:1.13.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.5.0" + checksum: 53948d955b633ca6b6fe4168ccc4ad498c9fd8b2fe6e36f4fbaa3ad4179a50883dadbfdb039c5be8bc92d8441fd736a18e58f1bdff8d4c5a1d9f685290d21715 + languageName: node + linkType: hard + +"@opentelemetry/resources@npm:1.13.0": + version: 1.13.0 + resolution: "@opentelemetry/resources@npm:1.13.0" + dependencies: + "@opentelemetry/core": "npm:1.13.0" + "@opentelemetry/semantic-conventions": "npm:1.13.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.5.0" + checksum: 87180744fdb3b8659a9955b3d93397484d2af12de0e945f1311e2bee7f11b37761141b5db485c6dcaec079523be04d12d56303a35038ac1051f53a1db126f40f + languageName: node + linkType: hard + +"@opentelemetry/resources@npm:1.15.2": + version: 1.15.2 + resolution: "@opentelemetry/resources@npm:1.15.2" + dependencies: + "@opentelemetry/core": "npm:1.15.2" + "@opentelemetry/semantic-conventions": "npm:1.15.2" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.5.0" + checksum: 137a20a5cc2a71039919fc8a38b44c424c3fc4d7b413e2c8fd8db503244387f67cc971f4018bfc7b04fb9df6da2dea683ff9fb2775673f15bd63bca62cf92015 + languageName: node + linkType: hard + +"@opentelemetry/resources@npm:1.18.1, @opentelemetry/resources@npm:^1.13.0": + version: 1.18.1 + resolution: "@opentelemetry/resources@npm:1.18.1" + dependencies: + "@opentelemetry/core": "npm:1.18.1" + "@opentelemetry/semantic-conventions": "npm:1.18.1" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.8.0" + checksum: 064cc1948c7ea9a31edfbf9945c326be1c2802e48c0c0e977cfd2cb4e5e3b63de13d7cc299da31ca99fd2fc82587c16fca53fc60a64db49d479fb16b4593eaea + languageName: node + linkType: hard + +"@opentelemetry/sdk-logs@npm:0.39.1": + version: 0.39.1 + resolution: "@opentelemetry/sdk-logs@npm:0.39.1" + dependencies: + "@opentelemetry/core": "npm:1.13.0" + "@opentelemetry/resources": "npm:1.13.0" + peerDependencies: + "@opentelemetry/api": ">=1.4.0 <1.5.0" + "@opentelemetry/api-logs": ">=0.38.0" + checksum: 9ef3620c8dbd51f8c5ed9b90b10032c048811e04aadcd694374da6c48a1688c073362afb631a69b3d5985e9267fa7bda3e3c111b92812ea13cbce23526e57b05 + languageName: node + linkType: hard + +"@opentelemetry/sdk-logs@npm:0.41.2": + version: 0.41.2 + resolution: "@opentelemetry/sdk-logs@npm:0.41.2" + dependencies: + "@opentelemetry/core": "npm:1.15.2" + "@opentelemetry/resources": "npm:1.15.2" + peerDependencies: + "@opentelemetry/api": ">=1.4.0 <1.5.0" + "@opentelemetry/api-logs": ">=0.39.1" + checksum: aeb1aa2b7f848b5ac237cd195be064a281118cfedc995157df833fd1b0f2da94315b5d3a45a3f1fdcb75bbe2f032c42bdf144a52fd340f61b0a8a70ab4a97794 + languageName: node + linkType: hard + +"@opentelemetry/sdk-metrics@npm:1.13.0": + version: 1.13.0 + resolution: "@opentelemetry/sdk-metrics@npm:1.13.0" + dependencies: + "@opentelemetry/core": "npm:1.13.0" + "@opentelemetry/resources": "npm:1.13.0" + lodash.merge: "npm:4.6.2" + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.5.0" + checksum: f00b402138b12b1fbab1c1f7d9a4f7f6cdfe9d42ff9b585d2dcf46fca9ed44a624b55614a97bea120e3b0b357303bff524c8564145ad0711fba3c89625943a8b + languageName: node + linkType: hard + +"@opentelemetry/sdk-metrics@npm:1.15.2": + version: 1.15.2 + resolution: "@opentelemetry/sdk-metrics@npm:1.15.2" + dependencies: + "@opentelemetry/core": "npm:1.15.2" + "@opentelemetry/resources": "npm:1.15.2" + lodash.merge: "npm:^4.6.2" + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.5.0" + checksum: 2000356b0d29673ec7a40fc354e2c2147dd7b90885095e5cbc2c995403e1752e971d24a5241c6485dd4c69026dbd3c23757340c8fe90f2f0ee16c912f3b0d6dd + languageName: node + linkType: hard + +"@opentelemetry/sdk-metrics@npm:^1.13.0": + version: 1.18.1 + resolution: "@opentelemetry/sdk-metrics@npm:1.18.1" + dependencies: + "@opentelemetry/core": "npm:1.18.1" + "@opentelemetry/resources": "npm:1.18.1" + lodash.merge: "npm:^4.6.2" + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.8.0" + checksum: 3c7050eb997d0bf9d1a6182f94cb49fcf4d62dd47df45b7e9e881df5bd6135a0d54c664fd29ae2a21fbf7cf93715c0e3e4a390bd56059e70a9ccd3f7ee5ab6a4 + languageName: node + linkType: hard + +"@opentelemetry/sdk-node@npm:^0.39.1": + version: 0.39.1 + resolution: "@opentelemetry/sdk-node@npm:0.39.1" + dependencies: + "@opentelemetry/core": "npm:1.13.0" + "@opentelemetry/exporter-jaeger": "npm:1.13.0" + "@opentelemetry/exporter-trace-otlp-grpc": "npm:0.39.1" + "@opentelemetry/exporter-trace-otlp-http": "npm:0.39.1" + "@opentelemetry/exporter-trace-otlp-proto": "npm:0.39.1" + "@opentelemetry/exporter-zipkin": "npm:1.13.0" + "@opentelemetry/instrumentation": "npm:0.39.1" + "@opentelemetry/resources": "npm:1.13.0" + "@opentelemetry/sdk-metrics": "npm:1.13.0" + "@opentelemetry/sdk-trace-base": "npm:1.13.0" + "@opentelemetry/sdk-trace-node": "npm:1.13.0" + "@opentelemetry/semantic-conventions": "npm:1.13.0" + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.5.0" + checksum: 35c3fb993a71749f7671aa928e4104d323bbb2b32176140b466d36ce78c5cb0bb1ff3ef7b80013c8e65d0cc660c3b5b427752e013eac141ee8c290067d8098db + languageName: node + linkType: hard + +"@opentelemetry/sdk-trace-base@npm:1.13.0": + version: 1.13.0 + resolution: "@opentelemetry/sdk-trace-base@npm:1.13.0" + dependencies: + "@opentelemetry/core": "npm:1.13.0" + "@opentelemetry/resources": "npm:1.13.0" + "@opentelemetry/semantic-conventions": "npm:1.13.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.5.0" + checksum: deb370f701b21e49b273716f479be9e5634ce3daa993741cc9500d8d8f11781835f1329398f1296402ad2a8455a159e500b42c6a977d83d6b2f8545517d9cbae + languageName: node + linkType: hard + +"@opentelemetry/sdk-trace-base@npm:1.15.2": + version: 1.15.2 + resolution: "@opentelemetry/sdk-trace-base@npm:1.15.2" + dependencies: + "@opentelemetry/core": "npm:1.15.2" + "@opentelemetry/resources": "npm:1.15.2" + "@opentelemetry/semantic-conventions": "npm:1.15.2" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.5.0" + checksum: acfdf1995f7faeeba2656e7272d63fb87af535eddba6ab4457b93d8a4548925beaa5f6335e2580d060a971020c69a9439c8e830130f21c2b1a94200c9d28c2f3 + languageName: node + linkType: hard + +"@opentelemetry/sdk-trace-base@npm:^1.13.0": + version: 1.18.1 + resolution: "@opentelemetry/sdk-trace-base@npm:1.18.1" + dependencies: + "@opentelemetry/core": "npm:1.18.1" + "@opentelemetry/resources": "npm:1.18.1" + "@opentelemetry/semantic-conventions": "npm:1.18.1" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.8.0" + checksum: e3ab716724d9d761c12cbabc41246e7ef27d8c05bc298cae0fa9a7fc84cf9229a87d4128b6ff28d11f12fcc4b0cdabad13d80a5ea57f99e26860bdf38622173c + languageName: node + linkType: hard + +"@opentelemetry/sdk-trace-node@npm:1.13.0": + version: 1.13.0 + resolution: "@opentelemetry/sdk-trace-node@npm:1.13.0" + dependencies: + "@opentelemetry/context-async-hooks": "npm:1.13.0" + "@opentelemetry/core": "npm:1.13.0" + "@opentelemetry/propagator-b3": "npm:1.13.0" + "@opentelemetry/propagator-jaeger": "npm:1.13.0" + "@opentelemetry/sdk-trace-base": "npm:1.13.0" + semver: "npm:^7.3.5" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.5.0" + checksum: 14335942a85a57e19c4731397e951db3aeb1893de69f180fda461e5f96ab6e37984aa46ae18b765a3ff7bbd57aa2fc5471b6a16d05c374118ca2c1bdef1c9a47 + languageName: node + linkType: hard + +"@opentelemetry/semantic-conventions@npm:1.13.0": + version: 1.13.0 + resolution: "@opentelemetry/semantic-conventions@npm:1.13.0" + checksum: 4cce9fea5f706743837e75d539552b2ebb24d0f870f1f5199f2827d4cc68e1bc4d7f54f21aff5051354dda23f6a8f7e6489d3f8c5838069f697bf32aac1fda84 + languageName: node + linkType: hard + +"@opentelemetry/semantic-conventions@npm:1.15.2": + version: 1.15.2 + resolution: "@opentelemetry/semantic-conventions@npm:1.15.2" + checksum: 84428c3703e5bd0fb8e3f99cad0a48feb2ac03fec025f3a5691745486a89e446ea8fdf701c334d9dbb70a0c9f7053af777105f4ebc58fb1c602edb9aef918b28 + languageName: node + linkType: hard + +"@opentelemetry/semantic-conventions@npm:1.18.1": + version: 1.18.1 + resolution: "@opentelemetry/semantic-conventions@npm:1.18.1" + checksum: 6437c3758e732d643218e35c66fa931ddf65dde9a33c10af16b866135cbb5357fc3424316139c2ca1188cf0f5b23e844b6e6c9ab461637cb150a40219bee70e9 + languageName: node + linkType: hard + +"@openzeppelin/contracts@npm:^5.0.0": + version: 5.0.0 + resolution: "@openzeppelin/contracts@npm:5.0.0" + checksum: 77714a20788c4993f4e4d7d2ad0bd253fbe288b890045680dd35b216e809f43ff0efe6be47f9dc90acb6f16539192bea15ad762b224346ca6026e83e4e029a2a + languageName: node + linkType: hard + +"@parcel/watcher-android-arm64@npm:2.3.0": + version: 2.3.0 + resolution: "@parcel/watcher-android-arm64@npm:2.3.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-darwin-arm64@npm:2.3.0": + version: 2.3.0 + resolution: "@parcel/watcher-darwin-arm64@npm:2.3.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-darwin-x64@npm:2.3.0": + version: 2.3.0 + resolution: "@parcel/watcher-darwin-x64@npm:2.3.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher-freebsd-x64@npm:2.3.0": + version: 2.3.0 + resolution: "@parcel/watcher-freebsd-x64@npm:2.3.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm-glibc@npm:2.3.0": + version: 2.3.0 + resolution: "@parcel/watcher-linux-arm-glibc@npm:2.3.0" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm64-glibc@npm:2.3.0": + version: 2.3.0 + resolution: "@parcel/watcher-linux-arm64-glibc@npm:2.3.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm64-musl@npm:2.3.0": + version: 2.3.0 + resolution: "@parcel/watcher-linux-arm64-musl@npm:2.3.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@parcel/watcher-linux-x64-glibc@npm:2.3.0": + version: 2.3.0 + resolution: "@parcel/watcher-linux-x64-glibc@npm:2.3.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-x64-musl@npm:2.3.0": + version: 2.3.0 + resolution: "@parcel/watcher-linux-x64-musl@npm:2.3.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@parcel/watcher-wasm@npm:2.3.0": + version: 2.3.0 + resolution: "@parcel/watcher-wasm@npm:2.3.0" + dependencies: + is-glob: "npm:^4.0.3" + micromatch: "npm:^4.0.5" + napi-wasm: "npm:^1.1.0" + checksum: 7f38b50d3b9d42a3ea4590889f586bc32ad0d7fecc4b6133d2c49f9a3c5abfee18a8a22a0c5a82e446de4e1e3d97e51e318bd911720672913da4e9ae5eff7915 + languageName: node + linkType: hard + +"@parcel/watcher-win32-arm64@npm:2.3.0": + version: 2.3.0 + resolution: "@parcel/watcher-win32-arm64@npm:2.3.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-win32-ia32@npm:2.3.0": + version: 2.3.0 + resolution: "@parcel/watcher-win32-ia32@npm:2.3.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@parcel/watcher-win32-x64@npm:2.3.0": + version: 2.3.0 + resolution: "@parcel/watcher-win32-x64@npm:2.3.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher@npm:^2.3.0": + version: 2.3.0 + resolution: "@parcel/watcher@npm:2.3.0" + dependencies: + "@parcel/watcher-android-arm64": "npm:2.3.0" + "@parcel/watcher-darwin-arm64": "npm:2.3.0" + "@parcel/watcher-darwin-x64": "npm:2.3.0" + "@parcel/watcher-freebsd-x64": "npm:2.3.0" + "@parcel/watcher-linux-arm-glibc": "npm:2.3.0" + "@parcel/watcher-linux-arm64-glibc": "npm:2.3.0" + "@parcel/watcher-linux-arm64-musl": "npm:2.3.0" + "@parcel/watcher-linux-x64-glibc": "npm:2.3.0" + "@parcel/watcher-linux-x64-musl": "npm:2.3.0" + "@parcel/watcher-win32-arm64": "npm:2.3.0" + "@parcel/watcher-win32-ia32": "npm:2.3.0" + "@parcel/watcher-win32-x64": "npm:2.3.0" + detect-libc: "npm:^1.0.3" + is-glob: "npm:^4.0.3" + micromatch: "npm:^4.0.5" + node-addon-api: "npm:^7.0.0" + node-gyp: "npm:latest" + dependenciesMeta: + "@parcel/watcher-android-arm64": + optional: true + "@parcel/watcher-darwin-arm64": + optional: true + "@parcel/watcher-darwin-x64": + optional: true + "@parcel/watcher-freebsd-x64": + optional: true + "@parcel/watcher-linux-arm-glibc": + optional: true + "@parcel/watcher-linux-arm64-glibc": + optional: true + "@parcel/watcher-linux-arm64-musl": + optional: true + "@parcel/watcher-linux-x64-glibc": + optional: true + "@parcel/watcher-linux-x64-musl": + optional: true + "@parcel/watcher-win32-arm64": + optional: true + "@parcel/watcher-win32-ia32": + optional: true + "@parcel/watcher-win32-x64": + optional: true + checksum: f223a6d5c56071c5f466725b93a83d0066ef01837fdae12ce86c9127586ad8138fe52f18de18c2752e3d8ca350b582ea4b55d16a51bd0584428d20698ace17a0 + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:0.11.0, @pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd + languageName: node + linkType: hard + +"@pnpm/config.env-replace@npm:^1.1.0": + version: 1.1.0 + resolution: "@pnpm/config.env-replace@npm:1.1.0" + checksum: 4cfc4a5c49ab3d0c6a1f196cfd4146374768b0243d441c7de8fa7bd28eaab6290f514b98490472cc65dbd080d34369447b3e9302585e1d5c099befd7c8b5e55f + languageName: node + linkType: hard + +"@pnpm/constants@npm:7.1.1": + version: 7.1.1 + resolution: "@pnpm/constants@npm:7.1.1" + checksum: 605550f6d59dbe4796d2bfbbaec6c629cf0cee13b3093d5aa2d0657a1c77d1fc240ffef902d07f618980321c32fcbba69f7bf0fa4215f86cafe0d541745160a3 + languageName: node + linkType: hard + +"@pnpm/core-loggers@npm:9.0.3": + version: 9.0.3 + resolution: "@pnpm/core-loggers@npm:9.0.3" + dependencies: + "@pnpm/types": "npm:9.3.0" + peerDependencies: + "@pnpm/logger": ^5.0.0 + checksum: 11a7db44e6febe9a3914743fbcea9b858d3b911e880ce01cae3e5ee53b7e1204911b6df1c2ebb3b1772e37631981cb5d4b8565fc37ab83a342713595b394c6e3 + languageName: node + linkType: hard + +"@pnpm/error@npm:5.0.2": + version: 5.0.2 + resolution: "@pnpm/error@npm:5.0.2" + dependencies: + "@pnpm/constants": "npm:7.1.1" + checksum: 86fb85364cae579bdc5e5f217db4b731e3ae5d58106fc69b18c339e0740131971dee8f4ffc7211ab8ffd055cdf74709b4dcc8769f1db4bb9865db408ff752ba6 + languageName: node + linkType: hard + +"@pnpm/fetching-types@npm:5.0.0": + version: 5.0.0 + resolution: "@pnpm/fetching-types@npm:5.0.0" + dependencies: + "@zkochan/retry": "npm:^0.2.0" + node-fetch: "npm:3.0.0-beta.9" + checksum: ec6ec3aaf4d10ebf6019854cb2186b6867881582b1341cb2360c47d0c531fa9b2fe899d668ca584d91f2ac8ea91a606be41bfc6d60add9a77fe869f89aeb69a6 + languageName: node + linkType: hard + +"@pnpm/graceful-fs@npm:3.2.0": + version: 3.2.0 + resolution: "@pnpm/graceful-fs@npm:3.2.0" + dependencies: + graceful-fs: "npm:^4.2.11" + checksum: 16d1d909b8a1cd69c9bf8565a768b0e33c190c8a0ff6ad919cb7b0ad79f998ddc93236cc57488c4ffee2f0ce6eb03e08fa7d07e2af486ce955d8307404735dc8 + languageName: node + linkType: hard + +"@pnpm/logger@npm:5.0.0": + version: 5.0.0 + resolution: "@pnpm/logger@npm:5.0.0" + dependencies: + bole: "npm:^5.0.0" + ndjson: "npm:^2.0.0" + checksum: 96f339115177758300a2e648610a2b948566d7b2362e0f6a29673da05546356709d6cfeabb8978ca74667071352c6547c6e9d832b130222c225ec1c66c8d8529 + languageName: node + linkType: hard + +"@pnpm/network.ca-file@npm:^1.0.1": + version: 1.0.2 + resolution: "@pnpm/network.ca-file@npm:1.0.2" + dependencies: + graceful-fs: "npm:4.2.10" + checksum: 95f6e0e38d047aca3283550719155ce7304ac00d98911e4ab026daedaf640a63bd83e3d13e17c623fa41ac72f3801382ba21260bcce431c14fbbc06430ecb776 + languageName: node + linkType: hard + +"@pnpm/npm-conf@npm:^2.1.0": + version: 2.2.2 + resolution: "@pnpm/npm-conf@npm:2.2.2" + dependencies: + "@pnpm/config.env-replace": "npm:^1.1.0" + "@pnpm/network.ca-file": "npm:^1.0.1" + config-chain: "npm:^1.1.11" + checksum: 71393dcfce85603fddd8484b486767163000afab03918303253ae97992615b91d25942f83751366cb40ad2ee32b0ae0a033561de9d878199a024286ff98b0296 + languageName: node + linkType: hard + +"@pnpm/npm-package-arg@npm:^1.0.0": + version: 1.0.0 + resolution: "@pnpm/npm-package-arg@npm:1.0.0" + dependencies: + hosted-git-info: "npm:^4.0.1" + semver: "npm:^7.3.5" + validate-npm-package-name: "npm:^4.0.0" + checksum: 52bfacf0414e83ee25635e4cf7f6749db3b80f571ca37b7ad7f4696b3051d46855578100d66320f4fb3425d16825d7975da7a0448c53d70c04a9a8987644c9bb + languageName: node + linkType: hard + +"@pnpm/npm-resolver@npm:16.0.11": + version: 16.0.11 + resolution: "@pnpm/npm-resolver@npm:16.0.11" + dependencies: + "@pnpm/core-loggers": "npm:9.0.3" + "@pnpm/error": "npm:5.0.2" + "@pnpm/fetching-types": "npm:5.0.0" + "@pnpm/graceful-fs": "npm:3.2.0" + "@pnpm/resolve-workspace-range": "npm:5.0.1" + "@pnpm/resolver-base": "npm:10.0.3" + "@pnpm/types": "npm:9.3.0" + "@zkochan/retry": "npm:^0.2.0" + encode-registry: "npm:^3.0.1" + load-json-file: "npm:^6.2.0" + lru-cache: "npm:^9.1.2" + normalize-path: "npm:^3.0.0" + p-limit: "npm:^3.1.0" + p-memoize: "npm:4.0.1" + parse-npm-tarball-url: "npm:^3.0.0" + path-temp: "npm:^2.1.0" + ramda: "npm:@pnpm/ramda@0.28.1" + rename-overwrite: "npm:^4.0.3" + semver: "npm:^7.5.4" + ssri: "npm:10.0.4" + version-selector-type: "npm:^3.0.0" + peerDependencies: + "@pnpm/logger": ^5.0.0 + checksum: 2cb7d5a1e85cf5e72acba291f39c76aaddcdbcbc9204b4aa3d9b10d487626f1bda8aa068aac90c58b76317a68b2d91121024de70a34b7ee0f91b23aa3408f077 + languageName: node + linkType: hard + +"@pnpm/resolve-workspace-range@npm:5.0.1": + version: 5.0.1 + resolution: "@pnpm/resolve-workspace-range@npm:5.0.1" + dependencies: + semver: "npm:^7.4.0" + checksum: 7de1a1beb108e47743955cd10b94398a27a91be28e5e9d414cfaab8a3f128719d59bcd5ccf5569e6410639359c7fa057ec2285642d2e25e798cb8d1c2dbb39b1 + languageName: node + linkType: hard + +"@pnpm/resolver-base@npm:10.0.3": + version: 10.0.3 + resolution: "@pnpm/resolver-base@npm:10.0.3" + dependencies: + "@pnpm/types": "npm:9.3.0" + checksum: 3312d57de7c6dfbf7f5c62fdc654cb29793c1d6d5d26800f1c5de9156a52c7ba044513ffc9a87a49f4184b764b3fd46c5b0c16f081d264d243700ab2f9206767 + languageName: node + linkType: hard + +"@pnpm/types@npm:9.3.0": + version: 9.3.0 + resolution: "@pnpm/types@npm:9.3.0" + checksum: 546474e96828a3c3f5f0074b2b840665cd956069a1ad6fca9b6968dbfde2f36d9165993df1e3509289965661bedbeac0a7f3d854adc47d1aebde911c7a1fb4a9 + languageName: node + linkType: hard + +"@pnpm/workspace.pkgs-graph@npm:2.0.7": + version: 2.0.7 + resolution: "@pnpm/workspace.pkgs-graph@npm:2.0.7" + dependencies: + "@pnpm/npm-package-arg": "npm:^1.0.0" + "@pnpm/npm-resolver": "npm:16.0.11" + "@pnpm/resolve-workspace-range": "npm:5.0.1" + ramda: "npm:@pnpm/ramda@0.28.1" + checksum: 66f89af038efcb39501ba4675f720307bf42d947bf257170952539b219500f2ac399df89f0d89e945487e0cd3830f8feef02571b9eb54e5c96e64c2fa62ddab1 + languageName: node + linkType: hard + +"@probot/adapter-github-actions@npm:^3.1.3": + version: 3.1.3 + resolution: "@probot/adapter-github-actions@npm:3.1.3" + dependencies: + "@actions/core": "npm:^1.2.6" + pino: "npm:^8.5.0" + probot: "npm:^12.2.1" + through2: "npm:^4.0.2" + checksum: 7a637823b5a7f843c8ba5962364a93a09527b0f2cfa46c64f42dcb2cb894a03384032f692a0648fc091e51b662e61a1fdc6be60b42007718eee30c77e674422d + languageName: node + linkType: hard + +"@probot/get-private-key@npm:^1.1.0": + version: 1.1.2 + resolution: "@probot/get-private-key@npm:1.1.2" + checksum: c0a0efbd05705b9ad660ebd3834e9adfff5bd7c5da74acf382610cf3d8d0ca326a7a3603f5204d9cb1534851ab765fa785a2a922df7d800387380759b625e151 + languageName: node + linkType: hard + +"@probot/octokit-plugin-config@npm:^1.0.0": + version: 1.1.6 + resolution: "@probot/octokit-plugin-config@npm:1.1.6" + dependencies: + "@types/js-yaml": "npm:^4.0.5" + js-yaml: "npm:^4.1.0" + peerDependencies: + "@octokit/core": ">=3" + checksum: be5d95dacd444a23d638c93ecdd005f69fd47261144cd5f838b5d740805c4b1a1a869189cd76363f530b9ff1190b7c5cb45669ec98c6bd31f2ab93759dffa299 + languageName: node + linkType: hard + +"@probot/pino@npm:^2.2.0": + version: 2.3.5 + resolution: "@probot/pino@npm:2.3.5" + dependencies: + "@sentry/node": "npm:^6.0.0" + pino-pretty: "npm:^6.0.0" + pump: "npm:^3.0.0" + readable-stream: "npm:^3.6.0" + split2: "npm:^4.0.0" + bin: + pino-probot: cli.js + checksum: 6787357627215aac123b85548b54b46517e465dabaee62eea99197dcf7e73f934dbb66ea9b030e544d63884cf357a251c1aa10b423e607bce4db8b0a60efa9dc + languageName: node + linkType: hard + +"@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/aspromise@npm:1.1.2" + checksum: a83343a468ff5b5ec6bff36fd788a64c839e48a07ff9f4f813564f58caf44d011cd6504ed2147bf34835bd7a7dd2107052af755961c6b098fd8902b4f6500d0f + languageName: node + linkType: hard + +"@protobufjs/base64@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/base64@npm:1.1.2" + checksum: eec925e681081af190b8ee231f9bad3101e189abbc182ff279da6b531e7dbd2a56f1f306f37a80b1be9e00aa2d271690d08dcc5f326f71c9eed8546675c8caf6 + languageName: node + linkType: hard + +"@protobufjs/codegen@npm:^2.0.4": + version: 2.0.4 + resolution: "@protobufjs/codegen@npm:2.0.4" + checksum: 26ae337c5659e41f091606d16465bbcc1df1f37cc1ed462438b1f67be0c1e28dfb2ca9f294f39100c52161aef82edf758c95d6d75650a1ddf31f7ddee1440b43 + languageName: node + linkType: hard + +"@protobufjs/eventemitter@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/eventemitter@npm:1.1.0" + checksum: 1eb0a75180e5206d1033e4138212a8c7089a3d418c6dfa5a6ce42e593a4ae2e5892c4ef7421f38092badba4040ea6a45f0928869989411001d8c1018ea9a6e70 + languageName: node + linkType: hard + +"@protobufjs/fetch@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/fetch@npm:1.1.0" + dependencies: + "@protobufjs/aspromise": "npm:^1.1.1" + "@protobufjs/inquire": "npm:^1.1.0" + checksum: cda6a3dc2d50a182c5865b160f72077aac197046600091dbb005dd0a66db9cce3c5eaed6d470ac8ed49d7bcbeef6ee5f0bc288db5ff9a70cbd003e5909065233 + languageName: node + linkType: hard + +"@protobufjs/float@npm:^1.0.2": + version: 1.0.2 + resolution: "@protobufjs/float@npm:1.0.2" + checksum: 18f2bdede76ffcf0170708af15c9c9db6259b771e6b84c51b06df34a9c339dbbeec267d14ce0bddd20acc142b1d980d983d31434398df7f98eb0c94a0eb79069 + languageName: node + linkType: hard + +"@protobufjs/inquire@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/inquire@npm:1.1.0" + checksum: 64372482efcba1fb4d166a2664a6395fa978b557803857c9c03500e0ac1013eb4b1aacc9ed851dd5fc22f81583670b4f4431bae186f3373fedcfde863ef5921a + languageName: node + linkType: hard + +"@protobufjs/path@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/path@npm:1.1.2" + checksum: cece0a938e7f5dfd2fa03f8c14f2f1cf8b0d6e13ac7326ff4c96ea311effd5fb7ae0bba754fbf505312af2e38500250c90e68506b97c02360a43793d88a0d8b4 + languageName: node + linkType: hard + +"@protobufjs/pool@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/pool@npm:1.1.0" + checksum: eda2718b7f222ac6e6ad36f758a92ef90d26526026a19f4f17f668f45e0306a5bd734def3f48f51f8134ae0978b6262a5c517c08b115a551756d1a3aadfcf038 + languageName: node + linkType: hard + +"@protobufjs/utf8@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/utf8@npm:1.1.0" + checksum: a3fe31fe3fa29aa3349e2e04ee13dc170cc6af7c23d92ad49e3eeaf79b9766264544d3da824dba93b7855bd6a2982fb40032ef40693da98a136d835752beb487 + languageName: node + linkType: hard + +"@rollup/pluginutils@npm:^4.0.0": + version: 4.2.1 + resolution: "@rollup/pluginutils@npm:4.2.1" + dependencies: + estree-walker: "npm:^2.0.1" + picomatch: "npm:^2.2.2" + checksum: 3ee56b2c8f1ed8dfd0a92631da1af3a2dfdd0321948f089b3752b4de1b54dc5076701eadd0e5fc18bd191b77af594ac1db6279e83951238ba16bf8a414c64c48 + languageName: node + linkType: hard + +"@sentry/core@npm:6.19.7": + version: 6.19.7 + resolution: "@sentry/core@npm:6.19.7" + dependencies: + "@sentry/hub": "npm:6.19.7" + "@sentry/minimal": "npm:6.19.7" + "@sentry/types": "npm:6.19.7" + "@sentry/utils": "npm:6.19.7" + tslib: "npm:^1.9.3" + checksum: 65dc0b21859ec8e31e4091c2e0516bad3073de7c2518d239906ff875a0542490688cb76441c462c84189cd0f19176f5af6d6e56dbb5e157c9d03906791259411 + languageName: node + linkType: hard + +"@sentry/hub@npm:6.19.7": + version: 6.19.7 + resolution: "@sentry/hub@npm:6.19.7" + dependencies: + "@sentry/types": "npm:6.19.7" + "@sentry/utils": "npm:6.19.7" + tslib: "npm:^1.9.3" + checksum: 586ac17c01c4ae4d4202adc0d0cfe861ee1087b637ad8692f01c265408b5792f4c14e0dd73506aa266be310665e461d785d083285d63e0ef6c1a1ae43c3d6d50 + languageName: node + linkType: hard + +"@sentry/minimal@npm:6.19.7": + version: 6.19.7 + resolution: "@sentry/minimal@npm:6.19.7" + dependencies: + "@sentry/hub": "npm:6.19.7" + "@sentry/types": "npm:6.19.7" + tslib: "npm:^1.9.3" + checksum: 86f77d62d8ab5364cc1d14088b557045f24543f2354a959840fbc170c2fc38f9406c2d1be2ae33cad501398c0cc066a7f02b6c8f0155e844e70372c77c56f860 + languageName: node + linkType: hard + +"@sentry/node@npm:^6.0.0": + version: 6.19.7 + resolution: "@sentry/node@npm:6.19.7" + dependencies: + "@sentry/core": "npm:6.19.7" + "@sentry/hub": "npm:6.19.7" + "@sentry/types": "npm:6.19.7" + "@sentry/utils": "npm:6.19.7" + cookie: "npm:^0.4.1" + https-proxy-agent: "npm:^5.0.0" + lru_map: "npm:^0.3.3" + tslib: "npm:^1.9.3" + checksum: 4a25dfa4a5278375e7644a3c642abb4a90be70c99fdf633536bf1194f246aa3d11edc8efb3487ed8aeecc01c6ea9204660a9162c019337459da92837b969cfa5 + languageName: node + linkType: hard + +"@sentry/types@npm:6.19.7": + version: 6.19.7 + resolution: "@sentry/types@npm:6.19.7" + checksum: b428ee58ca5f1587a5bdcf5ae19de0116f5c73eba056872b3a54ff2221d0f5166f3ef28867a8563f00d3da08e55ed3e24baad207b4d1d918596867f99c0ec705 + languageName: node + linkType: hard + +"@sentry/utils@npm:6.19.7": + version: 6.19.7 + resolution: "@sentry/utils@npm:6.19.7" + dependencies: + "@sentry/types": "npm:6.19.7" + tslib: "npm:^1.9.3" + checksum: 3c15e6bc75800124924da5b180137007e74d39e605c01bd28d2cfd63ee97fac1ea0c3ec8be712a1ef70802730184b71d0f3b6d50c41da9947fef348f1fd68e12 + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.27.8": + version: 0.27.8 + resolution: "@sinclair/typebox@npm:0.27.8" + checksum: ef6351ae073c45c2ac89494dbb3e1f87cc60a93ce4cde797b782812b6f97da0d620ae81973f104b43c9b7eaa789ad20ba4f6a1359f1cc62f63729a55a7d22d4e + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.31.22": + version: 0.31.28 + resolution: "@sinclair/typebox@npm:0.31.28" + checksum: b3125e370e040738cc42c1ca5210bab44cdfc220b156ccd876f5fa1697ff6fe3ea110190c135e268e41d203d6481750b350add33e79b9874da68dc3a4d601f5a + languageName: node + linkType: hard + +"@sindresorhus/is@npm:^5.2.0": + version: 5.6.0 + resolution: "@sindresorhus/is@npm:5.6.0" + checksum: 66727344d0c92edde5760b5fd1f8092b717f2298a162a5f7f29e4953e001479927402d9d387e245fb9dc7d3b37c72e335e93ed5875edfc5203c53be8ecba1b52 + languageName: node + linkType: hard + +"@sindresorhus/slugify@npm:^2.0.0": + version: 2.2.1 + resolution: "@sindresorhus/slugify@npm:2.2.1" + dependencies: + "@sindresorhus/transliterate": "npm:^1.0.0" + escape-string-regexp: "npm:^5.0.0" + checksum: c3fe41d917347f0e2a1e25a48225afffde8ef379a26217e749d5267e965f564c6a555fa17475b637d6fd84645f42e1e4b530477b57110fa80428024a0fadba25 + languageName: node + linkType: hard + +"@sindresorhus/transliterate@npm:^1.0.0": + version: 1.6.0 + resolution: "@sindresorhus/transliterate@npm:1.6.0" + dependencies: + escape-string-regexp: "npm:^5.0.0" + checksum: c5552abd98eb4ab3a8653ccb7addf24e0b6f2aa2a4c420689033f8c9d292abb2222fc08e330adf4055580ac78fe810b7467ed012cdf38f4d64175c42571b8b15 + languageName: node + linkType: hard + +"@sinonjs/commons@npm:^3.0.0": + version: 3.0.0 + resolution: "@sinonjs/commons@npm:3.0.0" + dependencies: + type-detect: "npm:4.0.8" + checksum: 1df9cd257942f4e4960dfb9fd339d9e97b6a3da135f3d5b8646562918e863809cb8e00268535f4f4723535d2097881c8fc03d545c414d8555183376cfc54ee84 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^10.0.2": + version: 10.3.0 + resolution: "@sinonjs/fake-timers@npm:10.3.0" + dependencies: + "@sinonjs/commons": "npm:^3.0.0" + checksum: 2e2fb6cc57f227912814085b7b01fede050cd4746ea8d49a1e44d5a0e56a804663b0340ae2f11af7559ea9bf4d087a11f2f646197a660ea3cb04e19efc04aa63 + languageName: node + linkType: hard + +"@snyk/github-codeowners@npm:^1.1.0": + version: 1.1.0 + resolution: "@snyk/github-codeowners@npm:1.1.0" + dependencies: + commander: "npm:^4.1.1" + ignore: "npm:^5.1.8" + p-map: "npm:^4.0.0" + bin: + github-codeowners: dist/cli.js + checksum: 92d860a904a1e67f8563d4ac4d540cc613f71193f7968933b4a4b1526e80a97f536f52d27762c158e3e39d48c2f3db4906ec78846309351c741abb1a28653af9 + languageName: node + linkType: hard + +"@supabase/functions-js@npm:^2.1.5": + version: 2.1.5 + resolution: "@supabase/functions-js@npm:2.1.5" + dependencies: + "@supabase/node-fetch": "npm:^2.6.14" + checksum: f2af9f12c9ffa4460998c166d71184bb2fc7753f2063548d482a51db3178da24217cd9dea1be8803356c3fd743848fdfb1e1903d882aa90fa7a7ae0c5dc7d070 + languageName: node + linkType: hard + +"@supabase/gotrue-js@npm:^2.54.0": + version: 2.54.1 + resolution: "@supabase/gotrue-js@npm:2.54.1" + dependencies: + "@supabase/node-fetch": "npm:^2.6.14" + checksum: 54e6c5066e626ab57be742c7722e73583776c3e93b785964ebdb9bad1826b68d09df2385b8f8cb9cd61623ba08ff12229304687eedb07fa4a10cf1a144c9c716 + languageName: node + linkType: hard + +"@supabase/node-fetch@npm:^2.6.14": + version: 2.6.14 + resolution: "@supabase/node-fetch@npm:2.6.14" + dependencies: + whatwg-url: "npm:^5.0.0" + checksum: 645db87873ba9bb661cf41c46b05b52a8a769ca66abf1ac7b9f3b900e6dd5e7a97dfa421897db0ace21dd3acb409ba35f22225818bf5860e4af92a38e102be86 + languageName: node + linkType: hard + +"@supabase/postgrest-js@npm:^1.8.4": + version: 1.8.4 + resolution: "@supabase/postgrest-js@npm:1.8.4" + dependencies: + "@supabase/node-fetch": "npm:^2.6.14" + checksum: 622d7a796b13d76f6cb4ec18b7f20a87ba4f2502a45f50a8e509405051f298ff7fed8414b4ee801804fed21e14365367980498362212f005012947a3231e9a8d + languageName: node + linkType: hard + +"@supabase/realtime-js@npm:^2.8.0": + version: 2.8.0 + resolution: "@supabase/realtime-js@npm:2.8.0" + dependencies: + "@supabase/node-fetch": "npm:^2.6.14" + "@types/phoenix": "npm:^1.5.4" + "@types/websocket": "npm:^1.0.3" + websocket: "npm:^1.0.34" + checksum: bee528e343c63b217929f24e39f86d6300b51ad1c9a3e8aee30de40e42208b5286786adeb338223b81fe13ba8664ef68080db52ec1de0b856e414b52b0f22cac + languageName: node + linkType: hard + +"@supabase/storage-js@npm:^2.5.4": + version: 2.5.4 + resolution: "@supabase/storage-js@npm:2.5.4" + dependencies: + "@supabase/node-fetch": "npm:^2.6.14" + checksum: a541a282a6c247de785457db12d8e53d90d1b4fff0aabc76233c39c20ab8a10d9b41097ebf0b90985a0b8459db9e3bdc8a08ac5b1885b0fb417ff910af2b527a + languageName: node + linkType: hard + +"@supabase/supabase-js@npm:^2.4.0": + version: 2.37.0 + resolution: "@supabase/supabase-js@npm:2.37.0" + dependencies: + "@supabase/functions-js": "npm:^2.1.5" + "@supabase/gotrue-js": "npm:^2.54.0" + "@supabase/node-fetch": "npm:^2.6.14" + "@supabase/postgrest-js": "npm:^1.8.4" + "@supabase/realtime-js": "npm:^2.8.0" + "@supabase/storage-js": "npm:^2.5.4" + checksum: 7ce115fbd39ff2f1cd2254e4b6e74cd7209f86fb5bc6a51bf4781520a183b928d72f64a4bb633034115a733b2baf4cc90613f15f465a3505c32db74bdce6efdd + languageName: node + linkType: hard + +"@szmarczak/http-timer@npm:^5.0.1": + version: 5.0.1 + resolution: "@szmarczak/http-timer@npm:5.0.1" + dependencies: + defer-to-connect: "npm:^2.0.1" + checksum: 4629d2fbb2ea67c2e9dc03af235c0991c79ebdddcbc19aed5d5732fb29ce01c13331e9b1a491584b9069bd6ecde6581dcbf871f11b7eefdebbab34de6cf2197e + languageName: node + linkType: hard + +"@tokenizer/token@npm:^0.3.0": + version: 0.3.0 + resolution: "@tokenizer/token@npm:0.3.0" + checksum: 7ab9a822d4b5ff3f5bca7f7d14d46bdd8432528e028db4a52be7fbf90c7f495cc1af1324691dda2813c6af8dc4b8eb29de3107d4508165f9aa5b53e7d501f155 + languageName: node + linkType: hard + +"@tootallnate/once@npm:2": + version: 2.0.0 + resolution: "@tootallnate/once@npm:2.0.0" + checksum: 073bfa548026b1ebaf1659eb8961e526be22fa77139b10d60e712f46d2f0f05f4e6c8bec62a087d41088ee9e29faa7f54838568e475ab2f776171003c3920858 + languageName: node + linkType: hard + +"@trysound/sax@npm:0.2.0": + version: 0.2.0 + resolution: "@trysound/sax@npm:0.2.0" + checksum: 44907308549ce775a41c38a815f747009ac45929a45d642b836aa6b0a536e4978d30b8d7d680bbd116e9dd73b7dbe2ef0d1369dcfc2d09e83ba381e485ecbe12 + languageName: node + linkType: hard + +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.9 + resolution: "@tsconfig/node10@npm:1.0.9" + checksum: c176a2c1e1b16be120c328300ea910df15fb9a5277010116d26818272341a11483c5a80059389d04edacf6fd2d03d4687ad3660870fdd1cc0b7109e160adb220 + languageName: node + linkType: hard + +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node12@npm:1.0.11" + checksum: dddca2b553e2bee1308a056705103fc8304e42bb2d2cbd797b84403a223b25c78f2c683ec3e24a095e82cd435387c877239bffcb15a590ba817cd3f6b9a99fd9 + languageName: node + linkType: hard + +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.3 + resolution: "@tsconfig/node14@npm:1.0.3" + checksum: 67c1316d065fdaa32525bc9449ff82c197c4c19092b9663b23213c8cbbf8d88b6ed6a17898e0cbc2711950fbfaf40388938c1c748a2ee89f7234fc9e7fe2bf44 + languageName: node + linkType: hard + +"@tsconfig/node16@npm:^1.0.2": + version: 1.0.4 + resolution: "@tsconfig/node16@npm:1.0.4" + checksum: 05f8f2734e266fb1839eb1d57290df1664fe2aa3b0fdd685a9035806daa635f7519bf6d5d9b33f6e69dd545b8c46bd6e2b5c79acb2b1f146e885f7f11a42a5bb + languageName: node + linkType: hard + +"@types/aws-lambda@npm:^8.10.83": + version: 8.10.129 + resolution: "@types/aws-lambda@npm:8.10.129" + checksum: ed8dd5880d9b0b4920b754c390c9b64c9ff3936b0f56f266dcad6c0caeba0533245b43f547f0ff604a8f4b8f38c8108b36d46d490952862ba852747f5422648f + languageName: node + linkType: hard + +"@types/babel__core@npm:^7.1.14": + version: 7.20.2 + resolution: "@types/babel__core@npm:7.20.2" + dependencies: + "@babel/parser": "npm:^7.20.7" + "@babel/types": "npm:^7.20.7" + "@types/babel__generator": "npm:*" + "@types/babel__template": "npm:*" + "@types/babel__traverse": "npm:*" + checksum: 4bd4bc0803ddd17af37871a8139e5b6c80b182f5f6d716c6484da1286522eba84750ffc527539bc39496876e7193f316b7493b99caa37af2b4e6ef345ee2ff8c + languageName: node + linkType: hard + +"@types/babel__generator@npm:*": + version: 7.6.5 + resolution: "@types/babel__generator@npm:7.6.5" + dependencies: + "@babel/types": "npm:^7.0.0" + checksum: b3e2668950208a681966fb93faa3a9164319caf960ff2ae232469fd09aa9b59a35d3328221027c373bb29d250b709073479f4fa1e404d109515846a65e06f0e2 + languageName: node + linkType: hard + +"@types/babel__template@npm:*": + version: 7.4.2 + resolution: "@types/babel__template@npm:7.4.2" + dependencies: + "@babel/parser": "npm:^7.1.0" + "@babel/types": "npm:^7.0.0" + checksum: 487e1a2fcb382d70a6f6e8136f19979e8db6048cd2eebee153e561b5c529f45e45ee8a5422078aa66375c9c5dfc67bcd2fd3989dc8e3a4ba0149640b7dbd1c13 + languageName: node + linkType: hard + +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": + version: 7.20.2 + resolution: "@types/babel__traverse@npm:7.20.2" + dependencies: + "@babel/types": "npm:^7.20.7" + checksum: 4a018298e7da9eef2cb962cf2daa1b87dd32f6b2f800b81d2d8f1c8db6c56a2bcac432c7b7a090c746784ccccd82f2c1dcf7cebe1e72923a27359af87bef854b + languageName: node + linkType: hard + +"@types/body-parser@npm:*": + version: 1.19.5 + resolution: "@types/body-parser@npm:1.19.5" + dependencies: + "@types/connect": "npm:*" + "@types/node": "npm:*" + checksum: aebeb200f25e8818d8cf39cd0209026750d77c9b85381cdd8deeb50913e4d18a1ebe4b74ca9b0b4d21952511eeaba5e9fbbf739b52731a2061e206ec60d568df + languageName: node + linkType: hard + +"@types/btoa-lite@npm:^1.0.0": + version: 1.0.2 + resolution: "@types/btoa-lite@npm:1.0.2" + checksum: daffbb47e4fe6493df70d83878b550adab48bab2f02b3591a59367af3ecebf34c971e070479ab68d83ca59cbeefbc61a50d9a7552f639dc908706183e0222bab + languageName: node + linkType: hard + +"@types/connect@npm:*": + version: 3.4.38 + resolution: "@types/connect@npm:3.4.38" + dependencies: + "@types/node": "npm:*" + checksum: 2e1cdba2c410f25649e77856505cd60223250fa12dff7a503e492208dbfdd25f62859918f28aba95315251fd1f5e1ffbfca1e25e73037189ab85dd3f8d0a148c + languageName: node + linkType: hard + +"@types/dotenv@npm:^8.2.0": + version: 8.2.0 + resolution: "@types/dotenv@npm:8.2.0" + dependencies: + dotenv: "npm:*" + checksum: cd010440ea750acf2359fb9ed0a1681b00ce29d9c40b602fe33e51642bd44ce30ced54b23fadc05385daa415fe9f671273911bcf95381a5aaf09690b3db96938 + languageName: node + linkType: hard + +"@types/eslint@npm:^8.40.2": + version: 8.44.3 + resolution: "@types/eslint@npm:8.44.3" + dependencies: + "@types/estree": "npm:*" + "@types/json-schema": "npm:*" + checksum: d9d681efe461ec8934800a89773be251a200c9d4528ca2330bb99f4ca3bd6b2d053034d2b5fe645a1567331af2c89e364aed4be8c839f10a1028a3cbe2856b01 + languageName: node + linkType: hard + +"@types/estree@npm:*": + version: 1.0.2 + resolution: "@types/estree@npm:1.0.2" + checksum: 4b5c601d435ea8e2205458de15fd1556b5ae6c9a8323bad8a940ea502d6c824664faca94234c0bf76bf9c87cbf6ac41abee550c9e20433256549d589c9b543bd + languageName: node + linkType: hard + +"@types/express-serve-static-core@npm:^4.17.33": + version: 4.17.41 + resolution: "@types/express-serve-static-core@npm:4.17.41" + dependencies: + "@types/node": "npm:*" + "@types/qs": "npm:*" + "@types/range-parser": "npm:*" + "@types/send": "npm:*" + checksum: dc166cbf4475c00a81fbcab120bf7477c527184be11ae149df7f26d9c1082114c68f8d387a2926fe80291b06477c8bbd9231ff4f5775de328e887695aefce269 + languageName: node + linkType: hard + +"@types/express@npm:^4.17.9": + version: 4.17.21 + resolution: "@types/express@npm:4.17.21" + dependencies: + "@types/body-parser": "npm:*" + "@types/express-serve-static-core": "npm:^4.17.33" + "@types/qs": "npm:*" + "@types/serve-static": "npm:*" + checksum: 12e562c4571da50c7d239e117e688dc434db1bac8be55613294762f84fd77fbd0658ccd553c7d3ab02408f385bc93980992369dd30e2ecd2c68c358e6af8fabf + languageName: node + linkType: hard + +"@types/graceful-fs@npm:^4.1.3": + version: 4.1.7 + resolution: "@types/graceful-fs@npm:4.1.7" + dependencies: + "@types/node": "npm:*" + checksum: a8c04a250cb40207b15097b33c053f5ecf4352f5107c0a2635f674dae8c9a90b28dc9bd6e28307d5aab0b5d3853e713de42110a149a6e303626915047134e87d + languageName: node + linkType: hard + +"@types/http-cache-semantics@npm:^4.0.2": + version: 4.0.4 + resolution: "@types/http-cache-semantics@npm:4.0.4" + checksum: 51b72568b4b2863e0fe8d6ce8aad72a784b7510d72dc866215642da51d84945a9459fa89f49ec48f1e9a1752e6a78e85a4cda0ded06b1c73e727610c925f9ce6 + languageName: node + linkType: hard + +"@types/http-errors@npm:*": + version: 2.0.4 + resolution: "@types/http-errors@npm:2.0.4" + checksum: 494670a57ad4062fee6c575047ad5782506dd35a6b9ed3894cea65830a94367bd84ba302eb3dde331871f6d70ca287bfedb1b2cf658e6132cd2cbd427ab56836 + languageName: node + linkType: hard + +"@types/http-proxy@npm:^1.17.8": + version: 1.17.14 + resolution: "@types/http-proxy@npm:1.17.14" + dependencies: + "@types/node": "npm:*" + checksum: c4bffd87be9aff7e879c05bd2c28716220e0eb39788e3f8d314eee665324ad8f5f0919041cbd710254d553cd9cea023f8b776d4b1ec31d2188eac60af18c3022 + languageName: node + linkType: hard + +"@types/ioredis@npm:^4.27.1": + version: 4.28.10 + resolution: "@types/ioredis@npm:4.28.10" + dependencies: + "@types/node": "npm:*" + checksum: ff680fef6750721c465ee9d6060d3229e49e5b217d68503c4972c4b869b8f84b91cbd9b7d5195a40fb0bff6ab9a4f5e24a2cc17a368ddb0bfe2dfd4eb5fc1872 + languageName: node + linkType: hard + +"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": + version: 2.0.4 + resolution: "@types/istanbul-lib-coverage@npm:2.0.4" + checksum: af5f6b64e788331ed3f7b2e2613cb6ca659c58b8500be94bbda8c995ad3da9216c006f1cfe6f66b321c39392b1bda18b16e63cef090a77d24a00b4bd5ba3b018 + languageName: node + linkType: hard + +"@types/istanbul-lib-report@npm:*": + version: 3.0.0 + resolution: "@types/istanbul-lib-report@npm:3.0.0" + dependencies: + "@types/istanbul-lib-coverage": "npm:*" + checksum: 7ced458631276a28082ee40645224c3cdd8b861961039ff811d841069171c987ec7e50bc221845ec0d04df0022b2f457a21fb2f816dab2fbe64d59377b32031f + languageName: node + linkType: hard + +"@types/istanbul-reports@npm:^3.0.0": + version: 3.0.1 + resolution: "@types/istanbul-reports@npm:3.0.1" + dependencies: + "@types/istanbul-lib-report": "npm:*" + checksum: e147f0db9346a0cae9a359220bc76f7c78509fb6979a2597feb24d64b6e8328d2d26f9d152abbd59c6bca721e4ea2530af20116d01df50815efafd1e151fd777 + languageName: node + linkType: hard + +"@types/jest@npm:^29.5.11": + version: 29.5.11 + resolution: "@types/jest@npm:29.5.11" + dependencies: + expect: "npm:^29.0.0" + pretty-format: "npm:^29.0.0" + checksum: 524a3394845214581278bf4d75055927261fbeac7e1a89cd621bd0636da37d265fe0a85eac58b5778758faad1cbd7c7c361dfc190c78ebde03a91cce33463261 + languageName: node + linkType: hard + +"@types/js-yaml@npm:^4.0.5": + version: 4.0.9 + resolution: "@types/js-yaml@npm:4.0.9" + checksum: 24de857aa8d61526bbfbbaa383aa538283ad17363fcd5bb5148e2c7f604547db36646440e739d78241ed008702a8920665d1add5618687b6743858fae00da211 + languageName: node + linkType: hard + +"@types/jsdom@npm:^21.1.4": + version: 21.1.4 + resolution: "@types/jsdom@npm:21.1.4" + dependencies: + "@types/node": "npm:*" + "@types/tough-cookie": "npm:*" + parse5: "npm:^7.0.0" + checksum: 011343281cd771f5758f2569a18a557dc5c0ccd580e0cc6b5ed690342ca6eccfa4a5bf17cb875b0bc1ff3ea262f0c148552f2d6188460b9d45e79f001995b30e + languageName: node + linkType: hard + +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.9": + version: 7.0.13 + resolution: "@types/json-schema@npm:7.0.13" + checksum: 446fe6722899333ff647b5853fdcc9f039156d56abe517166154d3578d641841cc869f61e8b7822c24a1daeb7dfbd4fdcea84bf07c0858e2f9cca415e2ca8dd4 + languageName: node + linkType: hard + +"@types/jsonwebtoken@npm:^9.0.0": + version: 9.0.5 + resolution: "@types/jsonwebtoken@npm:9.0.5" + dependencies: + "@types/node": "npm:*" + checksum: c582b8420586f3b9550f7e34992cb32be300bc953636f3b087ed9c180ce7ea5c2e4b35090be2d57f0d3168cc3ca1074932907caa2afe09f4e9c84cf5c0daefa8 + languageName: node + linkType: hard + +"@types/libsodium-wrappers@npm:^0.7.10": + version: 0.7.11 + resolution: "@types/libsodium-wrappers@npm:0.7.11" + checksum: d2cf19c8155f78b891f1bd642c5236f28c921da024c9a99b15a62afea57bb71ae945b5cc689771fac471e82400f653f26b9f3cafad22878ea641449f72f91b4f + languageName: node + linkType: hard + +"@types/linkify-it@npm:*": + version: 3.0.4 + resolution: "@types/linkify-it@npm:3.0.4" + checksum: da692444e1d4c0ee8433d7543572636d7b47c24b0c2ab80ceebf62b2a46690e07359e863136dee3b0440efc62b52b0259a48dbc2c096032fe6a913a022669685 + languageName: node + linkType: hard + +"@types/lodash@npm:^4.14.202": + version: 4.14.202 + resolution: "@types/lodash@npm:4.14.202" + checksum: 6064d43c8f454170841bd67c8266cc9069d9e570a72ca63f06bceb484cb4a3ee60c9c1f305c1b9e3a87826049fd41124b8ef265c4dd08b00f6766609c7fe9973 + languageName: node + linkType: hard + +"@types/markdown-it@npm:^13.0.4": + version: 13.0.4 + resolution: "@types/markdown-it@npm:13.0.4" + dependencies: + "@types/linkify-it": "npm:*" + "@types/mdurl": "npm:*" + checksum: fc86606eaf694007443ae71430eb61ec4419d6beef0ba877a1db57ef42ecae0419fadb9563903ec8dc4a72f633327872740d1a872cf7f4e069948b43bf567869 + languageName: node + linkType: hard + +"@types/mdurl@npm:*": + version: 1.0.4 + resolution: "@types/mdurl@npm:1.0.4" + checksum: 8329e967d124ae1d3dc2470051963f9ba1b13cfb0739cef891af534fc2881b195c66c18d514af769409843a0b81094f60134f4bdbadc43dfbc7020afa089a2b6 + languageName: node + linkType: hard + +"@types/mime@npm:*": + version: 3.0.4 + resolution: "@types/mime@npm:3.0.4" + checksum: db478bc0f99e40f7b3e01d356a9bdf7817060808a294978111340317bcd80ca35382855578c5b60fbc84ae449674bd9bb38427b18417e1f8f19e4f72f8b242cd + languageName: node + linkType: hard + +"@types/mime@npm:^1": + version: 1.3.5 + resolution: "@types/mime@npm:1.3.5" + checksum: c2ee31cd9b993804df33a694d5aa3fa536511a49f2e06eeab0b484fef59b4483777dbb9e42a4198a0809ffbf698081fdbca1e5c2218b82b91603dfab10a10fbc + languageName: node + linkType: hard + +"@types/minimist@npm:^1.2.0": + version: 1.2.2 + resolution: "@types/minimist@npm:1.2.2" + checksum: f220f57f682bbc3793dab4518f8e2180faa79d8e2589c79614fd777d7182be203ba399020c3a056a115064f5d57a065004a32b522b2737246407621681b24137 + languageName: node + linkType: hard + +"@types/ms@npm:^0.7.31": + version: 0.7.31 + resolution: "@types/ms@npm:0.7.31" + checksum: 19fae4f587651e8761c76a0c72ba8af1700d37054476878d164b758edcc926f4420ed06037a1a7fdddc1dbea25265895d743c8b2ea44f3f3f7ac06c449b9221e + languageName: node + linkType: hard + +"@types/node-fetch@npm:^2.6.4": + version: 2.6.6 + resolution: "@types/node-fetch@npm:2.6.6" + dependencies: + "@types/node": "npm:*" + form-data: "npm:^4.0.0" + checksum: fce52a0b65f4cb9e5059c9b3250682c8f0f0c2ce1d1a18b5bbc61b5fbf5f320b76d42b4dfa5c0567fe0704bdf0c0397527008efcb0749859aaaff8c51b6ed6c1 + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 20.10.5 + resolution: "@types/node@npm:20.10.5" + dependencies: + undici-types: "npm:~5.26.4" + checksum: be30609aae0bfe492097815f166ccc07f465220cb604647fa4e5ec05a1d16c012a41b82b5f11ecfe2485cbb479d4d20384b95b809ca0bcff6d94d5bbafa645bb + languageName: node + linkType: hard + +"@types/node@npm:20.4.7": + version: 20.4.7 + resolution: "@types/node@npm:20.4.7" + checksum: 95c0179ca0c1e3c96f3613276f98c7f620ee035f5d871e3045bc39e76fb77f4330b03b79335d8d254e88c8deb1143fcaa2fb4ad576d857c31f389282fe56a0f1 + languageName: node + linkType: hard + +"@types/node@npm:>=12.12.47, @types/node@npm:>=13.7.0": + version: 20.10.4 + resolution: "@types/node@npm:20.10.4" + dependencies: + undici-types: "npm:~5.26.4" + checksum: 2c8b70cba731eb2ae3ae046daa74903bfcbb0e7b9196da767e5895054f6d252296ae7a04fb1dbbcb53bb004c4c658c05eaea2731bc9e2dd9e08f7e88d672f563 + languageName: node + linkType: hard + +"@types/node@npm:^14.18.37": + version: 14.18.63 + resolution: "@types/node@npm:14.18.63" + checksum: 626a371419a6a0e11ca460b22bb4894abe5d75c303739588bc96267e380aa8b90ba5a87bc552400584f0ac2a84b5c458dadcbcf0dfd2396ebeb765f7a7f95893 + languageName: node + linkType: hard + +"@types/node@npm:^18.11.18": + version: 18.18.0 + resolution: "@types/node@npm:18.18.0" + checksum: 5bcd1bd9536394c2accba38892e3396892dc9926608bd81d98553b3e50a61edb8e1503bc42511dae1175aa770f7c0a9c0b1f92d064b59a77ff68d33e3122070a + languageName: node + linkType: hard + +"@types/normalize-package-data@npm:^2.4.0": + version: 2.4.1 + resolution: "@types/normalize-package-data@npm:2.4.1" + checksum: c90b163741f27a1a4c3b1869d7d5c272adbd355eb50d5f060f9ce122ce4342cf35f5b0005f55ef780596cacfeb69b7eee54cd3c2e02d37f75e664945b6e75fc6 + languageName: node + linkType: hard + +"@types/normalize-package-data@npm:^2.4.1": + version: 2.4.4 + resolution: "@types/normalize-package-data@npm:2.4.4" + checksum: aef7bb9b015883d6f4119c423dd28c4bdc17b0e8a0ccf112c78b4fe0e91fbc4af7c6204b04bba0e199a57d2f3fbbd5b4a14bf8739bf9d2a39b2a0aad545e0f86 + languageName: node + linkType: hard + +"@types/phoenix@npm:^1.5.4": + version: 1.6.2 + resolution: "@types/phoenix@npm:1.6.2" + checksum: 68cf9969822a128517b14f1862442b04ff230770438038ce0dd4a1f84faef97ee588750dd78d436a1d06e316519fb6f7f9e8b3afb49ddf9557d07aed3290b95f + languageName: node + linkType: hard + +"@types/pino-http@npm:^5.0.6": + version: 5.8.4 + resolution: "@types/pino-http@npm:5.8.4" + dependencies: + "@types/pino": "npm:6.3" + checksum: f24f330285a4d31ae6b3308e030810ef4e10daadb4085cf3728ba8af0a04f2db95f91032ad4a6b8dc04a86b2afc045c6cb5d737705576d2256dd444b4f0dd8a5 + languageName: node + linkType: hard + +"@types/pino-pretty@npm:*": + version: 5.0.0 + resolution: "@types/pino-pretty@npm:5.0.0" + dependencies: + pino-pretty: "npm:*" + checksum: c37ad948adf9cc3665fb150707e44f5230f15e2d691d9d1c3f876ec59cbd637313b797c1580d538e1292b5c385f0e59a73127c9ac5ba953ec2081bde43c2b0f5 + languageName: node + linkType: hard + +"@types/pino-std-serializers@npm:*": + version: 4.0.0 + resolution: "@types/pino-std-serializers@npm:4.0.0" + dependencies: + pino-std-serializers: "npm:*" + checksum: 729c6be8d84973474aa21533892a6bb9cc18c17c2f2e43ff31ec416dd25cfe583eff4c4ca80fe50898359da23b2fbff4caacadacc6e3b15fb4aa2a3fbf77deac + languageName: node + linkType: hard + +"@types/pino@npm:6.3, @types/pino@npm:^6.3.4": + version: 6.3.12 + resolution: "@types/pino@npm:6.3.12" + dependencies: + "@types/node": "npm:*" + "@types/pino-pretty": "npm:*" + "@types/pino-std-serializers": "npm:*" + sonic-boom: "npm:^2.1.0" + checksum: 906a2a30f9f49eda0c84548e3376c1566339855ff25357e77bc357b68d43d8bc1500b95a0028d420a6cfc36efa0229401a6b94552b22398e457dd1c3627d6ccf + languageName: node + linkType: hard + +"@types/qs@npm:*": + version: 6.9.10 + resolution: "@types/qs@npm:6.9.10" + checksum: 6be12e5f062d1b41eb037d59bf9cb65bc9410cedd5e6da832dfd7c8e2b3f4c91e81c9b90b51811140770e5052c6c4e8361181bd9437ddcd4515dc128b7c00353 + languageName: node + linkType: hard + +"@types/range-parser@npm:*": + version: 1.2.7 + resolution: "@types/range-parser@npm:1.2.7" + checksum: 361bb3e964ec5133fa40644a0b942279ed5df1949f21321d77de79f48b728d39253e5ce0408c9c17e4e0fd95ca7899da36841686393b9f7a1e209916e9381a3c + languageName: node + linkType: hard + +"@types/retry@npm:0.12.1": + version: 0.12.1 + resolution: "@types/retry@npm:0.12.1" + checksum: d2d08393973693826fc947fb09596c34bd65863201e2f6d7e9d7a02d504199d6a2bab13eba56f6366ee0fd45434c699a9fdcfff3311e63bf2fad7a4cf34bacfd + languageName: node + linkType: hard + +"@types/semver@npm:^7.3.12": + version: 7.5.1 + resolution: "@types/semver@npm:7.5.1" + checksum: 10746bd8c6b5ba4da8c5b8e246e0ce2ccde7df0e782cbb2b376bc8c6c25ae0aca39a3c82b762912c6eab801cd64ffd8582369c4b96f0d4e7898118b68717c93b + languageName: node + linkType: hard + +"@types/send@npm:*": + version: 0.17.4 + resolution: "@types/send@npm:0.17.4" + dependencies: + "@types/mime": "npm:^1" + "@types/node": "npm:*" + checksum: 7f17fa696cb83be0a104b04b424fdedc7eaba1c9a34b06027239aba513b398a0e2b7279778af521f516a397ced417c96960e5f50fcfce40c4bc4509fb1a5883c + languageName: node + linkType: hard + +"@types/serve-static@npm:*": + version: 1.15.5 + resolution: "@types/serve-static@npm:1.15.5" + dependencies: + "@types/http-errors": "npm:*" + "@types/mime": "npm:*" + "@types/node": "npm:*" + checksum: 811d1a2f7e74a872195e7a013bcd87a2fb1edf07eaedcb9dcfd20c1eb4bc56ad4ea0d52141c13192c91ccda7c8aeb8a530d8a7e60b9c27f5990d7e62e0fecb03 + languageName: node + linkType: hard + +"@types/source-map-support@npm:^0.5.6": + version: 0.5.8 + resolution: "@types/source-map-support@npm:0.5.8" + dependencies: + source-map: "npm:^0.6.0" + checksum: 5b30d626bb9b498ce569d60c0b54081efb776c37e7d9a2ff6297b6747f088fc8451a5667218c8e692d2ed471d0c5fe5dce0ce1a3533cccc2a864247431c3b3d1 + languageName: node + linkType: hard + +"@types/stack-utils@npm:^2.0.0": + version: 2.0.1 + resolution: "@types/stack-utils@npm:2.0.1" + checksum: 3327ee919a840ffe907bbd5c1d07dfd79137dd9732d2d466cf717ceec5bb21f66296173c53bb56cff95fae4185b9cd6770df3e9745fe4ba528bbc4975f54d13f + languageName: node + linkType: hard + +"@types/tough-cookie@npm:*": + version: 4.0.4 + resolution: "@types/tough-cookie@npm:4.0.4" + checksum: d419a2233e5ca44e22fc533146bd1ffd8a26ec7e786d24f8c1fba50e681059d77c0bf0003cd71e9c6185100bf669b147d8cc6fbf07bc8ffae147e3ac64b3ec71 + languageName: node + linkType: hard + +"@types/triple-beam@npm:^1.3.2": + version: 1.3.5 + resolution: "@types/triple-beam@npm:1.3.5" + checksum: d5d7f25da612f6d79266f4f1bb9c1ef8f1684e9f60abab251e1261170631062b656ba26ff22631f2760caeafd372abc41e64867cde27fba54fafb73a35b9056a + languageName: node + linkType: hard + +"@types/websocket@npm:^1.0.3": + version: 1.0.7 + resolution: "@types/websocket@npm:1.0.7" + dependencies: + "@types/node": "npm:*" + checksum: 0c10e812de3b209c1432ad7bc46b30b4ff833938609a1ca9fceaddd61734876232c041a4f75dacd047ed782a30271bf4eeea3fc81e71c1311c032db7a6ab0069 + languageName: node + linkType: hard + +"@types/yargs-parser@npm:*": + version: 21.0.1 + resolution: "@types/yargs-parser@npm:21.0.1" + checksum: f1d723a4c4383a9c53b975820b7490186ca127237ca58eb2ee8f5eacdcdb195a81aeabd1d75560abdf22fc29f70e8bb103d7ab34c5ec49bc19196195a7bf3189 + languageName: node + linkType: hard + +"@types/yargs@npm:^16.0.0": + version: 16.0.9 + resolution: "@types/yargs@npm:16.0.9" + dependencies: + "@types/yargs-parser": "npm:*" + checksum: be24bd9a56c97ddb2964c1c18f5b9fe8271a50e100dc6945989901aae58f7ce6fb8f3a591c749a518401b6301358dbd1997e83c36138a297094feae7f9ac8211 + languageName: node + linkType: hard + +"@types/yargs@npm:^17.0.8": + version: 17.0.25 + resolution: "@types/yargs@npm:17.0.25" + dependencies: + "@types/yargs-parser": "npm:*" + checksum: fdce9d79589ac0bf4bea5e4d92268e22874d47fccd90b31ba1e765fbf327ea3e157d0529a2103b0742e92f4da12bc97be18a54d3fda57778b98d4aa3ca71718b + languageName: node + linkType: hard + +"@types/yauzl@npm:^2.9.1": + version: 2.10.3 + resolution: "@types/yauzl@npm:2.10.3" + dependencies: + "@types/node": "npm:*" + checksum: f1b7c1b99fef9f2fe7f1985ef7426d0cebe48cd031f1780fcdc7451eec7e31ac97028f16f50121a59bcf53086a1fc8c856fd5b7d3e00970e43d92ae27d6b43dc + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:^5.59.11": + version: 5.62.0 + resolution: "@typescript-eslint/eslint-plugin@npm:5.62.0" + dependencies: + "@eslint-community/regexpp": "npm:^4.4.0" + "@typescript-eslint/scope-manager": "npm:5.62.0" + "@typescript-eslint/type-utils": "npm:5.62.0" + "@typescript-eslint/utils": "npm:5.62.0" + debug: "npm:^4.3.4" + graphemer: "npm:^1.4.0" + ignore: "npm:^5.2.0" + natural-compare-lite: "npm:^1.4.0" + semver: "npm:^7.3.7" + tsutils: "npm:^3.21.0" + peerDependencies: + "@typescript-eslint/parser": ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 3f40cb6bab5a2833c3544e4621b9fdacd8ea53420cadc1c63fac3b89cdf5c62be1e6b7bcf56976dede5db4c43830de298ced3db60b5494a3b961ca1b4bff9f2a + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:^5.59.11": + version: 5.62.0 + resolution: "@typescript-eslint/parser@npm:5.62.0" + dependencies: + "@typescript-eslint/scope-manager": "npm:5.62.0" + "@typescript-eslint/types": "npm:5.62.0" + "@typescript-eslint/typescript-estree": "npm:5.62.0" + debug: "npm:^4.3.4" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 315194b3bf39beb9bd16c190956c46beec64b8371e18d6bb72002108b250983eb1e186a01d34b77eb4045f4941acbb243b16155fbb46881105f65e37dc9e24d4 + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/scope-manager@npm:5.62.0" + dependencies: + "@typescript-eslint/types": "npm:5.62.0" + "@typescript-eslint/visitor-keys": "npm:5.62.0" + checksum: 861253235576c1c5c1772d23cdce1418c2da2618a479a7de4f6114a12a7ca853011a1e530525d0931c355a8fd237b9cd828fac560f85f9623e24054fd024726f + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/type-utils@npm:5.62.0" + dependencies: + "@typescript-eslint/typescript-estree": "npm:5.62.0" + "@typescript-eslint/utils": "npm:5.62.0" + debug: "npm:^4.3.4" + tsutils: "npm:^3.21.0" + peerDependencies: + eslint: "*" + peerDependenciesMeta: + typescript: + optional: true + checksum: 93112e34026069a48f0484b98caca1c89d9707842afe14e08e7390af51cdde87378df29d213d3bbd10a7cfe6f91b228031b56218515ce077bdb62ddea9d9f474 + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/types@npm:5.62.0" + checksum: 7febd3a7f0701c0b927e094f02e82d8ee2cada2b186fcb938bc2b94ff6fbad88237afc304cbaf33e82797078bbbb1baf91475f6400912f8b64c89be79bfa4ddf + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:5.62.0, @typescript-eslint/typescript-estree@npm:^5.59.5": + version: 5.62.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" + dependencies: + "@typescript-eslint/types": "npm:5.62.0" + "@typescript-eslint/visitor-keys": "npm:5.62.0" + debug: "npm:^4.3.4" + globby: "npm:^11.1.0" + is-glob: "npm:^4.0.3" + semver: "npm:^7.3.7" + tsutils: "npm:^3.21.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: d7984a3e9d56897b2481940ec803cb8e7ead03df8d9cfd9797350be82ff765dfcf3cfec04e7355e1779e948da8f02bc5e11719d07a596eb1cb995c48a95e38cf + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/utils@npm:5.62.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.2.0" + "@types/json-schema": "npm:^7.0.9" + "@types/semver": "npm:^7.3.12" + "@typescript-eslint/scope-manager": "npm:5.62.0" + "@typescript-eslint/types": "npm:5.62.0" + "@typescript-eslint/typescript-estree": "npm:5.62.0" + eslint-scope: "npm:^5.1.1" + semver: "npm:^7.3.7" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: f09b7d9952e4a205eb1ced31d7684dd55cee40bf8c2d78e923aa8a255318d97279825733902742c09d8690f37a50243f4c4d383ab16bd7aefaf9c4b438f785e1 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" + dependencies: + "@typescript-eslint/types": "npm:5.62.0" + eslint-visitor-keys: "npm:^3.3.0" + checksum: 7c3b8e4148e9b94d9b7162a596a1260d7a3efc4e65199693b8025c71c4652b8042501c0bc9f57654c1e2943c26da98c0f77884a746c6ae81389fcb0b513d995d + languageName: node + linkType: hard + +"@uniswap/permit2-sdk@npm:^1.2.0": + version: 1.2.0 + resolution: "@uniswap/permit2-sdk@npm:1.2.0" + dependencies: + ethers: "npm:^5.3.1" + tiny-invariant: "npm:^1.3.1" + checksum: 70de01192ff15b800e53825ce9f055cddbe31c0572198322b062c66e561e4120cf6bb5959e27fdaf0172dc65406c2f9a61c94f3d85373f8ce66eb14705923791 + languageName: node + linkType: hard + +"@vercel/ncc@npm:^0.34.0": + version: 0.34.0 + resolution: "@vercel/ncc@npm:0.34.0" + dependencies: + node-gyp: "npm:latest" + bin: + ncc: dist/ncc/cli.js + checksum: fc64b3f2f79451ab0b0f91adaf76809940a4bc5ec9abca92e7095e298c0987f59bdeec281ff4846d7c8f4c88a854295498402778b9cf362f03e74d8a90d3e3fa + languageName: node + linkType: hard + +"@vercel/nft@npm:^0.23.0": + version: 0.23.1 + resolution: "@vercel/nft@npm:0.23.1" + dependencies: + "@mapbox/node-pre-gyp": "npm:^1.0.5" + "@rollup/pluginutils": "npm:^4.0.0" + acorn: "npm:^8.6.0" + async-sema: "npm:^3.1.1" + bindings: "npm:^1.4.0" + estree-walker: "npm:2.0.2" + glob: "npm:^7.1.3" + graceful-fs: "npm:^4.2.9" + micromatch: "npm:^4.0.2" + node-gyp-build: "npm:^4.2.2" + resolve-from: "npm:^5.0.0" + bin: + nft: out/cli.js + checksum: e19278512e9ff8618d8a9d82afe5b6f8783fbceebf6558dee67facd4d571618332bd8b025193ae33311f2e48ba68eacffc020ab621574b6398a9d945484209f6 + languageName: node + linkType: hard + +"@vercel/nft@npm:^0.24.3": + version: 0.24.4 + resolution: "@vercel/nft@npm:0.24.4" + dependencies: + "@mapbox/node-pre-gyp": "npm:^1.0.5" + "@rollup/pluginutils": "npm:^4.0.0" + acorn: "npm:^8.6.0" + async-sema: "npm:^3.1.1" + bindings: "npm:^1.4.0" + estree-walker: "npm:2.0.2" + glob: "npm:^7.1.3" + graceful-fs: "npm:^4.2.9" + micromatch: "npm:^4.0.2" + node-gyp-build: "npm:^4.2.2" + resolve-from: "npm:^5.0.0" + bin: + nft: out/cli.js + checksum: 1a845a8c1587d0595d2981a750b1f579ae99c11db821b8530129c7f8b45c5d059993244b697baaf5ccd537641c0038bd1768534f302ef46f97db981833172109 + languageName: node + linkType: hard + +"@xhmikosr/archive-type@npm:^6.0.1": + version: 6.0.1 + resolution: "@xhmikosr/archive-type@npm:6.0.1" + dependencies: + file-type: "npm:^18.5.0" + checksum: eff3197b8c8f6f15842cf264074809b428a0749524fb1135f6c4d9e84fd56ad11b431108fc82c2df162b4681e0e8e979cc169a944cd7547248c3a031f795f80c + languageName: node + linkType: hard + +"@xhmikosr/decompress-tar@npm:^7.0.0": + version: 7.0.0 + resolution: "@xhmikosr/decompress-tar@npm:7.0.0" + dependencies: + file-type: "npm:^18.5.0" + is-stream: "npm:^3.0.0" + tar-stream: "npm:^3.1.4" + checksum: 477f190899180fb4067a06930bc3fd9c5acf9651ab5fbf80157c4e781ffc5403ebcc4523539af5d60bb98d16f2a7b2847fed582ad5b0a17b2ee65409ef230d97 + languageName: node + linkType: hard + +"@xhmikosr/decompress-tarbz2@npm:^7.0.0": + version: 7.0.0 + resolution: "@xhmikosr/decompress-tarbz2@npm:7.0.0" + dependencies: + "@xhmikosr/decompress-tar": "npm:^7.0.0" + file-type: "npm:^18.5.0" + is-stream: "npm:^3.0.0" + seek-bzip: "npm:^1.0.6" + unbzip2-stream: "npm:^1.4.3" + checksum: afe53b82d83609f39da93414e9a80d416cdbc75ecda57535f998f486232bc74eb03ca7aad6ec45f113a1faa009fc1a796e671c09d4e34b6ff820844805524931 + languageName: node + linkType: hard + +"@xhmikosr/decompress-targz@npm:^7.0.0": + version: 7.0.0 + resolution: "@xhmikosr/decompress-targz@npm:7.0.0" + dependencies: + "@xhmikosr/decompress-tar": "npm:^7.0.0" + file-type: "npm:^18.5.0" + is-stream: "npm:^3.0.0" + checksum: 649aee6da1ca73f47f1507310a3a29df54d980397a2cbda58ba4f3226d9fbc54fe2716633dd3324fb04f8a92cef363c80b34f003121040ec53026f335c6d4c66 + languageName: node + linkType: hard + +"@xhmikosr/decompress-unzip@npm:^6.0.0": + version: 6.0.0 + resolution: "@xhmikosr/decompress-unzip@npm:6.0.0" + dependencies: + file-type: "npm:^18.5.0" + get-stream: "npm:^6.0.1" + yauzl: "npm:^2.10.0" + checksum: 5f656ac28c72b2d10311f5a540936a34be4c43d475080140b93049e138bd9d5d391d740eff301179c7d65ee33d37b9a059975a0c36cc0f5aeca431a2f59f3e11 + languageName: node + linkType: hard + +"@xhmikosr/decompress@npm:^9.0.1": + version: 9.0.1 + resolution: "@xhmikosr/decompress@npm:9.0.1" + dependencies: + "@xhmikosr/decompress-tar": "npm:^7.0.0" + "@xhmikosr/decompress-tarbz2": "npm:^7.0.0" + "@xhmikosr/decompress-targz": "npm:^7.0.0" + "@xhmikosr/decompress-unzip": "npm:^6.0.0" + graceful-fs: "npm:^4.2.11" + make-dir: "npm:^4.0.0" + strip-dirs: "npm:^3.0.0" + checksum: 6f17a4f59647c98ddb3084ca42e967fce97188e5582602b3d140d86ca6d2d7644f05543c5c375b9154bc96071893e81b3f350225a4d28446f59ef0a50c10be38 + languageName: node + linkType: hard + +"@xhmikosr/downloader@npm:^13.0.0": + version: 13.0.1 + resolution: "@xhmikosr/downloader@npm:13.0.1" + dependencies: + "@xhmikosr/archive-type": "npm:^6.0.1" + "@xhmikosr/decompress": "npm:^9.0.1" + content-disposition: "npm:^0.5.4" + ext-name: "npm:^5.0.0" + file-type: "npm:^18.5.0" + filenamify: "npm:^5.1.1" + get-stream: "npm:^6.0.1" + got: "npm:^12.6.1" + merge-options: "npm:^3.0.4" + p-event: "npm:^5.0.1" + checksum: 1e54293388c845057b53e386372513ff4abbdb2499f2ff9cae48a9de3256bf0c492d9d35f2a09db928184fc9f1b1294ef3c06be4e5862495ba72a92c66125477 + languageName: node + linkType: hard + +"@zkochan/retry@npm:^0.2.0": + version: 0.2.0 + resolution: "@zkochan/retry@npm:0.2.0" + checksum: 41a197fa7b0146dd1653e4144aaa3fc5941247704a43267dcaf486cf3c2c01afab0c2c8aa708077fcb94e47790bfdb15b832bb2880547dca8acca87cf786704b + languageName: node + linkType: hard + +"@zkochan/rimraf@npm:^2.1.2": + version: 2.1.3 + resolution: "@zkochan/rimraf@npm:2.1.3" + dependencies: + rimraf: "npm:^3.0.2" + checksum: 44b443a514ffd35e7338bdfe764af374cddd4bab660ccc70287005d247466c1d70f6d46b2e14680b932514048d3dd1af9f8cd07809d1afed9b0c2d6cea69e689 + languageName: node + linkType: hard + +"JSONStream@npm:^1.3.5": + version: 1.3.5 + resolution: "JSONStream@npm:1.3.5" + dependencies: + jsonparse: "npm:^1.2.0" + through: "npm:>=2.2.7 <3" + bin: + JSONStream: ./bin.js + checksum: 0f54694da32224d57b715385d4a6b668d2117379d1f3223dc758459246cca58fdc4c628b83e8a8883334e454a0a30aa198ede77c788b55537c1844f686a751f2 + languageName: node + linkType: hard + +"abab@npm:^2.0.6": + version: 2.0.6 + resolution: "abab@npm:2.0.6" + checksum: 0b245c3c3ea2598fe0025abf7cc7bb507b06949d51e8edae5d12c1b847a0a0c09639abcb94788332b4e2044ac4491c1e8f571b51c7826fd4b0bda1685ad4a278 + languageName: node + linkType: hard + +"abbrev@npm:1": + version: 1.1.1 + resolution: "abbrev@npm:1.1.1" + checksum: 3f762677702acb24f65e813070e306c61fafe25d4b2583f9dfc935131f774863f3addd5741572ed576bd69cabe473c5af18e1e108b829cb7b6b4747884f726e6 + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: f742a5a107473946f426c691c08daba61a1d15942616f300b5d32fd735be88fef5cba24201757b6c407fd564555fb48c751cfa33519b2605c8a7aadd22baf372 + languageName: node + linkType: hard + +"abort-controller@npm:^3.0.0": + version: 3.0.0 + resolution: "abort-controller@npm:3.0.0" + dependencies: + event-target-shim: "npm:^5.0.0" + checksum: 90ccc50f010250152509a344eb2e71977fbf8db0ab8f1061197e3275ddf6c61a41a6edfd7b9409c664513131dd96e962065415325ef23efa5db931b382d24ca5 + languageName: node + linkType: hard + +"abstract-logging@npm:^2.0.1": + version: 2.0.1 + resolution: "abstract-logging@npm:2.0.1" + checksum: 304879d9babcf6772260e5ddde632e6428e1f42f7a7a116d4689e97ad813a20e0ec2dd1e0a122f3617557f40091b9ca85735de4b48c17a2041268cb47b3f8ef1 + languageName: node + linkType: hard + +"accepts@npm:~1.3.8": + version: 1.3.8 + resolution: "accepts@npm:1.3.8" + dependencies: + mime-types: "npm:~2.1.34" + negotiator: "npm:0.6.3" + checksum: 3a35c5f5586cfb9a21163ca47a5f77ac34fa8ceb5d17d2fa2c0d81f41cbd7f8c6fa52c77e2c039acc0f4d09e71abdc51144246900f6bef5e3c4b333f77d89362 + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1 + languageName: node + linkType: hard + +"acorn-walk@npm:^8.1.1": + version: 8.2.0 + resolution: "acorn-walk@npm:8.2.0" + checksum: dbe92f5b2452c93e960c5594e666dd1fae141b965ff2cb4a1e1d0381e3e4db4274c5ce4ffa3d681a86ca2a8d4e29d5efc0670a08e23fd2800051ea387df56ca2 + languageName: node + linkType: hard + +"acorn@npm:^8.10.0, acorn@npm:^8.6.0": + version: 8.11.2 + resolution: "acorn@npm:8.11.2" + bin: + acorn: bin/acorn + checksum: a3ed76c761b75ec54b1ec3068fb7f113a182e95aea7f322f65098c2958d232e3d211cb6dac35ff9c647024b63714bc528a26d54a925d1fef2c25585b4c8e4017 + languageName: node + linkType: hard + +"acorn@npm:^8.4.1, acorn@npm:^8.9.0": + version: 8.10.0 + resolution: "acorn@npm:8.10.0" + bin: + acorn: bin/acorn + checksum: deaeebfbea6e40f6c0e1070e9b0e16e76ba484de54cbd735914d1d41d19169a450de8630b7a3a0c4e271a3b0c0b075a3427ad1a40d8a69f8747c0e8cb02ee3e2 + languageName: node + linkType: hard + +"aes-js@npm:3.0.0": + version: 3.0.0 + resolution: "aes-js@npm:3.0.0" + checksum: 87dd5b2363534b867db7cef8bc85a90c355460783744877b2db7c8be09740aac5750714f9e00902822f692662bda74cdf40e03fbb5214ffec75c2666666288b8 + languageName: node + linkType: hard + +"agent-base@npm:6": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: "npm:4" + checksum: dc4f757e40b5f3e3d674bc9beb4f1048f4ee83af189bae39be99f57bf1f48dde166a8b0a5342a84b5944ee8e6ed1e5a9d801858f4ad44764e84957122fe46261 + languageName: node + linkType: hard + +"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0": + version: 7.1.0 + resolution: "agent-base@npm:7.1.0" + dependencies: + debug: "npm:^4.3.4" + checksum: fc974ab57ffdd8421a2bc339644d312a9cca320c20c3393c9d8b1fd91731b9bbabdb985df5fc860f5b79d81c3e350daa3fcb31c5c07c0bb385aafc817df004ce + languageName: node + linkType: hard + +"agentkeepalive@npm:^4.2.1": + version: 4.5.0 + resolution: "agentkeepalive@npm:4.5.0" + dependencies: + humanize-ms: "npm:^1.2.1" + checksum: 394ea19f9710f230722996e156607f48fdf3a345133b0b1823244b7989426c16019a428b56c82d3eabef616e938812981d9009f4792ecc66bd6a59e991c62612 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0, aggregate-error@npm:^3.1.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: "npm:^2.0.0" + indent-string: "npm:^4.0.0" + checksum: a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 + languageName: node + linkType: hard + +"aggregate-error@npm:^4.0.0": + version: 4.0.1 + resolution: "aggregate-error@npm:4.0.1" + dependencies: + clean-stack: "npm:^4.0.0" + indent-string: "npm:^5.0.0" + checksum: 75fd739f5c4c60a667cce35ccaf0edf135e147ef0be9a029cab75de14ac9421779b15339d562e58d25b233ea0ef2bbd4c916f149fdbcb73c2b9a62209e611343 + languageName: node + linkType: hard + +"ajv-errors@npm:^3.0.0": + version: 3.0.0 + resolution: "ajv-errors@npm:3.0.0" + peerDependencies: + ajv: ^8.0.1 + checksum: f3d864ebd4bc0b51ad622b5a889cc8903000295eaa058d59c2102f293fe126c3d901419da143eaa817b863cac2e92ae2ef6f55e6c31d07bf272099afe73961ae + languageName: node + linkType: hard + +"ajv-formats@npm:^2.1.1": + version: 2.1.1 + resolution: "ajv-formats@npm:2.1.1" + dependencies: + ajv: "npm:^8.0.0" + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: e43ba22e91b6a48d96224b83d260d3a3a561b42d391f8d3c6d2c1559f9aa5b253bfb306bc94bbeca1d967c014e15a6efe9a207309e95b3eaae07fcbcdc2af662 + languageName: node + linkType: hard + +"ajv@npm:^6.12.4": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: "npm:^3.1.1" + fast-json-stable-stringify: "npm:^2.0.0" + json-schema-traverse: "npm:^0.4.1" + uri-js: "npm:^4.2.2" + checksum: 41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71 + languageName: node + linkType: hard + +"ajv@npm:^8.0.0, ajv@npm:^8.10.0, ajv@npm:^8.11.0, ajv@npm:^8.11.2, ajv@npm:^8.12.0": + version: 8.12.0 + resolution: "ajv@npm:8.12.0" + dependencies: + fast-deep-equal: "npm:^3.1.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + uri-js: "npm:^4.2.2" + checksum: ac4f72adf727ee425e049bc9d8b31d4a57e1c90da8d28bcd23d60781b12fcd6fc3d68db5df16994c57b78b94eed7988f5a6b482fd376dc5b084125e20a0a622e + languageName: node + linkType: hard + +"all-node-versions@npm:^11.3.0": + version: 11.3.0 + resolution: "all-node-versions@npm:11.3.0" + dependencies: + fetch-node-website: "npm:^7.3.0" + filter-obj: "npm:^5.1.0" + get-stream: "npm:^6.0.0" + global-cache-dir: "npm:^4.3.1" + is-plain-obj: "npm:^4.1.0" + path-exists: "npm:^5.0.0" + semver: "npm:^7.3.7" + write-file-atomic: "npm:^4.0.1" + checksum: 1ab4a82a0ae83035bd60bde440961eb5a2d36647cc48a7682a1070a7f1a8b8a406e7f7bf087136dd3d08e0e34dda0bcc5e191f5fa038b0359419e23642cea106 + languageName: node + linkType: hard + +"ansi-align@npm:^3.0.1": + version: 3.0.1 + resolution: "ansi-align@npm:3.0.1" + dependencies: + string-width: "npm:^4.1.0" + checksum: ad8b755a253a1bc8234eb341e0cec68a857ab18bf97ba2bda529e86f6e30460416523e0ec58c32e5c21f0ca470d779503244892873a5895dbd0c39c788e82467 + languageName: node + linkType: hard + +"ansi-color@npm:^0.2.1": + version: 0.2.1 + resolution: "ansi-color@npm:0.2.1" + checksum: 0ccfb57aadd3a955d1bbdc8392fb24e7e13b247812955b0182a3bea3f733d757e49f0b8faa00a6d2c619613f2d2a3136096f91e1fb4d688c39cf24b4f776a0d3 + languageName: node + linkType: hard + +"ansi-escapes@npm:6.2.0, ansi-escapes@npm:^6.0.0": + version: 6.2.0 + resolution: "ansi-escapes@npm:6.2.0" + dependencies: + type-fest: "npm:^3.0.0" + checksum: 3eec75deedd8b10192c5f98e4cd9715cc3ff268d33fc463c24b7d22446668bfcd4ad1803993ea89c0f51f88b5a3399572bacb7c8cb1a067fc86e189c5f3b0c7e + languageName: node + linkType: hard + +"ansi-escapes@npm:^3.2.0": + version: 3.2.0 + resolution: "ansi-escapes@npm:3.2.0" + checksum: 084e1ce38139ad2406f18a8e7efe2b850ddd06ce3c00f633392d1ce67756dab44fe290e573d09ef3c9a0cb13c12881e0e35a8f77a017d39a0a4ab85ae2fae04f + languageName: node + linkType: hard + +"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.1": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: "npm:^0.21.3" + checksum: da917be01871525a3dfcf925ae2977bc59e8c513d4423368645634bf5d4ceba5401574eb705c1e92b79f7292af5a656f78c5725a4b0e1cec97c4b413705c1d50 + languageName: node + linkType: hard + +"ansi-escapes@npm:^5.0.0": + version: 5.0.0 + resolution: "ansi-escapes@npm:5.0.0" + dependencies: + type-fest: "npm:^1.0.2" + checksum: f705cc7fbabb981ddf51562cd950792807bccd7260cc3d9478a619dda62bff6634c87ca100f2545ac7aade9b72652c4edad8c7f0d31a0b949b5fa58f33eaf0d0 + languageName: node + linkType: hard + +"ansi-regex@npm:^3.0.0": + version: 3.0.1 + resolution: "ansi-regex@npm:3.0.1" + checksum: d108a7498b8568caf4a46eea4f1784ab4e0dfb2e3f3938c697dee21443d622d765c958f2b7e2b9f6b9e55e2e2af0584eaa9915d51782b89a841c28e744e7a167 + languageName: node + linkType: hard + +"ansi-regex@npm:^4.1.0": + version: 4.1.1 + resolution: "ansi-regex@npm:4.1.1" + checksum: d36d34234d077e8770169d980fed7b2f3724bfa2a01da150ccd75ef9707c80e883d27cdf7a0eac2f145ac1d10a785a8a855cffd05b85f778629a0db62e7033da + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: cbe16dbd2c6b2735d1df7976a7070dd277326434f0212f43abf6d87674095d247968209babdaad31bb00882fa68807256ba9be340eec2f1004de14ca75f52a08 + languageName: node + linkType: hard + +"ansi-styles@npm:6.2.1, ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: 5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: "npm:^1.9.0" + checksum: ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 + languageName: node + linkType: hard + +"ansi-styles@npm:^5.0.0": + version: 5.2.0 + resolution: "ansi-styles@npm:5.2.0" + checksum: 9c4ca80eb3c2fb7b33841c210d2f20807f40865d27008d7c3f707b7f95cab7d67462a565e2388ac3285b71cb3d9bb2173de8da37c57692a362885ec34d6e27df + languageName: node + linkType: hard + +"ansi-to-html@npm:0.7.2": + version: 0.7.2 + resolution: "ansi-to-html@npm:0.7.2" + dependencies: + entities: "npm:^2.2.0" + bin: + ansi-to-html: bin/ansi-to-html + checksum: 031da78f716e7c6b0e391c64f7bc5e95f2d37123dcc3237d8c592dc35830dd0da05e0c3f3e3f8179856cfe5fd85c689d2ad85024b71b50014da9ef6e8fa021cf + languageName: node + linkType: hard + +"anymatch@npm:^3.0.3, anymatch@npm:^3.1.3, anymatch@npm:~3.1.2": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: "npm:^3.0.0" + picomatch: "npm:^2.0.4" + checksum: 57b06ae984bc32a0d22592c87384cd88fe4511b1dd7581497831c56d41939c8a001b28e7b853e1450f2bf61992dfcaa8ae2d0d161a0a90c4fb631ef07098fbac + languageName: node + linkType: hard + +"aproba@npm:^1.0.3 || ^2.0.0": + version: 2.0.0 + resolution: "aproba@npm:2.0.0" + checksum: d06e26384a8f6245d8c8896e138c0388824e259a329e0c9f196b4fa533c82502a6fd449586e3604950a0c42921832a458bb3aa0aa9f0ba449cfd4f50fd0d09b5 + languageName: node + linkType: hard + +"arch@npm:^2.2.0": + version: 2.2.0 + resolution: "arch@npm:2.2.0" + checksum: 4ceaf8d8207817c216ebc4469742052cb0a097bc45d9b7fcd60b7507220da545a28562ab5bdd4dfe87921bb56371a0805da4e10d704e01f93a15f83240f1284c + languageName: node + linkType: hard + +"archiver-utils@npm:^4.0.1": + version: 4.0.1 + resolution: "archiver-utils@npm:4.0.1" + dependencies: + glob: "npm:^8.0.0" + graceful-fs: "npm:^4.2.0" + lazystream: "npm:^1.0.0" + lodash: "npm:^4.17.15" + normalize-path: "npm:^3.0.0" + readable-stream: "npm:^3.6.0" + checksum: fc646fe1f8e3650383b6f79384e1c8f69caf7685c705221e23393a674ee1d67331e246250a72b03ec2fbdb2cfe30adc2d4287f6357684d6843d604738bf2c870 + languageName: node + linkType: hard + +"archiver@npm:^6.0.0": + version: 6.0.1 + resolution: "archiver@npm:6.0.1" + dependencies: + archiver-utils: "npm:^4.0.1" + async: "npm:^3.2.4" + buffer-crc32: "npm:^0.2.1" + readable-stream: "npm:^3.6.0" + readdir-glob: "npm:^1.1.2" + tar-stream: "npm:^3.0.0" + zip-stream: "npm:^5.0.1" + checksum: 54c5a634b39691114e727d4b4f360439fa7cd40b414c9d909606fbfd7048037f7dccefa49337f9ed19b1f5c209e021ce5e1ff9c6b547907257bc71f1af6f8cf3 + languageName: node + linkType: hard + +"archy@npm:^1.0.0": + version: 1.0.0 + resolution: "archy@npm:1.0.0" + checksum: 200c849dd1c304ea9914827b0555e7e1e90982302d574153e28637db1a663c53de62bad96df42d50e8ce7fc18d05e3437d9aa8c4b383803763755f0956c7d308 + languageName: node + linkType: hard + +"are-we-there-yet@npm:^2.0.0": + version: 2.0.0 + resolution: "are-we-there-yet@npm:2.0.0" + dependencies: + delegates: "npm:^1.0.0" + readable-stream: "npm:^3.6.0" + checksum: 375f753c10329153c8d66dc95e8f8b6c7cc2aa66e05cb0960bd69092b10dae22900cacc7d653ad11d26b3ecbdbfe1e8bfb6ccf0265ba8077a7d979970f16b99c + languageName: node + linkType: hard + +"arg@npm:^4.1.0": + version: 4.1.3 + resolution: "arg@npm:4.1.3" + checksum: 070ff801a9d236a6caa647507bdcc7034530604844d64408149a26b9e87c2f97650055c0f049abd1efc024b334635c01f29e0b632b371ac3f26130f4cf65997a + languageName: node + linkType: hard + +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: "npm:~1.0.2" + checksum: b2972c5c23c63df66bca144dbc65d180efa74f25f8fd9b7d9a0a6c88ae839db32df3d54770dcb6460cf840d232b60695d1a6b1053f599d84e73f7437087712de + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e + languageName: node + linkType: hard + +"args@npm:^5.0.1": + version: 5.0.3 + resolution: "args@npm:5.0.3" + dependencies: + camelcase: "npm:5.0.0" + chalk: "npm:2.4.2" + leven: "npm:2.1.0" + mri: "npm:1.1.4" + checksum: 213871ae97d6f5990dc4637f53e48feef8566b2fd6d5cc9cb46ef78dc1db835b2f90fd536c1414441eaa0b5cb8f2a5ab94b973400b5fea096ee20b9893d3b573 + languageName: node + linkType: hard + +"arity-n@npm:^1.0.4": + version: 1.0.4 + resolution: "arity-n@npm:1.0.4" + checksum: 31c390104bf3b9275574c9d59df67b8a2684981b93ca728a99c4f92241b71b8089b1e99b732f889891e78087887b49a59c885167e2185303449bece83e8d7f9c + languageName: node + linkType: hard + +"arr-diff@npm:^4.0.0": + version: 4.0.0 + resolution: "arr-diff@npm:4.0.0" + checksum: 67b80067137f70c89953b95f5c6279ad379c3ee39f7143578e13bd51580a40066ee2a55da066e22d498dce10f68c2d70056d7823f972fab99dfbf4c78d0bc0f7 + languageName: node + linkType: hard + +"arr-flatten@npm:^1.1.0": + version: 1.1.0 + resolution: "arr-flatten@npm:1.1.0" + checksum: bef53be02ed3bc58f202b3861a5b1eb6e1ae4fecf39c3ad4d15b1e0433f941077d16e019a33312d820844b0661777322acbb7d0c447b04d9bdf7d6f9c532548a + languageName: node + linkType: hard + +"arr-union@npm:^3.1.0": + version: 3.1.0 + resolution: "arr-union@npm:3.1.0" + checksum: 7d5aa05894e54aa93c77c5726c1dd5d8e8d3afe4f77983c0aa8a14a8a5cbe8b18f0cf4ecaa4ac8c908ef5f744d2cbbdaa83fd6e96724d15fea56cfa7f5efdd51 + languageName: node + linkType: hard + +"array-flatten@npm:1.1.1": + version: 1.1.1 + resolution: "array-flatten@npm:1.1.1" + checksum: 806966c8abb2f858b08f5324d9d18d7737480610f3bd5d3498aaae6eb5efdc501a884ba019c9b4a8f02ff67002058749d05548fd42fa8643f02c9c7f22198b91 + languageName: node + linkType: hard + +"array-ify@npm:^1.0.0": + version: 1.0.0 + resolution: "array-ify@npm:1.0.0" + checksum: 75c9c072faac47bd61779c0c595e912fe660d338504ac70d10e39e1b8a4a0c9c87658703d619b9d1b70d324177ae29dc8d07dda0d0a15d005597bc4c5a59c70c + languageName: node + linkType: hard + +"array-last@npm:^1.1.1": + version: 1.3.0 + resolution: "array-last@npm:1.3.0" + dependencies: + is-number: "npm:^4.0.0" + checksum: bb620e744fab80b104a5eddfa828eb915451ffc23b737e76b2ecfbbef42e1a9557ca85d280cde10c5d12b4627d15857e7312a2f20d9ecc45f1e52d745a591438 + languageName: node + linkType: hard + +"array-timsort@npm:^1.0.3": + version: 1.0.3 + resolution: "array-timsort@npm:1.0.3" + checksum: bd3a1707b621947265c89867e67c9102b9b9f4c50f5b3974220112290d8b60d26ce60595edec5deed3325207b759d70b758bed3cd310b5ddadb835657ffb6d12 + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 429897e68110374f39b771ec47a7161fc6a8fc33e196857c0a396dc75df0b5f65e4d046674db764330b6bb66b39ef48dd7c53b6a2ee75cfb0681e0c1a7033962 + languageName: node + linkType: hard + +"array-unique@npm:^0.3.2": + version: 0.3.2 + resolution: "array-unique@npm:0.3.2" + checksum: dbf4462cdba8a4b85577be07705210b3d35be4b765822a3f52962d907186617638ce15e0603a4fefdcf82f4cbbc9d433f8cbbd6855148a68872fa041b6474121 + languageName: node + linkType: hard + +"arrify@npm:^1.0.1": + version: 1.0.1 + resolution: "arrify@npm:1.0.1" + checksum: c35c8d1a81bcd5474c0c57fe3f4bad1a4d46a5fa353cedcff7a54da315df60db71829e69104b859dff96c5d68af46bd2be259fe5e50dc6aa9df3b36bea0383ab + languageName: node + linkType: hard + +"arrify@npm:^3.0.0": + version: 3.0.0 + resolution: "arrify@npm:3.0.0" + checksum: 2e26601b8486f29780f1f70f7ac05a226755814c2a3ab42e196748f650af1dc310cd575a11dd4b9841c70fd7460b2dd2b8fe6fb7a3375878e2660706efafa58e + languageName: node + linkType: hard + +"ascii-table@npm:0.0.9": + version: 0.0.9 + resolution: "ascii-table@npm:0.0.9" + checksum: d485349d05b52d5cc686651a603c968fae881777be06aa4d14912683ee61b305e2558508659ec84837cb87f2a58ac7b72b99c05ea84da598cfe2cac9199dd527 + languageName: node + linkType: hard + +"assign-symbols@npm:^1.0.0": + version: 1.0.0 + resolution: "assign-symbols@npm:1.0.0" + checksum: 29a654b8a6da6889a190d0d0efef4b1bfb5948fa06cbc245054aef05139f889f2f7c75b989917e3fde853fc4093b88048e4de8578a73a76f113d41bfd66e5775 + languageName: node + linkType: hard + +"ast-module-types@npm:^5.0.0": + version: 5.0.0 + resolution: "ast-module-types@npm:5.0.0" + checksum: 023eb05658e7c4be9a2e661df8713d74fd04a45091ac9be399ff638265638a88752df2e26be49afdeefcacdcdf8e3160a86f0703c46844c5bc96d908bb5e23f0 + languageName: node + linkType: hard + +"async-sema@npm:^3.1.1": + version: 3.1.1 + resolution: "async-sema@npm:3.1.1" + checksum: a16da9f7f2dbdd00a969bf264b7ad331b59df3eac2b38f529b881c5cc8662594e68ed096d927ec2aabdc13454379cdc6d677bcdb0a3d2db338fb4be17957832b + languageName: node + linkType: hard + +"async@npm:^3.2.3, async@npm:^3.2.4": + version: 3.2.5 + resolution: "async@npm:3.2.5" + checksum: 1408287b26c6db67d45cb346e34892cee555b8b59e6c68e6f8c3e495cad5ca13b4f218180e871f3c2ca30df4ab52693b66f2f6ff43644760cab0b2198bda79c1 + languageName: node + linkType: hard + +"async@npm:~1.5": + version: 1.5.2 + resolution: "async@npm:1.5.2" + checksum: 9ee84592c393aad1047d1223004317ecc65a9a3f76101e0f4614a0818eac962e666510353400a3c9ea158df540579a293f486f3578e918c5e90a0f5ed52e8aea + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d + languageName: node + linkType: hard + +"atob@npm:^2.1.2": + version: 2.1.2 + resolution: "atob@npm:2.1.2" + bin: + atob: bin/atob.js + checksum: ada635b519dc0c576bb0b3ca63a73b50eefacf390abb3f062558342a8d68f2db91d0c8db54ce81b0d89de3b0f000de71f3ae7d761fd7d8cc624278fe443d6c7e + languageName: node + linkType: hard + +"atomic-sleep@npm:^1.0.0": + version: 1.0.0 + resolution: "atomic-sleep@npm:1.0.0" + checksum: e329a6665512736a9bbb073e1761b4ec102f7926cce35037753146a9db9c8104f5044c1662e4a863576ce544fb8be27cd2be6bc8c1a40147d03f31eb1cfb6e8a + languageName: node + linkType: hard + +"avvio@npm:^8.2.0": + version: 8.2.1 + resolution: "avvio@npm:8.2.1" + dependencies: + archy: "npm:^1.0.0" + debug: "npm:^4.0.0" + fastq: "npm:^1.6.1" + checksum: a763b7cb0d9bdd4c111c28b46cb83ee9d4bf79e5f99c5cd8b8f2727cf6d0cd5ec3e6df90dbda74a56cdec72fe928dd2e13e75e67270a88b92401f68ef756b3ce + languageName: node + linkType: hard + +"axios@npm:^1.1.3": + version: 1.6.2 + resolution: "axios@npm:1.6.2" + dependencies: + follow-redirects: "npm:^1.15.0" + form-data: "npm:^4.0.0" + proxy-from-env: "npm:^1.1.0" + checksum: 9b77e030e85e4f9cbcba7bb52fbff67d6ce906c92d213e0bd932346a50140faf83733bf786f55bd58301bd92f9973885c7b87d6348023e10f7eaf286d0791a1d + languageName: node + linkType: hard + +"axios@npm:^1.3.2": + version: 1.5.0 + resolution: "axios@npm:1.5.0" + dependencies: + follow-redirects: "npm:^1.15.0" + form-data: "npm:^4.0.0" + proxy-from-env: "npm:^1.1.0" + checksum: a3e11e53ff10fa02defb17c82672599a5ef31f8a6f2b0ea1564a61271226a924baef3a899a03c6850bddb0e9a614acdf615e07b30f382403b5e1fc7ec2eef464 + languageName: node + linkType: hard + +"b4a@npm:^1.6.4": + version: 1.6.4 + resolution: "b4a@npm:1.6.4" + checksum: a0af707430c3643fd8d9418c732849d3626f1c9281489e021fcad969fb4808fb9f67b224de36b59c9c3b5a13d853482fee0c0eb53f7aec12d540fa67f63648b6 + languageName: node + linkType: hard + +"babel-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "babel-jest@npm:29.7.0" + dependencies: + "@jest/transform": "npm:^29.7.0" + "@types/babel__core": "npm:^7.1.14" + babel-plugin-istanbul: "npm:^6.1.1" + babel-preset-jest: "npm:^29.6.3" + chalk: "npm:^4.0.0" + graceful-fs: "npm:^4.2.9" + slash: "npm:^3.0.0" + peerDependencies: + "@babel/core": ^7.8.0 + checksum: 2eda9c1391e51936ca573dd1aedfee07b14c59b33dbe16ef347873ddd777bcf6e2fc739681e9e9661ab54ef84a3109a03725be2ac32cd2124c07ea4401cbe8c1 + languageName: node + linkType: hard + +"babel-plugin-istanbul@npm:^6.1.1": + version: 6.1.1 + resolution: "babel-plugin-istanbul@npm:6.1.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.0.0" + "@istanbuljs/load-nyc-config": "npm:^1.0.0" + "@istanbuljs/schema": "npm:^0.1.2" + istanbul-lib-instrument: "npm:^5.0.4" + test-exclude: "npm:^6.0.0" + checksum: 1075657feb705e00fd9463b329921856d3775d9867c5054b449317d39153f8fbcebd3e02ebf00432824e647faff3683a9ca0a941325ef1afe9b3c4dd51b24beb + languageName: node + linkType: hard + +"babel-plugin-jest-hoist@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-plugin-jest-hoist@npm:29.6.3" + dependencies: + "@babel/template": "npm:^7.3.3" + "@babel/types": "npm:^7.3.3" + "@types/babel__core": "npm:^7.1.14" + "@types/babel__traverse": "npm:^7.0.6" + checksum: 7e6451caaf7dce33d010b8aafb970e62f1b0c0b57f4978c37b0d457bbcf0874d75a395a102daf0bae0bd14eafb9f6e9a165ee5e899c0a4f1f3bb2e07b304ed2e + languageName: node + linkType: hard + +"babel-preset-current-node-syntax@npm:^1.0.0": + version: 1.0.1 + resolution: "babel-preset-current-node-syntax@npm:1.0.1" + dependencies: + "@babel/plugin-syntax-async-generators": "npm:^7.8.4" + "@babel/plugin-syntax-bigint": "npm:^7.8.3" + "@babel/plugin-syntax-class-properties": "npm:^7.8.3" + "@babel/plugin-syntax-import-meta": "npm:^7.8.3" + "@babel/plugin-syntax-json-strings": "npm:^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" + "@babel/plugin-syntax-numeric-separator": "npm:^7.8.3" + "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" + "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" + "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" + "@babel/plugin-syntax-top-level-await": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 5ba39a3a0e6c37d25e56a4fb843be632dac98d54706d8a0933f9bcb1a07987a96d55c2b5a6c11788a74063fb2534fe68c1f1dbb6c93626850c785e0938495627 + languageName: node + linkType: hard + +"babel-preset-jest@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-preset-jest@npm:29.6.3" + dependencies: + babel-plugin-jest-hoist: "npm:^29.6.3" + babel-preset-current-node-syntax: "npm:^1.0.0" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: ec5fd0276b5630b05f0c14bb97cc3815c6b31600c683ebb51372e54dcb776cff790bdeeabd5b8d01ede375a040337ccbf6a3ccd68d3a34219125945e167ad943 + languageName: node + linkType: hard + +"babylon@npm:^6.9.1": + version: 6.18.0 + resolution: "babylon@npm:6.18.0" + bin: + babylon: ./bin/babylon.js + checksum: 9b1bf946e16782deadb1f5414c1269efa6044eb1e97a3de2051f09a3f2a54e97be3542d4242b28d23de0ef67816f519d38ce1ec3ddb7be306131c39a60e5a667 + languageName: node + linkType: hard + +"backoff@npm:2.5.0": + version: 2.5.0 + resolution: "backoff@npm:2.5.0" + dependencies: + precond: "npm:0.2" + checksum: 57afcd07c08e9174d78f79643ebca1e8da752143ef6675e6b4a0b08ec6b497db3317089350c02fb747ae54c53f485c4d8b0742130b78028bb8a8cd96dd69ce0f + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + +"base-64@npm:^0.1.0": + version: 0.1.0 + resolution: "base-64@npm:0.1.0" + checksum: fe0dcf076e823f04db7ee9b02495be08a91c445fbc6db03cb9913be9680e2fcc0af8b74459041fe08ad16800b1f65a549501d8f08696a8a6d32880789b7de69d + languageName: node + linkType: hard + +"base64-js@npm:^1.3.1, base64-js@npm:^1.5.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf + languageName: node + linkType: hard + +"base@npm:^0.11.1": + version: 0.11.2 + resolution: "base@npm:0.11.2" + dependencies: + cache-base: "npm:^1.0.1" + class-utils: "npm:^0.3.5" + component-emitter: "npm:^1.2.1" + define-property: "npm:^1.0.0" + isobject: "npm:^3.0.1" + mixin-deep: "npm:^1.2.0" + pascalcase: "npm:^0.1.1" + checksum: 30a2c0675eb52136b05ef496feb41574d9f0bb2d6d677761da579c00a841523fccf07f1dbabec2337b5f5750f428683b8ca60d89e56a1052c4ae1c0cd05de64d + languageName: node + linkType: hard + +"bech32@npm:1.1.4": + version: 1.1.4 + resolution: "bech32@npm:1.1.4" + checksum: 5f62ca47b8df99ace9c0e0d8deb36a919d91bf40066700aaa9920a45f86bb10eb56d537d559416fd8703aa0fb60dddb642e58f049701e7291df678b2033e5ee5 + languageName: node + linkType: hard + +"before-after-hook@npm:^2.2.0": + version: 2.2.3 + resolution: "before-after-hook@npm:2.2.3" + checksum: 0488c4ae12df758ca9d49b3bb27b47fd559677965c52cae7b335784724fb8bf96c42b6e5ba7d7afcbc31facb0e294c3ef717cc41c5bc2f7bd9e76f8b90acd31c + languageName: node + linkType: hard + +"better-ajv-errors@npm:^1.2.0": + version: 1.2.0 + resolution: "better-ajv-errors@npm:1.2.0" + dependencies: + "@babel/code-frame": "npm:^7.16.0" + "@humanwhocodes/momoa": "npm:^2.0.2" + chalk: "npm:^4.1.2" + jsonpointer: "npm:^5.0.0" + leven: "npm:^3.1.0 < 4" + peerDependencies: + ajv: 4.11.8 - 8 + checksum: 42bdb63d2e1ec3b8aea234ccad777313750d015f0b0fbcf7dc4471ef412c3a93604d4b702d70ad66e03f2d52a57b131357458ffec7cae083f3b120100c17d36a + languageName: node + linkType: hard + +"better-opn@npm:3.0.2": + version: 3.0.2 + resolution: "better-opn@npm:3.0.2" + dependencies: + open: "npm:^8.0.4" + checksum: 911ef25d44da75aabfd2444ce7a4294a8000ebcac73068c04a60298b0f7c7506b60421aa4cd02ac82502fb42baaff7e4892234b51e6923eded44c5a11185f2f5 + languageName: node + linkType: hard + +"binary-extensions@npm:^2.0.0": + version: 2.2.0 + resolution: "binary-extensions@npm:2.2.0" + checksum: d73d8b897238a2d3ffa5f59c0241870043aa7471335e89ea5e1ff48edb7c2d0bb471517a3e4c5c3f4c043615caa2717b5f80a5e61e07503d51dc85cb848e665d + languageName: node + linkType: hard + +"bindings@npm:^1.4.0, bindings@npm:^1.5.0": + version: 1.5.0 + resolution: "bindings@npm:1.5.0" + dependencies: + file-uri-to-path: "npm:1.0.0" + checksum: 3dab2491b4bb24124252a91e656803eac24292473e56554e35bbfe3cc1875332cfa77600c3bac7564049dc95075bf6fcc63a4609920ff2d64d0fe405fcf0d4ba + languageName: node + linkType: hard + +"bl@npm:^4.0.3": + version: 4.1.0 + resolution: "bl@npm:4.1.0" + dependencies: + buffer: "npm:^5.5.0" + inherits: "npm:^2.0.4" + readable-stream: "npm:^3.4.0" + checksum: 02847e1d2cb089c9dc6958add42e3cdeaf07d13f575973963335ac0fdece563a50ac770ac4c8fa06492d2dd276f6cc3b7f08c7cd9c7a7ad0f8d388b2a28def5f + languageName: node + linkType: hard + +"bl@npm:^5.0.0": + version: 5.1.0 + resolution: "bl@npm:5.1.0" + dependencies: + buffer: "npm:^6.0.3" + inherits: "npm:^2.0.4" + readable-stream: "npm:^3.4.0" + checksum: 528a9c3d7d6b87af98c46f10a887654d027c28c503c7f7de87440e643f0056d7a2319a967762b8ec18150c64799d2825a277147a752a0570a7407c0b705b0d01 + languageName: node + linkType: hard + +"blueimp-md5@npm:^2.10.0": + version: 2.19.0 + resolution: "blueimp-md5@npm:2.19.0" + checksum: 85d04343537dd99a288c62450341dcce7380d3454c81f8e5a971ddd80307d6f9ef51b5b92ad7d48aaaa92fd6d3a1f6b2f4fada068faae646887f7bfabc17a346 + languageName: node + linkType: hard + +"bn.js@npm:^4.11.9": + version: 4.12.0 + resolution: "bn.js@npm:4.12.0" + checksum: 9736aaa317421b6b3ed038ff3d4491935a01419ac2d83ddcfebc5717385295fcfcf0c57311d90fe49926d0abbd7a9dbefdd8861e6129939177f7e67ebc645b21 + languageName: node + linkType: hard + +"bn.js@npm:^5.2.1": + version: 5.2.1 + resolution: "bn.js@npm:5.2.1" + checksum: bed3d8bd34ec89dbcf9f20f88bd7d4a49c160fda3b561c7bb227501f974d3e435a48fb9b61bc3de304acab9215a3bda0803f7017ffb4d0016a0c3a740a283caa + languageName: node + linkType: hard + +"body-parser@npm:1.20.1": + version: 1.20.1 + resolution: "body-parser@npm:1.20.1" + dependencies: + bytes: "npm:3.1.2" + content-type: "npm:~1.0.4" + debug: "npm:2.6.9" + depd: "npm:2.0.0" + destroy: "npm:1.2.0" + http-errors: "npm:2.0.0" + iconv-lite: "npm:0.4.24" + on-finished: "npm:2.4.1" + qs: "npm:6.11.0" + raw-body: "npm:2.5.1" + type-is: "npm:~1.6.18" + unpipe: "npm:1.0.0" + checksum: a202d493e2c10a33fb7413dac7d2f713be579c4b88343cd814b6df7a38e5af1901fc31044e04de176db56b16d9772aa25a7723f64478c20f4d91b1ac223bf3b8 + languageName: node + linkType: hard + +"bole@npm:^5.0.0": + version: 5.0.8 + resolution: "bole@npm:5.0.8" + dependencies: + fast-safe-stringify: "npm:^2.0.7" + individual: "npm:^3.0.0" + checksum: 8d7b674cb0bd8e230505e5118bb8c8d870e5480ab74012f297796d4886114668b07bbe5d03df5f93f8bee49e14fda1c85dc77d9d352dbd7986abfe41b9805c6d + languageName: node + linkType: hard + +"boolbase@npm:^1.0.0": + version: 1.0.0 + resolution: "boolbase@npm:1.0.0" + checksum: e4b53deb4f2b85c52be0e21a273f2045c7b6a6ea002b0e139c744cb6f95e9ec044439a52883b0d74dedd1ff3da55ed140cfdddfed7fb0cccbed373de5dce1bcf + languageName: node + linkType: hard + +"bottleneck@npm:^2.15.3": + version: 2.19.5 + resolution: "bottleneck@npm:2.19.5" + checksum: b0f72e45b2e0f56a21ba720183f16bef8e693452fb0495d997fa354e42904353a94bd8fd429868e6751bc85e54b6755190519eed5a0ae0a94a5185209ae7c6d0 + languageName: node + linkType: hard + +"boxen@npm:7.1.1, boxen@npm:^7.0.0": + version: 7.1.1 + resolution: "boxen@npm:7.1.1" + dependencies: + ansi-align: "npm:^3.0.1" + camelcase: "npm:^7.0.1" + chalk: "npm:^5.2.0" + cli-boxes: "npm:^3.0.0" + string-width: "npm:^5.1.2" + type-fest: "npm:^2.13.0" + widest-line: "npm:^4.0.1" + wrap-ansi: "npm:^8.1.0" + checksum: 3a9891dc98ac40d582c9879e8165628258e2c70420c919e70fff0a53ccc7b42825e73cda6298199b2fbc1f41f5d5b93b492490ad2ae27623bed3897ddb4267f8 + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: "npm:^1.0.0" + concat-map: "npm:0.0.1" + checksum: 695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: "npm:^1.0.0" + checksum: b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f + languageName: node + linkType: hard + +"braces@npm:^2.3.1": + version: 2.3.2 + resolution: "braces@npm:2.3.2" + dependencies: + arr-flatten: "npm:^1.1.0" + array-unique: "npm:^0.3.2" + extend-shallow: "npm:^2.0.1" + fill-range: "npm:^4.0.0" + isobject: "npm:^3.0.1" + repeat-element: "npm:^1.1.2" + snapdragon: "npm:^0.8.1" + snapdragon-node: "npm:^2.0.1" + split-string: "npm:^3.0.2" + to-regex: "npm:^3.0.1" + checksum: 72b27ea3ea2718f061c29e70fd6e17606e37c65f5801abddcf0b0052db1de7d60f3bf92cfc220ab57b44bd0083a5f69f9d03b3461d2816cfe9f9398207acc728 + languageName: node + linkType: hard + +"braces@npm:^3.0.2, braces@npm:~3.0.2": + version: 3.0.2 + resolution: "braces@npm:3.0.2" + dependencies: + fill-range: "npm:^7.0.1" + checksum: 321b4d675791479293264019156ca322163f02dc06e3c4cab33bb15cd43d80b51efef69b0930cfde3acd63d126ebca24cd0544fa6f261e093a0fb41ab9dda381 + languageName: node + linkType: hard + +"brorand@npm:^1.1.0": + version: 1.1.0 + resolution: "brorand@npm:1.1.0" + checksum: 6f366d7c4990f82c366e3878492ba9a372a73163c09871e80d82fb4ae0d23f9f8924cb8a662330308206e6b3b76ba1d528b4601c9ef73c2166b440b2ea3b7571 + languageName: node + linkType: hard + +"browserslist@npm:^4.21.9": + version: 4.21.11 + resolution: "browserslist@npm:4.21.11" + dependencies: + caniuse-lite: "npm:^1.0.30001538" + electron-to-chromium: "npm:^1.4.526" + node-releases: "npm:^2.0.13" + update-browserslist-db: "npm:^1.0.13" + bin: + browserslist: cli.js + checksum: 382a7c175bb15bc4ba27443e436a3146047692bbfbcfdab15358121a2461628976023d84150e6a3a704f84306466e12db4142a08a8ed20101b162362c77a31a5 + languageName: node + linkType: hard + +"bs-logger@npm:0.x": + version: 0.2.6 + resolution: "bs-logger@npm:0.2.6" + dependencies: + fast-json-stable-stringify: "npm:2.x" + checksum: 80e89aaaed4b68e3374ce936f2eb097456a0dddbf11f75238dbd53140b1e39259f0d248a5089ed456f1158984f22191c3658d54a713982f676709fbe1a6fa5a0 + languageName: node + linkType: hard + +"bser@npm:2.1.1": + version: 2.1.1 + resolution: "bser@npm:2.1.1" + dependencies: + node-int64: "npm:^0.4.0" + checksum: 24d8dfb7b6d457d73f32744e678a60cc553e4ec0e9e1a01cf614b44d85c3c87e188d3cc78ef0442ce5032ee6818de20a0162ba1074725c0d08908f62ea979227 + languageName: node + linkType: hard + +"btoa-lite@npm:^1.0.0": + version: 1.0.0 + resolution: "btoa-lite@npm:1.0.0" + checksum: 7a4f0568ae3c915464650f98fde7901ae07b13a333a614515a0c86876b3528670fafece28dfef9745d971a613bb83341823afb0c20c6f318b384c1e364b9eb95 + languageName: node + linkType: hard + +"buffer-crc32@npm:^0.2.1, buffer-crc32@npm:~0.2.3": + version: 0.2.13 + resolution: "buffer-crc32@npm:0.2.13" + checksum: cb0a8ddf5cf4f766466db63279e47761eb825693eeba6a5a95ee4ec8cb8f81ede70aa7f9d8aeec083e781d47154290eb5d4d26b3f7a465ec57fb9e7d59c47150 + languageName: node + linkType: hard + +"buffer-equal-constant-time@npm:1.0.1": + version: 1.0.1 + resolution: "buffer-equal-constant-time@npm:1.0.1" + checksum: fb2294e64d23c573d0dd1f1e7a466c3e978fe94a4e0f8183937912ca374619773bef8e2aceb854129d2efecbbc515bbd0cc78d2734a3e3031edb0888531bbc8e + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 + languageName: node + linkType: hard + +"buffer@npm:^5.2.1, buffer@npm:^5.5.0": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: "npm:^1.3.1" + ieee754: "npm:^1.1.13" + checksum: 27cac81cff434ed2876058d72e7c4789d11ff1120ef32c9de48f59eab58179b66710c488987d295ae89a228f835fc66d088652dffeb8e3ba8659f80eb091d55e + languageName: node + linkType: hard + +"buffer@npm:^6.0.3": + version: 6.0.3 + resolution: "buffer@npm:6.0.3" + dependencies: + base64-js: "npm:^1.3.1" + ieee754: "npm:^1.2.1" + checksum: 2a905fbbcde73cc5d8bd18d1caa23715d5f83a5935867c2329f0ac06104204ba7947be098fe1317fbd8830e26090ff8e764f08cd14fefc977bb248c3487bcbd0 + languageName: node + linkType: hard + +"bufferutil@npm:^4.0.1": + version: 4.0.7 + resolution: "bufferutil@npm:4.0.7" + dependencies: + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.3.0" + checksum: 48d6cf98b9c227db65f0a1062b6c80e933c43dc03e0ad5f908da0e79cc87a633c215516f4d541ca9b0e09c1fb386f1bbe1fc2de913057f0201d14798d3e0c2bb + languageName: node + linkType: hard + +"bufrw@npm:^1.2.1": + version: 1.4.0 + resolution: "bufrw@npm:1.4.0" + dependencies: + ansi-color: "npm:^0.2.1" + error: "npm:^7.0.0" + hexer: "npm:^1.5.0" + xtend: "npm:^4.0.0" + checksum: f4bfd7e13796f1f562753661be8b72c7eaac38e77b06edd5f238f8567d3d973c7f2686b1098bd5914fb88dc7141252d8361d0507e818af321fab13ef93ad3239 + languageName: node + linkType: hard + +"builtin-modules@npm:^3.3.0": + version: 3.3.0 + resolution: "builtin-modules@npm:3.3.0" + checksum: 2cb3448b4f7306dc853632a4fcddc95e8d4e4b9868c139400027b71938fc6806d4ff44007deffb362ac85724bd40c2c6452fb6a0aa4531650eeddb98d8e5ee8a + languageName: node + linkType: hard + +"builtins@npm:^5.0.0": + version: 5.0.1 + resolution: "builtins@npm:5.0.1" + dependencies: + semver: "npm:^7.0.0" + checksum: 9390a51a9abbc0233dac79c66715f927508b9d0c62cb7a42448fe8c52def60c707e6e9eb2cc4c9b7aba11601899935bca4e4064ae5e19c04c7e1bb9309e69134 + languageName: node + linkType: hard + +"byline@npm:^5.0.0": + version: 5.0.0 + resolution: "byline@npm:5.0.0" + checksum: 33fb64cd84440b3652a99a68d732c56ef18a748ded495ba38e7756a242fab0d4654b9b8ce269fd0ac14c5f97aa4e3c369613672b280a1f60b559b34223105c85 + languageName: node + linkType: hard + +"bytes@npm:3.1.2": + version: 3.1.2 + resolution: "bytes@npm:3.1.2" + checksum: 76d1c43cbd602794ad8ad2ae94095cddeb1de78c5dddaa7005c51af10b0176c69971a6d88e805a90c2b6550d76636e43c40d8427a808b8645ede885de4a0358e + languageName: node + linkType: hard + +"cacache@npm:^18.0.0": + version: 18.0.1 + resolution: "cacache@npm:18.0.1" + dependencies: + "@npmcli/fs": "npm:^3.1.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^4.0.0" + ssri: "npm:^10.0.0" + tar: "npm:^6.1.11" + unique-filename: "npm:^3.0.0" + checksum: a31666805a80a8b16ad3f85faf66750275a9175a3480896f4f6d31b5d53ef190484fabd71bdb6d2ea5603c717fbef09f4af03d6a65b525c8ef0afaa44c361866 + languageName: node + linkType: hard + +"cache-base@npm:^1.0.1": + version: 1.0.1 + resolution: "cache-base@npm:1.0.1" + dependencies: + collection-visit: "npm:^1.0.0" + component-emitter: "npm:^1.2.1" + get-value: "npm:^2.0.6" + has-value: "npm:^1.0.0" + isobject: "npm:^3.0.1" + set-value: "npm:^2.0.0" + to-object-path: "npm:^0.3.0" + union-value: "npm:^1.0.0" + unset-value: "npm:^1.0.0" + checksum: a7142e25c73f767fa520957dcd179b900b86eac63b8cfeaa3b2a35e18c9ca5968aa4e2d2bed7a3e7efd10f13be404344cfab3a4156217e71f9bdb95940bb9c8c + languageName: node + linkType: hard + +"cacheable-lookup@npm:^7.0.0": + version: 7.0.0 + resolution: "cacheable-lookup@npm:7.0.0" + checksum: 63a9c144c5b45cb5549251e3ea774c04d63063b29e469f7584171d059d3a88f650f47869a974e2d07de62116463d742c287a81a625e791539d987115cb081635 + languageName: node + linkType: hard + +"cacheable-request@npm:^10.2.8": + version: 10.2.14 + resolution: "cacheable-request@npm:10.2.14" + dependencies: + "@types/http-cache-semantics": "npm:^4.0.2" + get-stream: "npm:^6.0.1" + http-cache-semantics: "npm:^4.1.1" + keyv: "npm:^4.5.3" + mimic-response: "npm:^4.0.0" + normalize-url: "npm:^8.0.0" + responselike: "npm:^3.0.0" + checksum: 41b6658db369f20c03128227ecd219ca7ac52a9d24fc0f499cc9aa5d40c097b48b73553504cebd137024d957c0ddb5b67cf3ac1439b136667f3586257763f88d + languageName: node + linkType: hard + +"cachedir@npm:^2.3.0": + version: 2.4.0 + resolution: "cachedir@npm:2.4.0" + checksum: 76bff9009f2c446cd3777a4aede99af634a89670a67012b8041f65e951d3d36cefe8940341ea80c72219ee9913fa1f6146824cd9dfe9874a4bded728af7e6d76 + languageName: node + linkType: hard + +"call-bind@npm:^1.0.0": + version: 1.0.5 + resolution: "call-bind@npm:1.0.5" + dependencies: + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.1" + set-function-length: "npm:^1.1.1" + checksum: a6172c168fd6dacf744fcde745099218056bd755c50415b592655dcd6562157ed29f130f56c3f6db2250f67e4bd62e5c218cdc56d7bfd76e0bda50770fce2d10 + languageName: node + linkType: hard + +"callsite@npm:^1.0.0": + version: 1.0.0 + resolution: "callsite@npm:1.0.0" + checksum: 8b23d5ed879984b66fe3da381994d6c4b741e561226abc48b40c99c4896f7125db395ea4aa989071a7eb0712c3f83bc32fb1e798fdf54967acdf4af176e48572 + languageName: node + linkType: hard + +"callsites@npm:^3.0.0, callsites@npm:^3.1.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 + languageName: node + linkType: hard + +"camelcase-keys@npm:^6.2.2": + version: 6.2.2 + resolution: "camelcase-keys@npm:6.2.2" + dependencies: + camelcase: "npm:^5.3.1" + map-obj: "npm:^4.0.0" + quick-lru: "npm:^4.0.1" + checksum: bf1a28348c0f285c6c6f68fb98a9d088d3c0269fed0cdff3ea680d5a42df8a067b4de374e7a33e619eb9d5266a448fe66c2dd1f8e0c9209ebc348632882a3526 + languageName: node + linkType: hard + +"camelcase@npm:5.0.0": + version: 5.0.0 + resolution: "camelcase@npm:5.0.0" + checksum: 515f1ce911d65949708d9e179f1a40af71eb7de668230a0c85961a35590f7da39af79cfb48d834883dbcc7995bdb7dd6bae8027b101e37a10d95337ec8732800 + languageName: node + linkType: hard + +"camelcase@npm:^5.3.1": + version: 5.3.1 + resolution: "camelcase@npm:5.3.1" + checksum: 92ff9b443bfe8abb15f2b1513ca182d16126359ad4f955ebc83dc4ddcc4ef3fdd2c078bc223f2673dc223488e75c99b16cc4d056624374b799e6a1555cf61b23 + languageName: node + linkType: hard + +"camelcase@npm:^6.2.0": + version: 6.3.0 + resolution: "camelcase@npm:6.3.0" + checksum: 0d701658219bd3116d12da3eab31acddb3f9440790c0792e0d398f0a520a6a4058018e546862b6fba89d7ae990efaeb97da71e1913e9ebf5a8b5621a3d55c710 + languageName: node + linkType: hard + +"camelcase@npm:^7.0.1": + version: 7.0.1 + resolution: "camelcase@npm:7.0.1" + checksum: 3adfc9a0e96d51b3a2f4efe90a84dad3e206aaa81dfc664f1bd568270e1bf3b010aad31f01db16345b4ffe1910e16ab411c7273a19a859addd1b98ef7cf4cfbd + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001538": + version: 1.0.30001539 + resolution: "caniuse-lite@npm:1.0.30001539" + checksum: 45469254d012f195648203d7165ba58de15d53d6bbe044afa0b5bcb50d1f2dba451524e78ff517ed260d27277255bd3334edd82bd7344b5cf057133f654ba87a + languageName: node + linkType: hard + +"chalk-template@npm:^1.1.0": + version: 1.1.0 + resolution: "chalk-template@npm:1.1.0" + dependencies: + chalk: "npm:^5.2.0" + checksum: bb6eda6115a33d06828caf8c44f786c26e0d392c74c2bd6bb0f7526588b15664e3e7c0305858531cdd9b266fc54a31fe71fe3844afcd47a3e67445313f149437 + languageName: node + linkType: hard + +"chalk@npm:2.4.2, chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: "npm:^3.2.1" + escape-string-regexp: "npm:^1.0.5" + supports-color: "npm:^5.3.0" + checksum: e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 + languageName: node + linkType: hard + +"chalk@npm:5.2.0": + version: 5.2.0 + resolution: "chalk@npm:5.2.0" + checksum: 8a519b35c239f96e041b7f1ed8fdd79d3ca2332a8366cb957378b8a1b8a4cdfb740d19628e8bf74654d4c0917aa10cf39c20752e177a1304eac29a1168a740e9 + languageName: node + linkType: hard + +"chalk@npm:5.3.0, chalk@npm:^5.0.0, chalk@npm:^5.0.1, chalk@npm:^5.2.0, chalk@npm:^5.3.0": + version: 5.3.0 + resolution: "chalk@npm:5.3.0" + checksum: 8297d436b2c0f95801103ff2ef67268d362021b8210daf8ddbe349695333eb3610a71122172ff3b0272f1ef2cf7cc2c41fdaa4715f52e49ffe04c56340feed09 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.2": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 + languageName: node + linkType: hard + +"char-regex@npm:^1.0.2": + version: 1.0.2 + resolution: "char-regex@npm:1.0.2" + checksum: 57a09a86371331e0be35d9083ba429e86c4f4648ecbe27455dbfb343037c16ee6fdc7f6b61f433a57cc5ded5561d71c56a150e018f40c2ffb7bc93a26dae341e + languageName: node + linkType: hard + +"chardet@npm:^0.7.0": + version: 0.7.0 + resolution: "chardet@npm:0.7.0" + checksum: 96e4731b9ec8050cbb56ab684e8c48d6c33f7826b755802d14e3ebfdc51c57afeece3ea39bc6b09acc359e4363525388b915e16640c1378053820f5e70d0f27d + languageName: node + linkType: hard + +"charenc@npm:0.0.2": + version: 0.0.2 + resolution: "charenc@npm:0.0.2" + checksum: a45ec39363a16799d0f9365c8dd0c78e711415113c6f14787a22462ef451f5013efae8a28f1c058f81fc01f2a6a16955f7a5fd0cd56247ce94a45349c89877d8 + languageName: node + linkType: hard + +"chokidar@npm:3.5.3, chokidar@npm:^3.5.2, chokidar@npm:^3.5.3": + version: 3.5.3 + resolution: "chokidar@npm:3.5.3" + dependencies: + anymatch: "npm:~3.1.2" + braces: "npm:~3.0.2" + fsevents: "npm:~2.3.2" + glob-parent: "npm:~5.1.2" + is-binary-path: "npm:~2.1.0" + is-glob: "npm:~4.0.1" + normalize-path: "npm:~3.0.0" + readdirp: "npm:~3.6.0" + dependenciesMeta: + fsevents: + optional: true + checksum: 1076953093e0707c882a92c66c0f56ba6187831aa51bb4de878c1fec59ae611a3bf02898f190efec8e77a086b8df61c2b2a3ea324642a0558bdf8ee6c5dc9ca1 + languageName: node + linkType: hard + +"chownr@npm:^1.1.1": + version: 1.1.4 + resolution: "chownr@npm:1.1.4" + checksum: ed57952a84cc0c802af900cf7136de643d3aba2eecb59d29344bc2f3f9bf703a301b9d84cdc71f82c3ffc9ccde831b0d92f5b45f91727d6c9da62f23aef9d9db + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: 594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6 + languageName: node + linkType: hard + +"ci-info@npm:3.8.0, ci-info@npm:^3.2.0": + version: 3.8.0 + resolution: "ci-info@npm:3.8.0" + checksum: 0d3052193b58356372b34ab40d2668c3e62f1006d5ca33726d1d3c423853b19a85508eadde7f5908496fb41448f465263bf61c1ee58b7832cb6a924537e3863a + languageName: node + linkType: hard + +"citty@npm:^0.1.3, citty@npm:^0.1.4": + version: 0.1.5 + resolution: "citty@npm:0.1.5" + dependencies: + consola: "npm:^3.2.3" + checksum: 58b5eea5f45f8711de7ddf4d0514d90e8c8b4ad16837e1c4e3f31224306baa638467acadad011d760abae4753b598402ed3651256bed063d02a76f949efa7b42 + languageName: node + linkType: hard + +"cjs-module-lexer@npm:^1.0.0": + version: 1.2.3 + resolution: "cjs-module-lexer@npm:1.2.3" + checksum: 0de9a9c3fad03a46804c0d38e7b712fb282584a9c7ef1ed44cae22fb71d9bb600309d66a9711ac36a596fd03422f5bb03e021e8f369c12a39fa1786ae531baab + languageName: node + linkType: hard + +"class-utils@npm:^0.3.5": + version: 0.3.6 + resolution: "class-utils@npm:0.3.6" + dependencies: + arr-union: "npm:^3.1.0" + define-property: "npm:^0.2.5" + isobject: "npm:^3.0.0" + static-extend: "npm:^0.1.1" + checksum: d44f4afc7a3e48dba4c2d3fada5f781a1adeeff371b875c3b578bc33815c6c29d5d06483c2abfd43a32d35b104b27b67bfa39c2e8a422fa858068bd756cfbd42 + languageName: node + linkType: hard + +"clean-deep@npm:3.4.0": + version: 3.4.0 + resolution: "clean-deep@npm:3.4.0" + dependencies: + lodash.isempty: "npm:^4.4.0" + lodash.isplainobject: "npm:^4.0.6" + lodash.transform: "npm:^4.6.0" + checksum: cefb0fba6739724e8b49ef1bd4d4f05ca3072458e982ca82cadb9bee27db05dc02c17be8771e5b752a81696bef3ca86d883b2a39c2a2e8f91fa30057b8253ae0 + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 + languageName: node + linkType: hard + +"clean-stack@npm:^4.0.0": + version: 4.2.0 + resolution: "clean-stack@npm:4.2.0" + dependencies: + escape-string-regexp: "npm:5.0.0" + checksum: 2bdf981a0fef0a23c14255df693b30eb9ae27eedf212470d8c400a0c0b6fb82fbf1ff8c5216ccd5721e3670b700389c886b1dce5070776dc9fbcc040957758c0 + languageName: node + linkType: hard + +"clear-module@npm:^4.1.2": + version: 4.1.2 + resolution: "clear-module@npm:4.1.2" + dependencies: + parent-module: "npm:^2.0.0" + resolve-from: "npm:^5.0.0" + checksum: 73207f06af256e3c8901ceaa74f7e4468a777aa68dedc7f745db4116861a7f8e69c558e16dbdf7b3d2295675d5896f916ba55b5dc737dda81792dbeee1488127 + languageName: node + linkType: hard + +"cli-boxes@npm:^3.0.0": + version: 3.0.0 + resolution: "cli-boxes@npm:3.0.0" + checksum: 4db3e8fbfaf1aac4fb3a6cbe5a2d3fa048bee741a45371b906439b9ffc821c6e626b0f108bdcd3ddf126a4a319409aedcf39a0730573ff050fdd7b6731e99fb9 + languageName: node + linkType: hard + +"cli-cursor@npm:^2.1.0": + version: 2.1.0 + resolution: "cli-cursor@npm:2.1.0" + dependencies: + restore-cursor: "npm:^2.0.0" + checksum: 09ee6d8b5b818d840bf80ec9561eaf696672197d3a02a7daee2def96d5f52ce6e0bbe7afca754ccf14f04830b5a1b4556273e983507d5029f95bba3016618eda + languageName: node + linkType: hard + +"cli-cursor@npm:^4.0.0": + version: 4.0.0 + resolution: "cli-cursor@npm:4.0.0" + dependencies: + restore-cursor: "npm:^4.0.0" + checksum: e776e8c3c6727300d0539b0d25160b2bb56aed1a63942753ba1826b012f337a6f4b7ace3548402e4f2f13b5e16bfd751be672c44b203205e7eca8be94afec42c + languageName: node + linkType: hard + +"cli-progress@npm:^3.11.2": + version: 3.12.0 + resolution: "cli-progress@npm:3.12.0" + dependencies: + string-width: "npm:^4.2.3" + checksum: f464cb19ebde2f3880620a2adfaeeefaec6cb15c8e610c8a659ca1047ee90d69f3bf2fdabbb1fe33ac408678e882e3e0eecdb84ab5df0edf930b269b8a72682d + languageName: node + linkType: hard + +"cli-spinners@npm:^2.6.1": + version: 2.9.2 + resolution: "cli-spinners@npm:2.9.2" + checksum: 907a1c227ddf0d7a101e7ab8b300affc742ead4b4ebe920a5bf1bc6d45dce2958fcd195eb28fa25275062fe6fa9b109b93b63bc8033396ed3bcb50297008b3a3 + languageName: node + linkType: hard + +"cli-truncate@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-truncate@npm:3.1.0" + dependencies: + slice-ansi: "npm:^5.0.0" + string-width: "npm:^5.0.0" + checksum: a19088878409ec0e5dc2659a5166929629d93cfba6d68afc9cde2282fd4c751af5b555bf197047e31c87c574396348d011b7aa806fec29c4139ea4f7f00b324c + languageName: node + linkType: hard + +"cli-width@npm:^2.0.0": + version: 2.2.1 + resolution: "cli-width@npm:2.2.1" + checksum: e3a6d422d657ca111c630f69ee0f1a499e8f114eea158ccb2cdbedd19711edffa217093bbd43dafb34b68d1b1a3b5334126e51d059b9ec1d19afa53b42b3ef86 + languageName: node + linkType: hard + +"clipboardy@npm:^3.0.0": + version: 3.0.0 + resolution: "clipboardy@npm:3.0.0" + dependencies: + arch: "npm:^2.2.0" + execa: "npm:^5.1.1" + is-wsl: "npm:^2.2.0" + checksum: 299d66e13fcaccf656306e76d629ce6927eaba8ba58ae5328e3379ae627e469e29df8ef87408cdb234e2ad0e25f0024dd203393f7e59c67ae79772579c4de052 + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.1" + wrap-ansi: "npm:^7.0.0" + checksum: 4bda0f09c340cbb6dfdc1ed508b3ca080f12992c18d68c6be4d9cf51756033d5266e61ec57529e610dacbf4da1c634423b0c1b11037709cc6b09045cbd815df5 + languageName: node + linkType: hard + +"clone@npm:^1.0.2": + version: 1.0.4 + resolution: "clone@npm:1.0.4" + checksum: 2176952b3649293473999a95d7bebfc9dc96410f6cbd3d2595cf12fd401f63a4bf41a7adbfd3ab2ff09ed60cb9870c58c6acdd18b87767366fabfc163700f13b + languageName: node + linkType: hard + +"cluster-key-slot@npm:^1.1.0": + version: 1.1.2 + resolution: "cluster-key-slot@npm:1.1.2" + checksum: d7d39ca28a8786e9e801eeb8c770e3c3236a566625d7299a47bb71113fb2298ce1039596acb82590e598c52dbc9b1f088c8f587803e697cb58e1867a95ff94d3 + languageName: node + linkType: hard + +"co@npm:^4.6.0": + version: 4.6.0 + resolution: "co@npm:4.6.0" + checksum: c0e85ea0ca8bf0a50cbdca82efc5af0301240ca88ebe3644a6ffb8ffe911f34d40f8fbcf8f1d52c5ddd66706abd4d3bfcd64259f1e8e2371d4f47573b0dc8c28 + languageName: node + linkType: hard + +"collect-v8-coverage@npm:^1.0.0": + version: 1.0.2 + resolution: "collect-v8-coverage@npm:1.0.2" + checksum: ed7008e2e8b6852c5483b444a3ae6e976e088d4335a85aa0a9db2861c5f1d31bd2d7ff97a60469b3388deeba661a619753afbe201279fb159b4b9548ab8269a1 + languageName: node + linkType: hard + +"collection-visit@npm:^1.0.0": + version: 1.0.0 + resolution: "collection-visit@npm:1.0.0" + dependencies: + map-visit: "npm:^1.0.0" + object-visit: "npm:^1.0.0" + checksum: add72a8d1c37cb90e53b1aaa2c31bf1989bfb733f0b02ce82c9fa6828c7a14358dba2e4f8e698c02f69e424aeccae1ffb39acdeaf872ade2f41369e84a2fcf8a + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0, color-convert@npm:^1.9.3": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: "npm:1.1.3" + checksum: 5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 + languageName: node + linkType: hard + +"color-name@npm:^1.0.0, color-name@npm:^1.1.4, color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 + languageName: node + linkType: hard + +"color-string@npm:^1.6.0, color-string@npm:^1.9.0": + version: 1.9.1 + resolution: "color-string@npm:1.9.1" + dependencies: + color-name: "npm:^1.0.0" + simple-swizzle: "npm:^0.2.2" + checksum: b0bfd74c03b1f837f543898b512f5ea353f71630ccdd0d66f83028d1f0924a7d4272deb278b9aef376cacf1289b522ac3fb175e99895283645a2dc3a33af2404 + languageName: node + linkType: hard + +"color-support@npm:^1.1.2": + version: 1.1.3 + resolution: "color-support@npm:1.1.3" + bin: + color-support: bin.js + checksum: 8ffeaa270a784dc382f62d9be0a98581db43e11eee301af14734a6d089bd456478b1a8b3e7db7ca7dc5b18a75f828f775c44074020b51c05fc00e6d0992b1cc6 + languageName: node + linkType: hard + +"color@npm:^3.1.3": + version: 3.2.1 + resolution: "color@npm:3.2.1" + dependencies: + color-convert: "npm:^1.9.3" + color-string: "npm:^1.6.0" + checksum: 39345d55825884c32a88b95127d417a2c24681d8b57069413596d9fcbb721459ef9d9ec24ce3e65527b5373ce171b73e38dbcd9c830a52a6487e7f37bf00e83c + languageName: node + linkType: hard + +"color@npm:^4.2.3": + version: 4.2.3 + resolution: "color@npm:4.2.3" + dependencies: + color-convert: "npm:^2.0.1" + color-string: "npm:^1.9.0" + checksum: 7fbe7cfb811054c808349de19fb380252e5e34e61d7d168ec3353e9e9aacb1802674bddc657682e4e9730c2786592a4de6f8283e7e0d3870b829bb0b7b2f6118 + languageName: node + linkType: hard + +"colorette@npm:^1.3.0": + version: 1.4.0 + resolution: "colorette@npm:1.4.0" + checksum: 4955c8f7daafca8ae7081d672e4bd89d553bd5782b5846d5a7e05effe93c2f15f7e9c0cb46f341b59f579a39fcf436241ff79594899d75d5f3460c03d607fe9e + languageName: node + linkType: hard + +"colorette@npm:^2.0.20, colorette@npm:^2.0.7": + version: 2.0.20 + resolution: "colorette@npm:2.0.20" + checksum: e94116ff33b0ff56f3b83b9ace895e5bf87c2a7a47b3401b8c3f3226e050d5ef76cf4072fb3325f9dc24d1698f9b730baf4e05eeaf861d74a1883073f4c98a40 + languageName: node + linkType: hard + +"colors-option@npm:^3.0.0": + version: 3.0.0 + resolution: "colors-option@npm:3.0.0" + dependencies: + chalk: "npm:^5.0.0" + filter-obj: "npm:^3.0.0" + is-plain-obj: "npm:^4.0.0" + jest-validate: "npm:^27.3.1" + checksum: 69f714613e17e49e37b1a919fc613809141c2396903b34eac8bcf228061db6a2dd167609f68d9b933c8cf9efcfb5574feffcf9b572d938083f6ce8b467a5be0c + languageName: node + linkType: hard + +"colors-option@npm:^4.4.0": + version: 4.5.0 + resolution: "colors-option@npm:4.5.0" + dependencies: + chalk: "npm:^5.0.1" + is-plain-obj: "npm:^4.1.0" + checksum: db970e5d282dc53e8d3daead724c46885288c23aae6990d7d6a7458911be9fbf0ad62fc5bcffb4c9543b87d10e415594042ab21017a6e68d8a84d33b2a8f706d + languageName: node + linkType: hard + +"colors@npm:1.4.0": + version: 1.4.0 + resolution: "colors@npm:1.4.0" + checksum: 9af357c019da3c5a098a301cf64e3799d27549d8f185d86f79af23069e4f4303110d115da98483519331f6fb71c8568d5688fa1c6523600044fd4a54e97c4efb + languageName: node + linkType: hard + +"colorspace@npm:1.1.x": + version: 1.1.4 + resolution: "colorspace@npm:1.1.4" + dependencies: + color: "npm:^3.1.3" + text-hex: "npm:1.0.x" + checksum: af5f91ff7f8e146b96e439ac20ed79b197210193bde721b47380a75b21751d90fa56390c773bb67c0aedd34ff85091883a437ab56861c779bd507d639ba7e123 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: "npm:~1.0.0" + checksum: 0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 + languageName: node + linkType: hard + +"commander@npm:10.0.1, commander@npm:^10.0.1": + version: 10.0.1 + resolution: "commander@npm:10.0.1" + checksum: 53f33d8927758a911094adadda4b2cbac111a5b377d8706700587650fd8f45b0bbe336de4b5c3fe47fd61f420a3d9bd452b6e0e6e5600a7e74d7bf0174f6efe3 + languageName: node + linkType: hard + +"commander@npm:11.0.0, commander@npm:^11.0.0": + version: 11.0.0 + resolution: "commander@npm:11.0.0" + checksum: 471c44cd2d31dee556753df6ceb5ef52ccded0ba6308d3ba7a76251aa0edeedf5ac66ca86cb6096cc8fe20997064233c476983d346265f85180e86312724de0c + languageName: node + linkType: hard + +"commander@npm:^11.1.0": + version: 11.1.0 + resolution: "commander@npm:11.1.0" + checksum: 13cc6ac875e48780250f723fb81c1c1178d35c5decb1abb1b628b3177af08a8554e76b2c0f29de72d69eef7c864d12613272a71fabef8047922bc622ab75a179 + languageName: node + linkType: hard + +"commander@npm:^2.20.3, commander@npm:^2.8.1": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: 74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 + languageName: node + linkType: hard + +"commander@npm:^4.1.1": + version: 4.1.1 + resolution: "commander@npm:4.1.1" + checksum: 84a76c08fe6cc08c9c93f62ac573d2907d8e79138999312c92d4155bc2325d487d64d13f669b2000c9f8caf70493c1be2dac74fec3c51d5a04f8bc3ae1830bab + languageName: node + linkType: hard + +"commander@npm:^6.2.0": + version: 6.2.1 + resolution: "commander@npm:6.2.1" + checksum: 85748abd9d18c8bc88febed58b98f66b7c591d9b5017cad459565761d7b29ca13b7783ea2ee5ce84bf235897333706c4ce29adf1ce15c8252780e7000e2ce9ea + languageName: node + linkType: hard + +"commander@npm:^7.2.0": + version: 7.2.0 + resolution: "commander@npm:7.2.0" + checksum: 8d690ff13b0356df7e0ebbe6c59b4712f754f4b724d4f473d3cc5b3fdcf978e3a5dc3078717858a2ceb50b0f84d0660a7f22a96cdc50fb877d0c9bb31593d23a + languageName: node + linkType: hard + +"commander@npm:^9.3.0": + version: 9.5.0 + resolution: "commander@npm:9.5.0" + checksum: 5f7784fbda2aaec39e89eb46f06a999e00224b3763dc65976e05929ec486e174fe9aac2655f03ba6a5e83875bd173be5283dc19309b7c65954701c02025b3c1d + languageName: node + linkType: hard + +"comment-json@npm:4.2.3, comment-json@npm:^4.2.3": + version: 4.2.3 + resolution: "comment-json@npm:4.2.3" + dependencies: + array-timsort: "npm:^1.0.3" + core-util-is: "npm:^1.0.3" + esprima: "npm:^4.0.1" + has-own-prop: "npm:^2.0.0" + repeat-string: "npm:^1.6.1" + checksum: e8a0d3a6d75d92551f9a7e6fefa31f3d831dc33117b0b9432f061f45a571c85c16143e4110693d450f6eca20841db43f5429ac0d801673bcf03e9973ab1c31af + languageName: node + linkType: hard + +"common-path-prefix@npm:^3.0.0": + version: 3.0.0 + resolution: "common-path-prefix@npm:3.0.0" + checksum: c4a74294e1b1570f4a8ab435285d185a03976c323caa16359053e749db4fde44e3e6586c29cd051100335e11895767cbbd27ea389108e327d62f38daf4548fdb + languageName: node + linkType: hard + +"compare-func@npm:^2.0.0": + version: 2.0.0 + resolution: "compare-func@npm:2.0.0" + dependencies: + array-ify: "npm:^1.0.0" + dot-prop: "npm:^5.1.0" + checksum: 78bd4dd4ed311a79bd264c9e13c36ed564cde657f1390e699e0f04b8eee1fc06ffb8698ce2dfb5fbe7342d509579c82d4e248f08915b708f77f7b72234086cc3 + languageName: node + linkType: hard + +"component-emitter@npm:^1.2.1": + version: 1.3.1 + resolution: "component-emitter@npm:1.3.1" + checksum: e4900b1b790b5e76b8d71b328da41482118c0f3523a516a41be598dc2785a07fd721098d9bf6e22d89b19f4fa4e1025160dc00317ea111633a3e4f75c2b86032 + languageName: node + linkType: hard + +"compose-function@npm:^3.0.3": + version: 3.0.3 + resolution: "compose-function@npm:3.0.3" + dependencies: + arity-n: "npm:^1.0.4" + checksum: 2b3b8a785e4d5431c0be2ab04e9de29451f3721136bef27ce6973c1971193ed9d7887ec82175b3d3e1fc00c8af6040a5841532c763a63e1ea8aeeeb128ad26fa + languageName: node + linkType: hard + +"compress-commons@npm:^5.0.1": + version: 5.0.1 + resolution: "compress-commons@npm:5.0.1" + dependencies: + crc-32: "npm:^1.2.0" + crc32-stream: "npm:^5.0.0" + normalize-path: "npm:^3.0.0" + readable-stream: "npm:^3.6.0" + checksum: 1c604ac753b4ec643a807f3db545bf497d1e9c6f81e9132280c98d972b02bbeba087e7fb2d53f3043f9643a64a6140e9e39b94329040695d404b83a0c7f38fa2 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f + languageName: node + linkType: hard + +"concordance@npm:5.0.4": + version: 5.0.4 + resolution: "concordance@npm:5.0.4" + dependencies: + date-time: "npm:^3.1.0" + esutils: "npm:^2.0.3" + fast-diff: "npm:^1.2.0" + js-string-escape: "npm:^1.0.1" + lodash: "npm:^4.17.15" + md5-hex: "npm:^3.0.1" + semver: "npm:^7.3.2" + well-known-symbols: "npm:^2.0.0" + checksum: 59b440f330df3a7c9aa148ba588b3e99aed86acab225b4f01ffcea34ace4cf11f817e31153254e8f38ed48508998dad40b9106951a743c334d751f7ab21afb8a + languageName: node + linkType: hard + +"config-chain@npm:^1.1.11": + version: 1.1.13 + resolution: "config-chain@npm:1.1.13" + dependencies: + ini: "npm:^1.3.4" + proto-list: "npm:~1.2.1" + checksum: 39d1df18739d7088736cc75695e98d7087aea43646351b028dfabd5508d79cf6ef4c5bcd90471f52cd87ae470d1c5490c0a8c1a292fbe6ee9ff688061ea0963e + languageName: node + linkType: hard + +"configstore@npm:6.0.0, configstore@npm:^6.0.0": + version: 6.0.0 + resolution: "configstore@npm:6.0.0" + dependencies: + dot-prop: "npm:^6.0.1" + graceful-fs: "npm:^4.2.6" + unique-string: "npm:^3.0.0" + write-file-atomic: "npm:^3.0.3" + xdg-basedir: "npm:^5.0.1" + checksum: 6681a96038ab3e0397cbdf55e6e1624ac3dfa3afe955e219f683df060188a418bda043c9114a59a337e7aec9562b0a0c838ed7db24289e6d0c266bc8313b9580 + languageName: node + linkType: hard + +"consola@npm:^3.2.3": + version: 3.2.3 + resolution: "consola@npm:3.2.3" + checksum: c606220524ec88a05bb1baf557e9e0e04a0c08a9c35d7a08652d99de195c4ddcb6572040a7df57a18ff38bbc13ce9880ad032d56630cef27bef72768ef0ac078 + languageName: node + linkType: hard + +"console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0": + version: 1.1.0 + resolution: "console-control-strings@npm:1.1.0" + checksum: 7ab51d30b52d461412cd467721bb82afe695da78fff8f29fe6f6b9cbaac9a2328e27a22a966014df9532100f6dd85370460be8130b9c677891ba36d96a343f50 + languageName: node + linkType: hard + +"content-disposition@npm:0.5.4, content-disposition@npm:^0.5.3, content-disposition@npm:^0.5.4": + version: 0.5.4 + resolution: "content-disposition@npm:0.5.4" + dependencies: + safe-buffer: "npm:5.2.1" + checksum: bac0316ebfeacb8f381b38285dc691c9939bf0a78b0b7c2d5758acadad242d04783cee5337ba7d12a565a19075af1b3c11c728e1e4946de73c6ff7ce45f3f1bb + languageName: node + linkType: hard + +"content-type@npm:1.0.5, content-type@npm:~1.0.4": + version: 1.0.5 + resolution: "content-type@npm:1.0.5" + checksum: b76ebed15c000aee4678c3707e0860cb6abd4e680a598c0a26e17f0bfae723ec9cc2802f0ff1bc6e4d80603719010431d2231018373d4dde10f9ccff9dadf5af + languageName: node + linkType: hard + +"conventional-changelog-angular@npm:^6.0.0": + version: 6.0.0 + resolution: "conventional-changelog-angular@npm:6.0.0" + dependencies: + compare-func: "npm:^2.0.0" + checksum: a661ff7b79d4b829ccf8f424ef1bb210e777c1152a1ba5b2ba0a8639529c315755b82a6f84684f1b552c4e8ed6696bfe57317c5f7b868274e9a72b2bf13081ba + languageName: node + linkType: hard + +"conventional-changelog-conventionalcommits@npm:^6.1.0": + version: 6.1.0 + resolution: "conventional-changelog-conventionalcommits@npm:6.1.0" + dependencies: + compare-func: "npm:^2.0.0" + checksum: b313f5c0160d109f58d976566e1331ede3a25ab19fbf43f86763b280659195de00a68551f7f3930bf1cbf39a5e707d94f2a25b79996e59043fa9ee0bed68a79f + languageName: node + linkType: hard + +"conventional-commits-parser@npm:^4.0.0": + version: 4.0.0 + resolution: "conventional-commits-parser@npm:4.0.0" + dependencies: + JSONStream: "npm:^1.3.5" + is-text-path: "npm:^1.0.1" + meow: "npm:^8.1.2" + split2: "npm:^3.2.2" + bin: + conventional-commits-parser: cli.js + checksum: 12e390cc80ad8a825c5775a329b95e11cf47a6df7b8a3875d375e28b8cb27c4f32955842ea73e4e357cff9757a6be99fdffe4fda87a23e9d8e73f983425537a0 + languageName: node + linkType: hard + +"convert-source-map@npm:^1.6.0": + version: 1.9.0 + resolution: "convert-source-map@npm:1.9.0" + checksum: 281da55454bf8126cbc6625385928c43479f2060984180c42f3a86c8b8c12720a24eac260624a7d1e090004028d2dee78602330578ceec1a08e27cb8bb0a8a5b + languageName: node + linkType: hard + +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 8f2f7a27a1a011cc6cc88cc4da2d7d0cfa5ee0369508baae3d98c260bb3ac520691464e5bbe4ae7cdf09860c1d69ecc6f70c63c6e7c7f7e3f18ec08484dc7d9b + languageName: node + linkType: hard + +"cookie-es@npm:^1.0.0": + version: 1.0.0 + resolution: "cookie-es@npm:1.0.0" + checksum: 49fb5d5d050e34b5b5f6e31b47d28364d149a31322994568a826a8d137f36792f0365cedc587ab880a1826db41f644d349930523d980f2a0ac3608d63db9263b + languageName: node + linkType: hard + +"cookie-signature@npm:1.0.6": + version: 1.0.6 + resolution: "cookie-signature@npm:1.0.6" + checksum: b36fd0d4e3fef8456915fcf7742e58fbfcc12a17a018e0eb9501c9d5ef6893b596466f03b0564b81af29ff2538fd0aa4b9d54fe5ccbfb4c90ea50ad29fe2d221 + languageName: node + linkType: hard + +"cookie@npm:0.5.0, cookie@npm:^0.5.0": + version: 0.5.0 + resolution: "cookie@npm:0.5.0" + checksum: c01ca3ef8d7b8187bae434434582288681273b5a9ed27521d4d7f9f7928fe0c920df0decd9f9d3bbd2d14ac432b8c8cf42b98b3bdd5bfe0e6edddeebebe8b61d + languageName: node + linkType: hard + +"cookie@npm:^0.4.1": + version: 0.4.2 + resolution: "cookie@npm:0.4.2" + checksum: beab41fbd7c20175e3a2799ba948c1dcc71ef69f23fe14eeeff59fc09f50c517b0f77098db87dbb4c55da802f9d86ee86cdc1cd3efd87760341551838d53fca2 + languageName: node + linkType: hard + +"copy-descriptor@npm:^0.1.0": + version: 0.1.1 + resolution: "copy-descriptor@npm:0.1.1" + checksum: 161f6760b7348c941007a83df180588fe2f1283e0867cc027182734e0f26134e6cc02de09aa24a95dc267b2e2025b55659eef76c8019df27bc2d883033690181 + languageName: node + linkType: hard + +"copy-template-dir@npm:1.4.0": + version: 1.4.0 + resolution: "copy-template-dir@npm:1.4.0" + dependencies: + end-of-stream: "npm:^1.1.0" + graceful-fs: "npm:^4.1.3" + maxstache: "npm:^1.0.0" + maxstache-stream: "npm:^1.0.0" + mkdirp: "npm:^0.5.1" + noop2: "npm:^2.0.0" + pump: "npm:^1.0.0" + readdirp: "npm:^2.0.0" + run-parallel: "npm:^1.1.4" + checksum: c2ddf1edb6c8a2d019c53645585d73a85c478e40fe8ccf08bc963630ca03ec5c09f14ce58820c1af7a45e116a261055622a683c3a5fa09c767c2cbd7c5741784 + languageName: node + linkType: hard + +"core-util-is@npm:^1.0.3, core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" + checksum: 90a0e40abbddfd7618f8ccd63a74d88deea94e77d0e8dbbea059fa7ebebb8fbb4e2909667fe26f3a467073de1a542ebe6ae4c73a73745ac5833786759cd906c9 + languageName: node + linkType: hard + +"cosmiconfig-typescript-loader@npm:^4.0.0": + version: 4.4.0 + resolution: "cosmiconfig-typescript-loader@npm:4.4.0" + peerDependencies: + "@types/node": "*" + cosmiconfig: ">=7" + ts-node: ">=10" + typescript: ">=4" + checksum: a204eb354943f84ab0434d108fdf593db84c477f107f3ccb586e2d659c1d87f03071d8983c96d4ce2a59cc524ec845697f0432876339e4c28bde84b665cd92a6 + languageName: node + linkType: hard + +"cosmiconfig@npm:8.0.0": + version: 8.0.0 + resolution: "cosmiconfig@npm:8.0.0" + dependencies: + import-fresh: "npm:^3.2.1" + js-yaml: "npm:^4.1.0" + parse-json: "npm:^5.0.0" + path-type: "npm:^4.0.0" + checksum: cea301202bb68373f9c8ccc77a6002aab1032f327dd1458e5932ee1a2f48919c881074d702cece91f18275673817872a0d3d00eb46f30a33c8f2009dbbac0e5c + languageName: node + linkType: hard + +"cosmiconfig@npm:^8.0.0": + version: 8.3.5 + resolution: "cosmiconfig@npm:8.3.5" + dependencies: + import-fresh: "npm:^3.3.0" + js-yaml: "npm:^4.1.0" + parse-json: "npm:^5.2.0" + path-type: "npm:^4.0.0" + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + checksum: ec803b30b49ba686c3a844677ed9d40f7db68e01f75a2e6ad474f2af6ec15ef17561258c9592a0df209f137edc88056c113838b1d54e784de21853920c3a1fa9 + languageName: node + linkType: hard + +"cp-file@npm:^10.0.0": + version: 10.0.0 + resolution: "cp-file@npm:10.0.0" + dependencies: + graceful-fs: "npm:^4.2.10" + nested-error-stacks: "npm:^2.1.1" + p-event: "npm:^5.0.1" + checksum: acff14b4d267c4179daa4fb913b974d9e6a3d9de9a55283712eaf7c8e05488cd50214d58173d38e0cb5b8111773afbd7755fe912d4147862009d695a51db7393 + languageName: node + linkType: hard + +"cp-file@npm:^9.1.0": + version: 9.1.0 + resolution: "cp-file@npm:9.1.0" + dependencies: + graceful-fs: "npm:^4.1.2" + make-dir: "npm:^3.0.0" + nested-error-stacks: "npm:^2.0.0" + p-event: "npm:^4.1.0" + checksum: 866a884b11b6a6c54263aaa9bbf802943025fcfe402e1f0d75600d4877c04fd106b9f6f61168fdedff01314763c544438c727610f2de8bc61a2fc324de46743f + languageName: node + linkType: hard + +"cpy@npm:^9.0.0": + version: 9.0.1 + resolution: "cpy@npm:9.0.1" + dependencies: + arrify: "npm:^3.0.0" + cp-file: "npm:^9.1.0" + globby: "npm:^13.1.1" + junk: "npm:^4.0.0" + micromatch: "npm:^4.0.4" + nested-error-stacks: "npm:^2.1.0" + p-filter: "npm:^3.0.0" + p-map: "npm:^5.3.0" + checksum: a1fd939a27380ad47a05676051fc93280b192c9d1139cf77ab612db39faf71c40dc24d6eae232eb36664d76dab493723778ad7c93d758c3fec2e91d45da2a09f + languageName: node + linkType: hard + +"crc-32@npm:^1.2.0": + version: 1.2.2 + resolution: "crc-32@npm:1.2.2" + bin: + crc32: bin/crc32.njs + checksum: 11dcf4a2e77ee793835d49f2c028838eae58b44f50d1ff08394a610bfd817523f105d6ae4d9b5bef0aad45510f633eb23c903e9902e4409bed1ce70cb82b9bf0 + languageName: node + linkType: hard + +"crc32-stream@npm:^5.0.0": + version: 5.0.0 + resolution: "crc32-stream@npm:5.0.0" + dependencies: + crc-32: "npm:^1.2.0" + readable-stream: "npm:^3.4.0" + checksum: bd6e6d49b76fd562eef3a4b7b64b1e551fb5dfca0a3b54fb7e59765c57468295b60755f85d3450fd61eee01dcca0974600157717cad8f356d513c28bac726a41 + languageName: node + linkType: hard + +"create-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "create-jest@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + chalk: "npm:^4.0.0" + exit: "npm:^0.1.2" + graceful-fs: "npm:^4.2.9" + jest-config: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + prompts: "npm:^2.0.1" + bin: + create-jest: bin/create-jest.js + checksum: e7e54c280692470d3398f62a6238fd396327e01c6a0757002833f06d00afc62dd7bfe04ff2b9cd145264460e6b4d1eb8386f2925b7e567f97939843b7b0e812f + languageName: node + linkType: hard + +"create-require@npm:^1.1.0": + version: 1.1.1 + resolution: "create-require@npm:1.1.1" + checksum: 157cbc59b2430ae9a90034a5f3a1b398b6738bf510f713edc4d4e45e169bc514d3d99dd34d8d01ca7ae7830b5b8b537e46ae8f3c8f932371b0875c0151d7ec91 + languageName: node + linkType: hard + +"cron-parser@npm:4.8.1": + version: 4.8.1 + resolution: "cron-parser@npm:4.8.1" + dependencies: + luxon: "npm:^3.2.1" + checksum: d14bb09277969085068e97b9d65b71175f66065c842f11499890903ac137d476e7d349cf2c026d8e53ac4a5503101ca1f96b6ecfb646063a1ed2440533729776 + languageName: node + linkType: hard + +"cron-parser@npm:^4.1.0": + version: 4.9.0 + resolution: "cron-parser@npm:4.9.0" + dependencies: + luxon: "npm:^3.2.1" + checksum: 348622bdcd1a15695b61fc33af8a60133e5913a85cf99f6344367579e7002896514ba3b0a9d6bb569b02667d6b06836722bf2295fcd101b3de378f71d37bed0b + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 5738c312387081c98d69c98e105b6327b069197f864a60593245d64c8089c8a0a744e16349281210d56835bb9274130d825a78b2ad6853ca13cfbeffc0c31750 + languageName: node + linkType: hard + +"crypt@npm:0.0.2": + version: 0.0.2 + resolution: "crypt@npm:0.0.2" + checksum: adbf263441dd801665d5425f044647533f39f4612544071b1471962209d235042fb703c27eea2795c7c53e1dfc242405173003f83cf4f4761a633d11f9653f18 + languageName: node + linkType: hard + +"crypto-random-string@npm:^2.0.0": + version: 2.0.0 + resolution: "crypto-random-string@npm:2.0.0" + checksum: 288589b2484fe787f9e146f56c4be90b940018f17af1b152e4dde12309042ff5a2bf69e949aab8b8ac253948381529cc6f3e5a2427b73643a71ff177fa122b37 + languageName: node + linkType: hard + +"crypto-random-string@npm:^4.0.0": + version: 4.0.0 + resolution: "crypto-random-string@npm:4.0.0" + dependencies: + type-fest: "npm:^1.0.1" + checksum: 16e11a3c8140398f5408b7fded35a961b9423c5dac39a60cbbd08bd3f0e07d7de130e87262adea7db03ec1a7a4b7551054e0db07ee5408b012bac5400cfc07a5 + languageName: node + linkType: hard + +"cspell-dictionary@npm:7.3.6": + version: 7.3.6 + resolution: "cspell-dictionary@npm:7.3.6" + dependencies: + "@cspell/cspell-pipe": "npm:7.3.6" + "@cspell/cspell-types": "npm:7.3.6" + cspell-trie-lib: "npm:7.3.6" + fast-equals: "npm:^4.0.3" + gensequence: "npm:^6.0.0" + checksum: a152df26a1da9b1bba7815652e400d9acb33da7967dfc63c20b5737dcf0d85f24737786eb4048cc266f9a82726f30251be433b1c24f79a1525ac7af84682fde0 + languageName: node + linkType: hard + +"cspell-gitignore@npm:7.3.6": + version: 7.3.6 + resolution: "cspell-gitignore@npm:7.3.6" + dependencies: + cspell-glob: "npm:7.3.6" + find-up: "npm:^5.0.0" + bin: + cspell-gitignore: bin.mjs + checksum: 82b74afd7d0a0f4efcf7b9b32be36cf61ca28d3e6c81cdab1723b0eee3d3f994f5573a15dc4272be79978bce849e0c9adc79a946c88d25a750561bbb8dc05482 + languageName: node + linkType: hard + +"cspell-glob@npm:7.3.6": + version: 7.3.6 + resolution: "cspell-glob@npm:7.3.6" + dependencies: + micromatch: "npm:^4.0.5" + checksum: 4ec7c9b59e6e6e3912450aaad187aa8854d96e3ce67edf9cf50ed7790436f72400935149e27b85cf35acaf2a332900f6d2c9b5f747dd63dc07d53488128db6e4 + languageName: node + linkType: hard + +"cspell-grammar@npm:7.3.6": + version: 7.3.6 + resolution: "cspell-grammar@npm:7.3.6" + dependencies: + "@cspell/cspell-pipe": "npm:7.3.6" + "@cspell/cspell-types": "npm:7.3.6" + bin: + cspell-grammar: bin.mjs + checksum: 6314bb49e0df07fcee67e87d06120dc8133b27efab310816a7e44caead70d431566c73290b3769f48db485bf48d416b2e51da335aafbeece79a4cda698a23bbd + languageName: node + linkType: hard + +"cspell-io@npm:7.3.6": + version: 7.3.6 + resolution: "cspell-io@npm:7.3.6" + dependencies: + "@cspell/cspell-service-bus": "npm:7.3.6" + node-fetch: "npm:^2.7.0" + checksum: e90ab6f04a176557030893f8d01fc0e38f9d5456f80a2ff6be53d96f67088bbff5978d25ad3095975b4b34f02e1abdfe4c0b782aee17b89147264bc42844add8 + languageName: node + linkType: hard + +"cspell-lib@npm:7.3.6": + version: 7.3.6 + resolution: "cspell-lib@npm:7.3.6" + dependencies: + "@cspell/cspell-bundled-dicts": "npm:7.3.6" + "@cspell/cspell-pipe": "npm:7.3.6" + "@cspell/cspell-resolver": "npm:7.3.6" + "@cspell/cspell-types": "npm:7.3.6" + "@cspell/dynamic-import": "npm:7.3.6" + "@cspell/strong-weak-map": "npm:7.3.6" + clear-module: "npm:^4.1.2" + comment-json: "npm:^4.2.3" + configstore: "npm:^6.0.0" + cosmiconfig: "npm:8.0.0" + cspell-dictionary: "npm:7.3.6" + cspell-glob: "npm:7.3.6" + cspell-grammar: "npm:7.3.6" + cspell-io: "npm:7.3.6" + cspell-trie-lib: "npm:7.3.6" + fast-equals: "npm:^5.0.1" + find-up: "npm:^6.3.0" + gensequence: "npm:^6.0.0" + import-fresh: "npm:^3.3.0" + resolve-from: "npm:^5.0.0" + vscode-languageserver-textdocument: "npm:^1.0.8" + vscode-uri: "npm:^3.0.7" + checksum: 93f3841e2423e1f0447ad0d50bc006bb720f30b1c089e7b458e45032e539746ae993035ead1f6e2b08567fc4e33f793d090d72695ff507aa0f4a1b1922876d2b + languageName: node + linkType: hard + +"cspell-trie-lib@npm:7.3.6": + version: 7.3.6 + resolution: "cspell-trie-lib@npm:7.3.6" + dependencies: + "@cspell/cspell-pipe": "npm:7.3.6" + "@cspell/cspell-types": "npm:7.3.6" + gensequence: "npm:^6.0.0" + checksum: 06fe5aac4837a4af66c1bd1712af885d456fce46578253010fea1f69411463daeb94d5e7737d10b9ddb258a2220ab47c7a8b3d29389015db72428b53ca21acf8 + languageName: node + linkType: hard + +"cspell@npm:^7.0.0": + version: 7.3.6 + resolution: "cspell@npm:7.3.6" + dependencies: + "@cspell/cspell-json-reporter": "npm:7.3.6" + "@cspell/cspell-pipe": "npm:7.3.6" + "@cspell/cspell-types": "npm:7.3.6" + "@cspell/dynamic-import": "npm:7.3.6" + chalk: "npm:^5.3.0" + chalk-template: "npm:^1.1.0" + commander: "npm:^11.0.0" + cspell-gitignore: "npm:7.3.6" + cspell-glob: "npm:7.3.6" + cspell-io: "npm:7.3.6" + cspell-lib: "npm:7.3.6" + fast-glob: "npm:^3.3.1" + fast-json-stable-stringify: "npm:^2.1.0" + file-entry-cache: "npm:^7.0.0" + get-stdin: "npm:^9.0.0" + semver: "npm:^7.5.4" + strip-ansi: "npm:^7.1.0" + vscode-uri: "npm:^3.0.7" + bin: + cspell: bin.mjs + cspell-esm: bin.mjs + checksum: 8278c6bfbae71f1f6753583924e545fa373215f0aae24cb00d5241a87f8d17695513edb2c0bd6463ed1c77de280f1073422277ad29d51c6cc822333daea5edb2 + languageName: node + linkType: hard + +"css-select@npm:^5.1.0": + version: 5.1.0 + resolution: "css-select@npm:5.1.0" + dependencies: + boolbase: "npm:^1.0.0" + css-what: "npm:^6.1.0" + domhandler: "npm:^5.0.2" + domutils: "npm:^3.0.1" + nth-check: "npm:^2.0.1" + checksum: 551c60dba5b54054741032c1793b5734f6ba45e23ae9e82761a3c0ed1acbb8cfedfa443aaba3a3c1a54cac12b456d2012a09d2cd5f0e82e430454c1b9d84d500 + languageName: node + linkType: hard + +"css-tree@npm:^2.2.1": + version: 2.3.1 + resolution: "css-tree@npm:2.3.1" + dependencies: + mdn-data: "npm:2.0.30" + source-map-js: "npm:^1.0.1" + checksum: 6f8c1a11d5e9b14bf02d10717fc0351b66ba12594166f65abfbd8eb8b5b490dd367f5c7721db241a3c792d935fc6751fbc09f7e1598d421477ad9fadc30f4f24 + languageName: node + linkType: hard + +"css-tree@npm:~2.2.0": + version: 2.2.1 + resolution: "css-tree@npm:2.2.1" + dependencies: + mdn-data: "npm:2.0.28" + source-map-js: "npm:^1.0.1" + checksum: 47e87b0f02f8ac22f57eceb65c58011dd142d2158128882a0bf963cf2eabb81a4ebbc2e3790c8289be7919fa8b83750c7b69272bd66772c708143b772ba3c186 + languageName: node + linkType: hard + +"css-what@npm:^6.1.0": + version: 6.1.0 + resolution: "css-what@npm:6.1.0" + checksum: a09f5a6b14ba8dcf57ae9a59474722e80f20406c53a61e9aedb0eedc693b135113ffe2983f4efc4b5065ae639442e9ae88df24941ef159c218b231011d733746 + languageName: node + linkType: hard + +"cssfilter@npm:0.0.10": + version: 0.0.10 + resolution: "cssfilter@npm:0.0.10" + checksum: 478a227a616fb6e9bb338eb95f690df141b86231ec737cbea574484f31a09a51db894b4921afc4987459dae08d584355fd689ff2a7a7c7a74de4bb4c072ce553 + languageName: node + linkType: hard + +"csso@npm:5.0.5": + version: 5.0.5 + resolution: "csso@npm:5.0.5" + dependencies: + css-tree: "npm:~2.2.0" + checksum: ab4beb1e97dd7e207c10e9925405b45f15a6cd1b4880a8686ad573aa6d476aed28b4121a666cffd26c37a26179f7b54741f7c257543003bfb244d06a62ad569b + languageName: node + linkType: hard + +"cssstyle@npm:^3.0.0": + version: 3.0.0 + resolution: "cssstyle@npm:3.0.0" + dependencies: + rrweb-cssom: "npm:^0.6.0" + checksum: 23acee092c1cec670fb7b8110e48abd740dc4e574d3b74848743067cb3377a86a1f64cf02606aabd7bb153785e68c2c1e09ce53295ddf7a4b470b3c7c55ec807 + languageName: node + linkType: hard + +"cyclist@npm:^1.0.1": + version: 1.0.2 + resolution: "cyclist@npm:1.0.2" + checksum: 163e2f7207180ccf2bb5a6ca8a7360469c13fad631509ef96de02397266b3a42089e2b2b51b97d3d8fdc4709d2fbe651c309670e5cc28b0ae445b1e5a34a98e2 + languageName: node + linkType: hard + +"d@npm:1, d@npm:^1.0.1": + version: 1.0.1 + resolution: "d@npm:1.0.1" + dependencies: + es5-ext: "npm:^0.10.50" + type: "npm:^1.0.1" + checksum: 1fedcb3b956a461f64d86b94b347441beff5cef8910b6ac4ec509a2c67eeaa7093660a98b26601ac91f91260238add73bdf25867a9c0cb783774642bc4c1523f + languageName: node + linkType: hard + +"dargs@npm:^7.0.0": + version: 7.0.0 + resolution: "dargs@npm:7.0.0" + checksum: ec7f6a8315a8fa2f8b12d39207615bdf62b4d01f631b96fbe536c8ad5469ab9ed710d55811e564d0d5c1d548fc8cb6cc70bf0939f2415790159f5a75e0f96c92 + languageName: node + linkType: hard + +"data-uri-to-buffer@npm:^3.0.1": + version: 3.0.1 + resolution: "data-uri-to-buffer@npm:3.0.1" + checksum: 01fa28525402582fbb972c91822533f5528156e9e7241512b903467acbe2e0505760504e22c548bb707c7a56b5459194ee4fa6434e5995fa1a658744c2ce0cff + languageName: node + linkType: hard + +"data-uri-to-buffer@npm:^4.0.0": + version: 4.0.1 + resolution: "data-uri-to-buffer@npm:4.0.1" + checksum: 20a6b93107597530d71d4cb285acee17f66bcdfc03fd81040921a81252f19db27588d87fc8fc69e1950c55cfb0bf8ae40d0e5e21d907230813eb5d5a7f9eb45b + languageName: node + linkType: hard + +"data-urls@npm:^4.0.0": + version: 4.0.0 + resolution: "data-urls@npm:4.0.0" + dependencies: + abab: "npm:^2.0.6" + whatwg-mimetype: "npm:^3.0.0" + whatwg-url: "npm:^12.0.0" + checksum: 928d9a21db31d3dcee125d514fddfeb88067c348b1225e9d2c6ca55db16e1cbe49bf58c092cae7163de958f415fd5c612c2aef2eef87896e097656fce205d766 + languageName: node + linkType: hard + +"date-time@npm:^3.1.0": + version: 3.1.0 + resolution: "date-time@npm:3.1.0" + dependencies: + time-zone: "npm:^1.0.0" + checksum: aa3e2e930d74b0b9e90f69de7a16d3376e30f21f1f4ce9a2311d8fec32d760e776efea752dafad0ce188187265235229013036202be053fc2d7979813bfb6ded + languageName: node + linkType: hard + +"dateformat@npm:^4.5.1, dateformat@npm:^4.6.3": + version: 4.6.3 + resolution: "dateformat@npm:4.6.3" + checksum: e2023b905e8cfe2eb8444fb558562b524807a51cdfe712570f360f873271600b5c94aebffaf11efb285e2c072264a7cf243eadb68f3eba0f8cc85fb86cd25df6 + languageName: node + linkType: hard + +"debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.3.3": + version: 2.6.9 + resolution: "debug@npm:2.6.9" + dependencies: + ms: "npm:2.0.0" + checksum: 121908fb839f7801180b69a7e218a40b5a0b718813b886b7d6bdb82001b931c938e2941d1e4450f33a1b1df1da653f5f7a0440c197f29fbf8a6e9d45ff6ef589 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:4.3.4, debug@npm:^4.0.0, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: "npm:2.1.2" + peerDependenciesMeta: + supports-color: + optional: true + checksum: cedbec45298dd5c501d01b92b119cd3faebe5438c3917ff11ae1bff86a6c722930ac9c8659792824013168ba6db7c4668225d845c633fbdafbbf902a6389f736 + languageName: node + linkType: hard + +"debug@npm:^3.2.7": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: "npm:^2.1.1" + checksum: 37d96ae42cbc71c14844d2ae3ba55adf462ec89fd3a999459dec3833944cd999af6007ff29c780f1c61153bcaaf2c842d1e4ce1ec621e4fc4923244942e4a02a + languageName: node + linkType: hard + +"decache@npm:4.6.2": + version: 4.6.2 + resolution: "decache@npm:4.6.2" + dependencies: + callsite: "npm:^1.0.0" + checksum: 7a27260a0bfc51b913db4956e8fe596d72151c0d4cb437daa30787950c274b3fa5c81235a334742b1e32f87ee55d7eb2a0d960ecdadf3583ef23b8f796aebad3 + languageName: node + linkType: hard + +"decamelize-keys@npm:^1.1.0": + version: 1.1.1 + resolution: "decamelize-keys@npm:1.1.1" + dependencies: + decamelize: "npm:^1.1.0" + map-obj: "npm:^1.0.0" + checksum: 4ca385933127437658338c65fb9aead5f21b28d3dd3ccd7956eb29aab0953b5d3c047fbc207111672220c71ecf7a4d34f36c92851b7bbde6fca1a02c541bdd7d + languageName: node + linkType: hard + +"decamelize@npm:^1.1.0": + version: 1.2.0 + resolution: "decamelize@npm:1.2.0" + checksum: 85c39fe8fbf0482d4a1e224ef0119db5c1897f8503bcef8b826adff7a1b11414972f6fef2d7dec2ee0b4be3863cf64ac1439137ae9e6af23a3d8dcbe26a5b4b2 + languageName: node + linkType: hard + +"decimal.js@npm:^10.4.3": + version: 10.4.3 + resolution: "decimal.js@npm:10.4.3" + checksum: 6d60206689ff0911f0ce968d40f163304a6c1bc739927758e6efc7921cfa630130388966f16bf6ef6b838cb33679fbe8e7a78a2f3c478afce841fd55ac8fb8ee + languageName: node + linkType: hard + +"decode-uri-component@npm:^0.2.0": + version: 0.2.2 + resolution: "decode-uri-component@npm:0.2.2" + checksum: 1f4fa54eb740414a816b3f6c24818fbfcabd74ac478391e9f4e2282c994127db02010ce804f3d08e38255493cfe68608b3f5c8e09fd6efc4ae46c807691f7a31 + languageName: node + linkType: hard + +"decompress-response@npm:^6.0.0": + version: 6.0.0 + resolution: "decompress-response@npm:6.0.0" + dependencies: + mimic-response: "npm:^3.1.0" + checksum: bd89d23141b96d80577e70c54fb226b2f40e74a6817652b80a116d7befb8758261ad073a8895648a29cc0a5947021ab66705cb542fa9c143c82022b27c5b175e + languageName: node + linkType: hard + +"dedent@npm:^1.0.0": + version: 1.5.1 + resolution: "dedent@npm:1.5.1" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: f8612cd5b00aab58b18bb95572dca08dc2d49720bfa7201a444c3dae430291e8a06d4928614a6ec8764d713927f44bce9c990d3b8238fca2f430990ddc17c070 + languageName: node + linkType: hard + +"deep-extend@npm:^0.6.0": + version: 0.6.0 + resolution: "deep-extend@npm:0.6.0" + checksum: 1c6b0abcdb901e13a44c7d699116d3d4279fdb261983122a3783e7273844d5f2537dc2e1c454a23fcf645917f93fbf8d07101c1d03c015a87faa662755212566 + languageName: node + linkType: hard + +"deep-freeze@npm:0.0.1": + version: 0.0.1 + resolution: "deep-freeze@npm:0.0.1" + checksum: b32c878395df6ca0e07d065750e14bc1651ec76e99490bca25e5844f7321676d7045d4eb4123892a0d4f08c38e4b7fa46d6e834782c095723447c0ee2ad0340b + languageName: node + linkType: hard + +"deep-is@npm:^0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: 7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c + languageName: node + linkType: hard + +"deepmerge@npm:^4.2.2": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: e53481aaf1aa2c4082b5342be6b6d8ad9dfe387bc92ce197a66dea08bd4265904a087e75e464f14d1347cf2ac8afe1e4c16b266e0561cc5df29382d3c5f80044 + languageName: node + linkType: hard + +"defaults@npm:^1.0.3": + version: 1.0.4 + resolution: "defaults@npm:1.0.4" + dependencies: + clone: "npm:^1.0.2" + checksum: 9cfbe498f5c8ed733775db62dfd585780387d93c17477949e1670bfcfb9346e0281ce8c4bf9f4ac1fc0f9b851113bd6dc9e41182ea1644ccd97de639fa13c35a + languageName: node + linkType: hard + +"defer-to-connect@npm:^2.0.1": + version: 2.0.1 + resolution: "defer-to-connect@npm:2.0.1" + checksum: 625ce28e1b5ad10cf77057b9a6a727bf84780c17660f6644dab61dd34c23de3001f03cedc401f7d30a4ed9965c2e8a7336e220a329146f2cf85d4eddea429782 + languageName: node + linkType: hard + +"define-data-property@npm:^1.1.1": + version: 1.1.1 + resolution: "define-data-property@npm:1.1.1" + dependencies: + get-intrinsic: "npm:^1.2.1" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.0" + checksum: 77ef6e0bceb515e05b5913ab635a84d537cee84f8a7c37c77fdcb31fc5b80f6dbe81b33375e4b67d96aa04e6a0d8d4ea099e431d83f089af8d93adfb584bcb94 + languageName: node + linkType: hard + +"define-lazy-prop@npm:^2.0.0": + version: 2.0.0 + resolution: "define-lazy-prop@npm:2.0.0" + checksum: db6c63864a9d3b7dc9def55d52764968a5af296de87c1b2cc71d8be8142e445208071953649e0386a8cc37cfcf9a2067a47207f1eb9ff250c2a269658fdae422 + languageName: node + linkType: hard + +"define-property@npm:^0.2.5": + version: 0.2.5 + resolution: "define-property@npm:0.2.5" + dependencies: + is-descriptor: "npm:^0.1.0" + checksum: 9986915c0893818dedc9ca23eaf41370667762fd83ad8aa4bf026a28563120dbaacebdfbfbf2b18d3b929026b9c6ee972df1dbf22de8fafb5fe6ef18361e4750 + languageName: node + linkType: hard + +"define-property@npm:^1.0.0": + version: 1.0.0 + resolution: "define-property@npm:1.0.0" + dependencies: + is-descriptor: "npm:^1.0.0" + checksum: d7cf09db10d55df305f541694ed51dafc776ad9bb8a24428899c9f2d36b11ab38dce5527a81458d1b5e7c389f8cbe803b4abad6e91a0037a329d153b84fc975e + languageName: node + linkType: hard + +"define-property@npm:^2.0.2": + version: 2.0.2 + resolution: "define-property@npm:2.0.2" + dependencies: + is-descriptor: "npm:^1.0.2" + isobject: "npm:^3.0.1" + checksum: f91a08ad008fa764172a2c072adc7312f10217ade89ddaea23018321c6d71b2b68b8c229141ed2064179404e345c537f1a2457c379824813695b51a6ad3e4969 + languageName: node + linkType: hard + +"defu@npm:^6.1.2, defu@npm:^6.1.3": + version: 6.1.3 + resolution: "defu@npm:6.1.3" + checksum: 60d0d9a6e328148d5313fe0239ba3777701291f35570b52562454653d953fec5281b084514540f8d3b60d61bad9e39b52e95b3c0451631ded220ad8fdc893455 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 + languageName: node + linkType: hard + +"delegates@npm:^1.0.0": + version: 1.0.0 + resolution: "delegates@npm:1.0.0" + checksum: ba05874b91148e1db4bf254750c042bf2215febd23a6d3cda2e64896aef79745fbd4b9996488bd3cafb39ce19dbce0fd6e3b6665275638befffe1c9b312b91b5 + languageName: node + linkType: hard + +"denque@npm:^1.1.0": + version: 1.5.1 + resolution: "denque@npm:1.5.1" + checksum: 9e6fc1a63e1c9ded38325290302fef40e5ad28471ad8c66d68eaea623ef847bd25fc75a7c3f47396206dc967922615999066470a364e1786f2758d61337872b7 + languageName: node + linkType: hard + +"denque@npm:^2.1.0": + version: 2.1.0 + resolution: "denque@npm:2.1.0" + checksum: f9ef81aa0af9c6c614a727cb3bd13c5d7db2af1abf9e6352045b86e85873e629690f6222f4edd49d10e4ccf8f078bbeec0794fafaf61b659c0589d0c511ec363 + languageName: node + linkType: hard + +"depd@npm:2.0.0": + version: 2.0.0 + resolution: "depd@npm:2.0.0" + checksum: 58bd06ec20e19529b06f7ad07ddab60e504d9e0faca4bd23079fac2d279c3594334d736508dc350e06e510aba5e22e4594483b3a6562ce7c17dd797f4cc4ad2c + languageName: node + linkType: hard + +"depd@npm:~1.1.2": + version: 1.1.2 + resolution: "depd@npm:1.1.2" + checksum: acb24aaf936ef9a227b6be6d495f0d2eb20108a9a6ad40585c5bda1a897031512fef6484e4fdbb80bd249fdaa82841fa1039f416ece03188e677ba11bcfda249 + languageName: node + linkType: hard + +"deprecation@npm:^2.0.0, deprecation@npm:^2.3.1": + version: 2.3.1 + resolution: "deprecation@npm:2.3.1" + checksum: 23d688ba66b74d09b908c40a76179418acbeeb0bfdf218c8075c58ad8d0c315130cb91aa3dffb623aa3a411a3569ce56c6460de6c8d69071c17fe6dd2442f032 + languageName: node + linkType: hard + +"destr@npm:^2.0.1, destr@npm:^2.0.2": + version: 2.0.2 + resolution: "destr@npm:2.0.2" + checksum: 28bd8793c0507489efeb4b86c471fe9578e25439c1f7e4a4e4db9b69fe37689b68b9b205b7c317ca31590120e9c5364a31fec2eb6ec73bb425ede8f993c771d6 + languageName: node + linkType: hard + +"destroy@npm:1.2.0": + version: 1.2.0 + resolution: "destroy@npm:1.2.0" + checksum: bd7633942f57418f5a3b80d5cb53898127bcf53e24cdf5d5f4396be471417671f0fee48a4ebe9a1e9defbde2a31280011af58a57e090ff822f589b443ed4e643 + languageName: node + linkType: hard + +"detect-libc@npm:^1.0.3": + version: 1.0.3 + resolution: "detect-libc@npm:1.0.3" + bin: + detect-libc: ./bin/detect-libc.js + checksum: 4da0deae9f69e13bc37a0902d78bf7169480004b1fed3c19722d56cff578d16f0e11633b7fbf5fb6249181236c72e90024cbd68f0b9558ae06e281f47326d50d + languageName: node + linkType: hard + +"detect-libc@npm:^2.0.0, detect-libc@npm:^2.0.2": + version: 2.0.2 + resolution: "detect-libc@npm:2.0.2" + checksum: a9f4ffcd2701525c589617d98afe5a5d0676c8ea82bcc4ed6f3747241b79f781d36437c59a5e855254c864d36a3e9f8276568b6b531c28d6e53b093a15703f11 + languageName: node + linkType: hard + +"detect-newline@npm:^3.0.0": + version: 3.1.0 + resolution: "detect-newline@npm:3.1.0" + checksum: c38cfc8eeb9fda09febb44bcd85e467c970d4e3bf526095394e5a4f18bc26dd0cf6b22c69c1fa9969261521c593836db335c2795218f6d781a512aea2fb8209d + languageName: node + linkType: hard + +"detective-amd@npm:^5.0.2": + version: 5.0.2 + resolution: "detective-amd@npm:5.0.2" + dependencies: + ast-module-types: "npm:^5.0.0" + escodegen: "npm:^2.0.0" + get-amd-module-type: "npm:^5.0.1" + node-source-walk: "npm:^6.0.1" + bin: + detective-amd: bin/cli.js + checksum: ed191b5279dc2d5b58fe29fd97c1574e2959e6999e2c178c9bcafa5ff1ff607bd70624674df78a5c13dea6467bca15d46782762e2c5ade460b97fa3206252b7e + languageName: node + linkType: hard + +"detective-cjs@npm:^5.0.1": + version: 5.0.1 + resolution: "detective-cjs@npm:5.0.1" + dependencies: + ast-module-types: "npm:^5.0.0" + node-source-walk: "npm:^6.0.0" + checksum: 623364008b27fe059fc68db1aa1812e737f764867671720bf477514ae1918fa36a32c6b3ac0e9f42f2ee3f3eadec1f69879a2a6a5cfb01393b9934b90c1f4b9c + languageName: node + linkType: hard + +"detective-es6@npm:^4.0.1": + version: 4.0.1 + resolution: "detective-es6@npm:4.0.1" + dependencies: + node-source-walk: "npm:^6.0.1" + checksum: 63e7f1c43949965b0f755aaeb45f2f1b0505cb5f2dc99f0ecb2ba99bdd48ccacd1b58cf0e553aeeafe9cb2b432aaec7fb9749ae578e46e97cf07e987ee82fca9 + languageName: node + linkType: hard + +"detective-postcss@npm:^6.1.3": + version: 6.1.3 + resolution: "detective-postcss@npm:6.1.3" + dependencies: + is-url: "npm:^1.2.4" + postcss: "npm:^8.4.23" + postcss-values-parser: "npm:^6.0.2" + checksum: 7ad2eb7113927930f5d17d97bc3dcfa2d38ea62f65263ecefc4b2289138dd6f7b07e561a23fb05b8befa56d521a49f601caf45794f1a17c3dfc3bf1c1199affe + languageName: node + linkType: hard + +"detective-sass@npm:^5.0.3": + version: 5.0.3 + resolution: "detective-sass@npm:5.0.3" + dependencies: + gonzales-pe: "npm:^4.3.0" + node-source-walk: "npm:^6.0.1" + checksum: e3ea590911977be139825744a0b32161d7430b8cfcf0862407b224dc2f0312a2f10a2d715f455241abb5accdcaa75868d3e6b74324c2c845d9f723f03ca3465b + languageName: node + linkType: hard + +"detective-scss@npm:^4.0.3": + version: 4.0.3 + resolution: "detective-scss@npm:4.0.3" + dependencies: + gonzales-pe: "npm:^4.3.0" + node-source-walk: "npm:^6.0.1" + checksum: bddd7bd6a91dc58167c106b29af828798044ea817a9354727a2e70ef48f37c06852f89f0073d804a0394e8e3221a77e0e4ff27e3376c9f7c1bd1babc17b82f8f + languageName: node + linkType: hard + +"detective-stylus@npm:^4.0.0": + version: 4.0.0 + resolution: "detective-stylus@npm:4.0.0" + checksum: dd98712a7cbc417d8c69f01bedbb94c0708d29b28c5e183679f6abc26fa99f94bebfda1e1773d6dbeba642e7275b106e25ea7e0c61774e7f3573b58a2a1e774a + languageName: node + linkType: hard + +"detective-typescript@npm:^11.1.0": + version: 11.1.0 + resolution: "detective-typescript@npm:11.1.0" + dependencies: + "@typescript-eslint/typescript-estree": "npm:^5.59.5" + ast-module-types: "npm:^5.0.0" + node-source-walk: "npm:^6.0.1" + typescript: "npm:^5.0.4" + checksum: 2ef413b80de244c828533602ea8fe147ca91bc93c579f3a5c92000ee7ec08df3980ba11d52d2e4a54d785fb10aabec591f08a7b530a74d75dfb634ce5c2356a0 + languageName: node + linkType: hard + +"diff-sequences@npm:^29.6.3": + version: 29.6.3 + resolution: "diff-sequences@npm:29.6.3" + checksum: 32e27ac7dbffdf2fb0eb5a84efd98a9ad084fbabd5ac9abb8757c6770d5320d2acd172830b28c4add29bb873d59420601dfc805ac4064330ce59b1adfd0593b2 + languageName: node + linkType: hard + +"diff@npm:^4.0.1": + version: 4.0.2 + resolution: "diff@npm:4.0.2" + checksum: 81b91f9d39c4eaca068eb0c1eb0e4afbdc5bb2941d197f513dd596b820b956fef43485876226d65d497bebc15666aa2aa82c679e84f65d5f2bfbf14ee46e32c1 + languageName: node + linkType: hard + +"digest-fetch@npm:^1.3.0": + version: 1.3.0 + resolution: "digest-fetch@npm:1.3.0" + dependencies: + base-64: "npm:^0.1.0" + md5: "npm:^2.3.0" + checksum: 0fb389e33b9c6baf5e6a9ed287aa9d0d8b373d59b49d49c62c261e1ab24eaaf1d5aea3a105c1b31ba4a23e29e129365d839ce4c5974fa004a85d1a4568bc3585 + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: "npm:^4.0.0" + checksum: dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c + languageName: node + linkType: hard + +"doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" + dependencies: + esutils: "npm:^2.0.2" + checksum: c96bdccabe9d62ab6fea9399fdff04a66e6563c1d6fb3a3a063e8d53c3bb136ba63e84250bbf63d00086a769ad53aef92d2bd483f03f837fc97b71cbee6b2520 + languageName: node + linkType: hard + +"dom-serializer@npm:^2.0.0": + version: 2.0.0 + resolution: "dom-serializer@npm:2.0.0" + dependencies: + domelementtype: "npm:^2.3.0" + domhandler: "npm:^5.0.2" + entities: "npm:^4.2.0" + checksum: d5ae2b7110ca3746b3643d3ef60ef823f5f078667baf530cec096433f1627ec4b6fa8c072f09d079d7cda915fd2c7bc1b7b935681e9b09e591e1e15f4040b8e2 + languageName: node + linkType: hard + +"domelementtype@npm:^2.3.0": + version: 2.3.0 + resolution: "domelementtype@npm:2.3.0" + checksum: 686f5a9ef0fff078c1412c05db73a0dce096190036f33e400a07e2a4518e9f56b1e324f5c576a0a747ef0e75b5d985c040b0d51945ce780c0dd3c625a18cd8c9 + languageName: node + linkType: hard + +"domexception@npm:^4.0.0": + version: 4.0.0 + resolution: "domexception@npm:4.0.0" + dependencies: + webidl-conversions: "npm:^7.0.0" + checksum: 774277cd9d4df033f852196e3c0077a34dbd15a96baa4d166e0e47138a80f4c0bdf0d94e4703e6ff5883cec56bb821a6fff84402d8a498e31de7c87eb932a294 + languageName: node + linkType: hard + +"domhandler@npm:^5.0.2, domhandler@npm:^5.0.3": + version: 5.0.3 + resolution: "domhandler@npm:5.0.3" + dependencies: + domelementtype: "npm:^2.3.0" + checksum: bba1e5932b3e196ad6862286d76adc89a0dbf0c773e5ced1eb01f9af930c50093a084eff14b8de5ea60b895c56a04d5de8bbc4930c5543d029091916770b2d2a + languageName: node + linkType: hard + +"domutils@npm:^3.0.1": + version: 3.1.0 + resolution: "domutils@npm:3.1.0" + dependencies: + dom-serializer: "npm:^2.0.0" + domelementtype: "npm:^2.3.0" + domhandler: "npm:^5.0.3" + checksum: 342d64cf4d07b8a0573fb51e0a6312a88fb520c7fefd751870bf72fa5fc0f2e0cb9a3958a573610b1d608c6e2a69b8e9b4b40f0bfb8f87a71bce4f180cca1887 + languageName: node + linkType: hard + +"dot-prop@npm:7.2.0, dot-prop@npm:^7.0.0, dot-prop@npm:^7.2.0": + version: 7.2.0 + resolution: "dot-prop@npm:7.2.0" + dependencies: + type-fest: "npm:^2.11.2" + checksum: 2621702a01e7a47730e3a8e2938a406afc79b62fbb77bd1394e786ff13776673904bf0a4fc6b812eb9849ec71034e9fc1019a9e0bbe91f84010d8a8088cd41a9 + languageName: node + linkType: hard + +"dot-prop@npm:^5.1.0": + version: 5.3.0 + resolution: "dot-prop@npm:5.3.0" + dependencies: + is-obj: "npm:^2.0.0" + checksum: 93f0d343ef87fe8869320e62f2459f7e70f49c6098d948cc47e060f4a3f827d0ad61e83cb82f2bd90cd5b9571b8d334289978a43c0f98fea4f0e99ee8faa0599 + languageName: node + linkType: hard + +"dot-prop@npm:^6.0.1": + version: 6.0.1 + resolution: "dot-prop@npm:6.0.1" + dependencies: + is-obj: "npm:^2.0.0" + checksum: 30e51ec6408978a6951b21e7bc4938aad01a86f2fdf779efe52330205c6bb8a8ea12f35925c2029d6dc9d1df22f916f32f828ce1e9b259b1371c580541c22b5a + languageName: node + linkType: hard + +"dotenv@npm:*, dotenv@npm:^8.2.0": + version: 8.6.0 + resolution: "dotenv@npm:8.6.0" + checksum: 6750431dea8efbd54b9f2d9681b04e1ccc7989486461dcf058bb708d9e3d63b04115fcdf8840e38ad1e24a4a2e1e7c1560626c5e3ac7bc09371b127c49e2d45f + languageName: node + linkType: hard + +"dotenv@npm:16.0.3": + version: 16.0.3 + resolution: "dotenv@npm:16.0.3" + checksum: 109457ac5f9e930ca8066ea33887b6f839ab24d647a7a8b49ddcd1f32662e2c35591c5e5b9819063e430148a664d0927f0cbe60cf9575d89bc524f47ff7e78f0 + languageName: node + linkType: hard + +"dotenv@npm:^16.3.1": + version: 16.3.1 + resolution: "dotenv@npm:16.3.1" + checksum: b95ff1bbe624ead85a3cd70dbd827e8e06d5f05f716f2d0cbc476532d54c7c9469c3bc4dd93ea519f6ad711cb522c00ac9a62b6eb340d5affae8008facc3fbd7 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 + languageName: node + linkType: hard + +"easy-table@npm:^1.2.0": + version: 1.2.0 + resolution: "easy-table@npm:1.2.0" + dependencies: + ansi-regex: "npm:^5.0.1" + wcwidth: "npm:^1.0.1" + dependenciesMeta: + wcwidth: + optional: true + checksum: 2d37937cd608586ba02e1ec479f90ccec581d366b3b0d1bb26b99ee6005f8d724e32a07a873759893461ca45b99e2d08c30326529d967ce9eedc1e9b68d4aa63 + languageName: node + linkType: hard + +"ecdsa-sig-formatter@npm:1.0.11": + version: 1.0.11 + resolution: "ecdsa-sig-formatter@npm:1.0.11" + dependencies: + safe-buffer: "npm:^5.0.1" + checksum: ebfbf19d4b8be938f4dd4a83b8788385da353d63307ede301a9252f9f7f88672e76f2191618fd8edfc2f24679236064176fab0b78131b161ee73daa37125408c + languageName: node + linkType: hard + +"ee-first@npm:1.1.1": + version: 1.1.1 + resolution: "ee-first@npm:1.1.1" + checksum: b5bb125ee93161bc16bfe6e56c6b04de5ad2aa44234d8f644813cc95d861a6910903132b05093706de2b706599367c4130eb6d170f6b46895686b95f87d017b7 + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.4.526": + version: 1.4.529 + resolution: "electron-to-chromium@npm:1.4.529" + checksum: a03887efbcb17084fcbe0abff97ef03a871e26d2dd5cc05ef89bf14d82534a74bbaf6f37d9bf78d13a8de1b16863ecac76450e19265af9b7afd3db64134dcacc + languageName: node + linkType: hard + +"elliptic@npm:6.5.4": + version: 6.5.4 + resolution: "elliptic@npm:6.5.4" + dependencies: + bn.js: "npm:^4.11.9" + brorand: "npm:^1.1.0" + hash.js: "npm:^1.0.0" + hmac-drbg: "npm:^1.0.1" + inherits: "npm:^2.0.4" + minimalistic-assert: "npm:^1.0.1" + minimalistic-crypto-utils: "npm:^1.0.1" + checksum: 5f361270292c3b27cf0843e84526d11dec31652f03c2763c6c2b8178548175ff5eba95341dd62baff92b2265d1af076526915d8af6cc9cb7559c44a62f8ca6e2 + languageName: node + linkType: hard + +"emittery@npm:^0.13.1": + version: 0.13.1 + resolution: "emittery@npm:0.13.1" + checksum: 1573d0ae29ab34661b6c63251ff8f5facd24ccf6a823f19417ae8ba8c88ea450325788c67f16c99edec8de4b52ce93a10fe441ece389fd156e88ee7dab9bfa35 + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 + languageName: node + linkType: hard + +"enabled@npm:2.0.x": + version: 2.0.0 + resolution: "enabled@npm:2.0.0" + checksum: 3b2c2af9bc7f8b9e291610f2dde4a75cf6ee52a68f4dd585482fbdf9a55d65388940e024e56d40bb03e05ef6671f5f53021fa8b72a20e954d7066ec28166713f + languageName: node + linkType: hard + +"encode-registry@npm:^3.0.1": + version: 3.0.1 + resolution: "encode-registry@npm:3.0.1" + dependencies: + mem: "npm:^8.0.0" + checksum: b5f4d51f8da413cfe8ba93838656a72ff282f6abf927a93f8697858bb70ebb18063872c9856c4d93c3fc1862c21f336a82774dd7de2282239f1dbdd8243663f6 + languageName: node + linkType: hard + +"encodeurl@npm:~1.0.2": + version: 1.0.2 + resolution: "encodeurl@npm:1.0.2" + checksum: f6c2387379a9e7c1156c1c3d4f9cb7bb11cf16dd4c1682e1f6746512564b053df5781029b6061296832b59fb22f459dbe250386d217c2f6e203601abb2ee0bec + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: "npm:^0.6.2" + checksum: 36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 + languageName: node + linkType: hard + +"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" + dependencies: + once: "npm:^1.4.0" + checksum: 870b423afb2d54bb8d243c63e07c170409d41e20b47eeef0727547aea5740bd6717aca45597a9f2745525667a6b804c1e7bede41f856818faee5806dd9ff3975 + languageName: node + linkType: hard + +"entities@npm:^2.2.0": + version: 2.2.0 + resolution: "entities@npm:2.2.0" + checksum: 7fba6af1f116300d2ba1c5673fc218af1961b20908638391b4e1e6d5850314ee2ac3ec22d741b3a8060479911c99305164aed19b6254bde75e7e6b1b2c3f3aa3 + languageName: node + linkType: hard + +"entities@npm:^4.2.0, entities@npm:^4.4.0": + version: 4.5.0 + resolution: "entities@npm:4.5.0" + checksum: 5b039739f7621f5d1ad996715e53d964035f75ad3b9a4d38c6b3804bb226e282ffeae2443624d8fdd9c47d8e926ae9ac009c54671243f0c3294c26af7cc85250 + languageName: node + linkType: hard + +"entities@npm:~3.0.1": + version: 3.0.1 + resolution: "entities@npm:3.0.1" + checksum: 2d93f48fd86de0b0ed8ee34456aa47b4e74a916a5e663cfcc7048302e2c7e932002926daf5a00ad6d5691e3c90673a15d413704d86d7e1b9532f9bc00d975590 + languageName: node + linkType: hard + +"env-paths@npm:3.0.0, env-paths@npm:^3.0.0": + version: 3.0.0 + resolution: "env-paths@npm:3.0.0" + checksum: 76dec878cee47f841103bacd7fae03283af16f0702dad65102ef0a556f310b98a377885e0f32943831eb08b5ab37842a323d02529f3dfd5d0a40ca71b01b435f + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"envinfo@npm:7.8.1": + version: 7.8.1 + resolution: "envinfo@npm:7.8.1" + bin: + envinfo: dist/cli.js + checksum: 01efe7fcf55d4b84a146bc638ef89a89a70b610957db64636ac7cc4247d627eeb1c808ed79d3cfbe3d4fed5e8ba3d61db79c1ca1a3fea9f38639561eefd68733 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 + languageName: node + linkType: hard + +"error-ex@npm:^1.3.1": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: "npm:^0.2.1" + checksum: ba827f89369b4c93382cfca5a264d059dfefdaa56ecc5e338ffa58a6471f5ed93b71a20add1d52290a4873d92381174382658c885ac1a2305f7baca363ce9cce + languageName: node + linkType: hard + +"error-stack-parser@npm:^2.0.2, error-stack-parser@npm:^2.0.3": + version: 2.1.4 + resolution: "error-stack-parser@npm:2.1.4" + dependencies: + stackframe: "npm:^1.3.4" + checksum: 7679b780043c98b01fc546725484e0cfd3071bf5c906bbe358722972f04abf4fc3f0a77988017665bab367f6ef3fc2d0185f7528f45966b83e7c99c02d5509b9 + languageName: node + linkType: hard + +"error@npm:7.0.2": + version: 7.0.2 + resolution: "error@npm:7.0.2" + dependencies: + string-template: "npm:~0.2.1" + xtend: "npm:~4.0.0" + checksum: abee95f258f34490278bfb5f5852420e23f9d7dd7754215144391a731c2e7f68ccb5367497ca7cc20459d1eb7ae5d119d6c82f620a9340150034ddd2e3603178 + languageName: node + linkType: hard + +"error@npm:^7.0.0": + version: 7.2.1 + resolution: "error@npm:7.2.1" + dependencies: + string-template: "npm:~0.2.1" + checksum: 91ce301017292eab20b59e27a0bc322a8f45fcf48d992761530d20c5f9c5699a2ae1822fc94298d4815fd35c2595e89139a7c6fdd3bbe9e93871e3b412186567 + languageName: node + linkType: hard + +"es-module-lexer@npm:^1.0.0": + version: 1.4.1 + resolution: "es-module-lexer@npm:1.4.1" + checksum: b7260a138668554d3f0ddcc728cb4b60c2fa463f15545cf155ecbdd5450a1348952d58298a7f48642e900ee579f21d7f5304b6b3c61b3d9fc2d4b2109b5a9dff + languageName: node + linkType: hard + +"es5-ext@npm:^0.10.35, es5-ext@npm:^0.10.50": + version: 0.10.62 + resolution: "es5-ext@npm:0.10.62" + dependencies: + es6-iterator: "npm:^2.0.3" + es6-symbol: "npm:^3.1.3" + next-tick: "npm:^1.1.0" + checksum: 72dfbec5e4bce24754be9f2c2a1c67c01de3fe000103c115f52891f6a51f44a59674c40a1f6bd2390fcd43987746dccb76efafea91c7bb6295bdca8d63ba3db4 + languageName: node + linkType: hard + +"es6-iterator@npm:^2.0.3": + version: 2.0.3 + resolution: "es6-iterator@npm:2.0.3" + dependencies: + d: "npm:1" + es5-ext: "npm:^0.10.35" + es6-symbol: "npm:^3.1.1" + checksum: 91f20b799dba28fb05bf623c31857fc1524a0f1c444903beccaf8929ad196c8c9ded233e5ac7214fc63a92b3f25b64b7f2737fcca8b1f92d2d96cf3ac902f5d8 + languageName: node + linkType: hard + +"es6-promisify@npm:^6.0.0": + version: 6.1.1 + resolution: "es6-promisify@npm:6.1.1" + checksum: 2c1f68c28f0dc81d15f832ea02ea052f335d72c7600ba93f6df3a25dc7b7fd839d522f814a79470c71a3b45a730f96070024ec38c0ed55e74ba294391ab6ee5a + languageName: node + linkType: hard + +"es6-symbol@npm:^3.1.1, es6-symbol@npm:^3.1.3": + version: 3.1.3 + resolution: "es6-symbol@npm:3.1.3" + dependencies: + d: "npm:^1.0.1" + ext: "npm:^1.1.2" + checksum: 22982f815f00df553a89f4fb74c5048fed85df598482b4bd38dbd173174247949c72982a7d7132a58b147525398400e5f182db59b0916cb49f1e245fb0e22233 + languageName: node + linkType: hard + +"esbuild@npm:0.19.6": + version: 0.19.6 + resolution: "esbuild@npm:0.19.6" + dependencies: + "@esbuild/android-arm": "npm:0.19.6" + "@esbuild/android-arm64": "npm:0.19.6" + "@esbuild/android-x64": "npm:0.19.6" + "@esbuild/darwin-arm64": "npm:0.19.6" + "@esbuild/darwin-x64": "npm:0.19.6" + "@esbuild/freebsd-arm64": "npm:0.19.6" + "@esbuild/freebsd-x64": "npm:0.19.6" + "@esbuild/linux-arm": "npm:0.19.6" + "@esbuild/linux-arm64": "npm:0.19.6" + "@esbuild/linux-ia32": "npm:0.19.6" + "@esbuild/linux-loong64": "npm:0.19.6" + "@esbuild/linux-mips64el": "npm:0.19.6" + "@esbuild/linux-ppc64": "npm:0.19.6" + "@esbuild/linux-riscv64": "npm:0.19.6" + "@esbuild/linux-s390x": "npm:0.19.6" + "@esbuild/linux-x64": "npm:0.19.6" + "@esbuild/netbsd-x64": "npm:0.19.6" + "@esbuild/openbsd-x64": "npm:0.19.6" + "@esbuild/sunos-x64": "npm:0.19.6" + "@esbuild/win32-arm64": "npm:0.19.6" + "@esbuild/win32-ia32": "npm:0.19.6" + "@esbuild/win32-x64": "npm:0.19.6" + dependenciesMeta: + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: bffa321c68373d2c99f5e0af58718900ca04b67a48164abf71cd3da97ee98c037f6d7abc9bd1b589e43ccda82f9ba3a5e54a6b757cf0561b861135f6d1548832 + languageName: node + linkType: hard + +"esbuild@npm:~0.18.20": + version: 0.18.20 + resolution: "esbuild@npm:0.18.20" + dependencies: + "@esbuild/android-arm": "npm:0.18.20" + "@esbuild/android-arm64": "npm:0.18.20" + "@esbuild/android-x64": "npm:0.18.20" + "@esbuild/darwin-arm64": "npm:0.18.20" + "@esbuild/darwin-x64": "npm:0.18.20" + "@esbuild/freebsd-arm64": "npm:0.18.20" + "@esbuild/freebsd-x64": "npm:0.18.20" + "@esbuild/linux-arm": "npm:0.18.20" + "@esbuild/linux-arm64": "npm:0.18.20" + "@esbuild/linux-ia32": "npm:0.18.20" + "@esbuild/linux-loong64": "npm:0.18.20" + "@esbuild/linux-mips64el": "npm:0.18.20" + "@esbuild/linux-ppc64": "npm:0.18.20" + "@esbuild/linux-riscv64": "npm:0.18.20" + "@esbuild/linux-s390x": "npm:0.18.20" + "@esbuild/linux-x64": "npm:0.18.20" + "@esbuild/netbsd-x64": "npm:0.18.20" + "@esbuild/openbsd-x64": "npm:0.18.20" + "@esbuild/sunos-x64": "npm:0.18.20" + "@esbuild/win32-arm64": "npm:0.18.20" + "@esbuild/win32-ia32": "npm:0.18.20" + "@esbuild/win32-x64": "npm:0.18.20" + dependenciesMeta: + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 473b1d92842f50a303cf948a11ebd5f69581cd254d599dd9d62f9989858e0533f64e83b723b5e1398a5b488c0f5fd088795b4235f65ecaf4f007d4b79f04bc88 + languageName: node + linkType: hard + +"escalade@npm:^3.1.1": + version: 3.1.1 + resolution: "escalade@npm:3.1.1" + checksum: afd02e6ca91ffa813e1108b5e7756566173d6bc0d1eb951cb44d6b21702ec17c1cf116cfe75d4a2b02e05acb0b808a7a9387d0d1ca5cf9c04ad03a8445c3e46d + languageName: node + linkType: hard + +"escape-goat@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-goat@npm:4.0.0" + checksum: 9d2a8314e2370f2dd9436d177f6b3b1773525df8f895c8f3e1acb716f5fd6b10b336cb1cd9862d4709b36eb207dbe33664838deca9c6d55b8371be4eebb972f6 + languageName: node + linkType: hard + +"escape-html@npm:~1.0.3": + version: 1.0.3 + resolution: "escape-html@npm:1.0.3" + checksum: 524c739d776b36c3d29fa08a22e03e8824e3b2fd57500e5e44ecf3cc4707c34c60f9ca0781c0e33d191f2991161504c295e98f68c78fe7baa6e57081ec6ac0a3 + languageName: node + linkType: hard + +"escape-string-regexp@npm:5.0.0, escape-string-regexp@npm:^5.0.0": + version: 5.0.0 + resolution: "escape-string-regexp@npm:5.0.0" + checksum: 6366f474c6f37a802800a435232395e04e9885919873e382b157ab7e8f0feb8fed71497f84a6f6a81a49aab41815522f5839112bd38026d203aea0c91622df95 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 2530479fe8db57eace5e8646c9c2a9c80fa279614986d16dcc6bcaceb63ae77f05a851ba6c43756d816c61d7f4534baf56e3c705e3e0d884818a46808811c507 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 + languageName: node + linkType: hard + +"escodegen@npm:^2.0.0": + version: 2.1.0 + resolution: "escodegen@npm:2.1.0" + dependencies: + esprima: "npm:^4.0.1" + estraverse: "npm:^5.2.0" + esutils: "npm:^2.0.2" + source-map: "npm:~0.6.1" + dependenciesMeta: + source-map: + optional: true + bin: + escodegen: bin/escodegen.js + esgenerate: bin/esgenerate.js + checksum: e1450a1f75f67d35c061bf0d60888b15f62ab63aef9df1901cffc81cffbbb9e8b3de237c5502cf8613a017c1df3a3003881307c78835a1ab54d8c8d2206e01d3 + languageName: node + linkType: hard + +"eslint-scope@npm:^5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^4.1.1" + checksum: d30ef9dc1c1cbdece34db1539a4933fe3f9b14e1ffb27ecc85987902ee663ad7c9473bbd49a9a03195a373741e62e2f807c4938992e019b511993d163450e70a + languageName: node + linkType: hard + +"eslint-scope@npm:^7.2.2": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^5.2.0" + checksum: 613c267aea34b5a6d6c00514e8545ef1f1433108097e857225fed40d397dd6b1809dffd11c2fde23b37ca53d7bf935fe04d2a18e6fc932b31837b6ad67e1c116 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 + languageName: node + linkType: hard + +"eslint@npm:^8.43.0": + version: 8.49.0 + resolution: "eslint@npm:8.49.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.2.0" + "@eslint-community/regexpp": "npm:^4.6.1" + "@eslint/eslintrc": "npm:^2.1.2" + "@eslint/js": "npm:8.49.0" + "@humanwhocodes/config-array": "npm:^0.11.11" + "@humanwhocodes/module-importer": "npm:^1.0.1" + "@nodelib/fs.walk": "npm:^1.2.8" + ajv: "npm:^6.12.4" + chalk: "npm:^4.0.0" + cross-spawn: "npm:^7.0.2" + debug: "npm:^4.3.2" + doctrine: "npm:^3.0.0" + escape-string-regexp: "npm:^4.0.0" + eslint-scope: "npm:^7.2.2" + eslint-visitor-keys: "npm:^3.4.3" + espree: "npm:^9.6.1" + esquery: "npm:^1.4.2" + esutils: "npm:^2.0.2" + fast-deep-equal: "npm:^3.1.3" + file-entry-cache: "npm:^6.0.1" + find-up: "npm:^5.0.0" + glob-parent: "npm:^6.0.2" + globals: "npm:^13.19.0" + graphemer: "npm:^1.4.0" + ignore: "npm:^5.2.0" + imurmurhash: "npm:^0.1.4" + is-glob: "npm:^4.0.0" + is-path-inside: "npm:^3.0.3" + js-yaml: "npm:^4.1.0" + json-stable-stringify-without-jsonify: "npm:^1.0.1" + levn: "npm:^0.4.1" + lodash.merge: "npm:^4.6.2" + minimatch: "npm:^3.1.2" + natural-compare: "npm:^1.4.0" + optionator: "npm:^0.9.3" + strip-ansi: "npm:^6.0.1" + text-table: "npm:^0.2.0" + bin: + eslint: bin/eslint.js + checksum: 8d6985a8d60379ea714ad35d7a3d8762ac8c37b986c615e9a7c245794faddf68f61f997ba6f5f903d440e92065a56a4f7832a45adc2d4fc6e977026782f25835 + languageName: node + linkType: hard + +"espree@npm:^9.6.0, espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: "npm:^8.9.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^3.4.1" + checksum: 1a2e9b4699b715347f62330bcc76aee224390c28bb02b31a3752e9d07549c473f5f986720483c6469cf3cfb3c9d05df612ffc69eb1ee94b54b739e67de9bb460 + languageName: node + linkType: hard + +"esprima@npm:^4.0.0, esprima@npm:^4.0.1": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: ad4bab9ead0808cf56501750fd9d3fb276f6b105f987707d059005d57e182d18a7c9ec7f3a01794ebddcca676773e42ca48a32d67a250c9d35e009ca613caba3 + languageName: node + linkType: hard + +"esquery@npm:^1.4.2": + version: 1.5.0 + resolution: "esquery@npm:1.5.0" + dependencies: + estraverse: "npm:^5.1.0" + checksum: a084bd049d954cc88ac69df30534043fb2aee5555b56246493f42f27d1e168f00d9e5d4192e46f10290d312dc30dc7d58994d61a609c579c1219d636996f9213 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: "npm:^5.2.0" + checksum: 81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 + languageName: node + linkType: hard + +"estraverse@npm:^4.1.1": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: 9cb46463ef8a8a4905d3708a652d60122a0c20bb58dec7e0e12ab0e7235123d74214fc0141d743c381813e1b992767e2708194f6f6e0f9fd00c1b4e0887b8b6d + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 + languageName: node + linkType: hard + +"estree-walker@npm:2.0.2, estree-walker@npm:^2.0.1": + version: 2.0.2 + resolution: "estree-walker@npm:2.0.2" + checksum: 53a6c54e2019b8c914dc395890153ffdc2322781acf4bd7d1a32d7aedc1710807bdcd866ac133903d5629ec601fbb50abe8c2e5553c7f5a0afdd9b6af6c945af + languageName: node + linkType: hard + +"esutils@npm:^2.0.2, esutils@npm:^2.0.3": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 + languageName: node + linkType: hard + +"etag@npm:1.8.1, etag@npm:^1.8.1, etag@npm:~1.8.1": + version: 1.8.1 + resolution: "etag@npm:1.8.1" + checksum: 12be11ef62fb9817314d790089a0a49fae4e1b50594135dcb8076312b7d7e470884b5100d249b28c18581b7fd52f8b485689ffae22a11ed9ec17377a33a08f84 + languageName: node + linkType: hard + +"ethers@npm:^5.3.1, ethers@npm:^5.7.2": + version: 5.7.2 + resolution: "ethers@npm:5.7.2" + dependencies: + "@ethersproject/abi": "npm:5.7.0" + "@ethersproject/abstract-provider": "npm:5.7.0" + "@ethersproject/abstract-signer": "npm:5.7.0" + "@ethersproject/address": "npm:5.7.0" + "@ethersproject/base64": "npm:5.7.0" + "@ethersproject/basex": "npm:5.7.0" + "@ethersproject/bignumber": "npm:5.7.0" + "@ethersproject/bytes": "npm:5.7.0" + "@ethersproject/constants": "npm:5.7.0" + "@ethersproject/contracts": "npm:5.7.0" + "@ethersproject/hash": "npm:5.7.0" + "@ethersproject/hdnode": "npm:5.7.0" + "@ethersproject/json-wallets": "npm:5.7.0" + "@ethersproject/keccak256": "npm:5.7.0" + "@ethersproject/logger": "npm:5.7.0" + "@ethersproject/networks": "npm:5.7.1" + "@ethersproject/pbkdf2": "npm:5.7.0" + "@ethersproject/properties": "npm:5.7.0" + "@ethersproject/providers": "npm:5.7.2" + "@ethersproject/random": "npm:5.7.0" + "@ethersproject/rlp": "npm:5.7.0" + "@ethersproject/sha2": "npm:5.7.0" + "@ethersproject/signing-key": "npm:5.7.0" + "@ethersproject/solidity": "npm:5.7.0" + "@ethersproject/strings": "npm:5.7.0" + "@ethersproject/transactions": "npm:5.7.0" + "@ethersproject/units": "npm:5.7.0" + "@ethersproject/wallet": "npm:5.7.0" + "@ethersproject/web": "npm:5.7.1" + "@ethersproject/wordlists": "npm:5.7.0" + checksum: 90629a4cdb88cde7a7694f5610a83eb00d7fbbaea687446b15631397988f591c554dd68dfa752ddf00aabefd6285e5b298be44187e960f5e4962684e10b39962 + languageName: node + linkType: hard + +"event-target-shim@npm:^5.0.0": + version: 5.0.1 + resolution: "event-target-shim@npm:5.0.1" + checksum: 0255d9f936215fd206156fd4caa9e8d35e62075d720dc7d847e89b417e5e62cf1ce6c9b4e0a1633a9256de0efefaf9f8d26924b1f3c8620cffb9db78e7d3076b + languageName: node + linkType: hard + +"eventemitter3@npm:^4.0.0": + version: 4.0.7 + resolution: "eventemitter3@npm:4.0.7" + checksum: 5f6d97cbcbac47be798e6355e3a7639a84ee1f7d9b199a07017f1d2f1e2fe236004d14fa5dfaeba661f94ea57805385e326236a6debbc7145c8877fbc0297c6b + languageName: node + linkType: hard + +"eventemitter3@npm:^5.0.1": + version: 5.0.1 + resolution: "eventemitter3@npm:5.0.1" + checksum: 4ba5c00c506e6c786b4d6262cfbce90ddc14c10d4667e5c83ae993c9de88aa856033994dd2b35b83e8dc1170e224e66a319fa80adc4c32adcd2379bbc75da814 + languageName: node + linkType: hard + +"events@npm:^3.3.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: d6b6f2adbccbcda74ddbab52ed07db727ef52e31a61ed26db9feb7dc62af7fc8e060defa65e5f8af9449b86b52cc1a1f6a79f2eafcf4e62add2b7a1fa4a432f6 + languageName: node + linkType: hard + +"eventsource@npm:^2.0.2": + version: 2.0.2 + resolution: "eventsource@npm:2.0.2" + checksum: 0b8c70b35e45dd20f22ff64b001be9d530e33b92ca8bdbac9e004d0be00d957ab02ef33c917315f59bf2f20b178c56af85c52029bc8e6cc2d61c31d87d943573 + languageName: node + linkType: hard + +"execa@npm:5.1.1, execa@npm:^5.0.0, execa@npm:^5.1.1": + version: 5.1.1 + resolution: "execa@npm:5.1.1" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^6.0.0" + human-signals: "npm:^2.1.0" + is-stream: "npm:^2.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^4.0.1" + onetime: "npm:^5.1.2" + signal-exit: "npm:^3.0.3" + strip-final-newline: "npm:^2.0.0" + checksum: c8e615235e8de4c5addf2fa4c3da3e3aa59ce975a3e83533b4f6a71750fb816a2e79610dc5f1799b6e28976c9ae86747a36a606655bf8cb414a74d8d507b304f + languageName: node + linkType: hard + +"execa@npm:7.2.0": + version: 7.2.0 + resolution: "execa@npm:7.2.0" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^6.0.1" + human-signals: "npm:^4.3.0" + is-stream: "npm:^3.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^5.1.0" + onetime: "npm:^6.0.0" + signal-exit: "npm:^3.0.7" + strip-final-newline: "npm:^3.0.0" + checksum: 098cd6a1bc26d509e5402c43f4971736450b84d058391820c6f237aeec6436963e006fd8423c9722f148c53da86aa50045929c7278b5522197dff802d10f9885 + languageName: node + linkType: hard + +"execa@npm:^6.0.0": + version: 6.1.0 + resolution: "execa@npm:6.1.0" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^6.0.1" + human-signals: "npm:^3.0.1" + is-stream: "npm:^3.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^5.1.0" + onetime: "npm:^6.0.0" + signal-exit: "npm:^3.0.7" + strip-final-newline: "npm:^3.0.0" + checksum: 004ee32092af745766a1b0352fdba8701a4001bc3fe08e63101c04276d4c860bbe11bb8ab85f37acdff13d3da83d60e044041dcf24bd7e25e645a543828d9c41 + languageName: node + linkType: hard + +"exit@npm:^0.1.2": + version: 0.1.2 + resolution: "exit@npm:0.1.2" + checksum: 71d2ad9b36bc25bb8b104b17e830b40a08989be7f7d100b13269aaae7c3784c3e6e1e88a797e9e87523993a25ba27c8958959a554535370672cfb4d824af8989 + languageName: node + linkType: hard + +"expand-brackets@npm:^2.1.4": + version: 2.1.4 + resolution: "expand-brackets@npm:2.1.4" + dependencies: + debug: "npm:^2.3.3" + define-property: "npm:^0.2.5" + extend-shallow: "npm:^2.0.1" + posix-character-classes: "npm:^0.1.0" + regex-not: "npm:^1.0.0" + snapdragon: "npm:^0.8.1" + to-regex: "npm:^3.0.1" + checksum: 3e2fb95d2d7d7231486493fd65db913927b656b6fcdfcce41e139c0991a72204af619ad4acb1be75ed994ca49edb7995ef241dbf8cf44dc3c03d211328428a87 + languageName: node + linkType: hard + +"expand-template@npm:^2.0.3": + version: 2.0.3 + resolution: "expand-template@npm:2.0.3" + checksum: 1c9e7afe9acadf9d373301d27f6a47b34e89b3391b1ef38b7471d381812537ef2457e620ae7f819d2642ce9c43b189b3583813ec395e2938319abe356a9b2f51 + languageName: node + linkType: hard + +"expect@npm:^29.0.0, expect@npm:^29.7.0": + version: 29.7.0 + resolution: "expect@npm:29.7.0" + dependencies: + "@jest/expect-utils": "npm:^29.7.0" + jest-get-type: "npm:^29.6.3" + jest-matcher-utils: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + checksum: 2eddeace66e68b8d8ee5f7be57f3014b19770caaf6815c7a08d131821da527fb8c8cb7b3dcd7c883d2d3d8d184206a4268984618032d1e4b16dc8d6596475d41 + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 + languageName: node + linkType: hard + +"express-handlebars@npm:^6.0.3": + version: 6.0.7 + resolution: "express-handlebars@npm:6.0.7" + dependencies: + glob: "npm:^8.1.0" + graceful-fs: "npm:^4.2.10" + handlebars: "npm:^4.7.7" + checksum: 47a38f34d7185686dbaaf5d684249cca1a676f5bad8b5c46d2dd9363b0ac0a3a613f7c205b0df8677d30b3916c71c582b742e095f858c113914de20047b48f3a + languageName: node + linkType: hard + +"express-logging@npm:1.1.1": + version: 1.1.1 + resolution: "express-logging@npm:1.1.1" + dependencies: + on-headers: "npm:^1.0.0" + checksum: 434e9bf3eb103b92ef25a235eff57fa3b95948ee5c0822f7e0cad6884d160feab07556fb0a484836dbc3f1f46698ccce3fa9cd9f7095fa6c4e47547ac50ac559 + languageName: node + linkType: hard + +"express@npm:4.18.2, express@npm:^4.17.1": + version: 4.18.2 + resolution: "express@npm:4.18.2" + dependencies: + accepts: "npm:~1.3.8" + array-flatten: "npm:1.1.1" + body-parser: "npm:1.20.1" + content-disposition: "npm:0.5.4" + content-type: "npm:~1.0.4" + cookie: "npm:0.5.0" + cookie-signature: "npm:1.0.6" + debug: "npm:2.6.9" + depd: "npm:2.0.0" + encodeurl: "npm:~1.0.2" + escape-html: "npm:~1.0.3" + etag: "npm:~1.8.1" + finalhandler: "npm:1.2.0" + fresh: "npm:0.5.2" + http-errors: "npm:2.0.0" + merge-descriptors: "npm:1.0.1" + methods: "npm:~1.1.2" + on-finished: "npm:2.4.1" + parseurl: "npm:~1.3.3" + path-to-regexp: "npm:0.1.7" + proxy-addr: "npm:~2.0.7" + qs: "npm:6.11.0" + range-parser: "npm:~1.2.1" + safe-buffer: "npm:5.2.1" + send: "npm:0.18.0" + serve-static: "npm:1.15.0" + setprototypeof: "npm:1.2.0" + statuses: "npm:2.0.1" + type-is: "npm:~1.6.18" + utils-merge: "npm:1.0.1" + vary: "npm:~1.1.2" + checksum: 75af556306b9241bc1d7bdd40c9744b516c38ce50ae3210658efcbf96e3aed4ab83b3432f06215eae5610c123bc4136957dc06e50dfc50b7d4d775af56c4c59c + languageName: node + linkType: hard + +"ext-list@npm:^2.0.0": + version: 2.2.2 + resolution: "ext-list@npm:2.2.2" + dependencies: + mime-db: "npm:^1.28.0" + checksum: bfdb435f333dccbf3f9698dc9d8e38eb47b42d756800bfafa9ec0c1c8aace877c40095baf36f691bcfd09bb88ed247c6e51596e75a158280fa19cf8588a7e258 + languageName: node + linkType: hard + +"ext-name@npm:^5.0.0": + version: 5.0.0 + resolution: "ext-name@npm:5.0.0" + dependencies: + ext-list: "npm:^2.0.0" + sort-keys-length: "npm:^1.0.0" + checksum: 6750b34636bb6dca78e1bcc797615af68ecf50d62cf774624a32ee7879da99c949b5c41e8aa56ede4eb15c6abad6b1a8858d0934faab75ff6e2fd6f408debe18 + languageName: node + linkType: hard + +"ext@npm:^1.1.2": + version: 1.7.0 + resolution: "ext@npm:1.7.0" + dependencies: + type: "npm:^2.7.2" + checksum: a8e5f34e12214e9eee3a4af3b5c9d05ba048f28996450975b369fc86e5d0ef13b6df0615f892f5396a9c65d616213c25ec5b0ad17ef42eac4a500512a19da6c7 + languageName: node + linkType: hard + +"extend-shallow@npm:^2.0.1": + version: 2.0.1 + resolution: "extend-shallow@npm:2.0.1" + dependencies: + is-extendable: "npm:^0.1.0" + checksum: ee1cb0a18c9faddb42d791b2d64867bd6cfd0f3affb711782eb6e894dd193e2934a7f529426aac7c8ddb31ac5d38000a00aa2caf08aa3dfc3e1c8ff6ba340bd9 + languageName: node + linkType: hard + +"extend-shallow@npm:^3.0.0, extend-shallow@npm:^3.0.2": + version: 3.0.2 + resolution: "extend-shallow@npm:3.0.2" + dependencies: + assign-symbols: "npm:^1.0.0" + is-extendable: "npm:^1.0.1" + checksum: f39581b8f98e3ad94995e33214fff725b0297cf09f2725b6f624551cfb71e0764accfd0af80becc0182af5014d2a57b31b85ec999f9eb8a6c45af81752feac9a + languageName: node + linkType: hard + +"external-editor@npm:^3.0.3": + version: 3.1.0 + resolution: "external-editor@npm:3.1.0" + dependencies: + chardet: "npm:^0.7.0" + iconv-lite: "npm:^0.4.24" + tmp: "npm:^0.0.33" + checksum: c98f1ba3efdfa3c561db4447ff366a6adb5c1e2581462522c56a18bf90dfe4da382f9cd1feee3e330108c3595a854b218272539f311ba1b3298f841eb0fbf339 + languageName: node + linkType: hard + +"extglob@npm:^2.0.4": + version: 2.0.4 + resolution: "extglob@npm:2.0.4" + dependencies: + array-unique: "npm:^0.3.2" + define-property: "npm:^1.0.0" + expand-brackets: "npm:^2.1.4" + extend-shallow: "npm:^2.0.1" + fragment-cache: "npm:^0.2.1" + regex-not: "npm:^1.0.0" + snapdragon: "npm:^0.8.1" + to-regex: "npm:^3.0.1" + checksum: e1a891342e2010d046143016c6c03d58455c2c96c30bf5570ea07929984ee7d48fad86b363aee08f7a8a638f5c3a66906429b21ecb19bc8e90df56a001cd282c + languageName: node + linkType: hard + +"extract-zip@npm:2.0.1": + version: 2.0.1 + resolution: "extract-zip@npm:2.0.1" + dependencies: + "@types/yauzl": "npm:^2.9.1" + debug: "npm:^4.1.1" + get-stream: "npm:^5.1.0" + yauzl: "npm:^2.10.0" + dependenciesMeta: + "@types/yauzl": + optional: true + bin: + extract-zip: cli.js + checksum: 9afbd46854aa15a857ae0341a63a92743a7b89c8779102c3b4ffc207516b2019337353962309f85c66ee3d9092202a83cdc26dbf449a11981272038443974aee + languageName: node + linkType: hard + +"fast-content-type-parse@npm:^1.0.0": + version: 1.1.0 + resolution: "fast-content-type-parse@npm:1.1.0" + checksum: 882bf990fa5d64be1825ce183818db43900ece0d7ef184cb9409bae8ed1001acbe536a657b1496382cb3e308e71ab39cc399bbdae70cba1745eecaeca4e55384 + languageName: node + linkType: hard + +"fast-copy@npm:^3.0.0": + version: 3.0.1 + resolution: "fast-copy@npm:3.0.1" + checksum: a8310dbcc4c94ed001dc3e0bbc3c3f0491bb04e6c17163abe441a54997ba06cdf1eb532c2f05e54777c6f072c84548c23ef0ecd54665cd611be1d42f37eca258 + languageName: node + linkType: hard + +"fast-decode-uri-component@npm:^1.0.1": + version: 1.0.1 + resolution: "fast-decode-uri-component@npm:1.0.1" + checksum: 039d50c2e99d64f999c3f2126c23fbf75a04a4117e218a149ca0b1d2aeb8c834b7b19d643b9d35d4eabce357189a6a94085f78cf48869e6e26cc59b036284bc3 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 + languageName: node + linkType: hard + +"fast-diff@npm:^1.2.0": + version: 1.3.0 + resolution: "fast-diff@npm:1.3.0" + checksum: 5c19af237edb5d5effda008c891a18a585f74bf12953be57923f17a3a4d0979565fc64dbc73b9e20926b9d895f5b690c618cbb969af0cf022e3222471220ad29 + languageName: node + linkType: hard + +"fast-equals@npm:^3.0.1": + version: 3.0.3 + resolution: "fast-equals@npm:3.0.3" + checksum: ec59372c3f0604fe1569814dd5f86bbe46a5e8ec049f8eda49ce9ab0218e1700c9b7fdef5fe8253453788829a6b2aae6af5f9003f376aed1117f9194b2a7578c + languageName: node + linkType: hard + +"fast-equals@npm:^4.0.3": + version: 4.0.3 + resolution: "fast-equals@npm:4.0.3" + checksum: 87fd2609c945ee61e9ed4d041eb2a8f92723fc02884115f67e429dd858d880279e962334894f116b3e9b223f387d246e3db5424ae779287849015ddadbf5ff27 + languageName: node + linkType: hard + +"fast-equals@npm:^5.0.1": + version: 5.0.1 + resolution: "fast-equals@npm:5.0.1" + checksum: d7077b8b681036c2840ed9860a3048e44fc268fad2b525b8f25b43458be0c8ad976152eb4b475de9617170423c5b802121ebb61ed6641c3ac035fadaf805c8c0 + languageName: node + linkType: hard + +"fast-fifo@npm:^1.1.0, fast-fifo@npm:^1.2.0": + version: 1.3.2 + resolution: "fast-fifo@npm:1.3.2" + checksum: d53f6f786875e8b0529f784b59b4b05d4b5c31c651710496440006a398389a579c8dbcd2081311478b5bf77f4b0b21de69109c5a4eabea9d8e8783d1eb864e4c + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.12, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0, fast-glob@npm:^3.3.1": + version: 3.3.1 + resolution: "fast-glob@npm:3.3.1" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.4" + checksum: b68431128fb6ce4b804c5f9622628426d990b66c75b21c0d16e3d80e2d1398bf33f7e1724e66a2e3f299285dcf5b8d745b122d0304e7dd66f5231081f33ec67c + languageName: node + linkType: hard + +"fast-glob@npm:^3.3.2": + version: 3.3.2 + resolution: "fast-glob@npm:3.3.2" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.4" + checksum: 42baad7b9cd40b63e42039132bde27ca2cb3a4950d0a0f9abe4639ea1aa9d3e3b40f98b1fe31cbc0cc17b664c9ea7447d911a152fa34ec5b72977b125a6fc845 + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: 7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b + languageName: node + linkType: hard + +"fast-json-stringify@npm:^5.7.0": + version: 5.9.1 + resolution: "fast-json-stringify@npm:5.9.1" + dependencies: + "@fastify/deepmerge": "npm:^1.0.0" + ajv: "npm:^8.10.0" + ajv-formats: "npm:^2.1.1" + fast-deep-equal: "npm:^3.1.3" + fast-uri: "npm:^2.1.0" + json-schema-ref-resolver: "npm:^1.0.1" + rfdc: "npm:^1.2.0" + checksum: 29d85a11aa828cf25fdb926b6c2f0f27d584c3c4c59430a9b1e941a4698e4297e87168b18ed5eb93cba2a7e7ef2bb2c2aca3f8090c9b178d7abbac339a2a1b42 + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4 + languageName: node + linkType: hard + +"fast-querystring@npm:^1.0.0": + version: 1.1.2 + resolution: "fast-querystring@npm:1.1.2" + dependencies: + fast-decode-uri-component: "npm:^1.0.1" + checksum: e8223273a9b199722f760f5a047a77ad049a14bd444b821502cb8218f5925e3a5fffb56b64389bca73ab2ac6f1aa7aebbe4e203e5f6e53ff5978de97c0fde4e3 + languageName: node + linkType: hard + +"fast-redact@npm:^3.0.0, fast-redact@npm:^3.1.1": + version: 3.3.0 + resolution: "fast-redact@npm:3.3.0" + checksum: d81562510681e9ba6404ee5d3838ff5257a44d2f80937f5024c099049ff805437d0fae0124458a7e87535cc9dcf4de305bb075cab8f08d6c720bbc3447861b4e + languageName: node + linkType: hard + +"fast-safe-stringify@npm:^2.0.7, fast-safe-stringify@npm:^2.0.8, fast-safe-stringify@npm:^2.1.1": + version: 2.1.1 + resolution: "fast-safe-stringify@npm:2.1.1" + checksum: d90ec1c963394919828872f21edaa3ad6f1dddd288d2bd4e977027afff09f5db40f94e39536d4646f7e01761d704d72d51dce5af1b93717f3489ef808f5f4e4d + languageName: node + linkType: hard + +"fast-uri@npm:^2.0.0, fast-uri@npm:^2.1.0": + version: 2.3.0 + resolution: "fast-uri@npm:2.3.0" + checksum: 72844622c8b9d92dbb783723628d1069c999b31bfaa74af9e9afae0e0c22faf18c988a0ce55e775dce4c404f4cca75fa43e1f0ab07075342cff99796f4920945 + languageName: node + linkType: hard + +"fast-url-parser@npm:^1.1.3": + version: 1.1.3 + resolution: "fast-url-parser@npm:1.1.3" + dependencies: + punycode: "npm:^1.3.2" + checksum: d85c5c409cf0215417380f98a2d29c23a95004d93ff0d8bdf1af5f1a9d1fc608ac89ac6ffe863783d2c73efb3850dd35390feb1de3296f49877bfee0392eb5d3 + languageName: node + linkType: hard + +"fastest-levenshtein@npm:1.0.16": + version: 1.0.16 + resolution: "fastest-levenshtein@npm:1.0.16" + checksum: 7e3d8ae812a7f4fdf8cad18e9cde436a39addf266a5986f653ea0d81e0de0900f50c0f27c6d5aff3f686bcb48acbd45be115ae2216f36a6a13a7dbbf5cad878b + languageName: node + linkType: hard + +"fastify-plugin@npm:^4.0.0": + version: 4.5.1 + resolution: "fastify-plugin@npm:4.5.1" + checksum: f58f79cd9d3c88fd7f79a3270276c6339fc57bbe72ef14d20b73779193c404e317ac18e8eae2c5071b3909ebee45d7eb6871da4e65464ac64ed0d9746b4e9b9f + languageName: node + linkType: hard + +"fastify@npm:4.17.0": + version: 4.17.0 + resolution: "fastify@npm:4.17.0" + dependencies: + "@fastify/ajv-compiler": "npm:^3.5.0" + "@fastify/error": "npm:^3.0.0" + "@fastify/fast-json-stringify-compiler": "npm:^4.3.0" + abstract-logging: "npm:^2.0.1" + avvio: "npm:^8.2.0" + fast-content-type-parse: "npm:^1.0.0" + fast-json-stringify: "npm:^5.7.0" + find-my-way: "npm:^7.6.0" + light-my-request: "npm:^5.6.1" + pino: "npm:^8.5.0" + process-warning: "npm:^2.0.0" + proxy-addr: "npm:^2.0.7" + rfdc: "npm:^1.3.0" + secure-json-parse: "npm:^2.5.0" + semver: "npm:^7.3.7" + tiny-lru: "npm:^11.0.1" + checksum: 0ebabd390be88b4c73d3f3f3d702eb583095ce2335a98d291ba65f27f1e70c49f566c3e6e60bfa4662c68f0fd1c3f162a770d1448fdb3591937901adf2521f82 + languageName: node + linkType: hard + +"fastq@npm:^1.6.0, fastq@npm:^1.6.1": + version: 1.15.0 + resolution: "fastq@npm:1.15.0" + dependencies: + reusify: "npm:^1.0.4" + checksum: 5ce4f83afa5f88c9379e67906b4d31bc7694a30826d6cc8d0f0473c966929017fda65c2174b0ec89f064ede6ace6c67f8a4fe04cef42119b6a55b0d465554c24 + languageName: node + linkType: hard + +"fb-watchman@npm:^2.0.0": + version: 2.0.2 + resolution: "fb-watchman@npm:2.0.2" + dependencies: + bser: "npm:2.1.1" + checksum: feae89ac148adb8f6ae8ccd87632e62b13563e6fb114cacb5265c51f585b17e2e268084519fb2edd133872f1d47a18e6bfd7e5e08625c0d41b93149694187581 + languageName: node + linkType: hard + +"fd-slicer@npm:~1.1.0": + version: 1.1.0 + resolution: "fd-slicer@npm:1.1.0" + dependencies: + pend: "npm:~1.2.0" + checksum: 304dd70270298e3ffe3bcc05e6f7ade2511acc278bc52d025f8918b48b6aa3b77f10361bddfadfe2a28163f7af7adbdce96f4d22c31b2f648ba2901f0c5fc20e + languageName: node + linkType: hard + +"fdir@npm:^6.0.1": + version: 6.1.1 + resolution: "fdir@npm:6.1.1" + peerDependencies: + picomatch: 3.x + peerDependenciesMeta: + picomatch: + optional: true + checksum: 547db0a2624a3ca6d11e4d2950cba6d0e71a53af58785c43ad678c3cba3ae1e7c38c522718e977d9387570cc7504181aa2a08f3e7df9a0920ae9a59552c2b8af + languageName: node + linkType: hard + +"fecha@npm:^4.2.0": + version: 4.2.3 + resolution: "fecha@npm:4.2.3" + checksum: 0e895965959cf6a22bb7b00f0bf546f2783836310f510ddf63f463e1518d4c96dec61ab33fdfd8e79a71b4856a7c865478ce2ee8498d560fe125947703c9b1cf + languageName: node + linkType: hard + +"fetch-blob@npm:^2.1.1": + version: 2.1.2 + resolution: "fetch-blob@npm:2.1.2" + peerDependenciesMeta: + domexception: + optional: true + checksum: 9c7b0af2e6f11ac20997bb7dbd555fc89add2cf04379012af9ed119e96c0f608f3dbdf3ca2908583469118485065e35a10da8c740b4afff633180a13957a25da + languageName: node + linkType: hard + +"fetch-blob@npm:^3.1.2, fetch-blob@npm:^3.1.4": + version: 3.2.0 + resolution: "fetch-blob@npm:3.2.0" + dependencies: + node-domexception: "npm:^1.0.0" + web-streams-polyfill: "npm:^3.0.3" + checksum: 60054bf47bfa10fb0ba6cb7742acec2f37c1f56344f79a70bb8b1c48d77675927c720ff3191fa546410a0442c998d27ab05e9144c32d530d8a52fbe68f843b69 + languageName: node + linkType: hard + +"fetch-node-website@npm:^7.3.0": + version: 7.3.0 + resolution: "fetch-node-website@npm:7.3.0" + dependencies: + cli-progress: "npm:^3.11.2" + colors-option: "npm:^4.4.0" + figures: "npm:^5.0.0" + got: "npm:^12.3.1" + is-plain-obj: "npm:^4.1.0" + checksum: 15509857b517363c533c8b2e0e4ab8d29adcaf18e7f0752ee9e76148d9ec96ae3f9f3bbeaa7eee312a35f39c93529c561708969a47322aba59310e4158e64911 + languageName: node + linkType: hard + +"figures@npm:^2.0.0": + version: 2.0.0 + resolution: "figures@npm:2.0.0" + dependencies: + escape-string-regexp: "npm:^1.0.5" + checksum: 5dc5a75fec3e7e04ae65d6ce51d28b3e70d4656c51b06996b6fdb2cb5b542df512e3b3c04482f5193a964edddafa5521479ff948fa84e12ff556e53e094ab4ce + languageName: node + linkType: hard + +"figures@npm:^3.2.0": + version: 3.2.0 + resolution: "figures@npm:3.2.0" + dependencies: + escape-string-regexp: "npm:^1.0.5" + checksum: 9c421646ede432829a50bc4e55c7a4eb4bcb7cc07b5bab2f471ef1ab9a344595bbebb6c5c21470093fbb730cd81bbca119624c40473a125293f656f49cb47629 + languageName: node + linkType: hard + +"figures@npm:^4.0.0": + version: 4.0.1 + resolution: "figures@npm:4.0.1" + dependencies: + escape-string-regexp: "npm:^5.0.0" + is-unicode-supported: "npm:^1.2.0" + checksum: 734364a5b2ac24a4e639ece4dafcf89e21530bdc9b64af480b590e998a28064ff0a9cd3b3576ea71e0a19455872a85a7d50cd6938f11b4080da7d624f3ab3017 + languageName: node + linkType: hard + +"figures@npm:^5.0.0": + version: 5.0.0 + resolution: "figures@npm:5.0.0" + dependencies: + escape-string-regexp: "npm:^5.0.0" + is-unicode-supported: "npm:^1.2.0" + checksum: ce0f17d4ea8b0fc429c5207c343534a2f5284ecfb22aa08607da7dc84ed9e1cf754f5b97760e8dcb98d3c9d1a1e4d3d578fe3b5b99c426f05d0f06c7ba618e16 + languageName: node + linkType: hard + +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" + dependencies: + flat-cache: "npm:^3.0.4" + checksum: 58473e8a82794d01b38e5e435f6feaf648e3f36fdb3a56e98f417f4efae71ad1c0d4ebd8a9a7c50c3ad085820a93fc7494ad721e0e4ebc1da3573f4e1c3c7cdd + languageName: node + linkType: hard + +"file-entry-cache@npm:^7.0.0": + version: 7.0.0 + resolution: "file-entry-cache@npm:7.0.0" + dependencies: + flat-cache: "npm:^3.1.0" + checksum: 62cd3e7f0a0000563bd1c4aeb7843d188d5d088df1480c1d5347459b7915987ce7b23e5bd981829a0a1dcca8e6e2e4b9a4e0b01fc69bf05f948b71fa7a81b7ef + languageName: node + linkType: hard + +"file-type@npm:^18.5.0": + version: 18.7.0 + resolution: "file-type@npm:18.7.0" + dependencies: + readable-web-to-node-stream: "npm:^3.0.2" + strtok3: "npm:^7.0.0" + token-types: "npm:^5.0.1" + checksum: bd06a5a5b2ba13892e8690f01eaacdad1136e0cd8fcc92a2c558a76c0192e8b95e7dddebd3c996f1124ca009ec2f7562537682f361df519e4a369b55b40926a7 + languageName: node + linkType: hard + +"file-uri-to-path@npm:1.0.0": + version: 1.0.0 + resolution: "file-uri-to-path@npm:1.0.0" + checksum: 3b545e3a341d322d368e880e1c204ef55f1d45cdea65f7efc6c6ce9e0c4d22d802d5629320eb779d006fe59624ac17b0e848d83cc5af7cd101f206cb704f5519 + languageName: node + linkType: hard + +"filename-reserved-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "filename-reserved-regex@npm:3.0.0" + checksum: 2b1df851a37f84723f9d8daf885ddfadd3dea2a124474db405295962abc1a01d6c9b6b27edec33bad32ef601e1a220f8a34d34f30ca5a911709700e2b517e268 + languageName: node + linkType: hard + +"filenamify@npm:^5.1.1": + version: 5.1.1 + resolution: "filenamify@npm:5.1.1" + dependencies: + filename-reserved-regex: "npm:^3.0.0" + strip-outer: "npm:^2.0.0" + trim-repeated: "npm:^2.0.0" + checksum: e644fdcb03059e5f98082214c74ce00e11175e766f4807a08d2c37f65b72b6698e5e07e6e4a18369f5c0adab57fb1a987baea034d6660ca4c6dab3e3ba5de66d + languageName: node + linkType: hard + +"fill-range@npm:^4.0.0": + version: 4.0.0 + resolution: "fill-range@npm:4.0.0" + dependencies: + extend-shallow: "npm:^2.0.1" + is-number: "npm:^3.0.0" + repeat-string: "npm:^1.6.1" + to-regex-range: "npm:^2.1.0" + checksum: ccd57b7c43d7e28a1f8a60adfa3c401629c08e2f121565eece95e2386ebc64dedc7128d8c3448342aabf19db0c55a34f425f148400c7a7be9a606ba48749e089 + languageName: node + linkType: hard + +"fill-range@npm:^7.0.1": + version: 7.0.1 + resolution: "fill-range@npm:7.0.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 7cdad7d426ffbaadf45aeb5d15ec675bbd77f7597ad5399e3d2766987ed20bda24d5fac64b3ee79d93276f5865608bb22344a26b9b1ae6c4d00bd94bf611623f + languageName: node + linkType: hard + +"filter-iterator@npm:0.0.1": + version: 0.0.1 + resolution: "filter-iterator@npm:0.0.1" + checksum: af03cc35bf1bd28066e5549d62937a6ec53ddad8bfa7140c3c0622c6c8065f0cd8e9b6b9ef85da437874bfbeefba23f9a428e2fb7b88f9a079c77b8fbb804ad2 + languageName: node + linkType: hard + +"filter-obj@npm:^1.1.0": + version: 1.1.0 + resolution: "filter-obj@npm:1.1.0" + checksum: 071e0886b2b50238ca5026c5bbf58c26a7c1a1f720773b8c7813d16ba93d0200de977af14ac143c5ac18f666b2cfc83073f3a5fe6a4e996c49e0863d5500fccf + languageName: node + linkType: hard + +"filter-obj@npm:^3.0.0": + version: 3.0.0 + resolution: "filter-obj@npm:3.0.0" + checksum: 4cde40dba4f33f46376157fc04857868584aaf6884e74c7a9ca09a737a7527e86abbed03a7166b55176cb9be24c1ed80bd751c2e3ee85520eac410e2ee6b783e + languageName: node + linkType: hard + +"filter-obj@npm:^5.0.0, filter-obj@npm:^5.1.0": + version: 5.1.0 + resolution: "filter-obj@npm:5.1.0" + checksum: 716e8ad2bc352e206556b3e5695b3cdff8aab80c53ea4b00c96315bbf467b987df3640575100aef8b84e812cf5ea4251db4cd672bbe33b1e78afea88400c67dd + languageName: node + linkType: hard + +"finalhandler@npm:1.2.0": + version: 1.2.0 + resolution: "finalhandler@npm:1.2.0" + dependencies: + debug: "npm:2.6.9" + encodeurl: "npm:~1.0.2" + escape-html: "npm:~1.0.3" + on-finished: "npm:2.4.1" + parseurl: "npm:~1.3.3" + statuses: "npm:2.0.1" + unpipe: "npm:~1.0.0" + checksum: 64b7e5ff2ad1fcb14931cd012651631b721ce657da24aedb5650ddde9378bf8e95daa451da43398123f5de161a81e79ff5affe4f9f2a6d2df4a813d6d3e254b7 + languageName: node + linkType: hard + +"find-my-way@npm:^7.6.0": + version: 7.7.0 + resolution: "find-my-way@npm:7.7.0" + dependencies: + fast-deep-equal: "npm:^3.1.3" + fast-querystring: "npm:^1.0.0" + safe-regex2: "npm:^2.0.0" + checksum: 6b4fef5f3a21a73c5428337a02ce2f90af055e3fade6f57f3444a76d7f58a43891aba26597014ff02f9fd9071abfdd32b92ff2435aadaf96dd2316920c456f6e + languageName: node + linkType: hard + +"find-up@npm:6.3.0, find-up@npm:^6.0.0, find-up@npm:^6.3.0": + version: 6.3.0 + resolution: "find-up@npm:6.3.0" + dependencies: + locate-path: "npm:^7.1.0" + path-exists: "npm:^5.0.0" + checksum: 07e0314362d316b2b13f7f11ea4692d5191e718ca3f7264110127520f3347996349bf9e16805abae3e196805814bc66ef4bff2b8904dc4a6476085fc9b0eba07 + languageName: node + linkType: hard + +"find-up@npm:^3.0.0": + version: 3.0.0 + resolution: "find-up@npm:3.0.0" + dependencies: + locate-path: "npm:^3.0.0" + checksum: 2c2e7d0a26db858e2f624f39038c74739e38306dee42b45f404f770db357947be9d0d587f1cac72d20c114deb38aa57316e879eb0a78b17b46da7dab0a3bd6e3 + languageName: node + linkType: hard + +"find-up@npm:^4.0.0, find-up@npm:^4.1.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: "npm:^5.0.0" + path-exists: "npm:^4.0.0" + checksum: 0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1 + languageName: node + linkType: hard + +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: "npm:^6.0.0" + path-exists: "npm:^4.0.0" + checksum: 062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a + languageName: node + linkType: hard + +"flat-cache@npm:^3.0.4, flat-cache@npm:^3.1.0": + version: 3.1.0 + resolution: "flat-cache@npm:3.1.0" + dependencies: + flatted: "npm:^3.2.7" + keyv: "npm:^4.5.3" + rimraf: "npm:^3.0.2" + checksum: fcbf70a2a7d8664ef8f94e25d8b4a05d0594aee8ba0b53b5b7f6287877e8e5080ae893fc4a71fb3d803c7659aeaf801d49f12183b954e21ecd98a1d74012167e + languageName: node + linkType: hard + +"flatstr@npm:^1.0.12": + version: 1.0.12 + resolution: "flatstr@npm:1.0.12" + checksum: f99cf801fd3606e8b4aa96b93ec09caab42bc304526ff55a80db03db0ef73c9a014e983a6d72009c4f1bc50e2483d137041fae18a325dc0d851d045c4d6929a9 + languageName: node + linkType: hard + +"flatted@npm:^3.2.7": + version: 3.2.7 + resolution: "flatted@npm:3.2.7" + checksum: 207a87c7abfc1ea6928ea16bac84f9eaa6d44d365620ece419e5c41cf44a5e9902b4c1f59c9605771b10e4565a0cb46e99d78e0464e8aabb42c97de880642257 + languageName: node + linkType: hard + +"flush-write-stream@npm:2.0.0": + version: 2.0.0 + resolution: "flush-write-stream@npm:2.0.0" + dependencies: + inherits: "npm:^2.0.3" + readable-stream: "npm:^3.1.1" + checksum: 64d07c67f3feb05fc3fbe2eaab0194dc49e825ab7db6dbacc2b22b7c2eefa592d83e9276a7f8cfc58b4d8587f85518de0717fb72eba41a50719219444ed69090 + languageName: node + linkType: hard + +"fn.name@npm:1.x.x": + version: 1.1.0 + resolution: "fn.name@npm:1.1.0" + checksum: 8ad62aa2d4f0b2a76d09dba36cfec61c540c13a0fd72e5d94164e430f987a7ce6a743112bbeb14877c810ef500d1f73d7f56e76d029d2e3413f20d79e3460a9a + languageName: node + linkType: hard + +"folder-walker@npm:3.2.0": + version: 3.2.0 + resolution: "folder-walker@npm:3.2.0" + dependencies: + from2: "npm:^2.1.0" + checksum: 17883d523e58c86ab986b29e471426e970312f3e349281aa2996ea54c6a8a00eb29569c62bfb5a8b8bc7f845583455e8307d9272bf3dabde6cf640b03e7292ab + languageName: node + linkType: hard + +"follow-redirects@npm:^1.0.0": + version: 1.15.3 + resolution: "follow-redirects@npm:1.15.3" + peerDependenciesMeta: + debug: + optional: true + checksum: 915a2cf22e667bdf47b1a43cc6b7dce14d95039e9bbf9a24d0e739abfbdfa00077dd43c86d4a7a19efefcc7a99af144920a175eedc3888d268af5df67c272ee5 + languageName: node + linkType: hard + +"follow-redirects@npm:^1.15.0": + version: 1.15.2 + resolution: "follow-redirects@npm:1.15.2" + peerDependenciesMeta: + debug: + optional: true + checksum: da5932b70e63944d38eecaa16954bac4347036f08303c913d166eda74809d8797d38386e3a0eb1d2fe37d2aaff2764cce8e9dbd99459d860cf2cdfa237923b5f + languageName: node + linkType: hard + +"for-in@npm:^1.0.2": + version: 1.0.2 + resolution: "for-in@npm:1.0.2" + checksum: 42bb609d564b1dc340e1996868b67961257fd03a48d7fdafd4f5119530b87f962be6b4d5b7e3a3fc84c9854d149494b1d358e0b0ce9837e64c4c6603a49451d6 + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" + dependencies: + cross-spawn: "npm:^7.0.0" + signal-exit: "npm:^4.0.1" + checksum: 9700a0285628abaeb37007c9a4d92bd49f67210f09067638774338e146c8e9c825c5c877f072b2f75f41dc6a2d0be8664f79ffc03f6576649f54a84fb9b47de0 + languageName: node + linkType: hard + +"form-data-encoder@npm:1.7.2": + version: 1.7.2 + resolution: "form-data-encoder@npm:1.7.2" + checksum: 56553768037b6d55d9de524f97fe70555f0e415e781cb56fc457a68263de3d40fadea2304d4beef2d40b1a851269bd7854e42c362107071892cb5238debe9464 + languageName: node + linkType: hard + +"form-data-encoder@npm:^2.1.2": + version: 2.1.4 + resolution: "form-data-encoder@npm:2.1.4" + checksum: 4c06ae2b79ad693a59938dc49ebd020ecb58e4584860a90a230f80a68b026483b022ba5e4143cff06ae5ac8fd446a0b500fabc87bbac3d1f62f2757f8dabcaf7 + languageName: node + linkType: hard + +"form-data@npm:^4.0.0": + version: 4.0.0 + resolution: "form-data@npm:4.0.0" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + mime-types: "npm:^2.1.12" + checksum: cb6f3ac49180be03ff07ba3ff125f9eba2ff0b277fb33c7fc47569fc5e616882c5b1c69b9904c4c4187e97dd0419dd03b134174756f296dec62041e6527e2c6e + languageName: node + linkType: hard + +"formdata-node@npm:^4.3.2": + version: 4.4.1 + resolution: "formdata-node@npm:4.4.1" + dependencies: + node-domexception: "npm:1.0.0" + web-streams-polyfill: "npm:4.0.0-beta.3" + checksum: 74151e7b228ffb33b565cec69182694ad07cc3fdd9126a8240468bb70a8ba66e97e097072b60bcb08729b24c7ce3fd3e0bd7f1f80df6f9f662b9656786e76f6a + languageName: node + linkType: hard + +"formdata-polyfill@npm:^4.0.10": + version: 4.0.10 + resolution: "formdata-polyfill@npm:4.0.10" + dependencies: + fetch-blob: "npm:^3.1.2" + checksum: 5392ec484f9ce0d5e0d52fb5a78e7486637d516179b0eb84d81389d7eccf9ca2f663079da56f761355c0a65792810e3b345dc24db9a8bbbcf24ef3c8c88570c6 + languageName: node + linkType: hard + +"forwarded@npm:0.2.0": + version: 0.2.0 + resolution: "forwarded@npm:0.2.0" + checksum: 9b67c3fac86acdbc9ae47ba1ddd5f2f81526fa4c8226863ede5600a3f7c7416ef451f6f1e240a3cc32d0fd79fcfe6beb08fd0da454f360032bde70bf80afbb33 + languageName: node + linkType: hard + +"fragment-cache@npm:^0.2.1": + version: 0.2.1 + resolution: "fragment-cache@npm:0.2.1" + dependencies: + map-cache: "npm:^0.2.2" + checksum: 5891d1c1d1d5e1a7fb3ccf28515c06731476fa88f7a50f4ede8a0d8d239a338448e7f7cc8b73db48da19c229fa30066104fe6489862065a4f1ed591c42fbeabf + languageName: node + linkType: hard + +"fresh@npm:0.5.2": + version: 0.5.2 + resolution: "fresh@npm:0.5.2" + checksum: c6d27f3ed86cc5b601404822f31c900dd165ba63fff8152a3ef714e2012e7535027063bc67ded4cb5b3a49fa596495d46cacd9f47d6328459cf570f08b7d9e5a + languageName: node + linkType: hard + +"from2-array@npm:0.0.4": + version: 0.0.4 + resolution: "from2-array@npm:0.0.4" + dependencies: + from2: "npm:^2.0.3" + checksum: 33cde86cc2f2642fcd9c9c8e00ed8a8dcd463578c33ca5b435f82e90fcc214e282ef19c1efd1dbcb14d0b35a92b0775a9dbd2d8f0893a21478da926bb7ab3ad8 + languageName: node + linkType: hard + +"from2@npm:^2.0.3, from2@npm:^2.1.0": + version: 2.3.0 + resolution: "from2@npm:2.3.0" + dependencies: + inherits: "npm:^2.0.1" + readable-stream: "npm:^2.0.0" + checksum: f87f7a2e4513244d551454a7f8324ef1f7837864a8701c536417286ec19ff4915606b1dfa8909a21b7591ebd8440ffde3642f7c303690b9a4d7c832d62248aa1 + languageName: node + linkType: hard + +"fs-constants@npm:^1.0.0": + version: 1.0.0 + resolution: "fs-constants@npm:1.0.0" + checksum: a0cde99085f0872f4d244e83e03a46aa387b74f5a5af750896c6b05e9077fac00e9932fdf5aef84f2f16634cd473c63037d7a512576da7d5c2b9163d1909f3a8 + languageName: node + linkType: hard + +"fs-extra@npm:10.1.0": + version: 10.1.0 + resolution: "fs-extra@npm:10.1.0" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 5f579466e7109719d162a9249abbeffe7f426eb133ea486e020b89bc6d67a741134076bf439983f2eb79276ceaf6bd7b7c1e43c3fd67fe889863e69072fb0a5e + languageName: node + linkType: hard + +"fs-extra@npm:^11.0.0": + version: 11.1.1 + resolution: "fs-extra@npm:11.1.1" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: a2480243d7dcfa7d723c5f5b24cf4eba02a6ccece208f1524a2fbde1c629492cfb9a59e4b6d04faff6fbdf71db9fdc8ef7f396417a02884195a625f5d8dc9427 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: "npm:^3.0.0" + checksum: 703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 + languageName: node + linkType: hard + +"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 + languageName: node + linkType: hard + +"fuzzy@npm:0.1.3": + version: 0.1.3 + resolution: "fuzzy@npm:0.1.3" + checksum: 584fcd57a03431707a6d0c1c4a41f17368cdb23d37dcb176d6cbbeeaecaac51be15dec229b3547acfb7db052cb066fcd86db907d40112ac4a3d3a368f88e7105 + languageName: node + linkType: hard + +"gauge@npm:^3.0.0": + version: 3.0.2 + resolution: "gauge@npm:3.0.2" + dependencies: + aproba: "npm:^1.0.3 || ^2.0.0" + color-support: "npm:^1.1.2" + console-control-strings: "npm:^1.0.0" + has-unicode: "npm:^2.0.1" + object-assign: "npm:^4.1.1" + signal-exit: "npm:^3.0.0" + string-width: "npm:^4.2.3" + strip-ansi: "npm:^6.0.1" + wide-align: "npm:^1.1.2" + checksum: 75230ccaf216471e31025c7d5fcea1629596ca20792de50c596eb18ffb14d8404f927cd55535aab2eeecd18d1e11bd6f23ec3c2e9878d2dda1dc74bccc34b913 + languageName: node + linkType: hard + +"gensequence@npm:^6.0.0": + version: 6.0.0 + resolution: "gensequence@npm:6.0.0" + checksum: 85c6928299a99d4df15ea689b5b02b322a120ad9a9d3802c090b06a3e541169f1579f15c6f77165f02d2c3e59a18bb87abad92da8c2c9ddeb053619d3b4669c2 + languageName: node + linkType: hard + +"gensync@npm:^1.0.0-beta.2": + version: 1.0.0-beta.2 + resolution: "gensync@npm:1.0.0-beta.2" + checksum: 782aba6cba65b1bb5af3b095d96249d20edbe8df32dbf4696fd49be2583faf676173bf4809386588828e4dd76a3354fcbeb577bab1c833ccd9fc4577f26103f8 + languageName: node + linkType: hard + +"get-amd-module-type@npm:^5.0.1": + version: 5.0.1 + resolution: "get-amd-module-type@npm:5.0.1" + dependencies: + ast-module-types: "npm:^5.0.0" + node-source-walk: "npm:^6.0.1" + checksum: 28828eeaee6e75ca2746d9d23ebbb2be5500f57ad7dca696dae15ab6085fe053a756c9b58871103fe6e2888c25d0a31d80f57087dd34a175ab7c579923db762c + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2": + version: 1.2.2 + resolution: "get-intrinsic@npm:1.2.2" + dependencies: + function-bind: "npm:^1.1.2" + has-proto: "npm:^1.0.1" + has-symbols: "npm:^1.0.3" + hasown: "npm:^2.0.0" + checksum: 4e7fb8adc6172bae7c4fe579569b4d5238b3667c07931cd46b4eee74bbe6ff6b91329bec311a638d8e60f5b51f44fe5445693c6be89ae88d4b5c49f7ff12db0b + languageName: node + linkType: hard + +"get-package-name@npm:^2.2.0": + version: 2.2.0 + resolution: "get-package-name@npm:2.2.0" + checksum: aac97e9ed02c49298ad05c0f5e227a2dbefbdf8f0f552addc9d642ab81b2d0ca4fb3943b589d7420228ca99537e8e2e09789296543d34d38a9359ca89d1836f1 + languageName: node + linkType: hard + +"get-package-type@npm:^0.1.0": + version: 0.1.0 + resolution: "get-package-type@npm:0.1.0" + checksum: e34cdf447fdf1902a1f6d5af737eaadf606d2ee3518287abde8910e04159368c268568174b2e71102b87b26c2020486f126bfca9c4fb1ceb986ff99b52ecd1be + languageName: node + linkType: hard + +"get-port-please@npm:^3.1.1": + version: 3.1.1 + resolution: "get-port-please@npm:3.1.1" + checksum: d9229fd671cf43ab846bf187aad917e10688f154db467e0dbc423d0ab9f47363f9612bfb9094a89de196873a3966d33c907475a76bbfd7b68d81caf610035958 + languageName: node + linkType: hard + +"get-port@npm:5.1.1": + version: 5.1.1 + resolution: "get-port@npm:5.1.1" + checksum: 2873877a469b24e6d5e0be490724a17edb39fafc795d1d662e7bea951ca649713b4a50117a473f9d162312cb0e946597bd0e049ed2f866e79e576e8e213d3d1c + languageName: node + linkType: hard + +"get-port@npm:^6.1.2": + version: 6.1.2 + resolution: "get-port@npm:6.1.2" + checksum: cac5f0c600691aed72fdcfacd394b8046080b5208898c3a6b9d10f999466297f162d7907bc6ecbc62d109a904dab7af7cdc0d7933ce2bcecfc5c1fedf7fcfab1 + languageName: node + linkType: hard + +"get-stdin@npm:^9.0.0": + version: 9.0.0 + resolution: "get-stdin@npm:9.0.0" + checksum: 7ef2edc0c81a0644ca9f051aad8a96ae9373d901485abafaabe59fd347a1c378689d8a3d8825fb3067415d1d09dfcaa43cb9b9516ecac6b74b3138b65a8ccc6b + languageName: node + linkType: hard + +"get-stream@npm:^5.1.0": + version: 5.2.0 + resolution: "get-stream@npm:5.2.0" + dependencies: + pump: "npm:^3.0.0" + checksum: 43797ffd815fbb26685bf188c8cfebecb8af87b3925091dd7b9a9c915993293d78e3c9e1bce125928ff92f2d0796f3889b92b5ec6d58d1041b574682132e0a80 + languageName: node + linkType: hard + +"get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": + version: 6.0.1 + resolution: "get-stream@npm:6.0.1" + checksum: 49825d57d3fd6964228e6200a58169464b8e8970489b3acdc24906c782fb7f01f9f56f8e6653c4a50713771d6658f7cfe051e5eb8c12e334138c9c918b296341 + languageName: node + linkType: hard + +"get-tsconfig@npm:^4.7.0": + version: 4.7.0 + resolution: "get-tsconfig@npm:4.7.0" + dependencies: + resolve-pkg-maps: "npm:^1.0.0" + checksum: 5844d18a705535808cf535010d9443b47b462c6e91ed00d94500602f220ecb8e518325d5b1f9e0c515c67025819c3df193194144a456e1d8f1cd70b5d48b52aa + languageName: node + linkType: hard + +"get-value@npm:^2.0.3, get-value@npm:^2.0.6": + version: 2.0.6 + resolution: "get-value@npm:2.0.6" + checksum: f069c132791b357c8fc4adfe9e2929b0a2c6e95f98ca7bc6fcbc27f8a302e552f86b4ae61ec56d9e9ac2544b93b6a39743d479866a37b43fcc104088ba74f0d9 + languageName: node + linkType: hard + +"gh-release-fetch@npm:4.0.3": + version: 4.0.3 + resolution: "gh-release-fetch@npm:4.0.3" + dependencies: + "@xhmikosr/downloader": "npm:^13.0.0" + node-fetch: "npm:^3.3.1" + semver: "npm:^7.5.3" + checksum: 86787214bb06e375bf6754ce86f159281ab3770d5e1414c629de7d23a1e963462bc434dba2397a27c0919a9e52d73d448a29113bfb52c3868d57d38df39f6db6 + languageName: node + linkType: hard + +"git-raw-commits@npm:^2.0.11": + version: 2.0.11 + resolution: "git-raw-commits@npm:2.0.11" + dependencies: + dargs: "npm:^7.0.0" + lodash: "npm:^4.17.15" + meow: "npm:^8.0.0" + split2: "npm:^3.0.0" + through2: "npm:^4.0.0" + bin: + git-raw-commits: cli.js + checksum: c9cee7ce11a6703098f028d7e47986d5d3e4147d66640086734d6ee2472296b8711f91b40ad458e95acac1bc33cf2898059f1dc890f91220ff89c5fcc609ab64 + languageName: node + linkType: hard + +"git-repo-info@npm:2.1.1": + version: 2.1.1 + resolution: "git-repo-info@npm:2.1.1" + checksum: 894d03a1c8338ccddf7de3cd9ddbae5c16371164b84649ed5dfec9a1c7efbc761885f0f541a21bd033c07b91203ab315a63c77f36b142f18ad0f17a9699eb028 + languageName: node + linkType: hard + +"gitconfiglocal@npm:2.1.0": + version: 2.1.0 + resolution: "gitconfiglocal@npm:2.1.0" + dependencies: + ini: "npm:^1.3.2" + checksum: 0882267ff1f7d13c2ab42f55bf1e329505054811862f1ae36b650b91f1fe4ea2fb85ef2bb9695b81454330fa30b8bbc179c69886d2e88e5ab2cc998eee3b02af + languageName: node + linkType: hard + +"github-from-package@npm:0.0.0": + version: 0.0.0 + resolution: "github-from-package@npm:0.0.0" + checksum: 737ee3f52d0a27e26332cde85b533c21fcdc0b09fb716c3f8e522cfaa9c600d4a631dec9fcde179ec9d47cca89017b7848ed4d6ae6b6b78f936c06825b1fcc12 + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee + languageName: node + linkType: hard + +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: "npm:^4.0.3" + checksum: 317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 + languageName: node + linkType: hard + +"glob@npm:^10.2.2, glob@npm:^10.3.10": + version: 10.3.10 + resolution: "glob@npm:10.3.10" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^2.3.5" + minimatch: "npm:^9.0.1" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry: "npm:^1.10.1" + bin: + glob: dist/esm/bin.mjs + checksum: 13d8a1feb7eac7945f8c8480e11cd4a44b24d26503d99a8d8ac8d5aefbf3e9802a2b6087318a829fad04cb4e829f25c5f4f1110c68966c498720dd261c7e344d + languageName: node + linkType: hard + +"glob@npm:^7.1.3, glob@npm:^7.1.4": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: "npm:^1.0.0" + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^3.1.1" + once: "npm:^1.3.0" + path-is-absolute: "npm:^1.0.0" + checksum: 65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe + languageName: node + linkType: hard + +"glob@npm:^8.0.0, glob@npm:^8.0.1, glob@npm:^8.0.3, glob@npm:^8.1.0": + version: 8.1.0 + resolution: "glob@npm:8.1.0" + dependencies: + fs.realpath: "npm:^1.0.0" + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^5.0.1" + once: "npm:^1.3.0" + checksum: cb0b5cab17a59c57299376abe5646c7070f8acb89df5595b492dba3bfb43d301a46c01e5695f01154e6553168207cb60d4eaf07d3be4bc3eb9b0457c5c561d0f + languageName: node + linkType: hard + +"global-cache-dir@npm:^4.3.1": + version: 4.4.0 + resolution: "global-cache-dir@npm:4.4.0" + dependencies: + cachedir: "npm:^2.3.0" + path-exists: "npm:^5.0.0" + checksum: 1166cc045b5656d4464e40849e6c2f912a118c43bc1e66afa285fdc6bb40726649625a215491835ec31aec9f180c0eecefd5c13a61d43ba3f0f583d347a692b8 + languageName: node + linkType: hard + +"global-dirs@npm:^0.1.1": + version: 0.1.1 + resolution: "global-dirs@npm:0.1.1" + dependencies: + ini: "npm:^1.3.4" + checksum: 3608072e58962396c124ad5a1cfb3f99ee76c998654a3432d82977b3c3eeb09dc8a5a2a9849b2b8113906c8d0aad89ce362c22e97cec5fe34405bbf4f3cdbe7a + languageName: node + linkType: hard + +"global-dirs@npm:^3.0.0, global-dirs@npm:^3.0.1": + version: 3.0.1 + resolution: "global-dirs@npm:3.0.1" + dependencies: + ini: "npm:2.0.0" + checksum: ef65e2241a47ff978f7006a641302bc7f4c03dfb98783d42bf7224c136e3a06df046e70ee3a010cf30214114755e46c9eb5eb1513838812fbbe0d92b14c25080 + languageName: node + linkType: hard + +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 758f9f258e7b19226bd8d4af5d3b0dcf7038780fb23d82e6f98932c44e239f884847f1766e8fa9cc5635ccb3204f7fa7314d4408dd4002a5e8ea827b4018f0a1 + languageName: node + linkType: hard + +"globals@npm:^13.19.0": + version: 13.21.0 + resolution: "globals@npm:13.21.0" + dependencies: + type-fest: "npm:^0.20.2" + checksum: 90573e825401adbe0ef25db1b52e8f74afe4a1087049edd972f1ace77b391753fc3fe51eba9b6962c62e2282645f0a27ce20251662cdc247631c4861f32d56eb + languageName: node + linkType: hard + +"globby@npm:^11.1.0": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: "npm:^2.1.0" + dir-glob: "npm:^3.0.1" + fast-glob: "npm:^3.2.9" + ignore: "npm:^5.2.0" + merge2: "npm:^1.4.1" + slash: "npm:^3.0.0" + checksum: b39511b4afe4bd8a7aead3a27c4ade2b9968649abab0a6c28b1a90141b96ca68ca5db1302f7c7bd29eab66bf51e13916b8e0a3d0ac08f75e1e84a39b35691189 + languageName: node + linkType: hard + +"globby@npm:^13.0.0, globby@npm:^13.1.1, globby@npm:^13.1.3": + version: 13.2.2 + resolution: "globby@npm:13.2.2" + dependencies: + dir-glob: "npm:^3.0.1" + fast-glob: "npm:^3.3.0" + ignore: "npm:^5.2.4" + merge2: "npm:^1.4.1" + slash: "npm:^4.0.0" + checksum: a8d7cc7cbe5e1b2d0f81d467bbc5bc2eac35f74eaded3a6c85fc26d7acc8e6de22d396159db8a2fc340b8a342e74cac58de8f4aee74146d3d146921a76062664 + languageName: node + linkType: hard + +"gonzales-pe@npm:^4.3.0": + version: 4.3.0 + resolution: "gonzales-pe@npm:4.3.0" + dependencies: + minimist: "npm:^1.2.5" + bin: + gonzales: bin/gonzales.js + checksum: b99a6ef4bf28ca0b0adcc0b42fd0179676ee8bfe1d3e3c0025d7d38ba35a3f2d5b1d4beb16101a7fc7cb2dbda1ec045bbce0932697095df41d729bac1703476f + languageName: node + linkType: hard + +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" + dependencies: + get-intrinsic: "npm:^1.1.3" + checksum: 505c05487f7944c552cee72087bf1567debb470d4355b1335f2c262d218ebbff805cd3715448fe29b4b380bae6912561d0467233e4165830efd28da241418c63 + languageName: node + linkType: hard + +"got@npm:^12.0.0, got@npm:^12.1.0, got@npm:^12.3.1, got@npm:^12.6.1": + version: 12.6.1 + resolution: "got@npm:12.6.1" + dependencies: + "@sindresorhus/is": "npm:^5.2.0" + "@szmarczak/http-timer": "npm:^5.0.1" + cacheable-lookup: "npm:^7.0.0" + cacheable-request: "npm:^10.2.8" + decompress-response: "npm:^6.0.0" + form-data-encoder: "npm:^2.1.2" + get-stream: "npm:^6.0.1" + http2-wrapper: "npm:^2.1.10" + lowercase-keys: "npm:^3.0.0" + p-cancelable: "npm:^3.0.0" + responselike: "npm:^3.0.0" + checksum: 2fe97fcbd7a9ffc7c2d0ecf59aca0a0562e73a7749cadada9770eeb18efbdca3086262625fb65590594edc220a1eca58fab0d26b0c93c2f9a008234da71ca66b + languageName: node + linkType: hard + +"graceful-fs@npm:4.2.10": + version: 4.2.10 + resolution: "graceful-fs@npm:4.2.10" + checksum: 4223a833e38e1d0d2aea630c2433cfb94ddc07dfc11d511dbd6be1d16688c5be848acc31f9a5d0d0ddbfb56d2ee5a6ae0278aceeb0ca6a13f27e06b9956fb952 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.3, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.10, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: e951259d8cd2e0d196c72ec711add7115d42eb9a8146c8eeda5b8d3ac91e5dd816b9cd68920726d9fd4490368e7ed86e9c423f40db87e2d8dfafa00fa17c3a31 + languageName: node + linkType: hard + +"h3@npm:^1.8.1, h3@npm:^1.8.2": + version: 1.9.0 + resolution: "h3@npm:1.9.0" + dependencies: + cookie-es: "npm:^1.0.0" + defu: "npm:^6.1.3" + destr: "npm:^2.0.2" + iron-webcrypto: "npm:^1.0.0" + radix3: "npm:^1.1.0" + ufo: "npm:^1.3.2" + uncrypto: "npm:^0.1.3" + unenv: "npm:^1.7.4" + checksum: 90e80c34c9d0b7bdb24b13865ac27a88ca7724f0d1ce005295ae16408d4527020328a077d6c5df02de9f7ce7a15ab8a110978e1394a31717b07a34f09be91c06 + languageName: node + linkType: hard + +"handlebars@npm:^4.7.7": + version: 4.7.8 + resolution: "handlebars@npm:4.7.8" + dependencies: + minimist: "npm:^1.2.5" + neo-async: "npm:^2.6.2" + source-map: "npm:^0.6.1" + uglify-js: "npm:^3.1.4" + wordwrap: "npm:^1.0.0" + dependenciesMeta: + uglify-js: + optional: true + bin: + handlebars: bin/handlebars + checksum: 7aff423ea38a14bb379316f3857fe0df3c5d66119270944247f155ba1f08e07a92b340c58edaa00cfe985c21508870ee5183e0634dcb53dd405f35c93ef7f10d + languageName: node + linkType: hard + +"hard-rejection@npm:^2.1.0": + version: 2.1.0 + resolution: "hard-rejection@npm:2.1.0" + checksum: febc3343a1ad575aedcc112580835b44a89a89e01f400b4eda6e8110869edfdab0b00cd1bd4c3bfec9475a57e79e0b355aecd5be46454b6a62b9a359af60e564 + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 + languageName: node + linkType: hard + +"has-own-prop@npm:^2.0.0": + version: 2.0.0 + resolution: "has-own-prop@npm:2.0.0" + checksum: 2745497283d80228b5c5fbb8c63ab1029e604bce7db8d4b36255e427b3695b2153dc978b176674d0dd2a23f132809e04d7ef41fefc0ab85870a5caa918c5c0d9 + languageName: node + linkType: hard + +"has-own-property@npm:^0.1.0": + version: 0.1.0 + resolution: "has-own-property@npm:0.1.0" + checksum: 413ad4aea605c08baa6e1012dbae1bad0d8f52ea14412921270649e17852f143a0a79f77ae8890e1ca68406409e860ca41b5b3a35a8e5b0ca7d6d6c89fbb3e0b + languageName: node + linkType: hard + +"has-property-descriptors@npm:^1.0.0": + version: 1.0.1 + resolution: "has-property-descriptors@npm:1.0.1" + dependencies: + get-intrinsic: "npm:^1.2.2" + checksum: d62ba94b40150b00d621bc64a6aedb5bf0ee495308b4b7ed6bac856043db3cdfb1db553ae81cec91c9d2bd82057ff0e94145e7fa25d5aa5985ed32e0921927f6 + languageName: node + linkType: hard + +"has-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "has-proto@npm:1.0.1" + checksum: c8a8fe411f810b23a564bd5546a8f3f0fff6f1b692740eb7a2fdc9df716ef870040806891e2f23ff4653f1083e3895bf12088703dd1a0eac3d9202d3a4768cd0 + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.3": + version: 1.0.3 + resolution: "has-symbols@npm:1.0.3" + checksum: e6922b4345a3f37069cdfe8600febbca791c94988c01af3394d86ca3360b4b93928bbf395859158f88099cb10b19d98e3bbab7c9ff2c1bd09cf665ee90afa2c3 + languageName: node + linkType: hard + +"has-unicode@npm:^2.0.1": + version: 2.0.1 + resolution: "has-unicode@npm:2.0.1" + checksum: ebdb2f4895c26bb08a8a100b62d362e49b2190bcfd84b76bc4be1a3bd4d254ec52d0dd9f2fbcc093fc5eb878b20c52146f9dfd33e2686ed28982187be593b47c + languageName: node + linkType: hard + +"has-value@npm:^0.3.1": + version: 0.3.1 + resolution: "has-value@npm:0.3.1" + dependencies: + get-value: "npm:^2.0.3" + has-values: "npm:^0.1.4" + isobject: "npm:^2.0.0" + checksum: 7a7c2e9d07bc9742c81806150adb154d149bc6155267248c459cd1ce2a64b0759980d26213260e4b7599c8a3754551179f155ded88d0533a0d2bc7bc29028432 + languageName: node + linkType: hard + +"has-value@npm:^1.0.0": + version: 1.0.0 + resolution: "has-value@npm:1.0.0" + dependencies: + get-value: "npm:^2.0.6" + has-values: "npm:^1.0.0" + isobject: "npm:^3.0.0" + checksum: 17cdccaf50f8aac80a109dba2e2ee5e800aec9a9d382ef9deab66c56b34269e4c9ac720276d5ffa722764304a1180ae436df077da0dd05548cfae0209708ba4d + languageName: node + linkType: hard + +"has-values@npm:^0.1.4": + version: 0.1.4 + resolution: "has-values@npm:0.1.4" + checksum: a8f00ad862c20289798c35243d5bd0b0a97dd44b668c2204afe082e0265f2d0bf3b89fc8cc0ef01a52b49f10aa35cf85c336ee3a5f1cac96ed490f5e901cdbf2 + languageName: node + linkType: hard + +"has-values@npm:^1.0.0": + version: 1.0.0 + resolution: "has-values@npm:1.0.0" + dependencies: + is-number: "npm:^3.0.0" + kind-of: "npm:^4.0.0" + checksum: a6f2a1cc6b2e43eacc68e62e71ad6890def7f4b13d2ef06b4ad3ee156c23e470e6df144b9b467701908e17633411f1075fdff0cab45fb66c5e0584d89b25f35e + languageName: node + linkType: hard + +"has-yarn@npm:^3.0.0": + version: 3.0.0 + resolution: "has-yarn@npm:3.0.0" + checksum: 38c76618cb764e4a98ea114a3938e0bed6ceafb6bacab2ffb32e7c7d1e18b5e09cd03387d507ee87072388e1f20b1f80947fee62c41fc450edfbbdc02a665787 + languageName: node + linkType: hard + +"has@npm:^1.0.3": + version: 1.0.4 + resolution: "has@npm:1.0.4" + checksum: 82c1220573dc1f0a014a5d6189ae52a1f820f99dfdc00323c3a725b5002dcb7f04e44f460fea7af068474b2dd7c88cbe1846925c84017be9e31e1708936d305b + languageName: node + linkType: hard + +"hasbin@npm:1.2.3": + version: 1.2.3 + resolution: "hasbin@npm:1.2.3" + dependencies: + async: "npm:~1.5" + checksum: 437fc207d88293a4b1e12ac4149ecb2569e85bc28c8ff2ff3f36b7343b533b25971a122b7d3a5adc3fe1e281cc40847cae501311bd0895e0d90260e8786b954c + languageName: node + linkType: hard + +"hash.js@npm:1.1.7, hash.js@npm:^1.0.0, hash.js@npm:^1.0.3": + version: 1.1.7 + resolution: "hash.js@npm:1.1.7" + dependencies: + inherits: "npm:^2.0.3" + minimalistic-assert: "npm:^1.0.1" + checksum: 41ada59494eac5332cfc1ce6b7ebdd7b88a3864a6d6b08a3ea8ef261332ed60f37f10877e0c825aaa4bddebf164fbffa618286aeeec5296675e2671cbfa746c4 + languageName: node + linkType: hard + +"hasha@npm:5.2.2": + version: 5.2.2 + resolution: "hasha@npm:5.2.2" + dependencies: + is-stream: "npm:^2.0.0" + type-fest: "npm:^0.8.0" + checksum: 9d10d4e665a37beea6e18ba3a0c0399a05b26e505c5ff2fe9115b64fedb3ca95f68c89cf15b08ee4d09fd3064b5e1bfc8e8247353c7aa6b7388471d0f86dca74 + languageName: node + linkType: hard + +"hasown@npm:^2.0.0": + version: 2.0.0 + resolution: "hasown@npm:2.0.0" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 5d415b114f410661208c95e7ab4879f1cc2765b8daceff4dc8718317d1cb7b9ffa7c5d1eafd9a4389c9aab7445d6ea88e05f3096cb1e529618b55304956b87fc + languageName: node + linkType: hard + +"he@npm:1.2.0": + version: 1.2.0 + resolution: "he@npm:1.2.0" + bin: + he: bin/he + checksum: a27d478befe3c8192f006cdd0639a66798979dfa6e2125c6ac582a19a5ebfec62ad83e8382e6036170d873f46e4536a7e795bf8b95bf7c247f4cc0825ccc8c17 + languageName: node + linkType: hard + +"help-me@npm:^5.0.0": + version: 5.0.0 + resolution: "help-me@npm:5.0.0" + checksum: 054c0e2e9ae2231c85ab5e04f75109b9d068ffcc54e58fb22079822a5ace8ff3d02c66fd45379c902ad5ab825e5d2e1451fcc2f7eab1eb49e7d488133ba4cacb + languageName: node + linkType: hard + +"hexer@npm:^1.5.0": + version: 1.5.0 + resolution: "hexer@npm:1.5.0" + dependencies: + ansi-color: "npm:^0.2.1" + minimist: "npm:^1.1.0" + process: "npm:^0.10.0" + xtend: "npm:^4.0.0" + bin: + hexer: ./cli.js + checksum: 43b00fad220a98ed98dad3a3d0e7297bd3d0ce66f0d935a2927e07c0d29f5b8de92f9c0fa32c641daa4291ccb19385fa1bd0853d298983ec9b3ec88e7686ee5c + languageName: node + linkType: hard + +"hmac-drbg@npm:^1.0.1": + version: 1.0.1 + resolution: "hmac-drbg@npm:1.0.1" + dependencies: + hash.js: "npm:^1.0.3" + minimalistic-assert: "npm:^1.0.0" + minimalistic-crypto-utils: "npm:^1.0.1" + checksum: f3d9ba31b40257a573f162176ac5930109816036c59a09f901eb2ffd7e5e705c6832bedfff507957125f2086a0ab8f853c0df225642a88bf1fcaea945f20600d + languageName: node + linkType: hard + +"hosted-git-info@npm:^2.1.4": + version: 2.8.9 + resolution: "hosted-git-info@npm:2.8.9" + checksum: 317cbc6b1bbbe23c2a40ae23f3dafe9fa349ce42a89a36f930e3f9c0530c179a3882d2ef1e4141a4c3674d6faaea862138ec55b43ad6f75e387fda2483a13c70 + languageName: node + linkType: hard + +"hosted-git-info@npm:^4.0.1": + version: 4.1.0 + resolution: "hosted-git-info@npm:4.1.0" + dependencies: + lru-cache: "npm:^6.0.0" + checksum: 150fbcb001600336d17fdbae803264abed013548eea7946c2264c49ebe2ebd8c4441ba71dd23dd8e18c65de79d637f98b22d4760ba5fb2e0b15d62543d0fff07 + languageName: node + linkType: hard + +"hot-shots@npm:10.0.0": + version: 10.0.0 + resolution: "hot-shots@npm:10.0.0" + dependencies: + unix-dgram: "npm:2.x" + dependenciesMeta: + unix-dgram: + optional: true + checksum: 36df688fcd6cb03d1da135b1959f7b0a39a8bd9bfec4d84508e3e73ed502b9d9fe2839ac2c99c6f380ce87d7987e66e990a3f4fa739a4529b75cb324cf890f90 + languageName: node + linkType: hard + +"html-encoding-sniffer@npm:^3.0.0": + version: 3.0.0 + resolution: "html-encoding-sniffer@npm:3.0.0" + dependencies: + whatwg-encoding: "npm:^2.0.0" + checksum: b17b3b0fb5d061d8eb15121c3b0b536376c3e295ecaf09ba48dd69c6b6c957839db124fe1e2b3f11329753a4ee01aa7dedf63b7677999e86da17fbbdd82c5386 + languageName: node + linkType: hard + +"html-escaper@npm:^2.0.0": + version: 2.0.2 + resolution: "html-escaper@npm:2.0.2" + checksum: 208e8a12de1a6569edbb14544f4567e6ce8ecc30b9394fcaa4e7bb1e60c12a7c9a1ed27e31290817157e8626f3a4f29e76c8747030822eb84a6abb15c255f0a0 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc + languageName: node + linkType: hard + +"http-errors@npm:2.0.0": + version: 2.0.0 + resolution: "http-errors@npm:2.0.0" + dependencies: + depd: "npm:2.0.0" + inherits: "npm:2.0.4" + setprototypeof: "npm:1.2.0" + statuses: "npm:2.0.1" + toidentifier: "npm:1.0.1" + checksum: fc6f2715fe188d091274b5ffc8b3657bd85c63e969daa68ccb77afb05b071a4b62841acb7a21e417b5539014dff2ebf9550f0b14a9ff126f2734a7c1387f8e19 + languageName: node + linkType: hard + +"http-errors@npm:~1.8.1": + version: 1.8.1 + resolution: "http-errors@npm:1.8.1" + dependencies: + depd: "npm:~1.1.2" + inherits: "npm:2.0.4" + setprototypeof: "npm:1.2.0" + statuses: "npm:>= 1.5.0 < 2" + toidentifier: "npm:1.0.1" + checksum: f01aeecd76260a6fe7f08e192fcbe9b2f39ed20fc717b852669a69930167053b01790998275c6297d44f435cf0e30edd50c05223d1bec9bc484e6cf35b2d6f43 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^5.0.0": + version: 5.0.0 + resolution: "http-proxy-agent@npm:5.0.0" + dependencies: + "@tootallnate/once": "npm:2" + agent-base: "npm:6" + debug: "npm:4" + checksum: 32a05e413430b2c1e542e5c74b38a9f14865301dd69dff2e53ddb684989440e3d2ce0c4b64d25eb63cf6283e6265ff979a61cf93e3ca3d23047ddfdc8df34a32 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.0 + resolution: "http-proxy-agent@npm:7.0.0" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: a11574ff39436cee3c7bc67f259444097b09474605846ddd8edf0bf4ad8644be8533db1aa463426e376865047d05dc22755e638632819317c0c2f1b2196657c8 + languageName: node + linkType: hard + +"http-proxy-middleware@npm:2.0.6": + version: 2.0.6 + resolution: "http-proxy-middleware@npm:2.0.6" + dependencies: + "@types/http-proxy": "npm:^1.17.8" + http-proxy: "npm:^1.18.1" + is-glob: "npm:^4.0.1" + is-plain-obj: "npm:^3.0.0" + micromatch: "npm:^4.0.2" + peerDependencies: + "@types/express": ^4.17.13 + peerDependenciesMeta: + "@types/express": + optional: true + checksum: 25a0e550dd1900ee5048a692e0e9b2b6339d06d487a705d90c47e359e9c6561d648cd7862d001d090e651c9efffa1b6e5160fcf1f299b5fa4935f76e9754eb11 + languageName: node + linkType: hard + +"http-proxy@npm:1.18.1, http-proxy@npm:^1.18.1": + version: 1.18.1 + resolution: "http-proxy@npm:1.18.1" + dependencies: + eventemitter3: "npm:^4.0.0" + follow-redirects: "npm:^1.0.0" + requires-port: "npm:^1.0.0" + checksum: 148dfa700a03fb421e383aaaf88ac1d94521dfc34072f6c59770528c65250983c2e4ec996f2f03aa9f3fe46cd1270a593126068319311e3e8d9e610a37533e94 + languageName: node + linkType: hard + +"http-shutdown@npm:^1.2.2": + version: 1.2.2 + resolution: "http-shutdown@npm:1.2.2" + checksum: 1ea04d50d9a84ad6e7d9ee621160ce9515936e32e7f5ba445db48a5d72681858002c934c7f3ae5f474b301c1cd6b418aee3f6a2f109822109e606cc1a6c17c03 + languageName: node + linkType: hard + +"http2-wrapper@npm:^2.1.10": + version: 2.2.1 + resolution: "http2-wrapper@npm:2.2.1" + dependencies: + quick-lru: "npm:^5.1.1" + resolve-alpn: "npm:^1.2.0" + checksum: 7207201d3c6e53e72e510c9b8912e4f3e468d3ecc0cf3bf52682f2aac9cd99358b896d1da4467380adc151cf97c412bedc59dc13dae90c523f42053a7449eedb + languageName: node + linkType: hard + +"https-proxy-agent@npm:5.0.1, https-proxy-agent@npm:^5.0.0, https-proxy-agent@npm:^5.0.1": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: "npm:6" + debug: "npm:4" + checksum: 6dd639f03434003577c62b27cafdb864784ef19b2de430d8ae2a1d45e31c4fd60719e5637b44db1a88a046934307da7089e03d6089ec3ddacc1189d8de8897d1 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.2 + resolution: "https-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.0.2" + debug: "npm:4" + checksum: 7735eb90073db087e7e79312e3d97c8c04baf7ea7ca7b013382b6a45abbaa61b281041a98f4e13c8c80d88f843785bcc84ba189165b4b4087b1e3496ba656d77 + languageName: node + linkType: hard + +"human-signals@npm:^2.1.0": + version: 2.1.0 + resolution: "human-signals@npm:2.1.0" + checksum: 695edb3edfcfe9c8b52a76926cd31b36978782062c0ed9b1192b36bebc75c4c87c82e178dfcb0ed0fc27ca59d434198aac0bd0be18f5781ded775604db22304a + languageName: node + linkType: hard + +"human-signals@npm:^3.0.1": + version: 3.0.1 + resolution: "human-signals@npm:3.0.1" + checksum: 0bb27e72aea1666322f69ab9816e05df952ef2160346f2293f98f45d472edb1b62d0f1a596697b50d48d8f8222e6db3b9f9dc0b6bf6113866121001f0a8e48e9 + languageName: node + linkType: hard + +"human-signals@npm:^4.3.0": + version: 4.3.1 + resolution: "human-signals@npm:4.3.1" + checksum: 40498b33fe139f5cc4ef5d2f95eb1803d6318ac1b1c63eaf14eeed5484d26332c828de4a5a05676b6c83d7b9e57727c59addb4b1dea19cb8d71e83689e5b336c + languageName: node + linkType: hard + +"humanize-ms@npm:^1.2.1": + version: 1.2.1 + resolution: "humanize-ms@npm:1.2.1" + dependencies: + ms: "npm:^2.0.0" + checksum: f34a2c20161d02303c2807badec2f3b49cbfbbb409abd4f95a07377ae01cfe6b59e3d15ac609cffcd8f2521f0eb37b7e1091acf65da99aa2a4f1ad63c21e7e7a + languageName: node + linkType: hard + +"husky@npm:^8.0.2": + version: 8.0.3 + resolution: "husky@npm:8.0.3" + bin: + husky: lib/bin.js + checksum: 6722591771c657b91a1abb082e07f6547eca79144d678e586828ae806499d90dce2a6aee08b66183fd8b085f19d20e0990a2ad396961746b4c8bd5bdb619d668 + languageName: node + linkType: hard + +"iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3" + checksum: c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4 + languageName: node + linkType: hard + +"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + +"identity-function@npm:^1.0.0": + version: 1.0.0 + resolution: "identity-function@npm:1.0.0" + checksum: fdd102a8eef90e5fc453198bcb85705ff058c1baba7d4ab4a053f6e8e6814de4318f6c3d7605bbe9fa9e92800d323494be0294d7d370fb5ecb99cfbd729d0132 + languageName: node + linkType: hard + +"ieee754@npm:^1.1.13, ieee754@npm:^1.2.1": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb + languageName: node + linkType: hard + +"ignore-by-default@npm:^1.0.1": + version: 1.0.1 + resolution: "ignore-by-default@npm:1.0.1" + checksum: 9ab6e70e80f7cc12735def7ecb5527cfa56ab4e1152cd64d294522827f2dcf1f6d85531241537dc3713544e88dd888f65cb3c49c7b2cddb9009087c75274e533 + languageName: node + linkType: hard + +"ignore@npm:^5.1.8, ignore@npm:^5.2.0, ignore@npm:^5.2.4": + version: 5.2.4 + resolution: "ignore@npm:5.2.4" + checksum: 7c7cd90edd9fea6e037f9b9da4b01bf0a86b198ce78345f9bbd983929d68ff14830be31111edc5d70c264921f4962404d75b7262b4d9cc3bc12381eccbd03096 + languageName: node + linkType: hard + +"image-meta@npm:^0.2.0": + version: 0.2.0 + resolution: "image-meta@npm:0.2.0" + checksum: 2fb50f878be6c12f8cca2f30dca3656bf9bb2fb6954476e69326997fe1dc4cc4d338d52f0a031def1804392caa1dd8e5668e9246aed85406df419625911a4ab2 + languageName: node + linkType: hard + +"import-fresh@npm:^3.0.0, import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: "npm:^1.0.0" + resolve-from: "npm:^4.0.0" + checksum: 7f882953aa6b740d1f0e384d0547158bc86efbf2eea0f1483b8900a6f65c5a5123c2cf09b0d542cc419d0b98a759ecaeb394237e97ea427f2da221dc3cd80cc3 + languageName: node + linkType: hard + +"import-lazy@npm:^4.0.0": + version: 4.0.0 + resolution: "import-lazy@npm:4.0.0" + checksum: a3520313e2c31f25c0b06aa66d167f329832b68a4f957d7c9daf6e0fa41822b6e84948191648b9b9d8ca82f94740cdf15eecf2401a5b42cd1c33fd84f2225cca + languageName: node + linkType: hard + +"import-local@npm:^3.0.2": + version: 3.1.0 + resolution: "import-local@npm:3.1.0" + dependencies: + pkg-dir: "npm:^4.2.0" + resolve-cwd: "npm:^3.0.0" + bin: + import-local-fixture: fixtures/cli.js + checksum: c67ecea72f775fe8684ca3d057e54bdb2ae28c14bf261d2607c269c18ea0da7b730924c06262eca9aed4b8ab31e31d65bc60b50e7296c85908a56e2f7d41ecd2 + languageName: node + linkType: hard + +"import-meta-resolve@npm:^3.0.0": + version: 3.0.0 + resolution: "import-meta-resolve@npm:3.0.0" + checksum: fd1810e01576216f080e55fec345e6c451e4f012d0089e96abf53e9466ac3ece05aaef2402dea50f2b9b859486773bebbd5b08221e1bf347e942969a084bb685 + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f + languageName: node + linkType: hard + +"indent-string@npm:^5.0.0": + version: 5.0.0 + resolution: "indent-string@npm:5.0.0" + checksum: 8ee77b57d92e71745e133f6f444d6fa3ed503ad0e1bcd7e80c8da08b42375c07117128d670589725ed07b1978065803fa86318c309ba45415b7fe13e7f170220 + languageName: node + linkType: hard + +"individual@npm:^3.0.0": + version: 3.0.0 + resolution: "individual@npm:3.0.0" + checksum: 1d5b7af8833a4af77755a98abc0f69e0f54396ca379a5b2287f0b4dafbbbd9ac896e413e780ce18e61476b9bbfe4144b8a36d218770a7a707d490c09d428ea1b + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: "npm:^1.3.0" + wrappy: "npm:1" + checksum: 7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + +"ini@npm:2.0.0": + version: 2.0.0 + resolution: "ini@npm:2.0.0" + checksum: 2e0c8f386369139029da87819438b20a1ff3fe58372d93fb1a86e9d9344125ace3a806b8ec4eb160a46e64cbc422fe68251869441676af49b7fc441af2389c25 + languageName: node + linkType: hard + +"ini@npm:^1.3.2, ini@npm:^1.3.4, ini@npm:~1.3.0": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: ec93838d2328b619532e4f1ff05df7909760b6f66d9c9e2ded11e5c1897d6f2f9980c54dd638f88654b00919ce31e827040631eab0a3969e4d1abefa0719516a + languageName: node + linkType: hard + +"inquirer-autocomplete-prompt@npm:1.4.0": + version: 1.4.0 + resolution: "inquirer-autocomplete-prompt@npm:1.4.0" + dependencies: + ansi-escapes: "npm:^4.3.1" + chalk: "npm:^4.0.0" + figures: "npm:^3.2.0" + run-async: "npm:^2.4.0" + rxjs: "npm:^6.6.2" + peerDependencies: + inquirer: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 0a09e3410661fac54f24dfdc007149a9f79074670938a83c5f16cd9aef90c7702d5b74d7c0467f77dc166f66ca102e653e2835f08e96f6b9573d0365cf4a0f1c + languageName: node + linkType: hard + +"inquirer@npm:6.5.2, inquirer@npm:^6.0.0": + version: 6.5.2 + resolution: "inquirer@npm:6.5.2" + dependencies: + ansi-escapes: "npm:^3.2.0" + chalk: "npm:^2.4.2" + cli-cursor: "npm:^2.1.0" + cli-width: "npm:^2.0.0" + external-editor: "npm:^3.0.3" + figures: "npm:^2.0.0" + lodash: "npm:^4.17.12" + mute-stream: "npm:0.0.7" + run-async: "npm:^2.2.0" + rxjs: "npm:^6.4.0" + string-width: "npm:^2.1.0" + strip-ansi: "npm:^5.1.0" + through: "npm:^2.3.6" + checksum: a5aa53a8f88405cf1cff63111493f87a5b3b5deb5ea4a0dbcd73ccc06a51a6bba0c3f1a0747f8880e9e3ec2437c69f90417be16368abf636b1d29eebe35db0ac + languageName: node + linkType: hard + +"inspect-with-kind@npm:^1.0.5": + version: 1.0.5 + resolution: "inspect-with-kind@npm:1.0.5" + dependencies: + kind-of: "npm:^6.0.2" + checksum: 4a7ca641927d24b5f0fabbad48ed940cffa840d6cfa07b6bc475593f6e0679b4d30ec1714de289cb17b10214a36e6bdccc257262a1163e33741425e5d311e8d1 + languageName: node + linkType: hard + +"ioredis@npm:^4.27.8": + version: 4.28.5 + resolution: "ioredis@npm:4.28.5" + dependencies: + cluster-key-slot: "npm:^1.1.0" + debug: "npm:^4.3.1" + denque: "npm:^1.1.0" + lodash.defaults: "npm:^4.2.0" + lodash.flatten: "npm:^4.4.0" + lodash.isarguments: "npm:^3.1.0" + p-map: "npm:^2.1.0" + redis-commands: "npm:1.7.0" + redis-errors: "npm:^1.2.0" + redis-parser: "npm:^3.0.0" + standard-as-callback: "npm:^2.1.0" + checksum: 6fd12957d2906f83d8aa662ba78d084df16dc7c1a0e6e18c512302ac94339dcd5936d2e7cd6f89e9e7b511e3cf96617ca2fdea63aa4679bfdf48aa2be441ad76 + languageName: node + linkType: hard + +"ioredis@npm:^5.3.2": + version: 5.3.2 + resolution: "ioredis@npm:5.3.2" + dependencies: + "@ioredis/commands": "npm:^1.1.1" + cluster-key-slot: "npm:^1.1.0" + debug: "npm:^4.3.4" + denque: "npm:^2.1.0" + lodash.defaults: "npm:^4.2.0" + lodash.isarguments: "npm:^3.1.0" + redis-errors: "npm:^1.2.0" + redis-parser: "npm:^3.0.0" + standard-as-callback: "npm:^2.1.0" + checksum: 0dd2b5b8004e891f5b62edf18ac223194f1f5204698ec827c903e789ea05b0b36f73395491749ec63c66470485bdfb228ccdf1714fbf631a0f78f33211f2c883 + languageName: node + linkType: hard + +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: 8d186cc5585f57372847ae29b6eba258c68862055e18a75cc4933327232cb5c107f89800ce29715d542eef2c254fbb68b382e780a7414f9ee7caf60b7a473958 + languageName: node + linkType: hard + +"ipaddr.js@npm:1.9.1": + version: 1.9.1 + resolution: "ipaddr.js@npm:1.9.1" + checksum: 0486e775047971d3fdb5fb4f063829bac45af299ae0b82dcf3afa2145338e08290563a2a70f34b732d795ecc8311902e541a8530eeb30d75860a78ff4e94ce2a + languageName: node + linkType: hard + +"ipx@npm:2.0.1": + version: 2.0.1 + resolution: "ipx@npm:2.0.1" + dependencies: + "@fastify/accept-negotiator": "npm:^1.1.0" + citty: "npm:^0.1.4" + consola: "npm:^3.2.3" + defu: "npm:^6.1.3" + destr: "npm:^2.0.2" + etag: "npm:^1.8.1" + h3: "npm:^1.8.2" + image-meta: "npm:^0.2.0" + listhen: "npm:^1.5.5" + ofetch: "npm:^1.3.3" + pathe: "npm:^1.1.1" + sharp: "npm:^0.32.6" + svgo: "npm:^3.0.2" + ufo: "npm:^1.3.1" + unstorage: "npm:^1.9.0" + xss: "npm:^1.0.14" + bin: + ipx: bin/ipx.mjs + checksum: 7938427c34d4b499be4dd5018f249ae5496a612dcfdc943eb2cb8945c4a91d6a516f1ddfe91f432d3a8bbf3a181387df67486eeb1e4c718c5186dbe91c1897eb + languageName: node + linkType: hard + +"iron-webcrypto@npm:^1.0.0": + version: 1.0.0 + resolution: "iron-webcrypto@npm:1.0.0" + checksum: 7e9305a7d792c275cba33c770695327c8ad3f7c8021e03f7148a8b92b559ad09468f337433090eb48e195d5fda0fd2e0611afcad843eb917cffcc1c6392e8037 + languageName: node + linkType: hard + +"is-accessor-descriptor@npm:^1.0.1": + version: 1.0.1 + resolution: "is-accessor-descriptor@npm:1.0.1" + dependencies: + hasown: "npm:^2.0.0" + checksum: d034034074c5ffeb6c868e091083182279db1a956f49f8d1494cecaa0f8b99d706556ded2a9b20d9aa290549106eef8204d67d8572902e06dcb1add6db6b524d + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: e7fb686a739068bb70f860b39b67afc62acc62e36bb61c5f965768abce1873b379c563e61dd2adad96ebb7edf6651111b385e490cf508378959b0ed4cac4e729 + languageName: node + linkType: hard + +"is-arrayish@npm:^0.3.1": + version: 0.3.2 + resolution: "is-arrayish@npm:0.3.2" + checksum: f59b43dc1d129edb6f0e282595e56477f98c40278a2acdc8b0a5c57097c9eff8fe55470493df5775478cf32a4dc8eaf6d3a749f07ceee5bc263a78b2434f6a54 + languageName: node + linkType: hard + +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" + dependencies: + binary-extensions: "npm:^2.0.0" + checksum: a16eaee59ae2b315ba36fad5c5dcaf8e49c3e27318f8ab8fa3cdb8772bf559c8d1ba750a589c2ccb096113bb64497084361a25960899cb6172a6925ab6123d38 + languageName: node + linkType: hard + +"is-buffer@npm:^1.1.5, is-buffer@npm:~1.1.6": + version: 1.1.6 + resolution: "is-buffer@npm:1.1.6" + checksum: ae18aa0b6e113d6c490ad1db5e8df9bdb57758382b313f5a22c9c61084875c6396d50bbf49315f5b1926d142d74dfb8d31b40d993a383e0a158b15fea7a82234 + languageName: node + linkType: hard + +"is-builtin-module@npm:^3.1.0": + version: 3.2.1 + resolution: "is-builtin-module@npm:3.2.1" + dependencies: + builtin-modules: "npm:^3.3.0" + checksum: 5a66937a03f3b18803381518f0ef679752ac18cdb7dd53b5e23ee8df8d440558737bd8dcc04d2aae555909d2ecb4a81b5c0d334d119402584b61e6a003e31af1 + languageName: node + linkType: hard + +"is-ci@npm:^3.0.1": + version: 3.0.1 + resolution: "is-ci@npm:3.0.1" + dependencies: + ci-info: "npm:^3.2.0" + bin: + is-ci: bin.js + checksum: 0e81caa62f4520d4088a5bef6d6337d773828a88610346c4b1119fb50c842587ed8bef1e5d9a656835a599e7209405b5761ddf2339668f2d0f4e889a92fe6051 + languageName: node + linkType: hard + +"is-core-module@npm:^2.13.0": + version: 2.13.1 + resolution: "is-core-module@npm:2.13.1" + dependencies: + hasown: "npm:^2.0.0" + checksum: 2cba9903aaa52718f11c4896dabc189bab980870aae86a62dc0d5cedb546896770ee946fb14c84b7adf0735f5eaea4277243f1b95f5cefa90054f92fbcac2518 + languageName: node + linkType: hard + +"is-core-module@npm:^2.5.0": + version: 2.13.0 + resolution: "is-core-module@npm:2.13.0" + dependencies: + has: "npm:^1.0.3" + checksum: a8e7f46f8cefd7c9f6f5d54f3dbf1c40bf79467b6612d6023421ec6ea7e8e4c22593b3963ff7a3f770db07bc19fccbe7987a550a8bc1a4d6ec4115db5e4c5dca + languageName: node + linkType: hard + +"is-data-descriptor@npm:^1.0.1": + version: 1.0.1 + resolution: "is-data-descriptor@npm:1.0.1" + dependencies: + hasown: "npm:^2.0.0" + checksum: ad3acc372e3227f87eb8cdba112c343ca2a67f1885aecf64f02f901cb0858a1fc9488ad42135ab102e9d9e71a62b3594740790bb103a9ba5da830a131a89e3e8 + languageName: node + linkType: hard + +"is-descriptor@npm:^0.1.0": + version: 0.1.7 + resolution: "is-descriptor@npm:0.1.7" + dependencies: + is-accessor-descriptor: "npm:^1.0.1" + is-data-descriptor: "npm:^1.0.1" + checksum: f5960b9783f508aec570465288cb673d4b3cc4aae4e6de970c3afd9a8fc1351edcb85d78b2cce2ec5251893a423f73263cab3bb94cf365a8d71b5d510a116392 + languageName: node + linkType: hard + +"is-descriptor@npm:^1.0.0, is-descriptor@npm:^1.0.2": + version: 1.0.3 + resolution: "is-descriptor@npm:1.0.3" + dependencies: + is-accessor-descriptor: "npm:^1.0.1" + is-data-descriptor: "npm:^1.0.1" + checksum: b4ee667ea787d3a0be4e58536087fd0587de2b0b6672fbfe288f5b8d831ac4b79fd987f31d6c2d4e5543a42c97a87428bc5215ce292a1a47070147793878226f + languageName: node + linkType: hard + +"is-docker@npm:3.0.0": + version: 3.0.0 + resolution: "is-docker@npm:3.0.0" + bin: + is-docker: cli.js + checksum: d2c4f8e6d3e34df75a5defd44991b6068afad4835bb783b902fa12d13ebdb8f41b2a199dcb0b5ed2cb78bfee9e4c0bbdb69c2d9646f4106464674d3e697a5856 + languageName: node + linkType: hard + +"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": + version: 2.2.1 + resolution: "is-docker@npm:2.2.1" + bin: + is-docker: cli.js + checksum: e828365958d155f90c409cdbe958f64051d99e8aedc2c8c4cd7c89dcf35329daed42f7b99346f7828df013e27deb8f721cf9408ba878c76eb9e8290235fbcdcc + languageName: node + linkType: hard + +"is-extendable@npm:^0.1.0, is-extendable@npm:^0.1.1": + version: 0.1.1 + resolution: "is-extendable@npm:0.1.1" + checksum: dd5ca3994a28e1740d1e25192e66eed128e0b2ff161a7ea348e87ae4f616554b486854de423877a2a2c171d5f7cd6e8093b91f54533bc88a59ee1c9838c43879 + languageName: node + linkType: hard + +"is-extendable@npm:^1.0.1": + version: 1.0.1 + resolution: "is-extendable@npm:1.0.1" + dependencies: + is-plain-object: "npm:^2.0.4" + checksum: 1d6678a5be1563db6ecb121331c819c38059703f0179f52aa80c242c223ee9c6b66470286636c0e63d7163e4d905c0a7d82a096e0b5eaeabb51b9f8d0af0d73f + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^2.0.0": + version: 2.0.0 + resolution: "is-fullwidth-code-point@npm:2.0.0" + checksum: e58f3e4a601fc0500d8b2677e26e9fe0cd450980e66adb29d85b6addf7969731e38f8e43ed2ec868a09c101a55ac3d8b78902209269f38c5286bc98f5bc1b4d9 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^4.0.0": + version: 4.0.0 + resolution: "is-fullwidth-code-point@npm:4.0.0" + checksum: df2a717e813567db0f659c306d61f2f804d480752526886954a2a3e2246c7745fd07a52b5fecf2b68caf0a6c79dcdace6166fdf29cc76ed9975cc334f0a018b8 + languageName: node + linkType: hard + +"is-generator-fn@npm:^2.0.0": + version: 2.1.0 + resolution: "is-generator-fn@npm:2.1.0" + checksum: 2957cab387997a466cd0bf5c1b6047bd21ecb32bdcfd8996b15747aa01002c1c88731802f1b3d34ac99f4f6874b626418bd118658cf39380fe5fff32a3af9c4d + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + +"is-installed-globally@npm:^0.4.0": + version: 0.4.0 + resolution: "is-installed-globally@npm:0.4.0" + dependencies: + global-dirs: "npm:^3.0.0" + is-path-inside: "npm:^3.0.2" + checksum: f3e6220ee5824b845c9ed0d4b42c24272701f1f9926936e30c0e676254ca5b34d1b92c6205cae11b283776f9529212c0cdabb20ec280a6451677d6493ca9c22d + languageName: node + linkType: hard + +"is-interactive@npm:^2.0.0": + version: 2.0.0 + resolution: "is-interactive@npm:2.0.0" + checksum: 801c8f6064f85199dc6bf99b5dd98db3282e930c3bc197b32f2c5b89313bb578a07d1b8a01365c4348c2927229234f3681eb861b9c2c92bee72ff397390fa600 + languageName: node + linkType: hard + +"is-iterable@npm:^1.1.0": + version: 1.1.1 + resolution: "is-iterable@npm:1.1.1" + checksum: 8c919e9f608e5940b1d27dee9ef6e5de75e891665ab8dbcbfc740a65dbdaf070209950329f524573c52b1c584620d82ead13e662ce61c531152ddac70592c953 + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 85fee098ae62ba6f1e24cf22678805473c7afd0fb3978a3aa260e354cb7bcb3a5806cf0a98403188465efedec41ab4348e8e4e79305d409601323855b3839d4d + languageName: node + linkType: hard + +"is-npm@npm:^6.0.0": + version: 6.0.0 + resolution: "is-npm@npm:6.0.0" + checksum: 1f064c66325cba6e494783bee4e635caa2655aad7f853a0e045d086e0bb7d83d2d6cdf1745dc9a7c7c93dacbf816fbee1f8d9179b02d5d01674d4f92541dc0d9 + languageName: node + linkType: hard + +"is-number@npm:^3.0.0": + version: 3.0.0 + resolution: "is-number@npm:3.0.0" + dependencies: + kind-of: "npm:^3.0.2" + checksum: e639c54640b7f029623df24d3d103901e322c0c25ea5bde97cd723c2d0d4c05857a8364ab5c58d963089dbed6bf1d0ffe975cb6aef917e2ad0ccbca653d31b4f + languageName: node + linkType: hard + +"is-number@npm:^4.0.0": + version: 4.0.0 + resolution: "is-number@npm:4.0.0" + checksum: bb17a331f357eb59a7f8db848086c41886715b2ea1db03f284a99d14001cda094083a5b6a7b343b5bcf410ccef668a70bc626d07bc2032cc4ab46dd264cea244 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 + languageName: node + linkType: hard + +"is-obj@npm:^2.0.0": + version: 2.0.0 + resolution: "is-obj@npm:2.0.0" + checksum: 85044ed7ba8bd169e2c2af3a178cacb92a97aa75de9569d02efef7f443a824b5e153eba72b9ae3aca6f8ce81955271aa2dc7da67a8b720575d3e38104208cb4e + languageName: node + linkType: hard + +"is-path-inside@npm:^3.0.2, is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05 + languageName: node + linkType: hard + +"is-path-inside@npm:^4.0.0": + version: 4.0.0 + resolution: "is-path-inside@npm:4.0.0" + checksum: 51188d7e2b1d907a9a5f7c18d99a90b60870b951ed87cf97595d9aaa429d4c010652c3350bcbf31182e7f4b0eab9a1860b43e16729b13cb1a44baaa6cdb64c46 + languageName: node + linkType: hard + +"is-plain-obj@npm:^1.0.0, is-plain-obj@npm:^1.1.0": + version: 1.1.0 + resolution: "is-plain-obj@npm:1.1.0" + checksum: daaee1805add26f781b413fdf192fc91d52409583be30ace35c82607d440da63cc4cac0ac55136716688d6c0a2c6ef3edb2254fecbd1fe06056d6bd15975ee8c + languageName: node + linkType: hard + +"is-plain-obj@npm:^2.1.0": + version: 2.1.0 + resolution: "is-plain-obj@npm:2.1.0" + checksum: e5c9814cdaa627a9ad0a0964ded0e0491bfd9ace405c49a5d63c88b30a162f1512c069d5b80997893c4d0181eadc3fed02b4ab4b81059aba5620bfcdfdeb9c53 + languageName: node + linkType: hard + +"is-plain-obj@npm:^3.0.0": + version: 3.0.0 + resolution: "is-plain-obj@npm:3.0.0" + checksum: 8e6483bfb051d42ec9c704c0ede051a821c6b6f9a6c7a3e3b55aa855e00981b0580c8f3b1f5e2e62649b39179b1abfee35d6f8086d999bfaa32c1908d29b07bc + languageName: node + linkType: hard + +"is-plain-obj@npm:^4.0.0, is-plain-obj@npm:^4.1.0": + version: 4.1.0 + resolution: "is-plain-obj@npm:4.1.0" + checksum: 32130d651d71d9564dc88ba7e6fda0e91a1010a3694648e9f4f47bb6080438140696d3e3e15c741411d712e47ac9edc1a8a9de1fe76f3487b0d90be06ac9975e + languageName: node + linkType: hard + +"is-plain-object@npm:^2.0.3, is-plain-object@npm:^2.0.4": + version: 2.0.4 + resolution: "is-plain-object@npm:2.0.4" + dependencies: + isobject: "npm:^3.0.1" + checksum: f050fdd5203d9c81e8c4df1b3ff461c4bc64e8b5ca383bcdde46131361d0a678e80bcf00b5257646f6c636197629644d53bd8e2375aea633de09a82d57e942f4 + languageName: node + linkType: hard + +"is-plain-object@npm:^5.0.0": + version: 5.0.0 + resolution: "is-plain-object@npm:5.0.0" + checksum: 893e42bad832aae3511c71fd61c0bf61aa3a6d853061c62a307261842727d0d25f761ce9379f7ba7226d6179db2a3157efa918e7fe26360f3bf0842d9f28942c + languageName: node + linkType: hard + +"is-potential-custom-element-name@npm:^1.0.1": + version: 1.0.1 + resolution: "is-potential-custom-element-name@npm:1.0.1" + checksum: b73e2f22bc863b0939941d369486d308b43d7aef1f9439705e3582bfccaa4516406865e32c968a35f97a99396dac84e2624e67b0a16b0a15086a785e16ce7db9 + languageName: node + linkType: hard + +"is-promise@npm:^4.0.0": + version: 4.0.0 + resolution: "is-promise@npm:4.0.0" + checksum: ebd5c672d73db781ab33ccb155fb9969d6028e37414d609b115cc534654c91ccd061821d5b987eefaa97cf4c62f0b909bb2f04db88306de26e91bfe8ddc01503 + languageName: node + linkType: hard + +"is-stream@npm:3.0.0, is-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "is-stream@npm:3.0.0" + checksum: eb2f7127af02ee9aa2a0237b730e47ac2de0d4e76a4a905a50a11557f2339df5765eaea4ceb8029f1efa978586abe776908720bfcb1900c20c6ec5145f6f29d8 + languageName: node + linkType: hard + +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: 7c284241313fc6efc329b8d7f08e16c0efeb6baab1b4cd0ba579eb78e5af1aa5da11e68559896a2067cd6c526bd29241dda4eb1225e627d5aa1a89a76d4635a5 + languageName: node + linkType: hard + +"is-text-path@npm:^1.0.1": + version: 1.0.1 + resolution: "is-text-path@npm:1.0.1" + dependencies: + text-extensions: "npm:^1.0.0" + checksum: 61c8650c29548febb6bf69e9541fc11abbbb087a0568df7bc471ba264e95fb254def4e610631cbab4ddb0a1a07949d06416f4ebeaf37875023fb184cdb87ee84 + languageName: node + linkType: hard + +"is-typedarray@npm:^1.0.0": + version: 1.0.0 + resolution: "is-typedarray@npm:1.0.0" + checksum: 4c096275ba041a17a13cca33ac21c16bc4fd2d7d7eb94525e7cd2c2f2c1a3ab956e37622290642501ff4310601e413b675cf399ad6db49855527d2163b3eeeec + languageName: node + linkType: hard + +"is-unicode-supported@npm:^1.1.0, is-unicode-supported@npm:^1.2.0": + version: 1.3.0 + resolution: "is-unicode-supported@npm:1.3.0" + checksum: b8674ea95d869f6faabddc6a484767207058b91aea0250803cbf1221345cb0c56f466d4ecea375dc77f6633d248d33c47bd296fb8f4cdba0b4edba8917e83d8a + languageName: node + linkType: hard + +"is-url-superb@npm:^4.0.0": + version: 4.0.0 + resolution: "is-url-superb@npm:4.0.0" + checksum: 354ea8246d5b5a828e41bb4ed66c539a7b74dc878ee4fa84b148df312b14b08118579d64f0893b56a0094e3b4b1e6082d2fbe2e3792998d7edffde1c0f3dfdd9 + languageName: node + linkType: hard + +"is-url@npm:^1.2.4": + version: 1.2.4 + resolution: "is-url@npm:1.2.4" + checksum: 0157a79874f8f95fdd63540e3f38c8583c2ef572661cd0693cda80ae3e42dfe8e9a4a972ec1b827f861d9a9acf75b37f7d58a37f94a8a053259642912c252bc3 + languageName: node + linkType: hard + +"is-windows@npm:^1.0.2": + version: 1.0.2 + resolution: "is-windows@npm:1.0.2" + checksum: b32f418ab3385604a66f1b7a3ce39d25e8881dee0bd30816dc8344ef6ff9df473a732bcc1ec4e84fe99b2f229ae474f7133e8e93f9241686cfcf7eebe53ba7a5 + languageName: node + linkType: hard + +"is-wsl@npm:2.2.0, is-wsl@npm:^2.2.0": + version: 2.2.0 + resolution: "is-wsl@npm:2.2.0" + dependencies: + is-docker: "npm:^2.0.0" + checksum: a6fa2d370d21be487c0165c7a440d567274fbba1a817f2f0bfa41cc5e3af25041d84267baa22df66696956038a43973e72fca117918c91431920bdef490fa25e + languageName: node + linkType: hard + +"is-yarn-global@npm:^0.4.0": + version: 0.4.1 + resolution: "is-yarn-global@npm:0.4.1" + checksum: 8ff66f33454614f8e913ad91cc4de0d88d519a46c1ed41b3f589da79504ed0fcfa304064fe3096dda9360c5f35aa210cb8e978fd36798f3118cb66a4de64d365 + languageName: node + linkType: hard + +"isarray@npm:1.0.0, isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: 18b5be6669be53425f0b84098732670ed4e727e3af33bc7f948aac01782110eb9a18b3b329c5323bcdd3acdaae547ee077d3951317e7f133bff7105264b3003d + languageName: node + linkType: hard + +"iserror@npm:0.0.2, iserror@npm:^0.0.2": + version: 0.0.2 + resolution: "iserror@npm:0.0.2" + checksum: f51982cb8ccbd9481b542f101441018d501eb60cd5ee17ee7c4a1d6bef499472db47f4a61d5b2233ac444d99491a67daa261771443244b75a573e2c98ce718d1 + languageName: node + linkType: hard + +"isexe@npm:2.0.0, isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 + languageName: node + linkType: hard + +"isobject@npm:^2.0.0": + version: 2.1.0 + resolution: "isobject@npm:2.1.0" + dependencies: + isarray: "npm:1.0.0" + checksum: c4cafec73b3b2ee11be75dff8dafd283b5728235ac099b07d7873d5182553a707768e208327bbc12931b9422d8822280bf88d894a0024ff5857b3efefb480e7b + languageName: node + linkType: hard + +"isobject@npm:^3.0.0, isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: 03344f5064a82f099a0cd1a8a407f4c0d20b7b8485e8e816c39f249e9416b06c322e8dec5b842b6bb8a06de0af9cb48e7bc1b5352f0fadc2f0abac033db3d4db + languageName: node + linkType: hard + +"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": + version: 3.2.0 + resolution: "istanbul-lib-coverage@npm:3.2.0" + checksum: 10ecb00a50cac2f506af8231ce523ffa1ac1310db0435c8ffaabb50c1d72539906583aa13c84f8835dc103998b9989edc3c1de989d2e2a96a91a9ba44e5db6b9 + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^5.0.4": + version: 5.2.1 + resolution: "istanbul-lib-instrument@npm:5.2.1" + dependencies: + "@babel/core": "npm:^7.12.3" + "@babel/parser": "npm:^7.14.7" + "@istanbuljs/schema": "npm:^0.1.2" + istanbul-lib-coverage: "npm:^3.2.0" + semver: "npm:^6.3.0" + checksum: 8a1bdf3e377dcc0d33ec32fe2b6ecacdb1e4358fd0eb923d4326bb11c67622c0ceb99600a680f3dad5d29c66fc1991306081e339b4d43d0b8a2ab2e1d910a6ee + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^6.0.0": + version: 6.0.0 + resolution: "istanbul-lib-instrument@npm:6.0.0" + dependencies: + "@babel/core": "npm:^7.12.3" + "@babel/parser": "npm:^7.14.7" + "@istanbuljs/schema": "npm:^0.1.2" + istanbul-lib-coverage: "npm:^3.2.0" + semver: "npm:^7.5.4" + checksum: ee86777f3692f95c3ae35c5cbc9aa979b551241da2de1284f75c507a2bdef948cc56ca90214c3bb47b5dc2ebe748610eb4f7c4d39b304f24a933bcd0867a05e8 + languageName: node + linkType: hard + +"istanbul-lib-report@npm:^3.0.0": + version: 3.0.1 + resolution: "istanbul-lib-report@npm:3.0.1" + dependencies: + istanbul-lib-coverage: "npm:^3.0.0" + make-dir: "npm:^4.0.0" + supports-color: "npm:^7.1.0" + checksum: 84323afb14392de8b6a5714bd7e9af845cfbd56cfe71ed276cda2f5f1201aea673c7111901227ee33e68e4364e288d73861eb2ed48f6679d1e69a43b6d9b3ba7 + languageName: node + linkType: hard + +"istanbul-lib-source-maps@npm:^4.0.0": + version: 4.0.1 + resolution: "istanbul-lib-source-maps@npm:4.0.1" + dependencies: + debug: "npm:^4.1.1" + istanbul-lib-coverage: "npm:^3.0.0" + source-map: "npm:^0.6.1" + checksum: 19e4cc405016f2c906dff271a76715b3e881fa9faeb3f09a86cb99b8512b3a5ed19cadfe0b54c17ca0e54c1142c9c6de9330d65506e35873994e06634eebeb66 + languageName: node + linkType: hard + +"istanbul-reports@npm:^3.1.3": + version: 3.1.6 + resolution: "istanbul-reports@npm:3.1.6" + dependencies: + html-escaper: "npm:^2.0.0" + istanbul-lib-report: "npm:^3.0.0" + checksum: ec3f1bdbc51b3e0b325a5b9f4ad31a247697f31001df4e81075f7980413f14da1b5adfec574fd156efd3b0464023f61320f6718efc66ee72b32d89611cef99dd + languageName: node + linkType: hard + +"iterable-lookahead@npm:^1.0.0": + version: 1.0.0 + resolution: "iterable-lookahead@npm:1.0.0" + checksum: f320a513d5ecfe0ce3c681f1dc6f7e6d81a8bfd2d35911e92347c3d2115acedaf17f877b4aac4360125774b11b20f175d417a5ca8952bb84071d79a755d8768e + languageName: node + linkType: hard + +"jackspeak@npm:^2.3.5": + version: 2.3.6 + resolution: "jackspeak@npm:2.3.6" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: f01d8f972d894cd7638bc338e9ef5ddb86f7b208ce177a36d718eac96ec86638a6efa17d0221b10073e64b45edc2ce15340db9380b1f5d5c5d000cbc517dc111 + languageName: node + linkType: hard + +"jaeger-client@npm:^3.15.0": + version: 3.19.0 + resolution: "jaeger-client@npm:3.19.0" + dependencies: + node-int64: "npm:^0.4.0" + opentracing: "npm:^0.14.4" + thriftrw: "npm:^3.5.0" + uuid: "npm:^8.3.2" + xorshift: "npm:^1.1.1" + checksum: 04f5683461212de49e4d5b6ca6b214276a797e361fba852231bc5e7fdcee76b053a6e618e5490106d7f7254917d928dda0880f7cd71e35dece7e09bbdcdd0927 + languageName: node + linkType: hard + +"jest-changed-files@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-changed-files@npm:29.7.0" + dependencies: + execa: "npm:^5.0.0" + jest-util: "npm:^29.7.0" + p-limit: "npm:^3.1.0" + checksum: e071384d9e2f6bb462231ac53f29bff86f0e12394c1b49ccafbad225ce2ab7da226279a8a94f421949920bef9be7ef574fd86aee22e8adfa149be73554ab828b + languageName: node + linkType: hard + +"jest-circus@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-circus@npm:29.7.0" + dependencies: + "@jest/environment": "npm:^29.7.0" + "@jest/expect": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + co: "npm:^4.6.0" + dedent: "npm:^1.0.0" + is-generator-fn: "npm:^2.0.0" + jest-each: "npm:^29.7.0" + jest-matcher-utils: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-runtime: "npm:^29.7.0" + jest-snapshot: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + p-limit: "npm:^3.1.0" + pretty-format: "npm:^29.7.0" + pure-rand: "npm:^6.0.0" + slash: "npm:^3.0.0" + stack-utils: "npm:^2.0.3" + checksum: 8d15344cf7a9f14e926f0deed64ed190c7a4fa1ed1acfcd81e4cc094d3cc5bf7902ebb7b874edc98ada4185688f90c91e1747e0dfd7ac12463b097968ae74b5e + languageName: node + linkType: hard + +"jest-cli@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-cli@npm:29.7.0" + dependencies: + "@jest/core": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + chalk: "npm:^4.0.0" + create-jest: "npm:^29.7.0" + exit: "npm:^0.1.2" + import-local: "npm:^3.0.2" + jest-config: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-validate: "npm:^29.7.0" + yargs: "npm:^17.3.1" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: a658fd55050d4075d65c1066364595962ead7661711495cfa1dfeecf3d6d0a8ffec532f3dbd8afbb3e172dd5fd2fb2e813c5e10256e7cf2fea766314942fb43a + languageName: node + linkType: hard + +"jest-config@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-config@npm:29.7.0" + dependencies: + "@babel/core": "npm:^7.11.6" + "@jest/test-sequencer": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + babel-jest: "npm:^29.7.0" + chalk: "npm:^4.0.0" + ci-info: "npm:^3.2.0" + deepmerge: "npm:^4.2.2" + glob: "npm:^7.1.3" + graceful-fs: "npm:^4.2.9" + jest-circus: "npm:^29.7.0" + jest-environment-node: "npm:^29.7.0" + jest-get-type: "npm:^29.6.3" + jest-regex-util: "npm:^29.6.3" + jest-resolve: "npm:^29.7.0" + jest-runner: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-validate: "npm:^29.7.0" + micromatch: "npm:^4.0.4" + parse-json: "npm:^5.2.0" + pretty-format: "npm:^29.7.0" + slash: "npm:^3.0.0" + strip-json-comments: "npm:^3.1.1" + peerDependencies: + "@types/node": "*" + ts-node: ">=9.0.0" + peerDependenciesMeta: + "@types/node": + optional: true + ts-node: + optional: true + checksum: bab23c2eda1fff06e0d104b00d6adfb1d1aabb7128441899c9bff2247bd26710b050a5364281ce8d52b46b499153bf7e3ee88b19831a8f3451f1477a0246a0f1 + languageName: node + linkType: hard + +"jest-diff@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-diff@npm:29.7.0" + dependencies: + chalk: "npm:^4.0.0" + diff-sequences: "npm:^29.6.3" + jest-get-type: "npm:^29.6.3" + pretty-format: "npm:^29.7.0" + checksum: 89a4a7f182590f56f526443dde69acefb1f2f0c9e59253c61d319569856c4931eae66b8a3790c443f529267a0ddba5ba80431c585deed81827032b2b2a1fc999 + languageName: node + linkType: hard + +"jest-docblock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-docblock@npm:29.7.0" + dependencies: + detect-newline: "npm:^3.0.0" + checksum: d932a8272345cf6b6142bb70a2bb63e0856cc0093f082821577ea5bdf4643916a98744dfc992189d2b1417c38a11fa42466f6111526bc1fb81366f56410f3be9 + languageName: node + linkType: hard + +"jest-each@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-each@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + chalk: "npm:^4.0.0" + jest-get-type: "npm:^29.6.3" + jest-util: "npm:^29.7.0" + pretty-format: "npm:^29.7.0" + checksum: f7f9a90ebee80cc688e825feceb2613627826ac41ea76a366fa58e669c3b2403d364c7c0a74d862d469b103c843154f8456d3b1c02b487509a12afa8b59edbb4 + languageName: node + linkType: hard + +"jest-environment-node@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-environment-node@npm:29.7.0" + dependencies: + "@jest/environment": "npm:^29.7.0" + "@jest/fake-timers": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + jest-mock: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + checksum: 61f04fec077f8b1b5c1a633e3612fc0c9aa79a0ab7b05600683428f1e01a4d35346c474bde6f439f9fcc1a4aa9a2861ff852d079a43ab64b02105d1004b2592b + languageName: node + linkType: hard + +"jest-get-type@npm:^27.5.1": + version: 27.5.1 + resolution: "jest-get-type@npm:27.5.1" + checksum: 42ee0101336bccfc3c1cff598b603c6006db7876b6117e5bd4a9fb7ffaadfb68febdb9ae68d1c47bc3a4174b070153fc6cfb59df995dcd054e81ace5028a7269 + languageName: node + linkType: hard + +"jest-get-type@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-get-type@npm:29.6.3" + checksum: 552e7a97a983d3c2d4e412a44eb7de0430ff773dd99f7500962c268d6dfbfa431d7d08f919c9d960530e5f7f78eb47f267ad9b318265e5092b3ff9ede0db7c2b + languageName: node + linkType: hard + +"jest-haste-map@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-haste-map@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + "@types/graceful-fs": "npm:^4.1.3" + "@types/node": "npm:*" + anymatch: "npm:^3.0.3" + fb-watchman: "npm:^2.0.0" + fsevents: "npm:^2.3.2" + graceful-fs: "npm:^4.2.9" + jest-regex-util: "npm:^29.6.3" + jest-util: "npm:^29.7.0" + jest-worker: "npm:^29.7.0" + micromatch: "npm:^4.0.4" + walker: "npm:^1.0.8" + dependenciesMeta: + fsevents: + optional: true + checksum: 2683a8f29793c75a4728787662972fedd9267704c8f7ef9d84f2beed9a977f1cf5e998c07b6f36ba5603f53cb010c911fe8cd0ac9886e073fe28ca66beefd30c + languageName: node + linkType: hard + +"jest-leak-detector@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-leak-detector@npm:29.7.0" + dependencies: + jest-get-type: "npm:^29.6.3" + pretty-format: "npm:^29.7.0" + checksum: 71bb9f77fc489acb842a5c7be030f2b9acb18574dc9fb98b3100fc57d422b1abc55f08040884bd6e6dbf455047a62f7eaff12aa4058f7cbdc11558718ca6a395 + languageName: node + linkType: hard + +"jest-matcher-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-matcher-utils@npm:29.7.0" + dependencies: + chalk: "npm:^4.0.0" + jest-diff: "npm:^29.7.0" + jest-get-type: "npm:^29.6.3" + pretty-format: "npm:^29.7.0" + checksum: 0d0e70b28fa5c7d4dce701dc1f46ae0922102aadc24ed45d594dd9b7ae0a8a6ef8b216718d1ab79e451291217e05d4d49a82666e1a3cc2b428b75cd9c933244e + languageName: node + linkType: hard + +"jest-message-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-message-util@npm:29.7.0" + dependencies: + "@babel/code-frame": "npm:^7.12.13" + "@jest/types": "npm:^29.6.3" + "@types/stack-utils": "npm:^2.0.0" + chalk: "npm:^4.0.0" + graceful-fs: "npm:^4.2.9" + micromatch: "npm:^4.0.4" + pretty-format: "npm:^29.7.0" + slash: "npm:^3.0.0" + stack-utils: "npm:^2.0.3" + checksum: 850ae35477f59f3e6f27efac5215f706296e2104af39232bb14e5403e067992afb5c015e87a9243ec4d9df38525ef1ca663af9f2f4766aa116f127247008bd22 + languageName: node + linkType: hard + +"jest-mock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-mock@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + jest-util: "npm:^29.7.0" + checksum: 7b9f8349ee87695a309fe15c46a74ab04c853369e5c40952d68061d9dc3159a0f0ed73e215f81b07ee97a9faaf10aebe5877a9d6255068a0977eae6a9ff1d5ac + languageName: node + linkType: hard + +"jest-pnp-resolver@npm:^1.2.2": + version: 1.2.3 + resolution: "jest-pnp-resolver@npm:1.2.3" + peerDependencies: + jest-resolve: "*" + peerDependenciesMeta: + jest-resolve: + optional: true + checksum: 86eec0c78449a2de733a6d3e316d49461af6a858070e113c97f75fb742a48c2396ea94150cbca44159ffd4a959f743a47a8b37a792ef6fdad2cf0a5cba973fac + languageName: node + linkType: hard + +"jest-regex-util@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-regex-util@npm:29.6.3" + checksum: 4e33fb16c4f42111159cafe26397118dcfc4cf08bc178a67149fb05f45546a91928b820894572679d62559839d0992e21080a1527faad65daaae8743a5705a3b + languageName: node + linkType: hard + +"jest-resolve-dependencies@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve-dependencies@npm:29.7.0" + dependencies: + jest-regex-util: "npm:^29.6.3" + jest-snapshot: "npm:^29.7.0" + checksum: b6e9ad8ae5b6049474118ea6441dfddd385b6d1fc471db0136f7c8fbcfe97137a9665e4f837a9f49f15a29a1deb95a14439b7aec812f3f99d08f228464930f0d + languageName: node + linkType: hard + +"jest-resolve@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve@npm:29.7.0" + dependencies: + chalk: "npm:^4.0.0" + graceful-fs: "npm:^4.2.9" + jest-haste-map: "npm:^29.7.0" + jest-pnp-resolver: "npm:^1.2.2" + jest-util: "npm:^29.7.0" + jest-validate: "npm:^29.7.0" + resolve: "npm:^1.20.0" + resolve.exports: "npm:^2.0.0" + slash: "npm:^3.0.0" + checksum: 59da5c9c5b50563e959a45e09e2eace783d7f9ac0b5dcc6375dea4c0db938d2ebda97124c8161310082760e8ebbeff9f6b177c15ca2f57fb424f637a5d2adb47 + languageName: node + linkType: hard + +"jest-runner@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runner@npm:29.7.0" + dependencies: + "@jest/console": "npm:^29.7.0" + "@jest/environment": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + emittery: "npm:^0.13.1" + graceful-fs: "npm:^4.2.9" + jest-docblock: "npm:^29.7.0" + jest-environment-node: "npm:^29.7.0" + jest-haste-map: "npm:^29.7.0" + jest-leak-detector: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-resolve: "npm:^29.7.0" + jest-runtime: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-watcher: "npm:^29.7.0" + jest-worker: "npm:^29.7.0" + p-limit: "npm:^3.1.0" + source-map-support: "npm:0.5.13" + checksum: 2194b4531068d939f14c8d3274fe5938b77fa73126aedf9c09ec9dec57d13f22c72a3b5af01ac04f5c1cf2e28d0ac0b4a54212a61b05f10b5d6b47f2a1097bb4 + languageName: node + linkType: hard + +"jest-runtime@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runtime@npm:29.7.0" + dependencies: + "@jest/environment": "npm:^29.7.0" + "@jest/fake-timers": "npm:^29.7.0" + "@jest/globals": "npm:^29.7.0" + "@jest/source-map": "npm:^29.6.3" + "@jest/test-result": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + cjs-module-lexer: "npm:^1.0.0" + collect-v8-coverage: "npm:^1.0.0" + glob: "npm:^7.1.3" + graceful-fs: "npm:^4.2.9" + jest-haste-map: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-mock: "npm:^29.7.0" + jest-regex-util: "npm:^29.6.3" + jest-resolve: "npm:^29.7.0" + jest-snapshot: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + slash: "npm:^3.0.0" + strip-bom: "npm:^4.0.0" + checksum: 7cd89a1deda0bda7d0941835434e44f9d6b7bd50b5c5d9b0fc9a6c990b2d4d2cab59685ab3cb2850ed4cc37059f6de903af5a50565d7f7f1192a77d3fd6dd2a6 + languageName: node + linkType: hard + +"jest-snapshot@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-snapshot@npm:29.7.0" + dependencies: + "@babel/core": "npm:^7.11.6" + "@babel/generator": "npm:^7.7.2" + "@babel/plugin-syntax-jsx": "npm:^7.7.2" + "@babel/plugin-syntax-typescript": "npm:^7.7.2" + "@babel/types": "npm:^7.3.3" + "@jest/expect-utils": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + babel-preset-current-node-syntax: "npm:^1.0.0" + chalk: "npm:^4.0.0" + expect: "npm:^29.7.0" + graceful-fs: "npm:^4.2.9" + jest-diff: "npm:^29.7.0" + jest-get-type: "npm:^29.6.3" + jest-matcher-utils: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + natural-compare: "npm:^1.4.0" + pretty-format: "npm:^29.7.0" + semver: "npm:^7.5.3" + checksum: 6e9003c94ec58172b4a62864a91c0146513207bedf4e0a06e1e2ac70a4484088a2683e3a0538d8ea913bcfd53dc54a9b98a98cdfa562e7fe1d1339aeae1da570 + languageName: node + linkType: hard + +"jest-util@npm:^29.0.0, jest-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-util@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + ci-info: "npm:^3.2.0" + graceful-fs: "npm:^4.2.9" + picomatch: "npm:^2.2.3" + checksum: bc55a8f49fdbb8f51baf31d2a4f312fb66c9db1483b82f602c9c990e659cdd7ec529c8e916d5a89452ecbcfae4949b21b40a7a59d4ffc0cd813a973ab08c8150 + languageName: node + linkType: hard + +"jest-validate@npm:^27.3.1, jest-validate@npm:^27.4.2": + version: 27.5.1 + resolution: "jest-validate@npm:27.5.1" + dependencies: + "@jest/types": "npm:^27.5.1" + camelcase: "npm:^6.2.0" + chalk: "npm:^4.0.0" + jest-get-type: "npm:^27.5.1" + leven: "npm:^3.1.0" + pretty-format: "npm:^27.5.1" + checksum: ac5aa45b3ce798e450eda33764fa6d8c75f8794f92005e596928a78847b6013c5a6198ca2c2b4097a9315befb3868d12a52fbe7e6945cc85f81cb824d87c5c59 + languageName: node + linkType: hard + +"jest-validate@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-validate@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + camelcase: "npm:^6.2.0" + chalk: "npm:^4.0.0" + jest-get-type: "npm:^29.6.3" + leven: "npm:^3.1.0" + pretty-format: "npm:^29.7.0" + checksum: a20b930480c1ed68778c739f4739dce39423131bc070cd2505ddede762a5570a256212e9c2401b7ae9ba4d7b7c0803f03c5b8f1561c62348213aba18d9dbece2 + languageName: node + linkType: hard + +"jest-watcher@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-watcher@npm:29.7.0" + dependencies: + "@jest/test-result": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + ansi-escapes: "npm:^4.2.1" + chalk: "npm:^4.0.0" + emittery: "npm:^0.13.1" + jest-util: "npm:^29.7.0" + string-length: "npm:^4.0.1" + checksum: ec6c75030562fc8f8c727cb8f3b94e75d831fc718785abfc196e1f2a2ebc9a2e38744a15147170039628a853d77a3b695561ce850375ede3a4ee6037a2574567 + languageName: node + linkType: hard + +"jest-worker@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-worker@npm:29.7.0" + dependencies: + "@types/node": "npm:*" + jest-util: "npm:^29.7.0" + merge-stream: "npm:^2.0.0" + supports-color: "npm:^8.0.0" + checksum: 5570a3a005b16f46c131968b8a5b56d291f9bbb85ff4217e31c80bd8a02e7de799e59a54b95ca28d5c302f248b54cbffde2d177c2f0f52ffcee7504c6eabf660 + languageName: node + linkType: hard + +"jest@npm:^29.7.0": + version: 29.7.0 + resolution: "jest@npm:29.7.0" + dependencies: + "@jest/core": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + import-local: "npm:^3.0.2" + jest-cli: "npm:^29.7.0" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: f40eb8171cf147c617cc6ada49d062fbb03b4da666cb8d39cdbfb739a7d75eea4c3ca150fb072d0d273dce0c753db4d0467d54906ad0293f59c54f9db4a09d8b + languageName: node + linkType: hard + +"jiti@npm:^1.19.3": + version: 1.20.0 + resolution: "jiti@npm:1.20.0" + bin: + jiti: bin/jiti.js + checksum: e71999db5e436d38c32ca713c3688b5da2a686f264584d927dcca80a4eaece83af7dd32c047524e74084bb11bdfa148f5f91b7e9a0044b4803feffe3c2c30dbc + languageName: node + linkType: hard + +"jiti@npm:^1.20.0": + version: 1.21.0 + resolution: "jiti@npm:1.21.0" + bin: + jiti: bin/jiti.js + checksum: 7f361219fe6c7a5e440d5f1dba4ab763a5538d2df8708cdc22561cf25ea3e44b837687931fca7cdd8cdd9f567300e90be989dd1321650045012d8f9ed6aab07f + languageName: node + linkType: hard + +"jmespath@npm:^0.15.0": + version: 0.15.0 + resolution: "jmespath@npm:0.15.0" + checksum: 95fe1cabb4a12fc2b443a7aa9e85dca52a87437038276765fc54bfbb651a03f5f739266c0b3520531e7cf67986f716308edad8fadb8fbc26bf82a146f881d2e3 + languageName: node + linkType: hard + +"joycon@npm:^3.0.0, joycon@npm:^3.1.1": + version: 3.1.1 + resolution: "joycon@npm:3.1.1" + checksum: 131fb1e98c9065d067fd49b6e685487ac4ad4d254191d7aa2c9e3b90f4e9ca70430c43cad001602bdbdabcf58717d3b5c5b7461c1bd8e39478c8de706b3fe6ae + languageName: node + linkType: hard + +"js-sha3@npm:0.8.0": + version: 0.8.0 + resolution: "js-sha3@npm:0.8.0" + checksum: 43a21dc7967c871bd2c46cb1c2ae97441a97169f324e509f382d43330d8f75cf2c96dba7c806ab08a425765a9c847efdd4bffbac2d99c3a4f3de6c0218f40533 + languageName: node + linkType: hard + +"js-string-escape@npm:^1.0.1": + version: 1.0.1 + resolution: "js-string-escape@npm:1.0.1" + checksum: 2c33b9ff1ba6b84681c51ca0997e7d5a1639813c95d5b61cb7ad47e55cc28fa4a0b1935c3d218710d8e6bcee5d0cd8c44755231e3a4e45fc604534d9595a3628 + languageName: node + linkType: hard + +"js-tiktoken@npm:^1.0.7": + version: 1.0.7 + resolution: "js-tiktoken@npm:1.0.7" + dependencies: + base64-js: "npm:^1.5.1" + checksum: 9ef7073067ebf5ef32c0e439cdc897b9004ee02239eb83427df3c313869ea7d9aa366d8acb880f07d664c771603cfd8a41d0e640b68faa1ea7af44d099b05d7c + languageName: node + linkType: hard + +"js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed + languageName: node + linkType: hard + +"js-yaml@npm:4.1.0, js-yaml@npm:^4.0.0, js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f + languageName: node + linkType: hard + +"js-yaml@npm:^3.13.1, js-yaml@npm:^3.14.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: "npm:^1.0.7" + esprima: "npm:^4.0.0" + bin: + js-yaml: bin/js-yaml.js + checksum: 6746baaaeac312c4db8e75fa22331d9a04cccb7792d126ed8ce6a0bbcfef0cedaddd0c5098fade53db067c09fe00aa1c957674b4765610a8b06a5a189e46433b + languageName: node + linkType: hard + +"jsdom@npm:^22.1.0": + version: 22.1.0 + resolution: "jsdom@npm:22.1.0" + dependencies: + abab: "npm:^2.0.6" + cssstyle: "npm:^3.0.0" + data-urls: "npm:^4.0.0" + decimal.js: "npm:^10.4.3" + domexception: "npm:^4.0.0" + form-data: "npm:^4.0.0" + html-encoding-sniffer: "npm:^3.0.0" + http-proxy-agent: "npm:^5.0.0" + https-proxy-agent: "npm:^5.0.1" + is-potential-custom-element-name: "npm:^1.0.1" + nwsapi: "npm:^2.2.4" + parse5: "npm:^7.1.2" + rrweb-cssom: "npm:^0.6.0" + saxes: "npm:^6.0.0" + symbol-tree: "npm:^3.2.4" + tough-cookie: "npm:^4.1.2" + w3c-xmlserializer: "npm:^4.0.0" + webidl-conversions: "npm:^7.0.0" + whatwg-encoding: "npm:^2.0.0" + whatwg-mimetype: "npm:^3.0.0" + whatwg-url: "npm:^12.0.1" + ws: "npm:^8.13.0" + xml-name-validator: "npm:^4.0.0" + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + checksum: a1c1501c611d1fe833e0a28796a234325aa09d4c597a9d8ccf6970004a9d946d261469502eadb555bdd7a55f5a2fbf3ce60c727cd99acb0d63f257fb9afcd33d + languageName: node + linkType: hard + +"jsesc@npm:^2.5.1": + version: 2.5.2 + resolution: "jsesc@npm:2.5.2" + bin: + jsesc: bin/jsesc + checksum: dbf59312e0ebf2b4405ef413ec2b25abb5f8f4d9bc5fb8d9f90381622ebca5f2af6a6aa9a8578f65903f9e33990a6dc798edd0ce5586894bf0e9e31803a1de88 + languageName: node + linkType: hard + +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 + languageName: node + linkType: hard + +"json-parse-better-errors@npm:^1.0.1": + version: 1.0.2 + resolution: "json-parse-better-errors@npm:1.0.2" + checksum: 2f1287a7c833e397c9ddd361a78638e828fc523038bb3441fd4fc144cfd2c6cd4963ffb9e207e648cf7b692600f1e1e524e965c32df5152120910e4903a47dcb + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^2.3.0": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3 + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^3.0.0": + version: 3.0.0 + resolution: "json-parse-even-better-errors@npm:3.0.0" + checksum: 128de17135e7af655ed83fc26dab0fe54faf43b3517fa73dcd997cce6e05a445932664f085ec6dbc219aeb0c592e53ef10d2d6dee4a8e9211ea901b8e6dd0b52 + languageName: node + linkType: hard + +"json-schema-ref-resolver@npm:^1.0.1": + version: 1.0.1 + resolution: "json-schema-ref-resolver@npm:1.0.1" + dependencies: + fast-deep-equal: "npm:^3.1.3" + checksum: aa89d88108c0109ae35b913c89c132fb50c00f3b99fc8a8309b524b9e3a6a77414f19a6a35a1253871462984cbabc74279ebbd9bf103c6629fb7b37c9fb59bcf + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce + languageName: node + linkType: hard + +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 71e30015d7f3d6dc1c316d6298047c8ef98a06d31ad064919976583eb61e1018a60a0067338f0f79cabc00d84af3fcc489bd48ce8a46ea165d9541ba17fb30c6 + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5 + languageName: node + linkType: hard + +"json-stringify-safe@npm:^5.0.1": + version: 5.0.1 + resolution: "json-stringify-safe@npm:5.0.1" + checksum: 7dbf35cd0411d1d648dceb6d59ce5857ec939e52e4afc37601aa3da611f0987d5cee5b38d58329ceddf3ed48bd7215229c8d52059ab01f2444a338bf24ed0f37 + languageName: node + linkType: hard + +"json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 5a04eed94810fa55c5ea138b2f7a5c12b97c3750bc63d11e511dcecbfef758003861522a070c2272764ee0f4e3e323862f386945aeb5b85b87ee43f084ba586c + languageName: node + linkType: hard + +"jsonc-parser@npm:^3.2.0": + version: 3.2.0 + resolution: "jsonc-parser@npm:3.2.0" + checksum: 5a12d4d04dad381852476872a29dcee03a57439574e4181d91dca71904fcdcc5e8e4706c0a68a2c61ad9810e1e1c5806b5100d52d3e727b78f5cdc595401045b + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" + dependencies: + graceful-fs: "npm:^4.1.6" + universalify: "npm:^2.0.0" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 4f95b5e8a5622b1e9e8f33c96b7ef3158122f595998114d1e7f03985649ea99cb3cd99ce1ed1831ae94c8c8543ab45ebd044207612f31a56fd08462140e46865 + languageName: node + linkType: hard + +"jsonparse@npm:^1.2.0": + version: 1.3.1 + resolution: "jsonparse@npm:1.3.1" + checksum: 89bc68080cd0a0e276d4b5ab1b79cacd68f562467008d176dc23e16e97d4efec9e21741d92ba5087a8433526a45a7e6a9d5ef25408696c402ca1cfbc01a90bf0 + languageName: node + linkType: hard + +"jsonpointer@npm:^5.0.0": + version: 5.0.1 + resolution: "jsonpointer@npm:5.0.1" + checksum: 89929e58b400fcb96928c0504fcf4fc3f919d81e9543ceb055df125538470ee25290bb4984251e172e6ef8fcc55761eb998c118da763a82051ad89d4cb073fe7 + languageName: node + linkType: hard + +"jsonwebtoken@npm:9.0.1": + version: 9.0.1 + resolution: "jsonwebtoken@npm:9.0.1" + dependencies: + jws: "npm:^3.2.2" + lodash: "npm:^4.17.21" + ms: "npm:^2.1.1" + semver: "npm:^7.3.8" + checksum: 3508912a0fb5ad06a09a79f655681f6fc389376fb8e7fdcaf367fbdd02e9fb5e11a7a4ff715cbe44d8be0e7a99319b03a7d34ef5daede61cf1f8d3519bbb08d6 + languageName: node + linkType: hard + +"jsonwebtoken@npm:^9.0.0": + version: 9.0.2 + resolution: "jsonwebtoken@npm:9.0.2" + dependencies: + jws: "npm:^3.2.2" + lodash.includes: "npm:^4.3.0" + lodash.isboolean: "npm:^3.0.3" + lodash.isinteger: "npm:^4.0.4" + lodash.isnumber: "npm:^3.0.3" + lodash.isplainobject: "npm:^4.0.6" + lodash.isstring: "npm:^4.0.1" + lodash.once: "npm:^4.0.0" + ms: "npm:^2.1.1" + semver: "npm:^7.5.4" + checksum: d287a29814895e866db2e5a0209ce730cbc158441a0e5a70d5e940eb0d28ab7498c6bf45029cc8b479639bca94056e9a7f254e2cdb92a2f5750c7f358657a131 + languageName: node + linkType: hard + +"junk@npm:^4.0.0": + version: 4.0.1 + resolution: "junk@npm:4.0.1" + checksum: 091117a5dcf65b19a3e4b8506d95d6ab152b5b5fe6f10e8998de950b0f9d689f14d9b63bb07863b8c86c18511fd1b9a21e9a16e686246436558338ed2e8a4548 + languageName: node + linkType: hard + +"jwa@npm:^1.4.1": + version: 1.4.1 + resolution: "jwa@npm:1.4.1" + dependencies: + buffer-equal-constant-time: "npm:1.0.1" + ecdsa-sig-formatter: "npm:1.0.11" + safe-buffer: "npm:^5.0.1" + checksum: 5c533540bf38702e73cf14765805a94027c66a0aa8b16bc3e89d8d905e61a4ce2791e87e21be97d1293a5ee9d4f3e5e47737e671768265ca4f25706db551d5e9 + languageName: node + linkType: hard + +"jws@npm:^3.2.2": + version: 3.2.2 + resolution: "jws@npm:3.2.2" + dependencies: + jwa: "npm:^1.4.1" + safe-buffer: "npm:^5.0.1" + checksum: e770704533d92df358adad7d1261fdecad4d7b66fa153ba80d047e03ca0f1f73007ce5ed3fbc04d2eba09ba6e7e6e645f351e08e5ab51614df1b0aa4f384dfff + languageName: node + linkType: hard + +"jwt-decode@npm:3.1.2": + version: 3.1.2 + resolution: "jwt-decode@npm:3.1.2" + checksum: a951547946b5e8b1d9df818152d6b1dbaf13eebb3a6e6daceedf888968f5d255959852c8188aae2c825dc9104a99d25cb6c23f25d76545d1aa0315b968b6912e + languageName: node + linkType: hard + +"keep-func-props@npm:^4.0.0": + version: 4.0.1 + resolution: "keep-func-props@npm:4.0.1" + dependencies: + mimic-fn: "npm:^4.0.0" + checksum: 7e45c7bcdfdd187bea7dec224f3f0cf03738f6896805ee67670b23b3b990ff8ca4dc9a04998fb2cea7129af57ab8cff40192348cd713093755dfef2fdffbf40c + languageName: node + linkType: hard + +"keyv@npm:^4.5.3": + version: 4.5.3 + resolution: "keyv@npm:4.5.3" + dependencies: + json-buffer: "npm:3.0.1" + checksum: 7d3fc0469962bdff75ce92402b216a23d146e0caad011424947b32b95ffc4b91df12b1206026e6e945e7f80b3729a3109c0c3984f23038d738d355491179dd79 + languageName: node + linkType: hard + +"kind-of@npm:^3.0.2, kind-of@npm:^3.0.3, kind-of@npm:^3.2.0": + version: 3.2.2 + resolution: "kind-of@npm:3.2.2" + dependencies: + is-buffer: "npm:^1.1.5" + checksum: 7e34bc29d4b02c997f92f080de34ebb92033a96736bbb0bb2410e033a7e5ae6571f1fa37b2d7710018f95361473b816c604234197f4f203f9cf149d8ef1574d9 + languageName: node + linkType: hard + +"kind-of@npm:^4.0.0": + version: 4.0.0 + resolution: "kind-of@npm:4.0.0" + dependencies: + is-buffer: "npm:^1.1.5" + checksum: d6c44c75ee36898142dfc7106afbd50593216c37f96acb81a7ab33ca1a6938ce97d5692b8fc8fccd035f83811a9d97749d68771116441a48eedd0b68e2973165 + languageName: node + linkType: hard + +"kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 61cdff9623dabf3568b6445e93e31376bee1cdb93f8ba7033d86022c2a9b1791a1d9510e026e6465ebd701a6dd2f7b0808483ad8838341ac52f003f512e0b4c4 + languageName: node + linkType: hard + +"kleur@npm:^3.0.3": + version: 3.0.3 + resolution: "kleur@npm:3.0.3" + checksum: cd3a0b8878e7d6d3799e54340efe3591ca787d9f95f109f28129bdd2915e37807bf8918bb295ab86afb8c82196beec5a1adcaf29042ce3f2bd932b038fe3aa4b + languageName: node + linkType: hard + +"knip@npm:^2.33.4": + version: 2.33.4 + resolution: "knip@npm:2.33.4" + dependencies: + "@ericcornelissen/bash-parser": "npm:^0.5.2" + "@npmcli/map-workspaces": "npm:^3.0.4" + "@pkgjs/parseargs": "npm:0.11.0" + "@pnpm/logger": "npm:5.0.0" + "@pnpm/workspace.pkgs-graph": "npm:2.0.7" + "@snyk/github-codeowners": "npm:^1.1.0" + chalk: "npm:^5.2.0" + easy-table: "npm:^1.2.0" + fast-glob: "npm:^3.2.12" + globby: "npm:^13.1.3" + jiti: "npm:^1.19.3" + js-yaml: "npm:^4.1.0" + micromatch: "npm:^4.0.5" + minimist: "npm:^1.2.8" + pretty-ms: "npm:^8.0.0" + strip-json-comments: "npm:^5.0.0" + summary: "npm:^2.1.0" + typescript: "npm:^5.0.2" + zod: "npm:3.22.4" + zod-validation-error: "npm:^1.5.0" + bin: + knip: dist/cli.js + checksum: 3c136fbc610fc4edf9b9f8a25add5ddfb5f6cadd5a0b79f50f559944ff2f0cbb0a65cc32683588da770736aa39e34620266e659ef99f5896e85065cb0426c39b + languageName: node + linkType: hard + +"kuler@npm:^2.0.0": + version: 2.0.0 + resolution: "kuler@npm:2.0.0" + checksum: 0a4e99d92ca373f8f74d1dc37931909c4d0d82aebc94cf2ba265771160fc12c8df34eaaac80805efbda367e2795cb1f1dd4c3d404b6b1cf38aec94035b503d2d + languageName: node + linkType: hard + +"lambda-local@npm:2.1.2": + version: 2.1.2 + resolution: "lambda-local@npm:2.1.2" + dependencies: + commander: "npm:^10.0.1" + dotenv: "npm:^16.3.1" + winston: "npm:^3.10.0" + bin: + lambda-local: build/cli.js + checksum: 7e4d375a504c31a7f002f812606610e39ddf999e58e0292210bde6a39fbe432299cffbe4170a0780e0fafa356f75faecfe60c6b9ddceadd24061189bc0aa50c7 + languageName: node + linkType: hard + +"latest-version@npm:^7.0.0": + version: 7.0.0 + resolution: "latest-version@npm:7.0.0" + dependencies: + package-json: "npm:^8.1.0" + checksum: 68045f5e419e005c12e595ae19687dd88317dd0108b83a8773197876622c7e9d164fe43aacca4f434b2cba105c92848b89277f658eabc5d50e81fb743bbcddb1 + languageName: node + linkType: hard + +"lazystream@npm:^1.0.0": + version: 1.0.1 + resolution: "lazystream@npm:1.0.1" + dependencies: + readable-stream: "npm:^2.0.5" + checksum: ea4e509a5226ecfcc303ba6782cc269be8867d372b9bcbd625c88955df1987ea1a20da4643bf9270336415a398d33531ebf0d5f0d393b9283dc7c98bfcbd7b69 + languageName: node + linkType: hard + +"leven@npm:2.1.0": + version: 2.1.0 + resolution: "leven@npm:2.1.0" + checksum: e685243900aad7e854212001c9b7fe6d0806081e184d5077a561a91d07425852e8b7d1edf76b948f4be520b64e0015960be3a5f3e9acb0bec75a0e4134b422df + languageName: node + linkType: hard + +"leven@npm:^3.1.0, leven@npm:^3.1.0 < 4": + version: 3.1.0 + resolution: "leven@npm:3.1.0" + checksum: cd778ba3fbab0f4d0500b7e87d1f6e1f041507c56fdcd47e8256a3012c98aaee371d4c15e0a76e0386107af2d42e2b7466160a2d80688aaa03e66e49949f42df + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: "npm:^1.2.1" + type-check: "npm:~0.4.0" + checksum: effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e + languageName: node + linkType: hard + +"libsodium-wrappers@npm:^0.7.11": + version: 0.7.13 + resolution: "libsodium-wrappers@npm:0.7.13" + dependencies: + libsodium: "npm:^0.7.13" + checksum: 3de2c09a41991832333b379f4eefadd3113abb216c5be8d141eb053bbe904a4d529c01a4bbb8f46c1e2a987c3de1fb9adbb0cf7980155822e06504a38dc16cbb + languageName: node + linkType: hard + +"libsodium@npm:^0.7.13": + version: 0.7.13 + resolution: "libsodium@npm:0.7.13" + checksum: 91a65df81e123d8374b1dcfc1214970203139b4ac75c8032cc2ca390c6173f456d15dbdbf8b79115337086fc2f5a3faa8f96625d909a788125b6ead5894cd5f5 + languageName: node + linkType: hard + +"light-my-request@npm:^5.6.1": + version: 5.11.0 + resolution: "light-my-request@npm:5.11.0" + dependencies: + cookie: "npm:^0.5.0" + process-warning: "npm:^2.0.0" + set-cookie-parser: "npm:^2.4.1" + checksum: ad5512b5216f2095409b54daf901f714f76004e4c8acdaa1ec3aa2ffde7ddf11ac249f02a87344d766bbad59eb2732acfe3ee5bb7e8ad5fc71057ef0d4d3be25 + languageName: node + linkType: hard + +"lilconfig@npm:2.1.0": + version: 2.1.0 + resolution: "lilconfig@npm:2.1.0" + checksum: 64645641aa8d274c99338e130554abd6a0190533c0d9eb2ce7ebfaf2e05c7d9961f3ffe2bfa39efd3b60c521ba3dd24fa236fe2775fc38501bf82bf49d4678b8 + languageName: node + linkType: hard + +"lines-and-columns@npm:^1.1.6": + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 3da6ee62d4cd9f03f5dc90b4df2540fb85b352081bee77fe4bbcd12c9000ead7f35e0a38b8d09a9bb99b13223446dd8689ff3c4959807620726d788701a83d2d + languageName: node + linkType: hard + +"linkify-it@npm:^4.0.1": + version: 4.0.1 + resolution: "linkify-it@npm:4.0.1" + dependencies: + uc.micro: "npm:^1.0.1" + checksum: f1949ee2c7c2979c4f80c8c08f507d813f50775ebc5adfdb7ee662f28e0ee53dbd4a329d5231be67414405fc60d4e99b37536d6949702d311fe509a6bcbcf4a6 + languageName: node + linkType: hard + +"lint-staged@npm:^13.1.0": + version: 13.3.0 + resolution: "lint-staged@npm:13.3.0" + dependencies: + chalk: "npm:5.3.0" + commander: "npm:11.0.0" + debug: "npm:4.3.4" + execa: "npm:7.2.0" + lilconfig: "npm:2.1.0" + listr2: "npm:6.6.1" + micromatch: "npm:4.0.5" + pidtree: "npm:0.6.0" + string-argv: "npm:0.3.2" + yaml: "npm:2.3.1" + bin: + lint-staged: bin/lint-staged.js + checksum: 57ce70a3f05d779bd73a01a3dc8fc17a16ab5c220a77041b3d2147de3cfaba17692907fecc1426b85e0159c13814ec905a7be79171917d670a6d31d2de6bf24f + languageName: node + linkType: hard + +"listhen@npm:^1.5.5": + version: 1.5.5 + resolution: "listhen@npm:1.5.5" + dependencies: + "@parcel/watcher": "npm:^2.3.0" + "@parcel/watcher-wasm": "npm:2.3.0" + citty: "npm:^0.1.4" + clipboardy: "npm:^3.0.0" + consola: "npm:^3.2.3" + defu: "npm:^6.1.2" + get-port-please: "npm:^3.1.1" + h3: "npm:^1.8.1" + http-shutdown: "npm:^1.2.2" + jiti: "npm:^1.20.0" + mlly: "npm:^1.4.2" + node-forge: "npm:^1.3.1" + pathe: "npm:^1.1.1" + std-env: "npm:^3.4.3" + ufo: "npm:^1.3.0" + untun: "npm:^0.1.2" + uqr: "npm:^0.1.2" + bin: + listen: bin/listhen.mjs + listhen: bin/listhen.mjs + checksum: 84a8a6c0e0d347db3110af3f77aa86fba428fcec1e2cd53e17d0d8daf36edd8833c75a647b718e6cea723d452b0b2a78b2290d03c79315c52eda1f1984384bb2 + languageName: node + linkType: hard + +"listr2@npm:6.6.1": + version: 6.6.1 + resolution: "listr2@npm:6.6.1" + dependencies: + cli-truncate: "npm:^3.1.0" + colorette: "npm:^2.0.20" + eventemitter3: "npm:^5.0.1" + log-update: "npm:^5.0.1" + rfdc: "npm:^1.3.0" + wrap-ansi: "npm:^8.1.0" + peerDependencies: + enquirer: ">= 2.3.0 < 3" + peerDependenciesMeta: + enquirer: + optional: true + checksum: 2abfcd4346b8208e8d406cfe7a058cd10e3238f60de1ee53fa108a507b45b853ceb87e0d1d4ff229bbf6dd6e896262352e0c7a8895b8511cd55fe94304d3921e + languageName: node + linkType: hard + +"listr2@npm:7.0.2": + version: 7.0.2 + resolution: "listr2@npm:7.0.2" + dependencies: + cli-truncate: "npm:^3.1.0" + colorette: "npm:^2.0.20" + eventemitter3: "npm:^5.0.1" + log-update: "npm:^5.0.1" + rfdc: "npm:^1.3.0" + wrap-ansi: "npm:^8.1.0" + checksum: 37b6501be84ebea66dcce07c5f86c224aff0c01c9fb43f5055cc38a063030281d58198aad0aad481f174438309831ddf5f763b890e820cd7b7b4f4a5dfa229c9 + languageName: node + linkType: hard + +"load-json-file@npm:^5.2.0": + version: 5.3.0 + resolution: "load-json-file@npm:5.3.0" + dependencies: + graceful-fs: "npm:^4.1.15" + parse-json: "npm:^4.0.0" + pify: "npm:^4.0.1" + strip-bom: "npm:^3.0.0" + type-fest: "npm:^0.3.0" + checksum: d9dfb9e36c5c8356628f59036629aeed2c0876b1cda55bb1808be3e0d4a9c7009cfc75026c7d8927a847c016cb27cf4948eca28e19c65d952803a6fdac623eee + languageName: node + linkType: hard + +"load-json-file@npm:^6.2.0": + version: 6.2.0 + resolution: "load-json-file@npm:6.2.0" + dependencies: + graceful-fs: "npm:^4.1.15" + parse-json: "npm:^5.0.0" + strip-bom: "npm:^4.0.0" + type-fest: "npm:^0.6.0" + checksum: fcb46ef75bab917f37170ba76781a1690bf67144bb53931cb0ed8e4aa20ca439e9c354fcf3594aed531f47dbeb4a49800acab7fdffd553c402ac40c987706d7b + languageName: node + linkType: hard + +"locate-path@npm:7.2.0, locate-path@npm:^7.0.0, locate-path@npm:^7.1.0": + version: 7.2.0 + resolution: "locate-path@npm:7.2.0" + dependencies: + p-locate: "npm:^6.0.0" + checksum: 139e8a7fe11cfbd7f20db03923cacfa5db9e14fa14887ea121345597472b4a63c1a42a8a5187defeeff6acf98fd568da7382aa39682d38f0af27433953a97751 + languageName: node + linkType: hard + +"locate-path@npm:^3.0.0": + version: 3.0.0 + resolution: "locate-path@npm:3.0.0" + dependencies: + p-locate: "npm:^3.0.0" + path-exists: "npm:^3.0.0" + checksum: 3db394b7829a7fe2f4fbdd25d3c4689b85f003c318c5da4052c7e56eed697da8f1bce5294f685c69ff76e32cba7a33629d94396976f6d05fb7f4c755c5e2ae8b + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: "npm:^4.1.0" + checksum: 33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59 + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: "npm:^5.0.0" + checksum: d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3 + languageName: node + linkType: hard + +"lodash-es@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash-es@npm:4.17.21" + checksum: fb407355f7e6cd523a9383e76e6b455321f0f153a6c9625e21a8827d10c54c2a2341bd2ae8d034358b60e07325e1330c14c224ff582d04612a46a4f0479ff2f2 + languageName: node + linkType: hard + +"lodash.camelcase@npm:^4.3.0": + version: 4.3.0 + resolution: "lodash.camelcase@npm:4.3.0" + checksum: fcba15d21a458076dd309fce6b1b4bf611d84a0ec252cb92447c948c533ac250b95d2e00955801ebc367e5af5ed288b996d75d37d2035260a937008e14eaf432 + languageName: node + linkType: hard + +"lodash.curry@npm:^4.1.1": + version: 4.1.1 + resolution: "lodash.curry@npm:4.1.1" + checksum: f0431947dc9236df879fc13eb40c31a2839c958bd0eaa39170a5758c25a7d85d461716a851ab45a175371950b283480615cdd4b07fb0dd1afff7a2914a90696f + languageName: node + linkType: hard + +"lodash.defaults@npm:^4.2.0": + version: 4.2.0 + resolution: "lodash.defaults@npm:4.2.0" + checksum: d5b77aeb702caa69b17be1358faece33a84497bcca814897383c58b28a2f8dfc381b1d9edbec239f8b425126a3bbe4916223da2a576bb0411c2cefd67df80707 + languageName: node + linkType: hard + +"lodash.flatten@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.flatten@npm:4.4.0" + checksum: 97e8f0d6b61fe4723c02ad0c6e67e51784c4a2c48f56ef283483e556ad01594cf9cec9c773e177bbbdbdb5d19e99b09d2487cb6b6e5dc405c2693e93b125bd3a + languageName: node + linkType: hard + +"lodash.includes@npm:^4.3.0": + version: 4.3.0 + resolution: "lodash.includes@npm:4.3.0" + checksum: 7ca498b9b75bf602d04e48c0adb842dfc7d90f77bcb2a91a2b2be34a723ad24bc1c8b3683ec6b2552a90f216c723cdea530ddb11a3320e08fa38265703978f4b + languageName: node + linkType: hard + +"lodash.isarguments@npm:^3.1.0": + version: 3.1.0 + resolution: "lodash.isarguments@npm:3.1.0" + checksum: 5e8f95ba10975900a3920fb039a3f89a5a79359a1b5565e4e5b4310ed6ebe64011e31d402e34f577eca983a1fc01ff86c926e3cbe602e1ddfc858fdd353e62d8 + languageName: node + linkType: hard + +"lodash.isboolean@npm:^3.0.3": + version: 3.0.3 + resolution: "lodash.isboolean@npm:3.0.3" + checksum: 0aac604c1ef7e72f9a6b798e5b676606042401dd58e49f051df3cc1e3adb497b3d7695635a5cbec4ae5f66456b951fdabe7d6b387055f13267cde521f10ec7f7 + languageName: node + linkType: hard + +"lodash.isempty@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.isempty@npm:4.4.0" + checksum: 6c7eaa0802398736809b9e8aed8b8ac1abca9be71788fd719ba9d7f5b4c23e8dc63b7f049df4131713dda30a2fdedc2f655268e9deb8cd5a985dfc934afca194 + languageName: node + linkType: hard + +"lodash.isfunction@npm:^3.0.9": + version: 3.0.9 + resolution: "lodash.isfunction@npm:3.0.9" + checksum: e88620922f5f104819496884779ca85bfc542efb2946df661ab3e2cd38da5c8375434c6adbedfc76dd3c2b04075d2ba8ec215cfdedf08ddd2e3c3467e8a26ccd + languageName: node + linkType: hard + +"lodash.isinteger@npm:^4.0.4": + version: 4.0.4 + resolution: "lodash.isinteger@npm:4.0.4" + checksum: 4c3e023a2373bf65bf366d3b8605b97ec830bca702a926939bcaa53f8e02789b6a176e7f166b082f9365bfec4121bfeb52e86e9040cb8d450e64c858583f61b7 + languageName: node + linkType: hard + +"lodash.isnumber@npm:^3.0.3": + version: 3.0.3 + resolution: "lodash.isnumber@npm:3.0.3" + checksum: 2d01530513a1ee4f72dd79528444db4e6360588adcb0e2ff663db2b3f642d4bb3d687051ae1115751ca9082db4fdef675160071226ca6bbf5f0c123dbf0aa12d + languageName: node + linkType: hard + +"lodash.isplainobject@npm:^4.0.6": + version: 4.0.6 + resolution: "lodash.isplainobject@npm:4.0.6" + checksum: afd70b5c450d1e09f32a737bed06ff85b873ecd3d3d3400458725283e3f2e0bb6bf48e67dbe7a309eb371a822b16a26cca4a63c8c52db3fc7dc9d5f9dd324cbb + languageName: node + linkType: hard + +"lodash.isstring@npm:^4.0.1": + version: 4.0.1 + resolution: "lodash.isstring@npm:4.0.1" + checksum: 09eaf980a283f9eef58ef95b30ec7fee61df4d6bf4aba3b5f096869cc58f24c9da17900febc8ffd67819b4e29de29793190e88dc96983db92d84c95fa85d1c92 + languageName: node + linkType: hard + +"lodash.kebabcase@npm:^4.1.1": + version: 4.1.1 + resolution: "lodash.kebabcase@npm:4.1.1" + checksum: da5d8f41dbb5bc723d4bf9203d5096ca8da804d6aec3d2b56457156ba6c8d999ff448d347ebd97490da853cb36696ea4da09a431499f1ee8deb17b094ecf4e33 + languageName: node + linkType: hard + +"lodash.memoize@npm:4.x": + version: 4.1.2 + resolution: "lodash.memoize@npm:4.1.2" + checksum: c8713e51eccc650422716a14cece1809cfe34bc5ab5e242b7f8b4e2241c2483697b971a604252807689b9dd69bfe3a98852e19a5b89d506b000b4187a1285df8 + languageName: node + linkType: hard + +"lodash.merge@npm:4.6.2, lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: 402fa16a1edd7538de5b5903a90228aa48eb5533986ba7fa26606a49db2572bf414ff73a2c9f5d5fd36b31c46a5d5c7e1527749c07cbcf965ccff5fbdf32c506 + languageName: node + linkType: hard + +"lodash.mergewith@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.mergewith@npm:4.6.2" + checksum: 4adbed65ff96fd65b0b3861f6899f98304f90fd71e7f1eb36c1270e05d500ee7f5ec44c02ef979b5ddbf75c0a0b9b99c35f0ad58f4011934c4d4e99e5200b3b5 + languageName: node + linkType: hard + +"lodash.once@npm:^4.0.0": + version: 4.1.1 + resolution: "lodash.once@npm:4.1.1" + checksum: 46a9a0a66c45dd812fcc016e46605d85ad599fe87d71a02f6736220554b52ffbe82e79a483ad40f52a8a95755b0d1077fba259da8bfb6694a7abbf4a48f1fc04 + languageName: node + linkType: hard + +"lodash.snakecase@npm:^4.1.1": + version: 4.1.1 + resolution: "lodash.snakecase@npm:4.1.1" + checksum: f0b3f2497eb20eea1a1cfc22d645ecaeb78ac14593eb0a40057977606d2f35f7aaff0913a06553c783b535aafc55b718f523f9eb78f8d5293f492af41002eaf9 + languageName: node + linkType: hard + +"lodash.startcase@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.startcase@npm:4.4.0" + checksum: bd82aa87a45de8080e1c5ee61128c7aee77bf7f1d86f4ff94f4a6d7438fc9e15e5f03374b947be577a93804c8ad6241f0251beaf1452bf716064eeb657b3a9f0 + languageName: node + linkType: hard + +"lodash.transform@npm:^4.6.0": + version: 4.6.0 + resolution: "lodash.transform@npm:4.6.0" + checksum: ad7f376b00dccff09f8597f19a171f2e074756178ae74887346876e10f6f0d83009460cc0793183cc5ee4e24a72ff86e68031c45b5aa2731c2f681a4dc93fe77 + languageName: node + linkType: hard + +"lodash.uniq@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.uniq@npm:4.5.0" + checksum: 262d400bb0952f112162a320cc4a75dea4f66078b9e7e3075ffbc9c6aa30b3e9df3cf20e7da7d566105e1ccf7804e4fbd7d804eee0b53de05d83f16ffbf41c5e + languageName: node + linkType: hard + +"lodash.upperfirst@npm:^4.3.1": + version: 4.3.1 + resolution: "lodash.upperfirst@npm:4.3.1" + checksum: 435625da4b3ee74e7a1367a780d9107ab0b13ef4359fc074b2a1a40458eb8d91b655af62f6795b7138d493303a98c0285340160341561d6896e4947e077fa975 + languageName: node + linkType: hard + +"lodash@npm:4.17.21, lodash@npm:^4.17.12, lodash@npm:^4.17.15, lodash@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c + languageName: node + linkType: hard + +"log-process-errors@npm:^8.0.0": + version: 8.0.0 + resolution: "log-process-errors@npm:8.0.0" + dependencies: + colors-option: "npm:^3.0.0" + figures: "npm:^4.0.0" + filter-obj: "npm:^3.0.0" + jest-validate: "npm:^27.4.2" + map-obj: "npm:^5.0.0" + moize: "npm:^6.1.0" + semver: "npm:^7.3.5" + checksum: de053ca80387a8cea92257b37c0f4aa2e67e4cf0f12452081d83340e49e145d45b33e1de0b2de5314763f37a95c0416f713894bee79c112d01ff91b06039abad + languageName: node + linkType: hard + +"log-symbols@npm:5.1.0, log-symbols@npm:^5.1.0": + version: 5.1.0 + resolution: "log-symbols@npm:5.1.0" + dependencies: + chalk: "npm:^5.0.0" + is-unicode-supported: "npm:^1.1.0" + checksum: c14f8567c6618a7f96209c4c4b9fb3b794187116904712f7b526e465a5c9535728aec983735a5bef919247d0e54b9b72b6680a7fb9fc72d76b945dac4865e669 + languageName: node + linkType: hard + +"log-update@npm:5.0.1, log-update@npm:^5.0.1": + version: 5.0.1 + resolution: "log-update@npm:5.0.1" + dependencies: + ansi-escapes: "npm:^5.0.0" + cli-cursor: "npm:^4.0.0" + slice-ansi: "npm:^5.0.0" + strip-ansi: "npm:^7.0.1" + wrap-ansi: "npm:^8.0.1" + checksum: 1050ea2027e80f32e132aace909987cb00c2719368c78b82ffca681a5b3f4020eeb5f4b4e310c47c35c6c36aff258c1d1bc51485ac44d6fdac9eb0a4275c539f + languageName: node + linkType: hard + +"logform@npm:^2.3.2, logform@npm:^2.4.0": + version: 2.6.0 + resolution: "logform@npm:2.6.0" + dependencies: + "@colors/colors": "npm:1.6.0" + "@types/triple-beam": "npm:^1.3.2" + fecha: "npm:^4.2.0" + ms: "npm:^2.1.1" + safe-stable-stringify: "npm:^2.3.1" + triple-beam: "npm:^1.3.0" + checksum: 6e02f8617a03155b2fce451bacf777a2c01da16d32c4c745b3ec85be6c3f2602f2a4953a8bd096441cb4c42c447b52318541d6b6bc335dce903cb9ad77a1749f + languageName: node + linkType: hard + +"long@npm:^2.4.0": + version: 2.4.0 + resolution: "long@npm:2.4.0" + checksum: 2560d6a299f2177b94ce300cc21fc15dbf72d9899ddac7bd10251468e1b4eabbce48463f651fea15cc4acf2c4775e3507767c58df73945d5d6ae4e12ac058796 + languageName: node + linkType: hard + +"long@npm:^5.0.0": + version: 5.2.3 + resolution: "long@npm:5.2.3" + checksum: 6a0da658f5ef683b90330b1af76f06790c623e148222da9d75b60e266bbf88f803232dd21464575681638894a84091616e7f89557aa087fd14116c0f4e0e43d9 + languageName: node + linkType: hard + +"lowercase-keys@npm:^3.0.0": + version: 3.0.0 + resolution: "lowercase-keys@npm:3.0.0" + checksum: ef62b9fa5690ab0a6e4ef40c94efce68e3ed124f583cc3be38b26ff871da0178a28b9a84ce0c209653bb25ca135520ab87fea7cd411a54ac4899cb2f30501430 + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.0, lru-cache@npm:^10.0.1, lru-cache@npm:^10.0.2": + version: 10.1.0 + resolution: "lru-cache@npm:10.1.0" + checksum: 778bc8b2626daccd75f24c4b4d10632496e21ba064b126f526c626fbdbc5b28c472013fccd45d7646b9e1ef052444824854aed617b59cd570d01a8b7d651fc1e + languageName: node + linkType: hard + +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: "npm:^3.0.2" + checksum: 89b2ef2ef45f543011e38737b8a8622a2f8998cddf0e5437174ef8f1f70a8b9d14a918ab3e232cb3ba343b7abddffa667f0b59075b2b80e6b4d63c3de6127482 + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: "npm:^4.0.0" + checksum: cb53e582785c48187d7a188d3379c181b5ca2a9c78d2bce3e7dee36f32761d1c42983da3fe12b55cb74e1779fa94cdc2e5367c028a9b35317184ede0c07a30a9 + languageName: node + linkType: hard + +"lru-cache@npm:^9.0.0, lru-cache@npm:^9.1.2": + version: 9.1.2 + resolution: "lru-cache@npm:9.1.2" + checksum: 886811ab451332c899c230274e7e51507c15e5b3b18f0b39fb55f558978d58799a0b1a50e04d60a448d8c970ff4e6ee718bb119083ca88abb78930284f1e0900 + languageName: node + linkType: hard + +"lru-cache@npm:^9.1.1 || ^10.0.0": + version: 10.0.1 + resolution: "lru-cache@npm:10.0.1" + checksum: 982dabfb227b9a2daf56d712ae0e72e01115a28c0a2068cd71277bca04568f3417bbf741c6c7941abc5c620fd8059e34f15607f90ebccbfa0a17533322d27a8e + languageName: node + linkType: hard + +"lru_map@npm:^0.3.3": + version: 0.3.3 + resolution: "lru_map@npm:0.3.3" + checksum: d861f14a142a4a74ebf8d3ad57f2e768a5b820db4100ae53eed1a64eb6350912332e6ebc87cb7415ad6d0cd8f3ce6d20beab9a5e6042ccb5996ea0067a220448 + languageName: node + linkType: hard + +"luxon@npm:^3.2.1": + version: 3.4.4 + resolution: "luxon@npm:3.4.4" + checksum: 02e26a0b039c11fd5b75e1d734c8f0332c95510f6a514a9a0991023e43fb233884da02d7f966823ffb230632a733fc86d4a4b1e63c3fbe00058b8ee0f8c728af + languageName: node + linkType: hard + +"macos-release@npm:^3.1.0": + version: 3.2.0 + resolution: "macos-release@npm:3.2.0" + checksum: b139d06e7eb681fb90515b38d0f2ae98cf6eff1896514d6318c3c99a6b1e650c7ab155ff388ca8070c2412569925b4bc05c940b90826d1e792ff0718428f03b3 + languageName: node + linkType: hard + +"magic-string@npm:^0.16.0": + version: 0.16.0 + resolution: "magic-string@npm:0.16.0" + dependencies: + vlq: "npm:^0.2.1" + checksum: 127e147c229c8c8ea25844fe1015c529698d18622b1609e89ef97fd250378f8ab40f4395227b5c6b99444459d85f4683c175bd48d2cee69fdf8a83b6a735de5a + languageName: node + linkType: hard + +"make-dir@npm:^3.0.0, make-dir@npm:^3.1.0": + version: 3.1.0 + resolution: "make-dir@npm:3.1.0" + dependencies: + semver: "npm:^6.0.0" + checksum: 56aaafefc49c2dfef02c5c95f9b196c4eb6988040cf2c712185c7fe5c99b4091591a7fc4d4eafaaefa70ff763a26f6ab8c3ff60b9e75ea19876f49b18667ecaa + languageName: node + linkType: hard + +"make-dir@npm:^4.0.0": + version: 4.0.0 + resolution: "make-dir@npm:4.0.0" + dependencies: + semver: "npm:^7.5.3" + checksum: 69b98a6c0b8e5c4fe9acb61608a9fbcfca1756d910f51e5dbe7a9e5cfb74fca9b8a0c8a0ffdf1294a740826c1ab4871d5bf3f62f72a3049e5eac6541ddffed68 + languageName: node + linkType: hard + +"make-error@npm:1.x, make-error@npm:^1.1.1": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: 171e458d86854c6b3fc46610cfacf0b45149ba043782558c6875d9f42f222124384ad0b468c92e996d815a8a2003817a710c0a160e49c1c394626f76fa45396f + languageName: node + linkType: hard + +"make-fetch-happen@npm:^13.0.0": + version: 13.0.0 + resolution: "make-fetch-happen@npm:13.0.0" + dependencies: + "@npmcli/agent": "npm:^2.0.0" + cacache: "npm:^18.0.0" + http-cache-semantics: "npm:^4.1.1" + is-lambda: "npm:^1.0.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^3.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^0.6.3" + promise-retry: "npm:^2.0.1" + ssri: "npm:^10.0.0" + checksum: 43b9f6dcbc6fe8b8604cb6396957c3698857a15ba4dbc38284f7f0e61f248300585ef1eb8cc62df54e9c724af977e45b5cdfd88320ef7f53e45070ed3488da55 + languageName: node + linkType: hard + +"makeerror@npm:1.0.12": + version: 1.0.12 + resolution: "makeerror@npm:1.0.12" + dependencies: + tmpl: "npm:1.0.5" + checksum: b0e6e599780ce6bab49cc413eba822f7d1f0dfebd1c103eaa3785c59e43e22c59018323cf9e1708f0ef5329e94a745d163fcbb6bff8e4c6742f9be9e86f3500c + languageName: node + linkType: hard + +"map-age-cleaner@npm:^0.1.3": + version: 0.1.3 + resolution: "map-age-cleaner@npm:0.1.3" + dependencies: + p-defer: "npm:^1.0.0" + checksum: 7495236c7b0950956c144fd8b4bc6399d4e78072a8840a4232fe1c4faccbb5eb5d842e5c0a56a60afc36d723f315c1c672325ca03c1b328650f7fcc478f385fd + languageName: node + linkType: hard + +"map-cache@npm:^0.2.2": + version: 0.2.2 + resolution: "map-cache@npm:0.2.2" + checksum: 05e3eb005c1b80b9f949ca007687640e8c5d0fc88dc45c3c3ab4902a3bec79d66a58f3e3b04d6985d90cd267c629c7b46c977e9c34433e8c11ecfcbb9f0fa290 + languageName: node + linkType: hard + +"map-obj@npm:^1.0.0": + version: 1.0.1 + resolution: "map-obj@npm:1.0.1" + checksum: ccca88395e7d38671ed9f5652ecf471ecd546924be2fb900836b9da35e068a96687d96a5f93dcdfa94d9a27d649d2f10a84595590f89a347fb4dda47629dcc52 + languageName: node + linkType: hard + +"map-obj@npm:^2.0.0": + version: 2.0.0 + resolution: "map-obj@npm:2.0.0" + checksum: e8e0f786fb944614475dab3d5d727a24c4e6f000e35e6b35ebd4c62fc3e336a773db1ae317bc658cc9563ce17225c658049206e6fe650ccd1232329c58b4436d + languageName: node + linkType: hard + +"map-obj@npm:^4.0.0": + version: 4.3.0 + resolution: "map-obj@npm:4.3.0" + checksum: 1c19e1c88513c8abdab25c316367154c6a0a6a0f77e3e8c391bb7c0e093aefed293f539d026dc013d86219e5e4c25f23b0003ea588be2101ccd757bacc12d43b + languageName: node + linkType: hard + +"map-obj@npm:^5.0.0": + version: 5.0.2 + resolution: "map-obj@npm:5.0.2" + checksum: 033f56d93ba08bb389be421819119765bb722ab9742a97b68688fde0d6d4dcbf79a665da9ee3273aef3987e0eb2ba6dab8dcd4ee883163b4a77b4d64e50d63c9 + languageName: node + linkType: hard + +"map-visit@npm:^1.0.0": + version: 1.0.0 + resolution: "map-visit@npm:1.0.0" + dependencies: + object-visit: "npm:^1.0.0" + checksum: fb3475e5311939a6147e339999113db607adc11c7c3cd3103e5e9dbf502898416ecba6b1c7c649c6d4d12941de00cee58b939756bdf20a9efe7d4fa5a5738b73 + languageName: node + linkType: hard + +"markdown-it@npm:^13.0.2": + version: 13.0.2 + resolution: "markdown-it@npm:13.0.2" + dependencies: + argparse: "npm:^2.0.1" + entities: "npm:~3.0.1" + linkify-it: "npm:^4.0.1" + mdurl: "npm:^1.0.1" + uc.micro: "npm:^1.0.5" + bin: + markdown-it: bin/markdown-it.js + checksum: 4fe0c41bc4c318c2901dc2923470c259cab137a4ab870001038877b942c9cc65072923e2d957f785de69a9da27c55657bd531607ccfd258246bd72a8deb8c2ee + languageName: node + linkType: hard + +"maxstache-stream@npm:^1.0.0": + version: 1.0.4 + resolution: "maxstache-stream@npm:1.0.4" + dependencies: + maxstache: "npm:^1.0.0" + pump: "npm:^1.0.0" + split2: "npm:^1.0.0" + through2: "npm:^2.0.0" + checksum: 08ff39b44fcd48c565f281b5c185a21a53e7fa0db4e066b9347e581c24599be6cf8f8f4fc475a99bf53929bb4cf294afb48dbc76f59d6b95347e546a04a6d846 + languageName: node + linkType: hard + +"maxstache@npm:^1.0.0": + version: 1.0.7 + resolution: "maxstache@npm:1.0.7" + checksum: 1c90dc2ff650edb15bc815eafaccbf7a1dc40bdce71389890aeae04af77c86dbf0ab40ea1d8e740a3376c9144af0f2a61b9febb6a3a88527c24bbe3bf0443804 + languageName: node + linkType: hard + +"md5-hex@npm:^3.0.1": + version: 3.0.1 + resolution: "md5-hex@npm:3.0.1" + dependencies: + blueimp-md5: "npm:^2.10.0" + checksum: ee2b4d8da16b527b3a3fe4d7a96720f43afd07b46a82d49421208b5a126235fb75cfb30b80d4029514772c8844273f940bddfbf4155c787f968f3be4060d01e4 + languageName: node + linkType: hard + +"md5@npm:^2.3.0": + version: 2.3.0 + resolution: "md5@npm:2.3.0" + dependencies: + charenc: "npm:0.0.2" + crypt: "npm:0.0.2" + is-buffer: "npm:~1.1.6" + checksum: 14a21d597d92e5b738255fbe7fe379905b8cb97e0a49d44a20b58526a646ec5518c337b817ce0094ca94d3e81a3313879c4c7b510d250c282d53afbbdede9110 + languageName: node + linkType: hard + +"mdn-data@npm:2.0.28": + version: 2.0.28 + resolution: "mdn-data@npm:2.0.28" + checksum: 20000932bc4cd1cde9cba4e23f08cc4f816398af4c15ec81040ed25421d6bf07b5cf6b17095972577fb498988f40f4cb589e3169b9357bb436a12d8e07e5ea7b + languageName: node + linkType: hard + +"mdn-data@npm:2.0.30": + version: 2.0.30 + resolution: "mdn-data@npm:2.0.30" + checksum: a2c472ea16cee3911ae742593715aa4c634eb3d4b9f1e6ada0902aa90df13dcbb7285d19435f3ff213ebaa3b2e0c0265c1eb0e3fb278fda7f8919f046a410cd9 + languageName: node + linkType: hard + +"mdurl@npm:^1.0.1": + version: 1.0.1 + resolution: "mdurl@npm:1.0.1" + checksum: ea8534341eb002aaa532a722daef6074cd8ca66202e10a2b4cda46722c1ebdb1da92197ac300bc953d3ef1bf41cd6561ef2cc69d82d5d0237dae00d4a61a4eee + languageName: node + linkType: hard + +"media-typer@npm:0.3.0": + version: 0.3.0 + resolution: "media-typer@npm:0.3.0" + checksum: d160f31246907e79fed398470285f21bafb45a62869dc469b1c8877f3f064f5eabc4bcc122f9479b8b605bc5c76187d7871cf84c4ee3ecd3e487da1993279928 + languageName: node + linkType: hard + +"mem@npm:^6.0.1": + version: 6.1.1 + resolution: "mem@npm:6.1.1" + dependencies: + map-age-cleaner: "npm:^0.1.3" + mimic-fn: "npm:^3.0.0" + checksum: aff503bd1f1cbd17df11844b4a91781d3264d87b6e959d40106553c06f5c257ad4560fa8de6bbb45bec9fb04f7c2cfddfac9679d34776f450f5da2bfcfc09885 + languageName: node + linkType: hard + +"mem@npm:^8.0.0": + version: 8.1.1 + resolution: "mem@npm:8.1.1" + dependencies: + map-age-cleaner: "npm:^0.1.3" + mimic-fn: "npm:^3.1.0" + checksum: 5829c404d024c1accaf76ebacbc7eae9b59e5ce5722d184aa24e8387a8097a499f6aa7e181021003c51eb87b2dcdc9a2270050c58753cce761de206643cba91c + languageName: node + linkType: hard + +"memoize-one@npm:^6.0.0": + version: 6.0.0 + resolution: "memoize-one@npm:6.0.0" + checksum: 45c88e064fd715166619af72e8cf8a7a17224d6edf61f7a8633d740ed8c8c0558a4373876c9b8ffc5518c2b65a960266adf403cc215cb1e90f7e262b58991f54 + languageName: node + linkType: hard + +"meow@npm:^8.0.0, meow@npm:^8.1.2": + version: 8.1.2 + resolution: "meow@npm:8.1.2" + dependencies: + "@types/minimist": "npm:^1.2.0" + camelcase-keys: "npm:^6.2.2" + decamelize-keys: "npm:^1.1.0" + hard-rejection: "npm:^2.1.0" + minimist-options: "npm:4.1.0" + normalize-package-data: "npm:^3.0.0" + read-pkg-up: "npm:^7.0.1" + redent: "npm:^3.0.0" + trim-newlines: "npm:^3.0.0" + type-fest: "npm:^0.18.0" + yargs-parser: "npm:^20.2.3" + checksum: 9a8d90e616f783650728a90f4ea1e5f763c1c5260369e6596b52430f877f4af8ecbaa8c9d952c93bbefd6d5bda4caed6a96a20ba7d27b511d2971909b01922a2 + languageName: node + linkType: hard + +"merge-descriptors@npm:1.0.1": + version: 1.0.1 + resolution: "merge-descriptors@npm:1.0.1" + checksum: b67d07bd44cfc45cebdec349bb6e1f7b077ee2fd5beb15d1f7af073849208cb6f144fe403e29a36571baf3f4e86469ac39acf13c318381e958e186b2766f54ec + languageName: node + linkType: hard + +"merge-options@npm:^3.0.4": + version: 3.0.4 + resolution: "merge-options@npm:3.0.4" + dependencies: + is-plain-obj: "npm:^2.1.0" + checksum: 02b5891ceef09b0b497b5a0154c37a71784e68ed71b14748f6fd4258ffd3fe4ecd5cb0fd6f7cae3954fd11e7686c5cb64486daffa63c2793bbe8b614b61c7055 + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 867fdbb30a6d58b011449b8885601ec1690c3e41c759ecd5a9d609094f7aed0096c37823ff4a7190ef0b8f22cc86beb7049196ff68c016e3b3c671d0dac91ce5 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb + languageName: node + linkType: hard + +"methods@npm:~1.1.2": + version: 1.1.2 + resolution: "methods@npm:1.1.2" + checksum: bdf7cc72ff0a33e3eede03708c08983c4d7a173f91348b4b1e4f47d4cdbf734433ad971e7d1e8c77247d9e5cd8adb81ea4c67b0a2db526b758b2233d7814b8b2 + languageName: node + linkType: hard + +"micro-api-client@npm:^3.3.0": + version: 3.3.0 + resolution: "micro-api-client@npm:3.3.0" + checksum: a9e3a37c6c8fde3d3125c1dd8ea015e52420fb116969bcc53ce969af0707e06ab32bd9815692bcdc05e44f7bd4584fffb7f073efbfecd4b4c7c48eb8c8f726ff + languageName: node + linkType: hard + +"micro-memoize@npm:^4.1.2": + version: 4.1.2 + resolution: "micro-memoize@npm:4.1.2" + checksum: 4b52dc1aa1c4b533f4008f6181f1e640e1bd1d4826881672b4f60f07ab6acc1deea073413e0488d589308e862abf6f03d1dcf7018bf08e751690268a462de4d3 + languageName: node + linkType: hard + +"micromatch@npm:4.0.5, micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": + version: 4.0.5 + resolution: "micromatch@npm:4.0.5" + dependencies: + braces: "npm:^3.0.2" + picomatch: "npm:^2.3.1" + checksum: 3d6505b20f9fa804af5d8c596cb1c5e475b9b0cd05f652c5b56141cf941bd72adaeb7a436fda344235cef93a7f29b7472efc779fcdb83b478eab0867b95cdeff + languageName: node + linkType: hard + +"micromatch@npm:^3.1.10": + version: 3.1.10 + resolution: "micromatch@npm:3.1.10" + dependencies: + arr-diff: "npm:^4.0.0" + array-unique: "npm:^0.3.2" + braces: "npm:^2.3.1" + define-property: "npm:^2.0.2" + extend-shallow: "npm:^3.0.2" + extglob: "npm:^2.0.4" + fragment-cache: "npm:^0.2.1" + kind-of: "npm:^6.0.2" + nanomatch: "npm:^1.2.9" + object.pick: "npm:^1.3.0" + regex-not: "npm:^1.0.0" + snapdragon: "npm:^0.8.1" + to-regex: "npm:^3.0.2" + checksum: 531a32e7ac92bef60657820202be71b63d0f945c08a69cc4c239c0b19372b751483d464a850a2e3a5ff6cc9060641e43d44c303af104c1a27493d137d8af017f + languageName: node + linkType: hard + +"mime-db@npm:1.52.0, mime-db@npm:^1.28.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 + languageName: node + linkType: hard + +"mime@npm:1.6.0": + version: 1.6.0 + resolution: "mime@npm:1.6.0" + bin: + mime: cli.js + checksum: b92cd0adc44888c7135a185bfd0dddc42c32606401c72896a842ae15da71eb88858f17669af41e498b463cd7eb998f7b48939a25b08374c7924a9c8a6f8a81b0 + languageName: node + linkType: hard + +"mime@npm:^3.0.0": + version: 3.0.0 + resolution: "mime@npm:3.0.0" + bin: + mime: cli.js + checksum: 402e792a8df1b2cc41cb77f0dcc46472b7944b7ec29cb5bbcd398624b6b97096728f1239766d3fdeb20551dd8d94738344c195a6ea10c4f906eb0356323b0531 + languageName: node + linkType: hard + +"mimic-fn@npm:^1.0.0": + version: 1.2.0 + resolution: "mimic-fn@npm:1.2.0" + checksum: ad55214aec6094c0af4c0beec1a13787556f8116ed88807cf3f05828500f21f93a9482326bcd5a077ae91e3e8795b4e76b5b4c8bb12237ff0e4043a365516cba + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: b26f5479d7ec6cc2bce275a08f146cf78f5e7b661b18114e2506dd91ec7ec47e7a25bf4360e5438094db0560bcc868079fb3b1fb3892b833c1ecbf63f80c95a4 + languageName: node + linkType: hard + +"mimic-fn@npm:^3.0.0, mimic-fn@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-fn@npm:3.1.0" + checksum: a07cdd8ed6490c2dff5b11f889b245d9556b80f5a653a552a651d17cff5a2d156e632d235106c2369f00cccef4071704589574cf3601bc1b1400a1f620dff067 + languageName: node + linkType: hard + +"mimic-fn@npm:^4.0.0": + version: 4.0.0 + resolution: "mimic-fn@npm:4.0.0" + checksum: de9cc32be9996fd941e512248338e43407f63f6d497abe8441fa33447d922e927de54d4cc3c1a3c6d652857acd770389d5a3823f311a744132760ce2be15ccbf + languageName: node + linkType: hard + +"mimic-response@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-response@npm:3.1.0" + checksum: 0d6f07ce6e03e9e4445bee655202153bdb8a98d67ee8dc965ac140900d7a2688343e6b4c9a72cfc9ef2f7944dfd76eef4ab2482eb7b293a68b84916bac735362 + languageName: node + linkType: hard + +"mimic-response@npm:^4.0.0": + version: 4.0.0 + resolution: "mimic-response@npm:4.0.0" + checksum: 761d788d2668ae9292c489605ffd4fad220f442fbae6832adce5ebad086d691e906a6d5240c290293c7a11e99fbdbbef04abbbed498bf8699a4ee0f31315e3fb + languageName: node + linkType: hard + +"min-indent@npm:^1.0.0": + version: 1.0.1 + resolution: "min-indent@npm:1.0.1" + checksum: 7e207bd5c20401b292de291f02913230cb1163abca162044f7db1d951fa245b174dc00869d40dd9a9f32a885ad6a5f3e767ee104cf278f399cb4e92d3f582d5c + languageName: node + linkType: hard + +"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-assert@npm:1.0.1" + checksum: 96730e5601cd31457f81a296f521eb56036e6f69133c0b18c13fe941109d53ad23a4204d946a0d638d7f3099482a0cec8c9bb6d642604612ce43ee536be3dddd + languageName: node + linkType: hard + +"minimalistic-crypto-utils@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-crypto-utils@npm:1.0.1" + checksum: 790ecec8c5c73973a4fbf2c663d911033e8494d5fb0960a4500634766ab05d6107d20af896ca2132e7031741f19888154d44b2408ada0852446705441383e9f8 + languageName: node + linkType: hard + +"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + languageName: node + linkType: hard + +"minimatch@npm:^5.0.1, minimatch@npm:^5.1.0": + version: 5.1.6 + resolution: "minimatch@npm:5.1.6" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 3defdfd230914f22a8da203747c42ee3c405c39d4d37ffda284dac5e45b7e1f6c49aa8be606509002898e73091ff2a3bbfc59c2c6c71d4660609f63aa92f98e3 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.0, minimatch@npm:^9.0.1": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 85f407dcd38ac3e180f425e86553911d101455ca3ad5544d6a7cec16286657e4f8a9aa6695803025c55e31e35a91a2252b5dc8e7d527211278b8b65b4dbd5eac + languageName: node + linkType: hard + +"minimist-options@npm:4.1.0": + version: 4.1.0 + resolution: "minimist-options@npm:4.1.0" + dependencies: + arrify: "npm:^1.0.1" + is-plain-obj: "npm:^1.1.0" + kind-of: "npm:^6.0.3" + checksum: 7871f9cdd15d1e7374e5b013e2ceda3d327a06a8c7b38ae16d9ef941e07d985e952c589e57213f7aa90a8744c60aed9524c0d85e501f5478382d9181f2763f54 + languageName: node + linkType: hard + +"minimist@npm:1.2.8, minimist@npm:^1.1.0, minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.5, minimist@npm:^1.2.6, minimist@npm:^1.2.8": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.4 + resolution: "minipass-fetch@npm:3.0.4" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^2.1.2" + dependenciesMeta: + encoding: + optional: true + checksum: 1b63c1f3313e88eeac4689f1b71c9f086598db9a189400e3ee960c32ed89e06737fa23976c9305c2d57464fb3fcdc12749d3378805c9d6176f5569b0d0ee8a75 + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: "npm:^3.0.0" + checksum: 2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: "npm:^3.0.0" + checksum: 298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3": + version: 7.0.4 + resolution: "minipass@npm:7.0.4" + checksum: 6c7370a6dfd257bf18222da581ba89a5eaedca10e158781232a8b5542a90547540b4b9b7e7f490e4cda43acfbd12e086f0453728ecf8c19e0ef6921bc5958ac5 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: "npm:^3.0.0" + yallist: "npm:^4.0.0" + checksum: 64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78 + languageName: node + linkType: hard + +"mixin-deep@npm:^1.2.0": + version: 1.3.2 + resolution: "mixin-deep@npm:1.3.2" + dependencies: + for-in: "npm:^1.0.2" + is-extendable: "npm:^1.0.1" + checksum: cb39ffb73c377222391af788b4c83d1a6cecb2d9fceb7015384f8deb46e151a9b030c21ef59a79cb524d4557e3f74c7248ab948a62a6e7e296b42644863d183b + languageName: node + linkType: hard + +"mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3": + version: 0.5.3 + resolution: "mkdirp-classic@npm:0.5.3" + checksum: 95371d831d196960ddc3833cc6907e6b8f67ac5501a6582f47dfae5eb0f092e9f8ce88e0d83afcae95d6e2b61a01741ba03714eeafb6f7a6e9dcc158ac85b168 + languageName: node + linkType: hard + +"mkdirp@npm:^0.5.1": + version: 0.5.6 + resolution: "mkdirp@npm:0.5.6" + dependencies: + minimist: "npm:^1.2.6" + bin: + mkdirp: bin/cmd.js + checksum: e2e2be789218807b58abced04e7b49851d9e46e88a2f9539242cc8a92c9b5c3a0b9bab360bd3014e02a140fc4fbc58e31176c408b493f8a2a6f4986bd7527b01 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: 46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf + languageName: node + linkType: hard + +"mlly@npm:^1.2.0, mlly@npm:^1.4.2": + version: 1.4.2 + resolution: "mlly@npm:1.4.2" + dependencies: + acorn: "npm:^8.10.0" + pathe: "npm:^1.1.1" + pkg-types: "npm:^1.0.3" + ufo: "npm:^1.3.0" + checksum: 905e3a704c7d3bcaad55f31d6efe9f680eab5be053ab7f8b299b8dbc027041f741fa6a93db9a3c461be2552632f3831b6c43c50af530f5fb2e9cd6273bc9d642 + languageName: node + linkType: hard + +"module-definition@npm:^5.0.1": + version: 5.0.1 + resolution: "module-definition@npm:5.0.1" + dependencies: + ast-module-types: "npm:^5.0.0" + node-source-walk: "npm:^6.0.1" + bin: + module-definition: bin/cli.js + checksum: 7fdaca717c523dbba6dbe8f8b2e53e18038c0fbbef8deedd497af05a19f8fa069939dec90df2d3c027ea942b28c1f7cc088911cc212859c192c247b470e0d1a9 + languageName: node + linkType: hard + +"module-details-from-path@npm:^1.0.3": + version: 1.0.3 + resolution: "module-details-from-path@npm:1.0.3" + checksum: 3d881f3410c142e4c2b1307835a2862ba04e5b3ec6e90655614a0ee2c4b299b4c1d117fb525d2435bf436990026f18d338a197b54ad6bd36252f465c336ff423 + languageName: node + linkType: hard + +"moize@npm:^6.1.0, moize@npm:^6.1.3": + version: 6.1.6 + resolution: "moize@npm:6.1.6" + dependencies: + fast-equals: "npm:^3.0.1" + micro-memoize: "npm:^4.1.2" + checksum: 5496569c25fd2eaf7a50707e62b5109bad9c3ca43166a82e52c7d3fed41d8b7312cabe3180e1c3c68b3785db06dbeee1bfc60b01b69c7389fae4ce3b3154e28f + languageName: node + linkType: hard + +"move-file@npm:^3.0.0": + version: 3.1.0 + resolution: "move-file@npm:3.1.0" + dependencies: + path-exists: "npm:^5.0.0" + checksum: 4c86cf82730f5770609adf9d8a58767ab16def48bf6610b0f895d51e95cf007fb3962beffd2771c171927607d2c009cdace35b36220b48a881b3c68a8fb60a96 + languageName: node + linkType: hard + +"mri@npm:1.1.4": + version: 1.1.4 + resolution: "mri@npm:1.1.4" + checksum: eb577c2ef60385aa287afdac777e536996f4fd3144250c201097e7ec121568139d482c92cb9a512f90e428d6dc3e9ba8e9de89bc204424cb96f187a4bdc465c1 + languageName: node + linkType: hard + +"mri@npm:^1.2.0": + version: 1.2.0 + resolution: "mri@npm:1.2.0" + checksum: a3d32379c2554cf7351db6237ddc18dc9e54e4214953f3da105b97dc3babe0deb3ffe99cf409b38ea47cc29f9430561ba6b53b24ab8f9ce97a4b50409e4a50e7 + languageName: node + linkType: hard + +"ms@npm:2.0.0": + version: 2.0.0 + resolution: "ms@npm:2.0.0" + checksum: f8fda810b39fd7255bbdc451c46286e549794fcc700dc9cd1d25658bbc4dc2563a5de6fe7c60f798a16a60c6ceb53f033cb353f493f0cf63e5199b702943159d + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: a437714e2f90dbf881b5191d35a6db792efbca5badf112f87b9e1c712aace4b4b9b742dd6537f3edf90fd6f684de897cec230abde57e87883766712ddda297cc + languageName: node + linkType: hard + +"ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1, ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 + languageName: node + linkType: hard + +"multiparty@npm:4.2.3": + version: 4.2.3 + resolution: "multiparty@npm:4.2.3" + dependencies: + http-errors: "npm:~1.8.1" + safe-buffer: "npm:5.2.1" + uid-safe: "npm:2.1.5" + checksum: e878138463b37890790dba7562a25f6bcc8796add095e6d1e777d9a507ef835325a2781451bf2685529feaf51ea28213c09c419fb9718fb26d7f241e16161df4 + languageName: node + linkType: hard + +"mute-stream@npm:0.0.7": + version: 0.0.7 + resolution: "mute-stream@npm:0.0.7" + checksum: c687cfe99289166fe17dcbd0cf49612c5d267410a7819b654a82df45016967d7b2b0b18b35410edef86de6bb089a00413557dc0182c5e78a4af50ba5d61edb42 + languageName: node + linkType: hard + +"nan@npm:^2.16.0": + version: 2.18.0 + resolution: "nan@npm:2.18.0" + dependencies: + node-gyp: "npm:latest" + checksum: 9209d80134fdb98c0afe35c1372d2b930a0a8d3c52706cb5e4257a27e9845c375f7a8daedadadec8d6403ca2eebb3b37d362ff5d1ec03249462abf65fef2a148 + languageName: node + linkType: hard + +"nanoid@npm:^3.3.7": + version: 3.3.7 + resolution: "nanoid@npm:3.3.7" + bin: + nanoid: bin/nanoid.cjs + checksum: e3fb661aa083454f40500473bb69eedb85dc160e763150b9a2c567c7e9ff560ce028a9f833123b618a6ea742e311138b591910e795614a629029e86e180660f3 + languageName: node + linkType: hard + +"nanomatch@npm:^1.2.9": + version: 1.2.13 + resolution: "nanomatch@npm:1.2.13" + dependencies: + arr-diff: "npm:^4.0.0" + array-unique: "npm:^0.3.2" + define-property: "npm:^2.0.2" + extend-shallow: "npm:^3.0.2" + fragment-cache: "npm:^0.2.1" + is-windows: "npm:^1.0.2" + kind-of: "npm:^6.0.2" + object.pick: "npm:^1.3.0" + regex-not: "npm:^1.0.0" + snapdragon: "npm:^0.8.1" + to-regex: "npm:^3.0.1" + checksum: 0f5cefa755ca2e20c86332821995effb24acb79551ddaf51c1b9112628cad234a0d8fd9ac6aa56ad1f8bfad6ff6ae86e851acb960943249d9fa44b091479953a + languageName: node + linkType: hard + +"napi-build-utils@npm:^1.0.1": + version: 1.0.2 + resolution: "napi-build-utils@npm:1.0.2" + checksum: 37fd2cd0ff2ad20073ce78d83fd718a740d568b225924e753ae51cb69d68f330c80544d487e5e5bd18e28702ed2ca469c2424ad948becd1862c1b0209542b2e9 + languageName: node + linkType: hard + +"napi-wasm@npm:^1.1.0": + version: 1.1.0 + resolution: "napi-wasm@npm:1.1.0" + checksum: 074df6b5b72698f07b39ca3c448a3fcbaf8e6e78521f0cb3aefd8c2f059d69eae0e3bfe367b4aa3df1976c25e351e4e52a359f22fb2c379eb6781bfa042f582b + languageName: node + linkType: hard + +"natural-compare-lite@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare-lite@npm:1.4.0" + checksum: f6cef26f5044515754802c0fc475d81426f3b90fe88c20fabe08771ce1f736ce46e0397c10acb569a4dd0acb84c7f1ee70676122f95d5bfdd747af3a6c6bbaa8 + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447 + languageName: node + linkType: hard + +"ndjson@npm:^2.0.0": + version: 2.0.0 + resolution: "ndjson@npm:2.0.0" + dependencies: + json-stringify-safe: "npm:^5.0.1" + minimist: "npm:^1.2.5" + readable-stream: "npm:^3.6.0" + split2: "npm:^3.0.0" + through2: "npm:^4.0.0" + bin: + ndjson: cli.js + checksum: b7f3de5e12e0466cfa3688a3ba6cedec0ab54bd821f1b16926c9ef7017983b131832430061d25dfcb635f65a254b535681eca213c6feb5d1958bee8d35a04cc9 + languageName: node + linkType: hard + +"negotiator@npm:0.6.3, negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: 3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2 + languageName: node + linkType: hard + +"neo-async@npm:^2.6.2": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: c2f5a604a54a8ec5438a342e1f356dff4bc33ccccdb6dc668d94fe8e5eccfc9d2c2eea6064b0967a767ba63b33763f51ccf2cd2441b461a7322656c1f06b3f5d + languageName: node + linkType: hard + +"nested-error-stacks@npm:^2.0.0, nested-error-stacks@npm:^2.1.0, nested-error-stacks@npm:^2.1.1": + version: 2.1.1 + resolution: "nested-error-stacks@npm:2.1.1" + checksum: feec00417e4778661cfbbe657e6add6ca9918dcc026cd697ac330b4a56a79e4882b36dde8abc138167566b1ce4c5baa17d2d4df727a96f8b96aebace1c3ffca7 + languageName: node + linkType: hard + +"netlify-cli@npm:^17.10.1": + version: 17.10.1 + resolution: "netlify-cli@npm:17.10.1" + dependencies: + "@bugsnag/js": "npm:7.20.2" + "@fastify/static": "npm:6.10.2" + "@netlify/blobs": "npm:6.3.1" + "@netlify/build": "npm:29.31.0" + "@netlify/build-info": "npm:7.11.3" + "@netlify/config": "npm:20.10.0" + "@netlify/edge-bundler": "npm:10.1.3" + "@netlify/local-functions-proxy": "npm:1.1.1" + "@netlify/zip-it-and-ship-it": "npm:9.28.1" + "@octokit/rest": "npm:19.0.13" + ansi-escapes: "npm:6.2.0" + ansi-styles: "npm:6.2.1" + ansi-to-html: "npm:0.7.2" + ascii-table: "npm:0.0.9" + backoff: "npm:2.5.0" + better-opn: "npm:3.0.2" + boxen: "npm:7.1.1" + chalk: "npm:5.2.0" + chokidar: "npm:3.5.3" + ci-info: "npm:3.8.0" + clean-deep: "npm:3.4.0" + commander: "npm:10.0.1" + comment-json: "npm:4.2.3" + concordance: "npm:5.0.4" + configstore: "npm:6.0.0" + content-type: "npm:1.0.5" + cookie: "npm:0.5.0" + copy-template-dir: "npm:1.4.0" + cron-parser: "npm:4.8.1" + debug: "npm:4.3.4" + decache: "npm:4.6.2" + dot-prop: "npm:7.2.0" + dotenv: "npm:16.0.3" + env-paths: "npm:3.0.0" + envinfo: "npm:7.8.1" + etag: "npm:1.8.1" + execa: "npm:5.1.1" + express: "npm:4.18.2" + express-logging: "npm:1.1.1" + extract-zip: "npm:2.0.1" + fastest-levenshtein: "npm:1.0.16" + fastify: "npm:4.17.0" + find-up: "npm:6.3.0" + flush-write-stream: "npm:2.0.0" + folder-walker: "npm:3.2.0" + from2-array: "npm:0.0.4" + fuzzy: "npm:0.1.3" + get-port: "npm:5.1.1" + gh-release-fetch: "npm:4.0.3" + git-repo-info: "npm:2.1.1" + gitconfiglocal: "npm:2.1.0" + hasbin: "npm:1.2.3" + hasha: "npm:5.2.2" + http-proxy: "npm:1.18.1" + http-proxy-middleware: "npm:2.0.6" + https-proxy-agent: "npm:5.0.1" + inquirer: "npm:6.5.2" + inquirer-autocomplete-prompt: "npm:1.4.0" + ipx: "npm:2.0.1" + is-docker: "npm:3.0.0" + is-stream: "npm:3.0.0" + is-wsl: "npm:2.2.0" + isexe: "npm:2.0.0" + js-yaml: "npm:4.1.0" + jsonwebtoken: "npm:9.0.1" + jwt-decode: "npm:3.1.2" + lambda-local: "npm:2.1.2" + listr2: "npm:7.0.2" + locate-path: "npm:7.2.0" + lodash: "npm:4.17.21" + log-symbols: "npm:5.1.0" + log-update: "npm:5.0.1" + minimist: "npm:1.2.8" + multiparty: "npm:4.2.3" + netlify: "npm:13.1.11" + netlify-headers-parser: "npm:7.1.2" + netlify-redirect-parser: "npm:14.2.0" + netlify-redirector: "npm:0.5.0" + node-fetch: "npm:2.6.12" + node-version-alias: "npm:3.4.1" + ora: "npm:6.3.1" + p-filter: "npm:3.0.0" + p-map: "npm:5.5.0" + p-wait-for: "npm:5.0.2" + parallel-transform: "npm:1.2.0" + parse-github-url: "npm:1.0.2" + parse-gitignore: "npm:2.0.0" + path-key: "npm:4.0.0" + prettyjson: "npm:1.2.5" + pump: "npm:3.0.0" + raw-body: "npm:2.5.2" + read-pkg-up: "npm:9.1.0" + semver: "npm:7.5.4" + source-map-support: "npm:0.5.21" + strip-ansi-control-characters: "npm:2.0.0" + tabtab: "npm:3.0.2" + tempy: "npm:3.0.0" + terminal-link: "npm:3.0.0" + through2-filter: "npm:3.0.0" + through2-map: "npm:3.0.0" + to-readable-stream: "npm:3.0.0" + toml: "npm:3.0.0" + tomlify-j0.4: "npm:3.0.0" + ulid: "npm:2.3.0" + unixify: "npm:1.0.0" + update-notifier: "npm:6.0.2" + uuid: "npm:9.0.0" + wait-port: "npm:1.0.4" + write-file-atomic: "npm:5.0.1" + ws: "npm:8.14.2" + zod: "npm:3.22.4" + bin: + netlify: bin/run.js + ntl: bin/run.js + checksum: a38317ab41e0f34e6e98958315c486485e5cbd196eb4934fd45bb278d8ca29592609d9dd953a50ec01f4b8ff6494b2be6b1d9dc3c2c4396e776013b029e22ca3 + languageName: node + linkType: hard + +"netlify-headers-parser@npm:7.1.2, netlify-headers-parser@npm:^7.1.2": + version: 7.1.2 + resolution: "netlify-headers-parser@npm:7.1.2" + dependencies: + escape-string-regexp: "npm:^5.0.0" + fast-safe-stringify: "npm:^2.0.7" + is-plain-obj: "npm:^4.0.0" + map-obj: "npm:^5.0.0" + path-exists: "npm:^5.0.0" + toml: "npm:^3.0.0" + checksum: 05639242aad039a51c5a6ae73ad70683e9a7f6b157cf4acdfe6f39b1427ab49257505ca522d40d111bd66a927f3ab2cd14d7dfc3e17cadb4261a27f7293be264 + languageName: node + linkType: hard + +"netlify-redirect-parser@npm:14.2.0, netlify-redirect-parser@npm:^14.2.0": + version: 14.2.0 + resolution: "netlify-redirect-parser@npm:14.2.0" + dependencies: + fast-safe-stringify: "npm:^2.1.1" + filter-obj: "npm:^5.0.0" + is-plain-obj: "npm:^4.0.0" + path-exists: "npm:^5.0.0" + toml: "npm:^3.0.0" + checksum: 2eead70067aeb7f3b2e21e83723923792330889ada5eb73d6934b483abf11de423688470d55a7f96649cf90bbb76480f5690c383768b582b386f2ff9a13b6951 + languageName: node + linkType: hard + +"netlify-redirector@npm:0.5.0": + version: 0.5.0 + resolution: "netlify-redirector@npm:0.5.0" + checksum: a09de050d1eae3f142186beeb23d51c3e606888392f282f8b2b5001c6292977c0557bea50e0a2d6ac0b9c32ec783cf1e69045032a3955c2c42a27ea67eccfb31 + languageName: node + linkType: hard + +"netlify@npm:13.1.11, netlify@npm:^13.1.11": + version: 13.1.11 + resolution: "netlify@npm:13.1.11" + dependencies: + "@netlify/open-api": "npm:^2.26.0" + lodash-es: "npm:^4.17.21" + micro-api-client: "npm:^3.3.0" + node-fetch: "npm:^3.0.0" + omit.js: "npm:^2.0.2" + p-wait-for: "npm:^4.0.0" + qs: "npm:^6.9.6" + checksum: 216eda9c1b06ee4c2ea28510ecfe057c4a9ba0736c83ef8c2aefbd92d0ffc3f11e5d18e1b16b600a900dc529cb6cfa9790a2503aa902e2378f738b5b77ea48b3 + languageName: node + linkType: hard + +"next-tick@npm:^1.1.0": + version: 1.1.0 + resolution: "next-tick@npm:1.1.0" + checksum: 3ba80dd805fcb336b4f52e010992f3e6175869c8d88bf4ff0a81d5d66e6049f89993463b28211613e58a6b7fe93ff5ccbba0da18d4fa574b96289e8f0b577f28 + languageName: node + linkType: hard + +"node-abi@npm:^3.3.0": + version: 3.52.0 + resolution: "node-abi@npm:3.52.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 29fbc10dce6def79e164478a219ff8bc65ef219d536c6f906db255eb26b54ac667cf220f6c47910e4cbcea5125a123c5c624c10a9aedb4cdc8f8acef9c10c2cb + languageName: node + linkType: hard + +"node-addon-api@npm:^6.1.0": + version: 6.1.0 + resolution: "node-addon-api@npm:6.1.0" + dependencies: + node-gyp: "npm:latest" + checksum: d2699c4ad15740fd31482a3b6fca789af7723ab9d393adc6ac45250faaee72edad8f0b10b2b9d087df0de93f1bdc16d97afdd179b26b9ebc9ed68b569faa4bac + languageName: node + linkType: hard + +"node-addon-api@npm:^7.0.0": + version: 7.0.0 + resolution: "node-addon-api@npm:7.0.0" + dependencies: + node-gyp: "npm:latest" + checksum: 3d5a15ee434e122b345e614db122a63f30194c298104c3d8a0fa9f68707abb278af27b45222602456a131890a59b4a92291ff5b4b7938ff282168e9ad1bf7103 + languageName: node + linkType: hard + +"node-domexception@npm:1.0.0, node-domexception@npm:^1.0.0": + version: 1.0.0 + resolution: "node-domexception@npm:1.0.0" + checksum: 5e5d63cda29856402df9472335af4bb13875e1927ad3be861dc5ebde38917aecbf9ae337923777af52a48c426b70148815e890a5d72760f1b4d758cc671b1a2b + languageName: node + linkType: hard + +"node-fetch-native@npm:^1.4.0, node-fetch-native@npm:^1.4.1": + version: 1.4.1 + resolution: "node-fetch-native@npm:1.4.1" + checksum: ab298a42ebf3b1b6c6a8cbc53d8ba703895f55171ed743b0828c2a87d461642d8053143864915a69d41cc01013db86406da105fff6c0a05a00d8caf5c279549c + languageName: node + linkType: hard + +"node-fetch@npm:2.6.12": + version: 2.6.12 + resolution: "node-fetch@npm:2.6.12" + dependencies: + whatwg-url: "npm:^5.0.0" + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 10372e4b5ee07acadc15e6b2bc6fd8940582eea7b9b2a331f4e3665fdcd968498c1656f79f2fa572080ebb37ea80e1474a6478b3b36057ef901b63f4be8fd899 + languageName: node + linkType: hard + +"node-fetch@npm:3.0.0-beta.9": + version: 3.0.0-beta.9 + resolution: "node-fetch@npm:3.0.0-beta.9" + dependencies: + data-uri-to-buffer: "npm:^3.0.1" + fetch-blob: "npm:^2.1.1" + checksum: 99e2947718c281ad76fe009f15ff67ac1781b72f7a81bbc2770cc20297b4482589384982bcd47516a21d6e76e1649e64609e18f83b4c71e09cf5964fbb9ef832 + languageName: node + linkType: hard + +"node-fetch@npm:^2.6.7, node-fetch@npm:^2.7.0": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: "npm:^5.0.0" + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 + languageName: node + linkType: hard + +"node-fetch@npm:^3.0.0, node-fetch@npm:^3.1.1, node-fetch@npm:^3.3.1, node-fetch@npm:^3.3.2": + version: 3.3.2 + resolution: "node-fetch@npm:3.3.2" + dependencies: + data-uri-to-buffer: "npm:^4.0.0" + fetch-blob: "npm:^3.1.4" + formdata-polyfill: "npm:^4.0.10" + checksum: f3d5e56190562221398c9f5750198b34cf6113aa304e34ee97c94fd300ec578b25b2c2906edba922050fce983338fde0d5d34fcb0fc3336ade5bd0e429ad7538 + languageName: node + linkType: hard + +"node-forge@npm:^1.3.1": + version: 1.3.1 + resolution: "node-forge@npm:1.3.1" + checksum: e882819b251a4321f9fc1d67c85d1501d3004b4ee889af822fd07f64de3d1a8e272ff00b689570af0465d65d6bf5074df9c76e900e0aff23e60b847f2a46fbe8 + languageName: node + linkType: hard + +"node-gyp-build@npm:^4.2.2": + version: 4.7.1 + resolution: "node-gyp-build@npm:4.7.1" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: b8e4a3f889237cd08edde3775e2b4e1e39a0571580584e33e29979f0c532a254ce3c5ec9435bd526254ad0b3f0b4a7e7fe14e53bd400f6ea9445f3bfd88a6b1e + languageName: node + linkType: hard + +"node-gyp-build@npm:^4.3.0": + version: 4.6.1 + resolution: "node-gyp-build@npm:4.6.1" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: bd7738c96608c1fa056344623b93d4bbdc63fec05862061e5489284639e3a53daa407b9158c45bfc2e33d0b419851ed5c1f03f4c9ba34726361e2a7b765c0ddc + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 10.0.1 + resolution: "node-gyp@npm:10.0.1" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^13.0.0" + nopt: "npm:^7.0.0" + proc-log: "npm:^3.0.0" + semver: "npm:^7.3.5" + tar: "npm:^6.1.2" + which: "npm:^4.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: abddfff7d873312e4ed4a5fb75ce893a5c4fb69e7fcb1dfa71c28a6b92a7f1ef6b62790dffb39181b5a82728ba8f2f32d229cf8cbe66769fe02cea7db4a555aa + languageName: node + linkType: hard + +"node-html-parser@npm:^6.1.5": + version: 6.1.8 + resolution: "node-html-parser@npm:6.1.8" + dependencies: + css-select: "npm:^5.1.0" + he: "npm:1.2.0" + checksum: d23eaa16629ebfad5115f82e857cbe92e659060a6907cc1d24f18276dcb2967c4c96855236a007764aff14a1a9c6797fae4458a98cdb3369635f23a946568b63 + languageName: node + linkType: hard + +"node-int64@npm:^0.4.0": + version: 0.4.0 + resolution: "node-int64@npm:0.4.0" + checksum: a6a4d8369e2f2720e9c645255ffde909c0fbd41c92ea92a5607fc17055955daac99c1ff589d421eee12a0d24e99f7bfc2aabfeb1a4c14742f6c099a51863f31a + languageName: node + linkType: hard + +"node-releases@npm:^2.0.13": + version: 2.0.13 + resolution: "node-releases@npm:2.0.13" + checksum: 2fb44bf70fc949d27f3a48a7fd1a9d1d603ddad4ccd091f26b3fb8b1da976605d919330d7388ccd55ca2ade0dc8b2e12841ba19ef249c8bb29bf82532d401af7 + languageName: node + linkType: hard + +"node-source-walk@npm:^6.0.0, node-source-walk@npm:^6.0.1, node-source-walk@npm:^6.0.2": + version: 6.0.2 + resolution: "node-source-walk@npm:6.0.2" + dependencies: + "@babel/parser": "npm:^7.21.8" + checksum: 199875bf108750693c55c30b13085ab2956059593c7a5c10c3a30ea3c16b7448e7514d63767dbd825c71ab40be76f66c4d98f17794e3232a645867a99a82fb19 + languageName: node + linkType: hard + +"node-stream-zip@npm:^1.15.0": + version: 1.15.0 + resolution: "node-stream-zip@npm:1.15.0" + checksum: 429fce95d7e90e846adbe096c61d2ea8d18defc155c0345d25d0f98dd6fc72aeb95039318484a4e0a01dc3814b6d0d1ae0fe91847a29669dff8676ec064078c9 + languageName: node + linkType: hard + +"node-version-alias@npm:3.4.1": + version: 3.4.1 + resolution: "node-version-alias@npm:3.4.1" + dependencies: + all-node-versions: "npm:^11.3.0" + filter-obj: "npm:^5.1.0" + is-plain-obj: "npm:^4.1.0" + normalize-node-version: "npm:^12.4.0" + path-exists: "npm:^5.0.0" + semver: "npm:^7.3.8" + checksum: 7494a0018eeab0baec717c51719cc25c05c7332c854904e1608bf4dfd9bb6337bb7da39bd52fe4fa56a60a8e777a99e90e5fa1aabde556e7c7edaa7272452838 + languageName: node + linkType: hard + +"nodemon@npm:^2.0.19": + version: 2.0.22 + resolution: "nodemon@npm:2.0.22" + dependencies: + chokidar: "npm:^3.5.2" + debug: "npm:^3.2.7" + ignore-by-default: "npm:^1.0.1" + minimatch: "npm:^3.1.2" + pstree.remy: "npm:^1.1.8" + semver: "npm:^5.7.1" + simple-update-notifier: "npm:^1.0.7" + supports-color: "npm:^5.5.0" + touch: "npm:^3.1.0" + undefsafe: "npm:^2.0.5" + bin: + nodemon: bin/nodemon.js + checksum: 37e960b995b66e6d9e3b0e435ecc07a45200c4c566c4820a4deb6e7cc234b305e076a8ff0b4dc9c01ee690c663ae82a217d60c591dcbbcd4af1e3a7d0ad2b2c6 + languageName: node + linkType: hard + +"noop2@npm:^2.0.0": + version: 2.0.0 + resolution: "noop2@npm:2.0.0" + checksum: 62494828d46e5a95328e31f608cf7d2f3326609945ac67ec7bd724dc26b82cbc5a3a3df1ac1e86e940da9d93b0315c864e1b16fbdd4b3d69a309a235aa4df50f + languageName: node + linkType: hard + +"nopt@npm:^5.0.0": + version: 5.0.0 + resolution: "nopt@npm:5.0.0" + dependencies: + abbrev: "npm:1" + bin: + nopt: bin/nopt.js + checksum: fc5c4f07155cb455bf5fc3dd149fac421c1a40fd83c6bfe83aa82b52f02c17c5e88301321318adaa27611c8a6811423d51d29deaceab5fa158b585a61a551061 + languageName: node + linkType: hard + +"nopt@npm:^7.0.0": + version: 7.2.0 + resolution: "nopt@npm:7.2.0" + dependencies: + abbrev: "npm:^2.0.0" + bin: + nopt: bin/nopt.js + checksum: 9bd7198df6f16eb29ff16892c77bcf7f0cc41f9fb5c26280ac0def2cf8cf319f3b821b3af83eba0e74c85807cc430a16efe0db58fe6ae1f41e69519f585b6aff + languageName: node + linkType: hard + +"nopt@npm:~1.0.10": + version: 1.0.10 + resolution: "nopt@npm:1.0.10" + dependencies: + abbrev: "npm:1" + bin: + nopt: ./bin/nopt.js + checksum: ddfbd892116a125fd68849ef564dd5b1f0a5ba0dbbf18782e9499e2efad8f4d3790635b47c6b5d3f7e014069e7b3ce5b8112687e9ae093fcd2678188c866fe28 + languageName: node + linkType: hard + +"normalize-node-version@npm:^12.4.0": + version: 12.4.0 + resolution: "normalize-node-version@npm:12.4.0" + dependencies: + all-node-versions: "npm:^11.3.0" + filter-obj: "npm:^5.1.0" + semver: "npm:^7.3.7" + checksum: 2203e829e6ee99bc44422775597e7220460287edd7a1f852ef676de4f24e6d46ef30b244cdb09335da9909719d07120649e2c232e57782a31990bf59ba496210 + languageName: node + linkType: hard + +"normalize-package-data@npm:^2.5.0": + version: 2.5.0 + resolution: "normalize-package-data@npm:2.5.0" + dependencies: + hosted-git-info: "npm:^2.1.4" + resolve: "npm:^1.10.0" + semver: "npm:2 || 3 || 4 || 5" + validate-npm-package-license: "npm:^3.0.1" + checksum: 357cb1646deb42f8eb4c7d42c4edf0eec312f3628c2ef98501963cc4bbe7277021b2b1d977f982b2edce78f5a1014613ce9cf38085c3df2d76730481357ca504 + languageName: node + linkType: hard + +"normalize-package-data@npm:^3.0.0, normalize-package-data@npm:^3.0.2": + version: 3.0.3 + resolution: "normalize-package-data@npm:3.0.3" + dependencies: + hosted-git-info: "npm:^4.0.1" + is-core-module: "npm:^2.5.0" + semver: "npm:^7.3.4" + validate-npm-package-license: "npm:^3.0.1" + checksum: e5d0f739ba2c465d41f77c9d950e291ea4af78f8816ddb91c5da62257c40b76d8c83278b0d08ffbcd0f187636ebddad20e181e924873916d03e6e5ea2ef026be + languageName: node + linkType: hard + +"normalize-path@npm:^2.1.1": + version: 2.1.1 + resolution: "normalize-path@npm:2.1.1" + dependencies: + remove-trailing-separator: "npm:^1.0.1" + checksum: db814326ff88057437233361b4c7e9cac7b54815b051b57f2d341ce89b1d8ec8cbd43e7fa95d7652b3b69ea8fcc294b89b8530d556a84d1bdace94229e1e9a8b + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 + languageName: node + linkType: hard + +"normalize-url@npm:^8.0.0": + version: 8.0.0 + resolution: "normalize-url@npm:8.0.0" + checksum: 09582d56acd562d89849d9239852c2aff225c72be726556d6883ff36de50006803d32a023c10e917bcc1c55f73f3bb16434f67992fe9b61906a3db882192753c + languageName: node + linkType: hard + +"npm-normalize-package-bin@npm:^3.0.0": + version: 3.0.1 + resolution: "npm-normalize-package-bin@npm:3.0.1" + checksum: f1831a7f12622840e1375c785c3dab7b1d82dd521211c17ee5e9610cd1a34d8b232d3fdeebf50c170eddcb321d2c644bf73dbe35545da7d588c6b3fa488db0a5 + languageName: node + linkType: hard + +"npm-run-path@npm:^4.0.1": + version: 4.0.1 + resolution: "npm-run-path@npm:4.0.1" + dependencies: + path-key: "npm:^3.0.0" + checksum: 6f9353a95288f8455cf64cbeb707b28826a7f29690244c1e4bb61ec573256e021b6ad6651b394eb1ccfd00d6ec50147253aba2c5fe58a57ceb111fad62c519ac + languageName: node + linkType: hard + +"npm-run-path@npm:^5.1.0": + version: 5.1.0 + resolution: "npm-run-path@npm:5.1.0" + dependencies: + path-key: "npm:^4.0.0" + checksum: ff6d77514489f47fa1c3b1311d09cd4b6d09a874cc1866260f9dea12cbaabda0436ed7f8c2ee44d147bf99a3af29307c6f63b0f83d242b0b6b0ab25dff2629e3 + languageName: node + linkType: hard + +"npmlog@npm:^5.0.1": + version: 5.0.1 + resolution: "npmlog@npm:5.0.1" + dependencies: + are-we-there-yet: "npm:^2.0.0" + console-control-strings: "npm:^1.1.0" + gauge: "npm:^3.0.0" + set-blocking: "npm:^2.0.0" + checksum: 489ba519031013001135c463406f55491a17fc7da295c18a04937fe3a4d523fd65e88dd418a28b967ab743d913fdeba1e29838ce0ad8c75557057c481f7d49fa + languageName: node + linkType: hard + +"nth-check@npm:^2.0.1": + version: 2.1.1 + resolution: "nth-check@npm:2.1.1" + dependencies: + boolbase: "npm:^1.0.0" + checksum: 5fee7ff309727763689cfad844d979aedd2204a817fbaaf0e1603794a7c20db28548d7b024692f953557df6ce4a0ee4ae46cd8ebd9b36cfb300b9226b567c479 + languageName: node + linkType: hard + +"nwsapi@npm:^2.2.4": + version: 2.2.7 + resolution: "nwsapi@npm:2.2.7" + checksum: 44be198adae99208487a1c886c0a3712264f7bbafa44368ad96c003512fed2753d4e22890ca1e6edb2690c3456a169f2a3c33bfacde1905cf3bf01c7722464db + languageName: node + linkType: hard + +"object-assign@npm:^4.1.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: 1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 + languageName: node + linkType: hard + +"object-copy@npm:^0.1.0": + version: 0.1.0 + resolution: "object-copy@npm:0.1.0" + dependencies: + copy-descriptor: "npm:^0.1.0" + define-property: "npm:^0.2.5" + kind-of: "npm:^3.0.3" + checksum: 79314b05e9d626159a04f1d913f4c4aba9eae8848511cf5f4c8e3b04bb3cc313b65f60357f86462c959a14c2d58380fedf89b6b32ecec237c452a5ef3900a293 + languageName: node + linkType: hard + +"object-inspect@npm:^1.9.0": + version: 1.13.1 + resolution: "object-inspect@npm:1.13.1" + checksum: fad603f408e345c82e946abdf4bfd774260a5ed3e5997a0b057c44153ac32c7271ff19e3a5ae39c858da683ba045ccac2f65245c12763ce4e8594f818f4a648d + languageName: node + linkType: hard + +"object-pairs@npm:^0.1.0": + version: 0.1.0 + resolution: "object-pairs@npm:0.1.0" + checksum: 2fe5ca74bcaf30d5209df3bac82e0917f481afc7df7ad37b74a575d43bc026d50f9a6433277ceb959d8c4ad7c312f8bcd04132b74a90195eb6845f085e4db2ab + languageName: node + linkType: hard + +"object-values@npm:^1.0.0": + version: 1.0.0 + resolution: "object-values@npm:1.0.0" + checksum: ec0b80bdd29b4ed5319f91f87d0897f85573de13fa8aa5771172f42a6a91a7fea3a01e5e8b345e2996794b42e2d19715c000561757a299084961f6b7fb80d84d + languageName: node + linkType: hard + +"object-visit@npm:^1.0.0": + version: 1.0.1 + resolution: "object-visit@npm:1.0.1" + dependencies: + isobject: "npm:^3.0.0" + checksum: 086b475bda24abd2318d2b187c3e928959b89f5cb5883d6fe5a42d03719b61fc18e765f658de9ac8730e67ba9ff26d61e73d991215948ff9ecefe771e0071029 + languageName: node + linkType: hard + +"object.pick@npm:^1.3.0": + version: 1.3.0 + resolution: "object.pick@npm:1.3.0" + dependencies: + isobject: "npm:^3.0.1" + checksum: cd316ec986e49895a28f2df9182de9cdeee57cd2a952c122aacc86344c28624fe002d9affc4f48b5014ec7c033da9942b08821ddb44db8c5bac5b3ec54bdc31e + languageName: node + linkType: hard + +"octokit-auth-probot@npm:^1.2.2": + version: 1.2.9 + resolution: "octokit-auth-probot@npm:1.2.9" + dependencies: + "@octokit/auth-app": "npm:^4.0.2" + "@octokit/auth-token": "npm:^3.0.0" + "@octokit/auth-unauthenticated": "npm:^3.0.0" + "@octokit/types": "npm:^8.0.0" + peerDependencies: + "@octokit/core": ">=3.2" + checksum: 5d316b4e97d1a8773991e00e505103ba4d6af7a5025066a3df9f8176f8f345cd9d0812696072a76f727cbbe49f421609126b75f5eae4193903e921f0e4a15276 + languageName: node + linkType: hard + +"octokit@npm:^3.1.2": + version: 3.1.2 + resolution: "octokit@npm:3.1.2" + dependencies: + "@octokit/app": "npm:^14.0.2" + "@octokit/core": "npm:^5.0.0" + "@octokit/oauth-app": "npm:^6.0.0" + "@octokit/plugin-paginate-graphql": "npm:^4.0.0" + "@octokit/plugin-paginate-rest": "npm:^9.0.0" + "@octokit/plugin-rest-endpoint-methods": "npm:^10.0.0" + "@octokit/plugin-retry": "npm:^6.0.0" + "@octokit/plugin-throttling": "npm:^8.0.0" + "@octokit/request-error": "npm:^5.0.0" + "@octokit/types": "npm:^12.0.0" + checksum: 8d9b1847c1c5295fed2b9ea574213ae55f9a12d75913bc77575f48382b8d1998446adeea32095d4866591b224678b0ffa4b6c8ccdb2c4dcd2ec679033a1dc696 + languageName: node + linkType: hard + +"ofetch@npm:^1.3.3": + version: 1.3.3 + resolution: "ofetch@npm:1.3.3" + dependencies: + destr: "npm:^2.0.1" + node-fetch-native: "npm:^1.4.0" + ufo: "npm:^1.3.0" + checksum: ac4d2519841c6ffcbb3f5dee6db7f29dc273e15d8fd6ee89d9dbfae7c0542cd72a2424e8527ae7147b36eec35667066754aeb69dc7c02e6c8dcb943579e9764e + languageName: node + linkType: hard + +"omit.js@npm:^2.0.2": + version: 2.0.2 + resolution: "omit.js@npm:2.0.2" + checksum: 1362523f422b81b99d414de8c6a90973b334f2d0dc616b846f2ec047b1d7710f0df48d59db7912f679218273c17605acad38901ff08b9bc3db636907be50cf45 + languageName: node + linkType: hard + +"on-exit-leak-free@npm:^2.1.0": + version: 2.1.2 + resolution: "on-exit-leak-free@npm:2.1.2" + checksum: faea2e1c9d696ecee919026c32be8d6a633a7ac1240b3b87e944a380e8a11dc9c95c4a1f8fb0568de7ab8db3823e790f12bda45296b1d111e341aad3922a0570 + languageName: node + linkType: hard + +"on-finished@npm:2.4.1": + version: 2.4.1 + resolution: "on-finished@npm:2.4.1" + dependencies: + ee-first: "npm:1.1.1" + checksum: 46fb11b9063782f2d9968863d9cbba33d77aa13c17f895f56129c274318b86500b22af3a160fe9995aa41317efcd22941b6eba747f718ced08d9a73afdb087b4 + languageName: node + linkType: hard + +"on-headers@npm:^1.0.0": + version: 1.0.2 + resolution: "on-headers@npm:1.0.2" + checksum: f649e65c197bf31505a4c0444875db0258e198292f34b884d73c2f751e91792ef96bb5cf89aa0f4fecc2e4dc662461dda606b1274b0e564f539cae5d2f5fc32f + languageName: node + linkType: hard + +"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: "npm:1" + checksum: 5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 + languageName: node + linkType: hard + +"one-time@npm:^1.0.0": + version: 1.0.0 + resolution: "one-time@npm:1.0.0" + dependencies: + fn.name: "npm:1.x.x" + checksum: 6e4887b331edbb954f4e915831cbec0a7b9956c36f4feb5f6de98c448ac02ff881fd8d9b55a6b1b55030af184c6b648f340a76eb211812f4ad8c9b4b8692fdaa + languageName: node + linkType: hard + +"onetime@npm:^2.0.0": + version: 2.0.1 + resolution: "onetime@npm:2.0.1" + dependencies: + mimic-fn: "npm:^1.0.0" + checksum: b4e44a8c34e70e02251bfb578a6e26d6de6eedbed106cd78211d2fd64d28b6281d54924696554e4e966559644243753ac5df73c87f283b0927533d3315696215 + languageName: node + linkType: hard + +"onetime@npm:^5.1.0, onetime@npm:^5.1.2": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: "npm:^2.1.0" + checksum: ffcef6fbb2692c3c40749f31ea2e22677a876daea92959b8a80b521d95cca7a668c884d8b2045d1d8ee7d56796aa405c405462af112a1477594cc63531baeb8f + languageName: node + linkType: hard + +"onetime@npm:^6.0.0": + version: 6.0.0 + resolution: "onetime@npm:6.0.0" + dependencies: + mimic-fn: "npm:^4.0.0" + checksum: 4eef7c6abfef697dd4479345a4100c382d73c149d2d56170a54a07418c50816937ad09500e1ed1e79d235989d073a9bade8557122aee24f0576ecde0f392bb6c + languageName: node + linkType: hard + +"open@npm:^8.0.4": + version: 8.4.2 + resolution: "open@npm:8.4.2" + dependencies: + define-lazy-prop: "npm:^2.0.0" + is-docker: "npm:^2.1.1" + is-wsl: "npm:^2.2.0" + checksum: bb6b3a58401dacdb0aad14360626faf3fb7fba4b77816b373495988b724fb48941cad80c1b65d62bb31a17609b2cd91c41a181602caea597ca80dfbcc27e84c9 + languageName: node + linkType: hard + +"openai@npm:^4.2.0": + version: 4.10.0 + resolution: "openai@npm:4.10.0" + dependencies: + "@types/node": "npm:^18.11.18" + "@types/node-fetch": "npm:^2.6.4" + abort-controller: "npm:^3.0.0" + agentkeepalive: "npm:^4.2.1" + digest-fetch: "npm:^1.3.0" + form-data-encoder: "npm:1.7.2" + formdata-node: "npm:^4.3.2" + node-fetch: "npm:^2.6.7" + bin: + openai: bin/cli + checksum: 8bb846d636432afe9bff03064bf88a02fa7806d09ea81e7efef5f1bff583b0efa024e780b11e5ce40ade3b04ffcf7b2b9aa7b9237f8ffd0884c33992c377897c + languageName: node + linkType: hard + +"opentracing@npm:^0.14.4": + version: 0.14.7 + resolution: "opentracing@npm:0.14.7" + checksum: a7be8d697b1997548233423f5f4c196e285af8e864a24d7704fc6029beb73cd1f987651ca814e207629c6bc624cb03297a86601c0dc51cdca9a07a20f97b71ea + languageName: node + linkType: hard + +"optionator@npm:^0.9.3": + version: 0.9.3 + resolution: "optionator@npm:0.9.3" + dependencies: + "@aashutoshrathi/word-wrap": "npm:^1.2.3" + deep-is: "npm:^0.1.3" + fast-levenshtein: "npm:^2.0.6" + levn: "npm:^0.4.1" + prelude-ls: "npm:^1.2.1" + type-check: "npm:^0.4.0" + checksum: 66fba794d425b5be51353035cf3167ce6cfa049059cbb93229b819167687e0f48d2bc4603fcb21b091c99acb516aae1083624675b15c4765b2e4693a085e959c + languageName: node + linkType: hard + +"ora@npm:6.3.1": + version: 6.3.1 + resolution: "ora@npm:6.3.1" + dependencies: + chalk: "npm:^5.0.0" + cli-cursor: "npm:^4.0.0" + cli-spinners: "npm:^2.6.1" + is-interactive: "npm:^2.0.0" + is-unicode-supported: "npm:^1.1.0" + log-symbols: "npm:^5.1.0" + stdin-discarder: "npm:^0.1.0" + strip-ansi: "npm:^7.0.1" + wcwidth: "npm:^1.0.1" + checksum: f8753e234c9967c86cfb73e7396e1a51ed8771c4921d539af8e8962b32c7928cefef7b3c4ce730a504be72b1437f91cc0523f468927b9fe322498c4edcc50203 + languageName: node + linkType: hard + +"os-name@npm:^5.0.0": + version: 5.1.0 + resolution: "os-name@npm:5.1.0" + dependencies: + macos-release: "npm:^3.1.0" + windows-release: "npm:^5.0.1" + checksum: 6a0b8b767783fe55e41ddd6347147389b08ab9ad4a64355189844cefa3081a5d1fb77504eaac931b883e7fd73baf6013e0cc3fc86bb5d2190683073669db5572 + languageName: node + linkType: hard + +"os-tmpdir@npm:~1.0.2": + version: 1.0.2 + resolution: "os-tmpdir@npm:1.0.2" + checksum: f438450224f8e2687605a8dd318f0db694b6293c5d835ae509a69e97c8de38b6994645337e5577f5001115470414638978cc49da1cdcc25106dad8738dc69990 + languageName: node + linkType: hard + +"p-cancelable@npm:^3.0.0": + version: 3.0.0 + resolution: "p-cancelable@npm:3.0.0" + checksum: 948fd4f8e87b956d9afc2c6c7392de9113dac817cb1cecf4143f7a3d4c57ab5673614a80be3aba91ceec5e4b69fd8c869852d7e8048bc3d9273c4c36ce14b9aa + languageName: node + linkType: hard + +"p-defer@npm:^1.0.0": + version: 1.0.0 + resolution: "p-defer@npm:1.0.0" + checksum: ed603c3790e74b061ac2cb07eb6e65802cf58dce0fbee646c113a7b71edb711101329ad38f99e462bd2e343a74f6e9366b496a35f1d766c187084d3109900487 + languageName: node + linkType: hard + +"p-event@npm:^4.1.0": + version: 4.2.0 + resolution: "p-event@npm:4.2.0" + dependencies: + p-timeout: "npm:^3.1.0" + checksum: f1b6a2fb13d47f2a8afc00150da5ece0d28940ce3d8fa562873e091d3337d298e78fee9cb18b768598ff1d11df608b2ae23868309ff6405b864a2451ccd6d25a + languageName: node + linkType: hard + +"p-event@npm:^5.0.0, p-event@npm:^5.0.1": + version: 5.0.1 + resolution: "p-event@npm:5.0.1" + dependencies: + p-timeout: "npm:^5.0.2" + checksum: 2317171489537f316661fa863f3bb711b2ceb89182937238422cec10223cbb958c432d6c26a238446a622d788187bdd295b1d8ecedbe2e467e045930d60202b0 + languageName: node + linkType: hard + +"p-every@npm:^2.0.0": + version: 2.0.0 + resolution: "p-every@npm:2.0.0" + dependencies: + p-map: "npm:^2.0.0" + checksum: 04c716039edff4fdb2691b705069dfe578a4fc2a17adb8cd4c7707cbcc156ce903032804e7512ff1299ac18a509264272b0ac7abc9da2148bb453337f9d1e561 + languageName: node + linkType: hard + +"p-filter@npm:3.0.0, p-filter@npm:^3.0.0": + version: 3.0.0 + resolution: "p-filter@npm:3.0.0" + dependencies: + p-map: "npm:^5.1.0" + checksum: 32e375fa6b3afd8b5eb65915746b75a471a3bedf38264dc9d738d6b1b8a0b2797b06b363f637b3387e766e0c7c6fab316cb1119e353baf7936da3ba6d8a4ac8d + languageName: node + linkType: hard + +"p-finally@npm:^1.0.0": + version: 1.0.0 + resolution: "p-finally@npm:1.0.0" + checksum: 6b8552339a71fe7bd424d01d8451eea92d379a711fc62f6b2fe64cad8a472c7259a236c9a22b4733abca0b5666ad503cb497792a0478c5af31ded793d00937e7 + languageName: node + linkType: hard + +"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: "npm:^2.0.0" + checksum: 8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: "npm:^0.1.0" + checksum: 9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a + languageName: node + linkType: hard + +"p-limit@npm:^4.0.0": + version: 4.0.0 + resolution: "p-limit@npm:4.0.0" + dependencies: + yocto-queue: "npm:^1.0.0" + checksum: a56af34a77f8df2ff61ddfb29431044557fcbcb7642d5a3233143ebba805fc7306ac1d448de724352861cb99de934bc9ab74f0d16fe6a5460bdbdf938de875ad + languageName: node + linkType: hard + +"p-locate@npm:^3.0.0": + version: 3.0.0 + resolution: "p-locate@npm:3.0.0" + dependencies: + p-limit: "npm:^2.0.0" + checksum: 7b7f06f718f19e989ce6280ed4396fb3c34dabdee0df948376483032f9d5ec22fdf7077ec942143a75827bb85b11da72016497fc10dac1106c837ed593969ee8 + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: "npm:^2.2.0" + checksum: 1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9 + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: "npm:^3.0.2" + checksum: 2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a + languageName: node + linkType: hard + +"p-locate@npm:^6.0.0": + version: 6.0.0 + resolution: "p-locate@npm:6.0.0" + dependencies: + p-limit: "npm:^4.0.0" + checksum: d72fa2f41adce59c198270aa4d3c832536c87a1806e0f69dffb7c1a7ca998fb053915ca833d90f166a8c082d3859eabfed95f01698a3214c20df6bb8de046312 + languageName: node + linkType: hard + +"p-map@npm:5.5.0, p-map@npm:^5.0.0, p-map@npm:^5.1.0, p-map@npm:^5.3.0": + version: 5.5.0 + resolution: "p-map@npm:5.5.0" + dependencies: + aggregate-error: "npm:^4.0.0" + checksum: 410bce846b1e3db6bb2ccab6248372ecf4e635fc2b31331c8f56478e73fec9e146e8b4547585e635703160a3d252a6a65b8f855834aebc2c3408eb5789630cc4 + languageName: node + linkType: hard + +"p-map@npm:^2.0.0, p-map@npm:^2.1.0": + version: 2.1.0 + resolution: "p-map@npm:2.1.0" + checksum: 735dae87badd4737a2dd582b6d8f93e49a1b79eabbc9815a4d63a528d5e3523e978e127a21d784cccb637010e32103a40d2aaa3ab23ae60250b1a820ca752043 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: "npm:^3.0.0" + checksum: 592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 + languageName: node + linkType: hard + +"p-map@npm:^6.0.0": + version: 6.0.0 + resolution: "p-map@npm:6.0.0" + checksum: 3fcfccf464d0f4a9a8c8a2d48f3f0933bdbdb0628158c1fb3c240dc0bbf20c0cf8115dea57300aa82baefff7b9bd1b9daf13a11a6578f15a629fc5bda78d780d + languageName: node + linkType: hard + +"p-memoize@npm:4.0.1": + version: 4.0.1 + resolution: "p-memoize@npm:4.0.1" + dependencies: + mem: "npm:^6.0.1" + mimic-fn: "npm:^3.0.0" + checksum: a60e6c7be84df6f431f743c8065328c6b1f4862287e9aea51ac894f5bc60f28372d84976770a029d73c4d0168f946898f833cfb96378c89c9fadb2a834e342d1 + languageName: node + linkType: hard + +"p-reduce@npm:^3.0.0": + version: 3.0.0 + resolution: "p-reduce@npm:3.0.0" + checksum: 794cd6c98ad246f6f41fa4b925e56c7d8759b92f67712f5f735418dc7b47cd9aadaecbbbedaea2df879fd9c5d7622ed0b22a2c090d2ec349cf0578485a660196 + languageName: node + linkType: hard + +"p-retry@npm:^5.1.1": + version: 5.1.2 + resolution: "p-retry@npm:5.1.2" + dependencies: + "@types/retry": "npm:0.12.1" + retry: "npm:^0.13.1" + checksum: 9017001ebfbe2a08cf45c970106f6953f5c76d1f8d8e9ff81afcbf6c25fe9f0e13499c5ac49b35d114672cf15689a952f4f3287fd1316420eb810a5a99ecf4e7 + languageName: node + linkType: hard + +"p-timeout@npm:^3.1.0": + version: 3.2.0 + resolution: "p-timeout@npm:3.2.0" + dependencies: + p-finally: "npm:^1.0.0" + checksum: 524b393711a6ba8e1d48137c5924749f29c93d70b671e6db761afa784726572ca06149c715632da8f70c090073afb2af1c05730303f915604fd38ee207b70a61 + languageName: node + linkType: hard + +"p-timeout@npm:^5.0.0, p-timeout@npm:^5.0.2": + version: 5.1.0 + resolution: "p-timeout@npm:5.1.0" + checksum: 1b026cf9d5878c64bec4341ca9cda8ec6b8b3aea8a57885ca0fe2b35753a20d767fb6f9d3aa41e1252f42bc95432c05ea33b6b18f271fb10bfb0789591850a41 + languageName: node + linkType: hard + +"p-timeout@npm:^6.0.0": + version: 6.1.2 + resolution: "p-timeout@npm:6.1.2" + checksum: d46b90a9a5fb7c650a5c56dd5cf7102ea9ab6ce998defa2b3d4672789aaec4e2f45b3b0b5a4a3e17a0fb94301ad5dd26da7d8728402e48db2022ad1847594d19 + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f + languageName: node + linkType: hard + +"p-wait-for@npm:5.0.2": + version: 5.0.2 + resolution: "p-wait-for@npm:5.0.2" + dependencies: + p-timeout: "npm:^6.0.0" + checksum: 4fe3092f982c592d0dda775ce6186d6f8c57234f722d6f51d1b2d32236643b970b2ea0b59bb63e748b960eb440f627d672fd0ec1492165e3c8f5b1ec0c21cf3e + languageName: node + linkType: hard + +"p-wait-for@npm:^4.0.0, p-wait-for@npm:^4.1.0": + version: 4.1.0 + resolution: "p-wait-for@npm:4.1.0" + dependencies: + p-timeout: "npm:^5.0.0" + checksum: ff6d7db020a7bb9bb864a5ae4d2038b01954e5e3f491e407c87ba46935bc57365b6149f174f49ae7122fb0c884c6376168433ab811cf2900e6ba7e8138a8e587 + languageName: node + linkType: hard + +"package-json@npm:^8.1.0": + version: 8.1.1 + resolution: "package-json@npm:8.1.1" + dependencies: + got: "npm:^12.1.0" + registry-auth-token: "npm:^5.0.1" + registry-url: "npm:^6.0.0" + semver: "npm:^7.3.7" + checksum: 83b057878bca229033aefad4ef51569b484e63a65831ddf164dc31f0486817e17ffcb58c819c7af3ef3396042297096b3ffc04e107fd66f8f48756f6d2071c8f + languageName: node + linkType: hard + +"parallel-transform@npm:1.2.0": + version: 1.2.0 + resolution: "parallel-transform@npm:1.2.0" + dependencies: + cyclist: "npm:^1.0.1" + inherits: "npm:^2.0.3" + readable-stream: "npm:^2.1.5" + checksum: ab0e58569e73681ca4b9c9228189bdb6cbea535295fae344cf0d8342fd33a950961914f3c414f81894c1498fb9ad1c079b4625d2b7ceae9e6ab812f22e3bea3f + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: "npm:^3.0.0" + checksum: c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 + languageName: node + linkType: hard + +"parent-module@npm:^2.0.0": + version: 2.0.0 + resolution: "parent-module@npm:2.0.0" + dependencies: + callsites: "npm:^3.1.0" + checksum: e4c5e34102c709df1932e1065dee53764fbd869f5a673beb8c3b4bcbbd4a7be16e3595f8846b24f52a77b9e96d8d499e68736ec690b108e55d95a5315f41e073 + languageName: node + linkType: hard + +"parse-github-url@npm:1.0.2": + version: 1.0.2 + resolution: "parse-github-url@npm:1.0.2" + bin: + parse-github-url: ./cli.js + checksum: 3405b8812bc3e2c6baf49f859212e587237e17f5f886899e1c977bf53898a78f1b491341c6937beb892a0706354e44487defb387e12e5adcf3f18236408dd3dc + languageName: node + linkType: hard + +"parse-gitignore@npm:2.0.0": + version: 2.0.0 + resolution: "parse-gitignore@npm:2.0.0" + checksum: d42d8512ad1737fbe47bd1ecdd685bb08efb777136cafcf1344eba9fd3104f79c14e9d3d1b313427b900250d99827ef124e0dc06ff6e9883b2d3617e56b2cbbc + languageName: node + linkType: hard + +"parse-json@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-json@npm:4.0.0" + dependencies: + error-ex: "npm:^1.3.1" + json-parse-better-errors: "npm:^1.0.1" + checksum: 8d80790b772ccb1bcea4e09e2697555e519d83d04a77c2b4237389b813f82898943a93ffff7d0d2406203bdd0c30dcf95b1661e3a53f83d0e417f053957bef32 + languageName: node + linkType: hard + +"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": + version: 5.2.0 + resolution: "parse-json@npm:5.2.0" + dependencies: + "@babel/code-frame": "npm:^7.0.0" + error-ex: "npm:^1.3.1" + json-parse-even-better-errors: "npm:^2.3.0" + lines-and-columns: "npm:^1.1.6" + checksum: 77947f2253005be7a12d858aedbafa09c9ae39eb4863adf330f7b416ca4f4a08132e453e08de2db46459256fb66afaac5ee758b44fe6541b7cdaf9d252e59585 + languageName: node + linkType: hard + +"parse-ms@npm:^3.0.0": + version: 3.0.0 + resolution: "parse-ms@npm:3.0.0" + checksum: 056b4a32a9d3749f3f4cfffefb45c45540491deaa8e1d8ad43c2ddde7ba04edd076bd1b298f521238bb5fb084a9b2c4a2ebb78aefa651afbc4c2b0af4232fc54 + languageName: node + linkType: hard + +"parse-npm-tarball-url@npm:^3.0.0": + version: 3.0.0 + resolution: "parse-npm-tarball-url@npm:3.0.0" + dependencies: + semver: "npm:^6.1.0" + checksum: 68082ede1c4a9ee6357134c70ee19c83b3070fec4de39af753bedb2032e05c856e7ea53b08db923edba35c2c7fffbb646baf0783300f3a982574e6cdb3dc28bd + languageName: node + linkType: hard + +"parse5@npm:^7.0.0, parse5@npm:^7.1.2": + version: 7.1.2 + resolution: "parse5@npm:7.1.2" + dependencies: + entities: "npm:^4.4.0" + checksum: 297d7af8224f4b5cb7f6617ecdae98eeaed7f8cbd78956c42785e230505d5a4f07cef352af10d3006fa5c1544b76b57784d3a22d861ae071bbc460c649482bf4 + languageName: node + linkType: hard + +"parseurl@npm:~1.3.3": + version: 1.3.3 + resolution: "parseurl@npm:1.3.3" + checksum: 90dd4760d6f6174adb9f20cf0965ae12e23879b5f5464f38e92fce8073354341e4b3b76fa3d878351efe7d01e617121955284cfd002ab087fba1a0726ec0b4f5 + languageName: node + linkType: hard + +"pascalcase@npm:^0.1.1": + version: 0.1.1 + resolution: "pascalcase@npm:0.1.1" + checksum: 48dfe90618e33810bf58211d8f39ad2c0262f19ad6354da1ba563935b5f429f36409a1fb9187c220328f7a4dc5969917f8e3e01ee089b5f1627b02aefe39567b + languageName: node + linkType: hard + +"path-exists@npm:^3.0.0": + version: 3.0.0 + resolution: "path-exists@npm:3.0.0" + checksum: 17d6a5664bc0a11d48e2b2127d28a0e58822c6740bde30403f08013da599182289c56518bec89407e3f31d3c2b6b296a4220bc3f867f0911fee6952208b04167 + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b + languageName: node + linkType: hard + +"path-exists@npm:^5.0.0": + version: 5.0.0 + resolution: "path-exists@npm:5.0.0" + checksum: b170f3060b31604cde93eefdb7392b89d832dfbc1bed717c9718cbe0f230c1669b7e75f87e19901da2250b84d092989a0f9e44d2ef41deb09aa3ad28e691a40a + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 + languageName: node + linkType: hard + +"path-key@npm:4.0.0, path-key@npm:^4.0.0": + version: 4.0.0 + resolution: "path-key@npm:4.0.0" + checksum: 794efeef32863a65ac312f3c0b0a99f921f3e827ff63afa5cb09a377e202c262b671f7b3832a4e64731003fa94af0263713962d317b9887bd1e0c48a342efba3 + languageName: node + linkType: hard + +"path-key@npm:^3.0.0, path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 + languageName: node + linkType: hard + +"path-scurry@npm:^1.10.1": + version: 1.10.1 + resolution: "path-scurry@npm:1.10.1" + dependencies: + lru-cache: "npm:^9.1.1 || ^10.0.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: e5dc78a7348d25eec61ab166317e9e9c7b46818aa2c2b9006c507a6ff48c672d011292d9662527213e558f5652ce0afcc788663a061d8b59ab495681840c0c1e + languageName: node + linkType: hard + +"path-temp@npm:^2.1.0": + version: 2.1.0 + resolution: "path-temp@npm:2.1.0" + dependencies: + unique-string: "npm:^2.0.0" + checksum: 65063e986c51a6edb6b8b73e2c35b24abdd51d0b317f7cd95e3166b2bc67096afdc589d62b3138cfcd18a16b3eac77f08b840e10855e55c43724e76f6526ce9d + languageName: node + linkType: hard + +"path-to-regexp@npm:0.1.7": + version: 0.1.7 + resolution: "path-to-regexp@npm:0.1.7" + checksum: 50a1ddb1af41a9e68bd67ca8e331a705899d16fb720a1ea3a41e310480948387daf603abb14d7b0826c58f10146d49050a1291ba6a82b78a382d1c02c0b8f905 + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c + languageName: node + linkType: hard + +"path-type@npm:^5.0.0": + version: 5.0.0 + resolution: "path-type@npm:5.0.0" + checksum: e8f4b15111bf483900c75609e5e74e3fcb79f2ddb73e41470028fcd3e4b5162ec65da9907be077ee5012c18801ff7fffb35f9f37a077f3f81d85a0b7d6578efd + languageName: node + linkType: hard + +"pathe@npm:^1.1.0, pathe@npm:^1.1.1": + version: 1.1.1 + resolution: "pathe@npm:1.1.1" + checksum: 3ae5a0529c3415d91c3ac9133f52cffea54a0dd46892fe059f4b80faf36fd207957d4594bdc87043b65d0761b1e5728f81f46bafff3b5302da4e2e48889b8c0e + languageName: node + linkType: hard + +"peek-readable@npm:^5.0.0": + version: 5.0.0 + resolution: "peek-readable@npm:5.0.0" + checksum: 060aece3a907a157b4839aa923b61b664b59cac7296dc8d8e0ddcc39065a4f1e328dd2f171c8a49e869aabc6e076a1be59f939183fb0ababc81f3c870006d672 + languageName: node + linkType: hard + +"pend@npm:~1.2.0": + version: 1.2.0 + resolution: "pend@npm:1.2.0" + checksum: 8a87e63f7a4afcfb0f9f77b39bb92374afc723418b9cb716ee4257689224171002e07768eeade4ecd0e86f1fa3d8f022994219fb45634f2dbd78c6803e452458 + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0": + version: 1.0.0 + resolution: "picocolors@npm:1.0.0" + checksum: 20a5b249e331c14479d94ec6817a182fd7a5680debae82705747b2db7ec50009a5f6648d0621c561b0572703f84dbef0858abcbd5856d3c5511426afcb1961f7 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be + languageName: node + linkType: hard + +"pidtree@npm:0.6.0": + version: 0.6.0 + resolution: "pidtree@npm:0.6.0" + bin: + pidtree: bin/pidtree.js + checksum: 0829ec4e9209e230f74ebf4265f5ccc9ebfb488334b525cb13f86ff801dca44b362c41252cd43ae4d7653a10a5c6ab3be39d2c79064d6895e0d78dc50a5ed6e9 + languageName: node + linkType: hard + +"pify@npm:^4.0.1": + version: 4.0.1 + resolution: "pify@npm:4.0.1" + checksum: 6f9d404b0d47a965437403c9b90eca8bb2536407f03de165940e62e72c8c8b75adda5516c6b9b23675a5877cc0bcac6bdfb0ef0e39414cd2476d5495da40e7cf + languageName: node + linkType: hard + +"pino-abstract-transport@npm:^1.0.0, pino-abstract-transport@npm:v1.1.0": + version: 1.1.0 + resolution: "pino-abstract-transport@npm:1.1.0" + dependencies: + readable-stream: "npm:^4.0.0" + split2: "npm:^4.0.0" + checksum: 6e9b9d5a2c0a37f91ecaf224d335daae1ae682b1c79a05b06ef9e0f0a5d289f8e597992217efc857796dae6f1067e9b4882f95c6228ff433ddc153532cae8aca + languageName: node + linkType: hard + +"pino-http@npm:^5.3.0": + version: 5.8.0 + resolution: "pino-http@npm:5.8.0" + dependencies: + fast-url-parser: "npm:^1.1.3" + pino: "npm:^6.13.0" + pino-std-serializers: "npm:^4.0.0" + checksum: 276a58b8443b4f679d127496f1d0c4a73548bc90a2f59d23fbb45d3a9195a46c103fc3feaa066d8a7df284eba43e44dfa4d92c836c6cc68689fc3f89a6c2a5b5 + languageName: node + linkType: hard + +"pino-pretty@npm:*": + version: 10.3.0 + resolution: "pino-pretty@npm:10.3.0" + dependencies: + colorette: "npm:^2.0.7" + dateformat: "npm:^4.6.3" + fast-copy: "npm:^3.0.0" + fast-safe-stringify: "npm:^2.1.1" + help-me: "npm:^5.0.0" + joycon: "npm:^3.1.1" + minimist: "npm:^1.2.6" + on-exit-leak-free: "npm:^2.1.0" + pino-abstract-transport: "npm:^1.0.0" + pump: "npm:^3.0.0" + readable-stream: "npm:^4.0.0" + secure-json-parse: "npm:^2.4.0" + sonic-boom: "npm:^3.0.0" + strip-json-comments: "npm:^3.1.1" + bin: + pino-pretty: bin.js + checksum: c2d7be2f5ced96df8eab0e8fab3d3e75d8c91e9d26254214f26fe7d08e7ace3933024f364a028e50373dab85e8aa35b5710b18bcf43dec8fa23e52438579382d + languageName: node + linkType: hard + +"pino-pretty@npm:^6.0.0": + version: 6.0.0 + resolution: "pino-pretty@npm:6.0.0" + dependencies: + "@hapi/bourne": "npm:^2.0.0" + args: "npm:^5.0.1" + colorette: "npm:^1.3.0" + dateformat: "npm:^4.5.1" + fast-safe-stringify: "npm:^2.0.7" + jmespath: "npm:^0.15.0" + joycon: "npm:^3.0.0" + pump: "npm:^3.0.0" + readable-stream: "npm:^3.6.0" + rfdc: "npm:^1.3.0" + split2: "npm:^3.1.1" + strip-json-comments: "npm:^3.1.1" + bin: + pino-pretty: bin.js + checksum: c2d995204243f86cc5238ad9b6f8b9d79eebc0c1c033ff00c28c16f38026b7d940f51d75e11e4f80cf11aa20e615d163347757f4f64c940a039d5f5b100e2bd3 + languageName: node + linkType: hard + +"pino-std-serializers@npm:*, pino-std-serializers@npm:^6.0.0, pino-std-serializers@npm:^6.2.2": + version: 6.2.2 + resolution: "pino-std-serializers@npm:6.2.2" + checksum: 8f1c7f0f0d8f91e6c6b5b2a6bfb48f06441abeb85f1c2288319f736f9c6d814fbeebe928d2314efc2ba6018fa7db9357a105eca9fc99fc1f28945a8a8b28d3d5 + languageName: node + linkType: hard + +"pino-std-serializers@npm:^3.1.0": + version: 3.2.0 + resolution: "pino-std-serializers@npm:3.2.0" + checksum: ae08159372b5bbe69f13770a7f20ba7ded0bb97b2c6f42f780995582135ca907e66504f06371c12f991dbfcd489280f942786c02a9e8e952974d455cb0a477c9 + languageName: node + linkType: hard + +"pino-std-serializers@npm:^4.0.0": + version: 4.0.0 + resolution: "pino-std-serializers@npm:4.0.0" + checksum: 9e8ccac9ce04a27ccc7aa26481d431b9e037d866b101b89d895c60b925baffb82685e84d5c29b05d8e3d7c146d766a9b08949cb24ab1ec526a16134c9962d649 + languageName: node + linkType: hard + +"pino@npm:^6.13.0, pino@npm:^6.7.0": + version: 6.14.0 + resolution: "pino@npm:6.14.0" + dependencies: + fast-redact: "npm:^3.0.0" + fast-safe-stringify: "npm:^2.0.8" + flatstr: "npm:^1.0.12" + pino-std-serializers: "npm:^3.1.0" + process-warning: "npm:^1.0.0" + quick-format-unescaped: "npm:^4.0.3" + sonic-boom: "npm:^1.0.2" + bin: + pino: bin.js + checksum: 5d3cb22c804e2bf2439ace64a46a7901d0a138cb75715ad8a8bbcf3ddb09dc5e33a9fc8a49527c3345d317619748c6de94d28481911ae931c21b953e24048425 + languageName: node + linkType: hard + +"pino@npm:^8.5.0": + version: 8.17.1 + resolution: "pino@npm:8.17.1" + dependencies: + atomic-sleep: "npm:^1.0.0" + fast-redact: "npm:^3.1.1" + on-exit-leak-free: "npm:^2.1.0" + pino-abstract-transport: "npm:v1.1.0" + pino-std-serializers: "npm:^6.0.0" + process-warning: "npm:^2.0.0" + quick-format-unescaped: "npm:^4.0.3" + real-require: "npm:^0.2.0" + safe-stable-stringify: "npm:^2.3.1" + sonic-boom: "npm:^3.7.0" + thread-stream: "npm:^2.0.0" + bin: + pino: bin.js + checksum: eab640886ae13b92466ebe3d255faf4c3d8012d8b7609dee3cafd8c8d403241ab336ef15283319fc2078f21ad944e1ee8f9cf154bc695c61a583302c40d2045a + languageName: node + linkType: hard + +"pirates@npm:^4.0.4": + version: 4.0.6 + resolution: "pirates@npm:4.0.6" + checksum: 00d5fa51f8dded94d7429700fb91a0c1ead00ae2c7fd27089f0c5b63e6eca36197fe46384631872690a66f390c5e27198e99006ab77ae472692ab9c2ca903f36 + languageName: node + linkType: hard + +"pkg-conf@npm:^3.1.0": + version: 3.1.0 + resolution: "pkg-conf@npm:3.1.0" + dependencies: + find-up: "npm:^3.0.0" + load-json-file: "npm:^5.2.0" + checksum: 450165ed660dc42975bf052f8b1af8a514d8e470f41118d68c8a3f7e2342ae1812057568900f44d89583f94c2397e226abcc69df37457c05048366481ebeb324 + languageName: node + linkType: hard + +"pkg-dir@npm:^4.2.0": + version: 4.2.0 + resolution: "pkg-dir@npm:4.2.0" + dependencies: + find-up: "npm:^4.0.0" + checksum: c56bda7769e04907a88423feb320babaed0711af8c436ce3e56763ab1021ba107c7b0cafb11cde7529f669cfc22bffcaebffb573645cbd63842ea9fb17cd7728 + languageName: node + linkType: hard + +"pkg-dir@npm:^7.0.0": + version: 7.0.0 + resolution: "pkg-dir@npm:7.0.0" + dependencies: + find-up: "npm:^6.3.0" + checksum: 1afb23d2efb1ec9d8b2c4a0c37bf146822ad2774f074cb05b853be5dca1b40815c5960dd126df30ab8908349262a266f31b771e877235870a3b8fd313beebec5 + languageName: node + linkType: hard + +"pkg-types@npm:^1.0.3": + version: 1.0.3 + resolution: "pkg-types@npm:1.0.3" + dependencies: + jsonc-parser: "npm:^3.2.0" + mlly: "npm:^1.2.0" + pathe: "npm:^1.1.0" + checksum: 7f692ff2005f51b8721381caf9bdbc7f5461506ba19c34f8631660a215c8de5e6dca268f23a319dd180b8f7c47a0dc6efea14b376c485ff99e98d810b8f786c4 + languageName: node + linkType: hard + +"posix-character-classes@npm:^0.1.0": + version: 0.1.1 + resolution: "posix-character-classes@npm:0.1.1" + checksum: cce88011548a973b4af58361cd8f5f7b5a6faff8eef0901565802f067bcabf82597e920d4c97c22068464be3cbc6447af589f6cc8a7d813ea7165be60a0395bc + languageName: node + linkType: hard + +"postcss-values-parser@npm:^6.0.2": + version: 6.0.2 + resolution: "postcss-values-parser@npm:6.0.2" + dependencies: + color-name: "npm:^1.1.4" + is-url-superb: "npm:^4.0.0" + quote-unquote: "npm:^1.0.0" + peerDependencies: + postcss: ^8.2.9 + checksum: 633b8bc7c46f7b6e2b1cb1f33aa0222a5cacb7f485eb41e6f902b5f37ab9884cd8e7e7b0706afb7e3c7766d85096b59e65f59a1eaefac55e2fc952a24f23bcb8 + languageName: node + linkType: hard + +"postcss@npm:^8.4.23": + version: 8.4.32 + resolution: "postcss@npm:8.4.32" + dependencies: + nanoid: "npm:^3.3.7" + picocolors: "npm:^1.0.0" + source-map-js: "npm:^1.0.2" + checksum: 39308a9195fa34d4dbdd7b58a896cff0c7809f84f7a4ac1b95b68ca86c9138a395addff33075668ed3983d41b90aac05754c445237a9365eb1c3a5602ebd03ad + languageName: node + linkType: hard + +"prebuild-install@npm:^7.1.1": + version: 7.1.1 + resolution: "prebuild-install@npm:7.1.1" + dependencies: + detect-libc: "npm:^2.0.0" + expand-template: "npm:^2.0.3" + github-from-package: "npm:0.0.0" + minimist: "npm:^1.2.3" + mkdirp-classic: "npm:^0.5.3" + napi-build-utils: "npm:^1.0.1" + node-abi: "npm:^3.3.0" + pump: "npm:^3.0.0" + rc: "npm:^1.2.7" + simple-get: "npm:^4.0.0" + tar-fs: "npm:^2.0.0" + tunnel-agent: "npm:^0.6.0" + bin: + prebuild-install: bin.js + checksum: 6dc70f36b0f4adcb2fe0ed38d874ab28b571fb1a9725d769e8ba3f64a15831e58462de09f3e6e64569bcc4a3e03b9328b56faa0d45fe10ae1574478814536c76 + languageName: node + linkType: hard + +"precinct@npm:^11.0.0": + version: 11.0.5 + resolution: "precinct@npm:11.0.5" + dependencies: + "@dependents/detective-less": "npm:^4.1.0" + commander: "npm:^10.0.1" + detective-amd: "npm:^5.0.2" + detective-cjs: "npm:^5.0.1" + detective-es6: "npm:^4.0.1" + detective-postcss: "npm:^6.1.3" + detective-sass: "npm:^5.0.3" + detective-scss: "npm:^4.0.3" + detective-stylus: "npm:^4.0.0" + detective-typescript: "npm:^11.1.0" + module-definition: "npm:^5.0.1" + node-source-walk: "npm:^6.0.2" + bin: + precinct: bin/cli.js + checksum: b11751de9174a10fde45b408c1b7fa69b4af587acc60c4df93dbadf9491393b65ca220bbcacfd9b7b3c00976e4b74affbe6ecf5f989ba92085eca3b57c79e88a + languageName: node + linkType: hard + +"precond@npm:0.2": + version: 0.2.3 + resolution: "precond@npm:0.2.3" + checksum: 289b71202c090286fab340acafc96bc1d719e6f2d2484a868ef5dff28efd5953bafda78aebe4416ebf907992aa88942e68cd53ed7e2ab9eaf0709a6b5ac72340 + languageName: node + linkType: hard + +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd + languageName: node + linkType: hard + +"prettier@npm:^2.7.1": + version: 2.8.8 + resolution: "prettier@npm:2.8.8" + bin: + prettier: bin-prettier.js + checksum: 463ea8f9a0946cd5b828d8cf27bd8b567345cf02f56562d5ecde198b91f47a76b7ac9eae0facd247ace70e927143af6135e8cf411986b8cb8478784a4d6d724a + languageName: node + linkType: hard + +"pretty-format@npm:^27.5.1": + version: 27.5.1 + resolution: "pretty-format@npm:27.5.1" + dependencies: + ansi-regex: "npm:^5.0.1" + ansi-styles: "npm:^5.0.0" + react-is: "npm:^17.0.1" + checksum: 0cbda1031aa30c659e10921fa94e0dd3f903ecbbbe7184a729ad66f2b6e7f17891e8c7d7654c458fa4ccb1a411ffb695b4f17bbcd3fe075fabe181027c4040ed + languageName: node + linkType: hard + +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": + version: 29.7.0 + resolution: "pretty-format@npm:29.7.0" + dependencies: + "@jest/schemas": "npm:^29.6.3" + ansi-styles: "npm:^5.0.0" + react-is: "npm:^18.0.0" + checksum: edc5ff89f51916f036c62ed433506b55446ff739358de77207e63e88a28ca2894caac6e73dcb68166a606e51c8087d32d400473e6a9fdd2dbe743f46c9c0276f + languageName: node + linkType: hard + +"pretty-ms@npm:^8.0.0": + version: 8.0.0 + resolution: "pretty-ms@npm:8.0.0" + dependencies: + parse-ms: "npm:^3.0.0" + checksum: e960d633ecca45445cf5c6dffc0f5e4bef6744c92449ab0e8c6c704800675ab71e181c5e02ece5265e02137a33e313d3f3e355fbf8ea30b4b5b23de423329f8d + languageName: node + linkType: hard + +"prettyjson@npm:1.2.5": + version: 1.2.5 + resolution: "prettyjson@npm:1.2.5" + dependencies: + colors: "npm:1.4.0" + minimist: "npm:^1.2.0" + bin: + prettyjson: bin/prettyjson + checksum: 94ea84205fc5103e32d562f515631c22440f7bcf4de5f5687522692e3f270bf4f450170857e098926adaec1b4ef33c9a8c97ae8911079a50fe7f584dd9ae5058 + languageName: node + linkType: hard + +"probot@npm:^12.2.1, probot@npm:^12.2.4": + version: 12.3.3 + resolution: "probot@npm:12.3.3" + dependencies: + "@octokit/core": "npm:^3.2.4" + "@octokit/plugin-enterprise-compatibility": "npm:^1.2.8" + "@octokit/plugin-paginate-rest": "npm:^2.6.2" + "@octokit/plugin-rest-endpoint-methods": "npm:^5.0.1" + "@octokit/plugin-retry": "npm:^3.0.6" + "@octokit/plugin-throttling": "npm:^3.3.4" + "@octokit/types": "npm:^8.0.0" + "@octokit/webhooks": "npm:^9.26.3" + "@probot/get-private-key": "npm:^1.1.0" + "@probot/octokit-plugin-config": "npm:^1.0.0" + "@probot/pino": "npm:^2.2.0" + "@types/express": "npm:^4.17.9" + "@types/ioredis": "npm:^4.27.1" + "@types/pino": "npm:^6.3.4" + "@types/pino-http": "npm:^5.0.6" + commander: "npm:^6.2.0" + deepmerge: "npm:^4.2.2" + deprecation: "npm:^2.3.1" + dotenv: "npm:^8.2.0" + eventsource: "npm:^2.0.2" + express: "npm:^4.17.1" + express-handlebars: "npm:^6.0.3" + ioredis: "npm:^4.27.8" + js-yaml: "npm:^3.14.1" + lru-cache: "npm:^6.0.0" + octokit-auth-probot: "npm:^1.2.2" + pino: "npm:^6.7.0" + pino-http: "npm:^5.3.0" + pkg-conf: "npm:^3.1.0" + resolve: "npm:^1.19.0" + semver: "npm:^7.3.4" + update-dotenv: "npm:^1.1.1" + uuid: "npm:^8.3.2" + bin: + probot: bin/probot.js + checksum: 5a98678f5333e6897a29f33ae1645119ffef5130b04425615fe598acc87e3905eb2b40a6f4f1f36b4605802b9513dbcd58b022aedc6bc6d1f1db10cb7a02684e + languageName: node + linkType: hard + +"proc-log@npm:^3.0.0": + version: 3.0.0 + resolution: "proc-log@npm:3.0.0" + checksum: f66430e4ff947dbb996058f6fd22de2c66612ae1a89b097744e17fb18a4e8e7a86db99eda52ccf15e53f00b63f4ec0b0911581ff2aac0355b625c8eac509b0dc + languageName: node + linkType: hard + +"process-nextick-args@npm:~2.0.0": + version: 2.0.1 + resolution: "process-nextick-args@npm:2.0.1" + checksum: bec089239487833d46b59d80327a1605e1c5287eaad770a291add7f45fda1bb5e28b38e0e061add0a1d0ee0984788ce74fa394d345eed1c420cacf392c554367 + languageName: node + linkType: hard + +"process-warning@npm:^1.0.0": + version: 1.0.0 + resolution: "process-warning@npm:1.0.0" + checksum: 43ec4229d64eb5c58340c8aacade49eb5f6fd513eae54140abf365929ca20987f0a35c5868125e2b583cad4de8cd257beb5667d9cc539d9190a7a4c3014adf22 + languageName: node + linkType: hard + +"process-warning@npm:^2.0.0": + version: 2.3.2 + resolution: "process-warning@npm:2.3.2" + checksum: 6bccf187f604dd63067ae8b5a08f658d1cc5df4948a51525691a564ad9250575802c094dd5d1b69f015934fe5df6d925f2e607d7a589918069129b07a777aa7b + languageName: node + linkType: hard + +"process@npm:^0.10.0": + version: 0.10.1 + resolution: "process@npm:0.10.1" + checksum: 2608c672bb59fbd5e87f0c4df512540995af7e047c4eed024e1a4a1c9b144ce394840ce15069a97b82afef7aa58c6e2e8e959c1b711fe3a1f7bfb6529b03084c + languageName: node + linkType: hard + +"process@npm:^0.11.10": + version: 0.11.10 + resolution: "process@npm:0.11.10" + checksum: 40c3ce4b7e6d4b8c3355479df77aeed46f81b279818ccdc500124e6a5ab882c0cc81ff7ea16384873a95a74c4570b01b120f287abbdd4c877931460eca6084b3 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: "npm:^2.0.2" + retry: "npm:^0.12.0" + checksum: 9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 + languageName: node + linkType: hard + +"prompts@npm:^2.0.1": + version: 2.4.2 + resolution: "prompts@npm:2.4.2" + dependencies: + kleur: "npm:^3.0.3" + sisteransi: "npm:^1.0.5" + checksum: 16f1ac2977b19fe2cf53f8411cc98db7a3c8b115c479b2ca5c82b5527cd937aa405fa04f9a5960abeb9daef53191b53b4d13e35c1f5d50e8718c76917c5f1ea4 + languageName: node + linkType: hard + +"proto-list@npm:~1.2.1": + version: 1.2.4 + resolution: "proto-list@npm:1.2.4" + checksum: b9179f99394ec8a68b8afc817690185f3b03933f7b46ce2e22c1930dc84b60d09f5ad222beab4e59e58c6c039c7f7fcf620397235ef441a356f31f9744010e12 + languageName: node + linkType: hard + +"protobufjs@npm:^7.1.2, protobufjs@npm:^7.2.2, protobufjs@npm:^7.2.3, protobufjs@npm:^7.2.4": + version: 7.2.5 + resolution: "protobufjs@npm:7.2.5" + dependencies: + "@protobufjs/aspromise": "npm:^1.1.2" + "@protobufjs/base64": "npm:^1.1.2" + "@protobufjs/codegen": "npm:^2.0.4" + "@protobufjs/eventemitter": "npm:^1.1.0" + "@protobufjs/fetch": "npm:^1.1.0" + "@protobufjs/float": "npm:^1.0.2" + "@protobufjs/inquire": "npm:^1.1.0" + "@protobufjs/path": "npm:^1.1.2" + "@protobufjs/pool": "npm:^1.1.0" + "@protobufjs/utf8": "npm:^1.1.0" + "@types/node": "npm:>=13.7.0" + long: "npm:^5.0.0" + checksum: 12bb88965a2291ec717daddb1b7153c0e567586076da7d138c8f04558d3d0a9cad6445a3558f16c1a61f5cd9dec1a107712590daccb71763429d9b1e10d164d3 + languageName: node + linkType: hard + +"proxy-addr@npm:^2.0.7, proxy-addr@npm:~2.0.7": + version: 2.0.7 + resolution: "proxy-addr@npm:2.0.7" + dependencies: + forwarded: "npm:0.2.0" + ipaddr.js: "npm:1.9.1" + checksum: c3eed999781a35f7fd935f398b6d8920b6fb00bbc14287bc6de78128ccc1a02c89b95b56742bf7cf0362cc333c61d138532049c7dedc7a328ef13343eff81210 + languageName: node + linkType: hard + +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b + languageName: node + linkType: hard + +"ps-list@npm:^8.0.0": + version: 8.1.1 + resolution: "ps-list@npm:8.1.1" + checksum: 5c0fa265f910e03eac14e0785f106d481c4bc3eb95f6fd77a055c231194a5accdea5e1e410050bdb5976cf1620a0bcf41923a10c9540e3ad1b9c8e0bd402116b + languageName: node + linkType: hard + +"psl@npm:^1.1.33": + version: 1.9.0 + resolution: "psl@npm:1.9.0" + checksum: 6a3f805fdab9442f44de4ba23880c4eba26b20c8e8e0830eff1cb31007f6825dace61d17203c58bfe36946842140c97a1ba7f67bc63ca2d88a7ee052b65d97ab + languageName: node + linkType: hard + +"pstree.remy@npm:^1.1.8": + version: 1.1.8 + resolution: "pstree.remy@npm:1.1.8" + checksum: 30f78c88ce6393cb3f7834216cb6e282eb83c92ccb227430d4590298ab2811bc4a4745f850a27c5178e79a8f3e316591de0fec87abc19da648c2b3c6eb766d14 + languageName: node + linkType: hard + +"pump@npm:3.0.0, pump@npm:^3.0.0": + version: 3.0.0 + resolution: "pump@npm:3.0.0" + dependencies: + end-of-stream: "npm:^1.1.0" + once: "npm:^1.3.1" + checksum: bbdeda4f747cdf47db97428f3a135728669e56a0ae5f354a9ac5b74556556f5446a46f720a8f14ca2ece5be9b4d5d23c346db02b555f46739934cc6c093a5478 + languageName: node + linkType: hard + +"pump@npm:^1.0.0": + version: 1.0.3 + resolution: "pump@npm:1.0.3" + dependencies: + end-of-stream: "npm:^1.1.0" + once: "npm:^1.3.1" + checksum: fa8c1ef9c82d596872446ba0aae5a1b01cb51fcf876b8a93edd7b8abd03e0dc5ffe2683a939c2db142aa587f86dec69028c49a043ef37145e8639859bb57401e + languageName: node + linkType: hard + +"punycode@npm:^1.3.2": + version: 1.4.1 + resolution: "punycode@npm:1.4.1" + checksum: 354b743320518aef36f77013be6e15da4db24c2b4f62c5f1eb0529a6ed02fbaf1cb52925785f6ab85a962f2b590d9cd5ad730b70da72b5f180e2556b8bd3ca08 + languageName: node + linkType: hard + +"punycode@npm:^2.1.0, punycode@npm:^2.1.1, punycode@npm:^2.3.0": + version: 2.3.0 + resolution: "punycode@npm:2.3.0" + checksum: 8e6f7abdd3a6635820049e3731c623bbef3fedbf63bbc696b0d7237fdba4cefa069bc1fa62f2938b0fbae057550df7b5318f4a6bcece27f1907fc75c54160bee + languageName: node + linkType: hard + +"pupa@npm:^3.1.0": + version: 3.1.0 + resolution: "pupa@npm:3.1.0" + dependencies: + escape-goat: "npm:^4.0.0" + checksum: 02afa6e4547a733484206aaa8f8eb3fbfb12d3dd17d7ca4fa1ea390a7da2cb8f381e38868bbf68009c4d372f8f6059f553171b6a712d8f2802c7cd43d513f06c + languageName: node + linkType: hard + +"pure-rand@npm:^6.0.0": + version: 6.0.3 + resolution: "pure-rand@npm:6.0.3" + checksum: f8bf59c29ef7fa6302e462cae3aa47932fb364e1bf8f095667b542d77c6fa26e52068eefa5c39b2e715a6c92d41fd8dd321bf81c07077f45e9373fc33f80e0ed + languageName: node + linkType: hard + +"qs@npm:6.11.0": + version: 6.11.0 + resolution: "qs@npm:6.11.0" + dependencies: + side-channel: "npm:^1.0.4" + checksum: 4e4875e4d7c7c31c233d07a448e7e4650f456178b9dd3766b7cfa13158fdb24ecb8c4f059fa91e820dc6ab9f2d243721d071c9c0378892dcdad86e9e9a27c68f + languageName: node + linkType: hard + +"qs@npm:^6.9.6": + version: 6.11.2 + resolution: "qs@npm:6.11.2" + dependencies: + side-channel: "npm:^1.0.4" + checksum: 4f95d4ff18ed480befcafa3390022817ffd3087fc65f146cceb40fc5edb9fa96cb31f648cae2fa96ca23818f0798bd63ad4ca369a0e22702fcd41379b3ab6571 + languageName: node + linkType: hard + +"querystringify@npm:^2.1.1": + version: 2.2.0 + resolution: "querystringify@npm:2.2.0" + checksum: 3258bc3dbdf322ff2663619afe5947c7926a6ef5fb78ad7d384602974c467fadfc8272af44f5eb8cddd0d011aae8fabf3a929a8eee4b86edcc0a21e6bd10f9aa + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + +"queue-tick@npm:^1.0.1": + version: 1.0.1 + resolution: "queue-tick@npm:1.0.1" + checksum: 0db998e2c9b15215317dbcf801e9b23e6bcde4044e115155dae34f8e7454b9a783f737c9a725528d677b7a66c775eb7a955cf144fe0b87f62b575ce5bfd515a9 + languageName: node + linkType: hard + +"quick-format-unescaped@npm:^4.0.3": + version: 4.0.4 + resolution: "quick-format-unescaped@npm:4.0.4" + checksum: fe5acc6f775b172ca5b4373df26f7e4fd347975578199e7d74b2ae4077f0af05baa27d231de1e80e8f72d88275ccc6028568a7a8c9ee5e7368ace0e18eff93a4 + languageName: node + linkType: hard + +"quick-lru@npm:^4.0.1": + version: 4.0.1 + resolution: "quick-lru@npm:4.0.1" + checksum: f9b1596fa7595a35c2f9d913ac312fede13d37dc8a747a51557ab36e11ce113bbe88ef4c0154968845559a7709cb6a7e7cbe75f7972182451cd45e7f057a334d + languageName: node + linkType: hard + +"quick-lru@npm:^5.1.1": + version: 5.1.1 + resolution: "quick-lru@npm:5.1.1" + checksum: a24cba5da8cec30d70d2484be37622580f64765fb6390a928b17f60cd69e8dbd32a954b3ff9176fa1b86d86ff2ba05252fae55dc4d40d0291c60412b0ad096da + languageName: node + linkType: hard + +"quote-unquote@npm:^1.0.0": + version: 1.0.0 + resolution: "quote-unquote@npm:1.0.0" + checksum: eba86bb7f68ada486f5608c5c71cc155235f0408b8a0a180436cdf2457ae86f56a17de6b0bc5a1b7ae5f27735b3b789662cdf7f3b8195ac816cd0289085129ec + languageName: node + linkType: hard + +"radix3@npm:^1.1.0": + version: 1.1.0 + resolution: "radix3@npm:1.1.0" + checksum: a0c3b2c698e365cf6ff8dd01d4651d5e79042c55dc008871247aa5e0d60951d86a00457ce0c75e3a71adc52992aa4c33ab060a63771d2dfb6a0c1502b97a644c + languageName: node + linkType: hard + +"ramda@npm:@pnpm/ramda@0.28.1": + version: 0.28.1 + resolution: "@pnpm/ramda@npm:0.28.1" + checksum: a06caeeb88202bf442979191f1e8eb4eb8879a6cae70091010b53dd64e7793758be01d9c92dd1ecf0a3b8fd0e83329bc0343977880a2fe0dc7e69e4c6ebbddd6 + languageName: node + linkType: hard + +"random-bytes@npm:~1.0.0": + version: 1.0.0 + resolution: "random-bytes@npm:1.0.0" + checksum: 71e7a600e0976e9ebc269793a0577d47b965fa678fcc9e9623e427f909d1b3669db5b3a178dbf61229f0724ea23dba64db389f0be0ba675c6a6b837c02f29b8f + languageName: node + linkType: hard + +"range-parser@npm:~1.2.1": + version: 1.2.1 + resolution: "range-parser@npm:1.2.1" + checksum: 96c032ac2475c8027b7a4e9fe22dc0dfe0f6d90b85e496e0f016fbdb99d6d066de0112e680805075bd989905e2123b3b3d002765149294dce0c1f7f01fcc2ea0 + languageName: node + linkType: hard + +"raw-body@npm:2.5.1": + version: 2.5.1 + resolution: "raw-body@npm:2.5.1" + dependencies: + bytes: "npm:3.1.2" + http-errors: "npm:2.0.0" + iconv-lite: "npm:0.4.24" + unpipe: "npm:1.0.0" + checksum: 5dad5a3a64a023b894ad7ab4e5c7c1ce34d3497fc7138d02f8c88a3781e68d8a55aa7d4fd3a458616fa8647cc228be314a1c03fb430a07521de78b32c4dd09d2 + languageName: node + linkType: hard + +"raw-body@npm:2.5.2": + version: 2.5.2 + resolution: "raw-body@npm:2.5.2" + dependencies: + bytes: "npm:3.1.2" + http-errors: "npm:2.0.0" + iconv-lite: "npm:0.4.24" + unpipe: "npm:1.0.0" + checksum: b201c4b66049369a60e766318caff5cb3cc5a900efd89bdac431463822d976ad0670912c931fdbdcf5543207daf6f6833bca57aa116e1661d2ea91e12ca692c4 + languageName: node + linkType: hard + +"rc@npm:1.2.8, rc@npm:^1.2.7": + version: 1.2.8 + resolution: "rc@npm:1.2.8" + dependencies: + deep-extend: "npm:^0.6.0" + ini: "npm:~1.3.0" + minimist: "npm:^1.2.0" + strip-json-comments: "npm:~2.0.1" + bin: + rc: ./cli.js + checksum: 24a07653150f0d9ac7168e52943cc3cb4b7a22c0e43c7dff3219977c2fdca5a2760a304a029c20811a0e79d351f57d46c9bde216193a0f73978496afc2b85b15 + languageName: node + linkType: hard + +"react-is@npm:^17.0.1": + version: 17.0.2 + resolution: "react-is@npm:17.0.2" + checksum: 2bdb6b93fbb1820b024b496042cce405c57e2f85e777c9aabd55f9b26d145408f9f74f5934676ffdc46f3dcff656d78413a6e43968e7b3f92eea35b3052e9053 + languageName: node + linkType: hard + +"react-is@npm:^18.0.0": + version: 18.2.0 + resolution: "react-is@npm:18.2.0" + checksum: 6eb5e4b28028c23e2bfcf73371e72cd4162e4ac7ab445ddae2afe24e347a37d6dc22fae6e1748632cd43c6d4f9b8f86dcf26bf9275e1874f436d129952528ae0 + languageName: node + linkType: hard + +"read-package-json-fast@npm:^3.0.0": + version: 3.0.2 + resolution: "read-package-json-fast@npm:3.0.2" + dependencies: + json-parse-even-better-errors: "npm:^3.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + checksum: 37787e075f0260a92be0428687d9020eecad7ece3bda37461c2219e50d1ec183ab6ba1d9ada193691435dfe119a42c8a5b5b5463f08c8ddbc3d330800b265318 + languageName: node + linkType: hard + +"read-pkg-up@npm:9.1.0, read-pkg-up@npm:^9.0.0": + version: 9.1.0 + resolution: "read-pkg-up@npm:9.1.0" + dependencies: + find-up: "npm:^6.3.0" + read-pkg: "npm:^7.1.0" + type-fest: "npm:^2.5.0" + checksum: 3fb44889ff930b5c7b5cef9929fc5b2a8a80bc877682be0aef8daff7fc65b1f150bb4e61e7d4e7a11772b7b9b8e05843528031fe8111a7696b6deb652ee4287f + languageName: node + linkType: hard + +"read-pkg-up@npm:^7.0.1": + version: 7.0.1 + resolution: "read-pkg-up@npm:7.0.1" + dependencies: + find-up: "npm:^4.1.0" + read-pkg: "npm:^5.2.0" + type-fest: "npm:^0.8.1" + checksum: 82b3ac9fd7c6ca1bdc1d7253eb1091a98ff3d195ee0a45386582ce3e69f90266163c34121e6a0a02f1630073a6c0585f7880b3865efcae9c452fa667f02ca385 + languageName: node + linkType: hard + +"read-pkg@npm:^5.2.0": + version: 5.2.0 + resolution: "read-pkg@npm:5.2.0" + dependencies: + "@types/normalize-package-data": "npm:^2.4.0" + normalize-package-data: "npm:^2.5.0" + parse-json: "npm:^5.0.0" + type-fest: "npm:^0.6.0" + checksum: b51a17d4b51418e777029e3a7694c9bd6c578a5ab99db544764a0b0f2c7c0f58f8a6bc101f86a6fceb8ba6d237d67c89acf6170f6b98695d0420ddc86cf109fb + languageName: node + linkType: hard + +"read-pkg@npm:^7.1.0": + version: 7.1.0 + resolution: "read-pkg@npm:7.1.0" + dependencies: + "@types/normalize-package-data": "npm:^2.4.1" + normalize-package-data: "npm:^3.0.2" + parse-json: "npm:^5.2.0" + type-fest: "npm:^2.0.0" + checksum: 5d67a9a1c96f6ee7765743c741f446e0556388dd60236ebfe3a8675019753b49da0863a871763bbdde81a8b3a07d03039088a21bf2dbf6ec485728958d9e93a3 + languageName: node + linkType: hard + +"readable-stream@npm:3, readable-stream@npm:^3.0.0, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: "npm:^2.0.3" + string_decoder: "npm:^1.1.1" + util-deprecate: "npm:^1.0.1" + checksum: e37be5c79c376fdd088a45fa31ea2e423e5d48854be7a22a58869b4e84d25047b193f6acb54f1012331e1bcd667ffb569c01b99d36b0bd59658fb33f513511b7 + languageName: node + linkType: hard + +"readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.2, readable-stream@npm:^2.0.5, readable-stream@npm:^2.1.5, readable-stream@npm:~2.3.6": + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" + dependencies: + core-util-is: "npm:~1.0.0" + inherits: "npm:~2.0.3" + isarray: "npm:~1.0.0" + process-nextick-args: "npm:~2.0.0" + safe-buffer: "npm:~5.1.1" + string_decoder: "npm:~1.1.1" + util-deprecate: "npm:~1.0.1" + checksum: 7efdb01f3853bc35ac62ea25493567bf588773213f5f4a79f9c365e1ad13bab845ac0dae7bc946270dc40c3929483228415e92a3fc600cc7e4548992f41ee3fa + languageName: node + linkType: hard + +"readable-stream@npm:^4.0.0": + version: 4.5.1 + resolution: "readable-stream@npm:4.5.1" + dependencies: + abort-controller: "npm:^3.0.0" + buffer: "npm:^6.0.3" + events: "npm:^3.3.0" + process: "npm:^0.11.10" + string_decoder: "npm:^1.3.0" + checksum: 10fb4c111f767b33c5e5930a036ec7f77a64cdfade36f694dfd523ab5df681edb4eb44b1cc0a789674aa58c46fe4b0fe76f2bc06b17244f679499d9c43542bcc + languageName: node + linkType: hard + +"readable-web-to-node-stream@npm:^3.0.2": + version: 3.0.2 + resolution: "readable-web-to-node-stream@npm:3.0.2" + dependencies: + readable-stream: "npm:^3.6.0" + checksum: 533d5cd1580232a2c753e52a245be13fc552e6f82c5053a8a8da7ea1063d73a34f936a86b3d4433cdb4a13dd683835cfc87f230936cb96d329a1e28b6040f42e + languageName: node + linkType: hard + +"readdir-glob@npm:^1.1.2": + version: 1.1.3 + resolution: "readdir-glob@npm:1.1.3" + dependencies: + minimatch: "npm:^5.1.0" + checksum: a37e0716726650845d761f1041387acd93aa91b28dd5381950733f994b6c349ddc1e21e266ec7cc1f9b92e205a7a972232f9b89d5424d07361c2c3753d5dbace + languageName: node + linkType: hard + +"readdirp@npm:^2.0.0": + version: 2.2.1 + resolution: "readdirp@npm:2.2.1" + dependencies: + graceful-fs: "npm:^4.1.11" + micromatch: "npm:^3.1.10" + readable-stream: "npm:^2.0.2" + checksum: 770d177372ff2212d382d425d55ca48301fcbf3231ab3827257bbcca7ff44fb51fe4af6acc2dda8512dc7f29da390e9fbea5b2b3fc724b86e85cc828395b7797 + languageName: node + linkType: hard + +"readdirp@npm:^3.4.0, readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: "npm:^2.2.1" + checksum: 6fa848cf63d1b82ab4e985f4cf72bd55b7dcfd8e0a376905804e48c3634b7e749170940ba77b32804d5fe93b3cc521aa95a8d7e7d725f830da6d93f3669ce66b + languageName: node + linkType: hard + +"real-require@npm:^0.2.0": + version: 0.2.0 + resolution: "real-require@npm:0.2.0" + checksum: 23eea5623642f0477412ef8b91acd3969015a1501ed34992ada0e3af521d3c865bb2fe4cdbfec5fe4b505f6d1ef6a03e5c3652520837a8c3b53decff7e74b6a0 + languageName: node + linkType: hard + +"redent@npm:^3.0.0": + version: 3.0.0 + resolution: "redent@npm:3.0.0" + dependencies: + indent-string: "npm:^4.0.0" + strip-indent: "npm:^3.0.0" + checksum: d64a6b5c0b50eb3ddce3ab770f866658a2b9998c678f797919ceb1b586bab9259b311407280bd80b804e2a7c7539b19238ae6a2a20c843f1a7fcff21d48c2eae + languageName: node + linkType: hard + +"redis-commands@npm:1.7.0": + version: 1.7.0 + resolution: "redis-commands@npm:1.7.0" + checksum: c78b46d8d6e811f422961878538c57048a451ab56760d3f1657a7c8f29aaae42cc23890f75655556a59ec67611022e18cb443d2976e6c55036934bfe783aa60e + languageName: node + linkType: hard + +"redis-errors@npm:^1.0.0, redis-errors@npm:^1.2.0": + version: 1.2.0 + resolution: "redis-errors@npm:1.2.0" + checksum: 5b316736e9f532d91a35bff631335137a4f974927bb2fb42bf8c2f18879173a211787db8ac4c3fde8f75ed6233eb0888e55d52510b5620e30d69d7d719c8b8a7 + languageName: node + linkType: hard + +"redis-parser@npm:^3.0.0": + version: 3.0.0 + resolution: "redis-parser@npm:3.0.0" + dependencies: + redis-errors: "npm:^1.0.0" + checksum: ee16ac4c7b2a60b1f42a2cdaee22b005bd4453eb2d0588b8a4939718997ae269da717434da5d570fe0b05030466eeb3f902a58cf2e8e1ca058bf6c9c596f632f + languageName: node + linkType: hard + +"regex-not@npm:^1.0.0, regex-not@npm:^1.0.2": + version: 1.0.2 + resolution: "regex-not@npm:1.0.2" + dependencies: + extend-shallow: "npm:^3.0.2" + safe-regex: "npm:^1.1.0" + checksum: a0f8d6045f63b22e9759db10e248369c443b41cedd7dba0922d002b66c2734bc2aef0d98c4d45772d1f756245f4c5203856b88b9624bba2a58708858a8d485d6 + languageName: node + linkType: hard + +"regexp-tree@npm:^0.1.24": + version: 0.1.27 + resolution: "regexp-tree@npm:0.1.27" + bin: + regexp-tree: bin/regexp-tree + checksum: f636f44b4a0d93d7d6926585ecd81f63e4ce2ac895bc417b2ead0874cd36b337dcc3d0fedc63f69bf5aaeaa4340f36ca7e750c9687cceaf8087374e5284e843c + languageName: node + linkType: hard + +"registry-auth-token@npm:^5.0.1": + version: 5.0.2 + resolution: "registry-auth-token@npm:5.0.2" + dependencies: + "@pnpm/npm-conf": "npm:^2.1.0" + checksum: 20fc2225681cc54ae7304b31ebad5a708063b1949593f02dfe5fb402bc1fc28890cecec6497ea396ba86d6cca8a8480715926dfef8cf1f2f11e6f6cc0a1b4bde + languageName: node + linkType: hard + +"registry-url@npm:^6.0.0": + version: 6.0.1 + resolution: "registry-url@npm:6.0.1" + dependencies: + rc: "npm:1.2.8" + checksum: 66e2221c8113fc35ee9d23fe58cb516fc8d556a189fb8d6f1011a02efccc846c4c9b5075b4027b99a5d5c9ad1345ac37f297bea3c0ca30d607ec8084bf561b90 + languageName: node + linkType: hard + +"remove-trailing-separator@npm:^1.0.1": + version: 1.1.0 + resolution: "remove-trailing-separator@npm:1.1.0" + checksum: 3568f9f8f5af3737b4aee9e6e1e8ec4be65a92da9cb27f989e0893714d50aa95ed2ff02d40d1fa35e1b1a234dc9c2437050ef356704a3999feaca6667d9e9bfc + languageName: node + linkType: hard + +"rename-overwrite@npm:^4.0.3": + version: 4.0.3 + resolution: "rename-overwrite@npm:4.0.3" + dependencies: + "@zkochan/rimraf": "npm:^2.1.2" + fs-extra: "npm:10.1.0" + checksum: 6e06de4bed6017552dc1edc21674eaa54f4d4ca3a2d9872234135623d6973f0f79b43d7566180edf45684f1b0fb62140a5f0f4ecc55b62d308eecaaa84ebc470 + languageName: node + linkType: hard + +"repeat-element@npm:^1.1.2": + version: 1.1.4 + resolution: "repeat-element@npm:1.1.4" + checksum: 81aa8d82bc845780803ef52df3533fa399974b99df571d0bb86e91f0ffca9ee4b9c4e8e5e72af087938cc28d2aef93d106a6d01da685d72ce96455b90a9f9f69 + languageName: node + linkType: hard + +"repeat-string@npm:^1.6.1": + version: 1.6.1 + resolution: "repeat-string@npm:1.6.1" + checksum: 87fa21bfdb2fbdedc44b9a5b118b7c1239bdd2c2c1e42742ef9119b7d412a5137a1d23f1a83dc6bb686f4f27429ac6f542e3d923090b44181bafa41e8ac0174d + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: 83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 + languageName: node + linkType: hard + +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: aaa267e0c5b022fc5fd4eef49d8285086b15f2a1c54b28240fdf03599cbd9c26049fee3eab894f2e1f6ca65e513b030a7c264201e3f005601e80c49fb2937ce2 + languageName: node + linkType: hard + +"require-in-the-middle@npm:^7.1.0": + version: 7.2.0 + resolution: "require-in-the-middle@npm:7.2.0" + dependencies: + debug: "npm:^4.1.1" + module-details-from-path: "npm:^1.0.3" + resolve: "npm:^1.22.1" + checksum: ffff7ca815f11ffbe963fe2dc2108d17d579e7318ec008204261ec9fce11367dce24113f642ab55a8929d3a35e5c4e3d46d76a735cd45b2c267affd74d629118 + languageName: node + linkType: hard + +"require-package-name@npm:^2.0.1": + version: 2.0.1 + resolution: "require-package-name@npm:2.0.1" + checksum: 2da87caecdd2157489deaf8add246696dc9cbcebd89ef49b062ad1183594b979f96f8194d4b0f5447a92ad72d39b9fae2df38ec5b9ecef9c7c0157af38eeecbc + languageName: node + linkType: hard + +"requires-port@npm:^1.0.0": + version: 1.0.0 + resolution: "requires-port@npm:1.0.0" + checksum: b2bfdd09db16c082c4326e573a82c0771daaf7b53b9ce8ad60ea46aa6e30aaf475fe9b164800b89f93b748d2c234d8abff945d2551ba47bf5698e04cd7713267 + languageName: node + linkType: hard + +"resolve-alpn@npm:^1.2.0": + version: 1.2.1 + resolution: "resolve-alpn@npm:1.2.1" + checksum: b70b29c1843bc39781ef946c8cd4482e6d425976599c0f9c138cec8209e4e0736161bf39319b01676a847000085dfdaf63583c6fb4427bf751a10635bd2aa0c4 + languageName: node + linkType: hard + +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: "npm:^5.0.0" + checksum: e608a3ebd15356264653c32d7ecbc8fd702f94c6703ea4ac2fb81d9c359180cba0ae2e6b71faa446631ed6145454d5a56b227efc33a2d40638ac13f8beb20ee4 + languageName: node + linkType: hard + +"resolve-from@npm:5.0.0, resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: 8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 + languageName: node + linkType: hard + +"resolve-global@npm:1.0.0, resolve-global@npm:^1.0.0": + version: 1.0.0 + resolution: "resolve-global@npm:1.0.0" + dependencies: + global-dirs: "npm:^0.1.1" + checksum: fda6ba81a07a0124756ce956dd871ca83763973326d8617143dab38d9c9afc666926604bfe8f0bfd046a9a285347568f32ceb3d4c55a1cb9de5614cca001a21c + languageName: node + linkType: hard + +"resolve-pkg-maps@npm:^1.0.0": + version: 1.0.0 + resolution: "resolve-pkg-maps@npm:1.0.0" + checksum: fb8f7bbe2ca281a73b7ef423a1cbc786fb244bd7a95cbe5c3fba25b27d327150beca8ba02f622baea65919a57e061eb5005204daa5f93ed590d9b77463a567ab + languageName: node + linkType: hard + +"resolve-url@npm:^0.2.1": + version: 0.2.1 + resolution: "resolve-url@npm:0.2.1" + checksum: c285182cfcddea13a12af92129ce0569be27fb0074ffaefbd3ba3da2eac2acecdfc996d435c4982a9fa2b4708640e52837c9153a5ab9255886a00b0b9e8d2a54 + languageName: node + linkType: hard + +"resolve.exports@npm:^2.0.0": + version: 2.0.2 + resolution: "resolve.exports@npm:2.0.2" + checksum: cc4cffdc25447cf34730f388dca5021156ba9302a3bad3d7f168e790dc74b2827dff603f1bc6ad3d299bac269828dca96dd77e036dc9fba6a2a1807c47ab5c98 + languageName: node + linkType: hard + +"resolve@npm:^1.10.0, resolve@npm:^1.20.0": + version: 1.22.6 + resolution: "resolve@npm:1.22.6" + dependencies: + is-core-module: "npm:^2.13.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 967f2eb67c77d1be7ff15676a7dbac9334090cfbf8b967305da5f4bd22fc7d12e7045223dc820bcc783031815b60b7f42f2a495165c320ffb4c7bb92eb2eb2d7 + languageName: node + linkType: hard + +"resolve@npm:^1.19.0, resolve@npm:^1.22.1": + version: 1.22.8 + resolution: "resolve@npm:1.22.8" + dependencies: + is-core-module: "npm:^2.13.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 07e179f4375e1fd072cfb72ad66d78547f86e6196c4014b31cb0b8bb1db5f7ca871f922d08da0fbc05b94e9fd42206f819648fa3b5b873ebbc8e1dc68fec433a + languageName: node + linkType: hard + +"resolve@npm:^2.0.0-next.1": + version: 2.0.0-next.5 + resolution: "resolve@npm:2.0.0-next.5" + dependencies: + is-core-module: "npm:^2.13.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: a6c33555e3482ea2ec4c6e3d3bf0d78128abf69dca99ae468e64f1e30acaa318fd267fb66c8836b04d558d3e2d6ed875fe388067e7d8e0de647d3c21af21c43a + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin": + version: 1.22.6 + resolution: "resolve@patch:resolve@npm%3A1.22.6#optional!builtin::version=1.22.6&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.13.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: acedc45a638b3635730669bb65e87bb61f5bf9b4e81982aba9ece0049ff792472a6fbb0c22cc59073cdbf17a0926c1d3d77ba86c88c60e15cc46f929278210cb + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin": + version: 1.22.8 + resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.13.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 0446f024439cd2e50c6c8fa8ba77eaa8370b4180f401a96abf3d1ebc770ac51c1955e12764cde449fde3fff480a61f84388e3505ecdbab778f4bef5f8212c729 + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^2.0.0-next.1#optional!builtin": + version: 2.0.0-next.5 + resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#optional!builtin::version=2.0.0-next.5&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.13.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 78ad6edb8309a2bfb720c2c1898f7907a37f858866ce11a5974643af1203a6a6e05b2fa9c53d8064a673a447b83d42569260c306d43628bff5bb101969708355 + languageName: node + linkType: hard + +"responselike@npm:^3.0.0": + version: 3.0.0 + resolution: "responselike@npm:3.0.0" + dependencies: + lowercase-keys: "npm:^3.0.0" + checksum: 8af27153f7e47aa2c07a5f2d538cb1e5872995f0e9ff77def858ecce5c3fe677d42b824a62cde502e56d275ab832b0a8bd350d5cd6b467ac0425214ac12ae658 + languageName: node + linkType: hard + +"restore-cursor@npm:^2.0.0": + version: 2.0.0 + resolution: "restore-cursor@npm:2.0.0" + dependencies: + onetime: "npm:^2.0.0" + signal-exit: "npm:^3.0.2" + checksum: f5b335bee06f440445e976a7031a3ef53691f9b7c4a9d42a469a0edaf8a5508158a0d561ff2b26a1f4f38783bcca2c0e5c3a44f927326f6694d5b44d7a4993e6 + languageName: node + linkType: hard + +"restore-cursor@npm:^4.0.0": + version: 4.0.0 + resolution: "restore-cursor@npm:4.0.0" + dependencies: + onetime: "npm:^5.1.0" + signal-exit: "npm:^3.0.2" + checksum: 6f7da8c5e422ac26aa38354870b1afac09963572cf2879443540449068cb43476e9cbccf6f8de3e0171e0d6f7f533c2bc1a0a008003c9a525bbc098e89041318 + languageName: node + linkType: hard + +"ret@npm:~0.1.10": + version: 0.1.15 + resolution: "ret@npm:0.1.15" + checksum: 01f77cad0f7ea4f955852c03d66982609893edc1240c0c964b4c9251d0f9fb6705150634060d169939b096d3b77f4c84d6b6098a5b5d340160898c8581f1f63f + languageName: node + linkType: hard + +"ret@npm:~0.2.0": + version: 0.2.2 + resolution: "ret@npm:0.2.2" + checksum: 1a41e543913cda851abb1dae4852efa97bb693ce58fde3b51cc1cae94e2599dd70b91ad6268a4a07fc238305be06fed91723ef6d08863c48a0d02e0a74b943cd + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe + languageName: node + linkType: hard + +"retry@npm:^0.13.1": + version: 0.13.1 + resolution: "retry@npm:0.13.1" + checksum: 9ae822ee19db2163497e074ea919780b1efa00431d197c7afdb950e42bf109196774b92a49fc9821f0b8b328a98eea6017410bfc5e8a0fc19c85c6d11adb3772 + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107 + languageName: node + linkType: hard + +"reverse-arguments@npm:^1.0.0": + version: 1.0.0 + resolution: "reverse-arguments@npm:1.0.0" + checksum: 8a8665d184655290db00ee0d81238c4e6e4ca1d56c0101538ddd69f84e3ce0311f51b0e7669d846c4cc10b8418b1e6e24e40a0e261d04c48c1208adaa6941d99 + languageName: node + linkType: hard + +"rfdc@npm:^1.2.0, rfdc@npm:^1.3.0": + version: 1.3.0 + resolution: "rfdc@npm:1.3.0" + checksum: a17fd7b81f42c7ae4cb932abd7b2f677b04cc462a03619fb46945ae1ccae17c3bc87c020ffdde1751cbfa8549860a2883486fdcabc9b9de3f3108af32b69a667 + languageName: node + linkType: hard + +"rimraf@npm:3.0.2, rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: "npm:^7.1.3" + bin: + rimraf: bin.js + checksum: 9cb7757acb489bd83757ba1a274ab545eafd75598a9d817e0c3f8b164238dd90eba50d6b848bd4dcc5f3040912e882dc7ba71653e35af660d77b25c381d402e8 + languageName: node + linkType: hard + +"rrweb-cssom@npm:^0.6.0": + version: 0.6.0 + resolution: "rrweb-cssom@npm:0.6.0" + checksum: 3d9d90d53c2349ea9c8509c2690df5a4ef930c9cf8242aeb9425d4046f09d712bb01047e00da0e1c1dab5db35740b3d78fd45c3e7272f75d3724a563f27c30a3 + languageName: node + linkType: hard + +"run-async@npm:^2.2.0, run-async@npm:^2.4.0": + version: 2.4.1 + resolution: "run-async@npm:2.4.1" + checksum: 35a68c8f1d9664f6c7c2e153877ca1d6e4f886e5ca067c25cdd895a6891ff3a1466ee07c63d6a9be306e9619ff7d509494e6d9c129516a36b9fd82263d579ee1 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.4, run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 + languageName: node + linkType: hard + +"rxjs@npm:^6.4.0, rxjs@npm:^6.6.2": + version: 6.6.7 + resolution: "rxjs@npm:6.6.7" + dependencies: + tslib: "npm:^1.9.0" + checksum: e556a13a9aa89395e5c9d825eabcfa325568d9c9990af720f3f29f04a888a3b854f25845c2b55875d875381abcae2d8100af9cacdc57576e7ed6be030a01d2fe + languageName: node + linkType: hard + +"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 + languageName: node + linkType: hard + +"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: 780ba6b5d99cc9a40f7b951d47152297d0e260f0df01472a1b99d4889679a4b94a13d644f7dbc4f022572f09ae9005fa2fbb93bbbd83643316f365a3e9a45b21 + languageName: node + linkType: hard + +"safe-json-stringify@npm:^1.2.0": + version: 1.2.0 + resolution: "safe-json-stringify@npm:1.2.0" + checksum: 9c21c7b63a35a9e52d248eea2ad7bc9e790dde5aa418f0d4eed3c0b4c866e15337425b0d973173d30dd70a9e422271619f17e13574e0c8371d0c240cf72b871f + languageName: node + linkType: hard + +"safe-regex2@npm:^2.0.0": + version: 2.0.0 + resolution: "safe-regex2@npm:2.0.0" + dependencies: + ret: "npm:~0.2.0" + checksum: f499e4fc69caafd7dd8023759e69a32991baa66e90bec5e2a7777b907943b27068dbff4e7a32cc8231f1354fcb779142f419e85498ae1e37384dc60619509c27 + languageName: node + linkType: hard + +"safe-regex@npm:^1.1.0": + version: 1.1.0 + resolution: "safe-regex@npm:1.1.0" + dependencies: + ret: "npm:~0.1.10" + checksum: 547d58aa5184cbef368fd5ed5f28d20f911614748c5da6b35f53fd6626396707587251e6e3d1e3010fd3ff1212e413841b8825eaa5f317017ca62a30899af31a + languageName: node + linkType: hard + +"safe-stable-stringify@npm:^2.3.1": + version: 2.4.3 + resolution: "safe-stable-stringify@npm:2.4.3" + checksum: 81dede06b8f2ae794efd868b1e281e3c9000e57b39801c6c162267eb9efda17bd7a9eafa7379e1f1cacd528d4ced7c80d7460ad26f62ada7c9e01dec61b2e768 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + +"saxes@npm:^6.0.0": + version: 6.0.0 + resolution: "saxes@npm:6.0.0" + dependencies: + xmlchars: "npm:^2.2.0" + checksum: 3847b839f060ef3476eb8623d099aa502ad658f5c40fd60c105ebce86d244389b0d76fcae30f4d0c728d7705ceb2f7e9b34bb54717b6a7dbedaf5dad2d9a4b74 + languageName: node + linkType: hard + +"scrypt-js@npm:3.0.1": + version: 3.0.1 + resolution: "scrypt-js@npm:3.0.1" + checksum: e2941e1c8b5c84c7f3732b0153fee624f5329fc4e772a06270ee337d4d2df4174b8abb5e6ad53804a29f53890ecbc78f3775a319323568c0313040c0e55f5b10 + languageName: node + linkType: hard + +"secure-json-parse@npm:^2.4.0, secure-json-parse@npm:^2.5.0": + version: 2.7.0 + resolution: "secure-json-parse@npm:2.7.0" + checksum: f57eb6a44a38a3eeaf3548228585d769d788f59007454214fab9ed7f01fbf2e0f1929111da6db28cf0bcc1a2e89db5219a59e83eeaec3a54e413a0197ce879e4 + languageName: node + linkType: hard + +"seek-bzip@npm:^1.0.6": + version: 1.0.6 + resolution: "seek-bzip@npm:1.0.6" + dependencies: + commander: "npm:^2.8.1" + bin: + seek-bunzip: bin/seek-bunzip + seek-table: bin/seek-bzip-table + checksum: e4019e4498bb725ff855603595c4116ca003674b13d29cb9ed9891b2ceec884ccf7c1cb5dba0d6b50fe6ce760a011078f5744efb79823f4ddb9decb1571e9912 + languageName: node + linkType: hard + +"semver-diff@npm:^4.0.0": + version: 4.0.0 + resolution: "semver-diff@npm:4.0.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 3ed1bb22f39b4b6e98785bb066e821eabb9445d3b23e092866c50e7df8b9bd3eda617b242f81db4159586e0e39b0deb908dd160a24f783bd6f52095b22cd68ea + languageName: node + linkType: hard + +"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.7.1": + version: 5.7.2 + resolution: "semver@npm:5.7.2" + bin: + semver: bin/semver + checksum: e4cf10f86f168db772ae95d86ba65b3fd6c5967c94d97c708ccb463b778c2ee53b914cd7167620950fc07faf5a564e6efe903836639e512a1aa15fbc9667fa25 + languageName: node + linkType: hard + +"semver@npm:7.5.4, semver@npm:^7.0.0, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.4.0, semver@npm:^7.5.3, semver@npm:^7.5.4": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: "npm:^6.0.0" + bin: + semver: bin/semver.js + checksum: 5160b06975a38b11c1ab55950cb5b8a23db78df88275d3d8a42ccf1f29e55112ac995b3a26a522c36e3b5f76b0445f1eef70d696b8c7862a2b4303d7b0e7609e + languageName: node + linkType: hard + +"semver@npm:^6.0.0, semver@npm:^6.1.0, semver@npm:^6.3.0, semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d + languageName: node + linkType: hard + +"semver@npm:~7.0.0": + version: 7.0.0 + resolution: "semver@npm:7.0.0" + bin: + semver: bin/semver.js + checksum: 7fd341680a967a0abfd66f3a7d36ba44e52ff5d3e799e9a6cdb01a68160b64ef09be82b4af05459effeecdd836f002c2462555d2821cd890dfdfe36a0d9f56a5 + languageName: node + linkType: hard + +"send@npm:0.18.0": + version: 0.18.0 + resolution: "send@npm:0.18.0" + dependencies: + debug: "npm:2.6.9" + depd: "npm:2.0.0" + destroy: "npm:1.2.0" + encodeurl: "npm:~1.0.2" + escape-html: "npm:~1.0.3" + etag: "npm:~1.8.1" + fresh: "npm:0.5.2" + http-errors: "npm:2.0.0" + mime: "npm:1.6.0" + ms: "npm:2.1.3" + on-finished: "npm:2.4.1" + range-parser: "npm:~1.2.1" + statuses: "npm:2.0.1" + checksum: 0eb134d6a51fc13bbcb976a1f4214ea1e33f242fae046efc311e80aff66c7a43603e26a79d9d06670283a13000e51be6e0a2cb80ff0942eaf9f1cd30b7ae736a + languageName: node + linkType: hard + +"serve-static@npm:1.15.0": + version: 1.15.0 + resolution: "serve-static@npm:1.15.0" + dependencies: + encodeurl: "npm:~1.0.2" + escape-html: "npm:~1.0.3" + parseurl: "npm:~1.3.3" + send: "npm:0.18.0" + checksum: fa9f0e21a540a28f301258dfe1e57bb4f81cd460d28f0e973860477dd4acef946a1f41748b5bd41c73b621bea2029569c935faa38578fd34cd42a9b4947088ba + languageName: node + linkType: hard + +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 9f8c1b2d800800d0b589de1477c753492de5c1548d4ade52f57f1d1f5e04af5481554d75ce5e5c43d4004b80a3eb714398d6907027dc0534177b7539119f4454 + languageName: node + linkType: hard + +"set-cookie-parser@npm:^2.4.1": + version: 2.6.0 + resolution: "set-cookie-parser@npm:2.6.0" + checksum: 739da029f0e56806a103fcd5501d9c475e19e77bd8274192d7ae5c374ae714a82bba9a7ac00b0330a18227c5644b08df9e442240527be578f5a6030f9bb2bb80 + languageName: node + linkType: hard + +"set-function-length@npm:^1.1.1": + version: 1.1.1 + resolution: "set-function-length@npm:1.1.1" + dependencies: + define-data-property: "npm:^1.1.1" + get-intrinsic: "npm:^1.2.1" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.0" + checksum: a29e255c116c29e3323b851c4f46c58c91be9bb8b065f191e2ea1807cb2c839df56e3175732a498e0c6d54626ba6b6fef896bf699feb7ab70c42dc47eb247c95 + languageName: node + linkType: hard + +"set-value@npm:^2.0.0, set-value@npm:^2.0.1": + version: 2.0.1 + resolution: "set-value@npm:2.0.1" + dependencies: + extend-shallow: "npm:^2.0.1" + is-extendable: "npm:^0.1.1" + is-plain-object: "npm:^2.0.3" + split-string: "npm:^3.0.1" + checksum: 4c40573c4f6540456e4b38b95f570272c4cfbe1d12890ad4057886da8535047cd772dfadf5b58e2e87aa244dfb4c57e3586f6716b976fc47c5144b6b09e1811b + languageName: node + linkType: hard + +"setprototypeof@npm:1.2.0": + version: 1.2.0 + resolution: "setprototypeof@npm:1.2.0" + checksum: 68733173026766fa0d9ecaeb07f0483f4c2dc70ca376b3b7c40b7cda909f94b0918f6c5ad5ce27a9160bdfb475efaa9d5e705a11d8eaae18f9835d20976028bc + languageName: node + linkType: hard + +"sharp@npm:^0.32.6": + version: 0.32.6 + resolution: "sharp@npm:0.32.6" + dependencies: + color: "npm:^4.2.3" + detect-libc: "npm:^2.0.2" + node-addon-api: "npm:^6.1.0" + node-gyp: "npm:latest" + prebuild-install: "npm:^7.1.1" + semver: "npm:^7.5.4" + simple-get: "npm:^4.0.1" + tar-fs: "npm:^3.0.4" + tunnel-agent: "npm:^0.6.0" + checksum: f6a756fec5051ef2f9341e0543cde1da4e822982dd5398010baad92e2262bd177e08b753eb19b2fbee30f2fcb0e8756f24088fafc48293a364e9a8f8dc65a300 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 + languageName: node + linkType: hard + +"shell-quote-word@npm:^1.0.1": + version: 1.0.1 + resolution: "shell-quote-word@npm:1.0.1" + checksum: 780d67a10878bca215d4cdccfcc079d4a81a6584e13944cce39bddb8c1096a32cce6b85141ac4c196fcbaec6b93b5cc35844fcf1e3788785a504405e90253f55 + languageName: node + linkType: hard + +"shimmer@npm:^1.2.1": + version: 1.2.1 + resolution: "shimmer@npm:1.2.1" + checksum: ae8b27c389db2a00acfc8da90240f11577685a8f3e40008f826a3bea8b4f3b3ecd305c26be024b4a0fd3b123d132c1569d6e238097960a9a543b6c60760fb46a + languageName: node + linkType: hard + +"side-channel@npm:^1.0.4": + version: 1.0.4 + resolution: "side-channel@npm:1.0.4" + dependencies: + call-bind: "npm:^1.0.0" + get-intrinsic: "npm:^1.0.2" + object-inspect: "npm:^1.9.0" + checksum: 054a5d23ee35054b2c4609b9fd2a0587760737782b5d765a9c7852264710cc39c6dcb56a9bbd6c12cd84071648aea3edb2359d2f6e560677eedadce511ac1da5 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: 25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + +"simple-concat@npm:^1.0.0": + version: 1.0.1 + resolution: "simple-concat@npm:1.0.1" + checksum: 62f7508e674414008910b5397c1811941d457dfa0db4fd5aa7fa0409eb02c3609608dfcd7508cace75b3a0bf67a2a77990711e32cd213d2c76f4fd12ee86d776 + languageName: node + linkType: hard + +"simple-get@npm:^4.0.0, simple-get@npm:^4.0.1": + version: 4.0.1 + resolution: "simple-get@npm:4.0.1" + dependencies: + decompress-response: "npm:^6.0.0" + once: "npm:^1.3.1" + simple-concat: "npm:^1.0.0" + checksum: b0649a581dbca741babb960423248899203165769747142033479a7dc5e77d7b0fced0253c731cd57cf21e31e4d77c9157c3069f4448d558ebc96cf9e1eebcf0 + languageName: node + linkType: hard + +"simple-swizzle@npm:^0.2.2": + version: 0.2.2 + resolution: "simple-swizzle@npm:0.2.2" + dependencies: + is-arrayish: "npm:^0.3.1" + checksum: df5e4662a8c750bdba69af4e8263c5d96fe4cd0f9fe4bdfa3cbdeb45d2e869dff640beaaeb1ef0e99db4d8d2ec92f85508c269f50c972174851bc1ae5bd64308 + languageName: node + linkType: hard + +"simple-update-notifier@npm:^1.0.7": + version: 1.1.0 + resolution: "simple-update-notifier@npm:1.1.0" + dependencies: + semver: "npm:~7.0.0" + checksum: 3cbbbc71a5d9a2924f0e3f42fbf3cbe1854bfe142203456b00d5233bdbbdeb5091b8067cd34fb00f81dbfbc29fc30dbb6e026b3d58ea0551e3f26c0e64082092 + languageName: node + linkType: hard + +"sisteransi@npm:^1.0.5": + version: 1.0.5 + resolution: "sisteransi@npm:1.0.5" + checksum: 230ac975cca485b7f6fe2b96a711aa62a6a26ead3e6fb8ba17c5a00d61b8bed0d7adc21f5626b70d7c33c62ff4e63933017a6462942c719d1980bb0b1207ad46 + languageName: node + linkType: hard + +"slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: e18488c6a42bdfd4ac5be85b2ced3ccd0224773baae6ad42cfbb9ec74fc07f9fa8396bd35ee638084ead7a2a0818eb5e7151111544d4731ce843019dab4be47b + languageName: node + linkType: hard + +"slash@npm:^4.0.0": + version: 4.0.0 + resolution: "slash@npm:4.0.0" + checksum: b522ca75d80d107fd30d29df0549a7b2537c83c4c4ecd12cd7d4ea6c8aaca2ab17ada002e7a1d78a9d736a0261509f26ea5b489082ee443a3a810586ef8eff18 + languageName: node + linkType: hard + +"slice-ansi@npm:^5.0.0": + version: 5.0.0 + resolution: "slice-ansi@npm:5.0.0" + dependencies: + ansi-styles: "npm:^6.0.0" + is-fullwidth-code-point: "npm:^4.0.0" + checksum: 2d4d40b2a9d5cf4e8caae3f698fe24ae31a4d778701724f578e984dcb485ec8c49f0c04dab59c401821e80fcdfe89cace9c66693b0244e40ec485d72e543914f + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"smee-client@npm:^2.0.0": + version: 2.0.0 + resolution: "smee-client@npm:2.0.0" + dependencies: + commander: "npm:^11.1.0" + eventsource: "npm:^2.0.2" + validator: "npm:^13.11.0" + bin: + smee: bin/smee.js + checksum: 2e9ff2f038ba94a8a5cb3745bc985ee13392855e28d0129e6adac120937295ea8811aa13aa58647da1992e592d3ad5eb6a3502b9aa5bb09c90182b996e3bfc70 + languageName: node + linkType: hard + +"snapdragon-node@npm:^2.0.1": + version: 2.1.1 + resolution: "snapdragon-node@npm:2.1.1" + dependencies: + define-property: "npm:^1.0.0" + isobject: "npm:^3.0.0" + snapdragon-util: "npm:^3.0.1" + checksum: 7616e6a1ca054afe3ad8defda17ebe4c73b0800d2e0efd635c44ee1b286f8ac7900517314b5330862ce99b28cd2782348ee78bae573ff0f55832ad81d9657f3f + languageName: node + linkType: hard + +"snapdragon-util@npm:^3.0.1": + version: 3.0.1 + resolution: "snapdragon-util@npm:3.0.1" + dependencies: + kind-of: "npm:^3.2.0" + checksum: 4441856d343399ba7f37f79681949d51b922e290fcc07e7bc94655a50f584befa4fb08f40c3471cd160e004660161964d8ff140cba49baa59aa6caba774240e3 + languageName: node + linkType: hard + +"snapdragon@npm:^0.8.1": + version: 0.8.2 + resolution: "snapdragon@npm:0.8.2" + dependencies: + base: "npm:^0.11.1" + debug: "npm:^2.2.0" + define-property: "npm:^0.2.5" + extend-shallow: "npm:^2.0.1" + map-cache: "npm:^0.2.2" + source-map: "npm:^0.5.6" + source-map-resolve: "npm:^0.5.0" + use: "npm:^3.1.0" + checksum: dfdac1f73d47152d72fc07f4322da09bbddfa31c1c9c3ae7346f252f778c45afa5b03e90813332f02f04f6de8003b34a168c456f8bb719024d092f932520ffca + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.1": + version: 8.0.2 + resolution: "socks-proxy-agent@npm:8.0.2" + dependencies: + agent-base: "npm:^7.0.2" + debug: "npm:^4.3.4" + socks: "npm:^2.7.1" + checksum: a842402fc9b8848a31367f2811ca3cd14c4106588b39a0901cd7a69029998adfc6456b0203617c18ed090542ad0c24ee4e9d4c75a0c4b75071e214227c177eb7 + languageName: node + linkType: hard + +"socks@npm:^2.7.1": + version: 2.7.1 + resolution: "socks@npm:2.7.1" + dependencies: + ip: "npm:^2.0.0" + smart-buffer: "npm:^4.2.0" + checksum: 43f69dbc9f34fc8220bc51c6eea1c39715ab3cfdb115d6e3285f6c7d1a603c5c75655668a5bbc11e3c7e2c99d60321fb8d7ab6f38cda6a215fadd0d6d0b52130 + languageName: node + linkType: hard + +"sonic-boom@npm:^1.0.2": + version: 1.4.1 + resolution: "sonic-boom@npm:1.4.1" + dependencies: + atomic-sleep: "npm:^1.0.0" + flatstr: "npm:^1.0.12" + checksum: 3498b835071365cc94aac0eae50c5ee3c2552a4e48cf6dce59ae2d995af6c62a8f529377852b39b073b8190b772a9fb2cdb48f515c0fec4948646dea862fb120 + languageName: node + linkType: hard + +"sonic-boom@npm:^2.1.0": + version: 2.8.0 + resolution: "sonic-boom@npm:2.8.0" + dependencies: + atomic-sleep: "npm:^1.0.0" + checksum: 6b40f2e91a999819b1dc24018a5d1c8b74e66e5d019eabad17d5b43fc309b32255b7c405ed6ec885693c8f2b969099ce96aeefde027180928bc58c034234a86d + languageName: node + linkType: hard + +"sonic-boom@npm:^3.0.0, sonic-boom@npm:^3.7.0": + version: 3.7.0 + resolution: "sonic-boom@npm:3.7.0" + dependencies: + atomic-sleep: "npm:^1.0.0" + checksum: 57a3d560efb77f4576db111168ee2649c99e7869fda6ce0ec2a4e5458832d290ba58d74b073ddb5827d9a30f96d23cff79157993d919e1a6d5f28d8b6391c7f0 + languageName: node + linkType: hard + +"sort-keys-length@npm:^1.0.0": + version: 1.0.1 + resolution: "sort-keys-length@npm:1.0.1" + dependencies: + sort-keys: "npm:^1.0.0" + checksum: 4567d08aa859c7e48b7e2cba14a8ae09a100f6a3bd7cf5d21dccd808d6332c945b9a7e2230a95c16e0e6eac1a943cd050ae51a5d1b4c8ec4b1e89a5801be9aa2 + languageName: node + linkType: hard + +"sort-keys@npm:^1.0.0": + version: 1.1.2 + resolution: "sort-keys@npm:1.1.2" + dependencies: + is-plain-obj: "npm:^1.0.0" + checksum: 5dd383b0299a40277051f7498c3999520138e2eb50d422962f658738341c9e82349fad4a3024d5ba1a3122688fbaf958f2a472d4c53bade55515097c2ce15420 + languageName: node + linkType: hard + +"source-map-js@npm:^1.0.1, source-map-js@npm:^1.0.2": + version: 1.0.2 + resolution: "source-map-js@npm:1.0.2" + checksum: 32f2dfd1e9b7168f9a9715eb1b4e21905850f3b50cf02cf476e47e4eebe8e6b762b63a64357896aa29b37e24922b4282df0f492e0d2ace572b43d15525976ff8 + languageName: node + linkType: hard + +"source-map-resolve@npm:^0.5.0": + version: 0.5.3 + resolution: "source-map-resolve@npm:0.5.3" + dependencies: + atob: "npm:^2.1.2" + decode-uri-component: "npm:^0.2.0" + resolve-url: "npm:^0.2.1" + source-map-url: "npm:^0.4.0" + urix: "npm:^0.1.0" + checksum: 410acbe93882e058858d4c1297be61da3e1533f95f25b95903edddc1fb719654e705663644677542d1fb78a66390238fad1a57115fc958a0724cf9bb509caf57 + languageName: node + linkType: hard + +"source-map-support@npm:0.5.13": + version: 0.5.13 + resolution: "source-map-support@npm:0.5.13" + dependencies: + buffer-from: "npm:^1.0.0" + source-map: "npm:^0.6.0" + checksum: 137539f8c453fa0f496ea42049ab5da4569f96781f6ac8e5bfda26937be9494f4e8891f523c5f98f0e85f71b35d74127a00c46f83f6a4f54672b58d53202565e + languageName: node + linkType: hard + +"source-map-support@npm:0.5.21, source-map-support@npm:^0.5.21": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" + dependencies: + buffer-from: "npm:^1.0.0" + source-map: "npm:^0.6.0" + checksum: 9ee09942f415e0f721d6daad3917ec1516af746a8120bba7bb56278707a37f1eb8642bde456e98454b8a885023af81a16e646869975f06afc1a711fb90484e7d + languageName: node + linkType: hard + +"source-map-url@npm:^0.4.0": + version: 0.4.1 + resolution: "source-map-url@npm:0.4.1" + checksum: f8af0678500d536c7f643e32094d6718a4070ab4ca2d2326532512cfbe2d5d25a45849b4b385879326f2d7523bb3b686d0360dd347a3cda09fd89a5c28d4bc58 + languageName: node + linkType: hard + +"source-map@npm:^0.5.6": + version: 0.5.7 + resolution: "source-map@npm:0.5.7" + checksum: 904e767bb9c494929be013017380cbba013637da1b28e5943b566031e29df04fba57edf3f093e0914be094648b577372bd8ad247fa98cfba9c600794cd16b599 + languageName: node + linkType: hard + +"source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 + languageName: node + linkType: hard + +"spdx-correct@npm:^3.0.0": + version: 3.2.0 + resolution: "spdx-correct@npm:3.2.0" + dependencies: + spdx-expression-parse: "npm:^3.0.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 49208f008618b9119208b0dadc9208a3a55053f4fd6a0ae8116861bd22696fc50f4142a35ebfdb389e05ccf2de8ad142573fefc9e26f670522d899f7b2fe7386 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.3.0 + resolution: "spdx-exceptions@npm:2.3.0" + checksum: 83089e77d2a91cb6805a5c910a2bedb9e50799da091f532c2ba4150efdef6e53f121523d3e2dc2573a340dc0189e648b03157097f65465b3a0c06da1f18d7e8a + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^3.0.0": + version: 3.0.1 + resolution: "spdx-expression-parse@npm:3.0.1" + dependencies: + spdx-exceptions: "npm:^2.1.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 6f8a41c87759fa184a58713b86c6a8b028250f158159f1d03ed9d1b6ee4d9eefdc74181c8ddc581a341aa971c3e7b79e30b59c23b05d2436d5de1c30bdef7171 + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.13 + resolution: "spdx-license-ids@npm:3.0.13" + checksum: a5cb77ea7be86d574c8876970920e34d9b37f2fb6e361e6b732b61267afbc63dd37831160b731f85c1478f5ba95ae00369742555920e3c694f047f7068d33318 + languageName: node + linkType: hard + +"split-string@npm:^3.0.1, split-string@npm:^3.0.2": + version: 3.1.0 + resolution: "split-string@npm:3.1.0" + dependencies: + extend-shallow: "npm:^3.0.0" + checksum: 72d7cd625445c7af215130e1e2bc183013bb9dd48a074eda1d35741e2b0dcb355e6df5b5558a62543a24dcec37dd1d6eb7a6228ff510d3c9de0f3dc1d1da8a70 + languageName: node + linkType: hard + +"split2@npm:^1.0.0": + version: 1.1.1 + resolution: "split2@npm:1.1.1" + dependencies: + through2: "npm:~2.0.0" + checksum: 9344d24e8be39cfd43a60a2a9119d82c4f21765c82b14fb0fda36e814f3b860597d4ac829ec97bf2f4305429d07d725c919f793f90d27d1fcc157a2be3c38a8c + languageName: node + linkType: hard + +"split2@npm:^3.0.0, split2@npm:^3.1.1, split2@npm:^3.2.2": + version: 3.2.2 + resolution: "split2@npm:3.2.2" + dependencies: + readable-stream: "npm:^3.0.0" + checksum: 2dad5603c52b353939befa3e2f108f6e3aff42b204ad0f5f16dd12fd7c2beab48d117184ce6f7c8854f9ee5ffec6faae70d243711dd7d143a9f635b4a285de4e + languageName: node + linkType: hard + +"split2@npm:^4.0.0": + version: 4.2.0 + resolution: "split2@npm:4.2.0" + checksum: b292beb8ce9215f8c642bb68be6249c5a4c7f332fc8ecadae7be5cbdf1ea95addc95f0459ef2e7ad9d45fd1064698a097e4eb211c83e772b49bc0ee423e91534 + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: ecadcfe4c771890140da5023d43e190b7566d9cf8b2d238600f31bec0fc653f328da4450eb04bd59a431771a8e9cc0e118f0aa3974b683a4981b4e07abc2a5bb + languageName: node + linkType: hard + +"ssri@npm:10.0.4": + version: 10.0.4 + resolution: "ssri@npm:10.0.4" + dependencies: + minipass: "npm:^5.0.0" + checksum: d085474ea6b439623a9a6a2c67570cb9e68e1bb6060e46e4d387f113304d75a51946d57c524be3a90ebfa3c73026edf76eb1a2d79a7f6cff0b04f21d99f127ab + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.5 + resolution: "ssri@npm:10.0.5" + dependencies: + minipass: "npm:^7.0.3" + checksum: b091f2ae92474183c7ac5ed3f9811457e1df23df7a7e70c9476eaa9a0c4a0c8fc190fb45acefbf023ca9ee864dd6754237a697dc52a0fb182afe65d8e77443d8 + languageName: node + linkType: hard + +"stack-generator@npm:^2.0.3": + version: 2.0.10 + resolution: "stack-generator@npm:2.0.10" + dependencies: + stackframe: "npm:^1.3.4" + checksum: c3f6f6c580488e65c0fee806a57f6ae4b79e6435f144be471c1f20328a8d9d8492d4f3beed31840f6dae03e2633325e2764fd3aca5c3126a0639e7c9ddfa45ce + languageName: node + linkType: hard + +"stack-trace@npm:0.0.x": + version: 0.0.10 + resolution: "stack-trace@npm:0.0.10" + checksum: 9ff3dabfad4049b635a85456f927a075c9d0c210e3ea336412d18220b2a86cbb9b13ec46d6c37b70a302a4ea4d49e30e5d4944dd60ae784073f1cde778ac8f4b + languageName: node + linkType: hard + +"stack-utils@npm:^2.0.3": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" + dependencies: + escape-string-regexp: "npm:^2.0.0" + checksum: 651c9f87667e077584bbe848acaecc6049bc71979f1e9a46c7b920cad4431c388df0f51b8ad7cfd6eed3db97a2878d0fc8b3122979439ea8bac29c61c95eec8a + languageName: node + linkType: hard + +"stackframe@npm:^1.3.4": + version: 1.3.4 + resolution: "stackframe@npm:1.3.4" + checksum: 18410f7a1e0c5d211a4effa83bdbf24adbe8faa8c34db52e1cd3e89837518c592be60b60d8b7270ac53eeeb8b807cd11b399a41667f6c9abb41059c3ccc8a989 + languageName: node + linkType: hard + +"standard-as-callback@npm:^2.1.0": + version: 2.1.0 + resolution: "standard-as-callback@npm:2.1.0" + checksum: 012677236e3d3fdc5689d29e64ea8a599331c4babe86956bf92fc5e127d53f85411c5536ee0079c52c43beb0026b5ce7aa1d834dd35dd026e82a15d1bcaead1f + languageName: node + linkType: hard + +"static-extend@npm:^0.1.1": + version: 0.1.2 + resolution: "static-extend@npm:0.1.2" + dependencies: + define-property: "npm:^0.2.5" + object-copy: "npm:^0.1.0" + checksum: 284f5865a9e19d079f1badbcd70d5f9f82e7a08393f818a220839cd5f71729e89105e1c95322bd28e833161d484cee671380ca443869ae89578eef2bf55c0653 + languageName: node + linkType: hard + +"statuses@npm:2.0.1": + version: 2.0.1 + resolution: "statuses@npm:2.0.1" + checksum: 34378b207a1620a24804ce8b5d230fea0c279f00b18a7209646d5d47e419d1cc23e7cbf33a25a1e51ac38973dc2ac2e1e9c647a8e481ef365f77668d72becfd0 + languageName: node + linkType: hard + +"statuses@npm:>= 1.5.0 < 2": + version: 1.5.0 + resolution: "statuses@npm:1.5.0" + checksum: e433900956357b3efd79b1c547da4d291799ac836960c016d10a98f6a810b1b5c0dcc13b5a7aa609a58239b5190e1ea176ad9221c2157d2fd1c747393e6b2940 + languageName: node + linkType: hard + +"std-env@npm:^3.4.3": + version: 3.6.0 + resolution: "std-env@npm:3.6.0" + checksum: a540b8cb011bef4bf5905e1e28f24ce37124f9d001c69224ee0025d3600144e6847bac62cd38fbd98148ab4d26ab0682b9b4d42bc863cd1cca0b9807f18aadba + languageName: node + linkType: hard + +"stdin-discarder@npm:^0.1.0": + version: 0.1.0 + resolution: "stdin-discarder@npm:0.1.0" + dependencies: + bl: "npm:^5.0.0" + checksum: 3bbf7f8107e49c05b4a46bd739afdd34605cf1f06a038c8b2a33d034bf146344fc0ebc5149df1e6422510dd219971a220f25b1102413ef5128fe267683fbef9d + languageName: node + linkType: hard + +"streamx@npm:^2.15.0": + version: 2.15.6 + resolution: "streamx@npm:2.15.6" + dependencies: + fast-fifo: "npm:^1.1.0" + queue-tick: "npm:^1.0.1" + checksum: 3a763cbd96d335de7f28e211f080273fa7f077999284ad82884bdf331d5fcf240be33414b0eedecaa78a39ad10d833403c82c162f556f166bc8292447e84ef66 + languageName: node + linkType: hard + +"string-argv@npm:0.3.2": + version: 0.3.2 + resolution: "string-argv@npm:0.3.2" + checksum: 75c02a83759ad1722e040b86823909d9a2fc75d15dd71ec4b537c3560746e33b5f5a07f7332d1e3f88319909f82190843aa2f0a0d8c8d591ec08e93d5b8dec82 + languageName: node + linkType: hard + +"string-length@npm:^4.0.1": + version: 4.0.2 + resolution: "string-length@npm:4.0.2" + dependencies: + char-regex: "npm:^1.0.2" + strip-ansi: "npm:^6.0.0" + checksum: 1cd77409c3d7db7bc59406f6bcc9ef0783671dcbabb23597a1177c166906ef2ee7c8290f78cae73a8aec858768f189d2cb417797df5e15ec4eb5e16b3346340c + languageName: node + linkType: hard + +"string-template@npm:~0.2.1": + version: 0.2.1 + resolution: "string-template@npm:0.2.1" + checksum: 5dc9bd8741e50aaf1ebb616c64fdada32301dc52718692a7a13088285b96fecd1010ab612b348ef29c08dff4df4f96c8e80689ca855a578d01cc182e48199182 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: "npm:^8.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + strip-ansi: "npm:^6.0.1" + checksum: 1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b + languageName: node + linkType: hard + +"string-width@npm:^2.1.0": + version: 2.1.1 + resolution: "string-width@npm:2.1.1" + dependencies: + is-fullwidth-code-point: "npm:^2.0.0" + strip-ansi: "npm:^4.0.0" + checksum: e5f2b169fcf8a4257a399f95d069522f056e92ec97dbdcb9b0cdf14d688b7ca0b1b1439a1c7b9773cd79446cbafd582727279d6bfdd9f8edd306ea5e90e5b610 + languageName: node + linkType: hard + +"string-width@npm:^5.0.0, string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca + languageName: node + linkType: hard + +"string.fromcodepoint@npm:^0.2.1": + version: 0.2.1 + resolution: "string.fromcodepoint@npm:0.2.1" + checksum: 2e26c7370daea0725f2cc3b0a2e4b84613c44b68130ad2afa1364b51fd48ebdfe6390086807d7b5e95d58e8a872aca46a53bbc182c549cd74c0ee9b46de32b02 + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1, string_decoder@npm:^1.3.0": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: "npm:~5.2.0" + checksum: 810614ddb030e271cd591935dcd5956b2410dd079d64ff92a1844d6b7588bf992b3e1b69b0f4d34a3e06e0bd73046ac646b5264c1987b20d0601f81ef35d731d + languageName: node + linkType: hard + +"string_decoder@npm:~1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: "npm:~5.1.0" + checksum: b4f89f3a92fd101b5653ca3c99550e07bdf9e13b35037e9e2a1c7b47cec4e55e06ff3fc468e314a0b5e80bfbaf65c1ca5a84978764884ae9413bec1fc6ca924e + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: "npm:^5.0.1" + checksum: 1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 + languageName: node + linkType: hard + +"strip-ansi-control-characters@npm:2.0.0": + version: 2.0.0 + resolution: "strip-ansi-control-characters@npm:2.0.0" + checksum: e707fbadbf76220cf18af66c10c38571eadcf18dca8c404c751374e399a5aa49d8b0504679a9d256f0af673baca6990d9719bf2e2e3ab2fa48d4371c0a9d710b + languageName: node + linkType: hard + +"strip-ansi@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-ansi@npm:4.0.0" + dependencies: + ansi-regex: "npm:^3.0.0" + checksum: d75d9681e0637ea316ddbd7d4d3be010b1895a17e885155e0ed6a39755ae0fd7ef46e14b22162e66a62db122d3a98ab7917794e255532ab461bb0a04feb03e7d + languageName: node + linkType: hard + +"strip-ansi@npm:^5.1.0": + version: 5.2.0 + resolution: "strip-ansi@npm:5.2.0" + dependencies: + ansi-regex: "npm:^4.1.0" + checksum: de4658c8a097ce3b15955bc6008f67c0790f85748bdc025b7bc8c52c7aee94bc4f9e50624516150ed173c3db72d851826cd57e7a85fe4e4bb6dbbebd5d297fdf + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.0, strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.0": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: "npm:^6.0.1" + checksum: a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 + languageName: node + linkType: hard + +"strip-bom@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-bom@npm:3.0.0" + checksum: 51201f50e021ef16672593d7434ca239441b7b760e905d9f33df6e4f3954ff54ec0e0a06f100d028af0982d6f25c35cd5cda2ce34eaebccd0250b8befb90d8f1 + languageName: node + linkType: hard + +"strip-bom@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-bom@npm:4.0.0" + checksum: 26abad1172d6bc48985ab9a5f96c21e440f6e7e476686de49be813b5a59b3566dccb5c525b831ec54fe348283b47f3ffb8e080bc3f965fde12e84df23f6bb7ef + languageName: node + linkType: hard + +"strip-dirs@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-dirs@npm:3.0.0" + dependencies: + inspect-with-kind: "npm:^1.0.5" + is-plain-obj: "npm:^1.1.0" + checksum: 136cc8f3543f8785c5c59dc270d98106fb6625142e34304ea66a118338e5d5051681d650484a6737bee9bcfafd259fa5c044f4dda0f3bb5a5ffebf4e77effa11 + languageName: node + linkType: hard + +"strip-final-newline@npm:^2.0.0": + version: 2.0.0 + resolution: "strip-final-newline@npm:2.0.0" + checksum: bddf8ccd47acd85c0e09ad7375409d81653f645fda13227a9d459642277c253d877b68f2e5e4d819fe75733b0e626bac7e954c04f3236f6d196f79c94fa4a96f + languageName: node + linkType: hard + +"strip-final-newline@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-final-newline@npm:3.0.0" + checksum: a771a17901427bac6293fd416db7577e2bc1c34a19d38351e9d5478c3c415f523f391003b42ed475f27e33a78233035df183525395f731d3bfb8cdcbd4da08ce + languageName: node + linkType: hard + +"strip-indent@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-indent@npm:3.0.0" + dependencies: + min-indent: "npm:^1.0.0" + checksum: ae0deaf41c8d1001c5d4fbe16cb553865c1863da4fae036683b474fa926af9fc121e155cb3fc57a68262b2ae7d5b8420aa752c97a6428c315d00efe2a3875679 + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd + languageName: node + linkType: hard + +"strip-json-comments@npm:^5.0.0": + version: 5.0.1 + resolution: "strip-json-comments@npm:5.0.1" + checksum: c9d9d55a0167c57aa688df3aa20628cf6f46f0344038f189eaa9d159978e80b2bfa6da541a40d83f7bde8a3554596259bf6b70578b2172356536a0e3fa5a0982 + languageName: node + linkType: hard + +"strip-json-comments@npm:~2.0.1": + version: 2.0.1 + resolution: "strip-json-comments@npm:2.0.1" + checksum: b509231cbdee45064ff4f9fd73609e2bcc4e84a4d508e9dd0f31f70356473fde18abfb5838c17d56fb236f5a06b102ef115438de0600b749e818a35fbbc48c43 + languageName: node + linkType: hard + +"strip-outer@npm:^2.0.0": + version: 2.0.0 + resolution: "strip-outer@npm:2.0.0" + checksum: 6633b62914884dd63bc94221368b8d8a8df4cbde3d50849de0cfa3bf9f76751828108c9cc9195bcd1b70d73317cc25d3c1c4d6b717be437a1f6161206f44fe75 + languageName: node + linkType: hard + +"strtok3@npm:^7.0.0": + version: 7.0.0 + resolution: "strtok3@npm:7.0.0" + dependencies: + "@tokenizer/token": "npm:^0.3.0" + peek-readable: "npm:^5.0.0" + checksum: 63a72b10a302719242bfd31ca53955a06bb091dfec46ef14ca10c4b17ab15780ed8365cd5b270cfbde92d571f677539957add436e4bf9cccdf9977b40d762583 + languageName: node + linkType: hard + +"summary@npm:^2.1.0": + version: 2.1.0 + resolution: "summary@npm:2.1.0" + checksum: 2743c1f940fb303c496ef1b085e654704a6c16872957b6b76648c34bd32c8f0b7a3c5ec4e0f8bfb71dcb8473e34d172fef31026b85562af589cf220aa901698d + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0, supports-color@npm:^5.5.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: "npm:^3.0.0" + checksum: 6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 + languageName: node + linkType: hard + +"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: "npm:^4.0.0" + checksum: afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 + languageName: node + linkType: hard + +"supports-color@npm:^8.0.0": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: "npm:^4.0.0" + checksum: ea1d3c275dd604c974670f63943ed9bd83623edc102430c05adb8efc56ba492746b6e95386e7831b872ec3807fd89dd8eb43f735195f37b5ec343e4234cc7e89 + languageName: node + linkType: hard + +"supports-color@npm:^9.0.0": + version: 9.4.0 + resolution: "supports-color@npm:9.4.0" + checksum: 6c24e6b2b64c6a60e5248490cfa50de5924da32cf09ae357ad8ebbf305cc5d2717ba705a9d4cb397d80bbf39417e8fdc8d7a0ce18bd0041bf7b5b456229164e4 + languageName: node + linkType: hard + +"supports-hyperlinks@npm:^2.2.0": + version: 2.3.0 + resolution: "supports-hyperlinks@npm:2.3.0" + dependencies: + has-flag: "npm:^4.0.0" + supports-color: "npm:^7.0.0" + checksum: 4057f0d86afb056cd799602f72d575b8fdd79001c5894bcb691176f14e870a687e7981e50bc1484980e8b688c6d5bcd4931e1609816abb5a7dc1486b7babf6a1 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 + languageName: node + linkType: hard + +"svgo@npm:^3.0.2": + version: 3.1.0 + resolution: "svgo@npm:3.1.0" + dependencies: + "@trysound/sax": "npm:0.2.0" + commander: "npm:^7.2.0" + css-select: "npm:^5.1.0" + css-tree: "npm:^2.2.1" + css-what: "npm:^6.1.0" + csso: "npm:5.0.5" + picocolors: "npm:^1.0.0" + bin: + svgo: ./bin/svgo + checksum: b3f00b3319dee6ddc53f8b8ac5acef581860e1708c98b492169e096621edc1bdf46e3778099e3dffb5116bf0d4c074a686099843dbc020c73b3ccfae7b6a88f0 + languageName: node + linkType: hard + +"symbol-tree@npm:^3.2.4": + version: 3.2.4 + resolution: "symbol-tree@npm:3.2.4" + checksum: dfbe201ae09ac6053d163578778c53aa860a784147ecf95705de0cd23f42c851e1be7889241495e95c37cabb058edb1052f141387bef68f705afc8f9dd358509 + languageName: node + linkType: hard + +"tabtab@npm:3.0.2": + version: 3.0.2 + resolution: "tabtab@npm:3.0.2" + dependencies: + debug: "npm:^4.0.1" + es6-promisify: "npm:^6.0.0" + inquirer: "npm:^6.0.0" + minimist: "npm:^1.2.0" + mkdirp: "npm:^0.5.1" + untildify: "npm:^3.0.3" + checksum: a2c4e505073c57343b808e4e0c2dd0645673968deb091ed3be6ad100a4fc14e2436199b1447fe52c2f6286eeeb6c1e7a19672f56d505cfd0b7dc6df2a64c1d94 + languageName: node + linkType: hard + +"tar-fs@npm:^2.0.0": + version: 2.1.1 + resolution: "tar-fs@npm:2.1.1" + dependencies: + chownr: "npm:^1.1.1" + mkdirp-classic: "npm:^0.5.2" + pump: "npm:^3.0.0" + tar-stream: "npm:^2.1.4" + checksum: 871d26a934bfb7beeae4c4d8a09689f530b565f79bd0cf489823ff0efa3705da01278160da10bb006d1a793fa0425cf316cec029b32a9159eacbeaff4965fb6d + languageName: node + linkType: hard + +"tar-fs@npm:^3.0.4": + version: 3.0.4 + resolution: "tar-fs@npm:3.0.4" + dependencies: + mkdirp-classic: "npm:^0.5.2" + pump: "npm:^3.0.0" + tar-stream: "npm:^3.1.5" + checksum: 120f026d891e5b4f7147a5ae5816e3a9b7f2c5b4ca61714dab3fe1244961607dccca40c11cafc584e625838c57d1308da5bb28b13d70b85ab566bc4c9f1c88b1 + languageName: node + linkType: hard + +"tar-stream@npm:^2.1.4": + version: 2.2.0 + resolution: "tar-stream@npm:2.2.0" + dependencies: + bl: "npm:^4.0.3" + end-of-stream: "npm:^1.4.1" + fs-constants: "npm:^1.0.0" + inherits: "npm:^2.0.3" + readable-stream: "npm:^3.1.1" + checksum: 2f4c910b3ee7196502e1ff015a7ba321ec6ea837667220d7bcb8d0852d51cb04b87f7ae471008a6fb8f5b1a1b5078f62f3a82d30c706f20ada1238ac797e7692 + languageName: node + linkType: hard + +"tar-stream@npm:^3.0.0, tar-stream@npm:^3.1.4, tar-stream@npm:^3.1.5": + version: 3.1.6 + resolution: "tar-stream@npm:3.1.6" + dependencies: + b4a: "npm:^1.6.4" + fast-fifo: "npm:^1.2.0" + streamx: "npm:^2.15.0" + checksum: 7d52d1a56eb25b8434c9544becb737eb6c4f0ed19d205e739fdd2537ad8d1d623a6c93f7f8e58d9028cb0cdf86c0d8b67164e070cd1702cc78b8ab7cba0f3702 + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.2.0 + resolution: "tar@npm:6.2.0" + dependencies: + chownr: "npm:^2.0.0" + fs-minipass: "npm:^2.0.0" + minipass: "npm:^5.0.0" + minizlib: "npm:^2.1.1" + mkdirp: "npm:^1.0.3" + yallist: "npm:^4.0.0" + checksum: 02ca064a1a6b4521fef88c07d389ac0936730091f8c02d30ea60d472e0378768e870769ab9e986d87807bfee5654359cf29ff4372746cc65e30cbddc352660d8 + languageName: node + linkType: hard + +"temp-dir@npm:^2.0.0": + version: 2.0.0 + resolution: "temp-dir@npm:2.0.0" + checksum: b1df969e3f3f7903f3426861887ed76ba3b495f63f6d0c8e1ce22588679d9384d336df6064210fda14e640ed422e2a17d5c40d901f60e161c99482d723f4d309 + languageName: node + linkType: hard + +"tempy@npm:3.0.0": + version: 3.0.0 + resolution: "tempy@npm:3.0.0" + dependencies: + is-stream: "npm:^3.0.0" + temp-dir: "npm:^2.0.0" + type-fest: "npm:^2.12.2" + unique-string: "npm:^3.0.0" + checksum: 281797a81417fc04b07ef77dc9d9870624b83980b6c6d0d9075f265f2617da04b83850f4c1c68ffa2904a0c50fc22790c104b923243a57885cd84a1379b6ce0e + languageName: node + linkType: hard + +"terminal-link@npm:3.0.0, terminal-link@npm:^3.0.0": + version: 3.0.0 + resolution: "terminal-link@npm:3.0.0" + dependencies: + ansi-escapes: "npm:^5.0.0" + supports-hyperlinks: "npm:^2.2.0" + checksum: 2ccf93f474d9c4fe1ac75764a48836e61c281def08f4aff154696bc83dd764078ee2f5a6a6148382fb928943d53f44313ae513c5f457649d2961a95e5cd343b3 + languageName: node + linkType: hard + +"test-exclude@npm:^6.0.0": + version: 6.0.0 + resolution: "test-exclude@npm:6.0.0" + dependencies: + "@istanbuljs/schema": "npm:^0.1.2" + glob: "npm:^7.1.4" + minimatch: "npm:^3.0.4" + checksum: 019d33d81adff3f9f1bfcff18125fb2d3c65564f437d9be539270ee74b994986abb8260c7c2ce90e8f30162178b09dbbce33c6389273afac4f36069c48521f57 + languageName: node + linkType: hard + +"text-extensions@npm:^1.0.0": + version: 1.9.0 + resolution: "text-extensions@npm:1.9.0" + checksum: 9ad5a9f723a871e2d884e132d7e93f281c60b5759c95f3f6b04704856548715d93a36c10dbaf5f12b91bf405f0cf3893bf169d4d143c0f5509563b992d385443 + languageName: node + linkType: hard + +"text-hex@npm:1.0.x": + version: 1.0.0 + resolution: "text-hex@npm:1.0.0" + checksum: 57d8d320d92c79d7c03ffb8339b825bb9637c2cbccf14304309f51d8950015c44464b6fd1b6820a3d4821241c68825634f09f5a2d9d501e84f7c6fd14376860d + languageName: node + linkType: hard + +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: 02805740c12851ea5982686810702e2f14369a5f4c5c40a836821e3eefc65ffeec3131ba324692a37608294b0fd8c1e55a2dd571ffed4909822787668ddbee5c + languageName: node + linkType: hard + +"thread-stream@npm:^2.0.0": + version: 2.4.1 + resolution: "thread-stream@npm:2.4.1" + dependencies: + real-require: "npm:^0.2.0" + checksum: ce29265810b9550ce896726301ff006ebfe96b90292728f07cfa4c379740585583046e2a8018afc53aca66b18fed12b33a84f3883e7ebc317185f6682898b8f8 + languageName: node + linkType: hard + +"thriftrw@npm:^3.5.0": + version: 3.11.4 + resolution: "thriftrw@npm:3.11.4" + dependencies: + bufrw: "npm:^1.2.1" + error: "npm:7.0.2" + long: "npm:^2.4.0" + bin: + thrift2json: thrift2json.js + checksum: 0b8a8e2eaaba3bf974ec26b0384513d66494f2e69f2f1c5e8415a6e98c6276f9e0e5220dd794709b20d66519431afede25b961d20719a61a2b70e72de527d010 + languageName: node + linkType: hard + +"through2-filter@npm:3.0.0": + version: 3.0.0 + resolution: "through2-filter@npm:3.0.0" + dependencies: + through2: "npm:~2.0.0" + xtend: "npm:~4.0.0" + checksum: 741d9144dbbafca3a4a75fc55a0c062641ac464071118cef2213f35f0a961e3331795c802d5bef915060d07cebd29e6c7079e656845145de4db63c74054b4156 + languageName: node + linkType: hard + +"through2-map@npm:3.0.0": + version: 3.0.0 + resolution: "through2-map@npm:3.0.0" + dependencies: + through2: "npm:~2.0.0" + xtend: "npm:^4.0.0" + checksum: 3df2efbb0abd2bf23bb52b22f6956aa493649c3c895e925288fa25dbf40667b96201c8e3860e2d9e15697c00d5e49e2fcbdcdfbb6c0409a807891e1c28e62860 + languageName: node + linkType: hard + +"through2@npm:^2.0.0, through2@npm:~2.0.0": + version: 2.0.5 + resolution: "through2@npm:2.0.5" + dependencies: + readable-stream: "npm:~2.3.6" + xtend: "npm:~4.0.1" + checksum: cbfe5b57943fa12b4f8c043658c2a00476216d79c014895cef1ac7a1d9a8b31f6b438d0e53eecbb81054b93128324a82ecd59ec1a4f91f01f7ac113dcb14eade + languageName: node + linkType: hard + +"through2@npm:^4.0.0, through2@npm:^4.0.2": + version: 4.0.2 + resolution: "through2@npm:4.0.2" + dependencies: + readable-stream: "npm:3" + checksum: 3741564ae99990a4a79097fe7a4152c22348adc4faf2df9199a07a66c81ed2011da39f631e479fdc56483996a9d34a037ad64e76d79f18c782ab178ea9b6778c + languageName: node + linkType: hard + +"through@npm:>=2.2.7 <3, through@npm:^2.3.6, through@npm:^2.3.8": + version: 2.3.8 + resolution: "through@npm:2.3.8" + checksum: 4b09f3774099de0d4df26d95c5821a62faee32c7e96fb1f4ebd54a2d7c11c57fe88b0a0d49cf375de5fee5ae6bf4eb56dbbf29d07366864e2ee805349970d3cc + languageName: node + linkType: hard + +"time-zone@npm:^1.0.0": + version: 1.0.0 + resolution: "time-zone@npm:1.0.0" + checksum: d00ebd885039109011b6e2423ebbf225160927333c2ade6d833e9cc4676db20759f1f3855fafde00d1bd668c243a6aa68938ce71fe58aab0d514e820d59c1d81 + languageName: node + linkType: hard + +"tiny-invariant@npm:^1.3.1": + version: 1.3.1 + resolution: "tiny-invariant@npm:1.3.1" + checksum: 5b87c1d52847d9452b60d0dcb77011b459044e0361ca8253bfe7b43d6288106e12af926adb709a6fc28900e3864349b91dad9a4ac93c39aa15f360b26c2ff4db + languageName: node + linkType: hard + +"tiny-lru@npm:^11.0.1": + version: 11.2.5 + resolution: "tiny-lru@npm:11.2.5" + checksum: bda6de074035ca108ce179ba4ceb02a3eca6aab78b5cf161736035f2af562644594435d8fa4c07f098eee96e1a483992025af72f25e6033d54a66cf270fa8372 + languageName: node + linkType: hard + +"tmp-promise@npm:^3.0.2, tmp-promise@npm:^3.0.3": + version: 3.0.3 + resolution: "tmp-promise@npm:3.0.3" + dependencies: + tmp: "npm:^0.2.0" + checksum: 23b47dcb2e82b14bbd8f61ed7a9d9353cdb6a6f09d7716616cfd27d0087040cd40152965a518e598d7aabe1489b9569bf1eebde0c5fadeaf3ec8098adcebea4e + languageName: node + linkType: hard + +"tmp@npm:^0.0.33": + version: 0.0.33 + resolution: "tmp@npm:0.0.33" + dependencies: + os-tmpdir: "npm:~1.0.2" + checksum: 69863947b8c29cabad43fe0ce65cec5bb4b481d15d4b4b21e036b060b3edbf3bc7a5541de1bacb437bb3f7c4538f669752627fdf9b4aaf034cebd172ba373408 + languageName: node + linkType: hard + +"tmp@npm:^0.2.0": + version: 0.2.1 + resolution: "tmp@npm:0.2.1" + dependencies: + rimraf: "npm:^3.0.0" + checksum: 67607aa012059c9ce697bee820ee51bc0f39b29a8766def4f92d3f764d67c7cf9205d537d24e0cb1ce9685c40d4c628ead010910118ea18348666b5c46ed9123 + languageName: node + linkType: hard + +"tmpl@npm:1.0.5": + version: 1.0.5 + resolution: "tmpl@npm:1.0.5" + checksum: f935537799c2d1922cb5d6d3805f594388f75338fe7a4a9dac41504dd539704ca4db45b883b52e7b0aa5b2fd5ddadb1452bf95cd23a69da2f793a843f9451cc9 + languageName: node + linkType: hard + +"to-fast-properties@npm:^2.0.0": + version: 2.0.0 + resolution: "to-fast-properties@npm:2.0.0" + checksum: b214d21dbfb4bce3452b6244b336806ffea9c05297148d32ebb428d5c43ce7545bdfc65a1ceb58c9ef4376a65c0cb2854d645f33961658b3e3b4f84910ddcdd7 + languageName: node + linkType: hard + +"to-no-case@npm:^1.0.0": + version: 1.0.2 + resolution: "to-no-case@npm:1.0.2" + checksum: c035b04e1042ed67ceb23dc5c7c20ccde11a83ab1d2b3947c17918472b5d26dd4ffdb4cf9464752e7707ab9f3af4a106f9b61244c724bc6810422acd5984da3d + languageName: node + linkType: hard + +"to-object-path@npm:^0.3.0": + version: 0.3.0 + resolution: "to-object-path@npm:0.3.0" + dependencies: + kind-of: "npm:^3.0.2" + checksum: 731832a977614c03a770363ad2bd9e9c82f233261861724a8e612bb90c705b94b1a290a19f52958e8e179180bb9b71121ed65e245691a421467726f06d1d7fc3 + languageName: node + linkType: hard + +"to-pascal-case@npm:^1.0.0": + version: 1.0.0 + resolution: "to-pascal-case@npm:1.0.0" + dependencies: + to-space-case: "npm:^1.0.0" + checksum: e1a0b11c6f4d561318b3e01d91b7cdbd7d08ce2fb55850e85daf7beb8a5dc7add1d491c6580169b53727feb17afcc9bc45790b8a58a0b342a2287ae50354832a + languageName: node + linkType: hard + +"to-readable-stream@npm:3.0.0": + version: 3.0.0 + resolution: "to-readable-stream@npm:3.0.0" + checksum: 086d0ff7cd8e235ae8bb9c5ce4b295487fa580e00a2098d6a00643d8b5f46af8f7e9036b1cf9a16cea6ef377dc693c3a4be868f123baea7fad6222c6b4f8ee50 + languageName: node + linkType: hard + +"to-regex-range@npm:^2.1.0": + version: 2.1.1 + resolution: "to-regex-range@npm:2.1.1" + dependencies: + is-number: "npm:^3.0.0" + repeat-string: "npm:^1.6.1" + checksum: 440d82dbfe0b2e24f36dd8a9467240406ad1499fc8b2b0f547372c22ed1d092ace2a3eb522bb09bfd9c2f39bf1ca42eb78035cf6d2b8c9f5c78da3abc96cd949 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 + languageName: node + linkType: hard + +"to-regex@npm:^3.0.1, to-regex@npm:^3.0.2": + version: 3.0.2 + resolution: "to-regex@npm:3.0.2" + dependencies: + define-property: "npm:^2.0.2" + extend-shallow: "npm:^3.0.2" + regex-not: "npm:^1.0.2" + safe-regex: "npm:^1.1.0" + checksum: 99d0b8ef397b3f7abed4bac757b0f0bb9f52bfd39167eb7105b144becfaa9a03756892352d01ac6a911f0c1ceef9f81db68c46899521a3eed054082042796120 + languageName: node + linkType: hard + +"to-space-case@npm:^1.0.0": + version: 1.0.0 + resolution: "to-space-case@npm:1.0.0" + dependencies: + to-no-case: "npm:^1.0.0" + checksum: b99e1b5d0f3c90a8d47fa3b155d515027bd83a370740e82ee7cb064f86e3655f030f068bddcb8d18239e7408761b4376d89ab91e5ccdb17dc859d8fd4f570ac5 + languageName: node + linkType: hard + +"toidentifier@npm:1.0.1": + version: 1.0.1 + resolution: "toidentifier@npm:1.0.1" + checksum: 93937279934bd66cc3270016dd8d0afec14fb7c94a05c72dc57321f8bd1fa97e5bea6d1f7c89e728d077ca31ea125b78320a616a6c6cd0e6b9cb94cb864381c1 + languageName: node + linkType: hard + +"token-types@npm:^5.0.1": + version: 5.0.1 + resolution: "token-types@npm:5.0.1" + dependencies: + "@tokenizer/token": "npm:^0.3.0" + ieee754: "npm:^1.2.1" + checksum: cb671b2b52271362816d22b7a076082b0da033cd7807992b81ae53cfd8541bd013ac29e455c3c7a8bb4f88aa1c5315a12353c3599b7f568df238d3c1723f9d8d + languageName: node + linkType: hard + +"toml@npm:3.0.0, toml@npm:^3.0.0": + version: 3.0.0 + resolution: "toml@npm:3.0.0" + checksum: 8d7ed3e700ca602e5419fca343e1c595eb7aa177745141f0761a5b20874b58ee5c878cd045c408da9d130cb2b611c639912210ba96ce2f78e443569aa8060c18 + languageName: node + linkType: hard + +"tomlify-j0.4@npm:3.0.0, tomlify-j0.4@npm:^3.0.0": + version: 3.0.0 + resolution: "tomlify-j0.4@npm:3.0.0" + checksum: 78349675ac24e4aa7b518f54cb3b55884d9f5d5a6a44fdeff63b3c55887ccce7c491802f2a527ee38a559d259adc5a14b431f926f892179f020db3d5025d9a94 + languageName: node + linkType: hard + +"touch@npm:^3.1.0": + version: 3.1.0 + resolution: "touch@npm:3.1.0" + dependencies: + nopt: "npm:~1.0.10" + bin: + nodetouch: ./bin/nodetouch.js + checksum: dacb4a639401b83b0a40b56c0565e01096e5ecf38b22a4840d9eeb642a5bea136c6a119e4543f9b172349a5ee343b10cda0880eb47f7d7ddfd6eac59dcf53244 + languageName: node + linkType: hard + +"tough-cookie@npm:^4.1.2": + version: 4.1.3 + resolution: "tough-cookie@npm:4.1.3" + dependencies: + psl: "npm:^1.1.33" + punycode: "npm:^2.1.1" + universalify: "npm:^0.2.0" + url-parse: "npm:^1.5.3" + checksum: 4fc0433a0cba370d57c4b240f30440c848906dee3180bb6e85033143c2726d322e7e4614abb51d42d111ebec119c4876ed8d7247d4113563033eebbc1739c831 + languageName: node + linkType: hard + +"tr46@npm:^4.1.1": + version: 4.1.1 + resolution: "tr46@npm:4.1.1" + dependencies: + punycode: "npm:^2.3.0" + checksum: 92085dcf186f56a49ba4124a581d9ae6a5d0cd4878107c34e2e670b9ddc49da85e4950084bb3e75015195cc23f37ae1c02d45064e94dd6018f5e789aa51d93a8 + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 + languageName: node + linkType: hard + +"trim-newlines@npm:^3.0.0": + version: 3.0.1 + resolution: "trim-newlines@npm:3.0.1" + checksum: 03cfefde6c59ff57138412b8c6be922ecc5aec30694d784f2a65ef8dcbd47faef580b7de0c949345abdc56ec4b4abf64dd1e5aea619b200316e471a3dd5bf1f6 + languageName: node + linkType: hard + +"trim-repeated@npm:^2.0.0": + version: 2.0.0 + resolution: "trim-repeated@npm:2.0.0" + dependencies: + escape-string-regexp: "npm:^5.0.0" + checksum: 7c81ea60fc5eb509142735e41fbc41d964aeeb491f0deceea9e030a630d05ed236031f69946b5944156dbdd564f4d86cde5e9c775c321a5e96308761679128cf + languageName: node + linkType: hard + +"triple-beam@npm:^1.3.0": + version: 1.4.1 + resolution: "triple-beam@npm:1.4.1" + checksum: 4bf1db71e14fe3ff1c3adbe3c302f1fdb553b74d7591a37323a7badb32dc8e9c290738996cbb64f8b10dc5a3833645b5d8c26221aaaaa12e50d1251c9aba2fea + languageName: node + linkType: hard + +"ts-jest@npm:^29.1.1": + version: 29.1.1 + resolution: "ts-jest@npm:29.1.1" + dependencies: + bs-logger: "npm:0.x" + fast-json-stable-stringify: "npm:2.x" + jest-util: "npm:^29.0.0" + json5: "npm:^2.2.3" + lodash.memoize: "npm:4.x" + make-error: "npm:1.x" + semver: "npm:^7.5.3" + yargs-parser: "npm:^21.0.1" + peerDependencies: + "@babel/core": ">=7.0.0-beta.0 <8" + "@jest/types": ^29.0.0 + babel-jest: ^29.0.0 + jest: ^29.0.0 + typescript: ">=4.3 <6" + peerDependenciesMeta: + "@babel/core": + optional: true + "@jest/types": + optional: true + babel-jest: + optional: true + esbuild: + optional: true + bin: + ts-jest: cli.js + checksum: 6c45e0aeeff9cc54a64f931c43e1b99f4a1f0ddf44786cc128e7e55603ab7473c8c8f62fd83bd7e51bfe83e3c0c683132152efaeb844516bf7c923f4e92d157d + languageName: node + linkType: hard + +"ts-node@npm:^10.8.1": + version: 10.9.1 + resolution: "ts-node@npm:10.9.1" + dependencies: + "@cspotcode/source-map-support": "npm:^0.8.0" + "@tsconfig/node10": "npm:^1.0.7" + "@tsconfig/node12": "npm:^1.0.7" + "@tsconfig/node14": "npm:^1.0.0" + "@tsconfig/node16": "npm:^1.0.2" + acorn: "npm:^8.4.1" + acorn-walk: "npm:^8.1.1" + arg: "npm:^4.1.0" + create-require: "npm:^1.1.0" + diff: "npm:^4.0.1" + make-error: "npm:^1.1.1" + v8-compile-cache-lib: "npm:^3.0.1" + yn: "npm:3.1.1" + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + bin: + ts-node: dist/bin.js + ts-node-cwd: dist/bin-cwd.js + ts-node-esm: dist/bin-esm.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: 95187932fb83f3901e22546bd2feeac7d2feb4f412f42ac3a595f049a23e8dcf70516dffb51866391228ea2dbcfaea039e250fb2bb334d48a86ab2b6aea0ae2d + languageName: node + linkType: hard + +"ts-node@npm:^10.9.1": + version: 10.9.2 + resolution: "ts-node@npm:10.9.2" + dependencies: + "@cspotcode/source-map-support": "npm:^0.8.0" + "@tsconfig/node10": "npm:^1.0.7" + "@tsconfig/node12": "npm:^1.0.7" + "@tsconfig/node14": "npm:^1.0.0" + "@tsconfig/node16": "npm:^1.0.2" + acorn: "npm:^8.4.1" + acorn-walk: "npm:^8.1.1" + arg: "npm:^4.1.0" + create-require: "npm:^1.1.0" + diff: "npm:^4.0.1" + make-error: "npm:^1.1.1" + v8-compile-cache-lib: "npm:^3.0.1" + yn: "npm:3.1.1" + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + bin: + ts-node: dist/bin.js + ts-node-cwd: dist/bin-cwd.js + ts-node-esm: dist/bin-esm.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: 5f29938489f96982a25ba650b64218e83a3357d76f7bede80195c65ab44ad279c8357264639b7abdd5d7e75fc269a83daa0e9c62fd8637a3def67254ecc9ddc2 + languageName: node + linkType: hard + +"tslib@npm:^1.8.1, tslib@npm:^1.9.0, tslib@npm:^1.9.3": + version: 1.14.1 + resolution: "tslib@npm:1.14.1" + checksum: 69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2 + languageName: node + linkType: hard + +"tsutils@npm:^3.21.0": + version: 3.21.0 + resolution: "tsutils@npm:3.21.0" + dependencies: + tslib: "npm:^1.8.1" + peerDependencies: + typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + checksum: 02f19e458ec78ead8fffbf711f834ad8ecd2cc6ade4ec0320790713dccc0a412b99e7fd907c4cda2a1dc602c75db6f12e0108e87a5afad4b2f9e90a24cabd5a2 + languageName: node + linkType: hard + +"tsx@npm:^3.12.7": + version: 3.12.8 + resolution: "tsx@npm:3.12.8" + dependencies: + "@esbuild-kit/cjs-loader": "npm:^2.4.2" + "@esbuild-kit/core-utils": "npm:^3.2.2" + "@esbuild-kit/esm-loader": "npm:^2.5.5" + fsevents: "npm:~2.3.2" + dependenciesMeta: + fsevents: + optional: true + bin: + tsx: dist/cli.js + checksum: f46aba57abec9f5e7b269e2ea36dd51ef785482c63989af433e0399cade563826256f8c1f80695f40db3d95454b3bf103da325ea40437fa3fb3a91a0d1b3a0f5 + languageName: node + linkType: hard + +"tunnel-agent@npm:^0.6.0": + version: 0.6.0 + resolution: "tunnel-agent@npm:0.6.0" + dependencies: + safe-buffer: "npm:^5.0.1" + checksum: 4c7a1b813e7beae66fdbf567a65ec6d46313643753d0beefb3c7973d66fcec3a1e7f39759f0a0b4465883499c6dc8b0750ab8b287399af2e583823e40410a17a + languageName: node + linkType: hard + +"tunnel@npm:^0.0.6": + version: 0.0.6 + resolution: "tunnel@npm:0.0.6" + checksum: e27e7e896f2426c1c747325b5f54efebc1a004647d853fad892b46d64e37591ccd0b97439470795e5262b5c0748d22beb4489a04a0a448029636670bfd801b75 + languageName: node + linkType: hard + +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: "npm:^1.2.1" + checksum: 7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58 + languageName: node + linkType: hard + +"type-detect@npm:4.0.8": + version: 4.0.8 + resolution: "type-detect@npm:4.0.8" + checksum: 8fb9a51d3f365a7de84ab7f73b653534b61b622aa6800aecdb0f1095a4a646d3f5eb295322127b6573db7982afcd40ab492d038cf825a42093a58b1e1353e0bd + languageName: node + linkType: hard + +"type-fest@npm:^0.18.0": + version: 0.18.1 + resolution: "type-fest@npm:0.18.1" + checksum: 303f5ecf40d03e1d5b635ce7660de3b33c18ed8ebc65d64920c02974d9e684c72483c23f9084587e9dd6466a2ece1da42ddc95b412a461794dd30baca95e2bac + languageName: node + linkType: hard + +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: dea9df45ea1f0aaa4e2d3bed3f9a0bfe9e5b2592bddb92eb1bf06e50bcf98dbb78189668cd8bc31a0511d3fc25539b4cd5c704497e53e93e2d40ca764b10bfc3 + languageName: node + linkType: hard + +"type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: 902bd57bfa30d51d4779b641c2bc403cdf1371fb9c91d3c058b0133694fcfdb817aef07a47f40faf79039eecbaa39ee9d3c532deff244f3a19ce68cea71a61e8 + languageName: node + linkType: hard + +"type-fest@npm:^0.3.0": + version: 0.3.1 + resolution: "type-fest@npm:0.3.1" + checksum: ef632e9549f331024594bbb8b620fe570d90abd8e7f2892d4aff733fd72698774e1a88e277fac02b4267de17d79cbb87860332f64f387145532b13ace6510502 + languageName: node + linkType: hard + +"type-fest@npm:^0.6.0": + version: 0.6.0 + resolution: "type-fest@npm:0.6.0" + checksum: 0c585c26416fce9ecb5691873a1301b5aff54673c7999b6f925691ed01f5b9232db408cdbb0bd003d19f5ae284322523f44092d1f81ca0a48f11f7cf0be8cd38 + languageName: node + linkType: hard + +"type-fest@npm:^0.8.0, type-fest@npm:^0.8.1": + version: 0.8.1 + resolution: "type-fest@npm:0.8.1" + checksum: dffbb99329da2aa840f506d376c863bd55f5636f4741ad6e65e82f5ce47e6914108f44f340a0b74009b0cb5d09d6752ae83203e53e98b1192cf80ecee5651636 + languageName: node + linkType: hard + +"type-fest@npm:^1.0.1, type-fest@npm:^1.0.2": + version: 1.4.0 + resolution: "type-fest@npm:1.4.0" + checksum: a3c0f4ee28ff6ddf800d769eafafcdeab32efa38763c1a1b8daeae681920f6e345d7920bf277245235561d8117dab765cb5f829c76b713b4c9de0998a5397141 + languageName: node + linkType: hard + +"type-fest@npm:^2.0.0, type-fest@npm:^2.11.2, type-fest@npm:^2.12.2, type-fest@npm:^2.13.0, type-fest@npm:^2.5.0": + version: 2.19.0 + resolution: "type-fest@npm:2.19.0" + checksum: a5a7ecf2e654251613218c215c7493574594951c08e52ab9881c9df6a6da0aeca7528c213c622bc374b4e0cb5c443aa3ab758da4e3c959783ce884c3194e12cb + languageName: node + linkType: hard + +"type-fest@npm:^3.0.0": + version: 3.13.1 + resolution: "type-fest@npm:3.13.1" + checksum: 547d22186f73a8c04590b70dcf63baff390078c75ea8acd366bbd510fd0646e348bd1970e47ecf795b7cff0b41d26e9c475c1fedd6ef5c45c82075fbf916b629 + languageName: node + linkType: hard + +"type-is@npm:~1.6.18": + version: 1.6.18 + resolution: "type-is@npm:1.6.18" + dependencies: + media-typer: "npm:0.3.0" + mime-types: "npm:~2.1.24" + checksum: a23daeb538591b7efbd61ecf06b6feb2501b683ffdc9a19c74ef5baba362b4347e42f1b4ed81f5882a8c96a3bfff7f93ce3ffaf0cbbc879b532b04c97a55db9d + languageName: node + linkType: hard + +"type@npm:^1.0.1": + version: 1.2.0 + resolution: "type@npm:1.2.0" + checksum: 444660849aaebef8cbb9bc43b28ec2068952064cfce6a646f88db97aaa2e2d6570c5629cd79238b71ba23aa3f75146a0b96e24e198210ee0089715a6f8889bf7 + languageName: node + linkType: hard + +"type@npm:^2.7.2": + version: 2.7.2 + resolution: "type@npm:2.7.2" + checksum: 84c2382788fe24e0bc3d64c0c181820048f672b0f06316aa9c7bdb373f8a09f8b5404f4e856bc4539fb931f2f08f2adc4c53f6c08c9c0314505d70c29a1289e1 + languageName: node + linkType: hard + +"typedarray-to-buffer@npm:^3.1.5": + version: 3.1.5 + resolution: "typedarray-to-buffer@npm:3.1.5" + dependencies: + is-typedarray: "npm:^1.0.0" + checksum: 4ac5b7a93d604edabf3ac58d3a2f7e07487e9f6e98195a080e81dbffdc4127817f470f219d794a843b87052cedef102b53ac9b539855380b8c2172054b7d5027 + languageName: node + linkType: hard + +"typescript@npm:^4.6.4 || ^5.0.0, typescript@npm:^5.0.2": + version: 5.2.2 + resolution: "typescript@npm:5.2.2" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 91ae3e6193d0ddb8656d4c418a033f0f75dec5e077ebbc2bd6d76439b93f35683936ee1bdc0e9cf94ec76863aa49f27159b5788219b50e1cd0cd6d110aa34b07 + languageName: node + linkType: hard + +"typescript@npm:^4.9.5": + version: 4.9.5 + resolution: "typescript@npm:4.9.5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 5f6cad2e728a8a063521328e612d7876e12f0d8a8390d3b3aaa452a6a65e24e9ac8ea22beb72a924fd96ea0a49ea63bb4e251fb922b12eedfb7f7a26475e5c56 + languageName: node + linkType: hard + +"typescript@npm:^5.0.0, typescript@npm:^5.0.4": + version: 5.3.3 + resolution: "typescript@npm:5.3.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: e33cef99d82573624fc0f854a2980322714986bc35b9cb4d1ce736ed182aeab78e2cb32b385efa493b2a976ef52c53e20d6c6918312353a91850e2b76f1ea44f + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A^4.6.4 || ^5.0.0#optional!builtin, typescript@patch:typescript@npm%3A^5.0.2#optional!builtin": + version: 5.2.2 + resolution: "typescript@patch:typescript@npm%3A5.2.2#optional!builtin::version=5.2.2&hash=f3b441" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 062c1cee1990e6b9419ce8a55162b8dc917eb87f807e4de0327dbc1c2fa4e5f61bc0dd4e034d38ff541d1ed0479b53bcee8e4de3a4075c51a1724eb6216cb6f5 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A^4.9.5#optional!builtin": + version: 4.9.5 + resolution: "typescript@patch:typescript@npm%3A4.9.5#optional!builtin::version=4.9.5&hash=289587" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: e3333f887c6829dfe0ab6c1dbe0dd1e3e2aeb56c66460cb85c5440c566f900c833d370ca34eb47558c0c69e78ced4bfe09b8f4f98b6de7afed9b84b8d1dd06a1 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A^5.0.0#optional!builtin, typescript@patch:typescript@npm%3A^5.0.4#optional!builtin": + version: 5.3.3 + resolution: "typescript@patch:typescript@npm%3A5.3.3#optional!builtin::version=5.3.3&hash=e012d7" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 1d0a5f4ce496c42caa9a30e659c467c5686eae15d54b027ee7866744952547f1be1262f2d40de911618c242b510029d51d43ff605dba8fb740ec85ca2d3f9500 + languageName: node + linkType: hard + +"ubiquibot-logger@npm:^0.3.5": + version: 0.3.5 + resolution: "ubiquibot-logger@npm:0.3.5" + dependencies: + "@supabase/supabase-js": "npm:^2.4.0" + dotenv: "npm:^16.3.1" + pino-std-serializers: "npm:^6.2.2" + probot: "npm:^12.2.4" + checksum: a2fc2e1082dca4281016e7fdfe65b0f13a82c754350137ef447509cb41e4297efd2176f366ea398854833f1cabcd1d33f069a0afed85fa84377c4fab34b4838a + languageName: node + linkType: hard + +"ubiquibot@workspace:.": + version: 0.0.0-use.local + resolution: "ubiquibot@workspace:." + dependencies: + "@commitlint/cli": "npm:^17.4.3" + "@commitlint/config-conventional": "npm:^17.4.3" + "@netlify/functions": "npm:^2.4.0" + "@octokit/rest": "npm:^20.0.2" + "@openzeppelin/contracts": "npm:^5.0.0" + "@probot/adapter-github-actions": "npm:^3.1.3" + "@sinclair/typebox": "npm:^0.31.22" + "@supabase/supabase-js": "npm:^2.4.0" + "@types/dotenv": "npm:^8.2.0" + "@types/eslint": "npm:^8.40.2" + "@types/jest": "npm:^29.5.11" + "@types/jsdom": "npm:^21.1.4" + "@types/libsodium-wrappers": "npm:^0.7.10" + "@types/lodash": "npm:^4.14.202" + "@types/markdown-it": "npm:^13.0.4" + "@types/ms": "npm:^0.7.31" + "@types/node": "npm:^14.18.37" + "@types/source-map-support": "npm:^0.5.6" + "@typescript-eslint/eslint-plugin": "npm:^5.59.11" + "@typescript-eslint/parser": "npm:^5.59.11" + "@uniswap/permit2-sdk": "npm:^1.2.0" + "@vercel/ncc": "npm:^0.34.0" + ajv: "npm:^8.12.0" + ajv-formats: "npm:^2.1.1" + axios: "npm:^1.3.2" + cspell: "npm:^7.0.0" + decimal.js: "npm:^10.4.3" + eslint: "npm:^8.43.0" + ethers: "npm:^5.7.2" + husky: "npm:^8.0.2" + jest: "npm:^29.7.0" + js-tiktoken: "npm:^1.0.7" + jsdom: "npm:^22.1.0" + knip: "npm:^2.33.4" + libsodium-wrappers: "npm:^0.7.11" + lint-staged: "npm:^13.1.0" + lodash: "npm:^4.17.21" + markdown-it: "npm:^13.0.2" + ms: "npm:^2.1.3" + netlify-cli: "npm:^17.10.1" + node-html-parser: "npm:^6.1.5" + nodemon: "npm:^2.0.19" + octokit: "npm:^3.1.2" + openai: "npm:^4.2.0" + prettier: "npm:^2.7.1" + probot: "npm:^12.2.4" + rimraf: "npm:3.0.2" + smee-client: "npm:^2.0.0" + source-map-support: "npm:^0.5.21" + ts-jest: "npm:^29.1.1" + tsx: "npm:^3.12.7" + typescript: "npm:^4.9.5" + ubiquibot-logger: "npm:^0.3.5" + yaml: "npm:^2.2.2" + zlib: "npm:^1.0.5" + languageName: unknown + linkType: soft + +"uc.micro@npm:^1.0.1, uc.micro@npm:^1.0.5": + version: 1.0.6 + resolution: "uc.micro@npm:1.0.6" + checksum: 9bde2afc6f2e24b899db6caea47dae778b88862ca76688d844ef6e6121dec0679c152893a74a6cfbd2e6fde34654e6bd8424fee8e0166cdfa6c9ae5d42b8a17b + languageName: node + linkType: hard + +"ufo@npm:^1.3.0, ufo@npm:^1.3.1, ufo@npm:^1.3.2": + version: 1.3.2 + resolution: "ufo@npm:1.3.2" + checksum: 180f3dfcdf319b54fe0272780841c93cb08a024fc2ee5f95e63285c2a3c42d8b671cd3641e9a53aafccf100cf8466aa8c040ddfa0efea1fc1968c9bfb250a661 + languageName: node + linkType: hard + +"uglify-js@npm:^3.1.4": + version: 3.17.4 + resolution: "uglify-js@npm:3.17.4" + bin: + uglifyjs: bin/uglifyjs + checksum: 8b7fcdca69deb284fed7d2025b73eb747ce37f9aca6af53422844f46427152d5440601b6e2a033e77856a2f0591e4167153d5a21b68674ad11f662034ec13ced + languageName: node + linkType: hard + +"uid-safe@npm:2.1.5": + version: 2.1.5 + resolution: "uid-safe@npm:2.1.5" + dependencies: + random-bytes: "npm:~1.0.0" + checksum: ec96862e859fd12175f3da7fda9d1359a2cf412fd521e10837cbdc6d554774079ce252f366981df9401283841c8924782f6dbee8f82a3a81f805ed8a8584595d + languageName: node + linkType: hard + +"ulid@npm:2.3.0": + version: 2.3.0 + resolution: "ulid@npm:2.3.0" + bin: + ulid: ./bin/cli.js + checksum: 070d237502781085e59cf3d8ece752ff96cd3a0990cf1c1be57273f4550597daeb72e9a7db8e5a320de31102509bb3321d280b54bfc44e98025e4628a9629773 + languageName: node + linkType: hard + +"unbzip2-stream@npm:^1.4.3": + version: 1.4.3 + resolution: "unbzip2-stream@npm:1.4.3" + dependencies: + buffer: "npm:^5.2.1" + through: "npm:^2.3.8" + checksum: 2ea2048f3c9db3499316ccc1d95ff757017ccb6f46c812d7c42466247e3b863fb178864267482f7f178254214247779daf68e85f50bd7736c3c97ba2d58b910a + languageName: node + linkType: hard + +"uncrypto@npm:^0.1.3": + version: 0.1.3 + resolution: "uncrypto@npm:0.1.3" + checksum: 74a29afefd76d5b77bedc983559ceb33f5bbc8dada84ff33755d1e3355da55a4e03a10e7ce717918c436b4dfafde1782e799ebaf2aadd775612b49f7b5b2998e + languageName: node + linkType: hard + +"undefsafe@npm:^2.0.5": + version: 2.0.5 + resolution: "undefsafe@npm:2.0.5" + checksum: 96c0466a5fbf395917974a921d5d4eee67bca4b30d3a31ce7e621e0228c479cf893e783a109af6e14329b52fe2f0cb4108665fad2b87b0018c0df6ac771261d5 + languageName: node + linkType: hard + +"undici-types@npm:~5.26.4": + version: 5.26.5 + resolution: "undici-types@npm:5.26.5" + checksum: bb673d7876c2d411b6eb6c560e0c571eef4a01c1c19925175d16e3a30c4c428181fb8d7ae802a261f283e4166a0ac435e2f505743aa9e45d893f9a3df017b501 + languageName: node + linkType: hard + +"undici@npm:^5.25.4": + version: 5.28.2 + resolution: "undici@npm:5.28.2" + dependencies: + "@fastify/busboy": "npm:^2.0.0" + checksum: 34385ad9b3ba85309972ee3c1b426dcd19b94a5a6aa9c54499b5f48436c0ecc13a9b1e756a7c6a953eaefa9f4263890625ece5f2719fd774b0852204f5e4d5f9 + languageName: node + linkType: hard + +"unenv@npm:^1.7.4": + version: 1.8.0 + resolution: "unenv@npm:1.8.0" + dependencies: + consola: "npm:^3.2.3" + defu: "npm:^6.1.3" + mime: "npm:^3.0.0" + node-fetch-native: "npm:^1.4.1" + pathe: "npm:^1.1.1" + checksum: f5ad66425ef5b1848d2daab4bdb18e3f2576a4a8df48f3e994ef373290489a6251969b78b965963a905b90dc01db6e838e2deb826e384ec637df2345a146b0bb + languageName: node + linkType: hard + +"unescape-js@npm:^1.0.5": + version: 1.1.4 + resolution: "unescape-js@npm:1.1.4" + dependencies: + string.fromcodepoint: "npm:^0.2.1" + checksum: 4f7cda5c524cb4392d482eba11762dbc43ff8cd0d0d88c4deecdacb7ec04d9162595406f66c5fbe9a6a565aabf7f2f1cc1889d44d805b1e8326deb7b3b279484 + languageName: node + linkType: hard + +"union-value@npm:^1.0.0": + version: 1.0.1 + resolution: "union-value@npm:1.0.1" + dependencies: + arr-union: "npm:^3.1.0" + get-value: "npm:^2.0.6" + is-extendable: "npm:^0.1.1" + set-value: "npm:^2.0.1" + checksum: 8758d880cb9545f62ce9cfb9b791b2b7a206e0ff5cc4b9d7cd6581da2c6839837fbb45e639cf1fd8eef3cae08c0201b614b7c06dd9f5f70d9dbe7c5fe2fbf592 + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: "npm:^4.0.0" + checksum: 6363e40b2fa758eb5ec5e21b3c7fb83e5da8dcfbd866cc0c199d5534c42f03b9ea9ab069769cc388e1d7ab93b4eeef28ef506ab5f18d910ef29617715101884f + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: cb811d9d54eb5821b81b18205750be84cb015c20a4a44280794e915f5a0a70223ce39066781a354e872df3572e8155c228f43ff0cce94c7cbf4da2cc7cbdd635 + languageName: node + linkType: hard + +"unique-string@npm:^2.0.0": + version: 2.0.0 + resolution: "unique-string@npm:2.0.0" + dependencies: + crypto-random-string: "npm:^2.0.0" + checksum: 11820db0a4ba069d174bedfa96c588fc2c96b083066fafa186851e563951d0de78181ac79c744c1ed28b51f9d82ac5b8196ff3e4560d0178046ef455d8c2244b + languageName: node + linkType: hard + +"unique-string@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-string@npm:3.0.0" + dependencies: + crypto-random-string: "npm:^4.0.0" + checksum: b35ea034b161b2a573666ec16c93076b4b6106b8b16c2415808d747ab3a0566b5db0c4be231d4b11cfbc16d7fd915c9d8a45884bff0e2db11b799775b2e1e017 + languageName: node + linkType: hard + +"universal-github-app-jwt@npm:^1.1.1": + version: 1.1.1 + resolution: "universal-github-app-jwt@npm:1.1.1" + dependencies: + "@types/jsonwebtoken": "npm:^9.0.0" + jsonwebtoken: "npm:^9.0.0" + checksum: f735a3fa0c9156898d128f45237eefa598edfab2424428ccc12e4b7dd9d217ff91b5a2b7a9a1ed6a16fd7985723f0ae34d5efbd3f81ab203c83184b7675c970a + languageName: node + linkType: hard + +"universal-user-agent@npm:^6.0.0": + version: 6.0.1 + resolution: "universal-user-agent@npm:6.0.1" + checksum: 5c9c46ffe19a975e11e6443640ed4c9e0ce48fcc7203325757a8414ac49940ebb0f4667f2b1fa561489d1eb22cb2d05a0f7c82ec20c5cba42e58e188fb19b187 + languageName: node + linkType: hard + +"universalify@npm:^0.2.0": + version: 0.2.0 + resolution: "universalify@npm:0.2.0" + checksum: cedbe4d4ca3967edf24c0800cfc161c5a15e240dac28e3ce575c689abc11f2c81ccc6532c8752af3b40f9120fb5e454abecd359e164f4f6aa44c29cd37e194fe + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.0 + resolution: "universalify@npm:2.0.0" + checksum: 07092b9f46df61b823d8ab5e57f0ee5120c178b39609a95e4a15a98c42f6b0b8e834e66fbb47ff92831786193be42f1fd36347169b88ce8639d0f9670af24a71 + languageName: node + linkType: hard + +"unix-dgram@npm:2.x": + version: 2.0.6 + resolution: "unix-dgram@npm:2.0.6" + dependencies: + bindings: "npm:^1.5.0" + nan: "npm:^2.16.0" + node-gyp: "npm:latest" + checksum: d3725a575a74803b625e3784e12d3edad2289e636938edf622c5c65b0437d6da3f73c393abe9ebeb6ad08d012e058683db965438d8f8eb73070e641d3f097128 + languageName: node + linkType: hard + +"unixify@npm:1.0.0, unixify@npm:^1.0.0": + version: 1.0.0 + resolution: "unixify@npm:1.0.0" + dependencies: + normalize-path: "npm:^2.1.1" + checksum: 8b89100619ebde9f0ab4024a4d402316fb7b1d4853723410fc828944e8d3d01480f210cddf94d9a1699559f8180d861eb6323da8011b7bcc1bbaf6a11a5b1f1e + languageName: node + linkType: hard + +"unpipe@npm:1.0.0, unpipe@npm:~1.0.0": + version: 1.0.0 + resolution: "unpipe@npm:1.0.0" + checksum: 193400255bd48968e5c5383730344fbb4fa114cdedfab26e329e50dd2d81b134244bb8a72c6ac1b10ab0281a58b363d06405632c9d49ca9dfd5e90cbd7d0f32c + languageName: node + linkType: hard + +"unset-value@npm:^1.0.0": + version: 1.0.0 + resolution: "unset-value@npm:1.0.0" + dependencies: + has-value: "npm:^0.3.1" + isobject: "npm:^3.0.0" + checksum: 68a796dde4a373afdbf017de64f08490a3573ebee549136da0b3a2245299e7f65f647ef70dc13c4ac7f47b12fba4de1646fa0967a365638578fedce02b9c0b1f + languageName: node + linkType: hard + +"unstorage@npm:^1.9.0": + version: 1.10.1 + resolution: "unstorage@npm:1.10.1" + dependencies: + anymatch: "npm:^3.1.3" + chokidar: "npm:^3.5.3" + destr: "npm:^2.0.2" + h3: "npm:^1.8.2" + ioredis: "npm:^5.3.2" + listhen: "npm:^1.5.5" + lru-cache: "npm:^10.0.2" + mri: "npm:^1.2.0" + node-fetch-native: "npm:^1.4.1" + ofetch: "npm:^1.3.3" + ufo: "npm:^1.3.1" + peerDependencies: + "@azure/app-configuration": ^1.4.1 + "@azure/cosmos": ^4.0.0 + "@azure/data-tables": ^13.2.2 + "@azure/identity": ^3.3.2 + "@azure/keyvault-secrets": ^4.7.0 + "@azure/storage-blob": ^12.16.0 + "@capacitor/preferences": ^5.0.6 + "@netlify/blobs": ^6.2.0 + "@planetscale/database": ^1.11.0 + "@upstash/redis": ^1.23.4 + "@vercel/kv": ^0.2.3 + idb-keyval: ^6.2.1 + peerDependenciesMeta: + "@azure/app-configuration": + optional: true + "@azure/cosmos": + optional: true + "@azure/data-tables": + optional: true + "@azure/identity": + optional: true + "@azure/keyvault-secrets": + optional: true + "@azure/storage-blob": + optional: true + "@capacitor/preferences": + optional: true + "@netlify/blobs": + optional: true + "@planetscale/database": + optional: true + "@upstash/redis": + optional: true + "@vercel/kv": + optional: true + idb-keyval: + optional: true + checksum: c73c8c45c8f061aff46c1b0634fa2d8cf10bc77aa71512ec77c561cd43cd870efdbbc07379dda8abafafda740762ee1aedb977413341bb05f5b9e221a26df130 + languageName: node + linkType: hard + +"untildify@npm:^3.0.3": + version: 3.0.3 + resolution: "untildify@npm:3.0.3" + checksum: 4c73e47320a97226e4f16f1764cd7d9ee62ec41458bd23244d3bd8f11800270d7603a9099586158dd6b911fa65f51713ced5f8a724bb73c7fa33fb3426bcb32d + languageName: node + linkType: hard + +"untun@npm:^0.1.2": + version: 0.1.2 + resolution: "untun@npm:0.1.2" + dependencies: + citty: "npm:^0.1.3" + consola: "npm:^3.2.3" + pathe: "npm:^1.1.1" + bin: + untun: bin/untun.mjs + checksum: b3de21889d18fc37752d389a220fa85503e6d11dfdfa5c68feb9ac3cb90988048f57ef62474b50df720e7711ac40e1f0864a25d5600f1f9a0aa0e6e89bb9538c + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.0.13": + version: 1.0.13 + resolution: "update-browserslist-db@npm:1.0.13" + dependencies: + escalade: "npm:^3.1.1" + picocolors: "npm:^1.0.0" + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: e52b8b521c78ce1e0c775f356cd16a9c22c70d25f3e01180839c407a5dc787fb05a13f67560cbaf316770d26fa99f78f1acd711b1b54a4f35d4820d4ea7136e6 + languageName: node + linkType: hard + +"update-dotenv@npm:^1.1.1": + version: 1.1.1 + resolution: "update-dotenv@npm:1.1.1" + peerDependencies: + dotenv: "*" + checksum: 723ad536cd510079ccafc9ff828649cee87649d4be23df8e4409e0407ec5179ca70c695aeeb20c70c97571d64dfb04f9d0c28ee40917202a90940dc53509c4fb + languageName: node + linkType: hard + +"update-notifier@npm:6.0.2": + version: 6.0.2 + resolution: "update-notifier@npm:6.0.2" + dependencies: + boxen: "npm:^7.0.0" + chalk: "npm:^5.0.1" + configstore: "npm:^6.0.0" + has-yarn: "npm:^3.0.0" + import-lazy: "npm:^4.0.0" + is-ci: "npm:^3.0.1" + is-installed-globally: "npm:^0.4.0" + is-npm: "npm:^6.0.0" + is-yarn-global: "npm:^0.4.0" + latest-version: "npm:^7.0.0" + pupa: "npm:^3.1.0" + semver: "npm:^7.3.7" + semver-diff: "npm:^4.0.0" + xdg-basedir: "npm:^5.1.0" + checksum: ad3980073312df904133a6e6c554a7f9d0832ed6275e55f5a546313fe77a0f20f23a7b1b4aeb409e20a78afb06f4d3b2b28b332d9cfb55745b5d1ea155810bcc + languageName: node + linkType: hard + +"uqr@npm:^0.1.2": + version: 0.1.2 + resolution: "uqr@npm:0.1.2" + checksum: 40cd81b4c13f1764d52ec28da2d58e60816e6fae54d4eb75b32fbf3137937f438eff16c766139fb0faec5d248a5314591f5a0dbd694e569d419eed6f3bd80242 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: "npm:^2.1.0" + checksum: 4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c + languageName: node + linkType: hard + +"urix@npm:^0.1.0": + version: 0.1.0 + resolution: "urix@npm:0.1.0" + checksum: 264f1b29360c33c0aec5fb9819d7e28f15d1a3b83175d2bcc9131efe8583f459f07364957ae3527f1478659ec5b2d0f1ad401dfb625f73e4d424b3ae35fc5fc0 + languageName: node + linkType: hard + +"url-parse@npm:^1.5.3": + version: 1.5.10 + resolution: "url-parse@npm:1.5.10" + dependencies: + querystringify: "npm:^2.1.1" + requires-port: "npm:^1.0.0" + checksum: bd5aa9389f896974beb851c112f63b466505a04b4807cea2e5a3b7092f6fbb75316f0491ea84e44f66fed55f1b440df5195d7e3a8203f64fcefa19d182f5be87 + languageName: node + linkType: hard + +"urlpattern-polyfill@npm:8.0.2": + version: 8.0.2 + resolution: "urlpattern-polyfill@npm:8.0.2" + checksum: 5388bbe8459dbd8861ee7cb97904be915dd863a9789c2191c528056f16adad7836ec22762ed002fed44e8995d0f98bdfb75a606466b77233e70d0f61b969aaf9 + languageName: node + linkType: hard + +"use@npm:^3.1.0": + version: 3.1.1 + resolution: "use@npm:3.1.1" + checksum: 75b48673ab80d5139c76922630d5a8a44e72ed58dbaf54dee1b88352d10e1c1c1fc332066c782d8ae9a56503b85d3dc67ff6d2ffbd9821120466d1280ebb6d6e + languageName: node + linkType: hard + +"utf-8-validate@npm:^5.0.2": + version: 5.0.10 + resolution: "utf-8-validate@npm:5.0.10" + dependencies: + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.3.0" + checksum: 23cd6adc29e6901aa37ff97ce4b81be9238d0023c5e217515b34792f3c3edb01470c3bd6b264096dd73d0b01a1690b57468de3a24167dd83004ff71c51cc025f + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 + languageName: node + linkType: hard + +"utils-merge@npm:1.0.1": + version: 1.0.1 + resolution: "utils-merge@npm:1.0.1" + checksum: 02ba649de1b7ca8854bfe20a82f1dfbdda3fb57a22ab4a8972a63a34553cf7aa51bc9081cf7e001b035b88186d23689d69e71b510e610a09a4c66f68aa95b672 + languageName: node + linkType: hard + +"uuid@npm:9.0.0": + version: 9.0.0 + resolution: "uuid@npm:9.0.0" + bin: + uuid: dist/bin/uuid + checksum: 8867e438990d1d33ac61093e2e4e3477a2148b844e4fa9e3c2360fa4399292429c4b6ec64537eb1659c97b2d10db349c673ad58b50e2824a11e0d3630de3c056 + languageName: node + linkType: hard + +"uuid@npm:^8.3.2": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: bcbb807a917d374a49f475fae2e87fdca7da5e5530820ef53f65ba1d12131bd81a92ecf259cc7ce317cbe0f289e7d79fdfebcef9bfa3087c8c8a2fa304c9be54 + languageName: node + linkType: hard + +"uuid@npm:^9.0.0": + version: 9.0.1 + resolution: "uuid@npm:9.0.1" + bin: + uuid: dist/bin/uuid + checksum: 1607dd32ac7fc22f2d8f77051e6a64845c9bce5cd3dd8aa0070c074ec73e666a1f63c7b4e0f4bf2bc8b9d59dc85a15e17807446d9d2b17c8485fbc2147b27f9b + languageName: node + linkType: hard + +"v8-compile-cache-lib@npm:^3.0.1": + version: 3.0.1 + resolution: "v8-compile-cache-lib@npm:3.0.1" + checksum: bdc36fb8095d3b41df197f5fb6f11e3a26adf4059df3213e3baa93810d8f0cc76f9a74aaefc18b73e91fe7e19154ed6f134eda6fded2e0f1c8d2272ed2d2d391 + languageName: node + linkType: hard + +"v8-to-istanbul@npm:^9.0.1": + version: 9.1.0 + resolution: "v8-to-istanbul@npm:9.1.0" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.12" + "@types/istanbul-lib-coverage": "npm:^2.0.1" + convert-source-map: "npm:^1.6.0" + checksum: 657ef7c52a514c1a0769663f96dd6f2cd11d2d3f6c8272d1035f4a543dca0b52c84b005beb7f0ca215eb98425c8bc4aa92a62826b1fc76abc1f7228d33ccbc60 + languageName: node + linkType: hard + +"validate-npm-package-license@npm:^3.0.1": + version: 3.0.4 + resolution: "validate-npm-package-license@npm:3.0.4" + dependencies: + spdx-correct: "npm:^3.0.0" + spdx-expression-parse: "npm:^3.0.0" + checksum: 7b91e455a8de9a0beaa9fe961e536b677da7f48c9a493edf4d4d4a87fd80a7a10267d438723364e432c2fcd00b5650b5378275cded362383ef570276e6312f4f + languageName: node + linkType: hard + +"validate-npm-package-name@npm:^4.0.0": + version: 4.0.0 + resolution: "validate-npm-package-name@npm:4.0.0" + dependencies: + builtins: "npm:^5.0.0" + checksum: d7f753c0aac0a2b8dd06752e7278d18165a21e28b5064d897a1b6f10350d857b339d6bd9e08dd140710433479940bec9ba151b619196780dc6e49dd8fbff6df8 + languageName: node + linkType: hard + +"validator@npm:^13.11.0": + version: 13.11.0 + resolution: "validator@npm:13.11.0" + checksum: 0107da3add5a4ebc6391dac103c55f6d8ed055bbcc29a4c9cbf89eacfc39ba102a5618c470bdc33c6487d30847771a892134a8c791f06ef0962dd4b7a60ae0f5 + languageName: node + linkType: hard + +"vary@npm:~1.1.2": + version: 1.1.2 + resolution: "vary@npm:1.1.2" + checksum: f15d588d79f3675135ba783c91a4083dcd290a2a5be9fcb6514220a1634e23df116847b1cc51f66bfb0644cf9353b2abb7815ae499bab06e46dd33c1a6bf1f4f + languageName: node + linkType: hard + +"version-selector-type@npm:^3.0.0": + version: 3.0.0 + resolution: "version-selector-type@npm:3.0.0" + dependencies: + semver: "npm:^7.3.2" + checksum: c0f2644e9cfe8ac61d10c0dd0e03d0f8d65aa1dff7e863ba6465ad8d7d84352a79cc6c39095e912d3dc8f40a4f514d3aa9624408934fd9881a5c3c29cad47217 + languageName: node + linkType: hard + +"vlq@npm:^0.2.1": + version: 0.2.3 + resolution: "vlq@npm:0.2.3" + checksum: d1557b404353ca75c7affaaf403d245a3273a7d1c6b3380ed7f04ae3f080e4658f41ac700d6f48acb3cd4875fe7bc7da4924b3572cd5584a5de83b35b1de5e12 + languageName: node + linkType: hard + +"vscode-languageserver-textdocument@npm:^1.0.8": + version: 1.0.8 + resolution: "vscode-languageserver-textdocument@npm:1.0.8" + checksum: 2981b4d0935c47d76fda9d80840b71de414990a2976840106a462277a26002c7abe2453ab872a00861803cf62ed6b340c6ecbc7a3549788309e28096b73a4d52 + languageName: node + linkType: hard + +"vscode-uri@npm:^3.0.7": + version: 3.0.7 + resolution: "vscode-uri@npm:3.0.7" + checksum: 67bc15bc9c9bd2d70dae8b27f2a3164281c6ee8f6484e6c5945a44d89871da93d52f2ba339ebc12ab0c10991d4576171b5d85e49a542454329c16faf977e4c59 + languageName: node + linkType: hard + +"w3c-xmlserializer@npm:^4.0.0": + version: 4.0.0 + resolution: "w3c-xmlserializer@npm:4.0.0" + dependencies: + xml-name-validator: "npm:^4.0.0" + checksum: 02cc66d6efc590bd630086cd88252444120f5feec5c4043932b0d0f74f8b060512f79dc77eb093a7ad04b4f02f39da79ce4af47ceb600f2bf9eacdc83204b1a8 + languageName: node + linkType: hard + +"wait-port@npm:1.0.4": + version: 1.0.4 + resolution: "wait-port@npm:1.0.4" + dependencies: + chalk: "npm:^4.1.2" + commander: "npm:^9.3.0" + debug: "npm:^4.3.4" + bin: + wait-port: bin/wait-port.js + checksum: 23eec9c492a29f7183cf14dc0e5d273f87f03c1f735d451845caf1c138c417d41ee4eb32ca6b07f86e22abae1249aa4769c3934426e912264aaac23f9c8dfd97 + languageName: node + linkType: hard + +"walker@npm:^1.0.8": + version: 1.0.8 + resolution: "walker@npm:1.0.8" + dependencies: + makeerror: "npm:1.0.12" + checksum: a17e037bccd3ca8a25a80cb850903facdfed0de4864bd8728f1782370715d679fa72e0a0f5da7c1c1379365159901e5935f35be531229da53bbfc0efdabdb48e + languageName: node + linkType: hard + +"wcwidth@npm:^1.0.1": + version: 1.0.1 + resolution: "wcwidth@npm:1.0.1" + dependencies: + defaults: "npm:^1.0.3" + checksum: 5b61ca583a95e2dd85d7078400190efd452e05751a64accb8c06ce4db65d7e0b0cde9917d705e826a2e05cc2548f61efde115ffa374c3e436d04be45c889e5b4 + languageName: node + linkType: hard + +"web-streams-polyfill@npm:4.0.0-beta.3": + version: 4.0.0-beta.3 + resolution: "web-streams-polyfill@npm:4.0.0-beta.3" + checksum: a9596779db2766990117ed3a158e0b0e9f69b887a6d6ba0779940259e95f99dc3922e534acc3e5a117b5f5905300f527d6fbf8a9f0957faf1d8e585ce3452e8e + languageName: node + linkType: hard + +"web-streams-polyfill@npm:^3.0.3": + version: 3.2.1 + resolution: "web-streams-polyfill@npm:3.2.1" + checksum: 70ed6b5708e14afa2ab699221ea197d7c68ec0c8274bbe0181aecc5ba636ca27cbd383d2049f0eb9d529e738f5c088825502b317f3df24d18a278e4cc9a10e8b + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: 5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db + languageName: node + linkType: hard + +"webidl-conversions@npm:^7.0.0": + version: 7.0.0 + resolution: "webidl-conversions@npm:7.0.0" + checksum: 228d8cb6d270c23b0720cb2d95c579202db3aaf8f633b4e9dd94ec2000a04e7e6e43b76a94509cdb30479bd00ae253ab2371a2da9f81446cc313f89a4213a2c4 + languageName: node + linkType: hard + +"websocket@npm:^1.0.34": + version: 1.0.34 + resolution: "websocket@npm:1.0.34" + dependencies: + bufferutil: "npm:^4.0.1" + debug: "npm:^2.2.0" + es5-ext: "npm:^0.10.50" + typedarray-to-buffer: "npm:^3.1.5" + utf-8-validate: "npm:^5.0.2" + yaeti: "npm:^0.0.6" + checksum: a7e17d24edec685fdf055940ff9c6a15e726df5bb5e537382390bd1ab978fc8c0d71cd2842bb628e361d823aafd43934cc56aa5b979d08e52461be7da8d01eee + languageName: node + linkType: hard + +"well-known-symbols@npm:^2.0.0": + version: 2.0.0 + resolution: "well-known-symbols@npm:2.0.0" + checksum: cb6c12e98877e8952ec28d13ae6f4fdb54ae1cb49b16a728720276dadd76c930e6cb0e174af3a4620054dd2752546f842540122920c6e31410208abd4958ee6b + languageName: node + linkType: hard + +"whatwg-encoding@npm:^2.0.0": + version: 2.0.0 + resolution: "whatwg-encoding@npm:2.0.0" + dependencies: + iconv-lite: "npm:0.6.3" + checksum: 91b90a49f312dc751496fd23a7e68981e62f33afe938b97281ad766235c4872fc4e66319f925c5e9001502b3040dd25a33b02a9c693b73a4cbbfdc4ad10c3e3e + languageName: node + linkType: hard + +"whatwg-mimetype@npm:^3.0.0": + version: 3.0.0 + resolution: "whatwg-mimetype@npm:3.0.0" + checksum: 323895a1cda29a5fb0b9ca82831d2c316309fede0365047c4c323073e3239067a304a09a1f4b123b9532641ab604203f33a1403b5ca6a62ef405bcd7a204080f + languageName: node + linkType: hard + +"whatwg-url@npm:^12.0.0, whatwg-url@npm:^12.0.1": + version: 12.0.1 + resolution: "whatwg-url@npm:12.0.1" + dependencies: + tr46: "npm:^4.1.1" + webidl-conversions: "npm:^7.0.0" + checksum: 99f506b2c996704fa0fc5c70d8e5e27dce15492db2921c99cf319a8d56cb61641f5c06089f63e1ab1983de9fd6a63c3c112a90cdb5fe352d7a846979b10df566 + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: "npm:~0.0.3" + webidl-conversions: "npm:^3.0.0" + checksum: 1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 449fa5c44ed120ccecfe18c433296a4978a7583bf2391c50abce13f76878d2476defde04d0f79db8165bdf432853c1f8389d0485ca6e8ebce3bbcded513d5e6a + languageName: node + linkType: hard + +"wide-align@npm:^1.1.2": + version: 1.1.5 + resolution: "wide-align@npm:1.1.5" + dependencies: + string-width: "npm:^1.0.2 || 2 || 3 || 4" + checksum: 1d9c2a3e36dfb09832f38e2e699c367ef190f96b82c71f809bc0822c306f5379df87bab47bed27ea99106d86447e50eb972d3c516c2f95782807a9d082fbea95 + languageName: node + linkType: hard + +"widest-line@npm:^4.0.1": + version: 4.0.1 + resolution: "widest-line@npm:4.0.1" + dependencies: + string-width: "npm:^5.0.1" + checksum: 7da9525ba45eaf3e4ed1a20f3dcb9b85bd9443962450694dae950f4bdd752839747bbc14713522b0b93080007de8e8af677a61a8c2114aa553ad52bde72d0f9c + languageName: node + linkType: hard + +"windows-release@npm:^5.0.1": + version: 5.1.1 + resolution: "windows-release@npm:5.1.1" + dependencies: + execa: "npm:^5.1.1" + checksum: 934fcd8620fc7cedec6939601c5735a9589d03fa0500874860e13797cc934d48771a97f677d5c162b4c8d72a594bbd522a69b6a1fcd0bc7ff8dfbbdbc1146ba5 + languageName: node + linkType: hard + +"winston-transport@npm:^4.5.0": + version: 4.6.0 + resolution: "winston-transport@npm:4.6.0" + dependencies: + logform: "npm:^2.3.2" + readable-stream: "npm:^3.6.0" + triple-beam: "npm:^1.3.0" + checksum: 43f7f03dfbaeb2a37ddcfadf5f03a6802c77fb8800a384e9aeecce8d233272ed8f18c50f377045a7e154fd6c951e31c9af1bbcd7a3db9246518af42b6f961cc1 + languageName: node + linkType: hard + +"winston@npm:^3.10.0": + version: 3.11.0 + resolution: "winston@npm:3.11.0" + dependencies: + "@colors/colors": "npm:^1.6.0" + "@dabh/diagnostics": "npm:^2.0.2" + async: "npm:^3.2.3" + is-stream: "npm:^2.0.0" + logform: "npm:^2.4.0" + one-time: "npm:^1.0.0" + readable-stream: "npm:^3.4.0" + safe-stable-stringify: "npm:^2.3.1" + stack-trace: "npm:0.0.x" + triple-beam: "npm:^1.3.0" + winston-transport: "npm:^4.5.0" + checksum: 7e1f8919cbdc62cfe46e6204d79a83e1364696ef61111483f3ecf204988922383fe74192c5bc9f89df9b47caf24c2d34f5420ef6f3b693f8d1286b46432e97be + languageName: node + linkType: hard + +"wordwrap@npm:^1.0.0": + version: 1.0.0 + resolution: "wordwrap@npm:1.0.0" + checksum: 7ed2e44f3c33c5c3e3771134d2b0aee4314c9e49c749e37f464bf69f2bcdf0cbf9419ca638098e2717cff4875c47f56a007532f6111c3319f557a2ca91278e92 + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.0.1, wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 + languageName: node + linkType: hard + +"write-file-atomic@npm:5.0.1": + version: 5.0.1 + resolution: "write-file-atomic@npm:5.0.1" + dependencies: + imurmurhash: "npm:^0.1.4" + signal-exit: "npm:^4.0.1" + checksum: e8c850a8e3e74eeadadb8ad23c9d9d63e4e792bd10f4836ed74189ef6e996763959f1249c5650e232f3c77c11169d239cbfc8342fc70f3fe401407d23810505d + languageName: node + linkType: hard + +"write-file-atomic@npm:^3.0.3": + version: 3.0.3 + resolution: "write-file-atomic@npm:3.0.3" + dependencies: + imurmurhash: "npm:^0.1.4" + is-typedarray: "npm:^1.0.0" + signal-exit: "npm:^3.0.2" + typedarray-to-buffer: "npm:^3.1.5" + checksum: 7fb67affd811c7a1221bed0c905c26e28f0041e138fb19ccf02db57a0ef93ea69220959af3906b920f9b0411d1914474cdd90b93a96e5cd9e8368d9777caac0e + languageName: node + linkType: hard + +"write-file-atomic@npm:^4.0.1, write-file-atomic@npm:^4.0.2": + version: 4.0.2 + resolution: "write-file-atomic@npm:4.0.2" + dependencies: + imurmurhash: "npm:^0.1.4" + signal-exit: "npm:^3.0.7" + checksum: a2c282c95ef5d8e1c27b335ae897b5eca00e85590d92a3fd69a437919b7b93ff36a69ea04145da55829d2164e724bc62202cdb5f4b208b425aba0807889375c7 + languageName: node + linkType: hard + +"ws@npm:7.4.6": + version: 7.4.6 + resolution: "ws@npm:7.4.6" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 4b44b59bbc0549c852fb2f0cdb48e40e122a1b6078aeed3d65557cbeb7d37dda7a4f0027afba2e6a7a695de17701226d02b23bd15c97b0837808c16345c62f8e + languageName: node + linkType: hard + +"ws@npm:8.14.2, ws@npm:^8.13.0": + version: 8.14.2 + resolution: "ws@npm:8.14.2" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 35b4c2da048b8015c797fd14bcb5a5766216ce65c8a5965616a5440ca7b6c3681ee3cbd0ea0c184a59975556e9d58f2002abf8485a14d11d3371770811050a16 + languageName: node + linkType: hard + +"xdg-basedir@npm:^5.0.1, xdg-basedir@npm:^5.1.0": + version: 5.1.0 + resolution: "xdg-basedir@npm:5.1.0" + checksum: c88efabc71ffd996ba9ad8923a8cc1c7c020a03e2c59f0ffa72e06be9e724ad2a0fccef488757bc6ed3d8849d753dd25082d1035d95cb179e79eae4d034d0b80 + languageName: node + linkType: hard + +"xml-name-validator@npm:^4.0.0": + version: 4.0.0 + resolution: "xml-name-validator@npm:4.0.0" + checksum: c1bfa219d64e56fee265b2bd31b2fcecefc063ee802da1e73bad1f21d7afd89b943c9e2c97af2942f60b1ad46f915a4c81e00039c7d398b53cf410e29d3c30bd + languageName: node + linkType: hard + +"xmlchars@npm:^2.2.0": + version: 2.2.0 + resolution: "xmlchars@npm:2.2.0" + checksum: b64b535861a6f310c5d9bfa10834cf49127c71922c297da9d4d1b45eeaae40bf9b4363275876088fbe2667e5db028d2cd4f8ee72eed9bede840a67d57dab7593 + languageName: node + linkType: hard + +"xorshift@npm:^1.1.1": + version: 1.2.0 + resolution: "xorshift@npm:1.2.0" + checksum: e805cdda3ca16ea48d3e1dbcb6f55f7c135bcf5219ae842bdea814486e4e6788cefc6703a04140b93be631370c1a7403c51ab0a6554ec68d66e84b601e34a722 + languageName: node + linkType: hard + +"xss@npm:^1.0.14": + version: 1.0.14 + resolution: "xss@npm:1.0.14" + dependencies: + commander: "npm:^2.20.3" + cssfilter: "npm:0.0.10" + bin: + xss: bin/xss + checksum: 0a9b4d71781c8418a0327e86e5991dffe8d8b58d465d391ea74e3fa102168d1aa70a438c85d6af90e76f457bbb6041350b700bff7ad10077c5d816512f10ee0d + languageName: node + linkType: hard + +"xtend@npm:^4.0.0, xtend@npm:~4.0.0, xtend@npm:~4.0.1": + version: 4.0.2 + resolution: "xtend@npm:4.0.2" + checksum: 366ae4783eec6100f8a02dff02ac907bf29f9a00b82ac0264b4d8b832ead18306797e283cf19de776538babfdcb2101375ec5646b59f08c52128ac4ab812ed0e + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249 + languageName: node + linkType: hard + +"yaeti@npm:^0.0.6": + version: 0.0.6 + resolution: "yaeti@npm:0.0.6" + checksum: 4e88702d8b34d7b61c1c4ec674422b835d453b8f8a6232be41e59fc98bc4d9ab6d5abd2da55bab75dfc07ae897fdc0c541f856ce3ab3b17de1630db6161aa3f6 + languageName: node + linkType: hard + +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: c66a5c46bc89af1625476f7f0f2ec3653c1a1791d2f9407cfb4c2ba812a1e1c9941416d71ba9719876530e3340a99925f697142989371b72d93b9ee628afd8c1 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + +"yaml@npm:2.3.1": + version: 2.3.1 + resolution: "yaml@npm:2.3.1" + checksum: ed4c21a907fb1cd60a25177612fa46d95064a144623d269199817908475fe85bef20fb17406e3bdc175351b6488056a6f84beb7836e8c262646546a0220188e3 + languageName: node + linkType: hard + +"yaml@npm:^2.1.3": + version: 2.3.4 + resolution: "yaml@npm:2.3.4" + checksum: cf03b68f8fef5e8516b0f0b54edaf2459f1648317fc6210391cf606d247e678b449382f4bd01f77392538429e306c7cba8ff46ff6b37cac4de9a76aff33bd9e1 + languageName: node + linkType: hard + +"yaml@npm:^2.2.2": + version: 2.3.2 + resolution: "yaml@npm:2.3.2" + checksum: c2aac464015f037911c5b819475e81e52119e5495e3d43fe7cb82b5a84d59d66a86049dc85d8e90658636c1c04dde177ae196818deaf76c1bda4d34209d5c087 + languageName: node + linkType: hard + +"yargs-parser@npm:^20.2.3": + version: 20.2.9 + resolution: "yargs-parser@npm:20.2.9" + checksum: 0685a8e58bbfb57fab6aefe03c6da904a59769bd803a722bb098bd5b0f29d274a1357762c7258fb487512811b8063fb5d2824a3415a0a4540598335b3b086c72 + languageName: node + linkType: hard + +"yargs-parser@npm:^21.0.1, yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2 + languageName: node + linkType: hard + +"yargs@npm:^17.0.0, yargs@npm:^17.3.1, yargs@npm:^17.6.0, yargs@npm:^17.7.2": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: "npm:^8.0.1" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.3" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^21.1.1" + checksum: ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05 + languageName: node + linkType: hard + +"yauzl@npm:^2.10.0": + version: 2.10.0 + resolution: "yauzl@npm:2.10.0" + dependencies: + buffer-crc32: "npm:~0.2.3" + fd-slicer: "npm:~1.1.0" + checksum: f265002af7541b9ec3589a27f5fb8f11cf348b53cc15e2751272e3c062cd73f3e715bc72d43257de71bbaecae446c3f1b14af7559e8ab0261625375541816422 + languageName: node + linkType: hard + +"yn@npm:3.1.1": + version: 3.1.1 + resolution: "yn@npm:3.1.1" + checksum: 0732468dd7622ed8a274f640f191f3eaf1f39d5349a1b72836df484998d7d9807fbea094e2f5486d6b0cd2414aad5775972df0e68f8604db89a239f0f4bf7443 + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f + languageName: node + linkType: hard + +"yocto-queue@npm:^1.0.0": + version: 1.0.0 + resolution: "yocto-queue@npm:1.0.0" + checksum: 856117aa15cf5103d2a2fb173f0ab4acb12b4b4d0ed3ab249fdbbf612e55d1cadfd27a6110940e24746fb0a78cf640b522cc8bca76f30a3b00b66e90cf82abe0 + languageName: node + linkType: hard + +"zip-stream@npm:^5.0.1": + version: 5.0.1 + resolution: "zip-stream@npm:5.0.1" + dependencies: + archiver-utils: "npm:^4.0.1" + compress-commons: "npm:^5.0.1" + readable-stream: "npm:^3.6.0" + checksum: 18b4ecf28824bd165709de5056d53cf611f07e0b7578508fa94c497f17164722dc19a0739ea8b2c1a296de7d3f70f7ad558e7a3a4929240fb2730afc5fd60679 + languageName: node + linkType: hard + +"zlib@npm:^1.0.5": + version: 1.0.5 + resolution: "zlib@npm:1.0.5" + checksum: 34bd33f4fdcda34f57a1ab628ceb423bdf8ef07290f46cd944eedd9a66458cc24ccf3c770da73dc0f8d28016607d861290ac5c53d49113177f7c321838df2913 + languageName: node + linkType: hard + +"zod-validation-error@npm:^1.5.0": + version: 1.5.0 + resolution: "zod-validation-error@npm:1.5.0" + peerDependencies: + zod: ^3.18.0 + checksum: b05d74900fa840e35abb66e0b0f90bd0175bcf8bf0bf9cea7de1383c9a35b75f870951a529cfc2045f2629f00b9ce1b30745b0e4689fd198743d6da91b321a58 + languageName: node + linkType: hard + +"zod@npm:3.22.4": + version: 3.22.4 + resolution: "zod@npm:3.22.4" + checksum: 7578ab283dac0eee66a0ad0fc4a7f28c43e6745aadb3a529f59a4b851aa10872b3890398b3160f257f4b6817b4ce643debdda4fb21a2c040adda7862cab0a587 + languageName: node + linkType: hard