diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml new file mode 100644 index 0000000..38dd0f1 --- /dev/null +++ b/.github/workflows/npm-publish.yml @@ -0,0 +1,51 @@ +name: Publish to npm + +on: + release: + types: [created] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: '18.x' + registry-url: 'https://registry.npmjs.org' + + - name: Install pnpm + uses: pnpm/action-setup@v2 + with: + version: 8 + run_install: false + + - name: Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + + - uses: actions/cache@v3 + name: Setup pnpm cache + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: pnpm install + + - name: Lint + run: pnpm run lint + + - name: Build + run: pnpm run build + + - name: Test + run: pnpm test -- --watchAll=false + + - name: Publish to npm + run: pnpm publish --no-git-checks + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..91ae7d6 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,52 @@ +name: Run Tests + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + test: + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [18.x, 20.x] + + steps: + - uses: actions/checkout@v4 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + + - name: Install pnpm + uses: pnpm/action-setup@v2 + with: + version: 8 + run_install: false + + - name: Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + + - uses: actions/cache@v3 + name: Setup pnpm cache + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: pnpm install + + - name: Lint + run: pnpm run lint + + - name: Build + run: pnpm run build + + - name: Run tests + run: pnpm test -- --watchAll=false diff --git a/.gitignore b/.gitignore index 76add87..39e8ad4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,6 @@ node_modules -dist \ No newline at end of file +dist +*.tgz +.npmrc +.npm +npm-debug.log* \ No newline at end of file diff --git a/README.md b/README.md index 865e431..c3d6259 100644 --- a/README.md +++ b/README.md @@ -10,15 +10,45 @@ Because this helper is designed to allow sharing credentials on the same machine ## Installation and Usage -This helper is written in Typescript and compiles down to two Javascript scripts, one for the server and one for the client. +This helper is written in TypeScript and can be installed globally via npm or pnpm. -### Download +### Installation Options -Download the latest release from this repo. The release consists of a filed named `git-credential-forwarder.zip` which contains two Javascript scripts: `gcf-server.js` and `gcf-client.js`. These can be placed wherever you want, but these instructions assume they are placed in the home directories of the host and container. +#### Global Installation (Recommended) + +Install the package globally using npm or pnpm: + +``` +npm install -g git-credential-forwarder +# or +pnpm add -g git-credential-forwarder +``` + +This will make the commands `gcf-server` and `gcf-client` available globally. + +#### Manual Download + +Alternatively, you can download the latest release from this repo. The release consists of a file named `git-credential-forwarder.zip` which contains two JavaScript scripts: `gcf-server.js` and `gcf-client.js`. These can be placed wherever you want. + +After downloading, make the scripts executable: + +``` +chmod +x gcf-server.js gcf-client.js +``` ### On the host -Run `node ~/gcf-server.js`. This will launch the server and it will listen for TCP connections on localhost at a random port which will be displayed in the console. You will need to keep this console/terminal open. +If installed globally: +``` +gcf-server +``` + +If using manual download: +``` +./gcf-server.js +``` + +This will launch the server and it will listen for TCP connections on localhost at a random port which will be displayed in the console. You will need to keep this console/terminal open. Notes: @@ -26,13 +56,20 @@ Notes: ### In the container -Run `export GIT_CREDENTIAL_FORWARDER_SERVER="host.Docker.internal:PORT` where PORT is replaced with the port displayed when you ran the server. +Run `export GIT_CREDENTIAL_FORWARDER_SERVER="host.docker.internal:PORT"` where PORT is replaced with the port displayed when you ran the server. + +Edit your git configuration file to call the client as a git credential helper: -Edit your git configuration file to call the client you just complied as a git credential helper, as follows: +If installed globally: +``` +[credential] + helper = "!f() { gcf-client $*; }; f" +``` +If using manual download: ``` [credential] - helper = "!f() { node ~/gcf-client.js $*; }; f" + helper = "!f() { /path/to/gcf-client.js $*; }; f" ``` Run git normally and all requests for credentials should be passed through to the host which will handle appropriately on the host side. @@ -46,14 +83,33 @@ Notes: Here's a strategy to make this fairly easy to use with a Docker container built with a Dockerfile. +#### Option 1: Using npm or pnpm (Recommended) + +On the host, set a specific port that you will listen on by configuring the env variable `GIT_CREDENTIAL_FORWARDER_PORT`. + +Add these lines in the Dockerfile: + +``` +# Install Node.js and npm/pnpm first if needed +RUN npm install -g git-credential-forwarder +# or +RUN pnpm add -g git-credential-forwarder + +RUN git config --global credential.helper '!f(){ gcf-client $*; }; f' +ENV GIT_CREDENTIAL_FORWARDER_SERVER host.docker.internal:[PORT] +``` + +#### Option 2: Using direct download + On the host, set a specific port that you will listen on by configuring the env variable `GIT_CREDENTIAL_FORWARDER_PORT`. -Add these lines in the Dockerfile +Add these lines in the Dockerfile: ``` RUN curl -LO https://github.com/sam-mfb/git-credential-forwarder/releases/download/v[VERSION]/git-credential-forwarder.zip -RUN unzip git-credential-forwarder.zip -RUN git config --global credential.helper '!f(){ node ~/gcf-client.js $*; }; f' +RUN unzip git-credential-forwarder.zip -d /usr/local/bin +RUN chmod +x /usr/local/bin/gcf-*.js +RUN git config --global credential.helper '!f(){ /usr/local/bin/gcf-client.js $*; }; f' ENV GIT_CREDENTIAL_FORWARDER_SERVER host.docker.internal:[PORT] ``` @@ -77,6 +133,21 @@ Note that this will not work from a Mac OS host per [this Docker issue](https:// You can enable debugging on either the server or the client by setting the environmental variable `GIT_CREDENTIAL_FORWARDER_DEBUG` to `true`. +## Development + +### Publishing to npm + +This project uses GitHub Actions to automatically publish to npm when a new release is created. To set this up: + +1. Generate an npm token with publish permissions +2. Add the token as a GitHub repository secret named `NPM_TOKEN` +3. Update the version in package.json +4. Commit the changes and push to GitHub +5. Create a new tag for the release: `git tag v1.x.x && git push --tags` +6. Create a new release on GitHub using the tag to trigger the publishing workflow + +The GitHub Actions workflow will use pnpm to build, test, and publish the package to the npm registry. + ## Security Nothing is perfectly secure, but I have tried to think through the security implications of running a helper like this. Here are some thoughts and I would definitely welcome any others in the issues or discussions sections: diff --git a/add-shebang.js b/add-shebang.js new file mode 100755 index 0000000..3761672 --- /dev/null +++ b/add-shebang.js @@ -0,0 +1,34 @@ +#!/usr/bin/env node +const fs = require('fs'); +const path = require('path'); + +// Add shebang and make files executable for global npm installation +const shebang = '#!/usr/bin/env node\n'; +const files = ['gcf-server.js', 'gcf-client.js']; +const distDir = path.join(__dirname, 'dist'); + +for (const file of files) { + const filePath = path.join(distDir, file); + + if (fs.existsSync(filePath)) { + const content = fs.readFileSync(filePath, 'utf8'); + + // Only add shebang if it doesn't already exist + if (!content.startsWith('#!')) { + fs.writeFileSync(filePath, shebang + content); + console.log(`Added shebang to ${file}`); + + // Make file executable + try { + fs.chmodSync(filePath, '755'); + console.log(`Made ${file} executable`); + } catch (error) { + console.error(`Failed to make ${file} executable:`, error.message); + } + } else { + console.log(`Shebang already exists in ${file}`); + } + } else { + console.error(`File ${file} does not exist in dist directory`); + } +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 13e0c66..5854046 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,25 +1,25 @@ { "name": "git-credential-forwarder", - "version": "1.1.1", + "version": "1.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "git-credential-forwarder", - "version": "1.1.1", + "version": "1.2.0", "license": "MIT", "devDependencies": { "@eslint/js": "^9.9.0", "@types/eslint__js": "^8.42.3", - "@types/jest": "^29.5.12", - "@types/node": "^20.14.15", + "@types/jest": "^29.5.14", + "@types/node": "^20.17.32", "eslint": "^9.9.0", "jest": "^29.7.0", - "prettier": "^3.3.3", + "prettier": "^3.5.3", "rimraf": "^6.0.1", - "ts-jest": "^29.2.4", - "ts-loader": "^9.5.1", - "typescript": "^5.5.4", + "ts-jest": "^29.3.2", + "ts-loader": "^9.5.2", + "typescript": "^5.8.3", "typescript-eslint": "^8.0.1", "webpack": "^5.99.7", "webpack-cli": "^5.1.4" @@ -1530,9 +1530,9 @@ } }, "node_modules/@types/jest": { - "version": "29.5.12", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", - "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1548,13 +1548,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "20.14.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.15.tgz", - "integrity": "sha512-Fz1xDMCF/B00/tYSVMlmK7hVeLh7jE5f3B7X1/hmV0MJBwE27KlS7EvD/Yp+z1lm8mVhwV5w+n8jOZG8AfTlKw==", + "version": "20.17.32", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.32.tgz", + "integrity": "sha512-zeMXFn8zQ+UkjK4ws0RiOC9EWByyW1CcVmLe+2rQocXRsGEDxUCwPEIVgpsGcLHS/P8JkT0oa3839BRABS0oPw==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.19.2" } }, "node_modules/@types/stack-utils": { @@ -5170,9 +5170,9 @@ } }, "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", "dev": true, "license": "MIT", "bin": { @@ -5560,9 +5560,9 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, "license": "ISC", "bin": { @@ -5990,21 +5990,22 @@ } }, "node_modules/ts-jest": { - "version": "29.2.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.4.tgz", - "integrity": "sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==", + "version": "29.3.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.2.tgz", + "integrity": "sha512-bJJkrWc6PjFVz5g2DGCNUo8z7oFEYaz1xP1NpeDU7KNLMWPpEyV8Chbpkn8xjzgRDpQhnGMyvyldoL7h8JXyug==", "dev": true, "license": "MIT", "dependencies": { - "bs-logger": "0.x", + "bs-logger": "^0.2.6", "ejs": "^3.1.10", - "fast-json-stable-stringify": "2.x", + "fast-json-stable-stringify": "^2.1.0", "jest-util": "^29.0.0", "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.7.1", + "type-fest": "^4.39.1", + "yargs-parser": "^21.1.1" }, "bin": { "ts-jest": "cli.js" @@ -6039,9 +6040,9 @@ } }, "node_modules/ts-loader": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", - "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.2.tgz", + "integrity": "sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==", "dev": true, "license": "MIT", "dependencies": { @@ -6092,10 +6093,23 @@ "node": ">=4" } }, + "node_modules/type-fest": { + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.40.1.tgz", + "integrity": "sha512-9YvLNnORDpI+vghLU/Nf+zSv0kL47KbVJ1o3sKgoTefl6i+zebxbiDQWoe/oWWqPhIgQdRZRT1KA9sCPL810SA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -6304,9 +6318,9 @@ } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "dev": true, "license": "MIT" }, diff --git a/package.json b/package.json index 478c379..1702a7c 100644 --- a/package.json +++ b/package.json @@ -1,32 +1,63 @@ { "name": "git-credential-forwarder", - "version": "1.1.1", + "version": "1.2.0", "description": "utilities for forwarding git credential helper commands to another git installation (e.g. container to host)", "main": "dist/index.js", + "bin": { + "git-credential-forwarder-server": "./dist/gcf-server.js", + "git-credential-forwarder-client": "./dist/gcf-client.js", + "gcf-server": "./dist/gcf-server.js", + "gcf-client": "./dist/gcf-client.js" + }, "scripts": { - "build": "rimraf ./dist && webpack", + "build": "rimraf ./dist && webpack && node ./add-shebang.js", "build-mock-git": "rimraf ./src/__tests__/dist && webpack -c ./webpack.mock-git.js", "zip": "zip -j dist/git-credential-forwarder.zip dist/gcf-*", "test": "jest --watch", "e2e-test": "jest -c ./jest.e2e.config.js", "lint": "eslint .", "fix-formatting": "prettier --write --config ./prettier.config.js ./src/", - "check-formatting": "prettier --check --config ./prettier.config.js ./src/" + "check-formatting": "prettier --check --config ./prettier.config.js ./src/", + "prepublishOnly": "npm run build && npm run lint && npm test -- --watchAll=false" }, "author": "Sam Davidoff", "license": "MIT", + "keywords": [ + "git", + "credential", + "helper", + "docker", + "container", + "forwarder" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/sam-mfb/git-credential-forwarder.git" + }, + "bugs": { + "url": "https://github.com/sam-mfb/git-credential-forwarder/issues" + }, + "homepage": "https://github.com/sam-mfb/git-credential-forwarder#readme", + "engines": { + "node": ">=18.0.0" + }, + "files": [ + "dist", + "README.md", + "LICENSE.md" + ], "devDependencies": { "@eslint/js": "^9.9.0", "@types/eslint__js": "^8.42.3", - "@types/jest": "^29.5.12", - "@types/node": "^20.14.15", + "@types/jest": "^29.5.14", + "@types/node": "^20.17.32", "eslint": "^9.9.0", "jest": "^29.7.0", - "prettier": "^3.3.3", + "prettier": "^3.5.3", "rimraf": "^6.0.1", - "ts-jest": "^29.2.4", - "ts-loader": "^9.5.1", - "typescript": "^5.5.4", + "ts-jest": "^29.3.2", + "ts-loader": "^9.5.2", + "typescript": "^5.8.3", "typescript-eslint": "^8.0.1", "webpack": "^5.99.7", "webpack-cli": "^5.1.4" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b572daf..3619cf0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,35 +15,35 @@ importers: specifier: ^8.42.3 version: 8.42.3 '@types/jest': - specifier: ^29.5.12 - version: 29.5.12 + specifier: ^29.5.14 + version: 29.5.14 '@types/node': - specifier: ^20.14.15 - version: 20.14.15 + specifier: ^20.17.32 + version: 20.17.32 eslint: specifier: ^9.9.0 version: 9.9.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.15) + version: 29.7.0(@types/node@20.17.32) prettier: - specifier: ^3.3.3 - version: 3.3.3 + specifier: ^3.5.3 + version: 3.5.3 rimraf: specifier: ^6.0.1 version: 6.0.1 ts-jest: - specifier: ^29.2.4 - version: 29.2.4(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.14.15))(typescript@5.5.4) + specifier: ^29.3.2 + version: 29.3.2(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.17.32))(typescript@5.8.3) ts-loader: - specifier: ^9.5.1 - version: 9.5.1(typescript@5.5.4)(webpack@5.99.7) + specifier: ^9.5.2 + version: 9.5.2(typescript@5.8.3)(webpack@5.99.7) typescript: - specifier: ^5.5.4 - version: 5.5.4 + specifier: ^5.8.3 + version: 5.8.3 typescript-eslint: specifier: ^8.0.1 - version: 8.0.1(eslint@9.9.0)(typescript@5.5.4) + version: 8.0.1(eslint@9.9.0)(typescript@5.8.3) webpack: specifier: ^5.99.7 version: 5.99.7(webpack-cli@5.1.4) @@ -57,10 +57,6 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} - engines: {node: '>=6.9.0'} - '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} @@ -123,10 +119,6 @@ packages: resolution: {integrity: sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} - engines: {node: '>=6.9.0'} - '@babel/parser@7.25.3': resolution: {integrity: sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==} engines: {node: '>=6.0.0'} @@ -438,14 +430,14 @@ packages: '@types/istanbul-reports@3.0.4': resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - '@types/jest@29.5.12': - resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} + '@types/jest@29.5.14': + resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/node@20.14.15': - resolution: {integrity: sha512-Fz1xDMCF/B00/tYSVMlmK7hVeLh7jE5f3B7X1/hmV0MJBwE27KlS7EvD/Yp+z1lm8mVhwV5w+n8jOZG8AfTlKw==} + '@types/node@20.17.32': + resolution: {integrity: sha512-zeMXFn8zQ+UkjK4ws0RiOC9EWByyW1CcVmLe+2rQocXRsGEDxUCwPEIVgpsGcLHS/P8JkT0oa3839BRABS0oPw==} '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} @@ -630,10 +622,6 @@ packages: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -731,10 +719,6 @@ packages: caniuse-lite@1.0.30001716: resolution: {integrity: sha512-49/c1+x3Kwz7ZIWt+4DvK3aMJy9oYXXG6/97JKsnjdCk/6n9vVyWL8NAwVt95Lwt9eigI10Hl782kDfZUUlRXw==} - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -769,16 +753,10 @@ packages: collect-v8-coverage@1.0.2: resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -864,10 +842,6 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - enhanced-resolve@5.17.1: - resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} - engines: {node: '>=10.13.0'} - enhanced-resolve@5.18.1: resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} engines: {node: '>=10.13.0'} @@ -891,10 +865,6 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - escape-string-regexp@2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} @@ -1099,10 +1069,6 @@ packages: graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -1600,8 +1566,8 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier@3.3.3: - resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + prettier@3.5.3: + resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} engines: {node: '>=14'} hasBin: true @@ -1689,6 +1655,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} @@ -1771,10 +1742,6 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -1836,8 +1803,8 @@ packages: peerDependencies: typescript: '>=4.2.0' - ts-jest@29.2.4: - resolution: {integrity: sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==} + ts-jest@29.3.2: + resolution: {integrity: sha512-bJJkrWc6PjFVz5g2DGCNUo8z7oFEYaz1xP1NpeDU7KNLMWPpEyV8Chbpkn8xjzgRDpQhnGMyvyldoL7h8JXyug==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -1860,8 +1827,8 @@ packages: esbuild: optional: true - ts-loader@9.5.1: - resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} + ts-loader@9.5.2: + resolution: {integrity: sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==} engines: {node: '>=12.0.0'} peerDependencies: typescript: '*' @@ -1879,6 +1846,10 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} + type-fest@4.40.1: + resolution: {integrity: sha512-9YvLNnORDpI+vghLU/Nf+zSv0kL47KbVJ1o3sKgoTefl6i+zebxbiDQWoe/oWWqPhIgQdRZRT1KA9sCPL810SA==} + engines: {node: '>=16'} + typescript-eslint@8.0.1: resolution: {integrity: sha512-V3Y+MdfhawxEjE16dWpb7/IOgeXnLwAEEkS7v8oDqNcR1oYlqWhGH/iHqHdKVdpWme1VPZ0SoywXAkCqawj2eQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1888,13 +1859,13 @@ packages: typescript: optional: true - typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + typescript@5.8.3: + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} hasBin: true - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} update-browserslist-db@1.1.3: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} @@ -2004,11 +1975,6 @@ snapshots: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - '@babel/code-frame@7.24.7': - dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.1.1 - '@babel/code-frame@7.27.1': dependencies: '@babel/helper-validator-identifier': 7.27.1 @@ -2020,7 +1986,7 @@ snapshots: '@babel/core@7.25.2': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.27.1 '@babel/generator': 7.25.0 '@babel/helper-compilation-targets': 7.25.2 '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) @@ -2064,7 +2030,7 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-module-imports': 7.24.7 '@babel/helper-simple-access': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 + '@babel/helper-validator-identifier': 7.27.1 '@babel/traverse': 7.25.3 transitivePeerDependencies: - supports-color @@ -2093,13 +2059,6 @@ snapshots: '@babel/template': 7.27.1 '@babel/types': 7.27.1 - '@babel/highlight@7.24.7': - dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.1.1 - '@babel/parser@7.25.3': dependencies: '@babel/types': 7.25.2 @@ -2180,7 +2139,7 @@ snapshots: '@babel/template@7.25.0': dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.27.1 '@babel/parser': 7.25.3 '@babel/types': 7.25.2 @@ -2192,7 +2151,7 @@ snapshots: '@babel/traverse@7.25.3': dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.27.1 '@babel/generator': 7.25.0 '@babel/parser': 7.25.3 '@babel/template': 7.25.0 @@ -2276,7 +2235,7 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 20.14.15 + '@types/node': 20.17.32 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -2289,14 +2248,14 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.15 + '@types/node': 20.17.32 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.14.15) + jest-config: 29.7.0(@types/node@20.17.32) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -2321,7 +2280,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.15 + '@types/node': 20.17.32 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -2339,7 +2298,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.14.15 + '@types/node': 20.17.32 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -2361,7 +2320,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.14.15 + '@types/node': 20.17.32 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -2431,7 +2390,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.14.15 + '@types/node': 20.17.32 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -2532,7 +2491,7 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 20.14.15 + '@types/node': 20.17.32 '@types/istanbul-lib-coverage@2.0.6': {} @@ -2544,16 +2503,16 @@ snapshots: dependencies: '@types/istanbul-lib-report': 3.0.3 - '@types/jest@29.5.12': + '@types/jest@29.5.14': dependencies: expect: 29.7.0 pretty-format: 29.7.0 '@types/json-schema@7.0.15': {} - '@types/node@20.14.15': + '@types/node@20.17.32': dependencies: - undici-types: 5.26.5 + undici-types: 6.19.8 '@types/stack-utils@2.0.3': {} @@ -2563,34 +2522,34 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.0.1(@typescript-eslint/parser@8.0.1(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4)': + '@typescript-eslint/eslint-plugin@8.0.1(@typescript-eslint/parser@8.0.1(eslint@9.9.0)(typescript@5.8.3))(eslint@9.9.0)(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 8.0.1(eslint@9.9.0)(typescript@5.5.4) + '@typescript-eslint/parser': 8.0.1(eslint@9.9.0)(typescript@5.8.3) '@typescript-eslint/scope-manager': 8.0.1 - '@typescript-eslint/type-utils': 8.0.1(eslint@9.9.0)(typescript@5.5.4) - '@typescript-eslint/utils': 8.0.1(eslint@9.9.0)(typescript@5.5.4) + '@typescript-eslint/type-utils': 8.0.1(eslint@9.9.0)(typescript@5.8.3) + '@typescript-eslint/utils': 8.0.1(eslint@9.9.0)(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.0.1 eslint: 9.9.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.5.4) + ts-api-utils: 1.3.0(typescript@5.8.3) optionalDependencies: - typescript: 5.5.4 + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.0.1(eslint@9.9.0)(typescript@5.5.4)': + '@typescript-eslint/parser@8.0.1(eslint@9.9.0)(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 8.0.1 '@typescript-eslint/types': 8.0.1 - '@typescript-eslint/typescript-estree': 8.0.1(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 8.0.1(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.0.1 debug: 4.3.6 eslint: 9.9.0 optionalDependencies: - typescript: 5.5.4 + typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -2599,21 +2558,21 @@ snapshots: '@typescript-eslint/types': 8.0.1 '@typescript-eslint/visitor-keys': 8.0.1 - '@typescript-eslint/type-utils@8.0.1(eslint@9.9.0)(typescript@5.5.4)': + '@typescript-eslint/type-utils@8.0.1(eslint@9.9.0)(typescript@5.8.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.0.1(typescript@5.5.4) - '@typescript-eslint/utils': 8.0.1(eslint@9.9.0)(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 8.0.1(typescript@5.8.3) + '@typescript-eslint/utils': 8.0.1(eslint@9.9.0)(typescript@5.8.3) debug: 4.3.6 - ts-api-utils: 1.3.0(typescript@5.5.4) + ts-api-utils: 1.3.0(typescript@5.8.3) optionalDependencies: - typescript: 5.5.4 + typescript: 5.8.3 transitivePeerDependencies: - eslint - supports-color '@typescript-eslint/types@8.0.1': {} - '@typescript-eslint/typescript-estree@8.0.1(typescript@5.5.4)': + '@typescript-eslint/typescript-estree@8.0.1(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 8.0.1 '@typescript-eslint/visitor-keys': 8.0.1 @@ -2622,18 +2581,18 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.5.4) + ts-api-utils: 1.3.0(typescript@5.8.3) optionalDependencies: - typescript: 5.5.4 + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.0.1(eslint@9.9.0)(typescript@5.5.4)': + '@typescript-eslint/utils@8.0.1(eslint@9.9.0)(typescript@5.8.3)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0) '@typescript-eslint/scope-manager': 8.0.1 '@typescript-eslint/types': 8.0.1 - '@typescript-eslint/typescript-estree': 8.0.1(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 8.0.1(typescript@5.8.3) eslint: 9.9.0 transitivePeerDependencies: - supports-color @@ -2776,10 +2735,6 @@ snapshots: ansi-regex@6.0.1: {} - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -2895,12 +2850,6 @@ snapshots: caniuse-lite@1.0.30001716: {} - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -2930,16 +2879,10 @@ snapshots: collect-v8-coverage@1.0.2: {} - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - color-convert@2.0.1: dependencies: color-name: 1.1.4 - color-name@1.1.3: {} - color-name@1.1.4: {} colorette@2.0.20: {} @@ -2952,13 +2895,13 @@ snapshots: convert-source-map@2.0.0: {} - create-jest@29.7.0(@types/node@20.14.15): + create-jest@29.7.0(@types/node@20.17.32): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.14.15) + jest-config: 29.7.0(@types/node@20.17.32) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -3005,11 +2948,6 @@ snapshots: emoji-regex@9.2.2: {} - enhanced-resolve@5.17.1: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - enhanced-resolve@5.18.1: dependencies: graceful-fs: 4.2.11 @@ -3027,8 +2965,6 @@ snapshots: escalade@3.2.0: {} - escape-string-regexp@1.0.5: {} - escape-string-regexp@2.0.0: {} escape-string-regexp@4.0.0: {} @@ -3254,8 +3190,6 @@ snapshots: graphemer@1.4.0: {} - has-flag@3.0.0: {} - has-flag@4.0.0: {} hasown@2.0.2: @@ -3385,7 +3319,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.15 + '@types/node': 20.17.32 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3 @@ -3405,16 +3339,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.14.15): + jest-cli@29.7.0(@types/node@20.17.32): dependencies: '@jest/core': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.14.15) + create-jest: 29.7.0(@types/node@20.17.32) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.14.15) + jest-config: 29.7.0(@types/node@20.17.32) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -3424,7 +3358,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.14.15): + jest-config@29.7.0(@types/node@20.17.32): dependencies: '@babel/core': 7.25.2 '@jest/test-sequencer': 29.7.0 @@ -3449,7 +3383,7 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.14.15 + '@types/node': 20.17.32 transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -3478,7 +3412,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.15 + '@types/node': 20.17.32 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -3488,7 +3422,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.14.15 + '@types/node': 20.17.32 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -3514,7 +3448,7 @@ snapshots: jest-message-util@29.7.0: dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.27.1 '@jest/types': 29.6.3 '@types/stack-utils': 2.0.3 chalk: 4.1.2 @@ -3527,7 +3461,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.14.15 + '@types/node': 20.17.32 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -3562,7 +3496,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.15 + '@types/node': 20.17.32 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -3590,7 +3524,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.15 + '@types/node': 20.17.32 chalk: 4.1.2 cjs-module-lexer: 1.3.1 collect-v8-coverage: 1.0.2 @@ -3636,7 +3570,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.14.15 + '@types/node': 20.17.32 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -3655,7 +3589,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.15 + '@types/node': 20.17.32 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -3664,23 +3598,23 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 20.14.15 + '@types/node': 20.17.32 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 20.14.15 + '@types/node': 20.17.32 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.14.15): + jest@29.7.0(@types/node@20.17.32): dependencies: '@jest/core': 29.7.0 '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.14.15) + jest-cli: 29.7.0(@types/node@20.17.32) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -3853,7 +3787,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.27.1 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -3885,7 +3819,7 @@ snapshots: prelude-ls@1.2.1: {} - prettier@3.3.3: {} + prettier@3.5.3: {} pretty-format@29.7.0: dependencies: @@ -3958,6 +3892,8 @@ snapshots: semver@7.6.3: {} + semver@7.7.1: {} + serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 @@ -4031,10 +3967,6 @@ snapshots: strip-json-comments@3.1.1: {} - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -4079,22 +4011,23 @@ snapshots: dependencies: is-number: 7.0.0 - ts-api-utils@1.3.0(typescript@5.5.4): + ts-api-utils@1.3.0(typescript@5.8.3): dependencies: - typescript: 5.5.4 + typescript: 5.8.3 - ts-jest@29.2.4(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.14.15))(typescript@5.5.4): + ts-jest@29.3.2(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.17.32))(typescript@5.8.3): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.14.15) + jest: 29.7.0(@types/node@20.17.32) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.6.3 - typescript: 5.5.4 + semver: 7.7.1 + type-fest: 4.40.1 + typescript: 5.8.3 yargs-parser: 21.1.1 optionalDependencies: '@babel/core': 7.25.2 @@ -4102,14 +4035,14 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.25.2) - ts-loader@9.5.1(typescript@5.5.4)(webpack@5.99.7): + ts-loader@9.5.2(typescript@5.8.3)(webpack@5.99.7): dependencies: chalk: 4.1.2 - enhanced-resolve: 5.17.1 + enhanced-resolve: 5.18.1 micromatch: 4.0.8 semver: 7.6.3 source-map: 0.7.4 - typescript: 5.5.4 + typescript: 5.8.3 webpack: 5.99.7(webpack-cli@5.1.4) type-check@0.4.0: @@ -4120,20 +4053,22 @@ snapshots: type-fest@0.21.3: {} - typescript-eslint@8.0.1(eslint@9.9.0)(typescript@5.5.4): + type-fest@4.40.1: {} + + typescript-eslint@8.0.1(eslint@9.9.0)(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.0.1(@typescript-eslint/parser@8.0.1(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4) - '@typescript-eslint/parser': 8.0.1(eslint@9.9.0)(typescript@5.5.4) - '@typescript-eslint/utils': 8.0.1(eslint@9.9.0)(typescript@5.5.4) + '@typescript-eslint/eslint-plugin': 8.0.1(@typescript-eslint/parser@8.0.1(eslint@9.9.0)(typescript@5.8.3))(eslint@9.9.0)(typescript@5.8.3) + '@typescript-eslint/parser': 8.0.1(eslint@9.9.0)(typescript@5.8.3) + '@typescript-eslint/utils': 8.0.1(eslint@9.9.0)(typescript@5.8.3) optionalDependencies: - typescript: 5.5.4 + typescript: 5.8.3 transitivePeerDependencies: - eslint - supports-color - typescript@5.5.4: {} + typescript@5.8.3: {} - undici-types@5.26.5: {} + undici-types@6.19.8: {} update-browserslist-db@1.1.3(browserslist@4.24.4): dependencies: diff --git a/src/server/index.ts b/src/server/index.ts index 9c87dce..19526a5 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -110,7 +110,7 @@ if (serverType === "tcp" && portEnv) { `Edit your git configuration file inside your docker container to call the git-credential-forwarder client script, for example:\n` ) configOutput(` [credential]`) - configOutput(` helper = "!f() { node ~/gcf-client.js $*; }; f"\n`) + configOutput(` helper = "!f() { gcf-client $*; }; f"\n`) try { await credentialReceiver()