├── .env.template ├── .envrc ├── .github ├── dependabot.yml └── workflows │ ├── release-pr.yml │ └── test.yaml ├── .gitignore ├── .vscode-test.js ├── .vscode ├── extensions.json ├── launch.json └── tasks.json ├── .vscodeignore ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── biome.json ├── bun.lock ├── commitlint.config.js ├── images ├── docs │ ├── linting.png │ ├── md-embed-nix.png │ └── nix-syntax-highlight.png └── icon.png ├── install.md ├── language-configuration.json ├── lefthook.yml ├── package.json ├── shell.nix ├── snippets.json ├── src ├── .gitignore ├── client.ts ├── configuration.ts ├── extension.test.ts ├── extension.ts ├── formatter.ts ├── global.d.ts ├── linter.ts ├── process-runner.ts └── utils.ts ├── syntaxes ├── .gitignore ├── injection.yml ├── nix.YAML-tmLanguage └── tests │ ├── sample.nix │ └── sample.nix.snap └── tsconfig.json /.env.template: -------------------------------------------------------------------------------- 1 | OVS_PAT= 2 | -------------------------------------------------------------------------------- /.envrc: -------------------------------------------------------------------------------- 1 | use nix -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | # Enable version updates for npm 4 | - package-ecosystem: "npm" 5 | # Look for `package.json` and `lock` files in the `root` directory 6 | directory: "/" 7 | # Check the npm registry for updates every week (weekdays) 8 | schedule: 9 | interval: "monthly" 10 | groups: 11 | production-dependencies: 12 | dependency-type: 'production' 13 | development-dependencies: 14 | dependency-type: 'development' 15 | 16 | - package-ecosystem: 'github-actions' 17 | directory: '/' 18 | schedule: 19 | interval: 'monthly' -------------------------------------------------------------------------------- /.github/workflows/release-pr.yml: -------------------------------------------------------------------------------- 1 | name: Release PR 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | version-bump: 10 | runs-on: ubuntu-latest 11 | permissions: 12 | contents: write 13 | pull-requests: write 14 | 15 | steps: 16 | - uses: actions/checkout@v4 17 | with: 18 | fetch-depth: 0 19 | - name: Configure Git 20 | run: | 21 | git config --global user.name 'GitHub Actions' 22 | git config --global user.email 'actions@github.com' 23 | - name: Check Commit Message 24 | id: check_commit 25 | run: | 26 | commit_message=$(git log -1 --pretty=%B) 27 | if [[ "$commit_message" =~ ^chore\(release\):\ ([.0-9]+).* ]]; then 28 | version="${BASH_REMATCH[1]}" 29 | echo "is_release=true" >> $GITHUB_OUTPUT 30 | echo "version=$version" >> $GITHUB_OUTPUT 31 | else 32 | echo "is_release=false" >> $GITHUB_OUTPUT 33 | fi 34 | - uses: oven-sh/setup-bun@v2 35 | - name: generate changelog and bump version 36 | if: steps.check_commit.outputs.is_release == 'false' 37 | run: bunx standard-version 38 | - name: Create Pull Request 39 | if: steps.check_commit.outputs.is_release == 'false' 40 | uses: peter-evans/create-pull-request@v7 41 | with: 42 | title: "Pending Release" 43 | body: "Automated version bump using standard-version" 44 | branch: version-bump 45 | delete-branch: true 46 | base: main 47 | - name: tag current package version and push 48 | if: steps.check_commit.outputs.is_release == 'true' 49 | run: | 50 | git tag v${{ steps.check_commit.outputs.version }} || true 51 | git push --tags || true 52 | bun install --frozen-lockfile 53 | bun run package 54 | bun run ovsx publish *.vsix --pat ${{ secrets.OPEN_VSX_TOKEN }} || true 55 | bun run vsce publish -p ${{ secrets.VS_MARKETPLACE_TOKEN }} || true 56 | gh release create v${{ steps.check_commit.outputs.version }} nix-ide*.vsix --title "v${{ steps.check_commit.outputs.version }}" --notes "Release v${{ steps.check_commit.outputs.version }}" 57 | env: 58 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 59 | -------------------------------------------------------------------------------- /.github/workflows/test.yaml: -------------------------------------------------------------------------------- 1 | name: Tests 2 | 3 | on: 4 | push: 5 | branches: [master, main] 6 | pull_request: 7 | branches: [master, main] 8 | 9 | jobs: 10 | build: 11 | runs-on: ${{ matrix.os }} 12 | 13 | strategy: 14 | matrix: 15 | os: [ubuntu-latest, macos-latest, windows-latest] 16 | 17 | steps: 18 | - uses: actions/checkout@v4 19 | - uses: oven-sh/setup-bun@v2 20 | - run: bun install 21 | - run: bun run lint 22 | - run: bun run build 23 | - run: bun run pretest 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode/* 2 | !.vscode/settings.json 3 | !.vscode/tasks.json 4 | !.vscode/launch.json 5 | !.vscode/extensions.json 6 | *.code-workspace 7 | 8 | # Local History for Visual Studio Code 9 | .history/ 10 | 11 | # Logs 12 | logs 13 | *.log 14 | npm-debug.log* 15 | yarn-debug.log* 16 | yarn-error.log* 17 | lerna-debug.log* 18 | 19 | # Diagnostic reports (https://nodejs.org/api/report.html) 20 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 21 | 22 | # Runtime data 23 | pids 24 | *.pid 25 | *.seed 26 | *.pid.lock 27 | 28 | # Directory for instrumented libs generated by jscoverage/JSCover 29 | lib-cov 30 | 31 | # Coverage directory used by tools like istanbul 32 | coverage 33 | *.lcov 34 | 35 | # nyc test coverage 36 | .nyc_output 37 | 38 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 39 | .grunt 40 | 41 | # Bower dependency directory (https://bower.io/) 42 | bower_components 43 | 44 | # node-waf configuration 45 | .lock-wscript 46 | 47 | # Compiled binary addons (https://nodejs.org/api/addons.html) 48 | build/Release 49 | 50 | # Dependency directories 51 | node_modules/ 52 | jspm_packages/ 53 | 54 | # Snowpack dependency directory (https://snowpack.dev/) 55 | web_modules/ 56 | 57 | # TypeScript cache 58 | *.tsbuildinfo 59 | 60 | # Optional npm cache directory 61 | .npm 62 | 63 | # Optional eslint cache 64 | .eslintcache 65 | 66 | # Microbundle cache 67 | .rpt2_cache/ 68 | .rts2_cache_cjs/ 69 | .rts2_cache_es/ 70 | .rts2_cache_umd/ 71 | 72 | # Optional REPL history 73 | .node_repl_history 74 | 75 | # Output of 'npm pack' 76 | *.tgz 77 | 78 | # Yarn Integrity file 79 | .yarn-integrity 80 | 81 | # dotenv environment variables file 82 | .env 83 | .env.test 84 | 85 | # parcel-bundler cache (https://parceljs.org/) 86 | .cache 87 | .parcel-cache 88 | 89 | # Next.js build output 90 | .next 91 | out 92 | 93 | # Nuxt.js build / generate output 94 | .nuxt 95 | dist 96 | 97 | # Gatsby files 98 | .cache/ 99 | # Comment in the public line in if your project uses Gatsby and not Next.js 100 | # https://nextjs.org/blog/next-9-1#public-directory-support 101 | # public 102 | 103 | # vuepress build output 104 | .vuepress/dist 105 | 106 | # Serverless directories 107 | .serverless/ 108 | 109 | # FuseBox cache 110 | .fusebox/ 111 | 112 | # DynamoDB Local files 113 | .dynamodb/ 114 | 115 | # TernJS port file 116 | .tern-port 117 | 118 | # Stores VSCode versions used for testing VSCode extensions 119 | .vscode-test 120 | 121 | # yarn v2 122 | .yarn/cache 123 | .yarn/unplugged 124 | .yarn/build-state.yml 125 | .yarn/install-state.gz 126 | .pnp.* 127 | 128 | .fake 129 | .ionide 130 | 131 | # latest paket versions 132 | .paket/ 133 | paket-files/ 134 | 135 | *.vsix 136 | 137 | # some misc. proj. files 138 | .local/ 139 | .DS_Store 140 | .direnv/ 141 | .husky/ 142 | -------------------------------------------------------------------------------- /.vscode-test.js: -------------------------------------------------------------------------------- 1 | const { defineConfig } = require('@vscode/test-cli'); 2 | 3 | module.exports = defineConfig({ files: 'out/src/**/*.test.ts', mocha: { ui: 'bdd' } }); 4 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "connor4312.esbuild-problem-matchers", 4 | "mkhl.direnv" 5 | ] 6 | } -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that launches the extension inside a new window 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | { 6 | "version": "0.2.0", 7 | "configurations": [ 8 | { 9 | "name": "Launch with Extension", 10 | "type": "extensionHost", 11 | "request": "launch", 12 | "runtimeExecutable": "${execPath}", 13 | "preLaunchTask": "npmWatch", 14 | "args": [ 15 | "--extensionDevelopmentPath=${workspaceFolder}" 16 | ], 17 | "outFiles": [ 18 | "${workspaceRoot}/dist/**/*.js" 19 | ] 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": [ 4 | { 5 | "type": "npm", 6 | "script": "watch", 7 | "group": "build", 8 | "label": "npmWatch", 9 | "isBackground": true, 10 | "detail": "bun run watch", 11 | "problemMatcher": "$esbuild-watch" 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | # Ignore everything 2 | * 3 | */** 4 | 5 | # Whitelist what you need 6 | !.vscodeignore 7 | !dist/* 8 | !images/* 9 | !language-configuration.json 10 | !LICENSE 11 | !snippets.json 12 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. 4 | 5 | ### [0.4.18](https://github.com/nix-community/vscode-nix-ide/compare/v0.4.17...v0.4.18) (2025-05-19) 6 | 7 | 8 | ### Bug Fixes 9 | 10 | * add auto-indent for multi-line strings ([#480](https://github.com/nix-community/vscode-nix-ide/issues/480)) ([1ff3ff0](https://github.com/nix-community/vscode-nix-ide/commit/1ff3ff0a6c769bffba1308731fb81dbe81a39378)) 11 | 12 | ### [0.4.17](https://github.com/nix-community/vscode-nix-ide/compare/v0.4.16...v0.4.17) (2025-05-19) 13 | 14 | 15 | ### Features 16 | 17 | * auto-indent on pressed enter ([#477](https://github.com/nix-community/vscode-nix-ide/issues/477)) ([0c49e90](https://github.com/nix-community/vscode-nix-ide/commit/0c49e907c5537d04adde8e25e94f514adeca20d8)) 18 | 19 | 20 | ### Bug Fixes 21 | 22 | * clarify descriptions of formatter settings ([#478](https://github.com/nix-community/vscode-nix-ide/issues/478)) ([4afa347](https://github.com/nix-community/vscode-nix-ide/commit/4afa3478570787c1e30cc7bea90543173be7fa21)) 23 | * shell.nix with bun instead of yarn (fixes [#473](https://github.com/nix-community/vscode-nix-ide/issues/473)) ([#474](https://github.com/nix-community/vscode-nix-ide/issues/474)) ([62b6e93](https://github.com/nix-community/vscode-nix-ide/commit/62b6e939ddac903a65273d2fc926619a724c86c8)) 24 | 25 | ### [0.4.16](https://github.com/nix-community/vscode-nix-ide/compare/v0.4.15...v0.4.16) (2025-03-18) 26 | 27 | ### [0.4.15](https://github.com/nix-community/vscode-nix-ide/compare/v0.4.14...v0.4.15) (2025-03-18) 28 | 29 | ### [0.4.14](https://github.com/nix-community/vscode-nix-ide/compare/v0.4.13...v0.4.14) (2025-03-18) 30 | 31 | ### [0.4.13](https://github.com/nix-community/vscode-nix-ide/compare/v0.4.12...v0.4.13) (2025-03-18) 32 | 33 | 34 | ### Bug Fixes 35 | 36 | * issue warning on missing `nil`/`nixd` ([#465](https://github.com/nix-community/vscode-nix-ide/issues/465)) ([2cb1d94](https://github.com/nix-community/vscode-nix-ide/commit/2cb1d94f6738efced607e772e0ea5c77b9fc7701)) 37 | 38 | ### [0.4.12](https://github.com/nix-community/vscode-nix-ide/compare/v0.4.11...v0.4.12) (2025-02-02) 39 | 40 | 41 | ### Features 42 | 43 | * add pipe operators ([#458](https://github.com/nix-community/vscode-nix-ide/issues/458)) ([ac1ed65](https://github.com/nix-community/vscode-nix-ide/commit/ac1ed65aa92655748200cd62bd54e5ca051781bc)) 44 | 45 | ### [0.4.11](https://github.com/nix-community/vscode-nix-ide/compare/v0.4.10...v0.4.11) (2025-01-26) 46 | 47 | 48 | ### Features 49 | 50 | * add predefined formatters ([0352918](https://github.com/nix-community/vscode-nix-ide/commit/0352918d9a3dc14af18fd656e11e970c8efd0bf0)) 51 | 52 | 53 | ### Bug Fixes 54 | 55 | * build as cjs module ([1952078](https://github.com/nix-community/vscode-nix-ide/commit/1952078345ab0e2fedbde694a81c6e194d377545)), closes [#453](https://github.com/nix-community/vscode-nix-ide/issues/453) 56 | 57 | ### [0.4.10](https://github.com/nix-community/vscode-nix-ide/compare/v0.4.9...v0.4.10) (2025-01-24) 58 | 59 | ### [0.4.9](https://github.com/nix-community/vscode-nix-ide/compare/v0.4.8...v0.4.9) (2025-01-24) 60 | 61 | ### [0.4.8](https://github.com/nix-community/vscode-nix-ide/compare/v0.4.7...v0.4.8) (2025-01-24) 62 | 63 | ### [0.4.7](https://github.com/nix-community/vscode-nix-ide/compare/v0.4.6...v0.4.7) (2025-01-24) 64 | 65 | 66 | ### Bug Fixes 67 | 68 | * automated release by PR ([d9d9070](https://github.com/nix-community/vscode-nix-ide/commit/d9d90704701145f350d6f6ed747d95f8dc33d301)) 69 | 70 | ### [0.4.6](https://github.com/nix-community/vscode-nix-ide/compare/v0.4.5...v0.4.6) (2025-01-24) 71 | 72 | ### [0.4.5](https://github.com/nix-community/vscode-nix-ide/compare/v0.4.3...v0.4.5) (2025-01-24) 73 | 74 | ### [0.4.4](https://github.com/nix-community/vscode-nix-ide/compare/v0.4.2...v0.4.4) (2025-01-24) 75 | 76 | 77 | ### Features 78 | 79 | * do not package syntax *yml files ([ce091fb](https://github.com/nix-community/vscode-nix-ide/commit/ce091fbab288407dfa678dbba8f1b84ce2bfda38)) 80 | * replace esbuild with `bun build` ([20c7eb3](https://github.com/nix-community/vscode-nix-ide/commit/20c7eb3174a0d151abee22d9252dbd8ea4d65a54)) 81 | * use bun v1.2 text lockfiles ([da6fd4d](https://github.com/nix-community/vscode-nix-ide/commit/da6fd4dfb64b766bca9aaff70bf3cd9a2fb6a5b2)) 82 | 83 | ### [0.4.3](https://github.com/nix-community/vscode-nix-ide/compare/v0.4.2...v0.4.3) (2025-01-24) 84 | 85 | 86 | ### Features 87 | 88 | * do not package syntax *yml files ([ce091fb](https://github.com/nix-community/vscode-nix-ide/commit/ce091fbab288407dfa678dbba8f1b84ce2bfda38)) 89 | * replace esbuild with `bun build` ([20c7eb3](https://github.com/nix-community/vscode-nix-ide/commit/20c7eb3174a0d151abee22d9252dbd8ea4d65a54)) 90 | * use bun v1.2 text lockfiles ([da6fd4d](https://github.com/nix-community/vscode-nix-ide/commit/da6fd4dfb64b766bca9aaff70bf3cd9a2fb6a5b2)) 91 | 92 | ## [0.4.2](https://github.com/nix-community/vscode-nix-ide/compare/v0.4.1...v0.4.2) (2025-01-17) 93 | 94 | 95 | ### Features 96 | 97 | * remove unused dependencies ([0a842f6](https://github.com/nix-community/vscode-nix-ide/commit/0a842f6687dedb1a7a1ac0fdfde06e390aab6042)) 98 | 99 | ## [0.4.0](https://github.com/nix-community/vscode-nix-ide/compare/v0.3.7...v0.4.0) (2025-01-17) 100 | 101 | 102 | ### Features 103 | 104 | * add grammar test ([018be88](https://github.com/nix-community/vscode-nix-ide/commit/018be88ba0d6d0104e9d57b9250bb36c84ea52ed)) 105 | * add initial integration test ([e25320f](https://github.com/nix-community/vscode-nix-ide/commit/e25320f9e6c2979d94b05c7ef09fd5380d74de71)) 106 | * add release-please action ([50b5921](https://github.com/nix-community/vscode-nix-ide/commit/50b59213beb401641d8ae17bcd4d6e4ef1e28815)) 107 | 108 | 109 | ### Bug Fixes 110 | 111 | * default to nixfmt formatter ([#441](https://github.com/nix-community/vscode-nix-ide/issues/441)) ([582c364](https://github.com/nix-community/vscode-nix-ide/commit/582c3642df2188c3096ac646c575e386ae04923e)) 112 | 113 | ## [0.3.7](https://github.com/nix-community/vscode-nix-ide/compare/v0.3.6...v0.3.7) (2025-01-16) 114 | 115 | 116 | ### Bug Fixes 117 | 118 | * biome linter fixes ([e5c15ed](https://github.com/nix-community/vscode-nix-ide/commit/e5c15edad557f08f69178d466a42201c753d4e6d)) 119 | 120 | ## [0.3.6](https://github.com/nix-community/vscode-nix-ide/compare/v0.3.5...v0.3.6) (2024-09-20) 121 | 122 | 123 | ### Features 124 | 125 | * delay activation ([#424](https://github.com/nix-community/vscode-nix-ide/issues/424)) ([7038804](https://github.com/nix-community/vscode-nix-ide/commit/7038804b9e06d04df254fc4b516363a53a7f063e)) 126 | 127 | ### [0.3.5](https://github.com/nix-community/vscode-nix-ide/compare/v0.3.4...v0.3.5) (2024-09-13) 128 | 129 | 130 | ### Bug Fixes 131 | 132 | * reload language server client on restart ([#420](https://github.com/nix-community/vscode-nix-ide/issues/420)) ([4c48cb0](https://github.com/nix-community/vscode-nix-ide/commit/4c48cb06cddf439f65d6ec066f41c6a6432ffa5a)), closes [#419](https://github.com/nix-community/vscode-nix-ide/issues/419) 133 | 134 | ### [0.3.4](https://github.com/nix-community/vscode-nix-ide/compare/v0.3.3...v0.3.4) (2024-09-10) 135 | 136 | 137 | ### Features 138 | 139 | * add setting to suppress error notifications ([4913819](https://github.com/nix-community/vscode-nix-ide/commit/4913819384f2fe70e15ea7c814a739926a5d1280)) 140 | 141 | ### [0.3.3](https://github.com/nix-community/vscode-nix-ide/compare/v0.3.2...v0.3.3) (2024-08-02) 142 | 143 | 144 | ### Bug Fixes 145 | 146 | * vsce latest ([cecea30](https://github.com/nix-community/vscode-nix-ide/commit/cecea3041cfdb0aebc6c7e6c02dfeca193c360d6)) 147 | 148 | ### [0.3.2](https://github.com/nix-community/vscode-nix-ide/compare/v0.3.1...v0.3.2) (2024-08-02) 149 | 150 | 151 | ### Features 152 | 153 | * add restarting language server command ([#381](https://github.com/nix-community/vscode-nix-ide/issues/381)) ([c52dc29](https://github.com/nix-community/vscode-nix-ide/commit/c52dc292a7d3b356bc1a18d31f9df8395770d679)) 154 | * migrate eslint config ([5fd26eb](https://github.com/nix-community/vscode-nix-ide/commit/5fd26eb00f6c3c9fabbf9fce4c43b6259fa6d1ed)) 155 | * support use vscode variables in settings ([#399](https://github.com/nix-community/vscode-nix-ide/issues/399)) ([a602050](https://github.com/nix-community/vscode-nix-ide/commit/a6020509005221a0bb885b2d5914fd8f4563f97d)) 156 | 157 | 158 | ### Bug Fixes 159 | 160 | * dependabot config ([df48657](https://github.com/nix-community/vscode-nix-ide/commit/df4865707169754900a2f609eacd38f82586b8ed)) 161 | * eslint errors ([de74fc2](https://github.com/nix-community/vscode-nix-ide/commit/de74fc218d73fbb22fe97708a666798dee35335f)) 162 | 163 | ### [0.3.1](https://github.com/nix-community/vscode-nix-ide/compare/v0.3.0...v0.3.1) (2024-03-12) 164 | 165 | ## [0.3.0](https://github.com/nix-community/vscode-nix-ide/compare/v0.2.2...v0.3.0) (2024-03-12) 166 | 167 | 168 | ### ⚠ BREAKING CHANGES 169 | 170 | * upgrade dependencies 171 | 172 | * upgrade dependencies ([3778ed6](https://github.com/nix-community/vscode-nix-ide/commit/3778ed648f1a0f73b8826860f591ab7b9e9bb355)) 173 | 174 | ### [0.2.2](https://github.com/nix-community/vscode-nix-ide/compare/v0.2.1...v0.2.2) (2023-07-26) 175 | 176 | 177 | ### Features 178 | 179 | * set file icon ([f7c2244](https://github.com/nix-community/vscode-nix-ide/commit/f7c22449ca7de99a6421a9694c606486eee607a8)) 180 | 181 | ### [0.2.1](https://github.com/nix-community/vscode-nix-ide/compare/v0.1.23...v0.2.1) (2022-10-14) 182 | 183 | 184 | ### Features 185 | 186 | * declare support for nil ([#276](https://github.com/nix-community/vscode-nix-ide/issues/276)) ([c19ceba](https://github.com/nix-community/vscode-nix-ide/commit/c19ceba897f4e23aba6bad543a16ee901f4195f6)) 187 | * passing settings to lsp ([#294](https://github.com/nix-community/vscode-nix-ide/issues/294)) ([c898347](https://github.com/nix-community/vscode-nix-ide/commit/c89834791c8eb8230cd5d07d3754bdb30ed8b822)) 188 | 189 | ### [0.1.24](https://github.com/nix-community/vscode-nix-ide/compare/v0.1.23...v0.1.24) (2022-10-14) 190 | 191 | ### [0.1.23](https://github.com/nix-community/vscode-nix-ide/compare/v0.1.22...v0.1.23) (2022-08-16) 192 | 193 | 194 | ### Features 195 | 196 | * add nix-shell and direnv support ([#251](https://github.com/nix-community/vscode-nix-ide/issues/251)) ([d78b62d](https://github.com/nix-community/vscode-nix-ide/commit/d78b62ded8e575c01922ff781884af026578c7a4)) 197 | 198 | 199 | ### Bug Fixes 200 | 201 | * catch error if serverPath doesn't exist ([#267](https://github.com/nix-community/vscode-nix-ide/issues/267)) ([95caf81](https://github.com/nix-community/vscode-nix-ide/commit/95caf810a2f0415103ebc5c3dfde7b78729be4c3)) 202 | 203 | ### [0.1.22](https://github.com/nix-community/vscode-nix-ide/compare/v0.1.20...v0.1.22) (2022-08-14) 204 | 205 | 206 | ### Bug Fixes 207 | 208 | * mark interpolation as meta.embedded instead of markup.italic ([cd420d0](https://github.com/nix-community/vscode-nix-ide/commit/cd420d0bcea26cf1cf650f47c738bd1b6658a80c)) 209 | 210 | ### [0.1.21](https://github.com/nix-community/vscode-nix-ide/compare/v0.1.20...v0.1.21) (2022-08-14) 211 | 212 | 213 | ### Bug Fixes 214 | 215 | * mark interpolation as meta.embedded instead of markup.italic ([cd420d0](https://github.com/nix-community/vscode-nix-ide/commit/cd420d0bcea26cf1cf650f47c738bd1b6658a80c)) 216 | 217 | ### [0.1.20](https://github.com/nix-community/vscode-nix-ide/compare/v0.1.19...v0.1.20) (2022-02-23) 218 | 219 | ### [0.1.19](https://github.com/nix-community/vscode-nix-ide/compare/v0.1.18...v0.1.19) (2022-01-02) 220 | 221 | 222 | ### Features 223 | 224 | * antiquotation brackets ([55e9258](https://github.com/nix-community/vscode-nix-ide/commit/55e92589b9b73eda3314a7b14e059c0ff77a1bfb)) 225 | * path angle brackets ([f79b542](https://github.com/nix-community/vscode-nix-ide/commit/f79b54226f2ad5a6ddbe968c632c4c75b2141974)) 226 | * word pattern ([d1389f6](https://github.com/nix-community/vscode-nix-ide/commit/d1389f6c479ceee7813635f793d7d3c02e27329c)) 227 | 228 | 229 | ### Bug Fixes 230 | 231 | * auto close at end of string ([ae0c981](https://github.com/nix-community/vscode-nix-ide/commit/ae0c981de0a60a5910dca472643bbbf43ef51c63)) 232 | * auto close double quotes in comments ([aab9cef](https://github.com/nix-community/vscode-nix-ide/commit/aab9ceffa3e52a4938b5907697b7edadd51069fb)) 233 | * don't auto close single quotes ([c912fc8](https://github.com/nix-community/vscode-nix-ide/commit/c912fc8c128c0bc1c4600ae2aa904237cb13e780)) 234 | * folding marker comments ([bab9fdf](https://github.com/nix-community/vscode-nix-ide/commit/bab9fdfcbb2ae2fcceb8c11cec2c1e96d6f14c45)) 235 | * quotes inside attributes ([b003401](https://github.com/nix-community/vscode-nix-ide/commit/b0034014a1b96ac862e4ff678e2f93917fdd7f91)), closes [#189](https://github.com/nix-community/vscode-nix-ide/issues/189) 236 | * update branch names in ci configs ([66e6991](https://github.com/nix-community/vscode-nix-ide/commit/66e69919cf84fd4465378368a8525a935ce9c81a)) 237 | 238 | ### [0.1.18](https://github.com/nix-community/vscode-nix-ide/compare/v0.1.17...v0.1.18) (2021-10-12) 239 | 240 | ### [0.1.17](https://github.com/nix-community/vscode-nix-ide/compare/v0.1.16...v0.1.17) (2021-10-12) 241 | 242 | 243 | ### Features 244 | 245 | * make the formatter path configurable ([03c25cb](https://github.com/nix-community/vscode-nix-ide/commit/03c25cb57dc36cf23dd2641abe3d34fbec01eb4a)) 246 | 247 | 248 | ### Bug Fixes 249 | 250 | * release to ovsx registry ([b07688e](https://github.com/nix-community/vscode-nix-ide/commit/b07688ec19d97337be8e8b1371e911b6b908884a)) 251 | 252 | ### [0.1.16](https://github.com/nix-community/vscode-nix-ide/compare/v0.1.15...v0.1.16) (2021-08-20) 253 | 254 | 255 | ### Features 256 | 257 | * add esbuild bundling ([2ee7a3f](https://github.com/nix-community/vscode-nix-ide/commit/2ee7a3f99e25c895fa39be3cde210d7a748d4bee)) 258 | 259 | ### [0.1.15](https://github.com/nix-community/vscode-nix-ide/compare/v0.1.14...v0.1.15) (2021-08-16) 260 | 261 | ### [0.1.14](https://github.com/nix-community/vscode-nix-ide/compare/v0.1.13...v0.1.14) (2021-08-16) 262 | 263 | 264 | ### Features 265 | 266 | * upgrade dependencies to latest versions ([072b823](https://github.com/nix-community/vscode-nix-ide/commit/072b823d1f8fa6a55a870a94233e44af6ee14e57)) 267 | 268 | ### [0.1.13](https://github.com/nix-community/vscode-nix-ide/compare/v0.1.12...v0.1.13) (2021-08-16) 269 | 270 | ### [0.1.12](https://github.com/nix-community/vscode-nix-ide/compare/v0.1.11...v0.1.12) (2021-05-08) 271 | 272 | ### [0.1.11](https://github.com/nix-community/vscode-nix-ide/compare/v0.1.10...v0.1.11) (2021-05-08) 273 | 274 | 275 | ### Features 276 | 277 | * **linter:** Allow symbol errors to show (static analysys) ([041dffc](https://github.com/nix-community/vscode-nix-ide/commit/041dffc92fae798c41ed211ee805ee6ce5772c5f)) 278 | 279 | ### [0.1.10](https://github.com/nix-community/vscode-nix-ide/compare/v0.1.9...v0.1.10) (2021-03-24) 280 | 281 | ### [0.1.9](https://github.com/nix-community/vscode-nix-ide/compare/v0.1.8...v0.1.9) (2021-03-24) 282 | 283 | ### [0.1.8](https://github.com/nix-community/vscode-nix-ide/compare/v0.1.7...v0.1.8) (2020-12-23) 284 | 285 | 286 | ### Features 287 | 288 | * create vsix artifacts part of release ([6e2c1fe](https://github.com/nix-community/vscode-nix-ide/commit/6e2c1fe962744936669b47a5b42b57f6d19b304c)) 289 | 290 | ### [0.1.7](https://github.com/nix-community/vscode-nix-ide/compare/v0.1.6...v0.1.7) (2020-12-23) 291 | 292 | ### [0.1.6](https://github.com/nix-community/vscode-nix-ide/compare/v0.1.5...v0.1.6) (2020-12-23) 293 | 294 | 295 | ### Features 296 | 297 | * add rnix LSP support ([ec3dee3](https://github.com/nix-community/vscode-nix-ide/commit/ec3dee34ba273d181593e647f305de10d54e5e10)), closes [#10](https://github.com/nix-community/vscode-nix-ide/issues/10) 298 | * check rnix-lsp and suggest if not installed ([e09563f](https://github.com/nix-community/vscode-nix-ide/commit/e09563f849fd7cb9d28c688a1c0c3bd2da890041)) 299 | 300 | 301 | ### Bug Fixes 302 | 303 | * since update to lsp-client v7 ([e3fa686](https://github.com/nix-community/vscode-nix-ide/commit/e3fa686464dcac5319ddae5a5d23904c4f5bc487)) 304 | 305 | ### [0.1.5](https://github.com/nix-community/vscode-nix-ide/compare/v0.1.3...v0.1.5) (2020-10-24) 306 | 307 | ### [0.1.3](https://github.com/nix-community/vscode-nix-ide/compare/v0.1.2...v0.1.3) (2020-08-16) 308 | 309 | ### [0.1.2](https://github.com/nix-community/vscode-nix-ide/compare/v0.1.1...v0.1.2) (2020-08-16) 310 | 311 | ### 0.1.1 (2020-08-16) 312 | 313 | 314 | ### Features 315 | 316 | * add fable to project ([e7b4962](https://github.com/nix-community/vscode-nix-ide/commit/e7b49622ed06a2ad7d9bb7d69ed5a1ef6d0af9e5)) 317 | * add license info ([f559fc3](https://github.com/nix-community/vscode-nix-ide/commit/f559fc3cd41980d698fb62a18c5f4b636d32c403)) 318 | * add linter for nix files with nix-instantiate ([cbf6abe](https://github.com/nix-community/vscode-nix-ide/commit/cbf6abef33a948bdbc5c9c54019e93d0320ba965)) 319 | * adding basic snippets ([02e1995](https://github.com/nix-community/vscode-nix-ide/commit/02e199541e6db1f74c6a2de680957f81a9afa498)) 320 | * initial commit ([35d49df](https://github.com/nix-community/vscode-nix-ide/commit/35d49df84975c0f3940173f0be517f5bc94528b3)) 321 | * markdown embedded support ([4debbfd](https://github.com/nix-community/vscode-nix-ide/commit/4debbfd90884930c5e7f5d49141fd5017dd23d56)) 322 | * update language configuration ([188c9cf](https://github.com/nix-community/vscode-nix-ide/commit/188c9cfecbcf5b8cb73f1c98ba9435eb68c394b6)) 323 | 324 | 325 | ### Bug Fixes 326 | 327 | * syntax file name ([3113b30](https://github.com/nix-community/vscode-nix-ide/commit/3113b3073f1ec62bed8a4eddc9cb7dab994b97c9)) 328 | 329 | ### 0.0.2 (2020-08-16) 330 | 331 | 332 | ### Features 333 | 334 | * add fable to project ([e7b4962](https://github.com/nix-community/vscode-nix-ide/commit/e7b49622ed06a2ad7d9bb7d69ed5a1ef6d0af9e5)) 335 | * add license info ([f559fc3](https://github.com/nix-community/vscode-nix-ide/commit/f559fc3cd41980d698fb62a18c5f4b636d32c403)) 336 | * add linter for nix files with nix-instantiate ([cbf6abe](https://github.com/nix-community/vscode-nix-ide/commit/cbf6abef33a948bdbc5c9c54019e93d0320ba965)) 337 | * adding basic snippets ([02e1995](https://github.com/nix-community/vscode-nix-ide/commit/02e199541e6db1f74c6a2de680957f81a9afa498)) 338 | * initial commit ([35d49df](https://github.com/nix-community/vscode-nix-ide/commit/35d49df84975c0f3940173f0be517f5bc94528b3)) 339 | * markdown embedded support ([4debbfd](https://github.com/nix-community/vscode-nix-ide/commit/4debbfd90884930c5e7f5d49141fd5017dd23d56)) 340 | * update language configuration ([188c9cf](https://github.com/nix-community/vscode-nix-ide/commit/188c9cfecbcf5b8cb73f1c98ba9435eb68c394b6)) 341 | 342 | 343 | ### Bug Fixes 344 | 345 | * syntax file name ([3113b30](https://github.com/nix-community/vscode-nix-ide/commit/3113b3073f1ec62bed8a4eddc9cb7dab994b97c9)) 346 | 347 | # Change Log 348 | 349 | All notable changes to the "nix" extension will be documented in this file. 350 | 351 | Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. 352 | 353 | ## [Unreleased] 354 | 355 | - Initial release 356 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | ## Contributing 2 | 3 | - Document the purpose of functions and classes. 4 | - Please mention new features in the `README.md` features section. Use screenshots when applicable. 5 | - The [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) style should be used for commit messages as it is used to generate the changelog. 6 | 7 | ## Development 8 | 9 | There is [direnv](https://direnv.net/) and [nix-shell](https://nixos.wiki/wiki/Development_environment_with_nix-shell) support so a dev environment can be created with the `nix-shell` command or a one-time `direnv allow` at the root of the repo. 10 | 11 | Press `F5` in VSCode to run an Extension Development Host instance with the extension installed. 12 | 13 | TypeScript is used to develop the extension. 14 | 15 | ```sh 16 | bun install # install dependencies 17 | bun run build # build the extension 18 | ``` 19 | 20 | ## Releasing a new version 21 | 22 | Complete `.env` with environment variables based on `.env.template`, 23 | 24 | ```sh 25 | # this will generate changelog and will create a GitHub release. This will also trigger jobs to publish the extension. 26 | bun run release 27 | 28 | # to manually publish the extension 29 | bun run publish 30 | ``` 31 | 32 | # VS Code Extension Quickstart 33 | 34 | ## What's in the folder 35 | 36 | * This folder contains all of the files necessary for your extension. 37 | * `package.json` - this is the manifest file in which you declare your language support and define the location of the grammar file that has been copied into your extension. 38 | * `syntaxes/nix.YAML-tmLanguage` - this is the Text mate grammar file that is used for tokenization. This will get compiled to `syntaxes/nix.tmLanguage.json` during build. 39 | * `language-configuration.json` - this is the language configuration, defining the tokens that are used for comments and brackets. 40 | 41 | ## Get up and running straight away 42 | 43 | * Make sure the language configuration settings in `language-configuration.json` are accurate. 44 | * Press `F5` to open a new window with your extension loaded. 45 | * Create a new file with a file name suffix matching your language. 46 | * Verify that syntax highlighting works and that the language configuration settings are working. 47 | 48 | ## Make changes 49 | 50 | * You can relaunch the extension from the debug toolbar after making changes to the files listed above. 51 | * You can also reload ( `Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes. 52 | 53 | ## Add more language features 54 | 55 | * To add features such as intellisense, hovers and validators check out the VS Code extenders documentation at https://code.visualstudio.com/docs 56 | 57 | ## Install your extension 58 | 59 | * To start using your extension with Visual Studio Code copy it into the `/.vscode/extensions` folder and restart Code. 60 | * To share your extension with the world, read on https://code.visualstudio.com/docs about publishing an extension. 61 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 noor 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Nix IDE ✨💡🌟 2 | 3 | Adds [Nix](https://nixos.org/) language support for [Visual Studio Code](https://code.visualstudio.com/). 4 | 5 | ## Quickstart 🚀 6 | 7 | 1. [Install](./install.md) the extension, and open a Nix file. 8 | 1. [Syntax highlighting](./images/docs/nix-syntax-highlight.png) should work out of the box. Nix code blocks inside `markdown` files are also [supported](./images/docs/md-embed-nix.png). 9 | 1. Auto-formatting should work if [`nixfmt`](https://github.com/NixOS/nixfmt) is available in `$PATH`. A custom formatter can be set by [configuring `nix.formatterPath`](#custom-formatter). 10 | 1. Syntax errors are [linted](./images/docs/linting.png) using `nix-instantiate`. 11 | 1. Full language support can be enabled by configuring a language server. See [LSP Plugin Support](#lsp-plugin-support) for more information. 12 | 1. Snippets are provided for conditional expressions, `let`/`with` expressions, and `rec`ursive sets. 13 | 1. Path completion is supported using the [Path Intellisense](https://github.com/ChristianKohler/PathIntellisense) extension. 14 | 15 | ## Settings ⚙️ 16 | 17 | ### LSP Plugin Support 18 | 19 | Full language support can be enabled by using a language server. Generally, any Nix [LSP](https://microsoft.github.io/language-server-protocol/) implementation should work. Some examples are given below for [`nil`](https://github.com/oxalica/nil?tab=readme-ov-file#vscodevscodium-with-nix-ide) and [`nixd`](https://github.com/nix-community/nixd). 20 | 21 | ```json5 22 | { 23 | "nix.enableLanguageServer": true, 24 | "nix.serverPath": "nil", // or "nixd" 25 | // LSP config can be passed via the ``nix.serverSettings.{lsp}`` as shown below. 26 | "nix.serverSettings": { 27 | // check https://github.com/oxalica/nil/blob/main/docs/configuration.md for all options available 28 | "nil": { 29 | // "diagnostics": { 30 | // "ignored": ["unused_binding", "unused_with"], 31 | // }, 32 | "formatting": { 33 | "command": ["nixfmt"], 34 | }, 35 | }, 36 | // check https://github.com/nix-community/nixd/blob/main/nixd/docs/configuration.md for all nixd config 37 | "nixd": { 38 | "formatting": { 39 | "command": ["nixfmt"], 40 | }, 41 | "options": { 42 | // By default, this entry will be read from `import { }`. 43 | // You can write arbitrary Nix expressions here, to produce valid "options" declaration result. 44 | // Tip: for flake-based configuration, utilize `builtins.getFlake` 45 | "nixos": { 46 | "expr": "(builtins.getFlake \"/absolute/path/to/flake\").nixosConfigurations..options", 47 | }, 48 | "home-manager": { 49 | "expr": "(builtins.getFlake \"/absolute/path/to/flake\").homeConfigurations..options", 50 | }, 51 | // Tip: use ${workspaceFolder} variable to define path 52 | "nix-darwin": { 53 | "expr": "(builtins.getFlake \"${workspaceFolder}/path/to/flake\").darwinConfigurations..options", 54 | }, 55 | }, 56 | } 57 | } 58 | } 59 | ``` 60 | 61 | ### Custom Formatter 62 | 63 | It can be changed by setting `nix.formatterPath` to any command which can accept file contents on stdin and return formatted text on stdout. If you are using an LSP server, then this configuration is not used. 64 | 65 | ```json5 66 | { 67 | "nix.formatterPath": "nixfmt" // or "alejandra" 68 | // or pass full list of args like below 69 | // "nix.formatterPath": ["treefmt", "--stdin", "{file}"] 70 | } 71 | ``` 72 | 73 | ## Contributing 💪 74 | 75 | We welcome contributions to this extension. Kindly start with any of open issues or feature requests. 76 | 77 | See [CONTRIBUTING.md](./CONTRIBUTING.md) for more information. 78 | 79 | ## Credits 80 | 81 | Special thanks to: 82 | 83 | - [@wmertens](https://github.com/wmertens) for [writing the grammar](https://github.com/wmertens/sublime-nix/blob/master/nix.tmLanguage). 84 | - The [vscode-fish](https://github.com/bmalehorn/vscode-fish/) extension, which was modified to work for Nix in this extension. 85 | -------------------------------------------------------------------------------- /biome.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", 3 | "vcs": { 4 | "enabled": true, 5 | "clientKind": "git", 6 | "useIgnoreFile": true 7 | }, 8 | "files": { 9 | "ignoreUnknown": false, 10 | "ignore": [] 11 | }, 12 | "formatter": { 13 | "enabled": true, 14 | "indentStyle": "space" 15 | }, 16 | "organizeImports": { 17 | "enabled": true 18 | }, 19 | "linter": { 20 | "enabled": true, 21 | "rules": { 22 | "recommended": true 23 | } 24 | }, 25 | "javascript": { 26 | "formatter": { 27 | "quoteStyle": "double" 28 | }, 29 | "globals": [ 30 | "exports" 31 | ] 32 | } 33 | } -------------------------------------------------------------------------------- /bun.lock: -------------------------------------------------------------------------------- 1 | { 2 | "lockfileVersion": 1, 3 | "workspaces": { 4 | "": { 5 | "name": "nix-ide", 6 | "dependencies": { 7 | "command-exists": "^1.2.9", 8 | "vscode-languageclient": "^9.0.1", 9 | "vscode-variables": "^1.0.1", 10 | }, 11 | "devDependencies": { 12 | "@commitlint/cli": "^19.6.1", 13 | "@commitlint/config-conventional": "^19.6.0", 14 | "@types/command-exists": "^1.2.3", 15 | "@types/node": "^22.10.7", 16 | "@types/vscode": "^1.96.0", 17 | "@vscode/test-cli": "^0.0.10", 18 | "@vscode/test-electron": "^2.4.1", 19 | "@vscode/vsce": "^3.2.1", 20 | "js-yaml": "^4.1.0", 21 | "lefthook": "^1.10.8", 22 | "ovsx": "^0.10.1", 23 | "typescript": "^5.7.3", 24 | "vscode-tmgrammar-test": "^0.1.3", 25 | }, 26 | }, 27 | }, 28 | "packages": { 29 | "@azure/abort-controller": ["@azure/abort-controller@2.1.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA=="], 30 | 31 | "@azure/core-auth": ["@azure/core-auth@1.9.0", "", { "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-util": "^1.11.0", "tslib": "^2.6.2" } }, "sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw=="], 32 | 33 | "@azure/core-client": ["@azure/core-client@1.9.2", "", { "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.4.0", "@azure/core-rest-pipeline": "^1.9.1", "@azure/core-tracing": "^1.0.0", "@azure/core-util": "^1.6.1", "@azure/logger": "^1.0.0", "tslib": "^2.6.2" } }, "sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w=="], 34 | 35 | "@azure/core-rest-pipeline": ["@azure/core-rest-pipeline@1.18.2", "", { "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.8.0", "@azure/core-tracing": "^1.0.1", "@azure/core-util": "^1.11.0", "@azure/logger": "^1.0.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.0", "tslib": "^2.6.2" } }, "sha512-IkTf/DWKyCklEtN/WYW3lqEsIaUDshlzWRlZNNwSYtFcCBQz++OtOjxNpm8rr1VcbMS6RpjybQa3u6B6nG0zNw=="], 36 | 37 | "@azure/core-tracing": ["@azure/core-tracing@1.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg=="], 38 | 39 | "@azure/core-util": ["@azure/core-util@1.11.0", "", { "dependencies": { "@azure/abort-controller": "^2.0.0", "tslib": "^2.6.2" } }, "sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g=="], 40 | 41 | "@azure/identity": ["@azure/identity@4.6.0", "", { "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.9.0", "@azure/core-client": "^1.9.2", "@azure/core-rest-pipeline": "^1.17.0", "@azure/core-tracing": "^1.0.0", "@azure/core-util": "^1.11.0", "@azure/logger": "^1.0.0", "@azure/msal-browser": "^4.0.1", "@azure/msal-node": "^2.15.0", "events": "^3.0.0", "jws": "^4.0.0", "open": "^8.0.0", "stoppable": "^1.1.0", "tslib": "^2.2.0" } }, "sha512-ANpO1iAvcZmpD4QY7/kaE/P2n66pRXsDp3nMUC6Ow3c9KfXOZF7qMU9VgqPw8m7adP7TVIbVyrCEmD9cth3KQQ=="], 42 | 43 | "@azure/logger": ["@azure/logger@1.1.4", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ=="], 44 | 45 | "@azure/msal-browser": ["@azure/msal-browser@4.0.2", "", { "dependencies": { "@azure/msal-common": "15.0.2" } }, "sha512-bq6PasUpJgBSOSMeSlh8gXh4LZGgAaPoJFNcu5u0zxwueh+I8NpMb9oxlCfS/8CJHyXUhTUAMLSnvThemNdyQw=="], 46 | 47 | "@azure/msal-common": ["@azure/msal-common@15.0.2", "", {}, "sha512-RQHmI5vOMYLNSO0ER7d/O9TojWWEn4m0YtWbL8mZthkKGQI7ALn5ONHUVTUSxSVYwGYdHGNrwiHAzQhboqwZzQ=="], 48 | 49 | "@azure/msal-node": ["@azure/msal-node@2.16.2", "", { "dependencies": { "@azure/msal-common": "14.16.0", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" } }, "sha512-An7l1hEr0w1HMMh1LU+rtDtqL7/jw74ORlc9Wnh06v7TU/xpG39/Zdr1ZJu3QpjUfKJ+E0/OXMW8DRSWTlh7qQ=="], 50 | 51 | "@babel/code-frame": ["@babel/code-frame@7.26.2", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ=="], 52 | 53 | "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], 54 | 55 | "@bcoe/v8-coverage": ["@bcoe/v8-coverage@0.2.3", "", {}, "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="], 56 | 57 | "@commitlint/cli": ["@commitlint/cli@19.6.1", "", { "dependencies": { "@commitlint/format": "^19.5.0", "@commitlint/lint": "^19.6.0", "@commitlint/load": "^19.6.1", "@commitlint/read": "^19.5.0", "@commitlint/types": "^19.5.0", "tinyexec": "^0.3.0", "yargs": "^17.0.0" }, "bin": { "commitlint": "cli.js" } }, "sha512-8hcyA6ZoHwWXC76BoC8qVOSr8xHy00LZhZpauiD0iO0VYbVhMnED0da85lTfIULxl7Lj4c6vZgF0Wu/ed1+jlQ=="], 58 | 59 | "@commitlint/config-conventional": ["@commitlint/config-conventional@19.6.0", "", { "dependencies": { "@commitlint/types": "^19.5.0", "conventional-changelog-conventionalcommits": "^7.0.2" } }, "sha512-DJT40iMnTYtBtUfw9ApbsLZFke1zKh6llITVJ+x9mtpHD08gsNXaIRqHTmwTZL3dNX5+WoyK7pCN/5zswvkBCQ=="], 60 | 61 | "@commitlint/config-validator": ["@commitlint/config-validator@19.5.0", "", { "dependencies": { "@commitlint/types": "^19.5.0", "ajv": "^8.11.0" } }, "sha512-CHtj92H5rdhKt17RmgALhfQt95VayrUo2tSqY9g2w+laAXyk7K/Ef6uPm9tn5qSIwSmrLjKaXK9eiNuxmQrDBw=="], 62 | 63 | "@commitlint/ensure": ["@commitlint/ensure@19.5.0", "", { "dependencies": { "@commitlint/types": "^19.5.0", "lodash.camelcase": "^4.3.0", "lodash.kebabcase": "^4.1.1", "lodash.snakecase": "^4.1.1", "lodash.startcase": "^4.4.0", "lodash.upperfirst": "^4.3.1" } }, "sha512-Kv0pYZeMrdg48bHFEU5KKcccRfKmISSm9MvgIgkpI6m+ohFTB55qZlBW6eYqh/XDfRuIO0x4zSmvBjmOwWTwkg=="], 64 | 65 | "@commitlint/execute-rule": ["@commitlint/execute-rule@19.5.0", "", {}, "sha512-aqyGgytXhl2ejlk+/rfgtwpPexYyri4t8/n4ku6rRJoRhGZpLFMqrZ+YaubeGysCP6oz4mMA34YSTaSOKEeNrg=="], 66 | 67 | "@commitlint/format": ["@commitlint/format@19.5.0", "", { "dependencies": { "@commitlint/types": "^19.5.0", "chalk": "^5.3.0" } }, "sha512-yNy088miE52stCI3dhG/vvxFo9e4jFkU1Mj3xECfzp/bIS/JUay4491huAlVcffOoMK1cd296q0W92NlER6r3A=="], 68 | 69 | "@commitlint/is-ignored": ["@commitlint/is-ignored@19.6.0", "", { "dependencies": { "@commitlint/types": "^19.5.0", "semver": "^7.6.0" } }, "sha512-Ov6iBgxJQFR9koOupDPHvcHU9keFupDgtB3lObdEZDroiG4jj1rzky60fbQozFKVYRTUdrBGICHG0YVmRuAJmw=="], 70 | 71 | "@commitlint/lint": ["@commitlint/lint@19.6.0", "", { "dependencies": { "@commitlint/is-ignored": "^19.6.0", "@commitlint/parse": "^19.5.0", "@commitlint/rules": "^19.6.0", "@commitlint/types": "^19.5.0" } }, "sha512-LRo7zDkXtcIrpco9RnfhOKeg8PAnE3oDDoalnrVU/EVaKHYBWYL1DlRR7+3AWn0JiBqD8yKOfetVxJGdEtZ0tg=="], 72 | 73 | "@commitlint/load": ["@commitlint/load@19.6.1", "", { "dependencies": { "@commitlint/config-validator": "^19.5.0", "@commitlint/execute-rule": "^19.5.0", "@commitlint/resolve-extends": "^19.5.0", "@commitlint/types": "^19.5.0", "chalk": "^5.3.0", "cosmiconfig": "^9.0.0", "cosmiconfig-typescript-loader": "^6.1.0", "lodash.isplainobject": "^4.0.6", "lodash.merge": "^4.6.2", "lodash.uniq": "^4.5.0" } }, "sha512-kE4mRKWWNju2QpsCWt428XBvUH55OET2N4QKQ0bF85qS/XbsRGG1MiTByDNlEVpEPceMkDr46LNH95DtRwcsfA=="], 74 | 75 | "@commitlint/message": ["@commitlint/message@19.5.0", "", {}, "sha512-R7AM4YnbxN1Joj1tMfCyBryOC5aNJBdxadTZkuqtWi3Xj0kMdutq16XQwuoGbIzL2Pk62TALV1fZDCv36+JhTQ=="], 76 | 77 | "@commitlint/parse": ["@commitlint/parse@19.5.0", "", { "dependencies": { "@commitlint/types": "^19.5.0", "conventional-changelog-angular": "^7.0.0", "conventional-commits-parser": "^5.0.0" } }, "sha512-cZ/IxfAlfWYhAQV0TwcbdR1Oc0/r0Ik1GEessDJ3Lbuma/MRO8FRQX76eurcXtmhJC//rj52ZSZuXUg0oIX0Fw=="], 78 | 79 | "@commitlint/read": ["@commitlint/read@19.5.0", "", { "dependencies": { "@commitlint/top-level": "^19.5.0", "@commitlint/types": "^19.5.0", "git-raw-commits": "^4.0.0", "minimist": "^1.2.8", "tinyexec": "^0.3.0" } }, "sha512-TjS3HLPsLsxFPQj6jou8/CZFAmOP2y+6V4PGYt3ihbQKTY1Jnv0QG28WRKl/d1ha6zLODPZqsxLEov52dhR9BQ=="], 80 | 81 | "@commitlint/resolve-extends": ["@commitlint/resolve-extends@19.5.0", "", { "dependencies": { "@commitlint/config-validator": "^19.5.0", "@commitlint/types": "^19.5.0", "global-directory": "^4.0.1", "import-meta-resolve": "^4.0.0", "lodash.mergewith": "^4.6.2", "resolve-from": "^5.0.0" } }, "sha512-CU/GscZhCUsJwcKTJS9Ndh3AKGZTNFIOoQB2n8CmFnizE0VnEuJoum+COW+C1lNABEeqk6ssfc1Kkalm4bDklA=="], 82 | 83 | "@commitlint/rules": ["@commitlint/rules@19.6.0", "", { "dependencies": { "@commitlint/ensure": "^19.5.0", "@commitlint/message": "^19.5.0", "@commitlint/to-lines": "^19.5.0", "@commitlint/types": "^19.5.0" } }, "sha512-1f2reW7lbrI0X0ozZMesS/WZxgPa4/wi56vFuJENBmed6mWq5KsheN/nxqnl/C23ioxpPO/PL6tXpiiFy5Bhjw=="], 84 | 85 | "@commitlint/to-lines": ["@commitlint/to-lines@19.5.0", "", {}, "sha512-R772oj3NHPkodOSRZ9bBVNq224DOxQtNef5Pl8l2M8ZnkkzQfeSTr4uxawV2Sd3ui05dUVzvLNnzenDBO1KBeQ=="], 86 | 87 | "@commitlint/top-level": ["@commitlint/top-level@19.5.0", "", { "dependencies": { "find-up": "^7.0.0" } }, "sha512-IP1YLmGAk0yWrImPRRc578I3dDUI5A2UBJx9FbSOjxe9sTlzFiwVJ+zeMLgAtHMtGZsC8LUnzmW1qRemkFU4ng=="], 88 | 89 | "@commitlint/types": ["@commitlint/types@19.5.0", "", { "dependencies": { "@types/conventional-commits-parser": "^5.0.0", "chalk": "^5.3.0" } }, "sha512-DSHae2obMSMkAtTBSOulg5X7/z+rGLxcXQIkg3OmWvY6wifojge5uVMydfhUvs7yQj+V7jNmRZ2Xzl8GJyqRgg=="], 90 | 91 | "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], 92 | 93 | "@istanbuljs/schema": ["@istanbuljs/schema@0.1.3", "", {}, "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA=="], 94 | 95 | "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], 96 | 97 | "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], 98 | 99 | "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], 100 | 101 | "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], 102 | 103 | "@types/command-exists": ["@types/command-exists@1.2.3", "", {}, "sha512-PpbaE2XWLaWYboXD6k70TcXO/OdOyyRFq5TVpmlUELNxdkkmXU9fkImNosmXU1DtsNrqdUgWd/nJQYXgwmtdXQ=="], 104 | 105 | "@types/conventional-commits-parser": ["@types/conventional-commits-parser@5.0.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ=="], 106 | 107 | "@types/istanbul-lib-coverage": ["@types/istanbul-lib-coverage@2.0.6", "", {}, "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w=="], 108 | 109 | "@types/mocha": ["@types/mocha@10.0.10", "", {}, "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q=="], 110 | 111 | "@types/node": ["@types/node@22.10.10", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-X47y/mPNzxviAGY5TcYPtYL8JsY3kAq2n8fMmKoRCxq/c4v4pyGNCzM2R6+M5/umG4ZfHuT+sgqDYqWc9rJ6ww=="], 112 | 113 | "@types/vscode": ["@types/vscode@1.96.0", "", {}, "sha512-qvZbSZo+K4ZYmmDuaodMbAa67Pl6VDQzLKFka6rq+3WUTY4Kro7Bwoi0CuZLO/wema0ygcmpwow7zZfPJTs5jg=="], 114 | 115 | "@vscode/test-cli": ["@vscode/test-cli@0.0.10", "", { "dependencies": { "@types/mocha": "^10.0.2", "c8": "^9.1.0", "chokidar": "^3.5.3", "enhanced-resolve": "^5.15.0", "glob": "^10.3.10", "minimatch": "^9.0.3", "mocha": "^10.2.0", "supports-color": "^9.4.0", "yargs": "^17.7.2" }, "bin": { "vscode-test": "out/bin.mjs" } }, "sha512-B0mMH4ia+MOOtwNiLi79XhA+MLmUItIC8FckEuKrVAVriIuSWjt7vv4+bF8qVFiNFe4QRfzPaIZk39FZGWEwHA=="], 116 | 117 | "@vscode/test-electron": ["@vscode/test-electron@2.4.1", "", { "dependencies": { "http-proxy-agent": "^7.0.2", "https-proxy-agent": "^7.0.5", "jszip": "^3.10.1", "ora": "^7.0.1", "semver": "^7.6.2" } }, "sha512-Gc6EdaLANdktQ1t+zozoBVRynfIsMKMc94Svu1QreOBC8y76x4tvaK32TljrLi1LI2+PK58sDVbL7ALdqf3VRQ=="], 118 | 119 | "@vscode/vsce": ["@vscode/vsce@3.2.1", "", { "dependencies": { "@azure/identity": "^4.1.0", "@vscode/vsce-sign": "^2.0.0", "azure-devops-node-api": "^12.5.0", "chalk": "^2.4.2", "cheerio": "^1.0.0-rc.9", "cockatiel": "^3.1.2", "commander": "^6.2.1", "form-data": "^4.0.0", "glob": "^11.0.0", "hosted-git-info": "^4.0.2", "jsonc-parser": "^3.2.0", "leven": "^3.1.0", "markdown-it": "^14.1.0", "mime": "^1.3.4", "minimatch": "^3.0.3", "parse-semver": "^1.1.1", "read": "^1.0.7", "semver": "^7.5.2", "tmp": "^0.2.3", "typed-rest-client": "^1.8.4", "url-join": "^4.0.1", "xml2js": "^0.5.0", "yauzl": "^2.3.1", "yazl": "^2.2.2" }, "optionalDependencies": { "keytar": "^7.7.0" }, "bin": { "vsce": "vsce" } }, "sha512-AY9vBjwExakK1c0cI/3NN2Ey0EgiKLBye/fxl/ue+o4q6RZ7N+xzd1jAD6eI6eBeMVANi617+V2rxIAkDPco2Q=="], 120 | 121 | "@vscode/vsce-sign": ["@vscode/vsce-sign@2.0.5", "", { "optionalDependencies": { "@vscode/vsce-sign-alpine-arm64": "2.0.2", "@vscode/vsce-sign-alpine-x64": "2.0.2", "@vscode/vsce-sign-darwin-arm64": "2.0.2", "@vscode/vsce-sign-darwin-x64": "2.0.2", "@vscode/vsce-sign-linux-arm": "2.0.2", "@vscode/vsce-sign-linux-arm64": "2.0.2", "@vscode/vsce-sign-linux-x64": "2.0.2", "@vscode/vsce-sign-win32-arm64": "2.0.2", "@vscode/vsce-sign-win32-x64": "2.0.2" } }, "sha512-GfYWrsT/vypTMDMgWDm75iDmAOMe7F71sZECJ+Ws6/xyIfmB3ELVnVN+LwMFAvmXY+e6eWhR2EzNGF/zAhWY3Q=="], 122 | 123 | "@vscode/vsce-sign-alpine-arm64": ["@vscode/vsce-sign-alpine-arm64@2.0.2", "", { "os": "none", "cpu": "arm64" }, "sha512-E80YvqhtZCLUv3YAf9+tIbbqoinWLCO/B3j03yQPbjT3ZIHCliKZlsy1peNc4XNZ5uIb87Jn0HWx/ZbPXviuAQ=="], 124 | 125 | "@vscode/vsce-sign-alpine-x64": ["@vscode/vsce-sign-alpine-x64@2.0.2", "", { "os": "none", "cpu": "x64" }, "sha512-n1WC15MSMvTaeJ5KjWCzo0nzjydwxLyoHiMJHu1Ov0VWTZiddasmOQHekA47tFRycnt4FsQrlkSCTdgHppn6bw=="], 126 | 127 | "@vscode/vsce-sign-darwin-arm64": ["@vscode/vsce-sign-darwin-arm64@2.0.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-rz8F4pMcxPj8fjKAJIfkUT8ycG9CjIp888VY/6pq6cuI2qEzQ0+b5p3xb74CJnBbSC0p2eRVoe+WgNCAxCLtzQ=="], 128 | 129 | "@vscode/vsce-sign-darwin-x64": ["@vscode/vsce-sign-darwin-x64@2.0.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-MCjPrQ5MY/QVoZ6n0D92jcRb7eYvxAujG/AH2yM6lI0BspvJQxp0o9s5oiAM9r32r9tkLpiy5s2icsbwefAQIw=="], 130 | 131 | "@vscode/vsce-sign-linux-arm": ["@vscode/vsce-sign-linux-arm@2.0.2", "", { "os": "linux", "cpu": "arm" }, "sha512-Fkb5jpbfhZKVw3xwR6t7WYfwKZktVGNXdg1m08uEx1anO0oUPUkoQRsNm4QniL3hmfw0ijg00YA6TrxCRkPVOQ=="], 132 | 133 | "@vscode/vsce-sign-linux-arm64": ["@vscode/vsce-sign-linux-arm64@2.0.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-Ybeu7cA6+/koxszsORXX0OJk9N0GgfHq70Wqi4vv2iJCZvBrOWwcIrxKjvFtwyDgdeQzgPheH5nhLVl5eQy7WA=="], 134 | 135 | "@vscode/vsce-sign-linux-x64": ["@vscode/vsce-sign-linux-x64@2.0.2", "", { "os": "linux", "cpu": "x64" }, "sha512-NsPPFVtLaTlVJKOiTnO8Cl78LZNWy0Q8iAg+LlBiCDEgC12Gt4WXOSs2pmcIjDYzj2kY4NwdeN1mBTaujYZaPg=="], 136 | 137 | "@vscode/vsce-sign-win32-arm64": ["@vscode/vsce-sign-win32-arm64@2.0.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-wPs848ymZ3Ny+Y1Qlyi7mcT6VSigG89FWQnp2qRYCyMhdJxOpA4lDwxzlpL8fG6xC8GjQjGDkwbkWUcCobvksQ=="], 138 | 139 | "@vscode/vsce-sign-win32-x64": ["@vscode/vsce-sign-win32-x64@2.0.2", "", { "os": "win32", "cpu": "x64" }, "sha512-pAiRN6qSAhDM5SVOIxgx+2xnoVUePHbRNC7OD2aOR3WltTKxxF25OfpK8h8UQ7A0BuRkSgREbB59DBlFk4iAeg=="], 140 | 141 | "JSONStream": ["JSONStream@1.3.5", "", { "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" }, "bin": { "JSONStream": "./bin.js" } }, "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ=="], 142 | 143 | "agent-base": ["agent-base@7.1.3", "", {}, "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw=="], 144 | 145 | "ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], 146 | 147 | "ansi-colors": ["ansi-colors@4.1.3", "", {}, "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw=="], 148 | 149 | "ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], 150 | 151 | "ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="], 152 | 153 | "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], 154 | 155 | "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], 156 | 157 | "array-ify": ["array-ify@1.0.0", "", {}, "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng=="], 158 | 159 | "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], 160 | 161 | "azure-devops-node-api": ["azure-devops-node-api@12.5.0", "", { "dependencies": { "tunnel": "0.0.6", "typed-rest-client": "^1.8.4" } }, "sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og=="], 162 | 163 | "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], 164 | 165 | "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], 166 | 167 | "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], 168 | 169 | "bl": ["bl@5.1.0", "", { "dependencies": { "buffer": "^6.0.3", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ=="], 170 | 171 | "boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="], 172 | 173 | "bottleneck": ["bottleneck@2.19.5", "", {}, "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw=="], 174 | 175 | "brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], 176 | 177 | "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], 178 | 179 | "browser-stdout": ["browser-stdout@1.3.1", "", {}, "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw=="], 180 | 181 | "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], 182 | 183 | "buffer-crc32": ["buffer-crc32@0.2.13", "", {}, "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="], 184 | 185 | "buffer-equal-constant-time": ["buffer-equal-constant-time@1.0.1", "", {}, "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="], 186 | 187 | "c8": ["c8@9.1.0", "", { "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@istanbuljs/schema": "^0.1.3", "find-up": "^5.0.0", "foreground-child": "^3.1.1", "istanbul-lib-coverage": "^3.2.0", "istanbul-lib-report": "^3.0.1", "istanbul-reports": "^3.1.6", "test-exclude": "^6.0.0", "v8-to-istanbul": "^9.0.0", "yargs": "^17.7.2", "yargs-parser": "^21.1.1" }, "bin": { "c8": "bin/c8.js" } }, "sha512-mBWcT5iqNir1zIkzSPyI3NCR9EZCVI3WUD+AVO17MVWTSFNyUueXE82qTeampNtTr+ilN/5Ua3j24LgbCKjDVg=="], 188 | 189 | "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.1", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g=="], 190 | 191 | "call-bound": ["call-bound@1.0.3", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "get-intrinsic": "^1.2.6" } }, "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA=="], 192 | 193 | "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], 194 | 195 | "camelcase": ["camelcase@6.3.0", "", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="], 196 | 197 | "chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="], 198 | 199 | "cheerio": ["cheerio@1.0.0", "", { "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", "domhandler": "^5.0.3", "domutils": "^3.1.0", "encoding-sniffer": "^0.2.0", "htmlparser2": "^9.1.0", "parse5": "^7.1.2", "parse5-htmlparser2-tree-adapter": "^7.0.0", "parse5-parser-stream": "^7.1.2", "undici": "^6.19.5", "whatwg-mimetype": "^4.0.0" } }, "sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww=="], 200 | 201 | "cheerio-select": ["cheerio-select@2.1.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", "css-what": "^6.1.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1" } }, "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g=="], 202 | 203 | "chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], 204 | 205 | "chownr": ["chownr@1.1.4", "", {}, "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="], 206 | 207 | "ci-info": ["ci-info@2.0.0", "", {}, "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="], 208 | 209 | "cli-cursor": ["cli-cursor@4.0.0", "", { "dependencies": { "restore-cursor": "^4.0.0" } }, "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg=="], 210 | 211 | "cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], 212 | 213 | "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], 214 | 215 | "cockatiel": ["cockatiel@3.2.1", "", {}, "sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q=="], 216 | 217 | "color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], 218 | 219 | "color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="], 220 | 221 | "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], 222 | 223 | "command-exists": ["command-exists@1.2.9", "", {}, "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w=="], 224 | 225 | "commander": ["commander@6.2.1", "", {}, "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA=="], 226 | 227 | "compare-func": ["compare-func@2.0.0", "", { "dependencies": { "array-ify": "^1.0.0", "dot-prop": "^5.1.0" } }, "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA=="], 228 | 229 | "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], 230 | 231 | "conventional-changelog-angular": ["conventional-changelog-angular@7.0.0", "", { "dependencies": { "compare-func": "^2.0.0" } }, "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ=="], 232 | 233 | "conventional-changelog-conventionalcommits": ["conventional-changelog-conventionalcommits@7.0.2", "", { "dependencies": { "compare-func": "^2.0.0" } }, "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w=="], 234 | 235 | "conventional-commits-parser": ["conventional-commits-parser@5.0.0", "", { "dependencies": { "JSONStream": "^1.3.5", "is-text-path": "^2.0.0", "meow": "^12.0.1", "split2": "^4.0.0" }, "bin": { "conventional-commits-parser": "cli.mjs" } }, "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA=="], 236 | 237 | "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], 238 | 239 | "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], 240 | 241 | "cosmiconfig": ["cosmiconfig@9.0.0", "", { "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg=="], 242 | 243 | "cosmiconfig-typescript-loader": ["cosmiconfig-typescript-loader@6.1.0", "", { "dependencies": { "jiti": "^2.4.1" }, "peerDependencies": { "@types/node": "*", "cosmiconfig": ">=9", "typescript": ">=5" } }, "sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g=="], 244 | 245 | "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], 246 | 247 | "css-select": ["css-select@5.1.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg=="], 248 | 249 | "css-what": ["css-what@6.1.0", "", {}, "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw=="], 250 | 251 | "dargs": ["dargs@8.1.0", "", {}, "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw=="], 252 | 253 | "debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], 254 | 255 | "decamelize": ["decamelize@4.0.0", "", {}, "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ=="], 256 | 257 | "decompress-response": ["decompress-response@6.0.0", "", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="], 258 | 259 | "deep-extend": ["deep-extend@0.6.0", "", {}, "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="], 260 | 261 | "define-lazy-prop": ["define-lazy-prop@2.0.0", "", {}, "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="], 262 | 263 | "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], 264 | 265 | "detect-libc": ["detect-libc@2.0.3", "", {}, "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw=="], 266 | 267 | "diff": ["diff@4.0.2", "", {}, "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A=="], 268 | 269 | "dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], 270 | 271 | "domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], 272 | 273 | "domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], 274 | 275 | "domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="], 276 | 277 | "dot-prop": ["dot-prop@5.3.0", "", { "dependencies": { "is-obj": "^2.0.0" } }, "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q=="], 278 | 279 | "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], 280 | 281 | "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], 282 | 283 | "ecdsa-sig-formatter": ["ecdsa-sig-formatter@1.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ=="], 284 | 285 | "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], 286 | 287 | "encoding-sniffer": ["encoding-sniffer@0.2.0", "", { "dependencies": { "iconv-lite": "^0.6.3", "whatwg-encoding": "^3.1.1" } }, "sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg=="], 288 | 289 | "end-of-stream": ["end-of-stream@1.4.4", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q=="], 290 | 291 | "enhanced-resolve": ["enhanced-resolve@5.18.0", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ=="], 292 | 293 | "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], 294 | 295 | "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], 296 | 297 | "error-ex": ["error-ex@1.3.2", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g=="], 298 | 299 | "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], 300 | 301 | "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], 302 | 303 | "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], 304 | 305 | "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], 306 | 307 | "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], 308 | 309 | "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], 310 | 311 | "expand-template": ["expand-template@2.0.3", "", {}, "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg=="], 312 | 313 | "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], 314 | 315 | "fast-uri": ["fast-uri@3.0.6", "", {}, "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw=="], 316 | 317 | "fd-slicer": ["fd-slicer@1.1.0", "", { "dependencies": { "pend": "~1.2.0" } }, "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g=="], 318 | 319 | "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], 320 | 321 | "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], 322 | 323 | "flat": ["flat@5.0.2", "", { "bin": { "flat": "cli.js" } }, "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ=="], 324 | 325 | "follow-redirects": ["follow-redirects@1.15.9", "", {}, "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ=="], 326 | 327 | "foreground-child": ["foreground-child@3.3.0", "", { "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" } }, "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg=="], 328 | 329 | "form-data": ["form-data@4.0.1", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw=="], 330 | 331 | "fs-constants": ["fs-constants@1.0.0", "", {}, "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="], 332 | 333 | "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], 334 | 335 | "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], 336 | 337 | "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], 338 | 339 | "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], 340 | 341 | "get-intrinsic": ["get-intrinsic@1.2.7", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", "get-proto": "^1.0.0", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA=="], 342 | 343 | "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], 344 | 345 | "git-raw-commits": ["git-raw-commits@4.0.0", "", { "dependencies": { "dargs": "^8.0.0", "meow": "^12.0.1", "split2": "^4.0.0" }, "bin": { "git-raw-commits": "cli.mjs" } }, "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ=="], 346 | 347 | "github-from-package": ["github-from-package@0.0.0", "", {}, "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="], 348 | 349 | "glob": ["glob@10.4.5", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="], 350 | 351 | "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], 352 | 353 | "global-directory": ["global-directory@4.0.1", "", { "dependencies": { "ini": "4.1.1" } }, "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q=="], 354 | 355 | "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], 356 | 357 | "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], 358 | 359 | "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], 360 | 361 | "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], 362 | 363 | "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], 364 | 365 | "he": ["he@1.2.0", "", { "bin": { "he": "bin/he" } }, "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="], 366 | 367 | "hosted-git-info": ["hosted-git-info@4.1.0", "", { "dependencies": { "lru-cache": "^6.0.0" } }, "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA=="], 368 | 369 | "html-escaper": ["html-escaper@2.0.2", "", {}, "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg=="], 370 | 371 | "htmlparser2": ["htmlparser2@9.1.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.1.0", "entities": "^4.5.0" } }, "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ=="], 372 | 373 | "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], 374 | 375 | "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], 376 | 377 | "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], 378 | 379 | "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], 380 | 381 | "immediate": ["immediate@3.0.6", "", {}, "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="], 382 | 383 | "import-fresh": ["import-fresh@3.3.0", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw=="], 384 | 385 | "import-meta-resolve": ["import-meta-resolve@4.1.0", "", {}, "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw=="], 386 | 387 | "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], 388 | 389 | "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], 390 | 391 | "ini": ["ini@4.1.1", "", {}, "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g=="], 392 | 393 | "is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="], 394 | 395 | "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="], 396 | 397 | "is-ci": ["is-ci@2.0.0", "", { "dependencies": { "ci-info": "^2.0.0" }, "bin": { "is-ci": "bin.js" } }, "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w=="], 398 | 399 | "is-docker": ["is-docker@2.2.1", "", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="], 400 | 401 | "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], 402 | 403 | "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], 404 | 405 | "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], 406 | 407 | "is-interactive": ["is-interactive@2.0.0", "", {}, "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ=="], 408 | 409 | "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], 410 | 411 | "is-obj": ["is-obj@2.0.0", "", {}, "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="], 412 | 413 | "is-plain-obj": ["is-plain-obj@2.1.0", "", {}, "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA=="], 414 | 415 | "is-text-path": ["is-text-path@2.0.0", "", { "dependencies": { "text-extensions": "^2.0.0" } }, "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw=="], 416 | 417 | "is-unicode-supported": ["is-unicode-supported@1.3.0", "", {}, "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ=="], 418 | 419 | "is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], 420 | 421 | "isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], 422 | 423 | "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], 424 | 425 | "istanbul-lib-coverage": ["istanbul-lib-coverage@3.2.2", "", {}, "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg=="], 426 | 427 | "istanbul-lib-report": ["istanbul-lib-report@3.0.1", "", { "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", "supports-color": "^7.1.0" } }, "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw=="], 428 | 429 | "istanbul-reports": ["istanbul-reports@3.1.7", "", { "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" } }, "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g=="], 430 | 431 | "jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], 432 | 433 | "jiti": ["jiti@2.4.2", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A=="], 434 | 435 | "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], 436 | 437 | "js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], 438 | 439 | "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="], 440 | 441 | "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], 442 | 443 | "jsonc-parser": ["jsonc-parser@3.3.1", "", {}, "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ=="], 444 | 445 | "jsonparse": ["jsonparse@1.3.1", "", {}, "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg=="], 446 | 447 | "jsonwebtoken": ["jsonwebtoken@9.0.2", "", { "dependencies": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", "lodash.isinteger": "^4.0.4", "lodash.isnumber": "^3.0.3", "lodash.isplainobject": "^4.0.6", "lodash.isstring": "^4.0.1", "lodash.once": "^4.0.0", "ms": "^2.1.1", "semver": "^7.5.4" } }, "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ=="], 448 | 449 | "jszip": ["jszip@3.10.1", "", { "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", "readable-stream": "~2.3.6", "setimmediate": "^1.0.5" } }, "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g=="], 450 | 451 | "jwa": ["jwa@2.0.0", "", { "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA=="], 452 | 453 | "jws": ["jws@4.0.0", "", { "dependencies": { "jwa": "^2.0.0", "safe-buffer": "^5.0.1" } }, "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg=="], 454 | 455 | "keytar": ["keytar@7.9.0", "", { "dependencies": { "node-addon-api": "^4.3.0", "prebuild-install": "^7.0.1" } }, "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ=="], 456 | 457 | "lefthook": ["lefthook@1.10.10", "", { "optionalDependencies": { "lefthook-darwin-arm64": "1.10.10", "lefthook-darwin-x64": "1.10.10", "lefthook-freebsd-arm64": "1.10.10", "lefthook-freebsd-x64": "1.10.10", "lefthook-linux-arm64": "1.10.10", "lefthook-linux-x64": "1.10.10", "lefthook-openbsd-arm64": "1.10.10", "lefthook-openbsd-x64": "1.10.10", "lefthook-windows-arm64": "1.10.10", "lefthook-windows-x64": "1.10.10" }, "bin": { "lefthook": "bin/index.js" } }, "sha512-YW0fTONgOXsephvXq2gIFbegCW19MHCyKYX7JDWmzVF1ZiVMnDBYUL/SP3i0RtFvlCmqENl4SgKwYYQGUMnvig=="], 458 | 459 | "lefthook-darwin-arm64": ["lefthook-darwin-arm64@1.10.10", "", { "os": "darwin", "cpu": "arm64" }, "sha512-hEypKdwWpmNSl4Q8eJxgmlGb2ybJj1+W5/v13Mxc+ApEmjbpNiJzPcdjC9zyaMEpPK4EybiHy8g5ZC0dLOwkpA=="], 460 | 461 | "lefthook-darwin-x64": ["lefthook-darwin-x64@1.10.10", "", { "os": "darwin", "cpu": "x64" }, "sha512-9xNbeE78i4Amz+uOheg9dcy7X/6X12h98SUMrYWk7fONvjW/Bp9h6nPGIGxI5krHp9iRB8rhmo33ljVDVtTlyg=="], 462 | 463 | "lefthook-freebsd-arm64": ["lefthook-freebsd-arm64@1.10.10", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-GT9wYxPxkvO1rtIAmctayT9xQIVII5xUIG3Pv6gZo+r6yEyle0EFTLFDbmVje7p7rQNCsvJ8XzCNdnyDrva90g=="], 464 | 465 | "lefthook-freebsd-x64": ["lefthook-freebsd-x64@1.10.10", "", { "os": "freebsd", "cpu": "x64" }, "sha512-2BB/HRhEb9wGpk5K38iNkHtMPnn+TjXDtFG6C/AmUPLXLNhGnNiYp+v2uhUE8quWzxJx7QzfnU7Ga+/gzJcIcw=="], 466 | 467 | "lefthook-linux-arm64": ["lefthook-linux-arm64@1.10.10", "", { "os": "linux", "cpu": "arm64" }, "sha512-GJ7GALKJ1NcMnNZG9uY+zJR3yS8q7/MgcHFWSJhBl+w4KTiiD/RAdSl5ALwEK2+UX36Eo+7iQA7AXzaRdAii4w=="], 468 | 469 | "lefthook-linux-x64": ["lefthook-linux-x64@1.10.10", "", { "os": "linux", "cpu": "x64" }, "sha512-dWUvPM9YTIJ3+X9dB+8iOnzoVHbnNmpscmUqEOKSeizgBrvuuIYKZJGDyjEtw65Qnmn1SJ7ouSaKK93p5c7SkQ=="], 470 | 471 | "lefthook-openbsd-arm64": ["lefthook-openbsd-arm64@1.10.10", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-KnwDyxOvbvGSBTbEF/OxkynZRPLowd3mIXUKHtkg3ABcQ4UREalX+Sh0nWU2dNjQbINx7Eh6B42TxNC7h+qXEg=="], 472 | 473 | "lefthook-openbsd-x64": ["lefthook-openbsd-x64@1.10.10", "", { "os": "openbsd", "cpu": "x64" }, "sha512-49nnG886CI3WkrzVJ71D1M2KWpUYN1BP9LMKNzN11cmZ0j6dUK4hj3nbW+NcrKXxgYzzyLU3FFwrc51OVy2eKA=="], 474 | 475 | "lefthook-windows-arm64": ["lefthook-windows-arm64@1.10.10", "", { "os": "win32", "cpu": "arm64" }, "sha512-9ni0Tsnk+O5oL7EBfKj9C5ZctD1mrTyHCtiu1zQJBbREReJtPjIM9DwWzecfbuVfrIlpbviVQvx5mjZ44bqlWw=="], 476 | 477 | "lefthook-windows-x64": ["lefthook-windows-x64@1.10.10", "", { "os": "win32", "cpu": "x64" }, "sha512-gkKWYrlay4iecFfY1Ris5VcRYa0BaNJKMk0qE/wZmIpMgu4GvNg+f9BEwTMflkQIanABduT9lrECaL1lX5ClKw=="], 478 | 479 | "leven": ["leven@3.1.0", "", {}, "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A=="], 480 | 481 | "lie": ["lie@3.3.0", "", { "dependencies": { "immediate": "~3.0.5" } }, "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ=="], 482 | 483 | "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], 484 | 485 | "linkify-it": ["linkify-it@5.0.0", "", { "dependencies": { "uc.micro": "^2.0.0" } }, "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ=="], 486 | 487 | "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], 488 | 489 | "lodash.camelcase": ["lodash.camelcase@4.3.0", "", {}, "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="], 490 | 491 | "lodash.includes": ["lodash.includes@4.3.0", "", {}, "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="], 492 | 493 | "lodash.isboolean": ["lodash.isboolean@3.0.3", "", {}, "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="], 494 | 495 | "lodash.isinteger": ["lodash.isinteger@4.0.4", "", {}, "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA=="], 496 | 497 | "lodash.isnumber": ["lodash.isnumber@3.0.3", "", {}, "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw=="], 498 | 499 | "lodash.isplainobject": ["lodash.isplainobject@4.0.6", "", {}, "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="], 500 | 501 | "lodash.isstring": ["lodash.isstring@4.0.1", "", {}, "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="], 502 | 503 | "lodash.kebabcase": ["lodash.kebabcase@4.1.1", "", {}, "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g=="], 504 | 505 | "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], 506 | 507 | "lodash.mergewith": ["lodash.mergewith@4.6.2", "", {}, "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ=="], 508 | 509 | "lodash.once": ["lodash.once@4.1.1", "", {}, "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="], 510 | 511 | "lodash.snakecase": ["lodash.snakecase@4.1.1", "", {}, "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw=="], 512 | 513 | "lodash.startcase": ["lodash.startcase@4.4.0", "", {}, "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg=="], 514 | 515 | "lodash.uniq": ["lodash.uniq@4.5.0", "", {}, "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="], 516 | 517 | "lodash.upperfirst": ["lodash.upperfirst@4.3.1", "", {}, "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg=="], 518 | 519 | "log-symbols": ["log-symbols@4.1.0", "", { "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" } }, "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg=="], 520 | 521 | "lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], 522 | 523 | "make-dir": ["make-dir@4.0.0", "", { "dependencies": { "semver": "^7.5.3" } }, "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw=="], 524 | 525 | "markdown-it": ["markdown-it@14.1.0", "", { "dependencies": { "argparse": "^2.0.1", "entities": "^4.4.0", "linkify-it": "^5.0.0", "mdurl": "^2.0.0", "punycode.js": "^2.3.1", "uc.micro": "^2.1.0" }, "bin": { "markdown-it": "bin/markdown-it.mjs" } }, "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg=="], 526 | 527 | "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], 528 | 529 | "mdurl": ["mdurl@2.0.0", "", {}, "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w=="], 530 | 531 | "meow": ["meow@12.1.1", "", {}, "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw=="], 532 | 533 | "mime": ["mime@1.6.0", "", { "bin": { "mime": "cli.js" } }, "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="], 534 | 535 | "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], 536 | 537 | "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], 538 | 539 | "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], 540 | 541 | "mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="], 542 | 543 | "minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], 544 | 545 | "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], 546 | 547 | "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], 548 | 549 | "mkdirp-classic": ["mkdirp-classic@0.5.3", "", {}, "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="], 550 | 551 | "mocha": ["mocha@10.8.2", "", { "dependencies": { "ansi-colors": "^4.1.3", "browser-stdout": "^1.3.1", "chokidar": "^3.5.3", "debug": "^4.3.5", "diff": "^5.2.0", "escape-string-regexp": "^4.0.0", "find-up": "^5.0.0", "glob": "^8.1.0", "he": "^1.2.0", "js-yaml": "^4.1.0", "log-symbols": "^4.1.0", "minimatch": "^5.1.6", "ms": "^2.1.3", "serialize-javascript": "^6.0.2", "strip-json-comments": "^3.1.1", "supports-color": "^8.1.1", "workerpool": "^6.5.1", "yargs": "^16.2.0", "yargs-parser": "^20.2.9", "yargs-unparser": "^2.0.0" }, "bin": { "mocha": "bin/mocha.js", "_mocha": "bin/_mocha" } }, "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg=="], 552 | 553 | "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], 554 | 555 | "mute-stream": ["mute-stream@0.0.8", "", {}, "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="], 556 | 557 | "napi-build-utils": ["napi-build-utils@2.0.0", "", {}, "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA=="], 558 | 559 | "node-abi": ["node-abi@3.73.0", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-z8iYzQGBu35ZkTQ9mtR8RqugJZ9RCLn8fv3d7LsgDBzOijGQP3RdKTX4LA7LXw03ZhU5z0l4xfhIMgSES31+cg=="], 560 | 561 | "node-addon-api": ["node-addon-api@4.3.0", "", {}, "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ=="], 562 | 563 | "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], 564 | 565 | "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], 566 | 567 | "object-inspect": ["object-inspect@1.13.3", "", {}, "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA=="], 568 | 569 | "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], 570 | 571 | "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], 572 | 573 | "open": ["open@8.4.2", "", { "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", "is-wsl": "^2.2.0" } }, "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ=="], 574 | 575 | "ora": ["ora@7.0.1", "", { "dependencies": { "chalk": "^5.3.0", "cli-cursor": "^4.0.0", "cli-spinners": "^2.9.0", "is-interactive": "^2.0.0", "is-unicode-supported": "^1.3.0", "log-symbols": "^5.1.0", "stdin-discarder": "^0.1.0", "string-width": "^6.1.0", "strip-ansi": "^7.1.0" } }, "sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw=="], 576 | 577 | "ovsx": ["ovsx@0.10.1", "", { "dependencies": { "@vscode/vsce": "^3.2.1", "commander": "^6.2.1", "follow-redirects": "^1.14.6", "is-ci": "^2.0.0", "leven": "^3.1.0", "semver": "^7.6.0", "tmp": "^0.2.3", "yauzl": "^3.1.3" }, "bin": "lib/ovsx" }, "sha512-8i7+MJMMeq73m1zPEIClSFe17SNuuzU5br7G77ZIfOC24elB4pGQs0N1qRd+gnnbyhL5Qu96G21nFOVOBa2OBg=="], 578 | 579 | "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], 580 | 581 | "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], 582 | 583 | "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], 584 | 585 | "pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="], 586 | 587 | "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], 588 | 589 | "parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], 590 | 591 | "parse-semver": ["parse-semver@1.1.1", "", { "dependencies": { "semver": "^5.1.0" } }, "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ=="], 592 | 593 | "parse5": ["parse5@7.2.1", "", { "dependencies": { "entities": "^4.5.0" } }, "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ=="], 594 | 595 | "parse5-htmlparser2-tree-adapter": ["parse5-htmlparser2-tree-adapter@7.1.0", "", { "dependencies": { "domhandler": "^5.0.3", "parse5": "^7.0.0" } }, "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g=="], 596 | 597 | "parse5-parser-stream": ["parse5-parser-stream@7.1.2", "", { "dependencies": { "parse5": "^7.0.0" } }, "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow=="], 598 | 599 | "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], 600 | 601 | "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], 602 | 603 | "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], 604 | 605 | "path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], 606 | 607 | "pend": ["pend@1.2.0", "", {}, "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="], 608 | 609 | "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], 610 | 611 | "picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], 612 | 613 | "prebuild-install": ["prebuild-install@7.1.3", "", { "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.3", "mkdirp-classic": "^0.5.3", "napi-build-utils": "^2.0.0", "node-abi": "^3.3.0", "pump": "^3.0.0", "rc": "^1.2.7", "simple-get": "^4.0.0", "tar-fs": "^2.0.0", "tunnel-agent": "^0.6.0" }, "bin": { "prebuild-install": "bin.js" } }, "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug=="], 614 | 615 | "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], 616 | 617 | "pump": ["pump@3.0.2", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw=="], 618 | 619 | "punycode.js": ["punycode.js@2.3.1", "", {}, "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA=="], 620 | 621 | "qs": ["qs@6.14.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w=="], 622 | 623 | "randombytes": ["randombytes@2.1.0", "", { "dependencies": { "safe-buffer": "^5.1.0" } }, "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ=="], 624 | 625 | "rc": ["rc@1.2.8", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="], 626 | 627 | "read": ["read@1.0.7", "", { "dependencies": { "mute-stream": "~0.0.4" } }, "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ=="], 628 | 629 | "readable-stream": ["readable-stream@2.3.8", "", { "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" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], 630 | 631 | "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], 632 | 633 | "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], 634 | 635 | "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], 636 | 637 | "resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], 638 | 639 | "restore-cursor": ["restore-cursor@4.0.0", "", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg=="], 640 | 641 | "safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], 642 | 643 | "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], 644 | 645 | "sax": ["sax@1.4.1", "", {}, "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg=="], 646 | 647 | "semver": ["semver@7.6.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A=="], 648 | 649 | "serialize-javascript": ["serialize-javascript@6.0.2", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g=="], 650 | 651 | "setimmediate": ["setimmediate@1.0.5", "", {}, "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="], 652 | 653 | "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], 654 | 655 | "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], 656 | 657 | "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], 658 | 659 | "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], 660 | 661 | "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], 662 | 663 | "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], 664 | 665 | "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], 666 | 667 | "simple-concat": ["simple-concat@1.0.1", "", {}, "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="], 668 | 669 | "simple-get": ["simple-get@4.0.1", "", { "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", "simple-concat": "^1.0.0" } }, "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA=="], 670 | 671 | "split2": ["split2@4.2.0", "", {}, "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="], 672 | 673 | "stdin-discarder": ["stdin-discarder@0.1.0", "", { "dependencies": { "bl": "^5.0.0" } }, "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ=="], 674 | 675 | "stoppable": ["stoppable@1.1.0", "", {}, "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw=="], 676 | 677 | "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], 678 | 679 | "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], 680 | 681 | "string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], 682 | 683 | "strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], 684 | 685 | "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], 686 | 687 | "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], 688 | 689 | "supports-color": ["supports-color@9.4.0", "", {}, "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw=="], 690 | 691 | "tapable": ["tapable@2.2.1", "", {}, "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="], 692 | 693 | "tar-fs": ["tar-fs@2.1.2", "", { "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.1.4" } }, "sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA=="], 694 | 695 | "tar-stream": ["tar-stream@2.2.0", "", { "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" } }, "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ=="], 696 | 697 | "test-exclude": ["test-exclude@6.0.0", "", { "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" } }, "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w=="], 698 | 699 | "text-extensions": ["text-extensions@2.4.0", "", {}, "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g=="], 700 | 701 | "through": ["through@2.3.8", "", {}, "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="], 702 | 703 | "tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], 704 | 705 | "tmp": ["tmp@0.2.3", "", {}, "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w=="], 706 | 707 | "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], 708 | 709 | "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], 710 | 711 | "tunnel": ["tunnel@0.0.6", "", {}, "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="], 712 | 713 | "tunnel-agent": ["tunnel-agent@0.6.0", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="], 714 | 715 | "typed-rest-client": ["typed-rest-client@1.8.11", "", { "dependencies": { "qs": "^6.9.1", "tunnel": "0.0.6", "underscore": "^1.12.1" } }, "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA=="], 716 | 717 | "typescript": ["typescript@5.7.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw=="], 718 | 719 | "uc.micro": ["uc.micro@2.1.0", "", {}, "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A=="], 720 | 721 | "underscore": ["underscore@1.13.7", "", {}, "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g=="], 722 | 723 | "undici": ["undici@6.21.1", "", {}, "sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ=="], 724 | 725 | "undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], 726 | 727 | "unicorn-magic": ["unicorn-magic@0.1.0", "", {}, "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ=="], 728 | 729 | "url-join": ["url-join@4.0.1", "", {}, "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA=="], 730 | 731 | "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], 732 | 733 | "uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], 734 | 735 | "v8-to-istanbul": ["v8-to-istanbul@9.3.0", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^2.0.0" } }, "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA=="], 736 | 737 | "vscode-jsonrpc": ["vscode-jsonrpc@8.2.0", "", {}, "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA=="], 738 | 739 | "vscode-languageclient": ["vscode-languageclient@9.0.1", "", { "dependencies": { "minimatch": "^5.1.0", "semver": "^7.3.7", "vscode-languageserver-protocol": "3.17.5" } }, "sha512-JZiimVdvimEuHh5olxhxkht09m3JzUGwggb5eRUkzzJhZ2KjCN0nh55VfiED9oez9DyF8/fz1g1iBV3h+0Z2EA=="], 740 | 741 | "vscode-languageserver-protocol": ["vscode-languageserver-protocol@3.17.5", "", { "dependencies": { "vscode-jsonrpc": "8.2.0", "vscode-languageserver-types": "3.17.5" } }, "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg=="], 742 | 743 | "vscode-languageserver-types": ["vscode-languageserver-types@3.17.5", "", {}, "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="], 744 | 745 | "vscode-oniguruma": ["vscode-oniguruma@1.7.0", "", {}, "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA=="], 746 | 747 | "vscode-textmate": ["vscode-textmate@7.0.4", "", {}, "sha512-9hJp0xL7HW1Q5OgGe03NACo7yiCTMEk3WU/rtKXUbncLtdg6rVVNJnHwD88UhbIYU2KoxY0Dih0x+kIsmUKn2A=="], 748 | 749 | "vscode-tmgrammar-test": ["vscode-tmgrammar-test@0.1.3", "", { "dependencies": { "bottleneck": "^2.19.5", "chalk": "^2.4.2", "commander": "^9.2.0", "diff": "^4.0.2", "glob": "^7.1.6", "vscode-oniguruma": "^1.5.1", "vscode-textmate": "^7.0.1" }, "bin": { "vscode-tmgrammar-test": "dist/unit.js", "vscode-tmgrammar-snap": "dist/snapshot.js" } }, "sha512-Wg6Pz+ePAT1O+F/A1Fc4wS5vY2X+HNtgN4qMdL+65NLQYd1/zdDWH4fhwsLjX8wTzeXkMy49Cr4ZqWTJ7VnVxg=="], 750 | 751 | "vscode-variables": ["vscode-variables@1.0.1", "", {}, "sha512-iZ1d08I30ktqv4mMszGz2Y2o53r+PBpF5tEnwf8NNzKoxeuo0thoaFRG98uJkNVhOtiDmH4HJ3KlqfjM6XIxbA=="], 752 | 753 | "whatwg-encoding": ["whatwg-encoding@3.1.1", "", { "dependencies": { "iconv-lite": "0.6.3" } }, "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ=="], 754 | 755 | "whatwg-mimetype": ["whatwg-mimetype@4.0.0", "", {}, "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg=="], 756 | 757 | "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], 758 | 759 | "workerpool": ["workerpool@6.5.1", "", {}, "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA=="], 760 | 761 | "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], 762 | 763 | "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], 764 | 765 | "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], 766 | 767 | "xml2js": ["xml2js@0.5.0", "", { "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" } }, "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA=="], 768 | 769 | "xmlbuilder": ["xmlbuilder@11.0.1", "", {}, "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="], 770 | 771 | "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], 772 | 773 | "yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], 774 | 775 | "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], 776 | 777 | "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], 778 | 779 | "yargs-unparser": ["yargs-unparser@2.0.0", "", { "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", "flat": "^5.0.2", "is-plain-obj": "^2.1.0" } }, "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA=="], 780 | 781 | "yauzl": ["yauzl@2.10.0", "", { "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g=="], 782 | 783 | "yazl": ["yazl@2.5.1", "", { "dependencies": { "buffer-crc32": "~0.2.3" } }, "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw=="], 784 | 785 | "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], 786 | 787 | "@azure/msal-node/@azure/msal-common": ["@azure/msal-common@14.16.0", "", {}, "sha512-1KOZj9IpcDSwpNiQNjt0jDYZpQvNZay7QAEi/5DLubay40iGYtLzya/jbjRPLyOTZhEKyL1MzPuw2HqBCjceYA=="], 788 | 789 | "@commitlint/format/chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="], 790 | 791 | "@commitlint/load/chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="], 792 | 793 | "@commitlint/top-level/find-up": ["find-up@7.0.0", "", { "dependencies": { "locate-path": "^7.2.0", "path-exists": "^5.0.0", "unicorn-magic": "^0.1.0" } }, "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g=="], 794 | 795 | "@commitlint/types/chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="], 796 | 797 | "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], 798 | 799 | "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], 800 | 801 | "@vscode/vsce/glob": ["glob@11.0.1", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^4.0.1", "minimatch": "^10.0.0", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw=="], 802 | 803 | "@vscode/vsce/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], 804 | 805 | "bl/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], 806 | 807 | "chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], 808 | 809 | "chalk/supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], 810 | 811 | "cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], 812 | 813 | "ecdsa-sig-formatter/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], 814 | 815 | "import-fresh/resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], 816 | 817 | "istanbul-lib-report/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], 818 | 819 | "jsonwebtoken/jws": ["jws@3.2.2", "", { "dependencies": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" } }, "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA=="], 820 | 821 | "jwa/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], 822 | 823 | "jws/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], 824 | 825 | "log-symbols/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], 826 | 827 | "log-symbols/is-unicode-supported": ["is-unicode-supported@0.1.0", "", {}, "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="], 828 | 829 | "mocha/diff": ["diff@5.2.0", "", {}, "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A=="], 830 | 831 | "mocha/glob": ["glob@8.1.0", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", "once": "^1.3.0" } }, "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ=="], 832 | 833 | "mocha/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], 834 | 835 | "mocha/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], 836 | 837 | "mocha/yargs": ["yargs@16.2.0", "", { "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" } }, "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw=="], 838 | 839 | "mocha/yargs-parser": ["yargs-parser@20.2.9", "", {}, "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="], 840 | 841 | "ora/chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="], 842 | 843 | "ora/log-symbols": ["log-symbols@5.1.0", "", { "dependencies": { "chalk": "^5.0.0", "is-unicode-supported": "^1.1.0" } }, "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA=="], 844 | 845 | "ora/string-width": ["string-width@6.1.0", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^10.2.1", "strip-ansi": "^7.0.1" } }, "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ=="], 846 | 847 | "ovsx/yauzl": ["yauzl@3.2.0", "", { "dependencies": { "buffer-crc32": "~0.2.3", "pend": "~1.2.0" } }, "sha512-Ow9nuGZE+qp1u4JIPvg+uCiUr7xGQWdff7JQSk5VGYTAZMDe2q8lxJ10ygv10qmSj031Ty/6FNJpLO4o1Sgc+w=="], 848 | 849 | "parse-semver/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], 850 | 851 | "path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], 852 | 853 | "randombytes/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], 854 | 855 | "rc/ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], 856 | 857 | "rc/strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], 858 | 859 | "restore-cursor/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], 860 | 861 | "string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], 862 | 863 | "string-width-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], 864 | 865 | "strip-ansi-cjs/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], 866 | 867 | "tar-stream/bl": ["bl@4.1.0", "", { "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="], 868 | 869 | "tar-stream/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], 870 | 871 | "test-exclude/glob": ["glob@7.2.3", "", { "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" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], 872 | 873 | "test-exclude/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], 874 | 875 | "tunnel-agent/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], 876 | 877 | "vscode-languageclient/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], 878 | 879 | "vscode-tmgrammar-test/commander": ["commander@9.5.0", "", {}, "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ=="], 880 | 881 | "vscode-tmgrammar-test/glob": ["glob@7.2.3", "", { "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" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], 882 | 883 | "wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], 884 | 885 | "wrap-ansi/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], 886 | 887 | "wrap-ansi-cjs/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], 888 | 889 | "wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], 890 | 891 | "@commitlint/top-level/find-up/locate-path": ["locate-path@7.2.0", "", { "dependencies": { "p-locate": "^6.0.0" } }, "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA=="], 892 | 893 | "@commitlint/top-level/find-up/path-exists": ["path-exists@5.0.0", "", {}, "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ=="], 894 | 895 | "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], 896 | 897 | "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], 898 | 899 | "@vscode/vsce/glob/jackspeak": ["jackspeak@4.0.2", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" } }, "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw=="], 900 | 901 | "@vscode/vsce/glob/minimatch": ["minimatch@10.0.1", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ=="], 902 | 903 | "@vscode/vsce/glob/path-scurry": ["path-scurry@2.0.0", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg=="], 904 | 905 | "@vscode/vsce/minimatch/brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], 906 | 907 | "bl/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], 908 | 909 | "chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], 910 | 911 | "cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], 912 | 913 | "jsonwebtoken/jws/jwa": ["jwa@1.4.1", "", { "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA=="], 914 | 915 | "jsonwebtoken/jws/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], 916 | 917 | "log-symbols/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], 918 | 919 | "log-symbols/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], 920 | 921 | "mocha/yargs/cliui": ["cliui@7.0.4", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ=="], 922 | 923 | "ora/string-width/emoji-regex": ["emoji-regex@10.4.0", "", {}, "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw=="], 924 | 925 | "string-width-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], 926 | 927 | "string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], 928 | 929 | "tar-stream/bl/buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], 930 | 931 | "tar-stream/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], 932 | 933 | "test-exclude/minimatch/brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], 934 | 935 | "vscode-tmgrammar-test/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], 936 | 937 | "wrap-ansi-cjs/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], 938 | 939 | "wrap-ansi-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], 940 | 941 | "wrap-ansi/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], 942 | 943 | "wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], 944 | 945 | "@commitlint/top-level/find-up/locate-path/p-locate": ["p-locate@6.0.0", "", { "dependencies": { "p-limit": "^4.0.0" } }, "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw=="], 946 | 947 | "@vscode/vsce/glob/path-scurry/lru-cache": ["lru-cache@11.0.2", "", {}, "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA=="], 948 | 949 | "bl/readable-stream/string_decoder/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], 950 | 951 | "log-symbols/chalk/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], 952 | 953 | "mocha/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], 954 | 955 | "tar-stream/readable-stream/string_decoder/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], 956 | 957 | "vscode-tmgrammar-test/glob/minimatch/brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], 958 | 959 | "wrap-ansi-cjs/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], 960 | 961 | "wrap-ansi/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], 962 | 963 | "@commitlint/top-level/find-up/locate-path/p-locate/p-limit": ["p-limit@4.0.0", "", { "dependencies": { "yocto-queue": "^1.0.0" } }, "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ=="], 964 | 965 | "log-symbols/chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], 966 | 967 | "mocha/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], 968 | 969 | "@commitlint/top-level/find-up/locate-path/p-locate/p-limit/yocto-queue": ["yocto-queue@1.1.1", "", {}, "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g=="], 970 | } 971 | } 972 | -------------------------------------------------------------------------------- /commitlint.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { extends: ["@commitlint/config-conventional"] }; 2 | -------------------------------------------------------------------------------- /images/docs/linting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nix-community/vscode-nix-ide/126d0c92a08d7e0b0265dd63cddd59a5ef79318a/images/docs/linting.png -------------------------------------------------------------------------------- /images/docs/md-embed-nix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nix-community/vscode-nix-ide/126d0c92a08d7e0b0265dd63cddd59a5ef79318a/images/docs/md-embed-nix.png -------------------------------------------------------------------------------- /images/docs/nix-syntax-highlight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nix-community/vscode-nix-ide/126d0c92a08d7e0b0265dd63cddd59a5ef79318a/images/docs/nix-syntax-highlight.png -------------------------------------------------------------------------------- /images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nix-community/vscode-nix-ide/126d0c92a08d7e0b0265dd63cddd59a5ef79318a/images/icon.png -------------------------------------------------------------------------------- /install.md: -------------------------------------------------------------------------------- 1 | ## Installation 🔨 2 | 3 | Available on both the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=jnoortheen.nix-ide) and the [Open VSX Registry](https://open-vsx.org/extension/jnoortheen/nix-ide). 4 | 5 | You can also open the Command Palette (Ctrl+Shift+P on Windows/Linux or Cmd+Shift+P on macOS) and enter `ext install jnoortheen.nix-ide` to install the extension, or download it from the [latest release](https://github.com/nix-community/vscode-nix-ide/releases/latest). 6 | -------------------------------------------------------------------------------- /language-configuration.json: -------------------------------------------------------------------------------- 1 | { 2 | "comments": { 3 | // symbol used for single line comment. Remove this entry if your language does not support line comments 4 | "lineComment": "#", 5 | // symbols used for start and end a block comment. Remove this entry if your language does not support block comments 6 | "blockComment": [ 7 | "/*", 8 | "*/" 9 | ] 10 | }, 11 | // symbols used as brackets 12 | "brackets": [ 13 | [ 14 | "${", 15 | "}" 16 | ], 17 | [ 18 | "{", 19 | "}" 20 | ], 21 | [ 22 | "[", 23 | "]" 24 | ], 25 | [ 26 | "(", 27 | ")" 28 | ], 29 | [ 30 | "<", 31 | ">" 32 | ] 33 | ], 34 | // symbols that are auto closed when typing 35 | "autoClosingPairs": [ 36 | { 37 | "open": "{", 38 | "close": "}" 39 | }, 40 | { 41 | "open": "[", 42 | "close": "]" 43 | }, 44 | { 45 | "open": "(", 46 | "close": ")" 47 | }, 48 | { 49 | "open": "\"", 50 | "close": "\"", 51 | "notIn": [ 52 | "string" 53 | ] 54 | }, 55 | { 56 | "open": "''", 57 | "close": "''", 58 | "notIn": [ 59 | "string", 60 | "comment" 61 | ] 62 | }, 63 | { 64 | "open": "/**", 65 | "close": " */", 66 | "notIn": [ 67 | "string" 68 | ] 69 | } 70 | ], 71 | "autoCloseBefore": ";:.,=}])>` \n\t\"", 72 | // symbols that can be used to surround a selection 73 | "surroundingPairs": [ 74 | [ 75 | "{", 76 | "}" 77 | ], 78 | [ 79 | "[", 80 | "]" 81 | ], 82 | [ 83 | "(", 84 | ")" 85 | ], 86 | [ 87 | "<", 88 | ">" 89 | ], 90 | [ 91 | "\"", 92 | "\"" 93 | ], 94 | [ 95 | "'", 96 | "'" 97 | ], 98 | [ 99 | "''", 100 | "''" 101 | ], 102 | ], 103 | "folding": { 104 | "markers": { 105 | "start": "^\\s*#\\s*#?region\\b", 106 | "end": "^\\s*#\\s*#?endregion\\b" 107 | } 108 | }, 109 | "onEnterRules": [ 110 | { 111 | "beforeText": "^.*\\blet\\s*$", 112 | "afterText": "\\s*in\\b.*$", 113 | "action": { 114 | "indent": "indentOutdent" 115 | } 116 | }, 117 | { 118 | "beforeText": "^.*\\bif\\s*$", 119 | "afterText": "\\s*then\\b.*$", 120 | "action": { 121 | "indent": "indentOutdent" 122 | } 123 | }, 124 | { 125 | "beforeText": "^.*\\bthen\\s*$", 126 | "afterText": "\\s*else\\b.*$", 127 | "action": { 128 | "indent": "indentOutdent" 129 | } 130 | }, 131 | { 132 | "beforeText": "^.*''\\s*$", 133 | "afterText": "\\s*''.*$", 134 | "action": { 135 | "indent": "indentOutdent" 136 | } 137 | }, 138 | { 139 | "beforeText": "^.*/\\*\\*\\s*$", 140 | "afterText": "\\s*\\*/.*$", 141 | "action": { 142 | "indent": "indentOutdent" 143 | } 144 | }, 145 | { 146 | "beforeText": "^.*(?:=|/\\*\\*|'')\\s*$", 147 | "action": { 148 | "indent": "indent" 149 | } 150 | }, 151 | { 152 | // NOTE: `in` is not included on purpose, because nixfmt also doesn't indent after it. 153 | "beforeText": "^.*\\b(?:let|with|if|then|else|rec|or|and|assert|inherit)\\s*$", 154 | "action": { 155 | "indent": "indent" 156 | } 157 | }, 158 | ], 159 | "wordPattern": "(-?\\d*\\.\\d\\w*)|((~|[^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\<\\>\\/\\?\\s]+)/[^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\<\\>\\?\\s]+)|([^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)" 160 | } 161 | -------------------------------------------------------------------------------- /lefthook.yml: -------------------------------------------------------------------------------- 1 | # EXAMPLE USAGE: 2 | # 3 | # Refer for explanation to following link: 4 | # https://evilmartians.github.io/lefthook/configuration/ 5 | 6 | pre-commit: 7 | parallel: true 8 | jobs: 9 | - run: bun run lint 10 | glob: "*.{js,ts,jsx,tsx}" 11 | 12 | commit-msg: 13 | jobs: 14 | - run: bun run commitlint --edit 15 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nix-ide", 3 | "displayName": "Nix IDE", 4 | "description": "Nix language support - syntax highlighting, formatting, and error reporting.", 5 | "version": "0.4.18", 6 | "publisher": "jnoortheen", 7 | "icon": "images/icon.png", 8 | "license": "MIT", 9 | "engines": { 10 | "vscode": ">=1.96.0" 11 | }, 12 | "categories": [ 13 | "Programming Languages", 14 | "Formatters", 15 | "Snippets" 16 | ], 17 | "keywords": [ 18 | "nix" 19 | ], 20 | "bugs": { 21 | "url": "https://github.com/nix-community/vscode-nix-ide/issues" 22 | }, 23 | "homepage": "https://github.com/nix-community/vscode-nix-ide", 24 | "repository": { 25 | "type": "git", 26 | "url": "https://github.com/nix-community/vscode-nix-ide" 27 | }, 28 | "main": "dist/extension.js", 29 | "contributes": { 30 | "languages": [ 31 | { 32 | "id": "nix", 33 | "aliases": [ 34 | "Nix", 35 | "nix" 36 | ], 37 | "extensions": [ 38 | ".nix" 39 | ], 40 | "icon": { 41 | "dark": "images/icon.png", 42 | "light": "images/icon.png" 43 | }, 44 | "configuration": "./language-configuration.json" 45 | } 46 | ], 47 | "grammars": [ 48 | { 49 | "language": "nix", 50 | "scopeName": "source.nix", 51 | "path": "./dist/nix.tmLanguage.json" 52 | }, 53 | { 54 | "scopeName": "markdown.nix.codeblock", 55 | "path": "./dist/injection.json", 56 | "injectTo": [ 57 | "text.html.markdown" 58 | ], 59 | "embeddedLanguages": { 60 | "meta.embedded.block.nix": "nix" 61 | } 62 | } 63 | ], 64 | "snippets": [ 65 | { 66 | "language": "nix", 67 | "path": "./snippets.json" 68 | } 69 | ], 70 | "configuration": { 71 | "title": "NixIDE", 72 | "properties": { 73 | "nix.formatterPath": { 74 | "default": "nixfmt", 75 | "markdownDescription": "Full path to the nix formatter executable. This setting won't take effect if `nix.enableLanguageServer` is enabled; if that's the case, you can instead set formatter via `nix.serverSettings` (see [README](https://github.com/nix-community/vscode-nix-ide#lsp-plugin-support) for examples)", 76 | "oneOf": [ 77 | { 78 | "type": "string", 79 | "enum": [ 80 | "nixfmt", 81 | "nix3-fmt", 82 | "alejandra", 83 | "treefmt", 84 | "nixpkgs-fmt" 85 | ], 86 | "markdownEnumDescriptions": [ 87 | "[nixfmt](https://github.com/NixOS/nixfmt) - The official formatter for the Nix language", 88 | "[nix3-fmt](https://nix.dev/manual/nix/2.17/command-ref/new-cli/nix3-fmt) - Use the flake configured formatter", 89 | "[alejandra](https://github.com/kamadorueda/alejandra) - The Uncompromising Nix Code Formatter", 90 | "[treefmt](https://github.com/numtide/treefmt-nix) - All in one formatter", 91 | "[nixpkgs-fmt](https://github.com/nix-community/nixpkgs-fmt) - Deprecated as it is no longer maintained" 92 | ] 93 | }, 94 | { 95 | "type": "array", 96 | "items": "string", 97 | "minItems": 1 98 | } 99 | ] 100 | }, 101 | "nix.serverPath": { 102 | "type": "string", 103 | "default": "nil", 104 | "description": "Location of the nix language server command." 105 | }, 106 | "nix.enableLanguageServer": { 107 | "type": "boolean", 108 | "default": false, 109 | "description": "Use LSP instead of nix-instantiate and the formatter configured via `nix.formatterPath`." 110 | }, 111 | "nix.serverSettings": { 112 | "type": "object", 113 | "default": {}, 114 | "description": "Settings passed to the language server on configuration requests." 115 | }, 116 | "nix.hiddenLanguageServerErrors": { 117 | "type": "array", 118 | "items": { 119 | "type": "string" 120 | }, 121 | "default": [], 122 | "description": "Error notifications from the language server for these request types will be suppressed.", 123 | "examples": [ 124 | [ 125 | "textDocument/definition", 126 | "textDocument/documentSymbol" 127 | ] 128 | ] 129 | } 130 | } 131 | }, 132 | "configurationDefaults": { 133 | "[nix]": { 134 | "editor.insertSpaces": true, 135 | "editor.tabSize": 2 136 | } 137 | }, 138 | "commands": [ 139 | { 140 | "title": "Restart Language Server", 141 | "category": "Nix IDE", 142 | "command": "nix-ide.restartLanguageServer" 143 | } 144 | ] 145 | }, 146 | "devDependencies": { 147 | "@commitlint/cli": "^19.6.1", 148 | "@commitlint/config-conventional": "^19.6.0", 149 | "@types/command-exists": "^1.2.3", 150 | "@types/node": "^22.10.7", 151 | "@types/vscode": "^1.96.0", 152 | "@vscode/vsce": "^3.2.1", 153 | "js-yaml": "^4.1.0", 154 | "lefthook": "^1.10.8", 155 | "ovsx": "^0.10.1", 156 | "@vscode/test-cli": "^0.0.11", 157 | "@vscode/test-electron": "^2.4.1", 158 | "vscode-tmgrammar-test": "^0.1.3", 159 | "typescript": "^5.7.3" 160 | }, 161 | "scripts": { 162 | "prebuild": "mkdir -p dist && js-yaml syntaxes/nix.YAML-tmLanguage > dist/nix.tmLanguage.json && js-yaml syntaxes/injection.yml > dist/injection.json", 163 | "build-base": "bun build src/extension.ts --outdir=dist --external=vscode --target=node --format=cjs", 164 | "build": "bun run build-base --sourcemap --minify", 165 | "watch": "bun run build-base --sourcemap --watch", 166 | "postinstall": "lefthook install", 167 | "clean": "rm -rd dist", 168 | "prepackage": "rm -f *.vsix", 169 | "package": "bun run build && bun run vsce package --no-dependencies", 170 | "publish:ovsx": "ovsx publish *.vsix --pat '$OVS_PAT'", 171 | "publish:vsce": "vsce publish", 172 | "publish": "bun run package && bun run publish:vsce && bun run publish:ovsx", 173 | "pretest": "bun run build && vscode-tmgrammar-snap 'syntaxes/tests/*.nix'", 174 | "test": "vscode-test", 175 | "lint": "bun x biome check --write src" 176 | }, 177 | "dependencies": { 178 | "command-exists": "^1.2.9", 179 | "vscode-languageclient": "^9.0.1", 180 | "vscode-variables": "^1.0.1" 181 | } 182 | } 183 | -------------------------------------------------------------------------------- /shell.nix: -------------------------------------------------------------------------------- 1 | { pkgs ? import { } }: 2 | pkgs.mkShell { 3 | buildInputs = with pkgs; [ 4 | nodejs 5 | esbuild 6 | bun 7 | ]; 8 | shellHook = '' 9 | bun install 10 | ''; 11 | } 12 | -------------------------------------------------------------------------------- /snippets.json: -------------------------------------------------------------------------------- 1 | { 2 | "conditional": { 3 | "prefix": ["if"], 4 | "body": ["if $1 then $2 else $0"], 5 | "description": "Conditional expression" 6 | }, 7 | "let": { 8 | "prefix": ["let"], 9 | "body": ["let $1;", "in $0"], 10 | "description": "Let expression" 11 | }, 12 | "rec": { 13 | "prefix": ["rec"], 14 | "body": ["rec { $1", "\t$0}"], 15 | "description": "Recursive Set" 16 | }, 17 | "with": { 18 | "prefix": ["with"], 19 | "body": ["with $1;$0"], 20 | "description": "With expression" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/.gitignore: -------------------------------------------------------------------------------- 1 | # User-specific files 2 | *.suo 3 | *.user 4 | *.userosscache 5 | *.sln.docstates 6 | # User-specific files (MonoDevelop/Xamarin Studio) 7 | *.userprefs 8 | # Build results 9 | [Dd]ebug/ 10 | [Dd]ebugPublic/ 11 | [Rr]elease/ 12 | [Rr]eleases/ 13 | x64/ 14 | x86/ 15 | bld/ 16 | [Bb]in/ 17 | [Oo]bj/ 18 | [Ll]og/ 19 | # Visual Studio 2015-2017 cache/options directory 20 | .vs/ 21 | # Uncomment if you have tasks that create the project's static files in wwwroot 22 | # wwwroot/ 23 | # MSTest test Results 24 | [Tt]est[Rr]esult*/ 25 | [Bb]uild[Ll]og.* 26 | # NUNIT 27 | *.VisualState.xml 28 | TestResult.xml 29 | # Build Results of an ATL Project 30 | [Dd]ebugPS/ 31 | [Rr]eleasePS/ 32 | dlldata.c 33 | # DNX 34 | project.lock.json 35 | project.fragment.lock.json 36 | artifacts/ 37 | *_i.c 38 | *_p.c 39 | *_i.h 40 | *.ilk 41 | *.meta 42 | *.obj 43 | *.pch 44 | *.pdb 45 | *.pgc 46 | *.pgd 47 | *.rsp 48 | *.sbr 49 | *.tlb 50 | *.tli 51 | *.tlh 52 | *.tmp 53 | *.tmp_proj 54 | *.log 55 | *.vspscc 56 | *.vssscc 57 | .builds 58 | *.pidb 59 | *.svclog 60 | *.scc 61 | # Chutzpah Test files 62 | _Chutzpah* 63 | # Visual C++ cache files 64 | ipch/ 65 | *.aps 66 | *.ncb 67 | *.opendb 68 | *.opensdf 69 | *.sdf 70 | *.cachefile 71 | *.VC.db 72 | *.VC.VC.opendb 73 | # Visual Studio profiler 74 | *.psess 75 | *.vsp 76 | *.vspx 77 | *.sap 78 | # TFS Local Workspace 79 | $tf/ 80 | # Guidance Automation Toolkit 81 | *.gpState 82 | # ReSharper is a .NET coding add-in 83 | _ReSharper*/ 84 | *.[Rr]e[Ss]harper 85 | *.DotSettings.user 86 | # JustCode is a .NET coding add-in 87 | .JustCode 88 | # TeamCity is a build add-in 89 | _TeamCity* 90 | # DotCover is a Code Coverage Tool 91 | *.dotCover 92 | # Visual Studio code coverage results 93 | *.coverage 94 | *.coveragexml 95 | # NCrunch 96 | _NCrunch_* 97 | .*crunch*.local.xml 98 | nCrunchTemp_* 99 | # MightyMoose 100 | *.mm.* 101 | AutoTest.Net/ 102 | # Web workbench (sass) 103 | .sass-cache/ 104 | # Installshield output folder 105 | [Ee]xpress/ 106 | # DocProject is a documentation generator add-in 107 | DocProject/buildhelp/ 108 | DocProject/Help/*.HxT 109 | DocProject/Help/*.HxC 110 | DocProject/Help/*.hhc 111 | DocProject/Help/*.hhk 112 | DocProject/Help/*.hhp 113 | DocProject/Help/Html2 114 | DocProject/Help/html 115 | # Click-Once directory 116 | publish/ 117 | # Publish Web Output 118 | *.[Pp]ublish.xml 119 | *.azurePubxml 120 | # TODO: Comment the next line if you want to checkin your web deploy settings 121 | # but database connection strings (with potential passwords) will be unencrypted 122 | *.pubxml 123 | *.publishproj 124 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 125 | # checkin your Azure Web App publish settings, but sensitive information contained 126 | # in these scripts will be unencrypted 127 | PublishScripts/ 128 | # NuGet Packages 129 | *.nupkg 130 | # The packages folder can be ignored because of Package Restore 131 | **/packages/* 132 | # except build/, which is used as an MSBuild target. 133 | !**/packages/build/ 134 | # Uncomment if necessary however generally it will be regenerated when needed 135 | #!**/packages/repositories.config 136 | # NuGet v3's project.json files produces more ignoreable files 137 | *.nuget.props 138 | *.nuget.targets 139 | # Microsoft Azure Build Output 140 | csx/ 141 | *.build.csdef 142 | # Microsoft Azure Emulator 143 | ecf/ 144 | rcf/ 145 | # Windows Store app package directories and files 146 | AppPackages/ 147 | BundleArtifacts/ 148 | Package.StoreAssociation.xml 149 | _pkginfo.txt 150 | # Visual Studio cache files 151 | # files ending in .cache can be ignored 152 | *.[Cc]ache 153 | # but keep track of directories ending in .cache 154 | !*.[Cc]ache/ 155 | # Others 156 | ClientBin/ 157 | ~$* 158 | *~ 159 | *.dbmdl 160 | *.dbproj.schemaview 161 | *.jfm 162 | *.pfx 163 | *.publishsettings 164 | node_modules/ 165 | orleans.codegen.cs 166 | # Since there are multiple workflows, uncomment next line to ignore bower_components 167 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 168 | #bower_components/ 169 | # RIA/Silverlight projects 170 | Generated_Code/ 171 | # Backup & report files from converting an old project file 172 | # to a newer Visual Studio version. Backup files are not needed, 173 | # because we have git 😉 174 | _UpgradeReport_Files/ 175 | Backup*/ 176 | UpgradeLog*.XML 177 | UpgradeLog*.htm 178 | # SQL Server files 179 | *.mdf 180 | *.ldf 181 | # Business Intelligence projects 182 | *.rdl.data 183 | *.bim.layout 184 | *.bim_*.settings 185 | # Microsoft Fakes 186 | FakesAssemblies/ 187 | # GhostDoc plugin setting file 188 | *.GhostDoc.xml 189 | # Node.js Tools for Visual Studio 190 | .ntvs_analysis.dat 191 | # Visual Studio 6 build log 192 | *.plg 193 | # Visual Studio 6 workspace options file 194 | *.opt 195 | # Visual Studio LightSwitch build output 196 | **/*.HTMLClient/GeneratedArtifacts 197 | **/*.DesktopClient/GeneratedArtifacts 198 | **/*.DesktopClient/ModelManifest.xml 199 | **/*.Server/GeneratedArtifacts 200 | **/*.Server/ModelManifest.xml 201 | _Pvt_Extensions 202 | # Paket dependency manager 203 | .paket/paket.exe 204 | paket-files/ 205 | # FAKE - F# Make 206 | .fake/ 207 | # JetBrains Rider 208 | .idea/ 209 | *.sln.iml 210 | # CodeRush 211 | .cr/ 212 | # Python Tools for Visual Studio (PTVS) 213 | __pycache__/ 214 | *.pyc 215 | # Cake - Uncomment if you are using it 216 | -------------------------------------------------------------------------------- /src/client.ts: -------------------------------------------------------------------------------- 1 | // from PR of https://github.com/nix-community/vscode-nix-ide/pull/16/ 2 | 3 | // biome-ignore lint/style/useNodejsImportProtocol: 4 | import { inspect } from "util"; 5 | import { sync as commandExistsSync } from "command-exists"; 6 | import { 7 | type Disposable, 8 | type ExtensionContext, 9 | Uri, 10 | env, 11 | window, 12 | workspace, 13 | } from "vscode"; 14 | import type { 15 | CancellationToken, 16 | ConfigurationParams, 17 | LSPArray, 18 | LanguageClientOptions, 19 | MessageSignature, 20 | } from "vscode-languageclient"; 21 | import { 22 | type Executable, 23 | LanguageClient, 24 | type ServerOptions, 25 | } from "vscode-languageclient/node"; 26 | import { type UriMessageItem, config } from "./configuration"; 27 | 28 | class Client extends LanguageClient { 29 | disposables: Disposable[] = []; 30 | 31 | override handleFailedRequest( 32 | type: MessageSignature, 33 | token: CancellationToken | undefined, 34 | error: unknown, 35 | defaultValue: T, 36 | showNotification?: boolean, 37 | ): T { 38 | if (config.hiddenErrorKinds.includes(type.method)) { 39 | this.outputChannel.appendLine( 40 | `Suppressing failed ${inspect(type.method)} notification`, 41 | ); 42 | return super.handleFailedRequest(type, token, error, defaultValue, false); 43 | } 44 | return super.handleFailedRequest( 45 | type, 46 | token, 47 | error, 48 | defaultValue, 49 | showNotification, 50 | ); 51 | } 52 | 53 | override dispose(timeout?: number): Promise { 54 | let timedOut = false; 55 | if (timeout) { 56 | setTimeout(() => { 57 | timedOut = true; 58 | }, timeout); 59 | } 60 | 61 | for (const disposable of this.disposables) { 62 | if (timedOut) { 63 | break; 64 | } 65 | disposable.dispose(); 66 | } 67 | 68 | return Promise.resolve(); 69 | } 70 | } 71 | 72 | let client: Client; 73 | 74 | export async function activate(context: ExtensionContext): Promise { 75 | if (!commandExistsSync(config.serverPath)) { 76 | const selection = await window.showErrorMessage( 77 | `Command ${config.serverPath} not found in $PATH`, 78 | { 79 | title: "Install language server", 80 | uri: Uri.parse( 81 | "https://github.com/nix-community/vscode-nix-ide?tab=readme-ov-file#language-servers", 82 | ), 83 | }, 84 | ); 85 | if (selection?.uri !== undefined) { 86 | await env.openExternal(selection?.uri); 87 | return; 88 | } 89 | } 90 | const serverExecutable: Executable = { 91 | command: config.serverPath, 92 | }; 93 | const serverOptions: ServerOptions = serverExecutable; 94 | 95 | const nixDocumentSelector: { scheme: string; language: string }[] = [ 96 | { scheme: "file", language: "nix" }, 97 | { scheme: "untitled", language: "nix" }, 98 | ]; 99 | 100 | const outputChannel = window.createOutputChannel("Nix"); 101 | const fileEvents = workspace.createFileSystemWatcher("**/*.nix"); 102 | 103 | const clientOptions: LanguageClientOptions = { 104 | documentSelector: nixDocumentSelector, 105 | synchronize: { 106 | fileEvents, 107 | configurationSection: [config.rootSection], 108 | }, 109 | outputChannel, 110 | middleware: { 111 | workspace: { 112 | configuration: (params: ConfigurationParams): LSPArray[] => { 113 | const items = params.items || []; 114 | const res: LSPArray = []; 115 | const settings = config.serverSettings; 116 | for (const item of items) { 117 | if (!item?.section) { 118 | continue; 119 | } 120 | const sectionSettings = settings[item.section as keyof typeof settings] 121 | if (!sectionSettings) { 122 | client.warn(`failed to find "${item.section}" in "nix.serverSettings"`) 123 | } 124 | res.push(sectionSettings ?? null); 125 | } 126 | // eslint-disable-next-line @typescript-eslint/no-unsafe-return 127 | return res; 128 | }, 129 | }, 130 | }, 131 | }; 132 | 133 | client = new Client("nix", "Nix", serverOptions, clientOptions); 134 | client.disposables.push(outputChannel, fileEvents); 135 | client.registerProposedFeatures(); 136 | await client.start(); 137 | 138 | context.subscriptions.push(client); 139 | } 140 | 141 | export async function deactivate(): Promise { 142 | if (client?.needsStop()) { 143 | await client.stop(); 144 | } 145 | await client.dispose(); 146 | } 147 | 148 | export async function restart(context: ExtensionContext): Promise { 149 | const restartingMsg = window.setStatusBarMessage( 150 | "$(loading~spin) Restarting Nix language server", 151 | ); 152 | 153 | try { 154 | await deactivate(); 155 | await activate(context); 156 | } catch (error) { 157 | client?.error("Failed to restart Nix language server", error, "force"); 158 | } finally { 159 | restartingMsg.dispose(); 160 | } 161 | } 162 | -------------------------------------------------------------------------------- /src/configuration.ts: -------------------------------------------------------------------------------- 1 | import { 2 | type ConfigurationChangeEvent, 3 | type WorkspaceConfiguration, 4 | workspace, 5 | } from "vscode"; 6 | import type { LSPObject } from "vscode-languageclient"; 7 | 8 | import type { MessageItem, Uri } from "vscode"; 9 | import { transformConfigValueByVscodeVariables } from "./utils"; 10 | 11 | export interface UriMessageItem extends MessageItem { 12 | uri: Uri; 13 | } 14 | 15 | export class Config { 16 | readonly rootSection = "nix"; 17 | 18 | private get cfg(): WorkspaceConfiguration { 19 | return workspace.getConfiguration(this.rootSection); 20 | } 21 | 22 | private get( 23 | path: string, 24 | def_val: T, 25 | ): T { 26 | return transformConfigValueByVscodeVariables( 27 | this.cfg.get(path) ?? def_val, 28 | ); 29 | } 30 | 31 | get formatterPath(): Array { 32 | const path: Array | string = this.get("formatterPath", "nixfmt"); 33 | if (typeof path === "string") { 34 | switch (path) { 35 | case "nix3-fmt": 36 | return ["nix", "fmt", "--", "--"]; 37 | case "treefmt": 38 | return ["treefmt", "--stdin", "{file}"]; 39 | default: 40 | return [path]; 41 | } 42 | } 43 | return path; 44 | } 45 | 46 | get serverPath(): string { 47 | return this.get("serverPath", "nil"); 48 | } 49 | 50 | get LSPEnabled(): boolean { 51 | return this.get("enableLanguageServer", false); 52 | } 53 | 54 | get hiddenErrorKinds(): string[] { 55 | return this.get("hiddenLanguageServerErrors", []); 56 | } 57 | 58 | get serverSettings(): LSPObject { 59 | return this.get("serverSettings", {}); 60 | } 61 | 62 | requiresServerRestart(change: ConfigurationChangeEvent): boolean { 63 | // NOTE: this might be easier if all the settings were nested under 64 | // e.g. `"nix.languageServer" or something like that, to deduplicate keys 65 | return ( 66 | change.affectsConfiguration("nix.serverPath") || 67 | change.affectsConfiguration("nix.enableLanguageServer") 68 | ); 69 | } 70 | } 71 | export const config = new Config(); 72 | -------------------------------------------------------------------------------- /src/extension.test.ts: -------------------------------------------------------------------------------- 1 | import assert = require("node:assert"); 2 | 3 | import * as vscode from "vscode"; 4 | 5 | describe("The resources", () => { 6 | const extension = vscode.extensions.getExtension("jnoortheen.vscode-nix-ide"); 7 | if (!extension) { 8 | assert.fail("Extension not found"); 9 | } 10 | // const iconName = "images/icon.png"; 11 | 12 | // it("provides valid icon paths", async () => { 13 | 14 | // }); 15 | }); 16 | -------------------------------------------------------------------------------- /src/extension.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from "vscode"; 2 | import type { ExtensionContext } from "vscode"; 3 | import * as client from "./client"; 4 | import { config } from "./configuration"; 5 | import { formattingProviders } from "./formatter"; 6 | import { startLinting } from "./linter"; 7 | 8 | /** 9 | * Activate this extension. 10 | * 11 | * If LSP is enabled 12 | * then support IDE features with {@link https://github.com/oxalica/nil|nil} 13 | * Else 14 | * Format with nixpkgs-format 15 | * validate with nix-instantiate 16 | * 17 | * @param context The context for this extension 18 | * @return A promise for the initialization 19 | */ 20 | export async function activate(context: ExtensionContext): Promise { 21 | if (config.LSPEnabled) { 22 | try { 23 | await client.activate(context); 24 | } catch (err) { 25 | console.error(err); 26 | } 27 | } else { 28 | await startLinting(context); 29 | const subs = [ 30 | vscode.languages.registerDocumentFormattingEditProvider, 31 | vscode.languages.registerDocumentRangeFormattingEditProvider, 32 | ].map((func) => func("nix", formattingProviders)); 33 | context.subscriptions.concat(subs); 34 | } 35 | 36 | context.subscriptions.push( 37 | vscode.commands.registerCommand( 38 | "nix-ide.restartLanguageServer", 39 | async () => { 40 | if (config.LSPEnabled) { 41 | await client.restart(context); 42 | } 43 | }, 44 | ), 45 | ); 46 | 47 | vscode.workspace.onDidChangeConfiguration(async (event) => { 48 | if (config.requiresServerRestart(event)) { 49 | const choice = await vscode.window.showWarningMessage( 50 | "Configuration change requires restarting the language server", 51 | "Restart", 52 | ); 53 | if (choice === "Restart") { 54 | await client.restart(context); 55 | } 56 | } 57 | }); 58 | } 59 | 60 | export async function deactivate(): Promise { 61 | await client.deactivate(); 62 | } 63 | -------------------------------------------------------------------------------- /src/formatter.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from "vscode"; 2 | import { 3 | type DocumentFormattingEditProvider, 4 | type DocumentRangeFormattingEditProvider, 5 | Range, 6 | type TextDocument, 7 | TextEdit, 8 | } from "vscode"; 9 | import { config } from "./configuration"; 10 | import { type IProcessResult, runInWorkspace } from "./process-runner"; 11 | 12 | const FORMATTER: Array = config.formatterPath; 13 | 14 | /** 15 | * Get text edits to format a range in a document. 16 | * 17 | * @param document The document whose text to format 18 | * @param range The range within the document to format 19 | * @return A promise with the list of edits 20 | */ 21 | const getFormatRangeEdits = async ( 22 | document: TextDocument, 23 | range?: Range, 24 | ): Promise> => { 25 | const actualRange = document.validateRange( 26 | range || new Range(0, 0, Number.MAX_VALUE, Number.MAX_VALUE), 27 | ); 28 | let result: IProcessResult; 29 | try { 30 | FORMATTER.forEach((elm, i) => { 31 | FORMATTER[i] = elm.replace("{file}", document.fileName); 32 | }); 33 | result = await runInWorkspace( 34 | vscode.workspace.getWorkspaceFolder(document.uri), 35 | FORMATTER, 36 | document.getText(actualRange), 37 | ); 38 | } catch (error) { 39 | if (error instanceof Error) { 40 | await vscode.window.showErrorMessage( 41 | `Failed to run ${FORMATTER.join(" ")}: ${error.message}`, 42 | ); 43 | } 44 | // Re-throw the error to make the promise fail 45 | throw error; 46 | } 47 | return result.exitCode === 0 48 | ? [TextEdit.replace(actualRange, result.stdout)] 49 | : []; 50 | }; 51 | 52 | /** 53 | * A type for all formatting providers. 54 | */ 55 | type FormattingProviders = DocumentFormattingEditProvider & 56 | DocumentRangeFormattingEditProvider; 57 | 58 | /** 59 | * Formatting providers 60 | */ 61 | export const formattingProviders: FormattingProviders = { 62 | provideDocumentFormattingEdits: (document, _, token) => 63 | getFormatRangeEdits(document).then((edits) => 64 | token.isCancellationRequested 65 | ? [] 66 | : // tslint:disable-next-line:readonly-array 67 | (edits as TextEdit[]), 68 | ), 69 | provideDocumentRangeFormattingEdits: (document, range, _, token) => 70 | getFormatRangeEdits(document, range).then((edits) => 71 | token.isCancellationRequested 72 | ? [] 73 | : // tslint:disable-next-line:readonly-array 74 | (edits as TextEdit[]), 75 | ), 76 | }; 77 | -------------------------------------------------------------------------------- /src/global.d.ts: -------------------------------------------------------------------------------- 1 | declare module "vscode-variables" { 2 | export default function variables( 3 | string: string, 4 | recursive?: boolean, 5 | ): string; 6 | } 7 | -------------------------------------------------------------------------------- /src/linter.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from "vscode"; 2 | import { Diagnostic, type ExtensionContext, type TextDocument } from "vscode"; 3 | import { runInWorkspace } from "./process-runner"; 4 | 5 | /** 6 | * Whether a given document is saved to disk and in Nix language. 7 | * 8 | * @param document The document to check 9 | * @return Whether the document is a Nix document saved to disk 10 | */ 11 | const isSavedDocument = (document: TextDocument): boolean => 12 | !document.isDirty && 13 | 0 < 14 | vscode.languages.match( 15 | { 16 | language: "nix", 17 | scheme: "file", 18 | }, 19 | document, 20 | ); 21 | 22 | interface LintErrorType { 23 | msg: string; 24 | row: number; 25 | col: number; 26 | } 27 | 28 | /** 29 | * Exec pattern against the given text and return an array of all matches. 30 | * 31 | * @param text The output from nix-instantiate stderr 32 | * @return All matches of pattern in text. 33 | */ 34 | const getErrors = (text: string): ReadonlyArray => { 35 | const results = []; 36 | // matches both syntax error messages, like: 37 | // `error: syntax error, unexpected ']', expecting ';', at /home/foo/bar/shell.nix:19:3` 38 | // as well as symbol error messages, like 39 | // `error: undefined variable 'openjdk' at /home/foo/bar/shell.nix:14:5` 40 | const pattern = /^error: (.+) at .+:(\d+):(\d+)$/gm; 41 | // We need to loop through the regexp here, so a let is required 42 | let match = pattern.exec(text); 43 | while (match !== null) { 44 | results.push({ 45 | msg: match[1], 46 | row: Number.parseInt(match[2]), 47 | col: Number.parseInt(match[3]), 48 | }); 49 | match = pattern.exec(text); 50 | } 51 | return results; 52 | }; 53 | 54 | /** 55 | * Parse errors from output for a given document. 56 | * 57 | * @param document The document to whose contents errors refer 58 | * @param output The error output from shell. 59 | * @return An array of all diagnostics 60 | */ 61 | const shellOutputToDiagnostics = ( 62 | document: TextDocument, 63 | output: string, 64 | ): ReadonlyArray => { 65 | const diagnostics: Array = []; 66 | for (const err of getErrors(output)) { 67 | const range = document.validateRange( 68 | new vscode.Range(err.row - 1, err.col - 2, err.row - 1, err.col + 2), 69 | ); 70 | const diagnostic = new Diagnostic(range, err.msg); 71 | diagnostic.source = "nix"; 72 | diagnostics.push(diagnostic); 73 | } 74 | return diagnostics; 75 | }; 76 | 77 | /** 78 | * Start linting files. 79 | * 80 | * @param context The extension context 81 | */ 82 | export async function startLinting(context: ExtensionContext): Promise { 83 | const diagnostics = vscode.languages.createDiagnosticCollection("nix"); 84 | context.subscriptions.push(diagnostics); 85 | 86 | const lint = async (document: TextDocument) => { 87 | if (isSavedDocument(document)) { 88 | const workspaceFolder = vscode.workspace.getWorkspaceFolder(document.uri); 89 | let d: ReadonlyArray; 90 | try { 91 | const result = await runInWorkspace(workspaceFolder, [ 92 | "nix-instantiate", 93 | "--parse", 94 | document.fileName, 95 | ]); 96 | d = shellOutputToDiagnostics(document, result.stderr); 97 | } catch (error) { 98 | if (error instanceof Error) { 99 | await vscode.window.showErrorMessage(error.message); 100 | } 101 | diagnostics.delete(document.uri); 102 | return; 103 | } 104 | diagnostics.set(document.uri, d as Diagnostic[]); 105 | } 106 | }; 107 | 108 | vscode.workspace.onDidOpenTextDocument(lint, null, context.subscriptions); 109 | vscode.workspace.onDidSaveTextDocument(lint, null, context.subscriptions); 110 | for await (const textDocument of vscode.workspace.textDocuments) { 111 | await lint(textDocument); 112 | } 113 | // Remove diagnostics for closed files 114 | vscode.workspace.onDidCloseTextDocument( 115 | (d) => diagnostics.delete(d.uri), 116 | null, 117 | context.subscriptions, 118 | ); 119 | } 120 | -------------------------------------------------------------------------------- /src/process-runner.ts: -------------------------------------------------------------------------------- 1 | import { execFile } from "node:child_process"; 2 | import type { WorkspaceFolder } from "vscode"; 3 | 4 | /** 5 | * A system error, i.e. an error that results from a syscall. 6 | */ 7 | interface ISystemError extends Error { 8 | readonly errno: string; 9 | } 10 | 11 | /** 12 | * Whether an error is a system error. 13 | * 14 | * @param error The error to check 15 | */ 16 | const isSystemError = (error: Error): error is ISystemError => 17 | (error as ISystemError).errno !== undefined && 18 | typeof (error as ISystemError).errno === "string"; 19 | 20 | /** 21 | * A process error. 22 | * 23 | * A process error occurs when the process exited with a non-zero exit code. 24 | */ 25 | interface IProcessError extends Error { 26 | /** 27 | * The exit code of the process. 28 | */ 29 | readonly code: number; 30 | } 31 | 32 | /** 33 | * Whether an error is a process error. 34 | */ 35 | const isProcessError = (error: Error): error is IProcessError => 36 | !isSystemError(error) && 37 | (error as IProcessError).code !== undefined && 38 | (error as IProcessError).code > 0; 39 | 40 | /** 41 | * The result of a process. 42 | */ 43 | export interface IProcessResult { 44 | /** 45 | * The integral exit code. 46 | */ 47 | readonly exitCode: number; 48 | /** 49 | * The standard output. 50 | */ 51 | readonly stdout: string; 52 | /** 53 | * The standard error. 54 | */ 55 | readonly stderr: string; 56 | } 57 | 58 | /** 59 | * Run a command in a given workspace folder. 60 | * 61 | * If the workspace folder is undefined run the command in the working directory 62 | * if the vscode instance. 63 | * 64 | * @param folder The folder to run the command in 65 | * @param command The command array 66 | * @param stdin An optional string to feed to standard input 67 | * @return The result of the process as promise 68 | */ 69 | export const runInWorkspace = ( 70 | folder: WorkspaceFolder | undefined, 71 | command: ReadonlyArray, 72 | stdin?: string, 73 | ): Promise => 74 | new Promise((resolve, reject) => { 75 | const cwd = folder ? folder.uri.fsPath : process.cwd(); 76 | const child = execFile( 77 | command[0], 78 | command.slice(1), 79 | { cwd }, 80 | (error, stdout, stderr) => { 81 | if (error && !isProcessError(error)) { 82 | // Throw system errors, but do not fail if the command 83 | // fails with a non-zero exit code. 84 | console.error("Command error", command, error); 85 | reject(error); // eslint-disable-line @typescript-eslint/prefer-promise-reject-errors 86 | } else { 87 | const exitCode = error ? error.code : 0; 88 | resolve({ stdout, stderr, exitCode }); 89 | } 90 | }, 91 | ); 92 | if (stdin && child.stdin) { 93 | child.stdin.end(stdin); 94 | } 95 | }); 96 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | import type { LSPObject } from "vscode-languageclient"; 2 | import variables from "vscode-variables"; 3 | 4 | /** 5 | * transform config value by vscode variables 6 | * @link https://www.npmjs.com/package/vscode-variables?activeTab=readme 7 | */ 8 | export const transformConfigValueByVscodeVariables = < 9 | T extends string | boolean | LSPObject, 10 | >( 11 | _cfg: T, 12 | ): T => { 13 | let cfg = _cfg; 14 | try { 15 | if (typeof cfg === "string") { 16 | cfg = variables(cfg) as T; 17 | } else if (!!cfg && typeof cfg === "object") { 18 | for (const key of Object.keys(cfg)) { 19 | cfg[key] = transformConfigValueByVscodeVariables(cfg[key]); 20 | } 21 | } else if (Array.isArray(cfg) && cfg.length > 0) { 22 | cfg = cfg.map( 23 | (item) => transformConfigValueByVscodeVariables(item) as unknown, 24 | ) as T; 25 | } 26 | return cfg; 27 | } catch (err) { 28 | console.error(err); 29 | return cfg; 30 | } 31 | }; 32 | -------------------------------------------------------------------------------- /syntaxes/.gitignore: -------------------------------------------------------------------------------- 1 | *.json -------------------------------------------------------------------------------- /syntaxes/injection.yml: -------------------------------------------------------------------------------- 1 | --- 2 | fileTypes: [] 3 | injectionSelector: L:text.html.markdown 4 | patterns: 5 | - include: "#nix-code-block" 6 | repository: 7 | nix-code-block: 8 | begin: "(^|\\G)(\\s*)(\\`{3,}|~{3,})\\s*(?i:(nix)(\\s+[^`~]*)?$)" 9 | name: markup.fenced_code.block.markdown 10 | end: "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$" 11 | beginCaptures: 12 | "3": 13 | name: punctuation.definition.markdown 14 | "5": 15 | name: fenced_code.block.language 16 | "6": 17 | name: fenced_code.block.language.attributes 18 | endCaptures: 19 | "3": 20 | name: punctuation.definition.markdown 21 | patterns: 22 | - begin: "(^|\\G)(\\s*)(.*)" 23 | while: "(^|\\G)(?!\\s*([`~]{3,})\\s*$)" 24 | contentName: meta.embedded.block.nix 25 | patterns: 26 | - include: source.nix 27 | scopeName: markdown.nix.codeblock 28 | -------------------------------------------------------------------------------- /syntaxes/nix.YAML-tmLanguage: -------------------------------------------------------------------------------- 1 | # [PackageDev] target_format: plist, ext: tmLanguage 2 | # Made by Wout.Mertens@gmail.com 3 | # 4 | # This grammar tries to be complete, but regex-based highlighters 5 | # can't be full parsers. Therefore it's a bit looser than the Nix 6 | # parser itself and some legal constructs will be marked as illegal. 7 | # It seems to work fine for nixpkgs. 8 | # 9 | # 10 | # While reading this, bear in mind that multi-line matches are not 11 | # allowed and the end regex is tested before enclosed patterns regexes 12 | # However, you can look-ahead to an end pattern with (?=...), which allows 13 | # you to match everything in a block 14 | # 15 | # 16 | # To enforce multipart expressions, a wrapper pattern is used 17 | # that matches the beginning and end with look-ahead. 18 | # Then the parts are chained with look-aheads. 19 | # 20 | # Unfortunately this doesn't work if the end condition matches 21 | # the end of a part, in that case the part is fully matched 22 | # instead of with a look-ahead 23 | # and legal expressions should still match properly. 24 | # 25 | # Known issues: 26 | # - attrset: 27 | # - if the closing brace of an empty { } block is at column 1 28 | # of the line, it will terminate the expression and mark 29 | # expression-cont rules as invalid 30 | # 31 | # There are no named regexes, so here's a list for copy-paste: 32 | # identifier: [a-zA-Z\_][a-zA-Z0-9\_\'\-]* 33 | # expression terminator next: (?=([\])};,]|\b(else|then)\b)) 34 | # match anything coming next: (?=.?) 35 | # match until end of file: $^ 36 | 37 | --- 38 | name: Nix 39 | scopeName: source.nix 40 | fileTypes: ["nix"] 41 | uuid: 0514fd5f-acb6-436d-b42c-7643e6d36c8f 42 | 43 | patterns: 44 | - include: "#expression" 45 | 46 | repository: 47 | expression: 48 | patterns: 49 | - include: "#parens-and-cont" 50 | - include: "#list-and-cont" 51 | - include: "#string" 52 | - include: "#interpolation" 53 | - include: "#with-assert" 54 | - include: "#function-for-sure" 55 | - include: "#attrset-for-sure" 56 | - include: "#attrset-or-function" 57 | - include: "#let" 58 | - include: "#if" 59 | - include: "#operator-unary" 60 | - include: "#constants" 61 | - include: "#bad-reserved" 62 | - include: "#parameter-name-and-cont" 63 | - include: "#others" 64 | expression-cont: 65 | begin: (?=.?) 66 | end: (?=([\])};,]|\b(else|then)\b)) 67 | patterns: 68 | - include: "#parens" 69 | - include: "#list" 70 | - include: "#string" 71 | - include: "#interpolation" 72 | - include: "#function-for-sure" 73 | - include: "#attrset-for-sure" 74 | - include: "#attrset-or-function" 75 | - name: keyword.operator.nix 76 | match: (\bor\b|\.|\|\>|\<\||==|!=|!|\<\=|\<|\>\=|\>|&&|\|\||-\>|//|\?|\+\+|-|\*|/(?=([^*]|$))|\+) 77 | - include: "#constants" 78 | - include: "#bad-reserved" 79 | - include: "#parameter-name" 80 | - include: "#others" 81 | 82 | parens: 83 | begin: \( 84 | beginCaptures: 85 | "0": { name: punctuation.definition.expression.nix } 86 | end: \) 87 | endCaptures: 88 | "0": { name: punctuation.definition.expression.nix } 89 | patterns: 90 | - include: "#expression" 91 | parens-and-cont: 92 | begin: (?=\() 93 | end: (?=([\])};,]|\b(else|then)\b)) 94 | patterns: 95 | - include: "#parens" 96 | - include: "#expression-cont" 97 | 98 | list: 99 | begin: \[ 100 | beginCaptures: 101 | "0": { name: punctuation.definition.list.nix } 102 | end: \] 103 | endCaptures: 104 | "0": { name: punctuation.definition.list.nix } 105 | patterns: 106 | - include: "#expression" 107 | list-and-cont: 108 | begin: (?=\[) 109 | end: (?=([\])};,]|\b(else|then)\b)) 110 | patterns: 111 | - include: "#list" 112 | - include: "#expression-cont" 113 | 114 | attrset-for-sure: 115 | patterns: 116 | - begin: (?=\brec\b) 117 | end: (?=([\])};,]|\b(else|then)\b)) 118 | patterns: 119 | - begin: \brec\b 120 | end: (?=\{) 121 | beginCaptures: 122 | "0": { name: keyword.other.nix } 123 | patterns: 124 | - include: "#others" 125 | - include: "#attrset-definition" 126 | - include: "#others" 127 | - begin: (?=\{\s*(\}|[^,?]*(=|;))) 128 | end: (?=([\])};,]|\b(else|then)\b)) 129 | patterns: 130 | - include: "#attrset-definition" 131 | - include: "#others" 132 | 133 | attrset-definition: 134 | begin: (?=\{) 135 | end: (?=([\])};,]|\b(else|then)\b)) 136 | patterns: 137 | - begin: (\{) 138 | end: (\}) 139 | beginCaptures: { "0": { name: punctuation.definition.attrset.nix } } 140 | endCaptures: { "0": { name: punctuation.definition.attrset.nix } } 141 | patterns: 142 | - include: "#attrset-contents" 143 | - begin: (?<=\}) 144 | end: (?=([\])};,]|\b(else|then)\b)) 145 | patterns: 146 | - include: "#expression-cont" 147 | attrset-definition-brace-opened: 148 | patterns: 149 | - begin: (?<=\}) 150 | end: (?=([\])};,]|\b(else|then)\b)) 151 | patterns: 152 | - include: "#expression-cont" 153 | - begin: (?=.?) 154 | end: \} 155 | endCaptures: { "0": { name: punctuation.definition.attrset.nix } } 156 | patterns: 157 | - include: "#attrset-contents" 158 | 159 | attrset-contents: 160 | patterns: 161 | - include: "#attribute-inherit" 162 | - include: "#bad-reserved" 163 | - include: "#attribute-bind" 164 | - include: "#others" 165 | 166 | function-header-open-brace: 167 | begin: \{ 168 | end: (?=\}) 169 | beginCaptures: 170 | "0": { name: punctuation.definition.entity.function.2.nix } 171 | patterns: 172 | - include: "#function-contents" 173 | function-header-close-brace-no-arg: 174 | begin: \} 175 | end: (?=\:) 176 | beginCaptures: 177 | "0": { name: punctuation.definition.entity.function.nix } 178 | patterns: 179 | - include: "#others" 180 | function-header-terminal-arg: 181 | begin: (?=@) 182 | end: (?=\:) 183 | patterns: 184 | - begin: \@ 185 | end: (?=\:) 186 | patterns: 187 | - begin: (\b[a-zA-Z\_][a-zA-Z0-9\_\'\-]*) 188 | end: (?=\:) 189 | name: variable.parameter.function.3.nix 190 | - include: "#others" 191 | - include: "#others" 192 | function-header-close-brace-with-arg: 193 | begin: \} 194 | end: (?=\:) 195 | beginCaptures: 196 | "0": { name: punctuation.definition.entity.function.nix } 197 | patterns: 198 | - include: "#function-header-terminal-arg" 199 | - include: "#others" 200 | function-header-until-colon-no-arg: 201 | begin: (?=\{) 202 | end: (?=\:) 203 | patterns: 204 | - include: "#function-header-open-brace" 205 | - include: "#function-header-close-brace-no-arg" 206 | function-header-until-colon-with-arg: 207 | begin: (?=\{) 208 | end: (?=\:) 209 | patterns: 210 | - include: "#function-header-open-brace" 211 | - include: "#function-header-close-brace-with-arg" 212 | function-body-from-colon: 213 | begin: (\:) 214 | end: (?=([\])};,]|\b(else|then)\b)) 215 | beginCaptures: 216 | "0": { name: punctuation.definition.function.nix } 217 | patterns: 218 | - include: "#expression" 219 | function-definition: 220 | begin: (?=.?) 221 | end: (?=([\])};,]|\b(else|then)\b)) 222 | patterns: 223 | - include: "#function-body-from-colon" 224 | # Chained expressions for [arg@]{a,b,c?xxx}[@arg]:yyy 225 | - begin: (?=.?) 226 | end: (?=\:) 227 | patterns: 228 | # arg @ { ... 229 | - begin: (\b[a-zA-Z\_][a-zA-Z0-9\_\'\-]*) 230 | end: (?=\:) 231 | beginCaptures: 232 | "0": { name: variable.parameter.function.4.nix } 233 | patterns: 234 | - begin: \@ 235 | end: (?=\:) 236 | patterns: 237 | - include: "#function-header-until-colon-no-arg" 238 | - include: "#others" 239 | - include: "#others" 240 | # { ... 241 | - begin: (?=\{) 242 | end: (?=\:) 243 | patterns: 244 | - include: "#function-header-until-colon-with-arg" 245 | - include: "#others" 246 | function-definition-brace-opened: 247 | begin: (?=.?) 248 | end: (?=([\])};,]|\b(else|then)\b)) 249 | patterns: 250 | - include: "#function-body-from-colon" 251 | # Chained expressions for a,b,c?xxx}[@arg]:yyy 252 | - begin: (?=.?) 253 | end: (?=\:) 254 | patterns: 255 | - include: "#function-header-close-brace-with-arg" 256 | - begin: (?=.?) 257 | end: (?=\}) 258 | patterns: 259 | - include: "#function-contents" 260 | - include: "#others" 261 | 262 | function-for-sure: 263 | patterns: 264 | # x: ... | {stuff}: ... | {a, b ? c, ... | arg @ {... 265 | - begin: (?=(\b[a-zA-Z\_][a-zA-Z0-9\_\'\-]*\s*[:@]|\{[^}]*\}\s*:|\{[^#}"'/=]*[,\?])) 266 | end: (?=([\])};,]|\b(else|then)\b)) 267 | patterns: 268 | - include: "#function-definition" 269 | 270 | function-contents: 271 | patterns: 272 | - include: "#bad-reserved" 273 | - include: "#function-parameter" 274 | - include: "#others" 275 | 276 | attrset-or-function: 277 | begin: \{ 278 | beginCaptures: 279 | "0": { name: punctuation.definition.attrset-or-function.nix } 280 | # Note the absence of a comma here, otherwise comma-first fails 281 | end: (?=([\])};]|\b(else|then)\b)) 282 | patterns: 283 | # We have no clue what to expect so we allow both until we hit one 284 | # attrset contents => treat the rest as attrset 285 | - begin: (?=(\s*\}|\"|\binherit\b|\$\{|\b[a-zA-Z\_][a-zA-Z0-9\_\'\-]*(\s*\.|\s*=[^=]))) 286 | end: (?=([\])};,]|\b(else|then)\b)) 287 | patterns: 288 | - include: "#attrset-definition-brace-opened" 289 | # function contents => treat the rest as function header 290 | - begin: (?=(\.\.\.|\b[a-zA-Z\_][a-zA-Z0-9\_\'\-]*\s*[,?])) 291 | end: (?=([\])};,]|\b(else|then)\b)) 292 | patterns: 293 | - include: "#function-definition-brace-opened" 294 | # this line has no hints, eat the first word of the set 295 | - include: "#bad-reserved" 296 | - begin: \b[a-zA-Z\_][a-zA-Z0-9\_\'\-]* 297 | # Note the absence of a comma here, otherwise comma-first fails 298 | end: (?=([\])};]|\b(else|then)\b)) 299 | # unmatched first word is likely a function call 300 | beginCaptures: { "0": { name: variable.parameter.function.maybe.nix } } 301 | patterns: 302 | - begin: (?=\.) 303 | end: (?=([\])};,]|\b(else|then)\b)) 304 | patterns: 305 | - include: "#attrset-definition-brace-opened" 306 | # Note the \s*, this matches before the end-of-expr matches except at beginning 307 | - begin: \s*(\,) 308 | beginCaptures: { "1": { name: keyword.operator.nix } } 309 | end: (?=([\])};,]|\b(else|then)\b)) 310 | patterns: 311 | - include: "#function-definition-brace-opened" 312 | - begin: (?=\=) 313 | end: (?=([\])};,]|\b(else|then)\b)) 314 | patterns: 315 | - include: "#attribute-bind-from-equals" 316 | - include: "#attrset-definition-brace-opened" 317 | - begin: (?=\?) 318 | end: (?=([\])};,]|\b(else|then)\b)) 319 | patterns: 320 | - include: "#function-parameter-default" 321 | - begin: \, 322 | beginCaptures: 323 | "0": { name: keyword.operator.nix } 324 | end: (?=([\])};,]|\b(else|then)\b)) 325 | patterns: 326 | - include: "#function-definition-brace-opened" 327 | - include: "#others" 328 | - include: "#others" 329 | 330 | with-assert: 331 | begin: (?) 466 | beginCaptures: { "0": { name: string.unquoted.spath.nix } } 467 | end: (?=([\])};,]|\b(else|then)\b)) 468 | patterns: 469 | - include: "#expression-cont" 470 | - begin: ([a-zA-Z][a-zA-Z0-9\+\-\.]*\:[a-zA-Z0-9\%\/\?\:\@\&\=\+\$\,\-\_\.\!\~\*\']+) 471 | beginCaptures: { "0": { name: string.unquoted.url.nix } } 472 | end: (?=([\])};,]|\b(else|then)\b)) 473 | patterns: 474 | - include: "#expression-cont" 475 | 476 | parameter-name: 477 | match: \b[a-zA-Z\_][a-zA-Z0-9\_\'\-]* 478 | captures: { "0": { name: variable.parameter.name.nix } } 479 | 480 | parameter-name-and-cont: 481 | begin: \b[a-zA-Z\_][a-zA-Z0-9\_\'\-]* 482 | end: (?=([\])};,]|\b(else|then)\b)) 483 | beginCaptures: { "0": { name: variable.parameter.name.nix } } 484 | patterns: 485 | - include: "#expression-cont" 486 | 487 | attribute-name-single: 488 | match: \b[a-zA-Z\_][a-zA-Z0-9\_\'\-]* 489 | name: entity.other.attribute-name.single.nix 490 | 491 | attribute-name: 492 | # Unfortunately, no pattern ordering can be enforced. Ah well. 493 | patterns: 494 | - match: \b[a-zA-Z\_][a-zA-Z0-9\_\'\-]* 495 | name: entity.other.attribute-name.multipart.nix 496 | - match: \. 497 | - include: "#string-quoted" 498 | - include: "#interpolation" 499 | 500 | function-parameter-default: 501 | begin: \? 502 | beginCaptures: 503 | "0": { name: keyword.operator.nix } 504 | end: (?=[,}]) 505 | patterns: 506 | - include: "#expression" 507 | function-parameter: 508 | patterns: 509 | - begin: (\.\.\.) 510 | end: (,|(?=\})) 511 | name: keyword.operator.nix 512 | patterns: 513 | - include: "#others" 514 | - begin: \b[a-zA-Z\_][a-zA-Z0-9\_\'\-]* 515 | beginCaptures: 516 | "0": { name: variable.parameter.function.1.nix } 517 | end: (,|(?=\})) 518 | endCaptures: 519 | "0": { name: keyword.operator.nix } 520 | patterns: 521 | - include: "#whitespace" 522 | - include: "#comment" 523 | - include: "#function-parameter-default" 524 | - include: "#expression" 525 | - include: "#others" 526 | 527 | attribute-inherit: 528 | begin: \binherit\b 529 | beginCaptures: { "0": { name: keyword.other.inherit.nix } } 530 | end: \; 531 | endCaptures: { "0": { name: punctuation.terminator.inherit.nix } } 532 | patterns: 533 | # This should only match once, in front. Ah well. 534 | - begin: \( 535 | end: (?=\;) 536 | beginCaptures: 537 | { "0": { name: punctuation.section.function.arguments.nix } } 538 | patterns: 539 | - begin: \) 540 | end: (?=\;) 541 | beginCaptures: 542 | { "0": { name: punctuation.section.function.arguments.nix } } 543 | patterns: 544 | - include: "#bad-reserved" 545 | - include: "#attribute-name-single" 546 | - include: "#others" 547 | - include: "#expression" 548 | - begin: (?=[a-zA-Z\_]) 549 | end: (?=\;) 550 | patterns: 551 | - include: "#bad-reserved" 552 | - include: "#attribute-name-single" 553 | - include: "#others" 554 | - include: "#others" 555 | 556 | attribute-bind-from-equals: 557 | begin: \= 558 | beginCaptures: 559 | "0": { name: keyword.operator.bind.nix } 560 | end: \; 561 | endCaptures: 562 | "0": { name: punctuation.terminator.bind.nix } 563 | patterns: 564 | - include: "#expression" 565 | attribute-bind: 566 | patterns: 567 | - include: "#attribute-name" 568 | # Wish this could match only after an attribute. Ah well. 569 | - include: "#attribute-bind-from-equals" 570 | 571 | operator-unary: 572 | name: keyword.operator.unary.nix 573 | match: (!|-) 574 | 575 | constants: 576 | patterns: 577 | - begin: \b(builtins|true|false|null)\b 578 | end: (?=([\])};,]|\b(else|then)\b)) 579 | beginCaptures: 580 | "0": { name: constant.language.nix } 581 | patterns: 582 | - include: "#expression-cont" 583 | - beginCaptures: { "0": { name: support.function.nix } } 584 | begin: \b(scopedImport|import|isNull|abort|throw|baseNameOf|dirOf|removeAttrs|map|toString|derivationStrict|derivation)\b 585 | end: (?=([\])};,]|\b(else|then)\b)) 586 | patterns: 587 | - include: "#expression-cont" 588 | - beginCaptures: { "0": { name: constant.numeric.nix } } 589 | begin: \b[0-9]+\b 590 | end: (?=([\])};,]|\b(else|then)\b)) 591 | patterns: 592 | - include: "#expression-cont" 593 | 594 | whitespace: 595 | match: \s+ 596 | 597 | illegal: 598 | match: . 599 | name: invalid.illegal 600 | 601 | others: 602 | patterns: 603 | - include: "#whitespace" 604 | - include: "#comment" 605 | - include: "#illegal" 606 | 607 | bad-reserved: 608 | # we don't mark "or" because it's a special case 609 | match: (?# SYNTAX TEST "source.nix" "sample testcase" 2 | #^ source.nix comment.line.number-sign.nix 3 | # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.nix comment.line.number-sign.nix 4 | > 5 | >let 6 | #^^^ source.nix keyword.other.nix 7 | > a = abort "will never happen"; 8 | #^^ source.nix 9 | # ^ source.nix entity.other.attribute-name.multipart.nix 10 | # ^ source.nix 11 | # ^ source.nix keyword.operator.bind.nix 12 | # ^ source.nix 13 | # ^^^^^ source.nix support.function.nix 14 | # ^ source.nix 15 | # ^ source.nix string.quoted.double.nix punctuation.definition.string.double.start.nix 16 | # ^^^^^^^^^^^^^^^^^ source.nix string.quoted.double.nix 17 | # ^ source.nix string.quoted.double.nix punctuation.definition.string.double.end.nix 18 | # ^ source.nix punctuation.terminator.bind.nix 19 | > b = "hello"; 20 | #^^ source.nix 21 | # ^ source.nix entity.other.attribute-name.multipart.nix 22 | # ^ source.nix 23 | # ^ source.nix keyword.operator.bind.nix 24 | # ^ source.nix 25 | # ^ source.nix string.quoted.double.nix punctuation.definition.string.double.start.nix 26 | # ^^^^^ source.nix string.quoted.double.nix 27 | # ^ source.nix string.quoted.double.nix punctuation.definition.string.double.end.nix 28 | # ^ source.nix punctuation.terminator.bind.nix 29 | > c = "world"; 30 | #^^ source.nix 31 | # ^ source.nix entity.other.attribute-name.multipart.nix 32 | # ^ source.nix 33 | # ^ source.nix keyword.operator.bind.nix 34 | # ^ source.nix 35 | # ^ source.nix string.quoted.double.nix punctuation.definition.string.double.start.nix 36 | # ^^^^^ source.nix string.quoted.double.nix 37 | # ^ source.nix string.quoted.double.nix punctuation.definition.string.double.end.nix 38 | # ^ source.nix punctuation.terminator.bind.nix 39 | > path = ./relative/path 40 | #^^ source.nix 41 | # ^^^^ source.nix entity.other.attribute-name.multipart.nix 42 | # ^ source.nix 43 | # ^ source.nix keyword.operator.bind.nix 44 | # ^ source.nix 45 | # ^^^^^^^^^^^^^^^ source.nix string.unquoted.path.nix 46 | > sp_path = ./relative/${path} 47 | #^^ source.nix 48 | # ^^^^^^^ source.nix variable.parameter.name.nix 49 | # ^ source.nix 50 | # ^ source.nix invalid.illegal 51 | # ^ source.nix 52 | # ^^^^^^^^^^ source.nix string.unquoted.path.nix 53 | # ^ source.nix keyword.operator.nix 54 | # ^^ source.nix meta.embedded punctuation.section.embedded.begin.nix 55 | # ^^^^ source.nix meta.embedded variable.parameter.name.nix 56 | # ^ source.nix meta.embedded punctuation.section.embedded.end.nix 57 | >in b + c 58 | #^^ source.nix invalid.illegal.reserved.nix 59 | # ^ source.nix 60 | # ^ source.nix variable.parameter.name.nix 61 | # ^ source.nix 62 | # ^ source.nix keyword.operator.nix 63 | # ^ source.nix 64 | # ^ source.nix variable.parameter.name.nix -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es2018", 5 | "outDir": "dist", 6 | "lib": [ 7 | "es2018" 8 | ], 9 | "sourceMap": true, 10 | "rootDir": "src", 11 | /* Strict Type-Checking Option */ 12 | "strict": true /* enable all strict type-checking options */, 13 | /* Additional Checks */ 14 | "noUnusedParameters": true, /* Report errors on unused parameters. */ 15 | "noUnusedLocals": true /* Report errors on unused locals. */ 16 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 17 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 18 | }, 19 | "exclude": [ 20 | "node_modules", 21 | ".vscode-test" 22 | ] 23 | } --------------------------------------------------------------------------------