├── .editorconfig ├── .github ├── renovate.json └── workflows │ └── check.yml ├── .gitignore ├── .vscode ├── launch.json └── tasks.json ├── .vscodeignore ├── .yarn └── releases │ └── yarn-4.3.0.cjs ├── .yarnrc.yml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── biome.jsonc ├── package.json ├── res ├── icon.png ├── icon.svg └── screencast.gif ├── rollup.config.js ├── src ├── extension.ts ├── helpers │ ├── changeDirectory.ts │ ├── deepMergeRight.ts │ ├── exec.ts │ ├── getCommonPathOfGitFiles.ts │ ├── getGitStatusFiles.ts │ ├── gitAdd.ts │ ├── gitCommit.ts │ ├── gitPush.ts │ ├── gitReset.ts │ ├── gitStatus.ts │ ├── guessAction.ts │ ├── isFile.ts │ ├── isMergeableObject.ts │ ├── normalizePattern.ts │ ├── replaceStringWith.ts │ ├── showOptionalMessage.ts │ └── validateCommitMessage.ts ├── libs │ ├── addAndCommitFiles.ts │ ├── cancelAdd.ts │ ├── loadLocalConfig.ts │ ├── pushLocalCommits.ts │ └── showProgressNotification.ts ├── schemas │ └── settings.ts ├── test │ ├── extension.test.ts │ ├── fixtures │ │ └── sample.md │ └── index.ts └── types.ts ├── tsconfig.json └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | # https://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | end_of_line = lf 7 | indent_size = 2 8 | indent_style = space 9 | insert_final_newline = true 10 | max_line_length = 120 11 | trim_trailing_whitespace = true 12 | 13 | [*.md] 14 | max_line_length = 0 15 | trim_trailing_whitespace = false 16 | 17 | [*.py] 18 | indent_size = 4 19 | 20 | [*.rs] 21 | indent_size = 4 22 | max_line_length = 80 23 | 24 | [*.xml] 25 | trim_trailing_whitespace = false 26 | 27 | [COMMIT_EDITMSG] 28 | max_line_length = 0 29 | 30 | [Makefile] 31 | indent_size = 8 32 | indent_style = tab 33 | max_line_length = 80 34 | -------------------------------------------------------------------------------- /.github/renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": ["github>ivangabriele/renovate-config"] 4 | } 5 | -------------------------------------------------------------------------------- /.github/workflows/check.yml: -------------------------------------------------------------------------------- 1 | name: Check 2 | 3 | on: 4 | push: 5 | branches: ["main"] 6 | pull_request: 7 | branches: ["main"] 8 | 9 | concurrency: 10 | group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} 11 | cancel-in-progress: ${{ github.event_name == 'pull_request' }} 12 | 13 | jobs: 14 | lint: 15 | name: Lint 16 | if: ${{ !startsWith(github.ref, 'refs/heads/ci-release-v') }} 17 | runs-on: ubuntu-latest 18 | steps: 19 | - name: Checkout 20 | uses: actions/checkout@v4 21 | - name: Setup 22 | uses: actions/setup-node@v4 23 | with: 24 | cache: yarn 25 | node-version: 20 26 | - name: Install 27 | run: yarn --immutable 28 | - name: Lint code 29 | run: yarn test:lint 30 | 31 | type: 32 | name: Type 33 | if: ${{ !startsWith(github.ref, 'refs/heads/ci-release-v') }} 34 | runs-on: ubuntu-latest 35 | steps: 36 | - name: Checkout 37 | uses: actions/checkout@v4 38 | - name: Setup 39 | uses: actions/setup-node@v4 40 | with: 41 | cache: yarn 42 | node-version: 20 43 | - name: Install 44 | run: yarn --immutable 45 | - name: Type 46 | run: yarn test:type 47 | 48 | test_unit: 49 | name: Unit Test 50 | if: ${{ !startsWith(github.ref, 'refs/heads/ci-release-v') }} 51 | runs-on: ubuntu-latest 52 | steps: 53 | - name: Checkout 54 | uses: actions/checkout@v4 55 | - name: Setup 56 | uses: actions/setup-node@v4 57 | with: 58 | cache: yarn 59 | node-version: 20 60 | - name: Install 61 | run: yarn --immutable 62 | - name: Test 63 | # run: yarn test:unit --coverage 64 | run: yarn test:unit 65 | # - name: Upload coverage 66 | # uses: codecov/codecov-action@v4 67 | # with: 68 | # flags: unit 69 | # token: ${{ secrets.CODECOV_TOKEN }} 70 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Node.js 3 | 4 | # Logs 5 | logs 6 | *.log 7 | npm-debug.log* 8 | yarn-debug.log* 9 | yarn-error.log* 10 | lerna-debug.log* 11 | .pnpm-debug.log* 12 | 13 | # Diagnostic reports (https://nodejs.org/api/report.html) 14 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 15 | 16 | # Runtime data 17 | pids 18 | *.pid 19 | *.seed 20 | *.pid.lock 21 | 22 | # Directory for instrumented libs generated by jscoverage/JSCover 23 | lib-cov 24 | 25 | # Coverage directory used by tools like istanbul 26 | coverage 27 | *.lcov 28 | 29 | # nyc test coverage 30 | .nyc_output 31 | 32 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 33 | .grunt 34 | 35 | # Bower dependency directory (https://bower.io/) 36 | bower_components 37 | 38 | # node-waf configuration 39 | .lock-wscript 40 | 41 | # Compiled binary addons (https://nodejs.org/api/addons.html) 42 | build/Release 43 | 44 | # Dependency directories 45 | node_modules/ 46 | jspm_packages/ 47 | 48 | # Snowpack dependency directory (https://snowpack.dev/) 49 | web_modules/ 50 | 51 | # TypeScript cache 52 | *.tsbuildinfo 53 | 54 | # Optional npm cache directory 55 | .npm 56 | 57 | # Optional eslint cache 58 | .eslintcache 59 | 60 | # Optional stylelint cache 61 | .stylelintcache 62 | 63 | # Microbundle cache 64 | .rpt2_cache/ 65 | .rts2_cache_cjs/ 66 | .rts2_cache_es/ 67 | .rts2_cache_umd/ 68 | 69 | # Optional REPL history 70 | .node_repl_history 71 | 72 | # Output of 'npm pack' 73 | *.tgz 74 | 75 | # Yarn Integrity file 76 | .yarn-integrity 77 | 78 | # dotenv environment variable files 79 | .env 80 | .env.development.local 81 | .env.test.local 82 | .env.production.local 83 | .env.local 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 | # vuepress v2.x temp and cache directory 107 | .temp 108 | 109 | # Docusaurus cache and generated files 110 | .docusaurus 111 | 112 | # Serverless directories 113 | .serverless/ 114 | 115 | # FuseBox cache 116 | .fusebox/ 117 | 118 | # DynamoDB Local files 119 | .dynamodb/ 120 | 121 | # TernJS port file 122 | .tern-port 123 | 124 | # Stores VSCode versions used for testing VSCode extensions 125 | .vscode-test 126 | 127 | # yarn v2 128 | # .yarn/cache 129 | # .yarn/unplugged 130 | # .yarn/build-state.yml 131 | # .yarn/install-state.gz 132 | # .pnp.* 133 | 134 | ### Node Patch ### 135 | # Serverless Webpack directories 136 | .webpack/ 137 | 138 | # Optional stylelint cache 139 | 140 | # SvelteKit build / generate output 141 | .svelte-kit 142 | 143 | ################################################################################ 144 | # Yarn without Zero-Installs 145 | # https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored 146 | 147 | .pnp.* 148 | .yarn/* 149 | !.yarn/patches 150 | !.yarn/plugins 151 | !.yarn/releases 152 | !.yarn/sdks 153 | !.yarn/versions 154 | 155 | ################################################################################ 156 | # Custom 157 | 158 | /.rpt2_cache 159 | /.vscode-test 160 | /node_modules 161 | /out 162 | 163 | /.vscode/settings.json 164 | 165 | *.vsix 166 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "name": "Extension", 6 | "type": "extensionHost", 7 | "request": "launch", 8 | "runtimeExecutable": "${execPath}", 9 | "args": ["--extensionDevelopmentPath=${workspaceRoot}"], 10 | "stopOnEntry": false, 11 | "sourceMaps": true, 12 | "outFiles": ["${workspaceRoot}/out/**/*.js"], 13 | "preLaunchTask": "npm: watch" 14 | }, 15 | { 16 | "name": "Extension (prod)", 17 | "type": "extensionHost", 18 | "request": "launch", 19 | "runtimeExecutable": "${execPath}", 20 | "args": ["--extensionDevelopmentPath=${workspaceRoot}"], 21 | "stopOnEntry": false, 22 | "sourceMaps": false, 23 | "preLaunchTask": "npm: compile" 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": [ 4 | { 5 | "type": "npm", 6 | "script": "watch", 7 | "problemMatcher": "$tsc-watch", 8 | "isBackground": true, 9 | "presentation": { 10 | "reveal": "never" 11 | }, 12 | "group": { 13 | "kind": "build", 14 | "isDefault": true 15 | } 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | .rpt2_cache/** 2 | .vscode/** 3 | .vscode-test/** 4 | node_modules/** 5 | out/** 6 | !out/extension.js 7 | src/** 8 | 9 | .editorconfig 10 | .gitignore 11 | .travis.yml 12 | rollup.config.js 13 | tsconfig.json 14 | tslint.json 15 | yarn.lock 16 | 17 | *.svg 18 | *.vsix 19 | -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | nodeLinker: node-modules 2 | yarnPath: .yarn/releases/yarn-4.3.0.cjs 3 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes to this project will be documented in this file. 4 | 5 | The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) 6 | and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). 7 | 8 | ## [2.1.1] - 2019-07-20 9 | 10 | ### Fixed 11 | - Extraneous distribution files. 12 | 13 | ## [2.1.0] - 2019-07-20 14 | 15 | ### Added 16 | - Single-bundle distribution. 17 | 18 | ### Changed 19 | - VS Code target to v1.36.0 20 | - Dependencies upgrade. 21 | - Migration to legacy repository in order to split the 22 | [next major release](https://github.com/ivangabriele/vscode-git-automator) development. 23 | 24 | ### Fixed 25 | - Dependencies vulnerabilities. 26 | 27 | ## [2.0.4] - 2018-11-10 28 | 29 | ### Changed 30 | - Dependencies upgrade. 31 | - Readme roadmap. 32 | 33 | ## [2.0.3] - 2018-11-04 34 | 35 | ### Changed 36 | - Icon. 37 | 38 | ## [2.0.2] - 2018-11-04 39 | 40 | ### Changed 41 | - Align new naming for consistency. 42 | - Handle git push up-to-date case. 43 | 44 | ### Fixed 45 | - Missing last letter in auto-fill common path. 46 | - Rejected commits case when pushing. 47 | 48 | ## [2.0.1] - 2018-11-03 49 | 50 | ### Added 51 | - Missing screencast. 52 | 53 | ## [2.0.0] - 2018-11-02 54 | 55 | ### Changed 56 | - Extension display name. 57 | 58 | ### Fixed 59 | - Wrong vscodeignored files. 60 | 61 | ## [1.8.0] - 2018-11-02 62 | 63 | ### Added 64 | - Progress notification while Git pushing. 65 | 66 | ## [1.7.5] - 2018-11-02 67 | 68 | ### Fixed 69 | - Wrong error notification when running git commands (edge cases). 70 | 71 | ## [1.7.4] - 2018-11-02 72 | 73 | ### Fixed 74 | - Mutilple files commit message smart auto-fill. 75 | - Bash/Batch run CWD edge cases. 76 | - Remove helpers/exec() prod logs. 77 | - Remove deactivate() prod logs. 78 | - Wrong error notification when pushing commit. 79 | - Tests (again). 80 | 81 | ## [1.7.3] - 2018-11-01 82 | 83 | ### Fixed 84 | - Tests. 85 | 86 | ## [1.7.2] - 2018-10-28 87 | 88 | ### Fixed 89 | - Missing activation event to push local commits. 90 | 91 | ## [1.7.1] - 2018-10-28 92 | 93 | ### Changed 94 | - Update readme. 95 | 96 | ### Fixed 97 | - Missing changelog data for v1.7.0. 98 | 99 | ## [1.7.0] - 2018-10-28 100 | 101 | ### Added 102 | - Push local commits command. 103 | 104 | ## [1.6.0] - 2018-05-29 105 | 106 | ### Added 107 | - More npm, webpack, editorconfig & vscode patterns in default settings. 108 | 109 | ### Fixed 110 | - Regex support in patterns. 111 | - Exact regex-s in default settings patterns. 112 | 113 | ## [1.5.4] - 2018-05-28 114 | 115 | ### Fixed 116 | - Fix "command 'extension.vscode-git-add-and-commit.addAndCommitCurrentFile' not found" error. 117 | 118 | ## [1.5.3] - 2018-05-28 119 | 120 | _Please do **NOT** use this release._ 121 | 122 | ## [1.5.2] - 2018-05-28 123 | 124 | _Please do **NOT** use this release._ 125 | 126 | ## [1.5.1] - 2018-05-28 127 | 128 | ### Fixed 129 | - Apply dependencies security patches. 130 | 131 | ### Changed 132 | - Improve errors catching. 133 | - Update readme (roadmap). 134 | 135 | ## [1.5.0] - 2018-05-26 136 | 137 | ### Changed 138 | - Switch to vscode user/workspace settings instead of a custom "vscode-git-add-and-commit.json" file. 139 | 140 | ## [1.4.2] - 2018-05-10 141 | 142 | ### Fixed 143 | - Fix MacOS key bindings. 144 | 145 | ### Changed 146 | - Update dependencies. 147 | 148 | ## [1.4.1] - 2018-01-11 149 | 150 | ### Changed 151 | - Update readme. 152 | 153 | ## [1.4.0] - 2018-01-11 154 | 155 | ### Added 156 | - Add a `withGuessedCustomActions` setting to prefill the commit message for certain file - action associations. 157 | 158 | ### Changed 159 | - Improve the multiple files commit auto-prefill by checking the possible common path. 160 | - Update readme. 161 | 162 | ### Fixed 163 | - Handle empty Git status case (nothing added). 164 | 165 | ## [1.3.1] - 2018-01-10 166 | 167 | ### Fixed 168 | - Fix status bar message. 169 | - Fix unnecessary double quotes in commit message. 170 | 171 | ## [1.3.0] - 2018-01-10 172 | 173 | ### Added 174 | - Add a `disableOptionalMessages` setting to move optional messages to the status bar. 175 | 176 | ### Changed 177 | - Update readme. 178 | 179 | ## [1.2.2] - 2018-01-10 180 | 181 | _Please do **NOT** use this release._ 182 | 183 | ## [1.2.1] - 2018-01-10 184 | 185 | ### Changed 186 | - Remove background of icon. 187 | 188 | ## [1.2.0] - 2018-01-10 189 | 190 | ### Added 191 | - Add commit message auto-prefill feature. 192 | 193 | ### Changed 194 | - Update readme 195 | 196 | ### Fixed 197 | - Fix Git warnings considered as errors. 198 | 199 | ## [1.1.3] - 2018-01-10 200 | 201 | ### Changed 202 | - Update readme. 203 | 204 | ## [1.1.2] - 2018-01-10 205 | 206 | ### Changed 207 | - Fix Visual Studio Marketplace badge. 208 | 209 | ## [1.1.1] - 2018-01-10 210 | 211 | ### Removed 212 | - Remove a package keyword. 213 | 214 | ## [1.1.0] - 2018-01-10 215 | 216 | ### Added 217 | - Add extension icon. 218 | 219 | ### Changed 220 | - Upgrade depedencies. 221 | 222 | ## [1.0.0] - 2018-01-09 223 | 224 | ### Added 225 | - Initial release. 226 | - Add git add & commit all edited files command. 227 | - Add git add & commit current file command. 228 | - Add git reset fallback on cancel or errors. 229 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2018-present, Ivan Gabriele. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | VSCode Git Automator Logo 3 |

VSCode Git Automator

4 |

5 | 6 |

7 | 8 | MIT License 9 | 10 | 11 | Visual Studio Marketplace 12 | 13 | 14 | Check Workflow Status 15 | 16 |

17 | 18 |

Automate your commit messages & your Git workflow.

19 | 20 | --- 21 | 22 | ## Git Automator Extension for Visual Studio Code 23 | 24 | - **Add and commit all or current file(s) in one shortcut.** 25 | - **Smart auto-prefill for your commit messages.** 26 | - **Push all the local commits on the current branch in one shortcut.** 27 | 28 | And yes, I'm lazy ! 29 | 30 | [![The MIT License](https://img.shields.io/badge/license-MIT-orange.svg?style=flat-square)](http://opensource.org/licenses/MIT) 31 | [![Visual Studio Marketplace](https://vsmarketplacebadge.apphb.com/installs-short/ivangabriele.vscode-git-add-and-commit.svg?style=flat-square)](https://marketplace.visualstudio.com/items?itemName=ivangabriele.vscode-git-add-and-commit) 32 | [![Travis](https://img.shields.io/travis/ivangabriele/vscode-git-automator-legacy.svg?style=flat-square)](https://travis-ci.org/ivangabriele/vscode-git-automator-legacy) 33 | [![David](https://img.shields.io/david/ivangabriele/vscode-git-automator-legacy.svg?style=flat-square)](https://david-dm.org/ivangabriele/vscode-git-automator-legacy?type=dev) 34 | [![David](https://img.shields.io/david/dev/ivangabriele/vscode-git-automator-legacy.svg?style=flat-square)](https://david-dm.org/ivangabriele/vscode-git-automator-legacy?type=dev) 35 | 36 | --- 37 | 38 | ## Screencast 39 | 40 | ![Git Automator Screencast](https://raw.githubusercontent.com/ivangabriele/vscode-git-automator-legacy/master/res/screencast.gif) 41 | 42 | ## Usage 43 | 44 | ### Add all edited files to Git and commit them 45 | 46 | 1. Hit **Ctrl + Shift + A** (PC) / **Cmd + Shift + A** (Mac). 47 | 2. Enter the commit message. 48 | 3. Press **ENTER**. 49 | 50 | ### Add ONLY the current file to Git and commit it 51 | 52 | 1. Hit **Ctrl + Shift + Z** (PC) / **Cmd + Shift + Z** (Mac). 53 | 2. Enter the commit message. 54 | 3. Press **ENTER**. 55 | 56 | ### Setup the auto-prefill for commit messages 57 | 58 | 1. Hit **Ctrl + Shift + P** (PC) / **Cmd + Shift + P** (Mac). 59 | 2. Look for `Preferences: Open User Settings`. 60 | 3. Look for `gaac.` settings to customize them. 61 | 62 | ### Push local commits 63 | 64 | 1. Hit **Ctrl + Shift + X** (PC) / **Cmd + Shift + X** (Mac). 65 | 66 | ## Roadmap 67 | 68 | - Multiple workspaces (in the same window) support 69 | - Multiple files selection. 70 | - Auto-pull setting for auto-pull before pushing 71 | 72 | ## Issues & Feature Requests 73 | 74 | Please report any issue or feature request [there](https://github.com/ivangabriele/vscode-git-automator-legacy/issues). 75 | 76 | ## Change Log 77 | 78 | Please check the [changelog file](https://github.com/ivangabriele/vscode-git-automator-legacy/blob/master/CHANGELOG.md). 79 | 80 | ## Contribute 81 | 82 | To be able to contribute to TFS development, you need to be at ease with **Typescript** and **Git** usage. 83 | 84 | git clone https://github.com/ivangabriele/vscode-git-automator-legacy.git 85 | cd vscode-git-automator-legacy 86 | npm install 87 | 88 | ## Links 89 | 90 | - [Git Add & Commit extension on Github](https://github.com/ivangabriele/vscode-git-automator-legacy) 91 | - [Git Add & Commit extension on Visual Studio Market Place](https://marketplace.visualstudio.com/items/ivangabriele.vscode-git-add-and-commit) 92 | - [MIT Licence](https://github.com/ivangabriele/vscode-git-automator-legacy/blob/master/LICENSE) 93 | 94 | ## Licenses 95 | 96 | [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fivangabriele%2Fvscode-git-automator-legacy.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fivangabriele%2Fvscode-git-automator-legacy?ref=badge_large) 97 | s 98 | -------------------------------------------------------------------------------- /biome.jsonc: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://biomejs.dev/schemas/1.8.0/schema.json", 3 | "extends": ["@ivangabriele/biome-config"], 4 | "files": { 5 | "ignore": ["./.vscode-test/*", "./.yarn/*", "./node_modules/*"] 6 | }, 7 | "formatter": { 8 | "indentStyle": "space", 9 | "indentWidth": 2, 10 | "lineWidth": 120 11 | }, 12 | "javascript": { 13 | "formatter": { 14 | "quoteStyle": "single" 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vscode-git-add-and-commit", 3 | "version": "2.1.1", 4 | "displayName": "Git Automator", 5 | "description": "Automate your commit messages & your Git workflow.", 6 | "main": "./out/extension.js", 7 | "license": "MIT", 8 | "engines": { 9 | "vscode": "^1.36.0" 10 | }, 11 | "scripts": { 12 | "compile": "rimraf ./out && rollup -c", 13 | "compile:dev": "tsc -p ./", 14 | "pretest": "rimraf ./out && yarn compile:dev", 15 | "test:lint": "biome check --files-ignore-unknown=true --no-errors-on-unmatched --write .", 16 | "test:type": "tsc", 17 | "test:unit": "node ./node_modules/vscode/bin/test", 18 | "preversion": "yarn compile", 19 | "postversion": "git push origin HEAD && git push --tags", 20 | "vscode:prepublish": "yarn compile", 21 | "watch": "rimraf ./out && yarn compile:dev --watch" 22 | }, 23 | "dependencies": { 24 | "await-to-js": "2.1.1", 25 | "rorre": "1.2.0" 26 | }, 27 | "devDependencies": { 28 | "@biomejs/biome": "1.8.1", 29 | "@ivangabriele/biome-config": "1.0.2", 30 | "@ivangabriele/tsconfig-node": "2.0.0", 31 | "@types/fs-extra": "8.0.1", 32 | "@types/mocha": "5.2.7", 33 | "@types/node": "20.14.5", 34 | "@types/vscode": "1.41.0", 35 | "fs-extra": "8.1.0", 36 | "rimraf": "3.0.0", 37 | "rollup": "1.29.0", 38 | "rollup-plugin-commonjs": "10.1.0", 39 | "rollup-plugin-node-resolve": "5.2.0", 40 | "rollup-plugin-typescript2": "0.24.3", 41 | "tslint": "5.20.1", 42 | "typescript": "5.4.5", 43 | "vscode": "1.1.36" 44 | }, 45 | "packageManager": "yarn@4.3.0", 46 | "activationEvents": [ 47 | "onCommand:extension.vscode-git-automator.addAndCommitAllFiles", 48 | "onCommand:extension.vscode-git-automator.addAndCommitCurrentFile", 49 | "onCommand:extension.vscode-git-automator.pushLocalCommits" 50 | ], 51 | "contributes": { 52 | "commands": [ 53 | { 54 | "command": "extension.vscode-git-automator.addAndCommitAllFiles", 55 | "title": "Add & Commit All Files" 56 | }, 57 | { 58 | "command": "extension.vscode-git-automator.addAndCommitCurrentFile", 59 | "title": "Add & Commit Current File" 60 | }, 61 | { 62 | "command": "extension.vscode-git-automator.pushLocalCommits", 63 | "title": "Push Local Commits" 64 | } 65 | ], 66 | "keybindings": [ 67 | { 68 | "command": "extension.vscode-git-automator.addAndCommitAllFiles", 69 | "key": "ctrl+shift+a", 70 | "mac": "cmd+shift+a" 71 | }, 72 | { 73 | "command": "extension.vscode-git-automator.addAndCommitCurrentFile", 74 | "key": "ctrl+shift+z", 75 | "mac": "cmd+shift+z" 76 | }, 77 | { 78 | "command": "extension.vscode-git-automator.pushLocalCommits", 79 | "key": "ctrl+shift+x", 80 | "mac": "cmd+shift+x" 81 | } 82 | ], 83 | "configuration": { 84 | "type": "object", 85 | "title": "Git Add & Commit configuration", 86 | "properties": { 87 | "gaac.disableOptionalMessages": { 88 | "type": "boolean", 89 | "default": true, 90 | "description": "Show 'optional' warning and info messages in the status bar instead of the top modals." 91 | }, 92 | "gaac.forceLowerCase": { 93 | "type": "boolean", 94 | "default": false, 95 | "description": "Force all character in the prefilled commit message to be in lower case. Only works when 'gaac.withFileWorkspacePath' is TRUE. Output: 'README: ' => 'readme: '." 96 | }, 97 | "gaac.ignoreFileExtension": { 98 | "type": "boolean", 99 | "default": true, 100 | "description": "Ignore the file extension in the commit message. Output: 'res/icon.png: ' => 'res/icon: '." 101 | }, 102 | "gaac.replacePatternWith": { 103 | "type": "array", 104 | "default": [ 105 | { 106 | "pattern": "/^.editorconfig/", 107 | "with": "editorconfig" 108 | }, 109 | { 110 | "pattern": "/^.gitignore/", 111 | "with": "git" 112 | }, 113 | { 114 | "pattern": "/^.travis/", 115 | "with": "travis" 116 | }, 117 | { 118 | "pattern": "/^.vscodeignore/", 119 | "with": "vscode" 120 | }, 121 | { 122 | "pattern": "/^CHANGELOG[^:]*/", 123 | "with": "changelog" 124 | }, 125 | { 126 | "pattern": "/^Godeps[^:]*/", 127 | "with": "godep" 128 | }, 129 | { 130 | "pattern": "/^LICENSE[^:]*/", 131 | "with": "license" 132 | }, 133 | { 134 | "pattern": "/^Makefile[^:]*/i", 135 | "with": "makefile" 136 | }, 137 | { 138 | "pattern": "/^(npm-shrinkwrap|.npmignore|package(-lock)?)[^:]*/", 139 | "with": "npm" 140 | }, 141 | { 142 | "pattern": "/^webpack[^:]*/", 143 | "with": "webpack" 144 | }, 145 | { 146 | "pattern": "/^README[^:]*/", 147 | "with": "readme" 148 | }, 149 | { 150 | "pattern": "/^src//", 151 | "with": "" 152 | } 153 | ], 154 | "description": "Replace the commit message via a pattern (the pattern can be a string or a regex string). These replacements are executed after everything else, BUT before your own edit (in the prompt field). Example: [{ \"pattern\": \"/^package[^\\.]*\\.jso?n?/\", \"with\": \"npm\" }] will replace the prefilled commit message like: 'package-lock.json: ' => 'npm: '.", 155 | "items": { 156 | "type": "object", 157 | "properties": { 158 | "action": { 159 | "type": "string" 160 | }, 161 | "pattern": { 162 | "type": "string", 163 | "minLength": 1 164 | }, 165 | "state": { 166 | "enum": ["ADDED", "DELETED", "MODIFIED", "RENAMED"] 167 | } 168 | } 169 | } 170 | }, 171 | "gaac.withFileWorkspacePath": { 172 | "type": "boolean", 173 | "default": true, 174 | "description": "Prefill the commit message with the workspace relative file path, followed by ': '." 175 | }, 176 | "gaac.withGuessedAction": { 177 | "type": "boolean", 178 | "default": true, 179 | "description": "Try to guess the action when it's obvious and add it to the prefilled commit message." 180 | }, 181 | "gaac.withGuessedCustomActions": { 182 | "type": "array", 183 | "default": [ 184 | { 185 | "action": "ignore", 186 | "pattern": "/^.(gitignore|npmignore|vscodeignore)/", 187 | "state": "MODIFIED" 188 | }, 189 | { 190 | "action": "update", 191 | "pattern": "/^CHANGELOG/", 192 | "state": "MODIFIED" 193 | }, 194 | { 195 | "action": "update", 196 | "pattern": "/^LICENSE/", 197 | "state": "MODIFIED" 198 | }, 199 | { 200 | "action": "update", 201 | "pattern": "/^README/", 202 | "state": "MODIFIED" 203 | } 204 | ], 205 | "description": "Add a custom action for any prefilled commit matching a pattern and Git state. The `state` can be any one of: 'ADDED', 'DELETED', 'MODIFIED', 'RENAMED'.", 206 | "items": { 207 | "type": "object", 208 | "properties": { 209 | "action": { 210 | "type": "string" 211 | }, 212 | "pattern": { 213 | "type": "string", 214 | "minLength": 1 215 | }, 216 | "state": { 217 | "enum": ["ADDED", "DELETED", "MODIFIED", "RENAMED"] 218 | } 219 | } 220 | } 221 | } 222 | } 223 | } 224 | }, 225 | "author": { 226 | "name": "Ivan Gabriele", 227 | "email": "ivan.gabriele@gmail.com", 228 | "url": "https://www.ivangabriele.com" 229 | }, 230 | "publisher": "ivangabriele", 231 | "icon": "res/icon.png", 232 | "categories": ["Other", "SCM Providers"], 233 | "keywords": ["addon", "extension", "git", "shortcut", "vscode"], 234 | "repository": { 235 | "type": "git", 236 | "url": "https://github.com/ivangabriele/vscode-git-automator-legacy.git" 237 | }, 238 | "bugs": { 239 | "url": "https://github.com/ivangabriele/vscode-git-automator-legacy/issues" 240 | }, 241 | "homepage": "https://github.com/ivangabriele/vscode-git-automator-legacy#readme" 242 | } 243 | -------------------------------------------------------------------------------- /res/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ivangabriele/vscode-git-automator/33824a9449884664fc17381e8a3a6aeda5bcf85c/res/icon.png -------------------------------------------------------------------------------- /res/icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 23 | 25 | 48 | 50 | 51 | 53 | image/svg+xml 54 | 56 | 57 | 58 | 59 | 60 | 64 | 68 | 73 | 78 | 79 | 80 | 84 | 87 | 90 | 95 | 100 | 105 | 106 | 107 | 108 | 109 | -------------------------------------------------------------------------------- /res/screencast.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ivangabriele/vscode-git-automator/33824a9449884664fc17381e8a3a6aeda5bcf85c/res/screencast.gif -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import commonjs from 'rollup-plugin-commonjs' 2 | import resolve from 'rollup-plugin-node-resolve' 3 | import typescript from 'rollup-plugin-typescript2' 4 | 5 | module.exports = { 6 | input: 'src/extension.ts', 7 | 8 | output: { 9 | file: './out/extension.js', 10 | format: 'cjs', 11 | }, 12 | 13 | external: ['child_process', 'fs', 'path', 'vscode'], 14 | 15 | plugins: [ 16 | typescript({ 17 | compilerOptions: {}, 18 | }), 19 | resolve({ preferBuiltins: true }), 20 | commonjs(), 21 | ], 22 | } 23 | -------------------------------------------------------------------------------- /src/extension.ts: -------------------------------------------------------------------------------- 1 | // biome-ignore lint/style/useNodejsImportProtocol: 2 | // biome-ignore lint/correctness/noNodejsModules: 3 | import { relative } from 'path' 4 | import { type ExtensionContext, commands, window as vscodeWindow, workspace } from 'vscode' 5 | 6 | import { addAndCommitFiles } from './libs/addAndCommitFiles' 7 | import { loadLocalConfig } from './libs/loadLocalConfig' 8 | import { pushLocalCommits } from './libs/pushLocalCommits' 9 | 10 | import type { Settings } from './types' 11 | 12 | export function activate(context: ExtensionContext) { 13 | const workspaceFolders = workspace.workspaceFolders 14 | if (!workspaceFolders) { 15 | return 16 | } 17 | const workspaceRootAbsolutePath = workspaceFolders[0].uri.fsPath 18 | 19 | const settings: Settings = loadLocalConfig(workspaceRootAbsolutePath) 20 | 21 | const addAndCommitAllFilesDisposable = commands.registerCommand( 22 | 'extension.vscode-git-automator.addAndCommitAllFiles', 23 | () => { 24 | addAndCommitFiles(['*'], settings) 25 | }, 26 | ) 27 | 28 | const addAndCommitCurrentFileDisposable = commands.registerCommand( 29 | 'extension.vscode-git-automator.addAndCommitCurrentFile', 30 | () => { 31 | const activeTextEditor = vscodeWindow.activeTextEditor 32 | if (!activeTextEditor) { 33 | return 34 | } 35 | 36 | addAndCommitFiles([relative(workspaceRootAbsolutePath, activeTextEditor.document.fileName)], settings) 37 | }, 38 | ) 39 | 40 | const pushLocalCommitsDisposable = commands.registerCommand('extension.vscode-git-automator.pushLocalCommits', () => 41 | pushLocalCommits(settings), 42 | ) 43 | 44 | context.subscriptions.push( 45 | addAndCommitAllFilesDisposable, 46 | addAndCommitCurrentFileDisposable, 47 | pushLocalCommitsDisposable, 48 | ) 49 | } 50 | 51 | export function deactivate() { 52 | return 53 | } 54 | -------------------------------------------------------------------------------- /src/helpers/changeDirectory.ts: -------------------------------------------------------------------------------- 1 | export function changeDirectory(workspaceRootAbsolutePath: string): void { 2 | process.chdir(workspaceRootAbsolutePath) 3 | } 4 | -------------------------------------------------------------------------------- /src/helpers/deepMergeRight.ts: -------------------------------------------------------------------------------- 1 | import { isMergeableObject } from './isMergeableObject' 2 | 3 | function emptyTarget(val) { 4 | return Array.isArray(val) ? [] : {} 5 | } 6 | 7 | function cloneUnlessOtherwiseSpecified(value) { 8 | return isMergeableObject(value) ? deepMergeRight(emptyTarget(value), value) : value 9 | } 10 | 11 | function arrayMerge(target, source) { 12 | return target.concat(source).map((element) => cloneUnlessOtherwiseSpecified(element)) 13 | } 14 | 15 | function mergeObject(target, source) { 16 | const destination = {} 17 | 18 | if (isMergeableObject(target)) { 19 | for (const key in target) { 20 | destination[key] = cloneUnlessOtherwiseSpecified(target[key]) 21 | } 22 | } 23 | 24 | for (const key in source) { 25 | // biome-ignore lint/complexity/useSimplifiedLogicExpression: 26 | if (!isMergeableObject(source[key]) || !target[key]) { 27 | destination[key] = cloneUnlessOtherwiseSpecified(source[key]) 28 | } else { 29 | destination[key] = deepMergeRight(target[key], source[key]) 30 | } 31 | } 32 | 33 | return destination 34 | } 35 | 36 | export function deepMergeRight(target, source) { 37 | const sourceIsArray = Array.isArray(source) 38 | const targetIsArray = Array.isArray(target) 39 | const sourceAndTargetTypesMatch = sourceIsArray === targetIsArray 40 | 41 | if (!sourceAndTargetTypesMatch) { 42 | return cloneUnlessOtherwiseSpecified(source) 43 | } 44 | 45 | if (sourceIsArray) { 46 | return arrayMerge(target, source) 47 | } 48 | 49 | return mergeObject(target, source) 50 | } 51 | -------------------------------------------------------------------------------- /src/helpers/exec.ts: -------------------------------------------------------------------------------- 1 | // biome-ignore lint/style/useNodejsImportProtocol: 2 | // biome-ignore lint/correctness/noNodejsModules: 3 | import { spawn } from 'child_process' 4 | import { workspace } from 'vscode' 5 | 6 | // biome-ignore lint/suspicious/noExplicitAny: 7 | export async function exec(command: string, args: string[]): Promise { 8 | if (!workspace.workspaceFolders) { 9 | return 10 | } 11 | 12 | const cwd = workspace.workspaceFolders[0].uri.fsPath 13 | 14 | return new Promise((resolve, reject) => { 15 | let stderr = '' 16 | let stdout = '' 17 | 18 | try { 19 | const batch = spawn(command, args, { cwd }) 20 | 21 | batch.stdout.on('data', (data) => { 22 | stdout += data.toString() 23 | }) 24 | 25 | batch.stderr.on('data', (data) => { 26 | stdout += data.toString() 27 | }) 28 | batch.stderr.on('data', (data) => { 29 | stderr += data.toString() 30 | }) 31 | 32 | batch.on('close', () => { 33 | if (stderr !== '') { 34 | reject(stderr.trim()) 35 | 36 | return 37 | } 38 | 39 | resolve(stdout) 40 | }) 41 | } catch (err) { 42 | reject(err) 43 | } 44 | }) 45 | } 46 | -------------------------------------------------------------------------------- /src/helpers/getCommonPathOfGitFiles.ts: -------------------------------------------------------------------------------- 1 | import type { GitStatusFile } from '../types' 2 | 3 | export function getCommonPathOfGitFiles(gitStatusFiles: GitStatusFile[]): string { 4 | let commonPath = '' 5 | 6 | gitStatusFiles.forEach((gitStatusFile, index) => { 7 | if (index === 0) { 8 | commonPath = gitStatusFile.path 9 | 10 | return 11 | } 12 | if (commonPath.length === 0) { 13 | return 14 | } 15 | 16 | let length = commonPath.length + 1 17 | while (--length > 0) { 18 | if (gitStatusFile.path.substr(0, length) === commonPath.substring(0, length)) { 19 | break 20 | } 21 | } 22 | 23 | if (length === 0) { 24 | commonPath = '' 25 | 26 | return 27 | } 28 | commonPath = commonPath.substr(0, length) 29 | }) 30 | 31 | // Remove the trailing slash 32 | // TODO Handle common path with a trailing dot 33 | if (commonPath.length !== 0 && commonPath[commonPath.length - 1] === '/') { 34 | commonPath = commonPath.substr(0, commonPath.length - 1) 35 | } 36 | 37 | return commonPath 38 | } 39 | -------------------------------------------------------------------------------- /src/helpers/getGitStatusFiles.ts: -------------------------------------------------------------------------------- 1 | import { gitStatus } from './gitStatus' 2 | 3 | import type { GitStatusFile } from '../types' 4 | 5 | interface GitShortActions { 6 | [action: string]: GitStatusFile['state'] 7 | } 8 | 9 | const GIT_SHORT_ACTIONS: GitShortActions = { 10 | // biome-ignore lint/style/useNamingConvention: 11 | A: 'ADDED', 12 | // biome-ignore lint/style/useNamingConvention: 13 | D: 'DELETED', 14 | // biome-ignore lint/style/useNamingConvention: 15 | M: 'MODIFIED', 16 | // biome-ignore lint/style/useNamingConvention: 17 | R: 'RENAMED', 18 | } 19 | 20 | export async function getGitStatusFiles(): Promise { 21 | let gitStatusStdOut = '' 22 | try { 23 | gitStatusStdOut = await gitStatus() 24 | } catch (err) { 25 | console.error(err) 26 | } 27 | 28 | const matches = gitStatusStdOut.match(/[^\r\n]+/g) 29 | 30 | return matches === null 31 | ? [] 32 | : matches.reduce((linesPartial: GitStatusFile[], line: string) => { 33 | if (line.length === 0) { 34 | return linesPartial 35 | } 36 | 37 | const reg = line[0] === 'R' ? /^(\w)\s+(.*)(?=\s->\s|$)(\s->\s)(.*)/ : /^(\w)\s+(.*)/ 38 | const regRes = line.match(reg) 39 | 40 | if (regRes === null || (regRes.length !== 3 && regRes.length !== 5)) { 41 | return linesPartial 42 | } 43 | 44 | linesPartial.push( 45 | Object.assign( 46 | { 47 | path: regRes[2], 48 | state: GIT_SHORT_ACTIONS[regRes[1]], 49 | }, 50 | line[0] === 'R' 51 | ? { 52 | oldPath: regRes[2], 53 | path: regRes[4], 54 | } 55 | : undefined, 56 | ), 57 | ) 58 | 59 | return linesPartial 60 | }, []) 61 | } 62 | -------------------------------------------------------------------------------- /src/helpers/gitAdd.ts: -------------------------------------------------------------------------------- 1 | import { exec } from './exec' 2 | 3 | // biome-ignore lint/suspicious/noExplicitAny: 4 | export async function gitAdd(filesRelativePaths: string[]): Promise { 5 | const command = 'git' 6 | const args = ['add'].concat(filesRelativePaths) 7 | 8 | const output = await exec(command, args) 9 | 10 | return output 11 | } 12 | -------------------------------------------------------------------------------- /src/helpers/gitCommit.ts: -------------------------------------------------------------------------------- 1 | import { exec } from './exec' 2 | 3 | // biome-ignore lint/suspicious/noExplicitAny: 4 | export async function gitCommit(message: string): Promise { 5 | const command = 'git' 6 | const args = ['commit', '-m', `${message}`] 7 | 8 | const output = await exec(command, args) 9 | 10 | return output 11 | } 12 | -------------------------------------------------------------------------------- /src/helpers/gitPush.ts: -------------------------------------------------------------------------------- 1 | import { exec } from './exec' 2 | 3 | // biome-ignore lint/suspicious/noExplicitAny: 4 | export async function gitPush(): Promise { 5 | const command = 'git' 6 | const args = ['push', 'origin', 'HEAD'] 7 | 8 | const output = await exec(command, args) 9 | 10 | return output 11 | } 12 | -------------------------------------------------------------------------------- /src/helpers/gitReset.ts: -------------------------------------------------------------------------------- 1 | import { exec } from './exec' 2 | 3 | // biome-ignore lint/suspicious/noExplicitAny: 4 | export async function gitReset(filesRelativePaths: string[] = []): Promise { 5 | const allIndex = filesRelativePaths.indexOf('*') 6 | if (allIndex !== -1) { 7 | filesRelativePaths.splice(allIndex, 1) 8 | } 9 | 10 | const command = 'git' 11 | const args = ['reset'].concat(filesRelativePaths) 12 | 13 | const output = await exec(command, args) 14 | 15 | return output 16 | } 17 | -------------------------------------------------------------------------------- /src/helpers/gitStatus.ts: -------------------------------------------------------------------------------- 1 | import { exec } from './exec' 2 | 3 | // biome-ignore lint/suspicious/noExplicitAny: 4 | export async function gitStatus(): Promise { 5 | const command = 'git' 6 | const args = ['status', '-s'] 7 | 8 | const output = await exec(command, args) 9 | 10 | return output 11 | } 12 | -------------------------------------------------------------------------------- /src/helpers/guessAction.ts: -------------------------------------------------------------------------------- 1 | import type { GuessCustomAction } from '../types' 2 | 3 | export function guessAction(commitMessage: string, state, customActions: GuessCustomAction[]): string { 4 | const customAction = customActions.find(({ pattern: actionPattern, state: actionState }: GuessCustomAction) => { 5 | if (actionState !== state) { 6 | return false 7 | } 8 | 9 | return typeof actionPattern === 'string' ? commitMessage.includes(actionPattern) : actionPattern.test(commitMessage) 10 | }, customActions) 11 | 12 | if (customAction === undefined) { 13 | switch (state) { 14 | case 'ADDED': 15 | // biome-ignore lint/style/noParameterAssign: 16 | commitMessage += 'create' 17 | break 18 | 19 | case 'DELETED': 20 | // biome-ignore lint/style/noParameterAssign: 21 | commitMessage += 'remove' 22 | break 23 | 24 | case 'RENAMED': 25 | // biome-ignore lint/style/noParameterAssign: 26 | commitMessage += 'move' 27 | break 28 | 29 | default: 30 | break 31 | } 32 | 33 | return commitMessage 34 | } 35 | 36 | // biome-ignore lint/style/noParameterAssign: 37 | commitMessage += customAction.action 38 | 39 | return commitMessage 40 | } 41 | -------------------------------------------------------------------------------- /src/helpers/isFile.ts: -------------------------------------------------------------------------------- 1 | // biome-ignore lint/style/useNodejsImportProtocol: 2 | // biome-ignore lint/correctness/noNodejsModules: 3 | import { lstatSync } from 'fs' 4 | 5 | export function isFile(fileAbsolutePath: string): boolean { 6 | try { 7 | if (lstatSync(fileAbsolutePath).isFile()) { 8 | return true 9 | } 10 | 11 | return false 12 | } catch (_err) { 13 | return false 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/helpers/isMergeableObject.ts: -------------------------------------------------------------------------------- 1 | function isNonNullObject(value): boolean { 2 | return !!value && typeof value === 'object' 3 | } 4 | 5 | function isSpecial(value) { 6 | const stringValue = Object.prototype.toString.call(value) 7 | 8 | return stringValue === '[object RegExp]' || stringValue === '[object Date]' || isReactElement(value) 9 | } 10 | 11 | // https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25 12 | const canUseSymbol = typeof Symbol === 'function' && Symbol.for 13 | const REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7 14 | 15 | function isReactElement(value) { 16 | return value.$$typeof === REACT_ELEMENT_TYPE 17 | } 18 | 19 | export function isMergeableObject(value) { 20 | return isNonNullObject(value) && !isSpecial(value) 21 | } 22 | -------------------------------------------------------------------------------- /src/helpers/normalizePattern.ts: -------------------------------------------------------------------------------- 1 | export function normalizePattern(pattern: string): RegExp | string { 2 | let normalizedPattern: RegExp | string = pattern 3 | 4 | if (pattern.length > 1 && pattern.substr(0, 1) === '/' && pattern.substr(pattern.length - 1, 1) === '/') { 5 | normalizedPattern = new RegExp(pattern.substr(1, pattern.length - 2)) 6 | } 7 | 8 | return normalizedPattern 9 | } 10 | -------------------------------------------------------------------------------- /src/helpers/replaceStringWith.ts: -------------------------------------------------------------------------------- 1 | import type { SettingsPattern } from '../types' 2 | 3 | export function replaceStringWith(str: string, patterns: SettingsPattern[]): string { 4 | return patterns.reduce((reducedStr: string, { pattern, with: val }: SettingsPattern): string => { 5 | return reducedStr.replace(pattern, val) 6 | }, str) 7 | } 8 | -------------------------------------------------------------------------------- /src/helpers/showOptionalMessage.ts: -------------------------------------------------------------------------------- 1 | import { window as vscodeWindow } from 'vscode' 2 | 3 | import type { Settings } from '../types' 4 | 5 | export function showOptionalMessage(message: string, settings: Settings, isWarning = false): void { 6 | if (settings.prefillCommitMessage?.disableOptionalMessages) { 7 | vscodeWindow.setStatusBarMessage(`${isWarning ? 'Warning: ' : ''}${message}`, 6000) 8 | } else if (isWarning) { 9 | vscodeWindow.showWarningMessage(message) 10 | } else { 11 | vscodeWindow.showInformationMessage(message) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/helpers/validateCommitMessage.ts: -------------------------------------------------------------------------------- 1 | export function validateCommitMessage(message: string | null | undefined): boolean { 2 | return message !== undefined && message !== null && message.trim() !== '' 3 | } 4 | -------------------------------------------------------------------------------- /src/libs/addAndCommitFiles.ts: -------------------------------------------------------------------------------- 1 | import { window as vscodeWindow } from 'vscode' 2 | 3 | import { getCommonPathOfGitFiles } from '../helpers/getCommonPathOfGitFiles' 4 | import { getGitStatusFiles } from '../helpers/getGitStatusFiles' 5 | import { gitAdd } from '../helpers/gitAdd' 6 | import { gitCommit } from '../helpers/gitCommit' 7 | import { guessAction } from '../helpers/guessAction' 8 | import { replaceStringWith } from '../helpers/replaceStringWith' 9 | import { showOptionalMessage } from '../helpers/showOptionalMessage' 10 | import { validateCommitMessage } from '../helpers/validateCommitMessage' 11 | import { cancelAdd } from './cancelAdd' 12 | 13 | import type { Settings } from '../types' 14 | 15 | // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: 16 | export async function addAndCommitFiles(filesRelativePaths: string[], settings: Settings): Promise { 17 | // ---------------------------------- 18 | // GIT ADD 19 | 20 | try { 21 | await gitAdd(filesRelativePaths) 22 | } catch (err) { 23 | // Git warnings are also caught here, so let's ignore them 24 | if (typeof err !== 'string' || !/^warning/i.test(err)) { 25 | vscodeWindow.showErrorMessage(String(err)) 26 | console.error(err) 27 | 28 | return 29 | } 30 | } 31 | 32 | // ---------------------------------- 33 | // COMMIT MESSAGE 34 | 35 | let commitMessage = '' 36 | let commonFilePath: string 37 | 38 | try { 39 | const gitStatusFiles = await getGitStatusFiles() 40 | 41 | // If Git didn't find anything to add 42 | if (gitStatusFiles.length === 0) { 43 | showOptionalMessage('Nothing to commit, did you save your changes ?.', settings, true) 44 | 45 | return 46 | } 47 | 48 | // Prepare the common path that may be used to prefill the commit message 49 | if (gitStatusFiles.length === 1) { 50 | commonFilePath = gitStatusFiles[0].path 51 | } else { 52 | commonFilePath = getCommonPathOfGitFiles(gitStatusFiles) 53 | } 54 | 55 | // Enable the commit message auto-fill ONLY if we were able to find a common path 56 | if (commonFilePath.length > 0 && !!settings.prefillCommitMessage) { 57 | // Prefill the commit message with file path 58 | if (settings.prefillCommitMessage.withFileWorkspacePath) { 59 | commitMessage = `${commonFilePath}: ` 60 | 61 | if (settings.prefillCommitMessage.ignoreFileExtension) { 62 | const matches = commitMessage.match(/[^\/](\.\w+):/) 63 | if (matches !== null && matches.length === 2) { 64 | commitMessage = commitMessage.replace(matches[1], '') 65 | } 66 | } 67 | } 68 | 69 | // Force the commit message into lower case 70 | if (settings.prefillCommitMessage.forceLowerCase) { 71 | commitMessage = commitMessage.toLocaleLowerCase() 72 | } 73 | 74 | // Prefill the commit message with the guessed action 75 | if (gitStatusFiles.length === 1) { 76 | commitMessage = guessAction( 77 | commitMessage, 78 | gitStatusFiles[0].state, 79 | settings.prefillCommitMessage.withGuessedCustomActions ?? [], 80 | ) 81 | } 82 | 83 | // Prefill the commit message with settings patterns 84 | commitMessage = replaceStringWith(commitMessage, settings.prefillCommitMessage.replacePatternWith ?? []) 85 | } 86 | 87 | // Prompt user for the commit message 88 | commitMessage = 89 | (await vscodeWindow.showInputBox({ 90 | ignoreFocusOut: true, 91 | prompt: 'Git commit message ?', 92 | validateInput: (commitMessage: string) => 93 | validateCommitMessage(commitMessage) 94 | ? undefined 95 | : `You can't commit with an empty commit message. Write something or press ESC to cancel.`, 96 | value: commitMessage, 97 | })) ?? '' 98 | } catch (err) { 99 | vscodeWindow.showErrorMessage(String(err)) 100 | console.error(err) 101 | 102 | return cancelAdd(filesRelativePaths, settings) 103 | } 104 | 105 | // Check if the commit message is valid 106 | if (!validateCommitMessage(commitMessage)) { 107 | showOptionalMessage(`You can't commit with an empty commit message.`, settings, true) 108 | 109 | return cancelAdd(filesRelativePaths, settings) 110 | } 111 | 112 | // ---------------------------------- 113 | // GIT COMMIT 114 | 115 | try { 116 | await gitCommit(commitMessage) 117 | } catch (err) { 118 | // Git warnings are also caught here, so let's ignore them 119 | if (typeof err !== 'string' || !/^warning/i.test(err)) { 120 | vscodeWindow.showErrorMessage(String(err)) 121 | console.error(err) 122 | 123 | return cancelAdd(filesRelativePaths, settings) 124 | } 125 | } 126 | 127 | // ---------------------------------- 128 | // END 129 | 130 | showOptionalMessage(`File(s) committed to Git with the message: "${commitMessage}".`, settings) 131 | } 132 | -------------------------------------------------------------------------------- /src/libs/cancelAdd.ts: -------------------------------------------------------------------------------- 1 | import { gitReset } from '../helpers/gitReset' 2 | import { showOptionalMessage } from '../helpers/showOptionalMessage' 3 | 4 | import type { Settings } from '../types' 5 | 6 | export async function cancelAdd(filesRelativePaths: string[], settings: Settings) { 7 | showOptionalMessage('Add & Commit canceled.', settings, true) 8 | 9 | const output = await gitReset(filesRelativePaths) 10 | 11 | return output 12 | } 13 | -------------------------------------------------------------------------------- /src/libs/loadLocalConfig.ts: -------------------------------------------------------------------------------- 1 | // biome-ignore lint/style/useNodejsImportProtocol: 2 | // biome-ignore lint/correctness/noNodejsModules: 3 | import { readFileSync } from 'fs' 4 | // biome-ignore lint/style/useNodejsImportProtocol: 5 | // biome-ignore lint/correctness/noNodejsModules: 6 | import { resolve } from 'path' 7 | import { window as vscodeWindow, workspace } from 'vscode' 8 | 9 | import { deepMergeRight } from '../helpers/deepMergeRight' 10 | import { isFile } from '../helpers/isFile' 11 | import { normalizePattern } from '../helpers/normalizePattern' 12 | 13 | import type { Settings } from '../types' 14 | 15 | export function loadLocalConfig(workspaceRootAbsolutePath: string): Settings { 16 | const workspaceSettingsAbsolutePath = resolve(workspaceRootAbsolutePath, '.vscode', 'vscode-git-add-and-commit.json') 17 | 18 | const defaultSettings: Settings = { 19 | prefillCommitMessage: workspace.getConfiguration('gaac'), 20 | } 21 | 22 | let userSettings: Settings = {} 23 | 24 | if (isFile(workspaceSettingsAbsolutePath)) { 25 | try { 26 | const settingsSource = readFileSync(workspaceSettingsAbsolutePath, 'utf8') 27 | userSettings = JSON.parse(settingsSource) 28 | } catch (err) { 29 | vscodeWindow.showWarningMessage(` 30 | Can't load ".vscode/vscode-git-add-and-commit.json". 31 | Please check the file content format. 32 | `) 33 | console.error(err) 34 | } 35 | } 36 | 37 | // const schemaRes = schemaValidate(settings, SettingsSchema) 38 | // if (!schemaRes.valid) { 39 | // vscode.window.showWarningMessage(` 40 | // Settings validation error. Please check the properties in ".vscode/vscode-git-add-and-commit.json" 41 | // or remove this file and use your user/workspace settings instead. 42 | // `) 43 | // schemaRes.errors.forEach(err => console.error(err.message)) 44 | 45 | // return defaultSettings 46 | // } 47 | 48 | const normalizedSettings = deepMergeRight(defaultSettings, userSettings) 49 | 50 | normalizedSettings.prefillCommitMessage.replacePatternWith = 51 | normalizedSettings.prefillCommitMessage.replacePatternWith.map((settingsPattern) => ({ 52 | pattern: normalizePattern(settingsPattern.pattern as string), 53 | with: settingsPattern.with, 54 | })) 55 | 56 | normalizedSettings.prefillCommitMessage.withGuessedCustomActions = 57 | normalizedSettings.prefillCommitMessage.withGuessedCustomActions.map((settingsPattern) => ({ 58 | action: settingsPattern.action, 59 | pattern: normalizePattern(settingsPattern.pattern as string), 60 | state: settingsPattern.state, 61 | })) 62 | 63 | return normalizedSettings 64 | } 65 | -------------------------------------------------------------------------------- /src/libs/pushLocalCommits.ts: -------------------------------------------------------------------------------- 1 | import to from 'await-to-js' 2 | import { window as vscodeWindow } from 'vscode' 3 | 4 | import { gitPush } from '../helpers/gitPush' 5 | import { showOptionalMessage } from '../helpers/showOptionalMessage' 6 | import { showProgressNotification } from '../libs/showProgressNotification' 7 | 8 | import type { Settings } from '../types' 9 | 10 | export async function pushLocalCommits(settings: Settings): Promise { 11 | // ---------------------------------- 12 | // GIT PUSH 13 | 14 | const [err] = await to(showProgressNotification('Pushing your local commits...', gitPush)) 15 | 16 | // Git warnings are also caught here, so let's ignore them 17 | if (err !== null && (typeof err !== 'string' || !(/^to\s/i.test(err) && !/!\s\[rejected\]/i.test(err)))) { 18 | const errMessage = typeof err !== 'string' ? err.message : err 19 | if (errMessage === 'Everything up-to-date') { 20 | vscodeWindow.showInformationMessage(errMessage) 21 | } else { 22 | vscodeWindow.showErrorMessage(errMessage) 23 | console.error(err) 24 | 25 | return 26 | } 27 | } 28 | 29 | // ---------------------------------- 30 | // END 31 | 32 | showOptionalMessage('Local commit(s) pushed.', settings) 33 | } 34 | -------------------------------------------------------------------------------- /src/libs/showProgressNotification.ts: -------------------------------------------------------------------------------- 1 | import { ProgressLocation, window as vscodeWindow } from 'vscode' 2 | 3 | export async function showProgressNotification(message: string, cb: () => Promise): Promise { 4 | return await vscodeWindow.withProgress({ location: ProgressLocation.Notification, title: message }, cb) 5 | } 6 | -------------------------------------------------------------------------------- /src/schemas/settings.ts: -------------------------------------------------------------------------------- 1 | export const SETTINGS_SCHEMA = { 2 | id: 'Settings', 3 | type: 'object', 4 | properties: { 5 | prefillCommitMessage: { 6 | type: 'object', 7 | properties: { 8 | disableOptionalMessages: { 9 | type: 'boolean', 10 | }, 11 | forceLowerCase: { 12 | type: 'boolean', 13 | }, 14 | ignoreFileExtension: { 15 | type: 'boolean', 16 | }, 17 | replacePatternWith: { 18 | type: 'array', 19 | items: { 20 | type: 'object', 21 | properties: { 22 | pattern: { 23 | type: 'string', 24 | minLength: 1, 25 | }, 26 | with: { 27 | type: 'string', 28 | }, 29 | }, 30 | }, 31 | }, 32 | withFileWorkspacePath: { 33 | type: 'boolean', 34 | }, 35 | withGuessedAction: { 36 | type: 'boolean', 37 | }, 38 | withGuessedCustomActions: { 39 | type: 'array', 40 | items: { 41 | type: 'object', 42 | properties: { 43 | action: { 44 | type: 'string', 45 | }, 46 | pattern: { 47 | type: 'string', 48 | minLength: 1, 49 | }, 50 | state: { 51 | enum: ['ADDED', 'DELETED', 'MODIFIED', 'RENAMED'], 52 | }, 53 | }, 54 | }, 55 | }, 56 | }, 57 | }, 58 | }, 59 | } 60 | -------------------------------------------------------------------------------- /src/test/extension.test.ts: -------------------------------------------------------------------------------- 1 | // biome-ignore lint/style/useNodejsImportProtocol: 2 | // biome-ignore lint/correctness/noNodejsModules: 3 | import { strictEqual } from 'assert' 4 | // biome-ignore lint/style/useNodejsImportProtocol: 5 | // biome-ignore lint/correctness/noNodejsModules: 6 | import { join } from 'path' 7 | import { copySync } from 'fs-extra' 8 | 9 | import { exec } from '../helpers/exec' 10 | 11 | // biome-ignore lint/correctness/noUndeclaredVariables: 12 | suite('Git Automator Extension Tests', () => { 13 | const fixturesPath = join(__dirname, 'fixtures') 14 | const fixturesSourcePath = join(__dirname, '..', '..', 'src', 'test', 'fixtures') 15 | 16 | // biome-ignore lint/correctness/noUndeclaredVariables: 17 | suiteSetup(() => { 18 | copySync(join(fixturesSourcePath, 'sample.md'), join(fixturesPath, 'sample.md')) 19 | }) 20 | 21 | // biome-ignore lint/correctness/noUndeclaredVariables: 22 | test('Test helpers/exec()', async () => { 23 | let command: string 24 | switch (process.platform) { 25 | case 'win32': 26 | command = 'type' 27 | break 28 | 29 | default: 30 | command = 'cat' 31 | break 32 | } 33 | 34 | // biome-ignore lint/suspicious/noExplicitAny: 35 | let output: any 36 | // biome-ignore lint/suspicious/noExplicitAny: 37 | let error: any 38 | try { 39 | output = await exec(command, [join(fixturesPath, 'sample.md')]) 40 | } catch (e) { 41 | error = e 42 | } 43 | 44 | strictEqual(undefined, error) 45 | strictEqual('# Hello World !\n', output) 46 | }) 47 | }) 48 | -------------------------------------------------------------------------------- /src/test/fixtures/sample.md: -------------------------------------------------------------------------------- 1 | # Hello World ! 2 | -------------------------------------------------------------------------------- /src/test/index.ts: -------------------------------------------------------------------------------- 1 | // biome-ignore lint/style/noNamespaceImport: 2 | import * as testRunner from 'vscode/lib/testrunner' 3 | 4 | // https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically#set-options 5 | testRunner.configure({ 6 | ui: 'tdd', 7 | useColors: true, 8 | }) 9 | 10 | module.exports = testRunner 11 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | import type { WorkspaceConfiguration } from 'vscode' 2 | 3 | export type FileGitState = 'ADDED' | 'DELETED' | 'MODIFIED' | 'RENAMED' 4 | 5 | export interface GitStatusFile { 6 | oldPath?: string 7 | path: string 8 | state: FileGitState 9 | } 10 | 11 | export interface SettingsPattern { 12 | pattern: RegExp | string 13 | with: string 14 | } 15 | 16 | export interface GuessCustomAction { 17 | action: string 18 | pattern: RegExp | string 19 | state: FileGitState 20 | } 21 | 22 | export interface Settings { 23 | /* 24 | Commit message prefill settings 25 | 26 | @note 27 | - These options will only be applied to the prefill part 28 | and won't impact any of your own commit message edit. 29 | */ 30 | prefillCommitMessage?: SettingsPrefillCommitMessage 31 | } 32 | 33 | export interface SettingsPrefillCommitMessage extends WorkspaceConfiguration { 34 | /* 35 | @description 36 | Show "optional" warning and info messages in the status bar instead of the top modals. 37 | */ 38 | disableOptionalMessages?: boolean 39 | 40 | /* 41 | @description 42 | Force all character in the prefilled commit message to be in lower case. 43 | 44 | @example 45 | "README: " => "readme: " 46 | */ 47 | forceLowerCase?: boolean 48 | 49 | /* 50 | @description 51 | Ignore the file extension in the commit message. 52 | 53 | @example 54 | "res/icon.png: " => "res/icon: " 55 | 56 | @note 57 | - Only useful when the `withFileWorkspacePath` setting is TRUE. 58 | */ 59 | ignoreFileExtension?: boolean 60 | 61 | /* 62 | @description 63 | Replace the commit message via a pattern. These replacements are executed after everything else, 64 | BUT before your own edit (in the prompt field). 65 | 66 | @example 67 | - [{ "pattern": "package.json", "with": "npm" }] 68 | will replace the commit message like this "package.json: " => "npm: ". 69 | - [{ "pattern": "/^package[^\\.]*\\.jso?n?/", "with": "npm" }] 70 | will replace the commit message like this "package-lock.json: " => "npm: ". 71 | 72 | @note 73 | - If you use a regex, you need the `with` string MUST start AND end with "/". You can't add modifiers. 74 | - Only useful when the `withFileWorkspacePath` setting is TRUE. 75 | - This option is run after everything else, so take that into account for your patterns. 76 | */ 77 | replacePatternWith?: SettingsPattern[] 78 | 79 | /* 80 | @description 81 | Prefill the commit message with the workspace relative file path, followed by ": ", 82 | 83 | @example 84 | "res/icon.png: " 85 | */ 86 | withFileWorkspacePath?: boolean 87 | 88 | /* 89 | @description 90 | Try to guess the action when it's obvious and add it to the prefilled commit message. 91 | 92 | @description 93 | - If a single file or directory has been added (for Git), it will add "create" to the commit message. 94 | - If a single file or directory has been renamed (for Git), it will add "move" to the commit message. 95 | - If a single file or directory has been deleted (for Git), it will add "remove" to the commit message. 96 | 97 | @note 98 | - This option only works when one file or one directory has been created, moved/renamed, or deleted. 99 | */ 100 | withGuessedAction?: boolean 101 | 102 | /* 103 | @description 104 | Add a custom action for any prefilled commit matching a pattern and Git state. 105 | The `state` can be any one of: "ADDED", "DELETED", "MODIFIED", "RENAMED" 106 | 107 | @description 108 | - [{ "action": "update", "pattern": "README", "action": "MODIFIED" }] 109 | will prefill the commit message of any update on an existing README.md file like this: 110 | "README: update". 111 | 112 | @note 113 | - If you use a regex, you need the `with` string MUST start AND end with "/". You can't add modifiers. 114 | - This option can override the `withGuessedAction`. 115 | - This option is run just before the `replacePatternWith`, so take that into account for your patterns. 116 | */ 117 | withGuessedCustomActions?: GuessCustomAction[] 118 | } 119 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@ivangabriele/tsconfig-node", 3 | "compilerOptions": { 4 | "inlineSources": true, 5 | "moduleResolution": "node", 6 | "noImplicitAny": false, 7 | "removeComments": true, 8 | "module": "es2015", 9 | "outDir": "./out", 10 | "preserveConstEnums": true, 11 | "skipDefaultLibCheck": true, 12 | "rootDir": "./src", 13 | "sourceMap": true, 14 | "target": "es2015" 15 | }, 16 | "include": ["./src/**/*"], 17 | "exclude": ["./node_modules/**/*", "./out/**/*"] 18 | } 19 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # This file is generated by running "yarn install" inside your project. 2 | # Manual changes might be lost - proceed with caution! 3 | 4 | __metadata: 5 | version: 8 6 | cacheKey: 10c0 7 | 8 | "@babel/code-frame@npm:^7.0.0": 9 | version: 7.24.7 10 | resolution: "@babel/code-frame@npm:7.24.7" 11 | dependencies: 12 | "@babel/highlight": "npm:^7.24.7" 13 | picocolors: "npm:^1.0.0" 14 | checksum: 10c0/ab0af539473a9f5aeaac7047e377cb4f4edd255a81d84a76058595f8540784cc3fbe8acf73f1e073981104562490aabfb23008cd66dc677a456a4ed5390fdde6 15 | languageName: node 16 | linkType: hard 17 | 18 | "@babel/helper-validator-identifier@npm:^7.24.7": 19 | version: 7.24.7 20 | resolution: "@babel/helper-validator-identifier@npm:7.24.7" 21 | checksum: 10c0/87ad608694c9477814093ed5b5c080c2e06d44cb1924ae8320474a74415241223cc2a725eea2640dd783ff1e3390e5f95eede978bc540e870053152e58f1d651 22 | languageName: node 23 | linkType: hard 24 | 25 | "@babel/highlight@npm:^7.24.7": 26 | version: 7.24.7 27 | resolution: "@babel/highlight@npm:7.24.7" 28 | dependencies: 29 | "@babel/helper-validator-identifier": "npm:^7.24.7" 30 | chalk: "npm:^2.4.2" 31 | js-tokens: "npm:^4.0.0" 32 | picocolors: "npm:^1.0.0" 33 | checksum: 10c0/674334c571d2bb9d1c89bdd87566383f59231e16bcdcf5bb7835babdf03c9ae585ca0887a7b25bdf78f303984af028df52831c7989fecebb5101cc132da9393a 34 | languageName: node 35 | linkType: hard 36 | 37 | "@biomejs/biome@npm:1.8.1": 38 | version: 1.8.1 39 | resolution: "@biomejs/biome@npm:1.8.1" 40 | dependencies: 41 | "@biomejs/cli-darwin-arm64": "npm:1.8.1" 42 | "@biomejs/cli-darwin-x64": "npm:1.8.1" 43 | "@biomejs/cli-linux-arm64": "npm:1.8.1" 44 | "@biomejs/cli-linux-arm64-musl": "npm:1.8.1" 45 | "@biomejs/cli-linux-x64": "npm:1.8.1" 46 | "@biomejs/cli-linux-x64-musl": "npm:1.8.1" 47 | "@biomejs/cli-win32-arm64": "npm:1.8.1" 48 | "@biomejs/cli-win32-x64": "npm:1.8.1" 49 | dependenciesMeta: 50 | "@biomejs/cli-darwin-arm64": 51 | optional: true 52 | "@biomejs/cli-darwin-x64": 53 | optional: true 54 | "@biomejs/cli-linux-arm64": 55 | optional: true 56 | "@biomejs/cli-linux-arm64-musl": 57 | optional: true 58 | "@biomejs/cli-linux-x64": 59 | optional: true 60 | "@biomejs/cli-linux-x64-musl": 61 | optional: true 62 | "@biomejs/cli-win32-arm64": 63 | optional: true 64 | "@biomejs/cli-win32-x64": 65 | optional: true 66 | bin: 67 | biome: bin/biome 68 | checksum: 10c0/17990974c5a4f56104bc59e45d1aebc50ffa146c0d9f3da99f5c54770188939608d08f1edb70b69ea7715c4d9da6d10d4b2b1ed7cd9b54ec58fcd89cda2a1d38 69 | languageName: node 70 | linkType: hard 71 | 72 | "@biomejs/cli-darwin-arm64@npm:1.8.1": 73 | version: 1.8.1 74 | resolution: "@biomejs/cli-darwin-arm64@npm:1.8.1" 75 | conditions: os=darwin & cpu=arm64 76 | languageName: node 77 | linkType: hard 78 | 79 | "@biomejs/cli-darwin-x64@npm:1.8.1": 80 | version: 1.8.1 81 | resolution: "@biomejs/cli-darwin-x64@npm:1.8.1" 82 | conditions: os=darwin & cpu=x64 83 | languageName: node 84 | linkType: hard 85 | 86 | "@biomejs/cli-linux-arm64-musl@npm:1.8.1": 87 | version: 1.8.1 88 | resolution: "@biomejs/cli-linux-arm64-musl@npm:1.8.1" 89 | conditions: os=linux & cpu=arm64 & libc=musl 90 | languageName: node 91 | linkType: hard 92 | 93 | "@biomejs/cli-linux-arm64@npm:1.8.1": 94 | version: 1.8.1 95 | resolution: "@biomejs/cli-linux-arm64@npm:1.8.1" 96 | conditions: os=linux & cpu=arm64 & libc=glibc 97 | languageName: node 98 | linkType: hard 99 | 100 | "@biomejs/cli-linux-x64-musl@npm:1.8.1": 101 | version: 1.8.1 102 | resolution: "@biomejs/cli-linux-x64-musl@npm:1.8.1" 103 | conditions: os=linux & cpu=x64 & libc=musl 104 | languageName: node 105 | linkType: hard 106 | 107 | "@biomejs/cli-linux-x64@npm:1.8.1": 108 | version: 1.8.1 109 | resolution: "@biomejs/cli-linux-x64@npm:1.8.1" 110 | conditions: os=linux & cpu=x64 & libc=glibc 111 | languageName: node 112 | linkType: hard 113 | 114 | "@biomejs/cli-win32-arm64@npm:1.8.1": 115 | version: 1.8.1 116 | resolution: "@biomejs/cli-win32-arm64@npm:1.8.1" 117 | conditions: os=win32 & cpu=arm64 118 | languageName: node 119 | linkType: hard 120 | 121 | "@biomejs/cli-win32-x64@npm:1.8.1": 122 | version: 1.8.1 123 | resolution: "@biomejs/cli-win32-x64@npm:1.8.1" 124 | conditions: os=win32 & cpu=x64 125 | languageName: node 126 | linkType: hard 127 | 128 | "@ivangabriele/biome-config@npm:1.0.2": 129 | version: 1.0.2 130 | resolution: "@ivangabriele/biome-config@npm:1.0.2" 131 | peerDependencies: 132 | "@biomejs/biome": ^1 133 | checksum: 10c0/1180dd95b56d4d6901a068e3d4e28f118a8f54bc110514d5896a66d662257e9ccfb16a241e3a95e91b77521c00993aa9f745595613d450fc4ec6e6f4f6b39134 134 | languageName: node 135 | linkType: hard 136 | 137 | "@ivangabriele/tsconfig-node@npm:2.0.0": 138 | version: 2.0.0 139 | resolution: "@ivangabriele/tsconfig-node@npm:2.0.0" 140 | peerDependencies: 141 | typescript: ^5 142 | checksum: 10c0/013fab822d25f83fc6e10ac3e12793866bccd3b0505d6ca25dcbcddfa3fde439ab29710ba2cbffd6c3357481d541eda2b688ad84d0779294e2a00d17bef919db 143 | languageName: node 144 | linkType: hard 145 | 146 | "@types/estree@npm:*": 147 | version: 1.0.5 148 | resolution: "@types/estree@npm:1.0.5" 149 | checksum: 10c0/b3b0e334288ddb407c7b3357ca67dbee75ee22db242ca7c56fe27db4e1a31989cb8af48a84dd401deb787fe10cc6b2ab1ee82dc4783be87ededbe3d53c79c70d 150 | languageName: node 151 | linkType: hard 152 | 153 | "@types/fs-extra@npm:8.0.1": 154 | version: 8.0.1 155 | resolution: "@types/fs-extra@npm:8.0.1" 156 | dependencies: 157 | "@types/node": "npm:*" 158 | checksum: 10c0/cedc3151a5cf19ede1a3f8331e9b9193a85b89a243e1121140cb72e3f73f940d5ef1da21efaef49672c7a4a32b5e2fdd065cee1cb420605052c476bbddcd03bc 159 | languageName: node 160 | linkType: hard 161 | 162 | "@types/mocha@npm:5.2.7": 163 | version: 5.2.7 164 | resolution: "@types/mocha@npm:5.2.7" 165 | checksum: 10c0/070236400bad0bef1a48dcc7d858febed38656fbb2248a86473a0d388cfe88ce07bcaffee2348f5537762fcb0de7fc72cdb2e98a99859c16f32c2f9012e83cd5 166 | languageName: node 167 | linkType: hard 168 | 169 | "@types/node@npm:*": 170 | version: 20.14.2 171 | resolution: "@types/node@npm:20.14.2" 172 | dependencies: 173 | undici-types: "npm:~5.26.4" 174 | checksum: 10c0/2d86e5f2227aaa42212e82ea0affe72799111b888ff900916376450b02b09b963ca888b20d9c332d8d2b833ed4781987867a38eaa2e4863fa8439071468b0a6f 175 | languageName: node 176 | linkType: hard 177 | 178 | "@types/node@npm:20.14.5": 179 | version: 20.14.5 180 | resolution: "@types/node@npm:20.14.5" 181 | dependencies: 182 | undici-types: "npm:~5.26.4" 183 | checksum: 10c0/06a8c304b5f7f190d4497807dc67ad09ee7b14ea2996bfdc823553c624698d8cab1ef9d16f8b764f20cb9eb11caa0e832787741e9ef70e1c89d620797ab28436 184 | languageName: node 185 | linkType: hard 186 | 187 | "@types/resolve@npm:0.0.8": 188 | version: 0.0.8 189 | resolution: "@types/resolve@npm:0.0.8" 190 | dependencies: 191 | "@types/node": "npm:*" 192 | checksum: 10c0/ead6902f01e7240918e6f6dabf0e2bc37035492b1da16f605bbd1e153c17d0639df77981b2ec042480361be76c9e967543287d9b312cd668ed9123524994c344 193 | languageName: node 194 | linkType: hard 195 | 196 | "@types/vscode@npm:1.41.0": 197 | version: 1.41.0 198 | resolution: "@types/vscode@npm:1.41.0" 199 | checksum: 10c0/a3262544c82d900e6a4af82d1dc7bc5cf657f826aa3a867e92c3a1eea9cfa183037049a33811d73a477ea23aae5fc9b5855d1b17bb86600589f2a8cdf908c245 200 | languageName: node 201 | linkType: hard 202 | 203 | "acorn@npm:^7.1.0": 204 | version: 7.4.1 205 | resolution: "acorn@npm:7.4.1" 206 | bin: 207 | acorn: bin/acorn 208 | checksum: 10c0/bd0b2c2b0f334bbee48828ff897c12bd2eb5898d03bf556dcc8942022cec795ac5bb5b6b585e2de687db6231faf07e096b59a361231dd8c9344d5df5f7f0e526 209 | languageName: node 210 | linkType: hard 211 | 212 | "agent-base@npm:4, agent-base@npm:^4.3.0": 213 | version: 4.3.0 214 | resolution: "agent-base@npm:4.3.0" 215 | dependencies: 216 | es6-promisify: "npm:^5.0.0" 217 | checksum: 10c0/a618d4e4ca7c0c2023b2664346570773455c501a930718764f65016a8a9eea6d2ab5ba54255589e46de529bab4026a088523dce17f94e34ba385af1f644febe1 218 | languageName: node 219 | linkType: hard 220 | 221 | "ajv@npm:^6.12.3": 222 | version: 6.12.6 223 | resolution: "ajv@npm:6.12.6" 224 | dependencies: 225 | fast-deep-equal: "npm:^3.1.1" 226 | fast-json-stable-stringify: "npm:^2.0.0" 227 | json-schema-traverse: "npm:^0.4.1" 228 | uri-js: "npm:^4.2.2" 229 | checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71 230 | languageName: node 231 | linkType: hard 232 | 233 | "ansi-styles@npm:^3.2.1": 234 | version: 3.2.1 235 | resolution: "ansi-styles@npm:3.2.1" 236 | dependencies: 237 | color-convert: "npm:^1.9.0" 238 | checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b 239 | languageName: node 240 | linkType: hard 241 | 242 | "argparse@npm:^1.0.7": 243 | version: 1.0.10 244 | resolution: "argparse@npm:1.0.10" 245 | dependencies: 246 | sprintf-js: "npm:~1.0.2" 247 | checksum: 10c0/b2972c5c23c63df66bca144dbc65d180efa74f25f8fd9b7d9a0a6c88ae839db32df3d54770dcb6460cf840d232b60695d1a6b1053f599d84e73f7437087712de 248 | languageName: node 249 | linkType: hard 250 | 251 | "asn1@npm:~0.2.3": 252 | version: 0.2.6 253 | resolution: "asn1@npm:0.2.6" 254 | dependencies: 255 | safer-buffer: "npm:~2.1.0" 256 | checksum: 10c0/00c8a06c37e548762306bcb1488388d2f76c74c36f70c803f0c081a01d3bdf26090fc088cd812afc5e56a6d49e33765d451a5f8a68ab9c2b087eba65d2e980e0 257 | languageName: node 258 | linkType: hard 259 | 260 | "assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0": 261 | version: 1.0.0 262 | resolution: "assert-plus@npm:1.0.0" 263 | checksum: 10c0/b194b9d50c3a8f872ee85ab110784911e696a4d49f7ee6fc5fb63216dedbefd2c55999c70cb2eaeb4cf4a0e0338b44e9ace3627117b5bf0d42460e9132f21b91 264 | languageName: node 265 | linkType: hard 266 | 267 | "asynckit@npm:^0.4.0": 268 | version: 0.4.0 269 | resolution: "asynckit@npm:0.4.0" 270 | checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d 271 | languageName: node 272 | linkType: hard 273 | 274 | "await-to-js@npm:2.1.1": 275 | version: 2.1.1 276 | resolution: "await-to-js@npm:2.1.1" 277 | checksum: 10c0/63fce5bbccf03f84c7aa47efe51139c96212075500a8bfc886b90d01df1c58678588790ed89a380f7e8c75f49307138cc0a8f1feb43c5168304a38949df86e2a 278 | languageName: node 279 | linkType: hard 280 | 281 | "aws-sign2@npm:~0.7.0": 282 | version: 0.7.0 283 | resolution: "aws-sign2@npm:0.7.0" 284 | checksum: 10c0/021d2cc5547d4d9ef1633e0332e746a6f447997758b8b68d6fb33f290986872d2bff5f0c37d5832f41a7229361f093cd81c40898d96ed153493c0fb5cd8575d2 285 | languageName: node 286 | linkType: hard 287 | 288 | "aws4@npm:^1.8.0": 289 | version: 1.13.0 290 | resolution: "aws4@npm:1.13.0" 291 | checksum: 10c0/4c71398543e432631a226cabafaa138f8070482f99790233840d84847291ec744e739cb18684a68f52125d0e73f82f16f0246d93524ec85167fadb3cf60dfa4f 292 | languageName: node 293 | linkType: hard 294 | 295 | "balanced-match@npm:^1.0.0": 296 | version: 1.0.2 297 | resolution: "balanced-match@npm:1.0.2" 298 | checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee 299 | languageName: node 300 | linkType: hard 301 | 302 | "bcrypt-pbkdf@npm:^1.0.0": 303 | version: 1.0.2 304 | resolution: "bcrypt-pbkdf@npm:1.0.2" 305 | dependencies: 306 | tweetnacl: "npm:^0.14.3" 307 | checksum: 10c0/ddfe85230b32df25aeebfdccfbc61d3bc493ace49c884c9c68575de1f5dcf733a5d7de9def3b0f318b786616b8d85bad50a28b1da1750c43e0012c93badcc148 308 | languageName: node 309 | linkType: hard 310 | 311 | "brace-expansion@npm:^1.1.7": 312 | version: 1.1.11 313 | resolution: "brace-expansion@npm:1.1.11" 314 | dependencies: 315 | balanced-match: "npm:^1.0.0" 316 | concat-map: "npm:0.0.1" 317 | checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 318 | languageName: node 319 | linkType: hard 320 | 321 | "browser-stdout@npm:1.3.1": 322 | version: 1.3.1 323 | resolution: "browser-stdout@npm:1.3.1" 324 | checksum: 10c0/c40e482fd82be872b6ea7b9f7591beafbf6f5ba522fe3dade98ba1573a1c29a11101564993e4eb44e5488be8f44510af072df9a9637c739217eb155ceb639205 325 | languageName: node 326 | linkType: hard 327 | 328 | "buffer-from@npm:^1.0.0": 329 | version: 1.1.2 330 | resolution: "buffer-from@npm:1.1.2" 331 | checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 332 | languageName: node 333 | linkType: hard 334 | 335 | "builtin-modules@npm:^1.1.1": 336 | version: 1.1.1 337 | resolution: "builtin-modules@npm:1.1.1" 338 | checksum: 10c0/58d72ea7f59db3c2ae854e1058d85b226f75ff7386d0f71d628e25a600383fc6652af218e20ba2361925c605a4144590ceb890dfdca298fdf8f3d040c0591a23 339 | languageName: node 340 | linkType: hard 341 | 342 | "builtin-modules@npm:^3.1.0": 343 | version: 3.3.0 344 | resolution: "builtin-modules@npm:3.3.0" 345 | checksum: 10c0/2cb3448b4f7306dc853632a4fcddc95e8d4e4b9868c139400027b71938fc6806d4ff44007deffb362ac85724bd40c2c6452fb6a0aa4531650eeddb98d8e5ee8a 346 | languageName: node 347 | linkType: hard 348 | 349 | "caseless@npm:~0.12.0": 350 | version: 0.12.0 351 | resolution: "caseless@npm:0.12.0" 352 | checksum: 10c0/ccf64bcb6c0232cdc5b7bd91ddd06e23a4b541f138336d4725233ac538041fb2f29c2e86c3c4a7a61ef990b665348db23a047060b9414c3a6603e9fa61ad4626 353 | languageName: node 354 | linkType: hard 355 | 356 | "chalk@npm:^2.3.0, chalk@npm:^2.4.2": 357 | version: 2.4.2 358 | resolution: "chalk@npm:2.4.2" 359 | dependencies: 360 | ansi-styles: "npm:^3.2.1" 361 | escape-string-regexp: "npm:^1.0.5" 362 | supports-color: "npm:^5.3.0" 363 | checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 364 | languageName: node 365 | linkType: hard 366 | 367 | "color-convert@npm:^1.9.0": 368 | version: 1.9.3 369 | resolution: "color-convert@npm:1.9.3" 370 | dependencies: 371 | color-name: "npm:1.1.3" 372 | checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c 373 | languageName: node 374 | linkType: hard 375 | 376 | "color-name@npm:1.1.3": 377 | version: 1.1.3 378 | resolution: "color-name@npm:1.1.3" 379 | checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 380 | languageName: node 381 | linkType: hard 382 | 383 | "combined-stream@npm:^1.0.6, combined-stream@npm:~1.0.6": 384 | version: 1.0.8 385 | resolution: "combined-stream@npm:1.0.8" 386 | dependencies: 387 | delayed-stream: "npm:~1.0.0" 388 | checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 389 | languageName: node 390 | linkType: hard 391 | 392 | "commander@npm:2.15.1": 393 | version: 2.15.1 394 | resolution: "commander@npm:2.15.1" 395 | checksum: 10c0/26793fd4c798a691bf354331fb19a8accb03a32fdd774a948099c829b5fc32ccb7c60b7071d3df8381fb699121fd0e944ca4ac9d07ecaf702ce8a64b49aba6f4 396 | languageName: node 397 | linkType: hard 398 | 399 | "commander@npm:^2.12.1": 400 | version: 2.20.3 401 | resolution: "commander@npm:2.20.3" 402 | checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 403 | languageName: node 404 | linkType: hard 405 | 406 | "commondir@npm:^1.0.1": 407 | version: 1.0.1 408 | resolution: "commondir@npm:1.0.1" 409 | checksum: 10c0/33a124960e471c25ee19280c9ce31ccc19574b566dc514fe4f4ca4c34fa8b0b57cf437671f5de380e11353ea9426213fca17687dd2ef03134fea2dbc53809fd6 410 | languageName: node 411 | linkType: hard 412 | 413 | "concat-map@npm:0.0.1": 414 | version: 0.0.1 415 | resolution: "concat-map@npm:0.0.1" 416 | checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f 417 | languageName: node 418 | linkType: hard 419 | 420 | "core-util-is@npm:1.0.2": 421 | version: 1.0.2 422 | resolution: "core-util-is@npm:1.0.2" 423 | checksum: 10c0/980a37a93956d0de8a828ce508f9b9e3317039d68922ca79995421944146700e4aaf490a6dbfebcb1c5292a7184600c7710b957d724be1e37b8254c6bc0fe246 424 | languageName: node 425 | linkType: hard 426 | 427 | "dashdash@npm:^1.12.0": 428 | version: 1.14.1 429 | resolution: "dashdash@npm:1.14.1" 430 | dependencies: 431 | assert-plus: "npm:^1.0.0" 432 | checksum: 10c0/64589a15c5bd01fa41ff7007e0f2c6552c5ef2028075daa16b188a3721f4ba001841bf306dfc2eee6e2e6e7f76b38f5f17fb21fa847504192290ffa9e150118a 433 | languageName: node 434 | linkType: hard 435 | 436 | "debug@npm:3.1.0": 437 | version: 3.1.0 438 | resolution: "debug@npm:3.1.0" 439 | dependencies: 440 | ms: "npm:2.0.0" 441 | checksum: 10c0/5bff34a352d7b2eaa31886eeaf2ee534b5461ec0548315b2f9f80bd1d2533cab7df1fa52e130ce27bc31c3945fbffb0fc72baacdceb274b95ce853db89254ea4 442 | languageName: node 443 | linkType: hard 444 | 445 | "debug@npm:^3.1.0": 446 | version: 3.2.7 447 | resolution: "debug@npm:3.2.7" 448 | dependencies: 449 | ms: "npm:^2.1.1" 450 | checksum: 10c0/37d96ae42cbc71c14844d2ae3ba55adf462ec89fd3a999459dec3833944cd999af6007ff29c780f1c61153bcaaf2c842d1e4ce1ec621e4fc4923244942e4a02a 451 | languageName: node 452 | linkType: hard 453 | 454 | "delayed-stream@npm:~1.0.0": 455 | version: 1.0.0 456 | resolution: "delayed-stream@npm:1.0.0" 457 | checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 458 | languageName: node 459 | linkType: hard 460 | 461 | "diff@npm:3.5.0": 462 | version: 3.5.0 463 | resolution: "diff@npm:3.5.0" 464 | checksum: 10c0/fc62d5ba9f6d1b8b5833380969037007913d4886997838c247c54ec6934f09ae5a07e17ae28b1f016018149d81df8ad89306f52eac1afa899e0bed49015a64d1 465 | languageName: node 466 | linkType: hard 467 | 468 | "diff@npm:^4.0.1": 469 | version: 4.0.2 470 | resolution: "diff@npm:4.0.2" 471 | checksum: 10c0/81b91f9d39c4eaca068eb0c1eb0e4afbdc5bb2941d197f513dd596b820b956fef43485876226d65d497bebc15666aa2aa82c679e84f65d5f2bfbf14ee46e32c1 472 | languageName: node 473 | linkType: hard 474 | 475 | "ecc-jsbn@npm:~0.1.1": 476 | version: 0.1.2 477 | resolution: "ecc-jsbn@npm:0.1.2" 478 | dependencies: 479 | jsbn: "npm:~0.1.0" 480 | safer-buffer: "npm:^2.1.0" 481 | checksum: 10c0/6cf168bae1e2dad2e46561d9af9cbabfbf5ff592176ad4e9f0f41eaaf5fe5e10bb58147fe0a804de62b1ee9dad42c28810c88d652b21b6013c47ba8efa274ca1 482 | languageName: node 483 | linkType: hard 484 | 485 | "es6-promise@npm:^4.0.3": 486 | version: 4.2.8 487 | resolution: "es6-promise@npm:4.2.8" 488 | checksum: 10c0/2373d9c5e9a93bdd9f9ed32ff5cb6dd3dd785368d1c21e9bbbfd07d16345b3774ae260f2bd24c8f836a6903f432b4151e7816a7fa8891ccb4e1a55a028ec42c3 489 | languageName: node 490 | linkType: hard 491 | 492 | "es6-promisify@npm:^5.0.0": 493 | version: 5.0.0 494 | resolution: "es6-promisify@npm:5.0.0" 495 | dependencies: 496 | es6-promise: "npm:^4.0.3" 497 | checksum: 10c0/23284c6a733cbf7842ec98f41eac742c9f288a78753c4fe46652bae826446ced7615b9e8a5c5f121a08812b1cd478ea58630f3e1c3d70835bd5dcd69c7cd75c9 498 | languageName: node 499 | linkType: hard 500 | 501 | "escape-string-regexp@npm:1.0.5, escape-string-regexp@npm:^1.0.5": 502 | version: 1.0.5 503 | resolution: "escape-string-regexp@npm:1.0.5" 504 | checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 505 | languageName: node 506 | linkType: hard 507 | 508 | "esprima@npm:^4.0.0": 509 | version: 4.0.1 510 | resolution: "esprima@npm:4.0.1" 511 | bin: 512 | esparse: ./bin/esparse.js 513 | esvalidate: ./bin/esvalidate.js 514 | checksum: 10c0/ad4bab9ead0808cf56501750fd9d3fb276f6b105f987707d059005d57e182d18a7c9ec7f3a01794ebddcca676773e42ca48a32d67a250c9d35e009ca613caba3 515 | languageName: node 516 | linkType: hard 517 | 518 | "estree-walker@npm:^0.6.1": 519 | version: 0.6.1 520 | resolution: "estree-walker@npm:0.6.1" 521 | checksum: 10c0/6dabc855faa04a1ffb17b6a9121b6008ba75ab5a163ad9dc3d7fca05cfda374c5f5e91418d783496620ca75e99a73c40874d8b75f23b4117508cc8bde78e7b41 522 | languageName: node 523 | linkType: hard 524 | 525 | "extend@npm:~3.0.2": 526 | version: 3.0.2 527 | resolution: "extend@npm:3.0.2" 528 | checksum: 10c0/73bf6e27406e80aa3e85b0d1c4fd987261e628064e170ca781125c0b635a3dabad5e05adbf07595ea0cf1e6c5396cacb214af933da7cbaf24fe75ff14818e8f9 529 | languageName: node 530 | linkType: hard 531 | 532 | "extsprintf@npm:1.3.0": 533 | version: 1.3.0 534 | resolution: "extsprintf@npm:1.3.0" 535 | checksum: 10c0/f75114a8388f0cbce68e277b6495dc3930db4dde1611072e4a140c24e204affd77320d004b947a132e9a3b97b8253017b2b62dce661975fb0adced707abf1ab5 536 | languageName: node 537 | linkType: hard 538 | 539 | "extsprintf@npm:^1.2.0": 540 | version: 1.4.1 541 | resolution: "extsprintf@npm:1.4.1" 542 | checksum: 10c0/e10e2769985d0e9b6c7199b053a9957589d02e84de42832c295798cb422a025e6d4a92e0259c1fb4d07090f5bfde6b55fd9f880ac5855bd61d775f8ab75a7ab0 543 | languageName: node 544 | linkType: hard 545 | 546 | "fast-deep-equal@npm:^3.1.1": 547 | version: 3.1.3 548 | resolution: "fast-deep-equal@npm:3.1.3" 549 | checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 550 | languageName: node 551 | linkType: hard 552 | 553 | "fast-json-stable-stringify@npm:^2.0.0": 554 | version: 2.1.0 555 | resolution: "fast-json-stable-stringify@npm:2.1.0" 556 | checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b 557 | languageName: node 558 | linkType: hard 559 | 560 | "find-cache-dir@npm:^3.0.0": 561 | version: 3.3.2 562 | resolution: "find-cache-dir@npm:3.3.2" 563 | dependencies: 564 | commondir: "npm:^1.0.1" 565 | make-dir: "npm:^3.0.2" 566 | pkg-dir: "npm:^4.1.0" 567 | checksum: 10c0/92747cda42bff47a0266b06014610981cfbb71f55d60f2c8216bc3108c83d9745507fb0b14ecf6ab71112bed29cd6fb1a137ee7436179ea36e11287e3159e587 568 | languageName: node 569 | linkType: hard 570 | 571 | "find-up@npm:^4.0.0": 572 | version: 4.1.0 573 | resolution: "find-up@npm:4.1.0" 574 | dependencies: 575 | locate-path: "npm:^5.0.0" 576 | path-exists: "npm:^4.0.0" 577 | checksum: 10c0/0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1 578 | languageName: node 579 | linkType: hard 580 | 581 | "forever-agent@npm:~0.6.1": 582 | version: 0.6.1 583 | resolution: "forever-agent@npm:0.6.1" 584 | checksum: 10c0/364f7f5f7d93ab661455351ce116a67877b66f59aca199559a999bd39e3cfadbfbfacc10415a915255e2210b30c23febe9aec3ca16bf2d1ff11c935a1000e24c 585 | languageName: node 586 | linkType: hard 587 | 588 | "form-data@npm:~2.3.2": 589 | version: 2.3.3 590 | resolution: "form-data@npm:2.3.3" 591 | dependencies: 592 | asynckit: "npm:^0.4.0" 593 | combined-stream: "npm:^1.0.6" 594 | mime-types: "npm:^2.1.12" 595 | checksum: 10c0/706ef1e5649286b6a61e5bb87993a9842807fd8f149cd2548ee807ea4fb882247bdf7f6e64ac4720029c0cd5c80343de0e22eee1dc9e9882e12db9cc7bc016a4 596 | languageName: node 597 | linkType: hard 598 | 599 | "fs-extra@npm:8.1.0": 600 | version: 8.1.0 601 | resolution: "fs-extra@npm:8.1.0" 602 | dependencies: 603 | graceful-fs: "npm:^4.2.0" 604 | jsonfile: "npm:^4.0.0" 605 | universalify: "npm:^0.1.0" 606 | checksum: 10c0/259f7b814d9e50d686899550c4f9ded85c46c643f7fe19be69504888e007fcbc08f306fae8ec495b8b998635e997c9e3e175ff2eeed230524ef1c1684cc96423 607 | languageName: node 608 | linkType: hard 609 | 610 | "fs.realpath@npm:^1.0.0": 611 | version: 1.0.0 612 | resolution: "fs.realpath@npm:1.0.0" 613 | checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 614 | languageName: node 615 | linkType: hard 616 | 617 | "function-bind@npm:^1.1.2": 618 | version: 1.1.2 619 | resolution: "function-bind@npm:1.1.2" 620 | checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 621 | languageName: node 622 | linkType: hard 623 | 624 | "getpass@npm:^0.1.1": 625 | version: 0.1.7 626 | resolution: "getpass@npm:0.1.7" 627 | dependencies: 628 | assert-plus: "npm:^1.0.0" 629 | checksum: 10c0/c13f8530ecf16fc509f3fa5cd8dd2129ffa5d0c7ccdf5728b6022d52954c2d24be3706b4cdf15333eec52f1fbb43feb70a01dabc639d1d10071e371da8aaa52f 630 | languageName: node 631 | linkType: hard 632 | 633 | "glob@npm:7.1.2": 634 | version: 7.1.2 635 | resolution: "glob@npm:7.1.2" 636 | dependencies: 637 | fs.realpath: "npm:^1.0.0" 638 | inflight: "npm:^1.0.4" 639 | inherits: "npm:2" 640 | minimatch: "npm:^3.0.4" 641 | once: "npm:^1.3.0" 642 | path-is-absolute: "npm:^1.0.0" 643 | checksum: 10c0/2fc8e29c6a6c5cb99854177e9c47a6e17130dd4ee06c5576d53b171e07b1fbc40fa613295dbd35a6f1a8d02a6214b39a0f848ed7cb74bfc2325cc32485d17cbe 644 | languageName: node 645 | linkType: hard 646 | 647 | "glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3": 648 | version: 7.2.3 649 | resolution: "glob@npm:7.2.3" 650 | dependencies: 651 | fs.realpath: "npm:^1.0.0" 652 | inflight: "npm:^1.0.4" 653 | inherits: "npm:2" 654 | minimatch: "npm:^3.1.1" 655 | once: "npm:^1.3.0" 656 | path-is-absolute: "npm:^1.0.0" 657 | checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe 658 | languageName: node 659 | linkType: hard 660 | 661 | "graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0": 662 | version: 4.2.11 663 | resolution: "graceful-fs@npm:4.2.11" 664 | checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 665 | languageName: node 666 | linkType: hard 667 | 668 | "growl@npm:1.10.5": 669 | version: 1.10.5 670 | resolution: "growl@npm:1.10.5" 671 | checksum: 10c0/a6a8f4df1269ac321f9e41c310552f3568768160942b6c9a7c116fcff1e3921f6a48fb7520689660412f7d1e5d46f76214e05406b23eee9e213830fdc2f772fe 672 | languageName: node 673 | linkType: hard 674 | 675 | "har-schema@npm:^2.0.0": 676 | version: 2.0.0 677 | resolution: "har-schema@npm:2.0.0" 678 | checksum: 10c0/3856cb76152658e0002b9c2b45b4360bb26b3e832c823caed8fcf39a01096030bf09fa5685c0f7b0f2cb3ecba6e9dce17edaf28b64a423d6201092e6be56e592 679 | languageName: node 680 | linkType: hard 681 | 682 | "har-validator@npm:~5.1.3": 683 | version: 5.1.5 684 | resolution: "har-validator@npm:5.1.5" 685 | dependencies: 686 | ajv: "npm:^6.12.3" 687 | har-schema: "npm:^2.0.0" 688 | checksum: 10c0/f1d606eb1021839e3a905be5ef7cca81c2256a6be0748efb8fefc14312214f9e6c15d7f2eaf37514104071207d84f627b68bb9f6178703da4e06fbd1a0649a5e 689 | languageName: node 690 | linkType: hard 691 | 692 | "has-flag@npm:^3.0.0": 693 | version: 3.0.0 694 | resolution: "has-flag@npm:3.0.0" 695 | checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 696 | languageName: node 697 | linkType: hard 698 | 699 | "hasown@npm:^2.0.0": 700 | version: 2.0.2 701 | resolution: "hasown@npm:2.0.2" 702 | dependencies: 703 | function-bind: "npm:^1.1.2" 704 | checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 705 | languageName: node 706 | linkType: hard 707 | 708 | "he@npm:1.1.1": 709 | version: 1.1.1 710 | resolution: "he@npm:1.1.1" 711 | bin: 712 | he: bin/he 713 | checksum: 10c0/3cf48cb072e58922c76832a34b0789a86acf27c4c492cb2934ce71a7709c136fafb6762cca0eb24e8fef6e936b29c3e8ee07769f4513e2aa937735324483dedb 714 | languageName: node 715 | linkType: hard 716 | 717 | "http-proxy-agent@npm:^2.1.0": 718 | version: 2.1.0 719 | resolution: "http-proxy-agent@npm:2.1.0" 720 | dependencies: 721 | agent-base: "npm:4" 722 | debug: "npm:3.1.0" 723 | checksum: 10c0/526294de33953bacb21b883d8bbc01a82e1e9f5a721785345dd538b15b62c7a5d4080b729eb3177ad15d842f931f44002431d5cf9b036cc8cea4bfb5ec172228 724 | languageName: node 725 | linkType: hard 726 | 727 | "http-signature@npm:~1.2.0": 728 | version: 1.2.0 729 | resolution: "http-signature@npm:1.2.0" 730 | dependencies: 731 | assert-plus: "npm:^1.0.0" 732 | jsprim: "npm:^1.2.2" 733 | sshpk: "npm:^1.7.0" 734 | checksum: 10c0/582f7af7f354429e1fb19b3bbb9d35520843c69bb30a25b88ca3c5c2c10715f20ae7924e20cffbed220b1d3a726ef4fe8ccc48568d5744db87be9a79887d6733 735 | languageName: node 736 | linkType: hard 737 | 738 | "https-proxy-agent@npm:^2.2.1": 739 | version: 2.2.4 740 | resolution: "https-proxy-agent@npm:2.2.4" 741 | dependencies: 742 | agent-base: "npm:^4.3.0" 743 | debug: "npm:^3.1.0" 744 | checksum: 10c0/4bdde8fcd9ea0adc4a77282de2b4f9e27955e0441425af0f27f0fe01006946b80eaee6749e08e838d350c06ed2ebd5d11347d3beb88c45eacb0667e27276cdad 745 | languageName: node 746 | linkType: hard 747 | 748 | "inflight@npm:^1.0.4": 749 | version: 1.0.6 750 | resolution: "inflight@npm:1.0.6" 751 | dependencies: 752 | once: "npm:^1.3.0" 753 | wrappy: "npm:1" 754 | checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 755 | languageName: node 756 | linkType: hard 757 | 758 | "inherits@npm:2": 759 | version: 2.0.4 760 | resolution: "inherits@npm:2.0.4" 761 | checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 762 | languageName: node 763 | linkType: hard 764 | 765 | "is-core-module@npm:^2.13.0": 766 | version: 2.13.1 767 | resolution: "is-core-module@npm:2.13.1" 768 | dependencies: 769 | hasown: "npm:^2.0.0" 770 | checksum: 10c0/2cba9903aaa52718f11c4896dabc189bab980870aae86a62dc0d5cedb546896770ee946fb14c84b7adf0735f5eaea4277243f1b95f5cefa90054f92fbcac2518 771 | languageName: node 772 | linkType: hard 773 | 774 | "is-module@npm:^1.0.0": 775 | version: 1.0.0 776 | resolution: "is-module@npm:1.0.0" 777 | checksum: 10c0/795a3914bcae7c26a1c23a1e5574c42eac13429625045737bf3e324ce865c0601d61aee7a5afbca1bee8cb300c7d9647e7dc98860c9bdbc3b7fdc51d8ac0bffc 778 | languageName: node 779 | linkType: hard 780 | 781 | "is-reference@npm:^1.1.2": 782 | version: 1.2.1 783 | resolution: "is-reference@npm:1.2.1" 784 | dependencies: 785 | "@types/estree": "npm:*" 786 | checksum: 10c0/7dc819fc8de7790264a0a5d531164f9f5b9ef5aa1cd05f35322d14db39c8a2ec78fd5d4bf57f9789f3ddd2b3abeea7728432b759636157a42db12a9e8c3b549b 787 | languageName: node 788 | linkType: hard 789 | 790 | "is-typedarray@npm:~1.0.0": 791 | version: 1.0.0 792 | resolution: "is-typedarray@npm:1.0.0" 793 | checksum: 10c0/4c096275ba041a17a13cca33ac21c16bc4fd2d7d7eb94525e7cd2c2f2c1a3ab956e37622290642501ff4310601e413b675cf399ad6db49855527d2163b3eeeec 794 | languageName: node 795 | linkType: hard 796 | 797 | "isstream@npm:~0.1.2": 798 | version: 0.1.2 799 | resolution: "isstream@npm:0.1.2" 800 | checksum: 10c0/a6686a878735ca0a48e0d674dd6d8ad31aedfaf70f07920da16ceadc7577b46d67179a60b313f2e6860cb097a2c2eb3cbd0b89e921ae89199a59a17c3273d66f 801 | languageName: node 802 | linkType: hard 803 | 804 | "js-tokens@npm:^4.0.0": 805 | version: 4.0.0 806 | resolution: "js-tokens@npm:4.0.0" 807 | checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed 808 | languageName: node 809 | linkType: hard 810 | 811 | "js-yaml@npm:^3.13.1": 812 | version: 3.14.1 813 | resolution: "js-yaml@npm:3.14.1" 814 | dependencies: 815 | argparse: "npm:^1.0.7" 816 | esprima: "npm:^4.0.0" 817 | bin: 818 | js-yaml: bin/js-yaml.js 819 | checksum: 10c0/6746baaaeac312c4db8e75fa22331d9a04cccb7792d126ed8ce6a0bbcfef0cedaddd0c5098fade53db067c09fe00aa1c957674b4765610a8b06a5a189e46433b 820 | languageName: node 821 | linkType: hard 822 | 823 | "jsbn@npm:~0.1.0": 824 | version: 0.1.1 825 | resolution: "jsbn@npm:0.1.1" 826 | checksum: 10c0/e046e05c59ff880ee4ef68902dbdcb6d2f3c5d60c357d4d68647dc23add556c31c0e5f41bdb7e69e793dd63468bd9e085da3636341048ef577b18f5b713877c0 827 | languageName: node 828 | linkType: hard 829 | 830 | "json-schema-traverse@npm:^0.4.1": 831 | version: 0.4.1 832 | resolution: "json-schema-traverse@npm:0.4.1" 833 | checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce 834 | languageName: node 835 | linkType: hard 836 | 837 | "json-schema@npm:0.4.0": 838 | version: 0.4.0 839 | resolution: "json-schema@npm:0.4.0" 840 | checksum: 10c0/d4a637ec1d83544857c1c163232f3da46912e971d5bf054ba44fdb88f07d8d359a462b4aec46f2745efbc57053365608d88bc1d7b1729f7b4fc3369765639ed3 841 | languageName: node 842 | linkType: hard 843 | 844 | "json-stringify-safe@npm:~5.0.1": 845 | version: 5.0.1 846 | resolution: "json-stringify-safe@npm:5.0.1" 847 | checksum: 10c0/7dbf35cd0411d1d648dceb6d59ce5857ec939e52e4afc37601aa3da611f0987d5cee5b38d58329ceddf3ed48bd7215229c8d52059ab01f2444a338bf24ed0f37 848 | languageName: node 849 | linkType: hard 850 | 851 | "jsonfile@npm:^4.0.0": 852 | version: 4.0.0 853 | resolution: "jsonfile@npm:4.0.0" 854 | dependencies: 855 | graceful-fs: "npm:^4.1.6" 856 | dependenciesMeta: 857 | graceful-fs: 858 | optional: true 859 | checksum: 10c0/7dc94b628d57a66b71fb1b79510d460d662eb975b5f876d723f81549c2e9cd316d58a2ddf742b2b93a4fa6b17b2accaf1a738a0e2ea114bdfb13a32e5377e480 860 | languageName: node 861 | linkType: hard 862 | 863 | "jsprim@npm:^1.2.2": 864 | version: 1.4.2 865 | resolution: "jsprim@npm:1.4.2" 866 | dependencies: 867 | assert-plus: "npm:1.0.0" 868 | extsprintf: "npm:1.3.0" 869 | json-schema: "npm:0.4.0" 870 | verror: "npm:1.10.0" 871 | checksum: 10c0/5e4bca99e90727c2040eb4c2190d0ef1fe51798ed5714e87b841d304526190d960f9772acc7108fa1416b61e1122bcd60e4460c91793dce0835df5852aab55af 872 | languageName: node 873 | linkType: hard 874 | 875 | "locate-path@npm:^5.0.0": 876 | version: 5.0.0 877 | resolution: "locate-path@npm:5.0.0" 878 | dependencies: 879 | p-locate: "npm:^4.1.0" 880 | checksum: 10c0/33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59 881 | languageName: node 882 | linkType: hard 883 | 884 | "magic-string@npm:^0.25.2": 885 | version: 0.25.9 886 | resolution: "magic-string@npm:0.25.9" 887 | dependencies: 888 | sourcemap-codec: "npm:^1.4.8" 889 | checksum: 10c0/37f5e01a7e8b19a072091f0b45ff127cda676232d373ce2c551a162dd4053c575ec048b9cbb4587a1f03adb6c5d0fd0dd49e8ab070cd2c83a4992b2182d9cb56 890 | languageName: node 891 | linkType: hard 892 | 893 | "make-dir@npm:^3.0.2": 894 | version: 3.1.0 895 | resolution: "make-dir@npm:3.1.0" 896 | dependencies: 897 | semver: "npm:^6.0.0" 898 | checksum: 10c0/56aaafefc49c2dfef02c5c95f9b196c4eb6988040cf2c712185c7fe5c99b4091591a7fc4d4eafaaefa70ff763a26f6ab8c3ff60b9e75ea19876f49b18667ecaa 899 | languageName: node 900 | linkType: hard 901 | 902 | "mime-db@npm:1.52.0": 903 | version: 1.52.0 904 | resolution: "mime-db@npm:1.52.0" 905 | checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa 906 | languageName: node 907 | linkType: hard 908 | 909 | "mime-types@npm:^2.1.12, mime-types@npm:~2.1.19": 910 | version: 2.1.35 911 | resolution: "mime-types@npm:2.1.35" 912 | dependencies: 913 | mime-db: "npm:1.52.0" 914 | checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 915 | languageName: node 916 | linkType: hard 917 | 918 | "minimatch@npm:3.0.4": 919 | version: 3.0.4 920 | resolution: "minimatch@npm:3.0.4" 921 | dependencies: 922 | brace-expansion: "npm:^1.1.7" 923 | checksum: 10c0/d0a2bcd93ebec08a9eef3ca83ba33c9fb6feb93932e0b4dc6aa46c5f37a9404bea7ad9ff7cafe23ce6634f1fe3b206f5315ecbb05812da6e692c21d8ecfd3dae 924 | languageName: node 925 | linkType: hard 926 | 927 | "minimatch@npm:^3.0.4, minimatch@npm:^3.1.1": 928 | version: 3.1.2 929 | resolution: "minimatch@npm:3.1.2" 930 | dependencies: 931 | brace-expansion: "npm:^1.1.7" 932 | checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 933 | languageName: node 934 | linkType: hard 935 | 936 | "minimist@npm:0.0.8": 937 | version: 0.0.8 938 | resolution: "minimist@npm:0.0.8" 939 | checksum: 10c0/d0a998c3042922dbcd5f23566b52811d6977649ad089fd75dd89e8a9bff27634194900818b2dfb1b873f204edb902d0c8cdea9cb8dca8488b301f69bd522d5dc 940 | languageName: node 941 | linkType: hard 942 | 943 | "minimist@npm:^1.2.6": 944 | version: 1.2.8 945 | resolution: "minimist@npm:1.2.8" 946 | checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 947 | languageName: node 948 | linkType: hard 949 | 950 | "mkdirp@npm:0.5.1": 951 | version: 0.5.1 952 | resolution: "mkdirp@npm:0.5.1" 953 | dependencies: 954 | minimist: "npm:0.0.8" 955 | bin: 956 | mkdirp: bin/cmd.js 957 | checksum: 10c0/e5ff572d761240a06dbfc69e1ea303d5482815a1f66033b999bd9d78583fcdc9ef63e99e61d396bbd57eca45b388af80a7f7f35f63510619c991c9d44c75341c 958 | languageName: node 959 | linkType: hard 960 | 961 | "mkdirp@npm:^0.5.1": 962 | version: 0.5.6 963 | resolution: "mkdirp@npm:0.5.6" 964 | dependencies: 965 | minimist: "npm:^1.2.6" 966 | bin: 967 | mkdirp: bin/cmd.js 968 | checksum: 10c0/e2e2be789218807b58abced04e7b49851d9e46e88a2f9539242cc8a92c9b5c3a0b9bab360bd3014e02a140fc4fbc58e31176c408b493f8a2a6f4986bd7527b01 969 | languageName: node 970 | linkType: hard 971 | 972 | "mocha@npm:^5.2.0": 973 | version: 5.2.0 974 | resolution: "mocha@npm:5.2.0" 975 | dependencies: 976 | browser-stdout: "npm:1.3.1" 977 | commander: "npm:2.15.1" 978 | debug: "npm:3.1.0" 979 | diff: "npm:3.5.0" 980 | escape-string-regexp: "npm:1.0.5" 981 | glob: "npm:7.1.2" 982 | growl: "npm:1.10.5" 983 | he: "npm:1.1.1" 984 | minimatch: "npm:3.0.4" 985 | mkdirp: "npm:0.5.1" 986 | supports-color: "npm:5.4.0" 987 | bin: 988 | _mocha: ./bin/_mocha 989 | mocha: ./bin/mocha 990 | checksum: 10c0/3400d0fb1d7b71bff9b6ad398ddbe49adbe74c71e42f74874163a1ed7beea0f6c92376137f4fecce5215d772b8db3ae336a904c1cbc1feed7288c7b6cc1b414a 991 | languageName: node 992 | linkType: hard 993 | 994 | "ms@npm:2.0.0": 995 | version: 2.0.0 996 | resolution: "ms@npm:2.0.0" 997 | checksum: 10c0/f8fda810b39fd7255bbdc451c46286e549794fcc700dc9cd1d25658bbc4dc2563a5de6fe7c60f798a16a60c6ceb53f033cb353f493f0cf63e5199b702943159d 998 | languageName: node 999 | linkType: hard 1000 | 1001 | "ms@npm:^2.1.1": 1002 | version: 2.1.3 1003 | resolution: "ms@npm:2.1.3" 1004 | checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 1005 | languageName: node 1006 | linkType: hard 1007 | 1008 | "oauth-sign@npm:~0.9.0": 1009 | version: 0.9.0 1010 | resolution: "oauth-sign@npm:0.9.0" 1011 | checksum: 10c0/fc92a516f6ddbb2699089a2748b04f55c47b6ead55a77cd3a2cbbce5f7af86164cb9425f9ae19acfd066f1ad7d3a96a67b8928c6ea946426f6d6c29e448497c2 1012 | languageName: node 1013 | linkType: hard 1014 | 1015 | "once@npm:^1.3.0": 1016 | version: 1.4.0 1017 | resolution: "once@npm:1.4.0" 1018 | dependencies: 1019 | wrappy: "npm:1" 1020 | checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 1021 | languageName: node 1022 | linkType: hard 1023 | 1024 | "p-limit@npm:^2.2.0": 1025 | version: 2.3.0 1026 | resolution: "p-limit@npm:2.3.0" 1027 | dependencies: 1028 | p-try: "npm:^2.0.0" 1029 | checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 1030 | languageName: node 1031 | linkType: hard 1032 | 1033 | "p-locate@npm:^4.1.0": 1034 | version: 4.1.0 1035 | resolution: "p-locate@npm:4.1.0" 1036 | dependencies: 1037 | p-limit: "npm:^2.2.0" 1038 | checksum: 10c0/1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9 1039 | languageName: node 1040 | linkType: hard 1041 | 1042 | "p-try@npm:^2.0.0": 1043 | version: 2.2.0 1044 | resolution: "p-try@npm:2.2.0" 1045 | checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f 1046 | languageName: node 1047 | linkType: hard 1048 | 1049 | "path-exists@npm:^4.0.0": 1050 | version: 4.0.0 1051 | resolution: "path-exists@npm:4.0.0" 1052 | checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b 1053 | languageName: node 1054 | linkType: hard 1055 | 1056 | "path-is-absolute@npm:^1.0.0": 1057 | version: 1.0.1 1058 | resolution: "path-is-absolute@npm:1.0.1" 1059 | checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 1060 | languageName: node 1061 | linkType: hard 1062 | 1063 | "path-parse@npm:^1.0.6, path-parse@npm:^1.0.7": 1064 | version: 1.0.7 1065 | resolution: "path-parse@npm:1.0.7" 1066 | checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 1067 | languageName: node 1068 | linkType: hard 1069 | 1070 | "performance-now@npm:^2.1.0": 1071 | version: 2.1.0 1072 | resolution: "performance-now@npm:2.1.0" 1073 | checksum: 10c0/22c54de06f269e29f640e0e075207af57de5052a3d15e360c09b9a8663f393f6f45902006c1e71aa8a5a1cdfb1a47fe268826f8496d6425c362f00f5bc3e85d9 1074 | languageName: node 1075 | linkType: hard 1076 | 1077 | "picocolors@npm:^1.0.0": 1078 | version: 1.0.1 1079 | resolution: "picocolors@npm:1.0.1" 1080 | checksum: 10c0/c63cdad2bf812ef0d66c8db29583802355d4ca67b9285d846f390cc15c2f6ccb94e8cb7eb6a6e97fc5990a6d3ad4ae42d86c84d3146e667c739a4234ed50d400 1081 | languageName: node 1082 | linkType: hard 1083 | 1084 | "pkg-dir@npm:^4.1.0": 1085 | version: 4.2.0 1086 | resolution: "pkg-dir@npm:4.2.0" 1087 | dependencies: 1088 | find-up: "npm:^4.0.0" 1089 | checksum: 10c0/c56bda7769e04907a88423feb320babaed0711af8c436ce3e56763ab1021ba107c7b0cafb11cde7529f669cfc22bffcaebffb573645cbd63842ea9fb17cd7728 1090 | languageName: node 1091 | linkType: hard 1092 | 1093 | "psl@npm:^1.1.28": 1094 | version: 1.9.0 1095 | resolution: "psl@npm:1.9.0" 1096 | checksum: 10c0/6a3f805fdab9442f44de4ba23880c4eba26b20c8e8e0830eff1cb31007f6825dace61d17203c58bfe36946842140c97a1ba7f67bc63ca2d88a7ee052b65d97ab 1097 | languageName: node 1098 | linkType: hard 1099 | 1100 | "punycode@npm:^2.1.0, punycode@npm:^2.1.1": 1101 | version: 2.3.1 1102 | resolution: "punycode@npm:2.3.1" 1103 | checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 1104 | languageName: node 1105 | linkType: hard 1106 | 1107 | "qs@npm:~6.5.2": 1108 | version: 6.5.3 1109 | resolution: "qs@npm:6.5.3" 1110 | checksum: 10c0/6631d4f2fa9d315e480662646745a4aa3a708817fbffe2cbdacec8ab9be130f92740c66191770fe9b704bc5fa9c1cc1f6596f55ad132fef7bd3ad1582f199eb0 1111 | languageName: node 1112 | linkType: hard 1113 | 1114 | "querystringify@npm:^2.1.1": 1115 | version: 2.2.0 1116 | resolution: "querystringify@npm:2.2.0" 1117 | checksum: 10c0/3258bc3dbdf322ff2663619afe5947c7926a6ef5fb78ad7d384602974c467fadfc8272af44f5eb8cddd0d011aae8fabf3a929a8eee4b86edcc0a21e6bd10f9aa 1118 | languageName: node 1119 | linkType: hard 1120 | 1121 | "request@npm:^2.88.0": 1122 | version: 2.88.2 1123 | resolution: "request@npm:2.88.2" 1124 | dependencies: 1125 | aws-sign2: "npm:~0.7.0" 1126 | aws4: "npm:^1.8.0" 1127 | caseless: "npm:~0.12.0" 1128 | combined-stream: "npm:~1.0.6" 1129 | extend: "npm:~3.0.2" 1130 | forever-agent: "npm:~0.6.1" 1131 | form-data: "npm:~2.3.2" 1132 | har-validator: "npm:~5.1.3" 1133 | http-signature: "npm:~1.2.0" 1134 | is-typedarray: "npm:~1.0.0" 1135 | isstream: "npm:~0.1.2" 1136 | json-stringify-safe: "npm:~5.0.1" 1137 | mime-types: "npm:~2.1.19" 1138 | oauth-sign: "npm:~0.9.0" 1139 | performance-now: "npm:^2.1.0" 1140 | qs: "npm:~6.5.2" 1141 | safe-buffer: "npm:^5.1.2" 1142 | tough-cookie: "npm:~2.5.0" 1143 | tunnel-agent: "npm:^0.6.0" 1144 | uuid: "npm:^3.3.2" 1145 | checksum: 10c0/0ec66e7af1391e51ad231de3b1c6c6aef3ebd0a238aa50d4191c7a792dcdb14920eea8d570c702dc5682f276fe569d176f9b8ebc6031a3cf4a630a691a431a63 1146 | languageName: node 1147 | linkType: hard 1148 | 1149 | "requires-port@npm:^1.0.0": 1150 | version: 1.0.0 1151 | resolution: "requires-port@npm:1.0.0" 1152 | checksum: 10c0/b2bfdd09db16c082c4326e573a82c0771daaf7b53b9ce8ad60ea46aa6e30aaf475fe9b164800b89f93b748d2c234d8abff945d2551ba47bf5698e04cd7713267 1153 | languageName: node 1154 | linkType: hard 1155 | 1156 | "resolve@npm:1.12.0": 1157 | version: 1.12.0 1158 | resolution: "resolve@npm:1.12.0" 1159 | dependencies: 1160 | path-parse: "npm:^1.0.6" 1161 | checksum: 10c0/db503edb4bfb984a16ca0b8e9c2f51db3ee768e8aef59b704d6d768ee4c016b53128a620fece06c37bbbb18061c777239f90957d2cea35cb5a6701f689d0e667 1162 | languageName: node 1163 | linkType: hard 1164 | 1165 | "resolve@npm:^1.11.0, resolve@npm:^1.11.1, resolve@npm:^1.3.2": 1166 | version: 1.22.8 1167 | resolution: "resolve@npm:1.22.8" 1168 | dependencies: 1169 | is-core-module: "npm:^2.13.0" 1170 | path-parse: "npm:^1.0.7" 1171 | supports-preserve-symlinks-flag: "npm:^1.0.0" 1172 | bin: 1173 | resolve: bin/resolve 1174 | checksum: 10c0/07e179f4375e1fd072cfb72ad66d78547f86e6196c4014b31cb0b8bb1db5f7ca871f922d08da0fbc05b94e9fd42206f819648fa3b5b873ebbc8e1dc68fec433a 1175 | languageName: node 1176 | linkType: hard 1177 | 1178 | "resolve@patch:resolve@npm%3A1.12.0#optional!builtin": 1179 | version: 1.12.0 1180 | resolution: "resolve@patch:resolve@npm%3A1.12.0#optional!builtin::version=1.12.0&hash=c3c19d" 1181 | dependencies: 1182 | path-parse: "npm:^1.0.6" 1183 | checksum: 10c0/522560b9c078a3695822f4d650dd575999e9bca5bc72270777441449f4a35a7c9f0a8d709636d95c51549d9164150bae3d657a283f4dd75fa553863fd7c9866b 1184 | languageName: node 1185 | linkType: hard 1186 | 1187 | "resolve@patch:resolve@npm%3A^1.11.0#optional!builtin, resolve@patch:resolve@npm%3A^1.11.1#optional!builtin, resolve@patch:resolve@npm%3A^1.3.2#optional!builtin": 1188 | version: 1.22.8 1189 | resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" 1190 | dependencies: 1191 | is-core-module: "npm:^2.13.0" 1192 | path-parse: "npm:^1.0.7" 1193 | supports-preserve-symlinks-flag: "npm:^1.0.0" 1194 | bin: 1195 | resolve: bin/resolve 1196 | checksum: 10c0/0446f024439cd2e50c6c8fa8ba77eaa8370b4180f401a96abf3d1ebc770ac51c1955e12764cde449fde3fff480a61f84388e3505ecdbab778f4bef5f8212c729 1197 | languageName: node 1198 | linkType: hard 1199 | 1200 | "rimraf@npm:3.0.0": 1201 | version: 3.0.0 1202 | resolution: "rimraf@npm:3.0.0" 1203 | dependencies: 1204 | glob: "npm:^7.1.3" 1205 | bin: 1206 | rimraf: ./bin.js 1207 | checksum: 10c0/8c45de8970443aeb66e85fc9a36e3686da7c95e5fba238217071ef67f30c7d68a6f3b2ad2192967beee6071e78839b86d8bd459a10afb7234264ad73471a6a13 1208 | languageName: node 1209 | linkType: hard 1210 | 1211 | "rollup-plugin-commonjs@npm:10.1.0": 1212 | version: 10.1.0 1213 | resolution: "rollup-plugin-commonjs@npm:10.1.0" 1214 | dependencies: 1215 | estree-walker: "npm:^0.6.1" 1216 | is-reference: "npm:^1.1.2" 1217 | magic-string: "npm:^0.25.2" 1218 | resolve: "npm:^1.11.0" 1219 | rollup-pluginutils: "npm:^2.8.1" 1220 | peerDependencies: 1221 | rollup: ">=1.12.0" 1222 | checksum: 10c0/d514ae2521a31bdc4fa0afb6b9df38f84caae0ba13cad1de5db495614dea6c30f608ed55e7e7c3df08e2372ac47c51891c5a4c71b577ee2406e5546582427aea 1223 | languageName: node 1224 | linkType: hard 1225 | 1226 | "rollup-plugin-node-resolve@npm:5.2.0": 1227 | version: 5.2.0 1228 | resolution: "rollup-plugin-node-resolve@npm:5.2.0" 1229 | dependencies: 1230 | "@types/resolve": "npm:0.0.8" 1231 | builtin-modules: "npm:^3.1.0" 1232 | is-module: "npm:^1.0.0" 1233 | resolve: "npm:^1.11.1" 1234 | rollup-pluginutils: "npm:^2.8.1" 1235 | peerDependencies: 1236 | rollup: ">=1.11.0" 1237 | checksum: 10c0/4f9903a1042f6eab1495e044ac64540c054d89add7b3f09ea98cfef869628ad0749aebffd946fb4793cb29841c4711bbdd5e6f7fcaecf1eb9c30f67968e1dcb5 1238 | languageName: node 1239 | linkType: hard 1240 | 1241 | "rollup-plugin-typescript2@npm:0.24.3": 1242 | version: 0.24.3 1243 | resolution: "rollup-plugin-typescript2@npm:0.24.3" 1244 | dependencies: 1245 | find-cache-dir: "npm:^3.0.0" 1246 | fs-extra: "npm:8.1.0" 1247 | resolve: "npm:1.12.0" 1248 | rollup-pluginutils: "npm:2.8.1" 1249 | tslib: "npm:1.10.0" 1250 | peerDependencies: 1251 | rollup: ">=0.68.0" 1252 | typescript: ">=2.4.0" 1253 | checksum: 10c0/859d37fe35e6a21fd64b054b042cba1c08a8b9c3cca53327cb536399314ab3c2170495869e1d44075252d4e998a0bb8fba243da3fb98b1cd5c8360b7d07280ff 1254 | languageName: node 1255 | linkType: hard 1256 | 1257 | "rollup-pluginutils@npm:2.8.1": 1258 | version: 2.8.1 1259 | resolution: "rollup-pluginutils@npm:2.8.1" 1260 | dependencies: 1261 | estree-walker: "npm:^0.6.1" 1262 | checksum: 10c0/c2ace29a490370232e8b8260aeed4e9b3bbb9e7c5825f36240c0a488a5888d586c7f017de911a14ba37a303ac6269950777dbdaa170148f812c280b04990bf40 1263 | languageName: node 1264 | linkType: hard 1265 | 1266 | "rollup-pluginutils@npm:^2.8.1": 1267 | version: 2.8.2 1268 | resolution: "rollup-pluginutils@npm:2.8.2" 1269 | dependencies: 1270 | estree-walker: "npm:^0.6.1" 1271 | checksum: 10c0/20947bec5a5dd68b5c5c8423911e6e7c0ad834c451f1a929b1f4e2bc08836ad3f1a722ef2bfcbeca921870a0a283f13f064a317dc7a6768496e98c9a641ba290 1272 | languageName: node 1273 | linkType: hard 1274 | 1275 | "rollup@npm:1.29.0": 1276 | version: 1.29.0 1277 | resolution: "rollup@npm:1.29.0" 1278 | dependencies: 1279 | "@types/estree": "npm:*" 1280 | "@types/node": "npm:*" 1281 | acorn: "npm:^7.1.0" 1282 | bin: 1283 | rollup: ./dist/bin/rollup 1284 | checksum: 10c0/2a09f652f3a7e03a540a478d10ba6148169326a32c7f4902fc6139fe301da5806f01bb121b8b4a8d5c1878a2e84d19428da9db147923da07c17372c717a5a1a5 1285 | languageName: node 1286 | linkType: hard 1287 | 1288 | "rorre@npm:1.2.0": 1289 | version: 1.2.0 1290 | resolution: "rorre@npm:1.2.0" 1291 | checksum: 10c0/2468cfdb638b81636a01c4c096a67db87413191301b58fca13e95a08cb3cf0ac2a4c6e6ca54a2f94d0a5b753ca2b8fc8ad2b2bc13f6c5b97ddc17aa8a9f7c0d0 1292 | languageName: node 1293 | linkType: hard 1294 | 1295 | "safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.2": 1296 | version: 5.2.1 1297 | resolution: "safe-buffer@npm:5.2.1" 1298 | checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 1299 | languageName: node 1300 | linkType: hard 1301 | 1302 | "safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": 1303 | version: 2.1.2 1304 | resolution: "safer-buffer@npm:2.1.2" 1305 | checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 1306 | languageName: node 1307 | linkType: hard 1308 | 1309 | "semver@npm:^5.3.0, semver@npm:^5.4.1": 1310 | version: 5.7.2 1311 | resolution: "semver@npm:5.7.2" 1312 | bin: 1313 | semver: bin/semver 1314 | checksum: 10c0/e4cf10f86f168db772ae95d86ba65b3fd6c5967c94d97c708ccb463b778c2ee53b914cd7167620950fc07faf5a564e6efe903836639e512a1aa15fbc9667fa25 1315 | languageName: node 1316 | linkType: hard 1317 | 1318 | "semver@npm:^6.0.0": 1319 | version: 6.3.1 1320 | resolution: "semver@npm:6.3.1" 1321 | bin: 1322 | semver: bin/semver.js 1323 | checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d 1324 | languageName: node 1325 | linkType: hard 1326 | 1327 | "source-map-support@npm:^0.5.0": 1328 | version: 0.5.21 1329 | resolution: "source-map-support@npm:0.5.21" 1330 | dependencies: 1331 | buffer-from: "npm:^1.0.0" 1332 | source-map: "npm:^0.6.0" 1333 | checksum: 10c0/9ee09942f415e0f721d6daad3917ec1516af746a8120bba7bb56278707a37f1eb8642bde456e98454b8a885023af81a16e646869975f06afc1a711fb90484e7d 1334 | languageName: node 1335 | linkType: hard 1336 | 1337 | "source-map@npm:^0.6.0": 1338 | version: 0.6.1 1339 | resolution: "source-map@npm:0.6.1" 1340 | checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 1341 | languageName: node 1342 | linkType: hard 1343 | 1344 | "sourcemap-codec@npm:^1.4.8": 1345 | version: 1.4.8 1346 | resolution: "sourcemap-codec@npm:1.4.8" 1347 | checksum: 10c0/f099279fdaae070ff156df7414bbe39aad69cdd615454947ed3e19136bfdfcb4544952685ee73f56e17038f4578091e12b17b283ed8ac013882916594d95b9e6 1348 | languageName: node 1349 | linkType: hard 1350 | 1351 | "sprintf-js@npm:~1.0.2": 1352 | version: 1.0.3 1353 | resolution: "sprintf-js@npm:1.0.3" 1354 | checksum: 10c0/ecadcfe4c771890140da5023d43e190b7566d9cf8b2d238600f31bec0fc653f328da4450eb04bd59a431771a8e9cc0e118f0aa3974b683a4981b4e07abc2a5bb 1355 | languageName: node 1356 | linkType: hard 1357 | 1358 | "sshpk@npm:^1.7.0": 1359 | version: 1.18.0 1360 | resolution: "sshpk@npm:1.18.0" 1361 | dependencies: 1362 | asn1: "npm:~0.2.3" 1363 | assert-plus: "npm:^1.0.0" 1364 | bcrypt-pbkdf: "npm:^1.0.0" 1365 | dashdash: "npm:^1.12.0" 1366 | ecc-jsbn: "npm:~0.1.1" 1367 | getpass: "npm:^0.1.1" 1368 | jsbn: "npm:~0.1.0" 1369 | safer-buffer: "npm:^2.0.2" 1370 | tweetnacl: "npm:~0.14.0" 1371 | bin: 1372 | sshpk-conv: bin/sshpk-conv 1373 | sshpk-sign: bin/sshpk-sign 1374 | sshpk-verify: bin/sshpk-verify 1375 | checksum: 10c0/e516e34fa981cfceef45fd2e947772cc70dbd57523e5c608e2cd73752ba7f8a99a04df7c3ed751588e8d91956b6f16531590b35d3489980d1c54c38bebcd41b1 1376 | languageName: node 1377 | linkType: hard 1378 | 1379 | "supports-color@npm:5.4.0": 1380 | version: 5.4.0 1381 | resolution: "supports-color@npm:5.4.0" 1382 | dependencies: 1383 | has-flag: "npm:^3.0.0" 1384 | checksum: 10c0/5c40fadf5bb1c8d77ce7d0e27f79a4492a19b5d37719a4815a923d8fc2b5251c7546b91089356ca1430a58baad60a9824d00e164acd6018e91a8b3bb882903c1 1385 | languageName: node 1386 | linkType: hard 1387 | 1388 | "supports-color@npm:^5.3.0": 1389 | version: 5.5.0 1390 | resolution: "supports-color@npm:5.5.0" 1391 | dependencies: 1392 | has-flag: "npm:^3.0.0" 1393 | checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 1394 | languageName: node 1395 | linkType: hard 1396 | 1397 | "supports-preserve-symlinks-flag@npm:^1.0.0": 1398 | version: 1.0.0 1399 | resolution: "supports-preserve-symlinks-flag@npm:1.0.0" 1400 | checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 1401 | languageName: node 1402 | linkType: hard 1403 | 1404 | "tough-cookie@npm:~2.5.0": 1405 | version: 2.5.0 1406 | resolution: "tough-cookie@npm:2.5.0" 1407 | dependencies: 1408 | psl: "npm:^1.1.28" 1409 | punycode: "npm:^2.1.1" 1410 | checksum: 10c0/e1cadfb24d40d64ca16de05fa8192bc097b66aeeb2704199b055ff12f450e4f30c927ce250f53d01f39baad18e1c11d66f65e545c5c6269de4c366fafa4c0543 1411 | languageName: node 1412 | linkType: hard 1413 | 1414 | "tslib@npm:1.10.0": 1415 | version: 1.10.0 1416 | resolution: "tslib@npm:1.10.0" 1417 | checksum: 10c0/56ed243bdbb84430025f149a3d2676df75292cc50c552f3b09c1b008ecdb3b4959259ce79239a979b444ab0a4d90e36be24a4758b6f142b2d6ceb26079195f65 1418 | languageName: node 1419 | linkType: hard 1420 | 1421 | "tslib@npm:^1.8.0, tslib@npm:^1.8.1": 1422 | version: 1.14.1 1423 | resolution: "tslib@npm:1.14.1" 1424 | checksum: 10c0/69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2 1425 | languageName: node 1426 | linkType: hard 1427 | 1428 | "tslint@npm:5.20.1": 1429 | version: 5.20.1 1430 | resolution: "tslint@npm:5.20.1" 1431 | dependencies: 1432 | "@babel/code-frame": "npm:^7.0.0" 1433 | builtin-modules: "npm:^1.1.1" 1434 | chalk: "npm:^2.3.0" 1435 | commander: "npm:^2.12.1" 1436 | diff: "npm:^4.0.1" 1437 | glob: "npm:^7.1.1" 1438 | js-yaml: "npm:^3.13.1" 1439 | minimatch: "npm:^3.0.4" 1440 | mkdirp: "npm:^0.5.1" 1441 | resolve: "npm:^1.3.2" 1442 | semver: "npm:^5.3.0" 1443 | tslib: "npm:^1.8.0" 1444 | tsutils: "npm:^2.29.0" 1445 | peerDependencies: 1446 | typescript: ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev" 1447 | bin: 1448 | tslint: ./bin/tslint 1449 | checksum: 10c0/4331ac33dd7c709639147ea0a75282f4c73534bac9ad511a56458276c93baf69d7057e5bf9b74fb13782f78a6479d9f2df86e8868be65f511541e3fe710695a7 1450 | languageName: node 1451 | linkType: hard 1452 | 1453 | "tsutils@npm:^2.29.0": 1454 | version: 2.29.0 1455 | resolution: "tsutils@npm:2.29.0" 1456 | dependencies: 1457 | tslib: "npm:^1.8.1" 1458 | peerDependencies: 1459 | typescript: ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" 1460 | checksum: 10c0/e37794513526dbf1cf960414d0a65b956ad319dbc93171bccfe08e3fece1eea35b4e130153f41d917a0f28ecac04f3ca78e9a99c4bddc64a5f225925abc0cf14 1461 | languageName: node 1462 | linkType: hard 1463 | 1464 | "tunnel-agent@npm:^0.6.0": 1465 | version: 0.6.0 1466 | resolution: "tunnel-agent@npm:0.6.0" 1467 | dependencies: 1468 | safe-buffer: "npm:^5.0.1" 1469 | checksum: 10c0/4c7a1b813e7beae66fdbf567a65ec6d46313643753d0beefb3c7973d66fcec3a1e7f39759f0a0b4465883499c6dc8b0750ab8b287399af2e583823e40410a17a 1470 | languageName: node 1471 | linkType: hard 1472 | 1473 | "tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0": 1474 | version: 0.14.5 1475 | resolution: "tweetnacl@npm:0.14.5" 1476 | checksum: 10c0/4612772653512c7bc19e61923fbf42903f5e0389ec76a4a1f17195859d114671ea4aa3b734c2029ce7e1fa7e5cc8b80580f67b071ecf0b46b5636d030a0102a2 1477 | languageName: node 1478 | linkType: hard 1479 | 1480 | "typescript@npm:5.4.5": 1481 | version: 5.4.5 1482 | resolution: "typescript@npm:5.4.5" 1483 | bin: 1484 | tsc: bin/tsc 1485 | tsserver: bin/tsserver 1486 | checksum: 10c0/2954022ada340fd3d6a9e2b8e534f65d57c92d5f3989a263754a78aba549f7e6529acc1921913560a4b816c46dce7df4a4d29f9f11a3dc0d4213bb76d043251e 1487 | languageName: node 1488 | linkType: hard 1489 | 1490 | "typescript@patch:typescript@npm%3A5.4.5#optional!builtin": 1491 | version: 5.4.5 1492 | resolution: "typescript@patch:typescript@npm%3A5.4.5#optional!builtin::version=5.4.5&hash=5adc0c" 1493 | bin: 1494 | tsc: bin/tsc 1495 | tsserver: bin/tsserver 1496 | checksum: 10c0/db2ad2a16ca829f50427eeb1da155e7a45e598eec7b086d8b4e8ba44e5a235f758e606d681c66992230d3fc3b8995865e5fd0b22a2c95486d0b3200f83072ec9 1497 | languageName: node 1498 | linkType: hard 1499 | 1500 | "undici-types@npm:~5.26.4": 1501 | version: 5.26.5 1502 | resolution: "undici-types@npm:5.26.5" 1503 | checksum: 10c0/bb673d7876c2d411b6eb6c560e0c571eef4a01c1c19925175d16e3a30c4c428181fb8d7ae802a261f283e4166a0ac435e2f505743aa9e45d893f9a3df017b501 1504 | languageName: node 1505 | linkType: hard 1506 | 1507 | "universalify@npm:^0.1.0": 1508 | version: 0.1.2 1509 | resolution: "universalify@npm:0.1.2" 1510 | checksum: 10c0/e70e0339f6b36f34c9816f6bf9662372bd241714dc77508d231d08386d94f2c4aa1ba1318614f92015f40d45aae1b9075cd30bd490efbe39387b60a76ca3f045 1511 | languageName: node 1512 | linkType: hard 1513 | 1514 | "uri-js@npm:^4.2.2": 1515 | version: 4.4.1 1516 | resolution: "uri-js@npm:4.4.1" 1517 | dependencies: 1518 | punycode: "npm:^2.1.0" 1519 | checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c 1520 | languageName: node 1521 | linkType: hard 1522 | 1523 | "url-parse@npm:^1.4.4": 1524 | version: 1.5.10 1525 | resolution: "url-parse@npm:1.5.10" 1526 | dependencies: 1527 | querystringify: "npm:^2.1.1" 1528 | requires-port: "npm:^1.0.0" 1529 | checksum: 10c0/bd5aa9389f896974beb851c112f63b466505a04b4807cea2e5a3b7092f6fbb75316f0491ea84e44f66fed55f1b440df5195d7e3a8203f64fcefa19d182f5be87 1530 | languageName: node 1531 | linkType: hard 1532 | 1533 | "uuid@npm:^3.3.2": 1534 | version: 3.4.0 1535 | resolution: "uuid@npm:3.4.0" 1536 | bin: 1537 | uuid: ./bin/uuid 1538 | checksum: 10c0/1c13950df865c4f506ebfe0a24023571fa80edf2e62364297a537c80af09c618299797bbf2dbac6b1f8ae5ad182ba474b89db61e0e85839683991f7e08795347 1539 | languageName: node 1540 | linkType: hard 1541 | 1542 | "verror@npm:1.10.0": 1543 | version: 1.10.0 1544 | resolution: "verror@npm:1.10.0" 1545 | dependencies: 1546 | assert-plus: "npm:^1.0.0" 1547 | core-util-is: "npm:1.0.2" 1548 | extsprintf: "npm:^1.2.0" 1549 | checksum: 10c0/37ccdf8542b5863c525128908ac80f2b476eed36a32cb944de930ca1e2e78584cc435c4b9b4c68d0fc13a47b45ff364b4be43aa74f8804f9050140f660fb660d 1550 | languageName: node 1551 | linkType: hard 1552 | 1553 | "vscode-git-add-and-commit@workspace:.": 1554 | version: 0.0.0-use.local 1555 | resolution: "vscode-git-add-and-commit@workspace:." 1556 | dependencies: 1557 | "@biomejs/biome": "npm:1.8.1" 1558 | "@ivangabriele/biome-config": "npm:1.0.2" 1559 | "@ivangabriele/tsconfig-node": "npm:2.0.0" 1560 | "@types/fs-extra": "npm:8.0.1" 1561 | "@types/mocha": "npm:5.2.7" 1562 | "@types/node": "npm:20.14.5" 1563 | "@types/vscode": "npm:1.41.0" 1564 | await-to-js: "npm:2.1.1" 1565 | fs-extra: "npm:8.1.0" 1566 | rimraf: "npm:3.0.0" 1567 | rollup: "npm:1.29.0" 1568 | rollup-plugin-commonjs: "npm:10.1.0" 1569 | rollup-plugin-node-resolve: "npm:5.2.0" 1570 | rollup-plugin-typescript2: "npm:0.24.3" 1571 | rorre: "npm:1.2.0" 1572 | tslint: "npm:5.20.1" 1573 | typescript: "npm:5.4.5" 1574 | vscode: "npm:1.1.36" 1575 | languageName: unknown 1576 | linkType: soft 1577 | 1578 | "vscode-test@npm:^0.4.1": 1579 | version: 0.4.3 1580 | resolution: "vscode-test@npm:0.4.3" 1581 | dependencies: 1582 | http-proxy-agent: "npm:^2.1.0" 1583 | https-proxy-agent: "npm:^2.2.1" 1584 | checksum: 10c0/7d51f1fcfd5fb387b7d1afc2ae5aa9e8460c4dc2682fac254c189657dec616320c2c424a22bcaa2e68e698357208070d7f3bbd3dd30c3765c75a380e20d9aecd 1585 | languageName: node 1586 | linkType: hard 1587 | 1588 | "vscode@npm:1.1.36": 1589 | version: 1.1.36 1590 | resolution: "vscode@npm:1.1.36" 1591 | dependencies: 1592 | glob: "npm:^7.1.2" 1593 | mocha: "npm:^5.2.0" 1594 | request: "npm:^2.88.0" 1595 | semver: "npm:^5.4.1" 1596 | source-map-support: "npm:^0.5.0" 1597 | url-parse: "npm:^1.4.4" 1598 | vscode-test: "npm:^0.4.1" 1599 | bin: 1600 | vscode-install: ./bin/install 1601 | checksum: 10c0/de4e67ed7715b40ebe632885edd3eaae151dd4d7a618cc3411a22574fd36e3356ce8a160818848b9827cabf3176e1f4173e75cd5d1ead3f001c7735ed61d18ef 1602 | languageName: node 1603 | linkType: hard 1604 | 1605 | "wrappy@npm:1": 1606 | version: 1.0.2 1607 | resolution: "wrappy@npm:1.0.2" 1608 | checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 1609 | languageName: node 1610 | linkType: hard 1611 | --------------------------------------------------------------------------------