From 2359b6d799d91d9d9fca20bc98301b60cc9cde88 Mon Sep 17 00:00:00 2001 From: Michael Currin <18750745+MichaelCurrin@users.noreply.github.com> Date: Fri, 27 Mar 2026 10:40:40 +0100 Subject: [PATCH 01/19] docs: update 2 files and create 2 files --- docs/README.md | 20 ++------ docs/cli.md | 100 ++++++++++++++++++++++++++++++++++++++++ docs/development/cli.md | 43 +++++++++++++++++ docs/features.md | 9 +--- 4 files changed, 148 insertions(+), 24 deletions(-) create mode 100644 docs/cli.md create mode 100644 docs/development/cli.md diff --git a/docs/README.md b/docs/README.md index 4b82ff3a..470e0ddc 100644 --- a/docs/README.md +++ b/docs/README.md @@ -8,23 +8,11 @@ This project serves to prepare a smart commit message for you, to make your deve - [Quickstart](quickstart.md) - [About](about.md) - [Features](features.md) - - What it can do, upcoming features, and how it works + - What it can do, upcoming features, and how it works, - [User manual](manual/) - - How to install and use the installed extension. + - How to install and use the extension. +- [CLI](cli.md) + - How install and run as a CLI tool only. - [Development](development/) - Guide for developers to set up and run locally. - Useful for testing your changes before contributing a PR. - - diff --git a/docs/cli.md b/docs/cli.md new file mode 100644 index 00000000..41de3870 --- /dev/null +++ b/docs/cli.md @@ -0,0 +1,100 @@ +# CLI +> How to use AutoCommitMsg in the terminal instead of as an extension + +See steps below to setup and run the tool in the CLI. VS Code is not needed. + +For development, see [CLI Development](development/cli.md). + +## Requirements + +- Node (see version in [package.json](/package.json)) +- Git + +_This should work on Windows too but has not been tested yet._ + +## Setup + +### Clone the repo + +```sh +$ git clone git@github.com:MichaelCurrin/auto-commit-msg.git +$ cd auto-commit-msg +``` + +### Install dependencies + +```sh +$ npm ci +``` + +### Build and link the CLI tools + +```sh +$ npm run cli +``` + +Verify installation: + +```sh +$ acm -h +$ gacm -h +``` + +## Usage + +Use the `-h` or `--help` flags with any of these to avoid making changes. + + + +### Generate a message from changes and commit + +This is the **main** command you should use. + +Note this actually **commit**, so if you want to experiment with commit output **without** committing, use the command below instead. + +No flags are needed. + +```sh +$ gacm +``` + +### Check Git changes and generate commit message + +This will **not** commit. + +No flags are needed. + +```sh +$ acm +``` + +### Generate a message from staged changes + +This is a simpler command which does not interact with Git, intended for integrating with the Bash shell. + +See [shell/acm.sh](/shell/acm.sh) if you want to use that script or write your own shell script. That relies on using this executable Node script + +```sh +$ auto_commit_message_generate "$CHANGES" +``` + +### Usage tips + +The behavior depends on how Git treats files, so you should know these points: + +- The commands will pick up on staged changes and certain unstaged changes (modified and deleted, but not created as they are untracked). +- If you want to handle created files, make sure to stage them first. +- If you want to target only select changes for smaller commit, then stage stages and use the `--cached` flag to ignored unstaged changes. + +## Uninstall the linked CLI (optional) + +If you get permission denied error, you can do this and then go back to the install step. + +```sh +$ npm unlink -g auto-commit-msg +``` diff --git a/docs/development/cli.md b/docs/development/cli.md new file mode 100644 index 00000000..1094b9eb --- /dev/null +++ b/docs/development/cli.md @@ -0,0 +1,43 @@ +# CLI Development +> Maintaining code around the CLI tool + +The code is in [src/cli/](/src/cli). The CLI commands are built using steps set in [package.json](/package.json) - see the `cli` command and `bin` section. + + + +## Run directly + +```sh +$ npx ts-node src/cli/diffIndexGenerate.ts +``` + + +## Package as a binary + +To send to someone so they can use it without having Node installed or running a build step on their machine. + +```sh +$ npx --yes pkg out/cli/diffIndexGenerateCommit.js -t node18-macos +``` + +## Troubleshooting + +On macOS, installed here as a symlink pointing to the `.js` file in the repo: + +``` +/opt/homebrew/bin/acm +``` + +If you get permissions issues, it is because the `.js` file was rebuilt and with standard permissions and needs to be linked again. + +```sh +$ npm run cli +``` + +Check: + +```sh +ls -l $(realpath /opt/homebrew/bin/acm) +``` + +See [package.json](/package.json). Supposedly you should be able to leave out the project name when running `npm link` via an `npm run ...` command but I found this causes issues, so decided to always use the full name in the configuration. And to _always_ unlink then link in one go because of permissions issues. diff --git a/docs/features.md b/docs/features.md index dab95c8a..9a1a2acd 100644 --- a/docs/features.md +++ b/docs/features.md @@ -16,14 +16,7 @@ A roadmap of features and whether done or not. - Note that **new** files (including when doing a rename) should **always** be staged so that the extension can pick them up and so git can see that two paths for a renamed file are the same file. - [x] Generate a single-line commit message for a file to be committed, using action verbs (e.g. `Create`, `Update`, `Delete`) - [x] Handle changes from a single changed file. -- [ ] Handle changes from two or more files. - - [x] As a list of the same nature e.g. `update foo.txt and fizz/bar.txt`, `feat: create foo.txt, fizz/bar.txt and buzz.js` (including prefix) and `Various changes to foo.txt and fizz/bar.txt` (for one updated and one new file). See [#29](https://github.com/MichaelCurrin/auto-commit-msg/pull/29). - - [x] As a count. e.g. `update 3 files`. See [#38](https://github.com/MichaelCurrin/auto-commit-msg/issues/38). - - [ ] As different verb for each change `create foo.txt and delete bar.txt`. See [#37](https://github.com/MichaelCurrin/auto-commit-msg/issues/37) and See [#52](https://github.com/MichaelCurrin/auto-commit-msg/issues/52). - - [ ] As a count in a directory. `update 3 files in foo` - - [ ] As a count with a conventional commit message. See [#51](https://github.com/MichaelCurrin/auto-commit-msg/issues/51). - - [ ] As a count with a label. e.g. `update 3 config files`. See [#13](https://github.com/MichaelCurrin/auto-commit-msg/issues/13). - - [ ] As count that uses the old message. See [#55](https://github.com/MichaelCurrin/auto-commit-msg/issues/55) +- [x] Handle changes from two or more files. - [x] Support using multiple repos in one VS Code window. - [x] Keep user-entered value as a prefix e.g. Keep `docs:` (or ticket number) so message becomes `docs: Update README.md` - [x] Use conventional commits e.g. `chore: Update package.json` From c6c3b3c8efe08ba2ea8d0f43f7dad2aa0c099cb3 Mon Sep 17 00:00:00 2001 From: Michael Currin <18750745+MichaelCurrin@users.noreply.github.com> Date: Fri, 27 Mar 2026 10:40:53 +0100 Subject: [PATCH 02/19] feat: update shell --- shell/README.md | 95 +++++------------------------- shell/TODO.md | 14 +++++ shell/acm-hook.sh | 35 +++++++++++ shell/archive/README.md | 11 ++++ shell/{ => archive}/count-files.sh | 0 shell/{ => archive}/sample.sh | 0 shell/{ => archive}/simple-hook.sh | 0 shell/autofill-hook.sh | 40 ------------- shell/autofill.sh | 19 ------ 9 files changed, 76 insertions(+), 138 deletions(-) create mode 100644 shell/TODO.md create mode 100755 shell/acm-hook.sh create mode 100644 shell/archive/README.md rename shell/{ => archive}/count-files.sh (100%) rename shell/{ => archive}/sample.sh (100%) rename shell/{ => archive}/simple-hook.sh (100%) delete mode 100755 shell/autofill-hook.sh delete mode 100755 shell/autofill.sh diff --git a/shell/README.md b/shell/README.md index 3feb662f..30b6c61a 100644 --- a/shell/README.md +++ b/shell/README.md @@ -1,88 +1,25 @@ -# Shell - -Bash scripts around this project, to be used instead of as a VS Code extension. **This area is not complete and is still experimental.** - -Note: All the scripts in this directory are named with dashes and not underscores, to match the Git hook filenames convention. - - -## Samples - -Archive of shell scripts for reference. These are used in the early development of the project but are not actively used. - -- [count-files.sh](count-files.sh) -- [sample.sh](sample.sh) -- [simple-hook.sh](simple-hook.sh) - - -## Autofill scripts - -These are shell scripts to integrate with the JS scripts in this project, as an alternative to using, VS Code so I can use it any terminal and in other IDEs with their terminals. And if I stop using VS Code completely I can keep using the core at least in a terminal. - -- [autofill-hook.sh](autofill-hook.sh) -- [autofill.sh](autofill.sh) - -They are not complete but work as a POC for using the core logic outside project outside of VS Code as Git hook. - -### Dev notes -Remember to **compile** the TS to JS before running this script to get the latest changes. Or use a pre-compiled script. - -#### Purpose - -This script should be used as an **alternative** to using VS Code itself to handle your commit messages, as VS Code does not support a hook properly when going through the UI box (it actually **ignores** any message you type in and uses its own generated message from the hook). - -But, if you don't use it as an actual hook, there is an alternative flow that doesn't mess with VS Code. You can use the other script and set up a Git alias (which can be used across projects without setting a hook even). - -Sample output: - -```console -$ ./shell/autofill.sh -chore: update settings.json -$ ./shell/autofill.sh -update 11 files -``` - -Use it with Git. This uses the tool to generate a message and pass it as the Git commit message, but forcing edit mode so you can override it. - -```sh -$ git commit --edit -m "$(shell/autofill.sh)" -``` - -Move the script to a `bin` executables directory so you can run it from anywhere. - -```sh -$ cp autofill.sh /usr/local/bin -``` - -TODO: - -- [ ] Where to put the Node script so it can reference it. -- [ ] Windows support -- [ ] How to automated the install process for upgrades. Maybe the JS + shell script as NPM package or at least on GitHub with cURL install. -- [ ] Figure out how to switch between staged and not, with `--cached`. Like passing a param to the shell script and having two aliases. Or to have it as pass of the shell script to fallback to all if anything is staged. Or just control with filenames e.g. `git c .` or `git c package*` - oh wait, the shell script doesn't look at what is passed to `git commit`, only what is staged or not. +# Shell -#### Alias +See [acm-hook.sh](acm-hook.sh). -Set this up in git config aliases as `c` or something. If this was in a _bin_ directory, or used with an absolute path to the script. +A CLI script that bypasses using VS Code or an extension. +It will get output from Git, send it to Node CLI entry-point tool and print +it. This can be used as part of Git commit message hook flow (pre-commit hook). -```toml -[alias] - c = '! git commit --edit -m "$(autofill.sh)"' -``` -Then instead of `git commit`, you can do: +## Setup -```sh -$ git c +If you want to use the hook: -$ git c foo.txt -``` +1. Follow instructions to install the TS command globally as per [src/cli/README.md](/src/cli/README.md) +1. Install the pre-commit hook. + ```sh + $ cp shell/acm-hook.sh YOUR_PROJECT/.hooks/pre-commit + $ chmod +x YOUR_PROJECT/.hooks/pre-commit + ``` -#### TODO +## Debugging -- [ ] For now this points to the output directory so it limited in real world use. This is a stepping -stone. But ideally the JS files can be copied outside of this project to a central location (maybe -with a `bin` entry point). And the SH script can be added to an individual project in `.git/hooks` dir as `prepare-commit-msg`. -- [ ] When using this as a hook, consider reading from the **existing** commit message file in the case -of template, so it that can be passed on. -- [ ] Add a flag for staged to get `--cached` flag. +Optionally add a `-p` debug flag to print without writing to a file. This +makes it easy to debug the script outside a Git commit hook flow. diff --git a/shell/TODO.md b/shell/TODO.md new file mode 100644 index 00000000..c29cb363 --- /dev/null +++ b/shell/TODO.md @@ -0,0 +1,14 @@ +- [ ] For now this points to the output directory so it limited in real world use. This is a stepping +stone. But ideally the JS files can be copied outside of this project to a central location (maybe +with a `bin` entry point). And the SH script can be added to an individual project in `.git/hooks` dir as `prepare-commit-msg`. +- [ ] When using this as a hook, consider reading from the **existing** commit message file in the case +of template, so it that can be passed on. +- [ ] Add a flag for staged to get `--cached` flag. +- [ ] How to automated the install process for upgrades. Maybe the JS + shell script as NPM package or at least on GitHub with cURL install. +- [ ] Figure out how to switch between staged and not, with `--cached`. Like passing a param to the shell script and having two aliases. Or to have it as pass of the shell script to fallback to all if anything is staged. Or just control with filenames e.g. `git c .` or `git c package*` - oh wait, the shell script doesn't look at what is passed to `git commit`, only what is staged or not. +- Fix bug where message is on modified and staged but only staged is commit with gacm + + If the flag is omitted, then the standard `git status` logic is followed: + look for staged changes and use them, otherwise use unstaged changes. + there's a problem - commit does not take cached flag - but it will use implied staged or not. so do not pass through. + BUT could look at advanced mode of pass through names of files to commit IF they are handled by status and commit, but using manual git add is good enough probably. esp for untracked files which need add anyway. diff --git a/shell/acm-hook.sh b/shell/acm-hook.sh new file mode 100755 index 00000000..008ac235 --- /dev/null +++ b/shell/acm-hook.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash +# CLI test for autofill hook. +# +# See shell/README.md doc. +set -e + +GENERATE_CMD='auto_commit_msg_generate' + +if ! command -v "$GENERATE_CMD" &> /dev/null; then + echo "Error: $GENERATE_CMD could not be found" + exit 1 +fi + +COMMIT_MSG_FILE=$1 +COMMIT_SOURCE=$2 + +echo 'Input values' +echo "COMMIT_MSG_FILE = $COMMIT_MSG_FILE" +# Either 'message' or 'template' +echo "COMMIT_SOURCE = $COMMIT_SOURCE" + +# TODO: Test this - this conditional is untested. +if [ "$COMMIT_SOURCE" = 'template']; then + echo "Current commit message" + <"$COMMIT_MSG_FILE" +fi + +CHANGES=$(git diff-index --name-status HEAD) +MESSAGE=$($GENERATE_CMD "$CHANGES") + +if [ "$1" = '-p' ]; then + echo "$MESSAGE" +else + echo "$MESSAGE" >$COMMIT_MSG_FILE +fi diff --git a/shell/archive/README.md b/shell/archive/README.md new file mode 100644 index 00000000..f2e282d2 --- /dev/null +++ b/shell/archive/README.md @@ -0,0 +1,11 @@ +# Shell + +Bash scripts around this project, to be used instead of as a VS Code extension. + +## Samples + +Archive of shell scripts for reference. These are used in the early development of the project but are not actively used. + +- [count-files.sh](count-files.sh) +- [sample.sh](sample.sh) +- [simple-hook.sh](simple-hook.sh) diff --git a/shell/count-files.sh b/shell/archive/count-files.sh similarity index 100% rename from shell/count-files.sh rename to shell/archive/count-files.sh diff --git a/shell/sample.sh b/shell/archive/sample.sh similarity index 100% rename from shell/sample.sh rename to shell/archive/sample.sh diff --git a/shell/simple-hook.sh b/shell/archive/simple-hook.sh similarity index 100% rename from shell/simple-hook.sh rename to shell/archive/simple-hook.sh diff --git a/shell/autofill-hook.sh b/shell/autofill-hook.sh deleted file mode 100755 index 57fb78e8..00000000 --- a/shell/autofill-hook.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env bash -# CLI test for autofill hook. -# -# This script is *not* ready to be used in other projects. See shell/README.md -# for dev notes. -# -# This is a pure CLIhat script that bypasses using VS Code or an extension. -# It will get output from git, send it to Node CLI entry-point tool and print -# it. This can be used as part of Git commit message hook flow. -# -# Optionally add a `-d` debug flag to print without writing to a file. This -# makes it easy to debug the script outside a Git commit hook flow. -# ./autofill-hook.sh -p -# -# See shell/README.md doc. -set -e - -COMMIT_MSG_FILE=$1 -COMMIT_SOURCE=$2 - -echo 'Input values' -echo "COMMIT_MSG_FILE = $COMMIT_MSG_FILE" -# Either 'message' or 'template' -echo "COMMIT_SOURCE = $COMMIT_SOURCE" - -# TODO: Test - this conditional is untested. -if [ "$COMMIT_SOURCE" = 'template']; then - echo "Current commit message" - <"$COMMIT_MSG_FILE" -fi - -CHANGES=$(git diff-index --name-status HEAD) -# TODO: Make this a global bin path and a bundled file. -MESSAGE=$(node out/cli.js "$CHANGES") - -if [ "$1" = '-p' ]; then - echo "$MESSAGE" -else - echo "$MESSAGE" >$COMMIT_MSG_FILE -fi diff --git a/shell/autofill.sh b/shell/autofill.sh deleted file mode 100755 index a732f9d7..00000000 --- a/shell/autofill.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash -# Autofill script. -# -# Produce a commit message from changed files and print to stdout. -# -# This works similar to a Git hook, but is intended to be used alone or in a Git -# alias. -# -# See `shell/README.md` doc. -# See `src/git/cli.ts` for details on flags. Note `--cached` can be added -# if you want to use staged changes only. -set -e - -DIFF_FLAGS='--name-status --find-renames --find-copies --no-color' -CHANGES=$(git diff-index $DIFF_FLAGS HEAD) - -# TODO: Make this a global bin path and a bundled file. -MESSAGE=$(node out/cli.js "$CHANGES") -echo "$MESSAGE" From d0696b44d1696a0e629a96d3b7aaf4037b4cb544 Mon Sep 17 00:00:00 2001 From: Michael Currin <18750745+MichaelCurrin@users.noreply.github.com> Date: Fri, 27 Mar 2026 10:41:00 +0100 Subject: [PATCH 03/19] feat: update src --- src/autofill.ts | 2 +- src/cli.ts | 43 -------------- src/cli/diffIndexGenerate.ts | 91 ++++++++++++++++++++++++++++++ src/cli/diffIndexGenerateCommit.ts | 47 +++++++++++++++ src/cli/generate.ts | 64 +++++++++++++++++++++ src/cli/utils.ts | 14 +++++ src/git/parseOutput.ts | 4 +- src/test/generate/action.test.ts | 6 +- src/test/generate/count.test.ts | 6 +- src/test/lib/paths.test.ts | 2 +- 10 files changed, 226 insertions(+), 53 deletions(-) delete mode 100644 src/cli.ts create mode 100644 src/cli/diffIndexGenerate.ts create mode 100644 src/cli/diffIndexGenerateCommit.ts create mode 100644 src/cli/generate.ts create mode 100644 src/cli/utils.ts diff --git a/src/autofill.ts b/src/autofill.ts index d8013650..9c4d7a1b 100644 --- a/src/autofill.ts +++ b/src/autofill.ts @@ -13,7 +13,7 @@ Try saving your files or stage any new (untracked) files.\ `; /** - * Generate and fill a commit message in the Git extenside sidebar. + * Generate and fill a commit message in the Git extension sidebar. * * Steps: * diff --git a/src/cli.ts b/src/cli.ts deleted file mode 100644 index 0c8ecd58..00000000 --- a/src/cli.ts +++ /dev/null @@ -1,43 +0,0 @@ -/** - * CLI module. - * - * This is the entry-point for the Auto Commit Message tool when running as a - * standalone shell script. - * - * This script does NOT interact with VS Code or Git, it only processes text. - * - * It simply receives text as an argument and prints output to `stdout` for use - * in a hook flow. Or to `stderr`, in the case of a message not appropriate for - * a commit message. - * - * See `shell/README.md` in docs. - */ -import { generateMsg } from "./prepareCommitMsg"; - -/** - * Command-line entry-point. - * - * Expect multi-line text from `git diff-index` command as the first item in the - * shell arguments. - * - * Returns a suitable generated commit message as text. - */ -function main(args: string[]) { - const linesArg = args[0]; - - if (typeof linesArg === "undefined") { - throw new Error("Exactly one argument is required - text from diff-index."); - } - - const lines = linesArg.split("\n"); - - if (!lines.length) { - throw new Error("No file changes found"); - } - - const msg = generateMsg(lines); - console.log(msg); -} - -const args = process.argv.slice(2); -main(args); diff --git a/src/cli/diffIndexGenerate.ts b/src/cli/diffIndexGenerate.ts new file mode 100644 index 00000000..42eb4d9e --- /dev/null +++ b/src/cli/diffIndexGenerate.ts @@ -0,0 +1,91 @@ +#!/usr/bin/env node +/** + * AutoCommitMsg CLI script. + */ +import { execFileSync } from "child_process"; +import { generateMsg } from "../prepareCommitMsg"; +import { shouldShowHelp } from "./utils"; + +const HELP_TEXT: string = `Usage: acm [--cached] [--help|-h] + +Check Git changes and generate a commit message. + +Options: + --cached Use only staged changes (equivalent to git --cached). + If the flag is omitted, then the standard \`git status\` logic is followed: + look for staged changes and use them, otherwise use unstaged changes. + --help, -h Show this help and exit.`; + +const DIFF_FLAGS = [ + "diff-index", + "--name-status", + "--find-renames", + "--find-copies", + "--no-color", +]; + +/** + * Run `git diff-index` and return its stdout as a string. + * + * TODO: Use _diffIndex instead after refactoring for flags. + * @param useCached When true, include only staged changes using `--cached`. + * + * @returns output Diff output from git. + */ +function runGitDiff(useCached: boolean): string { + const flags: string[] = [...DIFF_FLAGS]; + + if (useCached) { + flags.push("--cached"); + } + flags.push("HEAD"); + + const output: string = execFileSync("git", flags, { + encoding: "utf8", + stdio: ["ignore", "pipe", "pipe"], + }); + + return output.trim(); +} + +/** + * Generate a commit message from the current repository diff. + * + * @param useCached When true, include only staged changes using `--cached`. + * @returns Generated commit message text. + */ +export function generateCommitMessage(useCached: boolean): string { + const diffOutput: string = runGitDiff(useCached); + if (!diffOutput) { + throw new Error("No file changes found"); + } + + const lines: string[] = diffOutput.split("\n"); + return generateMsg(lines); +} + +/** + * Command-line entry-point. + * + * Accepts an optional `--cached` flag to use staged changes only. + * Prints the generated commit message to stdout. + */ +function main(argv: string[]): void { + if (shouldShowHelp(argv)) { + console.log(HELP_TEXT); + return; + } + const useCached: boolean = argv.includes("--cached"); + const msg: string = generateCommitMessage(useCached); + console.log(msg); +} + +if (require.main === module) { + try { + main(process.argv.slice(2)); + } catch (err) { + const message: string = err instanceof Error ? err.message : String(err); + console.error(`Error: ${message}`); + process.exit(1); + } +} diff --git a/src/cli/diffIndexGenerateCommit.ts b/src/cli/diffIndexGenerateCommit.ts new file mode 100644 index 00000000..fde9e61a --- /dev/null +++ b/src/cli/diffIndexGenerateCommit.ts @@ -0,0 +1,47 @@ +#!/usr/bin/env node +/** + * Git commit AutoCommitMsg script. + */ +import { execFileSync } from "child_process"; +import { generateCommitMessage } from "./diffIndexGenerate"; +import { shouldShowHelp } from "./utils"; + +const HELP_TEXT: string = `Usage: gacm [--cached] [--help|-h] + +Check Git changes, generate a commit message, and run Git commit. + +Options: + --cached Use only staged changes (equivalent to git --cached). + If the flag is omitted, then the standard \`git status\` logic is followed: + look for staged changes and use them, otherwise use unstaged changes. + --help, -h Show this help and exit.`; + +/** + * Command-line entry-point. + */ +function main(argv: string[]): void { + if (shouldShowHelp(argv)) { + console.log(HELP_TEXT); + return; + } + + const useCached: boolean = argv.includes("--cached"); + const passthrough: string[] = argv.filter( + (arg: string) => arg !== "--cached", + ); + + const msg: string = generateCommitMessage(useCached); + + const commitArgs: string[] = ["commit", "--edit", "-m", msg, ...passthrough]; + execFileSync("git", commitArgs, { stdio: "inherit" }); +} + +if (require.main === module) { + try { + main(process.argv.slice(2)); + } catch (err) { + const message: string = err instanceof Error ? err.message : String(err); + console.error(`Error: ${message}`); + process.exit(1); + } +} diff --git a/src/cli/generate.ts b/src/cli/generate.ts new file mode 100644 index 00000000..1aad2e24 --- /dev/null +++ b/src/cli/generate.ts @@ -0,0 +1,64 @@ +#!/usr/bin/env node +/** + * CLI module to generate a commit message using given input. + * + * This script does not interact with VS Code or Git, it only processes text. + * This works as a Git hook. See shell/README.md for hook usage. + * + * It simply receives text as an argument and prints output to `stdout` for use + * in a hook flow. Or to `stderr`, in the case of a message not appropriate for + * a commit message. + */ +import { generateMsg } from "../prepareCommitMsg"; + +const HELP_TEXT: string = `Usage: auto_commit_msg_generate DIFF_INDEX_OUTPUT + +Generate a commit message from given input. + +Arguments: + DIFF_INDEX_OUTPUT Text output from 'git diff-index --name-status HEAD'. + +Options: + --help, -h Show this help and exit.`; + +/** + * Command-line entry-point. + * + * Returns a suitable generated commit message as text. + */ +import { shouldShowHelp } from "./utils"; + +/** + * Entry-point for the CLI. Handles help flag and input validation. + */ +function main(args: string[]): void { + if (shouldShowHelp(args)) { + console.log(HELP_TEXT); + return; + } + const linesArg = args[0]; + + if (typeof linesArg === "undefined") { + throw new Error( + "Exactly one argument is required - text output from diff-index command.", + ); + } + + const lines = linesArg.split("\n"); + + if (!lines.length) { + throw new Error("No file changes found"); + } + + const msg = generateMsg(lines); + console.log(msg); +} + +const args = process.argv.slice(2); +try { + main(args); +} catch (err) { + const message: string = err instanceof Error ? err.message : String(err); + console.error(message); + process.exit(1); +} diff --git a/src/cli/utils.ts b/src/cli/utils.ts new file mode 100644 index 00000000..c6324c6d --- /dev/null +++ b/src/cli/utils.ts @@ -0,0 +1,14 @@ +/** + * CLI utilities shared by bin commands. + */ + +/** + * Determine whether help should be displayed. + * + * @param argv Command-line arguments passed to the CLI. + * + * @returns boolean True when `--help` or `-h` is present. + */ +export function shouldShowHelp(argv: string[]): boolean { + return argv.includes("--help") || argv.includes("-h"); +} diff --git a/src/git/parseOutput.ts b/src/git/parseOutput.ts index b32d7bc6..d5ff9d87 100644 --- a/src/git/parseOutput.ts +++ b/src/git/parseOutput.ts @@ -17,7 +17,7 @@ const GIT_STATUS_SPLIT = " -> "; * Parse a line which was produced by the `git status --short` command. */ export function parseStatus(line: string): FileChange { - if (line.length <= 4) { + if (line.length < 4) { throw new Error( `Input string must be at least 4 characters. Got: '${line}'`, ); @@ -54,7 +54,7 @@ export function parseStatus(line: string): FileChange { * than `undefined`). */ export function parseDiffIndex(line: string): FileChange { - if (line.length <= 4) { + if (line.length < 4) { const errorMsg = `Invalid input. Input string must be at least 4 characters. Got: '${line}'`; console.error(errorMsg); throw new Error(errorMsg); diff --git a/src/test/generate/action.test.ts b/src/test/generate/action.test.ts index fc97a86c..91f73511 100644 --- a/src/test/generate/action.test.ts +++ b/src/test/generate/action.test.ts @@ -4,7 +4,7 @@ import * as assert from "assert"; import { lookupDiffIndexAction, moveOrRenameMsg } from "../../generate/action"; -describe("Desribe a file using a single path", function () { +describe("Describe a file using a single path", function () { describe("#lookupDiffIndexAction", function () { it("can describe an updated file", function () { assert.strictEqual(lookupDiffIndexAction("M"), "update"); @@ -32,7 +32,7 @@ describe("Desribe a file using a single path", function () { }); }); -describe("Desribe a file using two paths", function () { +describe("Describe a file using two paths", function () { describe("#moveOrRenameFile", function () { it("can describe a renamed file", function () { assert.strictEqual( @@ -73,7 +73,7 @@ describe("Desribe a file using two paths", function () { ); }); - it("can describe a remamed and moved file", function () { + it("can describe a renamed and moved file", function () { assert.strictEqual( moveOrRenameMsg("foo.txt", "fizz/bar.txt"), "move and rename foo.txt to fizz/bar.txt", diff --git a/src/test/generate/count.test.ts b/src/test/generate/count.test.ts index d183b0cc..6b8e8f2f 100644 --- a/src/test/generate/count.test.ts +++ b/src/test/generate/count.test.ts @@ -3,11 +3,11 @@ */ import * as assert from "assert"; import { - countFilesDesc, _countByAction, _formatAll, _formatOne, _moveOrRenameFromChange, + countFilesDesc, } from "../../generate/count"; import { FileChange } from "../../git/parseOutput.d"; @@ -257,7 +257,7 @@ describe("Aggregate counts of files as numeric data", function () { }); }); - describe("give correct actionsand counts for files with different actions", function () { + describe("give correct actions and counts for files with different actions", function () { it("should handle one created and one updated file", function () { const changes: FileChange[] = [ { @@ -457,7 +457,7 @@ describe("Convert action and counts to a readable commit message", function () { }); }); - describe("multiples files", function () { + describe("multiple files", function () { it("should handle one created file and one updated file", function () { const actionCounts = { create: { fileCount: 1 }, diff --git a/src/test/lib/paths.test.ts b/src/test/lib/paths.test.ts index 62a488dd..2070c7c3 100644 --- a/src/test/lib/paths.test.ts +++ b/src/test/lib/paths.test.ts @@ -119,7 +119,7 @@ describe("Path handling", function () { assert.strictEqual(result, "foo and bar"); }); - it('returns three items joined with commands and an an "and"', function () { + it('returns three items joined with commas and an "and"', function () { const result = _join(["foo", "bar", "bazz"]); assert.strictEqual(result, "foo, bar and bazz"); }); From 93fb67912673d3c0bcddcbf475264a821ba16ad4 Mon Sep 17 00:00:00 2001 From: Michael Currin <18750745+MichaelCurrin@users.noreply.github.com> Date: Fri, 27 Mar 2026 10:41:03 +0100 Subject: [PATCH 04/19] build: update Makefile --- Makefile | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index ad520eef..aacf2699 100644 --- a/Makefile +++ b/Makefile @@ -14,7 +14,7 @@ hooks: cd .git/hooks && ln -s -f ../../hooks/pre-push pre-push install: - npm install + npm ci outdated: npm outdated @@ -57,6 +57,12 @@ e ext: npm run checks npm run ext +# Build and install the CLI tools only. +cli: + npm run checks + npm run cli:install + + ### Deploy login: From 6a874ccdecab3577a5119f0ae2bd032c9a831c3a Mon Sep 17 00:00:00 2001 From: Michael Currin <18750745+MichaelCurrin@users.noreply.github.com> Date: Fri, 27 Mar 2026 10:41:07 +0100 Subject: [PATCH 05/19] build(deps): update package-lock.json and package.json --- package-lock.json | 5 +++++ package.json | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/package-lock.json b/package-lock.json index 37a439d4..76e9b04b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,11 @@ "name": "auto-commit-msg", "version": "0.28.0", "license": "MIT", + "bin": { + "acm": "out/cli/diffIndexGenerate.js", + "auto_commit_msg_generate": "out/cli/generate.js", + "gacm": "out/cli/diffIndexGenerateCommit.js" + }, "devDependencies": { "@types/mocha": "^10.0.3", "@types/node": "^22.4.1", diff --git a/package.json b/package.json index d982f2dd..81edcd83 100644 --- a/package.json +++ b/package.json @@ -20,11 +20,17 @@ "vscode:prepublish": "npm run compile", "build": "mkdir -p build && vsce package --out build/", "ext": "npm run build && code --install-extension $(ls -t build/* | head -n1) --force", + "cli": "npm run compile && npm unlink auto-commit-msg && npm link auto-commit-msg", "preversion": "npm run checks", "version": "npm run build", "postversion": "git push --follow-tags", "sb": "bin/reset_sandbox.sh" }, + "bin": { + "acm": "out/cli/diffIndexGenerate.js", + "gacm": "out/cli/diffIndexGenerateCommit.js", + "auto_commit_msg_generate": "out/cli/generate.js" + }, "engines": { "node": ">=22", "npm": ">=10", From 945b59bb1ca550c4c74e0350eee4c7578767d8a5 Mon Sep 17 00:00:00 2001 From: Michael Currin <18750745+MichaelCurrin@users.noreply.github.com> Date: Fri, 27 Mar 2026 10:41:08 +0100 Subject: [PATCH 06/19] docs: update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index ab91693a..24677a65 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ +[![Made with JavaScript](https://img.shields.io/badge/Made_with-JavaScript-blue?logo=javascript&logoColor=white)](https://www.javascript.com/ "Go to JavaScript homepage") [![Node CI](https://github.com/MichaelCurrin/auto-commit-msg/workflows/Node%20CI/badge.svg)](https://github.com/MichaelCurrin/auto-commit-msg/actions?query=workflow:"Node+CI") [![CodeQL](https://github.com/MichaelCurrin/auto-commit-msg/workflows/CodeQL/badge.svg)](https://github.com/MichaelCurrin/auto-commit-msg/actions?query=workflow%3ACodeQL) [![License](https://img.shields.io/badge/License-MIT-blue)](#license "Go to License section") From 4e3b4859ff5b59989b274ed6c0693349a2a3d988 Mon Sep 17 00:00:00 2001 From: Michael Currin <18750745+MichaelCurrin@users.noreply.github.com> Date: Tue, 7 Apr 2026 14:03:23 +0200 Subject: [PATCH 07/19] update TODO.md --- shell/TODO.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shell/TODO.md b/shell/TODO.md index c29cb363..15d9fafa 100644 --- a/shell/TODO.md +++ b/shell/TODO.md @@ -6,7 +6,7 @@ of template, so it that can be passed on. - [ ] Add a flag for staged to get `--cached` flag. - [ ] How to automated the install process for upgrades. Maybe the JS + shell script as NPM package or at least on GitHub with cURL install. - [ ] Figure out how to switch between staged and not, with `--cached`. Like passing a param to the shell script and having two aliases. Or to have it as pass of the shell script to fallback to all if anything is staged. Or just control with filenames e.g. `git c .` or `git c package*` - oh wait, the shell script doesn't look at what is passed to `git commit`, only what is staged or not. -- Fix bug where message is on modified and staged but only staged is commit with gacm +- Fix bug where message is on modified and staged but only staged is committed with gacm or acm If the flag is omitted, then the standard `git status` logic is followed: look for staged changes and use them, otherwise use unstaged changes. From c8e565812fee2411108b8bf691c183b96b25e787 Mon Sep 17 00:00:00 2001 From: Michael Currin <18750745+MichaelCurrin@users.noreply.github.com> Date: Tue, 7 Apr 2026 14:03:26 +0200 Subject: [PATCH 08/19] chore: update .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 9fc03b6e..cb35da8a 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ coverage/ .vscode-test/ out/ build/*.vsix +build-cli/* # Temporary git repo in the repo, for testing the extension. sandbox/ From 8614656314a3da158c7a6f8402de5fad7a02460e Mon Sep 17 00:00:00 2001 From: Michael Currin <18750745+MichaelCurrin@users.noreply.github.com> Date: Tue, 7 Apr 2026 14:03:28 +0200 Subject: [PATCH 09/19] docs: update cli.md --- docs/development/cli.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/development/cli.md b/docs/development/cli.md index 1094b9eb..40ce5852 100644 --- a/docs/development/cli.md +++ b/docs/development/cli.md @@ -14,12 +14,17 @@ $ npx ts-node src/cli/diffIndexGenerate.ts ## Package as a binary -To send to someone so they can use it without having Node installed or running a build step on their machine. +Build the CLI as a binary so you send to someone so they can use it without having Node installed or running a build step on their machine. ```sh -$ npx --yes pkg out/cli/diffIndexGenerateCommit.js -t node18-macos +$ make cli-build ``` +Check the [build-cli](/build-cli/) directory once it is created. + +_Note: Node 18 is set to avoid erros, even though 22 is set in package.json and is active with NVM._ + + ## Troubleshooting On macOS, installed here as a symlink pointing to the `.js` file in the repo: From ac1e10fdb29393f6e9066ea44ccb95560fb1e8dc Mon Sep 17 00:00:00 2001 From: Michael Currin <18750745+MichaelCurrin@users.noreply.github.com> Date: Tue, 7 Apr 2026 14:03:31 +0200 Subject: [PATCH 10/19] build: update Makefile --- Makefile | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index aacf2699..a5b4adc7 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ PUBLISHER_NAME = MichaelCurrin - +CLI_BUILD_DIR = build-cli default: install @@ -62,6 +62,13 @@ cli: npm run checks npm run cli:install +# Build CLI tools for distribution. +cli-build: + rm -f $(CLI_BUILD_DIR)/* + npx --yes pkg out/cli/diffIndexGenerateCommit.js \ + --targets node18-linux,node18-macos,node18-win \ + --output $(CLI_BUILD_DIR)/acm + ### Deploy From df1fc44512b35ebb2f96a2a70754e572ea5e37b7 Mon Sep 17 00:00:00 2001 From: Michael Currin <18750745+MichaelCurrin@users.noreply.github.com> Date: Tue, 21 Apr 2026 10:57:40 +0200 Subject: [PATCH 11/19] build: update Makefile --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index a5b4adc7..35d8819f 100644 --- a/Makefile +++ b/Makefile @@ -57,10 +57,10 @@ e ext: npm run checks npm run ext -# Build and install the CLI tools only. +# Build and install only the CLI tools. cli: npm run checks - npm run cli:install + npm run cli # Build CLI tools for distribution. cli-build: From 6c17cd58554d8f0bc7695ea08d8e4c50efaf34cb Mon Sep 17 00:00:00 2001 From: Michael Currin <18750745+MichaelCurrin@users.noreply.github.com> Date: Tue, 21 Apr 2026 11:11:12 +0200 Subject: [PATCH 12/19] build(deps): update package-lock.json and package.json --- package-lock.json | 401 +++++++++++++++++++++++----------------------- package.json | 6 +- 2 files changed, 200 insertions(+), 207 deletions(-) diff --git a/package-lock.json b/package-lock.json index 76e9b04b..299325b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "devDependencies": { "@types/mocha": "^10.0.3", "@types/node": "^22.4.1", - "@types/vscode": "^1.92.0", + "@types/vscode": "^1.116.0", "@typescript-eslint/eslint-plugin": "^8.12.2", "@typescript-eslint/parser": "^8.12.2", "@vscode/vsce": "^3.0.0", @@ -31,7 +31,7 @@ "engines": { "node": ">=22", "npm": ">=10", - "vscode": "^1.92.0" + "vscode": "^1.116.0" } }, "node_modules/@azu/format-text": { @@ -183,22 +183,22 @@ } }, "node_modules/@azure/msal-browser": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-5.6.1.tgz", - "integrity": "sha512-Ylmp8yngH7YRLV5mA1aF4CNS6WsJTPbVXaA0Tb1x1Gv/J3BM3hE4Q7nDaf7dRfU00FcxDBBudTjqlpH74ZSsgw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-5.7.0.tgz", + "integrity": "sha512-uYbJ0YarxkVGWEq814BysJry/IPvpDNkVKmc2bMZp4G+igUQkJ5nlFirycwPGUeA9ICLQqCxqExCA1Z1E07bPA==", "dev": true, "license": "MIT", "dependencies": { - "@azure/msal-common": "16.4.0" + "@azure/msal-common": "16.5.0" }, "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-common": { - "version": "16.4.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.4.0.tgz", - "integrity": "sha512-twXt09PYtj1PffNNIAzQlrBd0DS91cdA6i1gAfzJ6BnPM4xNk5k9q/5xna7jLIjU3Jnp0slKYtucshGM8OGNAw==", + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.5.0.tgz", + "integrity": "sha512-i3eS/5pmxDbIU/mLMENs88Qg3k6XxqJytJy6PpB7L1tCBjdXHJDadCD3Hu1TyTooe7iQo7CYqbocgL/l/8u90g==", "dev": true, "license": "MIT", "engines": { @@ -206,13 +206,13 @@ } }, "node_modules/@azure/msal-node": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-5.1.1.tgz", - "integrity": "sha512-71grXU6+5hl+3CL3joOxlj/AW6rmhthuTlG0fRqsTrhPArQBpZuUFzCIlKOGdcafLUa/i1hBdV78ZxJdlvRA+g==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-5.1.3.tgz", + "integrity": "sha512-LqT8mRZpEils9zGR9eW+Ljqifh2aMA99UF/X0jxIKDYZeHr6onlHwhVP4xHCeLhh55BI63JCbdf1iWJbMh1mPw==", "dev": true, "license": "MIT", "dependencies": { - "@azure/msal-common": "16.4.0", + "@azure/msal-common": "16.5.0", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" }, @@ -582,9 +582,9 @@ "license": "MIT" }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -656,9 +656,9 @@ "license": "MIT" }, "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -819,9 +819,9 @@ } }, "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", "dev": true, "license": "MIT", "engines": { @@ -1104,28 +1104,28 @@ } }, "node_modules/@textlint/ast-node-types": { - "version": "15.5.2", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.5.2.tgz", - "integrity": "sha512-fCaOxoup5LIyBEo7R1oYWE7V4bSX0KQeHh66twon9e9usaLE3ijgF8QjYsR6joCssdeCHVd0wHm7ppsEyTr6vg==", + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.5.4.tgz", + "integrity": "sha512-bVtB6VEy9U9DpW8cTt25k5T+lz86zV5w6ImePZqY1AXzSuPhqQNT77lkMPxonXzUducEIlSvUu3o7sKw3y9+Sw==", "dev": true, "license": "MIT" }, "node_modules/@textlint/linter-formatter": { - "version": "15.5.2", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.5.2.tgz", - "integrity": "sha512-jAw7jWM8+wU9cG6Uu31jGyD1B+PAVePCvnPKC/oov+2iBPKk3ao30zc/Itmi7FvXo4oPaL9PmzPPQhyniPVgVg==", + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.5.4.tgz", + "integrity": "sha512-D9qJedKBLmAo+kiudop4UKgSxXMi4O8U86KrCidVXZ9RsK0NSVIw6+r2rlMUOExq79iEY81FRENyzmNVRxDBsg==", "dev": true, "license": "MIT", "dependencies": { "@azu/format-text": "^1.0.2", "@azu/style-format": "^1.0.1", - "@textlint/module-interop": "15.5.2", - "@textlint/resolver": "15.5.2", - "@textlint/types": "15.5.2", + "@textlint/module-interop": "15.5.4", + "@textlint/resolver": "15.5.4", + "@textlint/types": "15.5.4", "chalk": "^4.1.2", "debug": "^4.4.3", "js-yaml": "^4.1.1", - "lodash": "^4.17.23", + "lodash": "^4.18.1", "pluralize": "^2.0.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", @@ -1164,27 +1164,27 @@ } }, "node_modules/@textlint/module-interop": { - "version": "15.5.2", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.5.2.tgz", - "integrity": "sha512-mg6rMQ3+YjwiXCYoQXbyVfDucpTa1q5mhspd/9qHBxUq4uY6W8GU42rmT3GW0V1yOfQ9z/iRrgPtkp71s8JzXg==", + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.5.4.tgz", + "integrity": "sha512-JyAUd26ll3IFF87LP0uGoa8Tzw5ZKiYvGs6v8jLlzyND1lUYCI4+2oIAslrODLkf0qwoCaJrBQWM3wsw+asVGQ==", "dev": true, "license": "MIT" }, "node_modules/@textlint/resolver": { - "version": "15.5.2", - "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.5.2.tgz", - "integrity": "sha512-YEITdjRiJaQrGLUWxWXl4TEg+d2C7+TNNjbGPHPH7V7CCnXm+S9GTjGAL7Q2WSGJyFEKt88Jvx6XdJffRv4HEA==", + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.5.4.tgz", + "integrity": "sha512-5GUagtpQuYcmhlOzBGdmVBvDu5lKgVTjwbxtdfoidN4OIqblIxThJHHjazU+ic+/bCIIzI2JcOjHGSaRmE8Gcg==", "dev": true, "license": "MIT" }, "node_modules/@textlint/types": { - "version": "15.5.2", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.5.2.tgz", - "integrity": "sha512-sJOrlVLLXp4/EZtiWKWq9y2fWyZlI8GP+24rnU5avtPWBIMm/1w97yzKrAqYF8czx2MqR391z5akhnfhj2f/AQ==", + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.5.4.tgz", + "integrity": "sha512-mY28j2U7nrWmZbxyKnRvB8vJxJab4AxqOobLfb6iozrLelJbqxcOTvBQednadWPfAk9XWaZVMqUr9Nird3mutg==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "15.5.2" + "@textlint/ast-node-types": "15.5.4" } }, "node_modules/@tootallnate/once": { @@ -1205,9 +1205,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.19.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.15.tgz", - "integrity": "sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==", + "version": "22.19.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.17.tgz", + "integrity": "sha512-wGdMcf+vPYM6jikpS/qhg6WiqSV/OhG+jeeHT/KlVqxYfD40iYJf9/AE1uQxVWFvU7MipKRkRv8NSHiCGgPr8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1229,27 +1229,27 @@ "license": "MIT" }, "node_modules/@types/vscode": { - "version": "1.110.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.110.0.tgz", - "integrity": "sha512-AGuxUEpU4F4mfuQjxPPaQVyuOMhs+VT/xRok1jiHVBubHK7lBRvCuOMZG0LKUwxncrPorJ5qq/uil3IdZBd5lA==", + "version": "1.116.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.116.0.tgz", + "integrity": "sha512-sYHp4MO6BqJ2PD7Hjt0hlIS3tMaYsVPJrd0RUjDJ8HtOYnyJIEej0bLSccM8rE77WrC+Xox/kdBwEFDO8MsxNA==", "dev": true, "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.2.tgz", - "integrity": "sha512-NZZgp0Fm2IkD+La5PR81sd+g+8oS6JwJje+aRWsDocxHkjyRw0J5L5ZTlN3LI1LlOcGL7ph3eaIUmTXMIjLk0w==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.0.tgz", + "integrity": "sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.57.2", - "@typescript-eslint/type-utils": "8.57.2", - "@typescript-eslint/utils": "8.57.2", - "@typescript-eslint/visitor-keys": "8.57.2", + "@typescript-eslint/scope-manager": "8.59.0", + "@typescript-eslint/type-utils": "8.59.0", + "@typescript-eslint/utils": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.4.0" + "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1259,22 +1259,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.57.2", + "@typescript-eslint/parser": "^8.59.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.57.2.tgz", - "integrity": "sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.0.tgz", + "integrity": "sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.57.2", - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/typescript-estree": "8.57.2", - "@typescript-eslint/visitor-keys": "8.57.2", + "@typescript-eslint/scope-manager": "8.59.0", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0", "debug": "^4.4.3" }, "engines": { @@ -1286,18 +1286,18 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.2.tgz", - "integrity": "sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.0.tgz", + "integrity": "sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.57.2", - "@typescript-eslint/types": "^8.57.2", + "@typescript-eslint/tsconfig-utils": "^8.59.0", + "@typescript-eslint/types": "^8.59.0", "debug": "^4.4.3" }, "engines": { @@ -1308,18 +1308,18 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.2.tgz", - "integrity": "sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.0.tgz", + "integrity": "sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/visitor-keys": "8.57.2" + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1330,9 +1330,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.2.tgz", - "integrity": "sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.0.tgz", + "integrity": "sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg==", "dev": true, "license": "MIT", "engines": { @@ -1343,21 +1343,21 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.57.2.tgz", - "integrity": "sha512-Co6ZCShm6kIbAM/s+oYVpKFfW7LBc6FXoPXjTRQ449PPNBY8U0KZXuevz5IFuuUj2H9ss40atTaf9dlGLzbWZg==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.0.tgz", + "integrity": "sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/typescript-estree": "8.57.2", - "@typescript-eslint/utils": "8.57.2", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0", + "@typescript-eslint/utils": "8.59.0", "debug": "^4.4.3", - "ts-api-utils": "^2.4.0" + "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1368,13 +1368,13 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.2.tgz", - "integrity": "sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.0.tgz", + "integrity": "sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A==", "dev": true, "license": "MIT", "engines": { @@ -1386,21 +1386,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.2.tgz", - "integrity": "sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.0.tgz", + "integrity": "sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.57.2", - "@typescript-eslint/tsconfig-utils": "8.57.2", - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/visitor-keys": "8.57.2", + "@typescript-eslint/project-service": "8.59.0", + "@typescript-eslint/tsconfig-utils": "8.59.0", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.4.0" + "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1410,20 +1410,20 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/utils": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.2.tgz", - "integrity": "sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.0.tgz", + "integrity": "sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.57.2", - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/typescript-estree": "8.57.2" + "@typescript-eslint/scope-manager": "8.59.0", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1434,17 +1434,17 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.2.tgz", - "integrity": "sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.0.tgz", + "integrity": "sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.57.2", + "@typescript-eslint/types": "8.59.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -1469,9 +1469,9 @@ } }, "node_modules/@typespec/ts-http-runtime": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.4.tgz", - "integrity": "sha512-CI0NhTrz4EBaa0U+HaaUZrJhPoso8sG7ZFya8uQoBA57fjzrjRSv87ekCjLZOFExN+gXE/z0xuN2QfH4H2HrLQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.5.tgz", + "integrity": "sha512-yURCknZhvywvQItHMMmFSo+fq5arCUIyz/CVk7jD89MSai7dkaX8ufjCWp3NttLojoTVbcE72ri+be/TnEbMHw==", "dev": true, "license": "MIT", "dependencies": { @@ -1491,9 +1491,9 @@ "license": "ISC" }, "node_modules/@vscode/vsce": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-3.7.1.tgz", - "integrity": "sha512-OTm2XdMt2YkpSn2Nx7z2EJtSuhRHsTPYsSK59hr3v8jRArK+2UEoju4Jumn1CmpgoBLGI6ReHLJ/czYltNUW3g==", + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-3.9.1.tgz", + "integrity": "sha512-MPn5p+DoudI+3GfJSpAZZraE1lgLv0LcwbH3+xy7RgEhty3UIkmUMUA+5jPTDaxXae00AnX5u77FxGM8FhfKKA==", "dev": true, "license": "MIT", "dependencies": { @@ -1524,7 +1524,7 @@ "typed-rest-client": "^1.8.4", "url-join": "^4.0.1", "xml2js": "^0.5.0", - "yauzl": "^2.3.1", + "yauzl": "^3.2.1", "yazl": "^2.2.2" }, "bin": { @@ -1690,9 +1690,9 @@ "license": "MIT" }, "node_modules/@vscode/vsce/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -1934,9 +1934,9 @@ "optional": true }, "node_modules/baseline-browser-mapping": { - "version": "2.10.11", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.11.tgz", - "integrity": "sha512-DAKrHphkJyiGuau/cFieRYhcTFeK/lBuD++C7cZ6KZHbMhBrisoi+EvhQ5RZrIfV5qwsW8kgQ07JIC+MDJRAhg==", + "version": "2.10.20", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.20.tgz", + "integrity": "sha512-1AaXxEPfXT+GvTBJFuy4yXVHWJBXa4OdbIebGN/wX5DlsIkU0+wzGnd2lOzokSk51d5LUmqjgBLRLlypLUqInQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -2067,9 +2067,9 @@ "license": "ISC" }, "node_modules/browserslist": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", "dev": true, "funding": [ { @@ -2087,11 +2087,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.9.0", - "caniuse-lite": "^1.0.30001759", - "electron-to-chromium": "^1.5.263", - "node-releases": "^2.0.27", - "update-browserslist-db": "^1.2.0" + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -2253,9 +2253,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001781", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001781.tgz", - "integrity": "sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==", + "version": "1.0.30001788", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001788.tgz", + "integrity": "sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ==", "dev": true, "funding": [ { @@ -2875,9 +2875,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.328", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.328.tgz", - "integrity": "sha512-QNQ5l45DzYytThO21403XN3FvK0hOkWDG8viNf6jqS42msJ8I4tGDSpBCgvDRRPnkffafiwAym2X2eHeGD2V0w==", + "version": "1.5.340", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.340.tgz", + "integrity": "sha512-908qahOGocRMinT2nM3ajCEM99H4iPdv84eagPP3FfZy/1ZGeOy2CZYzjhms81ckOPCXPlW7LkY4XpxD8r1DrA==", "dev": true, "license": "ISC" }, @@ -3140,9 +3140,9 @@ "license": "MIT" }, "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -3360,16 +3360,6 @@ "reusify": "^1.0.4" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "pend": "~1.2.0" - } - }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -3588,9 +3578,9 @@ "license": "MIT" }, "node_modules/fstream/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -3903,9 +3893,9 @@ } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", "dev": true, "license": "MIT", "dependencies": { @@ -4552,9 +4542,9 @@ "license": "MIT" }, "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -4933,13 +4923,13 @@ } }, "node_modules/minimatch": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", - "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^5.0.2" + "brace-expansion": "^5.0.5" }, "engines": { "node": "18 || 20 || >=22" @@ -5033,9 +5023,9 @@ "license": "MIT" }, "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", - "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "dependencies": { @@ -5157,9 +5147,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.36", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", - "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", + "version": "2.0.37", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.37.tgz", + "integrity": "sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==", "dev": true, "license": "MIT" }, @@ -5295,9 +5285,9 @@ "license": "MIT" }, "node_modules/nyc/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -5813,9 +5803,9 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.5.tgz", + "integrity": "sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -5981,9 +5971,9 @@ } }, "node_modules/prettier": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", - "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", + "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", "dev": true, "license": "MIT", "bin": { @@ -6049,9 +6039,9 @@ } }, "node_modules/qs": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", - "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -6310,9 +6300,9 @@ "license": "MIT" }, "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -6533,14 +6523,14 @@ } }, "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "object-inspect": "^1.13.4" }, "engines": { "node": ">= 0.4" @@ -7024,9 +7014,9 @@ "license": "MIT" }, "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -7093,14 +7083,14 @@ } }, "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.5.0", - "picomatch": "^4.0.3" + "picomatch": "^4.0.4" }, "engines": { "node": ">=12.0.0" @@ -7294,9 +7284,9 @@ "license": "MIT" }, "node_modules/undici": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.24.6.tgz", - "integrity": "sha512-Xi4agocCbRzt0yYMZGMA6ApD7gvtUFaxm4ZmeacWI4cZxaF6C+8I8QfofC20NAePiB/IcvZmzkJ7XPa471AEtA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.25.0.tgz", + "integrity": "sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ==", "dev": true, "license": "MIT", "engines": { @@ -7794,14 +7784,17 @@ } }, "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.3.0.tgz", + "integrity": "sha512-PtGEvEP30p7sbIBJKUBjUnqgTVOyMURc4dLo9iNyAJnNIEz9pm88cCXF21w94Kg3k6RXkeZh5DHOGS0qEONvNQ==", "dev": true, "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "pend": "~1.2.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/yazl": { diff --git a/package.json b/package.json index 81edcd83..752d3070 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "vscode:prepublish": "npm run compile", "build": "mkdir -p build && vsce package --out build/", "ext": "npm run build && code --install-extension $(ls -t build/* | head -n1) --force", - "cli": "npm run compile && npm unlink auto-commit-msg && npm link auto-commit-msg", + "cli": "npm run compile && (npm unlink -g auto-commit-msg || true) && npm link", "preversion": "npm run checks", "version": "npm run build", "postversion": "git push --follow-tags", @@ -34,12 +34,12 @@ "engines": { "node": ">=22", "npm": ">=10", - "vscode": "^1.92.0" + "vscode": "^1.116.0" }, "devDependencies": { "@types/mocha": "^10.0.3", "@types/node": "^22.4.1", - "@types/vscode": "^1.92.0", + "@types/vscode": "^1.116.0", "@typescript-eslint/eslint-plugin": "^8.12.2", "@typescript-eslint/parser": "^8.12.2", "@vscode/vsce": "^3.0.0", From 194f6dab25a8f5b514020f3df1cb2c31b33f38eb Mon Sep 17 00:00:00 2001 From: Michael Currin <18750745+MichaelCurrin@users.noreply.github.com> Date: Tue, 21 Apr 2026 15:38:53 +0200 Subject: [PATCH 13/19] build(deps): update package-lock.json and package.json --- package-lock.json | 617 +++++++++++++++++++++++++++++++++++++++++++--- package.json | 4 +- 2 files changed, 586 insertions(+), 35 deletions(-) diff --git a/package-lock.json b/package-lock.json index 299325b5..0a839758 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,6 +23,7 @@ "eslint": "^8.57.1", "mocha": "^10.0.0", "nyc": "^17.1.0", + "pkg": "^5.8.1", "prettier": "^3.0.3", "source-map-support": "^0.5.20", "typescript": "^5.6.3", @@ -1873,6 +1874,16 @@ "dev": true, "license": "Python-2.0" }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -1890,6 +1901,16 @@ "dev": true, "license": "MIT" }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/azure-devops-node-api": { "version": "12.5.0", "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", @@ -1930,8 +1951,7 @@ "url": "https://feross.org/support" } ], - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/baseline-browser-mapping": { "version": "2.10.20", @@ -2005,7 +2025,6 @@ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -2120,7 +2139,6 @@ } ], "license": "MIT", - "optional": true, "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -2390,8 +2408,7 @@ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true, - "license": "ISC", - "optional": true + "license": "ISC" }, "node_modules/clean-stack": { "version": "2.2.0", @@ -2598,7 +2615,6 @@ "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "mimic-response": "^3.1.0" }, @@ -2615,7 +2631,6 @@ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, "license": "MIT", - "optional": true, "engines": { "node": ">=4.0.0" } @@ -2702,7 +2717,6 @@ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "dev": true, "license": "Apache-2.0", - "optional": true, "engines": { "node": ">=8" } @@ -2717,6 +2731,29 @@ "node": ">=0.3.1" } }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dir-glob/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -2908,7 +2945,6 @@ "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "once": "^1.4.0" } @@ -3277,7 +3313,6 @@ "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", "dev": true, "license": "(MIT OR WTFPL)", - "optional": true, "engines": { "node": ">=6" } @@ -3487,6 +3522,50 @@ "node": ">= 6" } }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/from2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/from2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/from2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/fromentries": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", @@ -3513,8 +3592,7 @@ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true, - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/fs-extra": { "version": "11.3.4", @@ -3721,8 +3799,7 @@ "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", "dev": true, - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/glob": { "version": "11.1.0", @@ -3826,6 +3903,16 @@ "dev": true, "license": "MIT" }, + "node_modules/has": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -4028,8 +4115,7 @@ "url": "https://feross.org/support" } ], - "license": "BSD-3-Clause", - "optional": true + "license": "BSD-3-Clause" }, "node_modules/ignore": { "version": "7.0.5", @@ -4115,8 +4201,24 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, - "license": "ISC", - "optional": true + "license": "ISC" + }, + "node_modules/into-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-6.0.0.tgz", + "integrity": "sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "from2": "^2.3.0", + "p-is-promise": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/is-binary-path": { "version": "2.1.0", @@ -4131,6 +4233,19 @@ "node": ">=8" } }, + "node_modules/is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-docker": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", @@ -4914,7 +5029,6 @@ "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, "license": "MIT", - "optional": true, "engines": { "node": ">=10" }, @@ -4976,8 +5090,7 @@ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true, - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/mocha": { "version": "10.8.2", @@ -5089,6 +5202,31 @@ "dev": true, "license": "MIT" }, + "node_modules/multistream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/multistream/-/multistream-4.1.0.tgz", + "integrity": "sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "once": "^1.4.0", + "readable-stream": "^3.6.0" + } + }, "node_modules/mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", @@ -5117,7 +5255,6 @@ "integrity": "sha512-6u9UwL0HlAl21+agMN3YAMXcKByMqwGx+pq+P76vii5f7hTPtKDp08/H9py6DY+cfDw7kQNTGEj/rly3IgbNQA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "semver": "^7.3.5" }, @@ -5133,6 +5270,27 @@ "license": "MIT", "optional": true }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/node-preload": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", @@ -5560,6 +5718,16 @@ "node": ">= 0.8.0" } }, + "node_modules/p-is-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", + "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -5785,6 +5953,13 @@ "node": ">=8" } }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, "node_modules/path-scurry": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", @@ -5852,6 +6027,40 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pkg": { + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/pkg/-/pkg-5.8.1.tgz", + "integrity": "sha512-CjBWtFStCfIiT4Bde9QpJy0KeH19jCfwZRJqHFDFXfhUklCx8JoFmMj3wgnEYIwGmZVNkhsStPHEOnrtrQhEXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/generator": "7.18.2", + "@babel/parser": "7.18.4", + "@babel/types": "7.19.0", + "chalk": "^4.1.2", + "fs-extra": "^9.1.0", + "globby": "^11.1.0", + "into-stream": "^6.0.0", + "is-core-module": "2.9.0", + "minimist": "^1.2.6", + "multistream": "^4.1.0", + "pkg-fetch": "3.4.2", + "prebuild-install": "7.1.1", + "resolve": "^1.22.0", + "stream-meter": "^1.0.4" + }, + "bin": { + "pkg": "lib-es5/bin.js" + }, + "peerDependencies": { + "node-notifier": ">=9.0.1" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -5921,6 +6130,217 @@ "node": ">=8" } }, + "node_modules/pkg-fetch": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/pkg-fetch/-/pkg-fetch-3.4.2.tgz", + "integrity": "sha512-0+uijmzYcnhC0hStDjm/cl2VYdrmVVBpe7Q8k9YBojxmR5tG8mvR9/nooQq3QSXiQqORDVOTY3XqMEqJVIzkHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "fs-extra": "^9.1.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.6", + "progress": "^2.0.3", + "semver": "^7.3.5", + "tar-fs": "^2.1.1", + "yargs": "^16.2.0" + }, + "bin": { + "pkg-fetch": "lib-es5/bin.js" + } + }, + "node_modules/pkg-fetch/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/pkg-fetch/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pkg-fetch/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg/node_modules/@babel/generator": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", + "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.2", + "@jridgewell/gen-mapping": "^0.3.0", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/pkg/node_modules/@babel/parser": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.4.tgz", + "integrity": "sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow==", + "dev": true, + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pkg/node_modules/@babel/types": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz", + "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/pkg/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pkg/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/pkg/node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg/node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true, + "license": "MIT" + }, + "node_modules/pkg/node_modules/prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pkg/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -6006,13 +6426,22 @@ "node": ">=8" } }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/pump": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -6091,7 +6520,6 @@ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "optional": true, "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -6121,7 +6549,6 @@ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, "license": "MIT", - "optional": true, "engines": { "node": ">=0.10.0" } @@ -6191,7 +6618,6 @@ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -6254,6 +6680,28 @@ "dev": true, "license": "ISC" }, + "node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -6264,6 +6712,22 @@ "node": ">=4" } }, + "node_modules/resolve/node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/reusify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", @@ -6610,8 +7074,7 @@ "url": "https://feross.org/support" } ], - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/simple-get": { "version": "4.0.1", @@ -6633,7 +7096,6 @@ } ], "license": "MIT", - "optional": true, "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", @@ -6774,13 +7236,55 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/stream-meter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/stream-meter/-/stream-meter-1.0.4.tgz", + "integrity": "sha512-4sOEtrbgFotXwnEuzzsQBYEV1elAeFSO8rSGeTwabuX1RRn/kEq9JVH7I0MRBhKVRR0sJkr0M0QCH7yOLf9fhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "^2.1.4" + } + }, + "node_modules/stream-meter/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/stream-meter/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/stream-meter/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -6902,6 +7406,19 @@ "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/table": { "version": "6.9.0", "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", @@ -6948,7 +7465,6 @@ "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -6962,7 +7478,6 @@ "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -7140,6 +7655,16 @@ "node": ">=14.14" } }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -7153,6 +7678,13 @@ "node": ">=8.0" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, + "license": "MIT" + }, "node_modules/traverse": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", @@ -7199,7 +7731,6 @@ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, "license": "Apache-2.0", - "optional": true, "dependencies": { "safe-buffer": "^5.0.1" }, @@ -7523,6 +8054,13 @@ "node": ">= 6" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, + "license": "BSD-2-Clause" + }, "node_modules/whatwg-encoding": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", @@ -7547,6 +8085,17 @@ "node": ">=18" } }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index 752d3070..79b9de60 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,8 @@ "vscode:prepublish": "npm run compile", "build": "mkdir -p build && vsce package --out build/", "ext": "npm run build && code --install-extension $(ls -t build/* | head -n1) --force", - "cli": "npm run compile && (npm unlink -g auto-commit-msg || true) && npm link", + "cli:install": "npm run compile && (npm unlink -g auto-commit-msg || true) && npm link", + "cli:build": "pkg out/cli/diffIndexGenerateCommit.js --targets node18-linux,node18-macos,node18-win --output build-cli/acm", "preversion": "npm run checks", "version": "npm run build", "postversion": "git push --follow-tags", @@ -46,6 +47,7 @@ "eslint": "^8.57.1", "mocha": "^10.0.0", "nyc": "^17.1.0", + "pkg": "^5.8.1", "prettier": "^3.0.3", "source-map-support": "^0.5.20", "typescript": "^5.6.3", From 2f8b0fc8615d995f3b2c6bca0eaf6c0c36bb71e2 Mon Sep 17 00:00:00 2001 From: Michael Currin <18750745+MichaelCurrin@users.noreply.github.com> Date: Tue, 21 Apr 2026 15:38:56 +0200 Subject: [PATCH 14/19] build: update Makefile --- Makefile | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 35d8819f..0849df77 100644 --- a/Makefile +++ b/Makefile @@ -58,16 +58,14 @@ e ext: npm run ext # Build and install only the CLI tools. -cli: +cli-install: npm run checks - npm run cli + npm run cli:install # Build CLI tools for distribution. cli-build: rm -f $(CLI_BUILD_DIR)/* - npx --yes pkg out/cli/diffIndexGenerateCommit.js \ - --targets node18-linux,node18-macos,node18-win \ - --output $(CLI_BUILD_DIR)/acm + npm run cli:build ### Deploy From 9771df48b7ed1f91ca7f6b1b267d62f4e8e56864 Mon Sep 17 00:00:00 2001 From: Michael Currin <18750745+MichaelCurrin@users.noreply.github.com> Date: Tue, 21 Apr 2026 15:39:09 +0200 Subject: [PATCH 15/19] docs: update cli.md, shell/README.md and TODO.md --- docs/cli.md | 41 +++++++++++------------------------------ shell/README.md | 13 ++++++++----- shell/TODO.md | 3 ++- 3 files changed, 21 insertions(+), 36 deletions(-) diff --git a/docs/cli.md b/docs/cli.md index 41de3870..f64787c0 100644 --- a/docs/cli.md +++ b/docs/cli.md @@ -5,39 +5,22 @@ See steps below to setup and run the tool in the CLI. VS Code is not needed. For development, see [CLI Development](development/cli.md). -## Requirements +_This should work on Windows too but has not been tested yet._ -- Node (see version in [package.json](/package.json)) -- Git -_This should work on Windows too but has not been tested yet._ +## Install -## Setup +Requires Git and Node. -### Clone the repo + ```sh $ git clone git@github.com:MichaelCurrin/auto-commit-msg.git $ cd auto-commit-msg -``` - -### Install dependencies - -```sh -$ npm ci -``` - -### Build and link the CLI tools - -```sh -$ npm run cli -``` - -Verify installation: - -```sh -$ acm -h -$ gacm -h +$ npm install +$ npm run cli:install ``` ## Usage @@ -55,12 +38,12 @@ TODO -c not just --cached but pass through as --cached. This is the **main** command you should use. -Note this actually **commit**, so if you want to experiment with commit output **without** committing, use the command below instead. +Note this will **commit**, so if you want to experiment with commit output **without** committing, use the command below instead. No flags are needed. ```sh -$ gacm +$ gacm --help ``` ### Check Git changes and generate commit message @@ -70,15 +53,13 @@ This will **not** commit. No flags are needed. ```sh -$ acm +$ acm --help ``` ### Generate a message from staged changes This is a simpler command which does not interact with Git, intended for integrating with the Bash shell. -See [shell/acm.sh](/shell/acm.sh) if you want to use that script or write your own shell script. That relies on using this executable Node script - ```sh $ auto_commit_message_generate "$CHANGES" ``` diff --git a/shell/README.md b/shell/README.md index 30b6c61a..72ac7f63 100644 --- a/shell/README.md +++ b/shell/README.md @@ -1,18 +1,21 @@ # Shell -See [acm-hook.sh](acm-hook.sh). +See [acm-hook.sh](acm-hook.sh) script. -A CLI script that bypasses using VS Code or an extension. -It will get output from Git, send it to Node CLI entry-point tool and print -it. This can be used as part of Git commit message hook flow (pre-commit hook). +A Bash CLI script that bypasses using VS Code or an extension. It will get output from Git, send it to Node CLI entry-point tool and print +it. +This can be used as part of Git commit message hook flow such as a **pre-commit hook**. + +> [!NOTE] +> For **cross-platform support**, see [CLI docs](/docs/cli.md) as that uses Node instead of Bash and also supports creating a pre-built binary for distribution. Also that approach uses a new command which wraps the Git commit logic, while shell acm-hook.sh script works the opposite way as called by Git. ## Setup If you want to use the hook: -1. Follow instructions to install the TS command globally as per [src/cli/README.md](/src/cli/README.md) +1. Follow instructions to install the commands globally as per [CLI docs](/docs/cli.md). 1. Install the pre-commit hook. ```sh $ cp shell/acm-hook.sh YOUR_PROJECT/.hooks/pre-commit diff --git a/shell/TODO.md b/shell/TODO.md index 15d9fafa..745e9b54 100644 --- a/shell/TODO.md +++ b/shell/TODO.md @@ -6,9 +6,10 @@ of template, so it that can be passed on. - [ ] Add a flag for staged to get `--cached` flag. - [ ] How to automated the install process for upgrades. Maybe the JS + shell script as NPM package or at least on GitHub with cURL install. - [ ] Figure out how to switch between staged and not, with `--cached`. Like passing a param to the shell script and having two aliases. Or to have it as pass of the shell script to fallback to all if anything is staged. Or just control with filenames e.g. `git c .` or `git c package*` - oh wait, the shell script doesn't look at what is passed to `git commit`, only what is staged or not. -- Fix bug where message is on modified and staged but only staged is committed with gacm or acm +- [ ] Fix bug where message is on modified and staged but only staged is committed with gacm or acm If the flag is omitted, then the standard `git status` logic is followed: look for staged changes and use them, otherwise use unstaged changes. there's a problem - commit does not take cached flag - but it will use implied staged or not. so do not pass through. BUT could look at advanced mode of pass through names of files to commit IF they are handled by status and commit, but using manual git add is good enough probably. esp for untracked files which need add anyway. +- [ ] See if it is possible to make the shell script here shorter and use the logic in acm instead and a minimal .sh hook file. From 8c6d0c376df83629df16c6cca27f7a7863fde77e Mon Sep 17 00:00:00 2001 From: Michael Currin <18750745+MichaelCurrin@users.noreply.github.com> Date: Tue, 21 Apr 2026 15:39:12 +0200 Subject: [PATCH 16/19] update acm-hook.sh --- shell/acm-hook.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/shell/acm-hook.sh b/shell/acm-hook.sh index 008ac235..16661d55 100755 --- a/shell/acm-hook.sh +++ b/shell/acm-hook.sh @@ -1,12 +1,12 @@ #!/usr/bin/env bash -# CLI test for autofill hook. +# AutoCommit Messsage CLI script for autofill hook. # # See shell/README.md doc. set -e GENERATE_CMD='auto_commit_msg_generate' -if ! command -v "$GENERATE_CMD" &> /dev/null; then +if ! command -v "$GENERATE_CMD" &>/dev/null; then echo "Error: $GENERATE_CMD could not be found" exit 1 fi @@ -20,9 +20,9 @@ echo "COMMIT_MSG_FILE = $COMMIT_MSG_FILE" echo "COMMIT_SOURCE = $COMMIT_SOURCE" # TODO: Test this - this conditional is untested. -if [ "$COMMIT_SOURCE" = 'template']; then +if [ "$COMMIT_SOURCE" = 'template' ]; then echo "Current commit message" - <"$COMMIT_MSG_FILE" + cat "$COMMIT_MSG_FILE" fi CHANGES=$(git diff-index --name-status HEAD) From de0fe7706183fd6c2bf674d4879dda4b95690c35 Mon Sep 17 00:00:00 2001 From: Michael Currin <18750745+MichaelCurrin@users.noreply.github.com> Date: Tue, 21 Apr 2026 15:39:19 +0200 Subject: [PATCH 17/19] docs: update diffIndexGenerate.ts and diffIndexGenerateCommit.ts --- src/cli/diffIndexGenerate.ts | 2 +- src/cli/diffIndexGenerateCommit.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cli/diffIndexGenerate.ts b/src/cli/diffIndexGenerate.ts index 42eb4d9e..204c1398 100644 --- a/src/cli/diffIndexGenerate.ts +++ b/src/cli/diffIndexGenerate.ts @@ -1,6 +1,6 @@ #!/usr/bin/env node /** - * AutoCommitMsg CLI script. + * AutoCommitMsg CLI script - to check Git changes and generate a commit message. */ import { execFileSync } from "child_process"; import { generateMsg } from "../prepareCommitMsg"; diff --git a/src/cli/diffIndexGenerateCommit.ts b/src/cli/diffIndexGenerateCommit.ts index fde9e61a..f18f0604 100644 --- a/src/cli/diffIndexGenerateCommit.ts +++ b/src/cli/diffIndexGenerateCommit.ts @@ -1,6 +1,6 @@ #!/usr/bin/env node /** - * Git commit AutoCommitMsg script. + * Git commit AutoCommitMsg script - to generate a commit message and commit it. */ import { execFileSync } from "child_process"; import { generateCommitMessage } from "./diffIndexGenerate"; From bc201ba0db4a7a4d6cb464c7a012544d1c7f82e0 Mon Sep 17 00:00:00 2001 From: Michael Currin <18750745+MichaelCurrin@users.noreply.github.com> Date: Tue, 21 Apr 2026 15:43:18 +0200 Subject: [PATCH 18/19] update TODO.md --- shell/TODO.md | 1 + 1 file changed, 1 insertion(+) diff --git a/shell/TODO.md b/shell/TODO.md index 745e9b54..12ea77c3 100644 --- a/shell/TODO.md +++ b/shell/TODO.md @@ -13,3 +13,4 @@ of template, so it that can be passed on. there's a problem - commit does not take cached flag - but it will use implied staged or not. so do not pass through. BUT could look at advanced mode of pass through names of files to commit IF they are handled by status and commit, but using manual git add is good enough probably. esp for untracked files which need add anyway. - [ ] See if it is possible to make the shell script here shorter and use the logic in acm instead and a minimal .sh hook file. +- [ ] Fix issue where if using the `cli:install` command then doing a build that removes everything means the commands don't work. Perhaps a **different output directory**. From 4cc20d77644919754a8291ae8af1a0fc0fbf66cb Mon Sep 17 00:00:00 2001 From: Michael Currin <18750745+MichaelCurrin@users.noreply.github.com> Date: Tue, 21 Apr 2026 15:48:36 +0200 Subject: [PATCH 19/19] update cli.md, TODO.md and acm-hook.sh --- docs/cli.md | 2 ++ shell/TODO.md | 1 + shell/acm-hook.sh | 6 ++---- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/cli.md b/docs/cli.md index f64787c0..07a6abab 100644 --- a/docs/cli.md +++ b/docs/cli.md @@ -23,6 +23,8 @@ $ npm install $ npm run cli:install ``` +To setup as a pre-commit hook, see [Shell](/shell/) + ## Usage Use the `-h` or `--help` flags with any of these to avoid making changes. diff --git a/shell/TODO.md b/shell/TODO.md index 12ea77c3..7df3a31c 100644 --- a/shell/TODO.md +++ b/shell/TODO.md @@ -14,3 +14,4 @@ of template, so it that can be passed on. BUT could look at advanced mode of pass through names of files to commit IF they are handled by status and commit, but using manual git add is good enough probably. esp for untracked files which need add anyway. - [ ] See if it is possible to make the shell script here shorter and use the logic in acm instead and a minimal .sh hook file. - [ ] Fix issue where if using the `cli:install` command then doing a build that removes everything means the commands don't work. Perhaps a **different output directory**. +- [ ] Rename - this doesn't have to be shell anymore. Like `hooks`. Just fix any references to shell directory. diff --git a/shell/acm-hook.sh b/shell/acm-hook.sh index 16661d55..1e535cb2 100755 --- a/shell/acm-hook.sh +++ b/shell/acm-hook.sh @@ -1,7 +1,6 @@ #!/usr/bin/env bash -# AutoCommit Messsage CLI script for autofill hook. -# -# See shell/README.md doc. +# AutoCommit Messsage hook. +# Generate a commit message and enter it as the pre-filled message when committing. set -e GENERATE_CMD='auto_commit_msg_generate' @@ -19,7 +18,6 @@ echo "COMMIT_MSG_FILE = $COMMIT_MSG_FILE" # Either 'message' or 'template' echo "COMMIT_SOURCE = $COMMIT_SOURCE" -# TODO: Test this - this conditional is untested. if [ "$COMMIT_SOURCE" = 'template' ]; then echo "Current commit message" cat "$COMMIT_MSG_FILE"