From 9f6623fd3e93c14cc7e7397c6b55a17a7fef18d2 Mon Sep 17 00:00:00 2001 From: F-G Fernandez <26927750+frgfm@users.noreply.github.com> Date: Mon, 7 Aug 2023 01:59:03 -0700 Subject: [PATCH 01/19] ci: Adds CI --- .eslintrc.json | 18 +++++++ .github/ISSUE_TEMPLATE/bug_report.yml | 57 ++++++++++++++++++++++ .github/ISSUE_TEMPLATE/config.yml | 5 ++ .github/ISSUE_TEMPLATE/feature_request.yml | 34 +++++++++++++ .github/PULL_REQUEST_TEMPLATE.md | 20 ++++++++ .github/labeler.yml | 30 ++++++++++++ .github/release.yml | 24 +++++++++ .github/workflows/builds.yml | 24 +++++++++ .github/workflows/pull_requests.yml | 16 ++++++ .github/workflows/style.yml | 39 +++++++++++++++ 10 files changed, 267 insertions(+) create mode 100644 .eslintrc.json create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/labeler.yml create mode 100644 .github/release.yml create mode 100644 .github/workflows/builds.yml create mode 100644 .github/workflows/pull_requests.yml create mode 100644 .github/workflows/style.yml diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..5dfecab --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "root": true, + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module" + }, + "plugins": ["@typescript-eslint"], + "rules": { + "@typescript-eslint/naming-convention": "warn", + "@typescript-eslint/semi": "warn", + "curly": "warn", + "eqeqeq": "warn", + "no-throw-literal": "warn", + "semi": "off" + }, + "ignorePatterns": ["out", "dist", "**/*.d.ts"] +} diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..f645eeb --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,57 @@ +name: 🐛 Bug report +description: Create a report to help us improve the library +labels: "type: bug" +assignees: frgfm + +body: + - type: markdown + attributes: + value: > + #### Before reporting a bug, please check that the issue hasn't already been addressed in [the existing and past issues](https://github.com/quack-ai/companion/issues?q=is%3Aissue). + - type: textarea + attributes: + label: Bug description + description: | + A clear and concise description of what the bug is. + + Please explain the result you observed and the behavior you were expecting. + placeholder: | + A clear and concise description of what the bug is. + validations: + required: true + + - type: textarea + attributes: + label: Minimal steps to reproduce the bug + description: | + Sample steps to reproduce the problem. + + Please specify what we need to do to reproduce the behaviour. + placeholder: | + Sample step to reproduce the problem + validations: + required: true + - type: textarea + attributes: + label: Error traceback + description: | + The error message you received running the code snippet, with the full traceback. + + Please wrap your error message with ```` ```triple quotes blocks``` ```` for readability. + placeholder: | + ``` + The error message you got, with the full traceback. + ``` + validations: + required: true + - type: textarea + attributes: + label: Environment + description: | + Please press Ctrl/Cmd+Shift+G, then paste the content of your clipboard below. + validations: + required: true + - type: markdown + attributes: + value: > + Thanks for helping us improve the library! diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..4662662 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: true +contact_links: + - name: Usage questions + url: https://github.com/quack-ai/companion/discussions + about: Ask questions and discuss with other Quack community members diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..403d888 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,34 @@ +name: 🚀 Feature request +description: Submit a proposal/request for a new feature for the maintainer platform +labels: "type: new feature" +assignees: frgfm + +body: + - type: textarea + attributes: + label: 🚀 Feature + description: > + A clear and concise description of the feature proposal + validations: + required: true + - type: textarea + attributes: + label: Motivation & pitch + description: > + Please outline the motivation for the proposal. Is your feature request related to a specific problem? e.g., *"I'm working on X and would like Y to be possible"*. If this is related to another GitHub issue, please link here too. + validations: + required: true + - type: textarea + attributes: + label: Alternatives + description: > + A description of any alternative solutions or features you've considered, if any. + - type: textarea + attributes: + label: Additional context + description: > + Add any other context or screenshots about the feature request. + - type: markdown + attributes: + value: > + Thanks for contributing 🎉 diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..57b29b3 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,20 @@ +# What does this PR do? + + + + + +Closes # (issue) + +## Before submitting + +- [ ] Was this discussed/approved in a Github [issue](https://github.com/quack-ai/companion/issues?q=is%3Aissue) or a [discussion](https://github.com/quack-ai/companion/discussions)? Please add a link to it if that's the case. +- [ ] You have read the [contribution guidelines](https://github.com/quack-ai/companion/blob/main/CONTRIBUTING.md#submitting-a-pull-request) and followed them in this PR. +- [ ] Did you make sure to update the documentation with your changes? Here are the + [documentation guidelines](https://github.com/quack-ai/companion/tree/main/docs). +- [ ] Did you write any new necessary tests? diff --git a/.github/labeler.yml b/.github/labeler.yml new file mode 100644 index 0000000..3837a79 --- /dev/null +++ b/.github/labeler.yml @@ -0,0 +1,30 @@ +"ext: tests": + - src/tests/* + +"ext: scripts": + - scripts/* + +"module: app": + - src/app.py + +"topic: build": + - package.json + - yarn.lock + +"topic: ci": + - .github/* + +"topic: docker": + - docker-compose.yml + - docker-compose.test.yml + - Dockerfile + - traefik.yml + +"topic: documentation": + - README.md + - CONTRIBUTING.md + - CHANGELOG.md + - CODE_OF_CONDUCT.md + +"type: code quality": + - .eslintrc.json diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 0000000..8f7f47c --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,24 @@ +changelog: + exclude: + labels: + - ignore-for-release + categories: + - title: Breaking Changes 🛠 + labels: + - "type: breaking change" + # NEW FEATURES + - title: New Features 🚀 + labels: + - "type: new feature" + # BUG FIXES + - title: Bug Fixes 🐛 + labels: + - "type: bug" + # IMPROVEMENTS + - title: Improvements + labels: + - "type: enhancement" + # MISC + - title: Miscellaneous + labels: + - "type: misc" diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml new file mode 100644 index 0000000..297e219 --- /dev/null +++ b/.github/workflows/builds.yml @@ -0,0 +1,24 @@ +name: builds + +on: + push: + branches: main + pull_request: + branches: main + +jobs: + compile: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest] + node: [18] + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node }} + - name: Build the extension + run: | + yarn + yarn compile diff --git a/.github/workflows/pull_requests.yml b/.github/workflows/pull_requests.yml new file mode 100644 index 0000000..459fe82 --- /dev/null +++ b/.github/workflows/pull_requests.yml @@ -0,0 +1,16 @@ +name: pull_requests + +on: + pull_request: + branches: main + +jobs: + triage: + permissions: + contents: read + pull-requests: write + runs-on: ubuntu-latest + steps: + - uses: actions/labeler@v4 + with: + repo-token: "${{ secrets.GITHUB_TOKEN }}" diff --git a/.github/workflows/style.yml b/.github/workflows/style.yml new file mode 100644 index 0000000..e2e62ae --- /dev/null +++ b/.github/workflows/style.yml @@ -0,0 +1,39 @@ +name: style + +on: + push: + branches: main + pull_request: + branches: main + +jobs: + prettier: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest] + node: [18] + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node }} + - name: Run prettier + run: | + yarn add --dev --exact prettier + yarn format:check + eslint: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest] + node: [18] + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node }} + - name: Run eslint + run: | + yarn add --dev --exact eslint + yarn lint:check From 208b4acda880ffa9bf74d05423fd5a624611984f Mon Sep 17 00:00:00 2001 From: F-G Fernandez <26927750+frgfm@users.noreply.github.com> Date: Mon, 7 Aug 2023 02:04:43 -0700 Subject: [PATCH 02/19] chore: Adds VSCode config files --- .vscode/launch.json | 16 ++++++++++++++++ .vscodeignore | 12 ++++++++++++ .yarnrc | 1 + 3 files changed, 29 insertions(+) create mode 100644 .vscode/launch.json create mode 100644 .vscodeignore create mode 100644 .yarnrc diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..5fcd450 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,16 @@ +// A launch configuration that compiles the extension and then opens it inside a new window +// Use IntelliSense to learn about possible attributes. +// Hover to view descriptions of existing attributes. +// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "args": ["--extensionDevelopmentPath=${workspaceFolder}"], + "outFiles": ["${workspaceFolder}/dist/**/*.js"] + } + ] +} diff --git a/.vscodeignore b/.vscodeignore new file mode 100644 index 0000000..e301b4e --- /dev/null +++ b/.vscodeignore @@ -0,0 +1,12 @@ +.vscode/** +.vscode-test/** +node_modules/** +src/** +.gitignore +.yarnrc +webpack.config.js +vsc-extension-quickstart.md +**/tsconfig.json +**/.eslintrc.json +**/*.map +**/*.ts diff --git a/.yarnrc b/.yarnrc new file mode 100644 index 0000000..f757a6a --- /dev/null +++ b/.yarnrc @@ -0,0 +1 @@ +--ignore-engines true \ No newline at end of file From 9b4207633faa59cd68fd015c476c8e16c49e06f2 Mon Sep 17 00:00:00 2001 From: F-G Fernandez <26927750+frgfm@users.noreply.github.com> Date: Mon, 7 Aug 2023 02:05:09 -0700 Subject: [PATCH 03/19] docs: Updates README, & markdown files --- CHANGELOG.md | 9 ++++ CODE_OF_CONDUCT.md | 128 +++++++++++++++++++++++++++++++++++++++++++++ CONTRIBUTING.md | 85 ++++++++++++++++++++++++++++++ README.md | 73 +++++++++++++++++++++++++- 4 files changed, 293 insertions(+), 2 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..0a46b6c --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,9 @@ +# Change Log + +All notable changes to the "quack-companion" extension will be documented in this file. + +Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. + +## [Unreleased] + +- Initial release diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..6324b19 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,128 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +- Demonstrating empathy and kindness toward other people +- Being respectful of differing opinions, viewpoints, and experiences +- Giving and gracefully accepting constructive feedback +- Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +- Focusing on what is best not just for us as individuals, but for the + overall community + +Examples of unacceptable behavior include: + +- The use of sexualized language or imagery, and sexual attention or + advances of any kind +- Trolling, insulting or derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or email + address, without their explicit permission +- Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +support@quack-ai.com. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +https://www.contributor-covenant.org/faq. Translations are available at +https://www.contributor-covenant.org/translations. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..63a3607 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,85 @@ +# Contributing to companion + +Everything you need to know to contribute efficiently to the project! + +Whatever the way you wish to contribute to the project, please respect the [code of conduct](CODE_OF_CONDUCT.md). + +## Codebase structure + +- [`src/`](https://github.com/quack-ai/companion/blob/main/src/) - The actual platform codebase +- [`media/`](https://github.com/quack-ai/companion/blob/main/media/) - Binary assets +- [`styles/`](https://github.com/quack-ai/companion/blob/main/styles/) - Style sheet files +- [`.vscode/`](https://github.com/quack-ai/companion/blob/main/.vscode/) - VSCode specific config +- [`.github/`](https://github.com/quack-ai/companion/blob/main/.github/) - Configuration for GitHub workflow + +## Continuous Integration + +This project uses the following integrations to ensure proper codebase maintenance: + +- [Github Worklow](https://help.github.com/en/actions/configuring-and-managing-workflows/configuring-a-workflow) - run jobs for package build and coverage +- [Codacy](https://www.codacy.com/) - analyzes commits for code quality + +As a contributor, you will only have to ensure coverage of your code by adding appropriate unit testing of your code. + +## Feedback + +### Feature requests & bug report + +Whether you encountered a problem, or you have a feature suggestion, your input has value and can be used by contributors to reference it in their developments. For this purpose, we advise you to use Github [issues](https://github.com/quack-ai/companion/issues). + +First, check whether the topic wasn't already covered in an open / closed issue. If not, feel free to open a new one! When doing so, use issue templates whenever possible and provide enough information for other contributors to jump in. + +### Questions + +If you are wondering how to do something with Contribution API, or a more general question, you should consider checking out Github [discussions](https://github.com/quack-ai/companion/discussions). See it as a Q&A forum, or the project-specific StackOverflow! + +## Submitting a Pull Request + +### Preparing your local branch + +1 - Fork this [repository](https://github.com/quack-ai/companion) by clicking on the "Fork" button at the top right of the page. This will create a copy of the project under your GitHub account (cf. [Fork a repo](https://docs.github.com/en/get-started/quickstart/fork-a-repo)). + +2 - [Clone your fork](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) to your local disk and set the upstream to this repo + +```shell +git clone git@github.com:/companion.git +cd companion +git remote add upstream https://github.com/quack-ai/companion.git +``` + +3 - You should not work on the `main` branch, so let's create a new one + +```shell +git checkout -b a-short-description +``` + +### Developing your feature + +#### Commits + +- **Code**: make sure you provide docstrings & comments to your code. +- **Commit message**: please follow [Udacity guide](http://udacity.github.io/git-styleguide/) + +#### Code quality + +To run all quality checks together + +```shell +make quality +``` + +The previous command won't modify anything in your codebase. Some fixes (import ordering and code formatting) can be done automatically using the following command: + +```shell +make style +``` + +### Submit your modifications + +Push your last modifications to your remote branch + +```shell +git push -u origin a-short-description +``` + +Then [open a Pull Request](https://docs.github.com/en/github/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request) from your fork's branch. Follow the instructions of the Pull Request template and then click on "Create a pull request". diff --git a/README.md b/README.md index 40e5814..1f6e2fc 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,71 @@ -# companion -IDE extension for contribution assistance +# Quack AI Companion + +This extension guides you through your code contributions with Quack as a companion. The extension provides you with curated contribution guidelines from maintainers and assists you in meeting them. + +## Features + +Describe specific features of your extension including screenshots of your extension in action. Image paths are relative to this README file. + +For example if there is an image subfolder under your extension project workspace: + +\!\[feature X\]\(images/feature-x.png\) + +> Tip: Many popular extensions utilize animations. This is an excellent way to show off your extension! We recommend short, focused animations that are easy to follow. + +## Requirements + +If you have any requirements or dependencies, add a section describing those and how to install and configure them. + +## Extension Settings + +Include if your extension adds any VS Code settings through the `contributes.configuration` extension point. + +For example: + +This extension contributes the following settings: + +- `myExtension.enable`: Enable/disable this extension. +- `myExtension.thing`: Set to `blah` to do something. + +## Known Issues + +Calling out known issues can help limit users opening duplicate issues against your extension. + +## Release Notes + +Users appreciate release notes as you update your extension. + +### 1.0.0 + +Initial release of ... + +### 1.0.1 + +Fixed issue #. + +### 1.1.0 + +Added features X, Y, and Z. + +--- + +## Following extension guidelines + +Ensure that you've read through the extensions guidelines and follow the best practices for creating your extension. + +- [Extension Guidelines](https://code.visualstudio.com/api/references/extension-guidelines) + +## Working with Markdown + +You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts: + +- Split the editor (`Cmd+\` on macOS or `Ctrl+\` on Windows and Linux). +- Toggle preview (`Shift+Cmd+V` on macOS or `Shift+Ctrl+V` on Windows and Linux). +- Press `Ctrl+Space` (Windows, Linux, macOS) to see a list of Markdown snippets. + +## For more information + +- [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown) +- [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/) + +**Enjoy!** From 3f89b127459da337272fccfe306b4ecf81f465b1 Mon Sep 17 00:00:00 2001 From: F-G Fernandez <26927750+frgfm@users.noreply.github.com> Date: Mon, 7 Aug 2023 02:05:52 -0700 Subject: [PATCH 04/19] docs: Adds makefile --- Makefile | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..ebc83d0 --- /dev/null +++ b/Makefile @@ -0,0 +1,16 @@ +# Run it +run: + yarn watch + +# Compile it +build: + yarn compile + vsce package + +style: + yarn lint:fix + yarn format:fix + +quality: + yarn lint:check + yarn format:check From 1125a32edc5c67be9acd030b7d263ffb48d69053 Mon Sep 17 00:00:00 2001 From: F-G Fernandez <26927750+frgfm@users.noreply.github.com> Date: Mon, 7 Aug 2023 02:06:24 -0700 Subject: [PATCH 05/19] chore: Adds deps & build system --- package.json | 155 ++++ yarn.lock | 2445 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 2600 insertions(+) create mode 100644 package.json create mode 100644 yarn.lock diff --git a/package.json b/package.json new file mode 100644 index 0000000..b99882c --- /dev/null +++ b/package.json @@ -0,0 +1,155 @@ +{ + "name": "quack-companion", + "displayName": "Quack Companion", + "version": "0.0.1", + "license": "Apache-2.0", + "publisher": "quackai", + "description": "Your companion for code contributions", + "pricing": "Free", + "author": { + "name": "F-G Fernandez", + "url": "https://github.com/frgfm" + }, + "categories": [ + "Programming Languages", + "Machine Learning", + "Education" + ], + "keywords": [ + "ai", + "assistant", + "contribution", + "quackai", + "deep learning", + "llm", + "copilot", + "chatgpt", + "openai" + ], + "icon": "media/quack-logo.png", + "repository": { + "type": "git", + "url": "https://github.com/quack-ai/companion" + }, + "bugs": { + "url": "https://github.com/quack-ai/companion/issues", + "email": "support@quack-ai.com" + }, + "homepage": "https://quack-ai.com", + "type": "commonjs", + "engines": { + "vscode": "^1.74.0" + }, + "extensionKind": [ + "ui", + "workspace" + ], + "activationEvents": [], + "main": "./dist/extension.js", + "contributes": { + "viewsContainers": { + "activitybar": [ + { + "id": "quackai-companion", + "title": "Quack Companion", + "icon": "media/quack-white.svg" + } + ] + }, + "views": { + "quackai-companion": [ + { + "type": "webview", + "id": "quackai-companion.scopeView", + "name": "Contribution scoping", + "icon": "media/quack-white.svg", + "contextualTitle": "Contribution scoping" + }, + { + "type": "webview", + "id": "quackai-companion.guidelineView", + "name": "Guidelines", + "icon": "media/quack-white.svg", + "contextualTitle": "Guidelines" + } + ] + }, + "commands": [ + { + "command": "quackai-companion.fetchGuidelines", + "category": "Quack AI", + "title": "Fetch contribution guidelines" + }, + { + "command": "quackai-companion.findStarterIssues", + "category": "Quack AI", + "title": "Find starter issues" + }, + { + "command": "quackai-companion.defineGoal", + "category": "Quack AI", + "title": "Define your contribution goal" + }, + { + "command": "quackai-companion.debugInfo", + "category": "Quack AI", + "title": "Get debug information" + } + ], + "keybindings": [ + { + "command": "quackai-companion.fetchGuidelines", + "mac": "cmd+shift+g", + "key": "ctrl+shift+g" + }, + { + "command": "quackai-companion.debugInfo", + "mac": "cmd+shift+d", + "key": "ctrl+shift+d" + } + ] + }, + "scripts": { + "vscode:prepublish": "yarn run compile", + "compile": "rollup -c && webpack --mode production", + "watch": "concurrently \"rollup -c -w\" \"webpack --mode development --watch\"", + "lint:check": "eslint src --ext ts", + "lint:fix": "eslint --fix src --ext ts", + "format:check": "npx prettier . --check", + "format:fix": "npx prettier . --write" + }, + "devDependencies": { + "@rollup/plugin-commonjs": "^25.0.3", + "@rollup/plugin-node-resolve": "^15.1.0", + "@rollup/plugin-typescript": "^11.1.2", + "@tsconfig/svelte": "^5.0.0", + "@types/glob": "^8.1.0", + "@types/node": "20.2.5", + "@types/uuid": "^9.0.2", + "@types/vscode": "^1.80.0", + "@typescript-eslint/eslint-plugin": "^5.59.8", + "@typescript-eslint/parser": "^5.59.8", + "concurrently": "^8.2.0", + "eslint": "^8.41.0", + "glob": "^8.1.0", + "prettier": "^3.0.1", + "rollup": "^2.3.4", + "rollup-plugin-polyfill-node": "^0.12.0", + "rollup-plugin-svelte": "^6.0.0", + "rollup-plugin-terser": "^7.0.2", + "svelte": "^4.1.2", + "svelte-check": "^3.4.6", + "svelte-preprocess": "^5.0.4", + "ts-loader": "^9.4.3", + "webpack": "^5.85.0", + "webpack-cli": "^5.1.1" + }, + "dependencies": { + "axios": "^1.4.0", + "clipboardy": "^3.0.0", + "dotenv": "^16.3.1", + "posthog-node": "^3.1.1", + "typescript": "^5.1.6", + "uuid": "^9.0.0" + } +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..6fc0315 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2445 @@ +# 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== + +"@ampproject/remapping@^2.2.1": + 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.10.4": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" + integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== + dependencies: + "@babel/highlight" "^7.22.5" + +"@babel/helper-validator-identifier@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" + integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== + +"@babel/highlight@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" + integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== + dependencies: + "@babel/helper-validator-identifier" "^7.22.5" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/runtime@^7.21.0": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.6.tgz#57d64b9ae3cff1d67eb067ae117dac087f5bd438" + integrity sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ== + dependencies: + regenerator-runtime "^0.13.11" + +"@discoveryjs/json-ext@^0.5.0": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@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.6.2" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8" + integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw== + +"@eslint/eslintrc@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.1.tgz#18d635e24ad35f7276e8a49d135c7d3ca6a46f93" + integrity sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA== + 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.46.0": + version "8.46.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.46.0.tgz#3f7802972e8b6fe3f88ed1aabc74ec596c456db6" + integrity sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA== + +"@humanwhocodes/config-array@^0.11.10": + version "0.11.10" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" + integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== + 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== + +"@jridgewell/gen-mapping@^0.3.0": + 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.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.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/source-map@^0.3.3": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" + integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@1.4.14": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": + 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.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.18" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@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" + +"@rollup/plugin-commonjs@^25.0.3": + version "25.0.3" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.3.tgz#eb5217ebae43d63a172b516655be270ed258bdcc" + integrity sha512-uBdtWr/H3BVcgm97MUdq2oJmqBR23ny1hOrWe2PKo9FTbjsGqg32jfasJUKYAI5ouqacjRnj65mBB/S79F+GQA== + dependencies: + "@rollup/pluginutils" "^5.0.1" + commondir "^1.0.1" + estree-walker "^2.0.2" + glob "^8.0.3" + is-reference "1.2.1" + magic-string "^0.27.0" + +"@rollup/plugin-inject@^5.0.1": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@rollup/plugin-inject/-/plugin-inject-5.0.3.tgz#0783711efd93a9547d52971db73b2fb6140a67b1" + integrity sha512-411QlbL+z2yXpRWFXSmw/teQRMkXcAAC8aYTemc15gwJRpvEVDQwoe+N/HTFD8RFG8+88Bme9DK2V9CVm7hJdA== + dependencies: + "@rollup/pluginutils" "^5.0.1" + estree-walker "^2.0.2" + magic-string "^0.27.0" + +"@rollup/plugin-node-resolve@^15.1.0": + version "15.1.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz#9ffcd8e8c457080dba89bb9fcb583a6778dc757e" + integrity sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA== + dependencies: + "@rollup/pluginutils" "^5.0.1" + "@types/resolve" "1.20.2" + deepmerge "^4.2.2" + is-builtin-module "^3.2.1" + is-module "^1.0.0" + resolve "^1.22.1" + +"@rollup/plugin-typescript@^11.1.2": + version "11.1.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-11.1.2.tgz#09eb5690a650bb0334bf84125bce9abd296442e4" + integrity sha512-0ghSOCMcA7fl1JM+0gYRf+Q/HWyg+zg7/gDSc+fRLmlJWcW5K1I+CLRzaRhXf4Y3DRyPnnDo4M2ktw+a6JcDEg== + dependencies: + "@rollup/pluginutils" "^5.0.1" + resolve "^1.22.1" + +"@rollup/pluginutils@^5.0.1": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz#012b8f53c71e4f6f9cb317e311df1404f56e7a33" + integrity sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" + +"@tsconfig/svelte@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@tsconfig/svelte/-/svelte-5.0.0.tgz#0f99038516336a43c953e7b3f8a28dc511a51d9b" + integrity sha512-iu5BqFjU0+OcLTNQp7fHe6Bf6zdNeJ9IZjLZMqWLuGzVFm/xx+lm//Tf6koPyRmxo55/Snm6RRQ990n89cRKFw== + +"@types/eslint-scope@^3.7.3": + version "3.7.4" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" + integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.44.1" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.1.tgz#d1811559bb6bcd1a76009e3f7883034b78a0415e" + integrity sha512-XpNDc4Z5Tb4x+SW1MriMVeIsMoONHCkWFMkR/aPJbzEsxqHy+4Glu/BqTdPrApfDeMaXbtNh6bseNgl5KaWrSg== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" + integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== + +"@types/glob@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-8.1.0.tgz#b63e70155391b0584dce44e7ea25190bbc38f2fc" + integrity sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w== + dependencies: + "@types/minimatch" "^5.1.2" + "@types/node" "*" + +"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.12" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" + integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== + +"@types/minimatch@^5.1.2": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== + +"@types/node@*": + version "20.4.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.6.tgz#b66b66c9bb5d49b199f03399e341c9d6036e9e88" + integrity sha512-q0RkvNgMweWWIvSMDiXhflGUKMdIxBo2M2tYM/0kEGDueQByFzK4KZAgu5YHGFNxziTlppNpTIBcqHQAxlfHdA== + +"@types/node@20.2.5": + version "20.2.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.5.tgz#26d295f3570323b2837d322180dfbf1ba156fefb" + integrity sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ== + +"@types/pug@^2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/pug/-/pug-2.0.6.tgz#f830323c88172e66826d0bde413498b61054b5a6" + integrity sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg== + +"@types/resolve@1.20.2": + version "1.20.2" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" + integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== + +"@types/semver@^7.3.12": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" + integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== + +"@types/uuid@^9.0.2": + version "9.0.2" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.2.tgz#ede1d1b1e451548d44919dc226253e32a6952c4b" + integrity sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ== + +"@types/vscode@^1.80.0": + version "1.80.0" + resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.80.0.tgz#e004dd6cde74dafdb7fab64a6e1754bf8165b981" + integrity sha512-qK/CmOdS2o7ry3k6YqU4zD3R2AYlJfbwBoSbKpBoP+GpXNE+0NEgJOli4n0bm0diK5kfBnchgCEj4igQz/44Hg== + +"@typescript-eslint/eslint-plugin@^5.59.8": + 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.8": + 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" + +"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" + integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + +"@webassemblyjs/floating-point-hex-parser@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" + integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== + +"@webassemblyjs/helper-api-error@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" + integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== + +"@webassemblyjs/helper-buffer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" + integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== + +"@webassemblyjs/helper-numbers@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" + integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" + integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== + +"@webassemblyjs/helper-wasm-section@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" + integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + +"@webassemblyjs/ieee754@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" + integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" + integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" + integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== + +"@webassemblyjs/wasm-edit@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" + integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-opt" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + "@webassemblyjs/wast-printer" "1.11.6" + +"@webassemblyjs/wasm-gen@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" + integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wasm-opt@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" + integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + +"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" + integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wast-printer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" + integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@xtuc/long" "4.2.2" + +"@webpack-cli/configtest@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646" + integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== + +"@webpack-cli/info@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd" + integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== + +"@webpack-cli/serve@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" + integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +acorn-import-assertions@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" + integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== + +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@^8.7.1, acorn@^8.8.2, 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== + +ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.12.4, ajv@^6.12.5: + 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" + +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-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" + +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" + +arch@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" + integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== + +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== + +aria-query@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== + dependencies: + dequal "^2.0.3" + +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== + +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== + +axios@^0.27.0: + version "0.27.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" + integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== + dependencies: + follow-redirects "^1.14.9" + form-data "^4.0.0" + +axios@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" + integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +axobject-query@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" + integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== + dependencies: + dequal "^2.0.3" + +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== + +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== + +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@^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" + +browserslist@^4.14.5: + 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" + +buffer-crc32@^0.2.5: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + +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== + +builtin-modules@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +caniuse-lite@^1.0.30001517: + version "1.0.30001518" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001518.tgz#b3ca93904cb4699c01218246c4d77a71dbe97150" + integrity sha512-rup09/e3I0BKjncL+FesTayKtPrdwKhUufQFd3riFw1hHg8JmIFoInYfB102cFcY/pPgGmdyl/iy+jgiDi2vdA== + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.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" + +chokidar@^3.4.1: + 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" + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +clipboardy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-3.0.0.tgz#f3876247404d334c9ed01b6f269c11d09a5e3092" + integrity sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg== + dependencies: + arch "^2.2.0" + execa "^5.1.1" + is-wsl "^2.2.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" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +code-red@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/code-red/-/code-red-1.0.3.tgz#bbd3b0a27dc53c9af13f6756120a9dbcdd68a5f2" + integrity sha512-kVwJELqiILQyG5aeuyKFbdsI1fmQy1Cmf7dQ8eGmVuJoaRVdwey7WaMknr2ZFeVSYSKT0rExsa8EGw0aoI/1QQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.14" + "@types/estree" "^1.0.0" + acorn "^8.8.2" + estree-walker "^3.0.3" + periscopic "^3.1.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@^2.0.14: + 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@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + +commander@^2.20.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== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +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== + +concurrently@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-8.2.0.tgz#cdc9f621a4d913366600355d68254df2c5e782f3" + integrity sha512-nnLMxO2LU492mTUj9qX/az/lESonSZu81UznYDoXtz1IQf996ixVqPAgHXwvHiHCAef/7S8HIK+fTFK7Ifk8YA== + dependencies: + chalk "^4.1.2" + date-fns "^2.30.0" + lodash "^4.17.21" + rxjs "^7.8.1" + shell-quote "^1.8.1" + spawn-command "0.0.2" + supports-color "^8.1.1" + tree-kill "^1.2.2" + yargs "^17.7.2" + +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" + +css-tree@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" + integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== + dependencies: + mdn-data "2.0.30" + source-map-js "^1.0.1" + +date-fns@^2.30.0: + version "2.30.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== + dependencies: + "@babel/runtime" "^7.21.0" + +debug@^4.1.1, debug@^4.3.2, 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" + +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== + +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== + +dequal@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + +detect-indent@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" + integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== + +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" + +dotenv@^16.3.1: + version "16.3.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" + integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== + +electron-to-chromium@^1.4.477: + version "1.4.481" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.481.tgz#0a6558c4acc171f7ab8a7e1a1c4cd2c6aa14523c" + integrity sha512-25DitMKGaWUPjv3kCt2H3UqgMhmdN+ufG+PoSjnQtheR64Dvo75RbojLPzUmnwrEuLEzR5YrbTzOUq9DtnTUUw== + +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== + +enhanced-resolve@^5.0.0, enhanced-resolve@^5.15.0: + version "5.15.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" + integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +envinfo@^7.7.3: + version "7.10.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.10.0.tgz#55146e3909cc5fe63c22da63fb15b05aeac35b13" + integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw== + +es-module-lexer@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.0.tgz#6be9c9e0b4543a60cd166ff6f8b4e9dae0b0c16f" + integrity sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA== + +es6-promise@^3.1.2: + version "3.3.1" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" + integrity sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@^1.0.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@^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== + +eslint-scope@5.1.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.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz#8c2095440eca8c933bedcadf16fefa44dbe9ba5f" + integrity sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw== + +eslint@^8.41.0: + version "8.46.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.46.0.tgz#a06a0ff6974e53e643acc42d1dcf2e7f797b3552" + integrity sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.1" + "@eslint/js" "^8.46.0" + "@humanwhocodes/config-array" "^0.11.10" + "@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.2" + 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" + +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== + +estree-walker@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" + integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== + +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +estree-walker@^3.0.0, estree-walker@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + dependencies: + "@types/estree" "^1.0.0" + +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== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^5.1.1: + 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" + +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-glob@^3.2.7, fast-glob@^3.2.9: + 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.0.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== + +fastest-levenshtein@^1.0.12: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +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" + +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" + +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" + +find-up@^4.0.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" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +follow-redirects@^1.14.9, 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== + +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" + +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.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +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-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +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-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^7.1.3: + 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.3, 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" + +globals@^13.19.0: + version "13.20.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== + 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.2, graceful-fs@^4.1.3, graceful-fs@^4.2.4, 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== + +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@^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" + +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== + +ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +import-fresh@^3.2.1: + 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" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +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: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +interpret@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" + integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== + +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-builtin-module@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" + integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== + dependencies: + builtin-modules "^3.3.0" + +is-core-module@^2.11.0: + version "2.12.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== + dependencies: + has "^1.0.3" + +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-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-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-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== + +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-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-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-reference@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== + dependencies: + "@types/estree" "*" + +is-reference@^3.0.0, is-reference@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-3.0.1.tgz#d400f4260f7e55733955e60d361d827eb4d3b831" + integrity sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w== + dependencies: + "@types/estree" "*" + +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-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" + +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@^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== + +jest-worker@^26.2.1: + 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-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +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@^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" + +json-parse-even-better-errors@^2.3.1: + 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-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== + +kind-of@^6.0.2: + 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== + +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" + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +locate-character@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-character/-/locate-character-3.0.0.tgz#0305c5b8744f61028ef5d01f444009e00779f974" + integrity sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA== + +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" + +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@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +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" + +magic-string@^0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" + integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.13" + +magic-string@^0.30.0: + version "0.30.2" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.2.tgz#dcf04aad3d0d1314bc743d076c50feb29b3c7aca" + integrity sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + +mdn-data@2.0.30: + version "2.0.30" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" + integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== + +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== + +micromatch@^4.0.0, micromatch@^4.0.4: + 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" + +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.27: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +minimatch@^3.0.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@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mkdirp@^0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mri@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" + integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== + +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== + +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== + +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== + +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== + +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-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" + +once@^1.3.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.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" + +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-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-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-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== + +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" + +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-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@^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-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-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== + +periscopic@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/periscopic/-/periscopic-3.1.0.tgz#7e9037bf51c5855bd33b48928828db4afa79d97a" + integrity sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^3.0.0" + is-reference "^3.0.0" + +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.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +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" + +posthog-node@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/posthog-node/-/posthog-node-3.1.1.tgz#f92c44a871552c9bfb98bf4cc8fd326d36af6cbd" + integrity sha512-OUSYcnLHbzvY/dxNsbUGoYuTZz5XNx48BkfiCkOIJZMFvot5VPQ0KWEjX+kzYxEwHeXbjW9plqsOVcYCYfidgg== + dependencies: + axios "^0.27.0" + rusha "^0.8.14" + +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@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.1.tgz#65271fc9320ce4913c57747a70ce635b30beaa40" + integrity sha512-fcOWSnnpCrovBsmFZIGIy9UqK2FaI7Hqax+DIO0A9UxeVoY4iweyaFjS5TavZN97Hfehph0nhsZnjlVKzEQSrQ== + +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== + +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +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== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.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" + +rechoir@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" + integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== + dependencies: + resolve "^1.20.0" + +regenerator-runtime@^0.13.11: + 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== + +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-relative@^0.8.7: + version "0.8.7" + resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de" + integrity sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg== + +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@^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-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@^1.20.0, resolve@^1.22.1: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +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== + +rimraf@^2.5.2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +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" + +rollup-plugin-polyfill-node@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.12.0.tgz#33d421ddb7fcb69c234461e508ca6d2db6193f1d" + integrity sha512-PWEVfDxLEKt8JX1nZ0NkUAgXpkZMTb85rO/Ru9AQ69wYW8VUCfDgP4CGRXXWYni5wDF0vIeR1UoF3Jmw/Lt3Ug== + dependencies: + "@rollup/plugin-inject" "^5.0.1" + +rollup-plugin-svelte@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-svelte/-/rollup-plugin-svelte-6.1.1.tgz#66362cf0500fb7a848283ebcf19d289a60ef0871" + integrity sha512-ijnm0pH1ScrY4uxwaNXBpNVejVzpL2769hIEbAlnqNUWZrffLspu5/k9/l/Wsj3NrEHLQ6wCKGagVJonyfN7ow== + dependencies: + require-relative "^0.8.7" + rollup-pluginutils "^2.8.2" + sourcemap-codec "^1.4.8" + +rollup-plugin-terser@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" + integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== + dependencies: + "@babel/code-frame" "^7.10.4" + jest-worker "^26.2.1" + serialize-javascript "^4.0.0" + terser "^5.0.0" + +rollup-pluginutils@^2.8.2: + version "2.8.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== + dependencies: + estree-walker "^0.6.1" + +rollup@^2.3.4: + version "2.79.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" + integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== + optionalDependencies: + fsevents "~2.3.2" + +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" + +rusha@^0.8.14: + version "0.8.14" + resolved "https://registry.yarnpkg.com/rusha/-/rusha-0.8.14.tgz#a977d0de9428406138b7bb90d3de5dcd024e2f68" + integrity sha512-cLgakCUf6PedEu15t8kbsjnwIFFR2D4RfL+W3iWFJ4iac7z4B0ZI8fxy4R3J956kAI68HclCFGL8MPoUVC3qVA== + +rxjs@^7.8.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + +sade@^1.7.4: + version "1.8.1" + resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" + integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== + dependencies: + mri "^1.1.0" + +safe-buffer@^5.1.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== + +sander@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/sander/-/sander-0.5.1.tgz#741e245e231f07cafb6fdf0f133adfa216a502ad" + integrity sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA== + dependencies: + es6-promise "^3.1.2" + graceful-fs "^4.1.3" + mkdirp "^0.5.1" + rimraf "^2.5.2" + +schema-utils@^3.1.1, schema-utils@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +semver@^7.3.4, semver@^7.3.7: + 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" + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +serialize-javascript@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" + integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== + dependencies: + randombytes "^2.1.0" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +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@^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== + +shell-quote@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== + +signal-exit@^3.0.3: + 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== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +sorcery@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/sorcery/-/sorcery-0.11.0.tgz#310c80ee993433854bb55bb9aa4003acd147fca8" + integrity sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.14" + buffer-crc32 "^0.2.5" + minimist "^1.2.0" + sander "^0.5.0" + +source-map-js@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map-support@~0.5.20: + 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== + +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +spawn-command@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e" + integrity sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ== + +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" + +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-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-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== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.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-color@^8.0.0, supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-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== + +svelte-check@^3.4.6: + version "3.4.6" + resolved "https://registry.yarnpkg.com/svelte-check/-/svelte-check-3.4.6.tgz#d43de724ad89d1198c96770e9d23965d3379ad44" + integrity sha512-OBlY8866Zh1zHQTkBMPS6psPi7o2umTUyj6JWm4SacnIHXpWFm658pG32m3dKvKFL49V4ntAkfFHKo4ztH07og== + dependencies: + "@jridgewell/trace-mapping" "^0.3.17" + chokidar "^3.4.1" + fast-glob "^3.2.7" + import-fresh "^3.2.1" + picocolors "^1.0.0" + sade "^1.7.4" + svelte-preprocess "^5.0.4" + typescript "^5.0.3" + +svelte-preprocess@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/svelte-preprocess/-/svelte-preprocess-5.0.4.tgz#2123898e079a074f7f4ef1799e10e037f5bcc55b" + integrity sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw== + dependencies: + "@types/pug" "^2.0.6" + detect-indent "^6.1.0" + magic-string "^0.27.0" + sorcery "^0.11.0" + strip-indent "^3.0.0" + +svelte@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/svelte/-/svelte-4.1.2.tgz#fc022854b029b04491e086e0eda7312b4b233eeb" + integrity sha512-/evA8U6CgOHe5ZD1C1W3va9iJG7mWflcCdghBORJaAhD2JzrVERJty/2gl0pIPrJYBGZwZycH6onYf+64XXF9g== + dependencies: + "@ampproject/remapping" "^2.2.1" + "@jridgewell/sourcemap-codec" "^1.4.15" + "@jridgewell/trace-mapping" "^0.3.18" + acorn "^8.9.0" + aria-query "^5.3.0" + axobject-query "^3.2.1" + code-red "^1.0.3" + css-tree "^2.3.1" + estree-walker "^3.0.3" + is-reference "^3.0.1" + locate-character "^3.0.0" + magic-string "^0.30.0" + periscopic "^3.1.0" + +tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +terser-webpack-plugin@^5.3.7: + version "5.3.9" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" + integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.17" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.1" + terser "^5.16.8" + +terser@^5.0.0, terser@^5.16.8: + version "5.19.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.2.tgz#bdb8017a9a4a8de4663a7983f45c506534f9234e" + integrity sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + +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== + +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" + +tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + +ts-loader@^9.4.3: + version "9.4.4" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.4.4.tgz#6ceaf4d58dcc6979f84125335904920884b7cee4" + integrity sha512-MLukxDHBl8OJ5Dk3y69IsKVFRA/6MwzEqBgh+OXMPB/OD01KQuWPFd1WAQP8a5PeSCAxfnkhiuWqfmFJzJQt9w== + dependencies: + chalk "^4.1.0" + enhanced-resolve "^5.0.0" + micromatch "^4.0.0" + semver "^7.3.4" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.1.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410" + integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig== + +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" + +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-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== + +typescript@^5.0.3, typescript@^5.1.6: + version "5.1.6" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" + integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== + +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" + +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" + +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +webpack-cli@^5.1.1: + version "5.1.4" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b" + integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^2.1.1" + "@webpack-cli/info" "^2.0.2" + "@webpack-cli/serve" "^2.0.5" + colorette "^2.0.14" + commander "^10.0.1" + cross-spawn "^7.0.3" + envinfo "^7.7.3" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^3.1.1" + rechoir "^0.8.0" + webpack-merge "^5.7.3" + +webpack-merge@^5.7.3: + version "5.9.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826" + integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@^5.85.0: + version "5.88.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.2.tgz#f62b4b842f1c6ff580f3fcb2ed4f0b579f4c210e" + integrity sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^1.0.0" + "@webassemblyjs/ast" "^1.11.5" + "@webassemblyjs/wasm-edit" "^1.11.5" + "@webassemblyjs/wasm-parser" "^1.11.5" + acorn "^8.7.1" + acorn-import-assertions "^1.9.0" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.15.0" + es-module-lexer "^1.2.1" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.2.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.3.7" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +which@^2.0.1: + 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" + +wildcard@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== + +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" + +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== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +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@^17.7.2: + 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" + +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== From a9196dc3b7ffd74225226a1df213bbe6ee6583d1 Mon Sep 17 00:00:00 2001 From: F-G Fernandez <26927750+frgfm@users.noreply.github.com> Date: Mon, 7 Aug 2023 02:06:41 -0700 Subject: [PATCH 06/19] feat: Adds extension files --- media/quack-logo.png | Bin 0 -> 68329 bytes media/quack-white.svg | 6 + rollup.config.js | 68 ++++++++ src/extension.ts | 227 +++++++++++++++++++++++++++ src/quack.ts | 39 +++++ src/telemetry.ts | 22 +++ src/util/getNonce.ts | 9 ++ src/util/github.ts | 160 +++++++++++++++++++ src/util/session.ts | 52 ++++++ src/webviews/GuidelineProvider.ts | 71 +++++++++ src/webviews/ScopeProvider.ts | 149 ++++++++++++++++++ styles/reset.css | 30 ++++ styles/vscode.css | 91 +++++++++++ tsconfig.json | 16 ++ webpack.config.js | 48 ++++++ webviews/components/Guideline.svelte | 93 +++++++++++ webviews/components/Scope.svelte | 52 ++++++ webviews/globals.d.ts | 7 + webviews/pages/guideline.ts | 7 + webviews/pages/scope.ts | 7 + webviews/tsconfig.json | 6 + 21 files changed, 1160 insertions(+) create mode 100644 media/quack-logo.png create mode 100644 media/quack-white.svg create mode 100644 rollup.config.js create mode 100644 src/extension.ts create mode 100644 src/quack.ts create mode 100644 src/telemetry.ts create mode 100644 src/util/getNonce.ts create mode 100644 src/util/github.ts create mode 100644 src/util/session.ts create mode 100644 src/webviews/GuidelineProvider.ts create mode 100644 src/webviews/ScopeProvider.ts create mode 100644 styles/reset.css create mode 100644 styles/vscode.css create mode 100644 tsconfig.json create mode 100644 webpack.config.js create mode 100644 webviews/components/Guideline.svelte create mode 100644 webviews/components/Scope.svelte create mode 100644 webviews/globals.d.ts create mode 100644 webviews/pages/guideline.ts create mode 100644 webviews/pages/scope.ts create mode 100644 webviews/tsconfig.json diff --git a/media/quack-logo.png b/media/quack-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ceb3cf24e9939d178b0445b0b5a17e6eeee29951 GIT binary patch literal 68329 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 literal 0 HcmV?d00001 diff --git a/media/quack-white.svg b/media/quack-white.svg new file mode 100644 index 0000000..658ca3b --- /dev/null +++ b/media/quack-white.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 0000000..46bb3fc --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,68 @@ +import svelte from "rollup-plugin-svelte"; +import resolve from "@rollup/plugin-node-resolve"; +import commonjs from "@rollup/plugin-commonjs"; +import { terser } from "rollup-plugin-terser"; +import sveltePreprocess from "svelte-preprocess"; +import typescript from "@rollup/plugin-typescript"; +import path from "path"; +import fs from "fs"; + +const production = !process.env.ROLLUP_WATCH; + +export default fs + .readdirSync(path.join(__dirname, "webviews", "pages")) + .map((input) => { + const name = input.split(".")[0]; + return { + input: "webviews/pages/" + input, + output: { + sourcemap: true, + format: "iife", + name: "app", + file: "out/compiled/" + name + ".js", + }, + plugins: [ + svelte({ + // enable run-time checks when not in production + dev: !production, + // we'll extract any component CSS out into + // a separate file - better for performance + css: (css) => { + css.write(name + ".css"); + }, + preprocess: sveltePreprocess(), + }), + + // If you have external dependencies installed from + // npm, you'll most likely need these plugins. In + // some cases you'll need additional configuration - + // consult the documentation for details: + // https://github.com/rollup/plugins/tree/master/packages/commonjs + resolve({ + browser: true, + dedupe: ["svelte"], + }), + commonjs(), + typescript({ + tsconfig: "webviews/tsconfig.json", + sourceMap: !production, + inlineSources: !production, + }), + + // In dev mode, call `npm run start` once + // the bundle has been generated + // !production && serve(), + + // Watch the `public` directory and refresh the + // browser on changes when not in production + // !production && livereload("public"), + + // If we're building for production (npm run build + // instead of npm run dev), minify + production && terser(), + ], + watch: { + clearScreen: false, + }, + }; + }); diff --git a/src/extension.ts b/src/extension.ts new file mode 100644 index 0000000..97be73a --- /dev/null +++ b/src/extension.ts @@ -0,0 +1,227 @@ +// The module 'vscode' contains the VS Code extensibility API +// Import the module and reference it with the alias vscode in your code below +import * as vscode from "vscode"; +import { v4 as uuidv4 } from "uuid"; +import clipboardy from "clipboardy"; +import { GuidelineProvider } from "./webviews/GuidelineProvider"; +import { ScopeProvider } from "./webviews/ScopeProvider"; +import telemetryClient from "./telemetry"; +import { getCurrentRepoName } from "./util/session"; +import { + getRepoDetails, + fetchStarterIssues, + GitHubRepo, + GithubIssue, + searchIssues, +} from "./util/github"; +import { fetchRepoGuidelines, QuackGuideline } from "./quack"; + +// This method is called when your extension is activated +// Your extension is activated the very first time the command is executed +export function activate(context: vscode.ExtensionContext) { + // Generate or retrieve the user's UUID from storage + let stateId: string | undefined = context.globalState.get("userId"); + const userId: string = stateId || uuidv4(); + if (!stateId) { + context.globalState.update("userId", userId); + } + + // Side bar + const scopeView = new ScopeProvider(context.extensionUri); + context.subscriptions.push( + vscode.window.registerWebviewViewProvider( + "quackai-companion.scopeView", + scopeView, + ), + ); + const guidelineView = new GuidelineProvider(context.extensionUri); + context.subscriptions.push( + vscode.window.registerWebviewViewProvider( + "quackai-companion.guidelineView", + guidelineView, + ), + ); + + // Status bar buttons + // Guideline refresh + const refreshStatusBar = vscode.window.createStatusBarItem( + vscode.StatusBarAlignment.Right, + ); + refreshStatusBar.text = "$(refresh) Refresh guidelines"; + refreshStatusBar.command = "quackai-companion.fetchGuidelines"; + refreshStatusBar.show(); + // Find starter issues + const starterStatusBar = vscode.window.createStatusBarItem( + vscode.StatusBarAlignment.Right, + ); + starterStatusBar.text = "$(search-fuzzy) Find starter issues"; + starterStatusBar.command = "quackai-companion.findStarterIssues"; + starterStatusBar.show(); + + interface TransformedGuideline { + id: number; + label: string; + detail: string; + } + + context.subscriptions.push( + vscode.commands.registerCommand( + "quackai-companion.fetchGuidelines", + async () => { + const repoName: string = await getCurrentRepoName(); + const ghRepo: GitHubRepo = await getRepoDetails(repoName); + const guidelines: QuackGuideline[] = await fetchRepoGuidelines( + ghRepo.id, + ); + + // Display in the sidebar + guidelineView._view?.webview.postMessage({ + type: "repo-guidelines", + value: guidelines, + }); + + // Telemetry + telemetryClient?.capture({ + distinctId: userId, + event: "vscode-fetch-guidelines", + properties: { + repository: repoName, + }, + }); + }, + ), + ); + + context.subscriptions.push( + vscode.commands.registerCommand( + "quackai-companion.findStarterIssues", + async () => { + const currentName: string = await getCurrentRepoName(); + const repoName = await vscode.window.showInputBox({ + prompt: "To which repo would you like to contribute?", + placeHolder: currentName, + }); + if (repoName === undefined) { + return; + } + const selectedRepo = await getRepoDetails(repoName); + const ghIssues: GithubIssue[] = await fetchStarterIssues(selectedRepo); + + // Telemetry + telemetryClient?.capture({ + distinctId: userId, + event: "vscode-find-starter-issues", + properties: { + repository: repoName, + }, + }); + + // Let user pick one + const ghIssue = await vscode.window.showQuickPick( + ghIssues.map((issue) => { + return { + label: issue.title, + detail: issue.body, + url: issue.html_url, + }; + }), + { + matchOnDetail: true, + }, + ); + + if (ghIssue === undefined) { + return; + } else { + vscode.env.openExternal(vscode.Uri.parse(ghIssue.url)); + } + }, + ), + ); + + context.subscriptions.push( + vscode.commands.registerCommand( + "quackai-companion.defineGoal", + async () => { + const contribGoal = await vscode.window.showInputBox({ + prompt: "What are you working on?", + placeHolder: "A few words about your intended PR", + }); + if (contribGoal === undefined) { + return; + } + // Send to webview + scopeView._view?.webview.postMessage({ + type: "goal-definition", + value: contribGoal, + }); + const currentName: string = await getCurrentRepoName(); + // Telemetry + telemetryClient?.capture({ + distinctId: userId, + event: "vscode-goal-definition", + properties: { + repository: currentName, + }, + }); + // Check that the contribution is well aligned + const answer = await vscode.window.showInformationMessage( + "Do you wish to check whether there is an existing GitHub issue/PR already?", + "yes", + "no", + ); + if (answer === "yes") { + const relatedIssues: GithubIssue[] = await searchIssues( + currentName, + contribGoal, + ); + // Display + // Let user pick one + const ghIssue = await vscode.window.showQuickPick( + relatedIssues.map((issue) => { + return { + label: issue.title, + detail: issue.body, + html_url: issue.html_url, + }; + }), + { + matchOnDetail: true, + }, + ); + + if (ghIssue === undefined) { + return; + } + vscode.env.openExternal(vscode.Uri.parse(ghIssue.html_url)); + } + }, + ), + ); + + context.subscriptions.push( + vscode.commands.registerCommand("quackai-companion.debugInfo", async () => { + const extensionVersion = + vscode.extensions.getExtension("quackai-companion")?.packageJSON + .version; + const vscodeVersion = vscode.version; + if (extensionVersion && vscodeVersion) { + const info = `Extension Version: ${extensionVersion}\nVSCode Version: ${vscodeVersion}`; + clipboardy.writeSync(info); + vscode.window.showInformationMessage( + "Version info copied to clipboard.", + ); + } else { + vscode.window.showErrorMessage("Could not retrieve debug info."); + } + }), + ); + + // Commands to be run when activating + vscode.commands.executeCommand("quackai-companion.fetchGuidelines"); +} + +// This method is called when your extension is deactivated +export function deactivate() { + // telemetryClient?.shutdownAsync(); +} diff --git a/src/quack.ts b/src/quack.ts new file mode 100644 index 0000000..68545e3 --- /dev/null +++ b/src/quack.ts @@ -0,0 +1,39 @@ +import * as vscode from "vscode"; +import axios, { AxiosResponse } from "axios"; + +export interface QuackGuideline { + id: number; + title: string; + details: string; +} + +export async function fetchRepoGuidelines(repoId: number): Promise { + try { + // Retrieve the guidelines + const response: AxiosResponse = await axios.get( + `https://backend.quack-ai.com/api/v1/repos/${repoId}/guidelines`, + ); + + // Handle the response + if (response.status === 200) { + // The request was successful, and you can process the response data here + return response.data; + } else { + // The request returned a non-200 status code (e.g., 404) + // Show an error message or handle the error accordingly + vscode.window.showErrorMessage( + `Quack API returned status code ${response.status}`, + ); + return null; // or throw an error, return an empty object, etc. + } + } catch (error) { + // Handle other errors that may occur during the request + console.error("Error fetching repository details:", error); + + // Show an error message or handle the error accordingly + vscode.window.showErrorMessage( + "Failed to fetch repository details. Make sure the repository exists and is public.", + ); + return null; // or throw an error, return an empty object, etc. + } +} diff --git a/src/telemetry.ts b/src/telemetry.ts new file mode 100644 index 0000000..010e9d3 --- /dev/null +++ b/src/telemetry.ts @@ -0,0 +1,22 @@ +import * as vscode from "vscode"; +import { PostHog } from "posthog-node"; +import * as path from "path"; +import * as dotenv from "dotenv"; + +let telemetryClient: PostHog | null = null; +const telemetryLevel: string = vscode.workspace + .getConfiguration("telemetry") + .get("telemetryLevel", "all"); + +// Env variables +const envPath = path.join(path.dirname(__dirname), ".env"); +dotenv.config({ path: envPath }); + +if (process.env.POSTHOG_KEY && telemetryLevel === "all") { + telemetryClient = new PostHog(process.env.POSTHOG_KEY, { + host: process.env.POSTHOG_HOST, + }); + console.log("Collecting anonymized usage data"); +} + +export default telemetryClient; diff --git a/src/util/getNonce.ts b/src/util/getNonce.ts new file mode 100644 index 0000000..3e1fdcd --- /dev/null +++ b/src/util/getNonce.ts @@ -0,0 +1,9 @@ +export function getNonce() { + let text = ""; + const possible = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + for (let i = 0; i < 32; i++) { + text += possible.charAt(Math.floor(Math.random() * possible.length)); + } + return text; +} diff --git a/src/util/github.ts b/src/util/github.ts new file mode 100644 index 0000000..34b318f --- /dev/null +++ b/src/util/github.ts @@ -0,0 +1,160 @@ +import * as vscode from "vscode"; +import axios, { AxiosResponse } from "axios"; + +interface Label { + id: number; + name: string; +} + +export interface GitHubRepo { + id: number; + full_name: string; +} + +export interface GithubIssue { + id: number; + title: string; + body: string; + html_url: string; + created_at: string; +} + +export async function getRepoDetails(repoName: string): Promise { + try { + // Check that it's a public repo + const response: AxiosResponse = await axios.get( + `https://api.github.com/repos/${repoName}`, + ); + + // Handle the response + if (response.status === 200) { + // The request was successful, and you can process the response data here + return response.data; + } else { + // The request returned a non-200 status code (e.g., 404) + // Show an error message or handle the error accordingly + vscode.window.showErrorMessage( + `GitHub API returned status code ${response.status}`, + ); + return null; // or throw an error, return an empty object, etc. + } + } catch (error) { + // Handle other errors that may occur during the request + console.error("Error fetching repository details:", error); + + // Show an error message or handle the error accordingly + vscode.window.showErrorMessage( + "Failed to fetch repository details. Make sure the repository exists and is public.", + ); + return null; // or throw an error, return an empty object, etc. + } +} + +export async function fetchStarterIssues(repo: GitHubRepo): Promise { + try { + // Fetch list of labels + // https://docs.github.com/en/rest/search/search?apiVersion=2022-11-28#search-labels + const searchLabel = "good first issue"; + const starterQuery: string = searchLabel.replace(/\s+/g, "+"); + const ghLabels: AxiosResponse = await axios.get( + `https://api.github.com/search/labels?repository_id=${repo.id}&q=${starterQuery}`, + ); + if (ghLabels.status !== 200) { + // The request was successful, and you can process the response data here + vscode.window.showErrorMessage( + `Fetchign labels from GitHub API returned status code ${ghLabels.status}`, + ); + return null; + } + if (ghLabels.data.items.length === 0) { + vscode.window.showInformationMessage("No matching issues"); + return null; + } + // Locate the good first issue + const starterLabel = ghLabels.data.items.find( + (label: Label) => + label.name.trim().toLowerCase() === searchLabel.trim().toLowerCase(), + ); + if (!starterLabel) { + vscode.window.showInformationMessage( + "Unable to locate good starter issues :(", + ); + return; + } + + // Find starter issues + const queryParams = { + labels: starterLabel.name, + is: "issue", + state: "open", + sort: "created", + per_page: 100, + }; + const response: AxiosResponse = await axios.get( + `https://api.github.com/repos/${repo.full_name}/issues`, + { params: queryParams }, + ); + + // Handle the response + if (response.status === 200) { + // The request was successful, and you can process the response data here + return response.data; + } else { + // The request returned a non-200 status code (e.g., 404) + // Show an error message or handle the error accordingly + vscode.window.showErrorMessage( + `GitHub API returned status code ${response.status}`, + ); + return null; // or throw an error, return an empty object, etc. + } + } catch (error) { + // Handle other errors that may occur during the request + console.error("Error fetching repository details:", error); + + // Show an error message or handle the error accordingly + vscode.window.showErrorMessage( + "Failed to fetch repository details. Make sure the repository exists and is public.", + ); + return null; // or throw an error, return an empty object, etc. + } +} + +export async function searchIssues( + repoName: string, + topic: string, +): Promise { + try { + // Find starter issues + const queryParams = { + q: `${topic} repo:${repoName} is:public`, + sort: "created", + per_page: 100, + }; + const response: AxiosResponse = await axios.get( + `https://api.github.com/search/issues`, + { params: queryParams }, + ); + + // Handle the response + if (response.status === 200) { + // The request was successful, and you can process the response data here + return response.data.items; + } else { + // The request returned a non-200 status code (e.g., 404) + // Show an error message or handle the error accordingly + vscode.window.showErrorMessage( + `GitHub API returned status code ${response.status}`, + ); + return null; // or throw an error, return an empty object, etc. + } + } catch (error) { + // Handle other errors that may occur during the request + console.error("Error fetching repository details:", error); + + // Show an error message or handle the error accordingly + vscode.window.showErrorMessage( + "Failed to fetch repository details. Make sure the repository exists and is public.", + ); + return null; // or throw an error, return an empty object, etc. + } +} diff --git a/src/util/session.ts b/src/util/session.ts new file mode 100644 index 0000000..796750f --- /dev/null +++ b/src/util/session.ts @@ -0,0 +1,52 @@ +import * as vscode from "vscode"; +import { ChildProcess, spawn } from "child_process"; + +function getGitHubURLFromOutput(output: string): string | null { + const remoteRegex = /origin\s+git@github.com:(.+?)\.git\s+\(fetch\)/; + const match = remoteRegex.exec(output); + return match ? match[1] : null; +} + +export async function getCurrentRepoName(): Promise { + return new Promise((resolve, reject) => { + const workspaceFolders = vscode.workspace.workspaceFolders; + if (!workspaceFolders) { + vscode.window.showErrorMessage("No workspace opened."); + reject("No workspace opened."); + return; + } + + const currentFolder = workspaceFolders[0]; // Assuming single-root workspace + + // Check if git is installed + const gitExecutable: string = + vscode.workspace.getConfiguration("git").get("path") || "git"; + const gitProcess: ChildProcess = spawn(gitExecutable, ["remote", "-v"], { + cwd: currentFolder.uri.fsPath, + }); + + let output = ""; + + gitProcess.stdout?.on("data", (data) => { + output += data.toString(); + }); + + gitProcess.stderr?.on("data", (error) => { + console.error(error.toString()); + vscode.window.showErrorMessage( + "Failed to get remote URLs. Make sure Git is installed and the repository has remotes.", + ); + reject("Failed to get remote URLs."); + }); + + gitProcess.on("close", (code) => { + const repoName: string | null = getGitHubURLFromOutput(output); + if (repoName) { + resolve(repoName); + } else { + vscode.window.showInformationMessage("No remote GitHub URL found."); + resolve(""); // Return a default value (empty string) if GitHub URL is not found. + } + }); + }); +} diff --git a/src/webviews/GuidelineProvider.ts b/src/webviews/GuidelineProvider.ts new file mode 100644 index 0000000..8ec6068 --- /dev/null +++ b/src/webviews/GuidelineProvider.ts @@ -0,0 +1,71 @@ +import * as vscode from "vscode"; +import { getNonce } from "../util/getNonce"; + +interface Label { + id: number; + name: string; +} + +export class GuidelineProvider implements vscode.WebviewViewProvider { + _view?: vscode.WebviewView; + _doc?: vscode.TextDocument; + + constructor(private readonly _extensionUri: vscode.Uri) {} + + public async resolveWebviewView(webviewView: vscode.WebviewView) { + this._view = webviewView; + + webviewView.webview.options = { + // Allow scripts in the webview + enableScripts: true, + + localResourceRoots: [this._extensionUri], + }; + + webviewView.webview.html = this._getHtmlForWebview(webviewView.webview); + } + + public revive(panel: vscode.WebviewView) { + this._view = panel; + } + + private _getHtmlForWebview(webview: vscode.Webview) { + const styleResetUri = webview.asWebviewUri( + vscode.Uri.joinPath(this._extensionUri, "styles", "reset.css"), + ); + const styleVSCodeUri = webview.asWebviewUri( + vscode.Uri.joinPath(this._extensionUri, "styles", "vscode.css"), + ); + const scriptUri = webview.asWebviewUri( + vscode.Uri.joinPath(this._extensionUri, "out", "compiled/guideline.js"), + ); + const styleMainUri = webview.asWebviewUri( + vscode.Uri.joinPath(this._extensionUri, "out", "compiled/guideline.css"), + ); + + // Use a nonce to only allow a specific script to be run. + const nonce = getNonce(); + + return ` + + + + + + + + + + + + + + + `; + } +} diff --git a/src/webviews/ScopeProvider.ts b/src/webviews/ScopeProvider.ts new file mode 100644 index 0000000..51317fb --- /dev/null +++ b/src/webviews/ScopeProvider.ts @@ -0,0 +1,149 @@ +import * as vscode from "vscode"; +import { getCurrentRepoName } from "../util/session"; +import { getRepoDetails, searchIssues } from "../util/github"; +import { getNonce } from "../util/getNonce"; +import axios from "axios"; + +interface Label { + id: number; + name: string; +} + +export class ScopeProvider implements vscode.WebviewViewProvider { + _view?: vscode.WebviewView; + _doc?: vscode.TextDocument; + + constructor(private readonly _extensionUri: vscode.Uri) {} + + public async resolveWebviewView(webviewView: vscode.WebviewView) { + this._view = webviewView; + + webviewView.webview.options = { + // Allow scripts in the webview + enableScripts: true, + + localResourceRoots: [this._extensionUri], + }; + + webviewView.webview.html = this._getHtmlForWebview(webviewView.webview); + + webviewView.webview.onDidReceiveMessage(async (data) => { + switch (data.type) { + case "onGoal": { + if (!data.value) { + return; + } + const answer = await vscode.window.showInformationMessage( + "Do you wish to check whether there is a GitHub issue already?", + "yes", + "no", + ); + if (answer === "yes") { + // Identify current repo + const repoName = await getCurrentRepoName(); + // // Turn it into a query + // const repoUrl = `https://www.github.com/${repoName}`; + // // Replace the spaces in the name of the label by + signs + // const topicQuery : string = data.value.replace(/\s+/g, "+"); + // // Open the browser with that filter + // const uri = vscode.Uri.parse(`${repoUrl}/issues?q=is%3Aissue+"${topicQuery}"`); + // vscode.env.openExternal(uri); + // Check available issues & PRs + const relatedIssues = await searchIssues(repoName, data.value); + } + break; + } + case "onFindStarterIssues": { + if (!data.value) { + return; + } + // Identify current repo + const currentRepoName = await getCurrentRepoName(); + const githubRepo = await getRepoDetails(currentRepoName); + + // https://docs.github.com/en/rest/issues/labels?apiVersion=2022-11-28#list-labels-for-a-repository + const response = await axios.get( + `https://api.github.com/repos/${githubRepo.full_name}/labels`, + ); + const repoLabels = response.data.map((label: any) => { + return { + id: label.id, + name: label.name, + }; + }); + + // Locate the good first issue + const searchLabel = "good first issue"; + const matchedLabel = repoLabels.find( + (label: Label) => + label.name.trim().toLowerCase() === + searchLabel.trim().toLowerCase(), + ); + if (!matchedLabel) { + vscode.window.showInformationMessage( + "Unable to locate good starter issues :(", + ); + break; + } + + const repoUrl = `https://www.github.com/${githubRepo.full_name}`; + // Replace the spaces in the name of the label by + signs + const goodFirstIssueLabel: string = matchedLabel.name.replace( + /\s+/g, + "+", + ); + // Open the browser with that filter + const uri = vscode.Uri.parse( + `${repoUrl}/issues?q=is%3Aopen+is%3Aissue+label%3A"${goodFirstIssueLabel}"`, + ); + vscode.env.openExternal(uri); + break; + } + } + }); + } + + public revive(panel: vscode.WebviewView) { + this._view = panel; + } + + private _getHtmlForWebview(webview: vscode.Webview) { + const styleResetUri = webview.asWebviewUri( + vscode.Uri.joinPath(this._extensionUri, "styles", "reset.css"), + ); + const styleVSCodeUri = webview.asWebviewUri( + vscode.Uri.joinPath(this._extensionUri, "styles", "vscode.css"), + ); + const scriptUri = webview.asWebviewUri( + vscode.Uri.joinPath(this._extensionUri, "out", "compiled/scope.js"), + ); + const styleMainUri = webview.asWebviewUri( + vscode.Uri.joinPath(this._extensionUri, "out", "compiled/scope.css"), + ); + + // Use a nonce to only allow a specific script to be run. + const nonce = getNonce(); + + return ` + + + + + + + + + + + + + + + `; + } +} diff --git a/styles/reset.css b/styles/reset.css new file mode 100644 index 0000000..0e3b4cf --- /dev/null +++ b/styles/reset.css @@ -0,0 +1,30 @@ +html { + box-sizing: border-box; + font-size: 13px; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +body, +h1, +h2, +h3, +h4, +h5, +h6, +p, +ol, +ul { + margin: 0; + padding: 0; + font-weight: normal; +} + +img { + max-width: 100%; + height: auto; +} diff --git a/styles/vscode.css b/styles/vscode.css new file mode 100644 index 0000000..4ea74be --- /dev/null +++ b/styles/vscode.css @@ -0,0 +1,91 @@ +:root { + --container-padding: 20px; + --input-padding-vertical: 6px; + --input-padding-horizontal: 4px; + --input-margin-vertical: 4px; + --input-margin-horizontal: 0; +} + +body { + padding: 0 var(--container-padding); + color: var(--vscode-foreground); + font-size: var(--vscode-font-size); + font-weight: var(--vscode-font-weight); + font-family: var(--vscode-font-family); + background-color: var(--vscode-editor-background); +} + +ol, +ul { + padding-left: var(--container-padding); +} + +body > *, +form > * { + margin-block-start: var(--input-margin-vertical); + margin-block-end: var(--input-margin-vertical); +} + +*:focus { + outline-color: var(--vscode-focusBorder) !important; +} + +a { + color: var(--vscode-textLink-foreground); +} + +a:hover, +a:active { + color: var(--vscode-textLink-activeForeground); +} + +code { + font-size: var(--vscode-editor-font-size); + font-family: var(--vscode-editor-font-family); +} + +button { + border: none; + padding: var(--input-padding-vertical) var(--input-padding-horizontal); + width: 100%; + text-align: center; + outline: 1px solid transparent; + outline-offset: 2px !important; + color: var(--vscode-button-foreground); + background: var(--vscode-button-background); +} + +button:hover { + cursor: pointer; + background: var(--vscode-button-hoverBackground); +} + +button:focus { + outline-color: var(--vscode-focusBorder); +} + +button.secondary { + color: var(--vscode-button-secondaryForeground); + background: var(--vscode-button-secondaryBackground); +} + +button.secondary:hover { + background: var(--vscode-button-secondaryHoverBackground); +} + +input:not([type="checkbox"]), +textarea { + display: block; + width: 100%; + border: none; + font-family: var(--vscode-font-family); + padding: var(--input-padding-vertical) var(--input-padding-horizontal); + color: var(--vscode-input-foreground); + outline-color: var(--vscode-input-border); + background-color: var(--vscode-input-background); +} + +input::placeholder, +textarea::placeholder { + color: var(--vscode-input-placeholderForeground); +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..862196b --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "ES2020", + "outDir": "out", + "lib": ["ES2020"], + "sourceMap": true, + "rootDir": "src", + "strict": true /* enable all strict type-checking options */ + /* Additional Checks */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + }, + "exclude": ["node_modules", ".vscode-test", "webviews"] +} diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..e6ed48c --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,48 @@ +//@ts-check + +"use strict"; + +const path = require("path"); + +//@ts-check +/** @typedef {import('webpack').Configuration} WebpackConfig **/ + +/** @type WebpackConfig */ +const extensionConfig = { + target: "node", // VS Code extensions run in a Node.js-context 📖 -> https://webpack.js.org/configuration/node/ + mode: "none", // this leaves the source code as close as possible to the original (when packaging we set this to 'production') + + entry: "./src/extension.ts", // the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/ + output: { + // the bundle is stored in the 'dist' folder (check package.json), 📖 -> https://webpack.js.org/configuration/output/ + path: path.resolve(__dirname, "dist"), + filename: "extension.js", + libraryTarget: "commonjs2", + }, + externals: { + vscode: "commonjs vscode", // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, 📖 -> https://webpack.js.org/configuration/externals/ + // modules added here also need to be added in the .vscodeignore file + }, + resolve: { + // support reading TypeScript and JavaScript files, 📖 -> https://github.com/TypeStrong/ts-loader + extensions: [".ts", ".js"], + }, + module: { + rules: [ + { + test: /\.ts$/, + exclude: /node_modules/, + use: [ + { + loader: "ts-loader", + }, + ], + }, + ], + }, + devtool: "nosources-source-map", + infrastructureLogging: { + level: "log", // enables logging required for problem matchers + }, +}; +module.exports = [extensionConfig]; diff --git a/webviews/components/Guideline.svelte b/webviews/components/Guideline.svelte new file mode 100644 index 0000000..2d4ea2c --- /dev/null +++ b/webviews/components/Guideline.svelte @@ -0,0 +1,93 @@ + + + + +
    + {#each repoGuidelines as guideline (guideline.title)} +
    + { + guideline.completed = !guideline.completed; + }} + > + guideline.expanded = !guideline.expanded} + > + {guideline.expanded ? "▼" : "►"} {guideline.title} + + {#if guideline.expanded} +

    {guideline.details}

    + {/if} +
    + {/each} +
+ diff --git a/webviews/components/Scope.svelte b/webviews/components/Scope.svelte new file mode 100644 index 0000000..3600b6e --- /dev/null +++ b/webviews/components/Scope.svelte @@ -0,0 +1,52 @@ + + + +

What are you working on?

+{#if !submitted} +
+ +
+{:else} +
+

{contribGoal}

+
+{/if} + + + \ No newline at end of file diff --git a/webviews/globals.d.ts b/webviews/globals.d.ts new file mode 100644 index 0000000..2a550ae --- /dev/null +++ b/webviews/globals.d.ts @@ -0,0 +1,7 @@ +import * as _vscode from "vscode"; + +declare global { + const tsvscode: { + postMessage: ({ type: string, value: any }) => void; + }; +} diff --git a/webviews/pages/guideline.ts b/webviews/pages/guideline.ts new file mode 100644 index 0000000..f85d173 --- /dev/null +++ b/webviews/pages/guideline.ts @@ -0,0 +1,7 @@ +import App from "../components/Guideline.svelte"; + +const app = new App({ + target: document.body, +}); + +export default app; diff --git a/webviews/pages/scope.ts b/webviews/pages/scope.ts new file mode 100644 index 0000000..c6e574d --- /dev/null +++ b/webviews/pages/scope.ts @@ -0,0 +1,7 @@ +import App from "../components/Scope.svelte"; + +const app = new App({ + target: document.body, +}); + +export default app; diff --git a/webviews/tsconfig.json b/webviews/tsconfig.json new file mode 100644 index 0000000..2f91ee0 --- /dev/null +++ b/webviews/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "@tsconfig/svelte/tsconfig.json", + "include": ["./**/*"], + "exclude": ["../node_modules/*"], + "compilerOptions": { "strict": true } +} From 43226d479e5fd9064c3c4b46879cce8bf5caee1c Mon Sep 17 00:00:00 2001 From: F-G Fernandez <26927750+frgfm@users.noreply.github.com> Date: Mon, 7 Aug 2023 02:15:29 -0700 Subject: [PATCH 07/19] refactor: Renamed folder to svelte --- rollup.config.js | 6 +++--- {webviews => svelte}/components/Guideline.svelte | 0 {webviews => svelte}/components/Scope.svelte | 0 {webviews => svelte}/globals.d.ts | 0 {webviews => svelte}/pages/guideline.ts | 0 {webviews => svelte}/pages/scope.ts | 0 {webviews => svelte}/tsconfig.json | 0 tsconfig.json | 2 +- 8 files changed, 4 insertions(+), 4 deletions(-) rename {webviews => svelte}/components/Guideline.svelte (100%) rename {webviews => svelte}/components/Scope.svelte (100%) rename {webviews => svelte}/globals.d.ts (100%) rename {webviews => svelte}/pages/guideline.ts (100%) rename {webviews => svelte}/pages/scope.ts (100%) rename {webviews => svelte}/tsconfig.json (100%) diff --git a/rollup.config.js b/rollup.config.js index 46bb3fc..86517a0 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -10,11 +10,11 @@ import fs from "fs"; const production = !process.env.ROLLUP_WATCH; export default fs - .readdirSync(path.join(__dirname, "webviews", "pages")) + .readdirSync(path.join(__dirname, "svelte", "pages")) .map((input) => { const name = input.split(".")[0]; return { - input: "webviews/pages/" + input, + input: "svelte/pages/" + input, output: { sourcemap: true, format: "iife", @@ -44,7 +44,7 @@ export default fs }), commonjs(), typescript({ - tsconfig: "webviews/tsconfig.json", + tsconfig: "svelte/tsconfig.json", sourceMap: !production, inlineSources: !production, }), diff --git a/webviews/components/Guideline.svelte b/svelte/components/Guideline.svelte similarity index 100% rename from webviews/components/Guideline.svelte rename to svelte/components/Guideline.svelte diff --git a/webviews/components/Scope.svelte b/svelte/components/Scope.svelte similarity index 100% rename from webviews/components/Scope.svelte rename to svelte/components/Scope.svelte diff --git a/webviews/globals.d.ts b/svelte/globals.d.ts similarity index 100% rename from webviews/globals.d.ts rename to svelte/globals.d.ts diff --git a/webviews/pages/guideline.ts b/svelte/pages/guideline.ts similarity index 100% rename from webviews/pages/guideline.ts rename to svelte/pages/guideline.ts diff --git a/webviews/pages/scope.ts b/svelte/pages/scope.ts similarity index 100% rename from webviews/pages/scope.ts rename to svelte/pages/scope.ts diff --git a/webviews/tsconfig.json b/svelte/tsconfig.json similarity index 100% rename from webviews/tsconfig.json rename to svelte/tsconfig.json diff --git a/tsconfig.json b/tsconfig.json index 862196b..27f72c9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,5 +12,5 @@ // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ // "noUnusedParameters": true, /* Report errors on unused parameters. */ }, - "exclude": ["node_modules", ".vscode-test", "webviews"] + "exclude": ["node_modules", ".vscode-test", "svelte"] } From 32580f1e0882f4d97804e89e9ace7816f9ea3d23 Mon Sep 17 00:00:00 2001 From: F-G Fernandez <26927750+frgfm@users.noreply.github.com> Date: Mon, 7 Aug 2023 02:20:31 -0700 Subject: [PATCH 08/19] ci: Updates labeler --- .github/labeler.yml | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/.github/labeler.yml b/.github/labeler.yml index 3837a79..26c23e3 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -1,15 +1,33 @@ -"ext: tests": - - src/tests/* +"ext: media": + - media/* -"ext: scripts": - - scripts/* +"ext: styles": + - styles/* -"module: app": - - src/app.py +"ext: svelte": + - svelte/* + +"module: quack": + - src/quack.ts + +"module: telemetry": + - src/telemetry.ts + +"module: util": + - src/util/* + +"module: webviews": + - src/webviews/* + +"module: extension": + - src/extension.ts "topic: build": - package.json - yarn.lock + - tsconfig.json + - rollup.config.js + - webpack.config.js "topic: ci": - .github/* From 955c3827de3c2b67c88afa5752c9f4b89b39172d Mon Sep 17 00:00:00 2001 From: F-G Fernandez <26927750+frgfm@users.noreply.github.com> Date: Mon, 7 Aug 2023 02:26:29 -0700 Subject: [PATCH 09/19] docs: Adds license & copyright notice --- rollup.config.js | 5 +++++ src/extension.ts | 11 ++++++----- src/quack.ts | 5 +++++ src/telemetry.ts | 5 +++++ src/util/getNonce.ts | 5 +++++ src/util/github.ts | 5 +++++ src/util/session.ts | 5 +++++ src/webviews/GuidelineProvider.ts | 5 +++++ src/webviews/ScopeProvider.ts | 5 +++++ svelte/components/Scope.svelte | 5 +++++ svelte/pages/guideline.ts | 5 +++++ svelte/pages/scope.ts | 5 +++++ 12 files changed, 61 insertions(+), 5 deletions(-) diff --git a/rollup.config.js b/rollup.config.js index 86517a0..a781835 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,3 +1,8 @@ +// Copyright (C) 2023, Quack AI. + +// This program is licensed under the Apache License 2.0. +// See LICENSE or go to for full license details. + import svelte from "rollup-plugin-svelte"; import resolve from "@rollup/plugin-node-resolve"; import commonjs from "@rollup/plugin-commonjs"; diff --git a/src/extension.ts b/src/extension.ts index 97be73a..7c65180 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,5 +1,8 @@ -// The module 'vscode' contains the VS Code extensibility API -// Import the module and reference it with the alias vscode in your code below +// Copyright (C) 2023, Quack AI. + +// This program is licensed under the Apache License 2.0. +// See LICENSE or go to for full license details. + import * as vscode from "vscode"; import { v4 as uuidv4 } from "uuid"; import clipboardy from "clipboardy"; @@ -16,8 +19,6 @@ import { } from "./util/github"; import { fetchRepoGuidelines, QuackGuideline } from "./quack"; -// This method is called when your extension is activated -// Your extension is activated the very first time the command is executed export function activate(context: vscode.ExtensionContext) { // Generate or retrieve the user's UUID from storage let stateId: string | undefined = context.globalState.get("userId"); @@ -221,7 +222,7 @@ export function activate(context: vscode.ExtensionContext) { vscode.commands.executeCommand("quackai-companion.fetchGuidelines"); } -// This method is called when your extension is deactivated + export function deactivate() { // telemetryClient?.shutdownAsync(); } diff --git a/src/quack.ts b/src/quack.ts index 68545e3..1b49422 100644 --- a/src/quack.ts +++ b/src/quack.ts @@ -1,3 +1,8 @@ +// Copyright (C) 2023, Quack AI. + +// This program is licensed under the Apache License 2.0. +// See LICENSE or go to for full license details. + import * as vscode from "vscode"; import axios, { AxiosResponse } from "axios"; diff --git a/src/telemetry.ts b/src/telemetry.ts index 010e9d3..bbf3cf1 100644 --- a/src/telemetry.ts +++ b/src/telemetry.ts @@ -1,3 +1,8 @@ +// Copyright (C) 2023, Quack AI. + +// This program is licensed under the Apache License 2.0. +// See LICENSE or go to for full license details. + import * as vscode from "vscode"; import { PostHog } from "posthog-node"; import * as path from "path"; diff --git a/src/util/getNonce.ts b/src/util/getNonce.ts index 3e1fdcd..01e3fb1 100644 --- a/src/util/getNonce.ts +++ b/src/util/getNonce.ts @@ -1,3 +1,8 @@ +// Copyright (C) 2023, Quack AI. + +// This program is licensed under the Apache License 2.0. +// See LICENSE or go to for full license details. + export function getNonce() { let text = ""; const possible = diff --git a/src/util/github.ts b/src/util/github.ts index 34b318f..ff4d897 100644 --- a/src/util/github.ts +++ b/src/util/github.ts @@ -1,3 +1,8 @@ +// Copyright (C) 2023, Quack AI. + +// This program is licensed under the Apache License 2.0. +// See LICENSE or go to for full license details. + import * as vscode from "vscode"; import axios, { AxiosResponse } from "axios"; diff --git a/src/util/session.ts b/src/util/session.ts index 796750f..ec40dd1 100644 --- a/src/util/session.ts +++ b/src/util/session.ts @@ -1,3 +1,8 @@ +// Copyright (C) 2023, Quack AI. + +// This program is licensed under the Apache License 2.0. +// See LICENSE or go to for full license details. + import * as vscode from "vscode"; import { ChildProcess, spawn } from "child_process"; diff --git a/src/webviews/GuidelineProvider.ts b/src/webviews/GuidelineProvider.ts index 8ec6068..62dc57b 100644 --- a/src/webviews/GuidelineProvider.ts +++ b/src/webviews/GuidelineProvider.ts @@ -1,3 +1,8 @@ +// Copyright (C) 2023, Quack AI. + +// This program is licensed under the Apache License 2.0. +// See LICENSE or go to for full license details. + import * as vscode from "vscode"; import { getNonce } from "../util/getNonce"; diff --git a/src/webviews/ScopeProvider.ts b/src/webviews/ScopeProvider.ts index 51317fb..fd5a218 100644 --- a/src/webviews/ScopeProvider.ts +++ b/src/webviews/ScopeProvider.ts @@ -1,3 +1,8 @@ +// Copyright (C) 2023, Quack AI. + +// This program is licensed under the Apache License 2.0. +// See LICENSE or go to for full license details. + import * as vscode from "vscode"; import { getCurrentRepoName } from "../util/session"; import { getRepoDetails, searchIssues } from "../util/github"; diff --git a/svelte/components/Scope.svelte b/svelte/components/Scope.svelte index 3600b6e..cdb2daf 100644 --- a/svelte/components/Scope.svelte +++ b/svelte/components/Scope.svelte @@ -1,3 +1,8 @@ + +