diff --git a/.bun-version b/.bun-version new file mode 100644 index 0000000000..909060327e --- /dev/null +++ b/.bun-version @@ -0,0 +1 @@ +1.1.28 diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000000..666bddb865 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,33 @@ +{ + "name": "vscode-material-icon-theme", + + // Use Microsoft's Ubuntu Base image for the dev container + "image": "mcr.microsoft.com/devcontainers/base:ubuntu", + "features": { + "ghcr.io/michidk/devcontainers-features/bun:1": {} + }, + + "privileged": true, + + "onCreateCommand": { + // Install dependencies in the dev container + "install-bun-packages": "bun install" + }, + + "customizations": { + "vscode": { + "settings": { + // Define suggested settings for the dev container + "resmon.show.battery": false, + "resmon.show.cpufreq": false + }, + "extensions": [ + "biomejs.biome", + "jock.svg", + "EditorConfig.EditorConfig", + "oven.bun-vscode", + "DavidAnson.vscode-markdownlint" + ] + } + } +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..5a85bb72f6 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 2 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.svg] +insert_final_newline = false diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index e390b124a6..0000000000 --- a/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -build/** \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index e5b327c3e2..0000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "extends": ["plugin:prettier/recommended"], - "env": { - "browser": true, - "es6": true, - "node": true - }, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "tsconfig.json", - "sourceType": "module" - }, - "plugins": ["@typescript-eslint"], - "rules": { - "@typescript-eslint/naming-convention": [ - "error", - { - "selector": "variable", - "format": ["camelCase"] - } - ], - "@typescript-eslint/prefer-namespace-keyword": "error", - "no-trailing-spaces": "error", - "camelcase": "error", - "prefer-const": "error", - "eqeqeq": ["error", "smart"], - "id-blacklist": [ - "error", - "any", - "Number", - "number", - "String", - "string", - "Boolean", - "boolean", - "Undefined" - ], - "id-match": "error", - "no-eval": "error", - "no-underscore-dangle": "error", - "no-unsafe-finally": "error", - "no-var": "error", - "spaced-comment": "error", - "prettier/prettier": [ - "error", - { - "endOfLine": "auto" - } - ] - } -} diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000..a5ae34efe3 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,8 @@ +# See https://git-scm.com/docs/gitattributes#_pattern_format for more about `.gitattributes`. + +# Normalize EOL for all files that Git considers text files +* text=auto eol=lf + +# Explicit binary files for older Git versions (<2.10) +*.png binary +*.gif binary diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 2d54109147..d7a91dbf79 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,3 +1,4 @@ # These are supported funding model platforms github: [pkief] -custom: ['https://paypal.me/philippkief', 'https://buymeacoffee.com/pkief'] +buy_me_a_coffee: pkief +custom: ['https://paypal.me/philippkief'] diff --git a/.github/ISSUE_TEMPLATE/1-icon-request.yml b/.github/ISSUE_TEMPLATE/1-icon-request.yml new file mode 100644 index 0000000000..e337335c62 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/1-icon-request.yml @@ -0,0 +1,59 @@ +name: ๐Ÿž๏ธ Icon Request +description: Ask for specific icons to be added +title: "[Icon Request]: " +labels: ["icon-request"] + +body: + - type: checkboxes + id: icon-type + attributes: + label: Icon Type + description: What type of icon are you requesting? + options: + - label: Folder + - label: File + + - type: textarea + id: folder-names + attributes: + label: Folder names + description: If you are requesting folder icons, please list the folder names here. + placeholder: | + - folder-name + - another-folder-name + - ... + + - type: textarea + id: file-names + attributes: + label: File names + description: If you are requesting file icons, please list the file names or file extensions here. + placeholder: | + - file-name + - another-file-name + - ... + + - type: textarea + id: graphic-ideas + attributes: + label: Graphic ideas + description: | + A clear description of the icon you would like. + If the icons are separate for folder and files, please create separate issues. + placeholder: Include a link to sample icons if possible + + - type: textarea + id: additional-context + attributes: + label: Additional context + description: Add any other context about the icons here. + placeholder: I consider these icons necessary because ... + + - type: checkboxes + id: terms + attributes: + label: Code of Conduct + description: By submitting this issue, you agree to follow our [Code of Conduct](../../CODE_OF_CONDUCT.md). + options: + - label: I agree to follow this project's **Code of Conduct** + required: true diff --git a/.github/ISSUE_TEMPLATE/2-bug-report.yml b/.github/ISSUE_TEMPLATE/2-bug-report.yml new file mode 100644 index 0000000000..01a0f7fd43 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/2-bug-report.yml @@ -0,0 +1,78 @@ +name: ๐Ÿ› Bug Report +description: Create a report to help us improve +title: "[Bug]: " +labels: ["bug"] + +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! + + - type: textarea + id: description + attributes: + label: Describe the bug + description: Provide a detailed description of the bug + validations: + required: true + + - type: textarea + id: reproduce + attributes: + label: To Reproduce + description: Steps to reproduce the behavior + placeholder: | + 1. Go to '...' + 2. Click on '....' + 3. Scroll down to '....' + 4. See error + validations: + required: true + + - type: textarea + id: expected + attributes: + label: Expected behavior + description: What you expected to happen + validations: + required: true + + - type: textarea + id: screenshots + attributes: + label: Screenshots + description: Add screenshots if applicable + validations: + required: false + + - type: textarea + id: computer-info + attributes: + label: Computer information + description: | + Examples: + - **OS edition**: [e.g. Windows 11 Home] + - **Extension version**: [e.g. 5.6.0] + - **VSCode version**: [e.g. 1.91.1] + value: | + - **OS edition**: + - **Extension version**: + - **VSCode version**: + + - type: textarea + id: additional-context + attributes: + label: Additional context + description: Additional context about the problem. + validations: + required: false + + - type: checkboxes + id: terms + attributes: + label: Code of Conduct + description: By submitting this issue, you agree to follow our [Code of Conduct](../../CODE_OF_CONDUCT.md). + options: + - label: I agree to follow this project's **Code of Conduct** + required: true diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 759b2dac70..0000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: '' -assignees: '' - ---- - -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Computer information (please complete the following information):** -- OS edition: [e.g. Windows 10 Home] -- OS build: [e.g. 19042.1165] -- Browser [e.g. chrome, safari] -- Version [e.g. 22] -- VSCode version [e.g. 1.59.1] - -**Additional context** -Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/icon_request.md b/.github/ISSUE_TEMPLATE/icon_request.md deleted file mode 100644 index 9f7614d634..0000000000 --- a/.github/ISSUE_TEMPLATE/icon_request.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -name: Icon Request -about: Ask for specific icons to be added -title: '[Icon Request] ' -labels: '' -assignees: '' - ---- - -**Icon Type** -- [ ] Folder -- [ ] File - -**Folder Names** - -- ... - -**File Names** - -- ... - -**Graphic ideas** - -A clear description of the icon you would like. If the icons are separate for folder and files, please create separate issues. - -**Additional context** -Add any other context about the problem here. diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md deleted file mode 100644 index 08d2560041..0000000000 --- a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +++ /dev/null @@ -1,7 +0,0 @@ -# Description - - - -## Contribution Guidelines - -[ ] By creating this pull request, I acknowledge that I have read the [Contribution Guidelines](../../CONTRIBUTING.md) for this project. diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000000..ae3fdab2f3 --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,9 @@ +# General Principles + +1. **Follow the project style**: All changes should adhere to the existing code and documentation style. +2. **Use Material Design colors**: All icons should use colors from the [Material Design color palette](/material-colors.yml). +3. **Adhere to project architecture**: All changes should comply with the project architecture described in [architecture.md](/src/architecture.md). +4. **Pixel-Perfect Icons**: Ensure that all icons are designed to be sharp and clear at 16x16 pixels, following the guidelines in [Designing Pixel Perfect Icons](/CONTRIBUTING.md#pixel-perfect-icons). +5. **Write clean, modular, and well-documented code.**: All changes should be well-documented and easy to understand. +6. **Test your changes**: All changes should be tested and should not break existing functionality. +7. **Keep it simple**: All changes should be as simple as possible and should not introduce unnecessary complexity. diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..2a769f7649 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,18 @@ +--- +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file + +version: 2 +updates: + - package-ecosystem: 'github-actions' # See documentation for possible values + directory: '/' # Location of package manifests + schedule: + interval: 'weekly' + assignees: + - 'PKief' + groups: + github-actions: + patterns: + - 'actions/*' diff --git a/.github/labeler.yml b/.github/labeler.yml new file mode 100644 index 0000000000..0ac4e88ad7 --- /dev/null +++ b/.github/labeler.yml @@ -0,0 +1,24 @@ +# Add 'icons' label to any file changes within 'icons' folder or 'src/core/icons' typescript files +icons: +- changed-files: + - any-glob-to-any-file: ['icons/*', 'src/core/icons/*.ts'] + +# Add 'translations' label to any changes within 'package.nls*.json' files or 'src/core/i18n' folder +translations: +- changed-files: + - any-glob-to-any-file: ['package.nls*.json', 'src/core/i18n'] + +# Add 'docs' label to any changes to markdown files +docs: +- changed-files: + - any-glob-to-any-file: '*.md' + +# Add 'workflows' label to any changes within '.github/workflows' folder or '.github/labeler.yml' file +workflows: +- changed-files: + - any-glob-to-any-file: ['.github/workflows/*', '.github/labeler.yml'] + +# Add 'devcontainers' label to any changes within '.devcontainer' folder +devcontainers: +- changed-files: + - any-glob-to-any-file: '.devcontainer/*' diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000000..eed5fae0a0 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,8 @@ +# Description + + + +## Contribution Guidelines + +- [ ] By creating this pull request, I acknowledge that I have read the [Contribution Guidelines](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/CONTRIBUTING.md) for this project. +- [ ] I have read the [Code Of Conduct](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/CODE_OF_CONDUCT.md) and promise to abide by these rules diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 85d57d2ac5..c9a4c812c0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,45 +1,34 @@ -name: Build + Test +name: ๐Ÿ› ๏ธ Build + Test -on: [push, pull_request] +on: + push: + pull_request: + +permissions: + contents: read jobs: - test: - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [windows-latest, ubuntu-latest] - node-version: [16.x] + build: + runs-on: [ubuntu-latest] - name: ${{ matrix.os }} (Node.js ${{ matrix.node-version }}) + name: Build Material Icon Theme steps: - - name: Checkout ๐Ÿ›Ž - uses: actions/checkout@v3 - - name: Setup Node.js ${{ matrix.node-version }} โš™ - uses: actions/setup-node@v3 + - name: ๐Ÿ“ฅ Checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: - node-version: ${{ matrix.node-version }} - - name: Run display server ๐Ÿ–ฅ - run: /usr/bin/Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 & echo "Started xvfb" - shell: bash - if: ${{ success() && matrix.os == 'ubuntu-latest' }} - - name: Install node_modules ๐Ÿ“ฆ - run: npm ci - - name: Cache node_modules ๐Ÿ’พ - uses: actions/cache@v3 - env: - cache-name: cache-node-modules + fetch-depth: 0 + persist-credentials: false + + - name: ๐Ÿ”ง Setup Bun + uses: oven-sh/setup-bun@4bc047ad259df6fc24a6c9b0f9a0cb08cf17fbe5 # v2 with: - # npm cache files are stored in `~/.npm` on Linux/macOS - path: ~/.npm - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-build-${{ env.cache-name }}- - ${{ runner.os }}-build- - ${{ runner.os }}- - - name: Test + Build ๐Ÿš€ + bun-version-file: ".bun-version" + + - name: ๐Ÿ“ฆ Install dependencies + run: bun install --frozen-lockfile + + - name: ๐Ÿš€ Test + Build run: | - npm test - npm run vscode:prepublish - env: - DISPLAY: ':99.0' + bun test + bun run vscode:prepublish diff --git a/.github/workflows/color-check.yml b/.github/workflows/color-check.yml index 27e4d9db7d..cc83215573 100644 --- a/.github/workflows/color-check.yml +++ b/.github/workflows/color-check.yml @@ -1,9 +1,12 @@ -name: Check SVG icon colors +name: ๐ŸŽจ Check SVG icon colors on: pull_request: paths: - - 'icons/*.svg' + - "icons/*.svg" + +permissions: + contents: read jobs: color-check: @@ -11,12 +14,15 @@ jobs: runs-on: ubuntu-latest env: TARGET_BRANCH: ${{ github.event.pull_request.base.ref }} + steps: - - name: Checkout ๐Ÿ›Ž๏ธ - uses: actions/checkout@v3 + - name: ๐Ÿ“ฅ Checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 - - name: Check colors ๐ŸŽจ + persist-credentials: false + + - name: ๐ŸŽจ Check colors run: | svgFiles=$(git diff origin/${{ env.TARGET_BRANCH }} --diff-filter=ACMRTUX --name-only | grep '.svg$') npx svg-color-linter --colors material-colors.yml ${svgFiles} diff --git a/.github/workflows/icon-review.yml b/.github/workflows/icon-review.yml new file mode 100644 index 0000000000..dd1bd2a71c --- /dev/null +++ b/.github/workflows/icon-review.yml @@ -0,0 +1,109 @@ +name: ๐Ÿž๏ธ Icon Review + +on: + pull_request_target: + paths: + - "icons/*.svg" + +permissions: + contents: read + +jobs: + icon-review: + name: Icon Review + runs-on: ubuntu-latest + env: + TARGET_BRANCH: ${{ github.event.pull_request.base.ref }} + + permissions: + pull-requests: write + + steps: + - name: ๐Ÿ”ง Setup Bun + uses: oven-sh/setup-bun@4bc047ad259df6fc24a6c9b0f9a0cb08cf17fbe5 # v2 + with: + bun-version-file: ".bun-version" + + - name: ๐Ÿ“ฅ Checkout Fork + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + ref: ${{ github.event.pull_request.head.ref }} + repository: ${{ github.event.pull_request.head.repo.full_name }} + fetch-depth: 0 + path: fork + persist-credentials: false + + - name: ๐Ÿ“ฅ Checkout Original + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + fetch-depth: 0 + path: main + persist-credentials: false + + - name: ๐Ÿ” Review SVG files + working-directory: main + run: | + files=$(git diff --no-index ../main ../fork --diff-filter=ACMRTUX --name-only | grep '^\.\./fork/icons/.*\.svg$') + filesCount=$(echo "$files" | wc -l) + bunx --bun svg-icon-review@2.1.0 --bigIcon ${files} + echo svg_files_count=$filesCount >> $GITHUB_ENV + + - name: โฌ†๏ธ Upload PNG + env: + IMAGE_UPLOAD: ${{ secrets.IMAGE_UPLOAD }} + id: upload + run: | + IMAGE_URL=$(curl --location 'https://freeimage.host/json' --form 'source=@"./main/preview.png"' --form 'type="file"' --form 'action="upload"' --form 'auth_token="${{env.IMAGE_UPLOAD}}"' | jq -r '.image.url') + echo image_url=$IMAGE_URL >> $GITHUB_ENV + + - name: ๐Ÿ“ƒ Generate text + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + script: | + const iconsCount = parseInt("${{ env.svg_files_count }}"); + const imageURL = "${{ env.image_url }}"); + const image = `Generated preview`; + const pluralS = iconsCount > 1 ? "s" : ""; + + let preview = ""; + + if (iconsCount > 10) { + preview = `
๐Ÿž๏ธ Generated preview
${image}
`; + } else { + preview = image; + } + + const comment = ` + + ## Preview + + Thank you for creating a pull request. This preview shows you how your icon${pluralS} will look on the different themes: + + ${preview} + + Check how your icon${pluralS} fit${!pluralS ? 's' : ''} in a 16x16 grid with our **Pixel Perfect Checker** by following [this link](https://pixp.pages.dev/material-extensions/vscode-material-icon-theme/pull/${{ github.event.pull_request.number }}). + + You can find more information on how to contribute in the [contribution guidelines](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/CONTRIBUTING.md). + `; + + // Write comment to environment variable + core.exportVariable('comment', comment); + + - name: ๐Ÿ•ต๏ธ Find comment if exists + uses: peter-evans/find-comment@3eae4d37986fb5a8592848f6a574fdf654e61f9e # v3.1.0 + id: find-comment + with: + issue-number: ${{ github.event.pull_request.number }} + comment-author: "github-actions[bot]" + body-includes: + + - name: โœ๏ธ Post or update comment in PR + uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0 + with: + comment-id: ${{ steps.find-comment.outputs.comment-id }} + issue-number: ${{ github.event.pull_request.number }} + body: | + ${{ env.comment }} + edit-mode: replace diff --git a/.github/workflows/label.yml b/.github/workflows/label.yml new file mode 100644 index 0000000000..0aee6677ed --- /dev/null +++ b/.github/workflows/label.yml @@ -0,0 +1,17 @@ +# This workflow will triage pull requests and apply a label based on the +# paths that are modified in the pull request. + +name: ๐Ÿ”– Labeler +on: [pull_request_target] + +jobs: + label: + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + + steps: + - uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5.0.0 + with: + repo-token: "${{ secrets.GITHUB_TOKEN }}" diff --git a/.github/workflows/pr-closed.yml b/.github/workflows/pr-closed.yml new file mode 100644 index 0000000000..4de4889820 --- /dev/null +++ b/.github/workflows/pr-closed.yml @@ -0,0 +1,33 @@ +name: ๐ŸŽ‰ PR closed + +on: + pull_request_target: + types: + - closed + +permissions: + contents: read + +jobs: + thank_you: + runs-on: ubuntu-latest + if: github.event.pull_request.merged == true + + permissions: + pull-requests: write + + steps: + - name: ๐Ÿ™ Post Thank You Comment + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + with: + script: | + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: `## Merge Successful + + Thanks for your contribution! ๐ŸŽ‰ + + The changes will be part of the upcoming update on the Marketplace.` + }) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d54b483484..8acff8bbd1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,4 +1,4 @@ -name: Release + Publish +name: ๐Ÿš€ Release + Publish on: workflow_dispatch: @@ -7,67 +7,100 @@ on: type: choice description: Select the version change required: true + default: "minor" options: - major - minor - patch +permissions: + id-token: write + contents: read + jobs: release: runs-on: ubuntu-latest env: VERSION_CHANGE: ${{ github.event.inputs.versionChange }} + + permissions: + contents: write + id-token: write + attestations: write + steps: - - name: Checkout ๐Ÿ›Ž๏ธ - uses: actions/checkout@v3 + - uses: actions/create-github-app-token@5d869da34e18e7287c1daad50e0b8ea0f506ce69 # v1.11.0 + id: app-token + with: + app-id: ${{ vars.BOT_APP_ID }} + private-key: ${{ secrets.BOT_PRIVATE_KEY }} + + - name: ๐Ÿ“ฅ Checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 - - name: Setup Node.js โš™๏ธ - uses: actions/setup-node@v3 + token: ${{ steps.app-token.outputs.token }} + + - name: ๐Ÿ”ง Setup Bun + uses: oven-sh/setup-bun@4bc047ad259df6fc24a6c9b0f9a0cb08cf17fbe5 # v2 with: - node-version: 'lts/*' - registry-url: 'https://registry.npmjs.org' - - name: Install node_modules ๐Ÿ“ฆ + bun-version-file: ".bun-version" + + - name: ๐Ÿ“ฆ Install dependencies run: | - npm ci - npm install --global @vscode/vsce - - name: Update version โ†— + bun install --frozen-lockfile + bun add -g npm + + - name: ๐Ÿ”„ Update version run: | git config --global user.name 'Philipp Kief' git config --global user.email 'PKief@users.noreply.github.com' git config --global push.followTags true npm version ${{ env.VERSION_CHANGE }} -m "Release %s" - - name: Get meta data ๐Ÿ” + + - name: ๐Ÿ“ Get metadata run: | - NODE_VERSION=$(node -p -e "require('./package.json').version") - echo VERSION=$NODE_VERSION >> $GITHUB_ENV - NODE_NAME=$(node -p -e "require('./package.json').name") - echo NAME=$NODE_NAME >> $GITHUB_ENV - NODE_DISPLAY_NAME=$(node -p -e "require('./package.json').displayName") - echo DISPLAY_NAME=$NODE_DISPLAY_NAME >> $GITHUB_ENV - - name: Build โš’๏ธ - run: vsce package - - name: Push tags ๐Ÿ“Œ + VERSION=$(bun --print "(await import('./package.json')).version") + NAME=$(bun --print "(await import('./package.json')).name") + DISPLAY_NAME=$(bun --print "(await import('./package.json')).displayName") + echo VERSION=$VERSION >> $GITHUB_ENV + echo NAME=$NAME >> $GITHUB_ENV + echo DISPLAY_NAME=$DISPLAY_NAME >> $GITHUB_ENV + + - name: ๐Ÿ› ๏ธ Build + run: bunx @vscode/vsce package + + - name: ๐Ÿ”’ Attest artifacts + uses: actions/attest-build-provenance@1c608d11d69870c2092266b3f9a6f3abbf17002c # v1.4.3 + # Read: https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds + with: + subject-path: "${{ env.NAME }}-${{ env.VERSION }}.vsix" + + - name: ๐Ÿ“Œ Push tags run: git push - - name: Release ${{ env.VERSION }} ๐Ÿ”† - uses: softprops/action-gh-release@v1 + + - name: ๐Ÿš€ Release ${{ env.VERSION }} + uses: softprops/action-gh-release@c062e08bd532815e2082a85e87e3ef29c3e6d191 # v2.0.8 with: files: ${{ env.NAME }}-${{ env.VERSION }}.vsix tag_name: v${{ env.VERSION }} name: ${{ env.DISPLAY_NAME }} v${{ env.VERSION }} generate_release_notes: true - - name: Publish to Open VSX Registry ๐ŸŒ - uses: HaaLeo/publish-vscode-extension@v1 + + - name: ๐ŸŒ Publish to Open VSX Registry + uses: HaaLeo/publish-vscode-extension@28e2d3f5817fccf23c1f219eb0cecc903132d1a2 # v1.6.2 with: pat: ${{ secrets.OPEN_VSX_TOKEN }} extensionFile: ${{ env.NAME }}-${{ env.VERSION }}.vsix - - name: Publish to Visual Studio Marketplace ๐ŸŒ - uses: HaaLeo/publish-vscode-extension@v1 + + - name: ๐ŸŒ Publish to Visual Studio Marketplace + uses: HaaLeo/publish-vscode-extension@28e2d3f5817fccf23c1f219eb0cecc903132d1a2 # v1.6.2 with: pat: ${{ secrets.VS_MARKETPLACE_TOKEN }} registryUrl: https://marketplace.visualstudio.com extensionFile: ${{ env.NAME }}-${{ env.VERSION }}.vsix - - name: Publish to NPM Registry ๐ŸŒ - run: npm publish - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + - name: ๐Ÿ“ฆ Publish to NPM Registry + run: | + npm set "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" + npm publish --provenance --access public diff --git a/.gitignore b/.gitignore index 2f4f1fe2c0..b9d46366d5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,16 +1,37 @@ +# See https://git-scm.com/docs/gitignore#_pattern_format for more about ignoring files. + +# Ignore build output directories out dist +# Ignore node_modules directory node_modules +# Ignore VS Code test files .vscode-test/** *.vsix +# Ignore specific icon files and directories icons/file.svg icons/folder.svg icons/folder-open.svg icons/folder-root.svg icons/folder-root-open.svg +icons/*.clone.svg +icons/clones +# Ignore specific HTML files in scripts directories src/scripts/preview/*.html src/scripts/contributors/*.html + +# Ignore cache directory +.cache + +# Ignore log files +*.log + +# Ignore optional eslint cache +.eslintcache + +*.tgz +*.tgz diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000000..ced09c142b --- /dev/null +++ b/.npmignore @@ -0,0 +1,5 @@ +* +!icons/* +!dist/types/**/* +!dist/material-icons.json +!dist/module/index.cjs diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index a06b4f4a7c..0000000000 --- a/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "trailingComma": "es5", - "tabWidth": 2, - "semi": true, - "singleQuote": true, - "endOfLine": "auto" -} diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 1d7ac851ea..192fa55fd7 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,3 +1,9 @@ { - "recommendations": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode"] + "recommendations": [ + "biomejs.biome", + "jock.svg", + "editorconfig.editorconfig", + "oven.bun-vscode", + "davidanson.vscode-markdownlint" + ] } diff --git a/.vscode/launch.json b/.vscode/launch.json index a330c35737..3f8a8b1d0b 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -6,14 +6,12 @@ "version": "0.2.0", "configurations": [ { - "name": "Launch Extension", + "name": "Run Extension", "type": "extensionHost", "request": "launch", - "runtimeExecutable": "${execPath}", "args": ["--extensionDevelopmentPath=${workspaceFolder}"], - "outFiles": ["${workspaceFolder}/dist/**/*.js"], - "smartStep": true, - "preLaunchTask": "npm: build" + "outFiles": ["${workspaceFolder}/dist/**/*.cjs"], + "preLaunchTask": "${defaultBuildTask}" }, { "name": "Run Web Extension in VS Code", @@ -24,20 +22,8 @@ "--extensionDevelopmentPath=${workspaceFolder}", "--extensionDevelopmentKind=web" ], - "outFiles": ["${workspaceFolder}/dist/web/**/*.js"], - "preLaunchTask": "npm: watch-web" - }, - { - "name": "Launch Tests", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}", - "--extensionTestsPath=${workspaceFolder}/out/test/spec/index" - ], - "outFiles": ["${workspaceFolder}/out/test/**/*.js"], - "preLaunchTask": "npm: pretest" + "outFiles": ["${workspaceFolder}/dist/web/**/*.cjs"], + "preLaunchTask": "${defaultBuildTask}" } ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index c06da39df7..f6ed842310 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,10 +5,27 @@ "search.exclude": { "out": true }, - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.codeActionsOnSave": { - "source.fixAll.eslint": true + "[typescript]": { + "editor.codeActionsOnSave": { + "quickfix.biome": "explicit", + "source.organizeImports.biome": "explicit" + } }, - "eslint.validate": ["typescript"], - "editor.formatOnSave": true + "editor.defaultFormatter": "biomejs.biome", + "editor.formatOnSave": true, + + "github.copilot.chat.codeGeneration.instructions": [ + { + "file": "/CONTRIBUTING.md" + }, + { + "file": "/src/architecture.md" + } + ], + "github.copilot.chat.reviewSelection.instructions": [ + { + "file": "/CONTRIBUTING.md" + } + ], + "github.copilot.chat.codeGeneration.useInstructionFiles": true } diff --git a/.vscode/tasks.json b/.vscode/tasks.json index a429a9ab02..14ab1310a1 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -1,32 +1,16 @@ -// See https://go.microsoft.com/fwlink/?LinkId=733558 -// for the documentation about the tasks.json format { "version": "2.0.0", "tasks": [ { - "type": "npm", - "script": "build", - "problemMatcher": "$tsc-watch", - "isBackground": true, - "presentation": { - "reveal": "never" - }, + "type": "bun", + "script": "bun run build", + "problemMatcher": [], + "label": "bun: build", + "detail": "bun run build", "group": { "kind": "build", "isDefault": true } - }, - { - "type": "npm", - "script": "lint", - "problemMatcher": ["$eslint-stylish"] - }, - { - "type": "npm", - "script": "watch-web", - "group": "build", - "isBackground": true, - "problemMatcher": ["$ts-webpack-watch", "$tslint-webpack-watch"] } ] } diff --git a/.vscodeignore b/.vscodeignore index d4d68a15ed..d5b382cb70 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -1,22 +1,24 @@ -.vscode/** -.github/** -.vscode-test/** -out/** -test/** -src/** -scripts/** -**/*.map -.gitignore -tsconfig.json -tslint.json -images/** -vsc-extension-quickstart.md -logo.svg -node_modules -package-lock.json -yarn.lock -build/** -svgo.config.js -.eslintignore -material-colors.yml -changelog.config.json \ No newline at end of file +# Files to include in the extension package +# Documentation for this format: +# https://code.visualstudio.com/api/working-with-extensions/publishing-extension#using-.vscodeignore + +# Files for vscode extension +!CHANGELOG.md +!LICENSE.md +!README.md +!logo.png + +# Translation files +!package.json +!package.nls.json +!package.nls.*.json + +# Extension code +!dist/extension +!dist/material-icons.json + +# Icons +!icons + +# Exclude everything else +**/* diff --git a/CHANGELOG.md b/CHANGELOG.md index ab1389dbac..a08e29acba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,1367 +3,1800 @@ All notable changes to this project will be documented in this file. Dates are displayed in UTC. -#### [v4.28.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.27.0...v4.28.0) +#### [v5.12.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.11.1...v5.12.0) + +> October 23, 2024 + +- Add `label` icon for `.github/labeler.yml` file [`#2607`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2607) +- feat: add Copilot icon for `.github/copilot-instructions.md` file [`#2632`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2632) +- Add events package in package.json [`#2630`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2630) +- add Bahasa Indonesia (id) translation [`#2627`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2627) +- feat: :sparkles: Add `.tazerc` and `.tazerc.json` filenames for `taze` icon [`#2628`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2628) +- build(deps): bump actions/checkout in the github-actions group [`#2626`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2626) +- Added env abbreviations on tune icon recognized names [`#2624`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2624) +- Add stackblitz file icon [`#2621`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2621) +- Add icon association for gltf and glb files [`#2622`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2622) +- Add systemd icon [`#1472`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1472) +- Fix light mode for language ids [`#2617`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2617) +- build(deps): bump actions/checkout in the github-actions group [`#2618`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2618) +- Add `zeabur` file icon for `zeabur` deploy config file [`#2611`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2611) +- Add icon for PowerShell folders [`#2605`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2605) +- Update prepare script [`377523e9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/377523e9) + +#### [v5.11.1](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.11.0...v5.11.1) + +> September 21, 2024 + +- Fix issue with Svelte JS and TS icons (Closes #2603) [`be58bc47`](https://github.com/material-extensions/vscode-material-icon-theme/commit/be58bc47) +- Update preversion script [`1c7a0847`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1c7a0847) + +#### [v5.11.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.10.0...v5.11.0) + +> September 20, 2024 + +- Update preversion script [`12145f8e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/12145f8e) +- Add .svelte.js and .svelte.ts color variants [`#2600`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2600) +- Remove vscode specific fields from module's package json [`#2602`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2602) +- Fix icon request template [`#2596`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2596) +- feat: ecmascript extension patterns for svelte.config [`#2595`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2595) +- Add icons for Lefthook files and folders [`#2582`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2582) +- build(deps): bump actions/create-github-app-token [`#2591`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2591) +- Add `ts`, `cjs` ext for `quasar` [`#2590`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2590) +- Added icon for `wxt.config.ts` file ๐Ÿงฉ [`#2576`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2576) +- build(deps): bump the github-actions group with 2 updates [`#2583`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2583) +- feat: โœจ .clang-format-ignore file icon [`#2580`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2580) +- Added taze configuration file icon [`#2577`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2577) +- added favicons folder icon [`#2578`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2578) +- Feat: added sway icon [`#2573`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2573) +- added src-tauri folder icon [`#2567`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2567) +- refactor: โ™ป๏ธ Improve scripts in `package.json` [`#2569`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2569) +- Added freemarker icon [`#2396`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2396) +- Add nest interceptor icon [`#2572`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2572) +- Remove coderabbit config [`9f57e5cc`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9f57e5cc) +- feat: โœจ .markdownlintignore file icon [`#2565`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2565) +- docs: ๐Ÿ“ fix broken links in pull_request_template [`#2566`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2566) + +#### [v5.10.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.9.0...v5.10.0) + +> August 29, 2024 + +- feat: โœจ github actions workflow file icon [`#2559`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2559) +- duc Binary file format [`#2212`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2212) +- Add icon association for UNLICENSE files [`#2556`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2556) +- build(deps): bump actions/attest-build-provenance [`#2554`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2554) +- Update marketplace message capitalization [`#2553`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2553) +- Added coderabbit icon [`#2549`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2549) +- chore: Improve branch protection [`7112da93`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7112da93) +- Added `gemini-ai` icon [`#2548`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2548) +- feat: โœจ gitea folder icon [`#2552`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2552) +- Changed issue templates order [`#2546`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2546) +- Add remote(s) folder icon association [`4a3c324f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4a3c324f) +- Added emojis in issue template names [`#2532`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2532) +- Collapse the walkthrough of coderabbit [`c61a8d1e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c61a8d1e) +- Fixed pr template links [`#2531`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2531) +- Add config for coderabbit [`baf6202f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/baf6202f) +- Remove unused dependencies [`b167604c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b167604c) + +#### [v5.9.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.8.0...v5.9.0) + +> August 10, 2024 + +- Update release workflow [`1959aa1f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1959aa1f) +- Include 'devtools' in the folder-icon for 'tools' [`#2528`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2528) +- Add VHDL file icon association [`#2522`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2522) +- Add cds icon [`#2520`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2520) +- Added folder-icon for snippet, snippets [`#2510`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2510) +- Add store folder icon [`#2518`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2518) +- feat: โœจ rocket/release icon [`#2519`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2519) +- Feat: Drizzle ORM [`#2127`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2127) +- Show nuxt folder icon without pack [`1c8513c9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1c8513c9) +- build(deps): bump actions/attest in the github-actions group [`#2517`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2517) +- Added folder-icon for flutter [`#2511`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2511) +- Made pixel-perfect (almost) icons [`#2449`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2449) +- Added artifact attestation [`#2486`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2486) +- Added folder-icon about development. [`#2501`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2501) +- Add Phorm AI badge [`#2508`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2508) +- docs: ๐Ÿ“ fix broken links [`#2507`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2507) +- Fix URL in CONTRIBUTING.md [`#2505`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2505) +- Add 'distribution' to folder-dist [`#2500`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2500) +- Added `jsr` icon [`#2493`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2493) +- Improve icon review workflow [`#2499`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2499) +- Improved hint comments [`#2496`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2496) +- Add conditionally active custom clones [`#2498`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2498) +- Add license field to package.json [`#2495`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2495) +- ci: ๐Ÿท๏ธ Add labels for PRs automatically [`#2490`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2490) +- feat: โœจ new rust icon [`#2489`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2489) +- Improve icon preview workflow [`#2485`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2485) +- Add inc64 folder icon [`#2484`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2484) +- Added clangd icon [`#2414`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2414) +- Reduced the size of the extension [`#2476`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2476) +- Added `devcontainer-lock.json` file icon [`#2478`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2478) +- Added `ipynb` folder icon [`#2479`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2479) +- Added `slint` icon [`#2480`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2480) +- fix: ๐Ÿš‘ review comment not being updated [`#2481`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2481) +- Improved text in icon-review [`#2467`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2467) +- Optimized `.vscodeignore` [`#2475`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2475) +- Add angular interceptor icon [`#2474`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2474) +- Add lib64 folder icon [`#2473`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2473) +- feat: add Just icon [`#1950`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1950) + +#### [v5.8.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.7.0...v5.8.0) + +> July 24, 2024 + +- feat: add remark support [`#2245`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2245) +- Add tape icon [`#2469`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2469) +- Added `hurl` icon [`#2465`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2465) +- Improve core functionality (Logging, Config comparison, Code Quality) [`#2464`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2464) +- Added alias for `.nuxtrc` [`#2466`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2466) +- Updated `svg-icon-review` version (1.1.0 -> 2.1.0) [`#2459`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2459) +- feat: adding icons to new configuration and envs files [`#2057`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2057) + +#### [v5.7.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.6.0...v5.7.0) + +> July 22, 2024 + +- Added markdownlint icon [`#2415`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2415) +- Use issue forms [`#2445`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2445) +- Added `ะฆั–ะปัŒ` icon [`#2424`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2424) +- Added snap folder icon [`#2439`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2439) +- Add liara cloud icon [`#2409`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2409) +- Added deepsource icon [`#2413`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2413) +- Added separate Buy Me a Coffee link in `FUNDING.yml` [`#2458`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2458) +- Added aliases for codecov icon [`#2440`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2440) +- Changed icon for `devcontainer.json` [`#2448`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2448) +- Added icon for `xlf` files [`#2455`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2455) +- Added `win32` folder icon [`#2456`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2456) +- build(deps): bump softprops/action-gh-release from 2.0.6 to 2.0.8 [`#2453`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2453) +- build(deps): bump oven-sh/setup-bun [`#2452`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2452) +- Moved PR template [`#2438`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2438) +- Allign with new requirements of vscode-vsce v2.31.0 [`b5552f41`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b5552f41) +- feat: mist file icon [`#2435`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2435) +- Provide option to analyse bundle size [`6186d685`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6186d685) +- Improve stability of code [`58c90cf0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/58c90cf0) + +#### [v5.6.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.5.1...v5.6.0) + +> July 16, 2024 + +- feat: โœจ update turbo repo file icon + .turbo folder icon [`#2425`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2425) +- Revert esbuild config (Related to #2428) [`c66fa64d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c66fa64d) +- feat: velite [`#2406`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2406) + +#### [v5.5.1](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.5.0...v5.5.1) + +> July 15, 2024 + +- Remove lodash as dependency [`#2422`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2422) +- Update tsconfig [`412da52e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/412da52e) + +#### [v5.5.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.4.2...v5.5.0) + +> July 15, 2024 + +- Expose generateManifest as reusable function [`#2411`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2411) +- Added osx folder icon [`#2418`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2418) +- ci(preview): ๐Ÿ”„ add link to check pixel perfectness [`#2405`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2405) +- Include `.cts` and `.mts` in `esbuild` icon configuration [`#2404`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2404) +- feat: update astro file icon and add astro folder icon [`#2228`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2228) +- Fixed all .md files to conform to markdownlint rules [`#2398`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2398) +- Added markdownlint to list of reccomended extensions [`#2400`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2400) +- Added cairo icon [`#2393`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2393) +- Exclude files from vscode extension bundle [`a3f42ed7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a3f42ed7) +- A new item has been added to the checklist in the PR template [`#2395`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2395) +- Remove jq as it's already part of the runner [`#2386`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2386) +- Improved preview text [`#2397`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2397) +- Added dockerhub folder [`#2399`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2399) +- Fixed color checking [`#2392`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2392) +- Added grafana alloy icon [`#2391`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2391) +- Cleaned icons [`#2383`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2383) +- Added labels for issues [`#2394`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2394) +- Replace generated image previews instead of creating new ones [`#2386`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2386) +- Add Helm folder icon [`#1181`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1181) +- Update workflow files [`b1ad1d28`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b1ad1d28) +- Add folder icons for Jupyter [`#2368`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2368) +- ci: ๐Ÿ”„ persist credentials in release action [`#2385`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2385) +- feat: update sentry files [`#2303`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2303) +- Remove plain black and white from allowed colors [`9b7100ed`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9b7100ed) +- Update build directory [`4d71701d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4d71701d) +- ui folder icon [`#2382`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2382) +- Added icon for kcl lang [`#2342`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2342) +- Added icon for `*.sigstore.json` files [`#2341`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2341) +- Add Bicep folder icons [`#2367`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2367) +- Update devcontainer settings [`175ad6f7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/175ad6f7) +- build(deps): bump oven-sh/setup-bun from 1.2.2 to 2 [`#2373`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2373) +- build(deps): bump softprops/action-gh-release from 2.0.5 to 2.0.6 [`#2374`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2374) +- Update CONTRIBUTING.md [`#2372`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2372) +- Transfer repository to organization [`1aaaaaf4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1aaaaaf4) +- Support for Prisma 5.15 multi-file schema (Closes #2354) [`de76f5a8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/de76f5a8) +- Update biome js [`fa79975d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/fa79975d) +- add amplify logo (Closes #893) [`#1084`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1084) +- Update task json to improve debugging [`b860c846`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b860c846) +- chore: provenance [`#2365`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2365) + +#### [v5.4.2](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.4.1...v5.4.2) + +> June 13, 2024 + +- Update action workflows [`314aba7b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/314aba7b) +- fix: remove log information from console (Fixes #2362) [`0c4c0821`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0c4c0821) + +#### [v5.4.1](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.4.0...v5.4.1) + +> June 13, 2024 + +- Fix #2360 Issue with translation loader [`f11d3e51`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f11d3e51) + +#### [v5.4.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.3.0...v5.4.0) + +> June 12, 2024 + +- feat: improve build performance [`#2359`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2359) +- fix: dead README.md link [`#2355`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2355) +- Clone Advpl icon files [`#2353`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2353) +- feat: Migrate from `prettier`/`eslint` to `biome` [`#2349`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2349) +- feat: Added `screwdriver` icon [`#2328`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2328) +- Add harmonix icon [`#2348`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2348) +- Add bruno icon [`#2345`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2345) +- feat: update patterns support [`d8bdd337`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d8bdd337) +- Added icon for `py.typed` file [`#2343`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2343) +- fix: `pull_request_template.md` [`#2339`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2339) +- feat: โš™๏ธ Refactor pattern code structure [`#2326`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2326) +- Added icon for `devcontainer.json` [`#2332`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2332) +- Added icons for `.github/*_TEMPLATE` folders [`#2333`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2333) +- Added new filenames for `key` icon [`#2334`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2334) +- Added snapcraft icon [`#2318`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2318) +- Added `CODE_OF_CONDUCT.md` [`#2327`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2327) +- feat: update recommended extensions for development [`8af9bcdb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8af9bcdb) + +#### [v5.3.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.2.0...v5.3.0) + +> May 13, 2024 + +- feat: select default version change value [`190092bf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/190092bf) +- feat: โœจ .github/workflows folder icon [`#2324`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2324) +- fix: ๐Ÿš‘ interop between cloned icons and user associations [`#2323`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2323) +- feat: Rename custom attribute (use data prefix) [`#2322`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2322) +- Added `devcontainer.json` [`#2319`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2319) +- feat: update link in readme [`de998a76`](https://github.com/material-extensions/vscode-material-icon-theme/commit/de998a76) + +#### [v5.2.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.1.0...v5.2.0) + +> May 9, 2024 + +- Feat/update angular and nest icons [`#2314`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2314) +- feat: support biome.jsonc [`#2316`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2316) +- Modernize svgo config [`#2301`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2301) +- feat: โœจ clone and recolorize icons [`#2305`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2305) +- feat(i18n): Add missing japanese translate [`#2313`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2313) +- Add seeders folder icons [`#2298`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2298) +- Pseudo-wildcard support for folder icons [`#2292`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2292) +- Update CONTRIBUTING.md [`834e5aed`](https://github.com/material-extensions/vscode-material-icon-theme/commit/834e5aed) +- feat: โœจ c-family icons improvements [`#2299`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2299) +- feat: slnx file extension [`#2302`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2302) +- feat(filenames): add patterns support [`#2289`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2289) +- Add some missed attribute options [`#2300`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2300) +- Add aliases for platform folders [`#2288`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2288) +- feat: Add `.editorconfig` and `.gitattributes` [`#2290`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2290) + +#### [v5.1.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.0.0...v5.1.0) + +> April 20, 2024 + +- fix: ๐Ÿš‘ golang icon [`#2287`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2287) +- feat: add all syncpack cosmiconfig config [`#2282`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2282) +- feat: knip [`#2280`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2280) +- Updated ES translation [`#2286`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2286) + +#### [v5.0.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.34.0...v5.0.0) + +> April 18, 2024 + +- fix: update version [`0ae248de`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0ae248de) +- feat: add backend/backends folder icon (Closes #2276) [`c7fd9c9c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c7fd9c9c) +- feat: update typescript and javascript icons [`d10e0d14`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d10e0d14) +- feat: add `.cjs` extension support for `gruntfile` [`#2271`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2271) +- feat: update color of JSON icon [`d8d90fd6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d8d90fd6) +- Add Quokka icon and file-extension default config [`#2152`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2152) +- Add `mjs` to `postcss.config.*` [`#2269`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2269) +- feat: update icons [`75bdd37d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/75bdd37d) +- feat: update file icons for grid alignment [`a8095d5f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a8095d5f) +- feat: add capnp [`#2224`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2224) +- Update icon-review.yml [`5fa74251`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5fa74251) +- feat: add lighthouserc .cjs extension support [`#2256`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2256) +- feat: add translation for Korean [`#2234`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2234) +- build(deps-dev): bump follow-redirects from 1.15.4 to 1.15.6 [`#2254`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2254) +- chore: add `svg-color-linter` to check-colors before requesting merge [`#2237`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2237) +- Remove duplicated language id definitions [`ff4bb608`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ff4bb608) +- Move objective c and cpp to language associations [`#2249`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2249) +- feat: enhance eslint flat config support [`#2247`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2247) +- feat: add commitlint .mjs extension support [`#2241`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2241) +- Add Controller, Television, and Desktop folder icons [`#2218`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2218) +- feat: add postcss .mjs extension support [`#2239`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2239) +- Support Bun's bunfig.toml file [`#2238`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2238) +- Cloudflare folder icon [`#2235`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2235) +- Add zon file extension to zig icon [`ca53a641`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ca53a641) +- Feature/openapi file extensions [`#2229`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2229) +- Pixel perfect icons at 16px [`#2226`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2226) + +#### [v4.34.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.33.0...v4.34.0) + +> February 19, 2024 + +- feat: add syncpack icon [`#1968`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1968) +- feat: payload cms [`#2222`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2222) +- feat: add `tsconfig.server.json` to file names [`#2223`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2223) +- Added swagger icon [`#1718`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1718) +- Add PKL icon [`#2217`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2217) +- feat: added vitest workspace file [`#2207`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2207) +- feat: add icons for PDM [`#2195`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2195) +- Replace AsciiDoc icon with the official one [`#2199`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2199) +- feat: add dynamic library (dll) icon [`#2198`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2198) +- add photo (and variants) to folderIcons.ts [`#2200`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2200) +- Update Biome logo [`#2188`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2188) +- Add .stylelintrc.mjs [`#2192`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2192) +- feat: add Huff icon [`#2190`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2190) +- build(deps-dev): bump follow-redirects from 1.15.2 to 1.15.4 [`#2187`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2187) + +#### [v4.33.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.32.0...v4.33.0) + +> January 9, 2024 + +- Adjust azure pipelines filename [`#2186`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2186) +- add file icon for `Vedic` Programming Language. [`#2111`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2111) +- Delete unused files [`0f5fd1be`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0f5fd1be) +- Update vscode settings [`e10f594e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e10f594e) +- chore: add "protobuf" to proto folder names [`#2182`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2182) +- Concourse Icon [`#1947`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1947) +- feat: add postgres icon [`#2169`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2169) +- feat: add kubernetes file icon [`#2077`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2077) +- Add moon icons [`#2178`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2178) +- feat: add tooling folder [`#2167`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2167) +- Add RSpec file icon [`#2106`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2106) +- Simplify contribution guidelines [`7856d63e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7856d63e) +- feat: add the .config folder [`#2172`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2172) +- Update README.md [`a18fd923`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a18fd923) +- Add puppeteer file icons [`#2142`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2142) +- CRX file icon [`#2139`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2139) +- Additions to folder icons [`#2140`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2140) +- Update nuxt icons [`#2119`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2119) + +#### [v4.32.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.31.0...v4.32.0) + +> November 20, 2023 + +- [Icon Request] HJSON file icon [`#2136`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2136) +- Update workflow files [`d5912bb0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d5912bb0) +- Add Google App Script (*.gs) file icon [`#2143`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2143) +- build(deps-dev): bump axios from 1.4.0 to 1.6.0 [`#2141`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2141) +- Added Lottie Folder Icons aswell as the File Icon. [`#2073`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2073) +- [Icon Request] Add more textlintrc file names [`#2137`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2137) +- Update Angular icons [`#2134`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2134) +- Added mjs extension for stylelint [`#2129`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2129) +- Add history icon association [`71173fc2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/71173fc2) +- [Icon Request] Taskfile [`#1739`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1739) +- [Icon Request] ABAP [`#2123`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2123) +- Associate .whitesource file name with json file [`04e6cce6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/04e6cce6) +- feat: add tailwind config esm [`#2112`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2112) + +#### [v4.31.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.30.1...v4.31.0) + +> October 6, 2023 + +- added templ file icon [`#2102`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2102) +- Add .o and .zst extensions [`#2063`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2063) +- Add Biome icon [`#2075`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2075) +- Added .stan file icon [`#2050`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2050) +- [Icon Request] ESBuild [`#2104`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2104) +- add plural versions for manager, moderator, and admin folders [`#2098`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2098) +- Add SPWN file icon [`#2090`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2090) +- Support OWNERS files [`#2088`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2088) +- Remove sponsors badge from readme [`#2082`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2082) +- Add more panda file names (Closes #2065) [`afac99a5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/afac99a5) +- Add csharp file extension (Closes #2080) [`411e1c91`](https://github.com/material-extensions/vscode-material-icon-theme/commit/411e1c91) +- feat: icons for desktop os [`#1635`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1635) +- Added disc file extensions (vmdk, qcow2, etc.) [`#2069`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2069) + +#### [v4.30.1](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.30.0...v4.30.1) + +> August 28, 2023 + +- Add missing language ids for yaml icon [`#2066`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2066) + +#### [v4.30.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.29.0...v4.30.0) + +> August 26, 2023 + +- [Icon Request] Add icon association to dockercompose language id [`#2059`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2059) +- [Icon Request] Secret Folder [`#2060`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2060) +- Add frontends folder icon [`379040f7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/379040f7) +- Associate `.tfbackend` files with Terraform [`#2055`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2055) +- Add jest file names [`43bde808`](https://github.com/material-extensions/vscode-material-icon-theme/commit/43bde808) +- feat: enum icon [`#1195`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1195) +- Add istanbul file names [`5ce97aea`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5ce97aea) +- Add folder-robot icon [`#2039`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2039) +- czech translation [`#2040`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2040) +- [Icon Request] panda.config.ts [`#2034`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2034) +- Adding Roblox Studio icons [`#2029`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2029) +- Add .taurignore [`#2033`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2033) +- maint: `.containerfile` and `.containerignore` icon [`#2026`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2026) + +#### [v4.29.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.28.0...v4.29.0) + +> July 14, 2023 + +- Fix contributors script [`1d90a538`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1d90a538) +- Prettier supports config files in ESM [`#2019`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2019) +- Add playwright file names [`df129a42`](https://github.com/material-extensions/vscode-material-icon-theme/commit/df129a42) +- Add .eslintrc.base.json file name [`1dcba8d0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1dcba8d0) +- Add git icon to .keep [`#2010`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2010) +- fix: `nginx` file extensions typo [`#2002`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2002) +- fix: add semantic release as cjs extension [`#2000`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2000) +- feat: werf icon [`#1995`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1995) +- Use shields.io for marketplace badges in README [`#1996`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1996) +- feat: introduce support for semgrep files [`#1991`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1991) + +#### [v4.28.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.27.0...v4.28.0) > May 31, 2023 -- feat: add "stores" (plural) to folder name [`#1965`](https://github.com/PKief/vscode-material-icon-theme/pull/1965) -- feat: add UnoCSS icon and file mappings [`#1910`](https://github.com/PKief/vscode-material-icon-theme/pull/1910) -- Add jest file names [`#1984`](https://github.com/PKief/vscode-material-icon-theme/pull/1984) -- Add Mojo file and folder icons [`#1972`](https://github.com/PKief/vscode-material-icon-theme/pull/1972) -- Add rbs file extension and .ruby-version file name [`#1978`](https://github.com/PKief/vscode-material-icon-theme/pull/1978) -- Update folderIcons.ts for HTML FolderIcon [`#1974`](https://github.com/PKief/vscode-material-icon-theme/pull/1974) -- feat: assign icons for electron process related configs [`#1963`](https://github.com/PKief/vscode-material-icon-theme/pull/1963) -- Add .gitmessage file name [`8e599fe`](https://github.com/PKief/vscode-material-icon-theme/commit/8e599fe) +- feat: add "stores" (plural) to folder name [`#1965`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1965) +- feat: add UnoCSS icon and file mappings [`#1910`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1910) +- Add jest file names [`#1984`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1984) +- Add Mojo file and folder icons [`#1972`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1972) +- Add rbs file extension and .ruby-version file name [`#1978`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1978) +- Update folderIcons.ts for HTML FolderIcon [`#1974`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1974) +- feat: assign icons for electron process related configs [`#1963`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1963) +- Add .gitmessage file name [`8e599fe7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8e599fe7) -#### [v4.27.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.26.0...v4.27.0) +#### [v4.27.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.26.0...v4.27.0) > April 30, 2023 -- Add mermaid file icon [`#1957`](https://github.com/PKief/vscode-material-icon-theme/pull/1957) -- Update package structure of npm module [`#1958`](https://github.com/PKief/vscode-material-icon-theme/pull/1958) -- feat: support CommonJS file for semantic release [`#1954`](https://github.com/PKief/vscode-material-icon-theme/pull/1954) -- Add qwik icon pack [`#1949`](https://github.com/PKief/vscode-material-icon-theme/pull/1949) -- feat: support TSConfig icon for paths file [`#1953`](https://github.com/PKief/vscode-material-icon-theme/pull/1953) -- feat: add ifanr cloud icon [`#1934`](https://github.com/PKief/vscode-material-icon-theme/pull/1934) -- feat: enhance eslint flat config support [`#1935`](https://github.com/PKief/vscode-material-icon-theme/pull/1935) -- Additional docker compose filenames [`#1933`](https://github.com/PKief/vscode-material-icon-theme/pull/1933) +- Add mermaid file icon [`#1957`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1957) +- Update package structure of npm module [`#1958`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1958) +- feat: support CommonJS file for semantic release [`#1954`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1954) +- Add qwik icon pack [`#1949`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1949) +- feat: support TSConfig icon for paths file [`#1953`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1953) +- feat: add ifanr cloud icon [`#1934`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1934) +- feat: enhance eslint flat config support [`#1935`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1935) +- Additional docker compose filenames [`#1933`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1933) -#### [v4.26.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.25.0...v4.26.0) +#### [v4.26.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.25.0...v4.26.0) > April 8, 2023 -- Remove sponsor logo [`#1929`](https://github.com/PKief/vscode-material-icon-theme/pull/1929) -- feat: add mercurial icon [`#1898`](https://github.com/PKief/vscode-material-icon-theme/pull/1898) -- feat: Add "Change File Color" functionality [`#1916`](https://github.com/PKief/vscode-material-icon-theme/pull/1916) -- feat: add C/C++ resource icon [`#1897`](https://github.com/PKief/vscode-material-icon-theme/pull/1897) -- feat: add deno icon [`#1896`](https://github.com/PKief/vscode-material-icon-theme/pull/1896) -- Add typst file icon [`#1917`](https://github.com/PKief/vscode-material-icon-theme/pull/1917) -- feat: add Plastic SCM icon [`#1877`](https://github.com/PKief/vscode-material-icon-theme/pull/1877) -- Update folderIcons.ts [`#1914`](https://github.com/PKief/vscode-material-icon-theme/pull/1914) -- add mctemplate and mcproject file extensions [`#1913`](https://github.com/PKief/vscode-material-icon-theme/pull/1913) -- Godot optimizations, folder [`#1884`](https://github.com/PKief/vscode-material-icon-theme/pull/1884) -- Update netlify icons [`#1908`](https://github.com/PKief/vscode-material-icon-theme/pull/1908) -- Add all possible stryker config filenames [`#1907`](https://github.com/PKief/vscode-material-icon-theme/pull/1907) -- Add support for all Serverless framework config extensions [`#1880`](https://github.com/PKief/vscode-material-icon-theme/pull/1880) - -#### [v4.25.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.24.0...v4.25.0) +- Remove sponsor logo [`#1929`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1929) +- feat: add mercurial icon [`#1898`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1898) +- feat: Add "Change File Color" functionality [`#1916`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1916) +- feat: add C/C++ resource icon [`#1897`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1897) +- feat: add deno icon [`#1896`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1896) +- Add typst file icon [`#1917`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1917) +- feat: add Plastic SCM icon [`#1877`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1877) +- Update folderIcons.ts [`#1914`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1914) +- add mctemplate and mcproject file extensions [`#1913`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1913) +- Godot optimizations, folder [`#1884`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1884) +- Update netlify icons [`#1908`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1908) +- Add all possible stryker config filenames [`#1907`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1907) +- Add support for all Serverless framework config extensions [`#1880`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1880) + +#### [v4.25.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.24.0...v4.25.0) > March 15, 2023 -- Remove logo of sponsor [`#1893`](https://github.com/PKief/vscode-material-icon-theme/pull/1893) -- build(deps-dev): bump webpack from 5.72.1 to 5.76.0 [`#1901`](https://github.com/PKief/vscode-material-icon-theme/pull/1901) -- Additional git filenames [`#1891`](https://github.com/PKief/vscode-material-icon-theme/pull/1891) -- Add type test file support [`#1874`](https://github.com/PKief/vscode-material-icon-theme/pull/1874) -- Add folder name gulp-tasks [`#1875`](https://github.com/PKief/vscode-material-icon-theme/pull/1875) -- Gatsby - add new supported file extensions [`#1886`](https://github.com/PKief/vscode-material-icon-theme/pull/1886) -- Objective-C/C++ icons & associations [`#1888`](https://github.com/PKief/vscode-material-icon-theme/pull/1888) -- Update bitbucket icon [`#1890`](https://github.com/PKief/vscode-material-icon-theme/pull/1890) -- feat: :sparkles: Bun icon to bun.lockb [`#1709`](https://github.com/PKief/vscode-material-icon-theme/pull/1709) -- feat: add GameMaker icon [`#1868`](https://github.com/PKief/vscode-material-icon-theme/pull/1868) -- extend todo to more files [`#1879`](https://github.com/PKief/vscode-material-icon-theme/pull/1879) -- Convert Pascal to Vector [`#1883`](https://github.com/PKief/vscode-material-icon-theme/pull/1883) -- Expand godot-assets associations [`#1863`](https://github.com/PKief/vscode-material-icon-theme/pull/1863) -- feat: add tldraw icon [`#1869`](https://github.com/PKief/vscode-material-icon-theme/pull/1869) -- Add tsconfig.doc.json icon association [`c03e18d`](https://github.com/PKief/vscode-material-icon-theme/commit/c03e18d) - -#### [v4.24.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.23.1...v4.24.0) +- Remove logo of sponsor [`#1893`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1893) +- build(deps-dev): bump webpack from 5.72.1 to 5.76.0 [`#1901`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1901) +- Additional git filenames [`#1891`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1891) +- Add type test file support [`#1874`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1874) +- Add folder name gulp-tasks [`#1875`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1875) +- Gatsby - add new supported file extensions [`#1886`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1886) +- Objective-C/C++ icons & associations [`#1888`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1888) +- Update bitbucket icon [`#1890`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1890) +- feat: :sparkles: Bun icon to bun.lockb [`#1709`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1709) +- feat: add GameMaker icon [`#1868`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1868) +- extend todo to more files [`#1879`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1879) +- Convert Pascal to Vector [`#1883`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1883) +- Expand godot-assets associations [`#1863`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1863) +- feat: add tldraw icon [`#1869`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1869) +- Add tsconfig.doc.json icon association [`c03e18d9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c03e18d9) + +#### [v4.24.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.23.1...v4.24.0) > February 9, 2023 -- Add folder icon for "angular" folder name [`#1859`](https://github.com/PKief/vscode-material-icon-theme/pull/1859) -- Add icon for .git-blame-ignore-revs [`#1836`](https://github.com/PKief/vscode-material-icon-theme/pull/1836) -- Update contributions guidelines [`#1833`](https://github.com/PKief/vscode-material-icon-theme/pull/1833) -- Add icon for code_of_conduct [`#1759`](https://github.com/PKief/vscode-material-icon-theme/pull/1759) -- Added icon support for typical jekyll folders [`#1832`](https://github.com/PKief/vscode-material-icon-theme/pull/1832) -- Add .cjs and .mjs extensions to `plop` fileNames [`#1819`](https://github.com/PKief/vscode-material-icon-theme/pull/1819) -- Add .cjs extension to `graphql.config` [`#1818`](https://github.com/PKief/vscode-material-icon-theme/pull/1818) -- Add Toolkit (Toolkits) and Toolbox (Toolboxes) [`#1809`](https://github.com/PKief/vscode-material-icon-theme/pull/1809) +- Add folder icon for "angular" folder name [`#1859`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1859) +- Add icon for .git-blame-ignore-revs [`#1836`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1836) +- Update contributions guidelines [`#1833`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1833) +- Add icon for code_of_conduct [`#1759`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1759) +- Added icon support for typical jekyll folders [`#1832`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1832) +- Add .cjs and .mjs extensions to `plop` fileNames [`#1819`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1819) +- Add .cjs extension to `graphql.config` [`#1818`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1818) +- Add Toolkit (Toolkits) and Toolbox (Toolboxes) [`#1809`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1809) -#### [v4.23.1](https://github.com/PKief/vscode-material-icon-theme/compare/v4.23.0...v4.23.1) +#### [v4.23.1](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.23.0...v4.23.1) > December 23, 2022 -- Add support for vitest config files [`#1572`](https://github.com/PKief/vscode-material-icon-theme/pull/1572) -- Add icons for vscode files [`#1803`](https://github.com/PKief/vscode-material-icon-theme/pull/1803) -- Add manager / moderator folder icon [`#1802`](https://github.com/PKief/vscode-material-icon-theme/pull/1802) -- Update release workflow [`68bc32f`](https://github.com/PKief/vscode-material-icon-theme/commit/68bc32f) -- Update badges in Readme [`#1796`](https://github.com/PKief/vscode-material-icon-theme/pull/1796) -- add filename .env.uat into tune icon [`#1801`](https://github.com/PKief/vscode-material-icon-theme/pull/1801) +- Add support for vitest config files [`#1572`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1572) +- Add icons for vscode files [`#1803`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1803) +- Add manager / moderator folder icon [`#1802`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1802) +- Update release workflow [`68bc32f3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/68bc32f3) +- Update badges in Readme [`#1796`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1796) +- add filename .env.uat into tune icon [`#1801`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1801) -#### [v4.23.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.22.0...v4.23.0) +#### [v4.23.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.22.0...v4.23.0) > December 15, 2022 -- feat: introduce icon folder for changesets [`#1603`](https://github.com/PKief/vscode-material-icon-theme/pull/1603) -- Add icon for craco [`#1774`](https://github.com/PKief/vscode-material-icon-theme/pull/1774) -- Add Angular icon to ng-package.json [`d6ea9c7`](https://github.com/PKief/vscode-material-icon-theme/commit/d6ea9c7) -- Add tsconfig.lib.prod.json icon association [`72bd904`](https://github.com/PKief/vscode-material-icon-theme/commit/72bd904) -- feat: support icns file type [`#1777`](https://github.com/PKief/vscode-material-icon-theme/pull/1777) -- Add tsconfig.worker.json icon association [`90bfc9e`](https://github.com/PKief/vscode-material-icon-theme/commit/90bfc9e) -- feat: support `etc` folder [`#1762`](https://github.com/PKief/vscode-material-icon-theme/pull/1762) -- Add tsconfig file names [`#1756`](https://github.com/PKief/vscode-material-icon-theme/pull/1756) -- feat: ๐ŸŽจ add console icon for nushell [`#1761`](https://github.com/PKief/vscode-material-icon-theme/pull/1761) +- feat: introduce icon folder for changesets [`#1603`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1603) +- Add icon for craco [`#1774`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1774) +- Add Angular icon to ng-package.json [`d6ea9c72`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d6ea9c72) +- Add tsconfig.lib.prod.json icon association [`72bd904e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/72bd904e) +- feat: support icns file type [`#1777`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1777) +- Add tsconfig.worker.json icon association [`90bfc9ea`](https://github.com/material-extensions/vscode-material-icon-theme/commit/90bfc9ea) +- feat: support `etc` folder [`#1762`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1762) +- Add tsconfig file names [`#1756`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1756) +- feat: ๐ŸŽจ add console icon for nushell [`#1761`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1761) -#### [v4.22.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.21.0...v4.22.0) +#### [v4.22.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.21.0...v4.22.0) > November 5, 2022 -- Update import in scripts [`66d9e48`](https://github.com/PKief/vscode-material-icon-theme/commit/66d9e48) -- feat: add support for Sonarcloud [`#1677`](https://github.com/PKief/vscode-material-icon-theme/pull/1677) -- Update build script [`8b24b74`](https://github.com/PKief/vscode-material-icon-theme/commit/8b24b74) -- docs: add note to saturation section re: Toggle Grayscale setting [`#1747`](https://github.com/PKief/vscode-material-icon-theme/pull/1747) -- Change explanation of `languageId` values [`#1753`](https://github.com/PKief/vscode-material-icon-theme/pull/1753) -- rm unlinked "official icons" list entry [`#1752`](https://github.com/PKief/vscode-material-icon-theme/pull/1752) -- harmonise/clarify wording of Toggle Explorer Arrows [`#1749`](https://github.com/PKief/vscode-material-icon-theme/pull/1749) -- change error messages for Opacity and Saturation (value should be float) [`#1746`](https://github.com/PKief/vscode-material-icon-theme/pull/1746) -- feat: decorators folder [`#1671`](https://github.com/PKief/vscode-material-icon-theme/pull/1671) -- feat: add stylable icon [`#1724`](https://github.com/PKief/vscode-material-icon-theme/pull/1724) -- feat: supabase [`#1516`](https://github.com/PKief/vscode-material-icon-theme/pull/1516) -- Add proto folder icon association [`#1751`](https://github.com/PKief/vscode-material-icon-theme/pull/1751) -- Optimize SVG icons [`#1741`](https://github.com/PKief/vscode-material-icon-theme/pull/1741) -- Remove welcome and update messages [`#1740`](https://github.com/PKief/vscode-material-icon-theme/pull/1740) -- feat(dependabot): Add missing filename dependabot.yaml [`#1615`](https://github.com/PKief/vscode-material-icon-theme/pull/1615) -- Add missing `,` to `vue-config` fileNames [`#1743`](https://github.com/PKief/vscode-material-icon-theme/pull/1743) -- Add `volar.config.js` to `vue-config` fileNames [`#1742`](https://github.com/PKief/vscode-material-icon-theme/pull/1742) -- Associate `.mcpack` and `.mcaddon` files with Minecraft file icon [`#1734`](https://github.com/PKief/vscode-material-icon-theme/pull/1734) -- Add rollup .mjs config file support [`#1733`](https://github.com/PKief/vscode-material-icon-theme/pull/1733) -- Pine script file icon [`#1725`](https://github.com/PKief/vscode-material-icon-theme/pull/1725) -- feat: enhance svgo icon support [`#1730`](https://github.com/PKief/vscode-material-icon-theme/pull/1730) -- feat: add nano-staged icon [`#1722`](https://github.com/PKief/vscode-material-icon-theme/pull/1722) -- Update replit.svg [`#1728`](https://github.com/PKief/vscode-material-icon-theme/pull/1728) -- Add tsconfig file names [`0eba308`](https://github.com/PKief/vscode-material-icon-theme/commit/0eba308) -- Update drone light icon [`2ad273e`](https://github.com/PKief/vscode-material-icon-theme/commit/2ad273e) -- Update antrl icon [`93da3f9`](https://github.com/PKief/vscode-material-icon-theme/commit/93da3f9) -- [Icon Request] Antlr4's grammar files [`#1711`](https://github.com/PKief/vscode-material-icon-theme/pull/1711) -- Add browser folder icon association [`0ddc6f4`](https://github.com/PKief/vscode-material-icon-theme/commit/0ddc6f4) -- Add .git-blame-ignore icon association [`14afac1`](https://github.com/PKief/vscode-material-icon-theme/commit/14afac1) - -#### [v4.21.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.20.0...v4.21.0) +- Update import in scripts [`66d9e483`](https://github.com/material-extensions/vscode-material-icon-theme/commit/66d9e483) +- feat: add support for Sonarcloud [`#1677`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1677) +- Update build script [`8b24b74d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8b24b74d) +- docs: add note to saturation section re: Toggle Grayscale setting [`#1747`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1747) +- Change explanation of `languageId` values [`#1753`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1753) +- rm unlinked "official icons" list entry [`#1752`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1752) +- harmonise/clarify wording of Toggle Explorer Arrows [`#1749`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1749) +- change error messages for Opacity and Saturation (value should be float) [`#1746`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1746) +- feat: decorators folder [`#1671`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1671) +- feat: add stylable icon [`#1724`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1724) +- feat: supabase [`#1516`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1516) +- Add proto folder icon association [`#1751`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1751) +- Optimize SVG icons [`#1741`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1741) +- Remove welcome and update messages [`#1740`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1740) +- feat(dependabot): Add missing filename dependabot.yaml [`#1615`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1615) +- Add missing `,` to `vue-config` fileNames [`#1743`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1743) +- Add `volar.config.js` to `vue-config` fileNames [`#1742`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1742) +- Associate `.mcpack` and `.mcaddon` files with Minecraft file icon [`#1734`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1734) +- Add rollup .mjs config file support [`#1733`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1733) +- Pine script file icon [`#1725`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1725) +- feat: enhance svgo icon support [`#1730`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1730) +- feat: add nano-staged icon [`#1722`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1722) +- Update replit.svg [`#1728`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1728) +- Add tsconfig file names [`0eba3084`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0eba3084) +- Update drone light icon [`2ad273ee`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2ad273ee) +- Update antrl icon [`93da3f98`](https://github.com/material-extensions/vscode-material-icon-theme/commit/93da3f98) +- [Icon Request] Antlr4's grammar files [`#1711`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1711) +- Add browser folder icon association [`0ddc6f4b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0ddc6f4b) +- Add .git-blame-ignore icon association [`14afac15`](https://github.com/material-extensions/vscode-material-icon-theme/commit/14afac15) + +#### [v4.21.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.20.0...v4.21.0) > October 7, 2022 -- feat: add folder-pdf [`#1651`](https://github.com/PKief/vscode-material-icon-theme/pull/1651) -- Added file association to docker-compose file extension [`#1706`](https://github.com/PKief/vscode-material-icon-theme/pull/1706) -- Add support for gatsby config typescript files [`#1701`](https://github.com/PKief/vscode-material-icon-theme/pull/1701) -- Add jrxml file extension to xml icon [`#1632`](https://github.com/PKief/vscode-material-icon-theme/pull/1632) -- feat: Update drone icon [`#1698`](https://github.com/PKief/vscode-material-icon-theme/pull/1698) -- Add support for other Netlify files and folders [`#582`](https://github.com/PKief/vscode-material-icon-theme/pull/582) -- Flow - Cadence Icon Addition [`#1686`](https://github.com/PKief/vscode-material-icon-theme/pull/1686) -- Folder association `protobufs` [`#1691`](https://github.com/PKief/vscode-material-icon-theme/pull/1691) -- chore: adds file-ending .stylelintcache as a stylelint file [`#1693`](https://github.com/PKief/vscode-material-icon-theme/pull/1693) -- feat: Caddyfile (#1689) [`#1017`](https://github.com/PKief/vscode-material-icon-theme/pull/1017) -- Add .env.alpha [`#1680`](https://github.com/PKief/vscode-material-icon-theme/pull/1680) -- Add eslint.config.js [`#1678`](https://github.com/PKief/vscode-material-icon-theme/pull/1678) -- fix: add support to gatsby-config.ts [`#1672`](https://github.com/PKief/vscode-material-icon-theme/pull/1672) -- Support Dart language [`#1663`](https://github.com/PKief/vscode-material-icon-theme/pull/1663) -- feat: support Svelte language [`#1662`](https://github.com/PKief/vscode-material-icon-theme/pull/1662) - -#### [v4.20.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.19.0...v4.20.0) +- feat: add folder-pdf [`#1651`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1651) +- Added file association to docker-compose file extension [`#1706`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1706) +- Add support for gatsby config typescript files [`#1701`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1701) +- Add jrxml file extension to xml icon [`#1632`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1632) +- feat: Update drone icon [`#1698`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1698) +- Add support for other Netlify files and folders [`#582`](https://github.com/material-extensions/vscode-material-icon-theme/pull/582) +- Flow - Cadence Icon Addition [`#1686`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1686) +- Folder association `protobufs` [`#1691`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1691) +- chore: adds file-ending .stylelintcache as a stylelint file [`#1693`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1693) +- feat: Caddyfile (#1689) [`#1017`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1017) +- Add .env.alpha [`#1680`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1680) +- Add eslint.config.js [`#1678`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1678) +- fix: add support to gatsby-config.ts [`#1672`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1672) +- Support Dart language [`#1663`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1663) +- feat: support Svelte language [`#1662`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1662) + +#### [v4.20.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.19.0...v4.20.0) > August 20, 2022 -- feat: mdsvex [`#1633`](https://github.com/PKief/vscode-material-icon-theme/pull/1633) -- feat: add icon for ".tree" files [`#1653`](https://github.com/PKief/vscode-material-icon-theme/pull/1653) -- add folderName fragments [`#1650`](https://github.com/PKief/vscode-material-icon-theme/pull/1650) -- Update Gitlab icon [`#1649`](https://github.com/PKief/vscode-material-icon-theme/pull/1649) -- fix: typo in release yaml [`#1647`](https://github.com/PKief/vscode-material-icon-theme/pull/1647) -- add - folderName : bases [`#1644`](https://github.com/PKief/vscode-material-icon-theme/pull/1644) -- feat: add `nginx` extensions [`#1641`](https://github.com/PKief/vscode-material-icon-theme/pull/1641) -- build(deps): bump terser from 5.7.1 to 5.14.2 [`#1614`](https://github.com/PKief/vscode-material-icon-theme/pull/1614) -- [Icon Request] compose [`#1610`](https://github.com/PKief/vscode-material-icon-theme/pull/1610) -- Update fileIcons.ts with fbx and stp. [`#1570`](https://github.com/PKief/vscode-material-icon-theme/pull/1570) -- feat: add web and webworker to tsconfig [`#1605`](https://github.com/PKief/vscode-material-icon-theme/pull/1605) -- Add quasar.config.js [`#1600`](https://github.com/PKief/vscode-material-icon-theme/pull/1600) -- feat: jwt folder [`#1566`](https://github.com/PKief/vscode-material-icon-theme/pull/1566) -- feat: fixtures folder [`#1595`](https://github.com/PKief/vscode-material-icon-theme/pull/1595) -- fix: tsconfig [`#1594`](https://github.com/PKief/vscode-material-icon-theme/pull/1594) -- fix: add tauri.conf.json file [`#1590`](https://github.com/PKief/vscode-material-icon-theme/pull/1590) -- Added `wgsl` extension [`#1592`](https://github.com/PKief/vscode-material-icon-theme/pull/1592) - -#### [v4.19.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.18.1...v4.19.0) +- feat: mdsvex [`#1633`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1633) +- feat: add icon for ".tree" files [`#1653`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1653) +- add folderName fragments [`#1650`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1650) +- Update Gitlab icon [`#1649`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1649) +- fix: typo in release yaml [`#1647`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1647) +- add - folderName : bases [`#1644`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1644) +- feat: add `nginx` extensions [`#1641`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1641) +- build(deps): bump terser from 5.7.1 to 5.14.2 [`#1614`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1614) +- [Icon Request] compose [`#1610`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1610) +- Update fileIcons.ts with fbx and stp. [`#1570`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1570) +- feat: add web and webworker to tsconfig [`#1605`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1605) +- Add quasar.config.js [`#1600`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1600) +- feat: jwt folder [`#1566`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1566) +- feat: fixtures folder [`#1595`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1595) +- fix: tsconfig [`#1594`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1594) +- fix: add tauri.conf.json file [`#1590`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1590) +- Added `wgsl` extension [`#1592`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1592) + +#### [v4.19.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.18.1...v4.19.0) > July 2, 2022 -- fix: added __integration-tests__ folder [`#1585`](https://github.com/PKief/vscode-material-icon-theme/pull/1585) -- fix: update cypress files [`#1582`](https://github.com/PKief/vscode-material-icon-theme/pull/1582) -- [Add] Cypress file name "cypress.config.js" in fileIcon.ts [`#1579`](https://github.com/PKief/vscode-material-icon-theme/pull/1579) -- feat: add support for new type declaration files [`#1576`](https://github.com/PKief/vscode-material-icon-theme/pull/1576) -- feat: add `tsconfig.node.json` [`#1575`](https://github.com/PKief/vscode-material-icon-theme/pull/1575) -- Adds Cypress 10.x e2e extension [`#1573`](https://github.com/PKief/vscode-material-icon-theme/pull/1573) -- Fixing non-object workspace settings bug [`#1565`](https://github.com/PKief/vscode-material-icon-theme/pull/1565) +- fix: added __integration-tests__ folder [`#1585`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1585) +- fix: update cypress files [`#1582`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1582) +- [Add] Cypress file name "cypress.config.js" in fileIcon.ts [`#1579`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1579) +- feat: add support for new type declaration files [`#1576`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1576) +- feat: add `tsconfig.node.json` [`#1575`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1575) +- Adds Cypress 10.x e2e extension [`#1573`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1573) +- Fixing non-object workspace settings bug [`#1565`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1565) -#### [v4.18.1](https://github.com/PKief/vscode-material-icon-theme/compare/v4.18.0...v4.18.1) +#### [v4.18.1](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.18.0...v4.18.1) > June 9, 2022 -- On-boarding to VS Code sponsor [`#1558`](https://github.com/PKief/vscode-material-icon-theme/pull/1558) -- feat: introduce the icon for the config files of auto [`#1511`](https://github.com/PKief/vscode-material-icon-theme/pull/1511) -- Fix: Workspace settings override user settings [`#1553`](https://github.com/PKief/vscode-material-icon-theme/pull/1553) +- On-boarding to VS Code sponsor [`#1558`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1558) +- feat: introduce the icon for the config files of auto [`#1511`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1511) +- Fix: Workspace settings override user settings [`#1553`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1553) -#### [v4.18.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.17.0...v4.18.0) +#### [v4.18.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.17.0...v4.18.0) > June 5, 2022 -- Support workspace settings [`#1540`](https://github.com/PKief/vscode-material-icon-theme/pull/1540) -- Add React and Jsx folder icon [`#1519`](https://github.com/PKief/vscode-material-icon-theme/pull/1519) -- Feature: added folder for Lua language; [`#1542`](https://github.com/PKief/vscode-material-icon-theme/pull/1542) -- feat: add go.work.sum to list of go-mod files [`#1512`](https://github.com/PKief/vscode-material-icon-theme/pull/1512) -- Add new `.cts` and `.mts` file extensions [`#1541`](https://github.com/PKief/vscode-material-icon-theme/pull/1541) -- feat: add site to folder-public [`#1544`](https://github.com/PKief/vscode-material-icon-theme/pull/1544) -- Add separate file icon for rescript interface [`#1539`](https://github.com/PKief/vscode-material-icon-theme/pull/1539) -- Add new extension for i18n and Minecraft icon. [`#1538`](https://github.com/PKief/vscode-material-icon-theme/pull/1538) -- feat: add `.` possibility to kubernetes folders [`#1536`](https://github.com/PKief/vscode-material-icon-theme/pull/1536) -- feat: Support Playwright component test config files [`#1527`](https://github.com/PKief/vscode-material-icon-theme/pull/1527) -- associate xlsm with excel icon, closes #1493 [`#1521`](https://github.com/PKief/vscode-material-icon-theme/pull/1521) -- feat: add support for the graphqlrc.cjs file [`#1513`](https://github.com/PKief/vscode-material-icon-theme/pull/1513) -- feat: introduce support for the webpack config in mjs [`#1514`](https://github.com/PKief/vscode-material-icon-theme/pull/1514) -- feat: improve postcss config icon [`#1507`](https://github.com/PKief/vscode-material-icon-theme/pull/1507) - -#### [v4.17.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.16.0...v4.17.0) +- Support workspace settings [`#1540`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1540) +- Add React and Jsx folder icon [`#1519`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1519) +- Feature: added folder for Lua language; [`#1542`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1542) +- feat: add go.work.sum to list of go-mod files [`#1512`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1512) +- Add new `.cts` and `.mts` file extensions [`#1541`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1541) +- feat: add site to folder-public [`#1544`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1544) +- Add separate file icon for rescript interface [`#1539`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1539) +- Add new extension for i18n and Minecraft icon. [`#1538`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1538) +- feat: add `.` possibility to kubernetes folders [`#1536`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1536) +- feat: Support Playwright component test config files [`#1527`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1527) +- associate xlsm with excel icon, closes #1493 [`#1521`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1521) +- feat: add support for the graphqlrc.cjs file [`#1513`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1513) +- feat: introduce support for the webpack config in mjs [`#1514`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1514) +- feat: improve postcss config icon [`#1507`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1507) + +#### [v4.17.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.16.0...v4.17.0) > May 6, 2022 -- feat: add Otne icon [`#1431`](https://github.com/PKief/vscode-material-icon-theme/pull/1431) -- Add support to plop file icon [`#1350`](https://github.com/PKief/vscode-material-icon-theme/pull/1350) -- feat: shaders [`#1483`](https://github.com/PKief/vscode-material-icon-theme/pull/1483) -- feat: buildkite [`#1486`](https://github.com/PKief/vscode-material-icon-theme/pull/1486) -- Update nuxt folder icons [`#1490`](https://github.com/PKief/vscode-material-icon-theme/pull/1490) -- Remove sponsor badge [`#1491`](https://github.com/PKief/vscode-material-icon-theme/pull/1491) -- Update azure icon [`#1488`](https://github.com/PKief/vscode-material-icon-theme/pull/1488) -- Dart generated files icon [`#1465`](https://github.com/PKief/vscode-material-icon-theme/pull/1465) -- Replace Nuxt Icon [`#1481`](https://github.com/PKief/vscode-material-icon-theme/pull/1481) -- feat: icon for the architecture.md file [`#1475`](https://github.com/PKief/vscode-material-icon-theme/pull/1475) -- Add gulpfile.ts etc. as folder names [`#1479`](https://github.com/PKief/vscode-material-icon-theme/pull/1479) -- feat: verdaccio [`#1476`](https://github.com/PKief/vscode-material-icon-theme/pull/1476) - -#### [v4.16.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.15.0...v4.16.0) +- feat: add Otne icon [`#1431`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1431) +- Add support to plop file icon [`#1350`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1350) +- feat: shaders [`#1483`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1483) +- feat: buildkite [`#1486`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1486) +- Update nuxt folder icons [`#1490`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1490) +- Remove sponsor badge [`#1491`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1491) +- Update azure icon [`#1488`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1488) +- Dart generated files icon [`#1465`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1465) +- Replace Nuxt Icon [`#1481`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1481) +- feat: icon for the architecture.md file [`#1475`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1475) +- Add gulpfile.ts etc. as folder names [`#1479`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1479) +- feat: verdaccio [`#1476`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1476) + +#### [v4.16.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.15.0...v4.16.0) > April 19, 2022 -- Add icons for figure(s) and fig(s) [`#1466`](https://github.com/PKief/vscode-material-icon-theme/pull/1466) -- Bump minimist from 1.2.5 to 1.2.6 [`#1451`](https://github.com/PKief/vscode-material-icon-theme/pull/1451) -- Support astro.config.ts [`#1460`](https://github.com/PKief/vscode-material-icon-theme/pull/1460) -- Add license names commonly used in multi-license projects [`#1463`](https://github.com/PKief/vscode-material-icon-theme/pull/1463) -- Associate pyproject.toml with python-misc file icon [`#1459`](https://github.com/PKief/vscode-material-icon-theme/pull/1459) +- Add icons for figure(s) and fig(s) [`#1466`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1466) +- Bump minimist from 1.2.5 to 1.2.6 [`#1451`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1451) +- Support astro.config.ts [`#1460`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1460) +- Add license names commonly used in multi-license projects [`#1463`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1463) +- Associate pyproject.toml with python-misc file icon [`#1459`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1459) -#### [v4.15.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.14.1...v4.15.0) +#### [v4.15.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.14.1...v4.15.0) > March 30, 2022 -- Aligns Processing icon to Processing 4.x [`#1440`](https://github.com/PKief/vscode-material-icon-theme/pull/1440) -- Update color check to ignore deleted SVG icons [`#1450`](https://github.com/PKief/vscode-material-icon-theme/pull/1450) -- Several file extension, file name, and folder name icon associations [`#1447`](https://github.com/PKief/vscode-material-icon-theme/pull/1447) -- feat: add 'commit'msg' as file name to display 'console' icon [`#1445`](https://github.com/PKief/vscode-material-icon-theme/pull/1445) -- feat: psv alias [`#1442`](https://github.com/PKief/vscode-material-icon-theme/pull/1442) -- Unity folder icon [`#1434`](https://github.com/PKief/vscode-material-icon-theme/pull/1434) -- Update Gleam file icon [`#1433`](https://github.com/PKief/vscode-material-icon-theme/pull/1433) -- feat: turborepo [`#1388`](https://github.com/PKief/vscode-material-icon-theme/pull/1388) -- Add Poetry Python icon [`#1155`](https://github.com/PKief/vscode-material-icon-theme/pull/1155) -- Update lang-ru.ts [`#1428`](https://github.com/PKief/vscode-material-icon-theme/pull/1428) -- Update lang-ru.ts [`#1427`](https://github.com/PKief/vscode-material-icon-theme/pull/1427) -- feat: support avif image file type [`#1424`](https://github.com/PKief/vscode-material-icon-theme/pull/1424) -- feat: fileicon for steadybit configuration files [`#1399`](https://github.com/PKief/vscode-material-icon-theme/pull/1399) - -#### [v4.14.1](https://github.com/PKief/vscode-material-icon-theme/compare/v4.14.0...v4.14.1) +- Aligns Processing icon to Processing 4.x [`#1440`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1440) +- Update color check to ignore deleted SVG icons [`#1450`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1450) +- Several file extension, file name, and folder name icon associations [`#1447`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1447) +- feat: add 'commit'msg' as file name to display 'console' icon [`#1445`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1445) +- feat: psv alias [`#1442`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1442) +- Unity folder icon [`#1434`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1434) +- Update Gleam file icon [`#1433`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1433) +- feat: turborepo [`#1388`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1388) +- Add Poetry Python icon [`#1155`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1155) +- Update lang-ru.ts [`#1428`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1428) +- Update lang-ru.ts [`#1427`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1427) +- feat: support avif image file type [`#1424`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1424) +- feat: fileicon for steadybit configuration files [`#1399`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1399) + +#### [v4.14.1](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.14.0...v4.14.1) > March 8, 2022 -- Hardhat icon is broken [`#1420`](https://github.com/PKief/vscode-material-icon-theme/pull/1420) +- Hardhat icon is broken [`#1420`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1420) -#### [v4.14.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.13.0...v4.14.0) +#### [v4.14.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.13.0...v4.14.0) > March 7, 2022 -- Update vscodeignore [`a2b05b6`](https://github.com/PKief/vscode-material-icon-theme/commit/a2b05b6) -- Support partials folders [`#1307`](https://github.com/PKief/vscode-material-icon-theme/pull/1307) -- [Icon Request] Gleam language [`#1415`](https://github.com/PKief/vscode-material-icon-theme/pull/1415) -- Update color check workflow [`4e0a489`](https://github.com/PKief/vscode-material-icon-theme/commit/4e0a489) -- feat: hardhat [`#1377`](https://github.com/PKief/vscode-material-icon-theme/pull/1377) -- Add Parcel bundler icon [`#1414`](https://github.com/PKief/vscode-material-icon-theme/pull/1414) -- Improve range of language `Makefile` [`#1409`](https://github.com/PKief/vscode-material-icon-theme/pull/1409) -- Improve build workflow [`#1413`](https://github.com/PKief/vscode-material-icon-theme/pull/1413) -- Adds second extension to the cucumber file type [`#1411`](https://github.com/PKief/vscode-material-icon-theme/pull/1411) -- Add firebase as folder name [`#1410`](https://github.com/PKief/vscode-material-icon-theme/pull/1410) -- Add Svelte-Kit to be included with the folder-svelte [`#1405`](https://github.com/PKief/vscode-material-icon-theme/pull/1405) -- Add `pom.xml` to maven files [`#1398`](https://github.com/PKief/vscode-material-icon-theme/pull/1398) -- Add TS support for capacitor config file [`#1396`](https://github.com/PKief/vscode-material-icon-theme/pull/1396) - -#### [v4.13.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.12.1...v4.13.0) +- Update vscodeignore [`a2b05b62`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a2b05b62) +- Support partials folders [`#1307`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1307) +- [Icon Request] Gleam language [`#1415`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1415) +- Update color check workflow [`4e0a4890`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4e0a4890) +- feat: hardhat [`#1377`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1377) +- Add Parcel bundler icon [`#1414`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1414) +- Improve range of language `Makefile` [`#1409`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1409) +- Improve build workflow [`#1413`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1413) +- Adds second extension to the cucumber file type [`#1411`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1411) +- Add firebase as folder name [`#1410`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1410) +- Add Svelte-Kit to be included with the folder-svelte [`#1405`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1405) +- Add `pom.xml` to maven files [`#1398`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1398) +- Add TS support for capacitor config file [`#1396`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1396) + +#### [v4.13.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.12.1...v4.13.0) > February 11, 2022 -- Improve release workflow [`#1378`](https://github.com/PKief/vscode-material-icon-theme/pull/1378) -- Add new sponsor [`#1389`](https://github.com/PKief/vscode-material-icon-theme/pull/1389) -- Add support for Eleventy's _layouts dir [`#585`](https://github.com/PKief/vscode-material-icon-theme/pull/585) -- Add support for pnpm files [`#584`](https://github.com/PKief/vscode-material-icon-theme/pull/584) -- Add support for Gridsome-related files [`#1383`](https://github.com/PKief/vscode-material-icon-theme/pull/1383) -- Add NextJS folder icons [`#933`](https://github.com/PKief/vscode-material-icon-theme/pull/933) -- fileicon added for go.work file [`#1326`](https://github.com/PKief/vscode-material-icon-theme/pull/1326) -- feat: integrations folder icon [`#1360`](https://github.com/PKief/vscode-material-icon-theme/pull/1360) -- Add Translation for Japanese [`#1379`](https://github.com/PKief/vscode-material-icon-theme/pull/1379) +- Improve release workflow [`#1378`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1378) +- Add new sponsor [`#1389`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1389) +- Add support for Eleventy's _layouts dir [`#585`](https://github.com/material-extensions/vscode-material-icon-theme/pull/585) +- Add support for pnpm files [`#584`](https://github.com/material-extensions/vscode-material-icon-theme/pull/584) +- Add support for Gridsome-related files [`#1383`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1383) +- Add NextJS folder icons [`#933`](https://github.com/material-extensions/vscode-material-icon-theme/pull/933) +- fileicon added for go.work file [`#1326`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1326) +- feat: integrations folder icon [`#1360`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1360) +- Add Translation for Japanese [`#1379`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1379) -#### [v4.12.1](https://github.com/PKief/vscode-material-icon-theme/compare/v4.12.0...v4.12.1) +#### [v4.12.1](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.12.0...v4.12.1) > January 23, 2022 -- Update release workflow [`6ed12b6`](https://github.com/PKief/vscode-material-icon-theme/commit/6ed12b6) +- Update release workflow [`6ed12b60`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6ed12b60) -#### [v4.12.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.11.0...v4.12.0) +#### [v4.12.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.11.0...v4.12.0) > January 23, 2022 -- Automate release process [`#1376`](https://github.com/PKief/vscode-material-icon-theme/pull/1376) -- Add Translation for Traditional Chinese [`#1375`](https://github.com/PKief/vscode-material-icon-theme/pull/1375) -- Refactor/enable strict type checking [`#1334`](https://github.com/PKief/vscode-material-icon-theme/pull/1334) -- feat: blitz [`#1358`](https://github.com/PKief/vscode-material-icon-theme/pull/1358) -- feat: added support for serverless file and folders [`#1352`](https://github.com/PKief/vscode-material-icon-theme/pull/1352) -- feat: remix [`#1357`](https://github.com/PKief/vscode-material-icon-theme/pull/1357) -- feat: cmd [`#1355`](https://github.com/PKief/vscode-material-icon-theme/pull/1355) -- feat: figma [`#1354`](https://github.com/PKief/vscode-material-icon-theme/pull/1354) -- feat: playwright [`#1353`](https://github.com/PKief/vscode-material-icon-theme/pull/1353) -- Add `next.config.mjs` to next file icons [`#1369`](https://github.com/PKief/vscode-material-icon-theme/pull/1369) -- feat: mailers [`#1359`](https://github.com/PKief/vscode-material-icon-theme/pull/1359) -- Add `astro.config.*` files to astro file icons [`#1365`](https://github.com/PKief/vscode-material-icon-theme/pull/1365) -- Add Tobilang icons [`#1337`](https://github.com/PKief/vscode-material-icon-theme/pull/1337) -- Add "renovate-config.json" to renovate filenames [`#1348`](https://github.com/PKief/vscode-material-icon-theme/pull/1348) -- Add target folder icon [`#1338`](https://github.com/PKief/vscode-material-icon-theme/pull/1338) -- Adjust vscodeignore [`5c1d850`](https://github.com/PKief/vscode-material-icon-theme/commit/5c1d850) -- Add SiYuan icon [`#1313`](https://github.com/PKief/vscode-material-icon-theme/pull/1313) -- Added Tauri icon [`#1312`](https://github.com/PKief/vscode-material-icon-theme/pull/1312) -- Add handlers folder icon (Closes #1323) [`#1325`](https://github.com/PKief/vscode-material-icon-theme/pull/1325) - -#### [v4.11.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.10.0...v4.11.0) +- Automate release process [`#1376`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1376) +- Add Translation for Traditional Chinese [`#1375`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1375) +- Refactor/enable strict type checking [`#1334`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1334) +- feat: blitz [`#1358`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1358) +- feat: added support for serverless file and folders [`#1352`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1352) +- feat: remix [`#1357`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1357) +- feat: cmd [`#1355`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1355) +- feat: figma [`#1354`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1354) +- feat: playwright [`#1353`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1353) +- Add `next.config.mjs` to next file icons [`#1369`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1369) +- feat: mailers [`#1359`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1359) +- Add `astro.config.*` files to astro file icons [`#1365`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1365) +- Add Tobilang icons [`#1337`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1337) +- Add "renovate-config.json" to renovate filenames [`#1348`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1348) +- Add target folder icon [`#1338`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1338) +- Adjust vscodeignore [`5c1d8508`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5c1d8508) +- Add SiYuan icon [`#1313`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1313) +- Added Tauri icon [`#1312`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1312) +- Add handlers folder icon (Closes #1323) [`#1325`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1325) + +#### [v4.11.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.10.0...v4.11.0) > November 25, 2021 -- Add file icon for Netin Diagnotic System Template file [`#1314`](https://github.com/PKief/vscode-material-icon-theme/pull/1314) -- Add Angular folder icon [`90cc462`](https://github.com/PKief/vscode-material-icon-theme/commit/90cc462) -- Update color of dependabot icon [`b866f71`](https://github.com/PKief/vscode-material-icon-theme/commit/b866f71) -- Support .cjs in stylelint [`#1315`](https://github.com/PKief/vscode-material-icon-theme/pull/1315) -- feat: add cjs and ts endings to commitlint [`#1304`](https://github.com/PKief/vscode-material-icon-theme/pull/1304) -- Add Resolver folder icon (Closes #1295) [`#1297`](https://github.com/PKief/vscode-material-icon-theme/pull/1297) -- Resize sponsor logos [`f8301d1`](https://github.com/PKief/vscode-material-icon-theme/commit/f8301d1) -- Add more combinations of nestjs e2e jest config filenames [`#1287`](https://github.com/PKief/vscode-material-icon-theme/pull/1287) -- Add java folder icon [`#1285`](https://github.com/PKief/vscode-material-icon-theme/pull/1285) -- add git icon to .gitinclude file [`#1286`](https://github.com/PKief/vscode-material-icon-theme/pull/1286) -- Apply minecraft icon to all Minecraft files [`#1283`](https://github.com/PKief/vscode-material-icon-theme/pull/1283) -- Add "tune" filename for .env.stage [`#1282`](https://github.com/PKief/vscode-material-icon-theme/pull/1282) -- Fix code formatting issue [`953c309`](https://github.com/PKief/vscode-material-icon-theme/commit/953c309) -- Add .pubignore (Closes #1273) [`008de61`](https://github.com/PKief/vscode-material-icon-theme/commit/008de61) -- Update lang-es.ts [`#1271`](https://github.com/PKief/vscode-material-icon-theme/pull/1271) -- Add Redux selector icon and folder icon [`#1247`](https://github.com/PKief/vscode-material-icon-theme/pull/1247) -- Fix linting issue [`d81b617`](https://github.com/PKief/vscode-material-icon-theme/commit/d81b617) -- feat: added icon for the lighthouse config files [`#1215`](https://github.com/PKief/vscode-material-icon-theme/pull/1215) -- Routes pkg to packages icon by default (4 Go devs) [`#1256`](https://github.com/PKief/vscode-material-icon-theme/pull/1256) -- Added queue folder icon [`#1159`](https://github.com/PKief/vscode-material-icon-theme/pull/1159) -- add dependabot icon [`#1248`](https://github.com/PKief/vscode-material-icon-theme/pull/1248) -- Remove hardcoded 'm' file icon association from C (Closes #1243) [`135cce3`](https://github.com/PKief/vscode-material-icon-theme/commit/135cce3) -- Add nxignore icon association [`828083e`](https://github.com/PKief/vscode-material-icon-theme/commit/828083e) -- feat: svgr [`#1218`](https://github.com/PKief/vscode-material-icon-theme/pull/1218) -- Update color of cypress icons [`464953c`](https://github.com/PKief/vscode-material-icon-theme/commit/464953c) -- Add heex file extension [`#1240`](https://github.com/PKief/vscode-material-icon-theme/pull/1240) -- Add template file icon (Closes #1185) [`#1224`](https://github.com/PKief/vscode-material-icon-theme/pull/1224) -- feat: cypress [`#1221`](https://github.com/PKief/vscode-material-icon-theme/pull/1221) -- feat: feat: add graphql config file names [`#1231`](https://github.com/PKief/vscode-material-icon-theme/pull/1231) -- Icon request template (Closes #1225) [`#1226`](https://github.com/PKief/vscode-material-icon-theme/pull/1226) - -#### [v4.10.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.9.0...v4.10.0) +- Add file icon for Netin Diagnotic System Template file [`#1314`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1314) +- Add Angular folder icon [`90cc4628`](https://github.com/material-extensions/vscode-material-icon-theme/commit/90cc4628) +- Update color of dependabot icon [`b866f710`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b866f710) +- Support .cjs in stylelint [`#1315`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1315) +- feat: add cjs and ts endings to commitlint [`#1304`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1304) +- Add Resolver folder icon (Closes #1295) [`#1297`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1297) +- Resize sponsor logos [`f8301d10`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f8301d10) +- Add more combinations of nestjs e2e jest config filenames [`#1287`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1287) +- Add java folder icon [`#1285`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1285) +- add git icon to .gitinclude file [`#1286`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1286) +- Apply minecraft icon to all Minecraft files [`#1283`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1283) +- Add "tune" filename for .env.stage [`#1282`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1282) +- Fix code formatting issue [`953c3096`](https://github.com/material-extensions/vscode-material-icon-theme/commit/953c3096) +- Add .pubignore (Closes #1273) [`008de61e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/008de61e) +- Update lang-es.ts [`#1271`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1271) +- Add Redux selector icon and folder icon [`#1247`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1247) +- Fix linting issue [`d81b6177`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d81b6177) +- feat: added icon for the lighthouse config files [`#1215`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1215) +- Routes pkg to packages icon by default (4 Go devs) [`#1256`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1256) +- Added queue folder icon [`#1159`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1159) +- add dependabot icon [`#1248`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1248) +- Remove hardcoded 'm' file icon association from C (Closes #1243) [`135cce30`](https://github.com/material-extensions/vscode-material-icon-theme/commit/135cce30) +- Add nxignore icon association [`828083ec`](https://github.com/material-extensions/vscode-material-icon-theme/commit/828083ec) +- feat: svgr [`#1218`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1218) +- Update color of cypress icons [`464953cc`](https://github.com/material-extensions/vscode-material-icon-theme/commit/464953cc) +- Add heex file extension [`#1240`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1240) +- Add template file icon (Closes #1185) [`#1224`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1224) +- feat: cypress [`#1221`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1221) +- feat: feat: add graphql config file names [`#1231`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1231) +- Icon request template (Closes #1225) [`#1226`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1226) + +#### [v4.10.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.9.0...v4.10.0) > August 24, 2021 -- Optimize extension for web usage [`#1219`](https://github.com/PKief/vscode-material-icon-theme/pull/1219) -- Update dinophp file icon [`c4abb04`](https://github.com/PKief/vscode-material-icon-theme/commit/c4abb04) -- dinophp file icon [`#1186`](https://github.com/PKief/vscode-material-icon-theme/pull/1186) -- Update odin color [`ef27d57`](https://github.com/PKief/vscode-material-icon-theme/commit/ef27d57) -- Add support for the Odin programming language [`#1222`](https://github.com/PKief/vscode-material-icon-theme/pull/1222) -- feat: rome.json [`#1214`](https://github.com/PKief/vscode-material-icon-theme/pull/1214) -- Add Vercel folder icon [`#1211`](https://github.com/PKief/vscode-material-icon-theme/pull/1211) -- feat: NextJS [`#1209`](https://github.com/PKief/vscode-material-icon-theme/pull/1209) -- Add .mjmlconfig file support (Closes #1204) [`0b40fd8`](https://github.com/PKief/vscode-material-icon-theme/commit/0b40fd8) -- Add wolfram language (Closes #1176) [`e080095`](https://github.com/PKief/vscode-material-icon-theme/commit/e080095) -- Add Artistic Style icon (Closes #1187) [`#1203`](https://github.com/PKief/vscode-material-icon-theme/pull/1203) -- Optimize SVG icons with svgo [`cff00b4`](https://github.com/PKief/vscode-material-icon-theme/commit/cff00b4) -- Add tsconfig.lib.json [`5f2be65`](https://github.com/PKief/vscode-material-icon-theme/commit/5f2be65) -- Svgo optimize - sample [`#1129`](https://github.com/PKief/vscode-material-icon-theme/pull/1129) -- Add `mjs/cjs` to `vite.config.*` [`#1190`](https://github.com/PKief/vscode-material-icon-theme/pull/1190) -- We need `.rubocop_todo.yml` as well... [`#1192`](https://github.com/PKief/vscode-material-icon-theme/pull/1192) -- Update sponsor image source [`cb3ea94`](https://github.com/PKief/vscode-material-icon-theme/commit/cb3ea94) -- Use material colors and minify SVG [`344e0fa`](https://github.com/PKief/vscode-material-icon-theme/commit/344e0fa) -- Minify SVG files [`3d06301`](https://github.com/PKief/vscode-material-icon-theme/commit/3d06301) -- Minify SVG files [`4063045`](https://github.com/PKief/vscode-material-icon-theme/commit/4063045) -- Bake transforms that SVGO cannot parse [`0e061af`](https://github.com/PKief/vscode-material-icon-theme/commit/0e061af) - -#### [v4.9.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.8.0...v4.9.0) +- Optimize extension for web usage [`#1219`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1219) +- Update dinophp file icon [`c4abb04a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c4abb04a) +- dinophp file icon [`#1186`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1186) +- Update odin color [`ef27d574`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ef27d574) +- Add support for the Odin programming language [`#1222`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1222) +- feat: rome.json [`#1214`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1214) +- Add Vercel folder icon [`#1211`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1211) +- feat: NextJS [`#1209`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1209) +- Add .mjmlconfig file support (Closes #1204) [`0b40fd80`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0b40fd80) +- Add wolfram language (Closes #1176) [`e0800956`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e0800956) +- Add Artistic Style icon (Closes #1187) [`#1203`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1203) +- Optimize SVG icons with svgo [`cff00b43`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cff00b43) +- Add tsconfig.lib.json [`5f2be65d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5f2be65d) +- Svgo optimize - sample [`#1129`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1129) +- Add `mjs/cjs` to `vite.config.*` [`#1190`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1190) +- We need `.rubocop_todo.yml` as well... [`#1192`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1192) +- Update sponsor image source [`cb3ea94f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cb3ea94f) +- Use material colors and minify SVG [`344e0fa1`](https://github.com/material-extensions/vscode-material-icon-theme/commit/344e0fa1) +- Minify SVG files [`3d06301d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3d06301d) +- Minify SVG files [`40630458`](https://github.com/material-extensions/vscode-material-icon-theme/commit/40630458) +- Bake transforms that SVGO cannot parse [`0e061aff`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0e061aff) + +#### [v4.9.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.8.0...v4.9.0) > August 5, 2021 -- Update color of JSON icon [`cf83704`](https://github.com/PKief/vscode-material-icon-theme/commit/cf83704) -- Remove width and height properties of sentry icon [`15c4ed9`](https://github.com/PKief/vscode-material-icon-theme/commit/15c4ed9) -- Update sponsor link [`cd5f68c`](https://github.com/PKief/vscode-material-icon-theme/commit/cd5f68c) -- Add Teal file icon (Closes #1180) [`#1182`](https://github.com/PKief/vscode-material-icon-theme/pull/1182) -- Reduce size of logo [`26d87fa`](https://github.com/PKief/vscode-material-icon-theme/commit/26d87fa) -- Add <br> tag [`def38ec`](https://github.com/PKief/vscode-material-icon-theme/commit/def38ec) -- Add sponsor image to readme [`9e9e909`](https://github.com/PKief/vscode-material-icon-theme/commit/9e9e909) -- Add XML support for phpcs.xml.dist.sample [`#1179`](https://github.com/PKief/vscode-material-icon-theme/pull/1179) -- Update json icon [`#1175`](https://github.com/PKief/vscode-material-icon-theme/pull/1175) -- Add interface folder icon (Closes #513) [`7286bbe`](https://github.com/PKief/vscode-material-icon-theme/commit/7286bbe) -- Add dmn file extension [`7aa430c`](https://github.com/PKief/vscode-material-icon-theme/commit/7aa430c) -- More filenames support [`#1170`](https://github.com/PKief/vscode-material-icon-theme/pull/1170) -- Add lerna.json icon [`#956`](https://github.com/PKief/vscode-material-icon-theme/pull/956) -- Add postcss.config.cjs file name [`#1168`](https://github.com/PKief/vscode-material-icon-theme/pull/1168) -- Add more tsconfig file icon associations [`463d919`](https://github.com/PKief/vscode-material-icon-theme/commit/463d919) -- Add Rubocop [`#1141`](https://github.com/PKief/vscode-material-icon-theme/pull/1141) -- Add Coala icon [`#1154`](https://github.com/PKief/vscode-material-icon-theme/pull/1154) -- Allow folder icon for patches collection [`#1164`](https://github.com/PKief/vscode-material-icon-theme/pull/1164) -- Add tsconfig.eslint.json to tsconfig.json [`#1147`](https://github.com/PKief/vscode-material-icon-theme/pull/1147) -- Fix linting issue [`739bada`](https://github.com/PKief/vscode-material-icon-theme/commit/739bada) -- Add "module", "modules" to "folder-plugin" [`#1083`](https://github.com/PKief/vscode-material-icon-theme/pull/1083) -- add vlang [`#1009`](https://github.com/PKief/vscode-material-icon-theme/pull/1009) -- Update color of context folder icon [`8a982f9`](https://github.com/PKief/vscode-material-icon-theme/commit/8a982f9) -- added icon for context [`#1106`](https://github.com/PKief/vscode-material-icon-theme/pull/1106) -- Added renovate bot icon [`#1139`](https://github.com/PKief/vscode-material-icon-theme/pull/1139) -- Update Flash and SWC icons [`#1157`](https://github.com/PKief/vscode-material-icon-theme/pull/1157) -- Add PHPUnit icon [`#1053`](https://github.com/PKief/vscode-material-icon-theme/pull/1053) -- Update color of yaml icon (Closes #1142) [`f0b4dba`](https://github.com/PKief/vscode-material-icon-theme/commit/f0b4dba) -- Add Jest and TSConfig from Nest template [`#1144`](https://github.com/PKief/vscode-material-icon-theme/pull/1144) -- Add support for git-hooks as console file icon [`#1138`](https://github.com/PKief/vscode-material-icon-theme/pull/1138) - -#### [v4.8.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.7.0...v4.8.0) +- Update color of JSON icon [`cf837049`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cf837049) +- Remove width and height properties of sentry icon [`15c4ed99`](https://github.com/material-extensions/vscode-material-icon-theme/commit/15c4ed99) +- Update sponsor link [`cd5f68ca`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cd5f68ca) +- Add Teal file icon (Closes #1180) [`#1182`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1182) +- Reduce size of logo [`26d87fae`](https://github.com/material-extensions/vscode-material-icon-theme/commit/26d87fae) +- Add <br> tag [`def38ec0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/def38ec0) +- Add sponsor image to readme [`9e9e909a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9e9e909a) +- Add XML support for phpcs.xml.dist.sample [`#1179`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1179) +- Update json icon [`#1175`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1175) +- Add interface folder icon (Closes #513) [`7286bbee`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7286bbee) +- Add dmn file extension [`7aa430c6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7aa430c6) +- More filenames support [`#1170`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1170) +- Add lerna.json icon [`#956`](https://github.com/material-extensions/vscode-material-icon-theme/pull/956) +- Add postcss.config.cjs file name [`#1168`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1168) +- Add more tsconfig file icon associations [`463d9194`](https://github.com/material-extensions/vscode-material-icon-theme/commit/463d9194) +- Add Rubocop [`#1141`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1141) +- Add Coala icon [`#1154`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1154) +- Allow folder icon for patches collection [`#1164`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1164) +- Add tsconfig.eslint.json to tsconfig.json [`#1147`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1147) +- Fix linting issue [`739badab`](https://github.com/material-extensions/vscode-material-icon-theme/commit/739badab) +- Add "module", "modules" to "folder-plugin" [`#1083`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1083) +- add vlang [`#1009`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1009) +- Update color of context folder icon [`8a982f91`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8a982f91) +- added icon for context [`#1106`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1106) +- Added renovate bot icon [`#1139`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1139) +- Update Flash and SWC icons [`#1157`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1157) +- Add PHPUnit icon [`#1053`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1053) +- Update color of yaml icon (Closes #1142) [`f0b4dbad`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f0b4dbad) +- Add Jest and TSConfig from Nest template [`#1144`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1144) +- Add support for git-hooks as console file icon [`#1138`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1138) + +#### [v4.8.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.7.0...v4.8.0) > July 4, 2021 -- Extend prettier config file options (Closes #1067) [`23e9d6a`](https://github.com/PKief/vscode-material-icon-theme/commit/23e9d6a) -- Add support for global git ignorance file [`#1131`](https://github.com/PKief/vscode-material-icon-theme/pull/1131) -- Add sponsor logo [`45d40ba`](https://github.com/PKief/vscode-material-icon-theme/commit/45d40ba) -- Add Maven icon [`#1098`](https://github.com/PKief/vscode-material-icon-theme/pull/1098) -- Add missing module prettier [`d80797a`](https://github.com/PKief/vscode-material-icon-theme/commit/d80797a) -- Fix linting issues [`f06a8aa`](https://github.com/PKief/vscode-material-icon-theme/commit/f06a8aa) -- Remove unused webpack plugin which causes error [`6e56040`](https://github.com/PKief/vscode-material-icon-theme/commit/6e56040) -- Update actions [`a7aa37c`](https://github.com/PKief/vscode-material-icon-theme/commit/a7aa37c) -- Improve generation of icon preview images [`cd91ac4`](https://github.com/PKief/vscode-material-icon-theme/commit/cd91ac4) -- Add yarn folder icon (Closes #998) [`bd77a62`](https://github.com/PKief/vscode-material-icon-theme/commit/bd77a62) -- Format code on save [`590063c`](https://github.com/PKief/vscode-material-icon-theme/commit/590063c) -- Add .env.dist file icon support [`#1126`](https://github.com/PKief/vscode-material-icon-theme/pull/1126) -- Add PHP CS Fixer icon [`#1052`](https://github.com/PKief/vscode-material-icon-theme/pull/1052) -- Add Ada icon [`#1099`](https://github.com/PKief/vscode-material-icon-theme/pull/1099) -- Add folder `.wordpress-org` support [`#1114`](https://github.com/PKief/vscode-material-icon-theme/pull/1114) -- Add support for `sample-data` folder [`#1115`](https://github.com/PKief/vscode-material-icon-theme/pull/1115) -- Add XML support for PHP_CodeSniffer ruleset file [`#1116`](https://github.com/PKief/vscode-material-icon-theme/pull/1116) -- Add support for storybook directory [`#1118`](https://github.com/PKief/vscode-material-icon-theme/pull/1118) -- Add ESLint config for JSDoc documentation [`#1117`](https://github.com/PKief/vscode-material-icon-theme/pull/1117) -- Add Ember icon [`#1097`](https://github.com/PKief/vscode-material-icon-theme/pull/1097) -- Update folderIcons.ts [`#1113`](https://github.com/PKief/vscode-material-icon-theme/pull/1113) -- Added horusec-config file icon [`#1081`](https://github.com/PKief/vscode-material-icon-theme/pull/1081) -- Add snowpack [`#1112`](https://github.com/PKief/vscode-material-icon-theme/pull/1112) -- Assign icon for `tsconfig.base.json` [`#1109`](https://github.com/PKief/vscode-material-icon-theme/pull/1109) -- Add Babel transform and Jest config files support [`#1107`](https://github.com/PKief/vscode-material-icon-theme/pull/1107) -- Add eslint config for markdown documentation [`#1103`](https://github.com/PKief/vscode-material-icon-theme/pull/1103) -- Update for yaml consistency with xml [`#1049`](https://github.com/PKief/vscode-material-icon-theme/pull/1049) -- Link RestApi folder icon [`#1093`](https://github.com/PKief/vscode-material-icon-theme/pull/1093) -- Update docker file icon (Closes #1100) [`8b2a3bc`](https://github.com/PKief/vscode-material-icon-theme/commit/8b2a3bc) -- Add pink elephant icon (Closes #1071) [`cc09a0d`](https://github.com/PKief/vscode-material-icon-theme/commit/cc09a0d) -- Add Robots icon [`#1054`](https://github.com/PKief/vscode-material-icon-theme/pull/1054) -- Add Java '.jar' file icons [`#1074`](https://github.com/PKief/vscode-material-icon-theme/pull/1074) -- Update FUNDING.yml [`72ecc5b`](https://github.com/PKief/vscode-material-icon-theme/commit/72ecc5b) -- Add picture(s) folder icon (References #1070) [`eb7cf6d`](https://github.com/PKief/vscode-material-icon-theme/commit/eb7cf6d) -- Add vetur.config.* icon associations [`#1055`](https://github.com/PKief/vscode-material-icon-theme/pull/1055) -- Add tsconfig icons (closes #499) [`#1066`](https://github.com/PKief/vscode-material-icon-theme/pull/1066) -- Adding new extension of storybook CSF format for svelte [`#1064`](https://github.com/PKief/vscode-material-icon-theme/pull/1064) -- Added __stories__ folder and .stories.mdx file [`#1048`](https://github.com/PKief/vscode-material-icon-theme/pull/1048) -- Add artisan icon association [`#1057`](https://github.com/PKief/vscode-material-icon-theme/pull/1057) -- Add webpack.mix.js icon association [`#1056`](https://github.com/PKief/vscode-material-icon-theme/pull/1056) -- Add Hex file icon [`#1062`](https://github.com/PKief/vscode-material-icon-theme/pull/1062) -- Add Java '.class' file icons [`#1060`](https://github.com/PKief/vscode-material-icon-theme/pull/1060) - -#### [v4.7.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.6.0...v4.7.0) +- Extend prettier config file options (Closes #1067) [`23e9d6a6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/23e9d6a6) +- Add support for global git ignorance file [`#1131`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1131) +- Add sponsor logo [`45d40ba3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/45d40ba3) +- Add Maven icon [`#1098`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1098) +- Add missing module prettier [`d80797a3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d80797a3) +- Fix linting issues [`f06a8aaf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f06a8aaf) +- Remove unused webpack plugin which causes error [`6e56040d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6e56040d) +- Update actions [`a7aa37c2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a7aa37c2) +- Improve generation of icon preview images [`cd91ac41`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cd91ac41) +- Add yarn folder icon (Closes #998) [`bd77a62a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bd77a62a) +- Format code on save [`590063c2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/590063c2) +- Add .env.dist file icon support [`#1126`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1126) +- Add PHP CS Fixer icon [`#1052`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1052) +- Add Ada icon [`#1099`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1099) +- Add folder `.wordpress-org` support [`#1114`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1114) +- Add support for `sample-data` folder [`#1115`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1115) +- Add XML support for PHP_CodeSniffer ruleset file [`#1116`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1116) +- Add support for storybook directory [`#1118`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1118) +- Add ESLint config for JSDoc documentation [`#1117`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1117) +- Add Ember icon [`#1097`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1097) +- Update folderIcons.ts [`#1113`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1113) +- Added horusec-config file icon [`#1081`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1081) +- Add snowpack [`#1112`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1112) +- Assign icon for `tsconfig.base.json` [`#1109`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1109) +- Add Babel transform and Jest config files support [`#1107`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1107) +- Add eslint config for markdown documentation [`#1103`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1103) +- Update for yaml consistency with xml [`#1049`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1049) +- Link RestApi folder icon [`#1093`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1093) +- Update docker file icon (Closes #1100) [`8b2a3bca`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8b2a3bca) +- Add pink elephant icon (Closes #1071) [`cc09a0d4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cc09a0d4) +- Add Robots icon [`#1054`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1054) +- Add Java '.jar' file icons [`#1074`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1074) +- Update FUNDING.yml [`72ecc5b5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/72ecc5b5) +- Add picture(s) folder icon (References #1070) [`eb7cf6d7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/eb7cf6d7) +- Add vetur.config.* icon associations [`#1055`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1055) +- Add tsconfig icons (closes #499) [`#1066`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1066) +- Adding new extension of storybook CSF format for svelte [`#1064`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1064) +- Added __stories__ folder and .stories.mdx file [`#1048`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1048) +- Add artisan icon association [`#1057`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1057) +- Add webpack.mix.js icon association [`#1056`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1056) +- Add Hex file icon [`#1062`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1062) +- Add Java '.class' file icons [`#1060`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1060) + +#### [v4.7.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.6.0...v4.7.0) > May 24, 2021 -- added .env.template to .env recognized filenames [`#1033`](https://github.com/PKief/vscode-material-icon-theme/pull/1033) -- feat: recognize `.venv/` as env folder by default [`#1044`](https://github.com/PKief/vscode-material-icon-theme/pull/1044) -- Update color of sentry file icon (References #1043) [`36888ce`](https://github.com/PKief/vscode-material-icon-theme/commit/36888ce) -- feat: :art: Add sentry icon for .sentryclirc file [`#1043`](https://github.com/PKief/vscode-material-icon-theme/pull/1043) -- Set main as default branch [`068a3cc`](https://github.com/PKief/vscode-material-icon-theme/commit/068a3cc) -- Reducing the size of the Gitpod icon [`466780f`](https://github.com/PKief/vscode-material-icon-theme/commit/466780f) -- Update Gitpod icon [`#1034`](https://github.com/PKief/vscode-material-icon-theme/pull/1034) -- Add .bazelversion file icon association [`88cac75`](https://github.com/PKief/vscode-material-icon-theme/commit/88cac75) -- feat: add `.windi` file extension [`#1041`](https://github.com/PKief/vscode-material-icon-theme/pull/1041) -- add tailwindcss icon to `tailwind.config.cjs` [`#1040`](https://github.com/PKief/vscode-material-icon-theme/pull/1040) -- Add additional folder names for the contract folder icon [`a8768ce`](https://github.com/PKief/vscode-material-icon-theme/commit/a8768ce) -- Support virtual workspaces (Closes #1036) [`026457b`](https://github.com/PKief/vscode-material-icon-theme/commit/026457b) -- Add contract folder icon (Closes #1035) [`7fcd799`](https://github.com/PKief/vscode-material-icon-theme/commit/7fcd799) -- Add pl file extension to prolog file icon [`70cf73b`](https://github.com/PKief/vscode-material-icon-theme/commit/70cf73b) -- Support extension in untrusted workspaces (Closes #1032) [`8ec317e`](https://github.com/PKief/vscode-material-icon-theme/commit/8ec317e) -- Add new folder icons (Closes #907) [`4b5b40d`](https://github.com/PKief/vscode-material-icon-theme/commit/4b5b40d) -- Update storybook and add folder-storybook [`#1020`](https://github.com/PKief/vscode-material-icon-theme/pull/1020) -- Add `.astro` icon [`#1025`](https://github.com/PKief/vscode-material-icon-theme/pull/1025) -- Fix unclosed bold tag [`21b6cdb`](https://github.com/PKief/vscode-material-icon-theme/commit/21b6cdb) -- Fix description of how to use custom icons (Closes #984, 1004) [`a06913f`](https://github.com/PKief/vscode-material-icon-theme/commit/a06913f) -- Fix description of how to use custom icons (Closes #1004) [`80c551b`](https://github.com/PKief/vscode-material-icon-theme/commit/80c551b) -- Align circleci folder with github [`#1021`](https://github.com/PKief/vscode-material-icon-theme/pull/1021) -- svgo icon [`#1022`](https://github.com/PKief/vscode-material-icon-theme/pull/1022) -- add 'inc' to 'folder-include' folder names [`#1018`](https://github.com/PKief/vscode-material-icon-theme/pull/1018) -- Add chess icons [`#1010`](https://github.com/PKief/vscode-material-icon-theme/pull/1010) -- Add Husky folder [`#990`](https://github.com/PKief/vscode-material-icon-theme/pull/990) -- Add gemini icon [`#1014`](https://github.com/PKief/vscode-material-icon-theme/pull/1014) -- Add .lintstagedrc icon association [`d632c2c`](https://github.com/PKief/vscode-material-icon-theme/commit/d632c2c) -- Vuepress [`#981`](https://github.com/PKief/vscode-material-icon-theme/pull/981) -- Add more android file extensions [`#1012`](https://github.com/PKief/vscode-material-icon-theme/pull/1012) -- feat: new windicss icon [`#1007`](https://github.com/PKief/vscode-material-icon-theme/pull/1007) -- Add icon association for copyright [`60dfe65`](https://github.com/PKief/vscode-material-icon-theme/commit/60dfe65) -- Add lilypond file icon (Closes #987) [`#1006`](https://github.com/PKief/vscode-material-icon-theme/pull/1006) -- .pbm, .pgm, .ppm, .pnm extensions added as image files [`#989`](https://github.com/PKief/vscode-material-icon-theme/pull/989) -- Add wav file extension to audio icon [`a6b3618`](https://github.com/PKief/vscode-material-icon-theme/commit/a6b3618) -- Add 'types' folder to folder-typescript [`#965`](https://github.com/PKief/vscode-material-icon-theme/pull/965) -- Add envs folder association (Closes #988) [`c02581c`](https://github.com/PKief/vscode-material-icon-theme/commit/c02581c) -- Show `svelte.config.cjs` as svelte file [`#980`](https://github.com/PKief/vscode-material-icon-theme/pull/980) -- Add TS support for tailwind config file [`#985`](https://github.com/PKief/vscode-material-icon-theme/pull/985) -- Add sc file extension for scala file icon [`30ab89a`](https://github.com/PKief/vscode-material-icon-theme/commit/30ab89a) -- Add scala file extension (Fixes #976) [`a5ec66b`](https://github.com/PKief/vscode-material-icon-theme/commit/a5ec66b) - -#### [v4.6.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.5.0...v4.6.0) +- added .env.template to .env recognized filenames [`#1033`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1033) +- feat: recognize `.venv/` as env folder by default [`#1044`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1044) +- Update color of sentry file icon (References #1043) [`36888ce9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/36888ce9) +- feat: :art: Add sentry icon for .sentryclirc file [`#1043`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1043) +- Set main as default branch [`068a3ccb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/068a3ccb) +- Reducing the size of the Gitpod icon [`466780f2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/466780f2) +- Update Gitpod icon [`#1034`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1034) +- Add .bazelversion file icon association [`88cac752`](https://github.com/material-extensions/vscode-material-icon-theme/commit/88cac752) +- feat: add `.windi` file extension [`#1041`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1041) +- add tailwindcss icon to `tailwind.config.cjs` [`#1040`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1040) +- Add additional folder names for the contract folder icon [`a8768cef`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a8768cef) +- Support virtual workspaces (Closes #1036) [`026457b0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/026457b0) +- Add contract folder icon (Closes #1035) [`7fcd799a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7fcd799a) +- Add pl file extension to prolog file icon [`70cf73b4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/70cf73b4) +- Support extension in untrusted workspaces (Closes #1032) [`8ec317e5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8ec317e5) +- Add new folder icons (Closes #907) [`4b5b40da`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4b5b40da) +- Update storybook and add folder-storybook [`#1020`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1020) +- Add `.astro` icon [`#1025`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1025) +- Fix unclosed bold tag [`21b6cdbe`](https://github.com/material-extensions/vscode-material-icon-theme/commit/21b6cdbe) +- Fix description of how to use custom icons (Closes #984, 1004) [`a06913f7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a06913f7) +- Fix description of how to use custom icons (Closes #1004) [`80c551ba`](https://github.com/material-extensions/vscode-material-icon-theme/commit/80c551ba) +- Align circleci folder with github [`#1021`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1021) +- svgo icon [`#1022`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1022) +- add 'inc' to 'folder-include' folder names [`#1018`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1018) +- Add chess icons [`#1010`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1010) +- Add Husky folder [`#990`](https://github.com/material-extensions/vscode-material-icon-theme/pull/990) +- Add gemini icon [`#1014`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1014) +- Add .lintstagedrc icon association [`d632c2c5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d632c2c5) +- Vuepress [`#981`](https://github.com/material-extensions/vscode-material-icon-theme/pull/981) +- Add more android file extensions [`#1012`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1012) +- feat: new windicss icon [`#1007`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1007) +- Add icon association for copyright [`60dfe657`](https://github.com/material-extensions/vscode-material-icon-theme/commit/60dfe657) +- Add lilypond file icon (Closes #987) [`#1006`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1006) +- .pbm, .pgm, .ppm, .pnm extensions added as image files [`#989`](https://github.com/material-extensions/vscode-material-icon-theme/pull/989) +- Add wav file extension to audio icon [`a6b36189`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a6b36189) +- Add 'types' folder to folder-typescript [`#965`](https://github.com/material-extensions/vscode-material-icon-theme/pull/965) +- Add envs folder association (Closes #988) [`c02581ce`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c02581ce) +- Show `svelte.config.cjs` as svelte file [`#980`](https://github.com/material-extensions/vscode-material-icon-theme/pull/980) +- Add TS support for tailwind config file [`#985`](https://github.com/material-extensions/vscode-material-icon-theme/pull/985) +- Add sc file extension for scala file icon [`30ab89a9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/30ab89a9) +- Add scala file extension (Fixes #976) [`a5ec66bb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a5ec66bb) + +#### [v4.6.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.5.0...v4.6.0) > March 20, 2021 -- Update Contributor guidance with a couple suggestions [`#970`](https://github.com/PKief/vscode-material-icon-theme/pull/970) -- Add proto icons (#963) [`#902`](https://github.com/PKief/vscode-material-icon-theme/pull/902) -- Nuxt icons [`#824`](https://github.com/PKief/vscode-material-icon-theme/pull/824) -- Add sponsor link to readme [`6604dfc`](https://github.com/PKief/vscode-material-icon-theme/commit/6604dfc) -- Update FUNDING.yml [`215ef62`](https://github.com/PKief/vscode-material-icon-theme/commit/215ef62) -- Add textlint file icon (Closes #967) [`3ad84a1`](https://github.com/PKief/vscode-material-icon-theme/commit/3ad84a1) -- Add Kusto Query Language (KQL) [`#968`](https://github.com/PKief/vscode-material-icon-theme/pull/968) -- ADD: folder name for audio and docs [`#964`](https://github.com/PKief/vscode-material-icon-theme/pull/964) -- Add Icon for windicss [`#960`](https://github.com/PKief/vscode-material-icon-theme/pull/960) -- Add '.terraform' folder name support [`#957`](https://github.com/PKief/vscode-material-icon-theme/pull/957) -- Adding support for Vitejs [`#948`](https://github.com/PKief/vscode-material-icon-theme/pull/948) -- Add variations to docker compose [`#953`](https://github.com/PKief/vscode-material-icon-theme/pull/953) -- Allow language associations to override the js file extension (Fixes #943) [`d1931be`](https://github.com/PKief/vscode-material-icon-theme/commit/d1931be) -- added support for OPA (Open Policy Agent) [`#949`](https://github.com/PKief/vscode-material-icon-theme/pull/949) -- Add webpack.prod.config.js [`97932ed`](https://github.com/PKief/vscode-material-icon-theme/commit/97932ed) -- Added cobol folder icons [`#940`](https://github.com/PKief/vscode-material-icon-theme/pull/940) -- Add Elyra pipelines icon [`#941`](https://github.com/PKief/vscode-material-icon-theme/pull/941) -- Added pwa folder icons [`#939`](https://github.com/PKief/vscode-material-icon-theme/pull/939) -- Update CONTRIBUTING.md [`f244ed4`](https://github.com/PKief/vscode-material-icon-theme/commit/f244ed4) -- Update CONTRIBUTING.md [`c9aac68`](https://github.com/PKief/vscode-material-icon-theme/commit/c9aac68) -- Update file associations documentation (References #928) [`f0dc223`](https://github.com/PKief/vscode-material-icon-theme/commit/f0dc223) -- Add .sqlite3 and .db3 extensions [`#929`](https://github.com/PKief/vscode-material-icon-theme/pull/929) - -#### [v4.5.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.4.0...v4.5.0) +- Update Contributor guidance with a couple suggestions [`#970`](https://github.com/material-extensions/vscode-material-icon-theme/pull/970) +- Add proto icons (#963) [`#902`](https://github.com/material-extensions/vscode-material-icon-theme/pull/902) +- Nuxt icons [`#824`](https://github.com/material-extensions/vscode-material-icon-theme/pull/824) +- Add sponsor link to readme [`6604dfc1`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6604dfc1) +- Update FUNDING.yml [`215ef624`](https://github.com/material-extensions/vscode-material-icon-theme/commit/215ef624) +- Add textlint file icon (Closes #967) [`3ad84a1b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3ad84a1b) +- Add Kusto Query Language (KQL) [`#968`](https://github.com/material-extensions/vscode-material-icon-theme/pull/968) +- ADD: folder name for audio and docs [`#964`](https://github.com/material-extensions/vscode-material-icon-theme/pull/964) +- Add Icon for windicss [`#960`](https://github.com/material-extensions/vscode-material-icon-theme/pull/960) +- Add '.terraform' folder name support [`#957`](https://github.com/material-extensions/vscode-material-icon-theme/pull/957) +- Adding support for Vitejs [`#948`](https://github.com/material-extensions/vscode-material-icon-theme/pull/948) +- Add variations to docker compose [`#953`](https://github.com/material-extensions/vscode-material-icon-theme/pull/953) +- Allow language associations to override the js file extension (Fixes #943) [`d1931bee`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d1931bee) +- added support for OPA (Open Policy Agent) [`#949`](https://github.com/material-extensions/vscode-material-icon-theme/pull/949) +- Add webpack.prod.config.js [`97932ed0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/97932ed0) +- Added cobol folder icons [`#940`](https://github.com/material-extensions/vscode-material-icon-theme/pull/940) +- Add Elyra pipelines icon [`#941`](https://github.com/material-extensions/vscode-material-icon-theme/pull/941) +- Added pwa folder icons [`#939`](https://github.com/material-extensions/vscode-material-icon-theme/pull/939) +- Update CONTRIBUTING.md [`f244ed43`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f244ed43) +- Update CONTRIBUTING.md [`c9aac688`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c9aac688) +- Update file associations documentation (References #928) [`f0dc2238`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f0dc2238) +- Add .sqlite3 and .db3 extensions [`#929`](https://github.com/material-extensions/vscode-material-icon-theme/pull/929) + +#### [v4.5.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.4.0...v4.5.0) > January 10, 2021 -- Update PostCSS file icon (Closes #926) [`472823f`](https://github.com/PKief/vscode-material-icon-theme/commit/472823f) -- Add related extensions section [`4777173`](https://github.com/PKief/vscode-material-icon-theme/commit/4777173) -- Add folder-privileged [`#831`](https://github.com/PKief/vscode-material-icon-theme/pull/831) -- Add quasar file and folder icon (Closes #920) [`b8a1fc6`](https://github.com/PKief/vscode-material-icon-theme/commit/b8a1fc6) -- Add idris file icon (Closes #915) [`1717925`](https://github.com/PKief/vscode-material-icon-theme/commit/1717925) -- Add lolcode icon (Closes #914) [`f55b409`](https://github.com/PKief/vscode-material-icon-theme/commit/f55b409) -- Add pylintrc icon association (Closes #891) [`ef0506d`](https://github.com/PKief/vscode-material-icon-theme/commit/ef0506d) -- Add cjs.map icon association (Closes #912) [`23d2f66`](https://github.com/PKief/vscode-material-icon-theme/commit/23d2f66) -- Updated robot icon to official CD #910 [`#911`](https://github.com/PKief/vscode-material-icon-theme/pull/911) -- Add jfif file extension to image icon [`3952f7a`](https://github.com/PKief/vscode-material-icon-theme/commit/3952f7a) -- Add connection folder icon [`#903`](https://github.com/PKief/vscode-material-icon-theme/pull/903) -- add vim icon associations [`#904`](https://github.com/PKief/vscode-material-icon-theme/pull/904) -- Add .db extension [`#898`](https://github.com/PKief/vscode-material-icon-theme/pull/898) -- Sync version key value [`#897`](https://github.com/PKief/vscode-material-icon-theme/pull/897) -- Add Grain icon [`#892`](https://github.com/PKief/vscode-material-icon-theme/pull/892) -- Fix link to images [`503c3f5`](https://github.com/PKief/vscode-material-icon-theme/commit/503c3f5) -- Fix import of puppeteer (Closes #890) [`6f5f084`](https://github.com/PKief/vscode-material-icon-theme/commit/6f5f084) -- add scala-folder [`#856`](https://github.com/PKief/vscode-material-icon-theme/pull/856) -- add cobol icon [`#889`](https://github.com/PKief/vscode-material-icon-theme/pull/889) -- Add exp file extension to console icon (Closes #875) [`0aee54c`](https://github.com/PKief/vscode-material-icon-theme/commit/0aee54c) -- Add bicep icon (Closes #886) [`a634f5b`](https://github.com/PKief/vscode-material-icon-theme/commit/a634f5b) -- add twine icon [`#873`](https://github.com/PKief/vscode-material-icon-theme/pull/873) -- Add cabal.project file to cabal file icons [`#883`](https://github.com/PKief/vscode-material-icon-theme/pull/883) -- Add meson_options.txt and meson wrapdb files [`ef4fc09`](https://github.com/PKief/vscode-material-icon-theme/commit/ef4fc09) -- Add dune-workspace file to dune file icons [`#881`](https://github.com/PKief/vscode-material-icon-theme/pull/881) -- Update dependencies [`7451b0d`](https://github.com/PKief/vscode-material-icon-theme/commit/7451b0d) -- add schemes to classes [`#880`](https://github.com/PKief/vscode-material-icon-theme/pull/880) -- Fix Typescript "hint" level warnings and trivial typing issue [`#877`](https://github.com/PKief/vscode-material-icon-theme/pull/877) - -#### [v4.4.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.3.0...v4.4.0) +- Update PostCSS file icon (Closes #926) [`472823f6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/472823f6) +- Add related extensions section [`47771730`](https://github.com/material-extensions/vscode-material-icon-theme/commit/47771730) +- Add folder-privileged [`#831`](https://github.com/material-extensions/vscode-material-icon-theme/pull/831) +- Add quasar file and folder icon (Closes #920) [`b8a1fc61`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b8a1fc61) +- Add idris file icon (Closes #915) [`17179257`](https://github.com/material-extensions/vscode-material-icon-theme/commit/17179257) +- Add lolcode icon (Closes #914) [`f55b4090`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f55b4090) +- Add pylintrc icon association (Closes #891) [`ef0506d0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ef0506d0) +- Add cjs.map icon association (Closes #912) [`23d2f66e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/23d2f66e) +- Updated robot icon to official CD #910 [`#911`](https://github.com/material-extensions/vscode-material-icon-theme/pull/911) +- Add jfif file extension to image icon [`3952f7a4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3952f7a4) +- Add connection folder icon [`#903`](https://github.com/material-extensions/vscode-material-icon-theme/pull/903) +- add vim icon associations [`#904`](https://github.com/material-extensions/vscode-material-icon-theme/pull/904) +- Add .db extension [`#898`](https://github.com/material-extensions/vscode-material-icon-theme/pull/898) +- Sync version key value [`#897`](https://github.com/material-extensions/vscode-material-icon-theme/pull/897) +- Add Grain icon [`#892`](https://github.com/material-extensions/vscode-material-icon-theme/pull/892) +- Fix link to images [`503c3f55`](https://github.com/material-extensions/vscode-material-icon-theme/commit/503c3f55) +- Fix import of puppeteer (Closes #890) [`6f5f0842`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6f5f0842) +- add scala-folder [`#856`](https://github.com/material-extensions/vscode-material-icon-theme/pull/856) +- add cobol icon [`#889`](https://github.com/material-extensions/vscode-material-icon-theme/pull/889) +- Add exp file extension to console icon (Closes #875) [`0aee54c5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0aee54c5) +- Add bicep icon (Closes #886) [`a634f5bb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a634f5bb) +- add twine icon [`#873`](https://github.com/material-extensions/vscode-material-icon-theme/pull/873) +- Add cabal.project file to cabal file icons [`#883`](https://github.com/material-extensions/vscode-material-icon-theme/pull/883) +- Add meson_options.txt and meson wrapdb files [`ef4fc09f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ef4fc09f) +- Add dune-workspace file to dune file icons [`#881`](https://github.com/material-extensions/vscode-material-icon-theme/pull/881) +- Update dependencies [`7451b0d6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7451b0d6) +- add schemes to classes [`#880`](https://github.com/material-extensions/vscode-material-icon-theme/pull/880) +- Fix Typescript "hint" level warnings and trivial typing issue [`#877`](https://github.com/material-extensions/vscode-material-icon-theme/pull/877) + +#### [v4.4.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.3.0...v4.4.0) > November 1, 2020 -- Remove animation from animation folder icon due to performance reasons (Closes #872) [`247d721`](https://github.com/PKief/vscode-material-icon-theme/commit/247d721) -- Update posthtml icon [`eeffbff`](https://github.com/PKief/vscode-material-icon-theme/commit/eeffbff) -- Slightly update colors and size [`a46ddcc`](https://github.com/PKief/vscode-material-icon-theme/commit/a46ddcc) -- Add commitlintrc icon associations (Closes #870) [`fd9ea25`](https://github.com/PKief/vscode-material-icon-theme/commit/fd9ea25) -- Make filenames for license files more generic [`4d30abd`](https://github.com/PKief/vscode-material-icon-theme/commit/4d30abd) -- Rename mcfunction to minecraft icon [`90752ac`](https://github.com/PKief/vscode-material-icon-theme/commit/90752ac) -- Add NGRX selectors (Closes #861) [`c2e1d3d`](https://github.com/PKief/vscode-material-icon-theme/commit/c2e1d3d) -- #864 Display docker icon on Dockerfile.* [`993ad6e`](https://github.com/PKief/vscode-material-icon-theme/commit/993ad6e) -- remove filters in svg [`4843356`](https://github.com/PKief/vscode-material-icon-theme/commit/4843356) -- remove filter on svgs [`27e20fd`](https://github.com/PKief/vscode-material-icon-theme/commit/27e20fd) -- add snowpack config icons [`accebe6`](https://github.com/PKief/vscode-material-icon-theme/commit/accebe6) -- Add brainfuck file icon (Closes #858) [`c00230a`](https://github.com/PKief/vscode-material-icon-theme/commit/c00230a) -- Add brainfuck file icon (Closes #858) [`b12830b`](https://github.com/PKief/vscode-material-icon-theme/commit/b12830b) -- Change the mcfunction icon. [`d9057c6`](https://github.com/PKief/vscode-material-icon-theme/commit/d9057c6) -- Update size of rescript icon [`8fd0644`](https://github.com/PKief/vscode-material-icon-theme/commit/8fd0644) -- Update rescript icon [`a4e5520`](https://github.com/PKief/vscode-material-icon-theme/commit/a4e5520) -- Update colors of replit icon [`0fff5e8`](https://github.com/PKief/vscode-material-icon-theme/commit/0fff5e8) -- Add mcfunction_alt to the right file [`76b11f6`](https://github.com/PKief/vscode-material-icon-theme/commit/76b11f6) -- Change size and add a alternative icon [`9a5728b`](https://github.com/PKief/vscode-material-icon-theme/commit/9a5728b) -- Update gulp folder icon (motive color and size of motive) [`851ef81`](https://github.com/PKief/vscode-material-icon-theme/commit/851ef81) -- add replit config file icon [`4c8f80e`](https://github.com/PKief/vscode-material-icon-theme/commit/4c8f80e) -- Add Minecraft Function Icon. [`74944db`](https://github.com/PKief/vscode-material-icon-theme/commit/74944db) -- fix: gulp folder icon colors [`28511de`](https://github.com/PKief/vscode-material-icon-theme/commit/28511de) -- fix: simplify gulp folder names [`ba38f75`](https://github.com/PKief/vscode-material-icon-theme/commit/ba38f75) -- Folder icon for messaging [`637b13a`](https://github.com/PKief/vscode-material-icon-theme/commit/637b13a) -- Folder icon for messaging [`f901627`](https://github.com/PKief/vscode-material-icon-theme/commit/f901627) -- fix: remove trailing comma [`8776602`](https://github.com/PKief/vscode-material-icon-theme/commit/8776602) -- fix: remove trailing spaces [`5c2b690`](https://github.com/PKief/vscode-material-icon-theme/commit/5c2b690) -- feature: gulpfile folder icon [`88c5d70`](https://github.com/PKief/vscode-material-icon-theme/commit/88c5d70) -- Add version for light themes and update colors [`1100f1e`](https://github.com/PKief/vscode-material-icon-theme/commit/1100f1e) -- Update alignment of nginx icon [`8dfb4a2`](https://github.com/PKief/vscode-material-icon-theme/commit/8dfb4a2) -- Update color of nginx icon to #43A047 [`0a91ce7`](https://github.com/PKief/vscode-material-icon-theme/commit/0a91ce7) -- add nginx configuration file icon [`b44e6da`](https://github.com/PKief/vscode-material-icon-theme/commit/b44e6da) -- remove folder-support from folderIcons.ts in order to fix pipeline [`ce03526`](https://github.com/PKief/vscode-material-icon-theme/commit/ce03526) -- Update descriptions of workflow file [`3d7b3d0`](https://github.com/PKief/vscode-material-icon-theme/commit/3d7b3d0) -- Add reports folder icon [`2d1e9f2`](https://github.com/PKief/vscode-material-icon-theme/commit/2d1e9f2) -- Add passwd file icon (Closes #838) [`7798e4d`](https://github.com/PKief/vscode-material-icon-theme/commit/7798e4d) -- feat(svelte): support svelte.config.js [`a47c3ed`](https://github.com/PKief/vscode-material-icon-theme/commit/a47c3ed) -- Update eslintignore [`27d727c`](https://github.com/PKief/vscode-material-icon-theme/commit/27d727c) -- Update .vscode config [`1e31cc3`](https://github.com/PKief/vscode-material-icon-theme/commit/1e31cc3) -- Prettifiy source code [`9dfe4a1`](https://github.com/PKief/vscode-material-icon-theme/commit/9dfe4a1) -- Update workflow file [`952dc39`](https://github.com/PKief/vscode-material-icon-theme/commit/952dc39) -- Revert image changes [`ba1e063`](https://github.com/PKief/vscode-material-icon-theme/commit/ba1e063) -- Add search file icon [`5c50244`](https://github.com/PKief/vscode-material-icon-theme/commit/5c50244) -- Add language ids (Fixes #840) [`d3bcd69`](https://github.com/PKief/vscode-material-icon-theme/commit/d3bcd69) -- Add preview images [`7859fdb`](https://github.com/PKief/vscode-material-icon-theme/commit/7859fdb) -- Add Stitches Icon [`b97d185`](https://github.com/PKief/vscode-material-icon-theme/commit/b97d185) -- Add description for custom folder icons [`5b7ca02`](https://github.com/PKief/vscode-material-icon-theme/commit/5b7ca02) -- Add "setting" names to folder-config [`21d2e22`](https://github.com/PKief/vscode-material-icon-theme/commit/21d2e22) -- remove dot from extension names [`cbb3fdc`](https://github.com/PKief/vscode-material-icon-theme/commit/cbb3fdc) -- Add rescript icon [`b7536ee`](https://github.com/PKief/vscode-material-icon-theme/commit/b7536ee) -- add posthtml icon [`1dd5ac4`](https://github.com/PKief/vscode-material-icon-theme/commit/1dd5ac4) - -#### [v4.3.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.0.2...v4.3.0) +- Remove animation from animation folder icon due to performance reasons (Closes #872) [`247d7210`](https://github.com/material-extensions/vscode-material-icon-theme/commit/247d7210) +- Update posthtml icon [`eeffbff6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/eeffbff6) +- Slightly update colors and size [`a46ddcc2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a46ddcc2) +- Add commitlintrc icon associations (Closes #870) [`fd9ea259`](https://github.com/material-extensions/vscode-material-icon-theme/commit/fd9ea259) +- Make filenames for license files more generic [`4d30abd2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4d30abd2) +- Rename mcfunction to minecraft icon [`90752ac2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/90752ac2) +- Add NGRX selectors (Closes #861) [`c2e1d3d3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c2e1d3d3) +- #864 Display docker icon on Dockerfile.* [`993ad6eb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/993ad6eb) +- remove filters in svg [`48433564`](https://github.com/material-extensions/vscode-material-icon-theme/commit/48433564) +- remove filter on svgs [`27e20fd2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/27e20fd2) +- add snowpack config icons [`accebe6f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/accebe6f) +- Add brainfuck file icon (Closes #858) [`c00230a3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c00230a3) +- Add brainfuck file icon (Closes #858) [`b12830b3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b12830b3) +- Change the mcfunction icon. [`d9057c69`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d9057c69) +- Update size of rescript icon [`8fd0644c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8fd0644c) +- Update rescript icon [`a4e55200`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a4e55200) +- Update colors of replit icon [`0fff5e82`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0fff5e82) +- Add mcfunction_alt to the right file [`76b11f6a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/76b11f6a) +- Change size and add a alternative icon [`9a5728b0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9a5728b0) +- Update gulp folder icon (motive color and size of motive) [`851ef815`](https://github.com/material-extensions/vscode-material-icon-theme/commit/851ef815) +- add replit config file icon [`4c8f80e6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4c8f80e6) +- Add Minecraft Function Icon. [`74944db7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/74944db7) +- fix: gulp folder icon colors [`28511de4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/28511de4) +- fix: simplify gulp folder names [`ba38f75a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ba38f75a) +- Folder icon for messaging [`637b13a8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/637b13a8) +- Folder icon for messaging [`f901627d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f901627d) +- fix: remove trailing comma [`87766029`](https://github.com/material-extensions/vscode-material-icon-theme/commit/87766029) +- fix: remove trailing spaces [`5c2b690b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5c2b690b) +- feature: gulpfile folder icon [`88c5d70a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/88c5d70a) +- Add version for light themes and update colors [`1100f1ef`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1100f1ef) +- Update alignment of nginx icon [`8dfb4a29`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8dfb4a29) +- Update color of nginx icon to #43A047 [`0a91ce7e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0a91ce7e) +- add nginx configuration file icon [`b44e6da8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b44e6da8) +- remove folder-support from folderIcons.ts in order to fix pipeline [`ce035260`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ce035260) +- Update descriptions of workflow file [`3d7b3d0a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3d7b3d0a) +- Add reports folder icon [`2d1e9f28`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2d1e9f28) +- Add passwd file icon (Closes #838) [`7798e4d6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7798e4d6) +- feat(svelte): support svelte.config.js [`a47c3eda`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a47c3eda) +- Update eslintignore [`27d727c7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/27d727c7) +- Update .vscode config [`1e31cc32`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1e31cc32) +- Prettifiy source code [`9dfe4a17`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9dfe4a17) +- Update workflow file [`952dc39e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/952dc39e) +- Revert image changes [`ba1e0631`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ba1e0631) +- Add search file icon [`5c502447`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5c502447) +- Add language ids (Fixes #840) [`d3bcd697`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d3bcd697) +- Add preview images [`7859fdbf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7859fdbf) +- Add Stitches Icon [`b97d1856`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b97d1856) +- Add description for custom folder icons [`5b7ca028`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5b7ca028) +- Add "setting" names to folder-config [`21d2e222`](https://github.com/material-extensions/vscode-material-icon-theme/commit/21d2e222) +- remove dot from extension names [`cbb3fdcd`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cbb3fdcd) +- Add rescript icon [`b7536eec`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b7536eec) +- add posthtml icon [`1dd5ac41`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1dd5ac41) + +#### [v4.3.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.0.2...v4.3.0) > September 9, 2020 -- Create FUNDING.yml [`c821e6c`](https://github.com/PKief/vscode-material-icon-theme/commit/c821e6c) -- Update terraform folder and file icons [`23e4e36`](https://github.com/PKief/vscode-material-icon-theme/commit/23e4e36) -- Updated saturation and opacity of custom icon files [`2ce832d`](https://github.com/PKief/vscode-material-icon-theme/commit/2ce832d) -- Fix #827 [`5be67ba`](https://github.com/PKief/vscode-material-icon-theme/commit/5be67ba) -- Code Refactoring [`cd46788`](https://github.com/PKief/vscode-material-icon-theme/commit/cd46788) -- Add mjml folder icon (Closes #435) [`8abf22b`](https://github.com/PKief/vscode-material-icon-theme/commit/8abf22b) -- Adjusted secondary color [`775beca`](https://github.com/PKief/vscode-material-icon-theme/commit/775beca) -- Add www folder association [`b7082f5`](https://github.com/PKief/vscode-material-icon-theme/commit/b7082f5) -- Fixed icon configuration in folderIcons.ts due to broken checks [`ac17075`](https://github.com/PKief/vscode-material-icon-theme/commit/ac17075) -- Added Terraform Folder Icons [`6392bb4`](https://github.com/PKief/vscode-material-icon-theme/commit/6392bb4) +- Create FUNDING.yml [`c821e6cc`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c821e6cc) +- Update terraform folder and file icons [`23e4e36d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/23e4e36d) +- Updated saturation and opacity of custom icon files [`2ce832d1`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2ce832d1) +- Fix #827 [`5be67bab`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5be67bab) +- Code Refactoring [`cd46788e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cd46788e) +- Add mjml folder icon (Closes #435) [`8abf22b4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8abf22b4) +- Adjusted secondary color [`775becaa`](https://github.com/material-extensions/vscode-material-icon-theme/commit/775becaa) +- Add www folder association [`b7082f5f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b7082f5f) +- Fixed icon configuration in folderIcons.ts due to broken checks [`ac170754`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ac170754) +- Added Terraform Folder Icons [`6392bb4b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6392bb4b) -#### [v4.0.2](https://github.com/PKief/vscode-material-icon-theme/compare/v4.2.0...v4.0.2) +#### [v4.0.2](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.2.0...v4.0.2) > September 2, 2020 -- Bump bl from 4.0.2 to 4.0.3 [`e8eaf1e`](https://github.com/PKief/vscode-material-icon-theme/commit/e8eaf1e) -- feat: associate docker icon to Dockerfile.prod and Dockerfile.production [`bcc52b7`](https://github.com/PKief/vscode-material-icon-theme/commit/bcc52b7) -- Addition to utils folder icon [`464cc50`](https://github.com/PKief/vscode-material-icon-theme/commit/464cc50) -- Update description for custom SVG icons [`ff1aaab`](https://github.com/PKief/vscode-material-icon-theme/commit/ff1aaab) -- Add jsonl and ndjson file extensions [`0f49591`](https://github.com/PKief/vscode-material-icon-theme/commit/0f49591) -- Add slug file icon (Closes #820) [`6542304`](https://github.com/PKief/vscode-material-icon-theme/commit/6542304) -- Always enable nuxt icons because there're no conflicts with other icon packages [`a31a149`](https://github.com/PKief/vscode-material-icon-theme/commit/a31a149) -- Add jest.e2e file names [`76b32d9`](https://github.com/PKief/vscode-material-icon-theme/commit/76b32d9) -- Add description for custom SVG icons [`eee52d8`](https://github.com/PKief/vscode-material-icon-theme/commit/eee52d8) -- Added "ace" [`988f24c`](https://github.com/PKief/vscode-material-icon-theme/commit/988f24c) -- Add jinja-html to jinja extension array [`4de95b7`](https://github.com/PKief/vscode-material-icon-theme/commit/4de95b7) -- Icon color changed to Material for Modernizr icon [`f47b150`](https://github.com/PKief/vscode-material-icon-theme/commit/f47b150) -- Update colors of apollo icons [`4b5f155`](https://github.com/PKief/vscode-material-icon-theme/commit/4b5f155) -- Fix security vulnerability in dev dependencies [`203f812`](https://github.com/PKief/vscode-material-icon-theme/commit/203f812) -- Add Modernizr file icon [`b16cce8`](https://github.com/PKief/vscode-material-icon-theme/commit/b16cce8) -- Add .cjs extension to ESLint icon [`7253c2f`](https://github.com/PKief/vscode-material-icon-theme/commit/7253c2f) -- Add stryker file icon (Closes #784) [`7b2d025`](https://github.com/PKief/vscode-material-icon-theme/commit/7b2d025) -- Changed colors to come from material ui design (indigo 900 for folder and indigo 100 for apollo logo; [`a223a6e`](https://github.com/PKief/vscode-material-icon-theme/commit/a223a6e) -- Add denizenscript (Closes #785) [`c6b7637`](https://github.com/PKief/vscode-material-icon-theme/commit/c6b7637) -- Alias gulpfile.js as gulpfile.mjs [`25adfab`](https://github.com/PKief/vscode-material-icon-theme/commit/25adfab) -- Updated color of nuget icon [`4756739`](https://github.com/PKief/vscode-material-icon-theme/commit/4756739) -- Removed snake case in foldernames array [`457f047`](https://github.com/PKief/vscode-material-icon-theme/commit/457f047) -- Added apollo folder icon [`a4b4851`](https://github.com/PKief/vscode-material-icon-theme/commit/a4b4851) -- Add command file icon (Closes #748) [`2ebf511`](https://github.com/PKief/vscode-material-icon-theme/commit/2ebf511) -- Add NuGet file icon for nuget.config, .nuspec, nuget.exe, *.nupkg [`377f5bc`](https://github.com/PKief/vscode-material-icon-theme/commit/377f5bc) -- Bump elliptic from 6.5.2 to 6.5.3 [`1e262f5`](https://github.com/PKief/vscode-material-icon-theme/commit/1e262f5) -- Add CNAME file name to http icon [`2e744e9`](https://github.com/PKief/vscode-material-icon-theme/commit/2e744e9) -- Update sas icon [`f24d561`](https://github.com/PKief/vscode-material-icon-theme/commit/f24d561) -- change sas-icon.svg to sas.svg [`b2c899d`](https://github.com/PKief/vscode-material-icon-theme/commit/b2c899d) -- add SAS icon [`44028c6`](https://github.com/PKief/vscode-material-icon-theme/commit/44028c6) -- Add salesforce icon (Closes #779) [`34f7a52`](https://github.com/PKief/vscode-material-icon-theme/commit/34f7a52) -- Bump lodash from 4.17.15 to 4.17.19 [`ad47a81`](https://github.com/PKief/vscode-material-icon-theme/commit/ad47a81) -- Update color of azure pipelines folder icon [`c04fd92`](https://github.com/PKief/vscode-material-icon-theme/commit/c04fd92) -- Update color of the rocket [`916f1dd`](https://github.com/PKief/vscode-material-icon-theme/commit/916f1dd) -- Update color of the rocket [`f4ba754`](https://github.com/PKief/vscode-material-icon-theme/commit/f4ba754) -- Add roadmap file icon (Closes #682) [`f718167`](https://github.com/PKief/vscode-material-icon-theme/commit/f718167) -- Update so colors is from material design colors [`9bba8db`](https://github.com/PKief/vscode-material-icon-theme/commit/9bba8db) -- Add Azure Pipeline as a folder icon [`6bf39fc`](https://github.com/PKief/vscode-material-icon-theme/commit/6bf39fc) -- Update tcl icon [`c26f6f9`](https://github.com/PKief/vscode-material-icon-theme/commit/c26f6f9) -- Add security file names to existing lock icon [`f7c4041`](https://github.com/PKief/vscode-material-icon-theme/commit/f7c4041) -- Remove security icon and use 'lock.svg' instead [`87ef79b`](https://github.com/PKief/vscode-material-icon-theme/commit/87ef79b) -- Remove database and storage rules from Firebase [`64e33ee`](https://github.com/PKief/vscode-material-icon-theme/commit/64e33ee) -- Update CI pipeline [`0f14ce1`](https://github.com/PKief/vscode-material-icon-theme/commit/0f14ce1) -- Fix CI pipeline [`7ca5d3a`](https://github.com/PKief/vscode-material-icon-theme/commit/7ca5d3a) -- Update CI pipeline [`ab9577a`](https://github.com/PKief/vscode-material-icon-theme/commit/ab9577a) -- Add fileIcons.ts reference [`4934692`](https://github.com/PKief/vscode-material-icon-theme/commit/4934692) -- Rename and edit security.svg [`d536a9c`](https://github.com/PKief/vscode-material-icon-theme/commit/d536a9c) -- Add security.svg [`20f3519`](https://github.com/PKief/vscode-material-icon-theme/commit/20f3519) -- Add additional Firebase filenames [`c8b8dab`](https://github.com/PKief/vscode-material-icon-theme/commit/c8b8dab) -- feat: Add Tcl Icon [`e5aac1c`](https://github.com/PKief/vscode-material-icon-theme/commit/e5aac1c) - -#### [v4.2.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.1.0...v4.2.0) +- Bump bl from 4.0.2 to 4.0.3 [`e8eaf1e6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e8eaf1e6) +- feat: associate docker icon to Dockerfile.prod and Dockerfile.production [`bcc52b79`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bcc52b79) +- Addition to utils folder icon [`464cc505`](https://github.com/material-extensions/vscode-material-icon-theme/commit/464cc505) +- Update description for custom SVG icons [`ff1aaab0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ff1aaab0) +- Add jsonl and ndjson file extensions [`0f495911`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0f495911) +- Add slug file icon (Closes #820) [`6542304f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6542304f) +- Always enable nuxt icons because there're no conflicts with other icon packages [`a31a1490`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a31a1490) +- Add jest.e2e file names [`76b32d99`](https://github.com/material-extensions/vscode-material-icon-theme/commit/76b32d99) +- Add description for custom SVG icons [`eee52d8b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/eee52d8b) +- Added "ace" [`988f24cb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/988f24cb) +- Add jinja-html to jinja extension array [`4de95b74`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4de95b74) +- Icon color changed to Material for Modernizr icon [`f47b150c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f47b150c) +- Update colors of apollo icons [`4b5f1554`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4b5f1554) +- Fix security vulnerability in dev dependencies [`203f8125`](https://github.com/material-extensions/vscode-material-icon-theme/commit/203f8125) +- Add Modernizr file icon [`b16cce8f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b16cce8f) +- Add .cjs extension to ESLint icon [`7253c2fb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7253c2fb) +- Add stryker file icon (Closes #784) [`7b2d0258`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7b2d0258) +- Changed colors to come from material ui design (indigo 900 for folder and indigo 100 for apollo logo; [`a223a6e0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a223a6e0) +- Add denizenscript (Closes #785) [`c6b7637c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c6b7637c) +- Alias gulpfile.js as gulpfile.mjs [`25adfab6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/25adfab6) +- Updated color of nuget icon [`47567393`](https://github.com/material-extensions/vscode-material-icon-theme/commit/47567393) +- Removed snake case in foldernames array [`457f0476`](https://github.com/material-extensions/vscode-material-icon-theme/commit/457f0476) +- Added apollo folder icon [`a4b48518`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a4b48518) +- Add command file icon (Closes #748) [`2ebf5110`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2ebf5110) +- Add NuGet file icon for nuget.config, .nuspec, nuget.exe, *.nupkg [`377f5bc6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/377f5bc6) +- Bump elliptic from 6.5.2 to 6.5.3 [`1e262f56`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1e262f56) +- Add CNAME file name to http icon [`2e744e9b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2e744e9b) +- Update sas icon [`f24d5616`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f24d5616) +- change sas-icon.svg to sas.svg [`b2c899d7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b2c899d7) +- add SAS icon [`44028c69`](https://github.com/material-extensions/vscode-material-icon-theme/commit/44028c69) +- Add salesforce icon (Closes #779) [`34f7a529`](https://github.com/material-extensions/vscode-material-icon-theme/commit/34f7a529) +- Bump lodash from 4.17.15 to 4.17.19 [`ad47a81f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ad47a81f) +- Update color of azure pipelines folder icon [`c04fd92e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c04fd92e) +- Update color of the rocket [`916f1ddf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/916f1ddf) +- Update color of the rocket [`f4ba7546`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f4ba7546) +- Add roadmap file icon (Closes #682) [`f7181676`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f7181676) +- Update so colors is from material design colors [`9bba8db1`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9bba8db1) +- Add Azure Pipeline as a folder icon [`6bf39fc2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6bf39fc2) +- Update tcl icon [`c26f6f9a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c26f6f9a) +- Add security file names to existing lock icon [`f7c40411`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f7c40411) +- Remove security icon and use 'lock.svg' instead [`87ef79be`](https://github.com/material-extensions/vscode-material-icon-theme/commit/87ef79be) +- Remove database and storage rules from Firebase [`64e33eef`](https://github.com/material-extensions/vscode-material-icon-theme/commit/64e33eef) +- Update CI pipeline [`0f14ce1e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0f14ce1e) +- Fix CI pipeline [`7ca5d3a7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7ca5d3a7) +- Update CI pipeline [`ab9577a4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ab9577a4) +- Add fileIcons.ts reference [`49346921`](https://github.com/material-extensions/vscode-material-icon-theme/commit/49346921) +- Rename and edit security.svg [`d536a9ca`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d536a9ca) +- Add security.svg [`20f35192`](https://github.com/material-extensions/vscode-material-icon-theme/commit/20f35192) +- Add additional Firebase filenames [`c8b8dab9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c8b8dab9) +- feat: Add Tcl Icon [`e5aac1cd`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e5aac1cd) + +#### [v4.2.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.1.0...v4.2.0) > June 17, 2020 -- Updating forth and lisp icons [`17b773f`](https://github.com/PKief/vscode-material-icon-theme/commit/17b773f) -- Add update folder icon [`084320c`](https://github.com/PKief/vscode-material-icon-theme/commit/084320c) -- Add intellij folder icons [`19747e9`](https://github.com/PKief/vscode-material-icon-theme/commit/19747e9) -- Add svelte folder icon (Closes #756) [`9f8e697`](https://github.com/PKief/vscode-material-icon-theme/commit/9f8e697) -- Update color of vercel icons [`4be80ca`](https://github.com/PKief/vscode-material-icon-theme/commit/4be80ca) -- Switch vercel icons [`3aae82d`](https://github.com/PKief/vscode-material-icon-theme/commit/3aae82d) -- Update pawn icon [`5b327a5`](https://github.com/PKief/vscode-material-icon-theme/commit/5b327a5) -- Update vercel icons (better contrast) [`a12fe31`](https://github.com/PKief/vscode-material-icon-theme/commit/a12fe31) -- Add Pascal file icon (Closes #739) [`358c965`](https://github.com/PKief/vscode-material-icon-theme/commit/358c965) -- Update Vercel svgs (additional 2px whitespace) [`35bb92e`](https://github.com/PKief/vscode-material-icon-theme/commit/35bb92e) -- Added .unity extension to shaderlab icon [`8598a3e`](https://github.com/PKief/vscode-material-icon-theme/commit/8598a3e) -- Update vercel.svg [`24146f2`](https://github.com/PKief/vscode-material-icon-theme/commit/24146f2) -- Update vercel_light.svg [`4368407`](https://github.com/PKief/vscode-material-icon-theme/commit/4368407) -- Add unity icon [`413a94b`](https://github.com/PKief/vscode-material-icon-theme/commit/413a94b) -- Animate animation folder icon [`1d6c4d7`](https://github.com/PKief/vscode-material-icon-theme/commit/1d6c4d7) -- feat(files): add .env.schema and env.defaults [`933b0e3`](https://github.com/PKief/vscode-material-icon-theme/commit/933b0e3) -- Update vala icon [`4d2960c`](https://github.com/PKief/vscode-material-icon-theme/commit/4d2960c) -- Alias CHANGELOG as CHANGES [`45b6a9e`](https://github.com/PKief/vscode-material-icon-theme/commit/45b6a9e) -- Update ocaml icon (use same color as opam) [`7c16525`](https://github.com/PKief/vscode-material-icon-theme/commit/7c16525) -- Add drawio icon [`4cc0ec3`](https://github.com/PKief/vscode-material-icon-theme/commit/4cc0ec3) -- Update color [`9d25612`](https://github.com/PKief/vscode-material-icon-theme/commit/9d25612) -- Use color of the Material Color Palette [`2455aa9`](https://github.com/PKief/vscode-material-icon-theme/commit/2455aa9) -- Remove specific/custom folder icons per review [`690ddcb`](https://github.com/PKief/vscode-material-icon-theme/commit/690ddcb) -- Add ABC file icon [`4b8ccc2`](https://github.com/PKief/vscode-material-icon-theme/commit/4b8ccc2) -- Rename "now" to "vercel" (Closes #738) [`2d78038`](https://github.com/PKief/vscode-material-icon-theme/commit/2d78038) -- added .node-version filetype to nodejs association [`1f73b43`](https://github.com/PKief/vscode-material-icon-theme/commit/1f73b43) -- Update color of components folder icon [`97744d3`](https://github.com/PKief/vscode-material-icon-theme/commit/97744d3) -- Add folder icon for widgets (Closes #660 and Closes #726) [`f6ac11a`](https://github.com/PKief/vscode-material-icon-theme/commit/f6ac11a) -- Update folderIcons.ts [`beb11a8`](https://github.com/PKief/vscode-material-icon-theme/commit/beb11a8) -- Add io, stdlib, portability folders (C/C++) [`4bf0ea2`](https://github.com/PKief/vscode-material-icon-theme/commit/4bf0ea2) -- Rename tilt icon [`3bd5068`](https://github.com/PKief/vscode-material-icon-theme/commit/3bd5068) -- Add folder icon for "sounds" [`6837df4`](https://github.com/PKief/vscode-material-icon-theme/commit/6837df4) -- Slightly decrease size of icon [`f23c8c6`](https://github.com/PKief/vscode-material-icon-theme/commit/f23c8c6) -- Add GraphQL Resolver icon for Nest [`ad5b564`](https://github.com/PKief/vscode-material-icon-theme/commit/ad5b564) -- add 'code' to 'folder-src' icon [`8ee2ddf`](https://github.com/PKief/vscode-material-icon-theme/commit/8ee2ddf) -- tweak: map jest icon to jest.config.(m|c)js [`0214998`](https://github.com/PKief/vscode-material-icon-theme/commit/0214998) -- Update graphql icon [`c6877f5`](https://github.com/PKief/vscode-material-icon-theme/commit/c6877f5) -- Add imba file icon (Closes #715) [`99c21cd`](https://github.com/PKief/vscode-material-icon-theme/commit/99c21cd) -- Fix typo in comment [`7f69d99`](https://github.com/PKief/vscode-material-icon-theme/commit/7f69d99) -- Remove Material Design box per PKief/vscode-material-icon-theme/pull/700#discussion_r416770170 [`61062c6`](https://github.com/PKief/vscode-material-icon-theme/commit/61062c6) -- Add Opam and Dune support [`adf1865`](https://github.com/PKief/vscode-material-icon-theme/commit/adf1865) -- Update icon [`#2`](https://github.com/PKief/vscode-material-icon-theme/pull/2) -- Add eslintcache [`9883fbe`](https://github.com/PKief/vscode-material-icon-theme/commit/9883fbe) -- Added Dune and Opam icons [`0125f32`](https://github.com/PKief/vscode-material-icon-theme/commit/0125f32) -- Update fileIcons.ts [`fc4ba30`](https://github.com/PKief/vscode-material-icon-theme/commit/fc4ba30) -- fix: change svg according guidelines (ty @lmn8!) [`ccd0296`](https://github.com/PKief/vscode-material-icon-theme/commit/ccd0296) -- Switch Pawn icons with SVG [`#1`](https://github.com/PKief/vscode-material-icon-theme/pull/1) -- Add ReasonML, Reason Lisp (reason-vscode) [`87ff07a`](https://github.com/PKief/vscode-material-icon-theme/commit/87ff07a) -- Cleanup of new icon [`ba0c40f`](https://github.com/PKief/vscode-material-icon-theme/commit/ba0c40f) -- Add as SML [`58eb76f`](https://github.com/PKief/vscode-material-icon-theme/commit/58eb76f) -- Rename ml.svg to sml.svg [`200dffa`](https://github.com/PKief/vscode-material-icon-theme/commit/200dffa) -- Fix a syntax error [`65e1253`](https://github.com/PKief/vscode-material-icon-theme/commit/65e1253) -- Cleanup [`65ee861`](https://github.com/PKief/vscode-material-icon-theme/commit/65ee861) -- Add *.mlb and *.use extensions [`31f3e01`](https://github.com/PKief/vscode-material-icon-theme/commit/31f3e01) -- Remove capitalised extension [`482d08e`](https://github.com/PKief/vscode-material-icon-theme/commit/482d08e) -- Attempt to resolve duplicate file extension [`93abdc4`](https://github.com/PKief/vscode-material-icon-theme/commit/93abdc4) -- Prevent conflict with OCaml [`3ddc8a3`](https://github.com/PKief/vscode-material-icon-theme/commit/3ddc8a3) -- Add all ML file extensions [`6ba6e49`](https://github.com/PKief/vscode-material-icon-theme/commit/6ba6e49) -- Add ML family icon (inc. Standard ML) [`c7398ce`](https://github.com/PKief/vscode-material-icon-theme/commit/c7398ce) -- Add Forth support Clean up SVG files [`dcfc98d`](https://github.com/PKief/vscode-material-icon-theme/commit/dcfc98d) -- Add support for Lisp [`54e8627`](https://github.com/PKief/vscode-material-icon-theme/commit/54e8627) -- Update fileIcons.ts [`0ca6e45`](https://github.com/PKief/vscode-material-icon-theme/commit/0ca6e45) -- Update languageIcons.ts [`5598103`](https://github.com/PKief/vscode-material-icon-theme/commit/5598103) -- Create pawn.svg [`ba0f529`](https://github.com/PKief/vscode-material-icon-theme/commit/ba0f529) -- Add icon for Tiltfile (https://tilt.dev/) [`84e8d8f`](https://github.com/PKief/vscode-material-icon-theme/commit/84e8d8f) -- Add vala icon [`a4b535e`](https://github.com/PKief/vscode-material-icon-theme/commit/a4b535e) - -#### [v4.1.0](https://github.com/PKief/vscode-material-icon-theme/compare/v4.0.1...v4.1.0) +- Updating forth and lisp icons [`17b773ff`](https://github.com/material-extensions/vscode-material-icon-theme/commit/17b773ff) +- Add update folder icon [`084320c3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/084320c3) +- Add intellij folder icons [`19747e96`](https://github.com/material-extensions/vscode-material-icon-theme/commit/19747e96) +- Add svelte folder icon (Closes #756) [`9f8e6974`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9f8e6974) +- Update color of vercel icons [`4be80ca4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4be80ca4) +- Switch vercel icons [`3aae82d9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3aae82d9) +- Update pawn icon [`5b327a50`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5b327a50) +- Update vercel icons (better contrast) [`a12fe318`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a12fe318) +- Add Pascal file icon (Closes #739) [`358c9650`](https://github.com/material-extensions/vscode-material-icon-theme/commit/358c9650) +- Update Vercel svgs (additional 2px whitespace) [`35bb92ef`](https://github.com/material-extensions/vscode-material-icon-theme/commit/35bb92ef) +- Added .unity extension to shaderlab icon [`8598a3e1`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8598a3e1) +- Update vercel.svg [`24146f20`](https://github.com/material-extensions/vscode-material-icon-theme/commit/24146f20) +- Update vercel_light.svg [`4368407c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4368407c) +- Add unity icon [`413a94be`](https://github.com/material-extensions/vscode-material-icon-theme/commit/413a94be) +- Animate animation folder icon [`1d6c4d7e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1d6c4d7e) +- feat(files): add .env.schema and env.defaults [`933b0e3f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/933b0e3f) +- Update vala icon [`4d2960ce`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4d2960ce) +- Alias CHANGELOG as CHANGES [`45b6a9ef`](https://github.com/material-extensions/vscode-material-icon-theme/commit/45b6a9ef) +- Update ocaml icon (use same color as opam) [`7c165251`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7c165251) +- Add drawio icon [`4cc0ec3d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4cc0ec3d) +- Update color [`9d25612b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9d25612b) +- Use color of the Material Color Palette [`2455aa9b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2455aa9b) +- Remove specific/custom folder icons per review [`690ddcb2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/690ddcb2) +- Add ABC file icon [`4b8ccc22`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4b8ccc22) +- Rename "now" to "vercel" (Closes #738) [`2d780381`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2d780381) +- added .node-version filetype to nodejs association [`1f73b438`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1f73b438) +- Update color of components folder icon [`97744d3f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/97744d3f) +- Add folder icon for widgets (Closes #660 and Closes #726) [`f6ac11ac`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f6ac11ac) +- Update folderIcons.ts [`beb11a80`](https://github.com/material-extensions/vscode-material-icon-theme/commit/beb11a80) +- Add io, stdlib, portability folders (C/C++) [`4bf0ea24`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4bf0ea24) +- Rename tilt icon [`3bd50680`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3bd50680) +- Add folder icon for "sounds" [`6837df48`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6837df48) +- Slightly decrease size of icon [`f23c8c69`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f23c8c69) +- Add GraphQL Resolver icon for Nest [`ad5b5648`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ad5b5648) +- add 'code' to 'folder-src' icon [`8ee2ddfb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8ee2ddfb) +- tweak: map jest icon to jest.config.(m|c)js [`0214998c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0214998c) +- Update graphql icon [`c6877f53`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c6877f53) +- Add imba file icon (Closes #715) [`99c21cd0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/99c21cd0) +- Fix typo in comment [`7f69d992`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7f69d992) +- Remove Material Design box per PKief/vscode-material-icon-theme/pull/700#discussion_r416770170 [`61062c6c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/61062c6c) +- Add Opam and Dune support [`adf18656`](https://github.com/material-extensions/vscode-material-icon-theme/commit/adf18656) +- Update icon [`#2`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2) +- Add eslintcache [`9883fbe4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9883fbe4) +- Added Dune and Opam icons [`0125f324`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0125f324) +- Update fileIcons.ts [`fc4ba300`](https://github.com/material-extensions/vscode-material-icon-theme/commit/fc4ba300) +- fix: change svg according guidelines (ty @lmn8!) [`ccd0296b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ccd0296b) +- Switch Pawn icons with SVG [`#1`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1) +- Add ReasonML, Reason Lisp (reason-vscode) [`87ff07a4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/87ff07a4) +- Cleanup of new icon [`ba0c40f8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ba0c40f8) +- Add as SML [`58eb76f3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/58eb76f3) +- Rename ml.svg to sml.svg [`200dffaf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/200dffaf) +- Fix a syntax error [`65e12532`](https://github.com/material-extensions/vscode-material-icon-theme/commit/65e12532) +- Cleanup [`65ee8617`](https://github.com/material-extensions/vscode-material-icon-theme/commit/65ee8617) +- Add *.mlb and *.use extensions [`31f3e01a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/31f3e01a) +- Remove capitalised extension [`482d08e4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/482d08e4) +- Attempt to resolve duplicate file extension [`93abdc4f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/93abdc4f) +- Prevent conflict with OCaml [`3ddc8a3e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3ddc8a3e) +- Add all ML file extensions [`6ba6e49c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6ba6e49c) +- Add ML family icon (inc. Standard ML) [`c7398ce5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c7398ce5) +- Add Forth support Clean up SVG files [`dcfc98d7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/dcfc98d7) +- Add support for Lisp [`54e86277`](https://github.com/material-extensions/vscode-material-icon-theme/commit/54e86277) +- Update fileIcons.ts [`0ca6e45e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0ca6e45e) +- Update languageIcons.ts [`55981033`](https://github.com/material-extensions/vscode-material-icon-theme/commit/55981033) +- Create pawn.svg [`ba0f529d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ba0f529d) +- Add icon for Tiltfile (https://tilt.dev/) [`84e8d8fb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/84e8d8fb) +- Add vala icon [`a4b535e4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a4b535e4) + +#### [v4.1.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.0.1...v4.1.0) > April 26, 2020 -- Remove trailing whitespace [`67f1fd5`](https://github.com/PKief/vscode-material-icon-theme/commit/67f1fd5) -- Run linter with GitHub actions [`9567114`](https://github.com/PKief/vscode-material-icon-theme/commit/9567114) -- Update apollo file icon (References #695) [`f4626d9`](https://github.com/PKief/vscode-material-icon-theme/commit/f4626d9) -- Align nrwl icon [`574ab08`](https://github.com/PKief/vscode-material-icon-theme/commit/574ab08) -- Add nrwl icon for nx.json [`5353346`](https://github.com/PKief/vscode-material-icon-theme/commit/5353346) -- Merge dhall file extensions from PR #570 [`f4b0e82`](https://github.com/PKief/vscode-material-icon-theme/commit/f4b0e82) -- Add dhall file icon (Closes #662) [`1dffab9`](https://github.com/PKief/vscode-material-icon-theme/commit/1dffab9) -- Update commitlint icon [`8429661`](https://github.com/PKief/vscode-material-icon-theme/commit/8429661) -- Add commitlint file icon (Closes #638) [`3bcf866`](https://github.com/PKief/vscode-material-icon-theme/commit/3bcf866) -- Finalize UML file icon (References #392) [`ce05042`](https://github.com/PKief/vscode-material-icon-theme/commit/ce05042) -- Update laravel file icon (References #637) [`d001f34`](https://github.com/PKief/vscode-material-icon-theme/commit/d001f34) -- Add ipa file extension to applescript icon [`6bac54d`](https://github.com/PKief/vscode-material-icon-theme/commit/6bac54d) -- Add perl icon to *.raku files (Closes #668) [`7d324df`](https://github.com/PKief/vscode-material-icon-theme/commit/7d324df) -- Add buck file icon [`d5ef031`](https://github.com/PKief/vscode-material-icon-theme/commit/d5ef031) -- Update folderIcons.png [`45d8bcd`](https://github.com/PKief/vscode-material-icon-theme/commit/45d8bcd) -- Update folderIcons.ts [`3edb5c8`](https://github.com/PKief/vscode-material-icon-theme/commit/3edb5c8) -- Update folderIcons.ts [`1cd705a`](https://github.com/PKief/vscode-material-icon-theme/commit/1cd705a) -- Delete folder-emails.svg [`825cdcc`](https://github.com/PKief/vscode-material-icon-theme/commit/825cdcc) -- Delete folder-emails-open.svg [`cc273e9`](https://github.com/PKief/vscode-material-icon-theme/commit/cc273e9) -- Fix django file extension association (Fixes #693) [`f338121`](https://github.com/PKief/vscode-material-icon-theme/commit/f338121) -- Update laravel.svg [`abc5b06`](https://github.com/PKief/vscode-material-icon-theme/commit/abc5b06) -- Add "common" as an alias for "shared" [`19d2ac9`](https://github.com/PKief/vscode-material-icon-theme/commit/19d2ac9) -- added apollo config icon [`af7736f`](https://github.com/PKief/vscode-material-icon-theme/commit/af7736f) -- Add folder email icons [`f7660c0`](https://github.com/PKief/vscode-material-icon-theme/commit/f7660c0) -- Update fileIcons.ts [`18f251e`](https://github.com/PKief/vscode-material-icon-theme/commit/18f251e) -- Update rollup file icon [`e607049`](https://github.com/PKief/vscode-material-icon-theme/commit/e607049) -- Add l10n folder icon (abr. localization) [`c40f916`](https://github.com/PKief/vscode-material-icon-theme/commit/c40f916) -- Add Routers folder name to routers [`88a6c62`](https://github.com/PKief/vscode-material-icon-theme/commit/88a6c62) -- Slightly reduce size of meson file icon (References #678) [`6ca0ff6`](https://github.com/PKief/vscode-material-icon-theme/commit/6ca0ff6) -- Add margin on all sides [`2acb80a`](https://github.com/PKief/vscode-material-icon-theme/commit/2acb80a) -- Apply material color and fix transparency [`4861d90`](https://github.com/PKief/vscode-material-icon-theme/commit/4861d90) -- Remove file extension 'build' to make it specific to meson.build filename [`61d1856`](https://github.com/PKief/vscode-material-icon-theme/commit/61d1856) -- Add firebase folder icon (Closes #555) [`cafcc5c`](https://github.com/PKief/vscode-material-icon-theme/commit/cafcc5c) -- Update firebase file icon (References #555) [`bfb172a`](https://github.com/PKief/vscode-material-icon-theme/commit/bfb172a) -- Add meson icon [`a2a442d`](https://github.com/PKief/vscode-material-icon-theme/commit/a2a442d) -- Fix dependency issue to vscode in preview script [`9831f58`](https://github.com/PKief/vscode-material-icon-theme/commit/9831f58) -- Update Adonis file icon (References #658) [`1034fd4`](https://github.com/PKief/vscode-material-icon-theme/commit/1034fd4) -- Add more associations for functions folder icon [`79ffcab`](https://github.com/PKief/vscode-material-icon-theme/commit/79ffcab) -- Add .devcontainer folder icon association [`548928b`](https://github.com/PKief/vscode-material-icon-theme/commit/548928b) -- Remove unnecessary file names [`1f04fd4`](https://github.com/PKief/vscode-material-icon-theme/commit/1f04fd4) -- Remove unused code [`4088170`](https://github.com/PKief/vscode-material-icon-theme/commit/4088170) -- Refactor code [`a133ab0`](https://github.com/PKief/vscode-material-icon-theme/commit/a133ab0) -- Refactor code with nullish coalescing and optional chaining [`e4920f5`](https://github.com/PKief/vscode-material-icon-theme/commit/e4920f5) -- Bump acorn from 6.4.0 to 6.4.1 [`1ef5eb6`](https://github.com/PKief/vscode-material-icon-theme/commit/1ef5eb6) -- Update container folder icon [`7c5a5d6`](https://github.com/PKief/vscode-material-icon-theme/commit/7c5a5d6) -- Add json file extension to babel file association [`3d0be81`](https://github.com/PKief/vscode-material-icon-theme/commit/3d0be81) -- Add stencil folder icon (Closes #659) [`8f31e30`](https://github.com/PKief/vscode-material-icon-theme/commit/8f31e30) -- Update stencil file icon (references #659) [`3e8f10f`](https://github.com/PKief/vscode-material-icon-theme/commit/3e8f10f) -- Add icon to fileicons [`b6c065a`](https://github.com/PKief/vscode-material-icon-theme/commit/b6c065a) -- [Icon Request] AdonisJs icon [`a85a467`](https://github.com/PKief/vscode-material-icon-theme/commit/a85a467) -- Add Dhall icon [`2ca9a8f`](https://github.com/PKief/vscode-material-icon-theme/commit/2ca9a8f) -- Remove comment [`3c52d45`](https://github.com/PKief/vscode-material-icon-theme/commit/3c52d45) -- Add UML icon [`173e35e`](https://github.com/PKief/vscode-material-icon-theme/commit/173e35e) - -#### [v4.0.1](https://github.com/PKief/vscode-material-icon-theme/compare/v4.0.0...v4.0.1) +- Remove trailing whitespace [`67f1fd5e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/67f1fd5e) +- Run linter with GitHub actions [`95671146`](https://github.com/material-extensions/vscode-material-icon-theme/commit/95671146) +- Update apollo file icon (References #695) [`f4626d9a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f4626d9a) +- Align nrwl icon [`574ab087`](https://github.com/material-extensions/vscode-material-icon-theme/commit/574ab087) +- Add nrwl icon for nx.json [`53533461`](https://github.com/material-extensions/vscode-material-icon-theme/commit/53533461) +- Merge dhall file extensions from PR #570 [`f4b0e82d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f4b0e82d) +- Add dhall file icon (Closes #662) [`1dffab95`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1dffab95) +- Update commitlint icon [`84296617`](https://github.com/material-extensions/vscode-material-icon-theme/commit/84296617) +- Add commitlint file icon (Closes #638) [`3bcf866e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3bcf866e) +- Finalize UML file icon (References #392) [`ce05042f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ce05042f) +- Update laravel file icon (References #637) [`d001f34c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d001f34c) +- Add ipa file extension to applescript icon [`6bac54dc`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6bac54dc) +- Add perl icon to *.raku files (Closes #668) [`7d324df9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7d324df9) +- Add buck file icon [`d5ef0310`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d5ef0310) +- Update folderIcons.png [`45d8bcdc`](https://github.com/material-extensions/vscode-material-icon-theme/commit/45d8bcdc) +- Update folderIcons.ts [`3edb5c8b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3edb5c8b) +- Update folderIcons.ts [`1cd705a6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1cd705a6) +- Delete folder-emails.svg [`825cdccc`](https://github.com/material-extensions/vscode-material-icon-theme/commit/825cdccc) +- Delete folder-emails-open.svg [`cc273e9c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cc273e9c) +- Fix django file extension association (Fixes #693) [`f3381211`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f3381211) +- Update laravel.svg [`abc5b065`](https://github.com/material-extensions/vscode-material-icon-theme/commit/abc5b065) +- Add "common" as an alias for "shared" [`19d2ac9e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/19d2ac9e) +- added apollo config icon [`af7736f7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/af7736f7) +- Add folder email icons [`f7660c0e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f7660c0e) +- Update fileIcons.ts [`18f251ee`](https://github.com/material-extensions/vscode-material-icon-theme/commit/18f251ee) +- Update rollup file icon [`e607049b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e607049b) +- Add l10n folder icon (abr. localization) [`c40f9160`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c40f9160) +- Add Routers folder name to routers [`88a6c624`](https://github.com/material-extensions/vscode-material-icon-theme/commit/88a6c624) +- Slightly reduce size of meson file icon (References #678) [`6ca0ff6e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6ca0ff6e) +- Add margin on all sides [`2acb80a8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2acb80a8) +- Apply material color and fix transparency [`4861d90d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4861d90d) +- Remove file extension 'build' to make it specific to meson.build filename [`61d18566`](https://github.com/material-extensions/vscode-material-icon-theme/commit/61d18566) +- Add firebase folder icon (Closes #555) [`cafcc5ce`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cafcc5ce) +- Update firebase file icon (References #555) [`bfb172ad`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bfb172ad) +- Add meson icon [`a2a442da`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a2a442da) +- Fix dependency issue to vscode in preview script [`9831f58f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9831f58f) +- Update Adonis file icon (References #658) [`1034fd45`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1034fd45) +- Add more associations for functions folder icon [`79ffcabb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/79ffcabb) +- Add .devcontainer folder icon association [`548928b0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/548928b0) +- Remove unnecessary file names [`1f04fd4e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1f04fd4e) +- Remove unused code [`40881707`](https://github.com/material-extensions/vscode-material-icon-theme/commit/40881707) +- Refactor code [`a133ab0c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a133ab0c) +- Refactor code with nullish coalescing and optional chaining [`e4920f5a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e4920f5a) +- Bump acorn from 6.4.0 to 6.4.1 [`1ef5eb6f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1ef5eb6f) +- Update container folder icon [`7c5a5d62`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7c5a5d62) +- Add json file extension to babel file association [`3d0be815`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3d0be815) +- Add stencil folder icon (Closes #659) [`8f31e309`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8f31e309) +- Update stencil file icon (references #659) [`3e8f10f6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3e8f10f6) +- Add icon to fileicons [`b6c065ac`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b6c065ac) +- [Icon Request] AdonisJs icon [`a85a4676`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a85a4676) +- Add Dhall icon [`2ca9a8f0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2ca9a8f0) +- Remove comment [`3c52d453`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3c52d453) +- Add UML icon [`173e35ec`](https://github.com/material-extensions/vscode-material-icon-theme/commit/173e35ec) + +#### [v4.0.1](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.0.0...v4.0.1) > March 1, 2020 -- Do not ignore CHANGELOG.md [`0a6fcf5`](https://github.com/PKief/vscode-material-icon-theme/commit/0a6fcf5) +- Do not ignore CHANGELOG.md [`0a6fcf55`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0a6fcf55) -#### [v4.0.0](https://github.com/PKief/vscode-material-icon-theme/compare/v3.9.3...v4.0.0) +#### [v4.0.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.9.3...v4.0.0) > March 1, 2020 -- Ignore files to reduce extension size [`d9a6be0`](https://github.com/PKief/vscode-material-icon-theme/commit/d9a6be0) -- Remove unused imports [`196293a`](https://github.com/PKief/vscode-material-icon-theme/commit/196293a) -- Remove outdated versioning support [`30d19cb`](https://github.com/PKief/vscode-material-icon-theme/commit/30d19cb) -- Add Sketch icon [`32f3e1d`](https://github.com/PKief/vscode-material-icon-theme/commit/32f3e1d) -- Update Ruby icon [`f533d23`](https://github.com/PKief/vscode-material-icon-theme/commit/f533d23) -- Remove open dependency (Closes #386) [`c41ca8b`](https://github.com/PKief/vscode-material-icon-theme/commit/c41ca8b) -- Add "workspace" to extensionKind [`9f413ea`](https://github.com/PKief/vscode-material-icon-theme/commit/9f413ea) -- Improve test setup and fix tests [`91b89d2`](https://github.com/PKief/vscode-material-icon-theme/commit/91b89d2) -- Fix test [`fd1b62e`](https://github.com/PKief/vscode-material-icon-theme/commit/fd1b62e) -- Rename method for better semantic [`5cae039`](https://github.com/PKief/vscode-material-icon-theme/commit/5cae039) -- Add capacitor icon [`a227490`](https://github.com/PKief/vscode-material-icon-theme/commit/a227490) -- Prompt to reload dialog is not required anymore for the latest version [`696f0c0`](https://github.com/PKief/vscode-material-icon-theme/commit/696f0c0) -- Handle overwriting conflicts with icon generator [`7cd213b`](https://github.com/PKief/vscode-material-icon-theme/commit/7cd213b) -- Append hash value to icon file name if content changes [`33a238a`](https://github.com/PKief/vscode-material-icon-theme/commit/33a238a) -- Remove side effects of getObjectPropertyValue method [`c803b43`](https://github.com/PKief/vscode-material-icon-theme/commit/c803b43) -- Refactor code [`44f0031`](https://github.com/PKief/vscode-material-icon-theme/commit/44f0031) -- Add husky filename [`be1737a`](https://github.com/PKief/vscode-material-icon-theme/commit/be1737a) -- Add azure-pipeline icon to files ending with *.azure-pipelines.yaml [`57d67e8`](https://github.com/PKief/vscode-material-icon-theme/commit/57d67e8) -- Remove outdated build action of NodeJS v8 [`cfda11e`](https://github.com/PKief/vscode-material-icon-theme/commit/cfda11e) -- Add ESLint rules [`a850dda`](https://github.com/PKief/vscode-material-icon-theme/commit/a850dda) -- Add VSCode extension recommendations [`96fe5fe`](https://github.com/PKief/vscode-material-icon-theme/commit/96fe5fe) -- Apply ESLint rules [`970544c`](https://github.com/PKief/vscode-material-icon-theme/commit/970544c) -- Migrate from TSLint to ESLint [`cd9930f`](https://github.com/PKief/vscode-material-icon-theme/commit/cd9930f) -- Add coconut icon (Closes #500) [`f76109b`](https://github.com/PKief/vscode-material-icon-theme/commit/f76109b) - -#### [v3.9.3](https://github.com/PKief/vscode-material-icon-theme/compare/v3.9.2...v3.9.3) +- Ignore files to reduce extension size [`d9a6be01`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d9a6be01) +- Remove unused imports [`196293aa`](https://github.com/material-extensions/vscode-material-icon-theme/commit/196293aa) +- Remove outdated versioning support [`30d19cb1`](https://github.com/material-extensions/vscode-material-icon-theme/commit/30d19cb1) +- Add Sketch icon [`32f3e1d9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/32f3e1d9) +- Update Ruby icon [`f533d23f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f533d23f) +- Remove open dependency (Closes #386) [`c41ca8bd`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c41ca8bd) +- Add "workspace" to extensionKind [`9f413ea0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9f413ea0) +- Improve test setup and fix tests [`91b89d22`](https://github.com/material-extensions/vscode-material-icon-theme/commit/91b89d22) +- Fix test [`fd1b62e2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/fd1b62e2) +- Rename method for better semantic [`5cae039d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5cae039d) +- Add capacitor icon [`a2274907`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a2274907) +- Prompt to reload dialog is not required anymore for the latest version [`696f0c0a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/696f0c0a) +- Handle overwriting conflicts with icon generator [`7cd213b7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7cd213b7) +- Append hash value to icon file name if content changes [`33a238ac`](https://github.com/material-extensions/vscode-material-icon-theme/commit/33a238ac) +- Remove side effects of getObjectPropertyValue method [`c803b434`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c803b434) +- Refactor code [`44f00310`](https://github.com/material-extensions/vscode-material-icon-theme/commit/44f00310) +- Add husky filename [`be1737ab`](https://github.com/material-extensions/vscode-material-icon-theme/commit/be1737ab) +- Add azure-pipeline icon to files ending with *.azure-pipelines.yaml [`57d67e88`](https://github.com/material-extensions/vscode-material-icon-theme/commit/57d67e88) +- Remove outdated build action of NodeJS v8 [`cfda11ef`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cfda11ef) +- Add ESLint rules [`a850dda5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a850dda5) +- Add VSCode extension recommendations [`96fe5fec`](https://github.com/material-extensions/vscode-material-icon-theme/commit/96fe5fec) +- Apply ESLint rules [`970544c5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/970544c5) +- Migrate from TSLint to ESLint [`cd9930f5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cd9930f5) +- Add coconut icon (Closes #500) [`f76109ba`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f76109ba) + +#### [v3.9.3](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.9.2...v3.9.3) > February 9, 2020 -- Use CSS variable for background color [`be33e5d`](https://github.com/PKief/vscode-material-icon-theme/commit/be33e5d) -- Update header and badges in Readme [`55aefa5`](https://github.com/PKief/vscode-material-icon-theme/commit/55aefa5) -- Add husky icon (Closes #355) [`d98e55d`](https://github.com/PKief/vscode-material-icon-theme/commit/d98e55d) -- Add prolog icon (Closes #519) [`17dd6e5`](https://github.com/PKief/vscode-material-icon-theme/commit/17dd6e5) -- Improve zig SVG icon file [`febfebd`](https://github.com/PKief/vscode-material-icon-theme/commit/febfebd) -- Add support for .env.staging.local file [`afa3dd8`](https://github.com/PKief/vscode-material-icon-theme/commit/afa3dd8) -- Add prolog icon [`d28d2ad`](https://github.com/PKief/vscode-material-icon-theme/commit/d28d2ad) -- Change font of Q# icon [`bec6106`](https://github.com/PKief/vscode-material-icon-theme/commit/bec6106) -- Add tune icon to qa env file [`8bcfd3e`](https://github.com/PKief/vscode-material-icon-theme/commit/8bcfd3e) -- Add mobile folder (Closes #605) [`ab022cc`](https://github.com/PKief/vscode-material-icon-theme/commit/ab022cc) -- Add icon association for .yarnrc.yml [`96b6990`](https://github.com/PKief/vscode-material-icon-theme/commit/96b6990) -- Add pug icon to pug lint files [`af561d4`](https://github.com/PKief/vscode-material-icon-theme/commit/af561d4) -- Add webpack.production and webpack.development to webpack detection [`2afed01`](https://github.com/PKief/vscode-material-icon-theme/commit/2afed01) -- #594 Minimize icon size [`cd8110d`](https://github.com/PKief/vscode-material-icon-theme/commit/cd8110d) -- updade from shopify to liquid [`50996ee`](https://github.com/PKief/vscode-material-icon-theme/commit/50996ee) -- Add zig icon [`3df3114`](https://github.com/PKief/vscode-material-icon-theme/commit/3df3114) -- Add Q# icon [`509387c`](https://github.com/PKief/vscode-material-icon-theme/commit/509387c) -- Set json5 icon to json icon [`cba9f08`](https://github.com/PKief/vscode-material-icon-theme/commit/cba9f08) -- Added ".env.sample" to the Tune icon [`4d32943`](https://github.com/PKief/vscode-material-icon-theme/commit/4d32943) -- Map azure-pipelines.yaml to azure-pipelines [`f00c239`](https://github.com/PKief/vscode-material-icon-theme/commit/f00c239) -- Add Shopify .liquid file icon [`aabfaaf`](https://github.com/PKief/vscode-material-icon-theme/commit/aabfaaf) -- Update kl icon [`a0f013f`](https://github.com/PKief/vscode-material-icon-theme/commit/a0f013f) - -#### [v3.9.2](https://github.com/PKief/vscode-material-icon-theme/compare/v3.9.1...v3.9.2) +- Use CSS variable for background color [`be33e5df`](https://github.com/material-extensions/vscode-material-icon-theme/commit/be33e5df) +- Update header and badges in Readme [`55aefa56`](https://github.com/material-extensions/vscode-material-icon-theme/commit/55aefa56) +- Add husky icon (Closes #355) [`d98e55d3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d98e55d3) +- Add prolog icon (Closes #519) [`17dd6e5c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/17dd6e5c) +- Improve zig SVG icon file [`febfebd3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/febfebd3) +- Add support for .env.staging.local file [`afa3dd8f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/afa3dd8f) +- Add prolog icon [`d28d2adf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d28d2adf) +- Change font of Q# icon [`bec61068`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bec61068) +- Add tune icon to qa env file [`8bcfd3eb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8bcfd3eb) +- Add mobile folder (Closes #605) [`ab022cc8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ab022cc8) +- Add icon association for .yarnrc.yml [`96b6990e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/96b6990e) +- Add pug icon to pug lint files [`af561d4c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/af561d4c) +- Add webpack.production and webpack.development to webpack detection [`2afed011`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2afed011) +- #594 Minimize icon size [`cd8110d3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cd8110d3) +- updade from shopify to liquid [`50996ee7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/50996ee7) +- Add zig icon [`3df31148`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3df31148) +- Add Q# icon [`509387c2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/509387c2) +- Set json5 icon to json icon [`cba9f085`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cba9f085) +- Added ".env.sample" to the Tune icon [`4d329433`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4d329433) +- Map azure-pipelines.yaml to azure-pipelines [`f00c2395`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f00c2395) +- Add Shopify .liquid file icon [`aabfaaf6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/aabfaaf6) +- Update kl icon [`a0f013f9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a0f013f9) + +#### [v3.9.2](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.9.1...v3.9.2) > November 24, 2019 -- Update netlify fileNames with new extensions (Closes #577) [`a6a04aa`](https://github.com/PKief/vscode-material-icon-theme/commit/a6a04aa) -- Add file icon for .mjmlconfig [`8d29f97`](https://github.com/PKief/vscode-material-icon-theme/commit/8d29f97) -- Add Fortran icon (Closes #368) [`7c5434f`](https://github.com/PKief/vscode-material-icon-theme/commit/7c5434f) -- #534 Remove file extension which is already in use by another icon [`574f24e`](https://github.com/PKief/vscode-material-icon-theme/commit/574f24e) -- #534 Update colors and minify svg files [`5915962`](https://github.com/PKief/vscode-material-icon-theme/commit/5915962) -- #534 Add file extensions to prw [`221ce96`](https://github.com/PKief/vscode-material-icon-theme/commit/221ce96) -- Revert "Add MSIX to executable icon definition" [`91be037`](https://github.com/PKief/vscode-material-icon-theme/commit/91be037) -- Add MSIX to executable icon definition [`ced792c`](https://github.com/PKief/vscode-material-icon-theme/commit/ced792c) -- Add various 3D format [`8eebd04`](https://github.com/PKief/vscode-material-icon-theme/commit/8eebd04) -- Add various raster image format [`7a474aa`](https://github.com/PKief/vscode-material-icon-theme/commit/7a474aa) -- Add githooks folder icon [`b5047d7`](https://github.com/PKief/vscode-material-icon-theme/commit/b5047d7) -- Add disc (*.iso) icon [`3b08b21`](https://github.com/PKief/vscode-material-icon-theme/commit/3b08b21) -- #537 Update codecov icon [`d057456`](https://github.com/PKief/vscode-material-icon-theme/commit/d057456) -- Add router folder name (Closes #564) [`dd80a8f`](https://github.com/PKief/vscode-material-icon-theme/commit/dd80a8f) -- Add .env.testing [`76fb336`](https://github.com/PKief/vscode-material-icon-theme/commit/76fb336) -- Add GCP icon (Closes #556) [`3ed2c9f`](https://github.com/PKief/vscode-material-icon-theme/commit/3ed2c9f) -- Add apk file extension for android [`00ae57a`](https://github.com/PKief/vscode-material-icon-theme/commit/00ae57a) -- #543 Update JSON folder icon [`5020717`](https://github.com/PKief/vscode-material-icon-theme/commit/5020717) -- Add file icon for CODEOWNERS [`bff275c`](https://github.com/PKief/vscode-material-icon-theme/commit/bff275c) -- add - icon : json folder [`96a2e9c`](https://github.com/PKief/vscode-material-icon-theme/commit/96a2e9c) -- add codecov icon [`4eabe24`](https://github.com/PKief/vscode-material-icon-theme/commit/4eabe24) -- added icons for advpl projects [`d9fd542`](https://github.com/PKief/vscode-material-icon-theme/commit/d9fd542) - -#### [v3.9.1](https://github.com/PKief/vscode-material-icon-theme/compare/v3.9.0...v3.9.1) +- Update netlify fileNames with new extensions (Closes #577) [`a6a04aa3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a6a04aa3) +- Add file icon for .mjmlconfig [`8d29f972`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8d29f972) +- Add Fortran icon (Closes #368) [`7c5434fa`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7c5434fa) +- #534 Remove file extension which is already in use by another icon [`574f24ed`](https://github.com/material-extensions/vscode-material-icon-theme/commit/574f24ed) +- #534 Update colors and minify svg files [`59159624`](https://github.com/material-extensions/vscode-material-icon-theme/commit/59159624) +- #534 Add file extensions to prw [`221ce960`](https://github.com/material-extensions/vscode-material-icon-theme/commit/221ce960) +- Revert "Add MSIX to executable icon definition" [`91be037d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/91be037d) +- Add MSIX to executable icon definition [`ced792c1`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ced792c1) +- Add various 3D format [`8eebd043`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8eebd043) +- Add various raster image format [`7a474aa0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7a474aa0) +- Add githooks folder icon [`b5047d71`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b5047d71) +- Add disc (*.iso) icon [`3b08b211`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3b08b211) +- #537 Update codecov icon [`d057456f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d057456f) +- Add router folder name (Closes #564) [`dd80a8f5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/dd80a8f5) +- Add .env.testing [`76fb3361`](https://github.com/material-extensions/vscode-material-icon-theme/commit/76fb3361) +- Add GCP icon (Closes #556) [`3ed2c9fc`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3ed2c9fc) +- Add apk file extension for android [`00ae57a7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/00ae57a7) +- #543 Update JSON folder icon [`50207177`](https://github.com/material-extensions/vscode-material-icon-theme/commit/50207177) +- Add file icon for CODEOWNERS [`bff275cb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bff275cb) +- add - icon : json folder [`96a2e9cf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/96a2e9cf) +- add codecov icon [`4eabe245`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4eabe245) +- added icons for advpl projects [`d9fd5426`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d9fd5426) + +#### [v3.9.1](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.9.0...v3.9.1) > October 7, 2019 -- Fix #547 - Create image of contributors profile image list [`088fc53`](https://github.com/PKief/vscode-material-icon-theme/commit/088fc53) -- Update build workflow to support pull requests [`534737b`](https://github.com/PKief/vscode-material-icon-theme/commit/534737b) -- Fixes #548 - Exception thrown when using Japanese display language [`1675790`](https://github.com/PKief/vscode-material-icon-theme/commit/1675790) -- Add more jest extensions [`611be50`](https://github.com/PKief/vscode-material-icon-theme/commit/611be50) -- Create build.yml [`c4acbbb`](https://github.com/PKief/vscode-material-icon-theme/commit/c4acbbb) -- Add types for glob [`2cf7c89`](https://github.com/PKief/vscode-material-icon-theme/commit/2cf7c89) -- Add "databases" to "database" folder names [`3ee46c8`](https://github.com/PKief/vscode-material-icon-theme/commit/3ee46c8) -- Add build.yml [`a429164`](https://github.com/PKief/vscode-material-icon-theme/commit/a429164) +- Fix #547 - Create image of contributors profile image list [`088fc539`](https://github.com/material-extensions/vscode-material-icon-theme/commit/088fc539) +- Update build workflow to support pull requests [`534737b2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/534737b2) +- Fixes #548 - Exception thrown when using Japanese display language [`16757906`](https://github.com/material-extensions/vscode-material-icon-theme/commit/16757906) +- Add more jest extensions [`611be50a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/611be50a) +- Create build.yml [`c4acbbb2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c4acbbb2) +- Add types for glob [`2cf7c89e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2cf7c89e) +- Add "databases" to "database" folder names [`3ee46c8c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3ee46c8c) +- Add build.yml [`a4291642`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a4291642) -#### [v3.9.0](https://github.com/PKief/vscode-material-icon-theme/compare/v3.8.1...v3.9.0) +#### [v3.9.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.8.1...v3.9.0) > August 29, 2019 -- Improve code quality of contributors script [`c8b9a4f`](https://github.com/PKief/vscode-material-icon-theme/commit/c8b9a4f) -- Improve logging of check script [`2e2bb34`](https://github.com/PKief/vscode-material-icon-theme/commit/2e2bb34) -- #514 Update color of event folder [`64a7a68`](https://github.com/PKief/vscode-material-icon-theme/commit/64a7a68) -- Add e2e-spec file extension [`0096771`](https://github.com/PKief/vscode-material-icon-theme/commit/0096771) -- #501 Update colors of nest and nest module icons [`52ad75c`](https://github.com/PKief/vscode-material-icon-theme/commit/52ad75c) -- #501 Sort enum alphabetically [`bcb29b2`](https://github.com/PKief/vscode-material-icon-theme/commit/bcb29b2) -- #501 Update NestJS icons [`a5cf20f`](https://github.com/PKief/vscode-material-icon-theme/commit/a5cf20f) -- #520 Remove unused function [`676cda1`](https://github.com/PKief/vscode-material-icon-theme/commit/676cda1) -- Add bazel file names [`0558790`](https://github.com/PKief/vscode-material-icon-theme/commit/0558790) -- Remove appveyor build badge [`c66742a`](https://github.com/PKief/vscode-material-icon-theme/commit/c66742a) -- Added AC3D (.ac) file icon. [`e966f68`](https://github.com/PKief/vscode-material-icon-theme/commit/e966f68) -- Add gitpod file icon [`3c68d3b`](https://github.com/PKief/vscode-material-icon-theme/commit/3c68d3b) -- #497 Update riot icon [`b458e50`](https://github.com/PKief/vscode-material-icon-theme/commit/b458e50) -- feat: Add `env` to environment folder list [`d279abd`](https://github.com/PKief/vscode-material-icon-theme/commit/d279abd) -- feat: Add folder-event icon [`d61d82b`](https://github.com/PKief/vscode-material-icon-theme/commit/d61d82b) -- Update dependencies [`1baf5eb`](https://github.com/PKief/vscode-material-icon-theme/commit/1baf5eb) -- Associate ".expo-shared" with the expo folder icon [`56c557b`](https://github.com/PKief/vscode-material-icon-theme/commit/56c557b) -- Add inl file extension [`cc71748`](https://github.com/PKief/vscode-material-icon-theme/commit/cc71748) -- Add percy file icon (Closes #508) [`ccfd997`](https://github.com/PKief/vscode-material-icon-theme/commit/ccfd997) -- Update appveyor build configuration [`4f34317`](https://github.com/PKief/vscode-material-icon-theme/commit/4f34317) -- Remove azure pipelines [`c35be72`](https://github.com/PKief/vscode-material-icon-theme/commit/c35be72) -- Remove unused vscode dependency [`c87193a`](https://github.com/PKief/vscode-material-icon-theme/commit/c87193a) -- Add azure pipelines [`7665d27`](https://github.com/PKief/vscode-material-icon-theme/commit/7665d27) -- Update test setup [`2f1e5d1`](https://github.com/PKief/vscode-material-icon-theme/commit/2f1e5d1) -- #470 Update now icons [`5a3ff7e`](https://github.com/PKief/vscode-material-icon-theme/commit/5a3ff7e) -- Add jenkins file extensions [`1c36ac2`](https://github.com/PKief/vscode-material-icon-theme/commit/1c36ac2) -- NestJS Icons - add main filetypes to NestJS [`102bbad`](https://github.com/PKief/vscode-material-icon-theme/commit/102bbad) -- Adjust check scripts to be case insensitive (Closes #494) [`9fa2dd2`](https://github.com/PKief/vscode-material-icon-theme/commit/9fa2dd2) -- Update riot.svg [`b31fb4d`](https://github.com/PKief/vscode-material-icon-theme/commit/b31fb4d) -- add `.nowignore` to filenames [`4d861c2`](https://github.com/PKief/vscode-material-icon-theme/commit/4d861c2) -- use the `fileNames` attribute instead of `fileExtensions` for `now.json` [`6b21c47`](https://github.com/PKief/vscode-material-icon-theme/commit/6b21c47) -- fix now light version [`f94d8d9`](https://github.com/PKief/vscode-material-icon-theme/commit/f94d8d9) -- add now icon for `now.json` [`f96527d`](https://github.com/PKief/vscode-material-icon-theme/commit/f96527d) - -#### [v3.8.1](https://github.com/PKief/vscode-material-icon-theme/compare/v3.8.0...v3.8.1) +- Improve code quality of contributors script [`c8b9a4fb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c8b9a4fb) +- Improve logging of check script [`2e2bb343`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2e2bb343) +- #514 Update color of event folder [`64a7a680`](https://github.com/material-extensions/vscode-material-icon-theme/commit/64a7a680) +- Add e2e-spec file extension [`00967715`](https://github.com/material-extensions/vscode-material-icon-theme/commit/00967715) +- #501 Update colors of nest and nest module icons [`52ad75c1`](https://github.com/material-extensions/vscode-material-icon-theme/commit/52ad75c1) +- #501 Sort enum alphabetically [`bcb29b2f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bcb29b2f) +- #501 Update NestJS icons [`a5cf20f1`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a5cf20f1) +- #520 Remove unused function [`676cda1e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/676cda1e) +- Add bazel file names [`0558790c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0558790c) +- Remove appveyor build badge [`c66742a6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c66742a6) +- Added AC3D (.ac) file icon. [`e966f687`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e966f687) +- Add gitpod file icon [`3c68d3b4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3c68d3b4) +- #497 Update riot icon [`b458e50a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b458e50a) +- feat: Add `env` to environment folder list [`d279abd2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d279abd2) +- feat: Add folder-event icon [`d61d82be`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d61d82be) +- Update dependencies [`1baf5eb0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1baf5eb0) +- Associate ".expo-shared" with the expo folder icon [`56c557b0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/56c557b0) +- Add inl file extension [`cc717489`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cc717489) +- Add percy file icon (Closes #508) [`ccfd9979`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ccfd9979) +- Update appveyor build configuration [`4f34317c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4f34317c) +- Remove azure pipelines [`c35be728`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c35be728) +- Remove unused vscode dependency [`c87193ad`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c87193ad) +- Add azure pipelines [`7665d279`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7665d279) +- Update test setup [`2f1e5d12`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2f1e5d12) +- #470 Update now icons [`5a3ff7e1`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5a3ff7e1) +- Add jenkins file extensions [`1c36ac27`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1c36ac27) +- NestJS Icons - add main filetypes to NestJS [`102bbad7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/102bbad7) +- Adjust check scripts to be case insensitive (Closes #494) [`9fa2dd27`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9fa2dd27) +- Update riot.svg [`b31fb4de`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b31fb4de) +- add `.nowignore` to filenames [`4d861c21`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4d861c21) +- use the `fileNames` attribute instead of `fileExtensions` for `now.json` [`6b21c47d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6b21c47d) +- fix now light version [`f94d8d91`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f94d8d91) +- add now icon for `now.json` [`f96527d6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f96527d6) + +#### [v3.8.1](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.8.0...v3.8.1) > July 17, 2019 -- #490 Update folder color and change motive icon from outline to filled icon [`6b720d9`](https://github.com/PKief/vscode-material-icon-theme/commit/6b720d9) -- Update dependencies [`2efaf4f`](https://github.com/PKief/vscode-material-icon-theme/commit/2efaf4f) -- Removing HPP [`adc80af`](https://github.com/PKief/vscode-material-icon-theme/commit/adc80af) -- Removing case sensitive conflicts [`8ff814d`](https://github.com/PKief/vscode-material-icon-theme/commit/8ff814d) -- Add moonscript icon (Closes #485) [`ad315cb`](https://github.com/PKief/vscode-material-icon-theme/commit/ad315cb) -- feat: Add jsx and tsx extensions to router icons. [`3c8e2eb`](https://github.com/PKief/vscode-material-icon-theme/commit/3c8e2eb) -- feat: Add folder-error to icon map [`3c2594a`](https://github.com/PKief/vscode-material-icon-theme/commit/3c2594a) -- feat: Create folder-error icons [`8082ab1`](https://github.com/PKief/vscode-material-icon-theme/commit/8082ab1) -- Add C/C++ cases based on GNU standards [`52f3910`](https://github.com/PKief/vscode-material-icon-theme/commit/52f3910) -- Add env file extension (Closes #484) [`ce9fcce`](https://github.com/PKief/vscode-material-icon-theme/commit/ce9fcce) -- Refactor code in change detection [`22966c7`](https://github.com/PKief/vscode-material-icon-theme/commit/22966c7) -- Add website folder icon [`a53205d`](https://github.com/PKief/vscode-material-icon-theme/commit/a53205d) -- Use tex icon for .dtx and .ltx files [`87af29d`](https://github.com/PKief/vscode-material-icon-theme/commit/87af29d) -- Add nest icon [`0212fe8`](https://github.com/PKief/vscode-material-icon-theme/commit/0212fe8) -- Update Readme.md [`8099884`](https://github.com/PKief/vscode-material-icon-theme/commit/8099884) -- #475 Update color of go mod icon [`1aeb951`](https://github.com/PKief/vscode-material-icon-theme/commit/1aeb951) -- Change icon name to underscore notation and removed languageIcons entry. [`bd3b010`](https://github.com/PKief/vscode-material-icon-theme/commit/bd3b010) -- Added go.mod and go.sum icons [`2a1afd9`](https://github.com/PKief/vscode-material-icon-theme/commit/2a1afd9) -- Added certificate icon to unlicense files [`2b0d0e5`](https://github.com/PKief/vscode-material-icon-theme/commit/2b0d0e5) -- #448 Add non breaking spaces to improve layout in readme [`2465eb1`](https://github.com/PKief/vscode-material-icon-theme/commit/2465eb1) -- Add PostCSS file names (Closes #461) [`0a61e12`](https://github.com/PKief/vscode-material-icon-theme/commit/0a61e12) -- #448 Remove whitespaces [`0b360d4`](https://github.com/PKief/vscode-material-icon-theme/commit/0b360d4) -- #448 Update readme with contributor images [`02f8712`](https://github.com/PKief/vscode-material-icon-theme/commit/02f8712) -- Update readme text [`441ca9f`](https://github.com/PKief/vscode-material-icon-theme/commit/441ca9f) -- #448 Update contributors URL [`baf2d52`](https://github.com/PKief/vscode-material-icon-theme/commit/baf2d52) -- #448 Create image of contributors list [`bc9a97b`](https://github.com/PKief/vscode-material-icon-theme/commit/bc9a97b) -- #448 Add npm script [`2508995`](https://github.com/PKief/vscode-material-icon-theme/commit/2508995) -- #448 Remove output files [`9701f53`](https://github.com/PKief/vscode-material-icon-theme/commit/9701f53) -- remove leading dot [`c8daf32`](https://github.com/PKief/vscode-material-icon-theme/commit/c8daf32) -- #448 Add contributors script [`0d4e02b`](https://github.com/PKief/vscode-material-icon-theme/commit/0d4e02b) -- use fileExtensions for gitlab icon [`3b2847d`](https://github.com/PKief/vscode-material-icon-theme/commit/3b2847d) -- Update vim icon color and size [`#458`](https://github.com/PKief/vscode-material-icon-theme/pull/458) -- Add icons for Brotli [`56c9d41`](https://github.com/PKief/vscode-material-icon-theme/commit/56c9d41) -- Add silverstripe icon (Closes #457) [`5b850a9`](https://github.com/PKief/vscode-material-icon-theme/commit/5b850a9) -- fix typo [`2a6bd74`](https://github.com/PKief/vscode-material-icon-theme/commit/2a6bd74) -- Add Vim icon [`fc4df5b`](https://github.com/PKief/vscode-material-icon-theme/commit/fc4df5b) -- Add nodemon file name (nodemon-debug.json) [`dcb4513`](https://github.com/PKief/vscode-material-icon-theme/commit/dcb4513) - -#### [v3.8.0](https://github.com/PKief/vscode-material-icon-theme/compare/v3.7.0...v3.8.0) +- #490 Update folder color and change motive icon from outline to filled icon [`6b720d9a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6b720d9a) +- Update dependencies [`2efaf4f6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2efaf4f6) +- Removing HPP [`adc80af7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/adc80af7) +- Removing case sensitive conflicts [`8ff814d3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8ff814d3) +- Add moonscript icon (Closes #485) [`ad315cba`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ad315cba) +- feat: Add jsx and tsx extensions to router icons. [`3c8e2ebe`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3c8e2ebe) +- feat: Add folder-error to icon map [`3c2594a0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3c2594a0) +- feat: Create folder-error icons [`8082ab16`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8082ab16) +- Add C/C++ cases based on GNU standards [`52f39101`](https://github.com/material-extensions/vscode-material-icon-theme/commit/52f39101) +- Add env file extension (Closes #484) [`ce9fcceb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ce9fcceb) +- Refactor code in change detection [`22966c7f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/22966c7f) +- Add website folder icon [`a53205d3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a53205d3) +- Use tex icon for .dtx and .ltx files [`87af29d2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/87af29d2) +- Add nest icon [`0212fe87`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0212fe87) +- Update Readme.md [`80998844`](https://github.com/material-extensions/vscode-material-icon-theme/commit/80998844) +- #475 Update color of go mod icon [`1aeb951a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1aeb951a) +- Change icon name to underscore notation and removed languageIcons entry. [`bd3b0100`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bd3b0100) +- Added go.mod and go.sum icons [`2a1afd9d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2a1afd9d) +- Added certificate icon to unlicense files [`2b0d0e56`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2b0d0e56) +- #448 Add non breaking spaces to improve layout in readme [`2465eb14`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2465eb14) +- Add PostCSS file names (Closes #461) [`0a61e12c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0a61e12c) +- #448 Remove whitespaces [`0b360d41`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0b360d41) +- #448 Update readme with contributor images [`02f8712f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/02f8712f) +- Update readme text [`441ca9f5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/441ca9f5) +- #448 Update contributors URL [`baf2d52b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/baf2d52b) +- #448 Create image of contributors list [`bc9a97b3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bc9a97b3) +- #448 Add npm script [`25089950`](https://github.com/material-extensions/vscode-material-icon-theme/commit/25089950) +- #448 Remove output files [`9701f532`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9701f532) +- remove leading dot [`c8daf321`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c8daf321) +- #448 Add contributors script [`0d4e02b5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0d4e02b5) +- use fileExtensions for gitlab icon [`3b2847da`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3b2847da) +- Update vim icon color and size [`#458`](https://github.com/material-extensions/vscode-material-icon-theme/pull/458) +- Add icons for Brotli [`56c9d410`](https://github.com/material-extensions/vscode-material-icon-theme/commit/56c9d410) +- Add silverstripe icon (Closes #457) [`5b850a97`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5b850a97) +- fix typo [`2a6bd74e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2a6bd74e) +- Add Vim icon [`fc4df5b0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/fc4df5b0) +- Add nodemon file name (nodemon-debug.json) [`dcb45130`](https://github.com/material-extensions/vscode-material-icon-theme/commit/dcb45130) + +#### [v3.8.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.7.0...v3.8.0) > May 25, 2019 -- Updated translation keys [`490d2c2`](https://github.com/PKief/vscode-material-icon-theme/commit/490d2c2) -- Updated command names [`e59aee9`](https://github.com/PKief/vscode-material-icon-theme/commit/e59aee9) -- Improved compatibility for older versions of VS Code [`3fedead`](https://github.com/PKief/vscode-material-icon-theme/commit/3fedead) -- Enable hot reload for hidesExplorerArrows configuration (Closes #454) [`c65d9a6`](https://github.com/PKief/vscode-material-icon-theme/commit/c65d9a6) -- Update nuxt icons (Related to #450) [`42de81d`](https://github.com/PKief/vscode-material-icon-theme/commit/42de81d) -- Compress icons [`7dc5faa`](https://github.com/PKief/vscode-material-icon-theme/commit/7dc5faa) -- Show language icons in preview (Fixes #421) [`05bde2b`](https://github.com/PKief/vscode-material-icon-theme/commit/05bde2b) -- Add Polish translation [`affaca8`](https://github.com/PKief/vscode-material-icon-theme/commit/affaca8) -- Update color of netlify icon [`d6da2f1`](https://github.com/PKief/vscode-material-icon-theme/commit/d6da2f1) -- Updated dependencies [`443586e`](https://github.com/PKief/vscode-material-icon-theme/commit/443586e) -- Add directives icon [`62a52e0`](https://github.com/PKief/vscode-material-icon-theme/commit/62a52e0) -- Remove whitespace [`7f8553d`](https://github.com/PKief/vscode-material-icon-theme/commit/7f8553d) -- Add nuxt icons [`70f053b`](https://github.com/PKief/vscode-material-icon-theme/commit/70f053b) -- Updated open dependency [`dfa3c06`](https://github.com/PKief/vscode-material-icon-theme/commit/dfa3c06) -- adds .mocharc.js [`c732307`](https://github.com/PKief/vscode-material-icon-theme/commit/c732307) -- adds .mocharc icons [`9e8dab0`](https://github.com/PKief/vscode-material-icon-theme/commit/9e8dab0) -- Add Dutch translation. [`2789ca8`](https://github.com/PKief/vscode-material-icon-theme/commit/2789ca8) -- Set "extensionKind": "ui" to support remote development [`222f6ed`](https://github.com/PKief/vscode-material-icon-theme/commit/222f6ed) -- Added svelte file icon (Closes #439) [`22a83ed`](https://github.com/PKief/vscode-material-icon-theme/commit/22a83ed) -- Refactored code [`e7d12a5`](https://github.com/PKief/vscode-material-icon-theme/commit/e7d12a5) -- Added tsbuildinfo [`c408ac8`](https://github.com/PKief/vscode-material-icon-theme/commit/c408ac8) -- Added translations [`3e3abc7`](https://github.com/PKief/vscode-material-icon-theme/commit/3e3abc7) -- Updated vue icons [`3e5e7d5`](https://github.com/PKief/vscode-material-icon-theme/commit/3e5e7d5) -- Add new 'leex' extension to elixir icon. [`6c0be76`](https://github.com/PKief/vscode-material-icon-theme/commit/6c0be76) -- added tune icon to .env file names supported by Create React App [`b46932d`](https://github.com/PKief/vscode-material-icon-theme/commit/b46932d) -- Remove whitespace add router icon for vue theme [`1bc44dd`](https://github.com/PKief/vscode-material-icon-theme/commit/1bc44dd) -- Add vue and vuex_vuex theme [`fd6a171`](https://github.com/PKief/vscode-material-icon-theme/commit/fd6a171) -- add netlify file icon [`8960cea`](https://github.com/PKief/vscode-material-icon-theme/commit/8960cea) - -#### [v3.7.0](https://github.com/PKief/vscode-material-icon-theme/compare/v3.6.3...v3.7.0) +- Updated translation keys [`490d2c2d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/490d2c2d) +- Updated command names [`e59aee94`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e59aee94) +- Improved compatibility for older versions of VS Code [`3fedead6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3fedead6) +- Enable hot reload for hidesExplorerArrows configuration (Closes #454) [`c65d9a69`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c65d9a69) +- Update nuxt icons (Related to #450) [`42de81dd`](https://github.com/material-extensions/vscode-material-icon-theme/commit/42de81dd) +- Compress icons [`7dc5faa4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7dc5faa4) +- Show language icons in preview (Fixes #421) [`05bde2bd`](https://github.com/material-extensions/vscode-material-icon-theme/commit/05bde2bd) +- Add Polish translation [`affaca88`](https://github.com/material-extensions/vscode-material-icon-theme/commit/affaca88) +- Update color of netlify icon [`d6da2f1d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d6da2f1d) +- Updated dependencies [`443586e2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/443586e2) +- Add directives icon [`62a52e01`](https://github.com/material-extensions/vscode-material-icon-theme/commit/62a52e01) +- Remove whitespace [`7f8553dc`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7f8553dc) +- Add nuxt icons [`70f053b7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/70f053b7) +- Updated open dependency [`dfa3c069`](https://github.com/material-extensions/vscode-material-icon-theme/commit/dfa3c069) +- adds .mocharc.js [`c7323071`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c7323071) +- adds .mocharc icons [`9e8dab08`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9e8dab08) +- Add Dutch translation. [`2789ca81`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2789ca81) +- Set "extensionKind": "ui" to support remote development [`222f6edf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/222f6edf) +- Added svelte file icon (Closes #439) [`22a83ed4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/22a83ed4) +- Refactored code [`e7d12a58`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e7d12a58) +- Added tsbuildinfo [`c408ac8b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c408ac8b) +- Added translations [`3e3abc7b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3e3abc7b) +- Updated vue icons [`3e5e7d56`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3e5e7d56) +- Add new 'leex' extension to elixir icon. [`6c0be766`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6c0be766) +- added tune icon to .env file names supported by Create React App [`b46932d8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b46932d8) +- Remove whitespace add router icon for vue theme [`1bc44dd2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1bc44dd2) +- Add vue and vuex_vuex theme [`fd6a171c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/fd6a171c) +- add netlify file icon [`8960ceac`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8960ceac) + +#### [v3.7.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.6.3...v3.7.0) > March 24, 2019 -- Improved npm scripts [`85365f2`](https://github.com/PKief/vscode-material-icon-theme/commit/85365f2) -- feat: Add `.cson` and `.iced` CoffeeScript extensions [`3c3c819`](https://github.com/PKief/vscode-material-icon-theme/commit/3c3c819) -- Updated vscode ignore [`2863fd3`](https://github.com/PKief/vscode-material-icon-theme/commit/2863fd3) -- Updated vscode ignore [`5f04a9d`](https://github.com/PKief/vscode-material-icon-theme/commit/5f04a9d) -- Added hot reload in change detection [`bee8e0c`](https://github.com/PKief/vscode-material-icon-theme/commit/bee8e0c) -- Added svg folder icon (Closes #358) [`94863f0`](https://github.com/PKief/vscode-material-icon-theme/commit/94863f0) -- Added svg file icon (Closes #400) [`72663ad`](https://github.com/PKief/vscode-material-icon-theme/commit/72663ad) -- Updated travis-ci badge [`ba1fa2a`](https://github.com/PKief/vscode-material-icon-theme/commit/ba1fa2a) -- Updated generation of preview images [`d38de4e`](https://github.com/PKief/vscode-material-icon-theme/commit/d38de4e) -- Updated build scripts [`760b353`](https://github.com/PKief/vscode-material-icon-theme/commit/760b353) -- Bundle code in production mode [`9f23ebf`](https://github.com/PKief/vscode-material-icon-theme/commit/9f23ebf) -- Bundle extension with webpack [`6850337`](https://github.com/PKief/vscode-material-icon-theme/commit/6850337) -- Refactored code [`f21ca04`](https://github.com/PKief/vscode-material-icon-theme/commit/f21ca04) -- Added pipe folder icon (Closes #403) [`5fc86ec`](https://github.com/PKief/vscode-material-icon-theme/commit/5fc86ec) -- Remove extra dot [`74c4893`](https://github.com/PKief/vscode-material-icon-theme/commit/74c4893) -- Use clojure icon for .cljc files [`1295f3a`](https://github.com/PKief/vscode-material-icon-theme/commit/1295f3a) -- Update folderIcons.ts [`ae31aeb`](https://github.com/PKief/vscode-material-icon-theme/commit/ae31aeb) -- Allow custom saturation values for icons [`aea186a`](https://github.com/PKief/vscode-material-icon-theme/commit/aea186a) -- Added .graphqlconfig [`c7ffad8`](https://github.com/PKief/vscode-material-icon-theme/commit/c7ffad8) -- Add additional gatsby file names [`ed2a1d6`](https://github.com/PKief/vscode-material-icon-theme/commit/ed2a1d6) -- Updated badges [`ff560d8`](https://github.com/PKief/vscode-material-icon-theme/commit/ff560d8) -- Add config for grayscale icons [`f5a2e4c`](https://github.com/PKief/vscode-material-icon-theme/commit/f5a2e4c) -- Add web folder icon [`f2b6a8b`](https://github.com/PKief/vscode-material-icon-theme/commit/f2b6a8b) -- Join gatsby filenames to the single array [`21faf34`](https://github.com/PKief/vscode-material-icon-theme/commit/21faf34) -- Fix gatsby config fileName. Add gatsby-node fileName to existing gatsby icon [`79d8cda`](https://github.com/PKief/vscode-material-icon-theme/commit/79d8cda) - -#### [v3.6.3](https://github.com/PKief/vscode-material-icon-theme/compare/v3.6.2...v3.6.3) +- Improved npm scripts [`85365f23`](https://github.com/material-extensions/vscode-material-icon-theme/commit/85365f23) +- feat: Add `.cson` and `.iced` CoffeeScript extensions [`3c3c819e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3c3c819e) +- Updated vscode ignore [`2863fd3f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2863fd3f) +- Updated vscode ignore [`5f04a9d7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5f04a9d7) +- Added hot reload in change detection [`bee8e0c3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bee8e0c3) +- Added svg folder icon (Closes #358) [`94863f0f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/94863f0f) +- Added svg file icon (Closes #400) [`72663adf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/72663adf) +- Updated travis-ci badge [`ba1fa2a6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ba1fa2a6) +- Updated generation of preview images [`d38de4e5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d38de4e5) +- Updated build scripts [`760b3539`](https://github.com/material-extensions/vscode-material-icon-theme/commit/760b3539) +- Bundle code in production mode [`9f23ebf6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9f23ebf6) +- Bundle extension with webpack [`6850337e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6850337e) +- Refactored code [`f21ca04c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f21ca04c) +- Added pipe folder icon (Closes #403) [`5fc86ecc`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5fc86ecc) +- Remove extra dot [`74c48935`](https://github.com/material-extensions/vscode-material-icon-theme/commit/74c48935) +- Use clojure icon for .cljc files [`1295f3a5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1295f3a5) +- Update folderIcons.ts [`ae31aebc`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ae31aebc) +- Allow custom saturation values for icons [`aea186ae`](https://github.com/material-extensions/vscode-material-icon-theme/commit/aea186ae) +- Added .graphqlconfig [`c7ffad88`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c7ffad88) +- Add additional gatsby file names [`ed2a1d6a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ed2a1d6a) +- Updated badges [`ff560d8d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ff560d8d) +- Add config for grayscale icons [`f5a2e4cd`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f5a2e4cd) +- Add web folder icon [`f2b6a8b9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f2b6a8b9) +- Join gatsby filenames to the single array [`21faf349`](https://github.com/material-extensions/vscode-material-icon-theme/commit/21faf349) +- Fix gatsby config fileName. Add gatsby-node fileName to existing gatsby icon [`79d8cda9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/79d8cda9) + +#### [v3.6.3](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.6.2...v3.6.3) > February 8, 2019 -- Add Prisma Folder Icons [`4d0fbcb`](https://github.com/PKief/vscode-material-icon-theme/commit/4d0fbcb) -- Updated buildkite icon (References #354) [`bf75496`](https://github.com/PKief/vscode-material-icon-theme/commit/bf75496) -- Updated buildkite icon (References #354) [`6df27fb`](https://github.com/PKief/vscode-material-icon-theme/commit/6df27fb) -- Updated size of graphql icon (References #380) [`128092c`](https://github.com/PKief/vscode-material-icon-theme/commit/128092c) -- Added GraphQL folder icon [`ada1285`](https://github.com/PKief/vscode-material-icon-theme/commit/ada1285) -- Added Scheme icon (Closes #364) [`a919476`](https://github.com/PKief/vscode-material-icon-theme/commit/a919476) -- Added crystal icon on .ecr ( Embedded Crystal ) [`9afc89c`](https://github.com/PKief/vscode-material-icon-theme/commit/9afc89c) -- Added crystal icon on .ecr ( Embedded Crystal ) [`af5eac8`](https://github.com/PKief/vscode-material-icon-theme/commit/af5eac8) -- Updated size and color (References #369) [`074bf18`](https://github.com/PKief/vscode-material-icon-theme/commit/074bf18) -- Added validation(s) folder association (Closes #375) [`b754d7a`](https://github.com/PKief/vscode-material-icon-theme/commit/b754d7a) -- Added dot-file-style for AppVeyor [`b1251ae`](https://github.com/PKief/vscode-material-icon-theme/commit/b1251ae) -- Added PureScript file extension (Closes #365) [`0f345a3`](https://github.com/PKief/vscode-material-icon-theme/commit/0f345a3) -- Add Tailwind CSS icon [`674fe79`](https://github.com/PKief/vscode-material-icon-theme/commit/674fe79) -- Corrected file [`7792e59`](https://github.com/PKief/vscode-material-icon-theme/commit/7792e59) -- added obj icon [`ee01d66`](https://github.com/PKief/vscode-material-icon-theme/commit/ee01d66) -- Updated buildkite icon [`0027121`](https://github.com/PKief/vscode-material-icon-theme/commit/0027121) -- add icon for Buildkite [`3e24d1b`](https://github.com/PKief/vscode-material-icon-theme/commit/3e24d1b) - -#### [v3.6.2](https://github.com/PKief/vscode-material-icon-theme/compare/v3.6.1...v3.6.2) +- Add Prisma Folder Icons [`4d0fbcb4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4d0fbcb4) +- Updated buildkite icon (References #354) [`bf754960`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bf754960) +- Updated buildkite icon (References #354) [`6df27fb2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6df27fb2) +- Updated size of graphql icon (References #380) [`128092c5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/128092c5) +- Added GraphQL folder icon [`ada12853`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ada12853) +- Added Scheme icon (Closes #364) [`a9194769`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a9194769) +- Added crystal icon on .ecr ( Embedded Crystal ) [`9afc89c8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9afc89c8) +- Added crystal icon on .ecr ( Embedded Crystal ) [`af5eac85`](https://github.com/material-extensions/vscode-material-icon-theme/commit/af5eac85) +- Updated size and color (References #369) [`074bf180`](https://github.com/material-extensions/vscode-material-icon-theme/commit/074bf180) +- Added validation(s) folder association (Closes #375) [`b754d7a5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b754d7a5) +- Added dot-file-style for AppVeyor [`b1251ae6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b1251ae6) +- Added PureScript file extension (Closes #365) [`0f345a37`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0f345a37) +- Add Tailwind CSS icon [`674fe790`](https://github.com/material-extensions/vscode-material-icon-theme/commit/674fe790) +- Corrected file [`7792e59b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7792e59b) +- added obj icon [`ee01d66c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ee01d66c) +- Updated buildkite icon [`00271210`](https://github.com/material-extensions/vscode-material-icon-theme/commit/00271210) +- add icon for Buildkite [`3e24d1b9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3e24d1b9) + +#### [v3.6.2](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.6.1...v3.6.2) > December 20, 2018 -- Updated expo folder icon (References #84) [`bc94e9f`](https://github.com/PKief/vscode-material-icon-theme/commit/bc94e9f) -- Added edge icon (Closes #359) [`2a27eb7`](https://github.com/PKief/vscode-material-icon-theme/commit/2a27eb7) -- Added Istanbul icon (Closes #192) [`f9a32ca`](https://github.com/PKief/vscode-material-icon-theme/commit/f9a32ca) -- Added Angular related folder icons (References #350) [`49122b4`](https://github.com/PKief/vscode-material-icon-theme/commit/49122b4) -- Updated icon name [`c056f2b`](https://github.com/PKief/vscode-material-icon-theme/commit/c056f2b) -- Added asciidoc file icon (Closes #352) [`6b0a8bb`](https://github.com/PKief/vscode-material-icon-theme/commit/6b0a8bb) -- Added folder icons: - animation - review - rules - syntax [`cfec8f1`](https://github.com/PKief/vscode-material-icon-theme/commit/cfec8f1) -- Added private and secure folder icons [`32f69b1`](https://github.com/PKief/vscode-material-icon-theme/commit/32f69b1) -- Updated folder icons - app - ngrx-state [`ed402f4`](https://github.com/PKief/vscode-material-icon-theme/commit/ed402f4) -- Added Ngrx store folder icon (Closes #349) [`45b8030`](https://github.com/PKief/vscode-material-icon-theme/commit/45b8030) -- Updated log messages of scripts [`00e4978`](https://github.com/PKief/vscode-material-icon-theme/commit/00e4978) -- Updated screenshots script (References #319) [`6102993`](https://github.com/PKief/vscode-material-icon-theme/commit/6102993) -- Add some alias for build and python test [`e4d3d8f`](https://github.com/PKief/vscode-material-icon-theme/commit/e4d3d8f) -- Add alias .webpack for webpack [`cc226c6`](https://github.com/PKief/vscode-material-icon-theme/commit/cc226c6) -- Add .idea folder icon for intellij/jetbrain suite meta folder [`ac265ee`](https://github.com/PKief/vscode-material-icon-theme/commit/ac265ee) -- Add alias to syntax folder, definition [`dd1970d`](https://github.com/PKief/vscode-material-icon-theme/commit/dd1970d) -- Add flow-typed folder icons [`54adacf`](https://github.com/PKief/vscode-material-icon-theme/commit/54adacf) -- Add some folder aliases [`f857ac2`](https://github.com/PKief/vscode-material-icon-theme/commit/f857ac2) -- Reposition two folder icons [`f6aa4a1`](https://github.com/PKief/vscode-material-icon-theme/commit/f6aa4a1) -- Add new folder icons storybook and stylus based on file icon [`fad7282`](https://github.com/PKief/vscode-material-icon-theme/commit/fad7282) -- Add new folder icons: mock,syntax,styleguide,scenario,vm [`02febad`](https://github.com/PKief/vscode-material-icon-theme/commit/02febad) -- Add a node js icon on filder node :art: [`3f3e520`](https://github.com/PKief/vscode-material-icon-theme/commit/3f3e520) -- Add the forgotten docker-compose.test.yml to the dockers file [`e1de3ba`](https://github.com/PKief/vscode-material-icon-theme/commit/e1de3ba) -- Add icon for grunt folder [`cdde91d`](https://github.com/PKief/vscode-material-icon-theme/commit/cdde91d) -- Singularize screenshot and icon folder icons from images [`92954c6`](https://github.com/PKief/vscode-material-icon-theme/commit/92954c6) -- Add two new folder icon e2e for end to end test and custom [`95e6f7e`](https://github.com/PKief/vscode-material-icon-theme/commit/95e6f7e) -- Added file prefix to puppeteer page link [`a95d4b2`](https://github.com/PKief/vscode-material-icon-theme/commit/a95d4b2) - -#### [v3.6.1](https://github.com/PKief/vscode-material-icon-theme/compare/v3.6.0...v3.6.1) +- Updated expo folder icon (References #84) [`bc94e9f3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bc94e9f3) +- Added edge icon (Closes #359) [`2a27eb79`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2a27eb79) +- Added Istanbul icon (Closes #192) [`f9a32ca7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f9a32ca7) +- Added Angular related folder icons (References #350) [`49122b4f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/49122b4f) +- Updated icon name [`c056f2b3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c056f2b3) +- Added asciidoc file icon (Closes #352) [`6b0a8bb5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6b0a8bb5) +- Added folder icons: - animation - review - rules - syntax [`cfec8f13`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cfec8f13) +- Added private and secure folder icons [`32f69b16`](https://github.com/material-extensions/vscode-material-icon-theme/commit/32f69b16) +- Updated folder icons - app - ngrx-state [`ed402f4b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ed402f4b) +- Added Ngrx store folder icon (Closes #349) [`45b8030b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/45b8030b) +- Updated log messages of scripts [`00e49784`](https://github.com/material-extensions/vscode-material-icon-theme/commit/00e49784) +- Updated screenshots script (References #319) [`61029939`](https://github.com/material-extensions/vscode-material-icon-theme/commit/61029939) +- Add some alias for build and python test [`e4d3d8f8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e4d3d8f8) +- Add alias .webpack for webpack [`cc226c69`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cc226c69) +- Add .idea folder icon for intellij/jetbrain suite meta folder [`ac265ee1`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ac265ee1) +- Add alias to syntax folder, definition [`dd1970d9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/dd1970d9) +- Add flow-typed folder icons [`54adacf9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/54adacf9) +- Add some folder aliases [`f857ac27`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f857ac27) +- Reposition two folder icons [`f6aa4a10`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f6aa4a10) +- Add new folder icons storybook and stylus based on file icon [`fad7282d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/fad7282d) +- Add new folder icons: mock,syntax,styleguide,scenario,vm [`02febad7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/02febad7) +- Add a node js icon on filder node :art: [`3f3e520b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3f3e520b) +- Add the forgotten docker-compose.test.yml to the dockers file [`e1de3ba8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e1de3ba8) +- Add icon for grunt folder [`cdde91d6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cdde91d6) +- Singularize screenshot and icon folder icons from images [`92954c65`](https://github.com/material-extensions/vscode-material-icon-theme/commit/92954c65) +- Add two new folder icon e2e for end to end test and custom [`95e6f7e4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/95e6f7e4) +- Added file prefix to puppeteer page link [`a95d4b2e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a95d4b2e) + +#### [v3.6.1](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.6.0...v3.6.1) > November 21, 2018 -- Updated functions folder icon [`61fbd22`](https://github.com/PKief/vscode-material-icon-theme/commit/61fbd22) -- Improved preview script [`c57466f`](https://github.com/PKief/vscode-material-icon-theme/commit/c57466f) -- Minor improvements [`73cea76`](https://github.com/PKief/vscode-material-icon-theme/commit/73cea76) -- fix: add missing comma [`64ba434`](https://github.com/PKief/vscode-material-icon-theme/commit/64ba434) -- Adding Visual Studio config files & .clang-tidy [`3b817a5`](https://github.com/PKief/vscode-material-icon-theme/commit/3b817a5) -- Refined folder icons (References #339) [`86ec9ec`](https://github.com/PKief/vscode-material-icon-theme/commit/86ec9ec) -- Adding some docker compose aliases [`442cb33`](https://github.com/PKief/vscode-material-icon-theme/commit/442cb33) -- Refined Razor icon (References #342) [`85b7c63`](https://github.com/PKief/vscode-material-icon-theme/commit/85b7c63) -- Updated dependencies [`d213647`](https://github.com/PKief/vscode-material-icon-theme/commit/d213647) -- Updated color of dump folder icon (Related to #339) [`8f1a267`](https://github.com/PKief/vscode-material-icon-theme/commit/8f1a267) -- Updated color of examples folder icon (Related to #339) [`ab4087e`](https://github.com/PKief/vscode-material-icon-theme/commit/ab4087e) -- Updated generator icon (Related to #339) [`2c06a14`](https://github.com/PKief/vscode-material-icon-theme/commit/2c06a14) -- Updated folder icon associations (Related to #339) [`612a148`](https://github.com/PKief/vscode-material-icon-theme/commit/612a148) -- Optimized icon colors (Related to #339) [`5ddc2d2`](https://github.com/PKief/vscode-material-icon-theme/commit/5ddc2d2) -- Try to apply color guidelines =) [`d75083f`](https://github.com/PKief/vscode-material-icon-theme/commit/d75083f) -- Add examples folder icon [`f85c608`](https://github.com/PKief/vscode-material-icon-theme/commit/f85c608) -- Updated secondary file icons (vue.config, js.map, css.map) [`e47ad39`](https://github.com/PKief/vscode-material-icon-theme/commit/e47ad39) -- Updated python-file (Related to #340) [`331c8e2`](https://github.com/PKief/vscode-material-icon-theme/commit/331c8e2) -- Added .env file icon associations (Fixes #261) [`bf0054c`](https://github.com/PKief/vscode-material-icon-theme/commit/bf0054c) -- Add a python-file icon that is assign to python related files [`281f5f8`](https://github.com/PKief/vscode-material-icon-theme/commit/281f5f8) -- Add some alias to existing folder directories [`43c9720`](https://github.com/PKief/vscode-material-icon-theme/commit/43c9720) -- Add mapping for the new icons [`a8b92bb`](https://github.com/PKief/vscode-material-icon-theme/commit/a8b92bb) -- Add color to all the new icons :art: :rainbow: [`69ed51d`](https://github.com/PKief/vscode-material-icon-theme/commit/69ed51d) -- Generated all the open folder with a little cut&sed command :wink: [`757007e`](https://github.com/PKief/vscode-material-icon-theme/commit/757007e) -- Optimise with svgo and reformat xml [`5268c5d`](https://github.com/PKief/vscode-material-icon-theme/commit/5268c5d) -- Reposition icon with inkscape [`b70ef94`](https://github.com/PKief/vscode-material-icon-theme/commit/b70ef94) -- Add a last massive batch of folder icons, no positionning so far [`cf75cca`](https://github.com/PKief/vscode-material-icon-theme/commit/cf75cca) -- Declare the serverless folder icon [`71a180d`](https://github.com/PKief/vscode-material-icon-theme/commit/71a180d) -- Optimise serverless and set color [`6069458`](https://github.com/PKief/vscode-material-icon-theme/commit/6069458) -- Reformat all the news icons svg [`ed07079`](https://github.com/PKief/vscode-material-icon-theme/commit/ed07079) -- Second Batch of icons without colors so far [`9c8ad58`](https://github.com/PKief/vscode-material-icon-theme/commit/9c8ad58) -- Add a bunch of new folder icons colorless for now [`d1b54e3`](https://github.com/PKief/vscode-material-icon-theme/commit/d1b54e3) -- Added Procfile.windows [`dbaa5eb`](https://github.com/PKief/vscode-material-icon-theme/commit/dbaa5eb) -- Add "typings" and "@types" as a TypeScript folder (Resolves #337) [`ca0b523`](https://github.com/PKief/vscode-material-icon-theme/commit/ca0b523) -- Lowercase file names [`69bee83`](https://github.com/PKief/vscode-material-icon-theme/commit/69bee83) -- Add docker-compose.staging.yml to Docker icons [`0dd6d1c`](https://github.com/PKief/vscode-material-icon-theme/commit/0dd6d1c) -- Added Vagrantfile icon (Closes #324) [`559809f`](https://github.com/PKief/vscode-material-icon-theme/commit/559809f) -- Added .tsx icon (Closes #322) [`3793867`](https://github.com/PKief/vscode-material-icon-theme/commit/3793867) -- Added middleware folder icon [`6344e10`](https://github.com/PKief/vscode-material-icon-theme/commit/6344e10) -- Updated powershell icon [`9f4f5de`](https://github.com/PKief/vscode-material-icon-theme/commit/9f4f5de) -- added icon for vue.config.js file [`a1adcdc`](https://github.com/PKief/vscode-material-icon-theme/commit/a1adcdc) -- Added Azure icons (Closes #321) [`22be92e`](https://github.com/PKief/vscode-material-icon-theme/commit/22be92e) -- Add Prisma folder and file icons [`37868e2`](https://github.com/PKief/vscode-material-icon-theme/commit/37868e2) - -#### [v3.6.0](https://github.com/PKief/vscode-material-icon-theme/compare/v3.5.3...v3.6.0) +- Updated functions folder icon [`61fbd226`](https://github.com/material-extensions/vscode-material-icon-theme/commit/61fbd226) +- Improved preview script [`c57466f7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c57466f7) +- Minor improvements [`73cea76c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/73cea76c) +- fix: add missing comma [`64ba4343`](https://github.com/material-extensions/vscode-material-icon-theme/commit/64ba4343) +- Adding Visual Studio config files & .clang-tidy [`3b817a5d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3b817a5d) +- Refined folder icons (References #339) [`86ec9ecb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/86ec9ecb) +- Adding some docker compose aliases [`442cb337`](https://github.com/material-extensions/vscode-material-icon-theme/commit/442cb337) +- Refined Razor icon (References #342) [`85b7c635`](https://github.com/material-extensions/vscode-material-icon-theme/commit/85b7c635) +- Updated dependencies [`d2136472`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d2136472) +- Updated color of dump folder icon (Related to #339) [`8f1a267f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8f1a267f) +- Updated color of examples folder icon (Related to #339) [`ab4087ed`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ab4087ed) +- Updated generator icon (Related to #339) [`2c06a14f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2c06a14f) +- Updated folder icon associations (Related to #339) [`612a148c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/612a148c) +- Optimized icon colors (Related to #339) [`5ddc2d2c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5ddc2d2c) +- Try to apply color guidelines =) [`d75083fd`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d75083fd) +- Add examples folder icon [`f85c6080`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f85c6080) +- Updated secondary file icons (vue.config, js.map, css.map) [`e47ad39c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e47ad39c) +- Updated python-file (Related to #340) [`331c8e25`](https://github.com/material-extensions/vscode-material-icon-theme/commit/331c8e25) +- Added .env file icon associations (Fixes #261) [`bf0054ce`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bf0054ce) +- Add a python-file icon that is assign to python related files [`281f5f88`](https://github.com/material-extensions/vscode-material-icon-theme/commit/281f5f88) +- Add some alias to existing folder directories [`43c97209`](https://github.com/material-extensions/vscode-material-icon-theme/commit/43c97209) +- Add mapping for the new icons [`a8b92bbd`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a8b92bbd) +- Add color to all the new icons :art: :rainbow: [`69ed51df`](https://github.com/material-extensions/vscode-material-icon-theme/commit/69ed51df) +- Generated all the open folder with a little cut&sed command :wink: [`757007ea`](https://github.com/material-extensions/vscode-material-icon-theme/commit/757007ea) +- Optimise with svgo and reformat xml [`5268c5db`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5268c5db) +- Reposition icon with inkscape [`b70ef94a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b70ef94a) +- Add a last massive batch of folder icons, no positionning so far [`cf75ccab`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cf75ccab) +- Declare the serverless folder icon [`71a180df`](https://github.com/material-extensions/vscode-material-icon-theme/commit/71a180df) +- Optimise serverless and set color [`60694585`](https://github.com/material-extensions/vscode-material-icon-theme/commit/60694585) +- Reformat all the news icons svg [`ed070795`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ed070795) +- Second Batch of icons without colors so far [`9c8ad583`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9c8ad583) +- Add a bunch of new folder icons colorless for now [`d1b54e35`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d1b54e35) +- Added Procfile.windows [`dbaa5eb8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/dbaa5eb8) +- Add "typings" and "@types" as a TypeScript folder (Resolves #337) [`ca0b5231`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ca0b5231) +- Lowercase file names [`69bee83c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/69bee83c) +- Add docker-compose.staging.yml to Docker icons [`0dd6d1c7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0dd6d1c7) +- Added Vagrantfile icon (Closes #324) [`559809f3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/559809f3) +- Added .tsx icon (Closes #322) [`37938673`](https://github.com/material-extensions/vscode-material-icon-theme/commit/37938673) +- Added middleware folder icon [`6344e102`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6344e102) +- Updated powershell icon [`9f4f5de5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9f4f5de5) +- added icon for vue.config.js file [`a1adcdc2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a1adcdc2) +- Added Azure icons (Closes #321) [`22be92e8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/22be92e8) +- Add Prisma folder and file icons [`37868e2c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/37868e2c) + +#### [v3.6.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.5.3...v3.6.0) > September 10, 2018 -- Updated restore config command [`ec900d7`](https://github.com/PKief/vscode-material-icon-theme/commit/ec900d7) -- Fixed bugs - change detection must not trigger reload for invalid values [`8c6096c`](https://github.com/PKief/vscode-material-icon-theme/commit/8c6096c) -- Adapting the extension to the new Settings GUI [`c4bb7af`](https://github.com/PKief/vscode-material-icon-theme/commit/c4bb7af) -- Adapting the extension to the new Settings GUI [`818f888`](https://github.com/PKief/vscode-material-icon-theme/commit/818f888) -- Improved code quality [`6c1ddf4`](https://github.com/PKief/vscode-material-icon-theme/commit/6c1ddf4) -- Fixed size of godot icons (References #316) [`622d1a5`](https://github.com/PKief/vscode-material-icon-theme/commit/622d1a5) -- Added godot icon [`c1a12bf`](https://github.com/PKief/vscode-material-icon-theme/commit/c1a12bf) -- Added folder icons - android, ios (Closes #312) - client, server (References #296) - upload, dowload (References #218) - helpers - tasks (References #218) - tools - themes [`aba8cae`](https://github.com/PKief/vscode-material-icon-theme/commit/aba8cae) -- Updated babel icon (Closes #315) [`bdac3d1`](https://github.com/PKief/vscode-material-icon-theme/commit/bdac3d1) -- Added: csx extension to csharp [`c481fe9`](https://github.com/PKief/vscode-material-icon-theme/commit/c481fe9) -- Added velocity icon (Closes #311) [`3e8f93b`](https://github.com/PKief/vscode-material-icon-theme/commit/3e8f93b) -- Added mint icon (Closes #308) [`38f46ab`](https://github.com/PKief/vscode-material-icon-theme/commit/38f46ab) -- .clang-format + bazel icons [`2454699`](https://github.com/PKief/vscode-material-icon-theme/commit/2454699) -- Added authors icon (references #306) [`ca7c940`](https://github.com/PKief/vscode-material-icon-theme/commit/ca7c940) -- Add `authors`, `authors.md`, and `authors.txt` to `credits` [`3de2107`](https://github.com/PKief/vscode-material-icon-theme/commit/3de2107) -- Removed bithound config file [`7b1c3f6`](https://github.com/PKief/vscode-material-icon-theme/commit/7b1c3f6) - -#### [v3.5.3](https://github.com/PKief/vscode-material-icon-theme/compare/v3.5.2...v3.5.3) +- Updated restore config command [`ec900d7a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ec900d7a) +- Fixed bugs - change detection must not trigger reload for invalid values [`8c6096cf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8c6096cf) +- Adapting the extension to the new Settings GUI [`c4bb7af7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c4bb7af7) +- Adapting the extension to the new Settings GUI [`818f888f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/818f888f) +- Improved code quality [`6c1ddf41`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6c1ddf41) +- Fixed size of godot icons (References #316) [`622d1a59`](https://github.com/material-extensions/vscode-material-icon-theme/commit/622d1a59) +- Added godot icon [`c1a12bfe`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c1a12bfe) +- Added folder icons - android, ios (Closes #312) - client, server (References #296) - upload, dowload (References #218) - helpers - tasks (References #218) - tools - themes [`aba8cae7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/aba8cae7) +- Updated babel icon (Closes #315) [`bdac3d11`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bdac3d11) +- Added: csx extension to csharp [`c481fe9f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c481fe9f) +- Added velocity icon (Closes #311) [`3e8f93bf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3e8f93bf) +- Added mint icon (Closes #308) [`38f46abe`](https://github.com/material-extensions/vscode-material-icon-theme/commit/38f46abe) +- .clang-format + bazel icons [`24546999`](https://github.com/material-extensions/vscode-material-icon-theme/commit/24546999) +- Added authors icon (references #306) [`ca7c9401`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ca7c9401) +- Add `authors`, `authors.md`, and `authors.txt` to `credits` [`3de2107d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3de2107d) +- Removed bithound config file [`7b1c3f6b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7b1c3f6b) + +#### [v3.5.3](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.5.2...v3.5.3) > August 19, 2018 -- Updated clojure icon [`93977cb`](https://github.com/PKief/vscode-material-icon-theme/commit/93977cb) -- Added racket icon (Closes #299) [`de87927`](https://github.com/PKief/vscode-material-icon-theme/commit/de87927) -- Added ballerina icon (Closes #304) [`506c1a6`](https://github.com/PKief/vscode-material-icon-theme/commit/506c1a6) -- Add 'stencil.config.ts' to fileIcons [`86409fb`](https://github.com/PKief/vscode-material-icon-theme/commit/86409fb) -- Updated dependencies [`b097221`](https://github.com/PKief/vscode-material-icon-theme/commit/b097221) -- Added mdx icon (Closes #295) [`f35f38b`](https://github.com/PKief/vscode-material-icon-theme/commit/f35f38b) -- Added docker-compose.prod.yml [`#294`](https://github.com/PKief/vscode-material-icon-theme/pull/294) -- Added d icon (Closes #291) [`d24a991`](https://github.com/PKief/vscode-material-icon-theme/commit/d24a991) +- Updated clojure icon [`93977cb9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/93977cb9) +- Added racket icon (Closes #299) [`de87927c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/de87927c) +- Added ballerina icon (Closes #304) [`506c1a6a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/506c1a6a) +- Add 'stencil.config.ts' to fileIcons [`86409fb3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/86409fb3) +- Updated dependencies [`b0972216`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b0972216) +- Added mdx icon (Closes #295) [`f35f38bf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f35f38bf) +- Added docker-compose.prod.yml [`#294`](https://github.com/material-extensions/vscode-material-icon-theme/pull/294) +- Added d icon (Closes #291) [`d24a9914`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d24a9914) -#### [v3.5.2](https://github.com/PKief/vscode-material-icon-theme/compare/v3.5.1...v3.5.2) +#### [v3.5.2](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.5.1...v3.5.2) > July 21, 2018 -- Added Jekyll folder names (Closes #290) [`56a1829`](https://github.com/PKief/vscode-material-icon-theme/commit/56a1829) -- Recognise gql extension as a GraphQL file [`#287`](https://github.com/PKief/vscode-material-icon-theme/pull/287) -- Added jupyter icon (Closes #285) [`eba7d7d`](https://github.com/PKief/vscode-material-icon-theme/commit/eba7d7d) -- Fixed bitbucket PR (Closes #283) [`66d4eae`](https://github.com/PKief/vscode-material-icon-theme/commit/66d4eae) -- Add babel.config.js to the babel association list [`#286`](https://github.com/PKief/vscode-material-icon-theme/pull/286) -- add bitbucket icon for bitbucket pipeline yaml files [`97f61fc`](https://github.com/PKief/vscode-material-icon-theme/commit/97f61fc) -- Added icon for semantic-release (Closes #279) [`f4de397`](https://github.com/PKief/vscode-material-icon-theme/commit/f4de397) -- Added .luacheckrc (Closes #277) [`586b78a`](https://github.com/PKief/vscode-material-icon-theme/commit/586b78a) -- Added webassembly icon [`8b40758`](https://github.com/PKief/vscode-material-icon-theme/commit/8b40758) -- Added i18n icon (Closes #276) [`503fd11`](https://github.com/PKief/vscode-material-icon-theme/commit/503fd11) -- Updated dependencies [`b015bdc`](https://github.com/PKief/vscode-material-icon-theme/commit/b015bdc) -- Updated folder icons - node - test [`36cf5c7`](https://github.com/PKief/vscode-material-icon-theme/commit/36cf5c7) -- Added alternative node icon (Closes #262) [`0967da8`](https://github.com/PKief/vscode-material-icon-theme/commit/0967da8) -- Updated translations [`7f7f716`](https://github.com/PKief/vscode-material-icon-theme/commit/7f7f716) - -#### [v3.5.1](https://github.com/PKief/vscode-material-icon-theme/compare/v3.5.0...v3.5.1) +- Added Jekyll folder names (Closes #290) [`56a1829d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/56a1829d) +- Recognise gql extension as a GraphQL file [`#287`](https://github.com/material-extensions/vscode-material-icon-theme/pull/287) +- Added jupyter icon (Closes #285) [`eba7d7dc`](https://github.com/material-extensions/vscode-material-icon-theme/commit/eba7d7dc) +- Fixed bitbucket PR (Closes #283) [`66d4eaea`](https://github.com/material-extensions/vscode-material-icon-theme/commit/66d4eaea) +- Add babel.config.js to the babel association list [`#286`](https://github.com/material-extensions/vscode-material-icon-theme/pull/286) +- add bitbucket icon for bitbucket pipeline yaml files [`97f61fca`](https://github.com/material-extensions/vscode-material-icon-theme/commit/97f61fca) +- Added icon for semantic-release (Closes #279) [`f4de3973`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f4de3973) +- Added .luacheckrc (Closes #277) [`586b78a2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/586b78a2) +- Added webassembly icon [`8b407585`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8b407585) +- Added i18n icon (Closes #276) [`503fd114`](https://github.com/material-extensions/vscode-material-icon-theme/commit/503fd114) +- Updated dependencies [`b015bdc0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b015bdc0) +- Updated folder icons - node - test [`36cf5c79`](https://github.com/material-extensions/vscode-material-icon-theme/commit/36cf5c79) +- Added alternative node icon (Closes #262) [`0967da81`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0967da81) +- Updated translations [`7f7f716d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7f7f716d) + +#### [v3.5.1](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.5.0...v3.5.1) > June 28, 2018 -- Added makefile icon (Closes #269) [`890665a`](https://github.com/PKief/vscode-material-icon-theme/commit/890665a) -- Added foxpro icon (Closes #239) [`6b74301`](https://github.com/PKief/vscode-material-icon-theme/commit/6b74301) -- Added red lang icon (Closes #265) [`ac68c3e`](https://github.com/PKief/vscode-material-icon-theme/commit/ac68c3e) -- Added Stencil icon (Closes #268) [`e3bbe96`](https://github.com/PKief/vscode-material-icon-theme/commit/e3bbe96) -- Added Django icon (Closes #267) [`dd7f222`](https://github.com/PKief/vscode-material-icon-theme/commit/dd7f222) -- Added wallaby icon (Closes #270) [`1545fd0`](https://github.com/PKief/vscode-material-icon-theme/commit/1545fd0) -- .env files for specific environments (Closes #261) [`8d60336`](https://github.com/PKief/vscode-material-icon-theme/commit/8d60336) -- Added san icon (Closes #260) [`97f97e7`](https://github.com/PKief/vscode-material-icon-theme/commit/97f97e7) -- Update Dart logo to match the official logo changes [`#259`](https://github.com/PKief/vscode-material-icon-theme/pull/259) +- Added makefile icon (Closes #269) [`890665af`](https://github.com/material-extensions/vscode-material-icon-theme/commit/890665af) +- Added foxpro icon (Closes #239) [`6b743012`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6b743012) +- Added red lang icon (Closes #265) [`ac68c3e9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ac68c3e9) +- Added Stencil icon (Closes #268) [`e3bbe96b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e3bbe96b) +- Added Django icon (Closes #267) [`dd7f222c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/dd7f222c) +- Added wallaby icon (Closes #270) [`1545fd06`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1545fd06) +- .env files for specific environments (Closes #261) [`8d60336b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8d60336b) +- Added san icon (Closes #260) [`97f97e70`](https://github.com/material-extensions/vscode-material-icon-theme/commit/97f97e70) +- Update Dart logo to match the official logo changes [`#259`](https://github.com/material-extensions/vscode-material-icon-theme/pull/259) -#### [v3.5.0](https://github.com/PKief/vscode-material-icon-theme/compare/v3.4.0...v3.5.0) +#### [v3.5.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.4.0...v3.5.0) > May 31, 2018 -- Improved folder HEX-color validation [`79c5fc0`](https://github.com/PKief/vscode-material-icon-theme/commit/79c5fc0) -- Compressed ansible folder icon References #254 [`ff0c95b`](https://github.com/PKief/vscode-material-icon-theme/commit/ff0c95b) -- Add Ansible folder icon [`43d0723`](https://github.com/PKief/vscode-material-icon-theme/commit/43d0723) -- Added controller folder icon (Closes #227) References #187 [`b1f1ae1`](https://github.com/PKief/vscode-material-icon-theme/commit/b1f1ae1) -- Generalize router file icon References #255 [`40a4a38`](https://github.com/PKief/vscode-material-icon-theme/commit/40a4a38) -- Improved folder icons - export - import [`93741b3`](https://github.com/PKief/vscode-material-icon-theme/commit/93741b3) -- Added command to change opacity [`e6c2c65`](https://github.com/PKief/vscode-material-icon-theme/commit/e6c2c65) -- Updated change detection - Fixed issue that new folder icons override the values of the opacity [`46695a9`](https://github.com/PKief/vscode-material-icon-theme/commit/46695a9) -- Updated opacity value type [`5fa8122`](https://github.com/PKief/vscode-material-icon-theme/commit/5fa8122) -- Optimized icon sizes [`6d4bded`](https://github.com/PKief/vscode-material-icon-theme/commit/6d4bded) -- Added helm icon (Closes #250) [`e8143f1`](https://github.com/PKief/vscode-material-icon-theme/commit/e8143f1) -- Added translations for opacity feature [`f844faf`](https://github.com/PKief/vscode-material-icon-theme/commit/f844faf) -- Improved generation of opacity attributes [`ca788af`](https://github.com/PKief/vscode-material-icon-theme/commit/ca788af) -- Updated opacity value [`58d7a73`](https://github.com/PKief/vscode-material-icon-theme/commit/58d7a73) -- Improved opacity feature [`cffaeea`](https://github.com/PKief/vscode-material-icon-theme/commit/cffaeea) -- Set opacity of all icons [`6dcdac1`](https://github.com/PKief/vscode-material-icon-theme/commit/6dcdac1) -- More React+Redux Ecosystem Icons (References #255) [`946a1d1`](https://github.com/PKief/vscode-material-icon-theme/commit/946a1d1) -- Storybook: associate typescript stories (Closes #258) [`8cdbcc0`](https://github.com/PKief/vscode-material-icon-theme/commit/8cdbcc0) -- Updated go icon (Closes #257) [`8a50a7c`](https://github.com/PKief/vscode-material-icon-theme/commit/8a50a7c) -- Updated todo icon (Closes #247) [`23b32b8`](https://github.com/PKief/vscode-material-icon-theme/commit/23b32b8) -- Assign the `console` icon to .fish files [`ec871e8`](https://github.com/PKief/vscode-material-icon-theme/commit/ec871e8) -- Updated hcl icons Closes #253 [`e6b1ecc`](https://github.com/PKief/vscode-material-icon-theme/commit/e6b1ecc) -- Add HashiCorp Configuration Language icon [`638b721`](https://github.com/PKief/vscode-material-icon-theme/commit/638b721) -- Added .htpasswd file icon mapping Closes #251 [`35057bf`](https://github.com/PKief/vscode-material-icon-theme/commit/35057bf) -- Adds docker-compose.yaml file association [`b659141`](https://github.com/PKief/vscode-material-icon-theme/commit/b659141) -- Added angular.json - Closes #243 [`62aed59`](https://github.com/PKief/vscode-material-icon-theme/commit/62aed59) - -#### [v3.4.0](https://github.com/PKief/vscode-material-icon-theme/compare/v3.3.0...v3.4.0) +- Improved folder HEX-color validation [`79c5fc00`](https://github.com/material-extensions/vscode-material-icon-theme/commit/79c5fc00) +- Compressed ansible folder icon References #254 [`ff0c95b5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ff0c95b5) +- Add Ansible folder icon [`43d0723d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/43d0723d) +- Added controller folder icon (Closes #227) References #187 [`b1f1ae1a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b1f1ae1a) +- Generalize router file icon References #255 [`40a4a387`](https://github.com/material-extensions/vscode-material-icon-theme/commit/40a4a387) +- Improved folder icons - export - import [`93741b37`](https://github.com/material-extensions/vscode-material-icon-theme/commit/93741b37) +- Added command to change opacity [`e6c2c652`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e6c2c652) +- Updated change detection - Fixed issue that new folder icons override the values of the opacity [`46695a9f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/46695a9f) +- Updated opacity value type [`5fa8122d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5fa8122d) +- Optimized icon sizes [`6d4bdedc`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6d4bdedc) +- Added helm icon (Closes #250) [`e8143f10`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e8143f10) +- Added translations for opacity feature [`f844fafb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f844fafb) +- Improved generation of opacity attributes [`ca788af8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ca788af8) +- Updated opacity value [`58d7a73e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/58d7a73e) +- Improved opacity feature [`cffaeea0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cffaeea0) +- Set opacity of all icons [`6dcdac16`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6dcdac16) +- More React+Redux Ecosystem Icons (References #255) [`946a1d13`](https://github.com/material-extensions/vscode-material-icon-theme/commit/946a1d13) +- Storybook: associate typescript stories (Closes #258) [`8cdbcc0d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8cdbcc0d) +- Updated go icon (Closes #257) [`8a50a7c0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8a50a7c0) +- Updated todo icon (Closes #247) [`23b32b81`](https://github.com/material-extensions/vscode-material-icon-theme/commit/23b32b81) +- Assign the `console` icon to .fish files [`ec871e8e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ec871e8e) +- Updated hcl icons Closes #253 [`e6b1ecc5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e6b1ecc5) +- Add HashiCorp Configuration Language icon [`638b7217`](https://github.com/material-extensions/vscode-material-icon-theme/commit/638b7217) +- Added .htpasswd file icon mapping Closes #251 [`35057bfe`](https://github.com/material-extensions/vscode-material-icon-theme/commit/35057bfe) +- Adds docker-compose.yaml file association [`b6591416`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b6591416) +- Added angular.json - Closes #243 [`62aed590`](https://github.com/material-extensions/vscode-material-icon-theme/commit/62aed590) + +#### [v3.4.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.3.0...v3.4.0) > May 6, 2018 -- Added plugins folder icon [`00e05a6`](https://github.com/PKief/vscode-material-icon-theme/commit/00e05a6) -- Force wildcards to overwrite file names if required - Closes #241 [`ae15ab5`](https://github.com/PKief/vscode-material-icon-theme/commit/ae15ab5) -- Updated size and color of Ruby Gemfile icon References #240 [`9f4e8bc`](https://github.com/PKief/vscode-material-icon-theme/commit/9f4e8bc) -- โœจ add Ruby Gemfile icon [`0467aa3`](https://github.com/PKief/vscode-material-icon-theme/commit/0467aa3) -- Improved fastlane icons References #237 [`8bb4844`](https://github.com/PKief/vscode-material-icon-theme/commit/8bb4844) -- ๐Ÿ’„ add Fastlane icons [`85999f5`](https://github.com/PKief/vscode-material-icon-theme/commit/85999f5) -- Updated dependencies [`b8ddd00`](https://github.com/PKief/vscode-material-icon-theme/commit/b8ddd00) -- Rearranged imports [`0b7a8b9`](https://github.com/PKief/vscode-material-icon-theme/commit/0b7a8b9) -- Added cfm icon mapping [`74d1055`](https://github.com/PKief/vscode-material-icon-theme/commit/74d1055) -- Added awk file icon mapping [`47fae34`](https://github.com/PKief/vscode-material-icon-theme/commit/47fae34) -- Added debug folder icon References #236 [`338782f`](https://github.com/PKief/vscode-material-icon-theme/commit/338782f) -- Added .cache folder mapping [`9728bd5`](https://github.com/PKief/vscode-material-icon-theme/commit/9728bd5) -- Updated version [`bb106bc`](https://github.com/PKief/vscode-material-icon-theme/commit/bb106bc) - -#### [v3.3.0](https://github.com/PKief/vscode-material-icon-theme/compare/v3.2.6...v3.3.0) +- Added plugins folder icon [`00e05a67`](https://github.com/material-extensions/vscode-material-icon-theme/commit/00e05a67) +- Force wildcards to overwrite file names if required - Closes #241 [`ae15ab58`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ae15ab58) +- Updated size and color of Ruby Gemfile icon References #240 [`9f4e8bc9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9f4e8bc9) +- โœจ add Ruby Gemfile icon [`0467aa30`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0467aa30) +- Improved fastlane icons References #237 [`8bb48448`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8bb48448) +- ๐Ÿ’„ add Fastlane icons [`85999f5c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/85999f5c) +- Updated dependencies [`b8ddd00b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b8ddd00b) +- Rearranged imports [`0b7a8b9b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0b7a8b9b) +- Added cfm icon mapping [`74d10557`](https://github.com/material-extensions/vscode-material-icon-theme/commit/74d10557) +- Added awk file icon mapping [`47fae343`](https://github.com/material-extensions/vscode-material-icon-theme/commit/47fae343) +- Added debug folder icon References #236 [`338782f2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/338782f2) +- Added .cache folder mapping [`9728bd5d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9728bd5d) +- Updated version [`bb106bc4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bb106bc4) + +#### [v3.3.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.2.6...v3.3.0) > April 8, 2018 -- Added __pycache__ folder icon mapping [`c13c060`](https://github.com/PKief/vscode-material-icon-theme/commit/c13c060) -- Added META-INF and manifest.mf icon associations [`58811d7`](https://github.com/PKief/vscode-material-icon-theme/commit/58811d7) -- Added option to disable restart message. References #225 [`08a0cbc`](https://github.com/PKief/vscode-material-icon-theme/commit/08a0cbc) -- Updated dependencies [`8bdabfd`](https://github.com/PKief/vscode-material-icon-theme/commit/8bdabfd) -- Updated notification after update [`e378bd7`](https://github.com/PKief/vscode-material-icon-theme/commit/e378bd7) -- Added python folder icon [`5b96e34`](https://github.com/PKief/vscode-material-icon-theme/commit/5b96e34) -- Added wepy file icon (closes #226) [`0794476`](https://github.com/PKief/vscode-material-icon-theme/commit/0794476) -- Added less folder icon (closes #207) + Improved less file icon [`dcb4b8c`](https://github.com/PKief/vscode-material-icon-theme/commit/dcb4b8c) -- Added `jest.teardown.js` icon association Closes #230 [`fa26bbe`](https://github.com/PKief/vscode-material-icon-theme/commit/fa26bbe) -- Added Storybook file icon Closes #235 [`8864d0a`](https://github.com/PKief/vscode-material-icon-theme/commit/8864d0a) -- Updated html file icon mapping Added html icon for `*.xhtml`. [`92ffea7`](https://github.com/PKief/vscode-material-icon-theme/commit/92ffea7) -- Improved processing icon References #229 [`0c3277d`](https://github.com/PKief/vscode-material-icon-theme/commit/0c3277d) -- added processing icon [`2c8ba32`](https://github.com/PKief/vscode-material-icon-theme/commit/2c8ba32) -- Improved Vue.js logo [`6eeb80c`](https://github.com/PKief/vscode-material-icon-theme/commit/6eeb80c) -- Fixes issue with config change detection References #225 [`50e40e8`](https://github.com/PKief/vscode-material-icon-theme/commit/50e40e8) - -#### [v3.2.6](https://github.com/PKief/vscode-material-icon-theme/compare/v3.2.4...v3.2.6) +- Added __pycache__ folder icon mapping [`c13c060a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c13c060a) +- Added META-INF and manifest.mf icon associations [`58811d75`](https://github.com/material-extensions/vscode-material-icon-theme/commit/58811d75) +- Added option to disable restart message. References #225 [`08a0cbc9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/08a0cbc9) +- Updated dependencies [`8bdabfde`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8bdabfde) +- Updated notification after update [`e378bd76`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e378bd76) +- Added python folder icon [`5b96e34a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5b96e34a) +- Added wepy file icon (closes #226) [`07944764`](https://github.com/material-extensions/vscode-material-icon-theme/commit/07944764) +- Added less folder icon (closes #207) + Improved less file icon [`dcb4b8c4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/dcb4b8c4) +- Added `jest.teardown.js` icon association Closes #230 [`fa26bbe2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/fa26bbe2) +- Added Storybook file icon Closes #235 [`8864d0a2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8864d0a2) +- Updated html file icon mapping Added html icon for `*.xhtml`. [`92ffea70`](https://github.com/material-extensions/vscode-material-icon-theme/commit/92ffea70) +- Improved processing icon References #229 [`0c3277df`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0c3277df) +- added processing icon [`2c8ba32d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2c8ba32d) +- Improved Vue.js logo [`6eeb80c6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6eeb80c6) +- Fixes issue with config change detection References #225 [`50e40e8e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/50e40e8e) + +#### [v3.2.6](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.2.4...v3.2.6) > March 17, 2018 -- Added '.vbs' file icon mapping [`6b37462`](https://github.com/PKief/vscode-material-icon-theme/commit/6b37462) -- Added .nyc-output folder icon mapping #192 [`d275471`](https://github.com/PKief/vscode-material-icon-theme/commit/d275471) -- Added jest icon #192 [`cac11bc`](https://github.com/PKief/vscode-material-icon-theme/commit/cac11bc) -- added docker icon to the docker-compose.override.yml file [`2507e1b`](https://github.com/PKief/vscode-material-icon-theme/commit/2507e1b) -- Updated tslint rules [`2223312`](https://github.com/PKief/vscode-material-icon-theme/commit/2223312) -- Fixed issue in change detection [`0c27458`](https://github.com/PKief/vscode-material-icon-theme/commit/0c27458) -- Added messages folder icon [`53f07f8`](https://github.com/PKief/vscode-material-icon-theme/commit/53f07f8) -- Added benchmark folder icon [`ff7bec0`](https://github.com/PKief/vscode-material-icon-theme/commit/ff7bec0) -- Fixed issue with wrong color of docker icon (Bugfix 3.2.5) [`cb8e074`](https://github.com/PKief/vscode-material-icon-theme/commit/cb8e074) +- Added '.vbs' file icon mapping [`6b374622`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6b374622) +- Added .nyc-output folder icon mapping #192 [`d275471c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d275471c) +- Added jest icon #192 [`cac11bc0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cac11bc0) +- added docker icon to the docker-compose.override.yml file [`2507e1be`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2507e1be) +- Updated tslint rules [`22233123`](https://github.com/material-extensions/vscode-material-icon-theme/commit/22233123) +- Fixed issue in change detection [`0c274589`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0c274589) +- Added messages folder icon [`53f07f82`](https://github.com/material-extensions/vscode-material-icon-theme/commit/53f07f82) +- Added benchmark folder icon [`ff7bec01`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ff7bec01) +- Fixed issue with wrong color of docker icon (Bugfix 3.2.5) [`cb8e074e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cb8e074e) -#### [v3.2.4](https://github.com/PKief/vscode-material-icon-theme/compare/v3.2.3...v3.2.4) +#### [v3.2.4](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.2.3...v3.2.4) > March 10, 2018 -- Added ci folder icon Closes #209 [`d025a37`](https://github.com/PKief/vscode-material-icon-theme/commit/d025a37) -- Updated grunt file References #213 [`80fe7bb`](https://github.com/PKief/vscode-material-icon-theme/commit/80fe7bb) -- Added another common settings extension [`6651000`](https://github.com/PKief/vscode-material-icon-theme/commit/6651000) -- added gruntfile icon [`c8ed7ce`](https://github.com/PKief/vscode-material-icon-theme/commit/c8ed7ce) -- Additional folder names [`03727fd`](https://github.com/PKief/vscode-material-icon-theme/commit/03727fd) -- Added routes folder icon References #112 [`83fe248`](https://github.com/PKief/vscode-material-icon-theme/commit/83fe248) -- Added i18n folder mappings Closes #206 [`6781846`](https://github.com/PKief/vscode-material-icon-theme/commit/6781846) -- Added class folder icon References #112 [`b53f307`](https://github.com/PKief/vscode-material-icon-theme/commit/b53f307) -- Updated scripts and dependencies [`bffeaaf`](https://github.com/PKief/vscode-material-icon-theme/commit/bffeaaf) -- Add .cfignore (Cloud Foundry) icon Closes #210 [`59aacd1`](https://github.com/PKief/vscode-material-icon-theme/commit/59aacd1) -- Updated change detection [`30e9b3b`](https://github.com/PKief/vscode-material-icon-theme/commit/30e9b3b) -- Optimized icons [`58476c5`](https://github.com/PKief/vscode-material-icon-theme/commit/58476c5) - -#### [v3.2.3](https://github.com/PKief/vscode-material-icon-theme/compare/v3.2.2...v3.2.3) +- Added ci folder icon Closes #209 [`d025a378`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d025a378) +- Updated grunt file References #213 [`80fe7bb1`](https://github.com/material-extensions/vscode-material-icon-theme/commit/80fe7bb1) +- Added another common settings extension [`66510004`](https://github.com/material-extensions/vscode-material-icon-theme/commit/66510004) +- added gruntfile icon [`c8ed7ce7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c8ed7ce7) +- Additional folder names [`03727fd2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/03727fd2) +- Added routes folder icon References #112 [`83fe248b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/83fe248b) +- Added i18n folder mappings Closes #206 [`67818469`](https://github.com/material-extensions/vscode-material-icon-theme/commit/67818469) +- Added class folder icon References #112 [`b53f307d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b53f307d) +- Updated scripts and dependencies [`bffeaaff`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bffeaaff) +- Add .cfignore (Cloud Foundry) icon Closes #210 [`59aacd19`](https://github.com/material-extensions/vscode-material-icon-theme/commit/59aacd19) +- Updated change detection [`30e9b3bf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/30e9b3bf) +- Optimized icons [`58476c52`](https://github.com/material-extensions/vscode-material-icon-theme/commit/58476c52) + +#### [v3.2.3](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.2.2...v3.2.3) > February 20, 2018 -- Added typescript folder icons Improved current typescript file icons Closes #199 [`e8808a4`](https://github.com/PKief/vscode-material-icon-theme/commit/e8808a4) -- Improved folder icons: - Font - Git - Sass - Views [`a4747c3`](https://github.com/PKief/vscode-material-icon-theme/commit/a4747c3) -- Updated mjml icon size #200 [`aa3658e`](https://github.com/PKief/vscode-material-icon-theme/commit/aa3658e) -- fix: add .postcssrc (JSON) to supported filenames. [`6b5338c`](https://github.com/PKief/vscode-material-icon-theme/commit/6b5338c) -- Added PostgreSQL icon mappings Closes #197 [`7fa96ec`](https://github.com/PKief/vscode-material-icon-theme/commit/7fa96ec) -- Added mjml icon [`aabf8bb`](https://github.com/PKief/vscode-material-icon-theme/commit/aabf8bb) -- Added "other" folder icon References #187 #192 [`7f2c839`](https://github.com/PKief/vscode-material-icon-theme/commit/7f2c839) -- coverage folder icon #192 [`3961dac`](https://github.com/PKief/vscode-material-icon-theme/commit/3961dac) -- Added gradle folder icon #112 [`fed271e`](https://github.com/PKief/vscode-material-icon-theme/commit/fed271e) -- Updated colors of wordpress icons #194 [`a6ffe87`](https://github.com/PKief/vscode-material-icon-theme/commit/a6ffe87) -- Add Wordpress icons [`2ff2b2c`](https://github.com/PKief/vscode-material-icon-theme/commit/2ff2b2c) +- Added typescript folder icons Improved current typescript file icons Closes #199 [`e8808a49`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e8808a49) +- Improved folder icons: - Font - Git - Sass - Views [`a4747c32`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a4747c32) +- Updated mjml icon size #200 [`aa3658ea`](https://github.com/material-extensions/vscode-material-icon-theme/commit/aa3658ea) +- fix: add .postcssrc (JSON) to supported filenames. [`6b5338ca`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6b5338ca) +- Added PostgreSQL icon mappings Closes #197 [`7fa96ec0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7fa96ec0) +- Added mjml icon [`aabf8bbc`](https://github.com/material-extensions/vscode-material-icon-theme/commit/aabf8bbc) +- Added "other" folder icon References #187 #192 [`7f2c8393`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7f2c8393) +- coverage folder icon #192 [`3961dac6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3961dac6) +- Added gradle folder icon #112 [`fed271e3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/fed271e3) +- Updated colors of wordpress icons #194 [`a6ffe876`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a6ffe876) +- Add Wordpress icons [`2ff2b2cd`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2ff2b2cd) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000000..897567a600 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,127 @@ +# 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: . +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 +. + +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 +. Translations are available at +. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d316c2593b..9fdf143a9a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,4 +1,6 @@ -

How to contribute

+ + +# How to contribute Glad you're here and interested in expanding this project ๐ŸŽ‰ In order to make this work in the best possible way, there are hints and tips for successful contributors on this page. Please read everything carefully and your contributions will be valuable and gratefully received. @@ -14,8 +16,10 @@ Glad you're here and interested in expanding this project ๐ŸŽ‰ In order to make - [Icons for color themes](#icons-for-color-themes) - [Unique assignment to file and folder names](#icon-assignments) - [Create icon packs](#icon-packs) + - [Designing Pixel Perfect Icons](#pixel-perfect-icons) + - [Cloning existing icons](#icon-cloning) - [Add translations](#add-translations) -- [Update API](#update-api) +- [Debug extension](#debug-extension-locally) @@ -32,7 +36,18 @@ A new icon for a file name, file extension or folder name is needed? Please crea It is always welcome to add new icons to the extension. However, there are a few things you should take into account so that the icon can be included in the extension. -**Checklist** +```mermaid +flowchart LR + B{Shape already exists\nwith different colors?} + B ---->|No| E + B ---->|Yes| C + C[Cloning Workflow] + E[Creating New Icons Workflow] +``` + +### Creating New Icons Workflow + +#### Checklist 1. [ ] Create icon as SVG ([how to](#create-icon-as-svg)) 2. [ ] Icon color fits to Material Design ([how to](#material-design-colors)) @@ -40,6 +55,16 @@ It is always welcome to add new icons to the extension. However, there are a few 4. [ ] Unique assignment to file and folder names ([how to](#icon-assignments)) 5. [ ] Provide separate icons for color themes if necessary ([how to](#icons-for-color-themes)) +### Cloning Workflow + +There are times when we just need to create a variant of an existing icon. + +For example, we might want to create an icon using the shape of the `typescript` icon, but we want it to be green and associated with the `library.ts` file name. In that case, we don't need to create a new svg. This can be done by configuration. + +#### Checklist + +1. [ ] Clone the existing icon adjusting its color ([how to](#icon-cloning)) + ## How tos

Create icon as SVG

@@ -54,7 +79,7 @@ These free tools are recommended to create or edit new SVG icons: When you create a folder icon, please keep in mind that two SVG files are needed here: one that represents the folder closed and another that represents it open. -``` +```text ๐Ÿ“ folder-example.svg ๐Ÿ“‚ folder-example-open.svg ``` @@ -71,52 +96,60 @@ An important success factor of this icon extension is the fact that all colors f Now it often happens that many programming languages already have icons with their own colors. To find the matching color from the Material Design color palette based on a known color, there is the [Material Color Converter](https://pkief.github.io/material-color-converter/). With its help any color can be converted into a Material Design color. +You can check if your changed (i.e. not yet committed) icon fits the Material Design color palette by running the following command: + +```sh +bun run check-colors +``` + +Installation of the dependencies is necessary before running the command, see [Debug extension locally](#debug-extension-locally). + +> **Note** +> The colors black (`#000000`) and white (`#ffffff`) are not allowed in the icons. These colors have too much contrast and do not fit into the overall picture of the icons. + Continue reading [here](#design-folder-icons) to find out about colors for the folder icons. -| โœ… | โŒ | -| ----------------------------------------------------------------- | --------------------------------------------------------------------- | -| | | +| โœ… | โŒ | +| :-: | :-: | +| Icon with right color | Icon with wrong color |

Design folder icons

When designing folder icons there are also a few points to consider. A folder icon always consists of two icons - the folder in the background and a motive in the foreground: - +An example of a folder -For the motive, only colors from the second row in the [color palette](https://pkief.com/material-color-converter/) are allowed. For the background choose a slightly darker hue (mostly in rows 4-6 in the palette). +For the motive, only colors from the second row in the [color palette](https://pkief.github.io/material-color-converter/) are allowed. For the background choose a slightly darker hue (mostly in rows 4-6 in the palette). - +Material color palette This uniform color selection makes the folder icons look more consistent and fit well together. This ensures a good quality of the icons. -| โœ… | โŒ | -| ------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------- | -| | | +| โœ… | โŒ | +| :-: | :-: | +| Folder icon with right colors | Folder icon with wrong colors |

Icon spacing

All icons have a small distance to the edge. This way they don't seem so pressed together and have a little more air. It is not defined how much margin you have to leave them, because this is always a bit different. Just make sure that there is a space to the outside. -| โœ… | โŒ | -| ----------------------------------------------------------------- | -------------------------------------------------------------------- | -| | | +| โœ… | โŒ | +| :-: | :-: | +| Icon with a spacing around | Icon without spacing |

Assignment to file and folder names and language ids

Icons are assigned to file names, folder names or registered languages of VS Code in these files: -- [fileIcons.ts](src/icons/fileIcons.ts) -- [folderIcons.ts](src/icons/folderIcons.ts) -- [languageIcons.ts](src/icons/languageIcons.ts) +- [fileIcons.ts](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/icons/fileIcons.ts) +- [folderIcons.ts](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/icons/folderIcons.ts) +- [languageIcons.ts](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/icons/languageIcons.ts) -> **Note** -> It is very important that icons are only assigned to the file and folder names that really apply to them. This means that you should be careful which files and folders you assign icons to. There are many people with different projects all over the world and not everyone expects that e.g. a file name will have a special framework based icon even though the framework is not used at all by this one user. -> -> A solution for this can be [icon packs](#icon-packs). +Be careful when assigning icons to files and folders, as not everyone expects a file name to have a special icon based on a framework that is not used by them. A solution for this can be the usage of [Language icon definitions](#language-icons) or [icon packs](#icon-packs). -#### File icons +### File icons -Here's an example of how the SVG icon 'sample.svg' is assigned to file names and extensions: +Here's an example of how the SVG icon `sample.svg` is assigned to file names and extensions: ```ts { @@ -128,6 +161,30 @@ Here's an example of how the SVG icon 'sample.svg' is assigned to file names and This will apply an icon for the files 'sample.js', 'sample.ts' and 'sample.html' as well as for files that end with 'sample' like 'another-file.sample'. +#### Apply patterns + +It is also possible to use patterns for file names and extensions. This is useful when you want to assign an icon to a group of files that have a common pattern. Here's an example: + +```ts +{ + name: 'graphql', + patterns: { + graphql: FileNamePattern.Ecmascript, + }, +} +``` + +In case of this example the generated file names are "graphql.js", "graphql.mjs", "graphql.cjs", "graphql.ts", "graphql.mts" and "graphql.cts". The pattern is defined in the [patterns.ts](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/patterns/patterns.ts) file. + +Available patterns are right now: + +| Pattern | File extensions | +| ------------- | ---------------------------------------------------------------------------------------------------------- | +| ecmascript | `js`, `mjs`, `cjs`, `ts`, `mts`, `cts` | +| configuration | `json`, `jsonc`, `json5`, `yaml`, `yml`, `toml` | +| nodeEcosystem | Combination of ecmascript and configuration patterns | +| cosmiconfig | `.${fileName}rc`, `.config/${fileName}rc` and `${fileName}.config` with file extensions of `nodeEcosystem` | + #### Folder icons Here's an example of how a folder icon can be assigned to folder icons: @@ -141,6 +198,9 @@ Here's an example of how a folder icon can be assigned to folder icons: This will apply a folder icon for the folders 'sample' and 'samples'. +> **Note** +> The tool automatically creates generic "wildcard" variants of these folders, so only assign the base names. + #### Language icons Here's an example of how a file icon can be assigned to language ids: @@ -155,9 +215,9 @@ This will apply the sample.svg icon to all files which could be associated by VS VS Code can be customized so that the background color is either light or dark. This must also be considered for the icons, because a dark icon on a dark background does not provide the necessary contrast it needs to be recognizable. -| โœ… | โŒ | -| --------------------------------------------------------------------- | ------------------------------------------------------------------------ | -| | | +| โœ… | โŒ | +| :-: | :-: | +| Icon with good contrast | Icon with bad constrast | Preferably, the icon has a color that looks good on both backgrounds. If this is ever not possible because it would otherwise no longer match the icon's branding, different icons can be provided for the respective color scheme. @@ -206,10 +266,145 @@ Here's an example that shows how two icons can be assigned to the same file name To create an icon pack, the following steps have to be completed: -1. Add the name of the icon pack to the enum in [iconPack.ts](src/models/icons/iconPack.ts) +1. Add the name of the icon pack to the enum in [iconPack.ts](https://github.com/material-extensions/vscode-material-icon-theme/blob/e21e6b1b57f2ce0b6e7306178b26d11c60e2ca0f/src/core/models/icons/iconPack.ts) 2. Add translations to the package.nls.\*.json files under the section `configuration.activeIconPack` (at least to [package.nls.json](package.nls.json), the English translation file) 3. Adjust [package.json](package.json) under `configuration.properties.material-icon-theme.activeIconPack` -4. Use the icon pack inside the [fileIcons.ts](src/icons/fileIcons.ts),[folderIcons.ts](src/icons/folderIcons.ts) or [languageIcons.ts](src/icons/languageIcons.ts) files in the `enabledFor` attribute +4. Use the icon pack inside the [fileIcons.ts](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/icons/fileIcons.ts),[folderIcons.ts](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/icons/folderIcons.ts) or [languageIcons.ts](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/icons/languageIcons.ts) files in the `enabledFor` attribute + +

Designing Pixel-Perfect Icons

+ +At 100% zoom, VS Code displays icons at 16x16 pixels. This means that ideally, the icons should be designed in a way that they look good at this size. + +A known issue is that the icons can appear blurry after resizing them, even to the point where they are no longer easily recognizable, depending on the case. + +To avoid blurry icons, it is recommended to design them using a 16x16 grid and trying to align the edges of the icon to it. This will help ensure that the icons look sharp and clear, even at smaller sizes. + +An example of a pixel-perfect icon + +

Tips for Designing Pixel-Perfect Icons

+ +The following are some tips to help you design nice and sharp-looking icons. These tips are not rules but rather guidelines to help you achieve the best results possible: + +- **Use a grid**: This is the most important tip. Try to use a 16x16 grid to design the icons and snap the edges of the icon to the grid. Blurriness is often caused by misalignment of the edges and vertices, resulting in the icon trying to fit a pixel in between two pixels. As this is physically impossible, the engine will create two pixels with different opacity to simulate the in-between pixel, causing the blurriness. When a path is aligned to the grid, each pixel will be a solid color, and the icon will look sharp. + + The following example illustrates an icon with its paths aligned to a 16x16 grid: + + An example of a pixel-perfect folder icon + + On the other hand, this other example illustrates an icon with its paths not aligned to a 16x16 grid: + + An example of a missaligned folder icon + + Here is a comparison of both icons rendered at 16px: + + Comparison of the correctly positioned icon and the incorrect one + + As you can see, the misaligned icon (left) has blurry edges with "ghost pixels" that attempt to simulate "half a pixel". Additionally, the suitcase motif in it is slightly harder to recognize. On the other hand, the aligned icon (right) looks sharper and clearer. + + So, even though the difference between the two icons was subtle, the impact on the final result is quite significant. + +- **Decimals are not your friends**: Related to the previous tip, when designing icons, it's important to try to avoid using decimal values for the positions of the vertices. This is because, as previously mentioned, pixels are square, and there's no such thing as a fractionated pixel. If you keep the vertices aligned to the grid, it will be easier to avoid decimal coordinates. In short, try to keep the vertices on whole numbers. + +- **Sometimes less is more**: Detail is valuable, but attempting to incorporate too much detail in 16 pixels or less can pose a significant challenge. It might even be counterproductive, resulting in an icon that is difficult to recognize. Icons are primarily about communicating a concept. To effectively communicate a concept, it must be easily recognizable. + + Let's consider the following example: + + Elephant icon with too many details + + The icon is visually appealing, but it has some issues: the trunk, the tail and the negative space separating the ear from the body are too thin. Additionally, the eye is too small, and the shapes, in general, are somewhat complex. While this icon would look great if rendered at 24, 32, or 64 pixels, at 16 pixels, we lack sufficient resolution to effectively convey the concept. + + Now, let's explore a minimalistic approach to communicating the same concept: + + | Concept | Result | + | --- | --- | + | Elephant icon concept | Elephant ready icon | + + Indeed, the minimalistic version may lack the level of detail present in the first icon, particularly when viewed at a larger size. However, on the other hand, we are still effectively communicating the concept. It's unmistakably an elephant. Furthermore, all edges and paths are aligned to the grid. + + Now, let's examine both icons when rendered at 16px: + + Elephant result icon + +- **Curves vs straight lines**: Let's face it, pixels are square, there's nothing we can do about it. And since pixels are square, drawing a curve actually involves drawing a series of... squares. Consequently, when rendering a curve, we're essentially asking the display to render a fraction of a pixel, which is impossible. As a result, curves tend to appear blurry. This is normal. However, it's perfectly fine to use curves, circles, and rounded edges in your icons. Just keep in mind these limitations if you're wondering why your icon doesn't look as sharp as you'd like. + +

Cloning existing icons

+ +The extension allows you to clone existing icons and adjust their colors through configuration. This enables you to create new color variants of an existing icon without having to create new SVG files. + +As we mentioned previously, icons are assigned to filenames, file extensions, and folder names in the following files: + +- [fileIcons.ts](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/icons/fileIcons.ts) +- [folderIcons.ts](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/icons/folderIcons.ts) + +The following example demonstrates how the shapes of the `rust` file icon can be reused to create a clone of it, utilizing different colors and associated with different file names than the original icon. + +```ts +{ + name: 'rust-library', + fileNames: ['lib.rs'], + light: true, // needed if a `lightColor` is provided + clone: { + base: 'rust', + color: 'green-400', + lightColor: 'green-700', // optional + }, +}, +``` + +This will generate a new icon assignment for the file name `lib.rs` with the same shape as the already existing `rust` icon but with a green color instead. Additionally, it will create a light theme variant of the icon with a darker green color for better contrast when using a light theme. + +That's it. We don't need to create a new SVG file. The extension will automatically adjust the colors of the existing icon. + +Cloned Rust icon example + +The same technique can be applied to folder icons using the `clone` attribute in the configuration. + +You might have noticed that we are using aliases for the colors. These aliases correspond to the Material Design color palette. + +You can find a list of all available color aliases in the [materialPalette.ts](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/generator/clones/utils/color/materialPalette.ts) file. + +#### Preventing recoloring in cloned icons + +When cloning icons, recoloring works by replacing each color attribute in each path/shape of the SVG with a new color, which is determined by the selected color in the configuration. + +However, there are cases where you might want to prevent certain parts of the icon from being recolored. + +Let's see an example: + +![gitlab icon](./images/how-tos/cloned-icon-no-recolor.png) + +In this example, we have the `folder-gitlab` folder icon. If we were to clone it, we should prevent recoloring from happening over the gitlab logo and only allow recoloring of the folder shape itself. + +To do this, we need to set the attribute `data-mit-no-recolor="true"` to the paths, shapes, or groups we do not want to be recolored. + +```svg + + + + + + + + + +``` + +Now if we create a clone of this icon, the paths, shapes, or groups marked with `data-mit-no-recolor="true"` will retain their original colors. Recoloring will only affect paths not marked with this attribute. + +```typescript +{ name: 'folder-gitlab', folderNames: ['gitlab'] }, +{ + name: 'folder-green-gitlab', + clone: { + base: 'folder-gitlab', + color: 'blue-300' + }, +} +``` + +This will result in the following: + +![the result of cloning gitlab icon with selective recoloring](./images/how-tos/cloned-icon-no-recolor-result.png) ## Add translations @@ -222,11 +417,33 @@ This project offers translations into different languages. If you notice an erro This icon extension consists not only of icons but also brings some code. This is necessary to simplify various things and enable multiple functionalities. If you want to change something here, the following steps are to be considered: -1. Install [Node.js](https://nodejs.org/en/) on your machine -2. Install node dependencies with `npm install` +1. Install [Bun](https://bun.sh/docs/installation) on your machine +2. Install dependencies with `bun install` 3. Open project with VS Code 4. Install required [VS Code extensions](.vscode/extensions.json) 5. Press `F5` or run `Launch Extension` in the debug window -6. Run tests with `Launch Tests` +6. Run tests with `bun test` You will find more information about the official extension API in the [extension guides of VS Code](https://code.visualstudio.com/api/extension-guides/file-icon-theme). + +### Enable logging + +Logging can be enabled with the following settings: + +```json +{ + "material-icon-theme.enableLogging": true, + "material-icon-theme.logLevel": "debug", +} +``` + +The available log levels are: + +- `error`: Only errors are logged +- `info`: Only info logs are logged +- `debug`: All logs are logged + +Per default the logging is disabled as it can slow down the extension. If logging is enabled, the logs can be found in the output panel of VS Code under "Material Icon Theme". + +> **Note** +> Please restart the extension after changing the logging settings to apply the changes. diff --git a/README.md b/README.md index 919554678b..dc9e80af7f 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ + +


logo @@ -16,11 +18,6 @@ Downloads

-


-Sponsored by

- -

- ### File icons file icons @@ -96,14 +93,14 @@ It's possible to add custom icons by adding a path to an SVG file which is locat For example a custom SVG file called `sample.svg` can be placed in an `icons` folder inside of VS Code's `extensions` folder: -``` +```text .vscode โ”— extensions โ”— icons โ”— sample.svg ``` -In the settings.json the icon can be associated to a file name or file extension like this: +In the settings.json (User Settings only!) the icon can be associated to a file name or file extension like this: ```json "material-icon-theme.files.associations": { @@ -113,6 +110,35 @@ In the settings.json the icon can be associated to a file name or file extension _Note: The custom file name must be configured in the settings without the file ending `.svg` as shown in the example above._ +#### Custom file icon clones + +It's also possible to clone existing file icons and change their colors to create new icons that can be associated with file names or file extensions. The following example shows how to clone the `rust` icon: + +```json +"material-icon-theme.files.customClones": [ + { + "name": "rust-mod", + "base": "rust", + "color": "blue-400", + "fileNames": ["mod.rs"] + }, + { + "name": "rust-lib", + "base": "rust", + "color": "light-green-300", + "lightColor": "light-green-600", + "fileNames": ["lib.rs"] + } +] +``` + +This will create two new icons called `rust-mod` and `rust-lib` that are associated with the file names `mod.rs` and `lib.rs` respectively. The `base` property defines the icon that should be cloned (in this case the `rust` icon). The `color` property defines the color of the new icon. The `lightColor` property is optional and defines the color of the icon when Visual Studio Code is running with a light color theme. The `fileNames` property defines the file names that should be associated with the new icon. There's also a `fileExtensions` property, which can be used to associate the new icon with file extensions (`"fileExtensions": ["ext", "ext2"]`). + +cloned file icons + +- Although you can use any `#RRGGBB` color for the `color` and `lightColor` properties, if you want to stick with colors from the material palette, you can check the full list of allowed aliases [here](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/generator/clones/utils/color/materialPalette.ts). +- You can check the full list of available icons to be used as the `base` [here](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/icons/fileIcons.ts). + ### Folder associations The following configuration can customize the folder icons. It is also possible to overwrite existing associations and create nice combinations. For example you could change the folder theme to "classic" and define icons only for the folder names you like. @@ -130,7 +156,7 @@ Similar to the files, it is also possible to reference your own SVG icons for fo In our example we place them into an `icons` folder inside of the `.vscode/extensions` folder: -``` +```text .vscode โ”— extensions โ”— icons @@ -138,7 +164,7 @@ In our example we place them into an `icons` folder inside of the `.vscode/exten โ”— folder-sample-open.svg ``` -In the settings.json the folder icons can be associated to a folder name (e.g. "src") like this: +In the settings.json (User Settings only!) the folder icons can be associated to a folder name (e.g. "src") like this: ```json "material-icon-theme.folders.associations": { @@ -146,6 +172,35 @@ In the settings.json the folder icons can be associated to a folder name (e.g. " } ``` +#### Custom folder icon clones + +It's also possible to clone existing folder icons and change their colors to create new icons that can be associated with folder names. The following example shows how to clone the `admin` folder icon: + +```json +"material-icon-theme.folders.customClones": [ + { + "name": "users-admin", + "base": "admin", + "color": "light-green-500", + "lightColor": "light-green-700", + "folderNames": ["users"] + }, + { + "name": "roles-admin", + "base": "admin", + "color": "purple-400", + "folderNames": ["roles"] + } +] +``` + +This will create two new icons called `users-admin` and `roles-admin` that are associated with the folder names `users` and `roles` respectively. The `base` property defines the icon that should be cloned (in this case the `admin` folder icon). The `color` property defines the color of the new icon. The `lightColor` property is optional and defines the color of the icon when Visual Studio Code is running with a light color theme. The `folderNames` property defines the folder names that should be associated with the new icon. + +cloned folder icons + +- Although you can use any `#RRGGBB` color for the `color` and `lightColor` properties, if you want to stick with colors from the material palette, you can check the full list of allowed aliases [here](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/generator/clones/utils/color/materialPalette.ts). +- You can check the full list of available icon to be used as the `base` [here](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/icons/folderIcons.ts). + ### Language associations With the following configuration you can customize the language icons. It is also possible to overwrite existing associations. @@ -186,14 +241,15 @@ Press `Ctrl-Shift-P` to open the command palette and type `Material Icons`. ## Contributors - + Contributors **Would you like to contribute?** -Take a look at the [contribution guidelines](https://github.com/PKief/vscode-material-icon-theme/blob/main/CONTRIBUTING.md) and open a [new issue](https://github.com/PKief/vscode-material-icon-theme/issues) or [pull request](https://github.com/PKief/vscode-material-icon-theme/pulls) on GitHub. +Take a look at the [contribution guidelines](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/CONTRIBUTING.md) and open a [new issue](https://github.com/material-extensions/vscode-material-icon-theme/issues) or [pull request](https://github.com/material-extensions/vscode-material-icon-theme/pulls) on GitHub. ## Related extensions - [Material Icons for GitHub](https://github.com/Claudiohbsantos/github-material-icons-extension) +- [Material Product Icons](https://github.com/material-extensions/vscode-material-product-icons) diff --git a/biome.jsonc b/biome.jsonc new file mode 100644 index 0000000000..1c88af2541 --- /dev/null +++ b/biome.jsonc @@ -0,0 +1,65 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.8.2/schema.json", + "formatter": { + "enabled": true, + "formatWithErrors": false, + "indentStyle": "space", + "indentWidth": 2, + "lineEnding": "lf", + "lineWidth": 80, + "attributePosition": "auto" + }, + "organizeImports": { "enabled": true }, + "linter": { + "enabled": true, + "rules": { + "recommended": false, + "complexity": { "useArrowFunction": "error" }, + "correctness": { + "noUnsafeFinally": "error", + "noUnusedVariables": "error", + "noUnusedImports": "error" + }, + "security": { "noGlobalEval": "error" }, + "style": { + "noVar": "error", + "useBlockStatements": "off", + "useConst": "error", + "useNamingConvention": { + "level": "error", + "options": { "strictCase": false } + } + }, + "suspicious": { + "noDoubleEquals": "error", + "noExplicitAny": "error", + "useNamespaceKeyword": "error" + } + } + }, + "javascript": { + "formatter": { + "jsxQuoteStyle": "single", + "quoteProperties": "asNeeded", + "trailingCommas": "es5", + "semicolons": "always", + "arrowParentheses": "always", + "bracketSpacing": true, + "bracketSameLine": false, + "quoteStyle": "single", + "attributePosition": "auto" + } + }, + "overrides": [ + { + "include": ["src/models/scripts/contributors/contributor.ts"], + "linter": { + "rules": { + "style": { + "useNamingConvention": "off" + } + } + } + } + ] +} diff --git a/build/build-with-esbuild.ts b/build/build-with-esbuild.ts new file mode 100644 index 0000000000..1723615c1d --- /dev/null +++ b/build/build-with-esbuild.ts @@ -0,0 +1,13 @@ +import { join } from 'node:path'; +import esbuild from 'esbuild'; +import config from './esbuild.config'; + +const output = await esbuild.build(config).catch(() => process.exit(1)); + +// If metafile is enabled, write it to dist/metafile.json +// Metafiles can be analyzed to determine the dependencies of the build +// https://esbuild.github.io/analyze/ +if (config.metafile) { + const path = join(process.cwd(), 'dist', 'metafile.json'); + await Bun.write(path, JSON.stringify(output.metafile, undefined, 2)); +} diff --git a/build/esbuild.config.ts b/build/esbuild.config.ts new file mode 100644 index 0000000000..7169462800 --- /dev/null +++ b/build/esbuild.config.ts @@ -0,0 +1,28 @@ +import type { BuildOptions } from 'esbuild'; + +const config: BuildOptions = { + entryPoints: [ + './src/extension/desktop/extension.ts', + './src/extension/web/extension.ts', + './src/module/index.ts', + ], + minify: true, + bundle: true, + platform: 'node', + metafile: false, + target: 'node12', + outdir: './dist', + outbase: './src', + outExtension: { + '.js': '.cjs', + }, + format: 'cjs', + external: ['vscode'], + loader: { + '.ts': 'ts', + '.js': 'js', + }, + logLevel: 'info', +}; + +export default config; diff --git a/build/watch-with-esbuild.ts b/build/watch-with-esbuild.ts new file mode 100644 index 0000000000..9cb41a8965 --- /dev/null +++ b/build/watch-with-esbuild.ts @@ -0,0 +1,10 @@ +import esbuild from 'esbuild'; +import config from './esbuild.config'; + +try { + const context = await esbuild.context(config); + await context.watch(); +} catch (e) { + console.error(e); + process.exit(1); +} diff --git a/build/web-extension.webpack.config.js b/build/web-extension.webpack.config.js deleted file mode 100644 index be272e1aeb..0000000000 --- a/build/web-extension.webpack.config.js +++ /dev/null @@ -1,62 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -//@ts-check -'use strict'; - -//@ts-check -/** @typedef {import('webpack').Configuration} WebpackConfig **/ - -const path = require('path'); -const webpack = require('webpack'); - -module.exports = /** @type WebpackConfig */ { - context: path.dirname(__dirname), - mode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production') - target: 'webworker', // extensions run in a webworker context - entry: { - extension: './src/web/extension.ts', - }, - resolve: { - mainFields: ['browser', 'module', 'main'], - extensions: ['.ts', '.js'], // support ts-files and js-files - alias: {}, - fallback: { - assert: require.resolve('assert'), - path: false, - fs: false, - }, - }, - module: { - rules: [ - { - test: /\.ts$/, - exclude: /node_modules/, - use: [ - { - loader: 'ts-loader', - }, - ], - }, - ], - }, - plugins: [ - new webpack.ProvidePlugin({ - process: 'process/browser', - }), - ], - externals: { - vscode: 'commonjs vscode', // ignored because it doesn't exist - }, - performance: { - hints: false, - }, - output: { - filename: '[name].js', - path: path.join(__dirname, '../dist/web'), - libraryTarget: 'commonjs', - }, - devtool: 'nosources-source-map', -}; diff --git a/build/webpack.config.js b/build/webpack.config.js deleted file mode 100644 index 421193057c..0000000000 --- a/build/webpack.config.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -const path = require('path'); - -/** @type {import('webpack').Configuration} */ -const config = { - context: path.dirname(__dirname), - target: 'node', - node: { - __dirname: false, - __filename: false, - }, - entry: './src/extension.ts', - output: { - path: path.resolve(__dirname, '../dist'), - filename: 'extension.js', - libraryTarget: 'commonjs2', - devtoolModuleFilenameTemplate: '../[resource-path]', - clean: true, - }, - devtool: 'source-map', - externals: { - vscode: 'commonjs vscode', - }, - resolve: { - extensions: ['.ts', '.js'], - }, - module: { - rules: [ - { - test: /\.ts$/, - exclude: /node_modules/, - use: 'ts-loader', - }, - ], - }, -}; - -module.exports = config; diff --git a/bun.lockb b/bun.lockb new file mode 100644 index 0000000000..7c8ba034d5 Binary files /dev/null and b/bun.lockb differ diff --git a/bunfig.toml b/bunfig.toml new file mode 100644 index 0000000000..1b02ffbbee --- /dev/null +++ b/bunfig.toml @@ -0,0 +1,3 @@ +[test] +# Load these modules before running tests. +preload = ["./src/core/tests/mocks"] diff --git a/changelog.config.json b/changelog.config.json index 375280c089..a68147b605 100644 --- a/changelog.config.json +++ b/changelog.config.json @@ -1,4 +1,4 @@ { - "repositoryUrl": "https://github.com/PKief/vscode-material-icon-theme", + "repositoryUrl": "https://github.com/material-extensions/vscode-material-icon-theme", "blacklistPattern": "^Release \\d+\\.\\d+\\.\\d+|^\\d+\\.\\d+\\.\\d+$" } diff --git a/icons/3d.svg b/icons/3d.svg index dd47d7b8bb..db906094b4 100644 --- a/icons/3d.svg +++ b/icons/3d.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/abap.svg b/icons/abap.svg new file mode 100644 index 0000000000..0a9b08390f --- /dev/null +++ b/icons/abap.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/abc.svg b/icons/abc.svg index 0b897ada89..7754a1e622 100644 --- a/icons/abc.svg +++ b/icons/abc.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/actionscript.svg b/icons/actionscript.svg index c770fa3430..38452d92eb 100644 --- a/icons/actionscript.svg +++ b/icons/actionscript.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/ada.svg b/icons/ada.svg index f80f5d4def..2b984e74ed 100644 --- a/icons/ada.svg +++ b/icons/ada.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/adobe-swc.svg b/icons/adobe-swc.svg new file mode 100644 index 0000000000..3776603024 --- /dev/null +++ b/icons/adobe-swc.svg @@ -0,0 +1 @@ + diff --git a/icons/adonis.svg b/icons/adonis.svg index 981c510e99..f854f018e7 100644 --- a/icons/adonis.svg +++ b/icons/adonis.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/advpl.svg b/icons/advpl.svg new file mode 100644 index 0000000000..54e493b0f9 --- /dev/null +++ b/icons/advpl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/advpl_include.svg b/icons/advpl_include.svg deleted file mode 100644 index 6bab2784a3..0000000000 --- a/icons/advpl_include.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/advpl_prw.svg b/icons/advpl_prw.svg deleted file mode 100644 index 63ecd0f29d..0000000000 --- a/icons/advpl_prw.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/advpl_ptm.svg b/icons/advpl_ptm.svg deleted file mode 100644 index ebd5ef650a..0000000000 --- a/icons/advpl_ptm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/advpl_tlpp.svg b/icons/advpl_tlpp.svg deleted file mode 100644 index ceb3e998de..0000000000 --- a/icons/advpl_tlpp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/amplify.svg b/icons/amplify.svg new file mode 100644 index 0000000000..89f42120ba --- /dev/null +++ b/icons/amplify.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/android.svg b/icons/android.svg index b13ac0aa4e..ee054aeace 100644 --- a/icons/android.svg +++ b/icons/android.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/angular-component.svg b/icons/angular-component.svg deleted file mode 100644 index b5824b8531..0000000000 --- a/icons/angular-component.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/angular-directive.svg b/icons/angular-directive.svg deleted file mode 100644 index 08b82a1eed..0000000000 --- a/icons/angular-directive.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/angular-guard.svg b/icons/angular-guard.svg deleted file mode 100644 index 20286fe681..0000000000 --- a/icons/angular-guard.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/angular-pipe.svg b/icons/angular-pipe.svg deleted file mode 100644 index f26a8252e4..0000000000 --- a/icons/angular-pipe.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/angular-resolver.svg b/icons/angular-resolver.svg deleted file mode 100644 index 20286fe681..0000000000 --- a/icons/angular-resolver.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/angular-service.svg b/icons/angular-service.svg deleted file mode 100644 index 063aeaa38e..0000000000 --- a/icons/angular-service.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/angular.svg b/icons/angular.svg index 123252eb79..a28075e93c 100644 --- a/icons/angular.svg +++ b/icons/angular.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/antlr.svg b/icons/antlr.svg index 8aac3766b1..79999567b5 100644 --- a/icons/antlr.svg +++ b/icons/antlr.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/apiblueprint.svg b/icons/apiblueprint.svg index 23e9324432..08462673af 100644 --- a/icons/apiblueprint.svg +++ b/icons/apiblueprint.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/apollo.svg b/icons/apollo.svg index a42c6237b1..f030fa629a 100644 --- a/icons/apollo.svg +++ b/icons/apollo.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/applescript.svg b/icons/applescript.svg index ad9933b29c..18b61d5671 100644 --- a/icons/applescript.svg +++ b/icons/applescript.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/apps-script.svg b/icons/apps-script.svg new file mode 100644 index 0000000000..5f63d8a9ef --- /dev/null +++ b/icons/apps-script.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/appveyor.svg b/icons/appveyor.svg index 65966c4423..eab0982faa 100644 --- a/icons/appveyor.svg +++ b/icons/appveyor.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/architecture.svg b/icons/architecture.svg index 5d118a3334..9c04d2eee1 100644 --- a/icons/architecture.svg +++ b/icons/architecture.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/arduino.svg b/icons/arduino.svg index 031cdeca42..188f20c4ff 100644 --- a/icons/arduino.svg +++ b/icons/arduino.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/asciidoc.svg b/icons/asciidoc.svg index 3411c93917..815ee9177b 100644 --- a/icons/asciidoc.svg +++ b/icons/asciidoc.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/assembly.svg b/icons/assembly.svg index f0041522bd..367d00e228 100644 --- a/icons/assembly.svg +++ b/icons/assembly.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/astro-config.svg b/icons/astro-config.svg new file mode 100644 index 0000000000..f5388f5656 --- /dev/null +++ b/icons/astro-config.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/astro.svg b/icons/astro.svg index 2507c12bf9..a9a0dfa429 100644 --- a/icons/astro.svg +++ b/icons/astro.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/astyle.svg b/icons/astyle.svg index 47e324656e..b480f8461d 100644 --- a/icons/astyle.svg +++ b/icons/astyle.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/audio.svg b/icons/audio.svg index b5f0f8fe4c..b22e30abe0 100644 --- a/icons/audio.svg +++ b/icons/audio.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/aurelia.svg b/icons/aurelia.svg index e70f2fe573..1253d0466b 100644 --- a/icons/aurelia.svg +++ b/icons/aurelia.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/authors.svg b/icons/authors.svg index 08a59b6de1..5c47826012 100644 --- a/icons/authors.svg +++ b/icons/authors.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/auto.svg b/icons/auto.svg index 9e6f7c21a1..f51adb4b95 100644 --- a/icons/auto.svg +++ b/icons/auto.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/auto_light.svg b/icons/auto_light.svg index 90697d69e4..a46a21fe28 100644 --- a/icons/auto_light.svg +++ b/icons/auto_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/autohotkey.svg b/icons/autohotkey.svg index 0d4f486b1a..a2ae28c08f 100644 --- a/icons/autohotkey.svg +++ b/icons/autohotkey.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/autoit.svg b/icons/autoit.svg index 60835749e9..66b1a136e4 100644 --- a/icons/autoit.svg +++ b/icons/autoit.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/azure-pipelines.svg b/icons/azure-pipelines.svg index a1b50816af..25aa5f9e93 100644 --- a/icons/azure-pipelines.svg +++ b/icons/azure-pipelines.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/azure.svg b/icons/azure.svg index e9a4d5246b..dd83d74339 100644 --- a/icons/azure.svg +++ b/icons/azure.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/babel.svg b/icons/babel.svg index 6e101e0dc7..7333de37ea 100644 --- a/icons/babel.svg +++ b/icons/babel.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/ballerina.svg b/icons/ballerina.svg index 0ee468764d..3c1341d77a 100644 --- a/icons/ballerina.svg +++ b/icons/ballerina.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/bazel.svg b/icons/bazel.svg index 1e1e49ed2c..b38a90c59a 100644 --- a/icons/bazel.svg +++ b/icons/bazel.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/bench-js.svg b/icons/bench-js.svg new file mode 100644 index 0000000000..c4a51c17d6 --- /dev/null +++ b/icons/bench-js.svg @@ -0,0 +1 @@ + diff --git a/icons/bench-jsx.svg b/icons/bench-jsx.svg new file mode 100644 index 0000000000..ab9db01644 --- /dev/null +++ b/icons/bench-jsx.svg @@ -0,0 +1 @@ + diff --git a/icons/bench-ts.svg b/icons/bench-ts.svg new file mode 100644 index 0000000000..0467b24555 --- /dev/null +++ b/icons/bench-ts.svg @@ -0,0 +1 @@ + diff --git a/icons/bicep.svg b/icons/bicep.svg index 342510e631..562b39aa4f 100644 --- a/icons/bicep.svg +++ b/icons/bicep.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/biome.svg b/icons/biome.svg new file mode 100644 index 0000000000..60027d7be0 --- /dev/null +++ b/icons/biome.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/bitbucket.svg b/icons/bitbucket.svg index 1cbe832a00..c4fa06d33e 100644 --- a/icons/bitbucket.svg +++ b/icons/bitbucket.svg @@ -1,13 +1 @@ - - + \ No newline at end of file diff --git a/icons/bithound.svg b/icons/bithound.svg index eb7aced1e1..39c0b7b289 100644 --- a/icons/bithound.svg +++ b/icons/bithound.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/blink.svg b/icons/blink.svg index dea214c83c..05e7708657 100644 --- a/icons/blink.svg +++ b/icons/blink.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/blink_light.svg b/icons/blink_light.svg index f58d602866..8db0238b7e 100644 --- a/icons/blink_light.svg +++ b/icons/blink_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/blitz.svg b/icons/blitz.svg index 8176ebfb1a..7693299988 100644 --- a/icons/blitz.svg +++ b/icons/blitz.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/bower.svg b/icons/bower.svg index 01457c4718..c71d7a305d 100644 --- a/icons/bower.svg +++ b/icons/bower.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/brainfuck.svg b/icons/brainfuck.svg index 5f11c9c381..bb5c701515 100644 --- a/icons/brainfuck.svg +++ b/icons/brainfuck.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/browserlist.svg b/icons/browserlist.svg index ab7139673b..24441a35ed 100644 --- a/icons/browserlist.svg +++ b/icons/browserlist.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/browserlist_light.svg b/icons/browserlist_light.svg index 762866ca39..716ad954e6 100644 --- a/icons/browserlist_light.svg +++ b/icons/browserlist_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/bruno.svg b/icons/bruno.svg new file mode 100644 index 0000000000..c44a35111d --- /dev/null +++ b/icons/bruno.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/buck.svg b/icons/buck.svg index 6086a5bb1d..c035571e12 100644 --- a/icons/buck.svg +++ b/icons/buck.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/bucklescript.svg b/icons/bucklescript.svg index 8f13f98d6a..d67a7843d3 100644 --- a/icons/bucklescript.svg +++ b/icons/bucklescript.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/buildkite.svg b/icons/buildkite.svg index 1fdd05d08c..88bf375dc7 100644 --- a/icons/buildkite.svg +++ b/icons/buildkite.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/bun.svg b/icons/bun.svg index b4663d7e8d..124fefd490 100644 --- a/icons/bun.svg +++ b/icons/bun.svg @@ -1,2 +1 @@ - -Bun Logo + \ No newline at end of file diff --git a/icons/bun_light.svg b/icons/bun_light.svg index 40b73219d4..739f6682d0 100644 --- a/icons/bun_light.svg +++ b/icons/bun_light.svg @@ -1,2 +1 @@ - -Bun Logo + \ No newline at end of file diff --git a/icons/c.svg b/icons/c.svg index 42c0d1ef09..5bb84b6a97 100644 --- a/icons/c.svg +++ b/icons/c.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/icons/cabal.svg b/icons/cabal.svg index 9100e9abde..fc7f92254b 100644 --- a/icons/cabal.svg +++ b/icons/cabal.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/caddy.svg b/icons/caddy.svg index c651440030..5ab5f0c29f 100644 --- a/icons/caddy.svg +++ b/icons/caddy.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/cadence.svg b/icons/cadence.svg index 392f8ff978..d9d85e456d 100644 --- a/icons/cadence.svg +++ b/icons/cadence.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/cairo.svg b/icons/cairo.svg new file mode 100644 index 0000000000..cd629cf099 --- /dev/null +++ b/icons/cairo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/cake.svg b/icons/cake.svg index 6c09c992f6..b0a6d1462b 100644 --- a/icons/cake.svg +++ b/icons/cake.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/capacitor.svg b/icons/capacitor.svg index 43bf5203a3..2a48c5843f 100644 --- a/icons/capacitor.svg +++ b/icons/capacitor.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/capnp.svg b/icons/capnp.svg new file mode 100644 index 0000000000..8d5efa3f93 --- /dev/null +++ b/icons/capnp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/cds.svg b/icons/cds.svg new file mode 100644 index 0000000000..e637c83121 --- /dev/null +++ b/icons/cds.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/certificate.svg b/icons/certificate.svg index fc7806a585..f35e17ef90 100644 --- a/icons/certificate.svg +++ b/icons/certificate.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/changelog.svg b/icons/changelog.svg index 9fa93f38de..3d9031d469 100644 --- a/icons/changelog.svg +++ b/icons/changelog.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/chess.svg b/icons/chess.svg index 8847d6cfeb..8494be8656 100644 --- a/icons/chess.svg +++ b/icons/chess.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/chess_light.svg b/icons/chess_light.svg index 110f8f4fe1..a4e5939283 100644 --- a/icons/chess_light.svg +++ b/icons/chess_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/chrome.svg b/icons/chrome.svg new file mode 100644 index 0000000000..b27f241ecd --- /dev/null +++ b/icons/chrome.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/circleci.svg b/icons/circleci.svg index 118861bfde..9a03a3d670 100644 --- a/icons/circleci.svg +++ b/icons/circleci.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/circleci_light.svg b/icons/circleci_light.svg index d82b2033cc..19cdaec3ae 100644 --- a/icons/circleci_light.svg +++ b/icons/circleci_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/clangd.svg b/icons/clangd.svg new file mode 100644 index 0000000000..f6742e9aef --- /dev/null +++ b/icons/clangd.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/clojure.svg b/icons/clojure.svg index efeed97b83..945fa06fcc 100644 --- a/icons/clojure.svg +++ b/icons/clojure.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/cloudfoundry.svg b/icons/cloudfoundry.svg index f5c454a59e..277c9575f6 100644 --- a/icons/cloudfoundry.svg +++ b/icons/cloudfoundry.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/cmake.svg b/icons/cmake.svg index 85cd686f87..b6d803d32d 100644 --- a/icons/cmake.svg +++ b/icons/cmake.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/coala.svg b/icons/coala.svg index 2778711c9e..daf2bb45a5 100644 --- a/icons/coala.svg +++ b/icons/coala.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/cobol.svg b/icons/cobol.svg index 0168a48d78..7c812dc398 100644 --- a/icons/cobol.svg +++ b/icons/cobol.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/coconut.svg b/icons/coconut.svg index c5dd8b085a..91965a1b18 100644 --- a/icons/coconut.svg +++ b/icons/coconut.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/code-climate.svg b/icons/code-climate.svg index 1cbf9fa326..97cbb4e8fc 100644 --- a/icons/code-climate.svg +++ b/icons/code-climate.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/code-climate_light.svg b/icons/code-climate_light.svg index 5be29b8493..dd18ba52b9 100644 --- a/icons/code-climate_light.svg +++ b/icons/code-climate_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/codecov.svg b/icons/codecov.svg index 4b47d41722..48da2f23f8 100644 --- a/icons/codecov.svg +++ b/icons/codecov.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/codeowners.svg b/icons/codeowners.svg index 66f3a03169..1c7cdc3cf0 100644 --- a/icons/codeowners.svg +++ b/icons/codeowners.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/coderabbit-ai.svg b/icons/coderabbit-ai.svg new file mode 100644 index 0000000000..c5e434028b --- /dev/null +++ b/icons/coderabbit-ai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/coffee.svg b/icons/coffee.svg index d9e751fa3c..72a0810621 100644 --- a/icons/coffee.svg +++ b/icons/coffee.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/coldfusion.svg b/icons/coldfusion.svg index 04d70f9706..0596db7b3e 100644 --- a/icons/coldfusion.svg +++ b/icons/coldfusion.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/command.svg b/icons/command.svg index 8d08f2ddbc..a21c0da8b1 100644 --- a/icons/command.svg +++ b/icons/command.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/commitlint.svg b/icons/commitlint.svg index a4fee4bae2..187429e8da 100644 --- a/icons/commitlint.svg +++ b/icons/commitlint.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/concourse.svg b/icons/concourse.svg new file mode 100644 index 0000000000..595cabc036 --- /dev/null +++ b/icons/concourse.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/conduct.svg b/icons/conduct.svg index c6a869b9a0..0e7659a683 100644 --- a/icons/conduct.svg +++ b/icons/conduct.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/console.svg b/icons/console.svg index 1689c935b5..572910aa8b 100644 --- a/icons/console.svg +++ b/icons/console.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/contributing.svg b/icons/contributing.svg index 18ac914607..ff2a72cd04 100644 --- a/icons/contributing.svg +++ b/icons/contributing.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/controller.svg b/icons/controller.svg new file mode 100644 index 0000000000..8c68a50612 --- /dev/null +++ b/icons/controller.svg @@ -0,0 +1 @@ + diff --git a/icons/copilot.svg b/icons/copilot.svg new file mode 100644 index 0000000000..082f79ebb8 --- /dev/null +++ b/icons/copilot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/copilot_light.svg b/icons/copilot_light.svg new file mode 100644 index 0000000000..d030bd8404 --- /dev/null +++ b/icons/copilot_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/cpp.svg b/icons/cpp.svg index c2c3d5b33b..e0b01b97eb 100644 --- a/icons/cpp.svg +++ b/icons/cpp.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/icons/craco.svg b/icons/craco.svg index b98084192b..6fd97d8807 100644 --- a/icons/craco.svg +++ b/icons/craco.svg @@ -1,45 +1 @@ - - - - + \ No newline at end of file diff --git a/icons/credits.svg b/icons/credits.svg index 5930136529..b67c55a8c3 100644 --- a/icons/credits.svg +++ b/icons/credits.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/crystal.svg b/icons/crystal.svg index a3829a31c5..e3796bfa57 100644 --- a/icons/crystal.svg +++ b/icons/crystal.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/crystal_light.svg b/icons/crystal_light.svg index e1e30d36d2..ca387f4e95 100644 --- a/icons/crystal_light.svg +++ b/icons/crystal_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/csharp.svg b/icons/csharp.svg index 7c7f5bbbe4..02b1be3e1a 100644 --- a/icons/csharp.svg +++ b/icons/csharp.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/icons/css-map.svg b/icons/css-map.svg index daa820bc48..70f316386f 100644 --- a/icons/css-map.svg +++ b/icons/css-map.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/css.svg b/icons/css.svg index 6eb82d6db4..2f178cf719 100644 --- a/icons/css.svg +++ b/icons/css.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/cucumber.svg b/icons/cucumber.svg index 4ecac7709b..2e1c2c425f 100644 --- a/icons/cucumber.svg +++ b/icons/cucumber.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/cuda.svg b/icons/cuda.svg index adc818598d..d4a0f37df4 100644 --- a/icons/cuda.svg +++ b/icons/cuda.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/cypress.svg b/icons/cypress.svg index 5f2b090598..c9ca6cc0b0 100644 --- a/icons/cypress.svg +++ b/icons/cypress.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/d.svg b/icons/d.svg index e7e99be48e..ac053a0a9b 100644 --- a/icons/d.svg +++ b/icons/d.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/dart.svg b/icons/dart.svg index 77ec4d2809..f474c78dd1 100644 --- a/icons/dart.svg +++ b/icons/dart.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/dart_generated.svg b/icons/dart_generated.svg index ad69501106..d025abcca9 100644 --- a/icons/dart_generated.svg +++ b/icons/dart_generated.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/database.svg b/icons/database.svg index 8b8e28538a..731fe70cac 100644 --- a/icons/database.svg +++ b/icons/database.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/deepsource.svg b/icons/deepsource.svg new file mode 100644 index 0000000000..d70fd467c6 --- /dev/null +++ b/icons/deepsource.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/denizenscript.svg b/icons/denizenscript.svg index ab2598adbe..f2deded634 100644 --- a/icons/denizenscript.svg +++ b/icons/denizenscript.svg @@ -1 +1 @@ -D \ No newline at end of file + \ No newline at end of file diff --git a/icons/deno.svg b/icons/deno.svg index c19ad4b083..1ce2a45da2 100644 --- a/icons/deno.svg +++ b/icons/deno.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/deno_light.svg b/icons/deno_light.svg index ed3d104757..d74ba83881 100644 --- a/icons/deno_light.svg +++ b/icons/deno_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/dependabot.svg b/icons/dependabot.svg index d3a57b506b..c497746b1b 100644 --- a/icons/dependabot.svg +++ b/icons/dependabot.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/dhall.svg b/icons/dhall.svg index c9fbf9ff6d..d5a22bcd42 100644 --- a/icons/dhall.svg +++ b/icons/dhall.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/diff.svg b/icons/diff.svg index 45662c0781..5596f2eb89 100644 --- a/icons/diff.svg +++ b/icons/diff.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/dinophp.svg b/icons/dinophp.svg index 8d07256798..d35ef49454 100644 --- a/icons/dinophp.svg +++ b/icons/dinophp.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/disc.svg b/icons/disc.svg index 5492d13daf..dde6fd7cd4 100644 --- a/icons/disc.svg +++ b/icons/disc.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/django.svg b/icons/django.svg index aa7b4facf2..b896de58ea 100644 --- a/icons/django.svg +++ b/icons/django.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/dll.svg b/icons/dll.svg new file mode 100644 index 0000000000..7d42654df3 --- /dev/null +++ b/icons/dll.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/docker.svg b/icons/docker.svg index 5d02710052..5b4da625b3 100644 --- a/icons/docker.svg +++ b/icons/docker.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/document.svg b/icons/document.svg index 1be76a4e48..e496b67219 100644 --- a/icons/document.svg +++ b/icons/document.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/dotjs.svg b/icons/dotjs.svg index b5bf972192..5ac893c6a1 100644 --- a/icons/dotjs.svg +++ b/icons/dotjs.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/drawio.svg b/icons/drawio.svg index 0e754248d9..e3b8ba0c07 100644 --- a/icons/drawio.svg +++ b/icons/drawio.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/drizzle.svg b/icons/drizzle.svg new file mode 100644 index 0000000000..0de05d7264 --- /dev/null +++ b/icons/drizzle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/drone.svg b/icons/drone.svg index 8bd6c640a4..983a3321ac 100644 --- a/icons/drone.svg +++ b/icons/drone.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/drone_light.svg b/icons/drone_light.svg index 51706c82b7..5499244074 100644 --- a/icons/drone_light.svg +++ b/icons/drone_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/duc.svg b/icons/duc.svg new file mode 100644 index 0000000000..cfa947ce15 --- /dev/null +++ b/icons/duc.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/dune.svg b/icons/dune.svg index 9ebe4b2347..247cd36086 100644 --- a/icons/dune.svg +++ b/icons/dune.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/edge.svg b/icons/edge.svg index 58c1cfcd02..8275e40aae 100644 --- a/icons/edge.svg +++ b/icons/edge.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/editorconfig.svg b/icons/editorconfig.svg index e2f443c0d5..bfcfc426b9 100644 --- a/icons/editorconfig.svg +++ b/icons/editorconfig.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/ejs.svg b/icons/ejs.svg index 906f21a9c4..6ead40ebad 100644 --- a/icons/ejs.svg +++ b/icons/ejs.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/elixir.svg b/icons/elixir.svg index 9b173215fe..e086af6246 100644 --- a/icons/elixir.svg +++ b/icons/elixir.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/elm.svg b/icons/elm.svg index b3a0a1c22c..973ded8eed 100644 --- a/icons/elm.svg +++ b/icons/elm.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/email.svg b/icons/email.svg index 1b046d0e5a..5c7de60de2 100644 --- a/icons/email.svg +++ b/icons/email.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/ember.svg b/icons/ember.svg index 64cf006287..10910837af 100644 --- a/icons/ember.svg +++ b/icons/ember.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/erlang.svg b/icons/erlang.svg index 29303defd9..63a2769f47 100644 --- a/icons/erlang.svg +++ b/icons/erlang.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/esbuild.svg b/icons/esbuild.svg new file mode 100644 index 0000000000..e682d6b10f --- /dev/null +++ b/icons/esbuild.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/eslint.svg b/icons/eslint.svg index ae63dd87b4..185da176e1 100644 --- a/icons/eslint.svg +++ b/icons/eslint.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/exe.svg b/icons/exe.svg index d7b98e24d4..649fc58ca7 100644 --- a/icons/exe.svg +++ b/icons/exe.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/fastlane.svg b/icons/fastlane.svg index da1be2e7aa..78cf188ad4 100644 --- a/icons/fastlane.svg +++ b/icons/fastlane.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/favicon.svg b/icons/favicon.svg index 432aabf34f..21abf661be 100644 --- a/icons/favicon.svg +++ b/icons/favicon.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/figma.svg b/icons/figma.svg index 9beccf71c3..e54adb1e27 100644 --- a/icons/figma.svg +++ b/icons/figma.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/firebase.svg b/icons/firebase.svg index 27404a8a53..7281691066 100644 --- a/icons/firebase.svg +++ b/icons/firebase.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/flash.svg b/icons/flash.svg index a1a3187d4f..4d52f1e951 100644 --- a/icons/flash.svg +++ b/icons/flash.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/flow.svg b/icons/flow.svg index 4a0909e901..05919810f7 100644 --- a/icons/flow.svg +++ b/icons/flow.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-admin-open.svg b/icons/folder-admin-open.svg index c27d4e77b4..aac8a3d2c2 100644 --- a/icons/folder-admin-open.svg +++ b/icons/folder-admin-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-admin.svg b/icons/folder-admin.svg index fe5d06c217..27fc1ae075 100644 --- a/icons/folder-admin.svg +++ b/icons/folder-admin.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-android-open.svg b/icons/folder-android-open.svg index 38f74e2d18..c8b970a8f6 100644 --- a/icons/folder-android-open.svg +++ b/icons/folder-android-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-android.svg b/icons/folder-android.svg index 6b5323d6fe..c8d1e70171 100644 --- a/icons/folder-android.svg +++ b/icons/folder-android.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-angular-open.svg b/icons/folder-angular-open.svg index 2c50807996..5207d3445f 100644 --- a/icons/folder-angular-open.svg +++ b/icons/folder-angular-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-angular.svg b/icons/folder-angular.svg index 4cb99e6d1c..496dc46b89 100644 --- a/icons/folder-angular.svg +++ b/icons/folder-angular.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-animation-open.svg b/icons/folder-animation-open.svg index 97c3401a6e..1dedd76c54 100644 --- a/icons/folder-animation-open.svg +++ b/icons/folder-animation-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-animation.svg b/icons/folder-animation.svg index 1292fd46ea..ec3bd17cdb 100644 --- a/icons/folder-animation.svg +++ b/icons/folder-animation.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-ansible-open.svg b/icons/folder-ansible-open.svg index 8a13697b1b..b729f8df25 100644 --- a/icons/folder-ansible-open.svg +++ b/icons/folder-ansible-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-ansible.svg b/icons/folder-ansible.svg index 6e8ac87de1..b20a8ca1bd 100644 --- a/icons/folder-ansible.svg +++ b/icons/folder-ansible.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-api-open.svg b/icons/folder-api-open.svg index 8626503233..ddf4b1cc27 100644 --- a/icons/folder-api-open.svg +++ b/icons/folder-api-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-api.svg b/icons/folder-api.svg index 54b78dc6d8..54bc5a2d65 100644 --- a/icons/folder-api.svg +++ b/icons/folder-api.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-apollo-open.svg b/icons/folder-apollo-open.svg index aea3109cba..b9e5be178f 100644 --- a/icons/folder-apollo-open.svg +++ b/icons/folder-apollo-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-apollo.svg b/icons/folder-apollo.svg index be01767e22..88794b7a2e 100644 --- a/icons/folder-apollo.svg +++ b/icons/folder-apollo.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-app-open.svg b/icons/folder-app-open.svg index 4480a9fe40..de52492590 100644 --- a/icons/folder-app-open.svg +++ b/icons/folder-app-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-app.svg b/icons/folder-app.svg index 72b9882c88..68083c75d9 100644 --- a/icons/folder-app.svg +++ b/icons/folder-app.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-archive-open.svg b/icons/folder-archive-open.svg index 920e846193..4092ca78e7 100644 --- a/icons/folder-archive-open.svg +++ b/icons/folder-archive-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-archive.svg b/icons/folder-archive.svg index ba7f21f7e9..75ab5188f2 100644 --- a/icons/folder-archive.svg +++ b/icons/folder-archive.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-astro-open.svg b/icons/folder-astro-open.svg new file mode 100644 index 0000000000..f2652fa982 --- /dev/null +++ b/icons/folder-astro-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-astro.svg b/icons/folder-astro.svg new file mode 100644 index 0000000000..163dea4334 --- /dev/null +++ b/icons/folder-astro.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-audio-open.svg b/icons/folder-audio-open.svg index 872e1ecfc3..a80eeb476c 100644 --- a/icons/folder-audio-open.svg +++ b/icons/folder-audio-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-audio.svg b/icons/folder-audio.svg index 737aba1e6b..1acd9d7c45 100644 --- a/icons/folder-audio.svg +++ b/icons/folder-audio.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-aurelia-open.svg b/icons/folder-aurelia-open.svg index 0072ce2773..49fb3d8750 100644 --- a/icons/folder-aurelia-open.svg +++ b/icons/folder-aurelia-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-aurelia.svg b/icons/folder-aurelia.svg index 36a1f6c00f..1d52a91cc7 100644 --- a/icons/folder-aurelia.svg +++ b/icons/folder-aurelia.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-aws-open.svg b/icons/folder-aws-open.svg index 5a7fee71f9..acd11767f4 100644 --- a/icons/folder-aws-open.svg +++ b/icons/folder-aws-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-aws.svg b/icons/folder-aws.svg index 740e090981..48111a6a0e 100644 --- a/icons/folder-aws.svg +++ b/icons/folder-aws.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-azure-pipelines-open.svg b/icons/folder-azure-pipelines-open.svg index 71e463eb54..4dc564c0af 100644 --- a/icons/folder-azure-pipelines-open.svg +++ b/icons/folder-azure-pipelines-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-azure-pipelines.svg b/icons/folder-azure-pipelines.svg index 77868d3b16..aa2be273fa 100644 --- a/icons/folder-azure-pipelines.svg +++ b/icons/folder-azure-pipelines.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-base-open.svg b/icons/folder-base-open.svg index c20a6eae48..9f0fd461e6 100644 --- a/icons/folder-base-open.svg +++ b/icons/folder-base-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-base.svg b/icons/folder-base.svg index f93527ea81..938f34ffb3 100644 --- a/icons/folder-base.svg +++ b/icons/folder-base.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-batch-open.svg b/icons/folder-batch-open.svg index 698cb34ace..84f30bc65c 100644 --- a/icons/folder-batch-open.svg +++ b/icons/folder-batch-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-batch.svg b/icons/folder-batch.svg index 4a57811598..b0a88e9c36 100644 --- a/icons/folder-batch.svg +++ b/icons/folder-batch.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-benchmark-open.svg b/icons/folder-benchmark-open.svg index db60b02b51..b12b046f2e 100644 --- a/icons/folder-benchmark-open.svg +++ b/icons/folder-benchmark-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-benchmark.svg b/icons/folder-benchmark.svg index e580ce1daf..147e1ad123 100644 --- a/icons/folder-benchmark.svg +++ b/icons/folder-benchmark.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-bicep-open.svg b/icons/folder-bicep-open.svg new file mode 100644 index 0000000000..d315c565d7 --- /dev/null +++ b/icons/folder-bicep-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-bicep.svg b/icons/folder-bicep.svg new file mode 100644 index 0000000000..9a529b146a --- /dev/null +++ b/icons/folder-bicep.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-bower-open.svg b/icons/folder-bower-open.svg index 1c7c230d52..186427a996 100644 --- a/icons/folder-bower-open.svg +++ b/icons/folder-bower-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-bower.svg b/icons/folder-bower.svg index 30d7ecd705..785a4d7e3c 100644 --- a/icons/folder-bower.svg +++ b/icons/folder-bower.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-buildkite-open.svg b/icons/folder-buildkite-open.svg index 0dc9b26f0a..6b844ac35f 100644 --- a/icons/folder-buildkite-open.svg +++ b/icons/folder-buildkite-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-buildkite.svg b/icons/folder-buildkite.svg index 55b4b72c42..1f94ac097f 100644 --- a/icons/folder-buildkite.svg +++ b/icons/folder-buildkite.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-cart-open.svg b/icons/folder-cart-open.svg index dc201ce131..edb4911e26 100644 --- a/icons/folder-cart-open.svg +++ b/icons/folder-cart-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-cart.svg b/icons/folder-cart.svg index f1f0c520f5..8143c67265 100644 --- a/icons/folder-cart.svg +++ b/icons/folder-cart.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-changesets-open.svg b/icons/folder-changesets-open.svg index 795ec7eb1a..4aa6a0ff11 100644 --- a/icons/folder-changesets-open.svg +++ b/icons/folder-changesets-open.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/icons/folder-changesets.svg b/icons/folder-changesets.svg index 531502766c..c66e9fa55b 100644 --- a/icons/folder-changesets.svg +++ b/icons/folder-changesets.svg @@ -1,2 +1 @@ - - + \ No newline at end of file diff --git a/icons/folder-ci-open.svg b/icons/folder-ci-open.svg index aaafd9d75d..b133e6b7bf 100644 --- a/icons/folder-ci-open.svg +++ b/icons/folder-ci-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-ci.svg b/icons/folder-ci.svg index 9000de1890..be5a49cd08 100644 --- a/icons/folder-ci.svg +++ b/icons/folder-ci.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-circleci-open.svg b/icons/folder-circleci-open.svg index a1cedbb3fc..9d2d7ea743 100644 --- a/icons/folder-circleci-open.svg +++ b/icons/folder-circleci-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-circleci.svg b/icons/folder-circleci.svg index def0893331..2ddd48c54c 100644 --- a/icons/folder-circleci.svg +++ b/icons/folder-circleci.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-class-open.svg b/icons/folder-class-open.svg index 76f885db74..428803159b 100644 --- a/icons/folder-class-open.svg +++ b/icons/folder-class-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-class.svg b/icons/folder-class.svg index a929b725a0..7b013a62e8 100644 --- a/icons/folder-class.svg +++ b/icons/folder-class.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-client-open.svg b/icons/folder-client-open.svg index 03524c356d..051253e746 100644 --- a/icons/folder-client-open.svg +++ b/icons/folder-client-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-client.svg b/icons/folder-client.svg index a7d96a6d90..d0c40b916d 100644 --- a/icons/folder-client.svg +++ b/icons/folder-client.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-cloudflare-open.svg b/icons/folder-cloudflare-open.svg new file mode 100644 index 0000000000..32b1c0848b --- /dev/null +++ b/icons/folder-cloudflare-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-cloudflare.svg b/icons/folder-cloudflare.svg new file mode 100644 index 0000000000..7c56b16ff1 --- /dev/null +++ b/icons/folder-cloudflare.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-cluster-open.svg b/icons/folder-cluster-open.svg index 8ff361f1e0..09a45360ae 100644 --- a/icons/folder-cluster-open.svg +++ b/icons/folder-cluster-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-cluster.svg b/icons/folder-cluster.svg index fdcf7c8627..e8651b593d 100644 --- a/icons/folder-cluster.svg +++ b/icons/folder-cluster.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-cobol-open.svg b/icons/folder-cobol-open.svg index 908d39f646..d2d0b94912 100644 --- a/icons/folder-cobol-open.svg +++ b/icons/folder-cobol-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-cobol.svg b/icons/folder-cobol.svg index 143f580f50..a1a160de15 100644 --- a/icons/folder-cobol.svg +++ b/icons/folder-cobol.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-command-open.svg b/icons/folder-command-open.svg index 17436ab392..710d96de71 100644 --- a/icons/folder-command-open.svg +++ b/icons/folder-command-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-command.svg b/icons/folder-command.svg index f2eccef5db..41fd0ddb53 100644 --- a/icons/folder-command.svg +++ b/icons/folder-command.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-components-open.svg b/icons/folder-components-open.svg index 5fb1fe66be..8501f561c3 100644 --- a/icons/folder-components-open.svg +++ b/icons/folder-components-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-components.svg b/icons/folder-components.svg index d813b8d53e..d6924bbae5 100644 --- a/icons/folder-components.svg +++ b/icons/folder-components.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-config-open.svg b/icons/folder-config-open.svg index 369788cb7c..a1f2b15d1d 100644 --- a/icons/folder-config-open.svg +++ b/icons/folder-config-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-config.svg b/icons/folder-config.svg index df9b5978d4..34f4a8a768 100644 --- a/icons/folder-config.svg +++ b/icons/folder-config.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-connection-open.svg b/icons/folder-connection-open.svg index 3951ee0b79..dd3a93e819 100644 --- a/icons/folder-connection-open.svg +++ b/icons/folder-connection-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-connection.svg b/icons/folder-connection.svg index d724c73ee5..62183e87ee 100644 --- a/icons/folder-connection.svg +++ b/icons/folder-connection.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-console-open.svg b/icons/folder-console-open.svg new file mode 100644 index 0000000000..6e7fc8b7cd --- /dev/null +++ b/icons/folder-console-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-console.svg b/icons/folder-console.svg new file mode 100644 index 0000000000..4e2cafbb11 --- /dev/null +++ b/icons/folder-console.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-constant-open.svg b/icons/folder-constant-open.svg index 76fe930acf..57989fbf12 100644 --- a/icons/folder-constant-open.svg +++ b/icons/folder-constant-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-constant.svg b/icons/folder-constant.svg index 8c1fb90e09..5b66078679 100644 --- a/icons/folder-constant.svg +++ b/icons/folder-constant.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-container-open.svg b/icons/folder-container-open.svg index 3605b9102d..c27bb4fde0 100644 --- a/icons/folder-container-open.svg +++ b/icons/folder-container-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-container.svg b/icons/folder-container.svg index 3a4def367d..72456ebf1e 100644 --- a/icons/folder-container.svg +++ b/icons/folder-container.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-content-open.svg b/icons/folder-content-open.svg index 312527e2b7..40ed89c9c1 100644 --- a/icons/folder-content-open.svg +++ b/icons/folder-content-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-content.svg b/icons/folder-content.svg index f51fbec886..aea422d6b5 100644 --- a/icons/folder-content.svg +++ b/icons/folder-content.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-context-open.svg b/icons/folder-context-open.svg index fc7b49d5df..434c434b01 100644 --- a/icons/folder-context-open.svg +++ b/icons/folder-context-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-context.svg b/icons/folder-context.svg index 91d7c1affc..05eb90abe3 100644 --- a/icons/folder-context.svg +++ b/icons/folder-context.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-contract-open.svg b/icons/folder-contract-open.svg index e8de5f5d1b..87324705ae 100644 --- a/icons/folder-contract-open.svg +++ b/icons/folder-contract-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-contract.svg b/icons/folder-contract.svg index e29bdc9e03..a562b3fd68 100644 --- a/icons/folder-contract.svg +++ b/icons/folder-contract.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-controller-open.svg b/icons/folder-controller-open.svg index 76f594208a..efe02942df 100644 --- a/icons/folder-controller-open.svg +++ b/icons/folder-controller-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-controller.svg b/icons/folder-controller.svg index 6220019773..3b19d1c02c 100644 --- a/icons/folder-controller.svg +++ b/icons/folder-controller.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-core-open.svg b/icons/folder-core-open.svg index ade3c93167..7e4b9bd4d2 100644 --- a/icons/folder-core-open.svg +++ b/icons/folder-core-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-core.svg b/icons/folder-core.svg index 0a29dac579..0052d25436 100644 --- a/icons/folder-core.svg +++ b/icons/folder-core.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-coverage-open.svg b/icons/folder-coverage-open.svg index ab8e645b7d..56e665c698 100644 --- a/icons/folder-coverage-open.svg +++ b/icons/folder-coverage-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-coverage.svg b/icons/folder-coverage.svg index fa498accf2..75d19ee5a8 100644 --- a/icons/folder-coverage.svg +++ b/icons/folder-coverage.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-css-open.svg b/icons/folder-css-open.svg index 16380d7a7f..37af187306 100644 --- a/icons/folder-css-open.svg +++ b/icons/folder-css-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-css.svg b/icons/folder-css.svg index d458b972ec..2f658354d7 100644 --- a/icons/folder-css.svg +++ b/icons/folder-css.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-custom-open.svg b/icons/folder-custom-open.svg index 239be06933..148126932b 100644 --- a/icons/folder-custom-open.svg +++ b/icons/folder-custom-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-custom.svg b/icons/folder-custom.svg index cb625a9aa0..042a961d5c 100644 --- a/icons/folder-custom.svg +++ b/icons/folder-custom.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-cypress-open.svg b/icons/folder-cypress-open.svg index 3d39b4c43d..71d99b928d 100644 --- a/icons/folder-cypress-open.svg +++ b/icons/folder-cypress-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-cypress.svg b/icons/folder-cypress.svg index 6f20384594..3825e3c8aa 100644 --- a/icons/folder-cypress.svg +++ b/icons/folder-cypress.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-database-open.svg b/icons/folder-database-open.svg index f0d4bdafd1..5aab6ce202 100644 --- a/icons/folder-database-open.svg +++ b/icons/folder-database-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-database.svg b/icons/folder-database.svg index c94982d0a0..94cb76f6e5 100644 --- a/icons/folder-database.svg +++ b/icons/folder-database.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-debug-open.svg b/icons/folder-debug-open.svg index 6dab939f7e..d0c234d58d 100644 --- a/icons/folder-debug-open.svg +++ b/icons/folder-debug-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-debug.svg b/icons/folder-debug.svg index 3c28955bde..c378f5fe40 100644 --- a/icons/folder-debug.svg +++ b/icons/folder-debug.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-decorators-open.svg b/icons/folder-decorators-open.svg index a9757d784c..4781c3e7ac 100644 --- a/icons/folder-decorators-open.svg +++ b/icons/folder-decorators-open.svg @@ -1,2 +1 @@ - - + \ No newline at end of file diff --git a/icons/folder-decorators.svg b/icons/folder-decorators.svg index 7b0d9523be..22102e3a06 100644 --- a/icons/folder-decorators.svg +++ b/icons/folder-decorators.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/icons/folder-delta-open.svg b/icons/folder-delta-open.svg index 67867b0638..016e16f3e6 100644 --- a/icons/folder-delta-open.svg +++ b/icons/folder-delta-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-delta.svg b/icons/folder-delta.svg index c102e4464e..94c8479424 100644 --- a/icons/folder-delta.svg +++ b/icons/folder-delta.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-desktop-open.svg b/icons/folder-desktop-open.svg new file mode 100644 index 0000000000..905e422636 --- /dev/null +++ b/icons/folder-desktop-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-desktop.svg b/icons/folder-desktop.svg new file mode 100644 index 0000000000..eb6d4e7187 --- /dev/null +++ b/icons/folder-desktop.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-dist-open.svg b/icons/folder-dist-open.svg index 606b96ef28..fccb2b5d60 100644 --- a/icons/folder-dist-open.svg +++ b/icons/folder-dist-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-dist.svg b/icons/folder-dist.svg index 24677dd498..da2236f154 100644 --- a/icons/folder-dist.svg +++ b/icons/folder-dist.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-docker-open.svg b/icons/folder-docker-open.svg index af22ea09f8..2f9c55fcd2 100644 --- a/icons/folder-docker-open.svg +++ b/icons/folder-docker-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-docker.svg b/icons/folder-docker.svg index f98503b275..dea7759a0a 100644 --- a/icons/folder-docker.svg +++ b/icons/folder-docker.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-docs-open.svg b/icons/folder-docs-open.svg index 333b570e0f..b363412d1a 100644 --- a/icons/folder-docs-open.svg +++ b/icons/folder-docs-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-docs.svg b/icons/folder-docs.svg index 05243641a4..f2c9953d52 100644 --- a/icons/folder-docs.svg +++ b/icons/folder-docs.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-download-open.svg b/icons/folder-download-open.svg index 1ae0d1c349..f0d2908e7f 100644 --- a/icons/folder-download-open.svg +++ b/icons/folder-download-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-download.svg b/icons/folder-download.svg index e1eef482e8..e34e717f56 100644 --- a/icons/folder-download.svg +++ b/icons/folder-download.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-drizzle-open.svg b/icons/folder-drizzle-open.svg new file mode 100644 index 0000000000..a62b0e0a23 --- /dev/null +++ b/icons/folder-drizzle-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-drizzle.svg b/icons/folder-drizzle.svg new file mode 100644 index 0000000000..2e6a95b3b3 --- /dev/null +++ b/icons/folder-drizzle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-dump-open.svg b/icons/folder-dump-open.svg index b9c8ad9d35..0809e0bc2e 100644 --- a/icons/folder-dump-open.svg +++ b/icons/folder-dump-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-dump.svg b/icons/folder-dump.svg index 5438dbd34e..d78af10d98 100644 --- a/icons/folder-dump.svg +++ b/icons/folder-dump.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-enum-open.svg b/icons/folder-enum-open.svg new file mode 100644 index 0000000000..57df0fb0f0 --- /dev/null +++ b/icons/folder-enum-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-enum.svg b/icons/folder-enum.svg new file mode 100644 index 0000000000..fb37913031 --- /dev/null +++ b/icons/folder-enum.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-environment-open.svg b/icons/folder-environment-open.svg index f31b8ce08f..b582a5f384 100644 --- a/icons/folder-environment-open.svg +++ b/icons/folder-environment-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-environment.svg b/icons/folder-environment.svg index 9ed44a358d..5c2702e167 100644 --- a/icons/folder-environment.svg +++ b/icons/folder-environment.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-error-open.svg b/icons/folder-error-open.svg index 27186fc633..c69ec98c39 100644 --- a/icons/folder-error-open.svg +++ b/icons/folder-error-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-error.svg b/icons/folder-error.svg index 0a6e8eb3a8..04ded91124 100644 --- a/icons/folder-error.svg +++ b/icons/folder-error.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-event-open.svg b/icons/folder-event-open.svg index 30999f6ca9..cb080ca477 100644 --- a/icons/folder-event-open.svg +++ b/icons/folder-event-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-event.svg b/icons/folder-event.svg index 44db4eb0f4..566199b8dd 100644 --- a/icons/folder-event.svg +++ b/icons/folder-event.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-examples-open.svg b/icons/folder-examples-open.svg index 8fad71747e..e62efa77c3 100644 --- a/icons/folder-examples-open.svg +++ b/icons/folder-examples-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-examples.svg b/icons/folder-examples.svg index cb70f7e1fc..44186f2215 100644 --- a/icons/folder-examples.svg +++ b/icons/folder-examples.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-expo-open.svg b/icons/folder-expo-open.svg index ce862c0d94..4f3b45a655 100644 --- a/icons/folder-expo-open.svg +++ b/icons/folder-expo-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-expo.svg b/icons/folder-expo.svg index 38cc6a5dc1..bb3e31eb58 100644 --- a/icons/folder-expo.svg +++ b/icons/folder-expo.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-export-open.svg b/icons/folder-export-open.svg index 55f9c8bd89..aeef17b1a1 100644 --- a/icons/folder-export-open.svg +++ b/icons/folder-export-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-export.svg b/icons/folder-export.svg index 9d11ed882a..e0903c05a1 100644 --- a/icons/folder-export.svg +++ b/icons/folder-export.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-fastlane-open.svg b/icons/folder-fastlane-open.svg index 9adc5208f2..64da19fefd 100644 --- a/icons/folder-fastlane-open.svg +++ b/icons/folder-fastlane-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-fastlane.svg b/icons/folder-fastlane.svg index bffe477644..638ebb5720 100644 --- a/icons/folder-fastlane.svg +++ b/icons/folder-fastlane.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-favicon-open.svg b/icons/folder-favicon-open.svg new file mode 100644 index 0000000000..9501a3eb2f --- /dev/null +++ b/icons/folder-favicon-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-favicon.svg b/icons/folder-favicon.svg new file mode 100644 index 0000000000..548584999a --- /dev/null +++ b/icons/folder-favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-firebase-open.svg b/icons/folder-firebase-open.svg index c07bd0afd5..983370bcb3 100644 --- a/icons/folder-firebase-open.svg +++ b/icons/folder-firebase-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-firebase.svg b/icons/folder-firebase.svg index 67c7352580..f32642102e 100644 --- a/icons/folder-firebase.svg +++ b/icons/folder-firebase.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-flow-open.svg b/icons/folder-flow-open.svg index 73a76d807b..9c0cd06222 100644 --- a/icons/folder-flow-open.svg +++ b/icons/folder-flow-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-flow.svg b/icons/folder-flow.svg index 742db73497..54d0320709 100644 --- a/icons/folder-flow.svg +++ b/icons/folder-flow.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-flutter-open.svg b/icons/folder-flutter-open.svg new file mode 100644 index 0000000000..9bff57bf09 --- /dev/null +++ b/icons/folder-flutter-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-flutter.svg b/icons/folder-flutter.svg new file mode 100644 index 0000000000..0f460b96c3 --- /dev/null +++ b/icons/folder-flutter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-font-open.svg b/icons/folder-font-open.svg index b7a202d12c..b81ccdcab3 100644 --- a/icons/folder-font-open.svg +++ b/icons/folder-font-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-font.svg b/icons/folder-font.svg index bc98f4aca3..6f69cfd8fa 100644 --- a/icons/folder-font.svg +++ b/icons/folder-font.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-functions-open.svg b/icons/folder-functions-open.svg index 59a41e138c..0bfe0016b0 100644 --- a/icons/folder-functions-open.svg +++ b/icons/folder-functions-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-functions.svg b/icons/folder-functions.svg index 9c04ff2ca2..d6e82974cb 100644 --- a/icons/folder-functions.svg +++ b/icons/folder-functions.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-gamemaker-open.svg b/icons/folder-gamemaker-open.svg index 081753be5a..706341e802 100644 --- a/icons/folder-gamemaker-open.svg +++ b/icons/folder-gamemaker-open.svg @@ -1,2 +1 @@ - - + \ No newline at end of file diff --git a/icons/folder-gamemaker.svg b/icons/folder-gamemaker.svg index 4a18d32ed9..3deb6a3bd6 100644 --- a/icons/folder-gamemaker.svg +++ b/icons/folder-gamemaker.svg @@ -1,2 +1 @@ - - + \ No newline at end of file diff --git a/icons/folder-generator-open.svg b/icons/folder-generator-open.svg index f53c955446..c658b326ac 100644 --- a/icons/folder-generator-open.svg +++ b/icons/folder-generator-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-generator.svg b/icons/folder-generator.svg index baaef6b803..ee9953af49 100644 --- a/icons/folder-generator.svg +++ b/icons/folder-generator.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-gh-workflows-open.svg b/icons/folder-gh-workflows-open.svg new file mode 100644 index 0000000000..86c5b53fb3 --- /dev/null +++ b/icons/folder-gh-workflows-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-gh-workflows.svg b/icons/folder-gh-workflows.svg new file mode 100644 index 0000000000..a4f925ca9c --- /dev/null +++ b/icons/folder-gh-workflows.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-git-open.svg b/icons/folder-git-open.svg index 26def43125..f3c4c04dee 100644 --- a/icons/folder-git-open.svg +++ b/icons/folder-git-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-git.svg b/icons/folder-git.svg index 4977492da6..1060c2fc84 100644 --- a/icons/folder-git.svg +++ b/icons/folder-git.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-gitea-open.svg b/icons/folder-gitea-open.svg new file mode 100644 index 0000000000..9969800154 --- /dev/null +++ b/icons/folder-gitea-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-gitea.svg b/icons/folder-gitea.svg new file mode 100644 index 0000000000..638d14b835 --- /dev/null +++ b/icons/folder-gitea.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-github-open.svg b/icons/folder-github-open.svg index 4e60cf1f7c..9ed164d51f 100644 --- a/icons/folder-github-open.svg +++ b/icons/folder-github-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-github.svg b/icons/folder-github.svg index 6371a45cfa..f880d4682f 100644 --- a/icons/folder-github.svg +++ b/icons/folder-github.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-gitlab-open.svg b/icons/folder-gitlab-open.svg index 983f65c275..2ed8d81fbe 100644 --- a/icons/folder-gitlab-open.svg +++ b/icons/folder-gitlab-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-gitlab.svg b/icons/folder-gitlab.svg index e974edd00d..80d26e4b8c 100644 --- a/icons/folder-gitlab.svg +++ b/icons/folder-gitlab.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-global-open.svg b/icons/folder-global-open.svg index d0506c7860..08a331b694 100644 --- a/icons/folder-global-open.svg +++ b/icons/folder-global-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-global.svg b/icons/folder-global.svg index 260f6a71a2..a4bf653eb5 100644 --- a/icons/folder-global.svg +++ b/icons/folder-global.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-godot-open.svg b/icons/folder-godot-open.svg index f2ed217d8a..6a8178c481 100644 --- a/icons/folder-godot-open.svg +++ b/icons/folder-godot-open.svg @@ -1,2 +1 @@ - - + \ No newline at end of file diff --git a/icons/folder-godot.svg b/icons/folder-godot.svg index 2630842765..62d1846cb5 100644 --- a/icons/folder-godot.svg +++ b/icons/folder-godot.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/icons/folder-gradle-open.svg b/icons/folder-gradle-open.svg index 4718d78c83..3913693cae 100644 --- a/icons/folder-gradle-open.svg +++ b/icons/folder-gradle-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-gradle.svg b/icons/folder-gradle.svg index f12a50c03e..1161a8cb20 100644 --- a/icons/folder-gradle.svg +++ b/icons/folder-gradle.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-graphql-open.svg b/icons/folder-graphql-open.svg index 60da86a1d0..5732abed0d 100644 --- a/icons/folder-graphql-open.svg +++ b/icons/folder-graphql-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-graphql.svg b/icons/folder-graphql.svg index fbb5e7514c..32bff475a3 100644 --- a/icons/folder-graphql.svg +++ b/icons/folder-graphql.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-guard-open.svg b/icons/folder-guard-open.svg index 4db3ba8264..316f84236c 100644 --- a/icons/folder-guard-open.svg +++ b/icons/folder-guard-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-guard.svg b/icons/folder-guard.svg index d8af2265e9..685db5a984 100644 --- a/icons/folder-guard.svg +++ b/icons/folder-guard.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-gulp-open.svg b/icons/folder-gulp-open.svg index 18fdc9054a..28be4be9e0 100644 --- a/icons/folder-gulp-open.svg +++ b/icons/folder-gulp-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-gulp.svg b/icons/folder-gulp.svg index 0634fe1093..c2658f1fa0 100644 --- a/icons/folder-gulp.svg +++ b/icons/folder-gulp.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-helm-open.svg b/icons/folder-helm-open.svg new file mode 100644 index 0000000000..c0a6179443 --- /dev/null +++ b/icons/folder-helm-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-helm.svg b/icons/folder-helm.svg new file mode 100644 index 0000000000..c236de8fc9 --- /dev/null +++ b/icons/folder-helm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-helper-open.svg b/icons/folder-helper-open.svg index ebe629a030..67cec67da4 100644 --- a/icons/folder-helper-open.svg +++ b/icons/folder-helper-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-helper.svg b/icons/folder-helper.svg index 2d3937a2fc..121f98f45f 100644 --- a/icons/folder-helper.svg +++ b/icons/folder-helper.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-home-open.svg b/icons/folder-home-open.svg index 13b993e2af..2288b509ab 100644 --- a/icons/folder-home-open.svg +++ b/icons/folder-home-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-home.svg b/icons/folder-home.svg index 2658c4a9a9..e9c37ebc24 100644 --- a/icons/folder-home.svg +++ b/icons/folder-home.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-hook-open.svg b/icons/folder-hook-open.svg index 8cd454a63c..13ed873e9f 100644 --- a/icons/folder-hook-open.svg +++ b/icons/folder-hook-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-hook.svg b/icons/folder-hook.svg index cf3ef932e5..70da64899a 100644 --- a/icons/folder-hook.svg +++ b/icons/folder-hook.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-husky-open.svg b/icons/folder-husky-open.svg index 7c1888b25a..5332da12d3 100644 --- a/icons/folder-husky-open.svg +++ b/icons/folder-husky-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-husky.svg b/icons/folder-husky.svg index d212d19d21..3df4c40776 100644 --- a/icons/folder-husky.svg +++ b/icons/folder-husky.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-i18n-open.svg b/icons/folder-i18n-open.svg index 784137e5fe..e1f1202deb 100644 --- a/icons/folder-i18n-open.svg +++ b/icons/folder-i18n-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-i18n.svg b/icons/folder-i18n.svg index bde4f45dd1..b918697e1c 100644 --- a/icons/folder-i18n.svg +++ b/icons/folder-i18n.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-images-open.svg b/icons/folder-images-open.svg index 4fb34fc497..e2e2744c98 100644 --- a/icons/folder-images-open.svg +++ b/icons/folder-images-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-images.svg b/icons/folder-images.svg index e0cebe1e81..c60292917a 100644 --- a/icons/folder-images.svg +++ b/icons/folder-images.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-import-open.svg b/icons/folder-import-open.svg index 4f264abd22..acb0c11762 100644 --- a/icons/folder-import-open.svg +++ b/icons/folder-import-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-import.svg b/icons/folder-import.svg index eadd24056f..50743a6ad6 100644 --- a/icons/folder-import.svg +++ b/icons/folder-import.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-include-open.svg b/icons/folder-include-open.svg index d3e1717bf9..63b4cb7454 100644 --- a/icons/folder-include-open.svg +++ b/icons/folder-include-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-include.svg b/icons/folder-include.svg index 1ac129030b..f8ae67825e 100644 --- a/icons/folder-include.svg +++ b/icons/folder-include.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-intellij-open.svg b/icons/folder-intellij-open.svg index 18b45a6abf..6a5b4723f8 100644 --- a/icons/folder-intellij-open.svg +++ b/icons/folder-intellij-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-intellij-open_light.svg b/icons/folder-intellij-open_light.svg index f877ae6116..bf5088535e 100644 --- a/icons/folder-intellij-open_light.svg +++ b/icons/folder-intellij-open_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-intellij.svg b/icons/folder-intellij.svg index 2620843d83..91d0fe7179 100644 --- a/icons/folder-intellij.svg +++ b/icons/folder-intellij.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-intellij_light.svg b/icons/folder-intellij_light.svg index 6d241277d1..ce013321f6 100644 --- a/icons/folder-intellij_light.svg +++ b/icons/folder-intellij_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-interface-open.svg b/icons/folder-interface-open.svg index 38083b1abd..d762fb89cb 100644 --- a/icons/folder-interface-open.svg +++ b/icons/folder-interface-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-interface.svg b/icons/folder-interface.svg index 286a555626..74188dfc55 100644 --- a/icons/folder-interface.svg +++ b/icons/folder-interface.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-ios-open.svg b/icons/folder-ios-open.svg index e11b973ae3..d12bf1767a 100644 --- a/icons/folder-ios-open.svg +++ b/icons/folder-ios-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-ios.svg b/icons/folder-ios.svg index dc5cf848f8..6b45ba1c55 100644 --- a/icons/folder-ios.svg +++ b/icons/folder-ios.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-java-open.svg b/icons/folder-java-open.svg index 8c5fcf39d0..d70fb1be52 100644 --- a/icons/folder-java-open.svg +++ b/icons/folder-java-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-java.svg b/icons/folder-java.svg index 801812c7e4..6ae16c09b5 100644 --- a/icons/folder-java.svg +++ b/icons/folder-java.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-javascript-open.svg b/icons/folder-javascript-open.svg index 5bbdf1e8b0..18ff1c81e0 100644 --- a/icons/folder-javascript-open.svg +++ b/icons/folder-javascript-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-javascript.svg b/icons/folder-javascript.svg index 3a31ff843c..84d0609551 100644 --- a/icons/folder-javascript.svg +++ b/icons/folder-javascript.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-jinja-open.svg b/icons/folder-jinja-open.svg index 24beb96509..65145fb941 100644 --- a/icons/folder-jinja-open.svg +++ b/icons/folder-jinja-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-jinja-open_light.svg b/icons/folder-jinja-open_light.svg index dc82d7adae..499b22845e 100644 --- a/icons/folder-jinja-open_light.svg +++ b/icons/folder-jinja-open_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-jinja.svg b/icons/folder-jinja.svg index b9a87702da..a16a0916a7 100644 --- a/icons/folder-jinja.svg +++ b/icons/folder-jinja.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-jinja_light.svg b/icons/folder-jinja_light.svg index 1fecddfc39..8f502a126f 100644 --- a/icons/folder-jinja_light.svg +++ b/icons/folder-jinja_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-job-open.svg b/icons/folder-job-open.svg index 3272041732..fbb9468f4f 100644 --- a/icons/folder-job-open.svg +++ b/icons/folder-job-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-job.svg b/icons/folder-job.svg index cbb946da9f..85ecf4229a 100644 --- a/icons/folder-job.svg +++ b/icons/folder-job.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-json-open.svg b/icons/folder-json-open.svg index e7905dd1da..957bfa102f 100644 --- a/icons/folder-json-open.svg +++ b/icons/folder-json-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-json.svg b/icons/folder-json.svg index 470aaf3629..d53528afd6 100644 --- a/icons/folder-json.svg +++ b/icons/folder-json.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-jupyter-open.svg b/icons/folder-jupyter-open.svg new file mode 100644 index 0000000000..1f01791b5a --- /dev/null +++ b/icons/folder-jupyter-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-jupyter.svg b/icons/folder-jupyter.svg new file mode 100644 index 0000000000..face4ce949 --- /dev/null +++ b/icons/folder-jupyter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-keys-open.svg b/icons/folder-keys-open.svg index a8695c49f0..1f502bff17 100644 --- a/icons/folder-keys-open.svg +++ b/icons/folder-keys-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-keys.svg b/icons/folder-keys.svg index 3018c93cbd..9879959336 100644 --- a/icons/folder-keys.svg +++ b/icons/folder-keys.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-kubernetes-open.svg b/icons/folder-kubernetes-open.svg index a83dc94174..27d1f39e3b 100644 --- a/icons/folder-kubernetes-open.svg +++ b/icons/folder-kubernetes-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-kubernetes.svg b/icons/folder-kubernetes.svg index 9e4080f1a6..76bbac5086 100644 --- a/icons/folder-kubernetes.svg +++ b/icons/folder-kubernetes.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-layout-open.svg b/icons/folder-layout-open.svg index def5f5292b..a5c9d91f9f 100644 --- a/icons/folder-layout-open.svg +++ b/icons/folder-layout-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-layout.svg b/icons/folder-layout.svg index 2fe296f811..5cbc218070 100644 --- a/icons/folder-layout.svg +++ b/icons/folder-layout.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-lefthook-open.svg b/icons/folder-lefthook-open.svg new file mode 100644 index 0000000000..fd1e1e7909 --- /dev/null +++ b/icons/folder-lefthook-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-lefthook.svg b/icons/folder-lefthook.svg new file mode 100644 index 0000000000..d393376186 --- /dev/null +++ b/icons/folder-lefthook.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-less-open.svg b/icons/folder-less-open.svg index de940dfa65..d4cd9af442 100644 --- a/icons/folder-less-open.svg +++ b/icons/folder-less-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-less.svg b/icons/folder-less.svg index b031c37e88..37536bb5e4 100644 --- a/icons/folder-less.svg +++ b/icons/folder-less.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-lib-open.svg b/icons/folder-lib-open.svg index 5e336706b6..13061bc2fd 100644 --- a/icons/folder-lib-open.svg +++ b/icons/folder-lib-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-lib.svg b/icons/folder-lib.svg index 6cb7b78d30..560a18311e 100644 --- a/icons/folder-lib.svg +++ b/icons/folder-lib.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-linux-open.svg b/icons/folder-linux-open.svg new file mode 100644 index 0000000000..1950cbdbbc --- /dev/null +++ b/icons/folder-linux-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-linux.svg b/icons/folder-linux.svg new file mode 100644 index 0000000000..85c2b00799 --- /dev/null +++ b/icons/folder-linux.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-log-open.svg b/icons/folder-log-open.svg index 29bd94ac93..7b66276e39 100644 --- a/icons/folder-log-open.svg +++ b/icons/folder-log-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-log.svg b/icons/folder-log.svg index 5f9c261111..2aa18653f3 100644 --- a/icons/folder-log.svg +++ b/icons/folder-log.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-lottie-open.svg b/icons/folder-lottie-open.svg new file mode 100644 index 0000000000..daced3275d --- /dev/null +++ b/icons/folder-lottie-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-lottie.svg b/icons/folder-lottie.svg new file mode 100644 index 0000000000..5c65ed530b --- /dev/null +++ b/icons/folder-lottie.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-lua-open.svg b/icons/folder-lua-open.svg index f3311ae181..3542ec86a2 100644 --- a/icons/folder-lua-open.svg +++ b/icons/folder-lua-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-lua.svg b/icons/folder-lua.svg index 627a79db5a..347362397b 100644 --- a/icons/folder-lua.svg +++ b/icons/folder-lua.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-macos-open.svg b/icons/folder-macos-open.svg new file mode 100644 index 0000000000..f37abd4699 --- /dev/null +++ b/icons/folder-macos-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-macos.svg b/icons/folder-macos.svg new file mode 100644 index 0000000000..f91e713bad --- /dev/null +++ b/icons/folder-macos.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-mail-open.svg b/icons/folder-mail-open.svg index 36a4916a2c..b0f5e147f8 100644 --- a/icons/folder-mail-open.svg +++ b/icons/folder-mail-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-mail.svg b/icons/folder-mail.svg index 17b508a331..f70f8f27c7 100644 --- a/icons/folder-mail.svg +++ b/icons/folder-mail.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-mappings-open.svg b/icons/folder-mappings-open.svg index f2ed89527e..a4ea3c2bf0 100644 --- a/icons/folder-mappings-open.svg +++ b/icons/folder-mappings-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-mappings.svg b/icons/folder-mappings.svg index f946086cce..95d86c13ad 100644 --- a/icons/folder-mappings.svg +++ b/icons/folder-mappings.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-markdown-open.svg b/icons/folder-markdown-open.svg index 8956311d61..743e00fe66 100644 --- a/icons/folder-markdown-open.svg +++ b/icons/folder-markdown-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-markdown.svg b/icons/folder-markdown.svg index 3db696e0e2..7e456da4b6 100644 --- a/icons/folder-markdown.svg +++ b/icons/folder-markdown.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-mercurial-open.svg b/icons/folder-mercurial-open.svg index d374e459af..0ea9492a81 100644 --- a/icons/folder-mercurial-open.svg +++ b/icons/folder-mercurial-open.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/icons/folder-mercurial.svg b/icons/folder-mercurial.svg index a4f1aa9f0c..e4fa198cf9 100644 --- a/icons/folder-mercurial.svg +++ b/icons/folder-mercurial.svg @@ -1,2 +1 @@ - - + \ No newline at end of file diff --git a/icons/folder-messages-open.svg b/icons/folder-messages-open.svg index 1cf463d23e..46baa14c79 100644 --- a/icons/folder-messages-open.svg +++ b/icons/folder-messages-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-messages.svg b/icons/folder-messages.svg index 5c1a50e3f3..953318f1c1 100644 --- a/icons/folder-messages.svg +++ b/icons/folder-messages.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-meta-open.svg b/icons/folder-meta-open.svg index 5bc37086b8..66d3f72ce9 100644 --- a/icons/folder-meta-open.svg +++ b/icons/folder-meta-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-meta.svg b/icons/folder-meta.svg index cf8e344f53..bb587a28c7 100644 --- a/icons/folder-meta.svg +++ b/icons/folder-meta.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-middleware-open.svg b/icons/folder-middleware-open.svg index ca5d4494e5..5a8d74125d 100644 --- a/icons/folder-middleware-open.svg +++ b/icons/folder-middleware-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-middleware.svg b/icons/folder-middleware.svg index efcdaddb7d..7ce815cfd4 100644 --- a/icons/folder-middleware.svg +++ b/icons/folder-middleware.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-mjml-open.svg b/icons/folder-mjml-open.svg index 9f6180e70b..bb23599ecb 100644 --- a/icons/folder-mjml-open.svg +++ b/icons/folder-mjml-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-mjml.svg b/icons/folder-mjml.svg index b5ab5e1baa..1575283bf5 100644 --- a/icons/folder-mjml.svg +++ b/icons/folder-mjml.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-mobile-open.svg b/icons/folder-mobile-open.svg index dbaf81a901..3bbd24ced8 100644 --- a/icons/folder-mobile-open.svg +++ b/icons/folder-mobile-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-mobile.svg b/icons/folder-mobile.svg index 9f0db3cdd0..dfb6d95ada 100644 --- a/icons/folder-mobile.svg +++ b/icons/folder-mobile.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-mock-open.svg b/icons/folder-mock-open.svg index 97af6aaeeb..2de289ae0f 100644 --- a/icons/folder-mock-open.svg +++ b/icons/folder-mock-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-mock.svg b/icons/folder-mock.svg index ea6493ea6c..f00ac2ff27 100644 --- a/icons/folder-mock.svg +++ b/icons/folder-mock.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-mojo-open.svg b/icons/folder-mojo-open.svg index b925c68690..2b4e902b56 100644 --- a/icons/folder-mojo-open.svg +++ b/icons/folder-mojo-open.svg @@ -1,2 +1 @@ - - + \ No newline at end of file diff --git a/icons/folder-mojo.svg b/icons/folder-mojo.svg index 85259ba939..911d1c686e 100644 --- a/icons/folder-mojo.svg +++ b/icons/folder-mojo.svg @@ -1,2 +1 @@ - - + \ No newline at end of file diff --git a/icons/folder-moon-open.svg b/icons/folder-moon-open.svg new file mode 100644 index 0000000000..3ee0f83d59 --- /dev/null +++ b/icons/folder-moon-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-moon.svg b/icons/folder-moon.svg new file mode 100644 index 0000000000..c588c2829e --- /dev/null +++ b/icons/folder-moon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-netlify-open.svg b/icons/folder-netlify-open.svg index e2a7c1c9ee..928d9653e4 100644 --- a/icons/folder-netlify-open.svg +++ b/icons/folder-netlify-open.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/icons/folder-netlify.svg b/icons/folder-netlify.svg index 087c89e695..be9c059d36 100644 --- a/icons/folder-netlify.svg +++ b/icons/folder-netlify.svg @@ -1,2 +1 @@ - - + \ No newline at end of file diff --git a/icons/folder-next-open.svg b/icons/folder-next-open.svg index 1ba2943b22..5724528ce9 100644 --- a/icons/folder-next-open.svg +++ b/icons/folder-next-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-next.svg b/icons/folder-next.svg index c154f4fba8..24f0f4ecb9 100644 --- a/icons/folder-next.svg +++ b/icons/folder-next.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-ngrx-actions-open.svg b/icons/folder-ngrx-actions-open.svg index a492977f5b..a6f007e2da 100644 --- a/icons/folder-ngrx-actions-open.svg +++ b/icons/folder-ngrx-actions-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-ngrx-actions.svg b/icons/folder-ngrx-actions.svg index 155a94db34..81f4b7fe7f 100644 --- a/icons/folder-ngrx-actions.svg +++ b/icons/folder-ngrx-actions.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-ngrx-effects-open.svg b/icons/folder-ngrx-effects-open.svg index f8ccd39cea..61f9006a85 100644 --- a/icons/folder-ngrx-effects-open.svg +++ b/icons/folder-ngrx-effects-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-ngrx-effects.svg b/icons/folder-ngrx-effects.svg index 1291fd7733..c04eafea34 100644 --- a/icons/folder-ngrx-effects.svg +++ b/icons/folder-ngrx-effects.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-ngrx-entities-open.svg b/icons/folder-ngrx-entities-open.svg index 582f337a72..1c6f9df94c 100644 --- a/icons/folder-ngrx-entities-open.svg +++ b/icons/folder-ngrx-entities-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-ngrx-entities.svg b/icons/folder-ngrx-entities.svg index 34b7b3b846..73576ee5a5 100644 --- a/icons/folder-ngrx-entities.svg +++ b/icons/folder-ngrx-entities.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-ngrx-reducer-open.svg b/icons/folder-ngrx-reducer-open.svg index 6f1ad2cfaf..95eaef63cb 100644 --- a/icons/folder-ngrx-reducer-open.svg +++ b/icons/folder-ngrx-reducer-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-ngrx-reducer.svg b/icons/folder-ngrx-reducer.svg index 9390d25757..2463607a9e 100644 --- a/icons/folder-ngrx-reducer.svg +++ b/icons/folder-ngrx-reducer.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-ngrx-selectors-open.svg b/icons/folder-ngrx-selectors-open.svg index 54ff938f77..b67b5ef468 100644 --- a/icons/folder-ngrx-selectors-open.svg +++ b/icons/folder-ngrx-selectors-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-ngrx-selectors.svg b/icons/folder-ngrx-selectors.svg index 8acad717e9..051d3f742c 100644 --- a/icons/folder-ngrx-selectors.svg +++ b/icons/folder-ngrx-selectors.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-ngrx-state-open.svg b/icons/folder-ngrx-state-open.svg index 042e23de18..4ba8f7a760 100644 --- a/icons/folder-ngrx-state-open.svg +++ b/icons/folder-ngrx-state-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-ngrx-state.svg b/icons/folder-ngrx-state.svg index def67528af..6840d81cae 100644 --- a/icons/folder-ngrx-state.svg +++ b/icons/folder-ngrx-state.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-ngrx-store-open.svg b/icons/folder-ngrx-store-open.svg index e355a2a899..7a075bf8d3 100644 --- a/icons/folder-ngrx-store-open.svg +++ b/icons/folder-ngrx-store-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-ngrx-store.svg b/icons/folder-ngrx-store.svg index 5fc8be628b..778d6f3d6a 100644 --- a/icons/folder-ngrx-store.svg +++ b/icons/folder-ngrx-store.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-node-open.svg b/icons/folder-node-open.svg index d482477f63..ae95a3f2fd 100644 --- a/icons/folder-node-open.svg +++ b/icons/folder-node-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-node.svg b/icons/folder-node.svg index 5d0c119472..3e70a82500 100644 --- a/icons/folder-node.svg +++ b/icons/folder-node.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-nuxt-open.svg b/icons/folder-nuxt-open.svg index d1dc4d96f9..d84bdf16ac 100644 --- a/icons/folder-nuxt-open.svg +++ b/icons/folder-nuxt-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-nuxt.svg b/icons/folder-nuxt.svg index 304141aaf3..4945e109e5 100644 --- a/icons/folder-nuxt.svg +++ b/icons/folder-nuxt.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-other-open.svg b/icons/folder-other-open.svg index 6cda70c633..ff85854a93 100644 --- a/icons/folder-other-open.svg +++ b/icons/folder-other-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-other.svg b/icons/folder-other.svg index b36ac7738c..3e1908c8bb 100644 --- a/icons/folder-other.svg +++ b/icons/folder-other.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-packages-open.svg b/icons/folder-packages-open.svg index 3531c04bd9..f64048f729 100644 --- a/icons/folder-packages-open.svg +++ b/icons/folder-packages-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-packages.svg b/icons/folder-packages.svg index 2a90f8f60c..6930f3a026 100644 --- a/icons/folder-packages.svg +++ b/icons/folder-packages.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-pdf-open.svg b/icons/folder-pdf-open.svg index 65befcf60f..5a7872cd89 100644 --- a/icons/folder-pdf-open.svg +++ b/icons/folder-pdf-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-pdf.svg b/icons/folder-pdf.svg index 818ad43cdb..d4eda05e51 100644 --- a/icons/folder-pdf.svg +++ b/icons/folder-pdf.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-pdm-open.svg b/icons/folder-pdm-open.svg new file mode 100644 index 0000000000..8a4a1ab0b4 --- /dev/null +++ b/icons/folder-pdm-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-pdm.svg b/icons/folder-pdm.svg new file mode 100644 index 0000000000..345857ed0b --- /dev/null +++ b/icons/folder-pdm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-php-open.svg b/icons/folder-php-open.svg index 883d6cc49a..48de71ff02 100644 --- a/icons/folder-php-open.svg +++ b/icons/folder-php-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-php.svg b/icons/folder-php.svg index dc62c79f4a..d6fbeacb19 100644 --- a/icons/folder-php.svg +++ b/icons/folder-php.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-phpmailer-open.svg b/icons/folder-phpmailer-open.svg index 4342c69a64..d8b6ab4927 100644 --- a/icons/folder-phpmailer-open.svg +++ b/icons/folder-phpmailer-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-phpmailer.svg b/icons/folder-phpmailer.svg index dcc3cf4eb9..fd32430531 100644 --- a/icons/folder-phpmailer.svg +++ b/icons/folder-phpmailer.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-pipe-open.svg b/icons/folder-pipe-open.svg index 3677c99b5b..67ca7224d7 100644 --- a/icons/folder-pipe-open.svg +++ b/icons/folder-pipe-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-pipe.svg b/icons/folder-pipe.svg index 3bfb174dbf..26a258cbac 100644 --- a/icons/folder-pipe.svg +++ b/icons/folder-pipe.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-plastic-open.svg b/icons/folder-plastic-open.svg index f24309879e..f84ab33bbe 100644 --- a/icons/folder-plastic-open.svg +++ b/icons/folder-plastic-open.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/icons/folder-plastic.svg b/icons/folder-plastic.svg index 01b5c64ad5..f0493b3fbe 100644 --- a/icons/folder-plastic.svg +++ b/icons/folder-plastic.svg @@ -1,2 +1 @@ - - + \ No newline at end of file diff --git a/icons/folder-plugin-open.svg b/icons/folder-plugin-open.svg index 01c60262c2..b57eb5f348 100644 --- a/icons/folder-plugin-open.svg +++ b/icons/folder-plugin-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-plugin.svg b/icons/folder-plugin.svg index 9899169c14..a20d9b25f2 100644 --- a/icons/folder-plugin.svg +++ b/icons/folder-plugin.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-powershell-open.svg b/icons/folder-powershell-open.svg new file mode 100644 index 0000000000..ec222033b3 --- /dev/null +++ b/icons/folder-powershell-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-powershell.svg b/icons/folder-powershell.svg new file mode 100644 index 0000000000..cdc916d6e6 --- /dev/null +++ b/icons/folder-powershell.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-prisma-open.svg b/icons/folder-prisma-open.svg index de67d17a3f..8155f18511 100644 --- a/icons/folder-prisma-open.svg +++ b/icons/folder-prisma-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-prisma.svg b/icons/folder-prisma.svg index ea06874bff..cee8727adf 100644 --- a/icons/folder-prisma.svg +++ b/icons/folder-prisma.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-private-open.svg b/icons/folder-private-open.svg index e353cc3aea..438c5d4956 100644 --- a/icons/folder-private-open.svg +++ b/icons/folder-private-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-private.svg b/icons/folder-private.svg index 41d3b067ca..45b31fd1d7 100644 --- a/icons/folder-private.svg +++ b/icons/folder-private.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-project-open.svg b/icons/folder-project-open.svg index 5b40ed0262..b6cb1a8979 100644 --- a/icons/folder-project-open.svg +++ b/icons/folder-project-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-project.svg b/icons/folder-project.svg index e7aad4035b..a9f8c06841 100644 --- a/icons/folder-project.svg +++ b/icons/folder-project.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-proto-open.svg b/icons/folder-proto-open.svg index 6dbe9d617f..c6561ff25c 100644 --- a/icons/folder-proto-open.svg +++ b/icons/folder-proto-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-proto.svg b/icons/folder-proto.svg index 33b1fa7aba..bb0681a729 100644 --- a/icons/folder-proto.svg +++ b/icons/folder-proto.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-public-open.svg b/icons/folder-public-open.svg index d995ea7357..7e8d30fdef 100644 --- a/icons/folder-public-open.svg +++ b/icons/folder-public-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-public.svg b/icons/folder-public.svg index a0830a6bc8..f35ec616ab 100644 --- a/icons/folder-public.svg +++ b/icons/folder-public.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-python-open.svg b/icons/folder-python-open.svg index 967f25a0d2..effc3f9fb9 100644 --- a/icons/folder-python-open.svg +++ b/icons/folder-python-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-python.svg b/icons/folder-python.svg index b8d766dec3..cd85c5c33c 100644 --- a/icons/folder-python.svg +++ b/icons/folder-python.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-quasar-open.svg b/icons/folder-quasar-open.svg index 9642b83950..47646c9c55 100644 --- a/icons/folder-quasar-open.svg +++ b/icons/folder-quasar-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-quasar.svg b/icons/folder-quasar.svg index f900bc6708..68b08e4974 100644 --- a/icons/folder-quasar.svg +++ b/icons/folder-quasar.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-queue-open.svg b/icons/folder-queue-open.svg index ffaeae436c..434c638d18 100644 --- a/icons/folder-queue-open.svg +++ b/icons/folder-queue-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-queue.svg b/icons/folder-queue.svg index d0d69a7055..a80dcb53db 100644 --- a/icons/folder-queue.svg +++ b/icons/folder-queue.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-react-components-open.svg b/icons/folder-react-components-open.svg index b902eaff3b..d7352cd0ab 100644 --- a/icons/folder-react-components-open.svg +++ b/icons/folder-react-components-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-react-components.svg b/icons/folder-react-components.svg index bff5124f20..35c17e15fb 100644 --- a/icons/folder-react-components.svg +++ b/icons/folder-react-components.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-redux-actions-open.svg b/icons/folder-redux-actions-open.svg index 78466e6115..5600e066d9 100644 --- a/icons/folder-redux-actions-open.svg +++ b/icons/folder-redux-actions-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-redux-actions.svg b/icons/folder-redux-actions.svg index a0125ade63..3e836b8c41 100644 --- a/icons/folder-redux-actions.svg +++ b/icons/folder-redux-actions.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-redux-reducer-open.svg b/icons/folder-redux-reducer-open.svg index 10b951003c..9a16c515aa 100644 --- a/icons/folder-redux-reducer-open.svg +++ b/icons/folder-redux-reducer-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-redux-reducer.svg b/icons/folder-redux-reducer.svg index e5c02f6ad5..3711becf59 100644 --- a/icons/folder-redux-reducer.svg +++ b/icons/folder-redux-reducer.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-redux-selector-open.svg b/icons/folder-redux-selector-open.svg index 19b6b42549..39dfeeaf5b 100644 --- a/icons/folder-redux-selector-open.svg +++ b/icons/folder-redux-selector-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-redux-selector.svg b/icons/folder-redux-selector.svg index 1717722b19..37964a9a7a 100644 --- a/icons/folder-redux-selector.svg +++ b/icons/folder-redux-selector.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-redux-store-open.svg b/icons/folder-redux-store-open.svg index af96466d20..37e28b15f6 100644 --- a/icons/folder-redux-store-open.svg +++ b/icons/folder-redux-store-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-redux-store.svg b/icons/folder-redux-store.svg index 4e2ca596c5..9d506f6fd2 100644 --- a/icons/folder-redux-store.svg +++ b/icons/folder-redux-store.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-resolver-open.svg b/icons/folder-resolver-open.svg index 7fc10f436d..bfd7ff61b5 100644 --- a/icons/folder-resolver-open.svg +++ b/icons/folder-resolver-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-resolver.svg b/icons/folder-resolver.svg index 348ee11fbe..8ee8bad6f1 100644 --- a/icons/folder-resolver.svg +++ b/icons/folder-resolver.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-resource-open.svg b/icons/folder-resource-open.svg index 27cc9ab011..d030c0c188 100644 --- a/icons/folder-resource-open.svg +++ b/icons/folder-resource-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-resource.svg b/icons/folder-resource.svg index 62ef55de31..95f39aa899 100644 --- a/icons/folder-resource.svg +++ b/icons/folder-resource.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-review-open.svg b/icons/folder-review-open.svg index 50cd7463ef..c86f915277 100644 --- a/icons/folder-review-open.svg +++ b/icons/folder-review-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-review.svg b/icons/folder-review.svg index fe85cd125a..584bcef5c2 100644 --- a/icons/folder-review.svg +++ b/icons/folder-review.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-robot-open.svg b/icons/folder-robot-open.svg new file mode 100644 index 0000000000..2958448946 --- /dev/null +++ b/icons/folder-robot-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-robot.svg b/icons/folder-robot.svg new file mode 100644 index 0000000000..3690374452 --- /dev/null +++ b/icons/folder-robot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-routes-open.svg b/icons/folder-routes-open.svg index c4807ca039..033d65616e 100644 --- a/icons/folder-routes-open.svg +++ b/icons/folder-routes-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-routes.svg b/icons/folder-routes.svg index c2f9dd8837..c7f21fe38b 100644 --- a/icons/folder-routes.svg +++ b/icons/folder-routes.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-rules-open.svg b/icons/folder-rules-open.svg index dccbe44c23..3d95e39d1e 100644 --- a/icons/folder-rules-open.svg +++ b/icons/folder-rules-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-rules.svg b/icons/folder-rules.svg index 0b53b34c1d..9b2415d00d 100644 --- a/icons/folder-rules.svg +++ b/icons/folder-rules.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-sass-open.svg b/icons/folder-sass-open.svg index 9d11364fd5..e1ae0f6505 100644 --- a/icons/folder-sass-open.svg +++ b/icons/folder-sass-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-sass.svg b/icons/folder-sass.svg index af01147efb..528c3eed30 100644 --- a/icons/folder-sass.svg +++ b/icons/folder-sass.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-scala-open.svg b/icons/folder-scala-open.svg index 8da29fb5ca..021380004f 100644 --- a/icons/folder-scala-open.svg +++ b/icons/folder-scala-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-scala.svg b/icons/folder-scala.svg index e27a6d5e18..0c490a7234 100644 --- a/icons/folder-scala.svg +++ b/icons/folder-scala.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-scripts-open.svg b/icons/folder-scripts-open.svg index 93d426bfda..9446b5a5fd 100644 --- a/icons/folder-scripts-open.svg +++ b/icons/folder-scripts-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-scripts.svg b/icons/folder-scripts.svg index 4855aa5621..948e393e6f 100644 --- a/icons/folder-scripts.svg +++ b/icons/folder-scripts.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-secure-open.svg b/icons/folder-secure-open.svg index a7802699a0..9f49f94c54 100644 --- a/icons/folder-secure-open.svg +++ b/icons/folder-secure-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-secure.svg b/icons/folder-secure.svg index eb8539cbe3..08117c957c 100644 --- a/icons/folder-secure.svg +++ b/icons/folder-secure.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-seeders-open.svg b/icons/folder-seeders-open.svg new file mode 100644 index 0000000000..7863989b42 --- /dev/null +++ b/icons/folder-seeders-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-seeders.svg b/icons/folder-seeders.svg new file mode 100644 index 0000000000..4573a49c4a --- /dev/null +++ b/icons/folder-seeders.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-server-open.svg b/icons/folder-server-open.svg index 253f7069dc..f57d27d2ad 100644 --- a/icons/folder-server-open.svg +++ b/icons/folder-server-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-server.svg b/icons/folder-server.svg index 730d1f9981..20319e1550 100644 --- a/icons/folder-server.svg +++ b/icons/folder-server.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-serverless-open.svg b/icons/folder-serverless-open.svg index 28c1cfbb7a..7e0859eb13 100644 --- a/icons/folder-serverless-open.svg +++ b/icons/folder-serverless-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-serverless.svg b/icons/folder-serverless.svg index 94a0786c7c..213b49484d 100644 --- a/icons/folder-serverless.svg +++ b/icons/folder-serverless.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-shader-open.svg b/icons/folder-shader-open.svg index f886b0c950..2c51b266e1 100644 --- a/icons/folder-shader-open.svg +++ b/icons/folder-shader-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-shader.svg b/icons/folder-shader.svg index 161cc7649d..242e58b99b 100644 --- a/icons/folder-shader.svg +++ b/icons/folder-shader.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-shared-open.svg b/icons/folder-shared-open.svg index d68d9f0b26..402c9a4282 100644 --- a/icons/folder-shared-open.svg +++ b/icons/folder-shared-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-shared.svg b/icons/folder-shared.svg index 4e8363b95d..e48f9dec15 100644 --- a/icons/folder-shared.svg +++ b/icons/folder-shared.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-snapcraft-open.svg b/icons/folder-snapcraft-open.svg new file mode 100644 index 0000000000..cdc2722512 --- /dev/null +++ b/icons/folder-snapcraft-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-snapcraft.svg b/icons/folder-snapcraft.svg new file mode 100644 index 0000000000..69ee2c35c1 --- /dev/null +++ b/icons/folder-snapcraft.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-snippet-open.svg b/icons/folder-snippet-open.svg new file mode 100644 index 0000000000..0d8f28209d --- /dev/null +++ b/icons/folder-snippet-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-snippet.svg b/icons/folder-snippet.svg new file mode 100644 index 0000000000..0aa593529e --- /dev/null +++ b/icons/folder-snippet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-src-open.svg b/icons/folder-src-open.svg index 4cea00ca23..c5a9d54631 100644 --- a/icons/folder-src-open.svg +++ b/icons/folder-src-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-src-tauri-open.svg b/icons/folder-src-tauri-open.svg new file mode 100644 index 0000000000..fe25fe18df --- /dev/null +++ b/icons/folder-src-tauri-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-src-tauri.svg b/icons/folder-src-tauri.svg new file mode 100644 index 0000000000..db1d1aa5da --- /dev/null +++ b/icons/folder-src-tauri.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-src.svg b/icons/folder-src.svg index 0d582d9e99..78eff9333a 100644 --- a/icons/folder-src.svg +++ b/icons/folder-src.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-stack-open.svg b/icons/folder-stack-open.svg index 85a337391c..2ab6c875b9 100644 --- a/icons/folder-stack-open.svg +++ b/icons/folder-stack-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-stack.svg b/icons/folder-stack.svg index 4aa27825be..68e81b342c 100644 --- a/icons/folder-stack.svg +++ b/icons/folder-stack.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-stencil-open.svg b/icons/folder-stencil-open.svg index a9c1a5171b..2a58ff4cdc 100644 --- a/icons/folder-stencil-open.svg +++ b/icons/folder-stencil-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-stencil.svg b/icons/folder-stencil.svg index 2874bac8d7..0eeab3249d 100644 --- a/icons/folder-stencil.svg +++ b/icons/folder-stencil.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-store-open.svg b/icons/folder-store-open.svg new file mode 100644 index 0000000000..9b64a68a46 --- /dev/null +++ b/icons/folder-store-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-store.svg b/icons/folder-store.svg new file mode 100644 index 0000000000..7e10ad45ac --- /dev/null +++ b/icons/folder-store.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-storybook-open.svg b/icons/folder-storybook-open.svg index ae25d6f7c8..eaca781f8b 100644 --- a/icons/folder-storybook-open.svg +++ b/icons/folder-storybook-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-storybook.svg b/icons/folder-storybook.svg index 98cc252697..278c79ab37 100644 --- a/icons/folder-storybook.svg +++ b/icons/folder-storybook.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-stylus-open.svg b/icons/folder-stylus-open.svg index 3338c5f4a7..023f4df320 100644 --- a/icons/folder-stylus-open.svg +++ b/icons/folder-stylus-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-stylus.svg b/icons/folder-stylus.svg index 26546b4ec2..38cc9a64b2 100644 --- a/icons/folder-stylus.svg +++ b/icons/folder-stylus.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-sublime-open.svg b/icons/folder-sublime-open.svg index 31522b3fef..cb77f55257 100644 --- a/icons/folder-sublime-open.svg +++ b/icons/folder-sublime-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-sublime.svg b/icons/folder-sublime.svg index 0a8fa65fbc..d0d63a1504 100644 --- a/icons/folder-sublime.svg +++ b/icons/folder-sublime.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-supabase-open.svg b/icons/folder-supabase-open.svg index df65ca6411..23cbc59033 100644 --- a/icons/folder-supabase-open.svg +++ b/icons/folder-supabase-open.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/icons/folder-supabase.svg b/icons/folder-supabase.svg index 2fad7b3bc5..57a449f103 100644 --- a/icons/folder-supabase.svg +++ b/icons/folder-supabase.svg @@ -1,2 +1 @@ - - + \ No newline at end of file diff --git a/icons/folder-svelte-open.svg b/icons/folder-svelte-open.svg index 3065d2ccaa..40d5ffe281 100644 --- a/icons/folder-svelte-open.svg +++ b/icons/folder-svelte-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-svelte.svg b/icons/folder-svelte.svg index 75c7ea7e56..0ce64fb681 100644 --- a/icons/folder-svelte.svg +++ b/icons/folder-svelte.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-svg-open.svg b/icons/folder-svg-open.svg index a6bb8f72f2..288ddac8bb 100644 --- a/icons/folder-svg-open.svg +++ b/icons/folder-svg-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-svg.svg b/icons/folder-svg.svg index 6ebc8415d4..a11cb049fc 100644 --- a/icons/folder-svg.svg +++ b/icons/folder-svg.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-syntax-open.svg b/icons/folder-syntax-open.svg index f46b984342..f79fc2d50d 100644 --- a/icons/folder-syntax-open.svg +++ b/icons/folder-syntax-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-syntax.svg b/icons/folder-syntax.svg index cd2f23a9e4..51245277bc 100644 --- a/icons/folder-syntax.svg +++ b/icons/folder-syntax.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-target-open.svg b/icons/folder-target-open.svg index 12a4db4aa7..ef45df585a 100644 --- a/icons/folder-target-open.svg +++ b/icons/folder-target-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-target.svg b/icons/folder-target.svg index d1233b1f01..19ca85bbe3 100644 --- a/icons/folder-target.svg +++ b/icons/folder-target.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-taskfile-open.svg b/icons/folder-taskfile-open.svg new file mode 100644 index 0000000000..7100f2f968 --- /dev/null +++ b/icons/folder-taskfile-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-taskfile.svg b/icons/folder-taskfile.svg new file mode 100644 index 0000000000..8fc9b22497 --- /dev/null +++ b/icons/folder-taskfile.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-tasks-open.svg b/icons/folder-tasks-open.svg index 0510116540..e4e3707982 100644 --- a/icons/folder-tasks-open.svg +++ b/icons/folder-tasks-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-tasks.svg b/icons/folder-tasks.svg index 1b9bf84081..20d2b93623 100644 --- a/icons/folder-tasks.svg +++ b/icons/folder-tasks.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-television-open.svg b/icons/folder-television-open.svg new file mode 100644 index 0000000000..4339be83ed --- /dev/null +++ b/icons/folder-television-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-television.svg b/icons/folder-television.svg new file mode 100644 index 0000000000..4896ccbc81 --- /dev/null +++ b/icons/folder-television.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-temp-open.svg b/icons/folder-temp-open.svg index 0209840614..35912d9f8e 100644 --- a/icons/folder-temp-open.svg +++ b/icons/folder-temp-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-temp.svg b/icons/folder-temp.svg index 99a8ea917e..60867a9d83 100644 --- a/icons/folder-temp.svg +++ b/icons/folder-temp.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-template-open.svg b/icons/folder-template-open.svg index cb5312cda7..f42da86fb5 100644 --- a/icons/folder-template-open.svg +++ b/icons/folder-template-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-template.svg b/icons/folder-template.svg index 779258ad63..12eac68610 100644 --- a/icons/folder-template.svg +++ b/icons/folder-template.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-terraform-open.svg b/icons/folder-terraform-open.svg index c6d23d8dce..388e44b7f7 100644 --- a/icons/folder-terraform-open.svg +++ b/icons/folder-terraform-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-terraform.svg b/icons/folder-terraform.svg index 6336932641..17053510e9 100644 --- a/icons/folder-terraform.svg +++ b/icons/folder-terraform.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-test-open.svg b/icons/folder-test-open.svg index 5b3322ed8f..bacd5e3371 100644 --- a/icons/folder-test-open.svg +++ b/icons/folder-test-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-test.svg b/icons/folder-test.svg index eee40d120c..58abf0c347 100644 --- a/icons/folder-test.svg +++ b/icons/folder-test.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-theme-open.svg b/icons/folder-theme-open.svg index a149a42f1b..cf6b1b3178 100644 --- a/icons/folder-theme-open.svg +++ b/icons/folder-theme-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-theme.svg b/icons/folder-theme.svg index 3c9cf40946..93247eb49d 100644 --- a/icons/folder-theme.svg +++ b/icons/folder-theme.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-tools-open.svg b/icons/folder-tools-open.svg index 9cd001a957..838ed2a848 100644 --- a/icons/folder-tools-open.svg +++ b/icons/folder-tools-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-tools.svg b/icons/folder-tools.svg index 85113c63f4..34423d34b4 100644 --- a/icons/folder-tools.svg +++ b/icons/folder-tools.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-turborepo-open.svg b/icons/folder-turborepo-open.svg new file mode 100644 index 0000000000..d6f98d76c9 --- /dev/null +++ b/icons/folder-turborepo-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-turborepo.svg b/icons/folder-turborepo.svg new file mode 100644 index 0000000000..bc5e347571 --- /dev/null +++ b/icons/folder-turborepo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-typescript-open.svg b/icons/folder-typescript-open.svg index 9467b6460b..f484fdbee8 100644 --- a/icons/folder-typescript-open.svg +++ b/icons/folder-typescript-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-typescript.svg b/icons/folder-typescript.svg index 754a1c7830..924d7f4f13 100644 --- a/icons/folder-typescript.svg +++ b/icons/folder-typescript.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-ui-open.svg b/icons/folder-ui-open.svg new file mode 100644 index 0000000000..6a4de38092 --- /dev/null +++ b/icons/folder-ui-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-ui.svg b/icons/folder-ui.svg new file mode 100644 index 0000000000..51773ec817 --- /dev/null +++ b/icons/folder-ui.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-unity-open.svg b/icons/folder-unity-open.svg index ee9f951aa4..e7160850e0 100644 --- a/icons/folder-unity-open.svg +++ b/icons/folder-unity-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-unity.svg b/icons/folder-unity.svg index 6c7331f474..0079878766 100644 --- a/icons/folder-unity.svg +++ b/icons/folder-unity.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-update-open.svg b/icons/folder-update-open.svg index 0304bd8776..a7100fc396 100644 --- a/icons/folder-update-open.svg +++ b/icons/folder-update-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-update.svg b/icons/folder-update.svg index 1ce9788058..659415b370 100644 --- a/icons/folder-update.svg +++ b/icons/folder-update.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-upload-open.svg b/icons/folder-upload-open.svg index 139711191c..b1eeef7c25 100644 --- a/icons/folder-upload-open.svg +++ b/icons/folder-upload-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-upload.svg b/icons/folder-upload.svg index 4fb749914c..e4b0035845 100644 --- a/icons/folder-upload.svg +++ b/icons/folder-upload.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-utils-open.svg b/icons/folder-utils-open.svg index 9c5fa64966..64baa67438 100644 --- a/icons/folder-utils-open.svg +++ b/icons/folder-utils-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-utils.svg b/icons/folder-utils.svg index 734fd01031..9b69e61ac5 100644 --- a/icons/folder-utils.svg +++ b/icons/folder-utils.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-vercel-open.svg b/icons/folder-vercel-open.svg index d4d99572ef..3ce64f3ecd 100644 --- a/icons/folder-vercel-open.svg +++ b/icons/folder-vercel-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-vercel.svg b/icons/folder-vercel.svg index 9f35e3eae6..a5a453741e 100644 --- a/icons/folder-vercel.svg +++ b/icons/folder-vercel.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-verdaccio-open.svg b/icons/folder-verdaccio-open.svg index c6f21f546b..9df900ec65 100644 --- a/icons/folder-verdaccio-open.svg +++ b/icons/folder-verdaccio-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-verdaccio.svg b/icons/folder-verdaccio.svg index 190e0e2587..2850a51193 100644 --- a/icons/folder-verdaccio.svg +++ b/icons/folder-verdaccio.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-video-open.svg b/icons/folder-video-open.svg index 7ae4ea170c..74d91511d2 100644 --- a/icons/folder-video-open.svg +++ b/icons/folder-video-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-video.svg b/icons/folder-video.svg index 96f7421df5..aefea147ff 100644 --- a/icons/folder-video.svg +++ b/icons/folder-video.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-views-open.svg b/icons/folder-views-open.svg index 6f78dd941d..99cf6b621e 100644 --- a/icons/folder-views-open.svg +++ b/icons/folder-views-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-views.svg b/icons/folder-views.svg index 4968104a08..d674c8fae2 100644 --- a/icons/folder-views.svg +++ b/icons/folder-views.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-vm-open.svg b/icons/folder-vm-open.svg index 6a9e24321f..258af2c0c5 100644 --- a/icons/folder-vm-open.svg +++ b/icons/folder-vm-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-vm.svg b/icons/folder-vm.svg index a7a2c07fcd..82fcf71f8a 100644 --- a/icons/folder-vm.svg +++ b/icons/folder-vm.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-vscode-open.svg b/icons/folder-vscode-open.svg index ccc72a4dba..b2f1417720 100644 --- a/icons/folder-vscode-open.svg +++ b/icons/folder-vscode-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-vscode.svg b/icons/folder-vscode.svg index 5b5de2661c..1d1d45b3cb 100644 --- a/icons/folder-vscode.svg +++ b/icons/folder-vscode.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-vue-directives-open.svg b/icons/folder-vue-directives-open.svg index 84e4b81c11..94c7f1ac2f 100644 --- a/icons/folder-vue-directives-open.svg +++ b/icons/folder-vue-directives-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-vue-directives.svg b/icons/folder-vue-directives.svg index 8fdd1fa234..6962d8fcce 100644 --- a/icons/folder-vue-directives.svg +++ b/icons/folder-vue-directives.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-vue-open.svg b/icons/folder-vue-open.svg index de80ab2493..13904c4d75 100644 --- a/icons/folder-vue-open.svg +++ b/icons/folder-vue-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-vue.svg b/icons/folder-vue.svg index 12bf18a9a6..79e6c4db83 100644 --- a/icons/folder-vue.svg +++ b/icons/folder-vue.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-vuepress-open.svg b/icons/folder-vuepress-open.svg index c4f7af01a1..423586ab23 100644 --- a/icons/folder-vuepress-open.svg +++ b/icons/folder-vuepress-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-vuepress.svg b/icons/folder-vuepress.svg index cf10884f91..2035d6ec2f 100644 --- a/icons/folder-vuepress.svg +++ b/icons/folder-vuepress.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-vuex-store-open.svg b/icons/folder-vuex-store-open.svg index 8a7b3a0086..c981cb3ef8 100644 --- a/icons/folder-vuex-store-open.svg +++ b/icons/folder-vuex-store-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-vuex-store.svg b/icons/folder-vuex-store.svg index 3496beb396..24b3d9d0b3 100644 --- a/icons/folder-vuex-store.svg +++ b/icons/folder-vuex-store.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-wakatime-open.svg b/icons/folder-wakatime-open.svg index b850d1305a..2bfe44d605 100644 --- a/icons/folder-wakatime-open.svg +++ b/icons/folder-wakatime-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-wakatime.svg b/icons/folder-wakatime.svg index 790b2749d1..1d095ead01 100644 --- a/icons/folder-wakatime.svg +++ b/icons/folder-wakatime.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-webpack-open.svg b/icons/folder-webpack-open.svg index df53a44dc7..fae650feda 100644 --- a/icons/folder-webpack-open.svg +++ b/icons/folder-webpack-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-webpack.svg b/icons/folder-webpack.svg index ea9dfa6790..17243aee60 100644 --- a/icons/folder-webpack.svg +++ b/icons/folder-webpack.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-windows-open.svg b/icons/folder-windows-open.svg new file mode 100644 index 0000000000..e0bd129072 --- /dev/null +++ b/icons/folder-windows-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-windows.svg b/icons/folder-windows.svg new file mode 100644 index 0000000000..81b3ca6c44 --- /dev/null +++ b/icons/folder-windows.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/folder-wordpress-open.svg b/icons/folder-wordpress-open.svg index a0043a244a..e285f7ecc7 100644 --- a/icons/folder-wordpress-open.svg +++ b/icons/folder-wordpress-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-wordpress.svg b/icons/folder-wordpress.svg index 46b4bac08c..164a3a70d2 100644 --- a/icons/folder-wordpress.svg +++ b/icons/folder-wordpress.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-yarn-open.svg b/icons/folder-yarn-open.svg index 8f00dfbbe1..c79cdb48ef 100644 --- a/icons/folder-yarn-open.svg +++ b/icons/folder-yarn-open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/folder-yarn.svg b/icons/folder-yarn.svg index e15cc77ed1..b0ee4723cc 100644 --- a/icons/folder-yarn.svg +++ b/icons/folder-yarn.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/font.svg b/icons/font.svg index d134cfc056..961586d9de 100644 --- a/icons/font.svg +++ b/icons/font.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/forth.svg b/icons/forth.svg index 0dc8d05be2..50b66af6ec 100644 --- a/icons/forth.svg +++ b/icons/forth.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/fortran.svg b/icons/fortran.svg index 8ff9b7404f..235db1a060 100644 --- a/icons/fortran.svg +++ b/icons/fortran.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/foxpro.svg b/icons/foxpro.svg index b14c5ea5ab..95e914a8de 100644 --- a/icons/foxpro.svg +++ b/icons/foxpro.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/freemarker.svg b/icons/freemarker.svg new file mode 100644 index 0000000000..edf98f6df5 --- /dev/null +++ b/icons/freemarker.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/fsharp.svg b/icons/fsharp.svg index 53cf6ab18f..df4c476cd4 100644 --- a/icons/fsharp.svg +++ b/icons/fsharp.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/fusebox.svg b/icons/fusebox.svg index 1ea89f4d3a..21068bb0a9 100644 --- a/icons/fusebox.svg +++ b/icons/fusebox.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/gamemaker.svg b/icons/gamemaker.svg index df95e46765..79fddf7edd 100644 --- a/icons/gamemaker.svg +++ b/icons/gamemaker.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/icons/garden.svg b/icons/garden.svg new file mode 100644 index 0000000000..d350743c45 --- /dev/null +++ b/icons/garden.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/icons/gatsby.svg b/icons/gatsby.svg index d35f61cf93..a7326d0735 100644 --- a/icons/gatsby.svg +++ b/icons/gatsby.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/gcp.svg b/icons/gcp.svg index 52f11d8853..fc5928b5fa 100644 --- a/icons/gcp.svg +++ b/icons/gcp.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/gemfile.svg b/icons/gemfile.svg index 85e1ec97ce..3e32b5391c 100644 --- a/icons/gemfile.svg +++ b/icons/gemfile.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/gemini-ai.svg b/icons/gemini-ai.svg new file mode 100644 index 0000000000..eb0aae4854 --- /dev/null +++ b/icons/gemini-ai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/gemini.svg b/icons/gemini.svg index 546f5ee223..c529a97e11 100644 --- a/icons/gemini.svg +++ b/icons/gemini.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/git.svg b/icons/git.svg index 5bfed227e7..b4ba5e022f 100644 --- a/icons/git.svg +++ b/icons/git.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/github-actions-workflow.svg b/icons/github-actions-workflow.svg new file mode 100644 index 0000000000..0dd1e5b323 --- /dev/null +++ b/icons/github-actions-workflow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/gitlab.svg b/icons/gitlab.svg index ab0e886c85..e1a0294ddc 100644 --- a/icons/gitlab.svg +++ b/icons/gitlab.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/gitpod.svg b/icons/gitpod.svg index 83514157da..3c8455cec6 100644 --- a/icons/gitpod.svg +++ b/icons/gitpod.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/gleam.svg b/icons/gleam.svg index 9a0f53ce56..2e53ccd78c 100644 --- a/icons/gleam.svg +++ b/icons/gleam.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/go-mod.svg b/icons/go-mod.svg index fdf1ccbaf1..3dbbd144df 100644 --- a/icons/go-mod.svg +++ b/icons/go-mod.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/go.svg b/icons/go.svg index c795e57685..56e0403981 100644 --- a/icons/go.svg +++ b/icons/go.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/go_gopher.svg b/icons/go_gopher.svg index 42be334e6a..6de198cdf4 100644 --- a/icons/go_gopher.svg +++ b/icons/go_gopher.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/godot-assets.svg b/icons/godot-assets.svg index 1484d3ccaa..0fce8a8216 100644 --- a/icons/godot-assets.svg +++ b/icons/godot-assets.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/icons/godot.svg b/icons/godot.svg index 0f751a2bbc..c43a616651 100644 --- a/icons/godot.svg +++ b/icons/godot.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/icons/gradle.svg b/icons/gradle.svg index 8c210fd6fe..f1695207bf 100644 --- a/icons/gradle.svg +++ b/icons/gradle.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/grafana-alloy.svg b/icons/grafana-alloy.svg new file mode 100644 index 0000000000..b199ede318 --- /dev/null +++ b/icons/grafana-alloy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/grain.svg b/icons/grain.svg index f4eefe041b..f96d46ba7f 100644 --- a/icons/grain.svg +++ b/icons/grain.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/graphcool.svg b/icons/graphcool.svg index f5c1cebc68..8ff3be725d 100644 --- a/icons/graphcool.svg +++ b/icons/graphcool.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/graphql.svg b/icons/graphql.svg index 798111ca44..252b0f7342 100644 --- a/icons/graphql.svg +++ b/icons/graphql.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/gridsome.svg b/icons/gridsome.svg index 2eb3eb287b..024d26ace5 100644 --- a/icons/gridsome.svg +++ b/icons/gridsome.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/groovy.svg b/icons/groovy.svg index 98b63d046c..bf6d54391e 100644 --- a/icons/groovy.svg +++ b/icons/groovy.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/grunt.svg b/icons/grunt.svg index 979e105ba0..c43b73df59 100644 --- a/icons/grunt.svg +++ b/icons/grunt.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/gulp.svg b/icons/gulp.svg index 8233c7c2d7..bc6a77ffdd 100644 --- a/icons/gulp.svg +++ b/icons/gulp.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/h.svg b/icons/h.svg index f63d37b4e3..5e6fbef892 100644 --- a/icons/h.svg +++ b/icons/h.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/hack.svg b/icons/hack.svg index ffefc6fb5c..7094ced737 100644 --- a/icons/hack.svg +++ b/icons/hack.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/haml.svg b/icons/haml.svg index 4589745eb9..19483b26f9 100644 --- a/icons/haml.svg +++ b/icons/haml.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/handlebars.svg b/icons/handlebars.svg index 87fbb103fb..96a4669a68 100644 --- a/icons/handlebars.svg +++ b/icons/handlebars.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/hardhat.svg b/icons/hardhat.svg index 17c707a1df..ea76464cc9 100644 --- a/icons/hardhat.svg +++ b/icons/hardhat.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/harmonix.svg b/icons/harmonix.svg new file mode 100644 index 0000000000..299fa478c4 --- /dev/null +++ b/icons/harmonix.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/haskell.svg b/icons/haskell.svg index 8e65f64bc1..ae44927a92 100644 --- a/icons/haskell.svg +++ b/icons/haskell.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/haxe.svg b/icons/haxe.svg index 18610befe1..94cb5ac348 100644 --- a/icons/haxe.svg +++ b/icons/haxe.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/hcl.svg b/icons/hcl.svg index a3e2c24ebe..b8bb1b6c82 100644 --- a/icons/hcl.svg +++ b/icons/hcl.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/hcl_light.svg b/icons/hcl_light.svg index 3392a072f3..117f8d4107 100644 --- a/icons/hcl_light.svg +++ b/icons/hcl_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/helm.svg b/icons/helm.svg index 514a4b7c7f..43b2a87dd9 100644 --- a/icons/helm.svg +++ b/icons/helm.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/heroku.svg b/icons/heroku.svg index 17f04c9218..f7c4328117 100644 --- a/icons/heroku.svg +++ b/icons/heroku.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/hex.svg b/icons/hex.svg index af13d6e791..9fdba49a74 100644 --- a/icons/hex.svg +++ b/icons/hex.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/hjson.svg b/icons/hjson.svg new file mode 100644 index 0000000000..c151f93a82 --- /dev/null +++ b/icons/hjson.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/horusec.svg b/icons/horusec.svg index 33e59c6d13..4d96097b03 100644 --- a/icons/horusec.svg +++ b/icons/horusec.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/hpp.svg b/icons/hpp.svg index b627d5ef25..6efda427a1 100644 --- a/icons/hpp.svg +++ b/icons/hpp.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/html.svg b/icons/html.svg index f6751b03eb..5012d79449 100644 --- a/icons/html.svg +++ b/icons/html.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/http.svg b/icons/http.svg index 320acf54ec..e9f7b9f16d 100644 --- a/icons/http.svg +++ b/icons/http.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/huff.svg b/icons/huff.svg new file mode 100644 index 0000000000..ed2ad380be --- /dev/null +++ b/icons/huff.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/huff_light.svg b/icons/huff_light.svg new file mode 100644 index 0000000000..3c04dc9ee6 --- /dev/null +++ b/icons/huff_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/hurl.svg b/icons/hurl.svg new file mode 100644 index 0000000000..a6fa021cda --- /dev/null +++ b/icons/hurl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/husky.svg b/icons/husky.svg index 90e715bfd0..3bf1661304 100644 --- a/icons/husky.svg +++ b/icons/husky.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/i18n.svg b/icons/i18n.svg index f78ae76d21..3f6af90c3c 100644 --- a/icons/i18n.svg +++ b/icons/i18n.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/idris.svg b/icons/idris.svg index 5d4603b83f..67be8f7128 100644 --- a/icons/idris.svg +++ b/icons/idris.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/ifanr-cloud.svg b/icons/ifanr-cloud.svg index 43e0917312..79259c1487 100644 --- a/icons/ifanr-cloud.svg +++ b/icons/ifanr-cloud.svg @@ -1,10 +1 @@ - - - \ No newline at end of file + \ No newline at end of file diff --git a/icons/image.svg b/icons/image.svg index 261e62cf0b..0db408538f 100644 --- a/icons/image.svg +++ b/icons/image.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/imba.svg b/icons/imba.svg index c69cb225af..ff8b8be554 100644 --- a/icons/imba.svg +++ b/icons/imba.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/ionic.svg b/icons/ionic.svg index 15b5c589ca..e70fcbd636 100644 --- a/icons/ionic.svg +++ b/icons/ionic.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/istanbul.svg b/icons/istanbul.svg index 6c904df844..6e622b00c1 100644 --- a/icons/istanbul.svg +++ b/icons/istanbul.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/jar.svg b/icons/jar.svg index d5b0b56451..b59988e7de 100644 --- a/icons/jar.svg +++ b/icons/jar.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/java.svg b/icons/java.svg index 28143c7bc6..469f398091 100644 --- a/icons/java.svg +++ b/icons/java.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/javaclass.svg b/icons/javaclass.svg index bcc9c0674a..9e20db7410 100644 --- a/icons/javaclass.svg +++ b/icons/javaclass.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/javascript-map.svg b/icons/javascript-map.svg index 858fef2008..f9df1aea11 100644 --- a/icons/javascript-map.svg +++ b/icons/javascript-map.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/javascript.svg b/icons/javascript.svg index 11ab75e834..33f9df142e 100644 --- a/icons/javascript.svg +++ b/icons/javascript.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/jenkins.svg b/icons/jenkins.svg index e8e17f868e..27bc7045ad 100644 --- a/icons/jenkins.svg +++ b/icons/jenkins.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/jest.svg b/icons/jest.svg index d34c03b732..57146beeeb 100644 --- a/icons/jest.svg +++ b/icons/jest.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/jinja.svg b/icons/jinja.svg index cccc649e60..bf55231529 100644 --- a/icons/jinja.svg +++ b/icons/jinja.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/jinja_light.svg b/icons/jinja_light.svg index 677795084e..712c1abf32 100644 --- a/icons/jinja_light.svg +++ b/icons/jinja_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/jsconfig.svg b/icons/jsconfig.svg index c0c3ac5c98..5aef48128a 100644 --- a/icons/jsconfig.svg +++ b/icons/jsconfig.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/json.svg b/icons/json.svg index fcbe211b00..578eb7c8a7 100644 --- a/icons/json.svg +++ b/icons/json.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/jsr.svg b/icons/jsr.svg new file mode 100644 index 0000000000..739f6574e8 --- /dev/null +++ b/icons/jsr.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/jsr_light.svg b/icons/jsr_light.svg new file mode 100644 index 0000000000..c93d452242 --- /dev/null +++ b/icons/jsr_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/julia.svg b/icons/julia.svg index a00d1dbe09..f9bb791c8e 100644 --- a/icons/julia.svg +++ b/icons/julia.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/jupyter.svg b/icons/jupyter.svg index d2d34d25b9..054031710d 100644 --- a/icons/jupyter.svg +++ b/icons/jupyter.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/just.svg b/icons/just.svg new file mode 100644 index 0000000000..cd949b6b18 --- /dev/null +++ b/icons/just.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/karma.svg b/icons/karma.svg index 5362eadb7c..42f1c84540 100644 --- a/icons/karma.svg +++ b/icons/karma.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/kcl.svg b/icons/kcl.svg new file mode 100644 index 0000000000..4f10c602ea --- /dev/null +++ b/icons/kcl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/key.svg b/icons/key.svg index 83cf313d82..8ea939891f 100644 --- a/icons/key.svg +++ b/icons/key.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/kivy.svg b/icons/kivy.svg index cff19897b8..2a1a35c4ac 100644 --- a/icons/kivy.svg +++ b/icons/kivy.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/kl.svg b/icons/kl.svg index f6f5964cfa..c43dfc6b5f 100644 --- a/icons/kl.svg +++ b/icons/kl.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/knip.svg b/icons/knip.svg new file mode 100644 index 0000000000..51a7cc2142 --- /dev/null +++ b/icons/knip.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/kotlin.svg b/icons/kotlin.svg index c2b5a7fcc7..f64f8abd07 100644 --- a/icons/kotlin.svg +++ b/icons/kotlin.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/kubernetes.svg b/icons/kubernetes.svg new file mode 100644 index 0000000000..48c625f294 --- /dev/null +++ b/icons/kubernetes.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/kusto.svg b/icons/kusto.svg index 8dc9bd1012..e579a1132d 100644 --- a/icons/kusto.svg +++ b/icons/kusto.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/label.svg b/icons/label.svg new file mode 100644 index 0000000000..8c9387197b --- /dev/null +++ b/icons/label.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/laravel.svg b/icons/laravel.svg index 68e2555863..2e6cfbe252 100644 --- a/icons/laravel.svg +++ b/icons/laravel.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/lefthook.svg b/icons/lefthook.svg new file mode 100644 index 0000000000..66a444b08a --- /dev/null +++ b/icons/lefthook.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/lerna.svg b/icons/lerna.svg index 168f9c2e46..20d3b95139 100644 --- a/icons/lerna.svg +++ b/icons/lerna.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/less.svg b/icons/less.svg index 363fa12dc1..997df45e2b 100644 --- a/icons/less.svg +++ b/icons/less.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/liara.svg b/icons/liara.svg new file mode 100644 index 0000000000..2738bec7dc --- /dev/null +++ b/icons/liara.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/lib.svg b/icons/lib.svg index 943027d0be..447aab5d5f 100644 --- a/icons/lib.svg +++ b/icons/lib.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/lighthouse.svg b/icons/lighthouse.svg index 88ee2bb966..5041f35e16 100644 --- a/icons/lighthouse.svg +++ b/icons/lighthouse.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/lilypond.svg b/icons/lilypond.svg index e6acaf5c72..a12aa2cc2c 100644 --- a/icons/lilypond.svg +++ b/icons/lilypond.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/liquid.svg b/icons/liquid.svg index 210ed0c123..5111ab67f6 100644 --- a/icons/liquid.svg +++ b/icons/liquid.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/lisp.svg b/icons/lisp.svg index 2b5d17d793..05d7e060f6 100644 --- a/icons/lisp.svg +++ b/icons/lisp.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/livescript.svg b/icons/livescript.svg index 025cbe8280..ccca801f7a 100644 --- a/icons/livescript.svg +++ b/icons/livescript.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/lock.svg b/icons/lock.svg index 3e343ce89e..f6a1c44bb5 100644 --- a/icons/lock.svg +++ b/icons/lock.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/log.svg b/icons/log.svg index a795fd6296..a44f7e2baf 100644 --- a/icons/log.svg +++ b/icons/log.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/lolcode.svg b/icons/lolcode.svg index e440792013..ffc9786421 100644 --- a/icons/lolcode.svg +++ b/icons/lolcode.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/lottie.svg b/icons/lottie.svg new file mode 100644 index 0000000000..4917f32780 --- /dev/null +++ b/icons/lottie.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/lua.svg b/icons/lua.svg index 9f71f8c397..d3fb0b1dee 100644 --- a/icons/lua.svg +++ b/icons/lua.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/makefile.svg b/icons/makefile.svg index 694ad2e226..f886fb5cfc 100644 --- a/icons/makefile.svg +++ b/icons/makefile.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/markdown.svg b/icons/markdown.svg index edb3c44b99..b45321c7ad 100644 --- a/icons/markdown.svg +++ b/icons/markdown.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/markdownlint.svg b/icons/markdownlint.svg new file mode 100644 index 0000000000..37daf0d27a --- /dev/null +++ b/icons/markdownlint.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/markojs.svg b/icons/markojs.svg index 31f4994e81..7ec0bc4542 100644 --- a/icons/markojs.svg +++ b/icons/markojs.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/mathematica.svg b/icons/mathematica.svg index 8a743eef52..08c25084b5 100644 --- a/icons/mathematica.svg +++ b/icons/mathematica.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/matlab.svg b/icons/matlab.svg index 423006e083..a2166f81e3 100644 --- a/icons/matlab.svg +++ b/icons/matlab.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/maven.svg b/icons/maven.svg index 2ada82c8b3..c8d62a7211 100644 --- a/icons/maven.svg +++ b/icons/maven.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/mdsvex.svg b/icons/mdsvex.svg index 63117bde2e..89e9d837b1 100644 --- a/icons/mdsvex.svg +++ b/icons/mdsvex.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/mdx.svg b/icons/mdx.svg index 07fbb43ef2..c1e1769562 100644 --- a/icons/mdx.svg +++ b/icons/mdx.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/mercurial.svg b/icons/mercurial.svg index 40bb50886d..41f701e23c 100644 --- a/icons/mercurial.svg +++ b/icons/mercurial.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/icons/merlin.svg b/icons/merlin.svg index 3d4e4bbac3..96b29d3fd2 100644 --- a/icons/merlin.svg +++ b/icons/merlin.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/mermaid.svg b/icons/mermaid.svg index 30de675bc3..23060d414e 100644 --- a/icons/mermaid.svg +++ b/icons/mermaid.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/icons/meson.svg b/icons/meson.svg index 0e636034de..ba1ceae7f8 100644 --- a/icons/meson.svg +++ b/icons/meson.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/minecraft.svg b/icons/minecraft.svg index 05292c7944..219af8ae41 100644 --- a/icons/minecraft.svg +++ b/icons/minecraft.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/mint.svg b/icons/mint.svg index 797d4e95eb..659340a8c5 100644 --- a/icons/mint.svg +++ b/icons/mint.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/mjml.svg b/icons/mjml.svg index f633eee332..0ca04c9a69 100644 --- a/icons/mjml.svg +++ b/icons/mjml.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/mocha.svg b/icons/mocha.svg index 80d637a2ef..854c7af82a 100644 --- a/icons/mocha.svg +++ b/icons/mocha.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/modernizr.svg b/icons/modernizr.svg index 4262f6bf69..ece6219981 100644 --- a/icons/modernizr.svg +++ b/icons/modernizr.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/mojo.svg b/icons/mojo.svg index 3d33d209cf..8481fe688e 100644 --- a/icons/mojo.svg +++ b/icons/mojo.svg @@ -1,2 +1 @@ - - + \ No newline at end of file diff --git a/icons/moon.svg b/icons/moon.svg new file mode 100644 index 0000000000..2359bf03c9 --- /dev/null +++ b/icons/moon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/moonscript.svg b/icons/moonscript.svg index ab690745cb..40cf981321 100644 --- a/icons/moonscript.svg +++ b/icons/moonscript.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/mxml.svg b/icons/mxml.svg index ad5801e902..c6b9bf208a 100644 --- a/icons/mxml.svg +++ b/icons/mxml.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/nano-staged.svg b/icons/nano-staged.svg index e3230d8a88..9534bbdbcb 100644 --- a/icons/nano-staged.svg +++ b/icons/nano-staged.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/nano-staged_light.svg b/icons/nano-staged_light.svg index c789113c22..c8ef74acdb 100644 --- a/icons/nano-staged_light.svg +++ b/icons/nano-staged_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/ndst.svg b/icons/ndst.svg index b298a29d3b..bd4ce54cb0 100644 --- a/icons/ndst.svg +++ b/icons/ndst.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/nest-controller.svg b/icons/nest-controller.svg deleted file mode 100644 index ad8f56587c..0000000000 --- a/icons/nest-controller.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/nest-decorator.svg b/icons/nest-decorator.svg deleted file mode 100644 index 549e9e1f09..0000000000 --- a/icons/nest-decorator.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/nest-filter.svg b/icons/nest-filter.svg deleted file mode 100644 index 7940532444..0000000000 --- a/icons/nest-filter.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/nest-gateway.svg b/icons/nest-gateway.svg deleted file mode 100644 index 50ef503d3b..0000000000 --- a/icons/nest-gateway.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/nest-guard.svg b/icons/nest-guard.svg deleted file mode 100644 index 9e956f60ff..0000000000 --- a/icons/nest-guard.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/nest-middleware.svg b/icons/nest-middleware.svg deleted file mode 100644 index 9a04c9e1cf..0000000000 --- a/icons/nest-middleware.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/nest-module.svg b/icons/nest-module.svg deleted file mode 100644 index 346b7b2bea..0000000000 --- a/icons/nest-module.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/nest-pipe.svg b/icons/nest-pipe.svg deleted file mode 100644 index 3af3a9998c..0000000000 --- a/icons/nest-pipe.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/nest-resolver.svg b/icons/nest-resolver.svg deleted file mode 100644 index 8202bed087..0000000000 --- a/icons/nest-resolver.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/nest-service.svg b/icons/nest-service.svg deleted file mode 100644 index 9fc830339f..0000000000 --- a/icons/nest-service.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/nest.svg b/icons/nest.svg index cd01b12298..a454a83e04 100644 --- a/icons/nest.svg +++ b/icons/nest.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/netlify.svg b/icons/netlify.svg index b36d94fd73..41620138a8 100644 --- a/icons/netlify.svg +++ b/icons/netlify.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/icons/netlify_light.svg b/icons/netlify_light.svg index ece979e72e..127fed5926 100644 --- a/icons/netlify_light.svg +++ b/icons/netlify_light.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/icons/next.svg b/icons/next.svg index 8d7057919a..23724070bd 100644 --- a/icons/next.svg +++ b/icons/next.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/next_light.svg b/icons/next_light.svg index 94ee886b97..208d55b9bf 100644 --- a/icons/next_light.svg +++ b/icons/next_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/nginx.svg b/icons/nginx.svg index 0fe1e3fa4f..658ad228f0 100644 --- a/icons/nginx.svg +++ b/icons/nginx.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/ngrx-actions.svg b/icons/ngrx-actions.svg index 91a5ffc219..de418d48d9 100644 --- a/icons/ngrx-actions.svg +++ b/icons/ngrx-actions.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/ngrx-effects.svg b/icons/ngrx-effects.svg index 0672049677..8f7dc89ddb 100644 --- a/icons/ngrx-effects.svg +++ b/icons/ngrx-effects.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/ngrx-entity.svg b/icons/ngrx-entity.svg index e60945f530..af0dd05636 100644 --- a/icons/ngrx-entity.svg +++ b/icons/ngrx-entity.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/ngrx-reducer.svg b/icons/ngrx-reducer.svg index 6fe3851e0b..db7a5534a8 100644 --- a/icons/ngrx-reducer.svg +++ b/icons/ngrx-reducer.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/ngrx-selectors.svg b/icons/ngrx-selectors.svg index 8dbbf90c89..af03c40ffc 100644 --- a/icons/ngrx-selectors.svg +++ b/icons/ngrx-selectors.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/ngrx-state.svg b/icons/ngrx-state.svg index b88ae01321..258c0ac871 100644 --- a/icons/ngrx-state.svg +++ b/icons/ngrx-state.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/nim.svg b/icons/nim.svg index aabcec1cd0..8b5f3a164d 100644 --- a/icons/nim.svg +++ b/icons/nim.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/nix.svg b/icons/nix.svg index 94b11ac554..8d629a4580 100644 --- a/icons/nix.svg +++ b/icons/nix.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/nodejs.svg b/icons/nodejs.svg index 007273a53a..ba7390153c 100644 --- a/icons/nodejs.svg +++ b/icons/nodejs.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/nodejs_alt.svg b/icons/nodejs_alt.svg index 4bc6ba7b8c..d652712510 100644 --- a/icons/nodejs_alt.svg +++ b/icons/nodejs_alt.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/nodemon.svg b/icons/nodemon.svg index 31d5ac9859..bc17051efb 100644 --- a/icons/nodemon.svg +++ b/icons/nodemon.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/npm.svg b/icons/npm.svg index 304221b3e5..9878c6e625 100644 --- a/icons/npm.svg +++ b/icons/npm.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/nrwl.svg b/icons/nrwl.svg deleted file mode 100644 index 7ff54f04c5..0000000000 --- a/icons/nrwl.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/nuget.svg b/icons/nuget.svg index 03b7160a40..ced7200c06 100644 --- a/icons/nuget.svg +++ b/icons/nuget.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/nunjucks.svg b/icons/nunjucks.svg index ac4e1769ff..f3c85b994b 100644 --- a/icons/nunjucks.svg +++ b/icons/nunjucks.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/nuxt.svg b/icons/nuxt.svg index a4973de03f..7c24e0a1e1 100644 --- a/icons/nuxt.svg +++ b/icons/nuxt.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/nx.svg b/icons/nx.svg new file mode 100644 index 0000000000..3efdc1b97f --- /dev/null +++ b/icons/nx.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/objective-c.svg b/icons/objective-c.svg index 97147a997e..7a69f91d6a 100644 --- a/icons/objective-c.svg +++ b/icons/objective-c.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/icons/objective-cpp.svg b/icons/objective-cpp.svg index c100dec087..262ee28121 100644 --- a/icons/objective-cpp.svg +++ b/icons/objective-cpp.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/ocaml.svg b/icons/ocaml.svg index 5a6704f096..1d20d08099 100644 --- a/icons/ocaml.svg +++ b/icons/ocaml.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/odin.svg b/icons/odin.svg index 39447713d0..b7904fc4ad 100644 --- a/icons/odin.svg +++ b/icons/odin.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/opa.svg b/icons/opa.svg index a17a51b441..8957625254 100644 --- a/icons/opa.svg +++ b/icons/opa.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/opam.svg b/icons/opam.svg index 8c7f680b8a..7e4d358c17 100644 --- a/icons/opam.svg +++ b/icons/opam.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/openapi.svg b/icons/openapi.svg new file mode 100644 index 0000000000..4c111bcd03 --- /dev/null +++ b/icons/openapi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/openapi_light.svg b/icons/openapi_light.svg new file mode 100644 index 0000000000..7176991fd7 --- /dev/null +++ b/icons/openapi_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/otne.svg b/icons/otne.svg index 1d2413d4a4..06fee91eec 100644 --- a/icons/otne.svg +++ b/icons/otne.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/panda.svg b/icons/panda.svg new file mode 100644 index 0000000000..dde4122bbe --- /dev/null +++ b/icons/panda.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/parcel.svg b/icons/parcel.svg index e2c85b6ad3..5289c303d2 100644 --- a/icons/parcel.svg +++ b/icons/parcel.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/pascal.svg b/icons/pascal.svg index 55259381ad..076b2da71a 100644 --- a/icons/pascal.svg +++ b/icons/pascal.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/icons/pawn.svg b/icons/pawn.svg index ff35f85b45..cfffdc871b 100644 --- a/icons/pawn.svg +++ b/icons/pawn.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/payload.svg b/icons/payload.svg new file mode 100644 index 0000000000..a5392c03a8 --- /dev/null +++ b/icons/payload.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/payload_light.svg b/icons/payload_light.svg new file mode 100644 index 0000000000..4be33861d0 --- /dev/null +++ b/icons/payload_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/pdf.svg b/icons/pdf.svg index e3aa7fcef5..cb27a0112c 100644 --- a/icons/pdf.svg +++ b/icons/pdf.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/pdm.svg b/icons/pdm.svg new file mode 100644 index 0000000000..7bb572829e --- /dev/null +++ b/icons/pdm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/percy.svg b/icons/percy.svg index 0ff0c1dc35..136a51f63b 100644 --- a/icons/percy.svg +++ b/icons/percy.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/perl.svg b/icons/perl.svg index 434361d556..da4f9023da 100644 --- a/icons/perl.svg +++ b/icons/perl.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/icons/php-cs-fixer.svg b/icons/php-cs-fixer.svg index 011689013e..2ec1781868 100644 --- a/icons/php-cs-fixer.svg +++ b/icons/php-cs-fixer.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/php.svg b/icons/php.svg index 6a986f0ed6..75516c2740 100644 --- a/icons/php.svg +++ b/icons/php.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/php_elephant.svg b/icons/php_elephant.svg index 6eff008d0a..77a8ff9d8c 100644 --- a/icons/php_elephant.svg +++ b/icons/php_elephant.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/php_elephant_pink.svg b/icons/php_elephant_pink.svg index 0427bf896f..74a28c8b2a 100644 --- a/icons/php_elephant_pink.svg +++ b/icons/php_elephant_pink.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/phpunit.svg b/icons/phpunit.svg index 36aed71754..986dfa4158 100644 --- a/icons/phpunit.svg +++ b/icons/phpunit.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/pinejs.svg b/icons/pinejs.svg index 80c00576bc..6fce738d9d 100644 --- a/icons/pinejs.svg +++ b/icons/pinejs.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/pipeline.svg b/icons/pipeline.svg index 273b93e500..5eb804d405 100644 --- a/icons/pipeline.svg +++ b/icons/pipeline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/pkl.svg b/icons/pkl.svg new file mode 100644 index 0000000000..8d2e8f288f --- /dev/null +++ b/icons/pkl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/plastic.svg b/icons/plastic.svg index 85a2c95bbd..f9f3f267a2 100644 --- a/icons/plastic.svg +++ b/icons/plastic.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/icons/playwright.svg b/icons/playwright.svg index 4d3a829782..f135236c99 100644 --- a/icons/playwright.svg +++ b/icons/playwright.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/plop.svg b/icons/plop.svg index 31f3cc3eec..d2daee452f 100644 --- a/icons/plop.svg +++ b/icons/plop.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/pnpm.svg b/icons/pnpm.svg index ade8e59073..fc52c6ed9d 100644 --- a/icons/pnpm.svg +++ b/icons/pnpm.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/pnpm_light.svg b/icons/pnpm_light.svg index 9df72835fa..4236956cc5 100644 --- a/icons/pnpm_light.svg +++ b/icons/pnpm_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/poetry.svg b/icons/poetry.svg index 8f06a34b32..ee026ba922 100644 --- a/icons/poetry.svg +++ b/icons/poetry.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/postcss.svg b/icons/postcss.svg index 0268bef7d1..eb9e123adb 100644 --- a/icons/postcss.svg +++ b/icons/postcss.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/posthtml.svg b/icons/posthtml.svg index b0bce09f28..9176f8fb3a 100644 --- a/icons/posthtml.svg +++ b/icons/posthtml.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/powerpoint.svg b/icons/powerpoint.svg index 89a5e3cd90..b4d9403443 100644 --- a/icons/powerpoint.svg +++ b/icons/powerpoint.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/powershell.svg b/icons/powershell.svg index d4ae9c312d..79da8134f5 100644 --- a/icons/powershell.svg +++ b/icons/powershell.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/pre-commit.svg b/icons/pre-commit.svg new file mode 100644 index 0000000000..f03b7a1035 --- /dev/null +++ b/icons/pre-commit.svg @@ -0,0 +1 @@ + diff --git a/icons/prettier.svg b/icons/prettier.svg index f94da71f43..55b87a6ff7 100644 --- a/icons/prettier.svg +++ b/icons/prettier.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/prisma.svg b/icons/prisma.svg index 2ba98518d0..1d0e169357 100644 --- a/icons/prisma.svg +++ b/icons/prisma.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/processing.svg b/icons/processing.svg index 8b5af0db69..8a960abd8d 100644 --- a/icons/processing.svg +++ b/icons/processing.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/prolog.svg b/icons/prolog.svg index 76c8eff511..fe7546f614 100644 --- a/icons/prolog.svg +++ b/icons/prolog.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/proto.svg b/icons/proto.svg index 0ad97bf7df..c3e4d85a3b 100644 --- a/icons/proto.svg +++ b/icons/proto.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/protractor.svg b/icons/protractor.svg index 32df7de314..a9f99b39fe 100644 --- a/icons/protractor.svg +++ b/icons/protractor.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/pug.svg b/icons/pug.svg index aac3cb21f5..bb51dcaae8 100644 --- a/icons/pug.svg +++ b/icons/pug.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/puppet.svg b/icons/puppet.svg index e5592ddf1c..3e1e9c12bc 100644 --- a/icons/puppet.svg +++ b/icons/puppet.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/puppeteer.svg b/icons/puppeteer.svg new file mode 100644 index 0000000000..b553df3926 --- /dev/null +++ b/icons/puppeteer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/purescript.svg b/icons/purescript.svg index cc1f5179a1..d23da885dc 100644 --- a/icons/purescript.svg +++ b/icons/purescript.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/python-misc.svg b/icons/python-misc.svg index 8e936f2cb4..3d59b25e1c 100644 --- a/icons/python-misc.svg +++ b/icons/python-misc.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/python.svg b/icons/python.svg index a76bfd99f3..311703a3ff 100644 --- a/icons/python.svg +++ b/icons/python.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/qsharp.svg b/icons/qsharp.svg index bd4bc812a9..de9838d604 100644 --- a/icons/qsharp.svg +++ b/icons/qsharp.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/quasar.svg b/icons/quasar.svg index 04653edb37..b1434fa6d6 100644 --- a/icons/quasar.svg +++ b/icons/quasar.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/quokka.svg b/icons/quokka.svg new file mode 100644 index 0000000000..b03d9f88d7 --- /dev/null +++ b/icons/quokka.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/qwik.svg b/icons/qwik.svg index 9c73b495cd..fcad5ade5d 100644 --- a/icons/qwik.svg +++ b/icons/qwik.svg @@ -1,2 +1 @@ - - + \ No newline at end of file diff --git a/icons/r.svg b/icons/r.svg index ca49afd9d7..91bad330a8 100644 --- a/icons/r.svg +++ b/icons/r.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/racket.svg b/icons/racket.svg index d5890b2919..04ca144ba3 100644 --- a/icons/racket.svg +++ b/icons/racket.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/raml.svg b/icons/raml.svg index 29491f3436..d35d561b9a 100644 --- a/icons/raml.svg +++ b/icons/raml.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/razor.svg b/icons/razor.svg index b769449874..55a7406262 100644 --- a/icons/razor.svg +++ b/icons/razor.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/rc.svg b/icons/rc.svg index 28a99916df..9d2b8d8b57 100644 --- a/icons/rc.svg +++ b/icons/rc.svg @@ -1,2 +1 @@ - - + \ No newline at end of file diff --git a/icons/react.svg b/icons/react.svg index d275b6a83c..b6fd2e0a55 100644 --- a/icons/react.svg +++ b/icons/react.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/react_ts.svg b/icons/react_ts.svg index 8a0018f5b1..ae197bba5b 100644 --- a/icons/react_ts.svg +++ b/icons/react_ts.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/readme.svg b/icons/readme.svg index b16bff4a80..d377df9dea 100644 --- a/icons/readme.svg +++ b/icons/readme.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/reason.svg b/icons/reason.svg index 3b0c0b4837..0f4b3e1f62 100644 --- a/icons/reason.svg +++ b/icons/reason.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/red.svg b/icons/red.svg index 0bc9d0e747..6084231667 100644 --- a/icons/red.svg +++ b/icons/red.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/redux-action.svg b/icons/redux-action.svg index 25573a090f..bd7dec8dbc 100644 --- a/icons/redux-action.svg +++ b/icons/redux-action.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/redux-reducer.svg b/icons/redux-reducer.svg index 24f881c80d..d50acdecd5 100644 --- a/icons/redux-reducer.svg +++ b/icons/redux-reducer.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/redux-selector.svg b/icons/redux-selector.svg index 4621aa66db..31c8df7c67 100644 --- a/icons/redux-selector.svg +++ b/icons/redux-selector.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/redux-store.svg b/icons/redux-store.svg index 05b4a94715..524e4f9dd5 100644 --- a/icons/redux-store.svg +++ b/icons/redux-store.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/remark.svg b/icons/remark.svg new file mode 100644 index 0000000000..9c4d8d2403 --- /dev/null +++ b/icons/remark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/remix.svg b/icons/remix.svg index 58cebea4bc..748c8c6961 100644 --- a/icons/remix.svg +++ b/icons/remix.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/remix_light.svg b/icons/remix_light.svg index d38039a132..8168815a92 100644 --- a/icons/remix_light.svg +++ b/icons/remix_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/renovate.svg b/icons/renovate.svg index 1ebdfd6141..bc63cbb0ca 100644 --- a/icons/renovate.svg +++ b/icons/renovate.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/replit.svg b/icons/replit.svg index 222ff5b4c4..57845b2a49 100644 --- a/icons/replit.svg +++ b/icons/replit.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/rescript-interface.svg b/icons/rescript-interface.svg index c47601e50e..ae8aecb62f 100644 --- a/icons/rescript-interface.svg +++ b/icons/rescript-interface.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/rescript.svg b/icons/rescript.svg index 175f58dec3..c118cf3c32 100644 --- a/icons/rescript.svg +++ b/icons/rescript.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/restql.svg b/icons/restql.svg index 93d9d94ca8..a4a9f972fa 100644 --- a/icons/restql.svg +++ b/icons/restql.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/riot.svg b/icons/riot.svg index d3d2d104f2..209e40add7 100644 --- a/icons/riot.svg +++ b/icons/riot.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/roadmap.svg b/icons/roadmap.svg index 39c969f844..629ecff3e4 100644 --- a/icons/roadmap.svg +++ b/icons/roadmap.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/roblox.svg b/icons/roblox.svg new file mode 100644 index 0000000000..56cc378477 --- /dev/null +++ b/icons/roblox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/robot.svg b/icons/robot.svg index a8bda813bf..2be73888dc 100644 --- a/icons/robot.svg +++ b/icons/robot.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/robots.svg b/icons/robots.svg index 63eb6ad54e..5f9a794cd0 100644 --- a/icons/robots.svg +++ b/icons/robots.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/rocket.svg b/icons/rocket.svg new file mode 100644 index 0000000000..bb4fda95a8 --- /dev/null +++ b/icons/rocket.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/rollup.svg b/icons/rollup.svg index f6fcb2eb82..7fa0153245 100644 --- a/icons/rollup.svg +++ b/icons/rollup.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/rome.svg b/icons/rome.svg index 7c54ddeb26..87f73b4234 100644 --- a/icons/rome.svg +++ b/icons/rome.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/routing.svg b/icons/routing.svg index b150305551..ea02c90541 100644 --- a/icons/routing.svg +++ b/icons/routing.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/rspec.svg b/icons/rspec.svg new file mode 100644 index 0000000000..783eb62172 --- /dev/null +++ b/icons/rspec.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/rubocop.svg b/icons/rubocop.svg index a3cddd1b6d..2cdff99093 100644 --- a/icons/rubocop.svg +++ b/icons/rubocop.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/rubocop_light.svg b/icons/rubocop_light.svg index cb36f274d6..b8cb9dfa1b 100644 --- a/icons/rubocop_light.svg +++ b/icons/rubocop_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/ruby.svg b/icons/ruby.svg index 89c03182d5..f434e05ac8 100644 --- a/icons/ruby.svg +++ b/icons/ruby.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/rust.svg b/icons/rust.svg index 06582d6590..16a404f1f9 100644 --- a/icons/rust.svg +++ b/icons/rust.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/salesforce.svg b/icons/salesforce.svg index 3c82edd03e..281b0e8850 100644 --- a/icons/salesforce.svg +++ b/icons/salesforce.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/san.svg b/icons/san.svg index 3df518f3d1..8ec6be1d58 100644 --- a/icons/san.svg +++ b/icons/san.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/sas.svg b/icons/sas.svg index 3a2641aab2..d8df9a7350 100644 --- a/icons/sas.svg +++ b/icons/sas.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/sass.svg b/icons/sass.svg index 0b92c09213..cc8bb80999 100644 --- a/icons/sass.svg +++ b/icons/sass.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/sbt.svg b/icons/sbt.svg index c29991907f..37587c5cae 100644 --- a/icons/sbt.svg +++ b/icons/sbt.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/scala.svg b/icons/scala.svg index 9955827860..3469205209 100644 --- a/icons/scala.svg +++ b/icons/scala.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/scheme.svg b/icons/scheme.svg index 17c8f723b4..c8f986e865 100644 --- a/icons/scheme.svg +++ b/icons/scheme.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/screwdriver.svg b/icons/screwdriver.svg new file mode 100644 index 0000000000..f4c263ca75 --- /dev/null +++ b/icons/screwdriver.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/search.svg b/icons/search.svg index 7c57bcb42a..202fd60355 100644 --- a/icons/search.svg +++ b/icons/search.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/semantic-release.svg b/icons/semantic-release.svg index 5ec7ea444c..26a22717d7 100644 --- a/icons/semantic-release.svg +++ b/icons/semantic-release.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/semantic-release_light.svg b/icons/semantic-release_light.svg index a3dec5ed9d..82f568366a 100644 --- a/icons/semantic-release_light.svg +++ b/icons/semantic-release_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/semgrep.svg b/icons/semgrep.svg index 173996da44..f2e17c12e5 100644 --- a/icons/semgrep.svg +++ b/icons/semgrep.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/icons/sentry.svg b/icons/sentry.svg index 437818ab87..56cb402447 100644 --- a/icons/sentry.svg +++ b/icons/sentry.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/sequelize.svg b/icons/sequelize.svg index 3a1d5da27a..8b238e05a0 100644 --- a/icons/sequelize.svg +++ b/icons/sequelize.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/serverless.svg b/icons/serverless.svg index e6cecc5dd0..f3ea14c702 100644 --- a/icons/serverless.svg +++ b/icons/serverless.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/settings.svg b/icons/settings.svg index eaba79b656..b4307dc28b 100644 --- a/icons/settings.svg +++ b/icons/settings.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/shader.svg b/icons/shader.svg index 5d03aba7d6..fa7546cdbd 100644 --- a/icons/shader.svg +++ b/icons/shader.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/shaderlab.svg b/icons/shaderlab.svg index 7143f4a3ea..014acf5044 100644 --- a/icons/shaderlab.svg +++ b/icons/shaderlab.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/silverstripe.svg b/icons/silverstripe.svg index 8f7fc73fd5..0e00d9b1c6 100644 --- a/icons/silverstripe.svg +++ b/icons/silverstripe.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/siyuan.svg b/icons/siyuan.svg index 607f2d5b85..7a7488dd2d 100644 --- a/icons/siyuan.svg +++ b/icons/siyuan.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/sketch.svg b/icons/sketch.svg index f208503e95..0d75406904 100644 --- a/icons/sketch.svg +++ b/icons/sketch.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/slim.svg b/icons/slim.svg index 3f42dcd5d4..96442356ea 100644 --- a/icons/slim.svg +++ b/icons/slim.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/slint.svg b/icons/slint.svg new file mode 100644 index 0000000000..b6434ec97e --- /dev/null +++ b/icons/slint.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/slug.svg b/icons/slug.svg index 1532751cb4..a68b81c26d 100644 --- a/icons/slug.svg +++ b/icons/slug.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/smarty.svg b/icons/smarty.svg index ad8b3b23cb..0a2d6c6441 100644 --- a/icons/smarty.svg +++ b/icons/smarty.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/sml.svg b/icons/sml.svg index e53b6a3144..576c779f3e 100644 --- a/icons/sml.svg +++ b/icons/sml.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/snapcraft.svg b/icons/snapcraft.svg new file mode 100644 index 0000000000..17bf8d8d9f --- /dev/null +++ b/icons/snapcraft.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/snowpack.svg b/icons/snowpack.svg index e82a92d2b9..454449d8e0 100644 --- a/icons/snowpack.svg +++ b/icons/snowpack.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/snowpack_light.svg b/icons/snowpack_light.svg index 460a75d476..bb1571ecd7 100644 --- a/icons/snowpack_light.svg +++ b/icons/snowpack_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/snyk.svg b/icons/snyk.svg index bc8cc5075c..c79c147c02 100644 --- a/icons/snyk.svg +++ b/icons/snyk.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/solidity.svg b/icons/solidity.svg index 5319fa2557..6ae9873d84 100644 --- a/icons/solidity.svg +++ b/icons/solidity.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/sonarcloud.svg b/icons/sonarcloud.svg index de265b25c0..7d391339c2 100644 --- a/icons/sonarcloud.svg +++ b/icons/sonarcloud.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/icons/spwn.svg b/icons/spwn.svg new file mode 100644 index 0000000000..08a1394739 --- /dev/null +++ b/icons/spwn.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/stackblitz.svg b/icons/stackblitz.svg new file mode 100644 index 0000000000..f1806a8b28 --- /dev/null +++ b/icons/stackblitz.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/stan.svg b/icons/stan.svg new file mode 100644 index 0000000000..b61fb155e9 --- /dev/null +++ b/icons/stan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/steadybit.svg b/icons/steadybit.svg index c9bba12c2a..84935db3ac 100644 --- a/icons/steadybit.svg +++ b/icons/steadybit.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/stencil.svg b/icons/stencil.svg index a236bf6b03..2cf19f612f 100644 --- a/icons/stencil.svg +++ b/icons/stencil.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/stitches.svg b/icons/stitches.svg index 4e306bbf77..6b1142f924 100644 --- a/icons/stitches.svg +++ b/icons/stitches.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/stitches_light.svg b/icons/stitches_light.svg index 9a904251bb..bd9986d418 100644 --- a/icons/stitches_light.svg +++ b/icons/stitches_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/storybook.svg b/icons/storybook.svg index 09e93a6459..f8fdaa4cf5 100644 --- a/icons/storybook.svg +++ b/icons/storybook.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/stryker.svg b/icons/stryker.svg index a3c53ed21a..69b05e4ab8 100644 --- a/icons/stryker.svg +++ b/icons/stryker.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/stylable.svg b/icons/stylable.svg index 0092435e4e..4be70bb5df 100644 --- a/icons/stylable.svg +++ b/icons/stylable.svg @@ -1,10 +1 @@ - - - 96-logo-horizontal - - - - - - - + \ No newline at end of file diff --git a/icons/stylelint.svg b/icons/stylelint.svg index 24efbc8e8b..9f713428db 100644 --- a/icons/stylelint.svg +++ b/icons/stylelint.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/stylelint_light.svg b/icons/stylelint_light.svg index 86557f4854..f36493ba6d 100644 --- a/icons/stylelint_light.svg +++ b/icons/stylelint_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/stylus.svg b/icons/stylus.svg index b503c6e6d6..ae61b48dda 100644 --- a/icons/stylus.svg +++ b/icons/stylus.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/sublime.svg b/icons/sublime.svg index e206e8e98a..ebb3c9222f 100644 --- a/icons/sublime.svg +++ b/icons/sublime.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/supabase.svg b/icons/supabase.svg index 304874ea82..63f6327a04 100644 --- a/icons/supabase.svg +++ b/icons/supabase.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/icons/svelte.svg b/icons/svelte.svg index f9f2aa7a81..62f2b7b1a7 100644 --- a/icons/svelte.svg +++ b/icons/svelte.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/svg.svg b/icons/svg.svg index f423f2347d..cc9039162a 100644 --- a/icons/svg.svg +++ b/icons/svg.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/svgo.svg b/icons/svgo.svg index 74c10724e2..85c5da2a3e 100644 --- a/icons/svgo.svg +++ b/icons/svgo.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/svgr.svg b/icons/svgr.svg index fba622cbd5..9398528add 100644 --- a/icons/svgr.svg +++ b/icons/svgr.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/swagger.svg b/icons/swagger.svg new file mode 100644 index 0000000000..85ee815911 --- /dev/null +++ b/icons/swagger.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/sway.svg b/icons/sway.svg new file mode 100644 index 0000000000..0d93bbbb1b --- /dev/null +++ b/icons/sway.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/swc.svg b/icons/swc.svg index 533bba083b..2471cb9787 100644 --- a/icons/swc.svg +++ b/icons/swc.svg @@ -1 +1 @@ - \ No newline at end of file +file_type_swc diff --git a/icons/swift.svg b/icons/swift.svg index 214ffd4d95..e485d01729 100644 --- a/icons/swift.svg +++ b/icons/swift.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/syncpack.svg b/icons/syncpack.svg new file mode 100644 index 0000000000..3c4f07c8b5 --- /dev/null +++ b/icons/syncpack.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/systemd.svg b/icons/systemd.svg new file mode 100755 index 0000000000..943b77f266 --- /dev/null +++ b/icons/systemd.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/systemd_light.svg b/icons/systemd_light.svg new file mode 100755 index 0000000000..39e81f63b3 --- /dev/null +++ b/icons/systemd_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/table.svg b/icons/table.svg index 4542be8925..92f46a58a5 100644 --- a/icons/table.svg +++ b/icons/table.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/tailwindcss.svg b/icons/tailwindcss.svg index 7b04eb41cb..31eeb86467 100644 --- a/icons/tailwindcss.svg +++ b/icons/tailwindcss.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/taskfile.svg b/icons/taskfile.svg new file mode 100644 index 0000000000..7da15bf461 --- /dev/null +++ b/icons/taskfile.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/tauri.svg b/icons/tauri.svg index c6ca78ef02..b5fe7d9abb 100644 --- a/icons/tauri.svg +++ b/icons/tauri.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/taze.svg b/icons/taze.svg new file mode 100644 index 0000000000..596b76d904 --- /dev/null +++ b/icons/taze.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/tcl.svg b/icons/tcl.svg index 476195d828..3c196a696d 100644 --- a/icons/tcl.svg +++ b/icons/tcl.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/teal.svg b/icons/teal.svg index 64772b8444..472076333c 100644 --- a/icons/teal.svg +++ b/icons/teal.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/templ.svg b/icons/templ.svg new file mode 100644 index 0000000000..ce385d01cc --- /dev/null +++ b/icons/templ.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/template.svg b/icons/template.svg index bbce608b0f..0698e73159 100644 --- a/icons/template.svg +++ b/icons/template.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/terraform.svg b/icons/terraform.svg index db12eed150..0c2edbc520 100644 --- a/icons/terraform.svg +++ b/icons/terraform.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/test-js.svg b/icons/test-js.svg index 41a94be89f..752b8ffadb 100644 --- a/icons/test-js.svg +++ b/icons/test-js.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/test-jsx.svg b/icons/test-jsx.svg index 246a676a8b..dbcc37aa25 100644 --- a/icons/test-jsx.svg +++ b/icons/test-jsx.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/test-ts.svg b/icons/test-ts.svg index b28c3a0dd6..69ec23374e 100644 --- a/icons/test-ts.svg +++ b/icons/test-ts.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/tex.svg b/icons/tex.svg index ebf9380f74..620c7f7f26 100644 --- a/icons/tex.svg +++ b/icons/tex.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/textlint.svg b/icons/textlint.svg index ff7ac82981..42af68913e 100644 --- a/icons/textlint.svg +++ b/icons/textlint.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/tilt.svg b/icons/tilt.svg index 5bbd954079..d2c8e9ec1f 100644 --- a/icons/tilt.svg +++ b/icons/tilt.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/tldraw.svg b/icons/tldraw.svg index 180c43e4d8..745d1cf3e7 100644 --- a/icons/tldraw.svg +++ b/icons/tldraw.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/icons/tldraw_light.svg b/icons/tldraw_light.svg index 6e43e4abd1..a0150a17ef 100644 --- a/icons/tldraw_light.svg +++ b/icons/tldraw_light.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/icons/tobi.svg b/icons/tobi.svg index 8390aac3c5..1a576a1c33 100644 --- a/icons/tobi.svg +++ b/icons/tobi.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/tobimake.svg b/icons/tobimake.svg index 65b43a3f94..0ba3b3e7f2 100644 --- a/icons/tobimake.svg +++ b/icons/tobimake.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/todo.svg b/icons/todo.svg index a0e6c54bdf..9a5843e687 100644 --- a/icons/todo.svg +++ b/icons/todo.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/travis.svg b/icons/travis.svg index e7d72a0028..059cca151b 100644 --- a/icons/travis.svg +++ b/icons/travis.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/tree.svg b/icons/tree.svg index f0d4d33520..34031ca508 100644 --- a/icons/tree.svg +++ b/icons/tree.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/trigger.svg b/icons/trigger.svg new file mode 100644 index 0000000000..3aa2193fa2 --- /dev/null +++ b/icons/trigger.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/tsconfig.svg b/icons/tsconfig.svg index 1afa498818..817fb8dbe1 100644 --- a/icons/tsconfig.svg +++ b/icons/tsconfig.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/tsil.svg b/icons/tsil.svg new file mode 100644 index 0000000000..261d7cdfec --- /dev/null +++ b/icons/tsil.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/tune.svg b/icons/tune.svg index cd7d1abaa1..ecbde06c6d 100644 --- a/icons/tune.svg +++ b/icons/tune.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/turborepo.svg b/icons/turborepo.svg index f136c154f7..8da0ec5245 100644 --- a/icons/turborepo.svg +++ b/icons/turborepo.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/turborepo_light.svg b/icons/turborepo_light.svg index a8604850a7..c631e25352 100644 --- a/icons/turborepo_light.svg +++ b/icons/turborepo_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/twig.svg b/icons/twig.svg index 631e57d44b..b16b12ccba 100644 --- a/icons/twig.svg +++ b/icons/twig.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/twine.svg b/icons/twine.svg index 94bbfd9215..ac1bc553b1 100644 --- a/icons/twine.svg +++ b/icons/twine.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/typescript-def.svg b/icons/typescript-def.svg index 6812657b2e..cdd898f2af 100644 --- a/icons/typescript-def.svg +++ b/icons/typescript-def.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/typescript.svg b/icons/typescript.svg index c6145d5c05..2fe9ba34cd 100644 --- a/icons/typescript.svg +++ b/icons/typescript.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/typst.svg b/icons/typst.svg index 205068276c..5312f9258a 100644 --- a/icons/typst.svg +++ b/icons/typst.svg @@ -1,2 +1 @@ - - + \ No newline at end of file diff --git a/icons/uml.svg b/icons/uml.svg index 01e5b67182..92eb9c63c3 100644 --- a/icons/uml.svg +++ b/icons/uml.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/uml_light.svg b/icons/uml_light.svg index a55d0d1c45..4efcd6a48e 100644 --- a/icons/uml_light.svg +++ b/icons/uml_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/unocss.svg b/icons/unocss.svg index 6f545e4761..7f281014d2 100644 --- a/icons/unocss.svg +++ b/icons/unocss.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/icons/url.svg b/icons/url.svg index 7dd2a323bb..798c887bc2 100644 --- a/icons/url.svg +++ b/icons/url.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/vagrant.svg b/icons/vagrant.svg index c3a85bc489..78c19f9e70 100644 --- a/icons/vagrant.svg +++ b/icons/vagrant.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/vala.svg b/icons/vala.svg index 4cb27cb620..85fbe68e4d 100644 --- a/icons/vala.svg +++ b/icons/vala.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/vedic.svg b/icons/vedic.svg new file mode 100644 index 0000000000..9ae47a1653 --- /dev/null +++ b/icons/vedic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/velite.svg b/icons/velite.svg new file mode 100644 index 0000000000..5f5aadb5ba --- /dev/null +++ b/icons/velite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/velocity.svg b/icons/velocity.svg index fcb57ce699..00b4aa0edd 100644 --- a/icons/velocity.svg +++ b/icons/velocity.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/vercel.svg b/icons/vercel.svg index c41cbf6804..8ff6e492e2 100644 --- a/icons/vercel.svg +++ b/icons/vercel.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/vercel_light.svg b/icons/vercel_light.svg index b3d3d590d0..314b78cd66 100644 --- a/icons/vercel_light.svg +++ b/icons/vercel_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/verdaccio.svg b/icons/verdaccio.svg index f719d0a33c..3b5f1d4127 100644 --- a/icons/verdaccio.svg +++ b/icons/verdaccio.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/verified.svg b/icons/verified.svg new file mode 100644 index 0000000000..1b9edb227b --- /dev/null +++ b/icons/verified.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/verilog.svg b/icons/verilog.svg index b37ef0cca0..d0b3b9316a 100644 --- a/icons/verilog.svg +++ b/icons/verilog.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/vfl.svg b/icons/vfl.svg index 3057fa03a0..8cce143df5 100644 --- a/icons/vfl.svg +++ b/icons/vfl.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/video.svg b/icons/video.svg index fba4b81b06..2ade126f84 100644 --- a/icons/video.svg +++ b/icons/video.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/vim.svg b/icons/vim.svg index 86f6dfe81f..0a0da99e91 100644 --- a/icons/vim.svg +++ b/icons/vim.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/virtual.svg b/icons/virtual.svg index 5ec9fa692c..0fdb620da5 100644 --- a/icons/virtual.svg +++ b/icons/virtual.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/visualstudio.svg b/icons/visualstudio.svg index 1999166d80..63dec2ea79 100644 --- a/icons/visualstudio.svg +++ b/icons/visualstudio.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/vite.svg b/icons/vite.svg index 18938bbaee..d66cd5e7b8 100644 --- a/icons/vite.svg +++ b/icons/vite.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/vitest.svg b/icons/vitest.svg index 6ad6330b3b..587491e4e9 100644 --- a/icons/vitest.svg +++ b/icons/vitest.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/icons/vlang.svg b/icons/vlang.svg index f3aa4e08fc..42e2398561 100644 --- a/icons/vlang.svg +++ b/icons/vlang.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/vscode.svg b/icons/vscode.svg index 6dd23f396c..fe0e6361c3 100644 --- a/icons/vscode.svg +++ b/icons/vscode.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/vue-config.svg b/icons/vue-config.svg index d661d1343f..bfe01c23ca 100644 --- a/icons/vue-config.svg +++ b/icons/vue-config.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/vue.svg b/icons/vue.svg index 155bbea805..359f899f23 100644 --- a/icons/vue.svg +++ b/icons/vue.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/vuex-store.svg b/icons/vuex-store.svg index a36da45266..c98a851ccd 100644 --- a/icons/vuex-store.svg +++ b/icons/vuex-store.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/wakatime.svg b/icons/wakatime.svg index dc506f18fd..46f503199c 100644 --- a/icons/wakatime.svg +++ b/icons/wakatime.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/wakatime_light.svg b/icons/wakatime_light.svg index 9d2009d12e..e4bf771042 100644 --- a/icons/wakatime_light.svg +++ b/icons/wakatime_light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/wallaby.svg b/icons/wallaby.svg index 504250370c..58c74cb614 100644 --- a/icons/wallaby.svg +++ b/icons/wallaby.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/watchman.svg b/icons/watchman.svg index 4089a8f944..a5e52279f6 100644 --- a/icons/watchman.svg +++ b/icons/watchman.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/webassembly.svg b/icons/webassembly.svg index d727fe6976..69a43aa35e 100644 --- a/icons/webassembly.svg +++ b/icons/webassembly.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/webhint.svg b/icons/webhint.svg index 75412720cc..59e004f553 100644 --- a/icons/webhint.svg +++ b/icons/webhint.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/webpack.svg b/icons/webpack.svg index 24ba1dde19..95c2d4b0eb 100644 --- a/icons/webpack.svg +++ b/icons/webpack.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/wepy.svg b/icons/wepy.svg index fab68bbf81..4c8baef423 100644 --- a/icons/wepy.svg +++ b/icons/wepy.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/werf.svg b/icons/werf.svg index e0a4b1bb3c..8a6323e406 100644 --- a/icons/werf.svg +++ b/icons/werf.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/icons/windicss.svg b/icons/windicss.svg index 35276dd303..4f31c55fae 100644 --- a/icons/windicss.svg +++ b/icons/windicss.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/wolframlanguage.svg b/icons/wolframlanguage.svg index ea646fcceb..2f0b5aa03d 100644 --- a/icons/wolframlanguage.svg +++ b/icons/wolframlanguage.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/word.svg b/icons/word.svg index eee8c68547..a0baf46f5b 100644 --- a/icons/word.svg +++ b/icons/word.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/wxt.svg b/icons/wxt.svg new file mode 100644 index 0000000000..d43b742831 --- /dev/null +++ b/icons/wxt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/xaml.svg b/icons/xaml.svg index 30bf6881d1..ed496af0ab 100644 --- a/icons/xaml.svg +++ b/icons/xaml.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/xml.svg b/icons/xml.svg index b8f41e63b9..ce7ae58c59 100644 --- a/icons/xml.svg +++ b/icons/xml.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/yaml.svg b/icons/yaml.svg index fd5b8c984f..03a8a79790 100644 --- a/icons/yaml.svg +++ b/icons/yaml.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/yang.svg b/icons/yang.svg index 3ace65a239..5574008106 100644 --- a/icons/yang.svg +++ b/icons/yang.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/yarn.svg b/icons/yarn.svg index 413052a956..bf25ad2f74 100644 --- a/icons/yarn.svg +++ b/icons/yarn.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/zeabur.svg b/icons/zeabur.svg new file mode 100644 index 0000000000..37b0ea8b74 --- /dev/null +++ b/icons/zeabur.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/zeabur_light.svg b/icons/zeabur_light.svg new file mode 100644 index 0000000000..0d01f2b1c9 --- /dev/null +++ b/icons/zeabur_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/zig.svg b/icons/zig.svg index 1f23d7fa3b..79c51da958 100644 --- a/icons/zig.svg +++ b/icons/zig.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/icons/zip.svg b/icons/zip.svg index ac0682be48..39db32782d 100644 --- a/icons/zip.svg +++ b/icons/zip.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/images/contributors.png b/images/contributors.png index 89ef37726e..2e4b0420bd 100644 Binary files a/images/contributors.png and b/images/contributors.png differ diff --git a/images/fileIcons.png b/images/fileIcons.png index cdcd36b593..d1a1b30aef 100644 Binary files a/images/fileIcons.png and b/images/fileIcons.png differ diff --git a/images/folderIcons.png b/images/folderIcons.png index 961b0ec305..34dedf59fd 100644 Binary files a/images/folderIcons.png and b/images/folderIcons.png differ diff --git a/images/how-tos/aligned-vs-missaligned.png b/images/how-tos/aligned-vs-missaligned.png new file mode 100644 index 0000000000..43945773ad Binary files /dev/null and b/images/how-tos/aligned-vs-missaligned.png differ diff --git a/images/how-tos/blurry-issue.png b/images/how-tos/blurry-issue.png new file mode 100644 index 0000000000..33120a2865 Binary files /dev/null and b/images/how-tos/blurry-issue.png differ diff --git a/images/how-tos/cloned-file-icons-example.png b/images/how-tos/cloned-file-icons-example.png new file mode 100644 index 0000000000..90278c0a04 Binary files /dev/null and b/images/how-tos/cloned-file-icons-example.png differ diff --git a/images/how-tos/cloned-folder-icons-example.png b/images/how-tos/cloned-folder-icons-example.png new file mode 100644 index 0000000000..18c31b156b Binary files /dev/null and b/images/how-tos/cloned-folder-icons-example.png differ diff --git a/images/how-tos/cloned-icon-no-recolor-result.png b/images/how-tos/cloned-icon-no-recolor-result.png new file mode 100644 index 0000000000..1c0cd3faa0 Binary files /dev/null and b/images/how-tos/cloned-icon-no-recolor-result.png differ diff --git a/images/how-tos/cloned-icon-no-recolor.png b/images/how-tos/cloned-icon-no-recolor.png new file mode 100644 index 0000000000..8adf27214e Binary files /dev/null and b/images/how-tos/cloned-icon-no-recolor.png differ diff --git a/images/how-tos/cloned-rust-icon-example.png b/images/how-tos/cloned-rust-icon-example.png new file mode 100644 index 0000000000..ec96106d69 Binary files /dev/null and b/images/how-tos/cloned-rust-icon-example.png differ diff --git a/images/how-tos/elephant-less-detail.svg b/images/how-tos/elephant-less-detail.svg new file mode 100644 index 0000000000..f414e3f42f --- /dev/null +++ b/images/how-tos/elephant-less-detail.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/images/how-tos/elephant-result.png b/images/how-tos/elephant-result.png new file mode 100644 index 0000000000..706c8d504c Binary files /dev/null and b/images/how-tos/elephant-result.png differ diff --git a/images/how-tos/elephant-too-much-detail.svg b/images/how-tos/elephant-too-much-detail.svg new file mode 100644 index 0000000000..6eff008d0a --- /dev/null +++ b/images/how-tos/elephant-too-much-detail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/how-tos/elephant-with-grid.svg b/images/how-tos/elephant-with-grid.svg new file mode 100644 index 0000000000..3c5a033b43 --- /dev/null +++ b/images/how-tos/elephant-with-grid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/how-tos/folder-icon-parts.png b/images/how-tos/folder-icon-parts.png deleted file mode 100644 index bdd4133422..0000000000 Binary files a/images/how-tos/folder-icon-parts.png and /dev/null differ diff --git a/images/how-tos/folder-icon-parts.svg b/images/how-tos/folder-icon-parts.svg new file mode 100644 index 0000000000..8586783e63 --- /dev/null +++ b/images/how-tos/folder-icon-parts.svg @@ -0,0 +1 @@ +BackgroundMotive \ No newline at end of file diff --git a/images/how-tos/missaligned-icon.svg b/images/how-tos/missaligned-icon.svg new file mode 100644 index 0000000000..ade4f4962e --- /dev/null +++ b/images/how-tos/missaligned-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/how-tos/missaligned-result.svg b/images/how-tos/missaligned-result.svg new file mode 100644 index 0000000000..3c6a03cd26 --- /dev/null +++ b/images/how-tos/missaligned-result.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/how-tos/pixel-perfect-icon.svg b/images/how-tos/pixel-perfect-icon.svg new file mode 100644 index 0000000000..fe85f736c7 --- /dev/null +++ b/images/how-tos/pixel-perfect-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/how-tos/svg-folder-icon-with-correct-colors.png b/images/how-tos/svg-folder-icon-with-correct-colors.png deleted file mode 100644 index f710bc2272..0000000000 Binary files a/images/how-tos/svg-folder-icon-with-correct-colors.png and /dev/null differ diff --git a/images/how-tos/svg-folder-icon-with-correct-colors.svg b/images/how-tos/svg-folder-icon-with-correct-colors.svg new file mode 100644 index 0000000000..a60c71539a --- /dev/null +++ b/images/how-tos/svg-folder-icon-with-correct-colors.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/how-tos/svg-folder-icon-with-wrong-colors.png b/images/how-tos/svg-folder-icon-with-wrong-colors.png deleted file mode 100644 index e2451e53d8..0000000000 Binary files a/images/how-tos/svg-folder-icon-with-wrong-colors.png and /dev/null differ diff --git a/images/how-tos/svg-folder-icon-with-wrong-colors.svg b/images/how-tos/svg-folder-icon-with-wrong-colors.svg new file mode 100644 index 0000000000..56b1494e13 --- /dev/null +++ b/images/how-tos/svg-folder-icon-with-wrong-colors.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/material-colors.yml b/material-colors.yml index 29cca62ecf..4ac97870af 100644 --- a/material-colors.yml +++ b/material-colors.yml @@ -1,3 +1,9 @@ +# This YAML file contains a list of color codes used in the VSCode Material Icon Theme. +# Each color is represented by its hexadecimal code and is categorized by its color name and shade. + +# Note: +# - Black (`#000000`) and White (`#FFFFFF`) cannot not be used. + colors: - '#FFEBEE' # red 50 - '#FFCDD2' # red 100 @@ -253,5 +259,5 @@ colors: - '#455A64' # blue gray 700 - '#37474F' # blue gray 800 - '#263238' # blue gray 900 - - '#000000' # black - - '#FFFFFF' # white +# - '#000000' # black must not be used +# - '#FFFFFF' # white must not be used diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 34d4067679..0000000000 --- a/package-lock.json +++ /dev/null @@ -1,7616 +0,0 @@ -{ - "name": "material-icon-theme", - "version": "4.28.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "material-icon-theme", - "version": "4.28.0", - "dependencies": { - "lodash.merge": "4.6.2" - }, - "devDependencies": { - "@types/glob": "^7.2.0", - "@types/lodash.merge": "^4.6.7", - "@types/mocha": "^9.1.1", - "@types/node": "^17.0.35", - "@types/puppeteer": "^5.4.6", - "@types/vscode": "~1.51.0", - "@typescript-eslint/eslint-plugin": "^5.26.0", - "@typescript-eslint/parser": "^5.26.0", - "changelog-machine": "^1.0.2", - "eslint": "^8.16.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "glob": "^8.0.3", - "mocha": "^10.0.0", - "prettier": "^2.6.2", - "puppeteer": "^14.1.1", - "rimraf": "^3.0.2", - "svgo": "^2.8.0", - "ts-loader": "^9.3.0", - "ts-node": "^10.8.0", - "typescript": "^4.7.2", - "vscode-test": "^1.6.1", - "webpack": "^5.71.1", - "webpack-cli": "^4.9.2" - }, - "engines": { - "vscode": "^1.51.0" - }, - "funding": { - "url": "https://github.com/sponsors/PKief" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", - "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.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" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true - }, - "node_modules/@types/eslint": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.2.tgz", - "integrity": "sha512-Z1nseZON+GEnFjJc04sv4NSALGjhFwy6K0HXt7qsn5ArfAKtb63dXNJHf+1YW6IpOIYRBGUbu3GwJdj8DGnCjA==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "node_modules/@types/lodash": { - "version": "4.14.170", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.170.tgz", - "integrity": "sha512-bpcvu/MKHHeYX+qeEN8GE7DIravODWdACVA1ctevD8CN24RhPZIKMn9ntfAsrvLfSX3cR5RrBKAbYm9bGs0A+Q==", - "dev": true - }, - "node_modules/@types/lodash.merge": { - "version": "4.6.7", - "resolved": "https://registry.npmjs.org/@types/lodash.merge/-/lodash.merge-4.6.7.tgz", - "integrity": "sha512-OwxUJ9E50gw3LnAefSHJPHaBLGEKmQBQ7CZe/xflHkyy/wH2zVyEIAKReHvVrrn7zKdF58p16We9kMfh7v0RRQ==", - "dev": true, - "dependencies": { - "@types/lodash": "*" - } - }, - "node_modules/@types/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", - "dev": true - }, - "node_modules/@types/mocha": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "17.0.35", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.35.tgz", - "integrity": "sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg==", - "dev": true - }, - "node_modules/@types/puppeteer": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-5.4.6.tgz", - "integrity": "sha512-98Kghehs7+/GD9b56qryhqdqVCXUTbetTv3PlvDnmFRTHQH0j9DIp1f7rkAW3BAj4U3yoeSEQnKgdW8bDq0Y0Q==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/vscode": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.51.0.tgz", - "integrity": "sha512-C/jZ35OT5k/rsJyAK8mS1kM++vMcm89oSWegkzxRCvHllIq0cToZAkIDs6eCY4SKrvik3nrhELizyLcM0onbQA==", - "dev": true - }, - "node_modules/@types/yauzl": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", - "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", - "dev": true, - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.26.0.tgz", - "integrity": "sha512-oGCmo0PqnRZZndr+KwvvAUvD3kNE4AfyoGCwOZpoCncSh4MVD06JTE8XQa2u9u+NX5CsyZMBTEc2C72zx38eYA==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.26.0", - "@typescript-eslint/type-utils": "5.26.0", - "@typescript-eslint/utils": "5.26.0", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.26.0.tgz", - "integrity": "sha512-n/IzU87ttzIdnAH5vQ4BBDnLPly7rC5VnjN3m0xBG82HK6rhRxnCb3w/GyWbNDghPd+NktJqB/wl6+YkzZ5T5Q==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.26.0", - "@typescript-eslint/types": "5.26.0", - "@typescript-eslint/typescript-estree": "5.26.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.26.0.tgz", - "integrity": "sha512-gVzTJUESuTwiju/7NiTb4c5oqod8xt5GhMbExKsCTp6adU3mya6AGJ4Pl9xC7x2DX9UYFsjImC0mA62BCY22Iw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.26.0", - "@typescript-eslint/visitor-keys": "5.26.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.26.0.tgz", - "integrity": "sha512-7ccbUVWGLmcRDSA1+ADkDBl5fP87EJt0fnijsMFTVHXKGduYMgienC/i3QwoVhDADUAPoytgjbZbCOMj4TY55A==", - "dev": true, - "dependencies": { - "@typescript-eslint/utils": "5.26.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.26.0.tgz", - "integrity": "sha512-8794JZFE1RN4XaExLWLI2oSXsVImNkl79PzTOOWt9h0UHROwJedNOD2IJyfL0NbddFllcktGIO2aOu10avQQyA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.26.0.tgz", - "integrity": "sha512-EyGpw6eQDsfD6jIqmXP3rU5oHScZ51tL/cZgFbFBvWuCwrIptl+oueUZzSmLtxFuSOQ9vDcJIs+279gnJkfd1w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.26.0", - "@typescript-eslint/visitor-keys": "5.26.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.26.0.tgz", - "integrity": "sha512-PJFwcTq2Pt4AMOKfe3zQOdez6InIDOjUJJD3v3LyEtxHGVVRK3Vo7Dd923t/4M9hSH2q2CLvcTdxlLPjcIk3eg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.26.0", - "@typescript-eslint/types": "5.26.0", - "@typescript-eslint/typescript-estree": "5.26.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.26.0.tgz", - "integrity": "sha512-wei+ffqHanYDOQgg/fS6Hcar6wAWv0CUPQ3TZzOWd2BLfgP539rb49bwua8WRAs7R6kOSLn82rfEu2ro6Llt8Q==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.26.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webpack-cli/configtest": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz", - "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", - "dev": true, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x", - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz", - "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==", - "dev": true, - "dependencies": { - "envinfo": "^7.7.3" - }, - "peerDependencies": { - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz", - "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", - "dev": true, - "peerDependencies": { - "webpack-cli": "4.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.1.tgz", - "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", - "dev": true, - "dependencies": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", - "dev": true - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dev": true, - "dependencies": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/buffer-indexof-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", - "dev": true, - "engines": { - "node": ">=0.2.0" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001228", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz", - "integrity": "sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "dev": true, - "dependencies": { - "traverse": ">=0.3.0 <0.4" - } - }, - "node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/changelog-machine": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/changelog-machine/-/changelog-machine-1.0.2.tgz", - "integrity": "sha512-K0STPa8ZHuRKt27lseCGIf3BBAIPV6nSjOuJ31+xttFQx2iE4dGd1lbc2IBbTLRe0KJeitZEbBI75EUjHn/X/Q==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "changelog-machine": "bin/cli.js" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "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" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dev": true, - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "node_modules/devtools-protocol": { - "version": "0.0.982423", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.982423.tgz", - "integrity": "sha512-FnVW2nDbjGNw1uD/JRC+9U5768W7e1TfUwqbDTcSsAu1jXFjITSX8w3rkW5FEpHRMPPGpvNSmO1pOpqByiWscA==", - "dev": true - }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", - "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", - "dev": true, - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/duplexer2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/duplexer2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/duplexer2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.3.736", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.736.tgz", - "integrity": "sha512-DY8dA7gR51MSo66DqitEQoUMQ0Z+A2DSXFi7tK304bdTVqczCAfUuyQw6Wdg8hIoo5zIxkU1L24RQtUce1Ioig==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.16.0.tgz", - "integrity": "sha512-MBndsoXY/PeVTDJeWsYj7kLZ5hQpJOfMYLsF6LicLHQWbRDG19lK5jOix4DPl8yY4SUFcE3txy86OzFLWT+yoA==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", - "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", - "dev": true, - "dependencies": { - "acorn": "^8.7.1", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", - "dev": true - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/fstream/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "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" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fstream/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-worker": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz", - "integrity": "sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", - "dev": true - }, - "node_modules/loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", - "dev": true, - "dependencies": { - "mime-db": "1.47.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "node_modules/mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", - "dev": true, - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-releases": { - "version": "1.1.72", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", - "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", - "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/puppeteer": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-14.1.1.tgz", - "integrity": "sha512-4dC6GYR5YlXTmNO3TbYEHTdVSdml1cVD2Ok/h/f/xSTp4ITVdbRWkMjiOaEKRAhtIl6GqaP7B89zx+hfhcNGMQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.982423", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "pkg-dir": "4.2.0", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "rimraf": "3.0.2", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.6.0" - }, - "engines": { - "node": ">=14.1.0" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", - "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", - "dev": true, - "dependencies": { - "resolve": "^1.9.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "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" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dev": true, - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", - "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", - "dev": true, - "dependencies": { - "jest-worker": "^27.0.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "dev": true - }, - "node_modules/traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", - "dev": true - }, - "node_modules/ts-loader": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.3.0.tgz", - "integrity": "sha512-2kLLAdAD+FCKijvGKi9sS0OzoqxLCF3CxHpok7rVgCZ5UldRzH0TkbwG9XECKjBzHsAewntC5oDaI/FwKzEUog==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "typescript": "*", - "webpack": "^5.0.0" - } - }, - "node_modules/ts-node": { - "version": "10.8.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.0.tgz", - "integrity": "sha512-/fNd5Qh+zTt8Vt1KbYZjRHCE9sI5i7nqfD/dzBBRDeVXZXS6kToW6R7tTU6Nd4XavFs0mAVCg29Q//ML7WsZYA==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.2.tgz", - "integrity": "sha512-Mamb1iX2FDUpcTRzltPxgWMKy3fhg0TN378ylbktPGPK/99KbDtMQ4W1hwgsbPAsG3a0xKa1vmw4VKZQbkvz5A==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, - "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "node_modules/unzipper": { - "version": "0.10.11", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", - "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", - "dev": true, - "dependencies": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "^1.0.12", - "graceful-fs": "^4.2.2", - "listenercount": "~1.0.1", - "readable-stream": "~2.3.6", - "setimmediate": "~1.0.4" - } - }, - "node_modules/unzipper/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/unzipper/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/unzipper/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/vscode-test": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.6.1.tgz", - "integrity": "sha512-086q88T2ca1k95mUzffvbzb7esqQNvJgiwY4h29ukPhFo8u+vXOOmelUoU5EQUHs3Of8+JuQ3oGdbVCqaxuTXA==", - "dev": true, - "dependencies": { - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "rimraf": "^3.0.2", - "unzipper": "^0.10.11" - }, - "engines": { - "node": ">=8.9.3" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", - "dev": true - }, - "node_modules/webpack": { - "version": "5.76.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.0.tgz", - "integrity": "sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "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.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz", - "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.1.1", - "@webpack-cli/info": "^1.4.1", - "@webpack-cli/serve": "^1.6.1", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "execa": "^5.0.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "@webpack-cli/migrate": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", - "dev": true - }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-merge": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", - "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/acorn-import-assertions": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.7.6.tgz", - "integrity": "sha512-FlVvVFA1TX6l3lp8VjDnYYq7R1nyW6x3svAt4nDgrWQ9SBaSh9CnbwgSUTasgfNfOG5HlM1ehugCvM+hjo56LA==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/ws": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.6.0.tgz", - "integrity": "sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } - }, - "@discoveryjs/json-ext": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", - "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.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" - } - }, - "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true - }, - "@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true - }, - "@types/eslint": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.2.tgz", - "integrity": "sha512-Z1nseZON+GEnFjJc04sv4NSALGjhFwy6K0HXt7qsn5ArfAKtb63dXNJHf+1YW6IpOIYRBGUbu3GwJdj8DGnCjA==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "@types/lodash": { - "version": "4.14.170", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.170.tgz", - "integrity": "sha512-bpcvu/MKHHeYX+qeEN8GE7DIravODWdACVA1ctevD8CN24RhPZIKMn9ntfAsrvLfSX3cR5RrBKAbYm9bGs0A+Q==", - "dev": true - }, - "@types/lodash.merge": { - "version": "4.6.7", - "resolved": "https://registry.npmjs.org/@types/lodash.merge/-/lodash.merge-4.6.7.tgz", - "integrity": "sha512-OwxUJ9E50gw3LnAefSHJPHaBLGEKmQBQ7CZe/xflHkyy/wH2zVyEIAKReHvVrrn7zKdF58p16We9kMfh7v0RRQ==", - "dev": true, - "requires": { - "@types/lodash": "*" - } - }, - "@types/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", - "dev": true - }, - "@types/mocha": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", - "dev": true - }, - "@types/node": { - "version": "17.0.35", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.35.tgz", - "integrity": "sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg==", - "dev": true - }, - "@types/puppeteer": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-5.4.6.tgz", - "integrity": "sha512-98Kghehs7+/GD9b56qryhqdqVCXUTbetTv3PlvDnmFRTHQH0j9DIp1f7rkAW3BAj4U3yoeSEQnKgdW8bDq0Y0Q==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/vscode": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.51.0.tgz", - "integrity": "sha512-C/jZ35OT5k/rsJyAK8mS1kM++vMcm89oSWegkzxRCvHllIq0cToZAkIDs6eCY4SKrvik3nrhELizyLcM0onbQA==", - "dev": true - }, - "@types/yauzl": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", - "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", - "dev": true, - "optional": true, - "requires": { - "@types/node": "*" - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.26.0.tgz", - "integrity": "sha512-oGCmo0PqnRZZndr+KwvvAUvD3kNE4AfyoGCwOZpoCncSh4MVD06JTE8XQa2u9u+NX5CsyZMBTEc2C72zx38eYA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.26.0", - "@typescript-eslint/type-utils": "5.26.0", - "@typescript-eslint/utils": "5.26.0", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.26.0.tgz", - "integrity": "sha512-n/IzU87ttzIdnAH5vQ4BBDnLPly7rC5VnjN3m0xBG82HK6rhRxnCb3w/GyWbNDghPd+NktJqB/wl6+YkzZ5T5Q==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.26.0", - "@typescript-eslint/types": "5.26.0", - "@typescript-eslint/typescript-estree": "5.26.0", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.26.0.tgz", - "integrity": "sha512-gVzTJUESuTwiju/7NiTb4c5oqod8xt5GhMbExKsCTp6adU3mya6AGJ4Pl9xC7x2DX9UYFsjImC0mA62BCY22Iw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.26.0", - "@typescript-eslint/visitor-keys": "5.26.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.26.0.tgz", - "integrity": "sha512-7ccbUVWGLmcRDSA1+ADkDBl5fP87EJt0fnijsMFTVHXKGduYMgienC/i3QwoVhDADUAPoytgjbZbCOMj4TY55A==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "5.26.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.26.0.tgz", - "integrity": "sha512-8794JZFE1RN4XaExLWLI2oSXsVImNkl79PzTOOWt9h0UHROwJedNOD2IJyfL0NbddFllcktGIO2aOu10avQQyA==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.26.0.tgz", - "integrity": "sha512-EyGpw6eQDsfD6jIqmXP3rU5oHScZ51tL/cZgFbFBvWuCwrIptl+oueUZzSmLtxFuSOQ9vDcJIs+279gnJkfd1w==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.26.0", - "@typescript-eslint/visitor-keys": "5.26.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": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.26.0.tgz", - "integrity": "sha512-PJFwcTq2Pt4AMOKfe3zQOdez6InIDOjUJJD3v3LyEtxHGVVRK3Vo7Dd923t/4M9hSH2q2CLvcTdxlLPjcIk3eg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.26.0", - "@typescript-eslint/types": "5.26.0", - "@typescript-eslint/typescript-estree": "5.26.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.26.0.tgz", - "integrity": "sha512-wei+ffqHanYDOQgg/fS6Hcar6wAWv0CUPQ3TZzOWd2BLfgP539rb49bwua8WRAs7R6kOSLn82rfEu2ro6Llt8Q==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.26.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webpack-cli/configtest": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz", - "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", - "dev": true, - "requires": {} - }, - "@webpack-cli/info": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz", - "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==", - "dev": true, - "requires": { - "envinfo": "^7.7.3" - } - }, - "@webpack-cli/serve": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz", - "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", - "dev": true, - "requires": {} - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.1.tgz", - "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", - "dev": true - }, - "binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", - "dev": true, - "requires": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", - "dev": true - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-indexof-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", - "dev": true - }, - "buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", - "dev": true - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001228", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz", - "integrity": "sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==", - "dev": true - }, - "chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "dev": true, - "requires": { - "traverse": ">=0.3.0 <0.4" - } - }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "changelog-machine": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/changelog-machine/-/changelog-machine-1.0.2.tgz", - "integrity": "sha512-K0STPa8ZHuRKt27lseCGIf3BBAIPV6nSjOuJ31+xttFQx2iE4dGd1lbc2IBbTLRe0KJeitZEbBI75EUjHn/X/Q==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.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" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dev": true, - "requires": { - "node-fetch": "2.6.7" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - } - }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", - "dev": true - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "requires": { - "css-tree": "^1.1.2" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "devtools-protocol": { - "version": "0.0.982423", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.982423.tgz", - "integrity": "sha512-FnVW2nDbjGNw1uD/JRC+9U5768W7e1TfUwqbDTcSsAu1jXFjITSX8w3rkW5FEpHRMPPGpvNSmO1pOpqByiWscA==", - "dev": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true - }, - "domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", - "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "electron-to-chromium": { - "version": "1.3.736", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.736.tgz", - "integrity": "sha512-DY8dA7gR51MSo66DqitEQoUMQ0Z+A2DSXFi7tK304bdTVqczCAfUuyQw6Wdg8hIoo5zIxkU1L24RQtUce1Ioig==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.16.0.tgz", - "integrity": "sha512-MBndsoXY/PeVTDJeWsYj7kLZ5hQpJOfMYLsF6LicLHQWbRDG19lK5jOix4DPl8yY4SUFcE3txy86OzFLWT+yoA==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - } - } - }, - "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true, - "requires": {} - }, - "eslint-plugin-prettier": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", - "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", - "dev": true, - "requires": { - "acorn": "^8.7.1", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "dependencies": { - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - } - } - }, - "extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", - "dev": true - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "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" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "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": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "jest-worker": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz", - "integrity": "sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", - "dev": true - }, - "loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "dev": true - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", - "dev": true - }, - "mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", - "dev": true, - "requires": { - "mime-db": "1.47.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-releases": { - "version": "1.1.72", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", - "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", - "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "puppeteer": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-14.1.1.tgz", - "integrity": "sha512-4dC6GYR5YlXTmNO3TbYEHTdVSdml1cVD2Ok/h/f/xSTp4ITVdbRWkMjiOaEKRAhtIl6GqaP7B89zx+hfhcNGMQ==", - "dev": true, - "requires": { - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.982423", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "pkg-dir": "4.2.0", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "rimraf": "3.0.2", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.6.0" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "rechoir": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", - "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", - "dev": true, - "requires": { - "resolve": "^1.9.0" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "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" - } - } - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dev": true, - "requires": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - } - } - }, - "tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", - "dev": true - }, - "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - }, - "terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - } - }, - "terser-webpack-plugin": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", - "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", - "dev": true, - "requires": { - "jest-worker": "^27.0.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.0" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "dev": true - }, - "traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", - "dev": true - }, - "ts-loader": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.3.0.tgz", - "integrity": "sha512-2kLLAdAD+FCKijvGKi9sS0OzoqxLCF3CxHpok7rVgCZ5UldRzH0TkbwG9XECKjBzHsAewntC5oDaI/FwKzEUog==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - } - }, - "ts-node": { - "version": "10.8.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.0.tgz", - "integrity": "sha512-/fNd5Qh+zTt8Vt1KbYZjRHCE9sI5i7nqfD/dzBBRDeVXZXS6kToW6R7tTU6Nd4XavFs0mAVCg29Q//ML7WsZYA==", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - } - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typescript": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.2.tgz", - "integrity": "sha512-Mamb1iX2FDUpcTRzltPxgWMKy3fhg0TN378ylbktPGPK/99KbDtMQ4W1hwgsbPAsG3a0xKa1vmw4VKZQbkvz5A==", - "dev": true - }, - "unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, - "requires": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "unzipper": { - "version": "0.10.11", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", - "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", - "dev": true, - "requires": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "^1.0.12", - "graceful-fs": "^4.2.2", - "listenercount": "~1.0.1", - "readable-stream": "~2.3.6", - "setimmediate": "~1.0.4" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "vscode-test": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.6.1.tgz", - "integrity": "sha512-086q88T2ca1k95mUzffvbzb7esqQNvJgiwY4h29ukPhFo8u+vXOOmelUoU5EQUHs3Of8+JuQ3oGdbVCqaxuTXA==", - "dev": true, - "requires": { - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "rimraf": "^3.0.2", - "unzipper": "^0.10.11" - } - }, - "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", - "dev": true - }, - "webpack": { - "version": "5.76.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.0.tgz", - "integrity": "sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "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.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "dependencies": { - "acorn-import-assertions": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.7.6.tgz", - "integrity": "sha512-FlVvVFA1TX6l3lp8VjDnYYq7R1nyW6x3svAt4nDgrWQ9SBaSh9CnbwgSUTasgfNfOG5HlM1ehugCvM+hjo56LA==", - "dev": true, - "requires": {} - } - } - }, - "webpack-cli": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz", - "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==", - "dev": true, - "requires": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.1.1", - "@webpack-cli/info": "^1.4.1", - "@webpack-cli/serve": "^1.6.1", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "execa": "^5.0.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "dependencies": { - "colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", - "dev": true - }, - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - } - } - }, - "webpack-merge": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", - "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "ws": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.6.0.tgz", - "integrity": "sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==", - "dev": true, - "requires": {} - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} diff --git a/package.json b/package.json index 5052cafd37..63ccfb830a 100644 --- a/package.json +++ b/package.json @@ -2,49 +2,53 @@ "name": "material-icon-theme", "displayName": "Material Icon Theme", "description": "Material Design Icons for Visual Studio Code", - "version": "4.28.0", + "version": "5.12.0", + "license": "MIT", "scripts": { - "build": "npm run compile:dev && npm run generateJson", - "check": "ts-node ./src/scripts/icons/checks", - "compile": "webpack --config ./build/webpack.config.js --mode production", - "compile:dev": "webpack --config ./build/webpack.config.js --mode none", - "compile:watch": "webpack --config ./build/webpack.config.js --mode none --watch", - "compile-web": "webpack --config ./build/web-extension.webpack.config.js", - "watch-web": "webpack --watch --config ./build/web-extension.webpack.config.js", - "package-web": "webpack --mode production --devtool hidden-source-map --config ./build/web-extension.webpack.config.js", - "contributors": "ts-node ./src/scripts/contributors/index.ts", - "generateJson": "ts-node ./src/scripts/icons/generateJson.ts", - "lint": "eslint -c .eslintrc.json --ext .ts ./src/**/*.ts", - "postcompile": "npm run generateJson && npm run check", - "pretest": "npm run build && tsc -p ./", - "preview": "ts-node ./src/scripts/preview", + "precompile": "rimraf dist && bun run verify", + "compile": "tsc -p ./", + "compile:declarations": "tsc -p ./tsconfig.declarations.json", + "postcompile": "bun run compile:declarations && bun run generateJson && bun run generateClones && bun run check", + "build": "bun run compile && bun ./build/build-with-esbuild.ts", + "watch": "bun ./build/watch-with-esbuild.ts", + "changelog": "changelog-machine --config ./changelog.config.json", + "check-colors": "bun ./src/scripts/svg/checkSvgColors.ts", + "check": "bun ./src/scripts/icons/checks/run.ts", + "contributors": "bun ./src/scripts/contributors/contributors.ts", + "generateJson": "bun ./src/scripts/icons/generateJson.ts > ./dist/material-icons.json", + "generateClones": "bun ./src/scripts/icons/generateClones.ts", + "lint": "biome check --write ./src", + "format": "biome format --write ./src", + "preversion": "bun run contributors && bun run preview && bun run svgo && git add images/*.png icons/*.svg", + "preview": "bun ./src/scripts/preview/run.ts", "svgo": "svgo -i icons -o icons -q", - "test": "node ./out/test/runTest.js", - "changelog": "changelog-machine --config changelog.config.json", - "preversion": "npm run contributors && git add images/contributors.png && npm run preview && git add images/fileIcons.png && git add images/folderIcons.png", - "version": "npm run changelog && git add CHANGELOG.md", - "vscode:prepublish": "npm run lint && npm run compile && npm run package-web" + "test": "bun test", + "version": "bun run changelog && git add CHANGELOG.md", + "vscode:prepublish": "bun run lint && bun run build", + "verify": "sheriff verify", + "prepublishOnly": "bun ./src/scripts/module/prepare.ts", + "postpublish": "git checkout package.json && git checkout README.md" }, "publisher": "PKief", "author": { "name": "Philipp Kief", "email": "philipp.kief@gmx.de", - "url": "https://pkief.github.io" + "url": "https://pkief.com" }, "funding": "https://github.com/sponsors/PKief", "sponsor": { "url": "https://github.com/sponsors/PKief" }, "engines": { - "vscode": "^1.51.0" + "vscode": "^1.55.0" }, - "homepage": "https://github.com/PKief/vscode-material-icon-theme/blob/main/README.md", + "homepage": "https://github.com/material-extensions/vscode-material-icon-theme/blob/main/README.md", "repository": { "type": "git", - "url": "https://github.com/PKief/vscode-material-icon-theme.git" + "url": "git+https://github.com/material-extensions/vscode-material-icon-theme.git" }, "bugs": { - "url": "https://github.com/PKief/vscode-material-icon-theme/issues" + "url": "https://github.com/material-extensions/vscode-material-icon-theme/issues" }, "icon": "logo.png", "galleryBanner": { @@ -74,13 +78,11 @@ "activationEvents": [ "onStartupFinished" ], - "main": "./dist/extension", - "browser": "./dist/web/extension.js", + "main": "./dist/extension/desktop/extension.cjs", + "browser": "./dist/extension/web/extension.cjs", + "module": "./dist/module/index.cjs", + "types": "./dist/types/module/index.d.ts", "sideEffects": false, - "files": [ - "icons", - "dist/material-icons.json" - ], "contributes": { "iconThemes": [ { @@ -188,6 +190,113 @@ "default": {}, "description": "%configuration.languages.associations%" }, + "material-icon-theme.files.customClones": { + "type": "array", + "default": [], + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "%configuration.customClones.name%" + }, + "base": { + "type": "string", + "description": "%configuration.customClones.base%" + }, + "color": { + "type": "string", + "description": "%configuration.customClones.color%" + }, + "lightColor": { + "type": "string", + "description": "%configuration.customClones.lightColor%" + }, + "fileNames": { + "type": "array", + "default": [], + "description": "%configuration.customClones.fileNames%", + "items": { + "type": "string" + } + }, + "fileExtensions": { + "type": "array", + "default": [], + "description": "%configuration.customClones.fileExtensions%", + "items": { + "type": "string" + } + }, + "activeForPacks": { + "type": "array", + "default": [ + "angular" + ], + "description": "%configuration.customClones.activeForPacks%", + "items": { + "type": "string", + "enumDescriptions": [ + "%configuration.activeIconPack.angular%", + "%configuration.activeIconPack.angular_ngrx%", + "%configuration.activeIconPack.react%", + "%configuration.activeIconPack.react_redux%", + "%configuration.activeIconPack.qwik%", + "%configuration.activeIconPack.vue%", + "%configuration.activeIconPack.vue_vuex%", + "%configuration.activeIconPack.nest%", + "%configuration.activeIconPack.none%" + ], + "enum": [ + "angular", + "angular_ngrx", + "react", + "react_redux", + "qwik", + "vue", + "vue_vuex", + "nest", + "none" + ] + } + } + } + }, + "description": "%configuration.customClones%" + }, + "material-icon-theme.folders.customClones": { + "type": "array", + "default": [], + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "%configuration.customClones.name%" + }, + "base": { + "type": "string", + "description": "%configuration.customClones.base%" + }, + "color": { + "type": "string", + "description": "%configuration.customClones.color%" + }, + "lightColor": { + "type": "string", + "description": "%configuration.customClones.lightColor%" + }, + "folderNames": { + "type": "array", + "description": "%configuration.customClones.folderNames%", + "items": { + "type": "string" + } + } + } + }, + "description": "%configuration.customClones%" + }, "material-icon-theme.folders.theme": { "type": "string", "default": "specific", @@ -233,37 +342,45 @@ "minimum": 0, "maximum": 1, "description": "%configuration.saturation%" + }, + "material-icon-theme.enableLogging": { + "type": "boolean", + "default": false, + "description": "%configuration.enableLogging%" + }, + "material-icon-theme.logLevel": { + "type": "string", + "default": "info", + "enum": [ + "info", + "error", + "debug" + ], + "description": "%configuration.logLevel%" } } } }, "dependencies": { - "lodash.merge": "4.6.2" + "chroma-js": "^2.4.2", + "fast-deep-equal": "^3.1.3", + "svgson": "^5.3.1", + "events": "^3.3.0" }, "devDependencies": { - "@types/glob": "^7.2.0", - "@types/lodash.merge": "^4.6.7", - "@types/mocha": "^9.1.1", - "@types/node": "^17.0.35", - "@types/puppeteer": "^5.4.6", - "@types/vscode": "~1.51.0", - "@typescript-eslint/eslint-plugin": "^5.26.0", - "@typescript-eslint/parser": "^5.26.0", - "changelog-machine": "^1.0.2", - "eslint": "^8.16.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "glob": "^8.0.3", - "mocha": "^10.0.0", - "prettier": "^2.6.2", - "puppeteer": "^14.1.1", - "rimraf": "^3.0.2", + "@biomejs/biome": "1.8.2", + "@softarc/sheriff-core": "^0.15.1", + "@types/chroma-js": "^2.4.4", + "@types/puppeteer": "^5.4.7", + "@types/vscode": "~1.55.0", + "axios": "^1.7.2", + "bun-types": "^1.1.20", + "changelog-machine": "^1.1.0", + "esbuild": "^0.21.5", + "puppeteer": "^22.13.1", + "rimraf": "^6.0.1", + "svg-color-linter": "^1.4.0", "svgo": "^2.8.0", - "ts-loader": "^9.3.0", - "ts-node": "^10.8.0", - "typescript": "^4.7.2", - "vscode-test": "^1.6.1", - "webpack": "^5.71.1", - "webpack-cli": "^4.9.2" + "typescript": "^5.5.4" } } diff --git a/package.nls.cs.json b/package.nls.cs.json new file mode 100644 index 0000000000..76e7c04b2e --- /dev/null +++ b/package.nls.cs.json @@ -0,0 +1,35 @@ +{ + "command.activateIcons": "Material Icons: Aktivovat tรฉma ikon", + "command.toggleIconPacks": "Material Icons: Konfigurace sad ikon", + "command.changeFolderTheme": "Material Icons: Zmฤ›nit motiv sloลพky", + "command.changeFolderColor": "Material Icons: Zmฤ›nit barvu sloลพky", + "command.changeFileColor": "Material Icons: Zmฤ›nit barvu souboru", + "command.restoreDefaultConfig": "Material Icons: Obnovit vรฝchozรญ konfiguraci", + "command.toggleExplorerArrows": "Material Icons: Pล™epnout ลกipky Prลฏzkumnรญka", + "command.changeOpacity": "Material Icons: Zmฤ›nit prลฏhlednost", + "command.toggleGrayscale": "Material Icons: Pล™epnout odstรญny ลกedรฉ", + "command.changeSaturation": "Material Icons: Zmฤ›nit saturaci", + "configuration.title": "Material Icons", + "configuration.files.associations": "Nastavit vlastnรญ pล™idruลพenรญ ikony souboru.", + "configuration.folders.associations": "Nastavit vlastnรญ pล™idruลพenรญ ikony sloลพky.", + "configuration.languages.associations": "Nastavit vlastnรญ pล™idruลพenรญ ikon jazyka.", + "configuration.activeIconPack": "Vybrat sadu ikon, kterรก povoluje konkrรฉtnรญ ikony.", + "configuration.activeIconPack.angular": "Ikony pro Angular.", + "configuration.activeIconPack.angular_ngrx": "Ikony pro Angular a ngrx.", + "configuration.activeIconPack.react": "Ikony pro React.", + "configuration.activeIconPack.react_redux": "Ikony pro React a Redux.", + "configuration.activeIconPack.qwik": "Ikony pro Qwik.", + "configuration.activeIconPack.vue": "Ikony pro Vue.", + "configuration.activeIconPack.vue_vuex": "Ikony pro Vue a Vuex.", + "configuration.activeIconPack.nest": "Ikony pro NestJS.", + "configuration.activeIconPack.none": "Nenรญ povolena ลพรกdnรก sada ikon.", + "configuration.folders.theme": "Nastavit typ ikon sloลพek.", + "configuration.folders.theme.specific": "Vybrat ikony konkrรฉtnรญ sloลพky.", + "configuration.folders.theme.classic": "Vybrat klasickรฉ ikony sloลพek.", + "configuration.folders.theme.none": "ลฝรกdnรฉ ikony sloลพek.", + "configuration.folders.color": "Zmฤ›nit barvu ikon sloลพek.", + "configuration.files.color": "Zmฤ›nit barvu ikon souborลฏ.", + "configuration.hidesExplorerArrows": "Pล™ed sloลพkou skrรฝt ลกipky prลฏzkumnรญka.", + "configuration.opacity": "Zmฤ›nit prลฏhlednost ikon.", + "configuration.saturation": "Zmฤ›nit saturaci ikon." +} diff --git a/package.nls.es.json b/package.nls.es.json index e2f54257b6..b80f4790c6 100644 --- a/package.nls.es.json +++ b/package.nls.es.json @@ -3,14 +3,25 @@ "command.toggleIconPacks": "Material Icons: Configurar paquetes de iconos", "command.changeFolderTheme": "Material Icons: Personalizar iconos de carpetas", "command.changeFolderColor": "Material Icons: Cambiar color de carpeta", + "command.changeFileColor": "Material Icons: Cambiar color del archivo", "command.restoreDefaultConfig": "Material Icons: Restaurar la configuraciรณn predeterminada", "command.toggleExplorerArrows": "Material Icons: Deshabilitar flechas delante de carpetas", "command.changeOpacity": "Material Icons: Cambiar la opacidad", + "command.toggleGrayscale": "Material Icons: Alternar la escala de grises", + "command.changeSaturation": "Material Icons: Cambiar saturaciรณn", "configuration.title": "Material Icons", "configuration.files.associations": "Configurar asociaciones personalizadas de iconos de archivos.", "configuration.folders.associations": "Configurar asociaciones personalizadas de iconos de carpetas.", "configuration.languages.associations": "Configurar asociaciones personalizadas de iconos de idioma.", - "configuration.activeIconPack": "Seleccione un paquete de iconos que permita iconos especรญficos.", + "configuration.customClones": "Clonar cualquier icono existente y crear uno nuevo con colores y asociaciones personalizadas", + "configuration.customClones.base": "Icono usado como base para crear el icono clonado personalizado", + "configuration.customClones.name": "Nombre del icono personalizado", + "configuration.customClones.color": "Color usado como base para recolorear el icono", + "configuration.customClones.lightColor": "Color usado como base para recolorear el icono cuando el tema es claro", + "configuration.customClones.fileNames": "Nombres de archivo para asociar con el icono personalizado", + "configuration.customClones.fileExtensions": "Extensiones de archivo para asociar con el icono personalizado", + "configuration.customClones.folderNames": "Nombres de carpeta para asociar con el icono personalizado", + "configuration.activeIconPack": "Seleccionar un paquete de iconos que permita iconos especรญficos.", "configuration.activeIconPack.angular": "Iconos de Angular.", "configuration.activeIconPack.angular_ngrx": "Iconos de Angular y ngrx.", "configuration.activeIconPack.react": "Iconos de React.", @@ -20,11 +31,13 @@ "configuration.activeIconPack.vue_vuex": "Iconos de Vue y Vuex.", "configuration.activeIconPack.nest": "Iconos de NestJS.", "configuration.activeIconPack.none": "No hay ningรบn paquete de iconos activo.", - "configuration.folders.theme": "Seleccione el tipo de iconos de carpeta.", - "configuration.folders.theme.specific": "Seleccione iconos de carpeta especรญficos.", - "configuration.folders.theme.classic": "Seleccione iconos de carpetas clรกsicas.", + "configuration.folders.theme": "Seleccionar el tipo de iconos de carpeta.", + "configuration.folders.theme.specific": "Seleccionar iconos de carpeta especรญficos.", + "configuration.folders.theme.classic": "Seleccionar iconos de carpetas clรกsicas.", "configuration.folders.theme.none": "Sin iconos de carpeta.", - "configuration.folders.color": "Cambia el color de las carpetas.", + "configuration.folders.color": "Cambiar el color de las carpetas.", + "configuration.files.color": "Cambiar el color de los iconos de archivos.", "configuration.hidesExplorerArrows": "Deshabilitar flechas delante de carpetas.", - "configuration.opacity": "Cambia la opacidad de los iconos." + "configuration.opacity": "Cambiar la opacidad de los iconos.", + "configuration.saturation": "Cambiar la saturaciรณn de los iconos." } diff --git a/package.nls.id.json b/package.nls.id.json new file mode 100644 index 0000000000..0ffd516c33 --- /dev/null +++ b/package.nls.id.json @@ -0,0 +1,46 @@ +{ + "command.activateIcons": "Material Icons: Aktifkan Tema Ikon", + "command.toggleIconPacks": "Material Icons: Konfigurasi Paket Ikon", + "command.changeFolderTheme": "Material Icons: Ubah Tema Folder", + "command.changeFolderColor": "Material Icons: Ubah Warna Folder", + "command.changeFileColor": "Material Icons: Ubah Warna File", + "command.restoreDefaultConfig": "Material Icons: Pulihkan Konfigurasi Default", + "command.toggleExplorerArrows": "Material Icons: Alihkan Panah Explorer", + "command.changeOpacity": "Material Icons: Ubah Opasitas", + "command.toggleGrayscale": "Material Icons: Alihkan Grayscale", + "command.changeSaturation": "Material Icons: Ubah Saturasi", + "configuration.title": "Material Icons", + "configuration.files.associations": "Tetapkan asosiasi ikon file kustom.", + "configuration.folders.associations": "Tetapkan asosiasi ikon folder kustom.", + "configuration.languages.associations": "Tetapkan asosiasi ikon bahasa kustom.", + "configuration.customClones": "Klon ikon yang ada dan buat yang baru dengan warna dan asosiasi kustom", + "configuration.customClones.base": "Ikon yang digunakan sebagai dasar untuk membuat ikon klon kustom", + "configuration.customClones.name": "Nama ikon kustom", + "configuration.customClones.color": "Warna yang digunakan sebagai dasar untuk mengubah warna ikon", + "configuration.customClones.lightColor": "Warna yang digunakan sebagai dasar untuk mengubah warna ikon ketika tema terang", + "configuration.customClones.fileNames": "Nama file yang akan diasosiasikan dengan ikon kustom", + "configuration.customClones.fileExtensions": "Ekstensi file yang akan diasosiasikan dengan ikon kustom", + "configuration.customClones.folderNames": "Nama folder yang akan diasosiasikan dengan ikon kustom", + "configuration.customClones.activeForPacks": "Hanya buat klon ini ketika paket ikon aktif adalah salah satu dari ini.", + "configuration.activeIconPack": "Pilih paket ikon yang mengaktifkan ikon tertentu.", + "configuration.activeIconPack.angular": "Ikon untuk Angular.", + "configuration.activeIconPack.angular_ngrx": "Ikon untuk Angular dan ngrx.", + "configuration.activeIconPack.react": "Ikon untuk React.", + "configuration.activeIconPack.react_redux": "Ikon untuk React dan Redux.", + "configuration.activeIconPack.qwik": "Ikon untuk Qwik.", + "configuration.activeIconPack.vue": "Ikon untuk Vue.", + "configuration.activeIconPack.vue_vuex": "Ikon untuk Vue dan Vuex.", + "configuration.activeIconPack.nest": "Ikon untuk NestJS.", + "configuration.activeIconPack.none": "Tidak ada paket ikon yang diaktifkan.", + "configuration.folders.theme": "Tetapkan jenis untuk ikon folder.", + "configuration.folders.theme.specific": "Pilih ikon folder spesifik.", + "configuration.folders.theme.classic": "Pilih ikon folder klasik.", + "configuration.folders.theme.none": "Tidak ada ikon folder.", + "configuration.folders.color": "Ubah warna ikon folder.", + "configuration.files.color": "Ubah warna ikon file.", + "configuration.hidesExplorerArrows": "Sembunyikan panah explorer sebelum folder.", + "configuration.opacity": "Ubah opasitas ikon.", + "configuration.saturation": "Ubah saturasi ikon.", + "configuration.enableLogging": "Aktifkan pencatatan ke saluran output.", + "configuration.logLevel": "Tetapkan level log untuk pesan output." +} diff --git a/package.nls.ja.json b/package.nls.ja.json index fe77c0e9ee..30943b22c8 100644 --- a/package.nls.ja.json +++ b/package.nls.ja.json @@ -3,6 +3,7 @@ "command.toggleIconPacks": "Material Icons: ใ‚ขใ‚คใ‚ณใƒณใƒ‘ใƒƒใ‚ฏใ‚’่จญๅฎš", "command.changeFolderTheme": "Material Icons: ใƒ•ใ‚ฉใƒซใƒ€ใƒผใƒ†ใƒผใƒžใ‚’ๅค‰ๆ›ด", "command.changeFolderColor": "Material Icons: ใƒ•ใ‚ฉใƒซใƒ€ใƒผใฎ่‰ฒใ‚’ๅค‰ๆ›ด", + "command.changeFileColor": "Material Icons: ใƒ•ใ‚กใ‚คใƒซใฎ่‰ฒใ‚’ๅค‰ๆ›ด", "command.restoreDefaultConfig": "Material Icons: ๅˆๆœŸ่จญๅฎšใซๆˆปใ™", "command.toggleExplorerArrows": "Material Icons: ใƒ•ใ‚ฉใƒซใƒ€ใƒผใฎ็Ÿขๅฐใ‚’ๅˆ‡ใ‚Šๆ›ฟใˆ", "command.changeOpacity": "Material Icons: ไธ้€ๆ˜Žๅบฆใ‚’ๅค‰ๆ›ด", @@ -27,6 +28,7 @@ "configuration.folders.theme.classic": "ใ‚ฏใƒฉใ‚ทใƒƒใ‚ฏใƒ•ใ‚ฉใƒซใƒ€ใƒผใ‚ขใ‚คใ‚ณใƒณใ‚’้ธๆŠžใ™ใ‚‹ใ€‚", "configuration.folders.theme.none": "ใƒ•ใ‚ฉใƒซใƒ€ใƒผใ‚ขใ‚คใ‚ณใƒณใŒใ‚ใ‚Šใพใ›ใ‚“ใ€‚", "configuration.folders.color": "ใƒ•ใ‚ฉใƒซใƒ€ใƒผใ‚ขใ‚คใ‚ณใƒณใฎ่‰ฒใ‚’ๅค‰ๆ›ดใ™ใ‚‹ใ€‚", + "configuration.files.color": "ใƒ•ใ‚กใ‚คใƒซใ‚ขใ‚คใ‚ณใƒณใฎ่‰ฒใ‚’ๅค‰ๆ›ดใ™ใ‚‹ใ€‚", "configuration.hidesExplorerArrows": "ใƒ•ใ‚ฉใƒซใƒ€ใƒผใฎๆจชใซใ‚ใ‚‹็Ÿขๅฐใ‚’้š ใ™ใ€‚", "configuration.opacity": "ใ‚ขใ‚คใ‚ณใƒณใฎไธ้€ๆ˜Žๅบฆใ‚’ๅค‰ๆ›ดใ™ใ‚‹ใ€‚", "configuration.saturation": "ใ‚ขใ‚คใ‚ณใƒณใฎๅฝฉๅบฆใ‚’ๅค‰ๆ›ดใ™ใ‚‹ใ€‚" diff --git a/package.nls.json b/package.nls.json index 389bbba92c..7f81e1ebc4 100644 --- a/package.nls.json +++ b/package.nls.json @@ -13,6 +13,15 @@ "configuration.files.associations": "Set custom file icon associations.", "configuration.folders.associations": "Set custom folder icon associations.", "configuration.languages.associations": "Set custom language icon associations.", + "configuration.customClones": "Clone any existing icon and create a new one with custom colors and associations", + "configuration.customClones.base": "Icon used as a base to create the custom cloned icon", + "configuration.customClones.name": "Name of the custom icon", + "configuration.customClones.color": "Color used as a base to recolor the icon", + "configuration.customClones.lightColor": "Color used as a base to recolor the icon when the theme is light", + "configuration.customClones.fileNames": "File names to associate with the custom icon", + "configuration.customClones.fileExtensions": "File extensions to associate with the custom icon", + "configuration.customClones.folderNames": "Folder names to associate with the custom icon", + "configuration.customClones.activeForPacks": "Only generate this clone when the active icon pack is one of these.", "configuration.activeIconPack": "Select an icon pack that enables specific icons.", "configuration.activeIconPack.angular": "Icons for Angular.", "configuration.activeIconPack.angular_ngrx": "Icons for Angular and ngrx.", @@ -31,5 +40,7 @@ "configuration.files.color": "Change the color of the file icons.", "configuration.hidesExplorerArrows": "Hide explorer arrows before folder.", "configuration.opacity": "Change the opacity of the icons.", - "configuration.saturation": "Change the saturation of the icons." + "configuration.saturation": "Change the saturation of the icons.", + "configuration.enableLogging": "Enable logging to the output channel.", + "configuration.logLevel": "Set the log level for output messages." } diff --git a/package.nls.ko.json b/package.nls.ko.json new file mode 100644 index 0000000000..6a1f9723ad --- /dev/null +++ b/package.nls.ko.json @@ -0,0 +1,35 @@ +{ + "command.activateIcons": "Material Icons: ์•„์ด์ฝ˜ ํ…Œ๋งˆ ํ™œ์„ฑํ™”", + "command.toggleIconPacks": "Material Icons: ์•„์ด์ฝ˜ ํŒฉ ๊ตฌ์„ฑ", + "command.changeFolderTheme": "Material Icons: ํด๋” ํ…Œ๋งˆ ๋ณ€๊ฒฝ", + "command.changeFolderColor": "Material Icons: ํด๋” ์ƒ‰์ƒ ๋ณ€๊ฒฝ", + "command.changeFileColor": "Material Icons: ํŒŒ์ผ ์ƒ‰์ƒ ๋ณ€๊ฒฝ", + "command.restoreDefaultConfig": "Material Icons: ๊ธฐ๋ณธ ์„ค์ • ๋ณต์›", + "command.toggleExplorerArrows": "Material Icons: ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ์˜ ํด๋” ํ™”์‚ดํ‘œ ์„ค์ •", + "command.changeOpacity": "Material Icons: ํˆฌ๋ช…๋„ ๋ณ€๊ฒฝ", + "command.toggleGrayscale": "Material Icons: ๊ทธ๋ ˆ์ด์Šค์ผ€์ผ ์„ค์ •", + "command.changeSaturation": "Material Icons: ์ฑ„๋„ ๋ณ€๊ฒฝ", + "configuration.title": "Material Icons", + "configuration.files.associations": "์‚ฌ์šฉ์ž ์ •์˜ ํŒŒ์ผ ์•„์ด์ฝ˜ ์„ค์ •.", + "configuration.folders.associations": "์‚ฌ์šฉ์ž ์ •์˜ ํด๋” ์•„์ด์ฝ˜ ์„ค์ •.", + "configuration.languages.associations": "์‚ฌ์šฉ์ž ์ •์˜ ์–ธ์–ด ์•„์ด์ฝ˜ ์„ค์ •.", + "configuration.activeIconPack": "ํŠน์ • ์•„์ด์ฝ˜์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ์•„์ด์ฝ˜ ํŒฉ ์„ ํƒ.", + "configuration.activeIconPack.angular": "Angular์šฉ ์•„์ด์ฝ˜.", + "configuration.activeIconPack.angular_ngrx": "Angular ๋ฐ ngrx์šฉ ์•„์ด์ฝ˜.", + "configuration.activeIconPack.react": "React์šฉ ์•„์ด์ฝ˜.", + "configuration.activeIconPack.react_redux": "React ๋ฐ Redux์šฉ ์•„์ด์ฝ˜.", + "configuration.activeIconPack.qwik": "Qwik์šฉ ์•„์ด์ฝ˜.", + "configuration.activeIconPack.vue": "Vue์šฉ ์•„์ด์ฝ˜.", + "configuration.activeIconPack.vue_vuex": "Vue ๋ฐ Vuex์šฉ ์•„์ด์ฝ˜.", + "configuration.activeIconPack.nest": "NestJS์šฉ ์•„์ด์ฝ˜.", + "configuration.activeIconPack.none": "์•„์ด์ฝ˜ ํŒฉ ๋น„ํ™œ์„ฑํ™”.", + "configuration.folders.theme": "ํด๋” ์•„์ด์ฝ˜์˜ ์œ ํ˜• ์„ค์ •.", + "configuration.folders.theme.specific": "ํŠน์ • ํด๋” ์•„์ด์ฝ˜ ์„ ํƒ.", + "configuration.folders.theme.classic": "ํด๋ž˜์‹ ํด๋” ์•„์ด์ฝ˜ ์„ ํƒ.", + "configuration.folders.theme.none": "ํด๋” ์•„์ด์ฝ˜ ์—†์Œ.", + "configuration.folders.color": "ํด๋” ์•„์ด์ฝ˜์˜ ์ƒ‰์ƒ ๋ณ€๊ฒฝ.", + "configuration.files.color": "ํŒŒ์ผ ์•„์ด์ฝ˜์˜ ์ƒ‰์ƒ ๋ณ€๊ฒฝ.", + "configuration.hidesExplorerArrows": "ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ์˜ ํด๋” ํ™”์‚ดํ‘œ ์ˆจ๊ธฐ๊ธฐ.", + "configuration.opacity": "์•„์ด์ฝ˜์˜ ํˆฌ๋ช…๋„ ๋ณ€๊ฒฝ.", + "configuration.saturation": "์•„์ด์ฝ˜์˜ ์ฑ„๋„ ๋ณ€๊ฒฝ." +} diff --git a/sheriff.config.ts b/sheriff.config.ts new file mode 100644 index 0000000000..c9baee7f79 --- /dev/null +++ b/sheriff.config.ts @@ -0,0 +1,17 @@ +import { type SheriffConfig } from '@softarc/sheriff-core'; + +export const sheriffConfig: SheriffConfig = { + entryFile: 'src/module/index.ts', + version: 1, + autoTagging: true, + tagging: { + 'src/extension': 'extension', + 'src/core': 'core', + 'src/module': 'module', + }, + depRules: { + root: ['core'], + extension: ['core'], + module: ['core'], + }, +}; diff --git a/src/architecture.md b/src/architecture.md new file mode 100644 index 0000000000..fa7f017e5d --- /dev/null +++ b/src/architecture.md @@ -0,0 +1,27 @@ +# Architecture + +The project is structured in a way that the core logic is separated from the extension logic. The core logic is used for the generation of the icon manifest, for the definition of the icon associations and for the translation logic. The extension logic is used for the interaction with the VS Code extension API (e.g. getting the user configuration, providing commands etc.). + +```text +๐Ÿ“ฆ src + โ”ฃ ๐Ÿ“‚ core <-- Logic for generating icon manifest, icon associations, translation logic, models, tests + โ”ฃ ๐Ÿ“‚ extension <-- Code which uses VS Code extension API (get user config, providing commands etc) + โ”ฃ ๐Ÿ“‚ module <-- Control which part of the core is exposed to the npm module + โ”— ๐Ÿ“‚ scripts <-- Scripts which are executed during build time (in the package.json) +``` + +By using the [sheriff](https://github.com/softarc-consulting/sheriff) library dependencies between the modules can be verified. The command `bun run verify` checks if the imports between the modules are allowed. For instance it's not allowed, that any of the other modules imports something from the `extension` module because of it's dependency to `vscode`. But the `extension` module itself is allowed to import from `core`. + +This is realized by using the dependency rules in the sheriff.config.ts file: + +```ts +depRules: { + root: ['core'], + extension: ['core'], + module: ['core'], +} +``` + +## Npm module + +The npm module exposes some of the functions so that the icon manifest can be generated programmatically. More information can be found in the [README.md](./module/README.md) of the module. diff --git a/src/commands/index.ts b/src/commands/index.ts deleted file mode 100644 index 2796d51903..0000000000 --- a/src/commands/index.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { commands } from 'vscode'; -import { activateIcons } from './activate'; -import { toggleExplorerArrows } from './explorerArrows'; -import { changeFileColor } from './fileColor'; -import { changeFolderColor } from './folderColor'; -import { changeFolderTheme } from './folders'; -import { toggleGrayscale } from './grayscale'; -import { toggleIconPacks } from './iconPacks'; -import { changeOpacity } from './opacity'; -import { restoreDefaultConfig } from './restoreConfig'; -import { changeSaturation } from './saturation'; - -const extensionCommands: { [commmand: string]: () => Promise } = { - activateIcons, - toggleIconPacks, - changeFolderTheme, - changeFolderColor, - changeFileColor, - restoreDefaultConfig, - toggleExplorerArrows, - changeOpacity, - toggleGrayscale, - changeSaturation, -}; - -export const registered = Object.keys(extensionCommands).map((commandName) => { - const callCommand = () => extensionCommands[commandName](); - return commands.registerCommand( - `material-icon-theme.${commandName}`, - callCommand - ); -}); diff --git a/src/commands/restoreConfig.ts b/src/commands/restoreConfig.ts deleted file mode 100644 index 29ac3ce1f1..0000000000 --- a/src/commands/restoreConfig.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { setThemeConfig } from './../helpers'; - -/** Restore all configurations to default. */ -export const restoreDefaultConfig = async () => { - await setThemeConfig('activeIconPack', undefined, true); - await setThemeConfig('folders.theme', undefined, true); - await setThemeConfig('folders.color', undefined, true); - await setThemeConfig('files.color', undefined, true); - await setThemeConfig('hidesExplorerArrows', undefined, true); - await setThemeConfig('opacity', undefined, true); - await setThemeConfig('saturation', undefined, true); - await setThemeConfig('files.associations', undefined, true); - await setThemeConfig('folders.associations', undefined, true); - await setThemeConfig('languages.associations', undefined, true); -}; diff --git a/src/core/generator/applyConfigToIcons.ts b/src/core/generator/applyConfigToIcons.ts new file mode 100644 index 0000000000..ca0f7b3f1d --- /dev/null +++ b/src/core/generator/applyConfigToIcons.ts @@ -0,0 +1,36 @@ +import type { Config } from '../models/icons/config'; +import { generateFileIcons } from './fileGenerator'; +import { generateFolderIcons } from './folderGenerator'; +import { setIconOpacity } from './iconOpacity'; +import { setIconSaturation } from './iconSaturation'; + +/** + * Apply the configuration to the icons. But only if the configuration has changed. + * If the affectedConfig is not set then all icons will be updated. + * + * @param config Configuration that customizes the icons and the manifest. + * @param affectedConfig Set of configuration keys that have changed so that not all functions need to be executed. + */ +export const applyConfigToIcons = async (config: Config, oldConfig: Config) => { + if (config.files.color !== oldConfig.files.color) { + await generateFileIcons( + config.files.color, + config.opacity, + config.saturation + ); + } + if (config.folders.color !== oldConfig.folders.color) { + await generateFolderIcons( + config.folders.color, + config.opacity, + config.saturation + ); + } + + if (config.opacity !== oldConfig.opacity) { + await setIconOpacity(config.opacity, config.files.associations); + } + if (config.saturation !== oldConfig.saturation) { + await setIconSaturation(config.saturation, config.files.associations); + } +}; diff --git a/src/core/generator/clones/clonesGenerator.ts b/src/core/generator/clones/clonesGenerator.ts new file mode 100644 index 0000000000..c9b99b8ff1 --- /dev/null +++ b/src/core/generator/clones/clonesGenerator.ts @@ -0,0 +1,195 @@ +import { getFileConfigHash } from '../../helpers/configHash'; +import { merge } from '../../helpers/object'; +import { writeToFile } from '../../helpers/writeFile'; +import { logger } from '../../logging/logger'; +import type { + Config, + CustomClone, + FileIconClone, + FolderIconClone, +} from '../../models/icons/config'; +import type { FileIcons } from '../../models/icons/files/fileTypes'; +import type { FolderTheme } from '../../models/icons/folders/folderTheme'; +import type { Manifest } from '../../models/manifest'; +import { cloneIconExtension, clonesFolder } from '../constants'; +import { Variant, getCloneData, isFolder } from './utils/cloneData'; +import { cloneIcon, createCloneConfig } from './utils/cloning'; + +/** + * Creates custom icons by cloning already existing icons and changing + * their colors, based on the user's provided configurations. + */ +export const customClonesIcons = async ( + manifest: Manifest, + config: Config +): Promise => { + let clonedIconsManifest = merge({}, manifest); + const hash = getFileConfigHash(config); + + // create folder clones as specified by the user in the options + for (const clone of config.folders?.customClones ?? []) { + if ( + clone.activeForPacks === undefined || + clone.activeForPacks.includes(config.activeIconPack) + ) { + const cloneCfg = await createIconClone(clone, manifest, hash); + clonedIconsManifest = merge(clonedIconsManifest, cloneCfg); + } + } + + // create file clones as specified by the user in the options + for (const clone of config.files?.customClones ?? []) { + if ( + clone.activeForPacks === undefined || + clone.activeForPacks.includes(config.activeIconPack) + ) { + const cloneCfg = await createIconClone(clone, manifest, hash); + clonedIconsManifest = merge(clonedIconsManifest, cloneCfg); + } + } + + return clonedIconsManifest; +}; + +/** + * Creates custom icons by cloning already existing icons and changing + * their colors, based on the configurations provided by the extension. + * (this is meant to be called at build time) + */ +export const generateConfiguredClones = async ( + iconsList: FolderTheme[] | FileIcons, + manifest: Manifest +) => { + let iconsToClone: CustomClone[] = []; + + if (Array.isArray(iconsList)) { + iconsToClone = iconsList.reduce((acc, theme) => { + const icons = theme.icons?.filter((icon) => icon.clone) ?? []; + return acc.concat( + icons.map((icon) => ({ + folderNames: icon.folderNames, + name: icon.name, + ...icon.clone!, + })) + ); + }, [] as FolderIconClone[]); + } else { + const icons = iconsList.icons?.filter((icon) => icon.clone) ?? []; + iconsToClone = icons.map( + (icon) => + ({ + fileExtensions: icon.fileExtensions, + fileNames: icon.fileNames, + name: icon.name, + ...icon.clone!, + }) as FileIconClone + ); + } + + for (const icon of iconsToClone) { + const clones = getCloneData(icon, manifest, '', '', cloneIconExtension); + if (!clones) { + return; + } + + for (const clone of clones) { + try { + // generates the new icon content (svg) + const content = await cloneIcon(clone.base.path, clone.color); + + // write the new .svg file to the disk + await writeToFile(clone.path, content); + } catch (error) { + logger.error(error); + return; + } + } + } +}; + +/** Checks if there are any custom clones to be created */ +export const hasCustomClones = (config: Config): boolean => { + return ( + (config.folders?.customClones?.length ?? 0) > 0 || + (config.files?.customClones?.length ?? 0) > 0 + ); +}; + +/** + * Generates a clone of an icon. + * @param cloneOpts options and configurations on how to clone the icon + * @param manifest global icon configuration (used to get the base icon) + * @param hash current hash being applied to the icons + * @returns a partial icon configuration for the new icon + */ +const createIconClone = async ( + cloneOpts: FolderIconClone | FileIconClone, + manifest: Manifest, + hash: string +): Promise => { + // get clones to be created + const clones = getCloneData(cloneOpts, manifest, clonesFolder, hash); + if (!clones) { + return manifest; + } + + const clonesConfig = createCloneConfig(); + + for (const clone of clones) { + try { + // generates the new icon content (svg) + const content = await cloneIcon(clone.base.path, clone.color, hash); + + try { + // write the new .svg file to the disk + await writeToFile(clone.path, content); + } catch (error) { + logger.error(error); + return manifest; + } + + // sets the icon path for the cloned icon in the configuration + clonesConfig.iconDefinitions![clone.name] = { + iconPath: clone.inConfigPath, + }; + + if (isFolder(cloneOpts)) { + // sets the associated folder names for the cloned icon + cloneOpts.folderNames?.forEach((folderName) => { + const folderNamesCfg = + clone.variant === Variant.Base + ? clonesConfig.folderNames! + : clone.variant === Variant.Open + ? clonesConfig.folderNamesExpanded! + : clone.variant === Variant.Light + ? clonesConfig.light!.folderNames! + : clonesConfig.light!.folderNamesExpanded!; + folderNamesCfg[folderName] = clone.name; + }); + } else { + // set associations for the cloned file icon in the configuration + cloneOpts.fileNames?.forEach((fileName) => { + const fileNamesCfg = + clone.variant === Variant.Base + ? clonesConfig.fileNames! + : clonesConfig.light!.fileNames!; + + fileNamesCfg[fileName] = clone.name; + }); + + cloneOpts.fileExtensions?.forEach((fileExtension) => { + const fileExtensionsCfg = + clone.variant === Variant.Base + ? clonesConfig.fileExtensions! + : clonesConfig.light!.fileExtensions!; + + fileExtensionsCfg[fileExtension] = clone.name; + }); + } + } catch (error) { + logger.error(error); + } + } + + return clonesConfig; +}; diff --git a/src/core/generator/clones/utils/cloneData.ts b/src/core/generator/clones/utils/cloneData.ts new file mode 100644 index 0000000000..0a3eeb9961 --- /dev/null +++ b/src/core/generator/clones/utils/cloneData.ts @@ -0,0 +1,261 @@ +import { existsSync } from 'node:fs'; +import { mkdir, rm } from 'node:fs/promises'; +import { basename, dirname, join } from 'node:path'; +import { resolvePath } from '../../../helpers/resolvePath'; +import type { + CustomClone, + FileIconClone, + FolderIconClone, +} from '../../../models/icons/config'; +import type { Manifest } from '../../../models/manifest'; +import { + iconFolderPath, + lightColorFileEnding, + openedFolder, +} from '../../constants'; + +export enum Variant { + Base, + Open, + Light, + LightOpen, +} + +export enum Type { + Folder, + File, +} + +export type IconData = { + type: Type; + path: string; + variant: Variant; +}; + +export type CloneData = IconData & { + name: string; + color: string; + inConfigPath: string; + base: IconData; +}; + +/** checks if a `CustomClone` configuration is a `FolderIconClone` */ +export const isFolder = (clone: CustomClone): clone is FolderIconClone => { + return clone && (clone as FolderIconClone).folderNames !== undefined; +}; + +/** checks if the icon is a dark variant */ +const isDark = (daa: IconData) => + daa.variant === Variant.Base || daa.variant === Variant.Open; + +/** + * get cloning information from configuration + * @param cloneOpts the clone configuration + * @param manifest the current configuration of the extension + * @param hash the current hash being applied to the icons + */ +export const getCloneData = ( + cloneOpts: CustomClone, + manifest: Manifest, + subFolder: string, + hash: string, + ext?: string +): CloneData[] | undefined => { + const baseIcon = isFolder(cloneOpts) + ? getFolderIconBaseData(cloneOpts, manifest) + : getFileIconBaseData(cloneOpts, manifest); + + if (baseIcon) { + return baseIcon.map((base) => { + const cloneIcon = isFolder(cloneOpts) + ? getFolderIconCloneData(base, cloneOpts, hash, subFolder, ext) + : getFileIconCloneData(base, cloneOpts, hash, subFolder, ext); + + return { + name: getIconName(cloneOpts.name, base), + color: isDark(base) + ? cloneOpts.color + : cloneOpts.lightColor ?? cloneOpts.color, + inConfigPath: `${iconFolderPath}${subFolder}${basename( + cloneIcon.path + )}`, + base, + ...cloneIcon, + }; + }); + } +}; + +/** returns path, type and variant for the base file icons to be cloned */ +const getFileIconBaseData = ( + cloneOpts: FileIconClone, + manifest: Manifest +): IconData[] | undefined => { + const icons = []; + const base = manifest.iconDefinitions?.[`${cloneOpts.base}`]?.iconPath; + let light = + manifest.iconDefinitions?.[`${cloneOpts.base}${lightColorFileEnding}`] + ?.iconPath; + + if (cloneOpts.lightColor && !light) { + // the original icon does not have a light version, so we re-use the base + light = base; + } + + if (base) { + icons.push({ + type: Type.File, + variant: Variant.Base, + path: resolvePath(base), + }); + light && + icons.push({ + type: Type.File, + variant: Variant.Light, + path: resolvePath(light), + }); + return icons; + } +}; + +/** creates and returns the path of the cloned file icon */ +const getFileIconCloneData = ( + base: IconData, + cloneOpts: FileIconClone, + hash: string, + subFolder: string, + ext = '.svg' +): IconData => { + const name = getIconName(cloneOpts.name, base); + const clonePath = join(dirname(base.path), subFolder, `${name}${hash}${ext}`); + + return { + variant: base.variant, + type: base.type, + path: clonePath, + }; +}; + +/** returns path, type and variant for the base folder icons to be cloned */ +const getFolderIconBaseData = ( + clone: FolderIconClone, + manifest: Manifest +): IconData[] | undefined => { + const icons = []; + const folderBase = + clone.base === 'folder' + ? 'folder' + : clone.base.startsWith('folder-') + ? clone.base + : `folder-${clone.base}`; + + const base = manifest.iconDefinitions?.[`${folderBase}`]?.iconPath; + const open = + manifest.iconDefinitions?.[`${folderBase}${openedFolder}`]?.iconPath; + let light = + manifest.iconDefinitions?.[`${folderBase}${lightColorFileEnding}`] + ?.iconPath; + let lightOpen = + manifest.iconDefinitions?.[ + `${folderBase}${openedFolder}${lightColorFileEnding}` + ]?.iconPath; + + if (base && open) { + icons.push({ + type: Type.Folder, + variant: Variant.Base, + path: resolvePath(base), + }); + + icons.push({ + type: Type.Folder, + variant: Variant.Open, + path: resolvePath(open), + }); + + if (clone.lightColor && (!light || !lightOpen)) { + // the original icon does not have a light version, so we re-use the base icons + light = base; + lightOpen = open; + } + + if (light) { + icons.push({ + type: Type.Folder, + variant: Variant.Light, + path: resolvePath(light), + }); + } + + if (lightOpen) { + icons.push({ + type: Type.Folder, + variant: Variant.LightOpen, + path: resolvePath(lightOpen), + }); + } + + return icons; + } +}; + +/** creates and returns the path of the cloned folder icon */ +const getFolderIconCloneData = ( + base: IconData, + cloneOpts: FolderIconClone, + hash: string, + subFolder: string, + ext = '.svg' +): IconData => { + const name = getIconName(cloneOpts.name, base); + const path = join(dirname(base.path), subFolder, `${name}${hash}${ext}`); + return { type: base.type, variant: base.variant, path }; +}; + +/** + * removes the clones folder if it exists + * and creates a new one if `keep` is true + */ +export const clearCloneFolder = async (keep = true): Promise => { + const clonesFolderPath = resolvePath('./../icons/clones'); + + if (existsSync(clonesFolderPath)) { + await rm(clonesFolderPath, { recursive: true }); + } + + if (keep) { + await mkdir(clonesFolderPath); + } +}; + +const getIconName = (baseName: string, data: IconData): string => { + let prefix = ''; + let suffix = ''; + + if (data.type === Type.Folder) { + prefix = + baseName === 'folder' + ? '' + : baseName.startsWith('folder-') + ? '' + : 'folder-'; + + switch (data.variant) { + case Variant.Base: + break; + case Variant.Open: + suffix = openedFolder; + break; + case Variant.Light: + suffix = lightColorFileEnding; + break; + case Variant.LightOpen: + suffix = `${openedFolder}${lightColorFileEnding}`; + break; + } + } else { + suffix = data.variant === Variant.Light ? lightColorFileEnding : ''; + } + + return `${prefix}${baseName}${suffix}`; +}; diff --git a/src/core/generator/clones/utils/cloning.ts b/src/core/generator/clones/utils/cloning.ts new file mode 100644 index 0000000000..367c7d0535 --- /dev/null +++ b/src/core/generator/clones/utils/cloning.ts @@ -0,0 +1,126 @@ +import { readFile } from 'node:fs/promises'; +import { type INode, parse, stringify } from 'svgson'; +import { createEmptyManifest } from '../../../models/manifest'; +import { getColorList, replacementMap } from './color/colors'; + +/** + * Recursively walks through an SVG node tree and its children, + * calling a callback on each node. + */ +export const traverse = ( + node: INode, + callback: (node: INode) => void, + filter = true +) => { + if (node.attributes['data-mit-no-recolor'] !== 'true' || !filter) { + callback(node); + + if (node.children) { + node.children.forEach((child) => traverse(child, callback, filter)); + } + } +}; + +/** Reads an icon from the file system and returns its content. */ +export const readIcon = async (path: string, hash: string): Promise => { + try { + return await readFile(path, 'utf8'); + } catch { + const unhashedPath = path.replace(hash, ''); + return await readFile(unhashedPath, 'utf8'); + } +}; + +/** Clones an icon and changes its colors according to the clone options. */ +export const cloneIcon = async ( + path: string, + color: string, + hash = '' +): Promise => { + const baseContent = await readIcon(path, hash); + const svg = await parse(baseContent); + const replacements = replacementMap(color, getColorList(svg)); + replaceColors(svg, replacements); + return stringify(svg); +}; + +/** Gets the style attribute of an SVG node if it exists. */ +export const getStyle = (node: INode) => { + if (node && node.attributes && node.attributes.style) { + return parseStyle(node.attributes.style); + } + return {}; +}; + +/** Parses the style attribute of an SVG node. */ +const parseStyle = (css: string) => { + const rules = css.split(';'); + const result: Record = {}; + rules.forEach((rule) => { + const [key, value] = rule.split(':'); + result[key.trim()] = value.trim(); + }); + return result; +}; + +/** Converts object to css style string. */ +export const stringifyStyle = (css: Record) => { + return Object.entries(css) + .map(([key, value]) => `${key}:${value}`) + .join(';'); +}; + +/** Replaces colors in an SVG node using a replacement map. */ +export const replaceColors = ( + node: INode, + replacements: Map +) => { + traverse(node, (node) => { + // replace colors in style attribute + const style = getStyle(node); + if (style) { + if (style.fill && replacements.has(style.fill)) { + style.fill = replacements.get(style.fill)!; + node.attributes.style = stringifyStyle(style); + } + + if (style.stroke && replacements.has(style.stroke)) { + style.stroke = replacements.get(style.stroke)!; + node.attributes.style = stringifyStyle(style); + } + } + + // replace colors in attributes + if (node.attributes) { + if (node.attributes.fill && replacements.has(node.attributes.fill)) { + node.attributes.fill = replacements.get(node.attributes.fill)!; + } + + if (node.attributes.stroke && replacements.has(node.attributes.stroke)) { + node.attributes.stroke = replacements.get(node.attributes.stroke)!; + } + + if ( + node.attributes['stop-color'] && + replacements.has(node.attributes['stop-color']) + ) { + node.attributes['stop-color'] = replacements.get( + node.attributes['stop-color'] + )!; + } + } + }); +}; + +/** Creates a clone configuration with empty light object. */ +export const createCloneConfig = () => { + const manifest = createEmptyManifest(); + manifest.light = { + fileExtensions: {}, + fileNames: {}, + folderNames: {}, + folderNamesExpanded: {}, + }; + + return manifest; +}; diff --git a/src/core/generator/clones/utils/color/colors.ts b/src/core/generator/clones/utils/color/colors.ts new file mode 100644 index 0000000000..edc3f2dc56 --- /dev/null +++ b/src/core/generator/clones/utils/color/colors.ts @@ -0,0 +1,129 @@ +import chroma, { type Color, valid } from 'chroma-js'; +import { type INode } from 'svgson'; +import { getStyle, traverse } from '../cloning'; +import { + closerMaterialColorTo, + getMaterialColorByKey, +} from './materialPalette'; + +/** Get all the colors used in the SVG node as a `Set` list. **/ +export const getColorList = (node: INode) => { + const colors = new Set(); + + traverse(node, (node) => { + // check colors in style attribute + const style = getStyle(node); + if (style) { + if (style.fill && isValidColor(style.fill)) { + colors.add(style.fill); + } + + if (style.stroke && isValidColor(style.stroke)) { + colors.add(style.stroke); + } + } + + // check colors in svg attributes + if (node.attributes) { + if (node.attributes.fill && isValidColor(node.attributes.fill)) { + colors.add(node.attributes.fill); + } + + if (node.attributes.stroke && isValidColor(node.attributes.stroke)) { + colors.add(node.attributes.stroke); + } + + if ( + node.attributes['stop-color'] && + isValidColor(node.attributes['stop-color']) + ) { + colors.add(node.attributes['stop-color']); + } + } + }); + + return colors; +}; + +/** given a set of colors, orders them from dark to light. **/ +export const orderDarkToLight = (colors: Set) => { + const colorArray = Array.from(colors); + return colorArray.sort((a, b) => { + // sort by lightness + const lA = chroma(a).get('hsl.l'); + const lB = chroma(b).get('hsl.l'); + + if (lA < lB) { + return -1; + } else if (lA > lB) { + return 1; + } else { + return 0; + } + }); +}; + +/** Lightens a color by a given percentage. **/ +const lighten = (color: Color, hslPercent: number) => + color.set('hsl.l', color.get('hsl.l') + hslPercent); + +/** checks if a string is a valid color. **/ +export const isValidColor = (color: string | undefined): boolean => { + if (color === undefined) { + return false; + } + return valid(color); +}; + +/** + * Creates a map of color replacements based on the base color and + * the list of colors. + * + * Orders the list of colors from dark to light and replaces the darkest + * color with the base color. Then uses the hue of the base color and + * the material palette to find the most appropriate color for the rest + * in the list. + */ +export const replacementMap = (baseColor: string, colors: Set) => { + if (!isValidColor(baseColor)) { + // try to get it from the material palette by key + const matCol = getMaterialColorByKey(baseColor); + if (matCol === undefined) { + throw new Error(`Invalid color: ${baseColor}`); + } + + baseColor = matCol; + } + + const orderedColors = orderDarkToLight(colors); + const baseColorChroma = chroma(baseColor); + const baseHue = baseColorChroma.get('hsl.h'); + const replacement = new Map(); + replacement.set(orderedColors[0], baseColor); + + // keep track of the latest color to determine if the next color + // should be lightened or not. + let latestColor = baseColorChroma; + + for (let i = 1; i < orderedColors.length; i++) { + const color = chroma(orderedColors[i]); + let newColor = color.set('hsl.h', baseHue); + + // the idea is to keep the paths with the same relative darkness + // as the original icon, but with different hues. So if the + // new color results in a darker color (as we are looping from + // dark to light), we set the lightness to the latest color and + // then lighten it a bit so that it's brighter than the latest one. + if (newColor.luminance() < latestColor.luminance()) { + newColor = newColor.set('hsl.l', latestColor.get('hsl.l')); + newColor = lighten(newColor, 0.1); + } + + const matCol = closerMaterialColorTo(newColor.hex()); + latestColor = chroma(matCol); + + replacement.set(orderedColors[i], matCol); + } + + return replacement; +}; diff --git a/src/core/generator/clones/utils/color/materialPalette.ts b/src/core/generator/clones/utils/color/materialPalette.ts new file mode 100644 index 0000000000..1d20172db3 --- /dev/null +++ b/src/core/generator/clones/utils/color/materialPalette.ts @@ -0,0 +1,297 @@ +import chroma, { deltaE } from 'chroma-js'; +import { isValidColor } from './colors'; + +export const materialPalette = { + white: '#FFFFFF', + black: '#000000', + 'red-50': '#FFEBEE', + 'red-100': '#FFCDD2', + 'red-200': '#EF9A9A', + 'red-300': '#E57373', + 'red-400': '#EF5350', + 'red-500': '#F44336', + 'red-600': '#E53935', + 'red-700': '#D32F2F', + 'red-800': '#C62828', + 'red-900': '#B71C1C', + 'red-A100': '#FF8A80', + 'red-A200': '#FF5252', + 'red-A400': '#FF1744', + 'red-A700': '#D50000', + 'pink-50': '#FCE4EC', + 'pink-100': '#F8BBD0', + 'pink-200': '#F48FB1', + 'pink-300': '#F06292', + 'pink-400': '#EC407A', + 'pink-500': '#E91E63', + 'pink-600': '#D81B60', + 'pink-700': '#C2185B', + 'pink-800': '#AD1457', + 'pink-900': '#880E4F', + 'pink-A100': '#FF80AB', + 'pink-A200': '#FF4081', + 'pink-A400': '#F50057', + 'pink-A700': '#C51162', + 'purple-50': '#F3E5F5', + 'purple-100': '#E1BEE7', + 'purple-200': '#CE93D8', + 'purple-300': '#BA68C8', + 'purple-400': '#AB47BC', + 'purple-500': '#9C27B0', + 'purple-600': '#8E24AA', + 'purple-700': '#7B1FA2', + 'purple-800': '#6A1B9A', + 'purple-900': '#4A148C', + 'purple-A100': '#EA80FC', + 'purple-A200': '#E040FB', + 'purple-A400': '#D500F9', + 'purple-A700': '#AA00FF', + 'deep-purple-50': '#EDE7F6', + 'deep-purple-100': '#D1C4E9', + 'deep-purple-200': '#B39DDB', + 'deep-purple-300': '#9575CD', + 'deep-purple-400': '#7E57C2', + 'deep-purple-500': '#673AB7', + 'deep-purple-600': '#5E35B1', + 'deep-purple-700': '#512DA8', + 'deep-purple-800': '#4527A0', + 'deep-purple-900': '#311B92', + 'deep-purple-A100': '#B388FF', + 'deep-purple-A200': '#7C4DFF', + 'deep-purple-A400': '#651FFF', + 'deep-purple-A700': '#6200EA', + 'indigo-50': '#E8EAF6', + 'indigo-100': '#C5CAE9', + 'indigo-200': '#9FA8DA', + 'indigo-300': '#7986CB', + 'indigo-400': '#5C6BC0', + 'indigo-500': '#3F51B5', + 'indigo-600': '#3949AB', + 'indigo-700': '#303F9F', + 'indigo-800': '#283593', + 'indigo-900': '#1A237E', + 'indigo-A100': '#8C9EFF', + 'indigo-A200': '#536DFE', + 'indigo-A400': '#3D5AFE', + 'indigo-A700': '#304FFE', + 'blue-50': '#E3F2FD', + 'blue-100': '#BBDEFB', + 'blue-200': '#90CAF9', + 'blue-300': '#64B5F6', + 'blue-400': '#42A5F5', + 'blue-500': '#2196F3', + 'blue-600': '#1E88E5', + 'blue-700': '#1976D2', + 'blue-800': '#1565C0', + 'blue-900': '#0D47A1', + 'blue-A100': '#82B1FF', + 'blue-A200': '#448AFF', + 'blue-A400': '#2979FF', + 'blue-A700': '#2962FF', + 'light-blue-50': '#E1F5FE', + 'light-blue-100': '#B3E5FC', + 'light-blue-200': '#81D4FA', + 'light-blue-300': '#4FC3F7', + 'light-blue-400': '#29B6F6', + 'light-blue-500': '#03A9F4', + 'light-blue-600': '#039BE5', + 'light-blue-700': '#0288D1', + 'light-blue-800': '#0277BD', + 'light-blue-900': '#01579B', + 'light-blue-A100': '#80D8FF', + 'light-blue-A200': '#40C4FF', + 'light-blue-A400': '#00B0FF', + 'light-blue-A700': '#0091EA', + 'cyan-50': '#E0F7FA', + 'cyan-100': '#B2EBF2', + 'cyan-200': '#80DEEA', + 'cyan-300': '#4DD0E1', + 'cyan-400': '#26C6DA', + 'cyan-500': '#00BCD4', + 'cyan-600': '#00ACC1', + 'cyan-700': '#0097A7', + 'cyan-800': '#00838F', + 'cyan-900': '#006064', + 'cyan-A100': '#84FFFF', + 'cyan-A200': '#18FFFF', + 'cyan-A400': '#00E5FF', + 'cyan-A700': '#00B8D4', + 'teal-50': '#E0F2F1', + 'teal-100': '#B2DFDB', + 'teal-200': '#80CBC4', + 'teal-300': '#4DB6AC', + 'teal-400': '#26A69A', + 'teal-500': '#009688', + 'teal-600': '#00897B', + 'teal-700': '#00796B', + 'teal-800': '#00695C', + 'teal-900': '#004D40', + 'teal-A100': '#A7FFEB', + 'teal-A200': '#64FFDA', + 'teal-A400': '#1DE9B6', + 'teal-A700': '#00BFA5', + 'green-50': '#E8F5E9', + 'green-100': '#C8E6C9', + 'green-200': '#A5D6A7', + 'green-300': '#81C784', + 'green-400': '#66BB6A', + 'green-500': '#4CAF50', + 'green-600': '#43A047', + 'green-700': '#388E3C', + 'green-800': '#2E7D32', + 'green-900': '#1B5E20', + 'green-A100': '#B9F6CA', + 'green-A200': '#69F0AE', + 'green-A400': '#00E676', + 'green-A700': '#00C853', + 'light-green-50': '#F1F8E9', + 'light-green-100': '#DCEDC8', + 'light-green-200': '#C5E1A5', + 'light-green-300': '#AED581', + 'light-green-400': '#9CCC65', + 'light-green-500': '#8BC34A', + 'light-green-600': '#7CB342', + 'light-green-700': '#689F38', + 'light-green-800': '#558B2F', + 'light-green-900': '#33691E', + 'light-green-A100': '#CCFF90', + 'light-green-A200': '#B2FF59', + 'light-green-A400': '#76FF03', + 'light-green-A700': '#64DD17', + 'lime-50': '#F9FBE7', + 'lime-100': '#F0F4C3', + 'lime-200': '#E6EE9C', + 'lime-300': '#DCE775', + 'lime-400': '#D4E157', + 'lime-500': '#CDDC39', + 'lime-600': '#C0CA33', + 'lime-700': '#AFB42B', + 'lime-800': '#9E9D24', + 'lime-900': '#827717', + 'lime-A100': '#F4FF81', + 'lime-A200': '#EEFF41', + 'lime-A400': '#C6FF00', + 'lime-A700': '#AEEA00', + 'yellow-50': '#FFFDE7', + 'yellow-100': '#FFF9C4', + 'yellow-200': '#FFF59D', + 'yellow-300': '#FFF176', + 'yellow-400': '#FFEE58', + 'yellow-500': '#FFEB3B', + 'yellow-600': '#FDD835', + 'yellow-700': '#FBC02D', + 'yellow-800': '#F9A825', + 'yellow-900': '#F57F17', + 'yellow-A100': '#FFFF8D', + 'yellow-A200': '#FFFF00', + 'yellow-A400': '#FFEA00', + 'yellow-A700': '#FFD600', + 'amber-50': '#FFF8E1', + 'amber-100': '#FFECB3', + 'amber-200': '#FFE082', + 'amber-300': '#FFD54F', + 'amber-400': '#FFCA28', + 'amber-500': '#FFC107', + 'amber-600': '#FFB300', + 'amber-700': '#FFA000', + 'amber-800': '#FF8F00', + 'amber-900': '#FF6F00', + 'amber-A100': '#FFE57F', + 'amber-A200': '#FFD740', + 'amber-A400': '#FFC400', + 'amber-A700': '#FFAB00', + 'orange-50': '#FFF3E0', + 'orange-100': '#FFE0B2', + 'orange-200': '#FFCC80', + 'orange-300': '#FFB74D', + 'orange-400': '#FFA726', + 'orange-500': '#FF9800', + 'orange-600': '#FB8C00', + 'orange-700': '#F57C00', + 'orange-800': '#EF6C00', + 'orange-900': '#E65100', + 'orange-A100': '#FFD180', + 'orange-A200': '#FFAB40', + 'orange-A400': '#FF9100', + 'orange-A700': '#FF6D00', + 'deep-orange-50': '#FBE9E7', + 'deep-orange-100': '#FFCCBC', + 'deep-orange-200': '#FFAB91', + 'deep-orange-300': '#FF8A65', + 'deep-orange-400': '#FF7043', + 'deep-orange-500': '#FF5722', + 'deep-orange-600': '#F4511E', + 'deep-orange-700': '#E64A19', + 'deep-orange-800': '#D84315', + 'deep-orange-900': '#BF360C', + 'deep-orange-A100': '#FF9E80', + 'deep-orange-A200': '#FF6E40', + 'deep-orange-A400': '#FF3D00', + 'deep-orange-A700': '#DD2C00', + 'brown-50': '#EFEBE9', + 'brown-100': '#D7CCC8', + 'brown-200': '#BCAAA4', + 'brown-300': '#A1887F', + 'brown-400': '#8D6E63', + 'brown-500': '#795548', + 'brown-600': '#6D4C41', + 'brown-700': '#5D4037', + 'brown-800': '#4E342E', + 'brown-900': '#3E2723', + 'gray-50': '#FAFAFA', + 'gray-100': '#F5F5F5', + 'gray-200': '#EEEEEE', + 'gray-300': '#E0E0E0', + 'gray-400': '#BDBDBD', + 'gray-500': '#9E9E9E', + 'gray-600': '#757575', + 'gray-700': '#616161', + 'gray-800': '#424242', + 'gray-900': '#212121', + 'blue-gray-50': '#ECEFF1', + 'blue-gray-100': '#CFD8DC', + 'blue-gray-200': '#B0BEC5', + 'blue-gray-300': '#90A4AE', + 'blue-gray-400': '#78909C', + 'blue-gray-500': '#607D8B', + 'blue-gray-600': '#546E7A', + 'blue-gray-700': '#455A64', + 'blue-gray-800': '#37474F', + 'blue-gray-900': '#263238', +}; + +/** + * Gets the material color from the material palette + * @param key the key of the material color e.g. 'blue-grey-500' + */ +export const getMaterialColorByKey = (key: string): string | undefined => { + if (key in materialPalette) { + return materialPalette[key as keyof typeof materialPalette]; + } + + return undefined; +}; + +/** + * Given a color, returns the closest material color from the + * material palette. + */ +export const closerMaterialColorTo = (color: string): string => { + const palette = Object.values(materialPalette); + + if (!isValidColor(color)) { + throw new Error(`The given color "${color}" is not valid!`); + } + + color = chroma(color).hex(); + + const distances = palette + .map((paletteColor) => ({ + // calculate the distance between the color and the palette color + distance: deltaE(paletteColor, color), + color: paletteColor, + })) + .sort((a, b) => a.distance - b.distance); + + return distances[0].color; +}; diff --git a/src/core/generator/config/defaultConfig.ts b/src/core/generator/config/defaultConfig.ts new file mode 100644 index 0000000000..e99d1a4ee0 --- /dev/null +++ b/src/core/generator/config/defaultConfig.ts @@ -0,0 +1,41 @@ +import { merge } from '../../helpers/object'; +import type { Config } from '../../models/icons/config'; +import type { RecursivePartial } from '../../types/recursivePartial'; + +/** + * The options control the generator and decide which icons are disabled or not. + */ +export const getDefaultConfig = (): Required => ({ + folders: { + theme: 'specific', + color: '#90a4ae', + associations: {}, + customClones: [], + }, + activeIconPack: 'angular', + hidesExplorerArrows: false, + opacity: 1, + saturation: 1, + files: { + color: '#90a4ae', + associations: {}, + customClones: [], + }, + languages: { associations: {} }, + enableLogging: false, + logLevel: 'info', +}); + +/** + * Fill in missing configuration values with the default values. + * + * @param config Configuration object + * @returns New configuration object with default values + */ +export const padWithDefaultConfig = ( + config?: RecursivePartial +): Config => { + const withDefaultConfig = merge(getDefaultConfig(), config ?? {}) as Config; + + return withDefaultConfig; +}; diff --git a/src/core/generator/constants.ts b/src/core/generator/constants.ts new file mode 100644 index 0000000000..74a6fe77dd --- /dev/null +++ b/src/core/generator/constants.ts @@ -0,0 +1,54 @@ +/** + * Name of the VS Code extension. + */ +export const extensionName = 'material-icon-theme'; + +/** + * Name of the extension publisher. + */ +export const extensionPublisher = 'PKief'; + +/** + * Key to identify the log event. + */ +export const logEventKey = `${extensionName}-log-event`; + +/** + * Path where the icons are located. + */ +export const iconFolderPath = './../icons/'; + +/** + * File name of the JSON file that will be generated to the out folder. + */ +export const manifestName = 'material-icons.json'; + +/** + * File ending for opened folders. + */ +export const openedFolder = '-open'; + +/** + * File ending for light icons. + */ +export const lightColorFileEnding = '_light'; + +/** + * File ending for high contrast icons. + */ +export const highContrastColorFileEnding = '_highContrast'; + +/** + * Pattern to match the file icon definition. + */ +export const cloneIconExtension = '.clone.svg'; + +/** + * User Defined Clones subfolder + */ +export const clonesFolder = 'clones/'; + +/** + * Pattern to match wildcards for custom file icon mappings. + */ +export const wildcardPattern = new RegExp(/^\*{1,2}\./); diff --git a/src/icons/generator/fileGenerator.ts b/src/core/generator/fileGenerator.ts similarity index 53% rename from src/icons/generator/fileGenerator.ts rename to src/core/generator/fileGenerator.ts index f192b213f9..afb51f5698 100644 --- a/src/icons/generator/fileGenerator.ts +++ b/src/core/generator/fileGenerator.ts @@ -1,120 +1,110 @@ -import merge from 'lodash.merge'; -import { getFileConfigHash } from '../../helpers/fileConfig'; -import { - FileIcon, - FileIcons, - IconAssociations, - IconConfiguration, - IconJsonOptions, -} from '../../models/index'; +import { getFileConfigHash } from '../helpers/configHash'; +import { logger } from '../logging/logger'; +import type { Config, IconAssociations } from '../models/icons/config'; +import type { FileIcon } from '../models/icons/files/fileIcon'; +import type { FileIcons } from '../models/icons/files/fileTypes'; +import type { IconPackValue } from '../models/icons/iconPack'; +import type { Manifest } from '../models/manifest'; import { + cloneIconExtension, highContrastColorFileEnding, iconFolderPath, lightColorFileEnding, wildcardPattern, } from './constants'; -import { - validateHEXColorCode, - writeSVGFiles, - getSVG, - getPath, -} from './folderGenerator'; +import { getPath, getSVG, writeSVGFiles } from './shared/svg'; +import { validateHEXColorCode } from './shared/validation'; /** * Get all file icons that can be used in this theme. */ export const loadFileIconDefinitions = ( fileIcons: FileIcons, - config: IconConfiguration, - options: IconJsonOptions -): IconConfiguration => { - config = merge({}, config); - const enabledIcons = disableIconsByPack( - fileIcons, - options.activeIconPack ?? '' - ); - const customIcons = getCustomIcons(options.files?.associations); + config: Config, + manifest: Manifest +): Manifest => { + const enabledIcons = disableIconsByPack(fileIcons, config.activeIconPack); + const customIcons = getCustomIcons(config.files?.associations); const allFileIcons = [...enabledIcons, ...customIcons]; allFileIcons.forEach((icon) => { if (icon.disabled) return; - config = merge({}, config, setIconDefinition(config, icon.name)); + const isClone = icon.clone !== undefined; + manifest = setIconDefinition(manifest, config, icon.name, isClone); if (icon.light) { - config = merge( - {}, + manifest = setIconDefinition( + manifest, config, - setIconDefinition(config, icon.name, lightColorFileEnding) + icon.name, + isClone, + lightColorFileEnding ); } if (icon.highContrast) { - config = merge( - {}, + manifest = setIconDefinition( + manifest, config, - setIconDefinition(config, icon.name, highContrastColorFileEnding) + icon.name, + isClone, + highContrastColorFileEnding ); } if (icon.fileExtensions) { - config = merge( - {}, - config, - mapSpecificFileIcons(icon, FileMappingType.FileExtensions) + manifest = mapSpecificFileIcons( + icon, + FileMappingType.FileExtensions, + manifest ); } if (icon.fileNames) { - config = merge( - {}, - config, - mapSpecificFileIcons( - icon, - FileMappingType.FileNames, - options.files?.associations - ) + manifest = mapSpecificFileIcons( + icon, + FileMappingType.FileNames, + manifest, + config.files?.associations ); } }); // set default file icon - config = merge( - {}, + manifest = setIconDefinition( + manifest, config, - setIconDefinition(config, fileIcons.defaultIcon.name) + fileIcons.defaultIcon.name, + false ); - config.file = fileIcons.defaultIcon.name; + manifest.file = fileIcons.defaultIcon.name; - if (fileIcons.defaultIcon.light && config.light) { - config = merge( - {}, + if (fileIcons.defaultIcon.light && manifest.light) { + manifest = setIconDefinition( + manifest, config, - setIconDefinition( - config, - fileIcons.defaultIcon.name, - lightColorFileEnding - ) + fileIcons.defaultIcon.name, + false, + lightColorFileEnding ); - if (config.light) { - config.light.file = fileIcons.defaultIcon.name + lightColorFileEnding; + if (manifest.light) { + manifest.light.file = fileIcons.defaultIcon.name + lightColorFileEnding; } } if (fileIcons.defaultIcon.highContrast) { - config = merge( - {}, + manifest = setIconDefinition( + manifest, config, - setIconDefinition( - config, - fileIcons.defaultIcon.name, - highContrastColorFileEnding - ) + fileIcons.defaultIcon.name, + false, + highContrastColorFileEnding ); - if (config.highContrast) { - config.highContrast.file = + if (manifest.highContrast) { + manifest.highContrast.file = fileIcons.defaultIcon.name + highContrastColorFileEnding; } } - return config; + return manifest; }; /** @@ -123,12 +113,12 @@ export const loadFileIconDefinitions = ( const mapSpecificFileIcons = ( icon: FileIcon, mappingType: FileMappingType, + manifest: Manifest, customFileAssociation: IconAssociations = {} ) => { - const config = new IconConfiguration(); const iconMappingType = icon[mappingType as keyof FileIcon] as string[]; if (iconMappingType === undefined) { - return; + return manifest; } iconMappingType.forEach((name) => { // if the custom file extension should also overwrite the file names @@ -145,9 +135,9 @@ const mapSpecificFileIcons = ( ); // if overwrite is enabled then do not continue to set the icons for file names containing the file extension - const configMappingType = config[mappingType]; - const configLightMappingType = config.light?.[mappingType]; - const configHighContrastMappingType = config.highContrast?.[mappingType]; + const configMappingType = manifest[mappingType]; + const configLightMappingType = manifest.light?.[mappingType]; + const configHighContrastMappingType = manifest.highContrast?.[mappingType]; if ( shouldOverwriteFileNames || @@ -162,12 +152,11 @@ const mapSpecificFileIcons = ( configLightMappingType[name] = `${icon.name}${lightColorFileEnding}`; } if (icon.highContrast) { - configHighContrastMappingType[ - name - ] = `${icon.name}${highContrastColorFileEnding}`; + configHighContrastMappingType[name] = + `${icon.name}${highContrastColorFileEnding}`; } }); - return config; + return manifest; }; /** @@ -175,39 +164,52 @@ const mapSpecificFileIcons = ( */ const disableIconsByPack = ( fileIcons: FileIcons, - activatedIconPack: string + activeIconPack: IconPackValue ): FileIcon[] => { return fileIcons.icons.filter((icon) => { return !icon.enabledFor ? true - : icon.enabledFor.some((p) => p === activatedIconPack); + : icon.enabledFor.some((p) => p === activeIconPack); }); }; const setIconDefinition = ( - config: IconConfiguration, + manifest: Manifest, + config: Config, iconName: string, + isClone: boolean, appendix: string = '' ) => { - const obj: Partial = { iconDefinitions: {} }; - if (config.options) { - const fileConfigHash = getFileConfigHash(config.options); - obj.iconDefinitions![`${iconName}${appendix}`] = { - iconPath: `${iconFolderPath}${iconName}${appendix}${fileConfigHash}.svg`, + const ext = isClone ? cloneIconExtension : '.svg'; + const key = `${iconName}${appendix}`; + manifest.iconDefinitions ??= {}; + if (!manifest.iconDefinitions![key]) { + const fileConfigHash = getFileConfigHash(config); + manifest.iconDefinitions![key] = { + iconPath: `${iconFolderPath}${iconName}${appendix}${fileConfigHash}${ext}`, }; } - return obj; + return manifest; }; -export const generateFileIcons = (color: string | undefined) => { +export const generateFileIcons = async ( + color: string, + opacity: number, + saturation: number +) => { if (!color || !validateHEXColorCode(color)) { - return console.error('Invalid color code for file icons'); + return logger.error('Invalid color code for file icons'); } const fileIcon = 'M13 9h5.5L13 3.5V9M6 2h8l6 6v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4c0-1.11.89-2 2-2m5 2H6v16h12v-9h-7V4z'; - writeSVGFiles('file', getSVG(getPath(fileIcon, color))); + await writeSVGFiles( + 'file', + getSVG(getPath(fileIcon, color), 24), + opacity, + saturation + ); }; const getCustomIcons = (fileAssociations: IconAssociations | undefined) => { diff --git a/src/core/generator/folderGenerator.ts b/src/core/generator/folderGenerator.ts new file mode 100644 index 0000000000..ba15c9b7e1 --- /dev/null +++ b/src/core/generator/folderGenerator.ts @@ -0,0 +1,356 @@ +import { getFileConfigHash } from '../helpers/configHash'; +import { merge } from '../helpers/object'; +import { logger } from '../logging/logger'; +import type { Config, IconAssociations } from '../models/icons/config'; +import type { DefaultIcon } from '../models/icons/defaultIcon'; +import type { FolderIcon } from '../models/icons/folders/folderIcon'; +import type { FolderTheme } from '../models/icons/folders/folderTheme'; +import type { IconPackValue } from '../models/icons/iconPack'; +import type { Manifest } from '../models/manifest'; +import { + cloneIconExtension, + highContrastColorFileEnding, + iconFolderPath, + lightColorFileEnding, + openedFolder, +} from './constants'; +import { getPath, getSVG, writeSVGFiles } from './shared/svg'; +import { validateHEXColorCode } from './shared/validation'; + +/** + * Get the folder icon definitions as object. + */ +export const loadFolderIconDefinitions = ( + folderIcons: FolderTheme[], + config: Config, + manifest: Manifest +): Manifest => { + manifest.hidesExplorerArrows = config.hidesExplorerArrows; + const activeTheme = getEnabledFolderTheme(folderIcons, config.folders?.theme); + if (!activeTheme) { + return manifest; + } + const enabledIcons = disableIconsByPack(activeTheme, config.activeIconPack); + const customIcons = getCustomIcons(config.folders?.associations); + const allIcons = [...enabledIcons, ...customIcons]; + + if (config.folders?.theme === 'none') { + return manifest; + } + + allIcons.forEach((icon) => { + if (icon.disabled) return; + const folderNames = extendFolderNames(icon.folderNames); + manifest = setIconDefinitions(manifest, config, icon); + manifest = merge(manifest, setFolderNames(icon.name, folderNames)); + manifest.light = icon.light + ? merge( + manifest.light, + setFolderNames(icon.name, folderNames, lightColorFileEnding) + ) + : manifest.light; + manifest.highContrast = icon.highContrast + ? merge( + manifest.highContrast, + setFolderNames(icon.name, folderNames, highContrastColorFileEnding) + ) + : manifest.highContrast; + }); + + manifest = setDefaultFolderIcons(activeTheme, manifest, config); + return manifest; +}; + +/** + * Set the default folder icons for the theme. + */ +const setDefaultFolderIcons = ( + theme: FolderTheme, + manifest: Manifest, + config: Config +): Manifest => { + const hasFolderIcons = + !!theme.defaultIcon.name && theme.defaultIcon.name.length > 0; + if (hasFolderIcons) { + manifest = setIconDefinitions(manifest, config, theme.defaultIcon); + } + manifest = merge( + manifest, + createDefaultIconConfigObject(hasFolderIcons, theme, '') + ); + manifest.light = theme.defaultIcon.light + ? merge( + manifest.light, + createDefaultIconConfigObject( + hasFolderIcons, + theme, + lightColorFileEnding + ) + ) + : manifest.light; + manifest.highContrast = theme.defaultIcon.highContrast + ? merge( + manifest.highContrast, + createDefaultIconConfigObject( + hasFolderIcons, + theme, + highContrastColorFileEnding + ) + ) + : manifest.highContrast; + + manifest = merge( + manifest, + createRootIconConfigObject(hasFolderIcons, theme, '') + ); + if (theme.rootFolder) { + manifest = setIconDefinitions(manifest, config, theme.rootFolder); + manifest.light = theme.rootFolder.light + ? merge( + manifest.light, + createRootIconConfigObject( + hasFolderIcons, + theme, + lightColorFileEnding + ) + ) + : manifest.light; + manifest.highContrast = theme.rootFolder.highContrast + ? merge( + manifest.highContrast, + createRootIconConfigObject( + hasFolderIcons, + theme, + highContrastColorFileEnding + ) + ) + : manifest.highContrast; + } + + return manifest; +}; + +/** + * Get the object of the current enabled theme. + */ +const getEnabledFolderTheme = ( + themes: FolderTheme[], + enabledTheme: string | undefined +): FolderTheme | undefined => { + return themes.find((theme) => theme.name === enabledTheme); +}; + +/** + * Disable all file icons that are in a pack which is disabled. + */ +const disableIconsByPack = ( + folderIcons: FolderTheme | undefined, + activatedIconPack: IconPackValue | undefined +): FolderIcon[] => { + if (!folderIcons?.icons || folderIcons.icons.length === 0) { + return []; + } + return folderIcons.icons.filter((icon) => { + return !icon.enabledFor + ? true + : icon.enabledFor.some((p) => p === activatedIconPack); + }); +}; + +const setIconDefinitions = ( + manifest: Manifest, + config: Config, + icon: FolderIcon | DefaultIcon +) => { + const isClone = (icon as FolderIcon).clone !== undefined; + + manifest = createIconDefinitions(manifest, config, icon.name, '', isClone); + if (icon.light) { + manifest = merge( + manifest, + createIconDefinitions( + manifest, + config, + icon.name, + lightColorFileEnding, + isClone + ) + ); + } + if (icon.highContrast) { + manifest = merge( + manifest, + createIconDefinitions( + manifest, + config, + icon.name, + highContrastColorFileEnding, + isClone + ) + ); + } + return manifest; +}; + +const createIconDefinitions = ( + manifest: Manifest, + config: Config, + iconName: string, + appendix: string = '', + isClone = false +) => { + const fileConfigHash = getFileConfigHash(config); + const configIconDefinitions = manifest.iconDefinitions; + const ext = isClone ? cloneIconExtension : '.svg'; + const key = `${iconName}${appendix}`; + const openedKey = `${iconName}${openedFolder}${appendix}`; + + if (configIconDefinitions) { + if (!configIconDefinitions[key]) { + configIconDefinitions[key] = { + iconPath: `${iconFolderPath}${key}${fileConfigHash}${ext}`, + }; + } + + if (!configIconDefinitions[`${openedKey}`]) { + configIconDefinitions[`${openedKey}`] = { + iconPath: `${iconFolderPath}${openedKey}${fileConfigHash}${ext}`, + }; + } + } + return manifest; +}; + +const extendFolderNames = (folderNames: string[]) => { + const names: string[] = []; + const styles: [string, string][] = [ + ['', ''], + ['.', ''], + ['_', ''], + ['__', '__'], + ]; + folderNames.forEach((name) => { + styles.forEach((style) => { + names.push(`${style[0]}${name}${style[1]}`); + }); + }); + return names; +}; + +const setFolderNames = ( + iconName: string, + folderNames: string[], + appendix: string = '' +) => { + const obj: Partial = { + folderNames: {}, + folderNamesExpanded: {}, + }; + folderNames.forEach((name) => { + if (obj.folderNames) { + obj.folderNames[name as keyof Manifest] = iconName + appendix; + } + if (obj.folderNamesExpanded) { + obj.folderNamesExpanded[name as keyof Manifest] = + `${iconName}${openedFolder}${appendix}`; + } + }); + return obj; +}; + +const createDefaultIconConfigObject = ( + hasFolderIcons: boolean, + theme: FolderTheme, + appendix: string = '' +) => { + const obj = { + folder: '', + folderExpanded: '', + }; + obj.folder = hasFolderIcons ? theme.defaultIcon.name + appendix : ''; + obj.folderExpanded = hasFolderIcons + ? `${theme.defaultIcon.name}${openedFolder}${appendix}` + : ''; + return obj; +}; + +const createRootIconConfigObject = ( + hasFolderIcons: boolean, + theme: FolderTheme, + appendix: string = '' +) => { + const obj = { + rootFolder: '', + rootFolderExpanded: '', + }; + obj.rootFolder = hasFolderIcons + ? theme.rootFolder + ? theme.rootFolder.name + appendix + : theme.defaultIcon.name + appendix + : ''; + obj.rootFolderExpanded = hasFolderIcons + ? theme.rootFolder + ? `${theme.rootFolder.name}${openedFolder}${appendix}` + : `${theme.defaultIcon.name}${openedFolder}${appendix}` + : ''; + return obj; +}; + +const getCustomIcons = (folderAssociations: IconAssociations | undefined) => { + if (!folderAssociations) return []; + + const icons: FolderIcon[] = Object.keys(folderAssociations).map((fa) => ({ + // use default folder if icon name is empty + name: + folderAssociations[fa].length > 0 + ? 'folder-' + folderAssociations[fa].toLowerCase() + : 'folder', + folderNames: [fa.toLowerCase()], + })); + + return icons; +}; + +export const generateFolderIcons = async ( + color: string, + opacity: number, + saturation: number +) => { + if (!color || !validateHEXColorCode(color)) { + return logger.error('Invalid color code for folder icons'); + } + + const folderIcon = + 'M13.84376,7.53645l-1.28749-1.0729A2,2,0,0,0,11.27591,6H4A2,2,0,0,0,2,8V24a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2H15.12412A2,2,0,0,1,13.84376,7.53645Z'; + const folderIconOpen = + 'M28.96692,12H9.44152a2,2,0,0,0-1.89737,1.36754L4,24V10H28a2,2,0,0,0-2-2H15.1241a2,2,0,0,1-1.28038-.46357L12.5563,6.46357A2,2,0,0,0,11.27592,6H4A2,2,0,0,0,2,8V24a2,2,0,0,0,2,2H26l4.80523-11.21213A2,2,0,0,0,28.96692,12Z'; + const rootFolderIcon = + 'M16,5A11,11,0,1,1,5,16,11.01245,11.01245,0,0,1,16,5m0-3A14,14,0,1,0,30,16,14,14,0,0,0,16,2Zm0,8a6,6,0,1,0,6,6A6,6,0,0,0,16,10Z'; + const rootFolderIconOpen = + 'M16,5A11,11,0,1,1,5,16,11.01245,11.01245,0,0,1,16,5m0-3A14,14,0,1,0,30,16,14,14,0,0,0,16,2Z'; + + await writeSVGFiles( + 'folder', + getSVG(getPath(folderIcon, color)), + opacity, + saturation + ); + await writeSVGFiles( + 'folder-open', + getSVG(getPath(folderIconOpen, color)), + opacity, + saturation + ); + await writeSVGFiles( + 'folder-root', + getSVG(getPath(rootFolderIcon, color)), + opacity, + saturation + ); + await writeSVGFiles( + 'folder-root-open', + getSVG(getPath(rootFolderIconOpen, color)), + opacity, + saturation + ); +}; diff --git a/src/core/generator/generateManifest.ts b/src/core/generator/generateManifest.ts new file mode 100644 index 0000000000..685d2a3187 --- /dev/null +++ b/src/core/generator/generateManifest.ts @@ -0,0 +1,42 @@ +import { merge } from '../helpers/object'; +import { fileIcons } from '../icons/fileIcons'; +import { folderIcons } from '../icons/folderIcons'; +import { languageIcons } from '../icons/languageIcons'; +import { + type Manifest, + type ManifestConfig, + createEmptyManifest, +} from '../models/manifest'; +import { padWithDefaultConfig } from './config/defaultConfig'; +import { loadFileIconDefinitions } from './fileGenerator'; +import { loadFolderIconDefinitions } from './folderGenerator'; +import { loadLanguageIconDefinitions } from './languageGenerator'; + +/** + * Generate the manifest that will be written as JSON file. + */ +export const generateManifest = (config?: ManifestConfig): Manifest => { + const refinedConfig = padWithDefaultConfig(config); + const manifest = createEmptyManifest(); + const languageIconDefinitions = loadLanguageIconDefinitions( + languageIcons, + refinedConfig, + manifest + ); + const fileIconDefinitions = loadFileIconDefinitions( + fileIcons, + refinedConfig, + manifest + ); + const folderIconDefinitions = loadFolderIconDefinitions( + folderIcons, + refinedConfig, + manifest + ); + + return merge( + languageIconDefinitions, + fileIconDefinitions, + folderIconDefinitions + ); +}; diff --git a/src/core/generator/iconOpacity.ts b/src/core/generator/iconOpacity.ts new file mode 100644 index 0000000000..0e41a20373 --- /dev/null +++ b/src/core/generator/iconOpacity.ts @@ -0,0 +1,118 @@ +import { lstat, readFile, readdir } from 'node:fs/promises'; +import { join } from 'node:path'; +import { getCustomIconPaths } from '../helpers/customIconPaths'; +import { resolvePath } from '../helpers/resolvePath'; +import { writeToFile } from '../helpers/writeFile'; +import { logger } from '../logging/logger'; +import { iconFolderPath } from './constants'; + +/** + * Changes the opacity of all icons in the set. + * @param config Icon JSON options which include the opacity value. + */ +export const setIconOpacity = async ( + opacity: number, + filesAssociations: Record +) => { + if (!validateOpacityValue(opacity)) { + return logger.error( + 'Invalid opacity value! Opacity must be a decimal number between 0 and 1!' + ); + } + + logger.info(`Setting opacity to ${opacity}...`); + + const iconsPath = resolvePath(iconFolderPath); + const customIconPaths = getCustomIconPaths(filesAssociations); + const iconFiles = await readdir(iconsPath); + + try { + // read all icon files from the icons folder + for (const iconFileName of iconFiles) { + await processSVGFile(iconsPath, iconFileName, opacity); + } + + for (const iconPath of customIconPaths) { + const customIcons = await readdir(iconPath); + for (const iconFileName of customIcons) { + await processSVGFile(iconPath, iconFileName, opacity); + } + } + } catch (error) { + logger.error(error); + } +}; + +/** + * Validate the opacity value. + * @param opacity Opacity value + */ +export const validateOpacityValue = (opacity: number | undefined) => { + return opacity !== undefined && opacity <= 1 && opacity >= 0; +}; + +/** + * Get the SVG root element. + * @param svg SVG file as string. + */ +const getSVGRootElement = (svg: string) => { + const result = new RegExp(/]*>/).exec(svg); + return result?.[0]; +}; + +/** + * Add an opacity attribute to the SVG icon to control the opacity of the icon. + * @param svgRoot Root element of the SVG icon. + * @param opacity Opacity value. + */ +const addOpacityAttribute = (svgRoot: string, opacity: number) => { + const pattern = new RegExp(/\sopacity="[\d.]+"/); + // if the opacity attribute already exists + if (pattern.test(svgRoot)) { + return svgRoot.replace(pattern, ` opacity="${opacity}"`); + } else { + return svgRoot.replace(/^ { + const pattern = new RegExp(/\sopacity="[\d.]+"/); + return svgRoot.replace(pattern, ''); +}; + +/** Function to add or remove opacity from a given SVG string */ +export const updateSVGOpacity = (svg: string, opacity: number): string => { + const svgRootElement = getSVGRootElement(svg); + if (!svgRootElement) return svg; + + let updatedRootElement: string; + if (opacity < 1) { + updatedRootElement = addOpacityAttribute(svgRootElement, opacity); + } else { + updatedRootElement = removeOpacityAttribute(svgRootElement); + } + return svg.replace(/]*>/, updatedRootElement); +}; + +/** Function to read an SVG file, update its opacity, and write it back */ +const processSVGFile = async ( + iconPath: string, + iconFileName: string, + opacity: number +): Promise => { + const svgFilePath = join(iconPath, iconFileName); + if (!(await lstat(svgFilePath)).isFile()) { + return; + } + + // Read SVG file + const svg = await readFile(svgFilePath, 'utf-8'); + const updatedSVG = updateSVGOpacity(svg, opacity); + + if (updatedSVG.trim().length === 0) return; + await writeToFile(svgFilePath, updatedSVG); +}; diff --git a/src/core/generator/iconSaturation.ts b/src/core/generator/iconSaturation.ts new file mode 100644 index 0000000000..15899c1e28 --- /dev/null +++ b/src/core/generator/iconSaturation.ts @@ -0,0 +1,152 @@ +import { lstat, readFile, readdir } from 'node:fs/promises'; +import { join } from 'node:path'; +import { getCustomIconPaths } from '../helpers/customIconPaths'; +import { resolvePath } from '../helpers/resolvePath'; +import { writeToFile } from '../helpers/writeFile'; +import { logger } from '../logging/logger'; +import { iconFolderPath } from './constants'; + +/** + * Changes saturation of all icons in the set. + * @param config Icon JSON options which include the saturation value. + * @param fileNames Only change the saturation of certain file names. + */ +export const setIconSaturation = async ( + saturation: number, + filesAssociations: Record +) => { + if (!validateSaturationValue(saturation)) { + return logger.error( + 'Invalid saturation value! Saturation must be a decimal number between 0 and 1!' + ); + } + + logger.info(`Setting saturation to ${saturation}...`); + + const iconsPath = resolvePath(iconFolderPath); + const customIconPaths = getCustomIconPaths(filesAssociations); + const iconFiles = await readdir(iconsPath); + + // read all icon files from the icons folder + try { + for (const iconFileName of iconFiles) { + await processSVGFileForSaturation(iconsPath, iconFileName, saturation); + } + + for (const iconPath of customIconPaths) { + const customIcons = await readdir(iconPath); + for (const iconFileName of customIcons) { + await processSVGFileForSaturation(iconPath, iconFileName, saturation); + } + } + } catch (error) { + logger.error(error); + } +}; + +/** + * Get the SVG root element. + * @param svg SVG file as string. + */ +const getSVGRootElement = (svg: string) => { + const result = new RegExp(/]*>/).exec(svg); + return result?.[0]; +}; + +/** + * Add an filter attribute to the SVG icon. + * @param svgRoot Root element of the SVG icon. + */ +const addFilterAttribute = (svgRoot: string) => { + const pattern = new RegExp(/\sfilter="[^"]+?"/); + // if the filter attribute already exists + if (pattern.test(svgRoot)) { + return svgRoot.replace(pattern, ' filter="url(#saturation)"'); + } else { + return svgRoot.replace(/^ { + const pattern = new RegExp(/\sfilter="[^"]+?"/); + return svgRoot.replace(pattern, ''); +}; + +/** + * Add filter element to the SVG icon. + * @param svg SVG file as string. + */ +const addFilterElement = (svg: string, saturation: number) => { + const pattern = new RegExp(/(.*<\/svg>)/); + const filterElement = ``; + if (pattern.test(svg)) { + return svg.replace(pattern, `${filterElement}$1`); + } else { + return svg.replace(/<\/svg>/, `${filterElement}`); + } +}; + +/** + * Remove filter element from the SVG icon. + * @param svg SVG file as string. + */ +const removeFilterElement = (svg: string) => { + const pattern = new RegExp(/(.*<\/svg>)/); + return svg.replace(pattern, '$1'); +}; + +/** + * Validate the saturation value. + * @param saturation Saturation value + */ +export const validateSaturationValue = (saturation: number | undefined) => { + return saturation !== undefined && saturation <= 1 && saturation >= 0; +}; + +/** Function to adjust the saturation of a given SVG string */ +export const adjustSVGSaturation = ( + svg: string, + saturation: number +): string => { + // Get the root element of the SVG + const svgRootElement = getSVGRootElement(svg); + if (!svgRootElement) return svg; + + let updatedRootElement: string; + + if (saturation < 1) { + updatedRootElement = addFilterAttribute(svgRootElement); + } else { + updatedRootElement = removeFilterAttribute(svgRootElement); + } + + let updatedSVG = svg.replace(/]*>/, updatedRootElement); + + if (saturation < 1) { + updatedSVG = addFilterElement(updatedSVG, saturation); + } else { + updatedSVG = removeFilterElement(updatedSVG); + } + + return updatedSVG; +}; + +/** Function to read an SVG file, adjust its saturation, and write it back */ +const processSVGFileForSaturation = async ( + iconPath: string, + iconFileName: string, + saturation: number +): Promise => { + const svgFilePath = join(iconPath, iconFileName); + if (!(await lstat(svgFilePath)).isFile()) return; + + // Read SVG file + const svg = await readFile(svgFilePath, 'utf-8'); + const updatedSVG = adjustSVGSaturation(svg, saturation); + + await writeToFile(svgFilePath, updatedSVG); +}; diff --git a/src/core/generator/languageGenerator.ts b/src/core/generator/languageGenerator.ts new file mode 100644 index 0000000000..42b83e103f --- /dev/null +++ b/src/core/generator/languageGenerator.ts @@ -0,0 +1,124 @@ +import { getFileConfigHash } from '../helpers/configHash'; +import { merge } from '../helpers/object'; +import type { Config, IconAssociations } from '../models/icons/config'; +import type { DefaultIcon } from '../models/icons/defaultIcon'; +import type { IconPackValue } from '../models/icons/iconPack'; +import type { LanguageIcon } from '../models/icons/languages/languageIdentifier'; +import type { Manifest } from '../models/manifest'; +import { + highContrastColorFileEnding, + iconFolderPath, + lightColorFileEnding, +} from './constants'; + +/** + * Get all file icons that can be used in this theme. + */ +export const loadLanguageIconDefinitions = ( + languageIcons: LanguageIcon[], + config: Config, + manifest: Manifest +): Manifest => { + const enabledLanguages = disableLanguagesByPack( + languageIcons, + config.activeIconPack + ); + const customIcons = getCustomIcons(config.languages?.associations); + const allLanguageIcons = [...enabledLanguages, ...customIcons]; + + allLanguageIcons.forEach((lang) => { + if (lang.disabled) return; + manifest = setIconDefinitions(manifest, config, lang.icon); + manifest = merge( + manifest, + setLanguageIdentifiers(lang.icon.name, lang.ids) + ); + manifest.light = lang.icon.light + ? merge( + manifest.light, + setLanguageIdentifiers( + lang.icon.name + lightColorFileEnding, + lang.ids + ) + ) + : manifest.light; + manifest.highContrast = lang.icon.highContrast + ? merge( + manifest.highContrast, + setLanguageIdentifiers( + lang.icon.name + highContrastColorFileEnding, + lang.ids + ) + ) + : manifest.highContrast; + }); + + return manifest; +}; + +const setIconDefinitions = ( + manifest: Manifest, + config: Config, + icon: DefaultIcon +) => { + createIconDefinitions(manifest, config, icon.name); + + if (icon.light) { + createIconDefinitions(manifest, config, icon.name + lightColorFileEnding); + } + if (icon.highContrast) { + createIconDefinitions( + manifest, + config, + icon.name + highContrastColorFileEnding + ); + } + + return manifest; +}; + +const createIconDefinitions = ( + manifest: Manifest, + config: Config, + iconName: string +) => { + const fileConfigHash = getFileConfigHash(config); + if (manifest.iconDefinitions) { + manifest.iconDefinitions[iconName] = { + iconPath: `${iconFolderPath}${iconName}${fileConfigHash}.svg`, + }; + } +}; + +const setLanguageIdentifiers = (iconName: string, languageIds: string[]) => { + const obj: Partial = { languageIds: {} }; + languageIds.forEach((id) => { + obj.languageIds![id as keyof Manifest] = iconName; + }); + return obj; +}; + +const getCustomIcons = (languageAssociations: IconAssociations | undefined) => { + if (!languageAssociations) return []; + + const icons: LanguageIcon[] = Object.keys(languageAssociations).map((fa) => ({ + icon: { name: languageAssociations[fa].toLowerCase() }, + ids: [fa.toLowerCase()], + })); + + return icons; +}; + +/** + * Disable all file icons that are in a pack which is disabled. + */ +const disableLanguagesByPack = ( + languageIcons: LanguageIcon[], + activatedIconPack: IconPackValue | undefined +) => { + return languageIcons.filter((language) => { + return !language.enabledFor + ? true + : language.enabledFor.some((p) => p === activatedIconPack); + }); +}; diff --git a/src/core/generator/renameIconFiles.ts b/src/core/generator/renameIconFiles.ts new file mode 100644 index 0000000000..6fd01f5a77 --- /dev/null +++ b/src/core/generator/renameIconFiles.ts @@ -0,0 +1,54 @@ +import { existsSync, readdirSync, renameSync, unlinkSync } from 'node:fs'; +import { join } from 'node:path'; +import { getFileConfigHash } from '../helpers/configHash'; +import { getCustomIconPaths } from '../helpers/customIconPaths'; +import { resolvePath } from '../helpers/resolvePath'; +import { logger } from '../logging/logger'; +import type { Config } from '../models/icons/config'; +import { iconFolderPath } from './constants'; + +/** + * Rename all icon files according their respective config. + * + * The rename triggers a change event in VS Code, which will update the icons in the UI. + * @param config Icon Json Options + */ +export const renameIconFiles = (config: Config) => { + const defaultIconPath = resolvePath(iconFolderPath); + const customPaths = getCustomIconPaths(config.files.associations); + const iconPaths = [defaultIconPath, ...customPaths]; + const fileConfigHash = getFileConfigHash(config); + + for (const iconPath of iconPaths) { + const files = readdirSync(iconPath).filter((f) => f.match(/\.svg/gi)); + + for (const f of files) { + const filePath = join(iconPath, f); + + // append file config to file name + const newFilePath = join( + iconPath, + f.replace(/(^[^\.~]+).*?(\.clone\.svg|\.svg)/, `$1${fileConfigHash}$2`) + ); + + try { + // if generated files are already in place, do not overwrite them + if (filePath !== newFilePath) { + if (existsSync(newFilePath)) { + if (existsSync(filePath)) { + logger.debug(`Deleting existing file: ${filePath}`); + unlinkSync(filePath); + } + } else { + if (existsSync(filePath)) { + logger.debug(`Renaming file: ${filePath} to ${newFilePath}`); + renameSync(filePath, newFilePath); + } + } + } + } catch (error) { + logger.error(error); + } + } + } +}; diff --git a/src/core/generator/shared/svg.ts b/src/core/generator/shared/svg.ts new file mode 100644 index 0000000000..5f4d1eea72 --- /dev/null +++ b/src/core/generator/shared/svg.ts @@ -0,0 +1,32 @@ +import { join } from 'node:path'; +import { resolvePath } from '../../helpers/resolvePath'; +import { writeToFile } from '../../helpers/writeFile'; +import { logger } from '../../logging/logger'; +import { iconFolderPath } from '../constants'; +import { updateSVGOpacity } from '../iconOpacity'; +import { adjustSVGSaturation } from '../iconSaturation'; + +export const writeSVGFiles = async ( + iconName: string, + svg: string, + opacity: number, + saturation: number +) => { + // Update the opacity and saturation of the SVG + const updatedOpacity = updateSVGOpacity(svg, opacity); + const updatedSaturation = adjustSVGSaturation(updatedOpacity, saturation); + + const iconsPath = resolvePath(iconFolderPath); + const iconsFolderPath = join(iconsPath, `${iconName}.svg`); + try { + await writeToFile(iconsFolderPath, updatedSaturation); + } catch (error) { + logger.error(error); + } +}; + +export const getPath = (d: string, color: string) => + ``; + +export const getSVG = (path: string, viewBoxSize = 32) => + `${path}`; diff --git a/src/core/generator/shared/validation.ts b/src/core/generator/shared/validation.ts new file mode 100644 index 0000000000..d7bfb9c6a7 --- /dev/null +++ b/src/core/generator/shared/validation.ts @@ -0,0 +1,8 @@ +/** + * Validate the HEX color code + * @param color HEX code + */ +export const validateHEXColorCode = (color: string = '') => { + const hexPattern = new RegExp(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/); + return color.length > 0 && hexPattern.test(color); +}; diff --git a/src/core/helpers/configHash.ts b/src/core/helpers/configHash.ts new file mode 100644 index 0000000000..c1fa4eee90 --- /dev/null +++ b/src/core/helpers/configHash.ts @@ -0,0 +1,51 @@ +import { getDefaultConfig } from '../generator/config/defaultConfig'; +import { logger } from '../logging/logger'; +import type { Config } from '../models/icons/config'; + +/** + * Generate a config hashed string that is appended to each icon file name. + * @param config Icon Configuration object + */ +export const getFileConfigHash = (config: Partial): string => { + try { + const defaults = getDefaultConfig(); + let fileConfigString = ''; + if ( + config.saturation !== defaults.saturation || + config.opacity !== defaults.opacity || + config.folders?.color !== defaults.folders.color || + config.files?.color !== defaults.files.color || + (config.files?.customClones?.length ?? 0) > 0 || + (config.folders?.customClones?.length ?? 0) > 0 + ) { + // Any changes that are hashed will trigger a refresh of the icon in the VS Code UI + fileConfigString += `~${getHash( + JSON.stringify({ + saturation: config.saturation, + opacity: config.opacity, + foldersColor: config.folders?.color, + filesColor: config.files?.color, + fileClones: config.files?.customClones, + folderClones: config.folders?.customClones, + }) + )}`; + } + return fileConfigString; + } catch (error) { + logger.error(error); + return ''; + } +}; + +const getHash = (value: string) => { + let hash = 0; + let chr = 0; + + if (value.length === 0) return hash; + for (let i = 0; i < value.length; i++) { + chr = value.charCodeAt(i); + hash = (hash << 5) - hash + chr; + hash |= 0; // Convert to 32bit integer + } + return hash; +}; diff --git a/src/core/helpers/customIconPaths.ts b/src/core/helpers/customIconPaths.ts new file mode 100644 index 0000000000..f6afb16c76 --- /dev/null +++ b/src/core/helpers/customIconPaths.ts @@ -0,0 +1,10 @@ +import { dirname } from 'node:path'; +import { resolvePath } from './resolvePath'; + +export const getCustomIconPaths = ( + filesAssociations: Record = {} +) => { + return Object.values(filesAssociations) + .filter((fileName) => fileName.match(/^[.\/]+/)) // <- custom dirs have a relative path to the dist folder + .map((fileName) => dirname(resolvePath(fileName))); +}; diff --git a/src/core/helpers/iconPacks.ts b/src/core/helpers/iconPacks.ts new file mode 100644 index 0000000000..f84ff94921 --- /dev/null +++ b/src/core/helpers/iconPacks.ts @@ -0,0 +1,4 @@ +import { IconPack, type IconPackValue } from '../models/icons/iconPack'; + +/** Get all packs that can be used in this icon theme. */ +export const availableIconPacks: IconPackValue[] = Object.values(IconPack); diff --git a/src/core/helpers/object.ts b/src/core/helpers/object.ts new file mode 100644 index 0000000000..adff1d3701 --- /dev/null +++ b/src/core/helpers/object.ts @@ -0,0 +1,108 @@ +/** + * Get the nested properties of an object. + * This solution is lighter than the lodash get-version. + * Source: http://stackoverflow.com/a/6491621/6942210 + */ +export const get = (obj: Object, path: string): T | undefined => { + const pathArray = path + .replace(/\[(\w+)\]/g, '.$1') // convert indexes to properties + .replace(/^\./, '') // strip a leading dot + .split('.'); // separate paths in array + + /** Avoid errors in the getValue function. */ + const isObject = (object: unknown) => { + return object === Object(object); + }; + let result = structuredClone(obj); + + for (let i = 0; i < pathArray.length; ++i) { + const k = pathArray[i]; + if (isObject(result) && k in result) { + result = (result as Record)[k] as Object; + } else { + return; + } + } + return result as T; +}; + +/** + * Set a value for a nested object property. + * @param obj Object + * @param path Properties as string e.g. `'a.b.c'` + * @param value Value to be set for the given property + * Source: https://stackoverflow.com/a/13719799/6942210 + */ +export const set = ( + // biome-ignore lint/suspicious/noExplicitAny: Multiple unknown types due to recursive function + obj: { [key: string]: any }, + path: string | string[], + value: unknown +) => { + if (typeof path === 'string') { + path = path.split('.'); + } + + if (path.length > 1) { + const e = path.shift() ?? ''; + set( + (obj[e] = + Object.prototype.toString.call(obj[e]) === '[object Object]' + ? obj[e] + : {}), + path, + value + ); + } else { + obj[path[0]] = value; + } +}; + +/** + * Merges given objects recursively. + * + * @param objects Provide the objects that should be merged. + * @returns A new object that is the result of the merge. + */ +export const merge = >( + ...objects: (T | undefined | null)[] +): T => { + return objects.reduce((acc, obj) => { + Object.keys(obj ?? {}).forEach((key) => { + const accValue = (acc as Record)[key]; + const objValue = obj?.[key]; + + // Check if one of the values is null or undefined and the other is not + if ( + (accValue === undefined || accValue === null) && + objValue !== undefined && + objValue !== null + ) { + (acc as Record)[key] = objValue; + } else if ( + (objValue === undefined || objValue === null) && + accValue !== undefined && + accValue !== null + ) { + // No need to assign acc[key] to itself + } else if (Array.isArray(objValue) && Array.isArray(accValue)) { + (acc as Record)[key] = [ + ...new Set(accValue.concat(objValue)), + ]; + } else if ( + typeof objValue === 'object' && + objValue !== null && + typeof accValue === 'object' && + accValue !== null + ) { + (acc as Record)[key] = merge( + accValue as Record, + objValue as Record + ); + } else { + (acc as Record)[key] = objValue; + } + }); + return acc; + }, {} as T); +}; diff --git a/src/core/helpers/resolvePath.ts b/src/core/helpers/resolvePath.ts new file mode 100644 index 0000000000..1dbae2a9f2 --- /dev/null +++ b/src/core/helpers/resolvePath.ts @@ -0,0 +1,5 @@ +import { join } from 'node:path'; + +export const resolvePath = (path: string): string => { + return join(__dirname, '..', '..', path); +}; diff --git a/src/core/helpers/titlecase.ts b/src/core/helpers/titlecase.ts new file mode 100644 index 0000000000..2757a705c0 --- /dev/null +++ b/src/core/helpers/titlecase.ts @@ -0,0 +1,11 @@ +/** Capitalize the first letter of a string */ +export const capitalizeFirstLetter = (name: string): string => + name.charAt(0).toUpperCase() + name.slice(1); + +/** TitleCase all words in a string */ +export const toTitleCase = (value: string) => { + return value.replace( + /\w\S*/g, + (text) => text.charAt(0).toUpperCase() + text.substring(1).toLowerCase() + ); +}; diff --git a/src/core/helpers/writeFile.ts b/src/core/helpers/writeFile.ts new file mode 100644 index 0000000000..87f01f2cfe --- /dev/null +++ b/src/core/helpers/writeFile.ts @@ -0,0 +1,21 @@ +import { writeFile } from 'node:fs/promises'; +import { logger } from '../logging/logger'; + +/** + * Write content to a file. + * + * @param filePath File path to write to + * @param data Content to write to the file + */ +export const writeToFile = async ( + filePath: string, + data: string, + encoding?: BufferEncoding +) => { + if (!filePath || !data || data.trim().length === 0) { + logger.error('Invalid file path or data to write! File path: ' + filePath); + return; + } + logger.debug('Writing to file: ' + filePath); + await writeFile(filePath, data, encoding); +}; diff --git a/src/core/i18n/translate.ts b/src/core/i18n/translate.ts new file mode 100644 index 0000000000..de35efe398 --- /dev/null +++ b/src/core/i18n/translate.ts @@ -0,0 +1,123 @@ +import { get } from '../helpers/object'; +import { logger } from '../logging/logger'; +import type { Translation } from '../models/i18n/translation'; +import { translation as langCs } from './translations/lang-cs'; +import { translation as langDe } from './translations/lang-de'; +import { translation as langEn } from './translations/lang-en'; +import { translation as langEs } from './translations/lang-es'; +import { translation as langFr } from './translations/lang-fr'; +import { translation as langId } from './translations/lang-id'; +import { translation as langJa } from './translations/lang-ja'; +import { translation as langKo } from './translations/lang-ko'; +import { translation as langNl } from './translations/lang-nl'; +import { translation as langPl } from './translations/lang-pl'; +import { translation as langPtBr } from './translations/lang-pt-br'; +import { translation as langPtPt } from './translations/lang-pt-pt'; +import { translation as langRu } from './translations/lang-ru'; +import { translation as langUk } from './translations/lang-uk'; +import { translation as langZhCn } from './translations/lang-zh-cn'; +import { translation as langZhTw } from './translations/lang-zh-tw'; + +let currentTranslation: Translation; +let fallbackTranslation: Translation; + +const placeholder = '%'; + +/** Initialize the translations */ +export const initTranslations = async (language: string) => { + try { + currentTranslation = await loadTranslation(language); + fallbackTranslation = await loadTranslation('en'); + logger.info('Translations initialized.'); + } catch (error) { + logger.error(error); + } +}; + +/** Load the required translation */ +const loadTranslation = async (language: string) => { + try { + return await getTranslationObject(language); + } catch { + return await getTranslationObject('en'); + } +}; + +/** Get the translation object of the separated translation files */ +const getTranslationObject = async (language: string): Promise => { + switch (language) { + case 'cs': + return langCs; + case 'de': + return langDe; + case 'en': + return langEn; + case 'es': + return langEs; + case 'fr': + return langFr; + case 'id': + return langId; + case 'ja': + return langJa; + case 'ko': + return langKo; + case 'nl': + return langNl; + case 'pl': + return langPl; + case 'pt-br': + return langPtBr; + case 'pt-pt': + return langPtPt; + case 'ru': + return langRu; + case 'uk': + return langUk; + case 'zh-cn': + return langZhCn; + case 'zh-tw': + return langZhTw; + default: + return langEn; + } +}; + +/** + * We look up the matching translation in the translation files. + * If we cannot find a matching key in the file we use the fallback. + * With optional parameters you can configure both the translations + * and the fallback (required for testing purposes). + * */ +export const getTranslationValue = ( + key: string, + translations = currentTranslation, + fallback = fallbackTranslation +): string | undefined => { + return get(translations, key) ?? get(fallback, key); +}; + +/** + * The instant method is required for the translate pipe. + * It helps to translate a word instantly. + */ +export const translate = (key: string, ...variables: string[]): string => { + const translation = getTranslationValue(key); + + if (variables.length === 0) return translation ?? key; + return replace(translation, ...variables); +}; + +/** + * The replace function will replace the current placeholder with the + * data parameter from the translation. You can give it one or more optional + * parameters ('variables'). + */ +export const replace = (value: string = '', ...variables: string[]) => { + let translation: string = value; + variables.forEach((variable, i) => { + translation = translation.replace(`${placeholder}${i}`, variable); + }); + + return translation; +}; diff --git a/src/core/i18n/translations/lang-cs.ts b/src/core/i18n/translations/lang-cs.ts new file mode 100644 index 0000000000..ce259019ed --- /dev/null +++ b/src/core/i18n/translations/lang-cs.ts @@ -0,0 +1,45 @@ +import type { Translation } from '../../models/i18n/translation'; + +export const translation: Translation = { + activate: 'Aktivovat', + activated: 'Material Icon Tรฉma je aktivnรญ.', + iconPacks: { + selectPack: 'Vyberte sadu ikon', + description: "Vyberte sadu ikon '%0'", + disabled: 'Zakรกzat balรญฤky ikon', + }, + folders: { + toggleIcons: 'Vyberte motiv sloลพky', + disabled: 'ลฝรกdnรฉ ikony sloลพek', + theme: { + description: "Vyberte motiv sloลพky '%0'", + }, + }, + colorSelect: { + color: 'Vyberte barvu', + hexCode: 'Vloลพte hexadecimรกlnรญ kรณd barvy', + wrongHexCode: 'Neplatnรฝ hexadecimรกlnรญ kรณd barvy!', + }, + opacity: { + inputPlaceholder: 'Hodnota prลฏhlednosti (od 0 do 1)', + wrongValue: 'Zadejte desetinnรฉ ฤรญslo mezi 0 a 1.', + }, + toggleSwitch: { + on: 'ZAPNUTO', + off: 'VYPNUTO', + }, + explorerArrows: { + toggle: 'ล ipky sloลพek v prลฏzkumnรญkovi', + enable: 'Zobrazit ลกipky sloลพek v Prลฏzkumnรญkovi', + disable: 'Skrรฝt ลกipky sloลพek v Prลฏzkumnรญkovi', + }, + grayscale: { + toggle: 'Zobrazovat ikony ve stupnรญch ลกedi', + enable: 'Povolit ikony ve stupnรญch ลกedi', + disable: 'Zakรกzat ikony ve stupnรญch ลกedi', + }, + saturation: { + inputPlaceholder: 'Hodnota sytosti (mezi 0 a 1)', + wrongValue: 'Zadejte desetinnรฉ ฤรญslo mezi 0 a 1.', + }, +}; diff --git a/src/i18n/lang-de.ts b/src/core/i18n/translations/lang-de.ts similarity index 94% rename from src/i18n/lang-de.ts rename to src/core/i18n/translations/lang-de.ts index aca221b658..fdef538a65 100644 --- a/src/i18n/lang-de.ts +++ b/src/core/i18n/translations/lang-de.ts @@ -1,4 +1,4 @@ -import { Translation } from '../models'; +import type { Translation } from '../../models/i18n/translation'; export const translation: Translation = { activate: 'Aktivieren', diff --git a/src/i18n/lang-en.ts b/src/core/i18n/translations/lang-en.ts similarity index 94% rename from src/i18n/lang-en.ts rename to src/core/i18n/translations/lang-en.ts index 1d57554043..98567d81a4 100644 --- a/src/i18n/lang-en.ts +++ b/src/core/i18n/translations/lang-en.ts @@ -1,4 +1,4 @@ -import { Translation } from '../models'; +import type { Translation } from '../../models/i18n/translation'; export const translation: Translation = { activate: 'Activate', diff --git a/src/i18n/lang-es.ts b/src/core/i18n/translations/lang-es.ts similarity index 95% rename from src/i18n/lang-es.ts rename to src/core/i18n/translations/lang-es.ts index ca7d562310..e27277f59f 100644 --- a/src/i18n/lang-es.ts +++ b/src/core/i18n/translations/lang-es.ts @@ -1,4 +1,4 @@ -import { Translation } from '../models'; +import type { Translation } from '../../models/i18n/translation'; export const translation: Translation = { activate: 'Activar', diff --git a/src/i18n/lang-fr.ts b/src/core/i18n/translations/lang-fr.ts similarity index 95% rename from src/i18n/lang-fr.ts rename to src/core/i18n/translations/lang-fr.ts index 1a0e62172a..b3c47480dc 100644 --- a/src/i18n/lang-fr.ts +++ b/src/core/i18n/translations/lang-fr.ts @@ -1,4 +1,4 @@ -import { Translation } from '../models'; +import type { Translation } from '../../models/i18n/translation'; export const translation: Translation = { activate: 'Activer', diff --git a/src/core/i18n/translations/lang-id.ts b/src/core/i18n/translations/lang-id.ts new file mode 100644 index 0000000000..f411072e9f --- /dev/null +++ b/src/core/i18n/translations/lang-id.ts @@ -0,0 +1,45 @@ +import type { Translation } from '../../models/i18n/translation'; + +export const translation: Translation = { + activate: "Aktifkan", + activated: "Tema Ikon Material aktif.", + iconPacks: { + selectPack: "Pilih paket ikon", + description: "Pilih paket ikon '%0'", + disabled: "Nonaktifkan paket ikon" + }, + folders: { + toggleIcons: "Pilih tema folder", + disabled: "Tidak ada ikon folder", + theme: { + description: "Pilih tema folder '%0'" + } + }, + colorSelect: { + color: "Pilih warna", + hexCode: "Masukkan kode warna HEX", + wrongHexCode: "Kode warna HEX tidak valid!" + }, + opacity: { + inputPlaceholder: "Nilai opasitas (antara 0 dan 1)", + wrongValue: "Silakan masukkan angka desimal antara 0 dan 1." + }, + toggleSwitch: { + on: "AKTIF", + off: "NONAKTIF" + }, + explorerArrows: { + toggle: "Alihkan panah folder di Explorer", + enable: "Tampilkan panah folder di Explorer", + disable: "Sembunyikan panah folder di Explorer" + }, + grayscale: { + toggle: "Alihkan ikon grayscale", + enable: "Aktifkan ikon grayscale", + disable: "Nonaktifkan ikon grayscale" + }, + saturation: { + inputPlaceholder: "Nilai saturasi (antara 0 dan 1)", + wrongValue: "Silakan masukkan angka desimal antara 0 dan 1." + } +}; diff --git a/src/i18n/lang-ja.ts b/src/core/i18n/translations/lang-ja.ts similarity index 95% rename from src/i18n/lang-ja.ts rename to src/core/i18n/translations/lang-ja.ts index 577485b840..e93f7d41fd 100644 --- a/src/i18n/lang-ja.ts +++ b/src/core/i18n/translations/lang-ja.ts @@ -1,4 +1,4 @@ -import { Translation } from '../models'; +import type { Translation } from '../../models/i18n/translation'; export const translation: Translation = { activate: 'ๆœ‰ๅŠนๅŒ–', diff --git a/src/core/i18n/translations/lang-ko.ts b/src/core/i18n/translations/lang-ko.ts new file mode 100644 index 0000000000..ae46858310 --- /dev/null +++ b/src/core/i18n/translations/lang-ko.ts @@ -0,0 +1,45 @@ +import type { Translation } from '../../models/i18n/translation'; + +export const translation: Translation = { + activate: 'ํ™œ์„ฑํ™”', + activated: 'Material Icon Theme์ด ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.', + iconPacks: { + selectPack: '์•„์ด์ฝ˜ ํŒฉ ์„ ํƒ', + description: "'%0' ์•„์ด์ฝ˜ ํŒฉ ์„ ํƒ", + disabled: '์•„์ด์ฝ˜ ํŒฉ ๋น„ํ™œ์„ฑํ™”', + }, + folders: { + toggleIcons: 'ํด๋” ํ…Œ๋งˆ ์„ ํƒ', + disabled: 'ํด๋” ์•„์ด์ฝ˜ ์—†์Œ', + theme: { + description: "'%0' ํด๋” ํ…Œ๋งˆ ์„ ํƒ", + }, + }, + colorSelect: { + color: '์ƒ‰์ƒ ์„ ํƒ', + hexCode: 'HEX ์ƒ‰์ƒ ์ฝ”๋“œ ์ž…๋ ฅ', + wrongHexCode: '์œ ํšจํ•˜์ง€ ์•Š์€ HEX ์ƒ‰์ƒ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค!', + }, + opacity: { + inputPlaceholder: 'ํˆฌ๋ช…๋„ ๊ฐ’ (0๊ณผ 1 ์‚ฌ์ด)', + wrongValue: '0๊ณผ 1 ์‚ฌ์ด์˜ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.', + }, + toggleSwitch: { + on: '์ผœ์ง', + off: '๊บผ์ง', + }, + explorerArrows: { + toggle: 'ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ์˜ ํด๋” ํ™”์‚ดํ‘œ ์„ค์ •', + enable: 'ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ์˜ ํด๋” ํ™”์‚ดํ‘œ ํ‘œ์‹œ', + disable: 'ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ์˜ ํด๋” ํ™”์‚ดํ‘œ ์ˆจ๊ธฐ๊ธฐ', + }, + grayscale: { + toggle: '๊ทธ๋ ˆ์ด์Šค์ผ€์ผ ์•„์ด์ฝ˜ ์„ค์ •', + enable: '๊ทธ๋ ˆ์ด์Šค์ผ€์ผ ์•„์ด์ฝ˜ ํ™œ์„ฑํ™”', + disable: '๊ทธ๋ ˆ์ด์Šค์ผ€์ผ ์•„์ด์ฝ˜ ๋น„ํ™œ์„ฑํ™”', + }, + saturation: { + inputPlaceholder: '์ฑ„๋„ ๊ฐ’ (0๊ณผ 1 ์‚ฌ์ด)', + wrongValue: '0๊ณผ 1 ์‚ฌ์ด์˜ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.', + }, +}; diff --git a/src/i18n/lang-nl.ts b/src/core/i18n/translations/lang-nl.ts similarity index 94% rename from src/i18n/lang-nl.ts rename to src/core/i18n/translations/lang-nl.ts index 345a626523..77fa55285c 100644 --- a/src/i18n/lang-nl.ts +++ b/src/core/i18n/translations/lang-nl.ts @@ -1,4 +1,4 @@ -import { Translation } from '../models'; +import type { Translation } from '../../models/i18n/translation'; export const translation: Translation = { activate: 'Activeer', diff --git a/src/i18n/lang-pl.ts b/src/core/i18n/translations/lang-pl.ts similarity index 94% rename from src/i18n/lang-pl.ts rename to src/core/i18n/translations/lang-pl.ts index 1742b9e441..d44fe024da 100644 --- a/src/i18n/lang-pl.ts +++ b/src/core/i18n/translations/lang-pl.ts @@ -1,4 +1,4 @@ -import { Translation } from '../models'; +import type { Translation } from '../../models/i18n/translation'; export const translation: Translation = { activate: 'Aktywuj', diff --git a/src/i18n/lang-pt-br.ts b/src/core/i18n/translations/lang-pt-br.ts similarity index 95% rename from src/i18n/lang-pt-br.ts rename to src/core/i18n/translations/lang-pt-br.ts index d059c4ef9b..ecbbe3fcda 100644 --- a/src/i18n/lang-pt-br.ts +++ b/src/core/i18n/translations/lang-pt-br.ts @@ -1,4 +1,4 @@ -import { Translation } from '../models'; +import type { Translation } from '../../models/i18n/translation'; export const translation: Translation = { activate: 'Ativar', diff --git a/src/i18n/lang-pt-pt.ts b/src/core/i18n/translations/lang-pt-pt.ts similarity index 95% rename from src/i18n/lang-pt-pt.ts rename to src/core/i18n/translations/lang-pt-pt.ts index 0d2ce2fd37..ba093f7c98 100644 --- a/src/i18n/lang-pt-pt.ts +++ b/src/core/i18n/translations/lang-pt-pt.ts @@ -1,4 +1,4 @@ -import { Translation } from '../models'; +import type { Translation } from '../../models/i18n/translation'; export const translation: Translation = { activate: 'Habilitar', diff --git a/src/i18n/lang-ru.ts b/src/core/i18n/translations/lang-ru.ts similarity index 96% rename from src/i18n/lang-ru.ts rename to src/core/i18n/translations/lang-ru.ts index 24e82ef973..f30c909112 100644 --- a/src/i18n/lang-ru.ts +++ b/src/core/i18n/translations/lang-ru.ts @@ -1,4 +1,4 @@ -import { Translation } from '../models'; +import type { Translation } from '../../models/i18n/translation'; export const translation: Translation = { activate: 'ะะบั‚ะธะฒะธั€ะพะฒะฐั‚ัŒ', diff --git a/src/i18n/lang-uk.ts b/src/core/i18n/translations/lang-uk.ts similarity index 96% rename from src/i18n/lang-uk.ts rename to src/core/i18n/translations/lang-uk.ts index b9637c5de6..982d509750 100644 --- a/src/i18n/lang-uk.ts +++ b/src/core/i18n/translations/lang-uk.ts @@ -1,4 +1,4 @@ -import { Translation } from '../models'; +import type { Translation } from '../../models/i18n/translation'; export const translation: Translation = { activate: 'ะะบั‚ะธะฒัƒะฒะฐั‚ะธ', diff --git a/src/i18n/lang-zh-cn.ts b/src/core/i18n/translations/lang-zh-cn.ts similarity index 94% rename from src/i18n/lang-zh-cn.ts rename to src/core/i18n/translations/lang-zh-cn.ts index 96433443f8..033a4612f2 100644 --- a/src/i18n/lang-zh-cn.ts +++ b/src/core/i18n/translations/lang-zh-cn.ts @@ -1,4 +1,4 @@ -import { Translation } from '../models'; +import type { Translation } from '../../models/i18n/translation'; export const translation: Translation = { activate: 'ๆฟ€ๆดป', diff --git a/src/i18n/lang-zh-tw.ts b/src/core/i18n/translations/lang-zh-tw.ts similarity index 94% rename from src/i18n/lang-zh-tw.ts rename to src/core/i18n/translations/lang-zh-tw.ts index 573ba54ead..2dd985d7b1 100644 --- a/src/i18n/lang-zh-tw.ts +++ b/src/core/i18n/translations/lang-zh-tw.ts @@ -1,4 +1,4 @@ -import { Translation } from '../models'; +import type { Translation } from '../../models/i18n/translation'; export const translation: Translation = { activate: 'ๆฟ€ๆดป', diff --git a/src/icons/fileIcons.ts b/src/core/icons/fileIcons.ts similarity index 72% rename from src/icons/fileIcons.ts rename to src/core/icons/fileIcons.ts index b3d1d74108..cd8c640ce1 100644 --- a/src/icons/fileIcons.ts +++ b/src/core/icons/fileIcons.ts @@ -1,11 +1,14 @@ -import { FileIcons, IconPack } from '../models/index'; +import type { FileIcons } from '../models/icons/files/fileTypes'; +import { IconPack } from '../models/icons/iconPack'; +import { FileNamePattern } from '../models/icons/patterns/patterns'; +import { parseByPattern } from '../patterns/patterns'; /** * Defines file icons */ export const fileIcons: FileIcons = { defaultIcon: { name: 'file' }, - icons: [ + icons: parseByPattern([ { name: 'html', fileExtensions: ['htm', 'xhtml', 'html_vm', 'asp'] }, { name: 'pug', @@ -20,6 +23,7 @@ export const fileIcons: FileIcons = { { name: 'css', fileExtensions: ['css'] }, { name: 'sass', fileExtensions: ['scss', 'sass'] }, { name: 'less', fileExtensions: ['less'] }, + { name: 'just', fileNames: ['justfile', '.justfile'] }, { name: 'json', fileExtensions: [ @@ -38,8 +42,13 @@ export const fileIcons: FileIcons = { '.esformatter', 'cdp.pid', '.lintstagedrc', + '.whitesource', ], }, + { + name: 'hjson', + fileExtensions: ['hjson'], + }, { name: 'jinja', fileExtensions: ['jinja', 'jinja2', 'j2', 'jinja-html'], @@ -52,6 +61,9 @@ export const fileIcons: FileIcons = { 'playwright.config.js', 'playwright.config.mjs', 'playwright.config.ts', + 'playwright.config.base.js', + 'playwright.config.base.mjs', + 'playwright.config.base.ts', 'playwright-ct.config.js', 'playwright-ct.config.mjs', 'playwright-ct.config.ts', @@ -64,13 +76,7 @@ export const fileIcons: FileIcons = { { name: 'twine', fileExtensions: ['tw', 'twee'] }, { name: 'yaml', - fileExtensions: [ - 'yml', - 'yaml', - 'yml.dist', - 'yaml.dist', - 'YAML-tmLanguage', - ], + fileExtensions: ['yml.dist', 'yaml.dist', 'YAML-tmLanguage'], }, { name: 'xml', @@ -154,6 +160,21 @@ export const fileIcons: FileIcons = { { name: 'javascript', fileExtensions: ['esx', 'mjs'] }, { name: 'react', fileExtensions: ['jsx'] }, { name: 'react_ts', fileExtensions: ['tsx'] }, + { + name: 'rocket', + fileNames: [ + '.release-it.json', + '.release-it.ts', + '.release-it.js', + '.release-it.cjs', + '.release-it.yaml', + '.release-it.yml', + '.release-it.toml', + 'release.toml', + 'release-plz.toml', + '.release-plz.toml', + ], + }, { name: 'routing', fileExtensions: [ @@ -224,7 +245,6 @@ export const fileIcons: FileIcons = { fileExtensions: [ 'ini', 'dlc', - 'dll', 'config', 'conf', 'properties', @@ -237,6 +257,7 @@ export const fileIcons: FileIcons = { 'sln.dotsettings', 'sln.dotsettings.user', 'cfg', + 'cnf', ], fileNames: [ '.jshintignore', @@ -245,7 +266,9 @@ export const fileIcons: FileIcons = { '.yardopts', 'manifest.mf', '.clang-format', + '.clang-format-ignore', '.clang-tidy', + '.conf', ], }, { @@ -256,6 +279,9 @@ export const fileIcons: FileIcons = { { name: 'astro', fileExtensions: ['astro'], + }, + { + name: 'astro-config', fileNames: [ 'astro.config.js', 'astro.config.mjs', @@ -288,6 +314,7 @@ export const fileIcons: FileIcons = { 'csproj', 'ruleset', 'sln', + 'slnx', 'suo', 'vb', 'vbs', @@ -310,13 +337,17 @@ export const fileIcons: FileIcons = { 'sqlite3', 'pgsql', 'postgres', + 'plpgsql', 'psql', 'db', 'db3', + 'dblite', + 'dblite3', + 'debugsymbols', ], }, { name: 'kusto', fileExtensions: ['kql'] }, - { name: 'csharp', fileExtensions: ['cs', 'csx'] }, + { name: 'csharp', fileExtensions: ['cs', 'csx', 'csharp'] }, { name: 'qsharp', fileExtensions: ['qs'] }, { name: 'zip', @@ -337,10 +368,11 @@ export const fileIcons: FileIcons = { 'tz', 'txz', 'tgz', + 'zst', ], }, { name: 'vala', fileExtensions: ['vala'] }, - { name: 'zig', fileExtensions: ['zig'] }, + { name: 'zig', fileExtensions: ['zig', 'zon'] }, { name: 'exe', fileExtensions: ['exe', 'msi'] }, { name: 'hex', fileExtensions: ['dat', 'bin', 'hex'] }, { name: 'java', fileExtensions: ['java', 'jsp'] }, @@ -356,8 +388,6 @@ export const fileIcons: FileIcons = { name: 'hpp', fileExtensions: ['hh', 'hpp', 'hxx', 'h++', 'hp', 'tcc', 'inl'], }, - { name: 'objective-c', fileExtensions: ['m'] }, - { name: 'objective-cpp', fileExtensions: ['mm'] }, { name: 'rc', fileExtensions: ['rc'] }, { name: 'go', fileExtensions: ['go'] }, { @@ -376,6 +406,7 @@ export const fileIcons: FileIcons = { 'pylintrc', '.pylintrc', 'pyproject.toml', + 'py.typed', ], }, { name: 'url', fileExtensions: ['url'] }, @@ -439,12 +470,25 @@ export const fileIcons: FileIcons = { 'licence.md', 'licence.rst', 'licence.txt', + 'unlicense', + 'unlicense.txt', ], }, { name: 'key', - fileExtensions: ['pub', 'key', 'pem', 'asc', 'gpg', 'passwd'], - fileNames: ['.htpasswd'], + fileExtensions: [ + 'pub', + 'key', + 'pem', + 'asc', + 'gpg', + 'passwd', + 'shasum', + 'sha256', + 'sha256sum', + 'sha256sums', + ], + fileNames: ['.htpasswd', 'sha256sums', '.secrets'], }, { name: 'font', @@ -466,7 +510,8 @@ export const fileIcons: FileIcons = { 'mrf', ], }, - { name: 'lib', fileExtensions: ['lib', 'bib'] }, + { name: 'lib', fileExtensions: ['lib', 'bib', 'a'] }, + { name: 'dll', fileExtensions: ['dll', 'ilk', 'so'] }, { name: 'ruby', fileExtensions: ['rb', 'erb', 'rbs'], @@ -478,6 +523,7 @@ export const fileIcons: FileIcons = { fileNames: ['.rubocop.yml', '.rubocop-todo.yml', '.rubocop_todo.yml'], light: true, }, + { name: 'rspec', fileNames: ['.rspec'] }, { name: 'fsharp', fileExtensions: ['fs', 'fsx', 'fsi', 'fsproj'] }, { name: 'swift', fileExtensions: ['swift'] }, { name: 'arduino', fileExtensions: ['ino'] }, @@ -488,6 +534,8 @@ export const fileIcons: FileIcons = { 'dockerfile', 'docker-compose.yml', 'docker-compose.yaml', + 'containerignore', + 'containerfile', 'compose.yaml', 'compose.yml', ], @@ -542,6 +590,22 @@ export const fileIcons: FileIcons = { 'docker-compose.web.yaml', 'docker-compose.worker.yaml', + 'containerfile', + 'containerfile.prod', + 'containerfile.production', + 'containerfile.alpha', + 'containerfile.beta', + 'containerfile.stage', + 'containerfile.staging', + 'containerfile.dev', + 'containerfile.development', + 'containerfile.local', + 'containerfile.test', + 'containerfile.testing', + 'containerfile.ci', + 'containerfile.web', + 'containerfile.worker', + 'compose.yaml', 'compose.override.yaml', 'compose.prod.yaml', @@ -622,6 +686,7 @@ export const fileIcons: FileIcons = { ], }, { name: 'virtual', fileExtensions: ['vdi', 'vbox', 'vbox-prev'] }, + { name: 'vedic', fileExtensions: ['ved', 'veda', 'vedic'] }, { name: 'email', fileExtensions: ['ics'], fileNames: ['.mailmap'] }, { name: 'audio', @@ -632,30 +697,24 @@ export const fileIcons: FileIcons = { { name: 'graphql', fileExtensions: ['graphql', 'gql'], - fileNames: [ - '.graphqlconfig', - '.graphqlrc', - '.graphqlrc.json', - '.graphqlrc.js', - '.graphqlrc.cjs', - '.graphqlrc.ts', - '.graphqlrc.toml', - '.graphqlrc.yaml', - '.graphqlrc.yml', - 'graphql.config.json', - 'graphql.config.js', - 'graphql.config.cjs', - 'graphql.config.ts', - 'graphql.config.toml', - 'graphql.config.yaml', - 'graphql.config.yml', - ], + fileNames: ['.graphqlconfig'], + patterns: { + graphql: FileNamePattern.Ecmascript, + }, }, { name: 'rust', fileExtensions: ['rs', 'ron'] }, { name: 'raml', fileExtensions: ['raml'] }, { name: 'xaml', fileExtensions: ['xaml'] }, { name: 'haskell', fileExtensions: ['hs'] }, { name: 'kotlin', fileExtensions: ['kt', 'kts'] }, + { + name: 'mist', + fileExtensions: ['mist.js', 'mist.ts', 'mist.jsx', 'mist.tsx'], + clone: { + base: 'liquid', + color: 'blue-500', + }, + }, { name: 'otne', fileExtensions: ['otne'] }, { name: 'git', @@ -672,6 +731,8 @@ export const fileIcons: FileIcons = { '.gitconfig', '.gitmodules', '.gitkeep', + '.keep', + '.gitpreserve', '.gitinclude', '.git-blame-ignore', '.git-blame-ignore-revs', @@ -689,7 +750,8 @@ export const fileIcons: FileIcons = { { name: 'mxml', fileExtensions: ['mxml'] }, { name: 'autohotkey', fileExtensions: ['ahk'] }, { name: 'flash', fileExtensions: ['swf'] }, - { name: 'swc', fileExtensions: ['swc'] }, + { name: 'adobe-swc', fileExtensions: ['swc'] }, + { name: 'swc', fileExtensions: ['swcrc'] }, { name: 'cmake', fileExtensions: ['cmake'], @@ -732,7 +794,11 @@ export const fileIcons: FileIcons = { }, { name: 'nuxt', - fileNames: ['nuxt.config.js', 'nuxt.config.ts', '.nuxtignore'], + fileNames: ['nuxt.config.js', 'nuxt.config.ts', '.nuxtignore', '.nuxtrc'], + }, + { + name: 'harmonix', + fileNames: ['harmonix.config.js', 'harmonix.config.ts'], }, { name: 'ocaml', fileExtensions: ['ml', 'mli', 'cmx'] }, { name: 'odin', fileExtensions: ['odin'] }, @@ -811,34 +877,67 @@ export const fileIcons: FileIcons = { }, { name: 'angular-component', + clone: { + base: 'angular', + color: 'blue-700', + }, fileExtensions: ['component.ts', 'component.js'], enabledFor: [IconPack.Angular, IconPack.Ngrx], }, { name: 'angular-guard', + clone: { + base: 'angular', + color: 'green-600', + }, fileExtensions: ['guard.ts', 'guard.js'], enabledFor: [IconPack.Angular, IconPack.Ngrx], }, { name: 'angular-service', + clone: { + base: 'angular', + color: 'amber-400', + }, fileExtensions: ['service.ts', 'service.js'], enabledFor: [IconPack.Angular, IconPack.Ngrx], }, { name: 'angular-pipe', + clone: { + base: 'angular', + color: 'teal-600', + }, fileExtensions: ['pipe.ts', 'pipe.js', 'filter.js'], enabledFor: [IconPack.Angular, IconPack.Ngrx], }, { name: 'angular-directive', + clone: { + base: 'angular', + color: 'purple-400', + }, fileExtensions: ['directive.ts', 'directive.js'], enabledFor: [IconPack.Angular, IconPack.Ngrx], }, { name: 'angular-resolver', + clone: { + base: 'angular', + color: 'green-600', + }, fileExtensions: ['resolver.ts', 'resolver.js'], enabledFor: [IconPack.Angular, IconPack.Ngrx], }, + { + name: 'angular-interceptor', + clone: { + base: 'angular', + color: 'orange-500', + }, + fileExtensions: ['interceptor.ts', 'interceptor.js'], + enabledFor: [IconPack.Angular, IconPack.Ngrx], + }, { name: 'puppet', fileExtensions: ['pp'] }, { name: 'elixir', fileExtensions: ['ex', 'exs', 'eex', 'leex', 'heex'] }, { name: 'livescript', fileExtensions: ['ls'] }, @@ -852,7 +951,7 @@ export const fileIcons: FileIcons = { { name: 'reason', fileExtensions: ['re', 'rei'] }, { name: 'bucklescript', fileExtensions: ['cmj'] }, { name: 'merlin', fileExtensions: ['merlin'] }, - { name: 'verilog', fileExtensions: ['vhd', 'sv', 'svh'] }, + { name: 'verilog', fileExtensions: ['vhd', 'sv', 'svh', 'vhdl'] }, { name: 'mathematica', fileExtensions: ['nb'] }, { name: 'wolframlanguage', fileExtensions: ['wl', 'wls'] }, { name: 'nunjucks', fileExtensions: ['njk', 'nunjucks'] }, @@ -871,10 +970,24 @@ export const fileIcons: FileIcons = { fileNames: ['vercel.json', '.vercelignore', 'now.json', '.nowignore'], light: true, }, + { + name: 'liara', + fileNames: ['liara.json', '.liaraignore'], + }, { name: 'verdaccio', fileNames: ['verdaccio.yml'], }, + { + name: 'payload', + fileNames: [ + 'payload.config.js', + 'payload.config.mjs', + 'payload.config.ts', + 'payload.config.mts', + ], + light: true, + }, { name: 'next', fileNames: [ @@ -885,6 +998,19 @@ export const fileIcons: FileIcons = { ], light: true, }, + { + name: 'remark', + fileNames: [ + '.remarkrc', + '.remarkrc.cjs', + '.remarkrc.js', + '.remarkrc.json', + '.remarkrc.mjs', + '.remarkrc.yaml', + '.remarkrc.yml', + '.remarkignore', + ], + }, { name: 'remix', fileNames: ['remix.config.js', 'remix.config.ts'], @@ -892,7 +1018,7 @@ export const fileIcons: FileIcons = { }, { name: 'terraform', - fileExtensions: ['tf', 'tf.json', 'tfvars', 'tfstate'], + fileExtensions: ['tf', 'tf.json', 'tfvars', 'tfstate', 'tfbackend'], }, { name: 'laravel', @@ -910,30 +1036,15 @@ export const fileIcons: FileIcons = { { name: 'postcss', fileExtensions: ['pcss', 'sss'], - fileNames: [ - 'postcss.config.js', - 'postcss.config.cjs', - 'postcss.config.ts', - 'postcss.config.cts', - '.postcssrc.js', - '.postcssrc.cjs', - '.postcssrc.ts', - '.postcssrc.cts', - '.postcssrc', - '.postcssrc.json', - '.postcssrc.yaml', - '.postcssrc.yml', - ], + patterns: { + postcss: FileNamePattern.Cosmiconfig, + }, }, { name: 'posthtml', - fileNames: [ - 'posthtml.config.js', - '.posthtmlrc.js', - '.posthtmlrc', - '.posthtmlrc.json', - '.posthtmlrc.yml', - ], + patterns: { + posthtml: FileNamePattern.Cosmiconfig, + }, }, { name: 'todo', @@ -963,185 +1074,44 @@ export const fileIcons: FileIcons = { { name: 'sbt', fileExtensions: ['sbt'] }, { name: 'webpack', - fileNames: [ - 'webpack.js', - 'webpack.cjs', - 'webpack.mjs', - 'webpack.ts', - 'webpack.cts', - 'webpack.mts', - 'webpack.base.js', - 'webpack.base.cjs', - 'webpack.base.mjs', - 'webpack.base.ts', - 'webpack.base.cts', - 'webpack.base.mts', - 'webpack.config.js', - 'webpack.config.cjs', - 'webpack.config.mjs', - 'webpack.config.ts', - 'webpack.config.cts', - 'webpack.config.mts', - 'webpack.common.js', - 'webpack.common.cjs', - 'webpack.common.mjs', - 'webpack.common.ts', - 'webpack.common.cts', - 'webpack.common.mts', - 'webpack.config.common.js', - 'webpack.config.common.cjs', - 'webpack.config.common.mjs', - 'webpack.config.common.ts', - 'webpack.config.common.cts', - 'webpack.config.common.mts', - 'webpack.config.common.babel.js', - 'webpack.config.common.babel.ts', - 'webpack.dev.js', - 'webpack.dev.cjs', - 'webpack.dev.mjs', - 'webpack.dev.ts', - 'webpack.dev.cts', - 'webpack.dev.mts', - 'webpack.development.js', - 'webpack.development.cjs', - 'webpack.development.mjs', - 'webpack.development.ts', - 'webpack.development.cts', - 'webpack.development.mts', - 'webpack.config.dev.js', - 'webpack.config.dev.cjs', - 'webpack.config.dev.mjs', - 'webpack.config.dev.ts', - 'webpack.config.dev.cts', - 'webpack.config.dev.mts', - 'webpack.config.dev.babel.js', - 'webpack.config.dev.babel.ts', - 'webpack.config.main.js', - 'webpack.config.renderer.ts', - 'webpack.mix.js', - 'webpack.mix.cjs', - 'webpack.mix.mjs', - 'webpack.mix.ts', - 'webpack.mix.cts', - 'webpack.mix.mts', - 'webpack.prod.js', - 'webpack.prod.cjs', - 'webpack.prod.mjs', - 'webpack.prod.ts', - 'webpack.prod.cts', - 'webpack.prod.mts', - 'webpack.prod.config.js', - 'webpack.prod.config.cjs', - 'webpack.prod.config.mjs', - 'webpack.prod.config.ts', - 'webpack.prod.config.cts', - 'webpack.prod.config.mts', - 'webpack.production.js', - 'webpack.production.cjs', - 'webpack.production.mjs', - 'webpack.production.ts', - 'webpack.production.cts', - 'webpack.production.mts', - 'webpack.server.js', - 'webpack.server.cjs', - 'webpack.server.mjs', - 'webpack.server.ts', - 'webpack.server.cts', - 'webpack.server.mts', - 'webpack.client.js', - 'webpack.client.cjs', - 'webpack.client.mjs', - 'webpack.client.ts', - 'webpack.client.cts', - 'webpack.client.mts', - 'webpack.config.server.js', - 'webpack.config.server.cjs', - 'webpack.config.server.mjs', - 'webpack.config.server.ts', - 'webpack.config.server.cts', - 'webpack.config.server.mts', - 'webpack.config.client.js', - 'webpack.config.client.cjs', - 'webpack.config.client.mjs', - 'webpack.config.client.ts', - 'webpack.config.client.cts', - 'webpack.config.client.mts', - 'webpack.config.production.babel.js', - 'webpack.config.production.babel.ts', - 'webpack.config.prod.babel.js', - 'webpack.config.prod.babel.cjs', - 'webpack.config.prod.babel.mjs', - 'webpack.config.prod.babel.ts', - 'webpack.config.prod.babel.cts', - 'webpack.config.prod.babel.mts', - 'webpack.config.prod.js', - 'webpack.config.prod.cjs', - 'webpack.config.prod.mjs', - 'webpack.config.prod.ts', - 'webpack.config.prod.cts', - 'webpack.config.prod.mts', - 'webpack.config.production.js', - 'webpack.config.production.cjs', - 'webpack.config.production.mjs', - 'webpack.config.production.ts', - 'webpack.config.production.cts', - 'webpack.config.production.mts', - 'webpack.config.staging.js', - 'webpack.config.staging.cjs', - 'webpack.config.staging.mjs', - 'webpack.config.staging.ts', - 'webpack.config.staging.cts', - 'webpack.config.staging.mts', - 'webpack.config.babel.js', - 'webpack.config.babel.ts', - 'webpack.config.base.babel.js', - 'webpack.config.base.babel.ts', - 'webpack.config.base.js', - 'webpack.config.base.cjs', - 'webpack.config.base.mjs', - 'webpack.config.base.ts', - 'webpack.config.base.cts', - 'webpack.config.base.mts', - 'webpack.config.staging.babel.js', - 'webpack.config.staging.babel.ts', - 'webpack.config.coffee', - 'webpack.config.test.js', - 'webpack.config.test.cjs', - 'webpack.config.test.mjs', - 'webpack.config.test.ts', - 'webpack.config.test.cts', - 'webpack.config.test.mts', - 'webpack.config.vendor.js', - 'webpack.config.vendor.cjs', - 'webpack.config.vendor.mjs', - 'webpack.config.vendor.ts', - 'webpack.config.vendor.cts', - 'webpack.config.vendor.mts', - 'webpack.config.vendor.production.js', - 'webpack.config.vendor.production.cjs', - 'webpack.config.vendor.production.mjs', - 'webpack.config.vendor.production.ts', - 'webpack.config.vendor.production.cts', - 'webpack.config.vendor.production.mts', - 'webpack.test.js', - 'webpack.test.cjs', - 'webpack.test.mjs', - 'webpack.test.ts', - 'webpack.test.cts', - 'webpack.test.mts', - 'webpack.dist.js', - 'webpack.dist.cjs', - 'webpack.dist.mjs', - 'webpack.dist.ts', - 'webpack.dist.cts', - 'webpack.dist.mts', - 'webpackfile.js', - 'webpackfile.cjs', - 'webpackfile.mjs', - 'webpackfile.ts', - 'webpackfile.cts', - 'webpackfile.mts', - ], + fileNames: ['webpack.config.coffee'], + patterns: { + 'webpack.base': FileNamePattern.Ecmascript, + 'webpack.client': FileNamePattern.Ecmascript, + 'webpack.common': FileNamePattern.Ecmascript, + 'webpack.config.babel': FileNamePattern.Ecmascript, + 'webpack.config.base.babel': FileNamePattern.Ecmascript, + 'webpack.config.base': FileNamePattern.Ecmascript, + 'webpack.config.client': FileNamePattern.Ecmascript, + 'webpack.config.common.babel': FileNamePattern.Ecmascript, + 'webpack.config.common': FileNamePattern.Ecmascript, + 'webpack.config.dev.babel': FileNamePattern.Ecmascript, + 'webpack.config.dev': FileNamePattern.Ecmascript, + 'webpack.config.main': FileNamePattern.Ecmascript, + 'webpack.config.prod.babel': FileNamePattern.Ecmascript, + 'webpack.config.prod': FileNamePattern.Ecmascript, + 'webpack.config.production.babel': FileNamePattern.Ecmascript, + 'webpack.config.production': FileNamePattern.Ecmascript, + 'webpack.config.renderer': FileNamePattern.Ecmascript, + 'webpack.config.server': FileNamePattern.Ecmascript, + 'webpack.config.staging.babel': FileNamePattern.Ecmascript, + 'webpack.config.staging': FileNamePattern.Ecmascript, + 'webpack.config.test': FileNamePattern.Ecmascript, + 'webpack.config.vendor.production': FileNamePattern.Ecmascript, + 'webpack.config.vendor': FileNamePattern.Ecmascript, + 'webpack.config': FileNamePattern.Ecmascript, + 'webpack.dev': FileNamePattern.Ecmascript, + 'webpack.development': FileNamePattern.Ecmascript, + 'webpack.dist': FileNamePattern.Ecmascript, + 'webpack.mix': FileNamePattern.Ecmascript, + 'webpack.prod.config': FileNamePattern.Ecmascript, + 'webpack.prod': FileNamePattern.Ecmascript, + 'webpack.production': FileNamePattern.Ecmascript, + 'webpack.server': FileNamePattern.Ecmascript, + 'webpack.test': FileNamePattern.Ecmascript, + webpack: FileNamePattern.Ecmascript, + webpackfile: FileNamePattern.Ecmascript, + }, }, { name: 'ionic', fileNames: ['ionic.config.json', '.io-config.json'] }, { @@ -1201,17 +1171,22 @@ export const fileIcons: FileIcons = { '.env.dist', '.env.prod', '.env.production', + '.env.stg', '.env.stage', '.env.staging', '.env.preview', '.env.test', '.env.testing', + '.env.dev.local', '.env.development.local', '.env.qa.local', + '.env.prod.local', '.env.production.local', + '.env.stg.local', '.env.staging.local', '.env.test.local', '.env.uat', + '.vars', ], }, { @@ -1221,24 +1196,11 @@ export const fileIcons: FileIcons = { }, { name: 'babel', - fileNames: [ - '.babelrc', - '.babelrc.cjs', - '.babelrc.js', - '.babelrc.mjs', - '.babelrc.json', - 'babel.config.cjs', - 'babel.config.js', - 'babel.config.mjs', - 'babel.config.json', - 'babel-transform.js', - '.babel-plugin-macrosrc', - '.babel-plugin-macrosrc.json', - '.babel-plugin-macrosrc.yaml', - '.babel-plugin-macrosrc.yml', - '.babel-plugin-macrosrc.js', - 'babel-plugin-macros.config.js', - ], + fileNames: ['babel-transform.js'], + patterns: { + babel: FileNamePattern.Cosmiconfig, + 'babel-plugin-macros': FileNamePattern.Cosmiconfig, + }, }, { name: 'blitz', @@ -1321,7 +1283,15 @@ export const fileIcons: FileIcons = { }, { name: 'appveyor', fileNames: ['.appveyor.yml', 'appveyor.yml'] }, { name: 'travis', fileNames: ['.travis.yml'] }, - { name: 'codecov', fileNames: ['.codecov.yml', 'codecov.yml'] }, + { + name: 'codecov', + fileNames: [ + '.codecov.yml', + 'codecov.yml', + '.codecov.yaml', + 'codecov.yaml', + ], + }, { name: 'sonarcloud', fileNames: [ @@ -1348,19 +1318,15 @@ export const fileIcons: FileIcons = { { name: 'eslint', fileNames: [ - '.eslintrc.js', - '.eslintrc.cjs', - '.eslintrc.yaml', - '.eslintrc.yml', - '.eslintrc.json', '.eslintrc-md.js', '.eslintrc-jsdoc.js', - '.eslintrc', + '.eslintrc.base.json', '.eslintignore', '.eslintcache', - 'eslint.config.js', - 'eslint.config.mjs', ], + patterns: { + eslint: FileNamePattern.Cosmiconfig, + }, }, { name: 'conduct', @@ -1442,39 +1408,23 @@ export const fileIcons: FileIcons = { ], }, { name: 'hack', fileNames: ['.hhconfig'] }, + { name: 'huff', fileExtensions: ['huff'], light: true }, { name: 'hardhat', fileNames: ['hardhat.config.js', 'hardhat.config.ts'] }, { name: 'stylelint', - fileNames: [ - '.stylelintrc', - 'stylelint.config.js', - 'stylelint.config.cjs', - '.stylelintrc.json', - '.stylelintrc.yaml', - '.stylelintrc.yml', - '.stylelintrc.js', - '.stylelintrc.cjs', - '.stylelintignore', - '.stylelintcache', - ], light: true, + fileNames: ['.stylelintignore', '.stylelintcache'], + patterns: { + stylelint: FileNamePattern.Cosmiconfig, + }, }, { name: 'code-climate', fileNames: ['.codeclimate.yml'], light: true }, { name: 'prettier', - fileNames: [ - '.prettierrc', - 'prettier.config.js', - 'prettier.config.cjs', - '.prettierrc.js', - '.prettierrc.cjs', - '.prettierrc.json', - '.prettierrc.json5', - '.prettierrc.yaml', - '.prettierrc.yml', - '.prettierignore', - '.prettierrc.toml', - ], + fileNames: ['.prettierignore'], + patterns: { + prettier: FileNamePattern.Cosmiconfig, + }, }, { name: 'renovate', @@ -1565,6 +1515,8 @@ export const fileIcons: FileIcons = { fileNames: [ 'gruntfile.js', 'gruntfile.ts', + 'gruntfile.cjs', + 'gruntfile.cts', 'gruntfile.coffee', 'gruntfile.babel.js', 'gruntfile.babel.ts', @@ -1610,6 +1562,10 @@ export const fileIcons: FileIcons = { 'jest-preset.js', 'jest-preset.cjs', 'jest-preset.mjs', + 'jest.preset.js', + 'jest.preset.mjs', + 'jest.preset.cjs', + 'jest.preset.json', ], }, { name: 'processing', fileExtensions: ['pde'] }, @@ -1634,6 +1590,10 @@ export const fileIcons: FileIcons = { { name: 'hcl', fileExtensions: ['hcl'], light: true }, { name: 'helm', fileNames: ['.helmignore'] }, { name: 'san', fileExtensions: ['san'] }, + { + name: 'quokka', + fileExtensions: ['quokka.js', 'quokka.ts', 'quokka.jsx', 'quokka.tsx'], + }, { name: 'wallaby', fileNames: ['wallaby.js', 'wallaby.conf.js'] }, { name: 'django', fileExtensions: ['djt'] }, { name: 'stencil', fileNames: ['stencil.config.js', 'stencil.config.ts'] }, @@ -1644,20 +1604,14 @@ export const fileIcons: FileIcons = { fileNames: ['makefile', 'gnumakefile', 'kbuild'], }, { name: 'foxpro', fileExtensions: ['fxp', 'prg'] }, - { name: 'i18n', fileExtensions: ['pot', 'po', 'mo', 'lang'] }, + { name: 'i18n', fileExtensions: ['pot', 'po', 'mo', 'lang', 'xlf'] }, { name: 'webassembly', fileExtensions: ['wat', 'wasm'] }, { name: 'semantic-release', light: true, - fileNames: [ - '.releaserc', - '.releaserc.yaml', - '.releaserc.yml', - '.releaserc.json', - '.releaserc.js', - 'release.config.js', - 'release.config.cjs', - ], + patterns: { + release: FileNamePattern.Cosmiconfig, + }, }, { name: 'bitbucket', @@ -1693,8 +1647,18 @@ export const fileIcons: FileIcons = { }, { name: 'azure-pipelines', - fileNames: ['azure-pipelines.yml', 'azure-pipelines.yaml'], - fileExtensions: ['azure-pipelines.yml', 'azure-pipelines.yaml'], + fileNames: [ + 'azure-pipelines.yml', + 'azure-pipelines.yaml', + 'azure-pipelines-main.yml', + 'azure-pipelines-main.yaml', + ], + fileExtensions: [ + 'azure-pipelines.yml', + 'azure-pipelines.yaml', + 'azure-pipelines-main.yml', + 'azure-pipelines-main.yaml', + ], }, { name: 'azure', fileExtensions: ['azcli'] }, { @@ -1706,7 +1670,17 @@ export const fileIcons: FileIcons = { { name: 'razor', fileExtensions: ['cshtml', 'vbhtml'] }, { name: 'abc', fileExtensions: ['abc'] }, { name: 'asciidoc', fileExtensions: ['ad', 'adoc', 'asciidoc'] }, - { name: 'istanbul', fileNames: ['.nycrc', '.nycrc.json'] }, + { + name: 'istanbul', + fileNames: [ + '.nycrc', + '.nycrc.json', + '.nycrc.yaml', + '.nycrc.yml', + 'nyc.config.js', + '.istanbul.yml', + ], + }, { name: 'edge', fileExtensions: ['edge'] }, { name: 'scheme', fileExtensions: ['ss', 'scm'] }, { name: 'lisp', fileExtensions: ['lisp', 'lsp', 'cl', 'fast'] }, @@ -1717,8 +1691,10 @@ export const fileIcons: FileIcons = { 'tailwind.ts', 'tailwind.config.js', 'tailwind.config.cjs', + 'tailwind.config.mjs', 'tailwind.config.ts', 'tailwind.config.cts', + 'tailwind.config.mts', ], }, { @@ -1727,8 +1703,10 @@ export const fileIcons: FileIcons = { 'stl', 'stp', 'obj', + 'o', 'ac', 'blend', + 'dxf', 'fbx', 'mesh', 'mqo', @@ -1738,6 +1716,8 @@ export const fileIcons: FileIcons = { 'vac', 'vdp', 'vox', + 'gltf', + 'glb', ], }, { name: 'buildkite', fileNames: ['buildkite.yml', 'buildkite.yaml'] }, @@ -1755,7 +1735,25 @@ export const fileIcons: FileIcons = { { name: 'svelte', fileExtensions: ['svelte'], - fileNames: ['svelte.config.js', 'svelte.config.cjs'], + patterns: { + 'svelte.config': FileNamePattern.Ecmascript, + }, + }, + { + name: 'svelte_js', + fileExtensions: ['svelte.js'], + clone: { + base: 'svelte', + color: 'amber-400', + }, + }, + { + name: 'svelte_ts', + fileExtensions: ['svelte.ts'], + clone: { + base: 'svelte', + color: 'light-blue-700', + }, }, { name: 'vim', @@ -1772,64 +1770,140 @@ export const fileIcons: FileIcons = { }, { name: 'nest-controller', + clone: { + base: 'nest', + color: 'light-blue-700', + }, fileExtensions: ['controller.ts', 'controller.js'], enabledFor: [IconPack.Nest], }, { name: 'nest-middleware', + clone: { + base: 'nest', + color: 'indigo-400', + }, fileExtensions: ['middleware.ts', 'middleware.js'], enabledFor: [IconPack.Nest], }, { name: 'nest-module', + clone: { + base: 'nest', + color: 'red-600', + }, fileExtensions: ['module.ts', 'module.js'], enabledFor: [IconPack.Nest], }, { name: 'nest-service', + clone: { + base: 'nest', + color: 'amber-400', + }, fileExtensions: ['service.ts', 'service.js'], enabledFor: [IconPack.Nest], }, { name: 'nest-decorator', + clone: { + base: 'nest', + color: 'purple-400', + }, fileExtensions: ['decorator.ts', 'decorator.js'], enabledFor: [IconPack.Nest], }, { name: 'nest-pipe', + clone: { + base: 'nest', + color: 'teal-600', + }, fileExtensions: ['pipe.ts', 'pipe.js'], enabledFor: [IconPack.Nest], }, { name: 'nest-filter', + clone: { + base: 'nest', + color: 'deep-orange-400', + }, fileExtensions: ['filter.ts', 'filter.js'], enabledFor: [IconPack.Nest], }, { name: 'nest-gateway', + clone: { + base: 'nest', + color: 'lime-700', + }, fileExtensions: ['gateway.ts', 'gateway.js'], enabledFor: [IconPack.Nest], }, { name: 'nest-guard', + clone: { + base: 'nest', + color: 'green-600', + }, fileExtensions: ['guard.ts', 'guard.js'], enabledFor: [IconPack.Nest], }, { name: 'nest-resolver', + clone: { + base: 'nest', + color: 'pink-400', + }, fileExtensions: ['resolver.ts', 'resolver.js'], enabledFor: [IconPack.Nest], }, + { + name: 'nest-interceptor', + clone: { + base: 'nest', + color: 'orange-500', + }, + fileExtensions: ['interceptor.ts', 'interceptor.js'], + enabledFor: [IconPack.Nest], + }, + { name: 'moon', fileNames: ['moon.yml'] }, { name: 'moonscript', fileExtensions: ['moon'] }, { name: 'percy', fileNames: ['.percy.yml'] }, { name: 'gitpod', fileNames: ['.gitpod.yml'] }, - { name: 'advpl_prw', fileExtensions: ['prw', 'prx'] }, - { name: 'advpl_ptm', fileExtensions: ['ptm'] }, - { name: 'advpl_tlpp', fileExtensions: ['tlpp'] }, - { name: 'advpl_include', fileExtensions: ['ch'] }, - { name: 'codeowners', fileNames: ['codeowners'] }, + { name: 'stackblitz', fileNames: ['.stackblitzrc'] }, + { name: 'advpl', fileExtensions: ['prw', 'prx'] }, + { + name: 'advpl-ptm', + clone: { + base: 'advpl', + color: 'red-400', + }, + fileExtensions: ['ptm'], + }, + { + name: 'advpl-tlpp', + clone: { + base: 'advpl', + color: 'yellow-700', + }, + fileExtensions: ['tlpp'], + }, + { + name: 'advpl-include', + clone: { + base: 'advpl', + color: 'cyan-500', + }, + fileExtensions: ['ch'], + }, + { name: 'codeowners', fileNames: ['codeowners', 'OWNERS'] }, { name: 'gcp', fileNames: ['.gcloudignore'] }, - { name: 'disc', fileExtensions: ['iso'] }, + { name: 'amplify', fileNames: ['amplify.yml'] }, + { + name: 'disc', + fileExtensions: ['iso', 'vmdk', 'hdd', 'qcow', 'qcow2', 'qed', 'dmg'], + }, { name: 'fortran', fileExtensions: ['f', 'f77', 'f90', 'f95', 'f03', 'f08'], @@ -1839,14 +1913,9 @@ export const fileIcons: FileIcons = { { name: 'prolog', fileExtensions: ['p', 'pro', 'pl'] }, { name: 'husky', - fileNames: [ - '.huskyrc', - 'husky.config.js', - '.huskyrc.json', - '.huskyrc.js', - '.huskyrc.yaml', - '.huskyrc.yml', - ], + patterns: { + husky: FileNamePattern.Cosmiconfig, + }, }, { name: 'coconut', fileExtensions: ['coco'] }, { name: 'tilt', fileNames: ['tiltfile'] }, @@ -1870,22 +1939,10 @@ export const fileIcons: FileIcons = { }, { name: 'commitlint', - fileNames: [ - '.commitlintrc', - '.commitlintrc.js', - '.commitlintrc.cjs', - '.commitlintrc.ts', - '.commitlintrc.cts', - '.commitlintrc.json', - '.commitlintrc.yaml', - '.commitlintrc.yml', - '.commitlint.yaml', - '.commitlint.yml', - 'commitlint.config.js', - 'commitlint.config.cjs', - 'commitlint.config.ts', - 'commitlint.config.cts', - ], + fileNames: ['.commitlint.yaml', '.commitlint.yml'], + patterns: { + commitlint: FileNamePattern.Cosmiconfig, + }, }, { name: 'buck', fileNames: ['.buckconfig'] }, { name: 'dhall', fileExtensions: ['dhall', 'dhallb'] }, @@ -1903,7 +1960,7 @@ export const fileIcons: FileIcons = { 'grm', ], }, - { name: 'nrwl', fileNames: ['nx.json', '.nxignore'] }, + { name: 'nx', fileNames: ['nx.json', '.nxignore'] }, { name: 'opam', fileExtensions: ['opam'] }, { name: 'dune', @@ -1967,7 +2024,7 @@ export const fileIcons: FileIcons = { { name: 'nginx', fileNames: ['nginx.conf'], - fileExtensions: ['nginx', 'nginxconfig'], + fileExtensions: ['nginx', 'nginxconf', 'nginxconfig'], }, { name: 'minecraft', @@ -1992,6 +2049,11 @@ export const fileIcons: FileIcons = { { name: 'replit', fileNames: ['.replit'] }, { name: 'rescript', fileExtensions: ['res'] }, { name: 'rescript-interface', fileExtensions: ['resi'] }, + { + name: 'duc', + fileNames: ['duc.fbs'], + fileExtensions: ['duc'], + }, { name: 'snowpack', fileNames: [ @@ -2012,30 +2074,36 @@ export const fileIcons: FileIcons = { { name: 'grain', fileExtensions: ['gr'] }, { name: 'lolcode', fileExtensions: ['lol'] }, { name: 'idris', fileExtensions: ['idr', 'ibc'] }, - { name: 'quasar', fileNames: ['quasar.conf.js', 'quasar.config.js'] }, + { + name: 'quasar', + fileNames: [ + 'quasar.conf.js', + 'quasar.config.js', + 'quasar.conf.ts', + 'quasar.config.ts', + 'quasar.config.cjs', + ], + }, { name: 'dependabot', fileNames: ['dependabot.yml', 'dependabot.yaml'] }, { name: 'pipeline', fileExtensions: ['pipeline'] }, { name: 'vite', - fileNames: [ - 'vite.config.js', - 'vite.config.mjs', - 'vite.config.cjs', - 'vite.config.ts', - 'vite.config.cts', - 'vite.config.mts', - ], + patterns: { + 'vite.config': FileNamePattern.Ecmascript, + }, }, { name: 'vitest', - fileNames: [ - 'vitest.config.ts', - 'vitest.config.mts', - 'vitest.config.cts', - 'vitest.config.js', - 'vitest.config.mjs', - 'vitest.config.cjs', - ], + patterns: { + 'vitest.workspace': FileNamePattern.Ecmascript, + 'vitest.config': FileNamePattern.Ecmascript, + }, + }, + { + name: 'velite', + patterns: { + 'velite.config': FileNamePattern.Ecmascript, + }, }, { name: 'opa', fileExtensions: ['rego'] }, { name: 'lerna', fileNames: ['lerna.json'] }, @@ -2052,14 +2120,28 @@ export const fileIcons: FileIcons = { }, { name: 'textlint', - fileNames: ['.textlintrc'], + fileNames: [ + '.textlintrc', + '.textlintrc.js', + '.textlintrc.json', + '.textlintrc.yml', + '.textlintrc.yaml', + ], }, { name: 'scala', fileExtensions: ['scala', 'sc'] }, { name: 'lilypond', fileExtensions: ['ly'] }, { name: 'vlang', fileExtensions: ['v'], fileNames: ['vpkg.json', 'v.mod'] }, { name: 'chess', fileExtensions: ['pgn', 'fen'], light: true }, { name: 'gemini', fileExtensions: ['gmi', 'gemini'] }, - { name: 'sentry', fileNames: ['.sentryclirc'] }, + { + name: 'sentry', + fileNames: ['.sentryclirc'], + patterns: { + 'sentry.client.config': FileNamePattern.Ecmascript, + 'sentry.server.config': FileNamePattern.Ecmascript, + 'sentry.edge.config': FileNamePattern.Ecmascript, + }, + }, { name: 'phpunit', fileNames: [ @@ -2110,6 +2192,7 @@ export const fileIcons: FileIcons = { 'tsconfig.paths.json', 'tsconfig.main.json', 'tsconfig.renderer.json', + 'tsconfig.server.json', ], fileExtensions: ['tsconfig.json'], }, @@ -2121,6 +2204,7 @@ export const fileIcons: FileIcons = { 'tauri.linux.conf.json', 'tauri.windows.conf.json', 'tauri.macos.conf.json', + '.taurignore', ], fileExtensions: ['tauri'], }, @@ -2158,6 +2242,11 @@ export const fileIcons: FileIcons = { fileExtensions: ['horusec-config.json'], }, { name: 'poetry', fileNames: ['poetry.lock'] }, + { + name: 'pdm', + fileNames: ['pdm.lock', 'pdm.toml', '.pdm-python'], + fileExtensions: ['pdm.lock', 'pdm.toml'], + }, { name: 'coala', fileExtensions: ['coarc', 'coafile'] }, { name: 'parcel', fileNames: ['.parcelrc'] }, { @@ -2213,6 +2302,8 @@ export const fileIcons: FileIcons = { fileNames: [ '.lighthouserc.js', 'lighthouserc.js', + '.lighthouserc.cjs', + 'lighthouserc.cjs', '.lighthouserc.json', 'lighthouserc.json', '.lighthouserc.yml', @@ -2223,26 +2314,17 @@ export const fileIcons: FileIcons = { }, { name: 'svgr', - fileNames: [ - '.svgrrc', - 'svgr.config.js', - '.svgrrc.js', - '.svgrrc.yaml', - '.svgrrc.yml', - '.svgrrc.json', - ], + patterns: { + svgr: FileNamePattern.Cosmiconfig, + }, }, { name: 'rome', fileNames: ['rome.json'] }, { name: 'cypress', - fileNames: [ - 'cypress.json', - 'cypress.env.json', - 'cypress.config.ts', - 'cypress.config.js', - 'cypress.config.cjs', - 'cypress.config.mjs', - ], + fileNames: ['cypress.json', 'cypress.env.json'], + patterns: { + 'cypress.config': FileNamePattern.Ecmascript, + }, }, { name: 'siyuan', fileExtensions: ['sy'] }, { name: 'ndst', fileExtensions: ['ndst.yml', 'ndst.yaml', 'ndst.json'] }, @@ -2272,13 +2354,25 @@ export const fileIcons: FileIcons = { 'steadybit.yaml', ], }, + { name: 'capnp', fileExtensions: ['capnp'] }, { name: 'tree', fileExtensions: ['tree'] }, { name: 'cadence', fileExtensions: ['cdc'], }, { name: 'caddy', fileNames: ['Caddyfile'] }, - { name: 'bun', fileNames: ['bun.lockb'], light: true }, + { + name: 'openapi', + light: true, + fileExtensions: ['openapi.json', 'openapi.yml', 'openapi.yaml'], + fileNames: ['openapi.json', 'openapi.yml', 'openapi.yaml'], + }, + { + name: 'swagger', + fileExtensions: ['swagger.json', 'swagger.yml', 'swagger.yaml'], + fileNames: ['swagger.json', 'swagger.yml', 'swagger.yaml'], + }, + { name: 'bun', fileNames: ['bun.lockb', 'bunfig.toml', ".bun-version"], light: true }, { name: 'antlr', fileExtensions: ['g4'] }, { name: 'stylable', fileExtensions: ['st.css'] }, { name: 'pinejs', fileExtensions: ['pine'] }, @@ -2286,28 +2380,46 @@ export const fileIcons: FileIcons = { name: 'nano-staged', light: true, fileNames: [ - `.nano-staged.js`, - `nano-staged.js`, - `.nano-staged.cjs`, - `nano-staged.cjs`, - `.nano-staged.mjs`, - `nano-staged.mjs`, - `.nano-staged.json`, - `nano-staged.json`, - `.nanostagedrc`, + '.nano-staged.js', + 'nano-staged.js', + '.nano-staged.cjs', + 'nano-staged.cjs', + '.nano-staged.mjs', + 'nano-staged.mjs', + '.nano-staged.json', + 'nano-staged.json', + '.nanostagedrc', ], }, { - name: 'craco', + name: 'knip', fileNames: [ - 'craco.config.ts', - 'craco.config.js', - 'craco.config.cjs', - '.cracorc.ts', - '.cracorc.js', - '.cracorc', + 'knip.json', + 'knip.jsonc', + '.knip.json', + '.knip.jsonc', + 'knip.ts', + 'knip.js', + 'knip.config.ts', + 'knip.config.js', ], }, + { + name: 'taskfile', + fileExtensions: ['taskfile.yml', 'taskfile.yaml'], + fileNames: [ + 'taskfile.yml', + 'taskfile.yaml', + 'taskfile.dist.yml', + 'taskfile.dist.yaml', + ], + }, + { + name: 'craco', + patterns: { + craco: FileNamePattern.Cosmiconfig, + }, + }, { name: 'gamemaker', fileExtensions: ['gml', 'yy', 'yyp', 'yyz'], @@ -2354,8 +2466,15 @@ export const fileIcons: FileIcons = { ], }, { name: 'ifanr-cloud', fileNames: ['.mincloudrc'] }, + { name: 'concourse', fileNames: ['concourse.yml'] }, { name: 'qwik', fileExtensions: ['tsx'], enabledFor: [IconPack.Qwik] }, { name: 'mermaid', fileExtensions: ['mmd', 'mermaid'] }, + { + name: 'syncpack', + patterns: { + syncpack: FileNamePattern.Cosmiconfig, + }, + }, { name: 'mojo', fileExtensions: ['mojo', '๐Ÿ”ฅ'], @@ -2369,5 +2488,275 @@ export const fileIcons: FileIcons = { 'werf-giterminism.yml', ], }, - ], + { name: 'roblox', fileExtensions: ['rbxl', 'rbxlx', 'rbxm', 'rbxmx'] }, + { + name: 'panda', + patterns: { + 'panda.config': FileNamePattern.Ecmascript, + }, + }, + { name: 'biome', fileNames: ['biome.json', 'biome.jsonc'] }, + { + name: 'esbuild', + patterns: { + esbuild: FileNamePattern.Ecmascript, + 'esbuild.config': FileNamePattern.Ecmascript, + }, + }, + { name: 'spwn', fileExtensions: ['spwn'] }, + { name: 'templ', fileExtensions: ['templ'] }, + { name: 'chrome', fileExtensions: ['crx'] }, + { name: 'stan', fileExtensions: ['stan'] }, + { + name: 'abap', + fileExtensions: ['abap', 'acds', 'asddls'], + }, + { + name: 'drizzle', + fileNames: [ + 'drizzle.config.ts', + 'drizzle.config.js', + 'drizzle.config.json', + ], + }, + { name: 'lottie', fileExtensions: ['lottie'] }, + { + name: 'puppeteer', + patterns: { + puppeteer: FileNamePattern.Cosmiconfig, + }, + }, + { name: 'apps-script', fileExtensions: ['gs'] }, + { + name: 'garden', + fileNames: [ + 'garden.yml', + 'garden.yaml', + 'project.garden.yml', + 'project.garden.yaml', + '.gardenignore', + ], + fileExtensions: ['.garden.yml', '.garden.yaml'], + }, + { + name: 'pkl', + fileExtensions: ['pkl'], + fileNames: ['PklProject', 'PklProject.deps.json'], + }, + { + name: 'kubernetes', + fileNames: [ + 'k8s.yml', + 'k8s.yaml', + 'kubernetes.yml', + 'kubernetes.yaml', + '.k8s.yml', + '.k8s.yaml', + ], + }, + { + name: 'screwdriver', + fileNames: ['screwdriver.yaml', 'screwdriver.yml'], + }, + { + name: 'snapcraft', + fileNames: ['snapcraft.yaml', 'snapcraft.yml'], + }, + { + name: 'container', + clone: { + base: '3d', + color: '#00b0ff', + }, + fileNames: [ + '.devcontainer/devcontainer.json', + '.devcontainer/devcontainer-lock.json', + ], + }, + { + name: 'kcl', + fileNames: ['kcl.mod', 'kcl.yaml', 'kcl.yml'], + fileExtensions: ['k'], + }, + { + name: 'verified', + fileExtensions: ['sigstore.json'], + }, + { + name: 'bruno', + fileExtensions: ['bru'], + }, + { + name: 'cairo', + fileExtensions: ['cairo'], + }, + { + name: 'grafana-alloy', + fileExtensions: ['alloy'], + }, + { + name: 'clangd', + fileNames: ['.clangd'], + }, + { + name: 'freemarker', + fileExtensions: ['ftl'], + }, + { + name: 'markdownlint', + fileNames: [ + '.markdownlint.json', + '.markdownlint.jsonc', + '.markdownlint.yaml', + '.markdownlint.yml', + '.markdownlint-cli2.jsonc', + '.markdownlint-cli2.yaml', + '.markdownlint-cli2.cjs', + '.markdownlint-cli2.mjs', + '.markdownlintignore', + ], + }, + { + name: 'tsil', + fileExtensions: ['ั†'], + }, + { + name: 'trigger', + patterns: { + 'trigger.config': FileNamePattern.Ecmascript, + }, + }, + { + name: 'deepsource', + fileNames: ['.deepsource.toml'], + }, + { + name: 'tape', + fileExtensions: ['tape'], + clone: { base: 'video', color: 'purple-300' }, + }, + { + name: 'hurl', + fileExtensions: ['hurl'], + }, + { + name: 'cds', + fileExtensions: ['cds'], + }, + { + name: 'slint', + fileExtensions: ['slint', '60'], + }, + { + name: 'jsr', + fileNames: ['jsr.json', 'jsr.jsonc'], + light: true, + }, + { + name: 'coderabbit-ai', + fileNames: ['.coderabbit.yml', '.coderabbit.yaml'], + }, + { + name: 'gemini-ai', + fileNames: ['.aiexclude'], + }, + { + name: 'taze', + patterns: { + 'taze.config': FileNamePattern.Ecmascript, + }, + fileNames: ['.tazerc', '.tazerc.json'], + }, + { + name: 'wxt', + patterns: { + 'wxt.config': FileNamePattern.Ecmascript, + }, + }, + { + name: 'sway', + fileExtensions: ['sw'], + }, + { + name: 'lefthook', + fileNames: [ + '.lefthook-local.json', + '.lefthook-local.toml', + '.lefthook-local.yaml', + '.lefthook-local.yml', + '.lefthook.json', + '.lefthook.toml', + '.lefthook.yaml', + '.lefthook.yml', + '.lefthookrc', + 'lefthook-local.json', + 'lefthook-local.toml', + 'lefthook-local.yaml', + 'lefthook-local.yml', + 'lefthook.json', + 'lefthook.toml', + 'lefthook.yaml', + 'lefthook.yml', + 'lefthookrc', + ], + }, + { + name: 'label', + fileNames: ['.github/labeler.yml', '.github/labeler.yaml'], + }, + { + name: 'zeabur', + fileExtensions: ['zeabur'], + patterns: { + zeabur: FileNamePattern.Configuration, + }, + light: true, + }, + { + name: 'copilot', + fileNames: ['.github/copilot-instructions.md'], + light: true + }, + { + name: 'bench-ts', + fileExtensions: [ + 'bench.ts', + 'bench.cts', + 'bench.mts', + ], + }, + { + name: 'bench-jsx', + fileExtensions: [ + 'bench.jsx', + 'bench.tsx', + ], + }, + { + name: 'bench-js', + fileExtensions: [ + 'bench.js', + 'bench.cjs', + 'bench.mjs', + ], + }, + { + name: 'pre-commit', + fileNames: ['.pre-commit-config.yaml', '.pre-commit-hooks.yaml'], + }, + { + name: 'controller', + fileExtensions: ['controller.js', 'controller.ts'], + enabledFor: [ + // Not for Nest + IconPack.Angular, + IconPack.Ngrx, + IconPack.Qwik, + IconPack.React, + IconPack.Redux, + IconPack.Vue, + IconPack.Vuex, + ], + }, + ]), }; diff --git a/src/icons/folderIcons.ts b/src/core/icons/folderIcons.ts similarity index 70% rename from src/icons/folderIcons.ts rename to src/core/icons/folderIcons.ts index f7e84299a3..bd06bf155f 100644 --- a/src/icons/folderIcons.ts +++ b/src/core/icons/folderIcons.ts @@ -1,4 +1,5 @@ -import { FolderTheme, IconPack } from '../models/index'; +import type { FolderTheme } from '../models/icons/folders/folderTheme'; +import { IconPack } from '../models/icons/iconPack'; /** * Defines folder icons @@ -9,26 +10,37 @@ export const folderIcons: FolderTheme[] = [ defaultIcon: { name: 'folder' }, rootFolder: { name: 'folder-root' }, icons: [ + { + name: 'folder-robot', + folderNames: ['bot', 'robot'], + }, { name: 'folder-src', folderNames: ['src', 'srcs', 'source', 'sources', 'code'], }, { name: 'folder-dist', - folderNames: ['dist', 'out', 'build', 'release', 'bin'], + folderNames: [ + 'dist', + 'out', + 'output', + 'build', + 'release', + 'bin', + 'distribution', + ], }, { name: 'folder-css', folderNames: ['css', 'stylesheet', 'stylesheets', 'style', 'styles'], }, - { name: 'folder-sass', folderNames: ['sass', '_sass', 'scss', '_scss'] }, + { name: 'folder-sass', folderNames: ['sass', 'scss'] }, + { name: 'folder-television', folderNames: ['tv', 'television'] }, + { name: 'folder-desktop', folderNames: ['desktop'] }, + { name: 'folder-console', folderNames: ['console'] }, { name: 'folder-images', folderNames: [ - '_images', - '_image', - '_imgs', - '_img', 'images', 'image', 'imgs', @@ -49,10 +61,17 @@ export const folderIcons: FolderTheme[] = [ 'pics', 'picture', 'pictures', + 'photo', + 'photos', + 'photograph', + 'photographs', ], }, - { name: 'folder-scripts', folderNames: ['script', 'scripts'] }, - { name: 'folder-node', folderNames: ['node_modules'] }, + { + name: 'folder-scripts', + folderNames: ['script', 'scripts', 'scripting'], + }, + { name: 'folder-node', folderNames: ['node', 'nodejs', 'node_modules'] }, { name: 'folder-javascript', folderNames: ['js', 'javascript', 'javascripts'], @@ -62,18 +81,7 @@ export const folderIcons: FolderTheme[] = [ { name: 'folder-bower', folderNames: ['bower_components'] }, { name: 'folder-test', - folderNames: [ - 'test', - 'tests', - 'testing', - '__tests__', - '__snapshots__', - '__mocks__', - '__fixtures__', - '__test__', - 'spec', - 'specs', - ], + folderNames: ['test', 'tests', 'testing', 'snapshots', 'spec', 'specs'], }, { name: 'folder-jinja', @@ -81,14 +89,13 @@ export const folderIcons: FolderTheme[] = [ light: true, }, { name: 'folder-markdown', folderNames: ['markdown', 'md'] }, + { name: 'folder-pdm', folderNames: ['pdm-plugins', 'pdm-build'] }, { name: 'folder-php', folderNames: ['php'] }, { name: 'folder-phpmailer', folderNames: ['phpmailer'] }, { name: 'folder-sublime', folderNames: ['sublime'] }, { name: 'folder-docs', folderNames: [ - '_post', - '_posts', 'doc', 'docs', 'document', @@ -100,20 +107,15 @@ export const folderIcons: FolderTheme[] = [ 'articles', ], }, + { name: 'folder-gh-workflows', folderNames: ['github/workflows'] }, { name: 'folder-git', - folderNames: [ - '.git', - 'patches', - 'githooks', - '.githooks', - 'submodules', - '.submodules', - ], + folderNames: ['git', 'patches', 'githooks', 'submodules'], }, - { name: 'folder-github', folderNames: ['.github', 'github'] }, - { name: 'folder-gitlab', folderNames: ['.gitlab'] }, - { name: 'folder-vscode', folderNames: ['.vscode', '.vscode-test'] }, + { name: 'folder-github', folderNames: ['github'] }, + { name: 'folder-gitea', folderNames: ['gitea'] }, + { name: 'folder-gitlab', folderNames: ['gitlab'] }, + { name: 'folder-vscode', folderNames: ['vscode', 'vscode-test'] }, { name: 'folder-views', folderNames: [ @@ -128,8 +130,8 @@ export const folderIcons: FolderTheme[] = [ ], }, { name: 'folder-vue', folderNames: ['vue'] }, - { name: 'folder-vuepress', folderNames: ['.vuepress'] }, - { name: 'folder-expo', folderNames: ['.expo', '.expo-shared'] }, + { name: 'folder-vuepress', folderNames: ['vuepress'] }, + { name: 'folder-expo', folderNames: ['expo', 'expo-shared'] }, { name: 'folder-config', folderNames: [ @@ -142,10 +144,10 @@ export const folderIcons: FolderTheme[] = [ 'configuration', 'configurations', 'setting', - '.setting', 'settings', - '.settings', 'META-INF', + 'option', + 'options', ], }, { @@ -164,7 +166,7 @@ export const folderIcons: FolderTheme[] = [ 'translation', 'translate', 'translations', - '.tx', + 'tx', ], }, { @@ -173,7 +175,7 @@ export const folderIcons: FolderTheme[] = [ }, { name: 'folder-verdaccio', - folderNames: ['.verdaccio', 'verdaccio'], + folderNames: ['verdaccio'], }, { name: 'folder-aurelia', folderNames: ['aurelia_project'] }, { @@ -199,6 +201,7 @@ export const folderIcons: FolderTheme[] = [ 'vendor', 'vendors', 'third-party', + 'lib64', ], }, { @@ -212,12 +215,11 @@ export const folderIcons: FolderTheme[] = [ 'designs', ], }, - { name: 'folder-webpack', folderNames: ['webpack', '.webpack'] }, + { name: 'folder-webpack', folderNames: ['webpack'] }, { name: 'folder-global', folderNames: ['global'] }, { name: 'folder-public', folderNames: [ - '_site', 'public', 'www', 'wwwroot', @@ -231,17 +233,17 @@ export const folderIcons: FolderTheme[] = [ { name: 'folder-include', folderNames: [ + 'inc', 'include', 'includes', - '_includes', - 'inc', + 'partial', 'partials', - '_partials', + 'inc64', ], }, { name: 'folder-docker', - folderNames: ['docker', 'dockerfiles', '.docker'], + folderNames: ['docker', 'dockerfiles', 'dockerhub'], }, { name: 'folder-ngrx-effects', @@ -303,25 +305,21 @@ export const folderIcons: FolderTheme[] = [ folderNames: ['components', 'react', 'jsx', 'reactjs'], enabledFor: [IconPack.React, IconPack.Redux], }, + { + name: 'folder-astro', + folderNames: ['astro'], + }, { name: 'folder-database', - folderNames: ['db', 'database', 'databases', 'sql', 'data', '_data'], + folderNames: ['db', 'data', 'database', 'databases', 'sql'], }, - { name: 'folder-log', folderNames: ['log', 'logs'] }, + { name: 'folder-log', folderNames: ['log', 'logs', 'logging'] }, { name: 'folder-target', folderNames: ['target'] }, { name: 'folder-temp', - folderNames: [ - 'temp', - '.temp', - 'tmp', - '.tmp', - 'cached', - 'cache', - '.cache', - ], + folderNames: ['temp', 'tmp', 'cached', 'cache'], }, - { name: 'folder-aws', folderNames: ['aws', '.aws'] }, + { name: 'folder-aws', folderNames: ['aws', 'azure', 'gcp']}, { name: 'folder-audio', folderNames: [ @@ -340,29 +338,27 @@ export const folderIcons: FolderTheme[] = [ }, { name: 'folder-kubernetes', - folderNames: ['kubernetes', '.kubernetes', 'k8s', '.k8s'], + folderNames: ['kubernetes', 'k8s'], }, { name: 'folder-import', folderNames: ['import', 'imports', 'imported'] }, { name: 'folder-export', folderNames: ['export', 'exports', 'exported'] }, { name: 'folder-wakatime', folderNames: ['wakatime'] }, - { name: 'folder-circleci', folderNames: ['.circleci'] }, + { name: 'folder-circleci', folderNames: ['circleci'] }, { name: 'folder-wordpress', - folderNames: ['.wordpress-org', 'wp-content'], + folderNames: ['wordpress-org', 'wp-content'], }, - { name: 'folder-gradle', folderNames: ['gradle', '.gradle'] }, + { name: 'folder-gradle', folderNames: ['gradle'] }, { name: 'folder-coverage', folderNames: [ 'coverage', - '.nyc-output', - '.nyc_output', + 'nyc-output', + 'nyc_output', 'e2e', 'it', 'integration-test', 'integration-tests', - '__integration-test__', - '__integration-tests__', ], }, { @@ -389,13 +385,14 @@ export const folderIcons: FolderTheme[] = [ ], }, { name: 'folder-lua', folderNames: ['lua'] }, + { name: 'folder-turborepo', folderNames: ['turbo'] }, { name: 'folder-typescript', folderNames: ['typescript', 'ts', 'typings', '@types', 'types'], }, { name: 'folder-graphql', folderNames: ['graphql', 'gql'] }, { name: 'folder-routes', folderNames: ['routes', 'router', 'routers'] }, - { name: 'folder-ci', folderNames: ['.ci', 'ci'] }, + { name: 'folder-ci', folderNames: ['ci'] }, { name: 'folder-benchmark', folderNames: [ @@ -433,12 +430,13 @@ export const folderIcons: FolderTheme[] = [ }, { name: 'folder-python', - folderNames: ['python', '__pycache__', '.pytest_cache'], + folderNames: ['python', 'pycache', 'pytest_cache'], }, { name: 'folder-mojo', folderNames: ['mojo'], }, + { name: 'folder-moon', folderNames: ['moon'] }, { name: 'folder-debug', folderNames: ['debug', 'debugging'] }, { name: 'folder-fastlane', folderNames: ['fastlane'] }, { @@ -446,7 +444,9 @@ export const folderIcons: FolderTheme[] = [ folderNames: [ 'plugin', 'plugins', - '_plugins', + 'mod', + 'mods', + 'modding', 'extension', 'extensions', 'addon', @@ -470,22 +470,37 @@ export const folderIcons: FolderTheme[] = [ ], }, { name: 'folder-ansible', folderNames: ['ansible'] }, - { name: 'folder-server', folderNames: ['server', 'servers', 'backend'] }, + { + name: 'folder-server', + folderNames: ['server', 'servers', 'backend', 'backends'], + }, { name: 'folder-client', - folderNames: ['client', 'clients', 'frontend', 'pwa'], + folderNames: ['client', 'clients', 'frontend', 'frontends', 'pwa'], }, { name: 'folder-tasks', folderNames: ['tasks', 'tickets'] }, { name: 'folder-android', folderNames: ['android'] }, { name: 'folder-ios', folderNames: ['ios'] }, + { + name: 'folder-ui', + folderNames: ['presentation', 'gui', 'ui', 'ux'], + }, { name: 'folder-upload', folderNames: ['uploads', 'upload'] }, { name: 'folder-download', folderNames: ['downloads', 'download'] }, { name: 'folder-tools', - folderNames: ['tools', 'toolkit', 'toolkits', 'toolbox', 'toolboxes'], + folderNames: [ + 'tools', + 'toolkit', + 'toolkits', + 'toolbox', + 'toolboxes', + 'tooling', + 'devtools', + ], }, { name: 'folder-helper', folderNames: ['helpers', 'helper'] }, - { name: 'folder-serverless', folderNames: ['.serverless', 'serverless'] }, + { name: 'folder-serverless', folderNames: ['serverless'] }, { name: 'folder-api', folderNames: ['api', 'apis', 'restapi'] }, { name: 'folder-app', folderNames: ['app', 'apps'] }, { @@ -513,10 +528,12 @@ export const folderIcons: FolderTheme[] = [ 'backups', 'back-up', 'back-ups', + 'history', + 'histories', ], }, { name: 'folder-batch', folderNames: ['batch', 'batchs', 'batches'] }, - { name: 'folder-buildkite', folderNames: ['buildkite', '.buildkite'] }, + { name: 'folder-buildkite', folderNames: ['buildkite'] }, { name: 'folder-cluster', folderNames: ['cluster', 'clusters'] }, { name: 'folder-command', @@ -525,7 +542,7 @@ export const folderIcons: FolderTheme[] = [ { name: 'folder-constant', folderNames: ['constant', 'constants'] }, { name: 'folder-container', - folderNames: ['container', 'containers', '.devcontainer'], + folderNames: ['container', 'containers', 'devcontainer'], }, { name: 'folder-content', folderNames: ['content', 'contents'] }, { name: 'folder-context', folderNames: ['context', 'contexts'] }, @@ -546,15 +563,7 @@ export const folderIcons: FolderTheme[] = [ }, { name: 'folder-environment', - folderNames: [ - '.env', - '.environment', - 'env', - 'envs', - 'environment', - 'environments', - '.venv', - ], + folderNames: ['env', 'envs', 'environment', 'environments', 'venv'], }, { name: 'folder-functions', @@ -593,16 +602,24 @@ export const folderIcons: FolderTheme[] = [ { name: 'folder-job', folderNames: ['job', 'jobs'] }, { name: 'folder-keys', - folderNames: ['keys', 'key', 'token', 'tokens', 'jwt'], + folderNames: [ + 'key', + 'keys', + 'token', + 'tokens', + 'jwt', + 'secret', + 'secrets', + ], }, - { name: 'folder-layout', folderNames: ['layout', 'layouts', '_layouts'] }, + { name: 'folder-layout', folderNames: ['layout', 'layouts'] }, { name: 'folder-mail', folderNames: ['mail', 'mails', 'email', 'emails', 'smtp', 'mailers'], }, { name: 'folder-mappings', folderNames: ['mappings', 'mapping'] }, { name: 'folder-meta', folderNames: ['meta'] }, - { name: 'folder-changesets', folderNames: ['.changesets', '.changeset'] }, + { name: 'folder-changesets', folderNames: ['changesets', 'changeset'] }, { name: 'folder-packages', folderNames: ['package', 'packages', 'pkg', 'pkgs'], @@ -613,14 +630,31 @@ export const folderIcons: FolderTheme[] = [ folderNames: ['glsl', 'hlsl', 'shader', 'shaders'], }, { name: 'folder-stack', folderNames: ['stack', 'stacks'] }, - { name: 'folder-template', folderNames: ['template', 'templates'] }, + { + name: 'folder-template', + folderNames: [ + 'template', + 'templates', + 'github/ISSUE_TEMPLATE', + 'github/PULL_REQUEST_TEMPLATE', + ], + }, { name: 'folder-utils', folderNames: ['util', 'utils', 'utility', 'utilities'], }, - { name: 'folder-supabase', folderNames: ['supabase', '.supabase'] }, - { name: 'folder-private', folderNames: ['private', '.private'] }, - { name: 'folder-error', folderNames: ['error', 'errors', 'err'] }, + { name: 'folder-supabase', folderNames: ['supabase'] }, + { name: 'folder-private', folderNames: ['private'] }, + { name: 'folder-linux', folderNames: ['linux', 'linuxbsd', 'unix'] }, + { name: 'folder-windows', folderNames: ['windows', 'win', 'win32'] }, + { + name: 'folder-macos', + folderNames: ['macos', 'mac', 'osx', 'DS_Store'], + }, + { + name: 'folder-error', + folderNames: ['error', 'errors', 'err', 'errs', 'crash', 'crashes'], + }, { name: 'folder-event', folderNames: ['event', 'events'] }, { name: 'folder-secure', @@ -640,14 +674,12 @@ export const folderIcons: FolderTheme[] = [ { name: 'folder-mock', folderNames: [ - '_draft', - '_drafts', + 'draft', + 'drafts', 'mock', 'mocks', 'fixture', 'fixtures', - 'draft', - 'drafts', 'concept', 'concepts', 'sketch', @@ -681,7 +713,7 @@ export const folderIcons: FolderTheme[] = [ folderNames: ['anim', 'anims', 'animation', 'animations', 'animated'], }, { name: 'folder-guard', folderNames: ['guard', 'guards'] }, - { name: 'folder-prisma', folderNames: ['prisma'] }, + { name: 'folder-prisma', folderNames: ['prisma', 'prisma/schema'] }, { name: 'folder-pipe', folderNames: ['pipe', 'pipes'] }, { name: 'folder-svg', folderNames: ['svg', 'svgs'] }, { @@ -691,8 +723,7 @@ export const folderIcons: FolderTheme[] = [ }, { name: 'folder-nuxt', - folderNames: ['nuxt', '.nuxt'], - enabledFor: [IconPack.Vuex, IconPack.Vue], + folderNames: ['nuxt'], }, { name: 'folder-vue-directives', @@ -704,25 +735,39 @@ export const folderIcons: FolderTheme[] = [ folderNames: ['components'], enabledFor: [IconPack.Vuex, IconPack.Vue], }, - { name: 'folder-terraform', folderNames: ['terraform', '.terraform'] }, + { name: 'folder-terraform', folderNames: ['terraform'] }, { name: 'folder-mobile', folderNames: ['mobile', 'mobiles', 'portable', 'portability'], }, - { name: 'folder-stencil', folderNames: ['.stencil'] }, - { name: 'folder-firebase', folderNames: ['firebase', '.firebase'] }, - { name: 'folder-svelte', folderNames: ['svelte', '.svelte-kit'] }, + { name: 'folder-stencil', folderNames: ['stencil'] }, + { name: 'folder-firebase', folderNames: ['firebase'] }, + { name: 'folder-svelte', folderNames: ['svelte', 'svelte-kit'] }, { name: 'folder-update', folderNames: ['update', 'updates', 'upgrade', 'upgrades'], }, - { name: 'folder-intellij', folderNames: ['.idea'], light: true }, + { name: 'folder-intellij', folderNames: ['idea'], light: true }, { name: 'folder-azure-pipelines', - folderNames: ['.azure-pipelines', '.azure-pipelines-ci'], + folderNames: ['azure-pipelines', 'azure-pipelines-ci'], }, { name: 'folder-mjml', folderNames: ['mjml'] }, - { name: 'folder-admin', folderNames: ['admin', 'manager', 'moderator'] }, + { + name: 'folder-admin', + folderNames: [ + 'admin', + 'admins', + 'manager', + 'managers', + 'moderator', + 'moderators', + ], + }, + { + name: 'folder-jupyter', + folderNames: ['jupyter', 'notebook', 'notebooks', 'ipynb'], + }, { name: 'folder-scala', folderNames: ['scala'] }, { name: 'folder-connection', @@ -731,59 +776,68 @@ export const folderIcons: FolderTheme[] = [ 'connections', 'integration', 'integrations', + 'remote', + 'remotes', ], }, - { name: 'folder-quasar', folderNames: ['.quasar'] }, - { name: 'folder-next', folderNames: ['.next'] }, + { name: 'folder-quasar', folderNames: ['quasar'] }, + { name: 'folder-next', folderNames: ['next'] }, { name: 'folder-cobol', folderNames: ['cobol'] }, - { name: 'folder-yarn', folderNames: ['yarn', '.yarn'] }, - { name: 'folder-husky', folderNames: ['husky', '.husky'] }, + { name: 'folder-yarn', folderNames: ['yarn'] }, + { name: 'folder-husky', folderNames: ['husky'] }, { name: 'folder-storybook', - folderNames: ['.storybook', 'storybook', 'stories', '__stories__'], + folderNames: ['storybook', 'stories'], }, - { name: 'folder-base', folderNames: ['base', '.base', 'bases'] }, + { name: 'folder-base', folderNames: ['base', 'bases'] }, { name: 'folder-cart', folderNames: ['cart', 'shopping-cart', 'shopping', 'shop'], }, { name: 'folder-home', - folderNames: ['home', '.home', 'start', '.start'], + folderNames: ['home', 'start'], }, { name: 'folder-project', - folderNames: ['project', 'projects', '.project', '.projects'], + folderNames: ['project', 'projects'], }, { name: 'folder-interface', folderNames: ['interface', 'interfaces'], }, - { name: 'folder-netlify', folderNames: ['.netlify'] }, + { name: 'folder-netlify', folderNames: ['netlify'] }, + { + name: 'folder-enum', + folderNames: ['enum', 'enums'], + }, { name: 'folder-contract', folderNames: [ 'pact', 'pacts', 'contract', - '.contract', 'contracts', 'contract-testing', 'contract-test', 'contract-tests', ], }, + { + name: 'folder-helm', + folderNames: ['helm', 'helmchart', 'helmcharts'], + }, { name: 'folder-queue', folderNames: ['queue', 'queues', 'bull', 'mq'], }, { name: 'folder-vercel', - folderNames: ['vercel', '.vercel', 'now', '.now'], + folderNames: ['vercel', 'now'], }, { name: 'folder-cypress', - folderNames: ['cypress', '.cypress'], + folderNames: ['cypress'], }, { name: 'folder-decorators', @@ -799,7 +853,7 @@ export const folderIcons: FolderTheme[] = [ }, { name: 'folder-angular', - folderNames: ['angular', '.angular'], + folderNames: ['angular'], }, { name: 'folder-unity', @@ -811,11 +865,11 @@ export const folderIcons: FolderTheme[] = [ }, { name: 'folder-proto', - folderNames: ['protobufs', 'proto'], + folderNames: ['protobuf', 'protobufs', 'proto', 'protos'], }, { name: 'folder-plastic', - folderNames: ['plastic', '.plastic'], + folderNames: ['plastic'], }, { name: 'folder-gamemaker', @@ -823,12 +877,62 @@ export const folderIcons: FolderTheme[] = [ }, { name: 'folder-mercurial', - folderNames: ['.hg', 'hghooks', '.hghooks', '.hgext'], + folderNames: ['hg', 'hghooks', 'hgext'], }, { name: 'folder-godot', - folderNames: ['godot', '.godot', 'godot-cpp', '.godot-cpp'], + folderNames: ['godot', 'godot-cpp'], + }, + { + name: 'folder-lottie', + folderNames: ['lottie', 'lotties', 'lottiefiles'], + }, + { + name: 'folder-taskfile', + folderNames: ['taskfile', 'taskfiles'], + }, + { + name: 'folder-drizzle', + folderNames: ['drizzle'], + }, + { + name: 'folder-cloudflare', + folderNames: ['cloudflare'], }, + { + name: 'folder-seeders', + folderNames: ['seeds', 'seeders', 'seed', 'seeding'], + }, + { + name: 'folder-store', + folderNames: ['store', 'stores'], + enabledFor: [IconPack.Angular], + }, + { name: 'folder-bicep', folderNames: ['bicep'] }, + { name: 'folder-snapcraft', folderNames: ['snap', 'snapcraft'] }, + { + name: 'folder-development', + folderNames: ['dev', 'development'], + clone: { + base: 'folder-src', + color: 'light-blue-700', + }, + }, + { name: 'folder-flutter', folderNames: ['flutter'] }, + { name: 'folder-snippet', folderNames: ['snippet', 'snippets'] }, + { + name: 'folder-src-tauri', + folderNames: ['src-tauri'], + }, + { + name: 'folder-favicon', + folderNames: ['favicon', 'favicons'], + }, + { name: 'folder-lefthook', folderNames: ['lefthook', 'lefthook-local'] }, + { + name: 'folder-powershell', + folderNames: ["powershell", "ps", "ps1"] + } ], }, { diff --git a/src/icons/languageIcons.ts b/src/core/icons/languageIcons.ts similarity index 88% rename from src/icons/languageIcons.ts rename to src/core/icons/languageIcons.ts index 22d360925d..4522d0b8a5 100644 --- a/src/icons/languageIcons.ts +++ b/src/core/icons/languageIcons.ts @@ -1,16 +1,23 @@ -import { LanguageIcon } from '../models'; +import type { LanguageIcon } from '../models/icons/languages/languageIdentifier'; /** * Defines icons for language ids */ export const languageIcons: LanguageIcon[] = [ { icon: { name: 'git' }, ids: ['git', 'git-commit', 'git-rebase', 'ignore'] }, - { icon: { name: 'yaml' }, ids: ['yaml'] }, + { + icon: { name: 'github-actions-workflow' }, + ids: ['github-actions-workflow'], + }, + { + icon: { name: 'yaml' }, + ids: ['yaml', 'spring-boot-properties-yaml', 'ansible', 'ansible-jinja'], + }, { icon: { name: 'xml' }, ids: ['xml', 'xquery', 'xsl'] }, { icon: { name: 'matlab' }, ids: ['matlab'] }, { icon: { name: 'settings' }, - ids: ['makefile', 'toml', 'ini', 'properties'], + ids: ['makefile', 'toml', 'ini', 'properties', 'spring-boot-properties'], }, { icon: { name: 'shaderlab' }, ids: ['shaderlab'] }, { icon: { name: 'diff' }, ids: ['diff'] }, @@ -87,7 +94,7 @@ export const languageIcons: LanguageIcon[] = [ { icon: { name: 'tex' }, ids: ['tex', 'doctex', 'latex', 'latex-expl3'] }, { icon: { name: 'salesforce' }, ids: ['apex'] }, { icon: { name: 'sas' }, ids: ['sas'] }, - { icon: { name: 'docker' }, ids: ['dockerfile'] }, + { icon: { name: 'docker' }, ids: ['dockerfile', 'dockercompose'] }, { icon: { name: 'table' }, ids: ['csv', 'tsv', 'psv'] }, { icon: { name: 'csharp' }, ids: ['csharp'] }, { icon: { name: 'console' }, ids: ['bat', 'awk', 'shellscript'] }, @@ -142,4 +149,19 @@ export const languageIcons: LanguageIcon[] = [ { icon: { name: 'dart' }, ids: ['dart'] }, { icon: { name: 'cadence' }, ids: ['cadence'] }, { icon: { name: 'stylable' }, ids: ['stylable'] }, + { icon: { name: 'hjson' }, ids: ['hjson'] }, + { icon: { name: 'huff' }, ids: ['huff'] }, + { + icon: { name: 'cds' }, + ids: ['cds', 'capnb', 'cds-markdown-injection'], + }, + { + icon: { name: 'concourse' }, + ids: ['concourse-pipeline-yaml', 'concourse-task-yaml'], + }, + { + icon: { name: 'systemd', light: true }, + ids: ['systemd-conf', 'systemd-unit-file'], + }, + { icon: { name: 'slint' }, ids: ['slint'] }, ]; diff --git a/src/core/index.ts b/src/core/index.ts new file mode 100644 index 0000000000..039d03137c --- /dev/null +++ b/src/core/index.ts @@ -0,0 +1,57 @@ +export { applyConfigToIcons } from './generator/applyConfigToIcons'; +export { + customClonesIcons, + generateConfiguredClones, + hasCustomClones, +} from './generator/clones/clonesGenerator'; +export { clearCloneFolder } from './generator/clones/utils/cloneData'; +export { + getDefaultConfig, + padWithDefaultConfig, +} from './generator/config/defaultConfig'; +export { + extensionName, + extensionPublisher, + highContrastColorFileEnding, + lightColorFileEnding, + logEventKey, + manifestName, + openedFolder, +} from './generator/constants'; +export { generateFileIcons } from './generator/fileGenerator'; +export { generateFolderIcons } from './generator/folderGenerator'; +export { generateManifest } from './generator/generateManifest'; +export { validateOpacityValue } from './generator/iconOpacity'; +export { validateSaturationValue } from './generator/iconSaturation'; +export { renameIconFiles } from './generator/renameIconFiles'; +export { validateHEXColorCode } from './generator/shared/validation'; +export { availableIconPacks } from './helpers/iconPacks'; +export { get, merge, set } from './helpers/object'; +export { resolvePath } from './helpers/resolvePath'; +export { capitalizeFirstLetter, toTitleCase } from './helpers/titlecase'; +export { writeToFile } from './helpers/writeFile'; +export { initTranslations, translate } from './i18n/translate'; +export { fileIcons } from './icons/fileIcons'; +export { folderIcons } from './icons/folderIcons'; +export { languageIcons } from './icons/languageIcons'; +export { + createLoggingObserver, + logger, + type LogEvent, + type LogLevel, +} from './logging/logger'; +export type { CloneOptions } from './models/icons/cloneOptions'; +export type { Config, IconAssociations } from './models/icons/config'; +export type { DefaultIcon } from './models/icons/defaultIcon'; +export type { FileIcon } from './models/icons/files/fileIcon'; +export type { FileIcons } from './models/icons/files/fileTypes'; +export type { FolderIcon } from './models/icons/folders/folderIcon'; +export type { + FolderTheme, + FolderThemeName, +} from './models/icons/folders/folderTheme'; +export { IconPack, type IconPackValue } from './models/icons/iconPack'; +export type { LanguageIcon } from './models/icons/languages/languageIdentifier'; +export { FileNamePattern } from './models/icons/patterns/patterns'; +export { type Manifest, type ManifestConfig } from './models/manifest'; +export { parseByPattern } from './patterns/patterns'; diff --git a/src/core/logging/logger.ts b/src/core/logging/logger.ts new file mode 100644 index 0000000000..bc67ed3353 --- /dev/null +++ b/src/core/logging/logger.ts @@ -0,0 +1,60 @@ +import { EventEmitter } from 'node:events'; +import { logEventKey } from '../generator/constants'; + +export type LogLevel = 'info' | 'error' | 'debug'; +const loggerEmitter = new EventEmitter({ + captureRejections: true, +}); + +// Mapping log levels to numeric values for comparison +const logLevelValues: { [Key in LogLevel]: number } = { + debug: 1, + info: 2, + error: 3, +}; + +export type LogEvent = { + level: LogLevel; + message: string; +}; + +/** + * Create a logger that emits log events. + */ +const createLogger = () => { + const emitLogEvent = (level: LogLevel, message: unknown) => { + const timestamp = new Date().toISOString(); + const logEvent: LogEvent = { + level, + message: `[${level.toUpperCase()}] ${timestamp} - ${message}`, + }; + loggerEmitter.emit(logEventKey, logEvent); + }; + + return { + info: (message: unknown) => emitLogEvent('info', message), + error: (message: unknown) => emitLogEvent('error', message), + debug: (message: unknown) => emitLogEvent('debug', message), + }; +}; + +/** + * Create a logging observer that listens to log events and calls a callback function when a log event is emitted. + * + * @param minLogLevel Minimum log level to observe + * @param callback Callback function to be called when a log event is emitted + */ +export const createLoggingObserver = ( + minLogLevel: LogLevel, + callback: (event: LogEvent) => void +): EventEmitter => { + const minLogLevelValue = logLevelValues[minLogLevel]; + + return loggerEmitter.on(logEventKey, (event: LogEvent) => { + if (logLevelValues[event.level] >= minLogLevelValue) { + callback(event); + } + }); +}; + +export const logger = createLogger(); diff --git a/src/models/i18n/translation.ts b/src/core/models/i18n/translation.ts similarity index 95% rename from src/models/i18n/translation.ts rename to src/core/models/i18n/translation.ts index 49584c86a7..151699f356 100644 --- a/src/models/i18n/translation.ts +++ b/src/core/models/i18n/translation.ts @@ -1,4 +1,4 @@ -export interface Translation { +export type Translation = { activate: string; activated: string; iconPacks: { @@ -40,4 +40,4 @@ export interface Translation { inputPlaceholder: string; wrongValue: string; }; -} +}; diff --git a/src/core/models/icons/cloneOptions.ts b/src/core/models/icons/cloneOptions.ts new file mode 100644 index 0000000000..9d1b903bda --- /dev/null +++ b/src/core/models/icons/cloneOptions.ts @@ -0,0 +1,5 @@ +export type CloneOptions = { + base: string; + color: string; + lightColor?: string; +}; diff --git a/src/core/models/icons/config.ts b/src/core/models/icons/config.ts new file mode 100644 index 0000000000..ec2f140ea6 --- /dev/null +++ b/src/core/models/icons/config.ts @@ -0,0 +1,47 @@ +import type { LogLevel } from '../../logging/logger'; +import type { FolderThemeName } from './folders/folderTheme'; +import type { IconPackValue } from './iconPack'; + +export type Config = { + activeIconPack: IconPackValue; + hidesExplorerArrows: boolean; + opacity: number; + saturation: number; + folders: { + theme: FolderThemeName; + color: string; + associations: IconAssociations; + customClones: FolderIconClone[]; + }; + files: { + color: string; + associations: IconAssociations; + customClones: FileIconClone[]; + }; + languages: { + associations: IconAssociations; + }; + enableLogging: boolean; + logLevel: LogLevel; +}; + +export type IconAssociations = { + [pattern: string]: string; +}; + +export type CustomClone = { + name: string; + base: string; + color: string; + lightColor?: string; + activeForPacks?: IconPackValue[]; +}; + +export type FileIconClone = CustomClone & { + fileExtensions?: string[]; + fileNames?: string[]; +}; + +export type FolderIconClone = CustomClone & { + folderNames: string[]; +}; diff --git a/src/models/icons/defaultIcon.ts b/src/core/models/icons/defaultIcon.ts similarity index 75% rename from src/models/icons/defaultIcon.ts rename to src/core/models/icons/defaultIcon.ts index a8de24d1d3..2fb5961e98 100644 --- a/src/models/icons/defaultIcon.ts +++ b/src/core/models/icons/defaultIcon.ts @@ -1,6 +1,6 @@ -export interface DefaultIcon { +export type DefaultIcon = { /** - * Name of the icon, e.g. 'src' + * Name of the icon, e.g. `src` */ name: string; @@ -13,4 +13,4 @@ export interface DefaultIcon { * Define if there is a high contrast icon available. */ highContrast?: boolean; -} +}; diff --git a/src/core/models/icons/files/fileIcon.ts b/src/core/models/icons/files/fileIcon.ts new file mode 100644 index 0000000000..bc0f5d2390 --- /dev/null +++ b/src/core/models/icons/files/fileIcon.ts @@ -0,0 +1,61 @@ +import type { RequireAtLeastOne } from '../../../types/requiredAtLeastOne'; +import type { CloneOptions } from '../cloneOptions'; +import type { IconPack } from '../iconPack'; +import type { Patterns } from '../patterns/patterns'; + +type BasicFileIcon = { + /** + * Name of the icon, e.g. `javascript` + */ + name: string; + + /** + * Define the file extensions that should use this icon. + * E.g. `['js']` + */ + fileExtensions?: string[]; + + /** + * Define if there are some static file names that should apply this icon. + * E.g. `['sample.js']` + */ + fileNames?: string[]; + + /** + * Define patterns for file names. Patterns are used to generate common file names and file extensions based on a key. + */ + patterns?: Patterns; + + /** + * Define if there is a light icon available. + */ + light?: boolean; + + /** + * Define if there is a high contrast icon available. + */ + highContrast?: boolean; + + /** + * Define if the icon should be disabled. + */ + disabled?: boolean; + + /** + * Defines a pack to which this icon belongs. A pack can be toggled and all icons inside this pack can be enabled or disabled together. + */ + enabledFor?: IconPack[]; + + /** + * Options for generating an icon based on another icon. + */ + clone?: CloneOptions; +}; + +/** + * Type for a `FileIcon`. In addition to the `name` property, either a `fileExtensions` or `fileNames` property is required. + */ +export type FileIcon = RequireAtLeastOne< + BasicFileIcon, + 'fileExtensions' | 'fileNames' | 'patterns' +>; diff --git a/src/models/icons/files/fileTypes.ts b/src/core/models/icons/files/fileTypes.ts similarity index 65% rename from src/models/icons/files/fileTypes.ts rename to src/core/models/icons/files/fileTypes.ts index 2f6256ac93..8d0612318c 100644 --- a/src/models/icons/files/fileTypes.ts +++ b/src/core/models/icons/files/fileTypes.ts @@ -1,5 +1,5 @@ -import { DefaultIcon } from '../defaultIcon'; -import { FileIcon } from './index'; +import { type DefaultIcon } from '../defaultIcon'; +import type { FileIcon } from './fileIcon'; export type FileIcons = { /** diff --git a/src/models/icons/folders/folderIcon.ts b/src/core/models/icons/folders/folderIcon.ts similarity index 65% rename from src/models/icons/folders/folderIcon.ts rename to src/core/models/icons/folders/folderIcon.ts index 386d3a7f64..a55dfed126 100644 --- a/src/models/icons/folders/folderIcon.ts +++ b/src/core/models/icons/folders/folderIcon.ts @@ -1,14 +1,15 @@ -import { IconPack } from '../index'; +import { type CloneOptions } from '../cloneOptions'; +import type { IconPack } from '../iconPack'; -export interface FolderIcon { +export type FolderIcon = { /** - * Name of the icon, e.g. 'src' + * Name of the icon, e.g. `src` */ name: string; /** * Define the folder names that should apply the icon. - * E.g. ['src', 'source'] + * E.g. `['src', 'source']` */ folderNames: string[]; @@ -31,4 +32,9 @@ export interface FolderIcon { * Defines a pack to which this icon belongs. A pack can be toggled and all icons inside this pack can be enabled or disabled together. */ enabledFor?: IconPack[]; -} + + /** + * Options for generating an icon based on another icon. + */ + clone?: CloneOptions; +}; diff --git a/src/models/icons/folders/folderTheme.ts b/src/core/models/icons/folders/folderTheme.ts similarity index 56% rename from src/models/icons/folders/folderTheme.ts rename to src/core/models/icons/folders/folderTheme.ts index 215e2578db..5822246a36 100644 --- a/src/models/icons/folders/folderTheme.ts +++ b/src/core/models/icons/folders/folderTheme.ts @@ -1,10 +1,11 @@ -import { DefaultIcon, FolderIcon } from '../index'; +import type { DefaultIcon } from '../defaultIcon'; +import type { FolderIcon } from './folderIcon'; -export interface FolderTheme { +export type FolderTheme = { /** * Name of the theme */ - name: string; + name: FolderThemeName; /** * Define the default icon for folders in a theme. @@ -20,4 +21,6 @@ export interface FolderTheme { * Defines folder icons for specific folder names. */ icons?: FolderIcon[]; -} +}; + +export type FolderThemeName = 'specific' | 'classic' | 'none'; diff --git a/src/models/icons/iconPack.ts b/src/core/models/icons/iconPack.ts similarity index 82% rename from src/models/icons/iconPack.ts rename to src/core/models/icons/iconPack.ts index 6954f5758c..bf0dfdb2b3 100644 --- a/src/models/icons/iconPack.ts +++ b/src/core/models/icons/iconPack.ts @@ -11,3 +11,5 @@ export enum IconPack { Vue = 'vue', Vuex = 'vue_vuex', } + +export type IconPackValue = `${IconPack}` | ''; diff --git a/src/models/icons/languages/languageIdentifier.ts b/src/core/models/icons/languages/languageIdentifier.ts similarity index 74% rename from src/models/icons/languages/languageIdentifier.ts rename to src/core/models/icons/languages/languageIdentifier.ts index 96a7e1e99b..66fbeb0b6b 100644 --- a/src/models/icons/languages/languageIdentifier.ts +++ b/src/core/models/icons/languages/languageIdentifier.ts @@ -1,13 +1,14 @@ -import { DefaultIcon, IconPack } from '../index'; +import type { DefaultIcon } from '../defaultIcon'; +import type { IconPack } from '../iconPack'; -export interface LanguageIcon { +export type LanguageIcon = { /** * Icon for the language identifier */ icon: DefaultIcon; /** - * Language ID, e.g. 'javascript' + * Language ID, e.g. `javascript` * * According to official VS Code documentation: * https://code.visualstudio.com/docs/languages/identifiers @@ -23,4 +24,4 @@ export interface LanguageIcon { * Defines a pack to which this icon belongs. A pack can be toggled and all icons inside this pack can be enabled or disabled together. */ enabledFor?: IconPack[]; -} +}; diff --git a/src/core/models/icons/patterns/patterns.ts b/src/core/models/icons/patterns/patterns.ts new file mode 100644 index 0000000000..45bcb0c3ca --- /dev/null +++ b/src/core/models/icons/patterns/patterns.ts @@ -0,0 +1,18 @@ +import type { FileIcon } from '../files/fileIcon'; + +export enum FileNamePattern { + /** Adds the following extensions to the file name: `js`, `mjs`, `cjs`, `ts`, `mts`, `cts`. */ + Ecmascript = 'ecmascript', + + /** Adds the following extensions to the file name: `json`, `jsonc`, `json5`, `yaml`, `yml`, `toml`. */ + Configuration = 'configuration', + + /** Adds the following extensions to the file name: `js`, `mjs`, `cjs`, `ts`, `mts`, `cts`, `json`, `jsonc`, `json5`, `yaml`, `yml`, `toml`. */ + NodeEcosystem = 'nodeEcosystem', + + /** It adjusts the name with the following patterns: `.fileNamerc`, `.config/fileNamerc`, `fileName.config` and combines that with the pattern `NodeEcosystem` */ + Cosmiconfig = 'cosmiconfig', +} + +export type Patterns = Record; +export type FileIconWithPatterns = (FileIcon & { patterns?: Patterns })[]; diff --git a/src/core/models/manifest.ts b/src/core/models/manifest.ts new file mode 100644 index 0000000000..d9004111b9 --- /dev/null +++ b/src/core/models/manifest.ts @@ -0,0 +1,47 @@ +import type { RecursivePartial } from '../types/recursivePartial'; +import type { Config } from './icons/config'; + +/** + * Configuration for the manifest. It contains the configuration which is used to generate the manifest. + */ +export type ManifestConfig = RecursivePartial< + Pick & { + files: Pick; + } & { + folders: Pick; + } +>; + +export type Manifest = { + file?: string; + folder?: string; + folderExpanded?: string; + folderNames?: Record; + folderNamesExpanded?: Record; + rootFolder?: string; + rootFolderExpanded?: string; + fileExtensions?: Record; + fileNames?: Record; + languageIds?: Record; + iconDefinitions?: Record; + light?: Manifest; + highContrast?: Manifest; + hidesExplorerArrows?: boolean; +}; + +export const createEmptyManifest = (): Manifest => ({ + iconDefinitions: {}, + folderNames: {}, + folderNamesExpanded: {}, + fileExtensions: {}, + fileNames: {}, + languageIds: {}, + light: { + fileExtensions: {}, + fileNames: {}, + }, + highContrast: { + fileExtensions: {}, + fileNames: {}, + }, +}); diff --git a/src/core/patterns/patterns.ts b/src/core/patterns/patterns.ts new file mode 100644 index 0000000000..f877bfe676 --- /dev/null +++ b/src/core/patterns/patterns.ts @@ -0,0 +1,118 @@ +import type { FileIcon } from '../models/icons/files/fileIcon'; +import { + type FileIconWithPatterns, + FileNamePattern, + type Patterns, +} from '../models/icons/patterns/patterns'; + +/** + * Maps the patterns to an array of strings. + * Each pattern is a function that generates file names based on a key. + * + * @param patterns The patterns to map. + * @returns An array of strings generated by applying the patterns. + */ +const mapPatterns = (patterns: Patterns): string[] => { + return Object.entries(patterns).flatMap(([fileName, pattern]) => { + switch (pattern) { + case FileNamePattern.Ecmascript: + return [ + `${fileName}.js`, + `${fileName}.mjs`, + `${fileName}.cjs`, + `${fileName}.ts`, + `${fileName}.mts`, + `${fileName}.cts`, + ]; + + case FileNamePattern.Configuration: + return [ + `${fileName}.json`, + `${fileName}.jsonc`, + `${fileName}.json5`, + `${fileName}.yaml`, + `${fileName}.yml`, + `${fileName}.toml`, + ]; + + case FileNamePattern.NodeEcosystem: + return [ + `${fileName}.js`, + `${fileName}.mjs`, + `${fileName}.cjs`, + `${fileName}.ts`, + `${fileName}.mts`, + `${fileName}.cts`, + `${fileName}.json`, + `${fileName}.jsonc`, + `${fileName}.json5`, + `${fileName}.yaml`, + `${fileName}.yml`, + `${fileName}.toml`, + ]; + + case FileNamePattern.Cosmiconfig: + return [ + `.${fileName}rc`, + `.${fileName}rc.json`, + `.${fileName}rc.jsonc`, + `.${fileName}rc.json5`, + `.${fileName}rc.yaml`, + `.${fileName}rc.yml`, + `.${fileName}rc.toml`, + `.${fileName}rc.js`, + `.${fileName}rc.mjs`, + `.${fileName}rc.cjs`, + `.${fileName}rc.ts`, + `.${fileName}rc.mts`, + `.${fileName}rc.cts`, + `.config/${fileName}rc`, + `.config/${fileName}rc.json`, + `.config/${fileName}rc.jsonc`, + `.config/${fileName}rc.json5`, + `.config/${fileName}rc.yaml`, + `.config/${fileName}rc.yml`, + `.config/${fileName}rc.toml`, + `.config/${fileName}rc.js`, + `.config/${fileName}rc.mjs`, + `.config/${fileName}rc.cjs`, + `.config/${fileName}rc.ts`, + `.config/${fileName}rc.mts`, + `.config/${fileName}rc.cts`, + `${fileName}.config.json`, + `${fileName}.config.jsonc`, + `${fileName}.config.json5`, + `${fileName}.config.yaml`, + `${fileName}.config.yml`, + `${fileName}.config.toml`, + `${fileName}.config.js`, + `${fileName}.config.mjs`, + `${fileName}.config.cjs`, + `${fileName}.config.ts`, + `${fileName}.config.mts`, + `${fileName}.config.cts`, + ]; + + default: + // Check if all potential pattern cases are handled + const exhaustiveCheck: never = pattern; + throw new Error(`Unhandled pattern: ${exhaustiveCheck}`); + } + }); +}; + +/** + * Parses the raw file icons by applying the patterns. + * A pattern helps to generate file names based on a key. + * + * @param rawFileIcons - The list of file icons without applied patterns. + * @returns The list of file icons with applied patterns. + */ +export const parseByPattern = ( + rawFileIcons: FileIconWithPatterns +): FileIcon[] => { + return rawFileIcons.map(({ patterns, fileNames = [], ...rest }) => ({ + ...rest, + fileNames: patterns ? [...mapPatterns(patterns), ...fileNames] : fileNames, + })); +}; diff --git a/src/core/tests/helpers/object.test.ts b/src/core/tests/helpers/object.test.ts new file mode 100644 index 0000000000..44f44fa554 --- /dev/null +++ b/src/core/tests/helpers/object.test.ts @@ -0,0 +1,106 @@ +import { describe, expect, it } from 'bun:test'; +import { merge, set } from '../../helpers/object'; + +describe('set function its', () => { + it('should set value at root level', () => { + const obj: { a: number; b: number; c?: number } = { a: 1, b: 2 }; + set(obj, 'c', 3); + expect(obj).toEqual({ a: 1, b: 2, c: 3 }); + }); + + it('should set value in a nested object', () => { + const obj: { a: { b: number; c?: number } } = { a: { b: 2 } }; + set(obj, 'a.c', 3); + expect(obj).toEqual({ a: { b: 2, c: 3 } }); + }); + + it('should override existing value', () => { + const obj = { a: 1 }; + set(obj, 'a', 2); + expect(obj.a).toBe(2); + }); + + it('should set value with array notation', () => { + const obj = {}; + set(obj, ['a', 'b', 'c'], 3); + expect(obj).toEqual({ a: { b: { c: 3 } } }); + }); + + it('should create nested structure if not exist', () => { + const obj = {}; + set(obj, 'a.b.c', 3); + expect(obj).toEqual({ a: { b: { c: 3 } } }); + }); + + it('should set value with complex path', () => { + const obj: { a: { b: { c: number; d?: { e?: number } } } } = { + a: { b: { c: 1 } }, + }; + set(obj, 'a.b.d.e', 2); + expect(obj).toEqual({ a: { b: { c: 1, d: { e: 2 } } } }); + }); + + it('should set value to null', () => { + const obj: { a: number; b?: null } = { a: 1 }; + set(obj, 'b', null); + expect(obj).toEqual({ a: 1, b: null }); + }); + + it('should set value to undefined', () => { + const obj: { a: number; b?: undefined } = { a: 1 }; + set(obj, 'b', undefined); + expect(obj).toEqual({ a: 1, b: undefined }); + }); +}); + +describe('merge function its', () => { + it('should merge objects with primitive values', () => { + type Obj = { a: number; b?: string; c?: boolean }; + const obj1: Obj = { a: 1, b: 'text' }; + const obj2: Obj = { a: 2, c: true }; + const result = merge(obj1, obj2); + expect(result).toEqual({ a: 2, b: 'text', c: true }); + }); + + it('should merge objects with nested objects', () => { + type Obj = { a: { x?: number; y?: number }; b?: string; c?: boolean }; + const obj1: Obj = { a: { x: 1 }, b: 'text' }; + const obj2: Obj = { a: { y: 2 }, c: true }; + const result = merge(obj1, obj2); + expect(result).toEqual({ a: { x: 1, y: 2 }, b: 'text', c: true }); + }); + + it('should merge objects with arrays', () => { + type Obj = { a: number[]; b?: string; c?: boolean }; + const obj1: Obj = { a: [1, 2], b: 'text' }; + const obj2: Obj = { a: [3, 4], c: true }; + const result = merge(obj1, obj2); + expect(result).toEqual({ a: [1, 2, 3, 4], b: 'text', c: true }); + }); + + it('should handle null and undefined correctly', () => { + type Obj = { + a: { x: number } | null; + b: string | undefined; + }; + const obj1: Obj = { a: null, b: undefined }; + const obj2: Obj = { a: { x: 1 }, b: 'text' }; + const result = merge(obj1, obj2); + expect(result).toEqual({ a: { x: 1 }, b: 'text' }); + }); + + it('should prefer the truthy value when one value is undefined or null and the other is truthy', () => { + type Obj = { + key1?: string | null; + key2?: string | null; + key3?: string | null; + }; + const obj1: Obj = { key1: null, key2: 'value2', key3: undefined }; + const obj2: Obj = { key1: 'value1', key2: null, key3: 'value3' }; + + const expectedResult = { key1: 'value1', key2: 'value2', key3: 'value3' }; + const result = merge(obj1, obj2); + + expect(result).toEqual(expectedResult); + }); +}); diff --git a/src/core/tests/i18n/i18n.test.ts b/src/core/tests/i18n/i18n.test.ts new file mode 100644 index 0000000000..da2723009f --- /dev/null +++ b/src/core/tests/i18n/i18n.test.ts @@ -0,0 +1,52 @@ +import { describe, expect, it } from 'bun:test'; +import { get } from '../../helpers/object'; +import { getTranslationValue, replace } from '../../i18n/translate'; +import type { Translation } from '../../models/i18n/translation'; + +describe('i18n', () => { + it('should translate key', () => { + const result = getTranslationValue('activate', { + activate: 'b', + } as Translation); + expect(result).toBe('b'); + }); + + it('should return undefined if translation is not defined', () => { + const result = getTranslationValue( + 'activate', + {} as Translation, + {} as Translation + ); + expect(result).toBeUndefined(); + }); + + it('should use fallback if translation is not defined', () => { + const result = getTranslationValue( + 'activate', + {} as Translation, + { activate: 'fb' } as Translation + ); + expect(result).toBe('fb'); + }); + + it('should get the correct translation value of the translation object', () => { + const translation = { + a: { + b: { + c: 'c', + }, + }, + }; + + const result = get(translation, 'a.b.c'); + expect(result).toBe('c'); + }); + + it('should use placeholder in translation', () => { + const result = replace('%0 with placeholder', 'test'); + expect(result).toBe('test with placeholder'); + + const result2 = replace('%0 with %1', 'test', 'placeholder'); + expect(result2).toBe('test with placeholder'); + }); +}); diff --git a/src/core/tests/icons/cloning.test.ts b/src/core/tests/icons/cloning.test.ts new file mode 100644 index 0000000000..6184c2268e --- /dev/null +++ b/src/core/tests/icons/cloning.test.ts @@ -0,0 +1,970 @@ +import { beforeAll, describe, expect, it, mock } from 'bun:test'; +import { type INode, parse } from 'svgson'; +import { customClonesIcons } from '../../generator/clones/clonesGenerator'; +import { + Type, + Variant, + getCloneData, +} from '../../generator/clones/utils/cloneData'; +import { + cloneIcon, + getStyle, + traverse, +} from '../../generator/clones/utils/cloning'; +import { + closerMaterialColorTo, + materialPalette as palette, +} from '../../generator/clones/utils/color/materialPalette'; +import { padWithDefaultConfig } from '../../generator/config/defaultConfig'; +import { + clonesFolder, + iconFolderPath, + lightColorFileEnding, + openedFolder, +} from '../../generator/constants'; +import { getFileConfigHash } from '../../helpers/configHash'; +import { merge } from '../../helpers/object'; +import { resolvePath } from '../../helpers/resolvePath'; +import type { FileIconClone, FolderIconClone } from '../../models/icons/config'; +import { type Manifest, createEmptyManifest } from '../../models/manifest'; +import { + isValidColor, + orderDarkToLight, +} from './../../generator/clones/utils/color/colors'; +import * as icon from './data/icons'; + +describe('cloning: color manipulation', () => { + describe('#orderDarkToLight(..)', () => { + it('should order colors from dark to light', () => { + const colors = new Set(['#000', '#fff', '#f00', '#0f0', '#00f']); + const result = orderDarkToLight(colors); + expect(result).toStrictEqual(['#000', '#f00', '#0f0', '#00f', '#fff']); + }); + + it('if empty set, should return empty array', () => { + const colors = new Set(); + const result = orderDarkToLight(colors); + expect(result).toStrictEqual([]); + }); + + it('if one color, should return array with that color', () => { + const colors = new Set(['#000']); + const result = orderDarkToLight(colors); + expect(result).toStrictEqual(['#000']); + }); + }); + + describe('#closerMaterialColorTo(..)', () => { + it('should return the closest material color to the given color', () => { + const color = '#e24542'; + const result = closerMaterialColorTo(color); + expect(result).toStrictEqual(palette['red-600']); + }); + + it('should return the same color if it is already a material color', () => { + const color = palette['indigo-500']; + const result = closerMaterialColorTo(color); + expect(result).toStrictEqual(color); + }); + + it('should throw an error if the given color is not valid', () => { + const color = 'bad-color'; + expect(() => closerMaterialColorTo(color)).toThrowError( + 'The given color "bad-color" is not valid!' + ); + }); + }); +}); + +describe('cloning: icon cloning', () => { + describe('#getCloneData(..)', () => { + const subFolder = 'sub/'; + const hash = '~-fakehash123456789'; + const ext = '.ext'; + let manifest: Manifest; + + beforeAll(() => { + manifest = { + iconDefinitions: { + base: { + iconPath: 'icons/icon.svg', + }, + base2: { + iconPath: 'icons/icon2.svg', + }, + // biome-ignore lint/style/useNamingConvention: + base2_light: { + iconPath: 'icons/icon2_light.svg', + }, + 'folder-base': { + iconPath: 'icons/folder-base.svg', + }, + 'folder-base-open': { + iconPath: 'icons/folder-base_open.svg', + }, + 'folder-base2': { + iconPath: 'icons/folder-base2.svg', + }, + 'folder-base2-open': { + iconPath: 'icons/folder-base2_open.svg', + }, + 'folder-base2_light': { + iconPath: 'icons/folder-base2_light.svg', + }, + 'folder-base2-open_light': { + iconPath: 'icons/folder-base2_open_light.svg', + }, + }, + } as Partial as Manifest; + }); + + describe('clone data generation for file icons', () => { + it('should create a single clone object if not light version exists or asked', () => { + const cloneOpts: FileIconClone = { + name: 'foo', + base: 'base', + color: 'green-500', + fileExtensions: ['bar'], + fileNames: ['file.xyz'], + }; + + const result = getCloneData(cloneOpts, manifest, subFolder, hash, ext); + + const expected = [ + { + base: { + path: resolvePath(manifest.iconDefinitions!.base.iconPath), + type: Type.File, + variant: Variant.Base, + }, + color: 'green-500', + inConfigPath: `${iconFolderPath}${subFolder}foo${hash}${ext}`, + name: 'foo', + path: resolvePath(`./icons/${subFolder}foo${hash}${ext}`), + type: Type.File, + variant: Variant.Base, + }, + ]; + + expect(result).toStrictEqual(expected); + }); + + it('should create two clone objects if light version exists', () => { + const cloneOpts: FileIconClone = { + name: 'foo', + base: 'base2', + color: 'green-500', + fileExtensions: ['bar'], + fileNames: ['file.xyz'], + }; + + const result = getCloneData(cloneOpts, manifest, subFolder, hash, ext); + + const expected = [ + { + base: { + path: resolvePath(manifest.iconDefinitions!.base2.iconPath), + type: Type.File, + variant: Variant.Base, + }, + color: 'green-500', + inConfigPath: `${iconFolderPath}${subFolder}foo${hash}${ext}`, + name: 'foo', + path: resolvePath(`./icons/${subFolder}foo${hash}${ext}`), + type: Type.File, + variant: Variant.Base, + }, + { + base: { + path: resolvePath( + manifest.iconDefinitions!.base2_light!.iconPath + ), + type: Type.File, + variant: Variant.Light, + }, + color: 'green-500', + inConfigPath: `${iconFolderPath}${subFolder}foo${lightColorFileEnding}${hash}${ext}`, + name: `foo${lightColorFileEnding}`, + path: resolvePath( + `./icons/${subFolder}foo${lightColorFileEnding}${hash}${ext}` + ), + type: Type.File, + variant: Variant.Light, + }, + ]; + + expect(result).toStrictEqual(expected); + }); + + it("should create two clone objects if light version is asked and base light doesn't exist", () => { + const cloneOpts: FileIconClone = { + name: 'foo', + base: 'base', + color: 'green-500', + lightColor: 'green-800', + fileExtensions: ['bar'], + fileNames: ['file.xyz'], + }; + + const result = getCloneData(cloneOpts, manifest, subFolder, hash, ext); + + const expected = [ + { + base: { + path: resolvePath(manifest.iconDefinitions!.base.iconPath), + type: Type.File, + variant: Variant.Base, + }, + color: 'green-500', + inConfigPath: `${iconFolderPath}${subFolder}foo${hash}${ext}`, + name: 'foo', + path: resolvePath(`./icons/${subFolder}foo${hash}${ext}`), + type: Type.File, + variant: Variant.Base, + }, + { + base: { + // since light version of icon base doesn't exist, the base icon is used as a base + // to clone the light version + path: resolvePath(manifest.iconDefinitions!.base.iconPath), + type: Type.File, + variant: Variant.Light, + }, + color: 'green-800', + inConfigPath: `${iconFolderPath}${subFolder}foo${lightColorFileEnding}${hash}${ext}`, + name: `foo${lightColorFileEnding}`, + path: resolvePath( + `./icons/${subFolder}foo${lightColorFileEnding}${hash}${ext}` + ), + type: Type.File, + variant: Variant.Light, + }, + ]; + + expect(result).toStrictEqual(expected); + }); + }); + + describe('clone data generation for folder icons', () => { + it('should create a single clone object if not light version exists or asked', () => { + const cloneOpts: FolderIconClone = { + name: 'foo', + base: 'base', + color: 'green-500', + folderNames: ['bar'], + }; + + const result = getCloneData(cloneOpts, manifest, subFolder, hash, ext); + + const expected = [ + { + base: { + path: resolvePath( + manifest.iconDefinitions!['folder-base'].iconPath + ), + type: Type.Folder, + variant: Variant.Base, + }, + color: 'green-500', + inConfigPath: `${iconFolderPath}${subFolder}folder-foo${hash}${ext}`, + name: 'folder-foo', + path: resolvePath(`./icons/${subFolder}folder-foo${hash}${ext}`), + type: Type.Folder, + variant: Variant.Base, + }, + { + base: { + path: resolvePath( + manifest.iconDefinitions!['folder-base-open'].iconPath + ), + type: Type.Folder, + variant: Variant.Open, + }, + color: 'green-500', + inConfigPath: `${iconFolderPath}${subFolder}folder-foo${openedFolder}${hash}${ext}`, + name: `folder-foo${openedFolder}`, + path: resolvePath( + `./icons/${subFolder}folder-foo${openedFolder}${hash}${ext}` + ), + type: Type.Folder, + variant: Variant.Open, + }, + ]; + + expect(result).toStrictEqual(expected); + }); + + it('should create two clone objects if light version exists', () => { + const cloneOpts: FolderIconClone = { + name: 'foo', + base: 'folder-base2', + color: 'green-500', + folderNames: ['bar'], + }; + + const result = getCloneData(cloneOpts, manifest, subFolder, hash, ext); + + const expected = [ + { + base: { + path: resolvePath( + manifest.iconDefinitions!['folder-base2'].iconPath + ), + type: Type.Folder, + variant: Variant.Base, + }, + color: 'green-500', + inConfigPath: `${iconFolderPath}${subFolder}folder-foo${hash}${ext}`, + name: 'folder-foo', + path: resolvePath(`./icons/${subFolder}folder-foo${hash}${ext}`), + type: Type.Folder, + variant: Variant.Base, + }, + { + base: { + path: resolvePath( + manifest.iconDefinitions!['folder-base2-open'].iconPath + ), + type: Type.Folder, + variant: Variant.Open, + }, + color: 'green-500', + inConfigPath: `${iconFolderPath}${subFolder}folder-foo${openedFolder}${hash}${ext}`, + name: `folder-foo${openedFolder}`, + path: resolvePath( + `./icons/${subFolder}folder-foo${openedFolder}${hash}${ext}` + ), + type: Type.Folder, + variant: Variant.Open, + }, + { + base: { + path: resolvePath( + manifest.iconDefinitions!['folder-base2_light']!.iconPath + ), + type: Type.Folder, + variant: Variant.Light, + }, + color: 'green-500', + inConfigPath: `${iconFolderPath}${subFolder}folder-foo${lightColorFileEnding}${hash}${ext}`, + name: `folder-foo${lightColorFileEnding}`, + path: resolvePath( + `./icons/${subFolder}folder-foo${lightColorFileEnding}${hash}${ext}` + ), + type: Type.Folder, + variant: Variant.Light, + }, + { + base: { + path: resolvePath( + manifest.iconDefinitions!['folder-base2-open_light']!.iconPath + ), + type: Type.Folder, + variant: Variant.LightOpen, + }, + color: 'green-500', + inConfigPath: `${iconFolderPath}${subFolder}folder-foo${openedFolder}${lightColorFileEnding}${hash}${ext}`, + name: `folder-foo${openedFolder}${lightColorFileEnding}`, + path: resolvePath( + `./icons/${subFolder}folder-foo${openedFolder}${lightColorFileEnding}${hash}${ext}` + ), + type: Type.Folder, + variant: Variant.LightOpen, + }, + ]; + + expect(result).toStrictEqual(expected); + }); + + it("should create two clone objects if light version is asked and base light doesn't exist", () => { + const cloneOpts: FolderIconClone = { + name: 'foo', + base: 'folder-base', + color: 'green-500', + lightColor: 'green-800', + folderNames: ['bar'], + }; + + const result = getCloneData(cloneOpts, manifest, subFolder, hash, ext); + + const expected = [ + { + base: { + path: resolvePath( + manifest.iconDefinitions!['folder-base'].iconPath + ), + type: Type.Folder, + variant: Variant.Base, + }, + color: 'green-500', + inConfigPath: `${iconFolderPath}${subFolder}folder-foo${hash}${ext}`, + name: 'folder-foo', + path: resolvePath(`./icons/${subFolder}folder-foo${hash}${ext}`), + type: Type.Folder, + variant: Variant.Base, + }, + { + base: { + path: resolvePath( + manifest.iconDefinitions!['folder-base-open'].iconPath + ), + type: Type.Folder, + variant: Variant.Open, + }, + color: 'green-500', + inConfigPath: `${iconFolderPath}${subFolder}folder-foo${openedFolder}${hash}${ext}`, + name: `folder-foo${openedFolder}`, + path: resolvePath( + `./icons/${subFolder}folder-foo${openedFolder}${hash}${ext}` + ), + type: Type.Folder, + variant: Variant.Open, + }, + { + base: { + // since light version of icon base doesn't exist, the base icon is used as a base + // to clone the light version + path: resolvePath( + manifest.iconDefinitions!['folder-base'].iconPath + ), + type: Type.Folder, + variant: Variant.Light, + }, + color: 'green-800', + inConfigPath: `${iconFolderPath}${subFolder}folder-foo${lightColorFileEnding}${hash}${ext}`, + name: `folder-foo${lightColorFileEnding}`, + path: resolvePath( + `./icons/${subFolder}folder-foo${lightColorFileEnding}${hash}${ext}` + ), + type: Type.Folder, + variant: Variant.Light, + }, + { + base: { + // since light version of icon base doesn't exist, the base icon is used as a base + // to clone the light version + path: resolvePath( + manifest.iconDefinitions!['folder-base-open'].iconPath + ), + type: Type.Folder, + variant: Variant.LightOpen, + }, + color: 'green-800', + inConfigPath: `${iconFolderPath}${subFolder}folder-foo${openedFolder}${lightColorFileEnding}${hash}${ext}`, + name: `folder-foo${openedFolder}${lightColorFileEnding}`, + path: resolvePath( + `./icons/${subFolder}folder-foo${openedFolder}${lightColorFileEnding}${hash}${ext}` + ), + type: Type.Folder, + variant: Variant.LightOpen, + }, + ]; + + expect(result).toStrictEqual(expected); + }); + }); + }); + + describe('#cloneIcon(..)', () => { + const bluePalette = [ + palette['blue-50'], + palette['blue-100'], + palette['blue-200'], + palette['blue-300'], + palette['blue-400'], + palette['blue-500'], + palette['blue-600'], + palette['blue-700'], + palette['blue-800'], + palette['blue-900'], + palette['blue-A100'], + palette['blue-A200'], + palette['blue-A400'], + palette['blue-A700'], + ]; + + it('should replace the color with the given color', async () => { + mock.module('node:fs/promises', () => { + return { + readFile: () => Promise.resolve(icon.file), + }; + }); + + // mock the fs.readFileSync method to return the desired icon file + const result = await cloneIcon('fake/path/to/icon.svg', 'blue-600', ''); + + const colorCount = forEachColor(await parse(result), (color, loc) => { + expect(color).toBe(palette['blue-600']); + expect(loc).toBe('style:fill'); + }); + + expect(colorCount).toBe(1); + }); + + it('should replace the color with the given color if color is in fill attribute', async () => { + // mock the fs.readFileSync method to return the desired icon file + mock.module('node:fs/promises', () => { + return { + readFile: () => Promise.resolve(icon.fileFill), + }; + }); + const result = await cloneIcon('fake/path/to/icon.svg', 'blue-600', ''); + + const colorCount = forEachColor(await parse(result), (color, loc) => { + expect(color).toBe(palette['blue-600']); + expect(loc).toBe('attr:fill'); + }); + + expect(colorCount).toBe(1); + }); + + it('should replace the color with the given color if color is in stop-color attribute', async () => { + mock.module('node:fs/promises', () => { + return { + readFile: () => Promise.resolve(icon.gradient), + }; + }); + const result = await cloneIcon('fake/path/to/icon.svg', 'blue-600', ''); + + const colorCount = forEachColor(await parse(result), (color, loc) => { + expect(bluePalette).toContain(color); + expect(loc).toBe('attr:stop-color'); + }); + + expect(colorCount).toBe(3); + }); + + it('should replace colors on icons with multiple nodes', async () => { + mock.module('node:fs/promises', () => { + return { + readFile: () => Promise.resolve(icon.folder), + }; + }); + const result = await cloneIcon('fake/path/to/icon.svg', 'blue-600', ''); + + const colors: string[] = []; + const colorCount = forEachColor(await parse(result), (color, loc) => { + colors.push(color); + expect(bluePalette).toContain(color); + expect(loc).toBe('style:fill'); + }); + + // check that one of the colors is actually blue-600 + expect(colors.includes(palette['blue-600'])).toBeTruthy(); + + expect(colorCount).toBe(2); + }); + + describe('`data-mit-no-recolor` attribute', () => { + it('should not replace the color if the node has the `data-mit-no-recolor` attribute', async () => { + mock.module('node:fs/promises', () => { + return { + readFile: () => Promise.resolve(icon.folderIgnores), + }; + }); + + const result = await cloneIcon('fake/path/to/icon.svg', 'blue-600', ''); + const parsed = await parse(result); + const changedNodeStyle = getStyle(parsed.children[0]); + const unchangedNodeStyle = getStyle(parsed.children[1]); + + expect(changedNodeStyle.fill).toBe(palette['blue-600']); + expect(unchangedNodeStyle.fill).toBe('red'); + }); + + it('should not replace the color of any child of a node with the `data-mit-no-recolor` attribute', async () => { + mock.module('node:fs/promises', () => { + return { + readFile: () => Promise.resolve(icon.gradientIgnore), + }; + }); + const result = await cloneIcon('fake/path/to/icon.svg', 'blue-600', ''); + + const colorCount = forEachColor(await parse(result), (color, loc) => { + expect(['#00695c', '#26a69a', '#b2dfdb']).toContain(color); + expect(bluePalette).not.toContain(color); + expect(loc).toBe('attr:stop-color'); + }); + + expect(colorCount).toBe(3); + }); + }); + }); +}); + +/** helper function to traverse the svg tree and notify the colors found */ +const forEachColor = ( + node: INode, + callback: (color: string, loc?: string) => void +) => { + let colorCount = 0; + + const notify = (color: string, loc: string) => { + colorCount++; + callback(color, loc); + }; + + traverse( + node, + (node) => { + // check colors in style attribute + const style = getStyle(node); + style?.fill && + isValidColor(style.fill) && + notify(style.fill, 'style:fill'); + style?.stroke && + isValidColor(style.stroke) && + notify(style.stroke, 'style:stroke'); + node.attributes?.fill && + isValidColor(node.attributes.fill) && + notify(node.attributes.fill, 'attr:fill'); + node.attributes?.stroke && + isValidColor(node.attributes.stroke) && + notify(node.attributes.stroke, 'attr:stroke'); + node.attributes?.['stop-color'] && + isValidColor(node.attributes['stop-color']) && + notify(node.attributes['stop-color'], 'attr:stop-color'); + }, + false // no filtering + ); + + return colorCount; +}; + +describe('cloning: json config generation from user options', () => { + beforeAll(() => { + mock.module('node:fs/promises', () => { + return { + readFile: () => Promise.resolve(icon.file), + writeFile: () => Promise.resolve(), + }; + }); + }); + + const getManifest = (hash: string) => { + return { + iconDefinitions: { + foo: { iconPath: `./../icons/foo${hash}.svg` }, + file: { iconPath: `./../icons/file${hash}.svg` }, + 'folder-foo': { iconPath: `./../icons/folder${hash}.svg` }, + 'folder-foo-open': { iconPath: `./../icons/folder-open${hash}.svg` }, + }, + folderNames: {}, + folderNamesExpanded: {}, + fileExtensions: {}, + fileNames: { 'foo.bar': 'foo' }, + file: 'file', + languageIds: {}, + light: { + fileExtensions: {}, + fileNames: {}, + folderNames: {}, + folderNamesExpanded: {}, + }, + highContrast: { fileExtensions: {}, fileNames: {} }, + }; + }; + + it('should generate the manifest from the config', async () => { + const config = padWithDefaultConfig({ + files: { + customClones: [ + { + base: 'foo', + name: 'foo-clone', + fileNames: ['bar.foo'], + fileExtensions: ['baz'], + color: 'green-400', + lightColor: 'green-800', + }, + ], + }, + folders: { + customClones: [ + { + base: 'folder-foo', + name: 'folder-foo-clone', + folderNames: ['bar'], + color: 'green-400', + lightColor: 'green-800', + }, + ], + }, + }); + const hash = getFileConfigHash(config); + const result = await customClonesIcons(getManifest(hash), config); + + const expected = merge(createEmptyManifest(), { + iconDefinitions: { + file: { + iconPath: `./../icons/file${hash}.svg`, + }, + 'folder-foo': { + iconPath: `./../icons/folder${hash}.svg`, + }, + 'folder-foo-open': { + iconPath: `./../icons/folder${openedFolder}${hash}.svg`, + }, + foo: { + iconPath: `./../icons/foo${hash}.svg`, + }, + 'folder-foo-clone': { + iconPath: `./../icons/${clonesFolder}folder-foo-clone${hash}.svg`, + }, + 'folder-foo-clone-open': { + iconPath: `./../icons/${clonesFolder}folder-foo-clone${openedFolder}${hash}.svg`, + }, + 'folder-foo-clone_light': { + iconPath: `./../icons/${clonesFolder}folder-foo-clone${lightColorFileEnding}${hash}.svg`, + }, + 'folder-foo-clone-open_light': { + iconPath: `./../icons/${clonesFolder}folder-foo-clone${openedFolder}${lightColorFileEnding}${hash}.svg`, + }, + 'foo-clone': { + iconPath: `./../icons/${clonesFolder}foo-clone${hash}.svg`, + }, + 'foo-clone_light': { + iconPath: `./../icons/${clonesFolder}foo-clone${lightColorFileEnding}${hash}.svg`, + }, + }, + folderNames: { bar: 'folder-foo-clone' }, + folderNamesExpanded: { bar: `folder-foo-clone${openedFolder}` }, + fileExtensions: { baz: 'foo-clone' }, + fileNames: { 'bar.foo': 'foo-clone', 'foo.bar': 'foo' }, + file: 'file', + languageIds: {}, + light: { + fileExtensions: { baz: `foo-clone${lightColorFileEnding}` }, + fileNames: { 'bar.foo': `foo-clone${lightColorFileEnding}` }, + folderNames: { bar: `folder-foo-clone${lightColorFileEnding}` }, + folderNamesExpanded: { + bar: `folder-foo-clone${openedFolder}${lightColorFileEnding}`, + }, + }, + highContrast: { fileExtensions: {}, fileNames: {} }, + }); + + expect(result).toStrictEqual(expected); + }); + + it('should not generate clones for icons not in the active pack', async () => { + const config = padWithDefaultConfig({ + files: { + customClones: [ + { + base: 'foo', + name: 'foo-clone', + fileNames: ['bar.foo'], + fileExtensions: ['baz'], + color: 'green-400', + lightColor: 'green-800', + activeForPacks: ['nest'], + }, + ], + }, + folders: { + customClones: [ + { + base: 'folder-foo', + name: 'folder-foo-clone', + folderNames: ['bar'], + color: 'green-400', + lightColor: 'green-800', + activeForPacks: ['nest'], + }, + ], + }, + }); + const hash = getFileConfigHash(config); + const result = await customClonesIcons(getManifest(hash), config); + + const expected = merge(createEmptyManifest(), { + iconDefinitions: { + file: { + iconPath: `./../icons/file${hash}.svg`, + }, + 'folder-foo': { + iconPath: `./../icons/folder${hash}.svg`, + }, + 'folder-foo-open': { + iconPath: `./../icons/folder${openedFolder}${hash}.svg`, + }, + foo: { + iconPath: `./../icons/foo${hash}.svg`, + }, + }, + folderNames: {}, + folderNamesExpanded: {}, + fileExtensions: {}, + fileNames: { 'foo.bar': 'foo' }, + file: 'file', + languageIds: {}, + light: { + fileExtensions: {}, + fileNames: {}, + folderNames: {}, + folderNamesExpanded: {}, + }, + highContrast: { fileExtensions: {}, fileNames: {} }, + }); + + expect(result).toStrictEqual(expected); + }); + + it('should generate clones for icons in the active pack, or whose pack is unspecified', async () => { + const config = padWithDefaultConfig({ + files: { + customClones: [ + { + base: 'foo', + name: 'foo-clone', + fileNames: ['bar.foo'], + fileExtensions: ['baz'], + color: 'green-400', + lightColor: 'green-800', + activeForPacks: ['nest'], + }, + { + base: 'foo', + name: 'foo-angular-clone', + fileNames: ['bar.foo.angular'], + fileExtensions: ['baz.angular'], + color: 'green-500', + lightColor: 'green-900', + activeForPacks: ['angular'], + }, + { + base: 'foo', + name: 'foo-any-clone', + fileNames: ['bar.foo.any'], + fileExtensions: ['baz.any'], + color: 'green-600', + lightColor: 'green-100', + }, + ], + }, + folders: { + customClones: [ + { + base: 'folder-foo', + name: 'folder-foo-clone', + folderNames: ['bar'], + color: 'green-400', + lightColor: 'green-800', + activeForPacks: ['nest'], + }, + { + base: 'folder-foo', + name: 'folder-foo-angular-clone', + folderNames: ['bar.angular'], + color: 'green-500', + lightColor: 'green-900', + activeForPacks: ['angular'], + }, + { + base: 'folder-foo', + name: 'folder-foo-any-clone', + folderNames: ['bar.any'], + color: 'green-600', + lightColor: 'green-100', + }, + ], + }, + }); + const hash = getFileConfigHash(config); + const result = await customClonesIcons(getManifest(hash), config); + + const expected = merge(createEmptyManifest(), { + iconDefinitions: { + file: { + iconPath: `./../icons/file${hash}.svg`, + }, + 'folder-foo': { + iconPath: `./../icons/folder${hash}.svg`, + }, + 'folder-foo-open': { + iconPath: `./../icons/folder${openedFolder}${hash}.svg`, + }, + foo: { + iconPath: `./../icons/foo${hash}.svg`, + }, + 'folder-foo-angular-clone': { + iconPath: `./../icons/${clonesFolder}folder-foo-angular-clone${hash}.svg`, + }, + 'folder-foo-angular-clone-open': { + iconPath: `./../icons/${clonesFolder}folder-foo-angular-clone${openedFolder}${hash}.svg`, + }, + 'folder-foo-angular-clone_light': { + iconPath: `./../icons/${clonesFolder}folder-foo-angular-clone${lightColorFileEnding}${hash}.svg`, + }, + 'folder-foo-angular-clone-open_light': { + iconPath: `./../icons/${clonesFolder}folder-foo-angular-clone${openedFolder}${lightColorFileEnding}${hash}.svg`, + }, + 'folder-foo-any-clone': { + iconPath: `./../icons/${clonesFolder}folder-foo-any-clone${hash}.svg`, + }, + 'folder-foo-any-clone-open': { + iconPath: `./../icons/${clonesFolder}folder-foo-any-clone${openedFolder}${hash}.svg`, + }, + 'folder-foo-any-clone_light': { + iconPath: `./../icons/${clonesFolder}folder-foo-any-clone${lightColorFileEnding}${hash}.svg`, + }, + 'folder-foo-any-clone-open_light': { + iconPath: `./../icons/${clonesFolder}folder-foo-any-clone${openedFolder}${lightColorFileEnding}${hash}.svg`, + }, + 'foo-angular-clone': { + iconPath: `./../icons/${clonesFolder}foo-angular-clone${hash}.svg`, + }, + 'foo-angular-clone_light': { + iconPath: `./../icons/${clonesFolder}foo-angular-clone${lightColorFileEnding}${hash}.svg`, + }, + 'foo-any-clone': { + iconPath: `./../icons/${clonesFolder}foo-any-clone${hash}.svg`, + }, + 'foo-any-clone_light': { + iconPath: `./../icons/${clonesFolder}foo-any-clone${lightColorFileEnding}${hash}.svg`, + }, + }, + folderNames: { + 'bar.angular': 'folder-foo-angular-clone', + 'bar.any': 'folder-foo-any-clone', + }, + folderNamesExpanded: { + 'bar.angular': `folder-foo-angular-clone${openedFolder}`, + 'bar.any': `folder-foo-any-clone${openedFolder}`, + }, + fileExtensions: { + 'baz.angular': 'foo-angular-clone', + 'baz.any': 'foo-any-clone', + }, + fileNames: { + 'bar.foo.angular': 'foo-angular-clone', + 'bar.foo.any': 'foo-any-clone', + 'foo.bar': 'foo', + }, + file: 'file', + languageIds: {}, + light: { + fileExtensions: { + 'baz.angular': `foo-angular-clone${lightColorFileEnding}`, + 'baz.any': `foo-any-clone${lightColorFileEnding}`, + }, + fileNames: { + 'bar.foo.angular': `foo-angular-clone${lightColorFileEnding}`, + 'bar.foo.any': `foo-any-clone${lightColorFileEnding}`, + }, + folderNames: { + 'bar.angular': `folder-foo-angular-clone${lightColorFileEnding}`, + 'bar.any': `folder-foo-any-clone${lightColorFileEnding}`, + }, + folderNamesExpanded: { + 'bar.angular': `folder-foo-angular-clone${openedFolder}${lightColorFileEnding}`, + 'bar.any': `folder-foo-any-clone${openedFolder}${lightColorFileEnding}`, + }, + }, + highContrast: { fileExtensions: {}, fileNames: {} }, + }); + + expect(result).toStrictEqual(expected); + }); +}); diff --git a/src/core/tests/icons/data/icons.ts b/src/core/tests/icons/data/icons.ts new file mode 100644 index 0000000000..f20fd246d3 --- /dev/null +++ b/src/core/tests/icons/data/icons.ts @@ -0,0 +1,56 @@ +/** a file icon with just one node */ +export const file = ` + + + +`; + +export const fileFill = ` + + + +`; + +/** an icon with a gradient */ +export const gradient = ` + + + + + + + + + + +`; + +/** a folder icon with many nodes */ +export const folder = ` + + + + +`; + +/** a folder icon asking for one node to not be recolorized */ +export const folderIgnores = ` + + + + +`; + +/** an icon with a gradient that asks for the gradient node to not be recolorized */ +export const gradientIgnore = ` + + + + + + + + + + +`; diff --git a/src/core/tests/icons/fileIcons.test.ts b/src/core/tests/icons/fileIcons.test.ts new file mode 100644 index 0000000000..157181ff93 --- /dev/null +++ b/src/core/tests/icons/fileIcons.test.ts @@ -0,0 +1,366 @@ +import { beforeEach, describe, expect, it } from 'bun:test'; +import { getDefaultConfig } from '../../generator/config/defaultConfig'; +import { loadFileIconDefinitions } from '../../generator/fileGenerator'; +import type { Config } from '../../models/icons/config'; +import type { FileIcons } from '../../models/icons/files/fileTypes'; +import { IconPack } from '../../models/icons/iconPack'; +import { type Manifest, createEmptyManifest } from '../../models/manifest'; + +describe('file icons', () => { + let expectedManifest: Manifest; + let config: Config; + + beforeEach(() => { + config = getDefaultConfig(); + expectedManifest = createEmptyManifest(); + }); + + it('should configure icon definitions', () => { + const fileIcons: FileIcons = { + defaultIcon: { name: 'file' }, + icons: [ + { + name: 'angular', + fileNames: ['.angular-cli.json', 'angular-cli.json'], + enabledFor: [IconPack.Angular, IconPack.Ngrx], + }, + { + name: 'javascript', + fileNames: ['filename.js'], + fileExtensions: ['js'], + }, + ], + }; + + const manifest = createEmptyManifest(); + const iconDefinitions = loadFileIconDefinitions( + fileIcons, + config, + manifest + ); + + expectedManifest.iconDefinitions = { + angular: { + iconPath: './../icons/angular.svg', + }, + javascript: { + iconPath: './../icons/javascript.svg', + }, + file: { + iconPath: './../icons/file.svg', + }, + }; + expectedManifest.file = 'file'; + expectedManifest.fileExtensions = { + js: 'javascript', + }; + expectedManifest.fileNames = { + '.angular-cli.json': 'angular', + 'angular-cli.json': 'angular', + 'filename.js': 'javascript', + }; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should disable icon packs', () => { + const fileIcons: FileIcons = { + defaultIcon: { name: 'file' }, + icons: [ + { + name: 'angular', + fileNames: ['.angular-cli.json', 'angular-cli.json'], + enabledFor: [IconPack.Ngrx], + }, + { + name: 'javascript', + fileNames: ['filename.js'], + fileExtensions: ['js'], + }, + ], + }; + + const manifest = createEmptyManifest(); + config.activeIconPack = ''; + const iconDefinitions = loadFileIconDefinitions( + fileIcons, + config, + manifest + ); + + expectedManifest.iconDefinitions = { + file: { + iconPath: './../icons/file.svg', + }, + javascript: { + iconPath: './../icons/javascript.svg', + }, + }; + expectedManifest.file = 'file'; + expectedManifest.fileExtensions = { + js: 'javascript', + }; + expectedManifest.fileNames = { + 'filename.js': 'javascript', + }; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should configure custom icon associations', () => { + const fileIcons: FileIcons = { + defaultIcon: { name: 'file' }, + icons: [ + { + name: 'angular', + fileNames: ['.angular-cli.json', 'angular-cli.json'], + }, + { + name: 'javascript', + fileNames: ['filename.js'], + fileExtensions: ['js'], + }, + ], + }; + const config = getDefaultConfig(); + config.files.associations = { + '*.sample.ts': 'angular', + 'sample.js': 'javascript', + }; + const manifest = createEmptyManifest(); + const iconDefinitions = loadFileIconDefinitions( + fileIcons, + config, + manifest + ); + + expectedManifest.iconDefinitions = { + file: { + iconPath: './../icons/file.svg', + }, + javascript: { + iconPath: './../icons/javascript.svg', + }, + angular: { + iconPath: './../icons/angular.svg', + }, + }; + expectedManifest.file = 'file'; + expectedManifest.fileExtensions = { + js: 'javascript', + 'sample.ts': 'angular', + }; + expectedManifest.fileNames = { + '.angular-cli.json': 'angular', + 'angular-cli.json': 'angular', + 'sample.js': 'javascript', + 'filename.js': 'javascript', + }; + + config.files.associations = { + '*.sample.ts': 'angular', + 'sample.js': 'javascript', + }; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should configure language icons for light and high contrast', () => { + const fileIcons: FileIcons = { + defaultIcon: { name: 'file', light: true, highContrast: true }, + icons: [ + { + name: 'angular', + fileNames: ['.angular-cli.json', 'angular-cli.json'], + enabledFor: [IconPack.Angular, IconPack.Ngrx], + }, + { + name: 'javascript', + fileNames: ['filename.js'], + fileExtensions: ['js'], + light: true, + highContrast: true, + }, + ], + }; + + const manifest = createEmptyManifest(); + const iconDefinitions = loadFileIconDefinitions( + fileIcons, + config, + manifest + ); + expectedManifest.iconDefinitions = { + file: { + iconPath: './../icons/file.svg', + }, + // biome-ignore lint/style/useNamingConvention: + file_light: { + iconPath: './../icons/file_light.svg', + }, + // biome-ignore lint/style/useNamingConvention: + file_highContrast: { + iconPath: './../icons/file_highContrast.svg', + }, + javascript: { + iconPath: './../icons/javascript.svg', + }, + // biome-ignore lint/style/useNamingConvention: + javascript_light: { + iconPath: './../icons/javascript_light.svg', + }, + // biome-ignore lint/style/useNamingConvention: + javascript_highContrast: { + iconPath: './../icons/javascript_highContrast.svg', + }, + angular: { + iconPath: './../icons/angular.svg', + }, + }; + expectedManifest.file = 'file'; + expectedManifest.fileExtensions = { + js: 'javascript', + }; + expectedManifest.light = { + file: 'file_light', + fileExtensions: { + js: 'javascript_light', + }, + fileNames: { + 'filename.js': 'javascript_light', + }, + }; + expectedManifest.highContrast = { + file: 'file_highContrast', + fileExtensions: { + js: 'javascript_highContrast', + }, + fileNames: { + 'filename.js': 'javascript_highContrast', + }, + }; + expectedManifest.fileNames = { + '.angular-cli.json': 'angular', + 'angular-cli.json': 'angular', + 'filename.js': 'javascript', + }; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should generate cloned file icons config', () => { + const fileIcons: FileIcons = { + defaultIcon: { name: 'file' }, + icons: [ + { + name: 'foo', + fileNames: ['foo.bar'], + }, + { + name: 'foo-clone', + fileNames: ['bar.foo'], + fileExtensions: ['baz'], + light: true, + clone: { + base: 'foo', + color: 'green-500', + lightColor: 'green-100', + }, + }, + ], + }; + + const manifest = createEmptyManifest(); + const iconDefinitions = loadFileIconDefinitions( + fileIcons, + config, + manifest + ); + + expectedManifest.iconDefinitions = { + foo: { + iconPath: './../icons/foo.svg', + }, + 'foo-clone': { + iconPath: './../icons/foo-clone.clone.svg', + }, + 'foo-clone_light': { + iconPath: './../icons/foo-clone_light.clone.svg', + }, + file: { + iconPath: './../icons/file.svg', + }, + }; + expectedManifest.light = { + fileExtensions: { + baz: 'foo-clone_light', + }, + fileNames: { + 'bar.foo': 'foo-clone_light', + }, + }; + expectedManifest.fileNames = { + 'foo.bar': 'foo', + 'bar.foo': 'foo-clone', + }; + expectedManifest.fileExtensions = { + baz: 'foo-clone', + }; + expectedManifest.file = 'file'; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should allow interoperability between cloned and user custom associations', () => { + const fileIcons: FileIcons = { + defaultIcon: { name: 'file' }, + icons: [ + { + name: 'foo', + fileExtensions: ['foo'], + }, + { + name: 'bar', + fileExtensions: ['bar'], + clone: { + base: 'foo', + color: 'green-500', + lightColor: 'green-100', + }, + }, + ], + }; + + config.files.associations = { + '*.baz': 'bar', // assigned to the clone + }; + + const manifest = createEmptyManifest(); + const iconDefinitions = loadFileIconDefinitions( + fileIcons, + config, + manifest + ); + + expectedManifest.iconDefinitions = { + foo: { + iconPath: './../icons/foo.svg', + }, + bar: { + iconPath: './../icons/bar.clone.svg', + }, + file: { + iconPath: './../icons/file.svg', + }, + }; + expectedManifest.fileNames = {}; + expectedManifest.fileExtensions = { + foo: 'foo', + bar: 'bar', + baz: 'bar', + }; + expectedManifest.file = 'file'; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); +}); diff --git a/src/core/tests/icons/filename-pattern.test.ts b/src/core/tests/icons/filename-pattern.test.ts new file mode 100644 index 0000000000..8cc54316b2 --- /dev/null +++ b/src/core/tests/icons/filename-pattern.test.ts @@ -0,0 +1,95 @@ +import { describe, expect, it } from 'bun:test'; +import type { FileIcon } from '../../models/icons/files/fileIcon'; +import { + type FileIconWithPatterns, + FileNamePattern, +} from '../../models/icons/patterns/patterns'; +import { parseByPattern } from '../../patterns/patterns'; + +describe('File name patterns', () => { + it('should add a pattern to the file names', () => { + const fileIconsWithPatterns: FileIconWithPatterns = [ + { + name: 'file1', + fileNames: ['file1.txt'], + patterns: { + file1: FileNamePattern.Ecmascript, + }, + }, + ]; + + const expected: FileIcon[] = [ + { + name: 'file1', + fileNames: [ + 'file1.js', + 'file1.mjs', + 'file1.cjs', + 'file1.ts', + 'file1.mts', + 'file1.cts', + 'file1.txt', + ], + }, + ]; + const result = parseByPattern(fileIconsWithPatterns); + + expect(result).toStrictEqual(expected); + }); + + it('should return same file names if there is no pattern configured', () => { + const fileIconsWithPatterns: FileIconWithPatterns = [ + { + name: 'file1', + fileNames: ['file1.txt'], + }, + ]; + + const expected: FileIcon[] = [ + { + name: 'file1', + fileNames: ['file1.txt'], + }, + ]; + const result = parseByPattern(fileIconsWithPatterns); + + expect(result).toStrictEqual(expected); + }); + + it('should add multiple patterns to the file names', () => { + const fileIconsWithPatterns: FileIconWithPatterns = [ + { + name: 'file1', + fileNames: ['file1.txt'], + patterns: { + file1: FileNamePattern.Ecmascript, + file2: FileNamePattern.Configuration, + }, + }, + ]; + + const expected: FileIcon[] = [ + { + name: 'file1', + fileNames: [ + 'file1.js', + 'file1.mjs', + 'file1.cjs', + 'file1.ts', + 'file1.mts', + 'file1.cts', + 'file2.json', + 'file2.jsonc', + 'file2.json5', + 'file2.yaml', + 'file2.yml', + 'file2.toml', + 'file1.txt', + ], + }, + ]; + const result = parseByPattern(fileIconsWithPatterns); + + expect(result).toStrictEqual(expected); + }); +}); diff --git a/src/core/tests/icons/folderIcons.test.ts b/src/core/tests/icons/folderIcons.test.ts new file mode 100644 index 0000000000..200ee65c30 --- /dev/null +++ b/src/core/tests/icons/folderIcons.test.ts @@ -0,0 +1,679 @@ +import { beforeAll, beforeEach, describe, expect, it } from 'bun:test'; +import { getDefaultConfig } from '../../generator/config/defaultConfig'; +import { loadFolderIconDefinitions } from '../../generator/folderGenerator'; +import type { Config } from '../../models/icons/config'; +import type { FolderTheme } from '../../models/icons/folders/folderTheme'; +import { IconPack } from '../../models/icons/iconPack'; +import { type Manifest, createEmptyManifest } from '../../models/manifest'; + +describe('folder icons', () => { + let folderIcons: FolderTheme[]; + let expectedManifest: Manifest; + let config: Config; + + beforeAll(() => { + folderIcons = [ + { + name: 'specific', + defaultIcon: { name: 'folder' }, + rootFolder: { name: 'folder-root' }, + icons: [ + { name: 'folder-src', folderNames: ['src', 'source'] }, + { + name: 'folder-angular', + folderNames: ['angular', 'ng'], + enabledFor: [IconPack.Angular, IconPack.Ngrx], + }, + ], + }, + { name: 'classic', defaultIcon: { name: 'folder' } }, + { name: 'none', defaultIcon: { name: '' } }, + ]; + }); + + beforeEach(() => { + config = getDefaultConfig(); + expectedManifest = createEmptyManifest(); + }); + + it('should configure icon definitions', () => { + const manifest = createEmptyManifest(); + const iconDefinitions = loadFolderIconDefinitions( + folderIcons, + config, + manifest + ); + + expectedManifest.iconDefinitions = { + folder: { + iconPath: './../icons/folder.svg', + }, + 'folder-open': { + iconPath: './../icons/folder-open.svg', + }, + 'folder-root': { + iconPath: './../icons/folder-root.svg', + }, + 'folder-root-open': { + iconPath: './../icons/folder-root-open.svg', + }, + 'folder-src': { + iconPath: './../icons/folder-src.svg', + }, + 'folder-src-open': { + iconPath: './../icons/folder-src-open.svg', + }, + 'folder-angular': { + iconPath: './../icons/folder-angular.svg', + }, + 'folder-angular-open': { + iconPath: './../icons/folder-angular-open.svg', + }, + }; + expectedManifest.folder = 'folder'; + expectedManifest.folderExpanded = 'folder-open'; + expectedManifest.rootFolder = 'folder-root'; + expectedManifest.rootFolderExpanded = 'folder-root-open'; + expectedManifest.folderNames = { + src: 'folder-src', + source: 'folder-src', + angular: 'folder-angular', + ng: 'folder-angular', + _src: 'folder-src', + _source: 'folder-src', + _angular: 'folder-angular', + _ng: 'folder-angular', + __src__: 'folder-src', + __source__: 'folder-src', + __angular__: 'folder-angular', + __ng__: 'folder-angular', + '.src': 'folder-src', + '.source': 'folder-src', + '.angular': 'folder-angular', + '.ng': 'folder-angular', + }; + expectedManifest.folderNamesExpanded = { + src: 'folder-src-open', + source: 'folder-src-open', + angular: 'folder-angular-open', + ng: 'folder-angular-open', + _src: 'folder-src-open', + _source: 'folder-src-open', + _angular: 'folder-angular-open', + _ng: 'folder-angular-open', + __src__: 'folder-src-open', + __source__: 'folder-src-open', + __angular__: 'folder-angular-open', + __ng__: 'folder-angular-open', + '.src': 'folder-src-open', + '.source': 'folder-src-open', + '.angular': 'folder-angular-open', + '.ng': 'folder-angular-open', + }; + expectedManifest.hidesExplorerArrows = false; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should deactivate folder icons', () => { + config.folders.theme = 'none'; + const manifest = createEmptyManifest(); + const iconDefinitions = loadFolderIconDefinitions( + folderIcons, + config, + manifest + ); + + expectedManifest.iconDefinitions = {}; + expectedManifest.folderNames = {}; + expectedManifest.folderNamesExpanded = {}; + expectedManifest.hidesExplorerArrows = false; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should change folder theme', () => { + config.folders.theme = 'classic'; + const manifest = createEmptyManifest(); + const iconDefinitions = loadFolderIconDefinitions( + folderIcons, + config, + manifest + ); + + expectedManifest.iconDefinitions = { + folder: { + iconPath: './../icons/folder.svg', + }, + 'folder-open': { + iconPath: './../icons/folder-open.svg', + }, + }; + expectedManifest.folder = 'folder'; + expectedManifest.folderExpanded = 'folder-open'; + expectedManifest.rootFolder = 'folder'; + expectedManifest.rootFolderExpanded = 'folder-open'; + expectedManifest.folderNames = {}; + expectedManifest.folderNamesExpanded = {}; + expectedManifest.hidesExplorerArrows = false; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should configure custom icon associations', () => { + config.folders.associations = { + sample: 'src', + }; + const manifest = createEmptyManifest(); + const iconDefinitions = loadFolderIconDefinitions( + folderIcons, + config, + manifest + ); + expectedManifest.iconDefinitions = { + folder: { + iconPath: './../icons/folder.svg', + }, + 'folder-open': { + iconPath: './../icons/folder-open.svg', + }, + 'folder-root': { + iconPath: './../icons/folder-root.svg', + }, + 'folder-root-open': { + iconPath: './../icons/folder-root-open.svg', + }, + 'folder-src': { + iconPath: './../icons/folder-src.svg', + }, + 'folder-src-open': { + iconPath: './../icons/folder-src-open.svg', + }, + 'folder-angular': { + iconPath: './../icons/folder-angular.svg', + }, + 'folder-angular-open': { + iconPath: './../icons/folder-angular-open.svg', + }, + }; + expectedManifest.folder = 'folder'; + expectedManifest.folderExpanded = 'folder-open'; + expectedManifest.rootFolder = 'folder-root'; + expectedManifest.rootFolderExpanded = 'folder-root-open'; + expectedManifest.folderNames = { + src: 'folder-src', + source: 'folder-src', + angular: 'folder-angular', + ng: 'folder-angular', + sample: 'folder-src', + _src: 'folder-src', + _source: 'folder-src', + _angular: 'folder-angular', + _ng: 'folder-angular', + _sample: 'folder-src', + __src__: 'folder-src', + __source__: 'folder-src', + __angular__: 'folder-angular', + __ng__: 'folder-angular', + __sample__: 'folder-src', + '.src': 'folder-src', + '.source': 'folder-src', + '.angular': 'folder-angular', + '.ng': 'folder-angular', + '.sample': 'folder-src', + }; + expectedManifest.folderNamesExpanded = { + src: 'folder-src-open', + source: 'folder-src-open', + angular: 'folder-angular-open', + ng: 'folder-angular-open', + sample: 'folder-src-open', + _src: 'folder-src-open', + _source: 'folder-src-open', + _angular: 'folder-angular-open', + _ng: 'folder-angular-open', + _sample: 'folder-src-open', + __src__: 'folder-src-open', + __source__: 'folder-src-open', + __angular__: 'folder-angular-open', + __ng__: 'folder-angular-open', + __sample__: 'folder-src-open', + '.src': 'folder-src-open', + '.source': 'folder-src-open', + '.angular': 'folder-angular-open', + '.ng': 'folder-angular-open', + '.sample': 'folder-src-open', + }; + expectedManifest.hidesExplorerArrows = false; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should disable icon packs', () => { + const manifest = createEmptyManifest(); + config.activeIconPack = ''; + const iconDefinitions = loadFolderIconDefinitions( + folderIcons, + config, + manifest + ); + expectedManifest.iconDefinitions = { + folder: { + iconPath: './../icons/folder.svg', + }, + 'folder-open': { + iconPath: './../icons/folder-open.svg', + }, + 'folder-root': { + iconPath: './../icons/folder-root.svg', + }, + 'folder-root-open': { + iconPath: './../icons/folder-root-open.svg', + }, + 'folder-src': { + iconPath: './../icons/folder-src.svg', + }, + 'folder-src-open': { + iconPath: './../icons/folder-src-open.svg', + }, + }; + expectedManifest.folder = 'folder'; + expectedManifest.folderExpanded = 'folder-open'; + expectedManifest.rootFolder = 'folder-root'; + expectedManifest.rootFolderExpanded = 'folder-root-open'; + expectedManifest.folderNames = { + src: 'folder-src', + source: 'folder-src', + _src: 'folder-src', + _source: 'folder-src', + __src__: 'folder-src', + __source__: 'folder-src', + '.src': 'folder-src', + '.source': 'folder-src', + }; + expectedManifest.folderNamesExpanded = { + src: 'folder-src-open', + source: 'folder-src-open', + _src: 'folder-src-open', + _source: 'folder-src-open', + __src__: 'folder-src-open', + __source__: 'folder-src-open', + '.src': 'folder-src-open', + '.source': 'folder-src-open', + }; + expectedManifest.hidesExplorerArrows = false; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should configure folder icons for light and high contrast', () => { + const lightHighContrastFolderIcons: FolderTheme[] = [ + { + name: 'specific', + defaultIcon: { name: 'folder', light: true, highContrast: true }, + rootFolder: { name: 'folder-root', light: true, highContrast: true }, + icons: [ + { + name: 'folder-src', + folderNames: ['src', 'source'], + light: true, + highContrast: true, + }, + ], + }, + ]; + const manifest = createEmptyManifest(); + const iconDefinitions = loadFolderIconDefinitions( + lightHighContrastFolderIcons, + config, + manifest + ); + expectedManifest.iconDefinitions = { + folder: { + iconPath: './../icons/folder.svg', + }, + 'folder-open': { + iconPath: './../icons/folder-open.svg', + }, + // biome-ignore lint/style/useNamingConvention: + folder_light: { + iconPath: './../icons/folder_light.svg', + }, + 'folder-open_light': { + iconPath: './../icons/folder-open_light.svg', + }, + // biome-ignore lint/style/useNamingConvention: + folder_highContrast: { + iconPath: './../icons/folder_highContrast.svg', + }, + 'folder-open_highContrast': { + iconPath: './../icons/folder-open_highContrast.svg', + }, + 'folder-root': { + iconPath: './../icons/folder-root.svg', + }, + 'folder-root-open': { + iconPath: './../icons/folder-root-open.svg', + }, + 'folder-root_light': { + iconPath: './../icons/folder-root_light.svg', + }, + 'folder-root-open_light': { + iconPath: './../icons/folder-root-open_light.svg', + }, + 'folder-root_highContrast': { + iconPath: './../icons/folder-root_highContrast.svg', + }, + 'folder-root-open_highContrast': { + iconPath: './../icons/folder-root-open_highContrast.svg', + }, + 'folder-src': { + iconPath: './../icons/folder-src.svg', + }, + 'folder-src-open': { + iconPath: './../icons/folder-src-open.svg', + }, + 'folder-src_light': { + iconPath: './../icons/folder-src_light.svg', + }, + 'folder-src-open_light': { + iconPath: './../icons/folder-src-open_light.svg', + }, + 'folder-src_highContrast': { + iconPath: './../icons/folder-src_highContrast.svg', + }, + 'folder-src-open_highContrast': { + iconPath: './../icons/folder-src-open_highContrast.svg', + }, + }; + expectedManifest.folder = 'folder'; + expectedManifest.folderExpanded = 'folder-open'; + expectedManifest.rootFolder = 'folder-root'; + expectedManifest.rootFolderExpanded = 'folder-root-open'; + expectedManifest.folderNames = { + src: 'folder-src', + source: 'folder-src', + _src: 'folder-src', + _source: 'folder-src', + __src__: 'folder-src', + __source__: 'folder-src', + '.src': 'folder-src', + '.source': 'folder-src', + }; + expectedManifest.folderNamesExpanded = { + src: 'folder-src-open', + source: 'folder-src-open', + _src: 'folder-src-open', + _source: 'folder-src-open', + __src__: 'folder-src-open', + __source__: 'folder-src-open', + '.src': 'folder-src-open', + '.source': 'folder-src-open', + }; + expectedManifest.light = { + fileExtensions: {}, + fileNames: {}, + folder: 'folder_light', + folderExpanded: 'folder-open_light', + rootFolder: 'folder-root_light', + rootFolderExpanded: 'folder-root-open_light', + folderNames: { + src: 'folder-src_light', + source: 'folder-src_light', + _src: 'folder-src_light', + _source: 'folder-src_light', + __src__: 'folder-src_light', + __source__: 'folder-src_light', + '.src': 'folder-src_light', + '.source': 'folder-src_light', + }, + folderNamesExpanded: { + src: 'folder-src-open_light', + source: 'folder-src-open_light', + _src: 'folder-src-open_light', + _source: 'folder-src-open_light', + __src__: 'folder-src-open_light', + __source__: 'folder-src-open_light', + '.src': 'folder-src-open_light', + '.source': 'folder-src-open_light', + }, + }; + expectedManifest.highContrast = { + fileExtensions: {}, + fileNames: {}, + folder: 'folder_highContrast', + folderExpanded: 'folder-open_highContrast', + rootFolder: 'folder-root_highContrast', + rootFolderExpanded: 'folder-root-open_highContrast', + folderNames: { + src: 'folder-src_highContrast', + source: 'folder-src_highContrast', + _src: 'folder-src_highContrast', + _source: 'folder-src_highContrast', + __src__: 'folder-src_highContrast', + __source__: 'folder-src_highContrast', + '.src': 'folder-src_highContrast', + '.source': 'folder-src_highContrast', + }, + folderNamesExpanded: { + src: 'folder-src-open_highContrast', + source: 'folder-src-open_highContrast', + _src: 'folder-src-open_highContrast', + _source: 'folder-src-open_highContrast', + __src__: 'folder-src-open_highContrast', + __source__: 'folder-src-open_highContrast', + '.src': 'folder-src-open_highContrast', + '.source': 'folder-src-open_highContrast', + }, + }; + expectedManifest.hidesExplorerArrows = false; + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should hide explorer arrows', () => { + const manifest = createEmptyManifest(); + config.hidesExplorerArrows = true; + const iconDefinitions = loadFolderIconDefinitions( + folderIcons, + config, + manifest + ); + + expect(iconDefinitions.hidesExplorerArrows).toBe(true); + }); + + it('should generate cloned folder icons config', () => { + const folderTheme: FolderTheme[] = [ + { + name: 'specific', + defaultIcon: { name: 'folder' }, + rootFolder: { name: 'folder-root' }, + icons: [ + { name: 'foo', folderNames: ['foo', 'bar'] }, + { + name: 'foo-clone', + folderNames: ['baz', 'qux'], + light: true, + clone: { + base: 'foo', + color: 'green-500', + lightColor: 'green-100', + }, + }, + ], + }, + ]; + + const manifest = createEmptyManifest(); + const iconDefinitions = loadFolderIconDefinitions( + folderTheme, + config, + manifest + ); + + expectedManifest.iconDefinitions = { + foo: { iconPath: './../icons/foo.svg' }, + 'foo-open': { iconPath: './../icons/foo-open.svg' }, + 'foo-clone': { iconPath: './../icons/foo-clone.clone.svg' }, + 'foo-clone-open': { iconPath: './../icons/foo-clone-open.clone.svg' }, + 'foo-clone_light': { iconPath: './../icons/foo-clone_light.clone.svg' }, + 'foo-clone-open_light': { + iconPath: './../icons/foo-clone-open_light.clone.svg', + }, + 'folder-open': { iconPath: './../icons/folder-open.svg' }, + 'folder-root': { iconPath: './../icons/folder-root.svg' }, + 'folder-root-open': { iconPath: './../icons/folder-root-open.svg' }, + folder: { iconPath: './../icons/folder.svg' }, + }; + expectedManifest.folder = 'folder'; + expectedManifest.folderExpanded = 'folder-open'; + expectedManifest.rootFolder = 'folder-root'; + expectedManifest.rootFolderExpanded = 'folder-root-open'; + expectedManifest.folderNames = { + foo: 'foo', + '.foo': 'foo', + _foo: 'foo', + __foo__: 'foo', + bar: 'foo', + '.bar': 'foo', + _bar: 'foo', + __bar__: 'foo', + baz: 'foo-clone', + '.baz': 'foo-clone', + _baz: 'foo-clone', + __baz__: 'foo-clone', + qux: 'foo-clone', + '.qux': 'foo-clone', + _qux: 'foo-clone', + __qux__: 'foo-clone', + }; + expectedManifest.folderNamesExpanded = { + foo: 'foo-open', + '.foo': 'foo-open', + _foo: 'foo-open', + __foo__: 'foo-open', + bar: 'foo-open', + '.bar': 'foo-open', + _bar: 'foo-open', + __bar__: 'foo-open', + baz: 'foo-clone-open', + '.baz': 'foo-clone-open', + _baz: 'foo-clone-open', + __baz__: 'foo-clone-open', + qux: 'foo-clone-open', + '.qux': 'foo-clone-open', + _qux: 'foo-clone-open', + __qux__: 'foo-clone-open', + }; + expectedManifest.light = { + fileExtensions: {}, + fileNames: {}, + folderNames: { + baz: 'foo-clone_light', + '.baz': 'foo-clone_light', + _baz: 'foo-clone_light', + __baz__: 'foo-clone_light', + qux: 'foo-clone_light', + '.qux': 'foo-clone_light', + _qux: 'foo-clone_light', + __qux__: 'foo-clone_light', + }, + folderNamesExpanded: { + baz: 'foo-clone-open_light', + '.baz': 'foo-clone-open_light', + _baz: 'foo-clone-open_light', + __baz__: 'foo-clone-open_light', + qux: 'foo-clone-open_light', + '.qux': 'foo-clone-open_light', + _qux: 'foo-clone-open_light', + __qux__: 'foo-clone-open_light', + }, + }; + expectedManifest.hidesExplorerArrows = false; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should allow interoperability between cloned and user custom associations', () => { + const folderTheme: FolderTheme[] = [ + { + name: 'specific', + defaultIcon: { name: 'folder' }, + rootFolder: { name: 'folder-root' }, + icons: [ + { name: 'folder-foo', folderNames: ['foo'] }, + { + name: 'folder-bar', + folderNames: ['bar'], + clone: { + base: 'foo', + color: 'green-500', + }, + }, + ], + }, + ]; + + config.folders.associations = { + baz: 'bar', // assigned to the clone + }; + + const manifest = createEmptyManifest(); + const iconDefinitions = loadFolderIconDefinitions( + folderTheme, + config, + manifest + ); + + expectedManifest.iconDefinitions = { + 'folder-foo': { iconPath: './../icons/folder-foo.svg' }, + 'folder-foo-open': { iconPath: './../icons/folder-foo-open.svg' }, + 'folder-bar': { iconPath: './../icons/folder-bar.clone.svg' }, + 'folder-bar-open': { iconPath: './../icons/folder-bar-open.clone.svg' }, + folder: { iconPath: './../icons/folder.svg' }, + 'folder-open': { iconPath: './../icons/folder-open.svg' }, + 'folder-root': { iconPath: './../icons/folder-root.svg' }, + 'folder-root-open': { iconPath: './../icons/folder-root-open.svg' }, + }; + expectedManifest.folder = 'folder'; + expectedManifest.folderExpanded = 'folder-open'; + expectedManifest.rootFolder = 'folder-root'; + expectedManifest.rootFolderExpanded = 'folder-root-open'; + expectedManifest.folderNames = { + '.bar': 'folder-bar', + '.baz': 'folder-bar', + '.foo': 'folder-foo', + __bar__: 'folder-bar', + __baz__: 'folder-bar', + __foo__: 'folder-foo', + _bar: 'folder-bar', + _baz: 'folder-bar', + _foo: 'folder-foo', + bar: 'folder-bar', + baz: 'folder-bar', + foo: 'folder-foo', + }; + expectedManifest.folderNamesExpanded = { + '.bar': 'folder-bar-open', + '.baz': 'folder-bar-open', + '.foo': 'folder-foo-open', + __bar__: 'folder-bar-open', + __baz__: 'folder-bar-open', + __foo__: 'folder-foo-open', + _bar: 'folder-bar-open', + _baz: 'folder-bar-open', + _foo: 'folder-foo-open', + bar: 'folder-bar-open', + baz: 'folder-bar-open', + foo: 'folder-foo-open', + }; + + expectedManifest.light = { + fileExtensions: {}, + fileNames: {}, + }; + expectedManifest.hidesExplorerArrows = false; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); +}); diff --git a/src/test/spec/icons/languageIcons.spec.ts b/src/core/tests/icons/languageIcons.test.ts similarity index 57% rename from src/test/spec/icons/languageIcons.spec.ts rename to src/core/tests/icons/languageIcons.test.ts index 2491f1c45c..a8d415f4a9 100644 --- a/src/test/spec/icons/languageIcons.spec.ts +++ b/src/core/tests/icons/languageIcons.test.ts @@ -1,22 +1,18 @@ -import { deepStrictEqual } from 'assert'; -import merge from 'lodash.merge'; -import { - getDefaultIconOptions, - loadLanguageIconDefinitions, -} from '../../../icons/index'; -import { - IconConfiguration, - IconPack, - LanguageIcon, -} from '../../../models/index'; +import { beforeEach, describe, expect, it } from 'bun:test'; +import { getDefaultConfig } from '../../generator/config/defaultConfig'; +import { loadLanguageIconDefinitions } from '../../generator/languageGenerator'; +import type { Config } from '../../models/icons/config'; +import { IconPack } from '../../models/icons/iconPack'; +import type { LanguageIcon } from '../../models/icons/languages/languageIdentifier'; +import { type Manifest, createEmptyManifest } from '../../models/manifest'; describe('language icons', () => { - let expectedConfig: IconConfiguration; + let expectedManifest: Manifest; + let config: Config; beforeEach(() => { - expectedConfig = merge({}, new IconConfiguration(), { - options: getDefaultIconOptions(), - }); + expectedManifest = createEmptyManifest(); + config = getDefaultConfig(); }); it('should configure icon definitions', () => { @@ -25,15 +21,14 @@ describe('language icons', () => { { icon: { name: 'b' }, ids: ['b'] }, { icon: { name: 'c' }, ids: ['c', 'd'] }, ]; - const options = getDefaultIconOptions(); - const iconConfig = merge({}, new IconConfiguration(), { options }); + const manifest = createEmptyManifest(); const iconDefinitions = loadLanguageIconDefinitions( languageIcons, - iconConfig, - options + config, + manifest ); - expectedConfig.iconDefinitions = { + expectedManifest.iconDefinitions = { a: { iconPath: './../icons/a.svg', }, @@ -44,13 +39,13 @@ describe('language icons', () => { iconPath: './../icons/c.svg', }, }; - expectedConfig.languageIds = { + expectedManifest.languageIds = { a: 'a', b: 'b', c: 'c', d: 'c', }; - deepStrictEqual(iconDefinitions, expectedConfig); + expect(iconDefinitions).toStrictEqual(expectedManifest); }); it('should disable icon definitions', () => { @@ -58,23 +53,22 @@ describe('language icons', () => { { icon: { name: 'a' }, ids: ['a'] }, { icon: { name: 'c' }, ids: ['c', 'd'], disabled: true }, ]; - const options = getDefaultIconOptions(); - const iconConfig = merge({}, new IconConfiguration(), { options }); + const manifest = createEmptyManifest(); const iconDefinitions = loadLanguageIconDefinitions( languageIcons, - iconConfig, - options + config, + manifest ); - expectedConfig.iconDefinitions = { + expectedManifest.iconDefinitions = { a: { iconPath: './../icons/a.svg', }, }; - expectedConfig.languageIds = { + expectedManifest.languageIds = { a: 'a', }; - deepStrictEqual(iconDefinitions, expectedConfig); + expect(iconDefinitions).toStrictEqual(expectedManifest); }); it('should disable icon packs', () => { @@ -82,17 +76,18 @@ describe('language icons', () => { { icon: { name: 'a' }, ids: ['a'], enabledFor: [IconPack.Angular] }, { icon: { name: 'c' }, ids: ['c', 'd'], disabled: true }, ]; - const options = getDefaultIconOptions(); - const iconConfig = merge({}, new IconConfiguration(), { options }); + + config.activeIconPack = ''; + const manifest = createEmptyManifest(); const iconDefinitions = loadLanguageIconDefinitions( languageIcons, - iconConfig, - { ...options, activeIconPack: '' } + config, + manifest ); - expectedConfig.iconDefinitions = {}; - expectedConfig.languageIds = {}; - deepStrictEqual(iconDefinitions, expectedConfig); + expectedManifest.iconDefinitions = {}; + expectedManifest.languageIds = {}; + expect(iconDefinitions).toStrictEqual(expectedManifest); }); it('should configure language icons for light and high contrast', () => { @@ -100,39 +95,42 @@ describe('language icons', () => { { icon: { name: 'a', light: true, highContrast: true }, ids: ['a'] }, { icon: { name: 'b', light: true, highContrast: true }, ids: ['b'] }, ]; - const options = getDefaultIconOptions(); - const iconConfig = merge({}, new IconConfiguration(), { options }); + + const manifest = createEmptyManifest(); const iconDefinitions = loadLanguageIconDefinitions( languageIcons, - iconConfig, - options + config, + manifest ); - /* eslint-disable camelcase */ - expectedConfig.iconDefinitions = { + expectedManifest.iconDefinitions = { a: { iconPath: './../icons/a.svg', }, + // biome-ignore lint/style/useNamingConvention: a_light: { iconPath: './../icons/a_light.svg', }, + // biome-ignore lint/style/useNamingConvention: a_highContrast: { iconPath: './../icons/a_highContrast.svg', }, b: { iconPath: './../icons/b.svg', }, + // biome-ignore lint/style/useNamingConvention: b_light: { iconPath: './../icons/b_light.svg', }, + // biome-ignore lint/style/useNamingConvention: b_highContrast: { iconPath: './../icons/b_highContrast.svg', }, }; - expectedConfig.languageIds = { + expectedManifest.languageIds = { a: 'a', b: 'b', }; - expectedConfig.light = { + expectedManifest.light = { fileExtensions: {}, fileNames: {}, languageIds: { @@ -140,7 +138,7 @@ describe('language icons', () => { b: 'b_light', }, }; - expectedConfig.highContrast = { + expectedManifest.highContrast = { fileExtensions: {}, fileNames: {}, languageIds: { @@ -148,37 +146,36 @@ describe('language icons', () => { b: 'b_highContrast', }, }; - /* eslint-enable camelcase */ - deepStrictEqual(iconDefinitions, expectedConfig); + expect(iconDefinitions).toStrictEqual(expectedManifest); }); it('should configure custom icon associations', () => { const languageIcons: LanguageIcon[] = [ { icon: { name: 'json' }, ids: ['a'] }, ]; - const options = getDefaultIconOptions(); - options.languages.associations = { - xml: 'json', + + const manifest = createEmptyManifest(); + config.languages = { + associations: { + xml: 'json', + }, }; - const iconConfig = merge({}, new IconConfiguration(), { options }); const iconDefinitions = loadLanguageIconDefinitions( languageIcons, - iconConfig, - options + config, + manifest ); - expectedConfig.iconDefinitions = { + expectedManifest.iconDefinitions = { json: { iconPath: './../icons/json.svg', }, }; - expectedConfig.languageIds = { + expectedManifest.languageIds = { a: 'json', xml: 'json', }; - expectedConfig.options!.languages!.associations = { - xml: 'json', - }; - deepStrictEqual(iconDefinitions, expectedConfig); + + expect(iconDefinitions).toStrictEqual(expectedManifest); }); }); diff --git a/src/core/tests/mocks/index.ts b/src/core/tests/mocks/index.ts new file mode 100644 index 0000000000..0dd9fd465b --- /dev/null +++ b/src/core/tests/mocks/index.ts @@ -0,0 +1,6 @@ +import { mock } from 'bun:test'; +import { vscodeApiMock } from './vscode'; + +mock.module('vscode', () => { + return vscodeApiMock; +}); diff --git a/src/core/tests/mocks/vscode.ts b/src/core/tests/mocks/vscode.ts new file mode 100644 index 0000000000..4e7d1baec6 --- /dev/null +++ b/src/core/tests/mocks/vscode.ts @@ -0,0 +1,13 @@ +export const vscodeApiMock = { + commands: { + registerCommand: () => {}, + }, + + window: { + showInformationMessage: () => {}, + }, + + env: { + language: 'en', + }, +}; diff --git a/src/core/types/recursivePartial.ts b/src/core/types/recursivePartial.ts new file mode 100644 index 0000000000..2c0042c2e4 --- /dev/null +++ b/src/core/types/recursivePartial.ts @@ -0,0 +1,3 @@ +export type RecursivePartial = { + [P in keyof T]?: RecursivePartial; +}; diff --git a/src/helpers/types.ts b/src/core/types/requiredAtLeastOne.ts similarity index 100% rename from src/helpers/types.ts rename to src/core/types/requiredAtLeastOne.ts diff --git a/src/extension.ts b/src/extension.ts deleted file mode 100644 index d4c68cde2e..0000000000 --- a/src/extension.ts +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; - -import { ExtensionContext, window as codeWindow, workspace } from 'vscode'; -import { registered } from './commands'; -import { detectConfigChanges } from './helpers/changeDetection'; -import { initTranslations } from './i18n'; - -/** - * This method is called when the extension is activated. - * It initializes the core functionality of the extension. - */ -export const activate = async (context: ExtensionContext) => { - try { - await initTranslations(); - - // Subscribe to the extension commands - context.subscriptions.push(...registered); - - // Initially trigger the config change detection - detectConfigChanges(); - - // Observe changes in the config - workspace.onDidChangeConfiguration(detectConfigChanges); - - // Observe if the window got focused to trigger config changes - codeWindow.onDidChangeWindowState((state) => { - if (state.focused) { - detectConfigChanges(); - } - }); - } catch (error) { - console.error(error); - } -}; - -/** This method is called when the extension is deactivated */ -export const deactivate = () => {}; diff --git a/src/commands/activate.ts b/src/extension/commands/activate.ts similarity index 54% rename from src/commands/activate.ts rename to src/extension/commands/activate.ts index 0b60bb5289..e5c625da50 100644 --- a/src/commands/activate.ts +++ b/src/extension/commands/activate.ts @@ -1,6 +1,6 @@ import { window as codeWindow } from 'vscode'; -import { getConfig } from '../helpers'; -import { translate } from '../i18n'; +import { extensionName, logger, translate } from '../../core'; +import { getConfig } from '../shared/config'; /** Activate the icon theme by changing the settings for the iconTheme. */ export const activateIcons = () => { @@ -11,18 +11,15 @@ export const activateIcons = () => { const setIconTheme = async () => { // global user config try { - await getConfig().update( - 'workbench.iconTheme', - 'material-icon-theme', - true - ); + const section = 'workbench.iconTheme'; + await getConfig().update(section, extensionName, true); // local workspace config - if (getConfig().inspect('workbench.iconTheme')?.workspaceValue) { - getConfig().update('workbench.iconTheme', 'material-icon-theme'); + if (getConfig().inspect(section)?.workspaceValue) { + getConfig().update(section, extensionName); } codeWindow.showInformationMessage(translate('activated')); } catch (error) { - console.error(error); + logger.error(error); } }; diff --git a/src/commands/explorerArrows.ts b/src/extension/commands/explorerArrows.ts similarity index 78% rename from src/commands/explorerArrows.ts rename to src/extension/commands/explorerArrows.ts index 90f8fff96f..99ea78dc3f 100644 --- a/src/commands/explorerArrows.ts +++ b/src/extension/commands/explorerArrows.ts @@ -1,15 +1,15 @@ -import { QuickPickItem, window as codeWindow } from 'vscode'; -import { getMaterialIconsJSON, setThemeConfig } from '../helpers'; -import { translate } from '../i18n'; +import { type QuickPickItem, window as codeWindow } from 'vscode'; +import { logger, translate } from '../../core'; +import { getThemeConfig, setThemeConfig } from '../shared/config'; /** Command to toggle the explorer arrows. */ export const toggleExplorerArrows = async () => { try { - const status = checkArrowStatus(); + const status = areExplorerArrowsHidden(); const response = await showQuickPickItems(status); return handleQuickPickActions(response); } catch (error) { - console.error(error); + logger.error(error); } }; @@ -49,7 +49,6 @@ const handleQuickPickActions = (value: QuickPickItem | undefined) => { } }; -/** Check if arrows are enabled. */ -export const checkArrowStatus = (): boolean => { - return !!getMaterialIconsJSON()?.hidesExplorerArrows; +export const areExplorerArrowsHidden = (): boolean => { + return getThemeConfig('hidesExplorerArrows') === true; }; diff --git a/src/commands/fileColor.ts b/src/extension/commands/fileColor.ts similarity index 84% rename from src/commands/fileColor.ts rename to src/extension/commands/fileColor.ts index 71d466a46a..bd1fb3d6c9 100644 --- a/src/commands/fileColor.ts +++ b/src/extension/commands/fileColor.ts @@ -1,12 +1,16 @@ -import { QuickPickItem, window as codeWindow } from 'vscode'; -import { getMaterialIconsJSON, setThemeConfig } from '../helpers'; -import { translate } from '../i18n'; -import { getDefaultIconOptions, validateHEXColorCode } from '../icons'; +import { type QuickPickItem, window as codeWindow } from 'vscode'; +import { + getDefaultConfig, + logger, + translate, + validateHEXColorCode, +} from '../../core'; +import { getThemeConfig, setThemeConfig } from '../shared/config'; -interface FileColor { +type FileColor = { label: string; hex: string; -} +}; const iconPalette: FileColor[] = [ { label: 'Grey (Default)', hex: '#90a4ae' }, @@ -28,7 +32,7 @@ export const changeFileColor = async () => { handleQuickPickActions(response); } } catch (error) { - console.error(error); + logger.error(error); } }; @@ -77,9 +81,8 @@ const validateColorInput = (colorInput: string) => { /** Check status of the file color */ export const checkFileColorStatus = (): string => { - const defaultOptions = getDefaultIconOptions(); - const config = getMaterialIconsJSON(); - return config?.options?.files?.color ?? defaultOptions.files.color!; + const defaultConfig = getDefaultConfig(); + return getThemeConfig('files.color') ?? defaultConfig.files.color; }; const setColorConfig = (value: string) => { diff --git a/src/commands/folderColor.ts b/src/extension/commands/folderColor.ts similarity index 84% rename from src/commands/folderColor.ts rename to src/extension/commands/folderColor.ts index b3bbc0ba12..78046490a9 100644 --- a/src/commands/folderColor.ts +++ b/src/extension/commands/folderColor.ts @@ -1,12 +1,16 @@ -import { QuickPickItem, window as codeWindow } from 'vscode'; -import { getMaterialIconsJSON, setThemeConfig } from '../helpers'; -import { translate } from '../i18n'; -import { getDefaultIconOptions, validateHEXColorCode } from '../icons'; +import { type QuickPickItem, window as codeWindow } from 'vscode'; +import { + getDefaultConfig, + logger, + translate, + validateHEXColorCode, +} from '../../core'; +import { getThemeConfig, setThemeConfig } from '../shared/config'; -interface FolderColor { +type FolderColor = { label: string; hex: string; -} +}; const iconPalette: FolderColor[] = [ { label: 'Grey (Default)', hex: '#90a4ae' }, @@ -28,7 +32,7 @@ export const changeFolderColor = async () => { handleQuickPickActions(response); } } catch (error) { - console.error(error); + logger.error(error); } }; @@ -77,9 +81,9 @@ const validateColorInput = (colorInput: string) => { /** Check status of the folder color */ export const checkFolderColorStatus = (): string => { - const defaultOptions = getDefaultIconOptions(); - const config = getMaterialIconsJSON(); - return config?.options?.folders?.color ?? defaultOptions.folders.color!; + const defaultConfig = getDefaultConfig(); + const folderColorConfig = getThemeConfig('folders.color'); + return folderColorConfig ?? defaultConfig.folders.color!; }; const setColorConfig = (value: string) => { diff --git a/src/commands/folders.ts b/src/extension/commands/folders.ts similarity index 75% rename from src/commands/folders.ts rename to src/extension/commands/folders.ts index 458538b9c8..24406aba74 100644 --- a/src/commands/folders.ts +++ b/src/extension/commands/folders.ts @@ -1,11 +1,12 @@ -import { QuickPickItem, window as codeWindow } from 'vscode'; +import { type QuickPickItem, window as codeWindow } from 'vscode'; import { + type FolderThemeName, capitalizeFirstLetter, - getMaterialIconsJSON, - setThemeConfig, -} from '../helpers'; -import { translate } from '../i18n'; -import { folderIcons } from '../icons'; + folderIcons, + logger, + translate, +} from '../../core'; +import { getThemeConfig, setThemeConfig } from '../shared/config'; /** Command to toggle the folder icons. */ export const changeFolderTheme = async () => { @@ -16,12 +17,12 @@ export const changeFolderTheme = async () => { handleQuickPickActions(response); } } catch (error) { - console.error(error); + logger.error(error); } }; /** Show QuickPick items to select preferred configuration for the folder icons. */ -const showQuickPickItems = (activeTheme: string) => { +const showQuickPickItems = (activeTheme: FolderThemeName) => { const options = folderIcons.map( (theme): QuickPickItem => ({ description: capitalizeFirstLetter(theme.name), @@ -50,6 +51,6 @@ const handleQuickPickActions = (value: QuickPickItem) => { }; /** Get the current folder theme. */ -export const getFolderIconTheme = (): string => { - return getMaterialIconsJSON()?.options?.folders?.theme ?? ''; +export const getFolderIconTheme = () => { + return getThemeConfig('folders.theme') ?? 'none'; }; diff --git a/src/commands/grayscale.ts b/src/extension/commands/grayscale.ts similarity index 84% rename from src/commands/grayscale.ts rename to src/extension/commands/grayscale.ts index 00c8588aa2..70f7bcc430 100644 --- a/src/commands/grayscale.ts +++ b/src/extension/commands/grayscale.ts @@ -1,6 +1,6 @@ -import { QuickPickItem, window as codeWindow } from 'vscode'; -import { getMaterialIconsJSON, setThemeConfig } from '../helpers'; -import { translate } from '../i18n'; +import { type QuickPickItem, window as codeWindow } from 'vscode'; +import { logger, translate } from '../../core'; +import { getThemeConfig, setThemeConfig } from '../shared/config'; /** Command to toggle grayscale. */ export const toggleGrayscale = async () => { @@ -11,7 +11,7 @@ export const toggleGrayscale = async () => { handleQuickPickActions(response); } } catch (error) { - console.error(error); + logger.error(error); } }; @@ -51,5 +51,5 @@ const handleQuickPickActions = (value: QuickPickItem) => { /** Is grayscale icons enabled? */ export const checkGrayscaleStatus = (): boolean => { - return getMaterialIconsJSON()?.options?.saturation === 0; + return getThemeConfig('saturation') === 0; }; diff --git a/src/commands/iconPacks.ts b/src/extension/commands/iconPacks.ts similarity index 69% rename from src/commands/iconPacks.ts rename to src/extension/commands/iconPacks.ts index 63f7156b3a..2524bde521 100644 --- a/src/commands/iconPacks.ts +++ b/src/extension/commands/iconPacks.ts @@ -1,7 +1,8 @@ -import { QuickPickItem, window as codeWindow } from 'vscode'; -import { getMaterialIconsJSON, setThemeConfig, toTitleCase } from '../helpers'; -import { translate } from '../i18n'; -import { IconPack } from '../models'; +import { type QuickPickItem, window as codeWindow } from 'vscode'; +import { logger, toTitleCase, translate } from '../../core'; +import { availableIconPacks } from '../../core/helpers/iconPacks'; +import type { IconPackValue } from '../../core/models/icons/iconPack'; +import { getThemeConfig, setThemeConfig } from '../shared/config'; /** Command to toggle the icons packs */ export const toggleIconPacks = async () => { @@ -12,13 +13,16 @@ export const toggleIconPacks = async () => { handleQuickPickActions(response); } } catch (error) { - console.error(error); + logger.error(error); } }; /** Show QuickPick items to select preferred configuration for the icon packs. */ -const showQuickPickItems = (activePack: string) => { - const packs = [...getAllIconPacks().sort(), 'none']; +const showQuickPickItems = (activePack: IconPackValue) => { + const packs = [...availableIconPacks.sort(), 'none'] as ( + | IconPackValue + | 'none' + )[]; const options = packs.map((pack): QuickPickItem => { const packLabel = toTitleCase(pack.replace('_', ' + ')); const active = isPackActive(activePack, pack); @@ -45,18 +49,15 @@ const showQuickPickItems = (activePack: string) => { /** Handle the actions from the QuickPick. */ const handleQuickPickActions = (value: QuickPickItem) => { if (!value || !value.description) return; - const decision = value.description.replace(' + ', '_').toLowerCase(); + const decision = value.description.replace(' + ', '_').toLowerCase() as + | IconPackValue + | 'none'; setThemeConfig('activeIconPack', decision === 'none' ? '' : decision, true); }; -const getActiveIconPack = (): string => { - return getMaterialIconsJSON()?.options?.activeIconPack ?? ''; -}; - -/** Get all packs that can be used in this icon theme. */ -export const getAllIconPacks = (): string[] => { - return Object.values(IconPack).map((p) => p.toLowerCase()); +const getActiveIconPack = () => { + return getThemeConfig('activeIconPack') ?? ''; }; const isPackActive = (activePack: string, pack: string) => { diff --git a/src/commands/opacity.ts b/src/extension/commands/opacity.ts similarity index 75% rename from src/commands/opacity.ts rename to src/extension/commands/opacity.ts index 7d8f80d589..3776c7a126 100644 --- a/src/commands/opacity.ts +++ b/src/extension/commands/opacity.ts @@ -1,7 +1,11 @@ import { window as codeWindow } from 'vscode'; -import { getMaterialIconsJSON, setThemeConfig } from '../helpers'; -import { translate } from '../i18n'; -import { getDefaultIconOptions, validateOpacityValue } from '../icons'; +import { + getDefaultConfig, + logger, + translate, + validateOpacityValue, +} from '../../core'; +import { getThemeConfig, setThemeConfig } from '../shared/config'; /** Command to toggle the folder icons. */ export const changeOpacity = async () => { @@ -12,7 +16,7 @@ export const changeOpacity = async () => { await setOpacityConfig(+response); } } catch (error) { - console.error(error); + logger.error(error); } }; @@ -36,9 +40,8 @@ const validateOpacityInput = (opacityInput: string) => { /** Get the current value of the opacity of the icons. */ export const getCurrentOpacityValue = (): number => { - const defaultOptions = getDefaultIconOptions(); - const config = getMaterialIconsJSON(); - return config?.options?.opacity ?? defaultOptions.opacity; + const defaultConfig = getDefaultConfig(); + return getThemeConfig('opacity') ?? defaultConfig.opacity; }; const setOpacityConfig = (opacity: number) => { diff --git a/src/extension/commands/restoreConfig.ts b/src/extension/commands/restoreConfig.ts new file mode 100644 index 0000000000..388c1b7ec8 --- /dev/null +++ b/src/extension/commands/restoreConfig.ts @@ -0,0 +1,11 @@ +import { getConfigProperties, setConfig } from '../shared/config'; + +/** Restore all configurations to default. */ +export const restoreDefaultConfig = async () => { + const configProperties = Object.keys(getConfigProperties()); + await Promise.all( + configProperties.map((configProperty) => + setConfig(configProperty, undefined, true) + ) + ); +}; diff --git a/src/commands/saturation.ts b/src/extension/commands/saturation.ts similarity index 76% rename from src/commands/saturation.ts rename to src/extension/commands/saturation.ts index a639109944..d19f18129d 100644 --- a/src/commands/saturation.ts +++ b/src/extension/commands/saturation.ts @@ -1,7 +1,11 @@ import { window as codeWindow } from 'vscode'; -import { getMaterialIconsJSON, setThemeConfig } from '../helpers'; -import { translate } from '../i18n'; -import { getDefaultIconOptions, validateSaturationValue } from '../icons'; +import { + getDefaultConfig, + logger, + translate, + validateSaturationValue, +} from '../../core'; +import { getThemeConfig, setThemeConfig } from '../shared/config'; /** Command to toggle the folder icons. */ export const changeSaturation = async () => { @@ -12,7 +16,7 @@ export const changeSaturation = async () => { await setSaturationConfig(+response); } } catch (error) { - console.error(error); + logger.error(error); } }; @@ -36,9 +40,8 @@ const validateSaturationInput = (saturationInput: string) => { /** Get the current value of the saturation of the icons. */ export const getCurrentSaturationValue = (): number => { - const defaultOptions = getDefaultIconOptions(); - const config = getMaterialIconsJSON(); - return config?.options?.saturation ?? defaultOptions.saturation; + const defaultConfig = getDefaultConfig(); + return getThemeConfig('saturation') ?? defaultConfig.saturation; }; const setSaturationConfig = (saturation: number) => { diff --git a/src/extension/desktop/extension.ts b/src/extension/desktop/extension.ts new file mode 100644 index 0000000000..0341500c20 --- /dev/null +++ b/src/extension/desktop/extension.ts @@ -0,0 +1,41 @@ +'use strict'; + +import { type ExtensionContext, env, workspace } from 'vscode'; +import { initTranslations, logger } from '../../core'; +import { disableLogObserver, observeLogs } from '../logging/logger'; +import { detectConfigChanges } from '../tools/changeDetection'; +import { registered } from '../tools/registered'; + +/** + * This method is called when the extension is activated. + * It initializes the core functionality of the extension. + */ +export const activate = async (context: ExtensionContext) => { + try { + observeLogs(); + + await initTranslations(env.language); + + // Subscribe to the extension commands + context.subscriptions.push(...registered); + + // Initially trigger the config change detection + await detectConfigChanges(undefined, context); + + // Observe changes in the config + context.subscriptions.push( + workspace.onDidChangeConfiguration( + async (event) => await detectConfigChanges(event, context) + ) + ); + + logger.info('Extension activated!'); + } catch (error) { + logger.error(error); + } +}; + +/** This method is called when the extension is deactivated */ +export const deactivate = () => { + disableLogObserver(); +}; diff --git a/src/extension/logging/logger.ts b/src/extension/logging/logger.ts new file mode 100644 index 0000000000..41a058cf97 --- /dev/null +++ b/src/extension/logging/logger.ts @@ -0,0 +1,42 @@ +import { EventEmitter } from 'node:events'; +import { type OutputChannel, window } from 'vscode'; +import { + type LogLevel, + createLoggingObserver, + extensionName, + toTitleCase, +} from '../../core'; +import { getThemeConfig } from '../shared/config'; + +let eventEmitter: EventEmitter | undefined; + +/** + * Observe log events and write them to the output channel. + */ +export const observeLogs = () => { + const logLevel = getThemeConfig('logLevel') ?? 'info'; + const isLoggingEnabled = getThemeConfig('enableLogging') ?? false; + + let outputChannel: OutputChannel | undefined; + + if (isLoggingEnabled) { + // Create the output channel only if logging is enabled + outputChannel = window.createOutputChannel( + toTitleCase(extensionName.replaceAll('-', ' ')) + ); + } + + eventEmitter = createLoggingObserver(logLevel, (event) => { + if (outputChannel) { + outputChannel.appendLine(event.message); + } else { + console.log(event.message); + } + }); +}; + +export const disableLogObserver = () => { + if (eventEmitter) { + eventEmitter.removeAllListeners(); + } +}; diff --git a/src/extension/shared/config.ts b/src/extension/shared/config.ts new file mode 100644 index 0000000000..d73f2360b4 --- /dev/null +++ b/src/extension/shared/config.ts @@ -0,0 +1,114 @@ +import { extensions, workspace } from 'vscode'; +import { type Config, extensionName, extensionPublisher } from '../../core'; +import { merge, set } from '../../core/helpers/object'; + +/** Get configuration of vs code. */ +export const getConfig = (section?: string) => { + return workspace.getConfiguration(section); +}; + +/** Get list of configuration entries of package.json */ +export const getConfigProperties = (): { [config: string]: unknown } => { + return extensions.getExtension(`${extensionPublisher}.${extensionName}`) + ?.packageJSON?.contributes?.configuration?.properties; +}; + +/** Get list of all configration properties */ +export const configPropertyNames = Object.keys(getConfigProperties()); + +/** Update configuration of vs code. */ +export const setConfig = (section: string, value: unknown, global = false) => { + return getConfig().update(section, value, global); +}; + +/** Get current configuration of the theme from the vscode config */ +export const getThemeConfig = (section: string): T | undefined => { + const themeConfig = getConfig(extensionName).inspect(section); + return getConfigValue(themeConfig); +}; + +/** Set the config of the theme. */ +export const setThemeConfig = ( + section: string, + value: unknown, + global = false +) => { + return getConfig(extensionName).update(section, value, global); +}; + +/** + * Checks if the theme is the active icon theme + * @param{boolean} global false by default + */ +export const isThemeActivated = (global = false): boolean => { + return global + ? getConfig().inspect('workbench.iconTheme')?.globalValue === extensionName + : getConfig().inspect('workbench.iconTheme')?.workspaceValue === + extensionName; +}; + +/** Checks if the theme is not the active icon theme */ +export const isThemeNotVisible = (): boolean => { + const config = getConfig().inspect('workbench.iconTheme'); + return ( + (!isThemeActivated(true) && !config?.workspaceValue) || // no workspace and not global + (!isThemeActivated() && !!config?.workspaceValue) + ); +}; + +/** + * Returns the value of a specific configuration by checking the workspace and the user configuration and fallback to the default value. + * + * @param themeConfig Theme configuration + * @returns Actual theme configuration value + */ +const getConfigValue = ( + themeConfig: Partial< + | { + globalValue: T; + workspaceValue: T; + defaultValue: T; + } + | undefined + > +) => { + let configValue: T | undefined; + if (themeConfig === undefined) { + return undefined; + } + if ( + typeof themeConfig.workspaceValue === 'object' && + themeConfig.workspaceValue && + themeConfig.globalValue + ) { + configValue = merge(themeConfig.workspaceValue, themeConfig.globalValue); + } else { + configValue = + themeConfig.workspaceValue ?? + themeConfig.globalValue ?? + themeConfig.defaultValue; + } + return configValue; +}; + +/** + * Get the current configuration of the theme. + * + * @returns Current configuration + */ +export const getCurrentConfig = (): Config => { + const updatedConfig = configPropertyNames.reduce>( + (acc, configNameWithExtensionId) => { + const configName = configNameWithExtensionId.replace( + `${extensionName}.`, + '' + ); + const configValue = getThemeConfig(configName) ?? null; + set(acc, configName, configValue); + return acc; + }, + {} + ); + + return updatedConfig as Config; +}; diff --git a/src/extension/tools/changeDetection.ts b/src/extension/tools/changeDetection.ts new file mode 100644 index 0000000000..4fcd3bf383 --- /dev/null +++ b/src/extension/tools/changeDetection.ts @@ -0,0 +1,83 @@ +import { join } from 'node:path'; +import deepEqual from 'fast-deep-equal'; +import type { ConfigurationChangeEvent, ExtensionContext } from 'vscode'; +import { + type Config, + applyConfigToIcons, + clearCloneFolder, + customClonesIcons, + extensionName, + generateManifest, + hasCustomClones, + logger, + manifestName, + merge, + padWithDefaultConfig, + renameIconFiles, + resolvePath, + writeToFile, +} from '../../core'; +import { getCurrentConfig } from '../shared/config'; + +/** Compare the workspace and the user configurations with the current setup of the icons. */ +export const detectConfigChanges = async ( + event: ConfigurationChangeEvent | undefined, + context: ExtensionContext +) => { + // if the changed config is not related to the extension + if (event?.affectsConfiguration(extensionName) === false) return; + + const oldConfig = getConfigFromStorage(context); + const config = getCurrentConfig(); + + // if the configuration has not changed + if (deepEqual(config, oldConfig)) return; + + await applyConfigToIcons(config, oldConfig); + + logger.info('Configuration changes detected and applied!'); + + await renameIconFiles(config); + const manifest = generateManifest(config); + + // clear the clone folder + await clearCloneFolder(hasCustomClones(config)); + + const manifestWithClones = merge( + manifest, + await customClonesIcons(manifest, config) + ); + + const iconJsonPath = join(resolvePath(manifestName)); + await writeToFile( + iconJsonPath, + JSON.stringify(manifestWithClones, undefined, 2), + 'utf-8' + ); + + logger.info('Updated the manifest file.'); + + logger.debug( + 'Applied configuration: ' + JSON.stringify(config, undefined, 2) + ); + + syncConfigWithStorage(config, context); +}; + +const syncConfigWithStorage = (config: Config, context: ExtensionContext) => { + context.globalState.update('config', { + version: context.extension.packageJSON.version, + config, + }); +}; + +const getConfigFromStorage = (context: ExtensionContext): Config => { + const config = context.globalState.get<{ version: string; config: Config }>( + 'config' + ); + if (context.extension.packageJSON.version === config?.version) { + return padWithDefaultConfig(config?.config); + } else { + return padWithDefaultConfig(); + } +}; diff --git a/src/extension/tools/registered.ts b/src/extension/tools/registered.ts new file mode 100644 index 0000000000..d97ff59be1 --- /dev/null +++ b/src/extension/tools/registered.ts @@ -0,0 +1,33 @@ +import { commands } from 'vscode'; +import { extensionName } from '../../core'; +import { activateIcons } from '../commands/activate'; +import { toggleExplorerArrows } from '../commands/explorerArrows'; +import { changeFileColor } from '../commands/fileColor'; +import { changeFolderColor } from '../commands/folderColor'; +import { changeFolderTheme } from '../commands/folders'; +import { toggleGrayscale } from '../commands/grayscale'; +import { toggleIconPacks } from '../commands/iconPacks'; +import { changeOpacity } from '../commands/opacity'; +import { restoreDefaultConfig } from '../commands/restoreConfig'; +import { changeSaturation } from '../commands/saturation'; + +const extensionCommands: { [commmand: string]: () => Promise } = { + activateIcons, + toggleIconPacks, + changeFolderTheme, + changeFolderColor, + changeFileColor, + restoreDefaultConfig, + toggleExplorerArrows, + changeOpacity, + toggleGrayscale, + changeSaturation, +}; + +export const registered = Object.keys(extensionCommands).map((commandName) => { + const callCommand = () => extensionCommands[commandName](); + return commands.registerCommand( + `${extensionName}.${commandName}`, + callCommand + ); +}); diff --git a/src/web/extension.ts b/src/extension/web/extension.ts similarity index 100% rename from src/web/extension.ts rename to src/extension/web/extension.ts diff --git a/src/helpers/changeDetection.ts b/src/helpers/changeDetection.ts deleted file mode 100644 index 0362f7064c..0000000000 --- a/src/helpers/changeDetection.ts +++ /dev/null @@ -1,109 +0,0 @@ -import merge from 'lodash.merge'; -import { getConfigProperties, getMaterialIconsJSON, getThemeConfig } from '.'; -import { createIconFile } from '../icons/index'; -import { IconJsonOptions } from '../models'; -import { getObjectPropertyValue, setObjectPropertyValue } from './objects'; - -/** Compare the workspace and the user configurations with the current setup of the icons. */ -export const detectConfigChanges = () => { - const changes = compareConfigs(); - - // if there's nothing to update - if (Object.keys(changes.updatedConfigs).length === 0) return; - - try { - // update icon json file with new options - createIconFile(changes.updatedConfigs, changes.updatedJSONConfig); - } catch (error) { - console.error(error); - } -}; - -/** - * Compares a specific configuration in the settings with a current configuration state. - * The current configuration state is read from the icons json file. - * @returns List of configurations that needs to be updated. - */ -const compareConfigs = (): { - updatedConfigs: IconJsonOptions; - updatedJSONConfig: IconJsonOptions; -} => { - const configPropertyNames = Object.keys(getConfigProperties()) - .map((c) => c.split('.').slice(1).join('.')) - // remove configurable notification messages - .filter((c) => !/show(Welcome|Update|Reload)Message/g.test(c)); - - const json = getMaterialIconsJSON(); - return configPropertyNames.reduce( - (result, configName) => { - try { - const themeConfig = getThemeConfig(configName) ?? { - globalValue: '', - workspaceValue: '', - defaultValue: '', - }; - - const configValue = getConfigValue( - themeConfig as { - globalValue: unknown; - workspaceValue: unknown; - defaultValue: unknown; - } - ); - - const currentState = getObjectPropertyValue( - json.options ?? {}, - configName - ); - - if (JSON.stringify(configValue) !== JSON.stringify(currentState)) { - setObjectPropertyValue(json.options as {}, configName, configValue); - setObjectPropertyValue( - result.updatedConfigs, - configName, - configValue - ); - } - } catch (error) { - console.error(error); - } - - return result; - }, - { - updatedConfigs: {} as IconJsonOptions, - updatedJSONConfig: json.options as IconJsonOptions, - } - ); -}; - -/** - * Returns the value of a specific configuration by checking the workspace and the user configuration and fallback to the default value. - * - * @param themeConfig Theme configuration - * @returns Actual theme configuration value - */ -const getConfigValue = (themeConfig: { - globalValue: unknown; - workspaceValue: unknown; - defaultValue: unknown; -}) => { - let configValue; - if ( - typeof themeConfig.workspaceValue === 'object' && - themeConfig.workspaceValue && - themeConfig.globalValue - ) { - configValue = merge( - {}, - themeConfig.workspaceValue, - themeConfig.globalValue - ); - } else { - configValue = - themeConfig.workspaceValue ?? - themeConfig.globalValue ?? - themeConfig.defaultValue; - } - return configValue; -}; diff --git a/src/helpers/customIcons.ts b/src/helpers/customIcons.ts deleted file mode 100644 index de8d3044ae..0000000000 --- a/src/helpers/customIcons.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { dirname, join } from 'path'; -import { IconJsonOptions } from '../models'; - -export const getCustomIconPaths = (options: IconJsonOptions) => { - return Object.values(options?.files?.associations ?? {}) - .filter((v) => v.match(/^[.\/]+/)) // <- custom dirs have a relative path to the dist folder - .map((v) => dirname(join(__dirname, v))); -}; diff --git a/src/helpers/fileConfig.ts b/src/helpers/fileConfig.ts deleted file mode 100644 index 9d77f0a37a..0000000000 --- a/src/helpers/fileConfig.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { getDefaultIconOptions } from '../icons'; -import { IconJsonOptions } from '../models'; - -/** - * Generate a config hashed string that is appended to each icon file name. - * @param config Icon Configuration object - */ -export const getFileConfigHash = (options: IconJsonOptions): string => { - try { - const defaults = getDefaultIconOptions(); - let fileConfigString = ''; - if ( - options.saturation !== defaults.saturation || - options.opacity !== defaults.opacity || - options.folders?.color !== defaults.folders.color || - options.files?.color !== defaults.files.color - ) { - fileConfigString += `~${getHash(JSON.stringify(options))}`; - } - return fileConfigString; - } catch (error) { - console.error(error); - return ''; - } -}; - -const getHash = (value: string) => { - let hash = 0; - let chr = 0; - - if (value.length === 0) return hash; - for (let i = 0; i < value.length; i++) { - chr = value.charCodeAt(i); - hash = (hash << 5) - hash + chr; - hash |= 0; // Convert to 32bit integer - } - return hash; -}; diff --git a/src/helpers/index.ts b/src/helpers/index.ts deleted file mode 100644 index 55213a869c..0000000000 --- a/src/helpers/index.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { readFileSync } from 'fs'; -import { join } from 'path'; -import { extensions, workspace } from 'vscode'; -import { iconJsonName } from '../icons/index'; -import { IconConfiguration } from '../models/index'; - -/** Get configuration of vs code. */ -export const getConfig = (section?: string) => { - return workspace.getConfiguration(section); -}; - -/** Get list of configuration entries of package.json */ -export const getConfigProperties = (): { [config: string]: unknown } => { - return extensions.getExtension('PKief.material-icon-theme')?.packageJSON - ?.contributes?.configuration?.properties; -}; - -/** Update configuration of vs code. */ -export const setConfig = ( - section: string, - value: any, - global: boolean = false -) => { - return getConfig().update(section, value, global); -}; - -export const getThemeConfig = (section: string) => { - return getConfig('material-icon-theme').inspect(section); -}; - -/** Set the config of the theme. */ -export const setThemeConfig = ( - section: string, - value: any, - global: boolean = false -) => { - return getConfig('material-icon-theme').update(section, value, global); -}; - -/** - * Checks if the theme is the active icon theme - * @param{boolean} global false by default - */ -export const isThemeActivated = (global: boolean = false): boolean => { - return global - ? getConfig().inspect('workbench.iconTheme')?.globalValue === - 'material-icon-theme' - : getConfig().inspect('workbench.iconTheme')?.workspaceValue === - 'material-icon-theme'; -}; - -/** Checks if the theme is not the active icon theme */ -export const isThemeNotVisible = (): boolean => { - const config = getConfig().inspect('workbench.iconTheme'); - return ( - (!isThemeActivated(true) && !config?.workspaceValue) || // no workspace and not global - (!isThemeActivated() && !!config?.workspaceValue) - ); -}; - -/** Return the path of the extension in the file system. */ -const getExtensionPath = () => - extensions.getExtension('PKief.material-icon-theme')?.extensionPath ?? ''; - -/** Get the configuration of the icons as JSON Object */ -export const getMaterialIconsJSON = (): IconConfiguration => { - const iconJSONPath = join(getExtensionPath(), 'dist', iconJsonName); - - try { - const data = readFileSync(iconJSONPath, 'utf8'); - return JSON.parse(data); - } catch (error) { - console.error(error); - return {}; - } -}; - -/** Capitalize the first letter of a string */ -export const capitalizeFirstLetter = (name: string): string => - name.charAt(0).toUpperCase() + name.slice(1); - -/** TitleCase all words in a string */ -export const toTitleCase = (value: string) => { - return value.replace( - /\w\S*/g, - (text) => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase() - ); -}; diff --git a/src/helpers/objects.ts b/src/helpers/objects.ts deleted file mode 100644 index 82711d006a..0000000000 --- a/src/helpers/objects.ts +++ /dev/null @@ -1,58 +0,0 @@ -/** - * Get the nested properties of an object. - * This solution is lighter than the lodash get-version. - * Source: http://stackoverflow.com/a/6491621/6942210 - */ -export const getObjectPropertyValue = (obj: Object, path: string) => { - const pathArray = path - .replace(/\[(\w+)\]/g, '.$1') // convert indexes to properties - .replace(/^\./, '') // strip a leading dot - .split('.'); // separate paths in array - - /** Avoid errors in the getValue function. */ - const isObject = (object: unknown) => { - return object === Object(object); - }; - let result = JSON.parse(JSON.stringify(obj)); - - for (let i = 0; i < pathArray.length; ++i) { - const k = pathArray[i]; - if (isObject(result) && k in result) { - result = result[k]; - } else { - return; - } - } - return result; -}; - -/** - * Set a value for a nested object property. - * @param obj Object - * @param path Properties as string e.g. `'a.b.c'` - * @param value Value to be set for the given property - * Source: https://stackoverflow.com/a/13719799/6942210 - */ -export const setObjectPropertyValue = ( - obj: { [key: string]: any }, - path: string | string[], - value: any -) => { - if (typeof path === 'string') { - path = path.split('.'); - } - - if (path.length > 1) { - const e = path.shift() ?? ''; - setObjectPropertyValue( - (obj[e] = - Object.prototype.toString.call(obj[e]) === '[object Object]' - ? obj[e] - : {}), - path, - value - ); - } else { - obj[path[0]] = value; - } -}; diff --git a/src/i18n/index.ts b/src/i18n/index.ts deleted file mode 100644 index d949a32a2a..0000000000 --- a/src/i18n/index.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { env } from 'vscode'; -import { getObjectPropertyValue } from '../helpers/objects'; -import { Translation } from '../models'; - -// Get current language of the vs code workspace -export const getCurrentLanguage = (): string => env.language; - -let currentTranslation: Translation; -let fallbackTranslation: Translation; - -const placeholder = '%'; - -/** Initialize the translations */ -export const initTranslations = async () => { - try { - currentTranslation = await loadTranslation(getCurrentLanguage()); - fallbackTranslation = await loadTranslation('en'); - } catch (error) { - console.error(error); - } -}; - -/** Load the required translation */ -const loadTranslation = async (language: string) => { - try { - return await getTranslationObject(language); - } catch (error) { - return await getTranslationObject('en'); - } -}; - -/** Get the translation object of the separated translation files */ -const getTranslationObject = async (language: string): Promise => { - const lang = await import(/* webpackMode: "eager" */ `./lang-${language}`); - return lang.translation as Translation; -}; - -/** - * We look up the matching translation in the translation files. - * If we cannot find a matching key in the file we use the fallback. - * With optional parameters you can configure both the translations - * and the fallback (required for testing purposes). - * */ -export const getTranslationValue = ( - key: string, - translations = currentTranslation, - fallback = fallbackTranslation -): string | undefined => { - return ( - getObjectPropertyValue(translations, key) ?? - getObjectPropertyValue(fallback, key) - ); -}; - -/** - * The instant method is required for the translate pipe. - * It helps to translate a word instantly. - */ -export const translate = (key: string, ...variables: string[]): string => { - const translation = getTranslationValue(key); - - if (variables.length === 0) return translation ?? key; - return replace(translation, ...variables); -}; - -/** - * The replace function will replace the current placeholder with the - * data parameter from the translation. You can give it one or more optional - * parameters ('variables'). - */ -export const replace = (value: string = '', ...variables: string[]) => { - let translation: string = value; - variables.forEach((variable, i) => { - translation = translation.replace(`${placeholder}${i}`, variable); - }); - - return translation; -}; diff --git a/src/icons/generator/constants.ts b/src/icons/generator/constants.ts deleted file mode 100644 index 01b9568697..0000000000 --- a/src/icons/generator/constants.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Path where the icons are located. - */ -export const iconFolderPath: string = './../icons/'; - -/** - * File name of the JSON file that will be generated to the out folder. - */ -export const iconJsonName: string = 'material-icons.json'; - -/** - * File ending for opened folders. - */ -export const openedFolder: string = '-open'; - -/** - * File ending for light icons. - */ -export const lightColorFileEnding: string = '_light'; - -/** - * File ending for high contrast icons. - */ -export const highContrastColorFileEnding: string = '_highContrast'; - -/** - * Pattern to match wildcards for custom file icon mappings. - */ -export const wildcardPattern = new RegExp(/^\*{1,2}\./); diff --git a/src/icons/generator/folderGenerator.ts b/src/icons/generator/folderGenerator.ts deleted file mode 100644 index 7304fa6558..0000000000 --- a/src/icons/generator/folderGenerator.ts +++ /dev/null @@ -1,340 +0,0 @@ -import { writeFileSync } from 'fs'; -import merge from 'lodash.merge'; -import { basename, join } from 'path'; -import { getFileConfigHash } from '../../helpers/fileConfig'; -import { - DefaultIcon, - FolderIcon, - FolderTheme, - IconAssociations, - IconConfiguration, - IconJsonOptions, -} from '../../models/index'; -import { - highContrastColorFileEnding, - iconFolderPath, - lightColorFileEnding, - openedFolder, -} from './constants'; - -/** - * Get the folder icon definitions as object. - */ -export const loadFolderIconDefinitions = ( - folderThemes: FolderTheme[], - config: IconConfiguration, - options: IconJsonOptions -): IconConfiguration => { - config = merge({}, config); - config.hidesExplorerArrows = options.hidesExplorerArrows; - const activeTheme = getEnabledFolderTheme( - folderThemes, - options.folders?.theme - ); - if (!activeTheme) { - return {}; - } - const enabledIcons = disableIconsByPack(activeTheme, options.activeIconPack); - const customIcons = getCustomIcons(options.folders?.associations); - const allIcons = [...enabledIcons, ...customIcons]; - - if (options.folders?.theme === 'none') { - return config; - } - - allIcons.forEach((icon) => { - if (icon.disabled) return; - config = setIconDefinitions(config, icon); - config = merge({}, config, setFolderNames(icon.name, icon.folderNames)); - config.light = icon.light - ? merge( - {}, - config.light, - setFolderNames(icon.name, icon.folderNames, lightColorFileEnding) - ) - : config.light; - config.highContrast = icon.highContrast - ? merge( - {}, - config.highContrast, - setFolderNames( - icon.name, - icon.folderNames, - highContrastColorFileEnding - ) - ) - : config.highContrast; - }); - - config = setDefaultFolderIcons(activeTheme, config); - return config; -}; - -/** - * Set the default folder icons for the theme. - */ -const setDefaultFolderIcons = ( - theme: FolderTheme, - config: IconConfiguration -): IconConfiguration => { - config = merge({}, config); - const hasFolderIcons = - !!theme.defaultIcon.name && theme.defaultIcon.name.length > 0; - if (hasFolderIcons) { - config = setIconDefinitions(config, theme.defaultIcon); - } - config = merge( - {}, - config, - createDefaultIconConfigObject(hasFolderIcons, theme, '') - ); - config.light = theme.defaultIcon.light - ? merge( - {}, - config.light, - createDefaultIconConfigObject( - hasFolderIcons, - theme, - lightColorFileEnding - ) - ) - : config.light; - config.highContrast = theme.defaultIcon.highContrast - ? merge( - {}, - config.highContrast, - createDefaultIconConfigObject( - hasFolderIcons, - theme, - highContrastColorFileEnding - ) - ) - : config.highContrast; - - config = merge( - {}, - config, - createRootIconConfigObject(hasFolderIcons, theme, '') - ); - if (theme.rootFolder) { - config = setIconDefinitions(config, theme.rootFolder); - config.light = theme.rootFolder.light - ? merge( - {}, - config.light, - createRootIconConfigObject( - hasFolderIcons, - theme, - lightColorFileEnding - ) - ) - : config.light; - config.highContrast = theme.rootFolder.highContrast - ? merge( - {}, - config.highContrast, - createRootIconConfigObject( - hasFolderIcons, - theme, - highContrastColorFileEnding - ) - ) - : config.highContrast; - } - - return config; -}; - -/** - * Get the object of the current enabled theme. - */ -const getEnabledFolderTheme = ( - themes: FolderTheme[], - enabledTheme: string | undefined -): FolderTheme | undefined => { - return themes.find((theme) => theme.name === enabledTheme); -}; - -/** - * Disable all file icons that are in a pack which is disabled. - */ -const disableIconsByPack = ( - folderIcons: FolderTheme | undefined, - activatedIconPack: string | undefined -): FolderIcon[] => { - if (!folderIcons?.icons || folderIcons.icons.length === 0) { - return []; - } - return folderIcons.icons.filter((icon) => { - return !icon.enabledFor - ? true - : icon.enabledFor.some((p) => p === activatedIconPack); - }); -}; - -const setIconDefinitions = ( - config: IconConfiguration, - icon: FolderIcon | DefaultIcon -) => { - config = merge({}, config); - config = createIconDefinitions(config, icon.name); - if (icon.light) { - config = merge( - {}, - config, - createIconDefinitions(config, icon.name, lightColorFileEnding) - ); - } - if (icon.highContrast) { - config = merge( - {}, - config, - createIconDefinitions(config, icon.name, highContrastColorFileEnding) - ); - } - return config; -}; - -const createIconDefinitions = ( - config: IconConfiguration, - iconName: string, - appendix: string = '' -) => { - config = merge({}, config); - const fileConfigHash = getFileConfigHash(config.options ?? {}); - const configIconDefinitions = config.iconDefinitions; - if (configIconDefinitions) { - configIconDefinitions[iconName + appendix] = { - iconPath: `${iconFolderPath}${iconName}${appendix}${fileConfigHash}.svg`, - }; - configIconDefinitions[`${iconName}${openedFolder}${appendix}`] = { - iconPath: `${iconFolderPath}${iconName}${openedFolder}${appendix}${fileConfigHash}.svg`, - }; - } - return config; -}; - -const setFolderNames = ( - iconName: string, - folderNames: string[], - appendix: string = '' -) => { - const obj: Partial = { - folderNames: {}, - folderNamesExpanded: {}, - }; - folderNames.forEach((name) => { - if (obj.folderNames) { - obj.folderNames[name as keyof IconConfiguration] = iconName + appendix; - } - if (obj.folderNamesExpanded) { - obj.folderNamesExpanded[ - name as keyof IconConfiguration - ] = `${iconName}${openedFolder}${appendix}`; - } - }); - return obj; -}; - -const createDefaultIconConfigObject = ( - hasFolderIcons: boolean, - theme: FolderTheme, - appendix: string = '' -) => { - const obj = { - folder: '', - folderExpanded: '', - }; - obj.folder = hasFolderIcons ? theme.defaultIcon.name + appendix : ''; - obj.folderExpanded = hasFolderIcons - ? `${theme.defaultIcon.name}${openedFolder}${appendix}` - : ''; - return obj; -}; - -const createRootIconConfigObject = ( - hasFolderIcons: boolean, - theme: FolderTheme, - appendix: string = '' -) => { - const obj = { - rootFolder: '', - rootFolderExpanded: '', - }; - obj.rootFolder = hasFolderIcons - ? theme.rootFolder - ? theme.rootFolder.name + appendix - : theme.defaultIcon.name + appendix - : ''; - obj.rootFolderExpanded = hasFolderIcons - ? theme.rootFolder - ? `${theme.rootFolder.name}${openedFolder}${appendix}` - : `${theme.defaultIcon.name}${openedFolder}${appendix}` - : ''; - return obj; -}; - -const getCustomIcons = (folderAssociations: IconAssociations | undefined) => { - if (!folderAssociations) return []; - - const icons: FolderIcon[] = Object.keys(folderAssociations).map((fa) => ({ - // use default folder if icon name is empty - name: - folderAssociations[fa].length > 0 - ? 'folder-' + folderAssociations[fa].toLowerCase() - : 'folder', - folderNames: [fa.toLowerCase()], - })); - - return icons; -}; - -export const generateFolderIcons = (color: string | undefined) => { - if (!color || !validateHEXColorCode(color)) { - return console.error('Invalid color code for folder icons'); - } - - const folderIcon = - 'M10 4H4c-1.11 0-2 .89-2 2v12a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V8c0-1.11-.9-2-2-2h-8l-2-2z'; - const folderIconOpen = - 'M19 20H4c-1.11 0-2-.9-2-2V6c0-1.11.89-2 2-2h6l2 2h7a2 2 0 0 1 2 2H4v10l2.14-8h17.07l-2.28 8.5c-.23.87-1.01 1.5-1.93 1.5z'; - const rootFolderIcon = - 'M12 20a8 8 0 0 1-8-8 8 8 0 0 1 8-8 8 8 0 0 1 8 8 8 8 0 0 1-8 8m0-18A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2m0 5a5 5 0 0 0-5 5 5 5 0 0 0 5 5 5 5 0 0 0 5-5 5 5 0 0 0-5-5z'; - const rootFolderIconOpen = - 'M12 20a8 8 0 0 1-8-8 8 8 0 0 1 8-8 8 8 0 0 1 8 8 8 8 0 0 1-8 8m0-18A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2z'; - - writeSVGFiles('folder', getSVG(getPath(folderIcon, color))); - writeSVGFiles('folder-open', getSVG(getPath(folderIconOpen, color))); - writeSVGFiles('folder-root', getSVG(getPath(rootFolderIcon, color))); - writeSVGFiles('folder-root-open', getSVG(getPath(rootFolderIconOpen, color))); -}; - -export const getPath = (d: string, color: string) => - ``; -export const getSVG = (path: string) => - `${path}`; - -export const writeSVGFiles = (iconName: string, svg: string) => { - let iconsPath; - if (basename(__dirname) === 'dist') { - iconsPath = join(__dirname, '..', 'icons'); - } else { - // executed via script - iconsPath = join(__dirname, '..', '..', '..', 'icons'); - } - const iconsFolderPath = join(iconsPath, `${iconName}.svg`); - try { - writeFileSync(iconsFolderPath, svg); - } catch (error) { - console.error(error); - } -}; - -/** - * Validate the HEX color code - * @param color HEX code - */ -export const validateHEXColorCode = (color: string = '') => { - const hexPattern = new RegExp(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/); - return color.length > 0 && hexPattern.test(color); -}; diff --git a/src/icons/generator/iconOpacity.ts b/src/icons/generator/iconOpacity.ts deleted file mode 100644 index 3fbadcffe8..0000000000 --- a/src/icons/generator/iconOpacity.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { readdirSync, readFileSync, writeFileSync } from 'fs'; -import { basename, join } from 'path'; -import { getCustomIconPaths } from '../../helpers/customIcons'; -import { IconJsonOptions } from '../../models'; - -/** - * Changes the opacity of all icons in the set. - * @param options Icon JSON options which include the opacity value. - * @param fileNames Only change the opacity of certain file names. - */ -export const setIconOpacity = ( - options: IconJsonOptions, - fileNames?: string[] -) => { - if (!validateOpacityValue(options.opacity)) { - return console.error( - 'Invalid opacity value! Opacity must be a decimal number between 0 and 1!' - ); - } - - let iconsPath = ''; - if (basename(__dirname) === 'dist') { - iconsPath = join(__dirname, '..', 'icons'); - } else { - // executed via script - iconsPath = join(__dirname, '..', '..', '..', 'icons'); - } - - const customIconPaths = getCustomIconPaths(options); - const iconFiles = readdirSync(iconsPath); - - try { - // read all icon files from the icons folder - (fileNames || iconFiles).forEach(adjustOpacity(iconsPath, options)); - - customIconPaths.forEach((iconPath) => { - const customIcons = readdirSync(iconPath); - customIcons.forEach(adjustOpacity(iconPath, options)); - }); - } catch (error) { - console.error(error); - } -}; - -/** - * Validate the opacity value. - * @param opacity Opacity value - */ -export const validateOpacityValue = (opacity: number | undefined) => { - return opacity !== undefined && opacity <= 1 && opacity >= 0; -}; - -/** - * Get the SVG root element. - * @param svg SVG file as string. - */ -const getSVGRootElement = (svg: string) => { - const result = new RegExp(/]*>/).exec(svg); - return result?.[0]; -}; - -/** - * Add an opacity attribute to the SVG icon to control the opacity of the icon. - * @param svgRoot Root element of the SVG icon. - * @param opacity Opacity value. - */ -const addOpacityAttribute = (svgRoot: string, opacity: number) => { - const pattern = new RegExp(/\sopacity="[\d.]+"/); - // if the opacity attribute already exists - if (pattern.test(svgRoot)) { - return svgRoot.replace(pattern, ` opacity="${opacity}"`); - } else { - return svgRoot.replace(/^ { - const pattern = new RegExp(/\sopacity="[\d.]+"/); - return svgRoot.replace(pattern, ''); -}; - -const adjustOpacity = ( - iconPath: string, - options: IconJsonOptions -): ((value: string, index: number, array: string[]) => void) => { - return (iconFileName) => { - const svgFilePath = join(iconPath, iconFileName); - - // Read SVG file - const svg = readFileSync(svgFilePath, 'utf-8'); - - // Get the root element of the SVG file - const svgRootElement = getSVGRootElement(svg); - if (!svgRootElement) return; - - let updatedRootElement: string; - - if (options.opacity !== undefined && options.opacity < 1) { - updatedRootElement = addOpacityAttribute(svgRootElement, options.opacity); - } else { - updatedRootElement = removeOpacityAttribute(svgRootElement); - } - const updatedSVG = svg.replace(/]*>/, updatedRootElement); - - writeFileSync(svgFilePath, updatedSVG); - }; -}; diff --git a/src/icons/generator/iconSaturation.ts b/src/icons/generator/iconSaturation.ts deleted file mode 100644 index a8ab6255c2..0000000000 --- a/src/icons/generator/iconSaturation.ts +++ /dev/null @@ -1,140 +0,0 @@ -import { readdirSync, readFileSync, writeFileSync } from 'fs'; -import { basename, join } from 'path'; -import { getCustomIconPaths } from '../../helpers/customIcons'; -import { IconJsonOptions } from '../../models'; - -/** - * Changes saturation of all icons in the set. - * @param options Icon JSON options which include the saturation value. - * @param fileNames Only change the saturation of certain file names. - */ -export const setIconSaturation = ( - options: IconJsonOptions, - fileNames?: string[] -) => { - if (!validateSaturationValue(options.saturation)) { - return console.error( - 'Invalid saturation value! Saturation must be a decimal number between 0 and 1!' - ); - } - - let iconsPath = ''; - if (basename(__dirname) === 'dist') { - iconsPath = join(__dirname, '..', 'icons'); - } else { - // executed via script - iconsPath = join(__dirname, '..', '..', '..', 'icons'); - } - - const customIconPaths = getCustomIconPaths(options); - const iconFiles = readdirSync(iconsPath); - - // read all icon files from the icons folder - try { - (fileNames || iconFiles).forEach(adjustSaturation(iconsPath, options)); - - customIconPaths.forEach((iconPath) => { - const customIcons = readdirSync(iconPath); - customIcons.forEach(adjustSaturation(iconPath, options)); - }); - } catch (error) { - console.error(error); - } -}; - -/** - * Get the SVG root element. - * @param svg SVG file as string. - */ -const getSVGRootElement = (svg: string) => { - const result = new RegExp(/]*>/).exec(svg); - return result?.[0]; -}; - -/** - * Add an filter attribute to the SVG icon. - * @param svgRoot Root element of the SVG icon. - */ -const addFilterAttribute = (svgRoot: string) => { - const pattern = new RegExp(/\sfilter="[^"]+?"/); - // if the filter attribute already exists - if (pattern.test(svgRoot)) { - return svgRoot.replace(pattern, ' filter="url(#saturation)"'); - } else { - return svgRoot.replace(/^ { - const pattern = new RegExp(/\sfilter="[^"]+?"/); - return svgRoot.replace(pattern, ''); -}; - -/** - * Add filter element to the SVG icon. - * @param svg SVG file as string. - */ -const addFilterElement = (svg: string, value: number) => { - const pattern = new RegExp(/(.*<\/svg>)/); - const filterElement = ``; - if (pattern.test(svg)) { - return svg.replace(pattern, `${filterElement}$1`); - } else { - return svg.replace(/<\/svg>/, `${filterElement}`); - } -}; - -/** - * Remove filter element from the SVG icon. - * @param svg SVG file as string. - */ -const removeFilterElement = (svg: string) => { - const pattern = new RegExp(/(.*<\/svg>)/); - return svg.replace(pattern, '$1'); -}; - -/** - * Validate the saturation value. - * @param saturation Saturation value - */ -export const validateSaturationValue = (saturation: number | undefined) => { - return saturation !== undefined && saturation <= 1 && saturation >= 0; -}; - -const adjustSaturation = ( - iconsPath: any, - options: IconJsonOptions -): ((value: string, index: number, array: string[]) => void) => { - return (iconFileName) => { - const svgFilePath = join(iconsPath, iconFileName); - - // Read SVG file - const svg = readFileSync(svgFilePath, 'utf-8'); - - // Get the root element of the SVG file - const svgRootElement = getSVGRootElement(svg); - if (!svgRootElement) return; - - let updatedRootElement: string; - - if (options.saturation !== undefined && options.saturation < 1) { - updatedRootElement = addFilterAttribute(svgRootElement); - } else { - updatedRootElement = removeFilterAttribute(svgRootElement); - } - - let updatedSVG = svg.replace(/]*>/, updatedRootElement); - - if (options.saturation !== undefined && options.saturation < 1) { - updatedSVG = addFilterElement(updatedSVG, options.saturation); - } else { - updatedSVG = removeFilterElement(updatedSVG); - } - - writeFileSync(svgFilePath, updatedSVG); - }; -}; diff --git a/src/icons/generator/index.ts b/src/icons/generator/index.ts deleted file mode 100644 index 005e431f84..0000000000 --- a/src/icons/generator/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export * from './fileGenerator'; -export * from './folderGenerator'; -export * from './languageGenerator'; -export * from './constants'; -export * from './jsonGenerator'; -export * from './iconOpacity'; -export * from './iconSaturation'; diff --git a/src/icons/generator/jsonGenerator.ts b/src/icons/generator/jsonGenerator.ts deleted file mode 100644 index 5408dead58..0000000000 --- a/src/icons/generator/jsonGenerator.ts +++ /dev/null @@ -1,207 +0,0 @@ -import { - existsSync, - readdirSync, - renameSync, - unlinkSync, - writeFileSync, -} from 'fs'; -import merge from 'lodash.merge'; -import { basename, join } from 'path'; -import { getCustomIconPaths } from '../../helpers/customIcons'; -import { getFileConfigHash } from '../../helpers/fileConfig'; -import { IconConfiguration, IconJsonOptions } from '../../models/index'; -import { fileIcons } from '../fileIcons'; -import { folderIcons } from '../folderIcons'; -import { languageIcons } from '../languageIcons'; -import { iconJsonName } from './constants'; -import { - generateFileIcons, - generateFolderIcons, - loadFileIconDefinitions, - loadFolderIconDefinitions, - loadLanguageIconDefinitions, - setIconOpacity, - setIconSaturation, - validateHEXColorCode, - validateOpacityValue, - validateSaturationValue, -} from './index'; - -/** - * Generate the complete icon configuration object that can be written as JSON file. - */ -export const generateIconConfigurationObject = ( - options: IconJsonOptions -): IconConfiguration => { - const iconConfig = merge({}, new IconConfiguration(), { options }); - const languageIconDefinitions = loadLanguageIconDefinitions( - languageIcons, - iconConfig, - options - ); - const fileIconDefinitions = loadFileIconDefinitions( - fileIcons, - iconConfig, - options - ); - const folderIconDefinitions = loadFolderIconDefinitions( - folderIcons, - iconConfig, - options - ); - - return merge( - {}, - languageIconDefinitions, - fileIconDefinitions, - folderIconDefinitions - ); -}; - -/** - * Create the JSON file that is responsible for the icons in the editor. - * @param updatedConfigs Options that have been changed. - * @param updatedJSONConfig New JSON options that already include the updatedConfigs. - */ -export const createIconFile = ( - updatedConfigs?: IconJsonOptions, - updatedJSONConfig: IconJsonOptions = {} -) => { - // override the default options with the new options - const options: IconJsonOptions = merge( - {}, - getDefaultIconOptions(), - updatedJSONConfig - ); - const json = generateIconConfigurationObject(options); - - // make sure that the folder color, opacity and saturation values are entered correctly - if ( - updatedConfigs?.opacity && - !validateOpacityValue(updatedConfigs?.opacity) - ) { - throw Error('Material Icons: Invalid opacity value!'); - } - if ( - updatedConfigs?.saturation && - !validateSaturationValue(updatedConfigs?.saturation) - ) { - throw Error('Material Icons: Invalid saturation value!'); - } - if ( - updatedConfigs?.folders?.color && - !validateHEXColorCode(updatedConfigs?.folders?.color) - ) { - throw Error('Material Icons: Invalid folder color value!'); - } - if ( - updatedConfigs?.files?.color && - !validateHEXColorCode(updatedConfigs?.files?.color) - ) { - throw Error('Material Icons: Invalid file color value!'); - } - - try { - let iconJsonPath = __dirname; - // if executed via script - if (basename(__dirname) !== 'dist') { - iconJsonPath = join(__dirname, '..', '..', '..', 'dist'); - } - if (!updatedConfigs || (updatedConfigs.files || {}).color) { - // if updatedConfigs do not exist (because of initial setup) - // or new config value was detected by the change detection - generateFileIcons(options.files?.color); - setIconOpacity(options, ['file.svg']); - } - if (!updatedConfigs || (updatedConfigs.folders || {}).color) { - // if updatedConfigs do not exist (because of initial setup) - // or new config value was detected by the change detection - generateFolderIcons(options.folders?.color); - setIconOpacity(options, [ - 'folder.svg', - 'folder-open.svg', - 'folder-root.svg', - 'folder-root-open.svg', - ]); - } - if (!updatedConfigs || updatedConfigs.opacity !== undefined) { - setIconOpacity(options); - } - if (!updatedConfigs || updatedConfigs.saturation !== undefined) { - setIconSaturation(options); - } - renameIconFiles(iconJsonPath, options); - } catch (error) { - throw new Error('Failed to update icons: ' + error); - } - - try { - let iconJsonPath = __dirname; - // if executed via script - if (basename(__dirname) !== 'dist') { - iconJsonPath = join(__dirname, '..', '..', '..', 'dist'); - } - writeFileSync( - join(iconJsonPath, iconJsonName), - JSON.stringify(json, undefined, 2), - 'utf-8' - ); - } catch (error) { - throw new Error('Failed to create icon file: ' + error); - } - - return iconJsonName; -}; - -/** - * The options control the generator and decide which icons are disabled or not. - */ -export const getDefaultIconOptions = (): Required => ({ - folders: { - theme: 'specific', - color: '#90a4ae', - associations: {}, - }, - activeIconPack: 'angular', - hidesExplorerArrows: false, - opacity: 1, - saturation: 1, - files: { - color: '#90a4ae', - associations: {}, - }, - languages: { associations: {} }, -}); - -/** - * Rename all icon files according their respective config - * @param iconJsonPath Path of icon json folder - * @param options Icon Json Options - */ -const renameIconFiles = (iconJsonPath: string, options: IconJsonOptions) => { - const customPaths = getCustomIconPaths(options); - const defaultIconPath = join(iconJsonPath, '..', 'icons'); - const iconPaths = [defaultIconPath, ...customPaths]; - - iconPaths.forEach((iconPath) => { - readdirSync(iconPath) - .filter((f) => f.match(/\.svg/gi)) - .forEach((f) => { - const filePath = join(iconPath, f); - const fileConfigHash = getFileConfigHash(options); - - // append file config to file name - const newFilePath = join( - iconPath, - f.replace(/(^[^\.~]+)(.*)\.svg/, `$1${fileConfigHash}.svg`) - ); - - // if generated files are already in place, do not overwrite them - if (filePath !== newFilePath && existsSync(newFilePath)) { - unlinkSync(filePath); - } else { - renameSync(filePath, newFilePath); - } - }); - }); -}; diff --git a/src/icons/generator/languageGenerator.ts b/src/icons/generator/languageGenerator.ts deleted file mode 100644 index e6fa1e4f59..0000000000 --- a/src/icons/generator/languageGenerator.ts +++ /dev/null @@ -1,127 +0,0 @@ -import merge from 'lodash.merge'; -import { getFileConfigHash } from '../../helpers/fileConfig'; -import { - DefaultIcon, - IconAssociations, - IconConfiguration, - IconJsonOptions, - LanguageIcon, -} from '../../models/index'; -import { - highContrastColorFileEnding, - iconFolderPath, - lightColorFileEnding, -} from './constants'; - -/** - * Get all file icons that can be used in this theme. - */ -export const loadLanguageIconDefinitions = ( - languages: LanguageIcon[], - config: IconConfiguration, - options: IconJsonOptions -): IconConfiguration => { - config = merge({}, config); - const enabledLanguages = disableLanguagesByPack( - languages, - options.activeIconPack - ); - const customIcons = getCustomIcons(options.languages?.associations); - const allLanguageIcons = [...enabledLanguages, ...customIcons]; - - allLanguageIcons.forEach((lang) => { - if (lang.disabled) return; - config = setIconDefinitions(config, lang.icon); - config = merge( - {}, - config, - setLanguageIdentifiers(lang.icon.name, lang.ids) - ); - config.light = lang.icon.light - ? merge( - {}, - config.light, - setLanguageIdentifiers( - lang.icon.name + lightColorFileEnding, - lang.ids - ) - ) - : config.light; - config.highContrast = lang.icon.highContrast - ? merge( - {}, - config.highContrast, - setLanguageIdentifiers( - lang.icon.name + highContrastColorFileEnding, - lang.ids - ) - ) - : config.highContrast; - }); - - return config; -}; - -const setIconDefinitions = (config: IconConfiguration, icon: DefaultIcon) => { - config = merge({}, config); - config = createIconDefinitions(config, icon.name); - config = merge( - {}, - config, - icon.light - ? createIconDefinitions(config, icon.name + lightColorFileEnding) - : config.light - ); - config = merge( - {}, - config, - icon.highContrast - ? createIconDefinitions(config, icon.name + highContrastColorFileEnding) - : config.highContrast - ); - return config; -}; - -const createIconDefinitions = (config: IconConfiguration, iconName: string) => { - config = merge({}, config); - const fileConfigHash = getFileConfigHash(config.options ?? {}); - if (config.iconDefinitions) { - config.iconDefinitions[iconName] = { - iconPath: `${iconFolderPath}${iconName}${fileConfigHash}.svg`, - }; - } - return config; -}; - -const setLanguageIdentifiers = (iconName: string, languageIds: string[]) => { - const obj: Partial = { languageIds: {} }; - languageIds.forEach((id) => { - obj.languageIds![id as keyof IconConfiguration] = iconName; - }); - return obj; -}; - -const getCustomIcons = (languageAssociations: IconAssociations | undefined) => { - if (!languageAssociations) return []; - - const icons: LanguageIcon[] = Object.keys(languageAssociations).map((fa) => ({ - icon: { name: languageAssociations[fa].toLowerCase() }, - ids: [fa.toLowerCase()], - })); - - return icons; -}; - -/** - * Disable all file icons that are in a pack which is disabled. - */ -const disableLanguagesByPack = ( - languageIcons: LanguageIcon[], - activatedIconPack: string | undefined -) => { - return languageIcons.filter((language) => { - return !language.enabledFor - ? true - : language.enabledFor.some((p) => p === activatedIconPack); - }); -}; diff --git a/src/icons/index.ts b/src/icons/index.ts deleted file mode 100644 index 87f583d251..0000000000 --- a/src/icons/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './generator'; -export * from './fileIcons'; -export * from './folderIcons'; -export * from './languageIcons'; diff --git a/src/models/i18n/index.ts b/src/models/i18n/index.ts deleted file mode 100644 index 1be20d8dee..0000000000 --- a/src/models/i18n/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './translation'; diff --git a/src/models/iconConfiguration.ts b/src/models/iconConfiguration.ts deleted file mode 100644 index 00ea4bab9a..0000000000 --- a/src/models/iconConfiguration.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { IconJsonOptions } from './'; - -export class IconConfiguration { - file?: string; - folder?: string; - folderExpanded?: string; - folderNames?: Record; - folderNamesExpanded?: Record; - rootFolder?: string; - rootFolderExpanded?: string; - fileExtensions?: Record; - fileNames?: Record; - languageIds?: Record; - iconDefinitions?: Record; - light?: IconConfiguration; - highContrast?: IconConfiguration; - options?: IconJsonOptions; - hidesExplorerArrows?: boolean; - - constructor() { - this.iconDefinitions = {}; - this.folderNames = {}; - this.folderNamesExpanded = {}; - this.fileExtensions = {}; - this.fileNames = {}; - this.languageIds = {}; - this.light = { - fileExtensions: {}, - fileNames: {}, - }; - this.highContrast = { - fileExtensions: {}, - fileNames: {}, - }; - this.options = {}; - } -} diff --git a/src/models/icons/files/fileIcon.ts b/src/models/icons/files/fileIcon.ts deleted file mode 100644 index 617fe48ac0..0000000000 --- a/src/models/icons/files/fileIcon.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { RequireAtLeastOne } from '../../../helpers/types'; -import { IconPack } from '../index'; - -interface BasicFileIcon { - /** - * Name of the icon, e.g. 'javascript' - */ - name: string; - - /** - * Define the file extensions that should use this icon. - * E.g. ['js'] - */ - fileExtensions?: string[]; - - /** - * Define if there are some static file names that should apply this icon. - * E.g. ['sample.js'] - */ - fileNames?: string[]; - - /** - * Define if there is a light icon available. - */ - light?: boolean; - - /** - * Define if there is a high contrast icon available. - */ - highContrast?: boolean; - - /** - * Define if the icon should be disabled. - */ - disabled?: boolean; - - /** - * Defines a pack to which this icon belongs. A pack can be toggled and all icons inside this pack can be enabled or disabled together. - */ - enabledFor?: IconPack[]; -} - -/** - * Type for a FileIcon. In addition to the `name` property, either a `fileExtensions` or `fileNames` property is required. - */ -export type FileIcon = RequireAtLeastOne< - BasicFileIcon, - 'fileExtensions' | 'fileNames' ->; diff --git a/src/models/icons/files/index.ts b/src/models/icons/files/index.ts deleted file mode 100644 index 502f1b13f1..0000000000 --- a/src/models/icons/files/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './fileIcon'; -export * from './fileTypes'; diff --git a/src/models/icons/folders/index.ts b/src/models/icons/folders/index.ts deleted file mode 100644 index 475ca6a998..0000000000 --- a/src/models/icons/folders/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './folderIcon'; -export * from './folderTheme'; diff --git a/src/models/icons/iconJsonOptions.ts b/src/models/icons/iconJsonOptions.ts deleted file mode 100644 index 5acef6e340..0000000000 --- a/src/models/icons/iconJsonOptions.ts +++ /dev/null @@ -1,22 +0,0 @@ -export interface IconJsonOptions { - activeIconPack?: string; - hidesExplorerArrows?: boolean; - opacity?: number; - saturation?: number; - folders?: { - theme?: string; - color?: string; - associations?: IconAssociations; - }; - files?: { - color?: string; - associations?: IconAssociations; - }; - languages?: { - associations?: IconAssociations; - }; -} - -export interface IconAssociations { - [pattern: string]: string; -} diff --git a/src/models/icons/index.ts b/src/models/icons/index.ts deleted file mode 100644 index fa6d579700..0000000000 --- a/src/models/icons/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from './files'; -export * from './folders'; -export * from './languages'; -export * from './iconPack'; -export * from './iconJsonOptions'; -export * from './defaultIcon'; diff --git a/src/models/icons/languages/index.ts b/src/models/icons/languages/index.ts deleted file mode 100644 index 68acbead32..0000000000 --- a/src/models/icons/languages/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './languageIdentifier'; diff --git a/src/models/index.ts b/src/models/index.ts deleted file mode 100644 index 4e0a4d08b8..0000000000 --- a/src/models/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './icons'; -export * from './i18n'; -export * from './iconConfiguration'; diff --git a/src/models/scripts/contributors/contributor.ts b/src/models/scripts/contributors/contributor.ts deleted file mode 100644 index c4e70a9cb2..0000000000 --- a/src/models/scripts/contributors/contributor.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* eslint-disable camelcase */ -export interface Contributor { - login: string; - id: number; - node_id: string; - avatar_url: string; - gravatar_id: string; - url: string; - html_url: string; - followers_url: string; - following_url: string; - gists_url: string; - starred_url: string; - subscriptions_url: string; - organizations_url: string; - repos_url: string; - events_url: string; - received_events_url: string; - type: string; - site_admin: boolean; - contributions: number; -} diff --git a/src/module/README.md b/src/module/README.md new file mode 100644 index 0000000000..2b1ed43d11 --- /dev/null +++ b/src/module/README.md @@ -0,0 +1,94 @@ +

+
+ logo +

+ Material Icon Theme +
+
+

+ +

Get the Material Design icons as NPM Module.

+ +

+ Version  + Rating  + Installs  + Downloads +

+ +## File icons + +
๐Ÿž๏ธ Show all available file icons
file icons
+ +## Folder icons + +
๐Ÿž๏ธ Show all available folder icons
folder icons
+ +## Description + +This npm module provides all Icons from the VS Code Material Icon Theme as npm module. The icons are available as SVG files and can be used in any web project. + +## Installation + +Install the npm module: + +```bash +npm install material-icon-theme +``` + +## Usage + +All the SVG files can be found in the "node_modules/material-icon-theme/icons" folder. To get to know the mapping between the file and folder names and the icons, the `generateManifest` has to be used. + +```javascript +import { generateManifest } from 'material-icon-theme'; +``` + +The `generateManifest` function returns a JSON object with the mapping between the file and folder names and the icons. The JSON object can be used to display the icons in a web project. + +This manifest follows the official VS Code extension API guidelines. More information how this manifest is structured and how it can be used can be found [in the VS Code documentation](https://code.visualstudio.com/api/extension-guides/file-icon-theme#icon-definitions). + +The type definition for the manifest can be found in the `material-icon-theme` module: + +```typescript +import { Manifest } from 'material-icon-theme'; +``` + +### Configure the icons + +While generating the manifest, there can be some configuration options passed to the `generateManifest` function. The configuration options are the same as in the VS Code Material Icon Theme extension. The configuration options can be found in the `material-icon-theme` module: + +```typescript +import { type ManifestConfig, type IconAssociations, type IconPackValue, generateManifest } from 'material-icon-theme'; + +const config: ManifestConfig = { + activeIconPack: 'angular'; + hidesExplorerArrows: true; + folders: { + theme: 'classic'; + associations: {}; + }; + files: { + associations: {}; + }; + languages: { + associations: {}; + }; +}; + +const manifest = generateManifest(config); +``` + +Not all configuration options have to be passed. The `generateManifest` function uses the default configuration options if they are not passed. + +## Icon packs + +The Material Icon Theme provides different icon packs. The icon pack can be changed by setting the `activeIconPack` in the configuration options. To get a list of all available icon packs, the `getIconPacks` function can be used: + +```typescript +import { availableIconPacks, type IconPackValue } from 'material-icon-theme'; + +const iconPacks: Array = availableIconPacks; + +console.log('Available icon packs:', iconPacks); +``` diff --git a/src/module/index.ts b/src/module/index.ts new file mode 100644 index 0000000000..e109f65fc5 --- /dev/null +++ b/src/module/index.ts @@ -0,0 +1,10 @@ +// Everything that is exported from this file will be exported to an npm package +export { + availableIconPacks, + generateManifest, + type FolderThemeName, + type IconAssociations, + type IconPackValue, + type ManifestConfig, + type Manifest, +} from '../core'; diff --git a/src/scripts/contributors/index.ts b/src/scripts/contributors/contributors.ts similarity index 57% rename from src/scripts/contributors/index.ts rename to src/scripts/contributors/contributors.ts index 9c4e8907f1..1728f10a8f 100644 --- a/src/scripts/contributors/index.ts +++ b/src/scripts/contributors/contributors.ts @@ -1,9 +1,9 @@ -import { writeFileSync } from 'fs'; -import { request, RequestOptions } from 'https'; -import { join } from 'path'; -import { Contributor } from '../../models/scripts/contributors/contributor'; +import { join } from 'node:path'; +import axios, { type AxiosRequestConfig } from 'axios'; +import { writeToFile } from '../../core'; import { green, red, yellow } from '../helpers/painter'; import { createScreenshot } from '../helpers/screenshots'; +import type { Contributor } from '../models/scripts/contributors/contributor'; /** * Parse link header @@ -11,9 +11,9 @@ import { createScreenshot } from '../helpers/screenshots'; * @returns Object that contains the page numbers of `prev`, `next` and `last`. */ const parseLinkHeader = (linkHeader: string) => { - const nextPagePattern = new RegExp(/\bpage=(\d)[^>]*>;\srel="next"/); - const lastPagePattern = new RegExp(/\bpage=(\d)[^>]*>;\srel="last"/); - const prevPagePattern = new RegExp(/\bpage=(\d)[^>]*>;\srel="prev"/); + const nextPagePattern = new RegExp(/\bpage=(\d+)>;\srel="next"/); + const lastPagePattern = new RegExp(/\bpage=(\d+)>;\srel="last"/); + const prevPagePattern = new RegExp(/\bpage=(\d+)>;\srel="prev"/); const nextPage = nextPagePattern.exec(linkHeader) ?? ''; const lastPage = lastPagePattern.exec(linkHeader) ?? ''; @@ -29,57 +29,40 @@ const fetchContributors = ( page: string ): Promise<{ contributorsOfPage: Contributor[]; nextPage: string }> => { return new Promise((resolve, reject) => { - const requestOptions: RequestOptions = { - method: 'GET', - hostname: 'api.github.com', - path: `/repos/pkief/vscode-material-icon-theme/contributors?page=${page}`, - port: 443, + const config: AxiosRequestConfig = { + method: 'get', + url: `https://api.github.com/repos/pkief/vscode-material-icon-theme/contributors`, + params: { page }, headers: { - link: 'next', accept: 'application/json', 'User-Agent': 'Contributors script', }, }; - const req = request(requestOptions, (res) => { - const { nextPage, lastPage, prevPage } = parseLinkHeader( - res.headers?.link?.toString() ?? '' - ); - console.log( - '> Material Icon Theme:', - yellow( - `[${page}/${ - lastPage ? lastPage[1] : +prevPage[1] + 1 - }] Loading contributors from GitHub...` - ) - ); - const result: Uint8Array[] = []; - res.on('data', (data: Buffer) => { - result.push(data); - }); - - res.on('end', () => { - try { - const buffer = Buffer.concat(result); - const bufferAsString = buffer.toString('utf8'); - const contributorsOfPage = JSON.parse(bufferAsString); - resolve({ contributorsOfPage, nextPage: nextPage?.[1] }); - } catch (error) { - reject(error); - } + axios + .request(config) + .then((res) => { + const { nextPage, lastPage, prevPage } = parseLinkHeader( + res.headers?.link?.toString() ?? '' + ); + console.log( + '> Material Icon Theme:', + yellow( + `[${page}/${ + lastPage ? lastPage[1] : +prevPage[1] + 1 + }] Loading contributors from GitHub...` + ) + ); + + resolve({ contributorsOfPage: res.data, nextPage: nextPage?.[1] }); + }) + .catch((err) => { + reject(err); }); - }); - - req.on('error', (error) => { - console.error(error); - reject(error); - }); - - req.end(); }); }; -const createContributorsList = (contributors: Contributor[]) => { +const createContributorsList = async (contributors: Contributor[]) => { const list = contributors .map((c) => { return `
  • ${c.login}
  • `; @@ -91,7 +74,7 @@ const createContributorsList = (contributors: Contributor[]) => { const generatedHtml = `${htmlDoctype}${styling}
      ${list}
    `; const outputPath = join(__dirname, 'contributors.html'); - writeFileSync(outputPath, generatedHtml); + await writeToFile(outputPath, generatedHtml); return outputPath; }; @@ -118,7 +101,7 @@ const init = async () => { ); throw Error(); } - const outputPath = createContributorsList(contributorsList); + const outputPath = await createContributorsList(contributorsList); // create the image console.log('> Material Icon Theme:', yellow('Creating image...')); diff --git a/src/scripts/helpers/screenshots.ts b/src/scripts/helpers/screenshots.ts index c277fa31cd..2285aa9e04 100644 --- a/src/scripts/helpers/screenshots.ts +++ b/src/scripts/helpers/screenshots.ts @@ -1,4 +1,4 @@ -import { join } from 'path'; +import { join } from 'node:path'; import Puppeteer from 'puppeteer'; /** @@ -7,9 +7,10 @@ import Puppeteer from 'puppeteer'; * @param fileName Name of the output image */ export const createScreenshot = async (filePath: string, fileName: string) => { + const browser = await Puppeteer.launch(); + const htmlFilePath = join('file:', filePath); + try { - const htmlFilePath = join('file:', filePath); - const browser = await Puppeteer.launch(); const page = await browser.newPage(); await page.setViewport({ height: 10, @@ -28,5 +29,9 @@ export const createScreenshot = async (filePath: string, fileName: string) => { } catch (error) { console.error(error); throw Error('Could not create screenshot for a preview'); + } finally { + const pages = await browser.pages(); + + for (const page of pages) await page.close(); } }; diff --git a/src/scripts/icons/checks/checkIconAvailability.ts b/src/scripts/icons/checks/checkIconAvailability.ts index 01edffbc44..25badd7201 100644 --- a/src/scripts/icons/checks/checkIconAvailability.ts +++ b/src/scripts/icons/checks/checkIconAvailability.ts @@ -1,21 +1,20 @@ -import { readdir } from 'fs'; -import { join, parse } from 'path'; -import { - DefaultIcon, - FileIcon, - FolderIcon, - FolderTheme, -} from '../../../models/index'; -import { green, red } from '../../helpers/painter'; -import { similarity } from '../../helpers/similarity'; +import { readdir } from 'node:fs'; +import { join, parse } from 'node:path'; import { + type CloneOptions, + type DefaultIcon, + type FileIcon, + type FolderIcon, + type FolderTheme, fileIcons, folderIcons, highContrastColorFileEnding, languageIcons, lightColorFileEnding, openedFolder, -} from './../../../icons'; +} from '../../../core'; +import { green, red } from '../../helpers/painter'; +import { similarity } from '../../helpers/similarity'; /** * Defines the folder where all icon files are located. @@ -27,6 +26,12 @@ const folderPath = join('icons'); */ const availableIcons: Record = {}; +/** + * Utility type that represents a File or Folder icon that has a clone property + * defined. + */ +type CloneIcon = (FileIcon & FolderIcon) & { clone: CloneOptions }; + /** * Save the misconfigured icons. */ @@ -70,9 +75,9 @@ export const check = () => readdir(folderPath, fsReadAllIconFiles); */ const checkFileIcons = () => { [...fileIcons.icons, fileIcons.defaultIcon].forEach((icon) => { - isIconAvailable(icon, IconType.fileIcons, IconColor.default); - isIconAvailable(icon, IconType.fileIcons, IconColor.light); - isIconAvailable(icon, IconType.fileIcons, IconColor.highContrast); + isIconAvailable(icon, IconType.FileIcons, IconColor.Default); + isIconAvailable(icon, IconType.FileIcons, IconColor.Light); + isIconAvailable(icon, IconType.FileIcons, IconColor.HighContrast); }); }; @@ -82,11 +87,16 @@ const isIconAvailable = ( iconColor: IconColor, hasOpenedFolder?: boolean ) => { - let iconName = `${icon.name}${hasOpenedFolder ? openedFolder : ''}`; - if (icon.light && iconColor === IconColor.light) { + const isClone = isCloneIcon(icon); + + let iconName = isClone + ? getCloneBaseName(icon, iconType, hasOpenedFolder) + : `${icon.name}${hasOpenedFolder ? openedFolder : ''}`; + + if (!isClone && icon.light && iconColor === IconColor.Light) { iconName += lightColorFileEnding; } - if (icon.highContrast && iconColor === IconColor.highContrast) { + if (!isClone && icon.highContrast && iconColor === IconColor.HighContrast) { iconName += highContrastColorFileEnding; } @@ -98,6 +108,39 @@ const isIconAvailable = ( } }; +/** + * Type guard to check if the icon is a clone icon + */ +const isCloneIcon = ( + icon: FileIcon | FolderIcon | DefaultIcon +): icon is CloneIcon => { + return ( + (icon as CloneIcon).clone && + (icon as FileIcon | FolderIcon).clone?.base !== undefined + ); +}; + +/** + * Get the base file name of a clone icon. + */ +const getCloneBaseName = ( + icon: CloneIcon, + iconType: IconType, + hasOpenedFolder?: boolean +) => { + const clone = icon.clone; + const folderBase = + iconType === IconType.FolderIcons + ? clone.base === 'folder' + ? 'folder' + : clone.base.startsWith('folder-') + ? clone.base + : `folder-${clone?.base}` + : clone.base; + + return `${folderBase}${hasOpenedFolder ? openedFolder : ''}`; +}; + /** * Check if the folder icons from the configuration are available on the file system. */ @@ -107,15 +150,15 @@ const checkFolderIcons = () => { .reduce((a, b) => a.concat(b)) .forEach((icon) => { if (icon) { - isIconAvailable(icon, IconType.folderIcons, IconColor.default); - isIconAvailable(icon, IconType.folderIcons, IconColor.default, true); - isIconAvailable(icon, IconType.folderIcons, IconColor.light); - isIconAvailable(icon, IconType.folderIcons, IconColor.light, true); - isIconAvailable(icon, IconType.folderIcons, IconColor.highContrast); + isIconAvailable(icon, IconType.FolderIcons, IconColor.Default); + isIconAvailable(icon, IconType.FolderIcons, IconColor.Default, true); + isIconAvailable(icon, IconType.FolderIcons, IconColor.Light); + isIconAvailable(icon, IconType.FolderIcons, IconColor.Light, true); + isIconAvailable(icon, IconType.FolderIcons, IconColor.HighContrast); isIconAvailable( icon, - IconType.folderIcons, - IconColor.highContrast, + IconType.FolderIcons, + IconColor.HighContrast, true ); } @@ -135,9 +178,9 @@ const getAllFolderIcons = (theme: FolderTheme) => { const checkLanguageIcons = () => { languageIcons.forEach((lang) => { const icon = lang.icon; - isIconAvailable(icon, IconType.languageIcons, IconColor.default); - isIconAvailable(icon, IconType.languageIcons, IconColor.light); - isIconAvailable(icon, IconType.languageIcons, IconColor.highContrast); + isIconAvailable(icon, IconType.LanguageIcons, IconColor.Default); + isIconAvailable(icon, IconType.LanguageIcons, IconColor.Light); + isIconAvailable(icon, IconType.LanguageIcons, IconColor.HighContrast); }); }; @@ -203,13 +246,13 @@ const logIconInformation = (wrongIcons: string[], title: string) => { }; enum IconType { - fileIcons = 'fileIcons', - folderIcons = 'folderIcons', - languageIcons = 'languageIcons', + FileIcons = 'fileIcons', + FolderIcons = 'folderIcons', + LanguageIcons = 'languageIcons', } enum IconColor { - default = 'default', - light = 'light', - highContrast = 'highContrast', + Default = 'default', + Light = 'light', + HighContrast = 'highContrast', } diff --git a/src/scripts/icons/checks/checkIconConflicts.ts b/src/scripts/icons/checks/checkIconConflicts.ts index d1a2db04b1..7629d836a8 100644 --- a/src/scripts/icons/checks/checkIconConflicts.ts +++ b/src/scripts/icons/checks/checkIconConflicts.ts @@ -1,5 +1,5 @@ +import { fileIcons, folderIcons, languageIcons } from '../../../core'; import { green, red } from '../../helpers/painter'; -import { fileIcons, folderIcons, languageIcons } from './../../../icons'; /** * Store all icons that are wrong configured @@ -137,7 +137,10 @@ const handleErrors = () => { } }; -const printErrorMessage = (icons: any, definitionType: string) => { +const printErrorMessage = ( + icons: Record, + definitionType: string +) => { const keys = Object.keys(icons); keys.forEach((key) => { const conflictIcons = icons[key]; diff --git a/src/scripts/icons/checks/checkIconUsage.ts b/src/scripts/icons/checks/checkIconUsage.ts index fb8f362d12..9a04eb0983 100644 --- a/src/scripts/icons/checks/checkIconUsage.ts +++ b/src/scripts/icons/checks/checkIconUsage.ts @@ -1,15 +1,18 @@ -import { readdir } from 'fs'; -import { join, parse } from 'path'; -import { DefaultIcon, FolderIcon, FolderTheme } from '../../../models/index'; -import { green, red } from '../../helpers/painter'; +import { readdir } from 'node:fs'; +import { join, parse } from 'node:path'; + import { + type DefaultIcon, + type FolderIcon, + type FolderTheme, fileIcons, folderIcons, highContrastColorFileEnding, languageIcons, lightColorFileEnding, openedFolder, -} from './../../../icons'; +} from '../../../core'; +import { green, red } from '../../helpers/painter'; /** * Defines the folder where all icon files are located. @@ -34,7 +37,7 @@ const fsReadAllIconFiles = ( files.forEach((file) => { const fileName = file; - const iconName = parse(file).name; + const iconName = parse(file).name.replace('.clone', ''); availableIcons[iconName] = fileName; }); diff --git a/src/scripts/icons/checks/index.ts b/src/scripts/icons/checks/run.ts similarity index 100% rename from src/scripts/icons/checks/index.ts rename to src/scripts/icons/checks/run.ts diff --git a/src/scripts/icons/generateClones.ts b/src/scripts/icons/generateClones.ts new file mode 100644 index 0000000000..a76cc138fc --- /dev/null +++ b/src/scripts/icons/generateClones.ts @@ -0,0 +1,19 @@ +import { + fileIcons, + folderIcons, + generateConfiguredClones, + generateManifest, +} from '../../core'; + +/** + * This file is meant to be executed exclusively by npm scripts. + */ +try { + console.log('Generating icon clones...'); + const manifest = generateManifest(); + generateConfiguredClones(folderIcons, manifest); + generateConfiguredClones(fileIcons, manifest); +} catch (error) { + console.error(error); + throw Error('Could not generate clones!'); +} diff --git a/src/scripts/icons/generateJson.ts b/src/scripts/icons/generateJson.ts index 7c293f2378..cbcb921f1c 100644 --- a/src/scripts/icons/generateJson.ts +++ b/src/scripts/icons/generateJson.ts @@ -1,11 +1,24 @@ /** * This file is meant to be executed exclusively by npm scripts. */ -import { createIconFile } from './../../icons/index'; + +import { + generateFileIcons, + generateFolderIcons, + generateManifest, + getDefaultConfig, +} from '../../core'; try { - createIconFile(); + // Generate default file and folder icons + const config = getDefaultConfig(); + generateFileIcons(config.files.color, config.opacity, config.saturation); + generateFolderIcons(config.folders.color, config.opacity, config.saturation); + + const manifest = generateManifest(); + // Print manifest to stdout so that scripts can consume it + console.log(JSON.stringify(manifest)); } catch (error) { console.error(error); - throw Error('Could not create icon file!'); + throw Error('An error while generating the manifest occurred!'); } diff --git a/src/scripts/models/scripts/contributors/contributor.ts b/src/scripts/models/scripts/contributors/contributor.ts new file mode 100644 index 0000000000..30e7b87bb2 --- /dev/null +++ b/src/scripts/models/scripts/contributors/contributor.ts @@ -0,0 +1,5 @@ +export type Contributor = { + login: string; + // biome-ignore lint/style/useNamingConvention: + avatar_url: string; +}; diff --git a/src/models/scripts/contributors/contributorsConfig.ts b/src/scripts/models/scripts/contributors/contributorsConfig.ts similarity index 81% rename from src/models/scripts/contributors/contributorsConfig.ts rename to src/scripts/models/scripts/contributors/contributorsConfig.ts index 0c14d201a1..f81ecff22d 100644 --- a/src/models/scripts/contributors/contributorsConfig.ts +++ b/src/scripts/models/scripts/contributors/contributorsConfig.ts @@ -1,4 +1,4 @@ -export interface ContributorsConfig { +export type ContributorsConfig = { /** Owner of the repository */ owner: string; @@ -7,4 +7,4 @@ export interface ContributorsConfig { /** Size of a contributor's profile image in pixels */ imageSize: number; -} +}; diff --git a/src/scripts/module/prepare.ts b/src/scripts/module/prepare.ts new file mode 100644 index 0000000000..efd506e338 --- /dev/null +++ b/src/scripts/module/prepare.ts @@ -0,0 +1,35 @@ +import { copyFile } from 'node:fs/promises'; +import { join } from 'node:path'; +import { spawn } from 'bun'; + +/** + * Prepare the module for publishing. + * + * This script sets the main field in the package.json to the correct path and copies the README.md to the root directory. + */ +const prepareModule = async () => { + try { + // Set the main field in the package.json to the correct path + const setMain = spawn([ + 'npm', + 'pkg', + 'set', + 'main=./dist/module/index.cjs', + ]); + await setMain; + + // Remove vscode specific fields from package.json + const removeBrowser = spawn(['npm', 'pkg', 'delete', 'browser']); + await removeBrowser; + + //copy readme into root directory + const readmePath = join(process.cwd(), 'src', 'module', 'README.md'); + console.log('Copying README.md to root directory...'); + await copyFile(readmePath, 'README.md'); + } catch (error) { + console.error('Error preparing the module:', error); + process.exit(1); + } +}; + +prepareModule(); diff --git a/src/scripts/preview/preview.ts b/src/scripts/preview/preview.ts index e6c8aaef7d..abae098f98 100644 --- a/src/scripts/preview/preview.ts +++ b/src/scripts/preview/preview.ts @@ -1,5 +1,5 @@ -import { writeFileSync } from 'fs'; -import { join } from 'path'; +import { join } from 'node:path'; +import { writeToFile } from '../../core'; import { green, red } from '../helpers/painter'; import { createScreenshot } from '../helpers/screenshots'; import { toTitleCase } from './../helpers/titleCase'; @@ -29,8 +29,8 @@ const createHTMLTableBodyRows = (items: IconDefinition[][]) => { (icon) => ` ${
-          icon.label
-        } + icon.label + }"> ${toTitleCase(icon.label)} ` @@ -64,7 +64,7 @@ const createPreviewTable = (icons: IconDefinition[][], size: number) => { return table; }; -const savePreview = ( +const savePreview = async ( fileName: string, size: number, icons: IconDefinition[][] @@ -72,7 +72,7 @@ const savePreview = ( const filePath = join(__dirname, fileName + '.html'); // write the html file with the icon table - writeFileSync(filePath, createPreviewTable(icons, size)); + await writeToFile(filePath, createPreviewTable(icons, size)); // create the image createScreenshot(filePath, fileName) @@ -136,10 +136,10 @@ export const generatePreview = ( ); }; -interface IconDefinition { +type IconDefinition = { iconName: string; label: string; -} +}; /** * Trim the list of icons into the matrix diff --git a/src/scripts/preview/index.ts b/src/scripts/preview/run.ts similarity index 66% rename from src/scripts/preview/index.ts rename to src/scripts/preview/run.ts index c30c5afdc4..d96bc62150 100644 --- a/src/scripts/preview/index.ts +++ b/src/scripts/preview/run.ts @@ -1,6 +1,6 @@ -import { fileIcons } from './../../icons/fileIcons'; -import { folderIcons } from './../../icons/folderIcons'; -import { languageIcons } from './../../icons/languageIcons'; +import { fileIcons } from '../../core/icons/fileIcons'; +import { folderIcons } from '../../core/icons/folderIcons'; +import { languageIcons } from '../../core/icons/languageIcons'; import { generatePreview } from './preview'; const filterDuplicates = (icons: string[]) => { @@ -9,6 +9,8 @@ const filterDuplicates = (icons: string[]) => { const basicFileIcons = filterDuplicates( fileIcons.icons + // remove icons that are clones + .filter((i) => i.clone === undefined) .map((i) => i.name) // merge language icons .concat(languageIcons.map((i) => i.icon.name)) @@ -19,7 +21,12 @@ const folderThemes = filterDuplicates( .map((theme) => { const folders = []; if (theme.icons && theme.icons.length > 0) { - folders.push(...theme.icons.map((i) => i.name)); + folders.push( + ...theme.icons + // remove icons that are clones + .filter((i) => i.clone === undefined) + .map((i) => i.name) + ); } return [...folders]; }) diff --git a/src/scripts/svg/checkSvgColors.ts b/src/scripts/svg/checkSvgColors.ts new file mode 100644 index 0000000000..6818349daf --- /dev/null +++ b/src/scripts/svg/checkSvgColors.ts @@ -0,0 +1,43 @@ +import { spawn } from 'bun'; + +/** + * Check changed (not yet committed) SVG files for correct colors. + */ +const checkColors = async () => { + try { + // Execute Git command to get list of modified SVG files + const gitProcess = spawn([ + 'git', + 'ls-files', + '-mo', + '--exclude-standard', + '--', + '*.svg', + ]); + const { stdout } = await gitProcess; + const output = await new Response(stdout).text(); + const svgFiles = output.trim().split('\n').join(' '); + console.log('SVG files to check:', svgFiles); + + if (svgFiles) { + const command = [ + 'svg-color-linter', + '--colors', + 'material-colors.yml', + ...svgFiles.split(' '), + ]; + const linterProcess = spawn(command); + const { stdout } = await linterProcess; + const linterOutput = await new Response(stdout).text(); + + console.log('Colors check output:\n\n', linterOutput); + } else { + console.log('No SVG files to check.'); + } + } catch (error) { + console.error('Error checking colors:', error); + process.exit(1); + } +}; + +checkColors(); diff --git a/src/test/runTest.ts b/src/test/runTest.ts deleted file mode 100644 index f8a69a0b1e..0000000000 --- a/src/test/runTest.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { resolve } from 'path'; -import { runTests } from 'vscode-test'; - -const main = async () => { - try { - // The folder containing the Extension Manifest package.json - // Passed to `--extensionDevelopmentPath` - const extensionDevelopmentPath = resolve(__dirname, '../../'); - - // The path to the extension test script - // Passed to --extensionTestsPath - const extensionTestsPath = resolve(__dirname, './spec/index'); - - // Download VS Code, unzip it and run the integration test - await runTests({ - extensionDevelopmentPath, - extensionTestsPath, - launchArgs: ['--disable-gpu', '--disable-workspace-trust'], - }); - } catch (err) { - console.error('Failed to run tests'); - process.exit(1); - } -}; - -main(); diff --git a/src/test/spec/i18n/i18n.spec.ts b/src/test/spec/i18n/i18n.spec.ts deleted file mode 100644 index 70585867fd..0000000000 --- a/src/test/spec/i18n/i18n.spec.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { equal } from 'assert'; -import { getObjectPropertyValue } from '../../../helpers/objects'; -import { getTranslationValue, initTranslations, replace } from '../../../i18n'; -import { Translation } from '../../../models'; - -describe('i18n', () => { - it('should initialize translations', () => { - return initTranslations(); - }); - - it('should translate key', () => { - equal( - getTranslationValue('activate', { activate: 'b' } as Translation), - 'b' - ); - }); - - it('should return undefined if translation is not defined', () => { - equal( - getTranslationValue('activate', {} as Translation, {} as Translation), - undefined - ); - }); - - it('should use fallback if translation is not defined', () => { - equal( - getTranslationValue( - 'activate', - {} as Translation, - { activate: 'fb' } as Translation - ), - 'fb' - ); - }); - - it('should get the correct translation value of the translation object', () => { - const translation = { - a: { - b: { - c: 'c', - }, - }, - }; - equal(getObjectPropertyValue(translation, 'a.b.c'), 'c'); - }); - - it('should use placeholder in translation', () => { - equal(replace('%0 with placeholder', 'test'), 'test with placeholder'); - equal( - replace('%0 with %1', 'test', 'placeholder'), - 'test with placeholder' - ); - }); -}); diff --git a/src/test/spec/icons/fileIcons.spec.ts b/src/test/spec/icons/fileIcons.spec.ts deleted file mode 100644 index ee3503e4d2..0000000000 --- a/src/test/spec/icons/fileIcons.spec.ts +++ /dev/null @@ -1,250 +0,0 @@ -import { deepStrictEqual } from 'assert'; -import merge from 'lodash.merge'; -import { - getDefaultIconOptions, - loadFileIconDefinitions, -} from '../../../icons/index'; -import { FileIcons, IconConfiguration, IconPack } from '../../../models/index'; - -describe('file icons', () => { - let expectedConfig: IconConfiguration; - - beforeEach(() => { - expectedConfig = merge({}, new IconConfiguration(), { - options: getDefaultIconOptions(), - }); - }); - - it('should configure icon definitions', () => { - const fileIcons: FileIcons = { - defaultIcon: { name: 'file' }, - icons: [ - { - name: 'angular', - fileNames: ['.angular-cli.json', 'angular-cli.json'], - enabledFor: [IconPack.Angular, IconPack.Ngrx], - }, - { - name: 'javascript', - fileNames: ['filename.js'], - fileExtensions: ['js'], - }, - ], - }; - const options = getDefaultIconOptions(); - const iconConfig = merge({}, new IconConfiguration(), { options }); - const iconDefinitions = loadFileIconDefinitions( - fileIcons, - iconConfig, - options - ); - - expectedConfig.iconDefinitions = { - angular: { - iconPath: './../icons/angular.svg', - }, - javascript: { - iconPath: './../icons/javascript.svg', - }, - file: { - iconPath: './../icons/file.svg', - }, - }; - expectedConfig.file = 'file'; - expectedConfig.fileExtensions = { - js: 'javascript', - }; - expectedConfig.fileNames = { - '.angular-cli.json': 'angular', - 'angular-cli.json': 'angular', - 'filename.js': 'javascript', - }; - - deepStrictEqual(iconDefinitions, expectedConfig); - }); - - it('should disable icon packs', () => { - const fileIcons: FileIcons = { - defaultIcon: { name: 'file' }, - icons: [ - { - name: 'angular', - fileNames: ['.angular-cli.json', 'angular-cli.json'], - enabledFor: [IconPack.Ngrx], - }, - { - name: 'javascript', - fileNames: ['filename.js'], - fileExtensions: ['js'], - }, - ], - }; - - const options = getDefaultIconOptions(); - options.activeIconPack = ''; - const iconConfig = merge({}, new IconConfiguration(), { options }); - const iconDefinitions = loadFileIconDefinitions( - fileIcons, - iconConfig, - options - ); - - expectedConfig.iconDefinitions = { - file: { - iconPath: './../icons/file.svg', - }, - javascript: { - iconPath: './../icons/javascript.svg', - }, - }; - expectedConfig.file = 'file'; - expectedConfig.fileExtensions = { - js: 'javascript', - }; - expectedConfig.fileNames = { - 'filename.js': 'javascript', - }; - - // disable default icon pack by using empty string - expectedConfig.options!.activeIconPack = ''; - - deepStrictEqual(iconDefinitions, expectedConfig); - }); - - it('should configure custom icon associations', () => { - const fileIcons: FileIcons = { - defaultIcon: { name: 'file' }, - icons: [ - { - name: 'angular', - fileNames: ['.angular-cli.json', 'angular-cli.json'], - }, - { - name: 'javascript', - fileNames: ['filename.js'], - fileExtensions: ['js'], - }, - ], - }; - const options = getDefaultIconOptions(); - options.files.associations = { - '*.sample.ts': 'angular', - 'sample.js': 'javascript', - }; - const iconConfig = merge({}, new IconConfiguration(), { options }); - const iconDefinitions = loadFileIconDefinitions( - fileIcons, - iconConfig, - options - ); - - expectedConfig.iconDefinitions = { - file: { - iconPath: './../icons/file.svg', - }, - javascript: { - iconPath: './../icons/javascript.svg', - }, - angular: { - iconPath: './../icons/angular.svg', - }, - }; - expectedConfig.file = 'file'; - expectedConfig.fileExtensions = { - js: 'javascript', - 'sample.ts': 'angular', - }; - expectedConfig.fileNames = { - '.angular-cli.json': 'angular', - 'angular-cli.json': 'angular', - 'sample.js': 'javascript', - 'filename.js': 'javascript', - }; - expectedConfig.options!.files!.associations = { - '*.sample.ts': 'angular', - 'sample.js': 'javascript', - }; - - deepStrictEqual(iconDefinitions, expectedConfig); - }); - - it('should configure language icons for light and high contrast', () => { - const fileIcons: FileIcons = { - defaultIcon: { name: 'file', light: true, highContrast: true }, - icons: [ - { - name: 'angular', - fileNames: ['.angular-cli.json', 'angular-cli.json'], - enabledFor: [IconPack.Angular, IconPack.Ngrx], - }, - { - name: 'javascript', - fileNames: ['filename.js'], - fileExtensions: ['js'], - light: true, - highContrast: true, - }, - ], - }; - const options = getDefaultIconOptions(); - const iconConfig = merge({}, new IconConfiguration(), { options }); - const iconDefinitions = loadFileIconDefinitions( - fileIcons, - iconConfig, - options - ); - /* eslint-disable camelcase */ - expectedConfig.iconDefinitions = { - file: { - iconPath: './../icons/file.svg', - }, - file_light: { - iconPath: './../icons/file_light.svg', - }, - file_highContrast: { - iconPath: './../icons/file_highContrast.svg', - }, - javascript: { - iconPath: './../icons/javascript.svg', - }, - javascript_light: { - iconPath: './../icons/javascript_light.svg', - }, - javascript_highContrast: { - iconPath: './../icons/javascript_highContrast.svg', - }, - angular: { - iconPath: './../icons/angular.svg', - }, - }; - expectedConfig.file = 'file'; - expectedConfig.fileExtensions = { - js: 'javascript', - }; - expectedConfig.light = { - file: 'file_light', - fileExtensions: { - js: 'javascript_light', - }, - fileNames: { - 'filename.js': 'javascript_light', - }, - }; - expectedConfig.highContrast = { - file: 'file_highContrast', - fileExtensions: { - js: 'javascript_highContrast', - }, - fileNames: { - 'filename.js': 'javascript_highContrast', - }, - }; - expectedConfig.fileNames = { - '.angular-cli.json': 'angular', - 'angular-cli.json': 'angular', - 'filename.js': 'javascript', - }; - /* eslint-enable camelcase */ - deepStrictEqual(iconDefinitions, expectedConfig); - }); -}); diff --git a/src/test/spec/icons/folderIcons.spec.ts b/src/test/spec/icons/folderIcons.spec.ts deleted file mode 100644 index db05824e6b..0000000000 --- a/src/test/spec/icons/folderIcons.spec.ts +++ /dev/null @@ -1,418 +0,0 @@ -import { deepStrictEqual } from 'assert'; -import merge from 'lodash.merge'; -import { - getDefaultIconOptions, - loadFolderIconDefinitions, -} from '../../../icons/index'; -import { - FolderTheme, - IconConfiguration, - IconPack, -} from '../../../models/index'; - -describe('folder icons', () => { - let folderIcons: FolderTheme[]; - let expectedConfig: IconConfiguration; - - before(() => { - folderIcons = [ - { - name: 'specific', - defaultIcon: { name: 'folder' }, - rootFolder: { name: 'folder-root' }, - icons: [ - { name: 'folder-src', folderNames: ['src', 'source'] }, - { - name: 'folder-angular', - folderNames: ['angular', 'ng'], - enabledFor: [IconPack.Angular, IconPack.Ngrx], - }, - ], - }, - { - name: 'blue', - defaultIcon: { name: 'folder-blue' }, - icons: [{ name: 'folder-blue-src', folderNames: ['src', 'source'] }], - }, - { name: 'classic', defaultIcon: { name: 'folder' } }, - { name: 'none', defaultIcon: { name: '' } }, - ]; - }); - - beforeEach(() => { - expectedConfig = merge({}, new IconConfiguration(), { - options: getDefaultIconOptions(), - }); - }); - - it('should configure icon definitions', () => { - const options = getDefaultIconOptions(); - const iconConfig = merge({}, new IconConfiguration(), { options }); - const iconDefinitions = loadFolderIconDefinitions( - folderIcons, - iconConfig, - options - ); - - expectedConfig.iconDefinitions = { - folder: { - iconPath: './../icons/folder.svg', - }, - 'folder-open': { - iconPath: './../icons/folder-open.svg', - }, - 'folder-root': { - iconPath: './../icons/folder-root.svg', - }, - 'folder-root-open': { - iconPath: './../icons/folder-root-open.svg', - }, - 'folder-src': { - iconPath: './../icons/folder-src.svg', - }, - 'folder-src-open': { - iconPath: './../icons/folder-src-open.svg', - }, - 'folder-angular': { - iconPath: './../icons/folder-angular.svg', - }, - 'folder-angular-open': { - iconPath: './../icons/folder-angular-open.svg', - }, - }; - expectedConfig.folder = 'folder'; - expectedConfig.folderExpanded = 'folder-open'; - expectedConfig.rootFolder = 'folder-root'; - expectedConfig.rootFolderExpanded = 'folder-root-open'; - expectedConfig.folderNames = { - src: 'folder-src', - source: 'folder-src', - angular: 'folder-angular', - ng: 'folder-angular', - }; - expectedConfig.folderNamesExpanded = { - src: 'folder-src-open', - source: 'folder-src-open', - angular: 'folder-angular-open', - ng: 'folder-angular-open', - }; - expectedConfig.hidesExplorerArrows = false; - - deepStrictEqual(iconDefinitions, expectedConfig); - }); - - it('should deactivate folder icons', () => { - const options = getDefaultIconOptions(); - options.folders.theme = 'none'; - const iconConfig = merge({}, new IconConfiguration(), { options }); - const iconDefinitions = loadFolderIconDefinitions( - folderIcons, - iconConfig, - options - ); - - expectedConfig.iconDefinitions = {}; - expectedConfig.folderNames = {}; - expectedConfig.folderNamesExpanded = {}; - expectedConfig.hidesExplorerArrows = false; - expectedConfig.options!.folders!.theme = 'none'; - - deepStrictEqual(iconDefinitions, expectedConfig); - }); - - it('should enable folder theme', () => { - const options = getDefaultIconOptions(); - options.folders.theme = 'blue'; - const iconConfig = merge({}, new IconConfiguration(), { options }); - const iconDefinitions = loadFolderIconDefinitions( - folderIcons, - iconConfig, - options - ); - - expectedConfig.iconDefinitions = { - 'folder-blue': { - iconPath: './../icons/folder-blue.svg', - }, - 'folder-blue-open': { - iconPath: './../icons/folder-blue-open.svg', - }, - 'folder-blue-src': { - iconPath: './../icons/folder-blue-src.svg', - }, - 'folder-blue-src-open': { - iconPath: './../icons/folder-blue-src-open.svg', - }, - }; - expectedConfig.folder = 'folder-blue'; - expectedConfig.folderExpanded = 'folder-blue-open'; - expectedConfig.rootFolder = 'folder-blue'; - expectedConfig.rootFolderExpanded = 'folder-blue-open'; - expectedConfig.folderNames = { - src: 'folder-blue-src', - source: 'folder-blue-src', - }; - expectedConfig.folderNamesExpanded = { - src: 'folder-blue-src-open', - source: 'folder-blue-src-open', - }; - expectedConfig.hidesExplorerArrows = false; - expectedConfig.options!.folders!.theme = 'blue'; - - deepStrictEqual(iconDefinitions, expectedConfig); - }); - - it('should configure custom icon associations', () => { - const options = getDefaultIconOptions(); - options.folders.associations = { - sample: 'src', - }; - const iconConfig = merge({}, new IconConfiguration(), { options }); - const iconDefinitions = loadFolderIconDefinitions( - folderIcons, - iconConfig, - options - ); - expectedConfig.iconDefinitions = { - folder: { - iconPath: './../icons/folder.svg', - }, - 'folder-open': { - iconPath: './../icons/folder-open.svg', - }, - 'folder-root': { - iconPath: './../icons/folder-root.svg', - }, - 'folder-root-open': { - iconPath: './../icons/folder-root-open.svg', - }, - 'folder-src': { - iconPath: './../icons/folder-src.svg', - }, - 'folder-src-open': { - iconPath: './../icons/folder-src-open.svg', - }, - 'folder-angular': { - iconPath: './../icons/folder-angular.svg', - }, - 'folder-angular-open': { - iconPath: './../icons/folder-angular-open.svg', - }, - }; - expectedConfig.folder = 'folder'; - expectedConfig.folderExpanded = 'folder-open'; - expectedConfig.rootFolder = 'folder-root'; - expectedConfig.rootFolderExpanded = 'folder-root-open'; - expectedConfig.folderNames = { - src: 'folder-src', - source: 'folder-src', - angular: 'folder-angular', - ng: 'folder-angular', - sample: 'folder-src', - }; - expectedConfig.folderNamesExpanded = { - src: 'folder-src-open', - source: 'folder-src-open', - angular: 'folder-angular-open', - ng: 'folder-angular-open', - sample: 'folder-src-open', - }; - expectedConfig.hidesExplorerArrows = false; - expectedConfig.options!.folders!.associations = { - sample: 'src', - }; - - deepStrictEqual(iconDefinitions, expectedConfig); - }); - - it('should disable icon packs', () => { - const options = getDefaultIconOptions(); - options.activeIconPack = ''; - const iconConfig = merge({}, new IconConfiguration(), { options }); - const iconDefinitions = loadFolderIconDefinitions( - folderIcons, - iconConfig, - options - ); - expectedConfig.iconDefinitions = { - folder: { - iconPath: './../icons/folder.svg', - }, - 'folder-open': { - iconPath: './../icons/folder-open.svg', - }, - 'folder-root': { - iconPath: './../icons/folder-root.svg', - }, - 'folder-root-open': { - iconPath: './../icons/folder-root-open.svg', - }, - 'folder-src': { - iconPath: './../icons/folder-src.svg', - }, - 'folder-src-open': { - iconPath: './../icons/folder-src-open.svg', - }, - }; - expectedConfig.folder = 'folder'; - expectedConfig.folderExpanded = 'folder-open'; - expectedConfig.rootFolder = 'folder-root'; - expectedConfig.rootFolderExpanded = 'folder-root-open'; - expectedConfig.folderNames = { - src: 'folder-src', - source: 'folder-src', - }; - expectedConfig.folderNamesExpanded = { - src: 'folder-src-open', - source: 'folder-src-open', - }; - expectedConfig.hidesExplorerArrows = false; - - // disable default icon pack by using empty string - expectedConfig.options!.activeIconPack = ''; - - deepStrictEqual(iconDefinitions, expectedConfig); - }); - - it('should configure folder icons for light and high contrast', () => { - const options = getDefaultIconOptions(); - const lightHighContrastFolderIcons: FolderTheme[] = [ - { - name: 'specific', - defaultIcon: { name: 'folder', light: true, highContrast: true }, - rootFolder: { name: 'folder-root', light: true, highContrast: true }, - icons: [ - { - name: 'folder-src', - folderNames: ['src', 'source'], - light: true, - highContrast: true, - }, - ], - }, - ]; - const iconConfig = merge({}, new IconConfiguration(), { options }); - const iconDefinitions = loadFolderIconDefinitions( - lightHighContrastFolderIcons, - iconConfig, - options - ); - /* eslint-disable camelcase */ - expectedConfig.iconDefinitions = { - folder: { - iconPath: './../icons/folder.svg', - }, - 'folder-open': { - iconPath: './../icons/folder-open.svg', - }, - folder_light: { - iconPath: './../icons/folder_light.svg', - }, - 'folder-open_light': { - iconPath: './../icons/folder-open_light.svg', - }, - folder_highContrast: { - iconPath: './../icons/folder_highContrast.svg', - }, - 'folder-open_highContrast': { - iconPath: './../icons/folder-open_highContrast.svg', - }, - 'folder-root': { - iconPath: './../icons/folder-root.svg', - }, - 'folder-root-open': { - iconPath: './../icons/folder-root-open.svg', - }, - 'folder-root_light': { - iconPath: './../icons/folder-root_light.svg', - }, - 'folder-root-open_light': { - iconPath: './../icons/folder-root-open_light.svg', - }, - 'folder-root_highContrast': { - iconPath: './../icons/folder-root_highContrast.svg', - }, - 'folder-root-open_highContrast': { - iconPath: './../icons/folder-root-open_highContrast.svg', - }, - 'folder-src': { - iconPath: './../icons/folder-src.svg', - }, - 'folder-src-open': { - iconPath: './../icons/folder-src-open.svg', - }, - 'folder-src_light': { - iconPath: './../icons/folder-src_light.svg', - }, - 'folder-src-open_light': { - iconPath: './../icons/folder-src-open_light.svg', - }, - 'folder-src_highContrast': { - iconPath: './../icons/folder-src_highContrast.svg', - }, - 'folder-src-open_highContrast': { - iconPath: './../icons/folder-src-open_highContrast.svg', - }, - }; - expectedConfig.folder = 'folder'; - expectedConfig.folderExpanded = 'folder-open'; - expectedConfig.rootFolder = 'folder-root'; - expectedConfig.rootFolderExpanded = 'folder-root-open'; - expectedConfig.folderNames = { - src: 'folder-src', - source: 'folder-src', - }; - expectedConfig.folderNamesExpanded = { - src: 'folder-src-open', - source: 'folder-src-open', - }; - expectedConfig.light = { - fileExtensions: {}, - fileNames: {}, - folder: 'folder_light', - folderExpanded: 'folder-open_light', - rootFolder: 'folder-root_light', - rootFolderExpanded: 'folder-root-open_light', - folderNames: { - src: 'folder-src_light', - source: 'folder-src_light', - }, - folderNamesExpanded: { - src: 'folder-src-open_light', - source: 'folder-src-open_light', - }, - }; - expectedConfig.highContrast = { - fileExtensions: {}, - fileNames: {}, - folder: 'folder_highContrast', - folderExpanded: 'folder-open_highContrast', - rootFolder: 'folder-root_highContrast', - rootFolderExpanded: 'folder-root-open_highContrast', - folderNames: { - src: 'folder-src_highContrast', - source: 'folder-src_highContrast', - }, - folderNamesExpanded: { - src: 'folder-src-open_highContrast', - source: 'folder-src-open_highContrast', - }, - }; - expectedConfig.hidesExplorerArrows = false; - /* eslint-enable camelcase */ - deepStrictEqual(iconDefinitions, expectedConfig); - }); - - it('should hide explorer arrows', () => { - const options = getDefaultIconOptions(); - options.hidesExplorerArrows = true; - const iconConfig = merge({}, new IconConfiguration(), { options }); - const iconDefinitions = loadFolderIconDefinitions( - folderIcons, - iconConfig, - options - ); - - deepStrictEqual(iconDefinitions.hidesExplorerArrows, true); - }); -}); diff --git a/src/test/spec/index.ts b/src/test/spec/index.ts deleted file mode 100644 index aaf8c22a1b..0000000000 --- a/src/test/spec/index.ts +++ /dev/null @@ -1,36 +0,0 @@ -import glob from 'glob'; -import Mocha from 'mocha'; -import path from 'path'; - -export const run = (): Promise => { - // Create the mocha test - const mocha = new Mocha({ - ui: 'bdd', - }); - - const testsRoot = path.resolve(__dirname, '..'); - - return new Promise((c, e) => { - glob('**/*.spec.js', { cwd: testsRoot }, (err, files) => { - if (err) { - return e(err); - } - - // Add files to the test suite - files.forEach((f) => mocha.addFile(path.resolve(testsRoot, f))); - - try { - // Run the mocha test - mocha.run((failures) => { - if (failures > 0) { - e(new Error(`${failures} tests failed.`)); - } else { - c(); - } - }); - } catch (err) { - e(err); - } - }); - }); -}; diff --git a/svgo.config.js b/svgo.config.js index 6b24fea52e..7af1314ff4 100644 --- a/svgo.config.js +++ b/svgo.config.js @@ -1,12 +1,22 @@ -const { extendDefaultPlugins } = require('svgo'); +/** + * @typedef {import('svgo').Config} SVGOConfig + * @typedef {import('svgo').PluginConfig} PluginConfig + */ -module.exports = { +module.exports = /** @type {SVGOConfig} */ { + multipass: true, precision: 2, - plugins: extendDefaultPlugins([ + /** @type {PluginConfig[]} */ + plugins: [ + { + name: 'preset-default', + }, + 'convertStyleToAttrs', 'removeDimensions', 'removeOffCanvasPaths', - 'removeStyleElement', 'removeScriptElement', + 'removeStyleElement', 'reusePaths', - ]) -} \ No newline at end of file + 'sortAttrs', + ], +}; diff --git a/tsconfig.declarations.json b/tsconfig.declarations.json new file mode 100644 index 0000000000..205df69cd1 --- /dev/null +++ b/tsconfig.declarations.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "declaration": true, + "emitDeclarationOnly": true, + "noEmit": false, + "declarationDir": "./dist/types", + "declarationMap": true + }, + "include": ["src/module/index.ts"] +} diff --git a/tsconfig.json b/tsconfig.json index c4b8fd8c18..2153993222 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,23 +1,24 @@ { "compilerOptions": { - "module": "commonjs", - "target": "es6", - "outDir": "out", - "lib": ["es6", "dom"], + "lib": ["ESNext"], + "target": "ESNext", + "module": "ESNext", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + "types": ["bun-types"], + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + + /* Linting */ + "skipLibCheck": true, "strict": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, "noImplicitAny": true, - "sourceMap": true, - "rootDir": "src", - "noUnusedLocals": true, - "noUnusedParameters": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true - }, - "include": [ - "src/**/*.ts", - "./node_modules/vscode/vscode.d.ts", - "./node_modules/vscode/lib/*" - ] + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true + } }