From 18bc7dc4c1c6bca8a1fa3d215124d47fa0dc040e Mon Sep 17 00:00:00 2001 From: naman-contentstack Date: Thu, 30 Jul 2026 14:40:44 +0530 Subject: [PATCH] fix(content-type): replace git-diff with jsdiff to clear Snyk issue git-diff@2.0.7 is unmaintained (last published 2018) and pulls in chalk@2, diff@3, loglevel, shelljs and shelljs.exec. Snyk flagged the only vulnerable path in the monorepo through that tree: Missing Release of Resource after Effective Lifetime [Medium] SNYK-JS-INFLIGHT-6095116 git-diff@2.0.7 > shelljs@0.8.5 > glob@7.2.3 > inflight@1.0.6 Snyk reports no direct upgrade or patch, since git-diff is abandoned. Replace it with diff@^9 (jsdiff): zero runtime dependencies, bundled TypeScript types, dual CJS/ESM. It also removes the dependency on a `git` binary and the temp-file/subprocess round trip git-diff used to shell out through shelljs. buildDiffString now calls createTwoFilesPatch, which emits the `---` and `+++` file headers itself, so the hand-rolled header concatenation is gone. Output was verified equivalent: both patch strings were run through Diff2html.parse and compared on file names, added/deleted line counts, hunk headers and every line type plus content - identical. Identical inputs are also handled better. git-diff returned undefined when both sides matched, which interpolated the literal string "undefined" into the patch; createTwoFilesPatch returns a well-formed patch with no hunks. Drop @types/git-diff, since diff ships its own types. Tests: the existing spec mocked diff2html, so the generated patch was never asserted. Add two cases covering the string handed to Diff2html.parse - one for headers, hunk and changed lines, one for the identical-input case. Both were mutation-checked against a corrupted buildDiffString. Suite: 78 passed, 16 suites, tsc clean, Snyk reports no vulnerable paths across the monorepo. Bump the pinned pnpm-lock.yaml checksum in .talismanrc, which the lockfile change invalidates. The finding is the usual sha512 integrity hashes, not a secret. Note: this commit also carries a pre-existing, uncommitted version bump to 1.5.4 that was already present in package.json. Co-Authored-By: Claude Opus 5 (1M context) --- .talismanrc | 2 +- .../contentstack-content-type/package.json | 5 +- .../skills/code-review/SKILL.md | 6 +- .../contentstack-cli-content-type/SKILL.md | 2 +- .../src/core/content-type/compare.ts | 13 +- .../tests/core/content-type/compare.test.ts | 24 +- pnpm-lock.yaml | 379 ++++-------------- 7 files changed, 117 insertions(+), 314 deletions(-) diff --git a/.talismanrc b/.talismanrc index 58ae8ba6b..3b8b7cf56 100644 --- a/.talismanrc +++ b/.talismanrc @@ -1,4 +1,4 @@ fileignoreconfig: - filename: pnpm-lock.yaml - checksum: 31e333d6769adbaae042c92ea0930fab168a0e06fc1bda406d49fd1042a7a9c7 + checksum: 4dc4b2a0693ba40fd503cf52d6d69b577ec87018e4f9ab52415608c65c14f6aa version: '1.0' diff --git a/packages/contentstack-content-type/package.json b/packages/contentstack-content-type/package.json index 14c81f2ff..1f39206cc 100644 --- a/packages/contentstack-content-type/package.json +++ b/packages/contentstack-content-type/package.json @@ -1,21 +1,20 @@ { "name": "contentstack-cli-content-type", "description": "Retrieve information about Content Types in a Stack.", - "version": "1.5.3", + "version": "1.5.4", "author": "Contentstack Developer", "bugs": "https://github.com/contentstack/cli-plugins/issues", "dependencies": { "@contentstack/cli-command": "^1.8.5", "@contentstack/cli-utilities": "^1.19.0", "@types/diff2html": "^3.0.3", - "@types/git-diff": "^2.0.7", "@types/hogan.js": "^3.0.5", "@types/table": "^6.3.2", "@types/tmp": "^0.2.6", "axios": "^1.18.1", "cli-ux": "^6.0.9", + "diff": "^9.0.0", "diff2html": "^3.4.56", - "git-diff": "^2.0.7", "moment": "^2.30.1", "node-graphviz": "^0.1.1", "table": "^6.9.0", diff --git a/packages/contentstack-content-type/skills/code-review/SKILL.md b/packages/contentstack-content-type/skills/code-review/SKILL.md index 9d0809c5f..e5bc5316f 100644 --- a/packages/contentstack-content-type/skills/code-review/SKILL.md +++ b/packages/contentstack-content-type/skills/code-review/SKILL.md @@ -11,7 +11,7 @@ description: >- ## When to use - Reviewing a PR or diff before merge. -- Auditing dependency upgrades (axios, diff2html, git-diff, node-graphviz, tmp, cli-ux). +- Auditing dependency upgrades (axios, diff2html, diff, node-graphviz, tmp, cli-ux). - Changes touching compare HTML, temp files, diagram output, or `src/core/contentstack/`. ## Instructions @@ -24,7 +24,7 @@ Use **Critical** / **Important** / **Suggestion** when leaving feedback. - **Secrets**: Never approve logging of tokens, `authtoken` / `authorization` values, or raw management tokens. - **Compare / diagram**: Changes to [src/core/content-type/compare.ts](../../src/core/content-type/compare.ts) or [diagram.ts](../../src/core/content-type/diagram.ts) deserve extra scrutiny (temp files, browser open, paths, binary dependency). -- **Dependencies**: axios, diff2html, git-diff, node-graphviz, tmp, cli-ux—review changelog and supply-chain for version bumps. +- **Dependencies**: axios, diff2html, diff, node-graphviz, tmp, cli-ux—review changelog and supply-chain for version bumps. - **Quality**: TypeScript and **eslint-config-oclif-typescript** ([.eslintrc](../../.eslintrc)); behavioral changes should include or update **Jest** tests where appropriate. ### Security and privacy @@ -57,7 +57,7 @@ Use **Critical** / **Important** / **Suggestion** when leaving feedback. | Severity | Item | |----------|------| | Important | **axios**: security advisories; upgrade notes. | -| Important | **diff2html**, **git-diff**, **tmp**, **cli-ux**: behavior changes affecting compare UX. | +| Important | **diff2html**, **diff**, **tmp**, **cli-ux**: behavior changes affecting compare UX. | | Important | **node-graphviz**: compatibility with supported Node and system Graphviz. | | Suggestion | **moment** (if touched): prefer minimal churn; note maintenance status of dependencies. | diff --git a/packages/contentstack-content-type/skills/contentstack-cli-content-type/SKILL.md b/packages/contentstack-content-type/skills/contentstack-cli-content-type/SKILL.md index 4434d876d..aaf02cf86 100644 --- a/packages/contentstack-content-type/skills/contentstack-cli-content-type/SKILL.md +++ b/packages/contentstack-content-type/skills/contentstack-cli-content-type/SKILL.md @@ -100,7 +100,7 @@ Errors: response `data.errors` → `ContentstackError`; optional suffix with sta ### Compare and diagram pipelines -- **Compare**: `core/content-type/compare.ts` builds a unified diff from two JSON snapshots (`git-diff`), parses with **diff2html**, writes a **temporary HTML** file, opens it in the browser (`cli-ux` / `cli.open`). Not a terminal table. +- **Compare**: `core/content-type/compare.ts` builds a unified diff from two JSON snapshots (`diff`), parses with **diff2html**, writes a **temporary HTML** file, opens it in the browser (`cli-ux` / `cli.open`). Not a terminal table. - **Diagram**: `core/content-type/diagram.ts` builds a DOT graph, runs **node-graphviz** (`graphviz` binary must be available on the system for SVG rendering). Output path is sanitized where utilities apply. ### Commands (flags and behavior) diff --git a/packages/contentstack-content-type/src/core/content-type/compare.ts b/packages/contentstack-content-type/src/core/content-type/compare.ts index 696335191..a98028b2b 100644 --- a/packages/contentstack-content-type/src/core/content-type/compare.ts +++ b/packages/contentstack-content-type/src/core/content-type/compare.ts @@ -2,7 +2,7 @@ import cli from 'cli-ux' import * as fs from 'fs' import * as tmp from 'tmp' import * as Diff2html from 'diff2html' -import gitDiff from 'git-diff' +import {createTwoFilesPatch} from 'diff' import {BuildOutput} from '../../types' export default async function buildOutput(contentTypeName: string, previous: any, current: any): Promise { @@ -30,10 +30,13 @@ export default async function buildOutput(contentTypeName: string, previous: any } function buildDiffString(previous: any, current: any) { - return ( - `--- ${previous.uid}\t${current.updated_at}\n` + - `+++ ${current.uid}\t${current.updated_at}\n` + - gitDiff(JSON.stringify(previous, null, 2), JSON.stringify(current, null, 2)) + return createTwoFilesPatch( + previous.uid, + current.uid, + JSON.stringify(previous, null, 2), + JSON.stringify(current, null, 2), + current.updated_at, + current.updated_at, ) } diff --git a/packages/contentstack-content-type/tests/core/content-type/compare.test.ts b/packages/contentstack-content-type/tests/core/content-type/compare.test.ts index d092d9e72..746f4576e 100644 --- a/packages/contentstack-content-type/tests/core/content-type/compare.test.ts +++ b/packages/contentstack-content-type/tests/core/content-type/compare.test.ts @@ -25,11 +25,8 @@ jest.mock('diff2html', () => ({ html: jest.fn(() => '
diff-html
'), })) -jest.mock('git-diff', () => - jest.fn(() => '@@ -1 +1 @@\n+changed') -) - import fs from 'fs' +import * as Diff2html from 'diff2html' import buildOutput from '../../../src/core/content-type/compare' @@ -53,4 +50,23 @@ describe('compare buildOutput', () => { expect(written).toContain('diff-html') expect(written).toContain('diff2html') }) + + it('feeds diff2html a unified patch with file headers and the changed lines', async () => { + await buildOutput('my-ct', prev, curr) + + const patch = (Diff2html.parse as jest.Mock).mock.calls[0][0] as string + expect(patch).toContain(`--- ${prev.uid}\t${curr.updated_at}`) + expect(patch).toContain(`+++ ${curr.uid}\t${curr.updated_at}`) + expect(patch).toMatch(/^@@ .* @@$/m) + expect(patch).toContain('- "updated_at": "2020-01-01"') + expect(patch).toContain('+ "updated_at": "2021-01-01"') + }) + + it('produces a patch with no hunks when both versions are identical', async () => { + await buildOutput('my-ct', prev, prev) + + const patch = (Diff2html.parse as jest.Mock).mock.calls[0][0] as string + expect(patch).not.toContain('@@') + expect(patch).not.toContain('undefined') + }) }) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c641a7a66..128246fdf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -335,7 +335,7 @@ importers: version: 5.5.0 '@contentstack/management': specifier: ^1.30.3 - version: 1.31.0 + version: 1.30.4(debug@4.4.3) lodash: specifier: 4.18.1 version: 4.18.1 @@ -487,7 +487,7 @@ importers: version: 1.19.0(@types/node@18.19.130) '@contentstack/management': specifier: ^1.30.4 - version: 1.31.0 + version: 1.30.4(debug@4.4.3) cli-table3: specifier: ^0.6.5 version: 0.6.5 @@ -624,13 +624,13 @@ importers: version: 3.1.14(eslint@10.8.0)(typescript@5.9.3) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.9.3)) + version: 29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@4.9.5)) oclif: specifier: ^4.23.8 version: 4.23.29(@types/node@22.20.1) ts-jest: specifier: ^29.4.9 - version: 29.4.12(@babel/core@7.29.7)(@jest/transform@30.4.1)(@jest/types@30.4.1)(babel-jest@30.4.1(@babel/core@7.29.7))(jest-util@30.4.1)(jest@29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.9.3)))(typescript@5.9.3) + version: 29.4.12(@babel/core@7.29.7)(@jest/transform@30.4.1)(@jest/types@30.4.1)(babel-jest@30.4.1(@babel/core@7.29.7))(jest-util@30.4.1)(jest@29.7.0(@types/node@22.20.1))(typescript@5.9.3) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -734,9 +734,6 @@ importers: '@types/diff2html': specifier: ^3.0.3 version: 3.0.3 - '@types/git-diff': - specifier: ^2.0.7 - version: 2.0.7 '@types/hogan.js': specifier: ^3.0.5 version: 3.0.5 @@ -752,12 +749,12 @@ importers: cli-ux: specifier: ^6.0.9 version: 6.0.9 + diff: + specifier: ^9.0.0 + version: 9.0.0 diff2html: specifier: ^3.4.56 version: 3.4.56 - git-diff: - specifier: ^2.0.7 - version: 2.0.7 moment: specifier: ^2.30.1 version: 2.30.1 @@ -1246,10 +1243,10 @@ importers: dependencies: '@contentstack/cli-command': specifier: 1.8.5 - version: 1.8.5(@types/node@18.19.130) + version: 1.8.5(@types/node@22.20.1) '@contentstack/cli-utilities': specifier: 1.19.0 - version: 1.19.0(@types/node@18.19.130) + version: 1.19.0(@types/node@22.20.1) '@contentstack/json-rte-serializer': specifier: ~2.1.0 version: 2.1.0 @@ -1304,7 +1301,7 @@ importers: version: 15.1.0 oclif: specifier: ^4.23.8 - version: 4.23.29 + version: 4.23.29(@types/node@22.20.1) querystring: specifier: ^0.2.1 version: 0.2.1 @@ -2352,10 +2349,6 @@ packages: resolution: {integrity: sha512-wFmHxf2WfPVXD8uvFpaxdY882ELqYhdPu1aQM9VM/UYUtJg+7uCj9k785ujYfgbSKgxfY6APgwI++n59v3Entg==} engines: {node: '>=8.0.0'} - '@contentstack/management@1.31.0': - resolution: {integrity: sha512-Ejk7ozH0lDxa0Ozniii2hsNLr8u0XfBRNHYmLw7DFQZDuRopaIxCb+Udn2O+uP/4ffKSYVv/RVu6/GhACdtWFg==} - engines: {node: '>=8.0.0'} - '@contentstack/marketplace-sdk@1.5.4': resolution: {integrity: sha512-rqsL/FvYTqF1a1MK/AZLdWCGf7WY48f4pT/iLkwt6wxh7apxaAwWSWy9ZWRtDu7EIV9FDDTHZ33iYWKH41fnlw==} @@ -3473,9 +3466,6 @@ packages: '@types/fs-extra@11.0.4': resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} - '@types/git-diff@2.0.7': - resolution: {integrity: sha512-hipFAUcmf3c+45+Y8+J/xk7gT+0HBuT3O8OTtrnoP6R9gI0r2xESZNdYiA0pj7kQyPCwmkgbnxmfwQ9Ld2lZLQ==} - '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} @@ -5013,10 +5003,6 @@ packages: resolution: {integrity: sha512-u9gfn+BlbHcyO7vItCIC4z49LJDUt31tODzOfAuJ5R1E7IdlRL6KjugcB9zOpejD+XiR+dDZbsnHSQ3g6A/u8A==} engines: {node: '>=12'} - diff@3.5.1: - resolution: {integrity: sha512-Z3u54A8qGyqFOSr2pk0ijYs8mOE9Qz8kTvtKeBI+upoG9j04Sq+oI7W8zAJiQybDcESET8/uIdHzs0p3k4fZlw==} - engines: {node: '>=0.3.1'} - diff@4.0.4: resolution: {integrity: sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==} engines: {node: '>=0.3.1'} @@ -5808,10 +5794,6 @@ packages: get-tsconfig@4.14.0: resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} - git-diff@2.0.7: - resolution: {integrity: sha512-/+vyWaKNUJLcVT+tm5Hsly2xDcIs49EkZstxqW7ap1ZiZ0BECviLK1iv9/f4cGhlKBokeAf61QkTDnL88H+Uhg==} - engines: {node: '>= 4.8.0'} - git-raw-commits@5.0.1: resolution: {integrity: sha512-Y+csSm2GD/PCSh6Isd/WiMjNAydu0VBiG9J7EdQsNA5P9uXvLayqjmTsNlK5Gs9IhblFZqOU0yid5Il5JPoLiQ==} engines: {node: '>=18'} @@ -7007,10 +6989,6 @@ packages: resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} engines: {node: '>= 12.0.0'} - loglevel@1.9.2: - resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} - engines: {node: '>= 0.6.0'} - loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -7631,8 +7609,8 @@ packages: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} - postcss@8.5.24: - resolution: {integrity: sha512-8RyVklq0owXUTa4xlpzu4l9AaVKIdQvAcOHZWaMh98HgySsUtxRVf/chRe3dsSLqb6i40BzGRzEUddRaI+9TSw==} + postcss@8.5.25: + resolution: {integrity: sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -8124,19 +8102,10 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shelljs.exec@1.1.8: - resolution: {integrity: sha512-vFILCw+lzUtiwBAHV8/Ex8JsFjelFMdhONIsgKNLgTzeRckp2AOYRQtHJE/9LhNvdMmE27AGtzWx0+DHpwIwSw==} - engines: {node: '>= 4.0.0'} - shelljs@0.10.0: resolution: {integrity: sha512-Jex+xw5Mg2qMZL3qnzXIfaxEtBaC4n7xifqaqtrZDdlheR70OGkydrPJWT0V1cA1k3nanC86x9FwAmQl6w3Klw==} engines: {node: '>=18'} - shelljs@0.8.5: - resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} - engines: {node: '>=4'} - hasBin: true - shelljs@0.9.2: resolution: {integrity: sha512-S3I64fEiKgTZzKCC46zT/Ib9meqofLrQVbpSswtjFfAVDW+AZ54WTnAM/3/yENoxz/V1Cy6u3kiiEbQ4DNphvw==} engines: {node: '>=18'} @@ -10518,22 +10487,6 @@ snapshots: - debug - supports-color - '@contentstack/management@1.31.0': - dependencies: - '@contentstack/utils': 1.9.1 - assert: 2.1.0 - axios: 1.18.1(debug@4.4.3) - buffer: 6.0.3 - form-data: 4.0.6 - husky: 9.1.7 - lodash: 4.18.1 - otplib: 12.0.1 - qs: 6.15.3 - stream-browserify: 3.0.0 - transitivePeerDependencies: - - debug - - supports-color - '@contentstack/marketplace-sdk@1.5.4(debug@4.4.3)': dependencies: '@contentstack/utils': 1.9.1 @@ -11113,19 +11066,6 @@ snapshots: optionalDependencies: '@types/node': 22.20.1 - '@inquirer/prompts@7.10.1': - dependencies: - '@inquirer/checkbox': 4.3.2(@types/node@18.19.130) - '@inquirer/confirm': 5.1.21(@types/node@18.19.130) - '@inquirer/editor': 4.2.23(@types/node@18.19.130) - '@inquirer/expand': 4.0.23(@types/node@18.19.130) - '@inquirer/input': 4.3.1(@types/node@18.19.130) - '@inquirer/number': 3.0.23(@types/node@18.19.130) - '@inquirer/password': 4.0.23(@types/node@18.19.130) - '@inquirer/rawlist': 4.1.11(@types/node@18.19.130) - '@inquirer/search': 3.2.2(@types/node@18.19.130) - '@inquirer/select': 4.4.2(@types/node@18.19.130) - '@inquirer/prompts@7.10.1(@types/node@14.18.63)': dependencies: '@inquirer/checkbox': 4.3.2(@types/node@14.18.63) @@ -11402,41 +11342,6 @@ snapshots: - supports-color - ts-node - '@jest/core@29.7.0(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.9.3))': - dependencies: - '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.19.43 - 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.19.43)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.9.3)) - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-resolve-dependencies: 29.7.0 - jest-runner: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - jest-watcher: 29.7.0 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - ts-node - '@jest/core@29.7.0(ts-node@8.10.2(typescript@4.9.5))': dependencies: '@jest/console': 29.7.0 @@ -11916,15 +11821,6 @@ snapshots: dependencies: '@oclif/core': 4.13.2 - '@oclif/plugin-not-found@3.2.90': - dependencies: - '@inquirer/prompts': 7.10.1 - '@oclif/core': 4.13.2 - ansis: 3.17.0 - fast-levenshtein: 3.0.0 - transitivePeerDependencies: - - '@types/node' - '@oclif/plugin-not-found@3.2.90(@types/node@14.18.63)': dependencies: '@inquirer/prompts': 7.10.1(@types/node@14.18.63) @@ -12446,8 +12342,6 @@ snapshots: '@types/jsonfile': 6.1.4 '@types/node': 20.19.43 - '@types/git-diff@2.0.7': {} - '@types/graceful-fs@4.1.9': dependencies: '@types/node': 20.19.43 @@ -14388,21 +14282,6 @@ snapshots: - supports-color - ts-node - create-jest@29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.9.3)): - 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@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.9.3)) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - create-require@1.1.1: {} cross-fetch@4.1.0: @@ -14564,8 +14443,6 @@ snapshots: optionalDependencies: highlight.js: 11.11.1 - diff@3.5.1: {} - diff@4.0.4: {} diff@5.2.2: {} @@ -14807,7 +14684,7 @@ snapshots: '@typescript-eslint/parser': 6.21.0(eslint@10.8.0)(typescript@5.9.3) eslint-config-xo-space: 0.35.0(eslint@10.8.0) eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@10.8.0) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0) eslint-plugin-mocha: 10.5.0(eslint@10.8.0) eslint-plugin-n: 15.7.0(eslint@10.8.0) eslint-plugin-perfectionist: 2.11.0(eslint@10.8.0)(typescript@5.9.3) @@ -14863,8 +14740,8 @@ snapshots: '@typescript-eslint/parser': 8.65.0(eslint@10.8.0)(typescript@4.9.5) eslint-config-xo: 0.49.0(eslint@10.8.0) eslint-config-xo-space: 0.35.0(eslint@10.8.0) - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@10.8.0) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint@10.8.0))(eslint@10.8.0) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint@10.8.0))(eslint@10.8.0))(eslint@10.8.0) eslint-plugin-jsdoc: 50.8.0(eslint@10.8.0) eslint-plugin-mocha: 10.5.0(eslint@10.8.0) eslint-plugin-n: 17.24.0(eslint@10.8.0)(typescript@4.9.5) @@ -14969,6 +14846,21 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint@10.8.0))(eslint@10.8.0): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.3(supports-color@8.1.1) + eslint: 10.8.0 + get-tsconfig: 4.14.0 + is-bun-module: 2.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.17 + unrs-resolver: 1.12.2 + optionalDependencies: + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint@10.8.0))(eslint@10.8.0))(eslint@10.8.0) + transitivePeerDependencies: + - supports-color + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@10.8.0): dependencies: '@nolyfill/is-core-module': 1.0.39 @@ -14995,6 +14887,17 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-module-utils@2.14.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 6.21.0(eslint@10.8.0)(typescript@5.9.3) + eslint: 10.8.0 + eslint-import-resolver-node: 0.3.10 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@10.8.0) + transitivePeerDependencies: + - supports-color + eslint-module-utils@2.14.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0): dependencies: debug: 3.2.7 @@ -15006,14 +14909,14 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.14.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0): + eslint-module-utils@2.14.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint@10.8.0))(eslint@10.8.0))(eslint@10.8.0): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.65.0(eslint@10.8.0)(typescript@4.9.5) eslint: 10.8.0 eslint-import-resolver-node: 0.3.10 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@10.8.0) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint@10.8.0))(eslint@10.8.0) transitivePeerDependencies: - supports-color @@ -15087,6 +14990,35 @@ snapshots: - eslint-import-resolver-webpack - supports-color + eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 10.8.0 + eslint-import-resolver-node: 0.3.10 + eslint-module-utils: 2.14.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0) + hasown: 2.0.4 + is-core-module: 2.16.2 + is-glob: 4.0.3 + minimatch: 3.1.5 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.10 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 6.21.0(eslint@10.8.0)(typescript@5.9.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@6.0.3))(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0): dependencies: '@rtsao/scc': 1.1.0 @@ -15116,7 +15048,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint@10.8.0))(eslint@10.8.0))(eslint@10.8.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -15127,7 +15059,7 @@ snapshots: doctrine: 2.1.0 eslint: 10.8.0 eslint-import-resolver-node: 0.3.10 - eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0) + eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint@10.8.0))(eslint@10.8.0))(eslint@10.8.0) hasown: 2.0.4 is-core-module: 2.16.2 is-glob: 4.0.3 @@ -15911,14 +15843,6 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 - git-diff@2.0.7: - dependencies: - chalk: 2.4.2 - diff: 3.5.1 - loglevel: 1.9.2 - shelljs: 0.8.5 - shelljs.exec: 1.1.8 - git-raw-commits@5.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0): dependencies: '@conventional-changelog/git-client': 2.7.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) @@ -16746,25 +16670,6 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.9.3)): - dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.9.3)) - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.9.3)) - exit: 0.1.2 - import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.9.3)) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.3 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - jest-cli@30.4.2(@types/node@18.19.130)(ts-node@10.9.2(@types/node@18.19.130)(typescript@5.9.3)): dependencies: '@jest/core': 30.4.2(ts-node@10.9.2(@types/node@18.19.130)(typescript@5.9.3)) @@ -16846,37 +16751,6 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@20.19.43)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.9.3)): - dependencies: - '@babel/core': 7.29.7 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.29.7) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 20.19.43 - ts-node: 10.9.2(@types/node@22.20.1)(typescript@5.9.3) - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - jest-config@29.7.0(@types/node@20.19.43)(ts-node@8.10.2(typescript@4.9.5)): dependencies: '@babel/core': 7.29.7 @@ -16939,37 +16813,6 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.9.3)): - dependencies: - '@babel/core': 7.29.7 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.29.7) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 22.20.1 - ts-node: 10.9.2(@types/node@22.20.1)(typescript@5.9.3) - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - jest-config@30.4.2(@types/node@18.19.130)(ts-node@10.9.2(@types/node@18.19.130)(typescript@5.9.3)): dependencies: '@babel/core': 7.29.7 @@ -17486,7 +17329,7 @@ snapshots: - supports-color - ts-node - jest@29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@4.9.5)): + jest@29.7.0(@types/node@22.20.1): dependencies: '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.20.1)(typescript@4.9.5)) '@jest/types': 29.6.3 @@ -17498,12 +17341,12 @@ snapshots: - supports-color - ts-node - jest@29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.9.3)): + jest@29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@4.9.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.9.3)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.20.1)(typescript@4.9.5)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.9.3)) + jest-cli: 29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@4.9.5)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -17868,8 +17711,6 @@ snapshots: safe-stable-stringify: 2.5.0 triple-beam: 1.4.1 - loglevel@1.9.2: {} - loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -18293,35 +18134,6 @@ snapshots: obug@2.1.4: {} - oclif@4.23.29: - dependencies: - '@aws-sdk/client-cloudfront': 3.1097.0 - '@aws-sdk/client-s3': 3.1097.0 - '@inquirer/confirm': 3.2.0 - '@inquirer/input': 2.3.0 - '@inquirer/select': 2.5.0 - '@oclif/core': 4.13.2 - '@oclif/plugin-help': 6.2.55 - '@oclif/plugin-not-found': 3.2.90 - '@oclif/plugin-warn-if-update-available': 3.1.70 - ansis: 3.17.0 - async-retry: 1.3.3 - change-case: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.3(supports-color@8.1.1) - ejs: 3.1.10 - find-yarn-workspace-root: 2.0.0 - fs-extra: 8.1.0 - github-slugger: 2.0.0 - got: 13.0.0 - normalize-package-data: 6.0.2 - semver: 7.8.5 - tiny-jsonc: 1.0.2 - validate-npm-package-name: 5.0.1 - transitivePeerDependencies: - - '@types/node' - - supports-color - oclif@4.23.29(@types/node@14.18.63): dependencies: '@aws-sdk/client-cloudfront': 3.1097.0 @@ -18664,7 +18476,7 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss@8.5.24: + postcss@8.5.25: dependencies: nanoid: 3.3.16 picocolors: 1.1.1 @@ -19214,19 +19026,11 @@ snapshots: shebang-regex@3.0.0: {} - shelljs.exec@1.1.8: {} - shelljs@0.10.0: dependencies: execa: 5.1.1 fast-glob: 3.3.3 - shelljs@0.8.5: - dependencies: - glob: 7.2.3 - interpret: 1.4.0 - rechoir: 0.6.2 - shelljs@0.9.2: dependencies: execa: 1.0.0 @@ -19778,12 +19582,12 @@ snapshots: babel-jest: 30.4.1(@babel/core@7.29.7) jest-util: 30.4.1 - ts-jest@29.4.12(@babel/core@7.29.7)(@jest/transform@30.4.1)(@jest/types@30.4.1)(babel-jest@30.4.1(@babel/core@7.29.7))(jest-util@30.4.1)(jest@29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.9.3)))(typescript@5.9.3): + ts-jest@29.4.12(@babel/core@7.29.7)(@jest/transform@30.4.1)(@jest/types@30.4.1)(babel-jest@30.4.1(@babel/core@7.29.7))(jest-util@30.4.1)(jest@29.7.0(@types/node@22.20.1))(typescript@5.9.3): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 handlebars: 4.7.9 - jest: 29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.9.3)) + jest: 29.7.0(@types/node@22.20.1) json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 @@ -19926,25 +19730,6 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - ts-node@10.9.2(@types/node@22.20.1)(typescript@5.9.3): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.12 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 22.20.1 - acorn: 8.18.0 - acorn-walk: 8.3.5 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.4 - make-error: 1.3.6 - typescript: 5.9.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - optional: true - ts-node@8.10.2(typescript@4.9.5): dependencies: arg: 4.1.3 @@ -20232,7 +20017,7 @@ snapshots: dependencies: lightningcss: 1.33.0 picomatch: 4.0.5 - postcss: 8.5.24 + postcss: 8.5.25 rolldown: 1.1.5 tinyglobby: 0.2.17 optionalDependencies: