├── .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 |
3 |
VSCode Git Automator
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
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 | [](http://opensource.org/licenses/MIT)
31 | [](https://marketplace.visualstudio.com/items?itemName=ivangabriele.vscode-git-add-and-commit)
32 | [](https://travis-ci.org/ivangabriele/vscode-git-automator-legacy)
33 | [](https://david-dm.org/ivangabriele/vscode-git-automator-legacy?type=dev)
34 | [](https://david-dm.org/ivangabriele/vscode-git-automator-legacy?type=dev)
35 |
36 | ---
37 |
38 | ## Screencast
39 |
40 | 
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 | [](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 |
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 |
--------------------------------------------------------------------------------