From 62d4f253621f3028a2f82cbf96255447771f92bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Colladon?= Date: Thu, 7 Nov 2024 22:07:10 +0100 Subject: [PATCH 01/17] refactor: swap git adapter implementation to use simplegit --- src/adapter/GitAdapter.ts | 315 ++++++------------------- src/constant/gitConstants.ts | 7 + src/post-processor/includeProcessor.ts | 2 +- src/utils/cliConstants.ts | 1 + src/utils/cliHelper.ts | 14 +- src/utils/fsUtils.ts | 4 +- 6 files changed, 97 insertions(+), 246 deletions(-) diff --git a/src/adapter/GitAdapter.ts b/src/adapter/GitAdapter.ts index 42f753a71..154448bc3 100644 --- a/src/adapter/GitAdapter.ts +++ b/src/adapter/GitAdapter.ts @@ -1,53 +1,32 @@ -import fs from 'fs' import { join } from 'path' import { readFile } from 'fs-extra' -import git, { TREE, WalkerEntry, WalkerIterateCallback } from 'isomorphic-git' import { SimpleGit, simpleGit } from 'simple-git' -import { DOT } from '../constant/fsConstants' +import { UTF8_ENCODING } from '../constant/fsConstants' import { ADDITION, DELETION, - GIT_FOLDER, + IGNORE_WHITESPACE_PARAMS, MODIFICATION, - UTF8_ENCODING, } from '../constant/gitConstants' import type { Config } from '../types/config' import type { FileGitRef } from '../types/git' -import { SOURCE_DEFAULT_VALUE } from '../utils/cliConstants' -import { dirExists, fileExists, isSubDir, treatPathSep } from '../utils/fsUtils' +import { TAB } from '../utils/cliConstants' +import { treatPathSep } from '../utils/fsUtils' import { getLFSObjectContentPath, isLFS } from '../utils/gitLfsHelper' const firstCommitParams = ['rev-list', '--max-parents=0', 'HEAD'] const BLOB_TYPE = 'blob' const TREE_TYPE = 'tree' +const NUM_STAT_REGEX = /^\d+\t\d+\t/ +const EOL = '\n' -const stripWhiteChar = (content: string) => content?.replace(/\s+/g, '') - -export const iterate = async ( - walk: WalkerIterateCallback, - children: IterableIterator> -) => { - const result = [] - for (const child of children) { - const walkedChildResult = await walk(child) - result.push(walkedChildResult) - } - return result -} - -type GitBaseConfig = { - fs: typeof fs - dir: string - // biome-ignore lint/suspicious/noExplicitAny: Any is expected here - cache: any - gitdir?: string -} +const revPath = (pathDef: FileGitRef) => + `${pathDef.oid}:${treatPathSep(pathDef.path)}` export default class GitAdapter { private static instances: Map = new Map() - private static sharedCache = {} public static getInstance(config: Config): GitAdapter { if (!GitAdapter.instances.has(config)) { @@ -58,252 +37,108 @@ export default class GitAdapter { return GitAdapter.instances.get(config)! } - private async getBufferFromBlob(blob: Uint8Array): Promise { - let bufferData: Buffer = Buffer.from(blob) - if (isLFS(bufferData)) { - const lsfPath = getLFSObjectContentPath(bufferData) - bufferData = await readFile(join(this.config.repo, lsfPath)) - } - - return bufferData - } - - protected readonly isoGit = git protected readonly simpleGit: SimpleGit - protected readonly gitConfig: GitBaseConfig private constructor(protected readonly config: Config) { - this.simpleGit = simpleGit(config.repo) - this.gitConfig = { - fs: fs, - dir: config.repo, - cache: GitAdapter.sharedCache, - } + this.simpleGit = simpleGit({ baseDir: config.repo, trimmed: true }) } public async configureRepository() { - const quotepathOff = { - path: 'core.quotepath', - value: 'off', - } - await this.isoGit.setConfig({ - ...this.gitConfig, - ...quotepathOff, - }) - } - - public async setGitDir(): Promise { - if (this.gitConfig.gitdir) { - return - } - if (await dirExists(join(this.config.repo, GIT_FOLDER))) { - this.gitConfig.gitdir = join(this.config.repo, GIT_FOLDER) - } else if (await fileExists(join(this.config.repo, GIT_FOLDER))) { - const gitFileContent = await readFile(join(this.config.repo, GIT_FOLDER)) - this.gitConfig.gitdir = gitFileContent.toString().trim().substring(8) - } else { - throw new Error('Not a git repository') - } + await this.simpleGit.addConfig('core.quotepath', 'off') } public async parseRev(ref: string) { - const parsedRev = await this.simpleGit.revparse([ref]) - return parsedRev + return await this.simpleGit.revparse([ref]) } public async pathExists(path: string) { try { - const { type } = await this.isoGit.readObject({ - ...this.gitConfig, - oid: this.config.to, - filepath: treatPathSep(path), - }) - return [TREE_TYPE, BLOB_TYPE].includes(type) + const type = await this.simpleGit.catFile([ + '-t', + revPath({ path, oid: this.config.to }), + ]) + return [TREE_TYPE, BLOB_TYPE].includes(type.trimEnd()) } catch { return false } } public async getFirstCommitRef() { - const sha = await this.simpleGit.raw(firstCommitParams) - return sha + return await this.simpleGit.raw(firstCommitParams) + } + + protected async getBufferContent(forRef: FileGitRef): Promise { + const content = await this.getStringContent(forRef) + return Buffer.from(content) } public async getStringContent(forRef: FileGitRef): Promise { - try { - const { blob } = await this.isoGit.readBlob({ - ...this.gitConfig, - oid: forRef.oid, - filepath: treatPathSep(forRef.path), - }) - const bufferData = await this.getBufferFromBlob(blob) - return bufferData?.toString(UTF8_ENCODING) ?? '' - } catch (error) { - const err = error as Error - if (err.name === 'NotFoundError') { - return '' - } else { - throw error - } + let content = await this.simpleGit.catFile([BLOB_TYPE, revPath(forRef)]) + + if (isLFS(content)) { + const lsfPath = getLFSObjectContentPath(content) + const bufferData = await readFile(join(this.config.repo, lsfPath)) + content = bufferData?.toString(UTF8_ENCODING) ?? '' } + + return content } - public async getFilesPath(path: string) { - const walker = filePathWalker(path) - return await this.isoGit.walk({ - ...this.gitConfig, - dir: treatPathSep(path), - trees: [TREE({ ref: this.config.to })], - map: walker, - iterate, - }) + public async getFilesPath(path: string): Promise { + return ( + await this.simpleGit.raw([ + 'ls-tree', + '--name-only', + '-r', + this.config.to, + treatPathSep(path), + ]) + ) + .split(EOL) + .filter(line => line) } public async getFilesFrom(path: string) { - const treatedPath = treatPathSep(path) - const object = await this.isoGit.readObject({ - ...this.gitConfig, - oid: this.config.to, - filepath: treatedPath, - }) - // Return object exposing async getContent - // Iterate over and output file using the getContent API when needed - const blobFiles: { path: string; content: Uint8Array }[] = [] - if (object.type === TREE_TYPE) { - const filesContent = await this.isoGit.walk({ - ...this.gitConfig, - dir: treatedPath, - trees: [TREE({ ref: this.config.to })], - map: contentWalker(treatedPath), - iterate, - }) - blobFiles.push(...filesContent) - } else if (object.type === BLOB_TYPE) { - blobFiles.push({ + const filesPath = await this.getFilesPath(path) + const bufferFiles: { path: string; content: Buffer }[] = [] + for (const filePath of filesPath) { + const fileContent = await this.getBufferContent({ path, - content: object.object as Uint8Array, + oid: this.config.to, }) - } else { - throw new Error(`Path ${path} does not exist in ${this.config.to}`) - } - return await this.getContentFromFiles(blobFiles) - } - - protected async getContentFromFiles( - blobFiles: { path: string; content: Uint8Array }[] - ) { - const bufferFiles: { path: string; content: Buffer }[] = [] - for (const file of blobFiles) { - const content = await this.getBufferFromBlob(file.content) bufferFiles.push({ - path: treatPathSep(file.path), - content, + path: treatPathSep(filePath), + content: fileContent, }) } return bufferFiles } - public async getDiffLines() { - const walker = diffLineWalker(this.config) - return this.isoGit.walk({ - ...this.gitConfig, - dir: join(this.config.repo, this.config.source), - trees: [TREE({ ref: this.config.from }), TREE({ ref: this.config.to })], - map: walker, - iterate, - }) - } -} - -export const filePathWalker = (path: string) => { - const shouldSkip = evaluateShouldSkip(path) - return async (filepath: string, trees: (WalkerEntry | null)[]) => { - if (await shouldSkip(filepath, trees)) { - return - } - return treatPathSep(filepath) - } -} - -export const contentWalker = (path: string) => { - const shouldSkip = evaluateShouldSkip(path) - return async (filepath: string, trees: (WalkerEntry | null)[]) => { - if (await shouldSkip(filepath, trees)) { - return - } - - const [tree] = trees - const blob: Uint8Array = (await tree!.content()) as Uint8Array - return { - path: treatPathSep(filepath), - content: blob, - } - } -} - -export const diffLineWalker = (config: Config) => { - const shouldSkip = evaluateShouldSkip(config.source) - - return async (filepath: string, trees: (WalkerEntry | null)[]) => { - if (await shouldSkip(filepath, trees)) { - return - } - - const [fromOID, toOID] = await Promise.all(trees.map(tree => tree?.oid())) - if (fromOID === toOID) { - return - } - let type - if (fromOID === undefined) { - type = ADDITION - } else if (toOID === undefined) { - type = DELETION - } else { - if ( - config.ignoreWhitespace && - (await isContentsEqualIgnoringWhiteChars(trees)) - ) { - return - } - type = MODIFICATION - } - - const result = `${type}\t${treatPathSep(filepath)}` - return result - } -} - -const isContentsEqualIgnoringWhiteChars = async ( - trees: (WalkerEntry | null)[] -) => { - const [fromContent, toContent] = await Promise.all( - trees.map(async tree => { - const content = (await tree!.content()) as Uint8Array - return stripWhiteChar(Buffer.from(content).toString()) - }) - ) - return fromContent === toContent -} - -const pathDoesNotStartsWith = (root: string) => { - const gitFormattedRoot = treatPathSep(root) - - return (path: string) => - gitFormattedRoot !== SOURCE_DEFAULT_VALUE && - !isSubDir(gitFormattedRoot, path) -} - -const evaluateShouldSkip = (base: string) => { - const checkPath = pathDoesNotStartsWith(base) - return async (path: string, trees: (WalkerEntry | null)[]) => { - if (path === DOT || checkPath(path)) { - return true - } - - const types = await Promise.all( - trees.filter(Boolean).map(tree => tree!.type()) - ) - - return types.some(type => type !== BLOB_TYPE) + public async getDiffLines(): Promise { + const lines: string[] = [] + for (const changeType of [ADDITION, MODIFICATION, DELETION]) { + const linesOfType = await this.getDiffForType(changeType) + lines.push( + ...linesOfType.map(statLine => + treatPathSep(statLine).replace(NUM_STAT_REGEX, `${changeType}${TAB}`) + ) + ) + } + return lines + } + + protected async getDiffForType(changeType: string): Promise { + return ( + await this.simpleGit.raw([ + 'diff', + '--numstat', + '--no-renames', + ...(this.config.ignoreWhitespace ? IGNORE_WHITESPACE_PARAMS : []), + `--diff-filter=${changeType}`, + this.config.from, + this.config.to, + this.config.source, + ]) + ).split(EOL) } } diff --git a/src/constant/gitConstants.ts b/src/constant/gitConstants.ts index 180bdea86..75969cc55 100644 --- a/src/constant/gitConstants.ts +++ b/src/constant/gitConstants.ts @@ -5,3 +5,10 @@ export const MODIFICATION = 'M' export const GIT_DIFF_TYPE_REGEX = /^.\s+/u export const GIT_FOLDER = '.git' export const UTF8_ENCODING = 'utf8' +export const IGNORE_WHITESPACE_PARAMS = [ + '--ignore-all-space', + '--ignore-blank-lines', + '--ignore-cr-at-eol', + '--word-diff-regex', + '--word-diff-regex=|[^[:space:]]', +] diff --git a/src/post-processor/includeProcessor.ts b/src/post-processor/includeProcessor.ts index 593cb17b5..1f320ba5a 100644 --- a/src/post-processor/includeProcessor.ts +++ b/src/post-processor/includeProcessor.ts @@ -4,11 +4,11 @@ import { ADDITION, DELETION } from '../constant/gitConstants' import { MetadataRepository } from '../metadata/MetadataRepository' import DiffLineInterpreter from '../service/diffLineInterpreter' import type { Work } from '../types/work' +import { TAB } from '../utils/cliConstants' import { treatPathSep } from '../utils/fsUtils' import { IgnoreHelper, buildIncludeHelper } from '../utils/ignoreHelper' import BaseProcessor from './baseProcessor' -const TAB = '\t' export default class IncludeProcessor extends BaseProcessor { protected readonly gitAdapter: GitAdapter diff --git a/src/utils/cliConstants.ts b/src/utils/cliConstants.ts index 6a0dfbe29..a4d1b51c6 100644 --- a/src/utils/cliConstants.ts +++ b/src/utils/cliConstants.ts @@ -2,3 +2,4 @@ export const TO_DEFAULT_VALUE = 'HEAD' export const OUTPUT_DEFAULT_VALUE = './output' export const SOURCE_DEFAULT_VALUE = './' export const REPO_DEFAULT_VALUE = './' +export const TAB = '\t' diff --git a/src/utils/cliHelper.ts b/src/utils/cliHelper.ts index 51c901b75..718739a6e 100644 --- a/src/utils/cliHelper.ts +++ b/src/utils/cliHelper.ts @@ -11,8 +11,15 @@ import { import type { Config } from '../types/config' import type { Work } from '../types/work' +import { GIT_FOLDER } from '../constant/gitConstants' import asyncFilter from './asyncFilter' -import { dirExists, fileExists, readFile, sanitizePath } from './fsUtils' +import { + dirExists, + fileExists, + pathExists, + readFile, + sanitizePath, +} from './fsUtils' const isBlank = (str: string) => !str || /^\s*$/.test(str) @@ -75,9 +82,8 @@ export default class CLIHelper { errors.push(format(messages.errorPathIsNotFile, file)) ) - try { - await this.gitAdapter.setGitDir() - } catch { + const repoExists = await pathExists(join(this.config.repo, GIT_FOLDER)) + if (!repoExists) { errors.push(format(messages.errorPathIsNotGit, this.config.repo)) } diff --git a/src/utils/fsUtils.ts b/src/utils/fsUtils.ts index 0bdfb0ae9..9b75d2238 100644 --- a/src/utils/fsUtils.ts +++ b/src/utils/fsUtils.ts @@ -1,7 +1,7 @@ 'use strict' import { isAbsolute, normalize, relative } from 'path' -import { readFile as fsReadFile, stat } from 'fs-extra' +import { readFile as fsReadFile, pathExists, stat } from 'fs-extra' import { PATH_SEP, @@ -41,6 +41,8 @@ export const fileExists = async (file: string) => { } } +export { pathExists } + export const readFile = async (path: string) => { const file = await fsReadFile(path, { encoding: UTF8_ENCODING, From 56002de32546360ceebb3791f42a2b89316b2c5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Colladon?= Date: Thu, 7 Nov 2024 21:56:36 +0100 Subject: [PATCH 02/17] build: remove isomorphic git dependency --- README.md | 1 - package.json | 1 - yarn.lock | 2512 +++++++++++++++++++++----------------------------- 3 files changed, 1035 insertions(+), 1479 deletions(-) diff --git a/README.md b/README.md index d3cfc4f01..4b44688d1 100644 --- a/README.md +++ b/README.md @@ -606,7 +606,6 @@ These plugins have been designed to work with SGD: - [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) - Validate XML, Parse XML to JS/JSON and vise versa, or parse XML to Nimn rapidly without C/C++ based libraries and no callback - [fs-extra](https://github.com/jprichardson/node-fs-extra) - Node.js: extra methods for the fs object like copy(), remove(), mkdirs(). - [ignore](https://github.com/kaelzhang/node-ignore#readme) - is a manager, filter and parser which implemented in pure JavaScript according to the .gitignore spec 2.22.1. -- [isomorphic-git](https://github.com/isomorphic-git/isomorphic-git) - A pure JavaScript implementation of git for node and browsers! - [lodash](https://github.com/lodash/lodash) - A modern JavaScript utility library delivering modularity, performance & extras. - [MegaLinter](https://megalinter.io) - Open-Source tool for CI/CD workflows that analyzes the consistency of your code, IAC, configuration, and scripts - [simple-git](https://github.com/steveukx/git-js) - A light weight interface for running git commands in any node.js application. diff --git a/package.json b/package.json index b7f51a12d..6eea1ab5c 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,6 @@ "fast-xml-parser": "^4.5.0", "fs-extra": "^11.2.0", "ignore": "^5.3.2", - "isomorphic-git": "^1.27.1", "lodash": "^4.17.21", "simple-git": "^3.26.0", "xmlbuilder2": "^3.1.1" diff --git a/yarn.lock b/yarn.lock index b29419802..ac27fefcc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15,420 +15,266 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/code-frame@npm:7.24.7" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.0": + version: 7.26.2 + resolution: "@babel/code-frame@npm:7.26.2" dependencies: - "@babel/highlight": ^7.24.7 + "@babel/helper-validator-identifier": ^7.25.9 + js-tokens: ^4.0.0 picocolors: ^1.0.0 - checksum: 830e62cd38775fdf84d612544251ce773d544a8e63df667728cc9e0126eeef14c6ebda79be0f0bc307e8318316b7f58c27ce86702e0a1f5c321d842eb38ffda4 + checksum: db13f5c42d54b76c1480916485e6900748bbcb0014a8aca87f50a091f70ff4e0d0a6db63cade75eb41fcc3d2b6ba0a7f89e343def4f96f00269b41b8ab8dd7b8 languageName: node linkType: hard -"@babel/compat-data@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/compat-data@npm:7.24.7" - checksum: 1fc276825dd434fe044877367dfac84171328e75a8483a6976aa28bf833b32367e90ee6df25bdd97c287d1aa8019757adcccac9153de70b1932c0d243a978ae9 - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.25.2": - version: 7.25.2 - resolution: "@babel/compat-data@npm:7.25.2" - checksum: b61bc9da7cfe249f19d08da00f4f0c20550cd9ad5bffcde787c2bf61a8a6fa5b66d92bbd89031f3a6e5495a799a2a2499f2947b6cc7964be41979377473ab132 +"@babel/compat-data@npm:^7.25.9": + version: 7.26.2 + resolution: "@babel/compat-data@npm:7.26.2" + checksum: d52fae9b0dc59b409d6005ae6b172e89329f46d68136130065ebe923a156fc633e0f1c8600b3e319b9e0f99fd948f64991a5419e2e9431d00d9d235d5f7a7618 languageName: node linkType: hard "@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.23.9": - version: 7.24.7 - resolution: "@babel/core@npm:7.24.7" + version: 7.26.0 + resolution: "@babel/core@npm:7.26.0" dependencies: "@ampproject/remapping": ^2.2.0 - "@babel/code-frame": ^7.24.7 - "@babel/generator": ^7.24.7 - "@babel/helper-compilation-targets": ^7.24.7 - "@babel/helper-module-transforms": ^7.24.7 - "@babel/helpers": ^7.24.7 - "@babel/parser": ^7.24.7 - "@babel/template": ^7.24.7 - "@babel/traverse": ^7.24.7 - "@babel/types": ^7.24.7 + "@babel/code-frame": ^7.26.0 + "@babel/generator": ^7.26.0 + "@babel/helper-compilation-targets": ^7.25.9 + "@babel/helper-module-transforms": ^7.26.0 + "@babel/helpers": ^7.26.0 + "@babel/parser": ^7.26.0 + "@babel/template": ^7.25.9 + "@babel/traverse": ^7.25.9 + "@babel/types": ^7.26.0 convert-source-map: ^2.0.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 json5: ^2.2.3 semver: ^6.3.1 - checksum: 017497e2a1b4683a885219eef7d2aee83c1c0cf353506b2e180b73540ec28841d8ef1ea1837fa69f8c561574b24ddd72f04764b27b87afedfe0a07299ccef24d + checksum: b296084cfd818bed8079526af93b5dfa0ba70282532d2132caf71d4060ab190ba26d3184832a45accd82c3c54016985a4109ab9118674347a7e5e9bc464894e6 languageName: node linkType: hard "@babel/core@npm:~7.25.2": - version: 7.25.2 - resolution: "@babel/core@npm:7.25.2" + version: 7.25.9 + resolution: "@babel/core@npm:7.25.9" dependencies: "@ampproject/remapping": ^2.2.0 - "@babel/code-frame": ^7.24.7 - "@babel/generator": ^7.25.0 - "@babel/helper-compilation-targets": ^7.25.2 - "@babel/helper-module-transforms": ^7.25.2 - "@babel/helpers": ^7.25.0 - "@babel/parser": ^7.25.0 - "@babel/template": ^7.25.0 - "@babel/traverse": ^7.25.2 - "@babel/types": ^7.25.2 + "@babel/code-frame": ^7.25.9 + "@babel/generator": ^7.25.9 + "@babel/helper-compilation-targets": ^7.25.9 + "@babel/helper-module-transforms": ^7.25.9 + "@babel/helpers": ^7.25.9 + "@babel/parser": ^7.25.9 + "@babel/template": ^7.25.9 + "@babel/traverse": ^7.25.9 + "@babel/types": ^7.25.9 convert-source-map: ^2.0.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 json5: ^2.2.3 semver: ^6.3.1 - checksum: 9a1ef604a7eb62195f70f9370cec45472a08114e3934e3eaaedee8fd754edf0730e62347c7b4b5e67d743ce57b5bb8cf3b92459482ca94d06e06246ef021390a + checksum: 6633cd8abdd679ffefe526a6611d4721f90f76ebf1944a8501e8beccad24a4a71c07530c8245370660c6449618b9f454a3326bac85ff03d61df7bab6f0710522 languageName: node linkType: hard -"@babel/generator@npm:^7.24.7, @babel/generator@npm:^7.7.2": - version: 7.24.7 - resolution: "@babel/generator@npm:7.24.7" +"@babel/generator@npm:^7.25.9, @babel/generator@npm:^7.26.0, @babel/generator@npm:^7.7.2": + version: 7.26.2 + resolution: "@babel/generator@npm:7.26.2" dependencies: - "@babel/types": ^7.24.7 + "@babel/parser": ^7.26.2 + "@babel/types": ^7.26.0 "@jridgewell/gen-mapping": ^0.3.5 "@jridgewell/trace-mapping": ^0.3.25 - jsesc: ^2.5.1 - checksum: 0ff31a73b15429f1287e4d57b439bba4a266f8c673bb445fe313b82f6d110f586776997eb723a777cd7adad9d340edd162aea4973a90112c5d0cfcaf6686844b + jsesc: ^3.0.2 + checksum: 6ff850b7d6082619f8c2f518d993cf7254cfbaa20b026282cbef5c9b2197686d076a432b18e36c4d1a42721c016df4f77a8f62c67600775d9683621d534b91b4 languageName: node linkType: hard -"@babel/generator@npm:^7.25.0, @babel/generator@npm:~7.25.0": - version: 7.25.0 - resolution: "@babel/generator@npm:7.25.0" +"@babel/generator@npm:~7.25.0": + version: 7.25.9 + resolution: "@babel/generator@npm:7.25.9" dependencies: - "@babel/types": ^7.25.0 + "@babel/types": ^7.25.9 "@jridgewell/gen-mapping": ^0.3.5 "@jridgewell/trace-mapping": ^0.3.25 - jsesc: ^2.5.1 - checksum: bf25649dde4068bff8e387319bf820f2cb3b1af7b8c0cfba0bd90880656427c8bad96cd5cb6db7058d20cffe93149ee59da16567018ceaa21ecaefbf780a785c + jsesc: ^3.0.2 + checksum: 4b8f27363e6521ca9e33d307744aeff8b6f540492eb935e597e115304d999eb228b24d43ce679e2c0337b4a98966ae28dc53f1fab86db1eb852d53e11120fd7b languageName: node linkType: hard -"@babel/helper-annotate-as-pure@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-annotate-as-pure@npm:7.24.7" +"@babel/helper-annotate-as-pure@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-annotate-as-pure@npm:7.25.9" dependencies: - "@babel/types": ^7.24.7 - checksum: 6178566099a6a0657db7a7fa601a54fb4731ca0b8614fbdccfd8e523c210c13963649bc8fdfd53ce7dd14d05e3dda2fb22dea5b30113c488b9eb1a906d60212e + "@babel/types": ^7.25.9 + checksum: 41edda10df1ae106a9b4fe617bf7c6df77db992992afd46192534f5cff29f9e49a303231733782dd65c5f9409714a529f215325569f14282046e9d3b7a1ffb6c languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-compilation-targets@npm:7.24.7" +"@babel/helper-compilation-targets@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-compilation-targets@npm:7.25.9" dependencies: - "@babel/compat-data": ^7.24.7 - "@babel/helper-validator-option": ^7.24.7 - browserslist: ^4.22.2 + "@babel/compat-data": ^7.25.9 + "@babel/helper-validator-option": ^7.25.9 + browserslist: ^4.24.0 lru-cache: ^5.1.1 semver: ^6.3.1 - checksum: dfc88bc35e223ade796c7267901728217c665adc5bc2e158f7b0ae850de14f1b7941bec4fe5950ae46236023cfbdeddd9c747c276acf9b39ca31f8dd97dc6cc6 + checksum: 3af536e2db358b38f968abdf7d512d425d1018fef2f485d6f131a57a7bcaed32c606b4e148bb230e1508fa42b5b2ac281855a68eb78270f54698c48a83201b9b languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.25.2": - version: 7.25.2 - resolution: "@babel/helper-compilation-targets@npm:7.25.2" +"@babel/helper-create-class-features-plugin@npm:^7.24.7, @babel/helper-create-class-features-plugin@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-create-class-features-plugin@npm:7.25.9" dependencies: - "@babel/compat-data": ^7.25.2 - "@babel/helper-validator-option": ^7.24.8 - browserslist: ^4.23.1 - lru-cache: ^5.1.1 - semver: ^6.3.1 - checksum: aed33c5496cb9db4b5e2d44e26bf8bc474074cc7f7bb5ebe1d4a20fdeb362cb3ba9e1596ca18c7484bcd6e5c3a155ab975e420d520c0ae60df81f9de04d0fd16 - languageName: node - linkType: hard - -"@babel/helper-create-class-features-plugin@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-create-class-features-plugin@npm:7.24.7" - dependencies: - "@babel/helper-annotate-as-pure": ^7.24.7 - "@babel/helper-environment-visitor": ^7.24.7 - "@babel/helper-function-name": ^7.24.7 - "@babel/helper-member-expression-to-functions": ^7.24.7 - "@babel/helper-optimise-call-expression": ^7.24.7 - "@babel/helper-replace-supers": ^7.24.7 - "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7 - "@babel/helper-split-export-declaration": ^7.24.7 + "@babel/helper-annotate-as-pure": ^7.25.9 + "@babel/helper-member-expression-to-functions": ^7.25.9 + "@babel/helper-optimise-call-expression": ^7.25.9 + "@babel/helper-replace-supers": ^7.25.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 + "@babel/traverse": ^7.25.9 semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0 - checksum: 371a181a1717a9b0cebc97727c8ea9ca6afa34029476a684b6030f9d1ad94dcdafd7de175da10b63ae3ba79e4e82404db8ed968ebf264b768f097e5d64faab71 + checksum: 91dd5f203ed04568c70b052e2f26dfaac7c146447196c00b8ecbb6d3d2f3b517abadb985d3321a19d143adaed6fe17f7f79f8f50e0c20e9d8ad83e1027b42424 languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/helper-create-class-features-plugin@npm:7.25.0" +"@babel/helper-member-expression-to-functions@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-member-expression-to-functions@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": ^7.24.7 - "@babel/helper-member-expression-to-functions": ^7.24.8 - "@babel/helper-optimise-call-expression": ^7.24.7 - "@babel/helper-replace-supers": ^7.25.0 - "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7 - "@babel/traverse": ^7.25.0 - semver: ^6.3.1 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: e986c1187e16837b71f12920bd77e672b4bc19ac6dfe30b9d9d515a311c5cc5a085a8e337ac8597b1cb7bd0efdbfcc66f69bf652786c9a022070f9b782deec0d + "@babel/traverse": ^7.25.9 + "@babel/types": ^7.25.9 + checksum: 8e2f1979b6d596ac2a8cbf17f2cf709180fefc274ac3331408b48203fe19134ed87800774ef18838d0275c3965130bae22980d90caed756b7493631d4b2cf961 languageName: node linkType: hard -"@babel/helper-environment-visitor@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-environment-visitor@npm:7.24.7" +"@babel/helper-module-imports@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-module-imports@npm:7.25.9" dependencies: - "@babel/types": ^7.24.7 - checksum: 079d86e65701b29ebc10baf6ed548d17c19b808a07aa6885cc141b690a78581b180ee92b580d755361dc3b16adf975b2d2058b8ce6c86675fcaf43cf22f2f7c6 + "@babel/traverse": ^7.25.9 + "@babel/types": ^7.25.9 + checksum: 1b411ce4ca825422ef7065dffae7d8acef52023e51ad096351e3e2c05837e9bf9fca2af9ca7f28dc26d596a588863d0fedd40711a88e350b736c619a80e704e6 languageName: node linkType: hard -"@babel/helper-function-name@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-function-name@npm:7.24.7" - dependencies: - "@babel/template": ^7.24.7 - "@babel/types": ^7.24.7 - checksum: 142ee08922074dfdc0ff358e09ef9f07adf3671ab6eef4fca74dcf7a551f1a43717e7efa358c9e28d7eea84c28d7f177b7a58c70452fc312ae3b1893c5dab2a4 - languageName: node - linkType: hard - -"@babel/helper-hoist-variables@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-hoist-variables@npm:7.24.7" +"@babel/helper-module-transforms@npm:^7.25.9, @babel/helper-module-transforms@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/helper-module-transforms@npm:7.26.0" dependencies: - "@babel/types": ^7.24.7 - checksum: 6cfdcf2289cd12185dcdbdf2435fa8d3447b797ac75851166de9fc8503e2fd0021db6baf8dfbecad3753e582c08e6a3f805c8d00cbed756060a877d705bd8d8d - languageName: node - linkType: hard - -"@babel/helper-member-expression-to-functions@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-member-expression-to-functions@npm:7.24.7" - dependencies: - "@babel/traverse": ^7.24.7 - "@babel/types": ^7.24.7 - checksum: 9fecf412f85fa23b7cf55d19eb69de39f8240426a028b141c9df2aed8cfedf20b3ec3318d40312eb7a3dec9eea792828ce0d590e0ff62da3da532482f537192c - languageName: node - linkType: hard - -"@babel/helper-member-expression-to-functions@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/helper-member-expression-to-functions@npm:7.24.8" - dependencies: - "@babel/traverse": ^7.24.8 - "@babel/types": ^7.24.8 - checksum: bf923d05d81b06857f4ca4fe9c528c9c447a58db5ea39595bb559eae2fce01a8266173db0fd6a2ec129d7bbbb9bb22f4e90008252f7c66b422c76630a878a4bc - languageName: node - linkType: hard - -"@babel/helper-module-imports@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-module-imports@npm:7.24.7" - dependencies: - "@babel/traverse": ^7.24.7 - "@babel/types": ^7.24.7 - checksum: 8ac15d96d262b8940bc469052a048e06430bba1296369be695fabdf6799f201dd0b00151762b56012a218464e706bc033f27c07f6cec20c6f8f5fd6543c67054 - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-module-transforms@npm:7.24.7" - dependencies: - "@babel/helper-environment-visitor": ^7.24.7 - "@babel/helper-module-imports": ^7.24.7 - "@babel/helper-simple-access": ^7.24.7 - "@babel/helper-split-export-declaration": ^7.24.7 - "@babel/helper-validator-identifier": ^7.24.7 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: ddff3b41c2667876b4e4e73d961168f48a5ec9560c95c8c2d109e6221f9ca36c6f90c6317eb7a47f2a3c99419c356e529a86b79174cad0d4f7a61960866b88ca - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.24.8, @babel/helper-module-transforms@npm:^7.25.2": - version: 7.25.2 - resolution: "@babel/helper-module-transforms@npm:7.25.2" - dependencies: - "@babel/helper-module-imports": ^7.24.7 - "@babel/helper-simple-access": ^7.24.7 - "@babel/helper-validator-identifier": ^7.24.7 - "@babel/traverse": ^7.25.2 + "@babel/helper-module-imports": ^7.25.9 + "@babel/helper-validator-identifier": ^7.25.9 + "@babel/traverse": ^7.25.9 peerDependencies: "@babel/core": ^7.0.0 - checksum: 282d4e3308df6746289e46e9c39a0870819630af5f84d632559171e4fae6045684d771a65f62df3d569e88ccf81dc2def78b8338a449ae3a94bb421aa14fc367 + checksum: 942eee3adf2b387443c247a2c190c17c4fd45ba92a23087abab4c804f40541790d51ad5277e4b5b1ed8d5ba5b62de73857446b7742f835c18ebd350384e63917 languageName: node linkType: hard -"@babel/helper-optimise-call-expression@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-optimise-call-expression@npm:7.24.7" +"@babel/helper-optimise-call-expression@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-optimise-call-expression@npm:7.25.9" dependencies: - "@babel/types": ^7.24.7 - checksum: 280654eaf90e92bf383d7eed49019573fb35a98c9e992668f701ad099957246721044be2068cf6840cb2299e0ad393705a1981c88c23a1048096a8d59e5f79a3 - languageName: node - linkType: hard - -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.8.0": - version: 7.24.7 - resolution: "@babel/helper-plugin-utils@npm:7.24.7" - checksum: 81f2a15751d892e4a8fce25390f973363a5b27596167861d2d6eab0f61856eb2ba389b031a9f19f669c0bd4dd601185828d3cebafd25431be7a1696f2ce3ef68 + "@babel/types": ^7.25.9 + checksum: f09d0ad60c0715b9a60c31841b3246b47d67650c512ce85bbe24a3124f1a4d66377df793af393273bc6e1015b0a9c799626c48e53747581c1582b99167cc65dc languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/helper-plugin-utils@npm:7.24.8" - checksum: 73b1a83ba8bcee21dc94de2eb7323207391715e4369fd55844bb15cf13e3df6f3d13a40786d990e6370bf0f571d94fc31f70dec96c1d1002058258c35ca3767a +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.25.9, @babel/helper-plugin-utils@npm:^7.8.0": + version: 7.25.9 + resolution: "@babel/helper-plugin-utils@npm:7.25.9" + checksum: e19ec8acf0b696756e6d84531f532c5fe508dce57aa68c75572a77798bd04587a844a9a6c8ea7d62d673e21fdc174d091c9097fb29aea1c1b49f9c6eaa80f022 languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-replace-supers@npm:7.24.7" +"@babel/helper-replace-supers@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-replace-supers@npm:7.25.9" dependencies: - "@babel/helper-environment-visitor": ^7.24.7 - "@babel/helper-member-expression-to-functions": ^7.24.7 - "@babel/helper-optimise-call-expression": ^7.24.7 + "@babel/helper-member-expression-to-functions": ^7.25.9 + "@babel/helper-optimise-call-expression": ^7.25.9 + "@babel/traverse": ^7.25.9 peerDependencies: "@babel/core": ^7.0.0 - checksum: 2bf0d113355c60d86a04e930812d36f5691f26c82d4ec1739e5ec0a4c982c9113dad3167f7c74f888a96328bd5e696372232406d8200e5979e6e0dc2af5e7c76 - languageName: node - linkType: hard - -"@babel/helper-replace-supers@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/helper-replace-supers@npm:7.25.0" - dependencies: - "@babel/helper-member-expression-to-functions": ^7.24.8 - "@babel/helper-optimise-call-expression": ^7.24.7 - "@babel/traverse": ^7.25.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: f669fc2487c22d40b808f94b9c3ee41129484d5ef0ba689bdd70f216ff91e10b6b021d2f8cd37e7bdd700235a2a6ae6622526344f064528190383bf661ac65f8 - languageName: node - linkType: hard - -"@babel/helper-simple-access@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-simple-access@npm:7.24.7" - dependencies: - "@babel/traverse": ^7.24.7 - "@babel/types": ^7.24.7 - checksum: ddbf55f9dea1900213f2a1a8500fabfd21c5a20f44dcfa957e4b0d8638c730f88751c77f678644f754f1a1dc73f4eb8b766c300deb45a9daad000e4247957819 + checksum: 84f40e12520b7023e52d289bf9d569a06284879fe23bbbacad86bec5d978b2669769f11b073fcfeb1567d8c547168323005fda88607a4681ecaeb4a5cdd48bb9 languageName: node linkType: hard -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.24.7" +"@babel/helper-simple-access@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-simple-access@npm:7.25.9" dependencies: - "@babel/traverse": ^7.24.7 - "@babel/types": ^7.24.7 - checksum: 11b28fe534ce2b1a67c4d8e51a7b5711a2a0a0cae802f74614eee54cca58c744d9a62f6f60103c41759e81c537d270bfd665bf368a6bea214c6052f2094f8407 + "@babel/traverse": ^7.25.9 + "@babel/types": ^7.25.9 + checksum: 6d96c94b88e8288d15e5352c1221486bd4f62de8c7dc7c7b9f5b107ce2c79f67fec5ed71a0476e146f1fefbbbf1d69abe35dc821d80ce01fc7f472286c342421 languageName: node linkType: hard -"@babel/helper-split-export-declaration@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-split-export-declaration@npm:7.24.7" +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.25.9" dependencies: - "@babel/types": ^7.24.7 - checksum: e3ddc91273e5da67c6953f4aa34154d005a00791dc7afa6f41894e768748540f6ebcac5d16e72541aea0c89bee4b89b4da6a3d65972a0ea8bfd2352eda5b7e22 - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-string-parser@npm:7.24.7" - checksum: 09568193044a578743dd44bf7397940c27ea693f9812d24acb700890636b376847a611cdd0393a928544e79d7ad5b8b916bd8e6e772bc8a10c48a647a96e7b1a - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/helper-string-parser@npm:7.24.8" - checksum: 39b03c5119216883878655b149148dc4d2e284791e969b19467a9411fccaa33f7a713add98f4db5ed519535f70ad273cdadfd2eb54d47ebbdeac5083351328ce + "@babel/traverse": ^7.25.9 + "@babel/types": ^7.25.9 + checksum: fdbb5248932198bc26daa6abf0d2ac42cab9c2dbb75b7e9f40d425c8f28f09620b886d40e7f9e4e08ffc7aaa2cefe6fc2c44be7c20e81f7526634702fb615bdc languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-validator-identifier@npm:7.24.7" - checksum: 6799ab117cefc0ecd35cd0b40ead320c621a298ecac88686a14cffceaac89d80cdb3c178f969861bf5fa5e4f766648f9161ea0752ecfe080d8e89e3147270257 +"@babel/helper-string-parser@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-string-parser@npm:7.25.9" + checksum: 6435ee0849e101681c1849868278b5aee82686ba2c1e27280e5e8aca6233af6810d39f8e4e693d2f2a44a3728a6ccfd66f72d71826a94105b86b731697cdfa99 languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-validator-option@npm:7.24.7" - checksum: 9689166bf3f777dd424c026841c8cd651e41b21242dbfd4569a53086179a3e744c8eddd56e9d10b54142270141c91581b53af0d7c00c82d552d2540e2a919f7e +"@babel/helper-validator-identifier@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-identifier@npm:7.25.9" + checksum: 5b85918cb1a92a7f3f508ea02699e8d2422fe17ea8e82acd445006c0ef7520fbf48e3dbcdaf7b0a1d571fc3a2715a29719e5226636cb6042e15fe6ed2a590944 languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/helper-validator-option@npm:7.24.8" - checksum: a52442dfa74be6719c0608fee3225bd0493c4057459f3014681ea1a4643cd38b68ff477fe867c4b356da7330d085f247f0724d300582fa4ab9a02efaf34d107c +"@babel/helper-validator-option@npm:^7.24.7, @babel/helper-validator-option@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-option@npm:7.25.9" + checksum: 9491b2755948ebbdd68f87da907283698e663b5af2d2b1b02a2765761974b1120d5d8d49e9175b167f16f72748ffceec8c9cf62acfbee73f4904507b246e2b3d languageName: node linkType: hard -"@babel/helpers@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helpers@npm:7.24.7" +"@babel/helpers@npm:^7.25.9, @babel/helpers@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/helpers@npm:7.26.0" dependencies: - "@babel/template": ^7.24.7 - "@babel/types": ^7.24.7 - checksum: 934da58098a3670ca7f9f42425b9c44d0ca4f8fad815c0f51d89fc7b64c5e0b4c7d5fec038599de691229ada737edeaf72fad3eba8e16dd5842e8ea447f76b66 + "@babel/template": ^7.25.9 + "@babel/types": ^7.26.0 + checksum: d77fe8d45033d6007eadfa440355c1355eed57902d5a302f450827ad3d530343430a21210584d32eef2f216ae463d4591184c6fc60cf205bbf3a884561469200 languageName: node linkType: hard -"@babel/helpers@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/helpers@npm:7.25.0" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.0, @babel/parser@npm:^7.26.2": + version: 7.26.2 + resolution: "@babel/parser@npm:7.26.2" dependencies: - "@babel/template": ^7.25.0 - "@babel/types": ^7.25.0 - checksum: 739e3704ff41a30f5eaac469b553f4d3ab02be6ced083f5925851532dfbd9efc5c347728e77b754ed0b262a4e5e384e60932a62c192d338db7e4b7f3adf9f4a7 - languageName: node - linkType: hard - -"@babel/highlight@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/highlight@npm:7.24.7" - dependencies: - "@babel/helper-validator-identifier": ^7.24.7 - chalk: ^2.4.2 - js-tokens: ^4.0.0 - picocolors: ^1.0.0 - checksum: 5cd3a89f143671c4ac129960024ba678b669e6fc673ce078030f5175002d1d3d52bc10b22c5b916a6faf644b5028e9a4bd2bb264d053d9b05b6a98690f1d46f1 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/parser@npm:7.24.7" + "@babel/types": ^7.26.0 bin: parser: ./bin/babel-parser.js - checksum: fc9d2c4c8712f89672edc55c0dc5cf640dcec715b56480f111f85c2bc1d507e251596e4110d65796690a96ac37a4b60432af90b3e97bb47e69d4ef83872dbbd6 + checksum: c88b5ea0adf357ef909cdc2c31e284a154943edc59f63f6e8a4c20bf773a1b2f3d8c2205e59c09ca7cdad91e7466300114548876529277a80651b6436a48d5d9 languageName: node linkType: hard -"@babel/parser@npm:^7.25.0, @babel/parser@npm:^7.25.3, @babel/parser@npm:~7.25.0": - version: 7.25.3 - resolution: "@babel/parser@npm:7.25.3" +"@babel/parser@npm:~7.25.0": + version: 7.25.9 + resolution: "@babel/parser@npm:7.25.9" dependencies: - "@babel/types": ^7.25.2 + "@babel/types": ^7.25.9 bin: parser: ./bin/babel-parser.js - checksum: b55aba64214fa1d66ccd0d29f476d2e55a48586920d280f88c546f81cbbececc0e01c9d05a78d6bf206e8438b9c426caa344942c1a581eecc4d365beaab8a20e + checksum: 76e898e9feaa7e11512841c13aab1a6d81f69a19ab93b0ec941dd78407fdbfe8fb08ff54e0966567aef4f24a7b94125473f0e903fb198c010bd5456058bf3432 languageName: node linkType: hard @@ -446,14 +292,13 @@ __metadata: linkType: hard "@babel/plugin-proposal-explicit-resource-management@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-proposal-explicit-resource-management@npm:7.24.7" + version: 7.25.9 + resolution: "@babel/plugin-proposal-explicit-resource-management@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 - "@babel/plugin-syntax-explicit-resource-management": ^7.24.7 + "@babel/helper-plugin-utils": ^7.25.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c7fd06651467fb54a03b521e5bd8b0ed65c9c5d34987b4c6229ec1a6e8b58f49fd4a3953776108630c0028e5d897498e062d73c888906a5d26dc97f807cdc40b + checksum: 4dd2b1751e4ec5c979d2b4481c24ee4fbefe6ff113dee6e14bb6429d5fa49836acdf2cd7800ab1847178dbba067f7b507e7fca62a06484b5271465a76cba2b45 languageName: node linkType: hard @@ -479,7 +324,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-class-properties@npm:^7.8.3": +"@babel/plugin-syntax-class-properties@npm:^7.12.13": version: 7.12.13 resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" dependencies: @@ -490,29 +335,40 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-class-static-block@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3e80814b5b6d4fe17826093918680a351c2d34398a914ce6e55d8083d72a9bdde4fbaf6a2dcea0e23a03de26dc2917ae3efd603d27099e2b98380345703bf948 + languageName: node + linkType: hard + "@babel/plugin-syntax-decorators@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-syntax-decorators@npm:7.24.7" + version: 7.25.9 + resolution: "@babel/plugin-syntax-decorators@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.25.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: dc303bcc1f5df61638f1eddc69dd55e65574bd43d8a4a098d3589f5a742e93a4ca3a173967b34eb95e4eaa994799b4c72bfed8688036e43c634be7f24db01ac5 + checksum: aaf58b17e6aa08f41f93897daa93c601a486233a0375b4231799fc5c4e7c98480aaad3c1c44cf391a62e428c5f6546f76488a1023a4036bb87cd61fa79f1173b languageName: node linkType: hard -"@babel/plugin-syntax-explicit-resource-management@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-syntax-explicit-resource-management@npm:7.24.7" +"@babel/plugin-syntax-import-attributes@npm:^7.24.7": + version: 7.26.0 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.26.0" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.25.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 5ae9b11adb15e5ef1cb009492c6b10db27a452100178309689247f023982fd23d05c38c5e5f99c35c8e40f7f26e8d4e7ff077793d62bdce46b6b8bfc47b17815 + checksum: c122aa577166c80ee67f75aebebeef4150a132c4d3109d25d7fc058bf802946f883e330f20b78c1d3e3a5ada631c8780c263d2d01b5dbaecc69efefeedd42916 languageName: node linkType: hard -"@babel/plugin-syntax-import-meta@npm:^7.8.3": +"@babel/plugin-syntax-import-meta@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" dependencies: @@ -535,17 +391,17 @@ __metadata: linkType: hard "@babel/plugin-syntax-jsx@npm:^7.24.7, @babel/plugin-syntax-jsx@npm:^7.7.2": - version: 7.24.7 - resolution: "@babel/plugin-syntax-jsx@npm:7.24.7" + version: 7.25.9 + resolution: "@babel/plugin-syntax-jsx@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.25.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 7a5ca629d8ca1e1ee78705a78e58c12920d07ed8006d7e7232b31296a384ff5e41d7b649bde5561196041037bbb9f9715be1d1c20975df87ca204f34ad15b965 + checksum: bb609d1ffb50b58f0c1bac8810d0e46a4f6c922aa171c458f3a19d66ee545d36e782d3bffbbc1fed0dc65a558bdce1caf5279316583c0fff5a2c1658982a8563 languageName: node linkType: hard -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" dependencies: @@ -567,7 +423,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-numeric-separator@npm:^7.8.3": +"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" dependencies: @@ -611,7 +467,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-top-level-await@npm:^7.8.3": +"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b317174783e6e96029b743ccff2a67d63d38756876e7e5d0ba53a322e38d9ca452c13354a57de1ad476b4c066dbae699e0ca157441da611117a47af88985ecda + languageName: node + linkType: hard + +"@babel/plugin-syntax-top-level-await@npm:^7.14.5": version: 7.14.5 resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" dependencies: @@ -622,42 +489,42 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.24.7, @babel/plugin-syntax-typescript@npm:^7.7.2": - version: 7.24.7 - resolution: "@babel/plugin-syntax-typescript@npm:7.24.7" +"@babel/plugin-syntax-typescript@npm:^7.25.9, @babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.25.9 + resolution: "@babel/plugin-syntax-typescript@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.25.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 56fe84f3044ecbf038977281648db6b63bd1301f2fff6595820dc10ee276c1d1586919d48d52a8d497ecae32c958be38f42c1c8d174dc58aad856c516dc5b35a + checksum: 0e9821e8ba7d660c36c919654e4144a70546942ae184e85b8102f2322451eae102cbfadbcadd52ce077a2b44b400ee52394c616feab7b5b9f791b910e933fd33 languageName: node linkType: hard "@babel/plugin-transform-modules-commonjs@npm:^7.24.7": - version: 7.24.8 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.8" + version: 7.25.9 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.25.9" dependencies: - "@babel/helper-module-transforms": ^7.24.8 - "@babel/helper-plugin-utils": ^7.24.8 - "@babel/helper-simple-access": ^7.24.7 + "@babel/helper-module-transforms": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-simple-access": ^7.25.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: a4cf95b1639c33382064b44558f73ee5fac023f2a94d16e549d2bb55ceebd5cbc10fcddd505d08cd5bc97f5a64af9fd155512358b7dcf7b1a0082e8945cf21c5 + checksum: 4f101f0ea4a57d1d27a7976d668c63a7d0bbb0d9c1909d8ac43c785fd1496c31e6552ffd9673730c088873df1bc64f1cc4aad7c3c90413ac5e80b33e336d80e4 languageName: node linkType: hard "@babel/plugin-transform-typescript@npm:^7.24.7": - version: 7.25.2 - resolution: "@babel/plugin-transform-typescript@npm:7.25.2" - dependencies: - "@babel/helper-annotate-as-pure": ^7.24.7 - "@babel/helper-create-class-features-plugin": ^7.25.0 - "@babel/helper-plugin-utils": ^7.24.8 - "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7 - "@babel/plugin-syntax-typescript": ^7.24.7 + version: 7.25.9 + resolution: "@babel/plugin-transform-typescript@npm:7.25.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + "@babel/helper-create-class-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 + "@babel/plugin-syntax-typescript": ^7.25.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b0267128d93560a4350919f7230a3b497e20fb8611d9f04bb3560d6b38877305ccad4c40903160263361c6930a84dbcb5b21b8ea923531bda51f67bffdc2dd0b + checksum: 6dd1303f1b9f314e22c6c54568a8b9709a081ce97be757d4004f960e3e73d6b819e6b49cee6cf1fc8455511e41127a8b580fa34602de62d17ab8a0b2d0ccf183 languageName: node linkType: hard @@ -677,98 +544,57 @@ __metadata: linkType: hard "@babel/runtime-corejs3@npm:^7.12.5": - version: 7.24.7 - resolution: "@babel/runtime-corejs3@npm:7.24.7" + version: 7.26.0 + resolution: "@babel/runtime-corejs3@npm:7.26.0" dependencies: core-js-pure: ^3.30.2 regenerator-runtime: ^0.14.0 - checksum: fb5cae960a2d4cbcb2144059dfa9dbe5530d027fa210a5bc37c67c3014226c32390f221320066124872f3d6c4830af17a19da09c10ab114da9b6fa8ab4377cea + checksum: c6c5adac03e33aa4b5bb636a677aa2a6e400b91d91aac5674448d20af4100b80a8bedfb742338e4236e22c092d3edeb27210efdf48bd13ec353bd899f097ff41 languageName: node linkType: hard "@babel/runtime@npm:^7.12.5": - version: 7.24.7 - resolution: "@babel/runtime@npm:7.24.7" + version: 7.26.0 + resolution: "@babel/runtime@npm:7.26.0" dependencies: regenerator-runtime: ^0.14.0 - checksum: d17f29eed6f848ac15cdf4202a910b741facfb0419a9d79e5c7fa37df6362fc3227f1cc2e248cc6db5e53ddffb4caa6686c488e6e80ce3d29c36a4e74c8734ea + checksum: c8e2c0504ab271b3467a261a8f119bf2603eb857a0d71e37791f4e3fae00f681365073cc79f141ddaa90c6077c60ba56448004ad5429d07ac73532be9f7cf28a languageName: node linkType: hard -"@babel/template@npm:^7.24.7, @babel/template@npm:^7.3.3": - version: 7.24.7 - resolution: "@babel/template@npm:7.24.7" +"@babel/template@npm:^7.25.9, @babel/template@npm:^7.3.3": + version: 7.25.9 + resolution: "@babel/template@npm:7.25.9" dependencies: - "@babel/code-frame": ^7.24.7 - "@babel/parser": ^7.24.7 - "@babel/types": ^7.24.7 - checksum: ea90792fae708ddf1632e54c25fe1a86643d8c0132311f81265d2bdbdd42f9f4fac65457056c1b6ca87f7aa0d6a795b549566774bba064bdcea2034ab3960ee9 + "@babel/code-frame": ^7.25.9 + "@babel/parser": ^7.25.9 + "@babel/types": ^7.25.9 + checksum: 103641fea19c7f4e82dc913aa6b6ac157112a96d7c724d513288f538b84bae04fb87b1f1e495ac1736367b1bc30e10f058b30208fb25f66038e1f1eb4e426472 languageName: node linkType: hard -"@babel/template@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/template@npm:7.25.0" +"@babel/traverse@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/traverse@npm:7.25.9" dependencies: - "@babel/code-frame": ^7.24.7 - "@babel/parser": ^7.25.0 - "@babel/types": ^7.25.0 - checksum: 3f2db568718756d0daf2a16927b78f00c425046b654cd30b450006f2e84bdccaf0cbe6dc04994aa1f5f6a4398da2f11f3640a4d3ee31722e43539c4c919c817b - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/traverse@npm:7.24.7" - dependencies: - "@babel/code-frame": ^7.24.7 - "@babel/generator": ^7.24.7 - "@babel/helper-environment-visitor": ^7.24.7 - "@babel/helper-function-name": ^7.24.7 - "@babel/helper-hoist-variables": ^7.24.7 - "@babel/helper-split-export-declaration": ^7.24.7 - "@babel/parser": ^7.24.7 - "@babel/types": ^7.24.7 + "@babel/code-frame": ^7.25.9 + "@babel/generator": ^7.25.9 + "@babel/parser": ^7.25.9 + "@babel/template": ^7.25.9 + "@babel/types": ^7.25.9 debug: ^4.3.1 globals: ^11.1.0 - checksum: 7cd366afe9e7ee77e493779fdf24f67bf5595247289364f4689e29688572505eaeb886d7a8f20ebb9c29fc2de7d0895e4ff9e203e78e39ac67239724d45aa83b + checksum: 901d325662ff1dd9bc51de00862e01055fa6bc374f5297d7e3731f2f0e268bbb1d2141f53fa82860aa308ee44afdcf186a948f16c83153927925804b95a9594d languageName: node linkType: hard -"@babel/traverse@npm:^7.24.8, @babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.2": - version: 7.25.3 - resolution: "@babel/traverse@npm:7.25.3" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0, @babel/types@npm:^7.3.3": + version: 7.26.0 + resolution: "@babel/types@npm:7.26.0" dependencies: - "@babel/code-frame": ^7.24.7 - "@babel/generator": ^7.25.0 - "@babel/parser": ^7.25.3 - "@babel/template": ^7.25.0 - "@babel/types": ^7.25.2 - debug: ^4.3.1 - globals: ^11.1.0 - checksum: 5661308b1357816f1d4e2813a5dd82c6053617acc08c5c95db051b8b6577d07c4446bc861c9a5e8bf294953ac8266ae13d7d9d856b6b889fc0d34c1f51abbd8c - languageName: node - linkType: hard - -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.24.7, @babel/types@npm:^7.3.3, @babel/types@npm:^7.8.3": - version: 7.24.7 - resolution: "@babel/types@npm:7.24.7" - dependencies: - "@babel/helper-string-parser": ^7.24.7 - "@babel/helper-validator-identifier": ^7.24.7 - to-fast-properties: ^2.0.0 - checksum: 3e4437fced97e02982972ce5bebd318c47d42c9be2152c0fd28c6f786cc74086cc0a8fb83b602b846e41df37f22c36254338eada1a47ef9d8a1ec92332ca3ea8 - languageName: node - linkType: hard - -"@babel/types@npm:^7.24.8, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2": - version: 7.25.2 - resolution: "@babel/types@npm:7.25.2" - dependencies: - "@babel/helper-string-parser": ^7.24.8 - "@babel/helper-validator-identifier": ^7.24.7 - to-fast-properties: ^2.0.0 - checksum: f73f66ba903c6f7e38f519a33d53a67d49c07e208e59ea65250362691dc546c6da7ab90ec66ee79651ef697329872f6f97eb19a6dfcacc026fd05e76a563c5d2 + "@babel/helper-string-parser": ^7.25.9 + "@babel/helper-validator-identifier": ^7.25.9 + checksum: a3dd37dabac693018872da96edb8c1843a605c1bfacde6c3f504fba79b972426a6f24df70aa646356c0c1b19bdd2c722c623c684a996c002381071680602280d languageName: node linkType: hard @@ -780,17 +606,17 @@ __metadata: linkType: hard "@biomejs/biome@npm:^1.8.3": - version: 1.8.3 - resolution: "@biomejs/biome@npm:1.8.3" - dependencies: - "@biomejs/cli-darwin-arm64": 1.8.3 - "@biomejs/cli-darwin-x64": 1.8.3 - "@biomejs/cli-linux-arm64": 1.8.3 - "@biomejs/cli-linux-arm64-musl": 1.8.3 - "@biomejs/cli-linux-x64": 1.8.3 - "@biomejs/cli-linux-x64-musl": 1.8.3 - "@biomejs/cli-win32-arm64": 1.8.3 - "@biomejs/cli-win32-x64": 1.8.3 + version: 1.9.4 + resolution: "@biomejs/biome@npm:1.9.4" + dependencies: + "@biomejs/cli-darwin-arm64": 1.9.4 + "@biomejs/cli-darwin-x64": 1.9.4 + "@biomejs/cli-linux-arm64": 1.9.4 + "@biomejs/cli-linux-arm64-musl": 1.9.4 + "@biomejs/cli-linux-x64": 1.9.4 + "@biomejs/cli-linux-x64-musl": 1.9.4 + "@biomejs/cli-win32-arm64": 1.9.4 + "@biomejs/cli-win32-x64": 1.9.4 dependenciesMeta: "@biomejs/cli-darwin-arm64": optional: true @@ -810,255 +636,254 @@ __metadata: optional: true bin: biome: bin/biome - checksum: c5e6379aa640ab1d2b6490abd3820b6998b08d94bb6a3907c39d40c4396efe26996cbf1f03bda6ab86cd83adbb52b5124d81a68dd914c3a03eedc8070d72bce9 + checksum: 0bb448d9cf07c76556e0af62cec4262ccdf2d2800a472459c0666c180fdb74ac602a5d87325e926e860cc41c34166fca27f753afc24b2264317f2f29861005b5 languageName: node linkType: hard -"@biomejs/cli-darwin-arm64@npm:1.8.3": - version: 1.8.3 - resolution: "@biomejs/cli-darwin-arm64@npm:1.8.3" +"@biomejs/cli-darwin-arm64@npm:1.9.4": + version: 1.9.4 + resolution: "@biomejs/cli-darwin-arm64@npm:1.9.4" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@biomejs/cli-darwin-x64@npm:1.8.3": - version: 1.8.3 - resolution: "@biomejs/cli-darwin-x64@npm:1.8.3" +"@biomejs/cli-darwin-x64@npm:1.9.4": + version: 1.9.4 + resolution: "@biomejs/cli-darwin-x64@npm:1.9.4" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@biomejs/cli-linux-arm64-musl@npm:1.8.3": - version: 1.8.3 - resolution: "@biomejs/cli-linux-arm64-musl@npm:1.8.3" +"@biomejs/cli-linux-arm64-musl@npm:1.9.4": + version: 1.9.4 + resolution: "@biomejs/cli-linux-arm64-musl@npm:1.9.4" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@biomejs/cli-linux-arm64@npm:1.8.3": - version: 1.8.3 - resolution: "@biomejs/cli-linux-arm64@npm:1.8.3" +"@biomejs/cli-linux-arm64@npm:1.9.4": + version: 1.9.4 + resolution: "@biomejs/cli-linux-arm64@npm:1.9.4" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@biomejs/cli-linux-x64-musl@npm:1.8.3": - version: 1.8.3 - resolution: "@biomejs/cli-linux-x64-musl@npm:1.8.3" +"@biomejs/cli-linux-x64-musl@npm:1.9.4": + version: 1.9.4 + resolution: "@biomejs/cli-linux-x64-musl@npm:1.9.4" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@biomejs/cli-linux-x64@npm:1.8.3": - version: 1.8.3 - resolution: "@biomejs/cli-linux-x64@npm:1.8.3" +"@biomejs/cli-linux-x64@npm:1.9.4": + version: 1.9.4 + resolution: "@biomejs/cli-linux-x64@npm:1.9.4" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@biomejs/cli-win32-arm64@npm:1.8.3": - version: 1.8.3 - resolution: "@biomejs/cli-win32-arm64@npm:1.8.3" +"@biomejs/cli-win32-arm64@npm:1.9.4": + version: 1.9.4 + resolution: "@biomejs/cli-win32-arm64@npm:1.9.4" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@biomejs/cli-win32-x64@npm:1.8.3": - version: 1.8.3 - resolution: "@biomejs/cli-win32-x64@npm:1.8.3" +"@biomejs/cli-win32-x64@npm:1.9.4": + version: 1.9.4 + resolution: "@biomejs/cli-win32-x64@npm:1.9.4" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@commitlint/cli@npm:^19.4.1": - version: 19.4.1 - resolution: "@commitlint/cli@npm:19.4.1" - dependencies: - "@commitlint/format": ^19.3.0 - "@commitlint/lint": ^19.4.1 - "@commitlint/load": ^19.4.0 - "@commitlint/read": ^19.4.0 - "@commitlint/types": ^19.0.3 - execa: ^8.0.1 + version: 19.5.0 + resolution: "@commitlint/cli@npm:19.5.0" + dependencies: + "@commitlint/format": ^19.5.0 + "@commitlint/lint": ^19.5.0 + "@commitlint/load": ^19.5.0 + "@commitlint/read": ^19.5.0 + "@commitlint/types": ^19.5.0 + tinyexec: ^0.3.0 yargs: ^17.0.0 bin: commitlint: cli.js - checksum: 3712016a46f6f3d2ce6b6fa935f4d6e82c58d569b1b1b147dc61bb61f75a4209540e79a2a734ddc41e7c781683133b4f017794720f031f0136d3bb32752e7c32 + checksum: d4489acd353ef8cdefd6c8127b1b40d84382db8507a1f4d5e31c5a6319bd8b59e80d9c7d821bbb296617fb4c4a02f1b6aee11eb4fb455cb8e4c25c43b23f67c2 languageName: node linkType: hard "@commitlint/config-conventional@npm:^19.4.1": - version: 19.4.1 - resolution: "@commitlint/config-conventional@npm:19.4.1" + version: 19.5.0 + resolution: "@commitlint/config-conventional@npm:19.5.0" dependencies: - "@commitlint/types": ^19.0.3 + "@commitlint/types": ^19.5.0 conventional-changelog-conventionalcommits: ^7.0.2 - checksum: f672b8ad332ab8cc8ebefbaac1b8f8164864b969745f701982ed526a153127a507d9feb38722e15ba8eae1ad959b1ae29fe615e51f695d8120b5c455883653a3 + checksum: 96498a69c7136f672060a4ff025bc5d81946d3941f9319b58346f0894db70a20aa86c4ad2845d594696d7063dace5d85763f5f3acf6f6494fb6af91cbd65efac languageName: node linkType: hard -"@commitlint/config-validator@npm:^19.0.3": - version: 19.0.3 - resolution: "@commitlint/config-validator@npm:19.0.3" +"@commitlint/config-validator@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/config-validator@npm:19.5.0" dependencies: - "@commitlint/types": ^19.0.3 + "@commitlint/types": ^19.5.0 ajv: ^8.11.0 - checksum: a1a9678e0994d87fa98f0aee1a877dfaf60640b657589260ec958898d51affabba73d6684edafa1cc979e4e94b51f14fbd9b605eae77c2838ee52bcbcc110bef + checksum: 681bfdcabcb0ff794ea65d95128083869c97039c3a352219d6d88a2d4f3d0412b8ec515db77433fc6b0fce072051beb103d16889d42e76ea97873191ec191b23 languageName: node linkType: hard -"@commitlint/ensure@npm:^19.0.3": - version: 19.0.3 - resolution: "@commitlint/ensure@npm:19.0.3" +"@commitlint/ensure@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/ensure@npm:19.5.0" dependencies: - "@commitlint/types": ^19.0.3 + "@commitlint/types": ^19.5.0 lodash.camelcase: ^4.3.0 lodash.kebabcase: ^4.1.1 lodash.snakecase: ^4.1.1 lodash.startcase: ^4.4.0 lodash.upperfirst: ^4.3.1 - checksum: d8fdc4712985f9ccdbd871c9eabb9d2bdde22296b882b42bd32ab52b6679c5d799ff557d20a99cebb0008831fd31a540d771331e6e5e26bbafbb6b88f47148b6 + checksum: a9d575637121221cb63232ee96024a63614052ccc205ec8fdab53feed70104b85608e31b4632f280d2876f10a2243474191d96e448b222abfc8d8ab48f9f8e7e languageName: node linkType: hard -"@commitlint/execute-rule@npm:^19.0.0": - version: 19.0.0 - resolution: "@commitlint/execute-rule@npm:19.0.0" - checksum: 4c5cbf9ab0e2b85b00ceea84e5598b1b3cceaa20a655ee954c45259cca9efc80cf5cf7d9eec04715a100c2da282cbcf6aba960ad53a47178090c0513426ac236 +"@commitlint/execute-rule@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/execute-rule@npm:19.5.0" + checksum: ff05568c3a287ef8564171d5bc5d4510b2e00b552e4703f79db3d62f3cba9d669710717695d199e04c2117d41f9e72d7e43a342d5c1b62d456bc8e8bb7dda1e9 languageName: node linkType: hard -"@commitlint/format@npm:^19.3.0": - version: 19.3.0 - resolution: "@commitlint/format@npm:19.3.0" +"@commitlint/format@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/format@npm:19.5.0" dependencies: - "@commitlint/types": ^19.0.3 + "@commitlint/types": ^19.5.0 chalk: ^5.3.0 - checksum: cc0e1e0e6d5eea76b856ad1be879de166c3d1385e1ae0e1bb78c575f9b78b53d92a56cd4719427cdba9cbb9a10235768da29144da9892596525c923d126951dd + checksum: 685b64ebee936d71bbbf66276b11d50b0227f2ad0df3c00317d5b7e25bce8b1b8dbc65cc7c5c7fafc76cad11a83ad4378a666bf8f12a3eb1c7d6a2a6c6cb25aa languageName: node linkType: hard -"@commitlint/is-ignored@npm:^19.2.2": - version: 19.2.2 - resolution: "@commitlint/is-ignored@npm:19.2.2" +"@commitlint/is-ignored@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/is-ignored@npm:19.5.0" dependencies: - "@commitlint/types": ^19.0.3 + "@commitlint/types": ^19.5.0 semver: ^7.6.0 - checksum: f412734496aba808c8bcbddd59c615600d62447ad2b62049805a044b1f299ff6628e2c9ce5022e55848099edc2591f62a7780842d9dffcd60ab3889bc93fea62 + checksum: 1c7ee34686fd098587f9717763473477d49e847f470a317903f922d13091271d013a046f61b43b31b34eba4e4b0f76369b7427588269bbdc4c5f622d3ace2c95 languageName: node linkType: hard -"@commitlint/lint@npm:^19.4.1": - version: 19.4.1 - resolution: "@commitlint/lint@npm:19.4.1" +"@commitlint/lint@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/lint@npm:19.5.0" dependencies: - "@commitlint/is-ignored": ^19.2.2 - "@commitlint/parse": ^19.0.3 - "@commitlint/rules": ^19.4.1 - "@commitlint/types": ^19.0.3 - checksum: 9c6ada4892a1841a317bb7938ae1187a254535dd03455d8c630944451bdf01717eccc6cfc19b3a516db06074883eb154fbf76c6146cf2c57ba7f9a9f07107eec + "@commitlint/is-ignored": ^19.5.0 + "@commitlint/parse": ^19.5.0 + "@commitlint/rules": ^19.5.0 + "@commitlint/types": ^19.5.0 + checksum: 85a05b9a913da731b70645a744762e1a1c109131c2cd36fcf2cf88cdf8d8756c8a0b271611de58c6fb29ace571c784ab8ef2568cdc9fdc4ef3e2d635d35b7c4f languageName: node linkType: hard -"@commitlint/load@npm:^19.4.0": - version: 19.4.0 - resolution: "@commitlint/load@npm:19.4.0" +"@commitlint/load@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/load@npm:19.5.0" dependencies: - "@commitlint/config-validator": ^19.0.3 - "@commitlint/execute-rule": ^19.0.0 - "@commitlint/resolve-extends": ^19.1.0 - "@commitlint/types": ^19.0.3 + "@commitlint/config-validator": ^19.5.0 + "@commitlint/execute-rule": ^19.5.0 + "@commitlint/resolve-extends": ^19.5.0 + "@commitlint/types": ^19.5.0 chalk: ^5.3.0 cosmiconfig: ^9.0.0 cosmiconfig-typescript-loader: ^5.0.0 lodash.isplainobject: ^4.0.6 lodash.merge: ^4.6.2 lodash.uniq: ^4.5.0 - checksum: ebf3c8f4567cef9b4099d740f145eea6dc8335059ebfbda18d9c65701b810c46634aeeea721a6c7ebbef6cf8d11ccf1402891fee89ca90652f723987ee5c410c + checksum: 87a9450c768632c09e9d98993752a5622aee698642eee5a9b31c3c48625455e043406b7ea6e02a8f41d86c524c9ecbdb9b823caf67da3048f0d96531177fda28 languageName: node linkType: hard -"@commitlint/message@npm:^19.0.0": - version: 19.0.0 - resolution: "@commitlint/message@npm:19.0.0" - checksum: 446ee97c12a4175a8b7a4cbf3754c01d54cd911973c7af9a2eac69277fb891e638ddc3db132f57588883b68eadf59074d388ec1808a205957042f71027244167 +"@commitlint/message@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/message@npm:19.5.0" + checksum: ad6993476ce3e6ed6ed7ae5327ac8d5116ca70168d9de6dff656a7e6f2b9f01a1c3ac7a13418831b5cdc3148ea9bcd78c32bdb7aa863280108e176ff803f7a51 languageName: node linkType: hard -"@commitlint/parse@npm:^19.0.3": - version: 19.0.3 - resolution: "@commitlint/parse@npm:19.0.3" +"@commitlint/parse@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/parse@npm:19.5.0" dependencies: - "@commitlint/types": ^19.0.3 + "@commitlint/types": ^19.5.0 conventional-changelog-angular: ^7.0.0 conventional-commits-parser: ^5.0.0 - checksum: ddd7a6007d37d7154f6b18bfa06dc26beb109cd4bcabe7e9ca2ff24088325ab2c7b09cc01cceb9d62e6e60affffe3d19e9685fab06d3506d047166d888d25487 + checksum: 2a6f8bbbd79aa36a7e1128c60cecb322557110aa4aa8757c741c2f79071c540ba56957cef81fb64f4a304535e462d0c48b5c1ef1b2766fea7971d38ec5ad6384 languageName: node linkType: hard -"@commitlint/read@npm:^19.4.0": - version: 19.4.0 - resolution: "@commitlint/read@npm:19.4.0" +"@commitlint/read@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/read@npm:19.5.0" dependencies: - "@commitlint/top-level": ^19.0.0 - "@commitlint/types": ^19.0.3 - execa: ^8.0.1 + "@commitlint/top-level": ^19.5.0 + "@commitlint/types": ^19.5.0 git-raw-commits: ^4.0.0 minimist: ^1.2.8 - checksum: 732ab482c3acc7cf00d28db02d45701f38c381712a46e2d5f5f7faabc14b87d849c64184df80b7d197083a71fbd7ec05cc5ae6a1814c1590543f9489e46f9d28 + tinyexec: ^0.3.0 + checksum: 0ea2da48ae1bab9add9e831a1659306567755c20ec74cf04e6e50ef1e520970decd259af652995f55eef422a3f1382f0e64e5fbc23606176f766f71076ad872b languageName: node linkType: hard -"@commitlint/resolve-extends@npm:^19.1.0": - version: 19.1.0 - resolution: "@commitlint/resolve-extends@npm:19.1.0" +"@commitlint/resolve-extends@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/resolve-extends@npm:19.5.0" dependencies: - "@commitlint/config-validator": ^19.0.3 - "@commitlint/types": ^19.0.3 + "@commitlint/config-validator": ^19.5.0 + "@commitlint/types": ^19.5.0 global-directory: ^4.0.1 import-meta-resolve: ^4.0.0 lodash.mergewith: ^4.6.2 resolve-from: ^5.0.0 - checksum: 87df82cfad1e157e600d3bef486c84ab0706e6b21411c97770104f7d1f824524606d8d6493418f98a529ab6c10d3691b50d6a779b07ef6dca5c5fd69848f4951 + checksum: 4198541f25fad991d9214373419a97aec9ff068a960d0a7f2070ea4c456aef0ac7c1ad49b55b20b0d4c57c19a55fad76806597d70a739781fdc74b6fbd5339a3 languageName: node linkType: hard -"@commitlint/rules@npm:^19.4.1": - version: 19.4.1 - resolution: "@commitlint/rules@npm:19.4.1" +"@commitlint/rules@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/rules@npm:19.5.0" dependencies: - "@commitlint/ensure": ^19.0.3 - "@commitlint/message": ^19.0.0 - "@commitlint/to-lines": ^19.0.0 - "@commitlint/types": ^19.0.3 - execa: ^8.0.1 - checksum: c5626278aa6ee08194f1b7880345fcbc64b19a2f7ca52f54cd027fb19337fb60008b55a2fe7a4159dd227d41ffb48b30e51347101a58f842d37991a416a678a7 + "@commitlint/ensure": ^19.5.0 + "@commitlint/message": ^19.5.0 + "@commitlint/to-lines": ^19.5.0 + "@commitlint/types": ^19.5.0 + checksum: 2c879d2cd50a3b4572cea41f044cc3091f0a11ef5ead0bb54bfa564ea637e0d93e08ae322ec4c99bb5b379b82835ace595d1c8dab6e35c1b68b63292160a61b3 languageName: node linkType: hard -"@commitlint/to-lines@npm:^19.0.0": - version: 19.0.0 - resolution: "@commitlint/to-lines@npm:19.0.0" - checksum: 5e7d5679aa242cd21be2076a8c8715aa3c9f4c3133f588df08c6b02f56a8a5b1a5d9e402076bd926dd2b61883e4b2c53fd6c9aa3554e3f54cd2296b2566eb1c2 +"@commitlint/to-lines@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/to-lines@npm:19.5.0" + checksum: 68aaca7bf1331b5f2f604e814d57f483ead81a8296f8cff5667249510a5601825dfbbaccade3d02e0aca580b973c01419276d693cc9aa888cbe11022daa9dce6 languageName: node linkType: hard -"@commitlint/top-level@npm:^19.0.0": - version: 19.0.0 - resolution: "@commitlint/top-level@npm:19.0.0" +"@commitlint/top-level@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/top-level@npm:19.5.0" dependencies: find-up: ^7.0.0 - checksum: 47b0994d03f26caf2812110ead535bd10157beed6b3dff9cbb4eea165de9245673ba7d31829cd54af5855f7b075ebbf812b1f79586248be3932797888efeadf5 + checksum: f6b5a3746c458e12c7a9e93f7c856ba90fba6e61db614ea1201e6b6e92cb8161dd13e88d8c9b408709ea0c19bc949cffcd1dd356cb6f51fc2ede8df48c1fd410 languageName: node linkType: hard -"@commitlint/types@npm:^19.0.3": - version: 19.0.3 - resolution: "@commitlint/types@npm:19.0.3" +"@commitlint/types@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/types@npm:19.5.0" dependencies: "@types/conventional-commits-parser": ^5.0.0 chalk: ^5.3.0 - checksum: 44e67f4861f9b137f43a441f8ab255676b7a276c82ca46ba7846ca1057d170af92a87d3e2a1378713dc4e33a68c8af513683cb96dcd29544e48e2c825109ea6f + checksum: a26f33ec6987d7d93bdbd7e1b177cfac30ca056ea383faf343c6a09c0441aa057a24be1459c3d4e7e91edd2ecf8d6c4dd670948c9d22646d64767137c6db098a languageName: node linkType: hard @@ -1071,170 +896,169 @@ __metadata: languageName: node linkType: hard -"@inquirer/checkbox@npm:^2.4.6": - version: 2.4.6 - resolution: "@inquirer/checkbox@npm:2.4.6" +"@inquirer/checkbox@npm:^3.0.1": + version: 3.0.1 + resolution: "@inquirer/checkbox@npm:3.0.1" dependencies: - "@inquirer/core": ^9.0.9 - "@inquirer/figures": ^1.0.5 - "@inquirer/type": ^1.5.2 + "@inquirer/core": ^9.2.1 + "@inquirer/figures": ^1.0.6 + "@inquirer/type": ^2.0.0 ansi-escapes: ^4.3.2 yoctocolors-cjs: ^2.1.2 - checksum: 35c03109721a4ac162bdc38405c3216805969bce7d3302be678d4fbf664292554f3cd4f241a97a600f362df36302ab7ff3f35864d9f90dce24e9ba5555fbaafa + checksum: 04ad695f68d361087b4036ed67f7ef17d03949c6fe59525380c299c490cac9766b1d687962612c00e5946b4120bda7ab33c76c9964fb22c51dd725f322a999fc languageName: node linkType: hard -"@inquirer/confirm@npm:^3.1.21": - version: 3.1.21 - resolution: "@inquirer/confirm@npm:3.1.21" +"@inquirer/confirm@npm:^4.0.1": + version: 4.0.1 + resolution: "@inquirer/confirm@npm:4.0.1" dependencies: - "@inquirer/core": ^9.0.9 - "@inquirer/type": ^1.5.2 - checksum: 095274078a7dc606bc25ddfbcf3ed9af65ff516bfedc1910e6405470c8a867ceaa77a226b76524847613ff7af225451c741585b5c50f70cd08378d1c385cebad + "@inquirer/core": ^9.2.1 + "@inquirer/type": ^2.0.0 + checksum: 9f80834fcba308b047f4953abee4ff3837693400402797bd160dee64c019a63d9d9d866bbbf03d56f4aae8013c27991a0d405765120fe49aea2a57103af53426 languageName: node linkType: hard -"@inquirer/core@npm:^9.0.9": - version: 9.0.9 - resolution: "@inquirer/core@npm:9.0.9" +"@inquirer/core@npm:^9.2.1": + version: 9.2.1 + resolution: "@inquirer/core@npm:9.2.1" dependencies: - "@inquirer/figures": ^1.0.5 - "@inquirer/type": ^1.5.2 + "@inquirer/figures": ^1.0.6 + "@inquirer/type": ^2.0.0 "@types/mute-stream": ^0.0.4 - "@types/node": ^22.1.0 + "@types/node": ^22.5.5 "@types/wrap-ansi": ^3.0.0 ansi-escapes: ^4.3.2 - cli-spinners: ^2.9.2 cli-width: ^4.1.0 mute-stream: ^1.0.0 signal-exit: ^4.1.0 strip-ansi: ^6.0.1 wrap-ansi: ^6.2.0 yoctocolors-cjs: ^2.1.2 - checksum: 792c830f81bd27bf55d5c98ccc0f0866b12d78dc49bc6eabd4cdecefa839e319b851bdbd0ca5d333a2d0d7b31d7f20eb5d5fd1ca1542aa5a32754c4feb185d57 + checksum: 681339aac03b6998e7fee1c5a0a15951e9268b7be20fd7532f180b408893f9e7203020a57d40dc78352d281f19b66222df83c68f73a125f6e1beadfa0df3920c languageName: node linkType: hard -"@inquirer/editor@npm:^2.1.21": - version: 2.1.21 - resolution: "@inquirer/editor@npm:2.1.21" +"@inquirer/editor@npm:^3.0.1": + version: 3.0.1 + resolution: "@inquirer/editor@npm:3.0.1" dependencies: - "@inquirer/core": ^9.0.9 - "@inquirer/type": ^1.5.2 + "@inquirer/core": ^9.2.1 + "@inquirer/type": ^2.0.0 external-editor: ^3.1.0 - checksum: 9529b8f2c78c4cf8dd1b1020906856fd5e72fb384a1832b9d042238ca7e0e2e3b05ab18b0f6f06ade87870af0980b3bdbbcbe92bc0362390008274af4a50b742 + checksum: 448461a8aae52ce9f0374d4561240aad3258a706c489b44501811d246b2c13dcb8db52248967c16295790f82d8de2e2b42fa2d543bed36733c0b7c4c6a937def languageName: node linkType: hard -"@inquirer/expand@npm:^2.1.21": - version: 2.1.21 - resolution: "@inquirer/expand@npm:2.1.21" +"@inquirer/expand@npm:^3.0.1": + version: 3.0.1 + resolution: "@inquirer/expand@npm:3.0.1" dependencies: - "@inquirer/core": ^9.0.9 - "@inquirer/type": ^1.5.2 + "@inquirer/core": ^9.2.1 + "@inquirer/type": ^2.0.0 yoctocolors-cjs: ^2.1.2 - checksum: ffa2a6cf2f8ca5ac7590dc6d4f5f6552c37a665aed74659875e8f56dc5db665e3d603879804f69a5079cb6cec28a1cd45629ccac5b77b9bafc424886f12fa1a5 + checksum: d2450c1818fedf2e4a0741f953439e27a7dec5d63d35d96483f962cd66defbf53db3c4d223b7bb73e0c1a9076f11c82a32f1501274218c23a35acf70952f53b4 languageName: node linkType: hard -"@inquirer/figures@npm:^1.0.5": - version: 1.0.5 - resolution: "@inquirer/figures@npm:1.0.5" - checksum: 01dc7b95fe7b030b0577d59f45c4fa5c002dccb43ac75ff106d7142825e09dee63a6f9c42b044da2bc964bf38c40229a112a26505a68f3912b15dc8304106bbc +"@inquirer/figures@npm:^1.0.6": + version: 1.0.7 + resolution: "@inquirer/figures@npm:1.0.7" + checksum: 82edc998d0ace2f147eb332177f451c02e6a4a6e829d47817f5a4b3341c12cd0850b92ee3187d483328cce5824b870ed75e868850b6ac819447b9d56501f01cb languageName: node linkType: hard -"@inquirer/input@npm:^2.2.8": - version: 2.2.8 - resolution: "@inquirer/input@npm:2.2.8" +"@inquirer/input@npm:^3.0.1": + version: 3.0.1 + resolution: "@inquirer/input@npm:3.0.1" dependencies: - "@inquirer/core": ^9.0.9 - "@inquirer/type": ^1.5.2 - checksum: 8a1101f889181f239c131ce98650e515f89e80f3ccda76484aae74241729fa6dd1bb625510b86252f012f8d6da118013d2c2af026b1719dab8b93376dacfbc79 + "@inquirer/core": ^9.2.1 + "@inquirer/type": ^2.0.0 + checksum: a0ca28248aaa7b700adc385d840e27d29c171b9fbeec8debd2b63c8ed4ad7cfc643f224d122735d4044e54bfd1bb8cf29d9536e520246d2daa515c62ffa02ef7 languageName: node linkType: hard -"@inquirer/number@npm:^1.0.9": - version: 1.0.9 - resolution: "@inquirer/number@npm:1.0.9" +"@inquirer/number@npm:^2.0.1": + version: 2.0.1 + resolution: "@inquirer/number@npm:2.0.1" dependencies: - "@inquirer/core": ^9.0.9 - "@inquirer/type": ^1.5.2 - checksum: 289c1508f5f444f6df437e5173afb9394ec0f86d51252cd8b296b5e8c90429d6e8a9aa05391771d480f765941c9b4fb506fceaf8bd7478caa02e79ae74f49456 + "@inquirer/core": ^9.2.1 + "@inquirer/type": ^2.0.0 + checksum: b8f4d133fff768374232ae377e076539b3518e16accfe57fddb2d1d9d6bfa3d08fdd9e8e29e963926f9bd5a661ba35e446a15456bf7b986f05b93fa2f532cfff languageName: node linkType: hard -"@inquirer/password@npm:^2.1.21": - version: 2.1.21 - resolution: "@inquirer/password@npm:2.1.21" +"@inquirer/password@npm:^3.0.1": + version: 3.0.1 + resolution: "@inquirer/password@npm:3.0.1" dependencies: - "@inquirer/core": ^9.0.9 - "@inquirer/type": ^1.5.2 + "@inquirer/core": ^9.2.1 + "@inquirer/type": ^2.0.0 ansi-escapes: ^4.3.2 - checksum: d370bf48d1960196234e469dc1dc13f03f8008b09700c9ad706a6de8866f60cfde1ce83397ad5533004c7ec22df5de255ad15afdaee1189d50479dcc27f19f4a + checksum: 9d1c1cb1f428ec9b38cc25fe9aeb415d3b188979909b32f0dd89bc31c0c24cfe64bd4994acc63d1cfc4b6ac3819bed7055604e634f6998a41017ca7aa0c74718 languageName: node linkType: hard -"@inquirer/prompts@npm:^5.3.6": - version: 5.3.7 - resolution: "@inquirer/prompts@npm:5.3.7" +"@inquirer/prompts@npm:^6.0.0": + version: 6.0.1 + resolution: "@inquirer/prompts@npm:6.0.1" dependencies: - "@inquirer/checkbox": ^2.4.6 - "@inquirer/confirm": ^3.1.21 - "@inquirer/editor": ^2.1.21 - "@inquirer/expand": ^2.1.21 - "@inquirer/input": ^2.2.8 - "@inquirer/number": ^1.0.9 - "@inquirer/password": ^2.1.21 - "@inquirer/rawlist": ^2.2.3 - "@inquirer/search": ^1.0.6 - "@inquirer/select": ^2.4.6 - checksum: 007665db08061821873e63df6a1c71a41794ca16d4399adbfc5ae7af7f3b55ae66393b29aff74263b380b1e164392c3f7191156b64c7eb53a5afc7c16fa13429 + "@inquirer/checkbox": ^3.0.1 + "@inquirer/confirm": ^4.0.1 + "@inquirer/editor": ^3.0.1 + "@inquirer/expand": ^3.0.1 + "@inquirer/input": ^3.0.1 + "@inquirer/number": ^2.0.1 + "@inquirer/password": ^3.0.1 + "@inquirer/rawlist": ^3.0.1 + "@inquirer/search": ^2.0.1 + "@inquirer/select": ^3.0.1 + checksum: 1e1e03be328595b92acffdb56a7b9cecca4c5303cedaf5d808e25328e977c1860d58d00731d006c828a8065b85a5e77cc7ed6c3ff878ad4ae1b6854decd43038 languageName: node linkType: hard -"@inquirer/rawlist@npm:^2.2.3": - version: 2.2.3 - resolution: "@inquirer/rawlist@npm:2.2.3" +"@inquirer/rawlist@npm:^3.0.1": + version: 3.0.1 + resolution: "@inquirer/rawlist@npm:3.0.1" dependencies: - "@inquirer/core": ^9.0.9 - "@inquirer/type": ^1.5.2 + "@inquirer/core": ^9.2.1 + "@inquirer/type": ^2.0.0 yoctocolors-cjs: ^2.1.2 - checksum: 90d45b3bdc3f4f6bda77fef2c1adced50a2d001db5311a59adc564a6bf21790baa27a240e48430295b78b84e8ebf45ed304ab74d89d81ee930e18fd3fb568c5a + checksum: c50646c567d9722142a20b6d13a53782719a3e8e9050471c91900b4f5abdaca81e59cb79c25c5e3fbaa663a7944ff269352b00b3c1e17e5acbf175ff87fa24a3 languageName: node linkType: hard -"@inquirer/search@npm:^1.0.6": - version: 1.0.6 - resolution: "@inquirer/search@npm:1.0.6" +"@inquirer/search@npm:^2.0.1": + version: 2.0.1 + resolution: "@inquirer/search@npm:2.0.1" dependencies: - "@inquirer/core": ^9.0.9 - "@inquirer/figures": ^1.0.5 - "@inquirer/type": ^1.5.2 + "@inquirer/core": ^9.2.1 + "@inquirer/figures": ^1.0.6 + "@inquirer/type": ^2.0.0 yoctocolors-cjs: ^2.1.2 - checksum: 281d6373a353801e423030b7d7d4d9919bd8be45bb9215219a4ee4c75df129798524d5efd6c15b25a74369f4463067d21c7cc38e7fba2810b9f33ff0b4ad2e1b + checksum: 43185a6ba182dbbb88466b3b2dc51718c7c1935f278e9b19d113fd5032ffbaf2f97a4d7feccfd9c59682f875d946fcf6d06e804d08040c32a11969df12377e33 languageName: node linkType: hard -"@inquirer/select@npm:^2.4.6": - version: 2.4.6 - resolution: "@inquirer/select@npm:2.4.6" +"@inquirer/select@npm:^3.0.1": + version: 3.0.1 + resolution: "@inquirer/select@npm:3.0.1" dependencies: - "@inquirer/core": ^9.0.9 - "@inquirer/figures": ^1.0.5 - "@inquirer/type": ^1.5.2 + "@inquirer/core": ^9.2.1 + "@inquirer/figures": ^1.0.6 + "@inquirer/type": ^2.0.0 ansi-escapes: ^4.3.2 yoctocolors-cjs: ^2.1.2 - checksum: 53e0dfd4afafbda81b2a98f3d32c606661e02f2a77759e9d99c6358fa1f77556857e5d6688bf1005fce2a1e559d10a30a221a4d17c97a2087aa91db77c4d33ce + checksum: e645c7da2960d91a11c47971b797ec26bfcdad2fcd9e0ea6c141a99c3d005fd26c4fd32f39b29ec4ccfd3d723ba5229a90e31038b05c9c17181cdf3faaab256a languageName: node linkType: hard -"@inquirer/type@npm:^1.5.2": - version: 1.5.2 - resolution: "@inquirer/type@npm:1.5.2" +"@inquirer/type@npm:^2.0.0": + version: 2.0.0 + resolution: "@inquirer/type@npm:2.0.0" dependencies: mute-stream: ^1.0.0 - checksum: 6f5ee8143c982aaab0d14871f346b5770c9630e0f14303119c03fb9cb7904f6e0af0b76dcef9528da16563877f65e80a6056aa6d90e77511ab42177cdf06c4d7 + checksum: 0f78f84c182ef3879109a651c7b4afdc7480bc5365948cbdad7e0aa5b9713ef052761b6914b8c76c3ffeef5a8f61ef1d6d44c6c3914800e17506ecb1a8e99844 languageName: node linkType: hard @@ -1528,9 +1352,9 @@ __metadata: linkType: hard "@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": - version: 1.4.15 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" - checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 05df4f2538b3b0f998ea4c1cd34574d0feba216fa5d4ccaef0187d12abf82eafe6021cec8b49f9bb4d90f2ba4582ccc581e72986a5fcf4176ae0cfeb04cf52ec languageName: node linkType: hard @@ -1554,12 +1378,11 @@ __metadata: languageName: node linkType: hard -"@jsforce/jsforce-node@npm:^3.4.1": - version: 3.4.1 - resolution: "@jsforce/jsforce-node@npm:3.4.1" +"@jsforce/jsforce-node@npm:^3.6.1": + version: 3.6.2 + resolution: "@jsforce/jsforce-node@npm:3.6.2" dependencies: "@sindresorhus/is": ^4 - abort-controller: ^3.0.0 base64url: ^3.0.1 csv-parse: ^5.5.2 csv-stringify: ^6.4.4 @@ -1568,9 +1391,8 @@ __metadata: https-proxy-agent: ^5.0.0 multistream: ^3.1.0 node-fetch: ^2.6.1 - strip-ansi: ^6.0.0 xml2js: ^0.6.2 - checksum: 672c35f6147c4c3076a750fd330cdad352fcc40e09b09f56beee7ef1aca3aa4b78ee780682ca61234b16bf1c279f7074c90e0e28f905381614b49732de9891d6 + checksum: 792158fe9baa4ea842509f67e8b8bea60ba1d8534028d7587218dcbea35c7fb6dfe47eacc5c9e7c0bd969803b4b80f3f2aa8587ced7e93adb3436e2aae0ae659 languageName: node linkType: hard @@ -1974,20 +1796,20 @@ __metadata: linkType: hard "@salesforce/cli-plugins-testkit@npm:^5.3.28": - version: 5.3.28 - resolution: "@salesforce/cli-plugins-testkit@npm:5.3.28" + version: 5.3.36 + resolution: "@salesforce/cli-plugins-testkit@npm:5.3.36" dependencies: - "@salesforce/core": ^8.5.1 - "@salesforce/kit": ^3.2.1 + "@salesforce/core": ^8.6.4 + "@salesforce/kit": ^3.2.3 "@salesforce/ts-types": ^2.0.11 "@types/shelljs": ^0.8.15 - debug: ^4.3.6 + debug: ^4.3.7 jszip: ^3.10.1 shelljs: ^0.8.4 sinon: ^17.0.2 strip-ansi: 6.0.1 ts-retry-promise: ^0.8.1 - checksum: abafce21c7768b5acb7834767f88b8740fd0b83c8b16577ca6eb9ef80ba4766cddace59b8ed400732ea6a6dc9ce0bad70cebebfb0235e18f6deb7b9153f5b4fc + checksum: c3515681a231f50451135341ccfa849f2c74364ba4d77ebec309056be34a18251b2680c1c0be6e4e0fb31c2bddd63d74563b0bec321a32c2db716f387f71d571 languageName: node linkType: hard @@ -2028,11 +1850,11 @@ __metadata: languageName: node linkType: hard -"@salesforce/core@npm:^8.5.1": - version: 8.5.3 - resolution: "@salesforce/core@npm:8.5.3" +"@salesforce/core@npm:^8.5.4, @salesforce/core@npm:^8.6.4": + version: 8.6.4 + resolution: "@salesforce/core@npm:8.6.4" dependencies: - "@jsforce/jsforce-node": ^3.4.1 + "@jsforce/jsforce-node": ^3.6.1 "@salesforce/kit": ^3.2.2 "@salesforce/schemas": ^1.9.0 "@salesforce/ts-types": ^2.0.10 @@ -2044,46 +1866,20 @@ __metadata: js2xmlparser: ^4.0.1 jsonwebtoken: 9.0.2 jszip: 3.10.1 - pino: ^9.3.2 + pino: ^9.4.0 pino-abstract-transport: ^1.2.0 pino-pretty: ^11.2.2 proper-lockfile: ^4.1.2 semver: ^7.6.3 ts-retry-promise: ^0.8.1 - checksum: 1973134933948cfdf6009f4cf172276cf4d5f61daac08b865d7ac5a8ef3b14e07b7e01dbe29088eded792c408d3640c25cc7ad1432441b33c41645318b90a881 - languageName: node - linkType: hard - -"@salesforce/core@npm:^8.5.4": - version: 8.5.4 - resolution: "@salesforce/core@npm:8.5.4" - dependencies: - "@jsforce/jsforce-node": ^3.4.1 - "@salesforce/kit": ^3.2.2 - "@salesforce/schemas": ^1.9.0 - "@salesforce/ts-types": ^2.0.10 - ajv: ^8.17.1 - change-case: ^4.1.2 - fast-levenshtein: ^3.0.0 - faye: ^1.4.0 - form-data: ^4.0.0 - js2xmlparser: ^4.0.1 - jsonwebtoken: 9.0.2 - jszip: 3.10.1 - pino: ^9.3.2 - pino-abstract-transport: ^1.2.0 - pino-pretty: ^11.2.2 - proper-lockfile: ^4.1.2 - semver: ^7.6.3 - ts-retry-promise: ^0.8.1 - checksum: 68a3552f0ae73a1ea07ca56a3308c21094e645e5cbf8991bdca4b6faeb19f05ad1fd8eb06a7bf51fe6bdcf156829836c21bbb079d0894ca9ae3ee610471d1358 + checksum: ef7ae1891017d0ae69351e4152c27468db1c43d3f948e4a946704d8e33f55bc84ee15f3c64a2ae4062e2419796f1896a96f69b25718311247f9d57b6e3642ad8 languageName: node linkType: hard "@salesforce/dev-config@npm:^4.1.0": - version: 4.1.0 - resolution: "@salesforce/dev-config@npm:4.1.0" - checksum: 55f83c6ca04c3ff993fac6ed5dad049cb4695031551c4fc3b0e36489dfe23dc16d869c1b8ec59a63faf9c0db17d91b84a446e745280865b87d67bfe610c56c0e + version: 4.3.1 + resolution: "@salesforce/dev-config@npm:4.3.1" + checksum: 94f8a3d81500ca556e3b2890098e374db069e196d90e5b64f5620d423e8089f2fe35937ed5add34847006a5ce6f791a9eee8d55e138001b94ef24235f2dd86c9 languageName: node linkType: hard @@ -2098,21 +1894,12 @@ __metadata: languageName: node linkType: hard -"@salesforce/kit@npm:^3.2.1": - version: 3.2.1 - resolution: "@salesforce/kit@npm:3.2.1" +"@salesforce/kit@npm:^3.2.2, @salesforce/kit@npm:^3.2.3": + version: 3.2.3 + resolution: "@salesforce/kit@npm:3.2.3" dependencies: "@salesforce/ts-types": ^2.0.12 - checksum: f3a838e310bbedd2aee7bdb59ea782485655d70157b260fa76845335f0b5aeee118fa766389f97b0c0671806d4cc79f49240ef8e2f07cc4e78d0719bafbd3326 - languageName: node - linkType: hard - -"@salesforce/kit@npm:^3.2.2": - version: 3.2.2 - resolution: "@salesforce/kit@npm:3.2.2" - dependencies: - "@salesforce/ts-types": ^2.0.12 - checksum: 43dec00e8d599649e49d160ce720ded26e63b13b2b1f97d6d36c08d243510b71df8c704f92d4565f024cc0004aff7da7b370018e86f1bf662aee0e8bbd3450f7 + checksum: 5294020bc9f14bea019bc7f1c823f51f7bb6d9672e407524dd461ba0a9cf751327c2dfba926e02bba8b700d93e5d040d1baf615b9474d650ced805a97e87263f languageName: node linkType: hard @@ -2124,13 +1911,13 @@ __metadata: linkType: hard "@salesforce/ts-sinon@npm:^1.4.26": - version: 1.4.26 - resolution: "@salesforce/ts-sinon@npm:1.4.26" + version: 1.4.29 + resolution: "@salesforce/ts-sinon@npm:1.4.29" dependencies: "@salesforce/ts-types": ^2.0.12 sinon: ^5.1.1 - tslib: ^2.7.0 - checksum: f36bae59b853826f2f359d01ee5580dc6bb0e5829e02eb744de40fb7e8c55267a22c0cff53e56f0a1087ecf31c614ddafe1717e85d647f4103ddd2e72089fbb0 + tslib: ^2.8.1 + checksum: a923459a4bb7cc6528feced9149bd8b21830800105dcc6c2e60398911288a7ba034f86f959457807a645d989296bf462c4effebc7e866040f897d4f2fa67b533 languageName: node linkType: hard @@ -2143,14 +1930,7 @@ __metadata: languageName: node linkType: hard -"@salesforce/ts-types@npm:^2.0.10": - version: 2.0.10 - resolution: "@salesforce/ts-types@npm:2.0.10" - checksum: 95b447324e943006d2baa7685907b55a3a10df703513cc8651f802ee2ecca2228adf91c6411bc821b95c5ccbbd9fe81ca64dbe970b7e9441cbd09ff61989ff8b - languageName: node - linkType: hard - -"@salesforce/ts-types@npm:^2.0.11, @salesforce/ts-types@npm:^2.0.12": +"@salesforce/ts-types@npm:^2.0.10, @salesforce/ts-types@npm:^2.0.11, @salesforce/ts-types@npm:^2.0.12": version: 2.0.12 resolution: "@salesforce/ts-types@npm:2.0.12" checksum: 36ebe057da8fcb1e1f1cd44932a93898a316edbf4a4fd66807b96e69c0a8106fa8c3f6bb511787ead80566fb328da230787f94399f4742e473c5e0b343a7c2ba @@ -2194,15 +1974,6 @@ __metadata: languageName: node linkType: hard -"@sinonjs/commons@npm:^2.0.0": - version: 2.0.0 - resolution: "@sinonjs/commons@npm:2.0.0" - dependencies: - type-detect: 4.0.8 - checksum: 5023ba17edf2b85ed58262313b8e9b59e23c6860681a9af0200f239fe939e2b79736d04a260e8270ddd57196851dde3ba754d7230be5c5234e777ae2ca8af137 - languageName: node - linkType: hard - "@sinonjs/commons@npm:^3.0.0, @sinonjs/commons@npm:^3.0.1": version: 3.0.1 resolution: "@sinonjs/commons@npm:3.0.1" @@ -2212,6 +1983,15 @@ __metadata: languageName: node linkType: hard +"@sinonjs/fake-timers@npm:11.2.2": + version: 11.2.2 + resolution: "@sinonjs/fake-timers@npm:11.2.2" + dependencies: + "@sinonjs/commons": ^3.0.0 + checksum: 68c29b0e1856fdc280df03ddbf57c726420b78e9f943a241b471edc018fb14ff36fdc1daafd6026cba08c3c7f50c976fb7ae11b88ff44cd7f609692ca7d25158 + languageName: node + linkType: hard + "@sinonjs/fake-timers@npm:^10.0.2": version: 10.3.0 resolution: "@sinonjs/fake-timers@npm:10.3.0" @@ -2222,11 +2002,20 @@ __metadata: linkType: hard "@sinonjs/fake-timers@npm:^11.2.2": - version: 11.2.2 - resolution: "@sinonjs/fake-timers@npm:11.2.2" + version: 11.3.1 + resolution: "@sinonjs/fake-timers@npm:11.3.1" dependencies: - "@sinonjs/commons": ^3.0.0 - checksum: 68c29b0e1856fdc280df03ddbf57c726420b78e9f943a241b471edc018fb14ff36fdc1daafd6026cba08c3c7f50c976fb7ae11b88ff44cd7f609692ca7d25158 + "@sinonjs/commons": ^3.0.1 + checksum: 173376bb02e870467705829b003c996bcac958f34238875458961ac6483c6029cd9623950d20c68b648499635a0e6d04c26aac822e4f5c120cc7c217aeba6553 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^13.0.1": + version: 13.0.5 + resolution: "@sinonjs/fake-timers@npm:13.0.5" + dependencies: + "@sinonjs/commons": ^3.0.1 + checksum: b1c6ba87fadb7666d3aa126c9e8b4ac32b2d9e84c9e5fd074aa24cab3c8342fd655459de014b08e603be1e6c24c9f9716d76d6d2a36c50f59bb0091be61601dd languageName: node linkType: hard @@ -2261,20 +2050,20 @@ __metadata: linkType: hard "@sinonjs/samsam@npm:^8.0.0": - version: 8.0.0 - resolution: "@sinonjs/samsam@npm:8.0.0" + version: 8.0.2 + resolution: "@sinonjs/samsam@npm:8.0.2" dependencies: - "@sinonjs/commons": ^2.0.0 + "@sinonjs/commons": ^3.0.1 lodash.get: ^4.4.2 - type-detect: ^4.0.8 - checksum: 95e40d0bb9f7288e27c379bee1b03c3dc51e7e78b9d5ea6aef66a690da7e81efc4715145b561b449cefc5361a171791e3ce30fb1a46ab247d4c0766024c60a60 + type-detect: ^4.1.0 + checksum: 7dc24a388ea108e513c88edaaacf98cf4ebcbda8c715551b02954ce50db0e26d6071d98ba9594e737da7fe750079a2af94633d7d46ff1481cb940383b441f29b languageName: node linkType: hard -"@sinonjs/text-encoding@npm:^0.7.1, @sinonjs/text-encoding@npm:^0.7.2": - version: 0.7.2 - resolution: "@sinonjs/text-encoding@npm:0.7.2" - checksum: fe690002a32ba06906cf87e2e8fe84d1590294586f2a7fd180a65355b53660c155c3273d8011a5f2b77209b819aa7306678ae6e4aea0df014bd7ffd4bbbcf1ab +"@sinonjs/text-encoding@npm:^0.7.1, @sinonjs/text-encoding@npm:^0.7.2, @sinonjs/text-encoding@npm:^0.7.3": + version: 0.7.3 + resolution: "@sinonjs/text-encoding@npm:0.7.3" + checksum: d53f3a3fc94d872b171f7f0725662f4d863e32bca8b44631be4fe67708f13058925ad7297524f882ea232144d7ab978c7fe62c5f79218fca7544cf91be3d233d languageName: node linkType: hard @@ -2291,58 +2080,58 @@ __metadata: languageName: node linkType: hard -"@stryker-mutator/api@npm:8.5.0": - version: 8.5.0 - resolution: "@stryker-mutator/api@npm:8.5.0" +"@stryker-mutator/api@npm:8.6.0": + version: 8.6.0 + resolution: "@stryker-mutator/api@npm:8.6.0" dependencies: - mutation-testing-metrics: 3.2.0 - mutation-testing-report-schema: 3.1.1 - tslib: ~2.6.3 + mutation-testing-metrics: 3.3.0 + mutation-testing-report-schema: 3.3.0 + tslib: ~2.7.0 typed-inject: ~4.0.0 - checksum: 2546b086792b792188e3aa9fbace875cfeaf1422320e2c5100cfeb51b12fca26bb572999042fb36cd5a5999d4f247c7fc1b716244fbc6a123bee9e5854b2d194 + checksum: b5419cfcb80340ac07a78a51256ea6a67cf5870372fa6b1ff289582a235bd1632c1a760eb0fe20bffa72597d747ecbb80d980ac54053db295539f89faf279530 languageName: node linkType: hard "@stryker-mutator/core@npm:^8.5.0": - version: 8.5.0 - resolution: "@stryker-mutator/core@npm:8.5.0" + version: 8.6.0 + resolution: "@stryker-mutator/core@npm:8.6.0" dependencies: - "@inquirer/prompts": ^5.3.6 - "@stryker-mutator/api": 8.5.0 - "@stryker-mutator/instrumenter": 8.5.0 - "@stryker-mutator/util": 8.5.0 + "@inquirer/prompts": ^6.0.0 + "@stryker-mutator/api": 8.6.0 + "@stryker-mutator/instrumenter": 8.6.0 + "@stryker-mutator/util": 8.6.0 ajv: ~8.17.1 chalk: ~5.3.0 commander: ~12.1.0 diff-match-patch: 1.0.5 - emoji-regex: ~10.3.0 - execa: ~9.3.0 + emoji-regex: ~10.4.0 + execa: ~9.4.0 file-url: ~4.0.0 get-port: ~7.1.0 lodash.groupby: ~4.6.0 log4js: ~6.9.1 minimatch: ~9.0.5 - mutation-testing-elements: 3.2.0 - mutation-testing-metrics: 3.2.0 - mutation-testing-report-schema: 3.1.1 - npm-run-path: ~5.3.0 + mutation-testing-elements: 3.3.0 + mutation-testing-metrics: 3.3.0 + mutation-testing-report-schema: 3.3.0 + npm-run-path: ~6.0.0 progress: ~2.0.3 rxjs: ~7.8.1 semver: ^7.6.3 source-map: ~0.7.4 tree-kill: ~1.2.2 - tslib: 2.6.3 + tslib: 2.7.0 typed-inject: ~4.0.0 - typed-rest-client: ~2.0.2 + typed-rest-client: ~2.1.0 bin: stryker: ./bin/stryker.js - checksum: 50dc9583145b3e5c4f80187f361772eac77acc47e0708bbf11cd0e0f07ece6d17cbec7d6c376be663eec00aeb33817953070319b8b1e6d5c5f55bfd831e56e8b + checksum: fb219b55c55e005592783fd3a5c4229168d3be08c6c1014f6d605af47810d24dd687d4d4d733ed3270da8ac65bc84f0c67bd1eb7678ce3b92304dfb085a4b9ed languageName: node linkType: hard -"@stryker-mutator/instrumenter@npm:8.5.0": - version: 8.5.0 - resolution: "@stryker-mutator/instrumenter@npm:8.5.0" +"@stryker-mutator/instrumenter@npm:8.6.0": + version: 8.6.0 + resolution: "@stryker-mutator/instrumenter@npm:8.6.0" dependencies: "@babel/core": ~7.25.2 "@babel/generator": ~7.25.0 @@ -2350,122 +2139,122 @@ __metadata: "@babel/plugin-proposal-decorators": ~7.24.7 "@babel/plugin-proposal-explicit-resource-management": ^7.24.7 "@babel/preset-typescript": ~7.24.7 - "@stryker-mutator/api": 8.5.0 - "@stryker-mutator/util": 8.5.0 + "@stryker-mutator/api": 8.6.0 + "@stryker-mutator/util": 8.6.0 angular-html-parser: ~6.0.2 semver: ~7.6.3 weapon-regex: ~1.3.2 - checksum: cfaa62ea202abf61e0c2ef37a7573be87ef358434b8840bf472741263d15a7e1cf43a8034a3e4acdf62ffa9800332f5703718ef37cc0f6862b418b199cbf3294 + checksum: d7a2482a682009861e85761c4816538ebc954a93b188ccadce6db644a05a9cec681784e7118b9b663805060b779accc795812144bbd9c2be9b4380af331a4127 languageName: node linkType: hard "@stryker-mutator/jest-runner@npm:^8.5.0": - version: 8.5.0 - resolution: "@stryker-mutator/jest-runner@npm:8.5.0" + version: 8.6.0 + resolution: "@stryker-mutator/jest-runner@npm:8.6.0" dependencies: - "@stryker-mutator/api": 8.5.0 - "@stryker-mutator/util": 8.5.0 + "@stryker-mutator/api": 8.6.0 + "@stryker-mutator/util": 8.6.0 semver: ~7.6.3 - tslib: ~2.6.3 + tslib: ~2.7.0 peerDependencies: - "@stryker-mutator/core": ~8.5.0 - checksum: f4b671d15070b51ece7224b686cd68931065532532d1931ad73dc706aecc7e97e3d6f4083467efa28b1f9d9b3fcb60ff86c028f502a77c3b3222d84f1f30d12d + "@stryker-mutator/core": ~8.6.0 + checksum: 03b755859f06a01180ae21b84446fee14ed2db40a0ff9e9cc0bc88eba71407806e1ec8848e233ec60cb51e6862492a98fa409c2bb1849440e420d8f0305c1dbc languageName: node linkType: hard -"@stryker-mutator/util@npm:8.5.0": - version: 8.5.0 - resolution: "@stryker-mutator/util@npm:8.5.0" - checksum: b3ead0ec2346d72f7c6b77461f67d9335851a6ce804961b26f1ee22ae6512d517e4bc6903b5e2562e46952b7ed656a0620acc6687968d2ac10447f58495609f2 +"@stryker-mutator/util@npm:8.6.0": + version: 8.6.0 + resolution: "@stryker-mutator/util@npm:8.6.0" + checksum: a2ee944c6210fad1a3ce7f741301aa9caecb69e6c965fe31a0c2a4be58e146cb1bb78635bc9a4405746c52d63e078a2e64353343650ec9f112918584e4b03796 languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.7.23": - version: 1.7.23 - resolution: "@swc/core-darwin-arm64@npm:1.7.23" +"@swc/core-darwin-arm64@npm:1.9.1": + version: 1.9.1 + resolution: "@swc/core-darwin-arm64@npm:1.9.1" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.7.23": - version: 1.7.23 - resolution: "@swc/core-darwin-x64@npm:1.7.23" +"@swc/core-darwin-x64@npm:1.9.1": + version: 1.9.1 + resolution: "@swc/core-darwin-x64@npm:1.9.1" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.7.23": - version: 1.7.23 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.7.23" +"@swc/core-linux-arm-gnueabihf@npm:1.9.1": + version: 1.9.1 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.9.1" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.7.23": - version: 1.7.23 - resolution: "@swc/core-linux-arm64-gnu@npm:1.7.23" +"@swc/core-linux-arm64-gnu@npm:1.9.1": + version: 1.9.1 + resolution: "@swc/core-linux-arm64-gnu@npm:1.9.1" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.7.23": - version: 1.7.23 - resolution: "@swc/core-linux-arm64-musl@npm:1.7.23" +"@swc/core-linux-arm64-musl@npm:1.9.1": + version: 1.9.1 + resolution: "@swc/core-linux-arm64-musl@npm:1.9.1" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.7.23": - version: 1.7.23 - resolution: "@swc/core-linux-x64-gnu@npm:1.7.23" +"@swc/core-linux-x64-gnu@npm:1.9.1": + version: 1.9.1 + resolution: "@swc/core-linux-x64-gnu@npm:1.9.1" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.7.23": - version: 1.7.23 - resolution: "@swc/core-linux-x64-musl@npm:1.7.23" +"@swc/core-linux-x64-musl@npm:1.9.1": + version: 1.9.1 + resolution: "@swc/core-linux-x64-musl@npm:1.9.1" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.7.23": - version: 1.7.23 - resolution: "@swc/core-win32-arm64-msvc@npm:1.7.23" +"@swc/core-win32-arm64-msvc@npm:1.9.1": + version: 1.9.1 + resolution: "@swc/core-win32-arm64-msvc@npm:1.9.1" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.7.23": - version: 1.7.23 - resolution: "@swc/core-win32-ia32-msvc@npm:1.7.23" +"@swc/core-win32-ia32-msvc@npm:1.9.1": + version: 1.9.1 + resolution: "@swc/core-win32-ia32-msvc@npm:1.9.1" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.7.23": - version: 1.7.23 - resolution: "@swc/core-win32-x64-msvc@npm:1.7.23" +"@swc/core-win32-x64-msvc@npm:1.9.1": + version: 1.9.1 + resolution: "@swc/core-win32-x64-msvc@npm:1.9.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.7.23": - version: 1.7.23 - resolution: "@swc/core@npm:1.7.23" - dependencies: - "@swc/core-darwin-arm64": 1.7.23 - "@swc/core-darwin-x64": 1.7.23 - "@swc/core-linux-arm-gnueabihf": 1.7.23 - "@swc/core-linux-arm64-gnu": 1.7.23 - "@swc/core-linux-arm64-musl": 1.7.23 - "@swc/core-linux-x64-gnu": 1.7.23 - "@swc/core-linux-x64-musl": 1.7.23 - "@swc/core-win32-arm64-msvc": 1.7.23 - "@swc/core-win32-ia32-msvc": 1.7.23 - "@swc/core-win32-x64-msvc": 1.7.23 + version: 1.9.1 + resolution: "@swc/core@npm:1.9.1" + dependencies: + "@swc/core-darwin-arm64": 1.9.1 + "@swc/core-darwin-x64": 1.9.1 + "@swc/core-linux-arm-gnueabihf": 1.9.1 + "@swc/core-linux-arm64-gnu": 1.9.1 + "@swc/core-linux-arm64-musl": 1.9.1 + "@swc/core-linux-x64-gnu": 1.9.1 + "@swc/core-linux-x64-musl": 1.9.1 + "@swc/core-win32-arm64-msvc": 1.9.1 + "@swc/core-win32-ia32-msvc": 1.9.1 + "@swc/core-win32-x64-msvc": 1.9.1 "@swc/counter": ^0.1.3 - "@swc/types": ^0.1.12 + "@swc/types": ^0.1.14 peerDependencies: "@swc/helpers": "*" dependenciesMeta: @@ -2492,7 +2281,7 @@ __metadata: peerDependenciesMeta: "@swc/helpers": optional: true - checksum: a21e9a67d305ad9b49b6def9f9698b374db6c15b2ded5e5cf29390221181fc6b91bfa317b53fd41d9cca989d85b79bbbca5ab27635df1e0232cad4681f618fa5 + checksum: 6387922bf4e145fd64e224a6a6c01cee21215cc7470c6ef545a3230c9799ee10cfd28acdc4fef4f5bb0cb98db8d430f49599dcfbdb0dcf945bfdba7559583c7e languageName: node linkType: hard @@ -2503,12 +2292,12 @@ __metadata: languageName: node linkType: hard -"@swc/types@npm:^0.1.12": - version: 0.1.12 - resolution: "@swc/types@npm:0.1.12" +"@swc/types@npm:^0.1.14": + version: 0.1.14 + resolution: "@swc/types@npm:0.1.14" dependencies: "@swc/counter": ^0.1.3 - checksum: cf7f89e46f859864075d7965582baea9c5f98830f45b1046251568c9bdf1ca484b1bf37f6d3c32b7c82ecf8cd5df89d22f05268c391819c44e49911bb1a8e71a + checksum: d7f198e1a07f4dbcff62a9823dfa81703e0029a908a02f9e9bfb9f18bc259c05b780f3385d36ec220e86a107dd6908f96bdc50319699bd34bf04b01d9adb5d5b languageName: node linkType: hard @@ -2589,18 +2378,20 @@ __metadata: linkType: hard "@types/chai@npm:*": - version: 4.3.16 - resolution: "@types/chai@npm:4.3.16" - checksum: bb5f52d1b70534ed8b4bf74bd248add003ffe1156303802ea367331607c06b494da885ffbc2b674a66b4f90c9ee88759790a5f243879f6759f124f22328f5e95 + version: 5.0.1 + resolution: "@types/chai@npm:5.0.1" + dependencies: + "@types/deep-eql": "*" + checksum: 53d813cbca3755c025381ad4ac8b51b17897df90316350247f9527bdba3adb48b3b1315308fbd717d9013d8e60375c0ab4bd004dc72330133486ff5db4cb0b2c languageName: node linkType: hard "@types/cli-progress@npm:^3.11.0": - version: 3.11.5 - resolution: "@types/cli-progress@npm:3.11.5" + version: 3.11.6 + resolution: "@types/cli-progress@npm:3.11.6" dependencies: "@types/node": "*" - checksum: 571fb3b11646415ac49c90e8003b82f3ac58d75fde5952caf40b4a079517b6e25e79ab0a7455d0ab0398d0b2de062646dba075d3d1f8d147eed2ab4d41abbf64 + checksum: 2df9d4788089564c8eb01e6d05b084bd030b7ce3f1a3698c57a998f2b329c5c7a3ea2d20e3756579a385945c70875df3c798b7740f6bf679eb1b1937e91f5eca languageName: node linkType: hard @@ -2613,6 +2404,13 @@ __metadata: languageName: node linkType: hard +"@types/deep-eql@npm:*": + version: 4.0.2 + resolution: "@types/deep-eql@npm:4.0.2" + checksum: 249a27b0bb22f6aa28461db56afa21ec044fa0e303221a62dff81831b20c8530502175f1a49060f7099e7be06181078548ac47c668de79ff9880241968d43d0c + languageName: node + linkType: hard + "@types/fs-extra@npm:^11.0.4": version: 11.0.4 resolution: "@types/fs-extra@npm:11.0.4" @@ -2668,12 +2466,12 @@ __metadata: linkType: hard "@types/jest@npm:^29.5.12": - version: 29.5.12 - resolution: "@types/jest@npm:29.5.12" + version: 29.5.14 + resolution: "@types/jest@npm:29.5.14" dependencies: expect: ^29.0.0 pretty-format: ^29.0.0 - checksum: 19b1efdeed9d9a60a81edc8226cdeae5af7479e493eaed273e01243891c9651f7b8b4c08fc633a7d0d1d379b091c4179bbaa0807af62542325fd72f2dd17ce1c + checksum: 18dba4623f26661641d757c63da2db45e9524c9be96a29ef713c703a9a53792df9ecee9f7365a0858ddbd6440d98fe6b65ca67895ca5884b73cbc7ffc11f3838 languageName: node linkType: hard @@ -2696,9 +2494,9 @@ __metadata: linkType: hard "@types/lodash@npm:*": - version: 4.17.5 - resolution: "@types/lodash@npm:4.17.5" - checksum: 3c9bb15772509f0ecb40428531863dbc3f064f2bf34bbccc2ce2b2923c69fb0868aec7e357b1d97fd0d7f7e435a014ea5c1adef8a64715529887179c97a5a823 + version: 4.17.13 + resolution: "@types/lodash@npm:4.17.13" + checksum: d0bf8fbd950be71946e0076b30fd40d492293baea75f05931b6b5b906fd62583708c6229abdb95b30205ad24ce1ed2f48bc9d419364f682320edd03405cc0c7e languageName: node linkType: hard @@ -2710,9 +2508,9 @@ __metadata: linkType: hard "@types/mocha@npm:^10.0.7": - version: 10.0.7 - resolution: "@types/mocha@npm:10.0.7" - checksum: 5e411ed8aa19228e322b2fb0075c4d822322fb157d1adfc8620a798748035d430dc16421bdc7d7f84f118481b8c8c63ec86b95757a8acc926ddc3d737fbffc3a + version: 10.0.9 + resolution: "@types/mocha@npm:10.0.9" + checksum: cd15e7df49338466e75c580991d8fb3f86dad567f3abd6ca6489c0875b8af44f57a95167552fab7bbc950f53f97596be30b3507a9c16e0dc8d41a2d1e23b169d languageName: node linkType: hard @@ -2725,12 +2523,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*": - version: 20.14.2 - resolution: "@types/node@npm:20.14.2" +"@types/node@npm:*, @types/node@npm:^22.5.3, @types/node@npm:^22.5.5": + version: 22.9.0 + resolution: "@types/node@npm:22.9.0" dependencies: - undici-types: ~5.26.4 - checksum: 265362479b8f3b50fcd1e3f9e9af6121feb01a478dff0335ae67cccc3babfe45d0f12209d3d350595eebd7e67471762697b877c380513f8e5d27a238fa50c805 + undici-types: ~6.19.8 + checksum: c014eb3b8a110f1b87b614a40ef288d13e6b08ae9d5dafbd38951a2eebc24d352dc55330ed9d00c97ee9e64483c3cc14c4aa914c5df7ca7b9eaa1a30b2340dbd languageName: node linkType: hard @@ -2741,24 +2539,6 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^22.1.0": - version: 22.1.0 - resolution: "@types/node@npm:22.1.0" - dependencies: - undici-types: ~6.13.0 - checksum: 3544c35da06009790a2e07742a7dfa0ac0f0d64ec47d9e6d3edf0ff6dcfc1a7cc2efdc5e524e80f8ed80aa37154513b2c1c724f95146ff89fc5aefb8e33575f2 - languageName: node - linkType: hard - -"@types/node@npm:^22.5.3": - version: 22.5.3 - resolution: "@types/node@npm:22.5.3" - dependencies: - undici-types: ~6.19.2 - checksum: 50a5075e4e8bc874a9fe962447341b6b49bd79cf2801fadd3e31d2bda60decba8d907e3150887afc9f883d819cc42c7e862fffc934049d37cb5589e0a2afbcc1 - languageName: node - linkType: hard - "@types/semver@npm:^7.3.13, @types/semver@npm:^7.5.8": version: 7.5.8 resolution: "@types/semver@npm:7.5.8" @@ -2814,11 +2594,11 @@ __metadata: linkType: hard "@types/yargs@npm:^17.0.8": - version: 17.0.32 - resolution: "@types/yargs@npm:17.0.32" + version: 17.0.33 + resolution: "@types/yargs@npm:17.0.33" dependencies: "@types/yargs-parser": "*" - checksum: 4505bdebe8716ff383640c6e928f855b5d337cb3c68c81f7249fc6b983d0aa48de3eee26062b84f37e0d75a5797bc745e0c6e76f42f81771252a758c638f36ba + checksum: ee013f257472ab643cb0584cf3e1ff9b0c44bca1c9ba662395300a7f1a6c55fa9d41bd40ddff42d99f5d95febb3907c9ff600fbcb92dadbec22c6a76de7e1236 languageName: node linkType: hard @@ -2865,18 +2645,20 @@ __metadata: linkType: hard "acorn-walk@npm:^8.1.1": - version: 8.3.2 - resolution: "acorn-walk@npm:8.3.2" - checksum: 3626b9d26a37b1b427796feaa5261faf712307a8920392c8dce9a5739fb31077667f4ad2ec71c7ac6aaf9f61f04a9d3d67ff56f459587206fc04aa31c27ef392 + version: 8.3.4 + resolution: "acorn-walk@npm:8.3.4" + dependencies: + acorn: ^8.11.0 + checksum: 4ff03f42323e7cf90f1683e08606b0f460e1e6ac263d2730e3df91c7665b6f64e696db6ea27ee4bed18c2599569be61f28a8399fa170c611161a348c402ca19c languageName: node linkType: hard -"acorn@npm:^8.4.1": - version: 8.11.3 - resolution: "acorn@npm:8.11.3" +"acorn@npm:^8.11.0, acorn@npm:^8.4.1": + version: 8.14.0 + resolution: "acorn@npm:8.14.0" bin: acorn: bin/acorn - checksum: 76d8e7d559512566b43ab4aadc374f11f563f0a9e21626dd59cb2888444e9445923ae9f3699972767f18af61df89cd89f5eaaf772d1327b055b45cb829b4a88c + checksum: 8755074ba55fff94e84e81c72f1013c2d9c78e973c31231c8ae505a5f966859baf654bddd75046bffd73ce816b149298977fff5077a3033dedba0ae2aad152d4 languageName: node linkType: hard @@ -2908,19 +2690,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^8.11.0, ajv@npm:^8.12.0": - version: 8.16.0 - resolution: "ajv@npm:8.16.0" - dependencies: - fast-deep-equal: ^3.1.3 - json-schema-traverse: ^1.0.0 - require-from-string: ^2.0.2 - uri-js: ^4.4.1 - checksum: bdf3d4c9f1d11e220850051ef4cd89346e951cfb933d6d41be36d45053c1092af1523ee6c62525cce567355caf0a4f4c19a08a93851649c1fa32b4a39b7c4858 - languageName: node - linkType: hard - -"ajv@npm:^8.17.1, ajv@npm:~8.17.1": +"ajv@npm:^8.11.0, ajv@npm:^8.12.0, ajv@npm:^8.17.1, ajv@npm:~8.17.1": version: 8.17.1 resolution: "ajv@npm:8.17.1" dependencies: @@ -2974,9 +2744,9 @@ __metadata: linkType: hard "ansi-regex@npm:^6.0.1": - version: 6.0.1 - resolution: "ansi-regex@npm:6.0.1" - checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 495834a53b0856c02acd40446f7130cb0f8284f4a39afdab20d5dc42b2e198b1196119fe887beed8f9055c4ff2055e3b2f6d4641d0be018cdfb64fedf6fc1aac languageName: node linkType: hard @@ -3168,21 +2938,7 @@ __metadata: languageName: node linkType: hard -"async-lock@npm:^1.4.1": - version: 1.4.1 - resolution: "async-lock@npm:1.4.1" - checksum: 29e70cd892932b7c202437786cedc39ff62123cb6941014739bd3cabd6106326416e9e7c21285a5d1dc042cad239a0f7ec9c44658491ee4a615fd36a21c1d10a - languageName: node - linkType: hard - -"async@npm:^3.2.3, async@npm:^3.2.4": - version: 3.2.5 - resolution: "async@npm:3.2.5" - checksum: 5ec77f1312301dee02d62140a6b1f7ee0edd2a0f983b6fd2b0849b969f245225b990b47b8243e7b9ad16451a53e7f68e753700385b706198ced888beedba3af4 - languageName: node - linkType: hard - -"async@npm:^3.2.6": +"async@npm:^3.2.3, async@npm:^3.2.4, async@npm:^3.2.6": version: 3.2.6 resolution: "async@npm:3.2.6" checksum: ee6eb8cd8a0ab1b58bd2a3ed6c415e93e773573a91d31df9d5ef559baafa9dab37d3b096fa7993e84585cac3697b2af6ddb9086f45d3ac8cae821bb2aab65682 @@ -3253,24 +3009,27 @@ __metadata: linkType: hard "babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.0.1 - resolution: "babel-preset-current-node-syntax@npm:1.0.1" + version: 1.1.0 + resolution: "babel-preset-current-node-syntax@npm:1.1.0" dependencies: "@babel/plugin-syntax-async-generators": ^7.8.4 "@babel/plugin-syntax-bigint": ^7.8.3 - "@babel/plugin-syntax-class-properties": ^7.8.3 - "@babel/plugin-syntax-import-meta": ^7.8.3 + "@babel/plugin-syntax-class-properties": ^7.12.13 + "@babel/plugin-syntax-class-static-block": ^7.14.5 + "@babel/plugin-syntax-import-attributes": ^7.24.7 + "@babel/plugin-syntax-import-meta": ^7.10.4 "@babel/plugin-syntax-json-strings": ^7.8.3 - "@babel/plugin-syntax-logical-assignment-operators": ^7.8.3 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - "@babel/plugin-syntax-numeric-separator": ^7.8.3 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 "@babel/plugin-syntax-object-rest-spread": ^7.8.3 "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 "@babel/plugin-syntax-optional-chaining": ^7.8.3 - "@babel/plugin-syntax-top-level-await": ^7.8.3 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + "@babel/plugin-syntax-top-level-await": ^7.14.5 peerDependencies: "@babel/core": ^7.0.0 - checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 + checksum: 9f93fac975eaba296c436feeca1031ca0539143c4066eaf5d1ba23525a31850f03b651a1049caea7287df837a409588c8252c15627ad3903f17864c8e25ed64b languageName: node linkType: hard @@ -3411,31 +3170,17 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.22.2": - version: 4.23.1 - resolution: "browserslist@npm:4.23.1" - dependencies: - caniuse-lite: ^1.0.30001629 - electron-to-chromium: ^1.4.796 - node-releases: ^2.0.14 - update-browserslist-db: ^1.0.16 - bin: - browserslist: cli.js - checksum: 06189e2d6666a203ce097cc0e713a40477d08420927b79af139211e5712f3cf676fdc4dd6af3aa493d47c09206a344b3420a8315577dbe88c58903132de9b0f5 - languageName: node - linkType: hard - -"browserslist@npm:^4.23.1": - version: 4.23.3 - resolution: "browserslist@npm:4.23.3" +"browserslist@npm:^4.24.0": + version: 4.24.2 + resolution: "browserslist@npm:4.24.2" dependencies: - caniuse-lite: ^1.0.30001646 - electron-to-chromium: ^1.5.4 + caniuse-lite: ^1.0.30001669 + electron-to-chromium: ^1.5.41 node-releases: ^2.0.18 - update-browserslist-db: ^1.1.0 + update-browserslist-db: ^1.1.1 bin: browserslist: cli.js - checksum: 7906064f9970aeb941310b2fcb8b4ace4a1b50aa657c986677c6f1553a8cabcc94ee9c5922f715baffbedaa0e6cf0831b6fed7b059dde6873a4bfadcbe069c7e + checksum: cf64085f12132d38638f38937a255edb82c7551b164a98577b055dd79719187a816112f7b97b9739e400c4954cd66479c0d7a843cb816e346f4795dc24fd5d97 languageName: node linkType: hard @@ -3499,8 +3244,8 @@ __metadata: linkType: hard "cacache@npm:^18.0.0": - version: 18.0.3 - resolution: "cacache@npm:18.0.3" + version: 18.0.4 + resolution: "cacache@npm:18.0.4" dependencies: "@npmcli/fs": ^3.1.0 fs-minipass: ^3.0.0 @@ -3514,7 +3259,7 @@ __metadata: ssri: ^10.0.0 tar: ^6.1.11 unique-filename: ^3.0.0 - checksum: b717fd9b36e9c3279bfde4545c3a8f6d5a539b084ee26a9504d48f83694beb724057d26e090b97540f9cc62bea18b9f6cf671c50e18fb7dac60eda9db691714f + checksum: b7422c113b4ec750f33beeca0f426a0024c28e3172f332218f48f963e5b970647fa1ac05679fe5bb448832c51efea9fda4456b9a95c3a1af1105fe6c1833cde2 languageName: node linkType: hard @@ -3574,17 +3319,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001629": - version: 1.0.30001633 - resolution: "caniuse-lite@npm:1.0.30001633" - checksum: 718607f5d335ed26a469b03aaf059aec3352d81d6a974888122310d76c29ff0820e9bf57f16a1eb65693f8cef405e3a18a6257591ee1e5642865a4cb1a27cd4c - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001646": - version: 1.0.30001649 - resolution: "caniuse-lite@npm:1.0.30001649" - checksum: 7952512a243f22c942e0e99249def19d781ad1900db101f2d8de9d83de37db000a7dc7f226c9c99134001975e22852becf1677539c24c7ecae53467b681c400f +"caniuse-lite@npm:^1.0.30001669": + version: 1.0.30001678 + resolution: "caniuse-lite@npm:1.0.30001678" + checksum: b1690df8b306b99a1ec84dc29cbdc893b569fcdc232324a9d3ebd67ce184a353ffdea93270bb6c20e3372bec8b5f6922c04a464fbd1cdeff662d459639f22a53 languageName: node linkType: hard @@ -3612,8 +3350,8 @@ __metadata: linkType: hard "chai@npm:^4.3.10": - version: 4.4.1 - resolution: "chai@npm:4.4.1" + version: 4.5.0 + resolution: "chai@npm:4.5.0" dependencies: assertion-error: ^1.1.0 check-error: ^1.0.3 @@ -3621,8 +3359,8 @@ __metadata: get-func-name: ^2.0.2 loupe: ^2.3.6 pathval: ^1.1.1 - type-detect: ^4.0.8 - checksum: 9ab84f36eb8e0b280c56c6c21ca4da5933132cd8a0c89c384f1497f77953640db0bc151edd47f81748240a9fab57b78f7d925edfeedc8e8fc98016d71f40c36e + type-detect: ^4.1.0 + checksum: 70e5a8418a39e577e66a441cc0ce4f71fd551a650a71de30dd4e3e31e75ed1f5aa7119cf4baf4a2cb5e85c0c6befdb4d8a05811fad8738c1a6f3aa6a23803821 languageName: node linkType: hard @@ -3738,16 +3476,9 @@ __metadata: linkType: hard "cjs-module-lexer@npm:^1.0.0": - version: 1.3.1 - resolution: "cjs-module-lexer@npm:1.3.1" - checksum: 75f20ac264a397ea5c63f9c2343a51ab878043666468f275e94862f7180ec1d764a400ec0c09085dcf0db3193c74a8b571519abd2bf4be0d2be510d1377c8d4b - languageName: node - linkType: hard - -"clean-git-ref@npm:^2.0.1": - version: 2.0.1 - resolution: "clean-git-ref@npm:2.0.1" - checksum: b25f585ed47040ea5d699d40a2bb84d1f35afd651f3fcc05fb077224358ffd3d7509fc9edbfc4570f1fc732c987e03ac7d8ec31524ac503ac35c53cb1f5e3bf9 + version: 1.4.1 + resolution: "cjs-module-lexer@npm:1.4.1" + checksum: 2556807a99aec1f9daac60741af96cd613a707f343174ae7967da46402c91dced411bf830d209f2e93be4cecea46fc75cecf1f17c799d7d8a9e1dd6204bfcd22 languageName: node linkType: hard @@ -3794,13 +3525,6 @@ __metadata: languageName: node linkType: hard -"cli-spinners@npm:^2.9.2": - version: 2.9.2 - resolution: "cli-spinners@npm:2.9.2" - checksum: 1bd588289b28432e4676cb5d40505cfe3e53f2e4e10fbe05c8a710a154d6fe0ce7836844b00d6858f740f2ffe67cdc36e0fce9c7b6a8430e80e6388d5aa4956c - languageName: node - linkType: hard - "cli-truncate@npm:^4.0.0": version: 4.0.0 resolution: "cli-truncate@npm:4.0.0" @@ -3975,7 +3699,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^12.0.0, commander@npm:~12.1.0": +"commander@npm:^12.1.0, commander@npm:~12.1.0": version: 12.1.0 resolution: "commander@npm:12.1.0" checksum: 68e9818b00fc1ed9cdab9eb16905551c2b768a317ae69a5e3c43924c2b20ac9bb65b27e1cab36aeda7b6496376d4da908996ba2c0b5d79463e0fb1e77935d514 @@ -4111,16 +3835,16 @@ __metadata: linkType: hard "core-js-pure@npm:^3.30.2": - version: 3.37.1 - resolution: "core-js-pure@npm:3.37.1" - checksum: a13a40e3951975cffef12a0933d3dbf1ecedbf9821e1ec8024884b587744951ad30e3762a86bcb8e2a18fdd4b8d7c8971b2391605329799fc04e1fc1e1397dc1 + version: 3.39.0 + resolution: "core-js-pure@npm:3.39.0" + checksum: cdcb1eec4eb9308fcf5cfe18a95322c388b05c11e66b5b0ac296a08f8f2106b458ecfe8aca0155d62ed2c5e150485b68073937e7b0a563fbc287563c4475a7c1 languageName: node linkType: hard "core-js@npm:^3.6.4": - version: 3.37.1 - resolution: "core-js@npm:3.37.1" - checksum: 2d58a5c599f05c3e04abc8bc5e64b88eb17d914c0f552f670fb800afa74ec54b4fcc7f231ad6bd45badaf62c0fb0ce30e6fe89cedb6bb6d54e6f19115c3c17ff + version: 3.39.0 + resolution: "core-js@npm:3.39.0" + checksum: 7a3670e9a2a89e0a049daa288d742d09f6e16d27a8945c5e2ef6fc45dc57e5c4bc5db589da05947486f54ae978d14cf27bd3fb1db0b9907000a611e8af37355b languageName: node linkType: hard @@ -4132,15 +3856,15 @@ __metadata: linkType: hard "cosmiconfig-typescript-loader@npm:^5.0.0": - version: 5.0.0 - resolution: "cosmiconfig-typescript-loader@npm:5.0.0" + version: 5.1.0 + resolution: "cosmiconfig-typescript-loader@npm:5.1.0" dependencies: - jiti: ^1.19.1 + jiti: ^1.21.6 peerDependencies: "@types/node": "*" cosmiconfig: ">=8.2" typescript: ">=4" - checksum: 7b614313f2cc2ecbe17270de570a511aa7c974bf14a749d7ed4f4d0f4a9ed02ee7ae87d710e294204abb00bb6bb0cca53795208bb1435815d143b43c6626ec74 + checksum: 1cb36546ab1bebaf945063139e33ecc98eca978eb015be751f8af17122fc23c845c6e083fe731e34e7029544659ba05b3bf2f53242bc0ea92f66468c30eb6cee languageName: node linkType: hard @@ -4229,13 +3953,13 @@ __metadata: linkType: hard "cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" + version: 7.0.5 + resolution: "cross-spawn@npm:7.0.5" dependencies: path-key: ^3.1.0 shebang-command: ^2.0.0 which: ^2.0.1 - checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 + checksum: 55c50004cb6bbea3649784caac6e7b8ddd03fa8c1e14dbd5a1f15896708378006eb7526a52a0f48770c768c9b8aed48a5888eb8e785ff59ff7749e74f66cd96b languageName: node linkType: hard @@ -4270,9 +3994,9 @@ __metadata: linkType: hard "csv-stringify@npm:^6.4.4": - version: 6.5.0 - resolution: "csv-stringify@npm:6.5.0" - checksum: c4009bc691b30314ff17cb2918d2f43dd42de5a1d3cd7889fd523f131d0e37d2a3c3c2601de93e8b71e2d8f3f52a9e4fb2a5f2ede9991e2895c1daa268694d78 + version: 6.5.1 + resolution: "csv-stringify@npm:6.5.1" + checksum: 5eb8167ee944f5328c53c733d8c4b1eea88fb9e510abec430e2fcb4be6c4ce008b92e90da7825d424fe74d22c85405add7f89b9dcf82ffe2bf0a1cf31536057a languageName: node linkType: hard @@ -4305,21 +4029,21 @@ __metadata: linkType: hard "dayjs@npm:^1.8.16": - version: 1.11.11 - resolution: "dayjs@npm:1.11.11" - checksum: 84788275aad8a87fee4f1ce4be08861df29687aae6b7b43dd65350118a37dda56772a3902f802cb2dc651dfed447a5a8df62d88f0fb900dba8333e411190a5d5 + version: 1.11.13 + resolution: "dayjs@npm:1.11.13" + checksum: f388db88a6aa93956c1f6121644e783391c7b738b73dbc54485578736565c8931bdfba4bb94e9b1535c6e509c97d5deb918bbe1ae6b34358d994de735055cca9 languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.4, debug@npm:^4.3.5": - version: 4.3.5 - resolution: "debug@npm:4.3.5" +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.7, debug@npm:~4.3.6": + version: 4.3.7 + resolution: "debug@npm:4.3.7" dependencies: - ms: 2.1.2 + ms: ^2.1.3 peerDependenciesMeta: supports-color: optional: true - checksum: 7c002b51e256257f936dda09eb37167df952758c57badf6bf44bdc40b89a4bcb8e5a0a2e4c7b53f97c69e2970dd5272d33a757378a12c8f8e64ea7bf99e8e86e + checksum: 822d74e209cd910ef0802d261b150314bbcf36c582ccdbb3e70f0894823c17e49a50d3e66d96b633524263975ca16b6a833f3e3b7e030c157169a5fabac63160 languageName: node linkType: hard @@ -4332,18 +4056,6 @@ __metadata: languageName: node linkType: hard -"debug@npm:^4.3.6, debug@npm:~4.3.6": - version: 4.3.6 - resolution: "debug@npm:4.3.6" - dependencies: - ms: 2.1.2 - peerDependenciesMeta: - supports-color: - optional: true - checksum: 1630b748dea3c581295e02137a9f5cbe2c1d85fea35c1e6597a65ca2b16a6fce68cec61b299d480787ef310ba927dc8c92d3061faba0ad06c6a724672f66be7f - languageName: node - linkType: hard - "decamelize@npm:^1.2.0": version: 1.2.0 resolution: "decamelize@npm:1.2.0" @@ -4358,15 +4070,6 @@ __metadata: languageName: node linkType: hard -"decompress-response@npm:^6.0.0": - version: 6.0.0 - resolution: "decompress-response@npm:6.0.0" - dependencies: - mimic-response: ^3.1.0 - checksum: d377cf47e02d805e283866c3f50d3d21578b779731e8c5072d6ce8c13cc31493db1c2f6784da9d1d5250822120cefa44f1deab112d5981015f2e17444b763812 - languageName: node - linkType: hard - "dedent@npm:^1.0.0": version: 1.5.3 resolution: "dedent@npm:1.5.3" @@ -4469,13 +4172,6 @@ __metadata: languageName: node linkType: hard -"diff3@npm:0.0.3": - version: 0.0.3 - resolution: "diff3@npm:0.0.3" - checksum: 28d883f1057b9873dfcb38cd2750337e6b32bf184bb1c0fb3292efeb83c597f1ce9b8f508bdd0d623a58b9ca1c917b1f297b90cb7fce3a62b26b0dde496f70e6 - languageName: node - linkType: hard - "diff@npm:^3.5.0": version: 3.5.0 resolution: "diff@npm:3.5.0" @@ -4581,17 +4277,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.796": - version: 1.4.802 - resolution: "electron-to-chromium@npm:1.4.802" - checksum: de8d3992b42fca90a686c2c8528954284dc1437fc850a825f88c91cf31645646bed5e7e9dd586a4460d0732ba8a99cda4d0013eedb0cea0cb7ec9e869155ff86 - languageName: node - linkType: hard - -"electron-to-chromium@npm:^1.5.4": - version: 1.5.4 - resolution: "electron-to-chromium@npm:1.5.4" - checksum: 352f13c043cb185b464efe20f9b0a1adea2b1a7dad56e41dac995d0ad060f9981e479d632ebc73a1dce3bd5c36bbceeffe0667161ce296c2488fbb95f89bc793 +"electron-to-chromium@npm:^1.5.41": + version: 1.5.52 + resolution: "electron-to-chromium@npm:1.5.52" + checksum: fd89ec7587726d99d138d0bbe0e26e490284766b2bce29da21298b80b6ecd16db69c6b1a602d33b37129b9e07c8beaef4c9490681ca1a29a4fcd38ecabc327b8 languageName: node linkType: hard @@ -4602,10 +4291,10 @@ __metadata: languageName: node linkType: hard -"emoji-regex@npm:^10.3.0, emoji-regex@npm:~10.3.0": - version: 10.3.0 - resolution: "emoji-regex@npm:10.3.0" - checksum: 5da48edfeb9462fb1ae5495cff2d79129974c696853fb0ce952cbf560f29a2756825433bf51cfd5157ec7b9f93f46f31d712e896d63e3d8ac9c3832bdb45ab73 +"emoji-regex@npm:^10.3.0, emoji-regex@npm:~10.4.0": + version: 10.4.0 + resolution: "emoji-regex@npm:10.4.0" + checksum: a6d9a0e454829a52e664e049847776ee1fff5646617b06cd87de7c03ce1dfcce4102a3b154d5e9c8e90f8125bc120fc1fe114d523dddf60a8a161f26c72658d2 languageName: node linkType: hard @@ -4711,10 +4400,10 @@ __metadata: languageName: node linkType: hard -"escalade@npm:^3.1.1, escalade@npm:^3.1.2": - version: 3.1.2 - resolution: "escalade@npm:3.1.2" - checksum: 1ec0977aa2772075493002bdbd549d595ff6e9393b1cb0d7d6fcaf78c750da0c158f180938365486f75cb69fba20294351caddfce1b46552a7b6c3cde52eaa02 +"escalade@npm:^3.1.1, escalade@npm:^3.2.0": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 47b029c83de01b0d17ad99ed766347b974b0d628e848de404018f3abee728e987da0d2d370ad4574aa3d5b5bfc368754fd085d69a30f8e75903486ec4b5b709e languageName: node linkType: hard @@ -4802,7 +4491,7 @@ __metadata: languageName: node linkType: hard -"execa@npm:^8.0.1, execa@npm:~8.0.1": +"execa@npm:~8.0.1": version: 8.0.1 resolution: "execa@npm:8.0.1" dependencies: @@ -4819,23 +4508,23 @@ __metadata: languageName: node linkType: hard -"execa@npm:~9.3.0": - version: 9.3.0 - resolution: "execa@npm:9.3.0" +"execa@npm:~9.4.0": + version: 9.4.1 + resolution: "execa@npm:9.4.1" dependencies: "@sindresorhus/merge-streams": ^4.0.0 cross-spawn: ^7.0.3 figures: ^6.1.0 get-stream: ^9.0.0 - human-signals: ^7.0.0 + human-signals: ^8.0.0 is-plain-obj: ^4.1.0 is-stream: ^4.0.1 - npm-run-path: ^5.2.0 + npm-run-path: ^6.0.0 pretty-ms: ^9.0.0 signal-exit: ^4.1.0 strip-final-newline: ^4.0.0 yoctocolors: ^2.0.0 - checksum: d07b28405edf74e3db7ec63b07e54318c58f1a97522064e4e760a257b4d3a9888d9fa7add62ff28c9c26b062a3a311bceea52dea23bf27433a8a19d85a95bdf4 + checksum: 073141e584544efd9f7824473e187c26fd6a1a0c1b09b31aa1ecaff6556c6f8c954c5abbe17c57566bc3981b76d0983d634d3b3d119de006bb0a9e23c96d1ede languageName: node linkType: hard @@ -4967,9 +4656,9 @@ __metadata: linkType: hard "fast-uri@npm:^3.0.1": - version: 3.0.1 - resolution: "fast-uri@npm:3.0.1" - checksum: 106143ff83705995225dcc559411288f3337e732bb2e264e79788f1914b6bd8f8bc3683102de60b15ba00e6ebb443633cabac77d4ebc5cb228c47cf955e199ff + version: 3.0.3 + resolution: "fast-uri@npm:3.0.3" + checksum: c52e6c86465f5c240e84a4485fb001088cc743d261a4b54b0050ce4758b1648bdbe53da1328ef9620149dca1435e3de64184f226d7c0a3656cb5837b3491e149 languageName: node linkType: hard @@ -5152,24 +4841,24 @@ __metadata: languageName: node linkType: hard -"foreground-child@npm:^3.1.0": - version: 3.2.0 - resolution: "foreground-child@npm:3.2.0" +"foreground-child@npm:^3.1.0, foreground-child@npm:^3.3.0": + version: 3.3.0 + resolution: "foreground-child@npm:3.3.0" dependencies: cross-spawn: ^7.0.0 signal-exit: ^4.0.1 - checksum: 6a285b94c5a3cdaabbe230673889c1da0820a2da32366bcac6b9a165edcf390fdcc05d277e0674c4973d767c35e90f0866a4c275253790b60b9c372c346090e3 + checksum: 1989698488f725b05b26bc9afc8a08f08ec41807cd7b92ad85d96004ddf8243fd3e79486b8348c64a3011ae5cc2c9f0936af989e1f28339805d8bc178a75b451 languageName: node linkType: hard "form-data@npm:^4.0.0": - version: 4.0.0 - resolution: "form-data@npm:4.0.0" + version: 4.0.1 + resolution: "form-data@npm:4.0.1" dependencies: asynckit: ^0.4.0 combined-stream: ^1.0.8 mime-types: ^2.1.12 - checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c + checksum: ccee458cd5baf234d6b57f349fe9cc5f9a2ea8fd1af5ecda501a18fd1572a6dd3bf08a49f00568afd995b6a65af34cb8dec083cf9d582c4e621836499498dd84 languageName: node linkType: hard @@ -5298,9 +4987,9 @@ __metadata: linkType: hard "get-east-asian-width@npm:^1.0.0": - version: 1.2.0 - resolution: "get-east-asian-width@npm:1.2.0" - checksum: ea55f4d4a42c4b00d3d9be3111bc17eb0161f60ed23fc257c1390323bb780a592d7a8bdd550260fd4627dabee9a118cdfa3475ae54edca35ebcd3bdae04179e3 + version: 1.3.0 + resolution: "get-east-asian-width@npm:1.3.0" + checksum: 757a34c7a46ff385e2775f96f9d3e553f6b6666a8898fb89040d36a1010fba692332772945606a7d4b0f0c6afb84cd394e75d5477c56e1f00f1eb79603b0aecc languageName: node linkType: hard @@ -5408,17 +5097,18 @@ __metadata: linkType: hard "glob@npm:^10.2.2, glob@npm:^10.3.10": - version: 10.4.1 - resolution: "glob@npm:10.4.1" + version: 10.4.5 + resolution: "glob@npm:10.4.5" dependencies: foreground-child: ^3.1.0 jackspeak: ^3.1.2 minimatch: ^9.0.4 minipass: ^7.1.2 + package-json-from-dist: ^1.0.0 path-scurry: ^1.11.1 bin: glob: dist/esm/bin.mjs - checksum: 5d33c686c80bf6877f4284adf99a8c3cbb2a6eccbc92342943fe5d4b42c01d78c1881f2223d950c92a938d0f857e12e37b86a8e5483ab2141822e053b67d0dde + checksum: 0bc725de5e4862f9f387fd0f2b274baf16850dcd2714502ccf471ee401803997983e2c05590cb65f9675a3c6f2a58e7a53f9e365704108c6ad3cbf1d60934c4a languageName: node linkType: hard @@ -5571,7 +5261,7 @@ __metadata: languageName: node linkType: hard -"hasown@npm:^2.0.0": +"hasown@npm:^2.0.0, hasown@npm:^2.0.2": version: 2.0.2 resolution: "hasown@npm:2.0.2" dependencies: @@ -5671,12 +5361,12 @@ __metadata: linkType: hard "https-proxy-agent@npm:^7.0.1": - version: 7.0.4 - resolution: "https-proxy-agent@npm:7.0.4" + version: 7.0.5 + resolution: "https-proxy-agent@npm:7.0.5" dependencies: agent-base: ^7.0.2 debug: 4 - checksum: daaab857a967a2519ddc724f91edbbd388d766ff141b9025b629f92b9408fc83cee8a27e11a907aede392938e9c398e240d643e178408a59e4073539cde8cfe9 + checksum: 2e1a28960f13b041a50702ee74f240add8e75146a5c37fc98f1960f0496710f6918b3a9fe1e5aba41e50f58e6df48d107edd9c405c5f0d73ac260dabf2210857 languageName: node linkType: hard @@ -5694,19 +5384,19 @@ __metadata: languageName: node linkType: hard -"human-signals@npm:^7.0.0": - version: 7.0.0 - resolution: "human-signals@npm:7.0.0" - checksum: 5e05a7dbb6d021371ddb854c58b19aa372cc616b34e8eec0d27098d699be0571e29b2b98869053d898badb9594b7ed5058642660b04fb1e41b7bd1f83e472d16 +"human-signals@npm:^8.0.0": + version: 8.0.0 + resolution: "human-signals@npm:8.0.0" + checksum: ccaca470e8b5509d89cd9af82e88fc497a4b4b9149b7964bcd9dd1463f9d9676fb5488f50cd1bc0f12ed8875a7c1c5e7019cbe238992b444919e8cf056688eba languageName: node linkType: hard "husky@npm:^9.1.5": - version: 9.1.5 - resolution: "husky@npm:9.1.5" + version: 9.1.6 + resolution: "husky@npm:9.1.6" bin: husky: bin.js - checksum: c240018e852666dc12a93ca84751f1440bdf436468ba872c7b7b3cee54f5f1d7b4222a117988b27ca437093efdeb128778897ab0e409361336676a2c3012c8a7 + checksum: 421ccd8850378231aaefd70dbe9e4f1549b84ffe3a6897f93a202242bbc04e48bd498169aef43849411105d9fcf7c192b757d42661e28d06b934a609a4eb8771 languageName: node linkType: hard @@ -5742,14 +5432,7 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.1.1, ignore@npm:^5.1.4, ignore@npm:^5.1.8, ignore@npm:^5.2.0": - version: 5.3.1 - resolution: "ignore@npm:5.3.1" - checksum: 71d7bb4c1dbe020f915fd881108cbe85a0db3d636a0ea3ba911393c53946711d13a9b1143c7e70db06d571a5822c0a324a6bcde5c9904e7ca5047f01f1bf8cd3 - languageName: node - linkType: hard - -"ignore@npm:^5.3.2": +"ignore@npm:^5.1.1, ignore@npm:^5.1.8, ignore@npm:^5.2.0, ignore@npm:^5.3.2": version: 5.3.2 resolution: "ignore@npm:5.3.2" checksum: 2acfd32a573260ea522ea0bfeff880af426d68f6831f973129e2ba7363f422923cf53aab62f8369cbf4667c7b25b6f8a3761b34ecdb284ea18e87a5262a865be @@ -5774,14 +5457,14 @@ __metadata: linkType: hard "import-local@npm:^3.0.2": - version: 3.1.0 - resolution: "import-local@npm:3.1.0" + version: 3.2.0 + resolution: "import-local@npm:3.2.0" dependencies: pkg-dir: ^4.2.0 resolve-cwd: ^3.0.0 bin: import-local-fixture: fixtures/cli.js - checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd + checksum: 0b0b0b412b2521739fbb85eeed834a3c34de9bc67e670b3d0b86248fc460d990a7b116ad056c084b87a693ef73d1f17268d6a5be626bb43c998a8b1c8a230004 languageName: node linkType: hard @@ -5885,11 +5568,11 @@ __metadata: linkType: hard "is-core-module@npm:^2.13.0, is-core-module@npm:^2.5.0": - version: 2.13.1 - resolution: "is-core-module@npm:2.13.1" + version: 2.15.1 + resolution: "is-core-module@npm:2.15.1" dependencies: - hasown: ^2.0.0 - checksum: 256559ee8a9488af90e4bad16f5583c6d59e92f0742e9e8bb4331e758521ee86b810b93bae44f390766ffbc518a0488b18d9dab7da9a5ff997d499efc9403f7c + hasown: ^2.0.2 + checksum: df134c168115690724b62018c37b2f5bba0d5745fa16960b329c5a00883a8bea6a5632fdb1e3efcce237c201826ba09f93197b7cd95577ea56b0df335be23633 languageName: node linkType: hard @@ -6049,9 +5732,9 @@ __metadata: linkType: hard "is-unicode-supported@npm:^2.0.0": - version: 2.0.0 - resolution: "is-unicode-supported@npm:2.0.0" - checksum: 000b80639dedaf59a385f1c0a57f97a4d1435e0723716f24cc19ad94253a7a0a9f838bdc9ac49b10a29ac93b01f52ae9b2ed358a8876caf1eb74d73b4ede92b2 + version: 2.1.0 + resolution: "is-unicode-supported@npm:2.1.0" + checksum: f254e3da6b0ab1a57a94f7273a7798dd35d1d45b227759f600d0fa9d5649f9c07fa8d3c8a6360b0e376adf916d151ec24fc9a50c5295c58bae7ca54a76a063f9 languageName: node linkType: hard @@ -6099,27 +5782,6 @@ __metadata: languageName: node linkType: hard -"isomorphic-git@npm:^1.27.1": - version: 1.27.1 - resolution: "isomorphic-git@npm:1.27.1" - dependencies: - async-lock: ^1.4.1 - clean-git-ref: ^2.0.1 - crc-32: ^1.2.0 - diff3: 0.0.3 - ignore: ^5.1.4 - minimisted: ^2.0.0 - pako: ^1.0.10 - pify: ^4.0.1 - readable-stream: ^3.4.0 - sha.js: ^2.4.9 - simple-get: ^4.0.1 - bin: - isogit: cli.cjs - checksum: ba6f3c10b3160dac74185881f1da1c5a9b6cbd32d5f273ebce7291055566e5c58f466f89be9039e9c83ededd86a69e367bc4050262bbfbc6b785eea211a7f923 - languageName: node - linkType: hard - "istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": version: 3.2.2 resolution: "istanbul-lib-coverage@npm:3.2.2" @@ -6150,15 +5812,15 @@ __metadata: linkType: hard "istanbul-lib-instrument@npm:^6.0.0, istanbul-lib-instrument@npm:^6.0.2": - version: 6.0.2 - resolution: "istanbul-lib-instrument@npm:6.0.2" + version: 6.0.3 + resolution: "istanbul-lib-instrument@npm:6.0.3" dependencies: "@babel/core": ^7.23.9 "@babel/parser": ^7.23.9 "@istanbuljs/schema": ^0.1.3 istanbul-lib-coverage: ^3.2.0 semver: ^7.5.4 - checksum: c10aa1e93a022f9767d7f41e6c07d244cc0a5c090fbb5522d70a5f21fcb98c52b7038850276c6fd1a7a17d1868c14a9d4eb8a24efe58a0ebb9a06f3da68131fe + checksum: 74104c60c65c4fa0e97cc76f039226c356123893929f067bfad5f86fe839e08f5d680354a68fead3bc9c1e2f3fa6f3f53cded70778e821d911e851d349f3545a languageName: node linkType: hard @@ -6209,21 +5871,21 @@ __metadata: linkType: hard "jackspeak@npm:^3.1.2": - version: 3.4.0 - resolution: "jackspeak@npm:3.4.0" + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" dependencies: "@isaacs/cliui": ^8.0.2 "@pkgjs/parseargs": ^0.11.0 dependenciesMeta: "@pkgjs/parseargs": optional: true - checksum: 350f6f311018bb175ffbe736b19c26ac0b134bb5a17a638169e89594eb0c24ab1c658ab3a2fda24ff63b3b19292e1a5ec19d2255bc526df704e8168d392bef85 + checksum: be31027fc72e7cc726206b9f560395604b82e0fddb46c4cbf9f97d049bcef607491a5afc0699612eaa4213ca5be8fd3e1e7cd187b3040988b65c9489838a7c00 languageName: node linkType: hard "jake@npm:^10.8.5": - version: 10.9.1 - resolution: "jake@npm:10.9.1" + version: 10.9.2 + resolution: "jake@npm:10.9.2" dependencies: async: ^3.2.3 chalk: ^4.0.2 @@ -6231,7 +5893,7 @@ __metadata: minimatch: ^3.1.2 bin: jake: bin/cli.js - checksum: 49659c156b8ad921af377fb782505ae3cc7e7dd8793695b782070d99b4b66d2688b4e3efb32e09252400bfe6e49a7fb393a3a0959e8e1a51dbda95bcacbb9c36 + checksum: f2dc4a086b4f58446d02cb9be913c39710d9ea570218d7681bb861f7eeaecab7b458256c946aeaa7e548c5e0686cc293e6435501e4047174a3b6a504dcbfcaae languageName: node linkType: hard @@ -6674,7 +6336,7 @@ __metadata: languageName: node linkType: hard -"jiti@npm:^1.19.1, jiti@npm:^1.21.6": +"jiti@npm:^1.21.6": version: 1.21.6 resolution: "jiti@npm:1.21.6" bin: @@ -6683,6 +6345,15 @@ __metadata: languageName: node linkType: hard +"jiti@npm:^2.4.0": + version: 2.4.0 + resolution: "jiti@npm:2.4.0" + bin: + jiti: lib/jiti-cli.mjs + checksum: b7d8c441214e48f6c1be2952a83f40e2b1eb6e94fe81b1fd89370d11a7e322c61eb3fbd9a8d47029e14338414091ebbb575e1a92c645ab30fea6240c5c4957c7 + languageName: node + linkType: hard + "joycon@npm:^3.1.1": version: 3.1.1 resolution: "joycon@npm:3.1.1" @@ -6743,12 +6414,12 @@ __metadata: languageName: node linkType: hard -"jsesc@npm:^2.5.1": - version: 2.5.2 - resolution: "jsesc@npm:2.5.2" +"jsesc@npm:^3.0.2": + version: 3.0.2 + resolution: "jsesc@npm:3.0.2" bin: jsesc: bin/jsesc - checksum: 4dc190771129e12023f729ce20e1e0bfceac84d73a85bc3119f7f938843fe25a4aeccb54b6494dce26fcf263d815f5f31acdefac7cc9329efb8422a4f4d9fa9d + checksum: a36d3ca40574a974d9c2063bf68c2b6141c20da8f2a36bd3279fc802563f35f0527a6c828801295bdfb2803952cf2cf387786c2c90ed564f88d5782475abfe3c languageName: node linkType: hard @@ -6821,9 +6492,9 @@ __metadata: linkType: hard "jsonc-parser@npm:^3.0.0": - version: 3.2.1 - resolution: "jsonc-parser@npm:3.2.1" - checksum: 656d9027b91de98d8ab91b3aa0d0a4cab7dc798a6830845ca664f3e76c82d46b973675bbe9b500fae1de37fd3e81aceacbaa2a57884bf2f8f29192150d2d1ef7 + version: 3.3.1 + resolution: "jsonc-parser@npm:3.3.1" + checksum: 81ef19d98d9c6bd6e4a37a95e2753c51c21705cbeffd895e177f4b542cca9cda5fda12fb942a71a2e824a9132cf119dc2e642e9286386055e1365b5478f49a47 languageName: node linkType: hard @@ -6944,21 +6615,21 @@ __metadata: linkType: hard "knip@npm:^5.29.2": - version: 5.29.2 - resolution: "knip@npm:5.29.2" + version: 5.36.3 + resolution: "knip@npm:5.36.3" dependencies: "@nodelib/fs.walk": 1.2.8 "@snyk/github-codeowners": 1.1.0 easy-table: 1.2.0 enhanced-resolve: ^5.17.1 fast-glob: ^3.3.2 - jiti: ^1.21.6 + jiti: ^2.4.0 js-yaml: ^4.1.0 minimist: ^1.2.8 - picocolors: ^1.0.0 + picocolors: ^1.1.0 picomatch: ^4.0.1 pretty-ms: ^9.0.0 - smol-toml: ^1.1.4 + smol-toml: ^1.3.0 strip-json-comments: 5.0.1 summary: 2.1.0 zod: ^3.22.4 @@ -6969,7 +6640,7 @@ __metadata: bin: knip: bin/knip.js knip-bun: bin/knip-bun.js - checksum: c1c9abf9f6438c17f854c52adc7f294d07991632a7a45675c0213815546556b74fc7ac9cd3b7fd3eca2bd6c816fa973e212a4b38c0dc87e0826ea63635d5e2b6 + checksum: e9315dbe6ecea1c1e95215dc9e678cd9605a8015e68cec2c36566764892e0d2b8320b0277d2c911610221811af7d47e27c011b847ad3cb5cef82fef09bcd1608 languageName: node linkType: hard @@ -7033,8 +6704,8 @@ __metadata: linkType: hard "listr2@npm:~8.2.4": - version: 8.2.4 - resolution: "listr2@npm:8.2.4" + version: 8.2.5 + resolution: "listr2@npm:8.2.5" dependencies: cli-truncate: ^4.0.0 colorette: ^2.0.20 @@ -7042,7 +6713,7 @@ __metadata: log-update: ^6.1.0 rfdc: ^1.4.1 wrap-ansi: ^9.0.0 - checksum: b1cdcae653ff967a9b28637e346df2d6614165b4ad1e9e36b1403bc972550c51f57ec0e6d307dc3921ceea0601e244e848ab79457c6d570ab1f088b577a63d90 + checksum: 0ca2387b067eb11bbe91863f36903f3a5a040790422a499cc1a15806d8497979e7d1990bd129061c0510906b2971eaa97a74a9635e3ec5abd5830c9749b655b9 languageName: node linkType: hard @@ -7331,9 +7002,9 @@ __metadata: linkType: hard "lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": - version: 10.2.2 - resolution: "lru-cache@npm:10.2.2" - checksum: 98e8fc93691c546f719a76103ef2bee5a3ac823955c755a47641ec41f8c7fafa1baeaba466937cc1cbfa9cfd47e03536d10e2db3158a64ad91ff3a58a32c893e + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 6476138d2125387a6d20f100608c2583d415a4f64a0fecf30c9e2dda976614f09cad4baa0842447bd37dd459a7bd27f57d9d8f8ce558805abd487c583f3d774a languageName: node linkType: hard @@ -7487,13 +7158,6 @@ __metadata: languageName: node linkType: hard -"mimic-response@npm:^3.1.0": - version: 3.1.0 - resolution: "mimic-response@npm:3.1.0" - checksum: 25739fee32c17f433626bf19f016df9036b75b3d84a3046c7d156e72ec963dd29d7fc8a302f55a3d6c5a4ff24259676b15d915aad6480815a969ff2ec0836867 - languageName: node - linkType: hard - "minimalistic-assert@npm:^1.0.0": version: 1.0.1 resolution: "minimalistic-assert@npm:1.0.1" @@ -7519,16 +7183,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^9.0.4": - version: 9.0.4 - resolution: "minimatch@npm:9.0.4" - dependencies: - brace-expansion: ^2.0.1 - checksum: cf717f597ec3eed7dabc33153482a2e8d49f4fd3c26e58fd9c71a94c5029a0838728841b93f46bf1263b65a8010e2ee800d0dc9b004ab8ba8b6d1ec07cc115b5 - languageName: node - linkType: hard - -"minimatch@npm:~9.0.5": +"minimatch@npm:^9.0.4, minimatch@npm:~9.0.5": version: 9.0.5 resolution: "minimatch@npm:9.0.5" dependencies: @@ -7537,22 +7192,13 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.2.3, minimist@npm:^1.2.5, minimist@npm:^1.2.6, minimist@npm:^1.2.8": +"minimist@npm:^1.2.3, minimist@npm:^1.2.6, minimist@npm:^1.2.8": version: 1.2.8 resolution: "minimist@npm:1.2.8" checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 languageName: node linkType: hard -"minimisted@npm:^2.0.0": - version: 2.0.1 - resolution: "minimisted@npm:2.0.1" - dependencies: - minimist: ^1.2.5 - checksum: 6bc3df14558481c96764cfd6bf77a59f5838dec715c38c1e338193c1e56f536ba792ccbae84ff6632d13a7dd37ac888141c091d23733229b8d100148eec930aa - languageName: node - linkType: hard - "minipass-collect@npm:^2.0.1": version: 2.0.1 resolution: "minipass-collect@npm:2.0.1" @@ -7665,8 +7311,8 @@ __metadata: linkType: hard "mocha@npm:^10.7.3": - version: 10.7.3 - resolution: "mocha@npm:10.7.3" + version: 10.8.2 + resolution: "mocha@npm:10.8.2" dependencies: ansi-colors: ^4.1.3 browser-stdout: ^1.3.1 @@ -7691,7 +7337,7 @@ __metadata: bin: _mocha: bin/_mocha mocha: bin/mocha.js - checksum: 956376dd8c7cd3e4f496ab1b06b7c89673ade2fb7f78704d8fce32b491f6940550eb1e784b7eef617e37fa29257a728df8b5b2b5e34ed7e83a692652290fab3c + checksum: 68cb519503f1e8ffd9b0651e1aef75dfe4754425186756b21e53169da44b5bcb1889e2b743711205082763d3f9a42eb8eb2c13bb1a718a08cb3a5f563bfcacdc languageName: node linkType: hard @@ -7702,13 +7348,6 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.2": - version: 2.1.2 - resolution: "ms@npm:2.1.2" - checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f - languageName: node - linkType: hard - "ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" @@ -7726,26 +7365,26 @@ __metadata: languageName: node linkType: hard -"mutation-testing-elements@npm:3.2.0": - version: 3.2.0 - resolution: "mutation-testing-elements@npm:3.2.0" - checksum: fc75beb1bcd85fe5505b681ff0d3a669faccdbc80569c1d8fc2a577298d80b6974c80a41f0240c7d20b0de2dedeff83119becd1504ed316fae0a36d9337af197 +"mutation-testing-elements@npm:3.3.0": + version: 3.3.0 + resolution: "mutation-testing-elements@npm:3.3.0" + checksum: 045b3cd362d96b39d25b9069ed0c706e3aa91a209a91a4775eefed7b1e03a77e3c959368074357e58030f703bbadd3a3b7c53db9116793d257e7fb8704ab2cbd languageName: node linkType: hard -"mutation-testing-metrics@npm:3.2.0": - version: 3.2.0 - resolution: "mutation-testing-metrics@npm:3.2.0" +"mutation-testing-metrics@npm:3.3.0": + version: 3.3.0 + resolution: "mutation-testing-metrics@npm:3.3.0" dependencies: - mutation-testing-report-schema: 3.1.1 - checksum: 12dbf60145feb1bf3439ebf81f22c947efd9887077a668317a2bcf00da3ee7569392092850f9ae2a508d9816a6f4dc692c5c870b490985d3636211bda6f9db72 + mutation-testing-report-schema: 3.3.0 + checksum: fcf8b2ac2728e2982452aa4d5963044b073a8847036df7ce041fc9bd86bb9265787d9aab4f1610b845dc68164b4aa1bdf176ca09f4651895860afa1904b5f1e7 languageName: node linkType: hard -"mutation-testing-report-schema@npm:3.1.1": - version: 3.1.1 - resolution: "mutation-testing-report-schema@npm:3.1.1" - checksum: 1f73dfbfecf86886385f20c28c69fb5518fcaffbfd155e620acd4bddc0234b5cb39e68293d6688644251e3d703f8063d882968e5ae69c2a3da63f8a5504fd510 +"mutation-testing-report-schema@npm:3.3.0": + version: 3.3.0 + resolution: "mutation-testing-report-schema@npm:3.3.0" + checksum: bb27f65eabd00da74f3159f5a65989e96ef296b387424d214e3de3f485657654d7017378dc2938f5a92e6171a37e3692ddcd2185a04a5e6bf2bb2d2b7efac599 languageName: node linkType: hard @@ -7775,11 +7414,11 @@ __metadata: linkType: hard "nan@npm:^2.0.8": - version: 2.20.0 - resolution: "nan@npm:2.20.0" + version: 2.22.0 + resolution: "nan@npm:2.22.0" dependencies: node-gyp: latest - checksum: eb09286e6c238a3582db4d88c875db73e9b5ab35f60306090acd2f3acae21696c9b653368b4a0e32abcef64ee304a923d6223acaddd16169e5eaaf5c508fb533 + checksum: 222e3a090e326c72f6782d948f44ee9b81cfb2161d5fe53216f04426a273fd094deee9dcc6813096dd2397689a2b10c1a92d3885d2e73fd2488a51547beb2929 languageName: node linkType: hard @@ -7807,9 +7446,9 @@ __metadata: linkType: hard "negotiator@npm:^0.6.3": - version: 0.6.3 - resolution: "negotiator@npm:0.6.3" - checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 + version: 0.6.4 + resolution: "negotiator@npm:0.6.4" + checksum: 7ded10aa02a0707d1d12a9973fdb5954f98547ca7beb60e31cb3a403cc6e8f11138db7a3b0128425cf836fc85d145ec4ce983b2bdf83dca436af879c2d683510 languageName: node linkType: hard @@ -7847,15 +7486,15 @@ __metadata: linkType: hard "nise@npm:^6.0.0": - version: 6.0.0 - resolution: "nise@npm:6.0.0" + version: 6.1.1 + resolution: "nise@npm:6.1.1" dependencies: - "@sinonjs/commons": ^3.0.0 - "@sinonjs/fake-timers": ^11.2.2 - "@sinonjs/text-encoding": ^0.7.2 + "@sinonjs/commons": ^3.0.1 + "@sinonjs/fake-timers": ^13.0.1 + "@sinonjs/text-encoding": ^0.7.3 just-extend: ^6.2.0 - path-to-regexp: ^6.2.1 - checksum: 86d6ebe5baf239b73e97cd4125b03bf5f5d934fabbbf044b801dfc709d786908f68b00eac9ebd08662c20eab39a53ac4f09084885d241e994eb3f502e3b8b618 + path-to-regexp: ^8.1.0 + checksum: 31cfc9147ea4653a091ce177d3f3a223153fdaa1676ac1ec2baf1c95b58dc4c33bad015826a48c8c805c93952775ecd83ef688afec7436939062b7e57c95f76a languageName: node linkType: hard @@ -7881,13 +7520,13 @@ __metadata: linkType: hard "nock@npm:^13.3.3": - version: 13.5.4 - resolution: "nock@npm:13.5.4" + version: 13.5.5 + resolution: "nock@npm:13.5.5" dependencies: debug: ^4.1.0 json-stringify-safe: ^5.0.1 propagate: ^2.0.0 - checksum: d31f924e34c87ae985edfb7b5a56e8a4dcfc3a072334ceb6d686326581f93090b3e23492663a64ce61b8df4f365b113231d926bc300bcfe9e5eb309c3e4b8628 + checksum: 91947b683992096a694140714323f11493b8ad9961c172e3e574c4801131fea259755e95c48e7e01527c14209967c20f151ff03b6bf6700471f0f76fa4071d32 languageName: node linkType: hard @@ -7906,8 +7545,8 @@ __metadata: linkType: hard "node-gyp@npm:latest": - version: 10.1.0 - resolution: "node-gyp@npm:10.1.0" + version: 10.2.0 + resolution: "node-gyp@npm:10.2.0" dependencies: env-paths: ^2.2.0 exponential-backoff: ^3.1.1 @@ -7915,13 +7554,13 @@ __metadata: graceful-fs: ^4.2.6 make-fetch-happen: ^13.0.0 nopt: ^7.0.0 - proc-log: ^3.0.0 + proc-log: ^4.1.0 semver: ^7.3.5 - tar: ^6.1.2 + tar: ^6.2.1 which: ^4.0.0 bin: node-gyp: bin/node-gyp.js - checksum: 72e2ab4b23fc32007a763da94018f58069fc0694bf36115d49a2b195c8831e12cf5dd1e7a3718fa85c06969aedf8fc126722d3b672ec1cb27e06ed33caee3c60 + checksum: 0233759d8c19765f7fdc259a35eb046ad86c3d09e22f7384613ae2b89647dd27fcf833fdf5293d9335041e91f9b1c539494225959cdb312a5c8080b7534b926f languageName: node linkType: hard @@ -7941,13 +7580,6 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.14": - version: 2.0.14 - resolution: "node-releases@npm:2.0.14" - checksum: 59443a2f77acac854c42d321bf1b43dea0aef55cd544c6a686e9816a697300458d4e82239e2d794ea05f7bbbc8a94500332e2d3ac3f11f52e4b16cbe638b3c41 - languageName: node - linkType: hard - "node-releases@npm:^2.0.18": version: 2.0.18 resolution: "node-releases@npm:2.0.18" @@ -8003,7 +7635,7 @@ __metadata: languageName: node linkType: hard -"npm-run-path@npm:^5.1.0, npm-run-path@npm:^5.2.0, npm-run-path@npm:~5.3.0": +"npm-run-path@npm:^5.1.0": version: 5.3.0 resolution: "npm-run-path@npm:5.3.0" dependencies: @@ -8012,9 +7644,19 @@ __metadata: languageName: node linkType: hard +"npm-run-path@npm:^6.0.0, npm-run-path@npm:~6.0.0": + version: 6.0.0 + resolution: "npm-run-path@npm:6.0.0" + dependencies: + path-key: ^4.0.0 + unicorn-magic: ^0.3.0 + checksum: 1a1b50aba6e6af7fd34a860ba2e252e245c4a59b316571a990356417c0cdf0414cabf735f7f52d9c330899cb56f0ab804a8e21fb12a66d53d7843e39ada4a3b6 + languageName: node + linkType: hard + "nyc@npm:^17.0.0": - version: 17.0.0 - resolution: "nyc@npm:17.0.0" + version: 17.1.0 + resolution: "nyc@npm:17.1.0" dependencies: "@istanbuljs/load-nyc-config": ^1.0.0 "@istanbuljs/schema": ^0.1.2 @@ -8023,7 +7665,7 @@ __metadata: decamelize: ^1.2.0 find-cache-dir: ^3.2.0 find-up: ^4.1.0 - foreground-child: ^2.0.0 + foreground-child: ^3.3.0 get-package-type: ^0.1.0 glob: ^7.1.6 istanbul-lib-coverage: ^3.0.0 @@ -8045,14 +7687,14 @@ __metadata: yargs: ^15.0.2 bin: nyc: bin/nyc.js - checksum: e10fe59393ef569745ed4e9026bc5f5e84fe81cac43c82b348c9faad8a1b71fd3a880fb5f379b4be55269d3a541b7c6c14e7b90adb925973ebc9c9593f60a1af + checksum: 725b396a1e2e35fc7c347090c80b48473e4da038c18bef9890c5c1bc42549de6b8400437c286caf8a0fc439f5e2b25327af7a878f121677084be30bc25bcbbbb languageName: node linkType: hard "object-inspect@npm:^1.13.1": - version: 1.13.1 - resolution: "object-inspect@npm:1.13.1" - checksum: 7d9fa9221de3311dcb5c7c307ee5dc011cdd31dc43624b7c184b3840514e118e05ef0002be5388304c416c0eb592feb46e983db12577fc47e47d5752fbbfb61f + version: 1.13.2 + resolution: "object-inspect@npm:1.13.2" + checksum: 9f850b3c045db60e0e97746e809ee4090d6ce62195af17dd1e9438ac761394a7d8ec4f7906559aea5424eaf61e35d3e53feded2ccd5f62fcc7d9670d3c8eb353 languageName: node linkType: hard @@ -8221,7 +7863,14 @@ __metadata: languageName: node linkType: hard -"pako@npm:^1.0.10, pako@npm:~1.0.2": +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 58ee9538f2f762988433da00e26acc788036914d57c71c246bf0be1b60cdbd77dd60b6a3e1a30465f0b248aeb80079e0b34cb6050b1dfa18c06953bb1cbc7602 + languageName: node + linkType: hard + +"pako@npm:~1.0.2": version: 1.0.11 resolution: "pako@npm:1.0.11" checksum: 1be2bfa1f807608c7538afa15d6f25baa523c30ec870a3228a89579e474a4d992f4293859524e46d5d87fd30fa17c5edf34dbef0671251d9749820b488660b16 @@ -8366,18 +8015,25 @@ __metadata: linkType: hard "path-to-regexp@npm:^1.7.0": - version: 1.8.0 - resolution: "path-to-regexp@npm:1.8.0" + version: 1.9.0 + resolution: "path-to-regexp@npm:1.9.0" dependencies: isarray: 0.0.1 - checksum: 709f6f083c0552514ef4780cb2e7e4cf49b0cc89a97439f2b7cc69a608982b7690fb5d1720a7473a59806508fc2dae0be751ba49f495ecf89fd8fbc62abccbcd + checksum: 5b2ac9cab2a9f82effd30a35164b20998b18d99d96608281dd2cab6e66c0e4536187970369b185ab21d3815da1ecb7dcb2d5f97a4bf0ee6e31a9612299fca147 languageName: node linkType: hard "path-to-regexp@npm:^6.2.1": - version: 6.2.2 - resolution: "path-to-regexp@npm:6.2.2" - checksum: b7b0005c36f5099f9ed1fb20a820d2e4ed1297ffe683ea1d678f5e976eb9544f01debb281369dabdc26da82e6453901bf71acf2c7ed14b9243536c2a45286c33 + version: 6.3.0 + resolution: "path-to-regexp@npm:6.3.0" + checksum: eca78602e6434a1b6799d511d375ec044e8d7e28f5a48aa5c28d57d8152fb52f3fc62fb1cfc5dfa2198e1f041c2a82ed14043d75740a2fe60e91b5089a153250 + languageName: node + linkType: hard + +"path-to-regexp@npm:^8.1.0": + version: 8.2.0 + resolution: "path-to-regexp@npm:8.2.0" + checksum: 56e13e45962e776e9e7cd72e87a441cfe41f33fd539d097237ceb16adc922281136ca12f5a742962e33d8dda9569f630ba594de56d8b7b6e49adf31803c5e771 languageName: node linkType: hard @@ -8395,10 +8051,10 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1": - version: 1.0.1 - resolution: "picocolors@npm:1.0.1" - checksum: fa68166d1f56009fc02a34cdfd112b0dd3cf1ef57667ac57281f714065558c01828cdf4f18600ad6851cbe0093952ed0660b1e0156bddf2184b6aaf5817553a5 +"picocolors@npm:^1.0.0, picocolors@npm:^1.1.0": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: e1cf46bf84886c79055fdfa9dcb3e4711ad259949e3565154b004b260cd356c5d54b31a1437ce9782624bf766272fe6b0154f5f0c744fb7af5d454d2b60db045 languageName: node linkType: hard @@ -8425,14 +8081,7 @@ __metadata: languageName: node linkType: hard -"pify@npm:^4.0.1": - version: 4.0.1 - resolution: "pify@npm:4.0.1" - checksum: 9c4e34278cb09987685fa5ef81499c82546c033713518f6441778fbec623fc708777fe8ac633097c72d88470d5963094076c7305cafc7ad340aae27cfacd856b - languageName: node - linkType: hard - -"pino-abstract-transport@npm:^1.0.0, pino-abstract-transport@npm:^1.2.0": +"pino-abstract-transport@npm:^1.2.0": version: 1.2.0 resolution: "pino-abstract-transport@npm:1.2.0" dependencies: @@ -8442,9 +8091,18 @@ __metadata: languageName: node linkType: hard +"pino-abstract-transport@npm:^2.0.0": + version: 2.0.0 + resolution: "pino-abstract-transport@npm:2.0.0" + dependencies: + split2: ^4.0.0 + checksum: 4db0cd8a1a7b6d13e76dbb58e6adc057c39e4591c70f601f4a427c030d57dff748ab53954e1ecd3aa6e21c1a22dd38de96432606c6d906a7b9f610543bf1d6e2 + languageName: node + linkType: hard + "pino-pretty@npm:^11.2.2": - version: 11.2.2 - resolution: "pino-pretty@npm:11.2.2" + version: 11.3.0 + resolution: "pino-pretty@npm:11.3.0" dependencies: colorette: ^2.0.7 dateformat: ^4.6.3 @@ -8454,7 +8112,7 @@ __metadata: joycon: ^3.1.1 minimist: ^1.2.6 on-exit-leak-free: ^2.1.0 - pino-abstract-transport: ^1.0.0 + pino-abstract-transport: ^2.0.0 pump: ^3.0.0 readable-stream: ^4.0.0 secure-json-parse: ^2.4.0 @@ -8462,7 +8120,7 @@ __metadata: strip-json-comments: ^3.1.1 bin: pino-pretty: bin.js - checksum: 813b9583e398ccad2756bd77816394467891e07446f73cfbe0f4e5100f149a1b8d7e248dc19ccf27ff940601abfeb79fb66b96f6dec81b681bcefb051dc2939c + checksum: 76d8d87dbfd15063c47accea9e24762db4181a02ef5bee05fe0a863e2a46caacd68bbcb4d5a8bcff9b51f97dbe83ace9b554c393ad5ef231532acc19160b4b57 languageName: node linkType: hard @@ -8473,14 +8131,14 @@ __metadata: languageName: node linkType: hard -"pino@npm:^9.3.2": - version: 9.3.2 - resolution: "pino@npm:9.3.2" +"pino@npm:^9.4.0": + version: 9.5.0 + resolution: "pino@npm:9.5.0" dependencies: atomic-sleep: ^1.0.0 fast-redact: ^3.1.1 on-exit-leak-free: ^2.1.0 - pino-abstract-transport: ^1.2.0 + pino-abstract-transport: ^2.0.0 pino-std-serializers: ^7.0.0 process-warning: ^4.0.0 quick-format-unescaped: ^4.0.3 @@ -8490,7 +8148,7 @@ __metadata: thread-stream: ^3.0.0 bin: pino: bin.js - checksum: 81608b8b390d513f05170d8b5c5c2083839efe5d7c21466a39f5b6a26695b98b2d94ada6295699a0d50009e115f8e5d39c9a2025aaaa42c3178dd426be8071f0 + checksum: 650c3087619a619e92948641f0d9acc60cca594175b02fe1ce9c0923a8d07a8d120866f50b0848c26a5898837b8c1ae086adf67066180f686ea21e6e515a8558 languageName: node linkType: hard @@ -8529,22 +8187,15 @@ __metadata: linkType: hard "pretty-ms@npm:^9.0.0": - version: 9.0.0 - resolution: "pretty-ms@npm:9.0.0" + version: 9.1.0 + resolution: "pretty-ms@npm:9.1.0" dependencies: parse-ms: ^4.0.0 - checksum: 072b17547e09cb232e8e4c7be0281e256b6d8acd18dfb2fdd715d50330d1689fdaa877f53cf90c62ed419ef842f0f5fb94a2cd8ed1aa6d7608ad48834219435d - languageName: node - linkType: hard - -"proc-log@npm:^3.0.0": - version: 3.0.0 - resolution: "proc-log@npm:3.0.0" - checksum: 02b64e1b3919e63df06f836b98d3af002b5cd92655cab18b5746e37374bfb73e03b84fe305454614b34c25b485cc687a9eebdccf0242cda8fda2475dd2c97e02 + checksum: 0f66507467f2005040cccdcb36f35b82674d7809f41c4432009235ed6c920787afa17f621c25b7ccb8ccd80b0840c7b71f7f4a3addb8f0eeef3a033ff1e5cf71 languageName: node linkType: hard -"proc-log@npm:^4.2.0": +"proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": version: 4.2.0 resolution: "proc-log@npm:4.2.0" checksum: 98f6cd012d54b5334144c5255ecb941ee171744f45fca8b43b58ae5a0c1af07352475f481cadd9848e7f0250376ee584f6aa0951a856ff8f021bdfbff4eb33fc @@ -8633,27 +8284,13 @@ __metadata: languageName: node linkType: hard -"psl@npm:^1.1.33": - version: 1.9.0 - resolution: "psl@npm:1.9.0" - checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d - languageName: node - linkType: hard - "pump@npm:^3.0.0": - version: 3.0.0 - resolution: "pump@npm:3.0.0" + version: 3.0.2 + resolution: "pump@npm:3.0.2" dependencies: end-of-stream: ^1.1.0 once: ^1.3.1 - checksum: e42e9229fba14732593a718b04cb5e1cfef8254544870997e0ecd9732b189a48e1256e4e5478148ecb47c8511dca2b09eae56b4d0aad8009e6fac8072923cfc9 - languageName: node - linkType: hard - -"punycode@npm:^2.1.0, punycode@npm:^2.1.1": - version: 2.3.1 - resolution: "punycode@npm:2.3.1" - checksum: bb0a0ceedca4c3c57a9b981b90601579058903c62be23c5e8e843d2c2d4148a3ecf029d5133486fb0e1822b098ba8bba09e89d6b21742d02fa26bda6441a6fb2 + checksum: e0c4216874b96bd25ddf31a0b61a5613e26cc7afa32379217cf39d3915b0509def3565f5f6968fafdad2894c8bbdbd67d340e84f3634b2a29b950cffb6442d9f languageName: node linkType: hard @@ -8694,13 +8331,6 @@ __metadata: languageName: node linkType: hard -"querystringify@npm:^2.1.1": - version: 2.2.0 - resolution: "querystringify@npm:2.2.0" - checksum: 5641ea231bad7ef6d64d9998faca95611ed4b11c2591a8cae741e178a974f6a8e0ebde008475259abe1621cb15e692404e6b6626e927f7b849d5c09392604b15 - languageName: node - linkType: hard - "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -8857,13 +8487,6 @@ __metadata: languageName: node linkType: hard -"requires-port@npm:^1.0.0": - version: 1.0.0 - resolution: "requires-port@npm:1.0.0" - checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff - languageName: node - linkType: hard - "resolve-cwd@npm:^3.0.0": version: 3.0.0 resolution: "resolve-cwd@npm:3.0.0" @@ -9050,9 +8673,9 @@ __metadata: linkType: hard "safe-stable-stringify@npm:^2.3.1": - version: 2.4.3 - resolution: "safe-stable-stringify@npm:2.4.3" - checksum: 3aeb64449706ee1f5ad2459fc99648b131d48e7a1fbb608d7c628020177512dc9d94108a5cb61bbc953985d313d0afea6566d243237743e02870490afef04b43 + version: 2.5.0 + resolution: "safe-stable-stringify@npm:2.5.0" + checksum: d3ce103ed43c6c2f523e39607208bfb1c73aa48179fc5be53c3aa97c118390bffd4d55e012f5393b982b65eb3e0ee954dd57b547930d3f242b0053dcdb923d17 languageName: node linkType: hard @@ -9102,16 +8725,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0": - version: 7.6.2 - resolution: "semver@npm:7.6.2" - bin: - semver: bin/semver.js - checksum: 40f6a95101e8d854357a644da1b8dd9d93ce786d5c6a77227bc69dbb17bea83d0d1d1d7c4cd5920a6df909f48e8bd8a5909869535007f90278289f2451d0292d - languageName: node - linkType: hard - -"semver@npm:^7.6.3, semver@npm:~7.6.3": +"semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.3, semver@npm:~7.6.3": version: 7.6.3 resolution: "semver@npm:7.6.3" bin: @@ -9204,7 +8818,6 @@ __metadata: fs-extra: ^11.2.0 husky: ^9.1.5 ignore: ^5.3.2 - isomorphic-git: ^1.27.1 jest: ^29.7.0 knip: ^5.29.2 lint-staged: ^15.2.10 @@ -9225,18 +8838,6 @@ __metadata: languageName: unknown linkType: soft -"sha.js@npm:^2.4.9": - version: 2.4.11 - resolution: "sha.js@npm:2.4.11" - dependencies: - inherits: ^2.0.1 - safe-buffer: ^5.0.1 - bin: - sha.js: ./bin.js - checksum: ebd3f59d4b799000699097dadb831c8e3da3eb579144fd7eb7a19484cbcbb7aca3c68ba2bb362242eb09e33217de3b4ea56e4678184c334323eca24a58e3ad07 - languageName: node - linkType: hard - "shebang-command@npm:^1.2.0": version: 1.2.0 resolution: "shebang-command@npm:1.2.0" @@ -9320,32 +8921,14 @@ __metadata: languageName: node linkType: hard -"simple-concat@npm:^1.0.0": - version: 1.0.1 - resolution: "simple-concat@npm:1.0.1" - checksum: 4d211042cc3d73a718c21ac6c4e7d7a0363e184be6a5ad25c8a1502e49df6d0a0253979e3d50dbdd3f60ef6c6c58d756b5d66ac1e05cda9cacd2e9fc59e3876a - languageName: node - linkType: hard - -"simple-get@npm:^4.0.1": - version: 4.0.1 - resolution: "simple-get@npm:4.0.1" - dependencies: - decompress-response: ^6.0.0 - once: ^1.3.1 - simple-concat: ^1.0.0 - checksum: e4132fd27cf7af230d853fa45c1b8ce900cb430dd0a3c6d3829649fe4f2b26574c803698076c4006450efb0fad2ba8c5455fbb5755d4b0a5ec42d4f12b31d27e - languageName: node - linkType: hard - "simple-git@npm:^3.26.0": - version: 3.26.0 - resolution: "simple-git@npm:3.26.0" + version: 3.27.0 + resolution: "simple-git@npm:3.27.0" dependencies: "@kwsites/file-exists": ^1.1.1 "@kwsites/promise-deferred": ^1.1.1 debug: ^4.3.5 - checksum: b15a144df56690d7aa6c4e261148f177c0677f479565b1828c628f3de4beba1ab1cedc813d47fc358985841a8782c2e1dad9ecabe2152ef1e90d273475a0f7f7 + checksum: bc602d67317a5421363f4cbe446bc71336387a7ea9864b23993dcbbd7e4847e346a234aa5b46bf9d80130d2448cbaeb21cf8f7b62572dce093fb4643ff7ffafd languageName: node linkType: hard @@ -9364,16 +8947,16 @@ __metadata: linkType: hard "sinon@npm:^18.0.0": - version: 18.0.0 - resolution: "sinon@npm:18.0.0" + version: 18.0.1 + resolution: "sinon@npm:18.0.1" dependencies: "@sinonjs/commons": ^3.0.1 - "@sinonjs/fake-timers": ^11.2.2 + "@sinonjs/fake-timers": 11.2.2 "@sinonjs/samsam": ^8.0.0 diff: ^5.2.0 nise: ^6.0.0 supports-color: ^7 - checksum: 5d7bc61c6c3d89cd8ba5a03b2f782703ae9637aa592ace3da041c0ce18aa36d4752a46276d822f9e982c0c886322935099d87508850051a2668241650e77b9c3 + checksum: 6201b5381cc27d91ade70228cf7cf8e127eddbe57d265bceaef1481d7bfcc9888993de00e7116a99da75fe83ffae143428cf550a57b30412d6ca170956a6a43e languageName: node linkType: hard @@ -9444,10 +9027,10 @@ __metadata: languageName: node linkType: hard -"smol-toml@npm:^1.1.4": - version: 1.2.1 - resolution: "smol-toml@npm:1.2.1" - checksum: 12040dd8e38b6efb7a1572bfd803c6a7ac89b8d715d0614b024601165059ea3f4653dd5b87b601308dcefd20a26af8445e9be9888b52e0c4f24d1bfc6d2c4e84 +"smol-toml@npm:^1.3.0": + version: 1.3.0 + resolution: "smol-toml@npm:1.3.0" + checksum: 79e1db6b6cd32a13ad7602bfe1a02f20894fe599657a5cc2c8ffab7c3de4ba51f7426b701b513f9b859560918b36a63f7c73f7eaf6def8a1dc73db74ffd9b601 languageName: node linkType: hard @@ -9462,17 +9045,17 @@ __metadata: linkType: hard "socks-proxy-agent@npm:^8.0.3": - version: 8.0.3 - resolution: "socks-proxy-agent@npm:8.0.3" + version: 8.0.4 + resolution: "socks-proxy-agent@npm:8.0.4" dependencies: agent-base: ^7.1.1 debug: ^4.3.4 - socks: ^2.7.1 - checksum: 8fab38821c327c190c28f1658087bc520eb065d55bc07b4a0fdf8d1e0e7ad5d115abbb22a95f94f944723ea969dd771ad6416b1e3cde9060c4c71f705c8b85c5 + socks: ^2.8.3 + checksum: b2ec5051d85fe49072f9a250c427e0e9571fd09d5db133819192d078fd291276e1f0f50f6dbc04329b207738b1071314cee8bdbb4b12e27de42dbcf1d4233c67 languageName: node linkType: hard -"socks@npm:^2.7.1": +"socks@npm:^2.8.3": version: 2.8.3 resolution: "socks@npm:2.8.3" dependencies: @@ -9483,11 +9066,11 @@ __metadata: linkType: hard "sonic-boom@npm:^4.0.1": - version: 4.0.1 - resolution: "sonic-boom@npm:4.0.1" + version: 4.2.0 + resolution: "sonic-boom@npm:4.2.0" dependencies: atomic-sleep: ^1.0.0 - checksum: 451b0f09bc0a0abfa6bfed0e2d7d36a6fa245be8a444a7ef1e3c8abb006e9994cb7530b1da39c8aee9033598d1ce187e244a6194c92a81790a2e2633c60cd63d + checksum: e5e1ffdd3bcb0dee3bf6f7b2ff50dd3ffa2df864dc9d53463f33e225021a28601e91d0ec7e932739824bafd6f4ff3b7090939ac3e34ab1022e01692b41f7e8a3 languageName: node linkType: hard @@ -9573,9 +9156,9 @@ __metadata: linkType: hard "spdx-license-ids@npm:^3.0.0": - version: 3.0.18 - resolution: "spdx-license-ids@npm:3.0.18" - checksum: 457825df5dd1fc0135b0bb848c896143f70945cc2da148afc71c73ed0837d1d651f809006e406d82109c9dd71a8cb39785a3604815fe46bc0548e9d3976f6b69 + version: 3.0.20 + resolution: "spdx-license-ids@npm:3.0.20" + checksum: 0c57750bedbcff48f3d0e266fbbdaf0aab54217e182f669542ffe0b5a902dce69e8cdfa126a131e1ddd39a9bef4662e357b2b41315d7240b4a28c0a7e782bb40 languageName: node linkType: hard @@ -9679,13 +9262,13 @@ __metadata: linkType: hard "string-width@npm:^7.0.0": - version: 7.1.0 - resolution: "string-width@npm:7.1.0" + version: 7.2.0 + resolution: "string-width@npm:7.2.0" dependencies: emoji-regex: ^10.3.0 get-east-asian-width: ^1.0.0 strip-ansi: ^7.1.0 - checksum: a183573fe7209e0d294f661846d33f8caf72aa86d983e5b48a0ed45ab15bcccb02c6f0344b58b571988871105457137b8207855ea536827dbc4a376a0f31bf8f + checksum: 42f9e82f61314904a81393f6ef75b832c39f39761797250de68c041d8ba4df2ef80db49ab6cd3a292923a6f0f409b8c9980d120f7d32c820b4a8a84a2598a295 languageName: node linkType: hard @@ -9883,7 +9466,7 @@ __metadata: languageName: node linkType: hard -"tar@npm:^6.1.11, tar@npm:^6.1.2": +"tar@npm:^6.1.11, tar@npm:^6.2.1": version: 6.2.1 resolution: "tar@npm:6.2.1" dependencies: @@ -9931,6 +9514,31 @@ __metadata: languageName: node linkType: hard +"tinyexec@npm:^0.3.0": + version: 0.3.1 + resolution: "tinyexec@npm:0.3.1" + checksum: 691b531d464bdc09eeba934e43d8ac2a74c9d22a4bec9cd7f4991375c64e22712f7e5a95ba243a9369a478afd34d41171359012a2248ea49615cd2816ab12959 + languageName: node + linkType: hard + +"tldts-core@npm:^6.1.58": + version: 6.1.58 + resolution: "tldts-core@npm:6.1.58" + checksum: d39a80b483d6d7baa708c59395081162ee32de9e702a0944c18772d7a152f241d448ae2db19640e343496fb980ed2906b18afe4d34c889649dfeb111cc155b93 + languageName: node + linkType: hard + +"tldts@npm:^6.1.32": + version: 6.1.58 + resolution: "tldts@npm:6.1.58" + dependencies: + tldts-core: ^6.1.58 + bin: + tldts: bin/cli.js + checksum: df5ebd112a5ebdfc0ef41df58ddfe1df24dfd9b79697c50f990f8849e87b9c5da8539aae373240b5478e442a490bf9988d27fb3f765577ff3623661344c66a89 + languageName: node + linkType: hard + "tmp@npm:^0.0.33": version: 0.0.33 resolution: "tmp@npm:0.0.33" @@ -9956,13 +9564,6 @@ __metadata: languageName: node linkType: hard -"to-fast-properties@npm:^2.0.0": - version: 2.0.0 - resolution: "to-fast-properties@npm:2.0.0" - checksum: be2de62fe58ead94e3e592680052683b1ec986c72d589e7b21e5697f8744cdbf48c266fa72f6c15932894c10187b5f54573a3bcf7da0bfd964d5caf23d436168 - languageName: node - linkType: hard - "to-regex-range@npm:^5.0.1": version: 5.0.1 resolution: "to-regex-range@npm:5.0.1" @@ -9973,14 +9574,11 @@ __metadata: linkType: hard "tough-cookie@npm:*": - version: 4.1.4 - resolution: "tough-cookie@npm:4.1.4" + version: 5.0.0 + resolution: "tough-cookie@npm:5.0.0" dependencies: - psl: ^1.1.33 - punycode: ^2.1.1 - universalify: ^0.2.0 - url-parse: ^1.5.3 - checksum: 5815059f014c31179a303c673f753f7899a6fce94ac93712c88ea5f3c26e0c042b5f0c7a599a00f8e0feeca4615dba75c3dffc54f3c1a489978aa8205e09307c + tldts: ^6.1.32 + checksum: 774f6c939c96f74b5847361f7e11e0d69383681d21a35a2d37a20956638e614ec521782d2d20bcb32b58638ff337bba87cc72fb72c987bd02ea0fdfc93994cdb languageName: node linkType: hard @@ -10089,10 +9687,10 @@ __metadata: languageName: node linkType: hard -"tslib@npm:2.6.3, tslib@npm:^2.0.0, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.4.1, tslib@npm:^2.5.0, tslib@npm:^2.6.1, tslib@npm:^2.6.2, tslib@npm:~2.6.3": - version: 2.6.3 - resolution: "tslib@npm:2.6.3" - checksum: 74fce0e100f1ebd95b8995fbbd0e6c91bdd8f4c35c00d4da62e285a3363aaa534de40a80db30ecfd388ed7c313c42d930ee0eaf108e8114214b180eec3dbe6f5 +"tslib@npm:2.7.0, tslib@npm:~2.7.0": + version: 2.7.0 + resolution: "tslib@npm:2.7.0" + checksum: 1606d5c89f88d466889def78653f3aab0f88692e80bb2066d090ca6112ae250ec1cfa9dbfaab0d17b60da15a4186e8ec4d893801c67896b277c17374e36e1d28 languageName: node linkType: hard @@ -10103,10 +9701,10 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.7.0": - version: 2.7.0 - resolution: "tslib@npm:2.7.0" - checksum: 1606d5c89f88d466889def78653f3aab0f88692e80bb2066d090ca6112ae250ec1cfa9dbfaab0d17b60da15a4186e8ec4d893801c67896b277c17374e36e1d28 +"tslib@npm:^2.0.0, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.4.1, tslib@npm:^2.5.0, tslib@npm:^2.6.1, tslib@npm:^2.6.2, tslib@npm:^2.7.0, tslib@npm:^2.8.1": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: e4aba30e632b8c8902b47587fd13345e2827fa639e7c3121074d5ee0880723282411a8838f830b55100cbe4517672f84a2472667d355b81e8af165a55dc6203a languageName: node linkType: hard @@ -10126,13 +9724,20 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.8": +"type-detect@npm:4.0.8": version: 4.0.8 resolution: "type-detect@npm:4.0.8" checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 languageName: node linkType: hard +"type-detect@npm:^4.0.0, type-detect@npm:^4.0.8, type-detect@npm:^4.1.0": + version: 4.1.0 + resolution: "type-detect@npm:4.1.0" + checksum: 3b32f873cd02bc7001b00a61502b7ddc4b49278aabe68d652f732e1b5d768c072de0bc734b427abf59d0520a5f19a2e07309ab921ef02018fa1cb4af155cdb37 + languageName: node + linkType: hard + "type-fest@npm:^0.21.3": version: 0.21.3 resolution: "type-fest@npm:0.21.3" @@ -10161,16 +9766,16 @@ __metadata: languageName: node linkType: hard -"typed-rest-client@npm:~2.0.2": - version: 2.0.2 - resolution: "typed-rest-client@npm:2.0.2" +"typed-rest-client@npm:~2.1.0": + version: 2.1.0 + resolution: "typed-rest-client@npm:2.1.0" dependencies: des.js: ^1.1.0 js-md4: ^0.3.2 qs: ^6.10.3 tunnel: 0.0.6 underscore: ^1.12.1 - checksum: f1d9a0ffd5b7266f01df9ea4eb08b8da04793cf6902d82b3c6a46d1328cdefe80bb0cfc8f96afa645077c234ec218d8b16f642da35c1e2f1adf3d61a5904d8d1 + checksum: 0877215291c11ee100620510cf0e25e1c594b8a73722d896fe4f032a18a477b285062627f5536af7695f79c28341af9ac0f192723a7d8d7b3a755925491406cb languageName: node linkType: hard @@ -10184,47 +9789,33 @@ __metadata: linkType: hard "typescript@npm:^5.5.4": - version: 5.5.4 - resolution: "typescript@npm:5.5.4" + version: 5.6.3 + resolution: "typescript@npm:5.6.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: b309040f3a1cd91c68a5a58af6b9fdd4e849b8c42d837b2c2e73f9a4f96a98c4f1ed398a9aab576ee0a4748f5690cf594e6b99dbe61de7839da748c41e6d6ca8 + checksum: ba302f8822777ebefb28b554105f3e074466b671e7444ec6b75dadc008a62f46f373d9e57ceced1c433756d06c8b7dc569a7eefdf3a9573122a49205ff99021a languageName: node linkType: hard "typescript@patch:typescript@^5.5.4#~builtin": - version: 5.5.4 - resolution: "typescript@patch:typescript@npm%3A5.5.4#~builtin::version=5.5.4&hash=5da071" + version: 5.6.3 + resolution: "typescript@patch:typescript@npm%3A5.6.3#~builtin::version=5.6.3&hash=5da071" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: fc52962f31a5bcb716d4213bef516885e4f01f30cea797a831205fc9ef12b405a40561c40eae3127ab85ba1548e7df49df2bcdee6b84a94bfbe3a0d7eff16b14 + checksum: ade87bce2363ee963eed0e4ca8a312ea02c81873ebd53609bc3f6dc0a57f6e61ad7e3fb8cbb7f7ab8b5081cbee801b023f7c4823ee70b1c447eae050e6c7622b languageName: node linkType: hard "underscore@npm:^1.12.1": - version: 1.13.6 - resolution: "underscore@npm:1.13.6" - checksum: d5cedd14a9d0d91dd38c1ce6169e4455bb931f0aaf354108e47bd46d3f2da7464d49b2171a5cf786d61963204a42d01ea1332a903b7342ad428deaafaf70ec36 - languageName: node - linkType: hard - -"undici-types@npm:~5.26.4": - version: 5.26.5 - resolution: "undici-types@npm:5.26.5" - checksum: 3192ef6f3fd5df652f2dc1cd782b49d6ff14dc98e5dced492aa8a8c65425227da5da6aafe22523c67f035a272c599bb89cfe803c1db6311e44bed3042fc25487 - languageName: node - linkType: hard - -"undici-types@npm:~6.13.0": - version: 6.13.0 - resolution: "undici-types@npm:6.13.0" - checksum: 9d0ef6bf58994bebbea6a4ab75f381c69a89a7ed151bfbae0d4ef95450d56502c9eccb323abf17b7d099c1d9c1cbae62e909e4dfeb8d204612d2f1fdada24707 + version: 1.13.7 + resolution: "underscore@npm:1.13.7" + checksum: 174b011af29e4fbe2c70eb2baa8bfab0d0336cf2f5654f364484967bc6264a86224d0134b9176e4235c8cceae00d11839f0fd4824268de04b11c78aca1241684 languageName: node linkType: hard -"undici-types@npm:~6.19.2": +"undici-types@npm:~6.19.8": version: 6.19.8 resolution: "undici-types@npm:6.19.8" checksum: de51f1b447d22571cf155dfe14ff6d12c5bdaec237c765085b439c38ca8518fc360e88c70f99469162bf2e14188a7b0bcb06e1ed2dc031042b984b0bb9544017 @@ -10238,6 +9829,13 @@ __metadata: languageName: node linkType: hard +"unicorn-magic@npm:^0.3.0": + version: 0.3.0 + resolution: "unicorn-magic@npm:0.3.0" + checksum: bdd7d7c522f9456f32a0b77af23f8854f9a7db846088c3868ec213f9550683ab6a2bdf3803577eacbafddb4e06900974385841ccb75338d17346ccef45f9cb01 + languageName: node + linkType: hard + "unique-filename@npm:^3.0.0": version: 3.0.0 resolution: "unique-filename@npm:3.0.0" @@ -10263,13 +9861,6 @@ __metadata: languageName: node linkType: hard -"universalify@npm:^0.2.0": - version: 0.2.0 - resolution: "universalify@npm:0.2.0" - checksum: e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5 - languageName: node - linkType: hard - "universalify@npm:^2.0.0": version: 2.0.1 resolution: "universalify@npm:2.0.1" @@ -10277,31 +9868,17 @@ __metadata: languageName: node linkType: hard -"update-browserslist-db@npm:^1.0.16": - version: 1.0.16 - resolution: "update-browserslist-db@npm:1.0.16" - dependencies: - escalade: ^3.1.2 - picocolors: ^1.0.1 - peerDependencies: - browserslist: ">= 4.21.0" - bin: - update-browserslist-db: cli.js - checksum: 51b1f7189c9ea5925c80154b0a6fd3ec36106d07858d8f69826427d8edb4735d1801512c69eade38ba0814d7407d11f400d74440bbf3da0309f3d788017f35b2 - languageName: node - linkType: hard - -"update-browserslist-db@npm:^1.1.0": - version: 1.1.0 - resolution: "update-browserslist-db@npm:1.1.0" +"update-browserslist-db@npm:^1.1.1": + version: 1.1.1 + resolution: "update-browserslist-db@npm:1.1.1" dependencies: - escalade: ^3.1.2 - picocolors: ^1.0.1 + escalade: ^3.2.0 + picocolors: ^1.1.0 peerDependencies: browserslist: ">= 4.21.0" bin: update-browserslist-db: cli.js - checksum: 7b74694d96f0c360f01b702e72353dc5a49df4fe6663d3ee4e5c628f061576cddf56af35a3a886238c01dd3d8f231b7a86a8ceaa31e7a9220ae31c1c1238e562 + checksum: 2ea11bd2562122162c3e438d83a1f9125238c0844b6d16d366e3276d0c0acac6036822dc7df65fc5a89c699cdf9f174acf439c39bedf3f9a2f3983976e4b4c3e languageName: node linkType: hard @@ -10323,25 +9900,6 @@ __metadata: languageName: node linkType: hard -"uri-js@npm:^4.4.1": - version: 4.4.1 - resolution: "uri-js@npm:4.4.1" - dependencies: - punycode: ^2.1.0 - checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 - languageName: node - linkType: hard - -"url-parse@npm:^1.5.3": - version: 1.5.10 - resolution: "url-parse@npm:1.5.10" - dependencies: - querystringify: ^2.1.1 - requires-port: ^1.0.0 - checksum: fbdba6b1d83336aca2216bbdc38ba658d9cfb8fc7f665eb8b17852de638ff7d1a162c198a8e4ed66001ddbf6c9888d41e4798912c62b4fd777a31657989f7bdf - languageName: node - linkType: hard - "util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" @@ -10366,13 +9924,13 @@ __metadata: linkType: hard "v8-to-istanbul@npm:^9.0.1": - version: 9.2.0 - resolution: "v8-to-istanbul@npm:9.2.0" + version: 9.3.0 + resolution: "v8-to-istanbul@npm:9.3.0" dependencies: "@jridgewell/trace-mapping": ^0.3.12 "@types/istanbul-lib-coverage": ^2.0.1 convert-source-map: ^2.0.0 - checksum: 31ef98c6a31b1dab6be024cf914f235408cd4c0dc56a5c744a5eea1a9e019ba279e1b6f90d695b78c3186feed391ed492380ccf095009e2eb91f3d058f0b4491 + checksum: ded42cd535d92b7fd09a71c4c67fb067487ef5551cc227bfbf2a1f159a842e4e4acddaef20b955789b8d3b455b9779d036853f4a27ce15007f6364a4d30317ae languageName: node linkType: hard @@ -10693,11 +10251,11 @@ __metadata: linkType: hard "yaml@npm:~2.5.0": - version: 2.5.0 - resolution: "yaml@npm:2.5.0" + version: 2.5.1 + resolution: "yaml@npm:2.5.1" bin: yaml: bin.mjs - checksum: a116dca5c61641d9bf1f1016c6e71daeb1ed4915f5930ed237d45ab7a605aa5d92c332ff64879a6cd088cabede008c778774e3060ffeb4cd617d28088e4b2d83 + checksum: 31275223863fbd0b47ba9d2b248fbdf085db8d899e4ca43fff8a3a009497c5741084da6871d11f40e555d61360951c4c910b98216c1325d2c94753c0036d8172 languageName: node linkType: hard @@ -10787,8 +10345,8 @@ __metadata: linkType: hard "yarn-audit-fix@npm:^10.0.9": - version: 10.0.9 - resolution: "yarn-audit-fix@npm:10.0.9" + version: 10.1.0 + resolution: "yarn-audit-fix@npm:10.1.0" dependencies: "@types/fs-extra": ^11.0.4 "@types/lodash-es": ^4.17.12 @@ -10796,7 +10354,7 @@ __metadata: "@types/yarnpkg__lockfile": ^1.1.9 "@yarnpkg/lockfile": ^1.1.0 chalk: ^5.3.0 - commander: ^12.0.0 + commander: ^12.1.0 fast-glob: ^3.3.2 fs-extra: ^11.2.0 js-yaml: ^4.1.0 @@ -10805,7 +10363,7 @@ __metadata: synp: ^1.9.13 bin: yarn-audit-fix: target/esm/cli.mjs - checksum: 2d35a33142269953f737b41382e2df4deb6a85b3215c020ae5f7f5c48000a894803b9e85b26cc9eb6846b22722ac7a133b93dcc8ac6cb784d21615a0171fe3eb + checksum: d61997bfac7a45ceeb83234ef340de28be74ccf64e9314bf46facd8b6fc0da56a7f77b6c526624c2deb906d908c3d237d5c129c1b0345a842904b49d7723163d languageName: node linkType: hard @@ -10835,9 +10393,9 @@ __metadata: linkType: hard "yocto-queue@npm:^1.0.0": - version: 1.0.0 - resolution: "yocto-queue@npm:1.0.0" - checksum: 2cac84540f65c64ccc1683c267edce396b26b1e931aa429660aefac8fbe0188167b7aee815a3c22fa59a28a58d898d1a2b1825048f834d8d629f4c2a5d443801 + version: 1.1.1 + resolution: "yocto-queue@npm:1.1.1" + checksum: f2e05b767ed3141e6372a80af9caa4715d60969227f38b1a4370d60bffe153c9c5b33a862905609afc9b375ec57cd40999810d20e5e10229a204e8bde7ef255c languageName: node linkType: hard @@ -10867,11 +10425,11 @@ __metadata: linkType: hard "zod-validation-error@npm:^3.0.3": - version: 3.3.0 - resolution: "zod-validation-error@npm:3.3.0" + version: 3.4.0 + resolution: "zod-validation-error@npm:3.4.0" peerDependencies: zod: ^3.18.0 - checksum: cbf81ecd27df675d72883b69833565af787302e70ad970ae4a5dab84e1cb8739cedf094b35f7f4b78307adaadb7cab0c0a8f7debeb6516e3fee998a3d4e13422 + checksum: b07fbfc39582dbdf6972f5f5f0c3bac9e6b5e6d2e55ef3dd891fd08f1966ebf1023a4bc270e9b569eaa48ed1684ac2252c9f260b0bd07b167671596e6e4d0fa8 languageName: node linkType: hard From ccc7061b54a1dcb5ec96cff984f759d978ba7b73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Colladon?= Date: Thu, 7 Nov 2024 22:07:54 +0100 Subject: [PATCH 03/17] test: adapt test to the new dependency --- __tests__/unit/lib/adapter/GitAdapter.test.ts | 798 +++--------------- __tests__/unit/lib/utils/cliHelper.test.ts | 12 +- src/adapter/GitAdapter.ts | 28 +- 3 files changed, 135 insertions(+), 703 deletions(-) diff --git a/__tests__/unit/lib/adapter/GitAdapter.test.ts b/__tests__/unit/lib/adapter/GitAdapter.test.ts index dd92a1560..04a6da05f 100644 --- a/__tests__/unit/lib/adapter/GitAdapter.test.ts +++ b/__tests__/unit/lib/adapter/GitAdapter.test.ts @@ -1,14 +1,9 @@ 'use strict' import { describe, expect, it, jest } from '@jest/globals' import { readFile } from 'fs-extra' -import { WalkerEntry, WalkerIterateCallback } from 'isomorphic-git' - -import GitAdapter, { - contentWalker, - diffLineWalker, - filePathWalker, - iterate, -} from '../../../../src/adapter/GitAdapter' + +import GitAdapter from '../../../../src/adapter/GitAdapter' +import { IGNORE_WHITESPACE_PARAMS } from '../../../../src/constant/gitConstants' import type { Config } from '../../../../src/types/config' import { getLFSObjectContentPath, @@ -16,47 +11,21 @@ import { } from '../../../../src/utils/gitLfsHelper' import { getWork } from '../../../__utils__/globalTestHelper' -const mockedDirExists = jest.fn() -const mockedFileExists = jest.fn() const mockedRaw = jest.fn() -const mockedSetConfig = jest.fn() +const mockedAddConfig = jest.fn() const mockedRevParse = jest.fn() -const mockedReadObject = jest.fn() -const mockedReadBlob = jest.fn() -const mockedWalk = jest.fn() +const mockedCatFile = jest.fn() jest.mock('simple-git', () => { return { simpleGit: jest.fn(() => ({ raw: mockedRaw, revparse: mockedRevParse, + addConfig: mockedAddConfig, + catFile: mockedCatFile, })), } }) -jest.mock('isomorphic-git', () => ({ - setConfig: function () { - return mockedSetConfig(...arguments) - }, - readObject: function () { - return mockedReadObject(...arguments) - }, - readBlob: function () { - return mockedReadBlob(...arguments) - }, - walk: function () { - return mockedWalk(...arguments) - }, - TREE: jest.fn(), -})) -jest.mock('../../../../src/utils/fsUtils', () => { - const actualModule: any = jest.requireActual('../../../../src/utils/fsUtils') - - return { - ...actualModule, - dirExists: () => mockedDirExists(), - fileExists: () => mockedFileExists(), - } -}) jest.mock('../../../../src/utils/gitLfsHelper') jest.mock('fs-extra') @@ -107,80 +76,6 @@ describe('GitAdapter', () => { }) }) - describe('setGitDir', () => { - it('should set gitdir with git repository', async () => { - // Arrange - mockedDirExists.mockImplementation(() => Promise.resolve(true)) - mockedFileExists.mockImplementation(() => Promise.resolve(false)) - const gitAdapter = GitAdapter.getInstance({ - ...config, - repo: 'repository', - }) - - // Act - await gitAdapter.setGitDir() - - // Assert - expect(mockedDirExists).toBeCalledTimes(1) - expect(mockedFileExists).not.toBeCalled() - }) - - it('should set gitdir with submodules', async () => { - // Arrange - mockedDirExists.mockImplementation(() => Promise.resolve(false)) - mockedFileExists.mockImplementation(() => Promise.resolve(true)) - readFileMocked.mockResolvedValue(Buffer.from('content') as never) - const gitAdapter = GitAdapter.getInstance({ - ...config, - repo: 'submodule', - }) - - // Act - await gitAdapter.setGitDir() - - // Assert - expect(mockedDirExists).toBeCalledTimes(1) - expect(mockedFileExists).toBeCalledTimes(1) - }) - - it('should throw when no git material is found', async () => { - // Arrange - expect.assertions(1) - mockedDirExists.mockImplementation(() => Promise.resolve(false)) - mockedFileExists.mockImplementation(() => Promise.resolve(false)) - const gitAdapter = GitAdapter.getInstance({ - ...config, - repo: 'not git material', - }) - - // Act - try { - await gitAdapter.setGitDir() - } catch (error) { - // Assert - expect(error).toBeDefined() - } - }) - - it('should set gitdir once', async () => { - // Arrange - mockedDirExists.mockImplementation(() => Promise.resolve(true)) - mockedFileExists.mockImplementation(() => Promise.resolve(false)) - const gitAdapter = GitAdapter.getInstance({ - ...config, - repo: 'repository', - }) - await gitAdapter.setGitDir() - - // Act - await gitAdapter.setGitDir() - - // Assert - expect(mockedDirExists).toBeCalledTimes(1) - expect(mockedFileExists).not.toBeCalled() - }) - }) - describe('configureRepository', () => { it('should call setConfig', async () => { // Arrange @@ -190,14 +85,8 @@ describe('GitAdapter', () => { await gitAdapter.configureRepository() // Assert - expect(mockedSetConfig).toBeCalledTimes(1) - expect(mockedSetConfig).toBeCalledWith( - expect.objectContaining({ - dir: config.repo, - path: 'core.quotepath', - value: 'off', - }) - ) + expect(mockedAddConfig).toBeCalledTimes(1) + expect(mockedAddConfig).toBeCalledWith('core.quotepath', 'off') }) }) @@ -219,68 +108,50 @@ describe('GitAdapter', () => { }) describe('pathExists', () => { - describe('when readObject returns a type', () => { + describe('when catFile returns a type', () => { it.each(['tree', 'blob'])('returns true when type is %s', async type => { // Arrange const gitAdapter = GitAdapter.getInstance(config) - mockedReadObject.mockImplementation(() => Promise.resolve({ type })) + mockedCatFile.mockResolvedValue(type as never) // Act const result = await gitAdapter.pathExists('path') // Assert expect(result).toBe(true) - expect(mockedReadObject).toBeCalledTimes(1) - expect(mockedReadObject).toBeCalledWith( - expect.objectContaining({ - dir: config.repo, - oid: config.to, - filepath: 'path', - }) - ) + expect(mockedCatFile).toBeCalledTimes(1) + expect(mockedCatFile).toBeCalledWith(['-t', `${config.to}:path`]) }) it.each(['test', 'other', null, undefined, -1])( 'returns false when type is not "blob" nor "tree"', async type => { // Arrange const gitAdapter = GitAdapter.getInstance(config) - mockedReadObject.mockImplementation(() => Promise.resolve({ type })) + mockedCatFile.mockImplementation(() => Promise.resolve({ type })) // Act const result = await gitAdapter.pathExists('path') // Assert expect(result).toBe(false) - expect(mockedReadObject).toBeCalledTimes(1) - expect(mockedReadObject).toBeCalledWith( - expect.objectContaining({ - dir: config.repo, - oid: config.to, - filepath: 'path', - }) - ) + expect(mockedCatFile).toBeCalledTimes(1) + expect(mockedCatFile).toBeCalledWith(['-t', `${config.to}:path`]) } ) }) - describe('when readObject throws', () => { + describe('when catFile throws', () => { it('returns false', async () => { // Arrange const gitAdapter = GitAdapter.getInstance(config) - mockedReadObject.mockImplementation(() => Promise.reject()) + mockedCatFile.mockImplementation(() => Promise.reject()) // Act const result = await gitAdapter.pathExists('path') // Assert expect(result).toBe(false) - expect(mockedReadObject).toBeCalledTimes(1) - expect(mockedReadObject).toBeCalledWith( - expect.objectContaining({ - dir: config.repo, - oid: config.to, - filepath: 'path', - }) - ) + expect(mockedCatFile).toBeCalledTimes(1) + expect(mockedCatFile).toBeCalledWith(['-t', `${config.to}:path`]) }) }) }) @@ -302,17 +173,15 @@ describe('GitAdapter', () => { }) describe('getStringContent', () => { - describe('when readBlob returns a blob', () => { - describe('when blob references a LFS file', () => { + describe('when catFile returns a string', () => { + describe('when string references a LFS file', () => { it('returns content from LFS', async () => { // Arrange const gitAdapter = GitAdapter.getInstance(config) - mockedReadBlob.mockImplementation(() => - Promise.resolve({ blob: Buffer.from('test') }) - ) + mockedCatFile.mockImplementation(() => Promise.resolve('lfs content')) isLFSmocked.mockReturnValueOnce(true) getLFSObjectContentPathMocked.mockReturnValueOnce('lfs/path') - readFileMocked.mockResolvedValue(null as never) + readFileMocked.mockResolvedValue(Buffer.from('') as never) // Act const result = await gitAdapter.getStringContent({ path: '', @@ -321,23 +190,15 @@ describe('GitAdapter', () => { // Assert expect(result).toBe('') - expect(mockedReadBlob).toBeCalledWith( - expect.objectContaining({ - dir: config.repo, - oid: config.to, - filepath: '', - }) - ) + expect(mockedCatFile).toBeCalledWith(['blob', `${config.to}:`]) }) }) - describe('when blob does not reference a LFS file', () => { - it('return blob as a string', async () => { + describe('when string does not reference a LFS file', () => { + it('return the content', async () => { // Arrange const expected = 'test' const gitAdapter = GitAdapter.getInstance(config) - mockedReadBlob.mockImplementation(() => - Promise.resolve({ blob: Buffer.from(expected) }) - ) + mockedCatFile.mockImplementation(() => Promise.resolve(expected)) isLFSmocked.mockReturnValueOnce(false) // Act const result = await gitAdapter.getStringContent({ @@ -347,74 +208,34 @@ describe('GitAdapter', () => { // Assert expect(result).toBe(expected) - expect(mockedReadBlob).toBeCalledWith( - expect.objectContaining({ - dir: config.repo, - oid: config.to, - filepath: '', - }) - ) + expect(mockedCatFile).toBeCalledWith(['blob', `${config.to}:`]) }) }) }) - describe('when readBlob throws exception', () => { - describe('when error name is NotFoundError', () => { - it('returns empty content', async () => { - // Arrange - const gitAdapter = GitAdapter.getInstance(config) - mockedReadBlob.mockImplementation(() => { - const error = new Error() - error.name = 'NotFoundError' - return Promise.reject(error) - }) - // Act - const result = await gitAdapter.getStringContent({ + describe('when catFile throws exception', () => { + it('throws the exception', async () => { + // Arrange + expect.assertions(1) + const gitAdapter = GitAdapter.getInstance(config) + mockedCatFile.mockImplementation(() => + Promise.reject(new Error('test')) + ) + // Act + try { + await gitAdapter.getStringContent({ path: '', oid: config.to, }) - + } catch { // Assert - expect(result).toBe('') - expect(mockedReadBlob).toBeCalledWith( - expect.objectContaining({ - dir: config.repo, - oid: config.to, - filepath: '', - }) - ) - }) - }) - describe('when error name is not NotFoundError', () => { - it('throws the exception', async () => { - // Arrange - expect.assertions(1) - const gitAdapter = GitAdapter.getInstance(config) - mockedReadBlob.mockImplementation(() => - Promise.reject(new Error('test')) - ) - // Act - try { - await gitAdapter.getStringContent({ - path: '', - oid: config.to, - }) - } catch { - // Assert - expect(mockedReadBlob).toBeCalledWith( - expect.objectContaining({ - dir: config.repo, - oid: config.to, - filepath: '', - }) - ) - } - }) + expect(mockedCatFile).toBeCalledWith(['blob', `${config.to}:`]) + } }) }) }) describe('getFilesPath', () => { - it('calls walk', async () => { + it('calls raw', async () => { // Arrange const gitAdapter = GitAdapter.getInstance(config) @@ -422,517 +243,118 @@ describe('GitAdapter', () => { await gitAdapter.getFilesPath(config.source) // Assert - expect(mockedWalk).toBeCalled() + expect(mockedRaw).toBeCalledWith([ + 'ls-tree', + '--name-only', + '-r', + config.to, + config.source, + ]) }) }) describe('getFilesFrom', () => { - describe('when path is a directory', () => { - it('returns the list of files under this directory', async () => { - // Arrange - const content = 'content' - const path = 'relative/path' - const gitAdapter = GitAdapter.getInstance(config) - mockedReadObject.mockImplementation(() => - Promise.resolve({ type: 'tree' }) - ) - mockedWalk.mockImplementation(() => - Promise.resolve([ - { - path, - content: new TextEncoder().encode(content), - }, - ]) - ) + it('returns the list of files', async () => { + // Arrange + const content = 'content' + const gitAdapter = GitAdapter.getInstance(config) + mockedRaw.mockImplementation(() => + Promise.resolve(['file', 'anotherFile'].join('\n')) + ) + mockedCatFile.mockResolvedValue(content as never) - // Act - const result = await gitAdapter.getFilesFrom('directory/path') + // Act + const result = await gitAdapter.getFilesFrom('directory/path') - // Assert + // Assert - expect(result).toEqual( - expect.arrayContaining([{ path, content: Buffer.from(content) }]) - ) - }) + expect(result).toEqual( + expect.arrayContaining([ + { path: 'file', content: Buffer.from(content) }, + ]) + ) }) - describe('when path is a file', () => { - it('returns the file content', async () => { + + describe('when files are LFS', () => { + it('returns the list of files', async () => { // Arrange const content = 'content' - const path = 'file/path' const gitAdapter = GitAdapter.getInstance(config) - mockedReadObject.mockImplementation(() => - Promise.resolve({ - type: 'blob', - object: new TextEncoder().encode(content), - }) + mockedRaw.mockImplementation(() => + Promise.resolve(['file', 'anotherFile'].join('\n')) ) + mockedCatFile.mockResolvedValue(Buffer.from(content) as never) // Act - const result = await gitAdapter.getFilesFrom('file/path') + const result = await gitAdapter.getFilesFrom('directory/path') // Assert expect(result).toEqual( - expect.arrayContaining([{ path, content: Buffer.from(content) }]) + expect.arrayContaining([ + { path: 'file', content: Buffer.from(content) }, + ]) ) }) }) + describe('when path is not a directory nor a file', () => { - it('throw an exception', async () => { + it('returns empty list', async () => { // Arrange - expect.assertions(1) const gitAdapter = GitAdapter.getInstance(config) - mockedReadObject.mockImplementation(() => Promise.resolve({})) + mockedRaw.mockResolvedValue('' as never) // Act - try { - await gitAdapter.getFilesFrom('wrong/path') - } catch (error) { - // Assert - const err = error as Error - expect(err.message).toBe( - `Path wrong/path does not exist in ${config.to}` - ) - } + + const result = await gitAdapter.getFilesFrom('wrong/path') + expect(result).toEqual([]) }) }) }) describe('getDiffLines', () => { - it('calls walk', async () => { + it('calls diff numstats', async () => { // Arrange const gitAdapter = GitAdapter.getInstance(config) + mockedRaw.mockResolvedValue( + `1\t11\ttest\n1\t11\tfile\n1\t1\tanotherfile` as never + ) // Act - await gitAdapter.getDiffLines() + const result = await gitAdapter.getDiffLines() // Assert - expect(mockedWalk).toBeCalled() + expect(result.length).toBe(9) + expect(mockedRaw).toBeCalledTimes(3) + expect(mockedRaw).toBeCalledWith( + expect.arrayContaining(['diff', '--numstat', '--no-renames']) + ) }) - }) - describe('filePathWalker', () => { - describe('when filepath should be ignored', () => { - describe('when filepath is "."', () => { - it('returns undefined', async () => { - // Arrange - - // Act - const result = await filePathWalker('')('.', [null]) - - // Assert - expect(result).toBe(undefined) - }) - }) - - describe('when filepath is not subfolder of path', () => { - it('returns undefined', async () => { - // Arrange - - // Act - const result = await filePathWalker('dir')('another-dir/file', [null]) - - // Assert - expect(result).toBe(undefined) - }) - }) - - describe('when type is not blob', () => { - it('returns undefined', async () => { - // Arrange - const entry = { - type: jest.fn(() => Promise.resolve('not-blob')), - } as unknown as WalkerEntry - - // Act - const result = await filePathWalker('dir')('dir/file', [entry]) - - // Assert - expect(result).toBe(undefined) - }) - }) - }) - describe('when path is afile', () => { - it('returns the normalized file path ', async () => { + describe('when called with ignore white space', () => { + it('add ignore white space params', async () => { // Arrange - const entry = { - type: jest.fn(() => Promise.resolve('blob')), - } as unknown as WalkerEntry - - // Act - const result = await filePathWalker('dir')('dir/file', [entry]) - - // Assert - expect(result).toBe('dir/file') - }) - }) - }) - - describe('diffLineWalker', () => { - describe('when filepath should be ignored', () => { - describe('when filepath is "."', () => { - it('returns undefined', async () => { - // Arrange - - // Act - const result = await diffLineWalker(config)('.', [null]) - - // Assert - expect(result).toBe(undefined) - }) - }) - - describe(`when filepath does not start with "config.source"`, () => { - it.each(['not-force-app', 'force-app-extended'])( - 'returns undefined', - async root => { - // Arrange - - // Act - const result = await diffLineWalker({ - ...config, - source: 'force-app', - })(`${root}/test.file`, [null]) - - // Assert - expect(result).toBe(undefined) - } + config.ignoreWhitespace = true + const gitAdapter = GitAdapter.getInstance(config) + mockedRaw.mockResolvedValue( + `1\t11\ttest\n1\t11\tfile\n1\t1\tanotherfile` as never ) - }) - - describe('when first version of the file is not a blob', () => { - it('returns undefined', async () => { - // Arrange - const entry = { - type: jest.fn(() => Promise.resolve('not-blob')), - } as unknown as WalkerEntry - - // Act - const result = await diffLineWalker(config)('file/path', [entry]) - - // Assert - expect(result).toBe(undefined) - }) - }) - - describe('when second version of the file is not a blob', () => { - it('returns undefined', async () => { - // Arrange - const firstEntry = { - type: jest.fn(() => Promise.resolve('blob')), - } as unknown as WalkerEntry - const secondEntry = { - type: jest.fn(() => Promise.resolve('not-blob')), - } as unknown as WalkerEntry - - // Act - const result = await diffLineWalker(config)('file/path', [ - firstEntry, - secondEntry, - ]) - - // Assert - expect(result).toBe(undefined) - }) - }) - - describe('when both oid are equals', () => { - it('returns undefined', async () => { - // Arrange - const firstEntry = { - type: jest.fn(() => Promise.resolve('blob')), - oid: jest.fn(() => 10), - } as unknown as WalkerEntry - const secondEntry = { - type: jest.fn(() => Promise.resolve('blob')), - oid: jest.fn(() => 10), - } as unknown as WalkerEntry - - // Act - const result = await diffLineWalker(config)('file/path', [ - firstEntry, - secondEntry, - ]) - - // Assert - expect(result).toBe(undefined) - }) - }) - }) - - describe('when filepath should be treated', () => { - describe(`when "config.source" is '.'`, () => { - it('returns the normalized path', async () => { - // Arrange - const firstEntry = { - type: jest.fn(() => Promise.resolve('blob')), - oid: jest.fn(() => undefined), - } as unknown as WalkerEntry - const secondEntry = { - type: jest.fn(() => Promise.resolve('blob')), - oid: jest.fn(() => 10), - } as unknown as WalkerEntry - - // Act - const result = await diffLineWalker({ - ...config, - source: '.', - })('force-app/test.file', [firstEntry, secondEntry]) - - // Assert - expect(result).toBe('A\tforce-app/test.file') - }) - }) - - describe(`when filepath starts with "config.source"`, () => { - it('returns the normalized path', async () => { - // Arrange - const firstEntry = { - type: jest.fn(() => Promise.resolve('blob')), - oid: jest.fn(() => undefined), - } as unknown as WalkerEntry - const secondEntry = { - type: jest.fn(() => Promise.resolve('blob')), - oid: jest.fn(() => 10), - } as unknown as WalkerEntry - - // Act - const result = await diffLineWalker({ - ...config, - source: 'force-app', - })('force-app/test.file', [firstEntry, secondEntry]) - - // Assert - expect(result).toBe('A\tforce-app/test.file') - }) - }) - describe('when file is added', () => { - it('returns the addition type and normalized path', async () => { - // Arrange - const firstEntry = { - type: jest.fn(() => Promise.resolve('blob')), - oid: jest.fn(() => undefined), - } as unknown as WalkerEntry - const secondEntry = { - type: jest.fn(() => Promise.resolve('blob')), - oid: jest.fn(() => 10), - } as unknown as WalkerEntry - - // Act - const result = await diffLineWalker(config)('file/path', [ - firstEntry, - secondEntry, - ]) - - // Assert - expect(result).toBe('A\tfile/path') - }) - }) - describe('when file is deleted', () => { - it('returns the deletion type and normalized path', async () => { - // Arrange - const firstEntry = { - type: jest.fn(() => Promise.resolve('blob')), - oid: jest.fn(() => 10), - } as unknown as WalkerEntry - const secondEntry = { - type: jest.fn(() => Promise.resolve('blob')), - oid: jest.fn(() => undefined), - } as unknown as WalkerEntry - - // Act - const result = await diffLineWalker(config)('file/path', [ - firstEntry, - secondEntry, - ]) - - // Assert - expect(result).toBe('D\tfile/path') - }) - }) - describe('when file is modified', () => { - it('returns the modification type and normalized path', async () => { - // Arrange - const firstEntry = { - type: jest.fn(() => Promise.resolve('blob')), - oid: jest.fn(() => 10), - } as unknown as WalkerEntry - const secondEntry = { - type: jest.fn(() => Promise.resolve('blob')), - oid: jest.fn(() => 11), - } as unknown as WalkerEntry - - // Act - const result = await diffLineWalker(config)('file/path', [ - firstEntry, - secondEntry, - ]) - - // Assert - expect(result).toBe('M\tfile/path') - }) - - describe('when whitespace should be ignored', () => { - describe('when files contains only whitespace differences', () => { - it('returns undefined', async () => { - // Arrange - const firstEntry = { - type: jest.fn(() => Promise.resolve('blob')), - oid: jest.fn(() => 10), - content: jest.fn(() => - Promise.resolve(Buffer.from(' \t\n')) - ), - } as unknown as WalkerEntry - const secondEntry = { - type: jest.fn(() => Promise.resolve('blob')), - oid: jest.fn(() => 11), - content: jest.fn(() => - Promise.resolve(Buffer.from(' \t\n \t\n')) - ), - } as unknown as WalkerEntry - - // Act - const result = await diffLineWalker({ - ...config, - ignoreWhitespace: true, - })('file/path', [firstEntry, secondEntry]) - - // Assert - expect(result).toBe(undefined) - }) - }) - describe('when files contains whitespace and non whitespace differences', () => { - it('returns the modification type and normalized path', async () => { - // Arrange - const firstEntry = { - type: jest.fn(() => Promise.resolve('blob')), - oid: jest.fn(() => 10), - content: jest.fn(() => - Promise.resolve(Buffer.from(' \t\n')) - ), - } as unknown as WalkerEntry - const secondEntry = { - type: jest.fn(() => Promise.resolve('blob')), - oid: jest.fn(() => 11), - content: jest.fn(() => - Promise.resolve( - Buffer.from(' \t\ninformation \t\n') - ) - ), - } as unknown as WalkerEntry - - // Act - const result = await diffLineWalker({ - ...config, - ignoreWhitespace: true, - })('file/path', [firstEntry, secondEntry]) - - // Assert - expect(result).toBe('M\tfile/path') - }) - }) - }) - }) - }) - }) - - describe('contentWalker', () => { - describe('when filepath should be ignored', () => { - describe('when filepath is "."', () => { - it('returns undefined', async () => { - // Arrange - - // Act - const result = await contentWalker('')('.', [null]) - - // Assert - expect(result).toBe(undefined) - }) - }) - - describe('when filepath is not subfolder of path', () => { - it('returns undefined', async () => { - // Arrange - - // Act - const result = await contentWalker('dir')('another-dir/file', [null]) - - // Assert - expect(result).toBe(undefined) - }) - }) - - describe('when type is not blob', () => { - it('returns undefined', async () => { - // Arrange - const entry = { - type: jest.fn(() => Promise.resolve('not-blob')), - } as unknown as WalkerEntry - - // Act - const result = await contentWalker('dir')('dir/file', [entry]) - - // Assert - expect(result).toBe(undefined) - }) - }) - }) - describe('when path is afile', () => { - it('returns the normalized file path ', async () => { - // Arrange - const content = new TextEncoder().encode('content') - const entry = { - type: jest.fn(() => Promise.resolve('blob')), - content: jest.fn(() => Promise.resolve(content)), - } as unknown as WalkerEntry // Act - const result = await contentWalker('dir')('dir/file', [entry]) + const result = await gitAdapter.getDiffLines() // Assert - expect(result).toStrictEqual({ - path: 'dir/file', - content, - }) + expect(result.length).toBe(9) + expect(mockedRaw).toBeCalledTimes(3) + expect(mockedRaw).toBeCalledWith( + expect.arrayContaining([ + 'diff', + '--numstat', + '--no-renames', + ...IGNORE_WHITESPACE_PARAMS, + ]) + ) }) }) }) - - describe('iterate', () => { - it('call walk on every children', async () => { - // Arrange - const children = [ - Array.from( - { length: 2 }, - (_, index) => ({ type: 'blob', oid: index }) as unknown as WalkerEntry - ), - ] - const walkMock = jest.fn() - - // Act - const iterable: IterableIterator> = - children[Symbol.iterator]() - const result = await iterate(walkMock, iterable) - - // Assert - expect(result.length).toBe(children.length) - expect(walkMock).toBeCalledTimes(children.length) - }) - - it('do not walk without children', async () => { - // Arrange - const children = [] as Array - const walkMock = jest.fn() - - // Act - const iterable: IterableIterator> = - children[Symbol.iterator]() - const result = await iterate(walkMock, iterable) - - // Assert - expect(result.length).toBe(0) - expect(walkMock).not.toBeCalled() - }) - }) }) diff --git a/__tests__/unit/lib/utils/cliHelper.test.ts b/__tests__/unit/lib/utils/cliHelper.test.ts index bdc45daf2..3b9f21ac9 100644 --- a/__tests__/unit/lib/utils/cliHelper.test.ts +++ b/__tests__/unit/lib/utils/cliHelper.test.ts @@ -10,6 +10,7 @@ import CLIHelper from '../../../../src/utils/cliHelper' import { dirExists, fileExists, + pathExists, readFile, sanitizePath, } from '../../../../src/utils/fsUtils' @@ -17,16 +18,15 @@ import { getWork } from '../../../__utils__/globalTestHelper' const mockParseRev = jest.fn() const mockConfigureRepository = jest.fn() -const setGitDirMock = jest.fn() jest.mock('../../../../src/adapter/GitAdapter', () => ({ getInstance: () => ({ parseRev: mockParseRev, configureRepository: mockConfigureRepository, - setGitDir: setGitDirMock, }), })) jest.mock('../../../../src/utils/fsUtils') +const mockedPathExists = jest.mocked(pathExists) const mockedReadFile = jest.mocked(readFile) const mockedSanitizePath = jest.mocked(sanitizePath) const mockedDirExists = jest.mocked(dirExists) @@ -43,7 +43,7 @@ describe(`test if the application`, () => { work.config.apiVersion = 46 mockedFileExists.mockImplementation(() => Promise.resolve(true)) mockedDirExists.mockImplementation(() => Promise.resolve(true)) - setGitDirMock.mockImplementation(() => Promise.resolve(true)) + mockedPathExists.mockResolvedValue(true as never) mockParseRev.mockImplementation(() => Promise.resolve('ref')) }) @@ -65,8 +65,8 @@ describe(`test if the application`, () => { expect(1).toBe(1) }) - it('throws errors when repo is not a git repository', async () => { - setGitDirMock.mockImplementationOnce(() => Promise.reject(new Error())) + it('add errors when repo is not a git repository', async () => { + mockedPathExists.mockResolvedValue(false as never) const cliHelper = new CLIHelper({ ...work, config: { @@ -415,7 +415,6 @@ describe(`test if the application`, () => { it('do not throw errors when repo contains submodule git file', async () => { expect.assertions(1) - setGitDirMock.mockImplementationOnce(() => Promise.resolve(true)) const cliHelper = new CLIHelper({ ...work, config: { @@ -430,7 +429,6 @@ describe(`test if the application`, () => { it('do not throw errors when repo submodule git folder', async () => { expect.assertions(1) - setGitDirMock.mockImplementationOnce(() => Promise.resolve(true)) const cliHelper = new CLIHelper({ ...work, config: { diff --git a/src/adapter/GitAdapter.ts b/src/adapter/GitAdapter.ts index 154448bc3..1a8cc6048 100644 --- a/src/adapter/GitAdapter.ts +++ b/src/adapter/GitAdapter.ts @@ -67,20 +67,32 @@ export default class GitAdapter { return await this.simpleGit.raw(firstCommitParams) } + protected async getRefContent(forRef: FileGitRef): Promise { + const content = await this.simpleGit.catFile([BLOB_TYPE, revPath(forRef)]) + + if (isLFS(content)) { + const lsfPath = getLFSObjectContentPath(content) + const bufferContent = await readFile(join(this.config.repo, lsfPath)) + return bufferContent + } + return content + } + protected async getBufferContent(forRef: FileGitRef): Promise { - const content = await this.getStringContent(forRef) - return Buffer.from(content) + const content = await this.getRefContent(forRef) + + if (!Buffer.isBuffer(content)) { + return Buffer.from(content, UTF8_ENCODING) + } + return content as Buffer } public async getStringContent(forRef: FileGitRef): Promise { - let content = await this.simpleGit.catFile([BLOB_TYPE, revPath(forRef)]) + const content = await this.getRefContent(forRef) - if (isLFS(content)) { - const lsfPath = getLFSObjectContentPath(content) - const bufferData = await readFile(join(this.config.repo, lsfPath)) - content = bufferData?.toString(UTF8_ENCODING) ?? '' + if (Buffer.isBuffer(content)) { + return content.toString(UTF8_ENCODING) } - return content } From cf6261d24e12db7e3891ec12461f5e8bb4bfabfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Colladon?= Date: Thu, 7 Nov 2024 22:35:00 +0100 Subject: [PATCH 04/17] fix: binary file handling --- __tests__/unit/lib/adapter/GitAdapter.test.ts | 18 ++++++++----- __tests__/unit/lib/utils/gitLfsHelper.test.ts | 6 +++-- src/adapter/GitAdapter.ts | 26 +++++-------------- 3 files changed, 21 insertions(+), 29 deletions(-) diff --git a/__tests__/unit/lib/adapter/GitAdapter.test.ts b/__tests__/unit/lib/adapter/GitAdapter.test.ts index 04a6da05f..0ac100c83 100644 --- a/__tests__/unit/lib/adapter/GitAdapter.test.ts +++ b/__tests__/unit/lib/adapter/GitAdapter.test.ts @@ -15,6 +15,7 @@ const mockedRaw = jest.fn() const mockedAddConfig = jest.fn() const mockedRevParse = jest.fn() const mockedCatFile = jest.fn() +const mockedShowBuffer = jest.fn() jest.mock('simple-git', () => { return { @@ -23,6 +24,7 @@ jest.mock('simple-git', () => { revparse: mockedRevParse, addConfig: mockedAddConfig, catFile: mockedCatFile, + showBuffer: mockedShowBuffer, })), } }) @@ -178,7 +180,9 @@ describe('GitAdapter', () => { it('returns content from LFS', async () => { // Arrange const gitAdapter = GitAdapter.getInstance(config) - mockedCatFile.mockImplementation(() => Promise.resolve('lfs content')) + mockedShowBuffer.mockImplementation(() => + Promise.resolve('lfs content') + ) isLFSmocked.mockReturnValueOnce(true) getLFSObjectContentPathMocked.mockReturnValueOnce('lfs/path') readFileMocked.mockResolvedValue(Buffer.from('') as never) @@ -190,7 +194,7 @@ describe('GitAdapter', () => { // Assert expect(result).toBe('') - expect(mockedCatFile).toBeCalledWith(['blob', `${config.to}:`]) + expect(mockedShowBuffer).toBeCalledWith(`${config.to}:`) }) }) describe('when string does not reference a LFS file', () => { @@ -198,7 +202,7 @@ describe('GitAdapter', () => { // Arrange const expected = 'test' const gitAdapter = GitAdapter.getInstance(config) - mockedCatFile.mockImplementation(() => Promise.resolve(expected)) + mockedShowBuffer.mockImplementation(() => Promise.resolve(expected)) isLFSmocked.mockReturnValueOnce(false) // Act const result = await gitAdapter.getStringContent({ @@ -208,7 +212,7 @@ describe('GitAdapter', () => { // Assert expect(result).toBe(expected) - expect(mockedCatFile).toBeCalledWith(['blob', `${config.to}:`]) + expect(mockedShowBuffer).toBeCalledWith(`${config.to}:`) }) }) }) @@ -217,7 +221,7 @@ describe('GitAdapter', () => { // Arrange expect.assertions(1) const gitAdapter = GitAdapter.getInstance(config) - mockedCatFile.mockImplementation(() => + mockedShowBuffer.mockImplementation(() => Promise.reject(new Error('test')) ) // Act @@ -228,7 +232,7 @@ describe('GitAdapter', () => { }) } catch { // Assert - expect(mockedCatFile).toBeCalledWith(['blob', `${config.to}:`]) + expect(mockedShowBuffer).toBeCalledWith(`${config.to}:`) } }) }) @@ -261,7 +265,7 @@ describe('GitAdapter', () => { mockedRaw.mockImplementation(() => Promise.resolve(['file', 'anotherFile'].join('\n')) ) - mockedCatFile.mockResolvedValue(content as never) + mockedShowBuffer.mockResolvedValue(Buffer.from(content) as never) // Act const result = await gitAdapter.getFilesFrom('directory/path') diff --git a/__tests__/unit/lib/utils/gitLfsHelper.test.ts b/__tests__/unit/lib/utils/gitLfsHelper.test.ts index cf2888ad2..6c6603dbd 100644 --- a/__tests__/unit/lib/utils/gitLfsHelper.test.ts +++ b/__tests__/unit/lib/utils/gitLfsHelper.test.ts @@ -9,7 +9,8 @@ import { describe('isLFS', () => { it('returns true when called with LFS file', async () => { // Arrange - const lfsFileContent = Buffer.from(`version https://git-lfs.github.com/spec/v1 + const lfsFileContent = + Buffer.from(`version https://git-lfs.github.com/spec/v1 oid sha256:0a4ca7e5eca75024197fff96ef7e5de1b2ca35d6c058ce76e7e0d84bee1c8b14 size 72`) @@ -34,7 +35,8 @@ describe('isLFS', () => { describe('getLFSObjectContentPath', () => { it('with LFS content, it creates LFS file path', async () => { // Arrange - const lfsFileContent = Buffer.from(`version https://git-lfs.github.com/spec/v1 + const lfsFileContent = + Buffer.from(`version https://git-lfs.github.com/spec/v1 oid sha256:0a4ca7e5eca75024197fff96ef7e5de1b2ca35d6c058ce76e7e0d84bee1c8b14 size 72`) diff --git a/src/adapter/GitAdapter.ts b/src/adapter/GitAdapter.ts index 1a8cc6048..9b31e0962 100644 --- a/src/adapter/GitAdapter.ts +++ b/src/adapter/GitAdapter.ts @@ -19,7 +19,7 @@ import { getLFSObjectContentPath, isLFS } from '../utils/gitLfsHelper' const firstCommitParams = ['rev-list', '--max-parents=0', 'HEAD'] const BLOB_TYPE = 'blob' const TREE_TYPE = 'tree' -const NUM_STAT_REGEX = /^\d+\t\d+\t/ +const NUM_STAT_REGEX = /^((\d+|\-)\t){2}/ const EOL = '\n' const revPath = (pathDef: FileGitRef) => @@ -67,33 +67,19 @@ export default class GitAdapter { return await this.simpleGit.raw(firstCommitParams) } - protected async getRefContent(forRef: FileGitRef): Promise { - const content = await this.simpleGit.catFile([BLOB_TYPE, revPath(forRef)]) + protected async getBufferContent(forRef: FileGitRef): Promise { + let content: Buffer = await this.simpleGit.showBuffer(revPath(forRef)) if (isLFS(content)) { const lsfPath = getLFSObjectContentPath(content) - const bufferContent = await readFile(join(this.config.repo, lsfPath)) - return bufferContent + content = await readFile(join(this.config.repo, lsfPath)) } return content } - protected async getBufferContent(forRef: FileGitRef): Promise { - const content = await this.getRefContent(forRef) - - if (!Buffer.isBuffer(content)) { - return Buffer.from(content, UTF8_ENCODING) - } - return content as Buffer - } - public async getStringContent(forRef: FileGitRef): Promise { - const content = await this.getRefContent(forRef) - - if (Buffer.isBuffer(content)) { - return content.toString(UTF8_ENCODING) - } - return content + const content = await this.getBufferContent(forRef) + return content.toString(UTF8_ENCODING) } public async getFilesPath(path: string): Promise { From 8354c770a2217fe39bfc84c3fe95e4a569599e7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Colladon?= Date: Thu, 7 Nov 2024 23:01:21 +0100 Subject: [PATCH 05/17] fix: windows EOL and path sep --- src/adapter/GitAdapter.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/adapter/GitAdapter.ts b/src/adapter/GitAdapter.ts index 9b31e0962..08bbd9adb 100644 --- a/src/adapter/GitAdapter.ts +++ b/src/adapter/GitAdapter.ts @@ -20,7 +20,7 @@ const firstCommitParams = ['rev-list', '--max-parents=0', 'HEAD'] const BLOB_TYPE = 'blob' const TREE_TYPE = 'tree' const NUM_STAT_REGEX = /^((\d+|\-)\t){2}/ -const EOL = '\n' +const EOL = new RegExp(/\r?\n/) const revPath = (pathDef: FileGitRef) => `${pathDef.oid}:${treatPathSep(pathDef.path)}` @@ -94,6 +94,7 @@ export default class GitAdapter { ) .split(EOL) .filter(line => line) + .map(line => treatPathSep(line)) } public async getFilesFrom(path: string) { From c6378511623a5b1d7dbdd734c36a7a53e6aa4482 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Colladon?= Date: Thu, 7 Nov 2024 23:25:04 +0100 Subject: [PATCH 06/17] refactor: remove non necessary treatPathSep --- __tests__/unit/lib/utils/fsHelper.test.ts | 24 +++++++++---------- src/adapter/GitAdapter.ts | 5 ++-- .../flowTranslationProcessor.ts | 4 ++-- src/post-processor/includeProcessor.ts | 3 +-- src/utils/fsHelper.ts | 7 +++--- 5 files changed, 19 insertions(+), 24 deletions(-) diff --git a/__tests__/unit/lib/utils/fsHelper.test.ts b/__tests__/unit/lib/utils/fsHelper.test.ts index 4175d6710..77c434f74 100644 --- a/__tests__/unit/lib/utils/fsHelper.test.ts +++ b/__tests__/unit/lib/utils/fsHelper.test.ts @@ -344,21 +344,19 @@ describe('copyFile', () => { } as unknown as Ignore, } as unknown as IgnoreHelper) }) - it.each(['folder/file', 'folder\\file'])( - 'write the content to the file system', - async path => { - // Arrange - const config: Config = work.config - config.output = 'root' - const content = 'content' + it('write the content to the file system', async () => { + // Arrange + const path = 'folder/file' + const config: Config = work.config + config.output = 'root' + const content = 'content' - // Act - await writeFile(path, content, config) + // Act + await writeFile(path, content, config) - // Assert - expect(outputFile).toHaveBeenCalledWith('root/folder/file', content) - } - ) + // Assert + expect(outputFile).toHaveBeenCalledWith('root/folder/file', content) + }) it('call only once for the same path', async () => { // Arrange diff --git a/src/adapter/GitAdapter.ts b/src/adapter/GitAdapter.ts index 08bbd9adb..d8477b944 100644 --- a/src/adapter/GitAdapter.ts +++ b/src/adapter/GitAdapter.ts @@ -22,8 +22,7 @@ const TREE_TYPE = 'tree' const NUM_STAT_REGEX = /^((\d+|\-)\t){2}/ const EOL = new RegExp(/\r?\n/) -const revPath = (pathDef: FileGitRef) => - `${pathDef.oid}:${treatPathSep(pathDef.path)}` +const revPath = (pathDef: FileGitRef) => `${pathDef.oid}:${pathDef.path}` export default class GitAdapter { private static instances: Map = new Map() @@ -89,7 +88,7 @@ export default class GitAdapter { '--name-only', '-r', this.config.to, - treatPathSep(path), + path, ]) ) .split(EOL) diff --git a/src/post-processor/flowTranslationProcessor.ts b/src/post-processor/flowTranslationProcessor.ts index 4a62d2c8a..f128c6e69 100644 --- a/src/post-processor/flowTranslationProcessor.ts +++ b/src/post-processor/flowTranslationProcessor.ts @@ -12,7 +12,7 @@ import { import { MetadataRepository } from '../metadata/MetadataRepository' import type { Work } from '../types/work' import { readDir, writeFile } from '../utils/fsHelper' -import { isSamePath, isSubDir, readFile, treatPathSep } from '../utils/fsUtils' +import { isSamePath, isSubDir, readFile } from '../utils/fsUtils' import { asArray, convertJsonToXml, @@ -164,7 +164,7 @@ export default class FlowTranslationProcessor extends BaseProcessor { protected async _getTranslationAsJSON(translationPath: string) { const translationPathInOutputFolder = join( this.config.output, - treatPathSep(translationPath) + translationPath ) const translationExist = await pathExists(translationPathInOutputFolder) diff --git a/src/post-processor/includeProcessor.ts b/src/post-processor/includeProcessor.ts index 1f320ba5a..3c3ee2df3 100644 --- a/src/post-processor/includeProcessor.ts +++ b/src/post-processor/includeProcessor.ts @@ -5,7 +5,6 @@ import { MetadataRepository } from '../metadata/MetadataRepository' import DiffLineInterpreter from '../service/diffLineInterpreter' import type { Work } from '../types/work' import { TAB } from '../utils/cliConstants' -import { treatPathSep } from '../utils/fsUtils' import { IgnoreHelper, buildIncludeHelper } from '../utils/ignoreHelper' import BaseProcessor from './baseProcessor' @@ -52,7 +51,7 @@ export default class IncludeProcessor extends BaseProcessor { ) for (const line of lines) { Object.keys(includeHolder).forEach(changeType => { - const changedLine = `${changeType}${TAB}${treatPathSep(line)}` + const changedLine = `${changeType}${TAB}${line}` if (!this.includeHelper.keep(changedLine)) { includeHolder[changeType as keyof typeof includeHolder].push( changedLine diff --git a/src/utils/fsHelper.ts b/src/utils/fsHelper.ts index 9267ddec3..b4bcd5b41 100644 --- a/src/utils/fsHelper.ts +++ b/src/utils/fsHelper.ts @@ -7,7 +7,6 @@ import GitAdapter from '../adapter/GitAdapter' import type { Config } from '../types/config' import type { FileGitRef } from '../types/git' -import { treatPathSep } from './fsUtils' import { buildIgnoreHelper } from './ignoreHelper' const copiedFiles = new Set() @@ -25,12 +24,12 @@ export const copyFiles = async (config: Config, src: string) => { } try { const gitAdapter = GitAdapter.getInstance(config) - const files = await gitAdapter.getFilesFrom(treatPathSep(src)) + const files = await gitAdapter.getFilesFrom(src) for (const file of files) { // Use Buffer to output the file content // Let fs implementation detect the encoding ("utf8" or "binary") const dst = join(config.output, file.path) - await outputFile(treatPathSep(dst), file.content) + await outputFile(dst, file.content) copiedFiles.add(dst) } } catch { @@ -80,5 +79,5 @@ export const writeFile = async ( if (ignoreHelper.globalIgnore.ignores(path)) { return } - await outputFile(join(config.output, treatPathSep(path)), content) + await outputFile(join(config.output, path), content) } From 415c1bbb5a9ce79763043d6987864f6cced02a69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Colladon?= Date: Thu, 7 Nov 2024 23:57:39 +0100 Subject: [PATCH 07/17] fix: path parameter issue --- src/adapter/GitAdapter.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/adapter/GitAdapter.ts b/src/adapter/GitAdapter.ts index d8477b944..97b10a953 100644 --- a/src/adapter/GitAdapter.ts +++ b/src/adapter/GitAdapter.ts @@ -101,7 +101,7 @@ export default class GitAdapter { const bufferFiles: { path: string; content: Buffer }[] = [] for (const filePath of filesPath) { const fileContent = await this.getBufferContent({ - path, + path: filePath, oid: this.config.to, }) bufferFiles.push({ @@ -117,12 +117,12 @@ export default class GitAdapter { for (const changeType of [ADDITION, MODIFICATION, DELETION]) { const linesOfType = await this.getDiffForType(changeType) lines.push( - ...linesOfType.map(statLine => - treatPathSep(statLine).replace(NUM_STAT_REGEX, `${changeType}${TAB}`) + ...linesOfType.map(line => + line.replace(NUM_STAT_REGEX, `${changeType}${TAB}`) ) ) } - return lines + return lines.map(treatPathSep) } protected async getDiffForType(changeType: string): Promise { From 74d8611f7bd8e518e010212af249b02eade56ba7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Colladon?= Date: Fri, 8 Nov 2024 08:42:09 +0100 Subject: [PATCH 08/17] refactor: improve variable names --- src/adapter/GitAdapter.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/adapter/GitAdapter.ts b/src/adapter/GitAdapter.ts index 97b10a953..f85a5781d 100644 --- a/src/adapter/GitAdapter.ts +++ b/src/adapter/GitAdapter.ts @@ -19,7 +19,7 @@ import { getLFSObjectContentPath, isLFS } from '../utils/gitLfsHelper' const firstCommitParams = ['rev-list', '--max-parents=0', 'HEAD'] const BLOB_TYPE = 'blob' const TREE_TYPE = 'tree' -const NUM_STAT_REGEX = /^((\d+|\-)\t){2}/ +const NUM_STAT_CHANGE_INFORMATION = /^((\d+|\-)\t){2}/ const EOL = new RegExp(/\r?\n/) const revPath = (pathDef: FileGitRef) => `${pathDef.oid}:${pathDef.path}` @@ -118,7 +118,7 @@ export default class GitAdapter { const linesOfType = await this.getDiffForType(changeType) lines.push( ...linesOfType.map(line => - line.replace(NUM_STAT_REGEX, `${changeType}${TAB}`) + line.replace(NUM_STAT_CHANGE_INFORMATION, `${changeType}${TAB}`) ) ) } From 7f781d21535c3b98b418e270eff376035472b5d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Colladon?= Date: Fri, 8 Nov 2024 08:42:39 +0100 Subject: [PATCH 09/17] fix: force treating path with posix --- src/adapter/GitAdapter.ts | 2 +- src/metadata/MetadataRepositoryImpl.ts | 2 +- src/metadata/metadataManager.ts | 2 +- src/post-processor/flowTranslationProcessor.ts | 2 +- src/post-processor/packageGenerator.ts | 2 +- src/service/botHandler.ts | 2 +- src/service/customFieldHandler.ts | 2 +- src/service/customObjectHandler.ts | 2 +- src/service/inFileHandler.ts | 2 +- src/service/inFolderHandler.ts | 2 +- src/service/inResourceHandler.ts | 2 +- src/service/lwcHandler.ts | 2 +- src/service/objectTranslationHandler.ts | 2 +- src/service/sharedFolderHandler.ts | 2 +- src/service/standardHandler.ts | 2 +- src/utils/cliHelper.ts | 2 +- src/utils/fsHelper.ts | 2 +- src/utils/fsUtils.ts | 2 +- src/utils/gitLfsHelper.ts | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/adapter/GitAdapter.ts b/src/adapter/GitAdapter.ts index f85a5781d..c4cb5891f 100644 --- a/src/adapter/GitAdapter.ts +++ b/src/adapter/GitAdapter.ts @@ -1,4 +1,4 @@ -import { join } from 'path' +import { join } from 'path/posix' import { readFile } from 'fs-extra' import { SimpleGit, simpleGit } from 'simple-git' diff --git a/src/metadata/MetadataRepositoryImpl.ts b/src/metadata/MetadataRepositoryImpl.ts index fe5765263..90204a962 100644 --- a/src/metadata/MetadataRepositoryImpl.ts +++ b/src/metadata/MetadataRepositoryImpl.ts @@ -1,6 +1,6 @@ 'use strict' -import { parse } from 'path' +import { parse } from 'path/posix' import { DOT, PATH_SEP } from '../constant/fsConstants' import { diff --git a/src/metadata/metadataManager.ts b/src/metadata/metadataManager.ts index d89554485..b9b806a29 100644 --- a/src/metadata/metadataManager.ts +++ b/src/metadata/metadataManager.ts @@ -1,5 +1,5 @@ 'use strict' -import { resolve } from 'path' +import { resolve } from 'path/posix' import { readFile, readdir } from 'fs-extra' diff --git a/src/post-processor/flowTranslationProcessor.ts b/src/post-processor/flowTranslationProcessor.ts index f128c6e69..764a7eac8 100644 --- a/src/post-processor/flowTranslationProcessor.ts +++ b/src/post-processor/flowTranslationProcessor.ts @@ -1,5 +1,5 @@ 'use strict' -import { join, parse } from 'path' +import { join, parse } from 'path/posix' import { pathExists } from 'fs-extra' diff --git a/src/post-processor/packageGenerator.ts b/src/post-processor/packageGenerator.ts index 8ef2c04b9..9eaaf6a64 100644 --- a/src/post-processor/packageGenerator.ts +++ b/src/post-processor/packageGenerator.ts @@ -1,6 +1,6 @@ 'use strict' -import { join } from 'path' +import { join } from 'path/posix' import { outputFile } from 'fs-extra' diff --git a/src/service/botHandler.ts b/src/service/botHandler.ts index 9ab622ab1..5d1851273 100644 --- a/src/service/botHandler.ts +++ b/src/service/botHandler.ts @@ -1,5 +1,5 @@ 'use strict' -import { parse } from 'path' +import { parse } from 'path/posix' import { DOT, PATH_SEP } from '../constant/fsConstants' import { fillPackageWithParameter } from '../utils/packageHelper' diff --git a/src/service/customFieldHandler.ts b/src/service/customFieldHandler.ts index 7c92bfd66..cca3e9105 100644 --- a/src/service/customFieldHandler.ts +++ b/src/service/customFieldHandler.ts @@ -1,5 +1,5 @@ 'use strict' -import { join } from 'path' +import { join } from 'path/posix' import { PATH_SEP } from '../constant/fsConstants' import { diff --git a/src/service/customObjectHandler.ts b/src/service/customObjectHandler.ts index cf6201d24..7cda8f525 100644 --- a/src/service/customObjectHandler.ts +++ b/src/service/customObjectHandler.ts @@ -1,5 +1,5 @@ 'use strict' -import { join, parse } from 'path' +import { join, parse } from 'path/posix' import { FIELD_DIRECTORY_NAME, diff --git a/src/service/inFileHandler.ts b/src/service/inFileHandler.ts index 4da0ad420..15826b6b2 100644 --- a/src/service/inFileHandler.ts +++ b/src/service/inFileHandler.ts @@ -1,5 +1,5 @@ 'use strict' -import { basename } from 'path' +import { basename } from 'path/posix' import { DOT } from '../constant/fsConstants' import { MetadataRepository } from '../metadata/MetadataRepository' diff --git a/src/service/inFolderHandler.ts b/src/service/inFolderHandler.ts index 635147a7b..66e033829 100644 --- a/src/service/inFolderHandler.ts +++ b/src/service/inFolderHandler.ts @@ -1,5 +1,5 @@ 'use strict' -import { join, parse } from 'path' +import { join, parse } from 'path/posix' import { EXTENSION_SUFFIX_REGEX, PATH_SEP } from '../constant/fsConstants' import { diff --git a/src/service/inResourceHandler.ts b/src/service/inResourceHandler.ts index 2c57e29ab..68870fc7d 100644 --- a/src/service/inResourceHandler.ts +++ b/src/service/inResourceHandler.ts @@ -1,5 +1,5 @@ 'use strict' -import { join, parse } from 'path' +import { join, parse } from 'path/posix' import { DOT, PATH_SEP } from '../constant/fsConstants' import { METAFILE_SUFFIX, META_REGEX } from '../constant/metadataConstants' diff --git a/src/service/lwcHandler.ts b/src/service/lwcHandler.ts index b02ac0eaf..025f8fe05 100644 --- a/src/service/lwcHandler.ts +++ b/src/service/lwcHandler.ts @@ -1,5 +1,5 @@ 'use strict' -import { parse } from 'path' +import { parse } from 'path/posix' import { PATH_SEP } from '../constant/fsConstants' diff --git a/src/service/objectTranslationHandler.ts b/src/service/objectTranslationHandler.ts index 05e7db8c0..79218c57d 100644 --- a/src/service/objectTranslationHandler.ts +++ b/src/service/objectTranslationHandler.ts @@ -1,5 +1,5 @@ 'use strict' -import { parse } from 'path' +import { parse } from 'path/posix' import { PATH_SEP } from '../constant/fsConstants' import { OBJECT_TRANSLATION_META_XML_SUFFIX } from '../constant/metadataConstants' diff --git a/src/service/sharedFolderHandler.ts b/src/service/sharedFolderHandler.ts index b71d6997f..3f90fc861 100644 --- a/src/service/sharedFolderHandler.ts +++ b/src/service/sharedFolderHandler.ts @@ -1,5 +1,5 @@ 'use strict' -import { join, parse } from 'path' +import { join, parse } from 'path/posix' import { METAFILE_SUFFIX } from '../constant/metadataConstants' import { MetadataRepository } from '../metadata/MetadataRepository' diff --git a/src/service/standardHandler.ts b/src/service/standardHandler.ts index a75360624..af13e9494 100644 --- a/src/service/standardHandler.ts +++ b/src/service/standardHandler.ts @@ -1,5 +1,5 @@ 'use strict' -import { ParsedPath, join, parse } from 'path' +import { ParsedPath, join, parse } from 'path/posix' import { DOT, PATH_SEP } from '../constant/fsConstants' import { diff --git a/src/utils/cliHelper.ts b/src/utils/cliHelper.ts index 718739a6e..7dbcc4fcc 100644 --- a/src/utils/cliHelper.ts +++ b/src/utils/cliHelper.ts @@ -1,6 +1,6 @@ 'use strict' -import { join } from 'path' import { format } from 'util' +import { join } from 'path/posix' import GitAdapter from '../adapter/GitAdapter' import messages from '../locales/en' diff --git a/src/utils/fsHelper.ts b/src/utils/fsHelper.ts index b4bcd5b41..9fcca1935 100644 --- a/src/utils/fsHelper.ts +++ b/src/utils/fsHelper.ts @@ -1,5 +1,5 @@ 'use strict' -import { join } from 'path' +import { join } from 'path/posix' import { outputFile } from 'fs-extra' diff --git a/src/utils/fsUtils.ts b/src/utils/fsUtils.ts index 9b75d2238..f9a49a3ce 100644 --- a/src/utils/fsUtils.ts +++ b/src/utils/fsUtils.ts @@ -1,5 +1,5 @@ 'use strict' -import { isAbsolute, normalize, relative } from 'path' +import { isAbsolute, normalize, relative } from 'path/posix' import { readFile as fsReadFile, pathExists, stat } from 'fs-extra' diff --git a/src/utils/gitLfsHelper.ts b/src/utils/gitLfsHelper.ts index b0e0719f7..ecb8950fa 100644 --- a/src/utils/gitLfsHelper.ts +++ b/src/utils/gitLfsHelper.ts @@ -1,5 +1,5 @@ 'use strict' -import { sep } from 'path' +import { sep } from 'path/posix' import { UTF8_ENCODING } from '../constant/fsConstants' import { GIT_FOLDER } from '../constant/gitConstants' From d65e478f4a297ab4cb21d6b6b1275225b6a94b24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Colladon?= Date: Fri, 8 Nov 2024 09:06:05 +0100 Subject: [PATCH 10/17] refactor: move constants in their file --- src/adapter/GitAdapter.ts | 9 ++++----- src/constant/gitConstants.ts | 7 +++++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/adapter/GitAdapter.ts b/src/adapter/GitAdapter.ts index c4cb5891f..52300c80f 100644 --- a/src/adapter/GitAdapter.ts +++ b/src/adapter/GitAdapter.ts @@ -6,9 +6,12 @@ import { SimpleGit, simpleGit } from 'simple-git' import { UTF8_ENCODING } from '../constant/fsConstants' import { ADDITION, + BLOB_TYPE, DELETION, IGNORE_WHITESPACE_PARAMS, MODIFICATION, + NUM_STAT_CHANGE_INFORMATION, + TREE_TYPE, } from '../constant/gitConstants' import type { Config } from '../types/config' import type { FileGitRef } from '../types/git' @@ -16,10 +19,6 @@ import { TAB } from '../utils/cliConstants' import { treatPathSep } from '../utils/fsUtils' import { getLFSObjectContentPath, isLFS } from '../utils/gitLfsHelper' -const firstCommitParams = ['rev-list', '--max-parents=0', 'HEAD'] -const BLOB_TYPE = 'blob' -const TREE_TYPE = 'tree' -const NUM_STAT_CHANGE_INFORMATION = /^((\d+|\-)\t){2}/ const EOL = new RegExp(/\r?\n/) const revPath = (pathDef: FileGitRef) => `${pathDef.oid}:${pathDef.path}` @@ -63,7 +62,7 @@ export default class GitAdapter { } public async getFirstCommitRef() { - return await this.simpleGit.raw(firstCommitParams) + return await this.simpleGit.raw(['rev-list', '--max-parents=0', 'HEAD']) } protected async getBufferContent(forRef: FileGitRef): Promise { diff --git a/src/constant/gitConstants.ts b/src/constant/gitConstants.ts index 75969cc55..2004f4748 100644 --- a/src/constant/gitConstants.ts +++ b/src/constant/gitConstants.ts @@ -1,10 +1,9 @@ 'use strict' export const ADDITION = 'A' +export const BLOB_TYPE = 'blob' export const DELETION = 'D' -export const MODIFICATION = 'M' export const GIT_DIFF_TYPE_REGEX = /^.\s+/u export const GIT_FOLDER = '.git' -export const UTF8_ENCODING = 'utf8' export const IGNORE_WHITESPACE_PARAMS = [ '--ignore-all-space', '--ignore-blank-lines', @@ -12,3 +11,7 @@ export const IGNORE_WHITESPACE_PARAMS = [ '--word-diff-regex', '--word-diff-regex=|[^[:space:]]', ] +export const MODIFICATION = 'M' +export const NUM_STAT_CHANGE_INFORMATION = /^((\d+|\-)\t){2}/ +export const UTF8_ENCODING = 'utf8' +export const TREE_TYPE = 'tree' From e98027ba365fb823dca6fee2e28a9881873938c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Colladon?= Date: Fri, 8 Nov 2024 09:06:23 +0100 Subject: [PATCH 11/17] fix: not necessary path handling --- src/adapter/GitAdapter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/adapter/GitAdapter.ts b/src/adapter/GitAdapter.ts index 52300c80f..ef3157f15 100644 --- a/src/adapter/GitAdapter.ts +++ b/src/adapter/GitAdapter.ts @@ -104,7 +104,7 @@ export default class GitAdapter { oid: this.config.to, }) bufferFiles.push({ - path: treatPathSep(filePath), + path: filePath, content: fileContent, }) } From 74379661b03dfa155e31d7b0d84ddcefc0ef0927 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Colladon?= Date: Fri, 8 Nov 2024 09:06:39 +0100 Subject: [PATCH 12/17] fix: path resolution depending the OS --- src/metadata/metadataManager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/metadata/metadataManager.ts b/src/metadata/metadataManager.ts index b9b806a29..d89554485 100644 --- a/src/metadata/metadataManager.ts +++ b/src/metadata/metadataManager.ts @@ -1,5 +1,5 @@ 'use strict' -import { resolve } from 'path/posix' +import { resolve } from 'path' import { readFile, readdir } from 'fs-extra' From 120851cc9aa6e390fc88e0142ed1ee230576c753 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Colladon?= Date: Fri, 8 Nov 2024 09:08:20 +0100 Subject: [PATCH 13/17] fix: unused variable --- src/constant/gitConstants.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/constant/gitConstants.ts b/src/constant/gitConstants.ts index 2004f4748..668cd27ed 100644 --- a/src/constant/gitConstants.ts +++ b/src/constant/gitConstants.ts @@ -13,5 +13,4 @@ export const IGNORE_WHITESPACE_PARAMS = [ ] export const MODIFICATION = 'M' export const NUM_STAT_CHANGE_INFORMATION = /^((\d+|\-)\t){2}/ -export const UTF8_ENCODING = 'utf8' export const TREE_TYPE = 'tree' From f90e7fbe16b231bc17bd097f381247a882d38a85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Colladon?= Date: Fri, 8 Nov 2024 09:42:30 +0100 Subject: [PATCH 14/17] refactor: simplify already catched issues --- __tests__/unit/lib/utils/fsHelper.test.ts | 11 ----------- src/utils/fsHelper.ts | 6 +----- 2 files changed, 1 insertion(+), 16 deletions(-) diff --git a/__tests__/unit/lib/utils/fsHelper.test.ts b/__tests__/unit/lib/utils/fsHelper.test.ts index 77c434f74..eccda7964 100644 --- a/__tests__/unit/lib/utils/fsHelper.test.ts +++ b/__tests__/unit/lib/utils/fsHelper.test.ts @@ -323,17 +323,6 @@ describe('copyFile', () => { // Assert expect(result).toBe(false) }) - it('returns false when sub service throws', async () => { - expect.assertions(1) - // Arrange - mockPathExists.mockImplementation(() => Promise.reject(new Error('test'))) - - // Act - const exist = await pathExists('path', work.config) - - // Assert - expect(exist).toBe(false) - }) }) describe('writeFile', () => { diff --git a/src/utils/fsHelper.ts b/src/utils/fsHelper.ts index 9fcca1935..349331589 100644 --- a/src/utils/fsHelper.ts +++ b/src/utils/fsHelper.ts @@ -50,11 +50,7 @@ export const readPathFromGit = async (forRef: FileGitRef, config: Config) => { export const pathExists = async (path: string, config: Config) => { const gitAdapter = GitAdapter.getInstance(config) - try { - return await gitAdapter.pathExists(path) - } catch { - return false - } + return await gitAdapter.pathExists(path) } export const readDir = async ( From d37205b3b7d87ea6f434a986f48706e367a61429 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Colladon?= Date: Fri, 8 Nov 2024 10:21:35 +0100 Subject: [PATCH 15/17] fix: too long filename on windows --- __tests__/unit/lib/adapter/GitAdapter.test.ts | 3 ++- src/adapter/GitAdapter.ts | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/__tests__/unit/lib/adapter/GitAdapter.test.ts b/__tests__/unit/lib/adapter/GitAdapter.test.ts index 0ac100c83..f0b93480e 100644 --- a/__tests__/unit/lib/adapter/GitAdapter.test.ts +++ b/__tests__/unit/lib/adapter/GitAdapter.test.ts @@ -87,7 +87,8 @@ describe('GitAdapter', () => { await gitAdapter.configureRepository() // Assert - expect(mockedAddConfig).toBeCalledTimes(1) + expect(mockedAddConfig).toBeCalledTimes(2) + expect(mockedAddConfig).toBeCalledWith('core.longpaths', 'true') expect(mockedAddConfig).toBeCalledWith('core.quotepath', 'off') }) }) diff --git a/src/adapter/GitAdapter.ts b/src/adapter/GitAdapter.ts index ef3157f15..24026f163 100644 --- a/src/adapter/GitAdapter.ts +++ b/src/adapter/GitAdapter.ts @@ -42,6 +42,7 @@ export default class GitAdapter { } public async configureRepository() { + await this.simpleGit.addConfig('core.longpaths', 'true') await this.simpleGit.addConfig('core.quotepath', 'off') } From e523e24953caf47d55449937bb32ea44f891a3a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Colladon?= Date: Fri, 8 Nov 2024 11:41:11 +0100 Subject: [PATCH 16/17] refactor: use async generator --- __tests__/unit/lib/adapter/GitAdapter.test.ts | 16 +- __tests__/unit/lib/utils/fsHelper.test.ts | 271 +++++++++--------- src/adapter/GitAdapter.ts | 8 +- src/service/customObjectHandler.ts | 6 +- src/utils/asyncFilter.ts | 6 +- src/utils/fsHelper.ts | 3 +- 6 files changed, 162 insertions(+), 148 deletions(-) diff --git a/__tests__/unit/lib/adapter/GitAdapter.test.ts b/__tests__/unit/lib/adapter/GitAdapter.test.ts index f0b93480e..5529b45cf 100644 --- a/__tests__/unit/lib/adapter/GitAdapter.test.ts +++ b/__tests__/unit/lib/adapter/GitAdapter.test.ts @@ -269,7 +269,10 @@ describe('GitAdapter', () => { mockedShowBuffer.mockResolvedValue(Buffer.from(content) as never) // Act - const result = await gitAdapter.getFilesFrom('directory/path') + const result: any = [] + for await (const file of gitAdapter.getFilesFrom('directory/path')) { + result.push(file) + } // Assert @@ -291,7 +294,10 @@ describe('GitAdapter', () => { mockedCatFile.mockResolvedValue(Buffer.from(content) as never) // Act - const result = await gitAdapter.getFilesFrom('directory/path') + const result: any = [] + for await (const file of gitAdapter.getFilesFrom('directory/path')) { + result.push(file) + } // Assert @@ -311,7 +317,11 @@ describe('GitAdapter', () => { // Act - const result = await gitAdapter.getFilesFrom('wrong/path') + const result: any = [] + for await (const file of gitAdapter.getFilesFrom('directory/path')) { + result.push(file) + } + expect(result).toEqual([]) }) }) diff --git a/__tests__/unit/lib/utils/fsHelper.test.ts b/__tests__/unit/lib/utils/fsHelper.test.ts index eccda7964..d56aaaff9 100644 --- a/__tests__/unit/lib/utils/fsHelper.test.ts +++ b/__tests__/unit/lib/utils/fsHelper.test.ts @@ -126,14 +126,12 @@ describe('copyFile', () => { it('should copy file', async () => { // Arrange const sourcePath = 'source/copyFile' - mockGetFilesFrom.mockImplementation(() => - Promise.resolve([ - { - path: sourcePath, - content: Buffer.from(''), - }, - ]) - ) + mockGetFilesFrom.mockImplementation(async function* () { + yield await { + path: sourcePath, + content: Buffer.from(''), + } + }) // Act await copyFiles(work.config, sourcePath) @@ -166,24 +164,31 @@ describe('copyFile', () => { describe('when source location is empty', () => { it('should copy file', async () => { // Arrange - mockGetFilesFrom.mockImplementation(() => - Promise.resolve([ - { - path: 'source/emptyFile', - content: Buffer.from(''), - }, - ]) - ) + mockGetFilesFrom.mockImplementation(async function* () { + yield await { + path: 'source/emptyFile', + content: Buffer.from(''), + } + yield await { + path: 'source/anotherEmptyFile', + content: Buffer.from(''), + } + }) // Act await copyFiles(work.config, 'source/emptyFile') // Assert expect(mockGetFilesFrom).toBeCalled() + expect(outputFile).toBeCalledTimes(2) expect(outputFile).toBeCalledWith( 'output/source/emptyFile', Buffer.from('') ) + expect(outputFile).toBeCalledWith( + 'output/source/anotherEmptyFile', + Buffer.from('') + ) }) }) @@ -191,14 +196,12 @@ describe('copyFile', () => { describe('when content is a folder', () => { it('should copy the folder', async () => { // Arrange - mockGetFilesFrom.mockImplementation(() => - Promise.resolve([ - { - path: 'copyDir/copyFile', - content: Buffer.from('content'), - }, - ]) - ) + mockGetFilesFrom.mockImplementation(async function* () { + yield await { + path: 'copyDir/copyFile', + content: Buffer.from('content'), + } + }) // Act await copyFiles(work.config, 'source/copyDir') @@ -216,11 +219,10 @@ describe('copyFile', () => { describe('when content is not a git location', () => { it('should ignore this path', async () => { // Arrange - const sourcePath = 'source/warning' - mockGetFilesFrom.mockImplementation(() => Promise.reject()) + mockGetFilesFrom.mockImplementation(async function* () {}) // Act - await copyFiles(work.config, sourcePath) + await copyFiles(work.config, 'source/warning') // Assert expect(mockGetFilesFrom).toBeCalled() @@ -230,11 +232,12 @@ describe('copyFile', () => { describe('when content is a file', () => { beforeEach(async () => { // Arrange - mockGetFilesFrom.mockImplementation(() => - Promise.resolve([ - { path: 'source/copyFile', content: Buffer.from('content') }, - ]) - ) + mockGetFilesFrom.mockImplementation(async function* () { + yield await { + path: 'source/copyFile', + content: Buffer.from('content'), + } + }) }) it('should copy the file', async () => { // Act @@ -251,130 +254,130 @@ describe('copyFile', () => { }) }) }) +}) - describe('readDir', () => { - describe('when path exist', () => { - const dir = 'dir/' - const file = 'test.js' - beforeEach(() => { - // Arrange - mockGetFilesPath.mockImplementation(() => - Promise.resolve([`${dir}${file}`]) - ) - }) - it('should return the file', async () => { - // Act - const dirContent = await readDir(dir, work.config) - - // Assert - expect(dirContent).toEqual(expect.arrayContaining([`${dir}${file}`])) - expect(mockGetFilesPath).toHaveBeenCalled() - }) +describe('readDir', () => { + describe('when path exist', () => { + const dir = 'dir/' + const file = 'test.js' + beforeEach(() => { + // Arrange + mockGetFilesPath.mockImplementation(() => + Promise.resolve([`${dir}${file}`]) + ) }) + it('should return the file', async () => { + // Act + const dirContent = await readDir(dir, work.config) - describe('when path does not exist', () => { - beforeEach(() => { - // Arrange - mockGetFilesPath.mockImplementation(() => - Promise.reject(new Error('test')) - ) - }) - it('should throw', async () => { - // Act - try { - await readDir('path', work.config) - } catch (err) { - // Assert - expect(err).toBeTruthy() - expect(mockGetFilesPath).toHaveBeenCalled() - } - }) + // Assert + expect(dirContent).toEqual(expect.arrayContaining([`${dir}${file}`])) + expect(mockGetFilesPath).toHaveBeenCalled() }) }) - describe('pathExists', () => { - it('returns true when path is folder', async () => { + describe('when path does not exist', () => { + beforeEach(() => { // Arrange - mockPathExists.mockImplementation(() => Promise.resolve(true)) - + mockGetFilesPath.mockImplementation(() => + Promise.reject(new Error('test')) + ) + }) + it('should throw', async () => { // Act - const result = await pathExists('path', work.config) - - // Assert - expect(result).toBe(true) + try { + await readDir('path', work.config) + } catch (err) { + // Assert + expect(err).toBeTruthy() + expect(mockGetFilesPath).toHaveBeenCalled() + } }) - it('returns true when path is file', async () => { - // Arrange - mockPathExists.mockImplementation(() => Promise.resolve(true)) + }) +}) - // Act - const result = await pathExists('path', work.config) +describe('pathExists', () => { + it('returns true when path is folder', async () => { + // Arrange + mockPathExists.mockImplementation(() => Promise.resolve(true)) - // Assert - expect(result).toBe(true) - }) - it('returns false when path does not exist', async () => { - // Arrange - mockPathExists.mockImplementation(() => Promise.resolve(false)) + // Act + const result = await pathExists('path', work.config) - // Act - const result = await pathExists('path', work.config) + // Assert + expect(result).toBe(true) + }) + it('returns true when path is file', async () => { + // Arrange + mockPathExists.mockImplementation(() => Promise.resolve(true)) - // Assert - expect(result).toBe(false) - }) + // Act + const result = await pathExists('path', work.config) + + // Assert + expect(result).toBe(true) }) + it('returns false when path does not exist', async () => { + // Arrange + mockPathExists.mockImplementation(() => Promise.resolve(false)) - describe('writeFile', () => { - beforeEach(() => { - mockBuildIgnoreHelper.mockResolvedValue({ - globalIgnore: { - ignores: () => false, - } as unknown as Ignore, - } as unknown as IgnoreHelper) - }) - it('write the content to the file system', async () => { - // Arrange - const path = 'folder/file' - const config: Config = work.config - config.output = 'root' - const content = 'content' + // Act + const result = await pathExists('path', work.config) - // Act - await writeFile(path, content, config) + // Assert + expect(result).toBe(false) + }) +}) - // Assert - expect(outputFile).toHaveBeenCalledWith('root/folder/file', content) - }) +describe('writeFile', () => { + beforeEach(() => { + mockBuildIgnoreHelper.mockResolvedValue({ + globalIgnore: { + ignores: () => false, + } as unknown as Ignore, + } as unknown as IgnoreHelper) + }) + it('write the content to the file system', async () => { + // Arrange + const path = 'folder/file' + const config: Config = work.config + config.output = 'root' + const content = 'content' + + // Act + await writeFile(path, content, config) + + // Assert + expect(outputFile).toHaveBeenCalledWith('root/folder/file', content) + }) - it('call only once for the same path', async () => { - // Arrange - const config: Config = work.config - config.output = 'root' - const content = 'content' - const path = 'other/path/file' - await writeFile(path, content, config) + it('call only once for the same path', async () => { + // Arrange + const config: Config = work.config + config.output = 'root' + const content = 'content' + const path = 'other/path/file' + await writeFile(path, content, config) - // Act - await writeFile(path, content, config) + // Act + await writeFile(path, content, config) - // Assert - expect(outputFile).toBeCalledTimes(1) - }) + // Assert + expect(outputFile).toBeCalledTimes(1) + }) - it('should not copy ignored path', async () => { - // Arrange - mockBuildIgnoreHelper.mockResolvedValue({ - globalIgnore: { - ignores: () => true, - } as unknown as Ignore, - } as unknown as IgnoreHelper) + it('should not copy ignored path', async () => { + // Arrange + mockBuildIgnoreHelper.mockResolvedValue({ + globalIgnore: { + ignores: () => true, + } as unknown as Ignore, + } as unknown as IgnoreHelper) - // Act - await writeFile('', '', {} as Config) + // Act + await writeFile('', '', {} as Config) - // Assert - expect(outputFile).not.toBeCalled() - }) + // Assert + expect(outputFile).not.toBeCalled() }) }) diff --git a/src/adapter/GitAdapter.ts b/src/adapter/GitAdapter.ts index 24026f163..35e529b9a 100644 --- a/src/adapter/GitAdapter.ts +++ b/src/adapter/GitAdapter.ts @@ -96,20 +96,18 @@ export default class GitAdapter { .map(line => treatPathSep(line)) } - public async getFilesFrom(path: string) { + public async *getFilesFrom(path: string) { const filesPath = await this.getFilesPath(path) - const bufferFiles: { path: string; content: Buffer }[] = [] for (const filePath of filesPath) { const fileContent = await this.getBufferContent({ path: filePath, oid: this.config.to, }) - bufferFiles.push({ + yield { path: filePath, content: fileContent, - }) + } } - return bufferFiles } public async getDiffLines(): Promise { diff --git a/src/service/customObjectHandler.ts b/src/service/customObjectHandler.ts index 7cda8f525..174cc587f 100644 --- a/src/service/customObjectHandler.ts +++ b/src/service/customObjectHandler.ts @@ -37,8 +37,8 @@ export default class CustomObjectHandler extends StandardHandler { return content.includes(MASTER_DETAIL_TAG) } ) - await Promise.all( - masterDetailsFields.map((field: string) => this._copyWithMetaFile(field)) - ) + for (const masterDetailField of masterDetailsFields) { + await this._copyWithMetaFile(masterDetailField) + } } } diff --git a/src/utils/asyncFilter.ts b/src/utils/asyncFilter.ts index b31935dff..6fdff893d 100644 --- a/src/utils/asyncFilter.ts +++ b/src/utils/asyncFilter.ts @@ -2,7 +2,11 @@ const asyncFilter = async ( list: string[], predicate: (t: string) => Promise ) => { - const resolvedPredicates = await Promise.all(list.map(predicate)) + const resolvedPredicates: boolean[] = [] + for (const elem of list) { + const predicateResult = await predicate(elem) + resolvedPredicates.push(predicateResult) + } return list.filter((_, idx) => resolvedPredicates[idx]) } export default asyncFilter diff --git a/src/utils/fsHelper.ts b/src/utils/fsHelper.ts index 349331589..12be3f26c 100644 --- a/src/utils/fsHelper.ts +++ b/src/utils/fsHelper.ts @@ -24,8 +24,7 @@ export const copyFiles = async (config: Config, src: string) => { } try { const gitAdapter = GitAdapter.getInstance(config) - const files = await gitAdapter.getFilesFrom(src) - for (const file of files) { + for await (const file of gitAdapter.getFilesFrom(src)) { // Use Buffer to output the file content // Let fs implementation detect the encoding ("utf8" or "binary") const dst = join(config.output, file.path) From 1d5e6f4330815c40a19f34f71ad898ec4f41b6df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Colladon?= Date: Mon, 11 Nov 2024 11:19:56 +0100 Subject: [PATCH 17/17] refactor: add caching layer and improve performance --- __tests__/unit/lib/adapter/GitAdapter.test.ts | 93 +++++++++++++++++++ __tests__/unit/lib/utils/fsHelper.test.ts | 2 +- src/adapter/GitAdapter.ts | 58 ++++++++++-- 3 files changed, 146 insertions(+), 7 deletions(-) diff --git a/__tests__/unit/lib/adapter/GitAdapter.test.ts b/__tests__/unit/lib/adapter/GitAdapter.test.ts index 5529b45cf..dc3a769a8 100644 --- a/__tests__/unit/lib/adapter/GitAdapter.test.ts +++ b/__tests__/unit/lib/adapter/GitAdapter.test.ts @@ -2,6 +2,7 @@ import { describe, expect, it, jest } from '@jest/globals' import { readFile } from 'fs-extra' +import { EOL } from 'os' import GitAdapter from '../../../../src/adapter/GitAdapter' import { IGNORE_WHITESPACE_PARAMS } from '../../../../src/constant/gitConstants' import type { Config } from '../../../../src/types/config' @@ -142,6 +143,23 @@ describe('GitAdapter', () => { } ) }) + describe('when called multiple times with the same parameters', () => { + it('returns cached value', async () => { + // Arrange + const gitAdapter = GitAdapter.getInstance(config) + mockedCatFile.mockResolvedValue('blob' as never) + + // Act + const result = await gitAdapter.pathExists('path') + const cachedResult = await gitAdapter.pathExists('path') + + // Assert + expect(result).toBe(true) + expect(cachedResult).toStrictEqual(result) + expect(mockedCatFile).toBeCalledTimes(1) + expect(mockedCatFile).toBeCalledWith(['-t', `${config.to}:path`]) + }) + }) describe('when catFile throws', () => { it('returns false', async () => { // Arrange @@ -256,6 +274,81 @@ describe('GitAdapter', () => { config.source, ]) }) + + it('memoize call', async () => { + // Arrange + const gitAdapter = GitAdapter.getInstance(config) + const rawOutput = [ + 'path/from/file', + 'path/to/file', + 'path/to/another/file', + ] + mockedRaw.mockResolvedValue(rawOutput.join(EOL) as never) + + // Act + const result = await gitAdapter.getFilesPath(config.source) + const cachedResult = await gitAdapter.getFilesPath(config.source) + + // Assert + expect(result).toEqual(rawOutput) + expect(cachedResult).toStrictEqual(result) + expect(mockedRaw).toBeCalledTimes(1) + expect(mockedRaw).toBeCalledWith([ + 'ls-tree', + '--name-only', + '-r', + config.to, + config.source, + ]) + }) + + it('memoize sub call', async () => { + // Arrange + const gitAdapter = GitAdapter.getInstance(config) + const rawOutput = [ + 'path/from/file', + 'path/to/file', + 'path/to/another/file', + ] + mockedRaw.mockResolvedValue(rawOutput.join(EOL) as never) + + // Act + const result = await gitAdapter.getFilesPath('path') + const subCachedResult = await gitAdapter.getFilesPath('path/to') + + // Assert + expect(result).toEqual(rawOutput) + expect(subCachedResult).toEqual(rawOutput.slice(1)) // Only sub-paths + expect(mockedRaw).toBeCalledTimes(1) + expect(mockedRaw).toBeCalledWith([ + 'ls-tree', + '--name-only', + '-r', + config.to, + 'path', + ]) + }) + + it('does not cache parent subpaths', async () => { + // Arrange + const gitAdapter = GitAdapter.getInstance(config) + const rawOutput = [ + 'path/from/file', + 'path/to/file', + 'path/to/another/file', + ] + mockedRaw.mockResolvedValueOnce(rawOutput.slice(1).join(EOL) as never) + mockedRaw.mockResolvedValue(rawOutput.join(EOL) as never) + + // Act + const resultAtFilePath = await gitAdapter.getFilesPath('path/to') + const resultAtPath = await gitAdapter.getFilesPath('path') + + // Assert + expect(resultAtFilePath).toEqual(rawOutput.slice(1)) + expect(resultAtPath).toEqual(rawOutput) + expect(mockedRaw).toBeCalledTimes(2) + }) }) describe('getFilesFrom', () => { diff --git a/__tests__/unit/lib/utils/fsHelper.test.ts b/__tests__/unit/lib/utils/fsHelper.test.ts index d56aaaff9..34ff6abbd 100644 --- a/__tests__/unit/lib/utils/fsHelper.test.ts +++ b/__tests__/unit/lib/utils/fsHelper.test.ts @@ -322,7 +322,7 @@ describe('pathExists', () => { mockPathExists.mockImplementation(() => Promise.resolve(false)) // Act - const result = await pathExists('path', work.config) + const result = await pathExists('not/existing/path', work.config) // Assert expect(result).toBe(false) diff --git a/src/adapter/GitAdapter.ts b/src/adapter/GitAdapter.ts index 35e529b9a..7b3a9651a 100644 --- a/src/adapter/GitAdapter.ts +++ b/src/adapter/GitAdapter.ts @@ -3,7 +3,7 @@ import { join } from 'path/posix' import { readFile } from 'fs-extra' import { SimpleGit, simpleGit } from 'simple-git' -import { UTF8_ENCODING } from '../constant/fsConstants' +import { PATH_SEP, UTF8_ENCODING } from '../constant/fsConstants' import { ADDITION, BLOB_TYPE, @@ -22,7 +22,6 @@ import { getLFSObjectContentPath, isLFS } from '../utils/gitLfsHelper' const EOL = new RegExp(/\r?\n/) const revPath = (pathDef: FileGitRef) => `${pathDef.oid}:${pathDef.path}` - export default class GitAdapter { private static instances: Map = new Map() @@ -36,9 +35,13 @@ export default class GitAdapter { } protected readonly simpleGit: SimpleGit + protected readonly getFilesPathCache: Map> + protected readonly pathExistsCache: Map private constructor(protected readonly config: Config) { this.simpleGit = simpleGit({ baseDir: config.repo, trimmed: true }) + this.getFilesPathCache = new Map>() + this.pathExistsCache = new Map() } public async configureRepository() { @@ -50,16 +53,27 @@ export default class GitAdapter { return await this.simpleGit.revparse([ref]) } - public async pathExists(path: string) { + protected async pathExistsImpl(path: string) { + let doesPathExists = false try { const type = await this.simpleGit.catFile([ '-t', revPath({ path, oid: this.config.to }), ]) - return [TREE_TYPE, BLOB_TYPE].includes(type.trimEnd()) + doesPathExists = [TREE_TYPE, BLOB_TYPE].includes(type.trimEnd()) } catch { - return false + doesPathExists = false } + return doesPathExists + } + + public async pathExists(path: string) { + if (this.pathExistsCache.has(path)) { + return this.pathExistsCache.get(path) + } + const doesPathExists = await this.pathExistsImpl(path) + this.pathExistsCache.set(path, doesPathExists) + return doesPathExists } public async getFirstCommitRef() { @@ -81,7 +95,7 @@ export default class GitAdapter { return content.toString(UTF8_ENCODING) } - public async getFilesPath(path: string): Promise { + protected async getFilesPathImpl(path: string): Promise { return ( await this.simpleGit.raw([ 'ls-tree', @@ -96,6 +110,38 @@ export default class GitAdapter { .map(line => treatPathSep(line)) } + public async getFilesPath(path: string): Promise { + if (this.getFilesPathCache.has(path)) { + return Array.from(this.getFilesPathCache.get(path)!) + } + + const filesPath = await this.getFilesPathImpl(path) + const pathSegmentsLength = path.split(PATH_SEP).length + + // Start iterating over each filePath + for (const filePath of filesPath) { + const relevantSegments = filePath + .split(PATH_SEP) + .slice(pathSegmentsLength) + + // Only cache the sub-paths for relevant files starting from the given path + const subPathSegments = [path] + for (const segment of relevantSegments) { + subPathSegments.push(segment) + const currentPath = subPathSegments.join(PATH_SEP) + if (!this.getFilesPathCache.has(currentPath)) { + this.getFilesPathCache.set(currentPath, new Set()) + } + this.getFilesPathCache.get(currentPath)!.add(filePath) + } + } + + // Store the full set of file paths for the given path in cache + this.getFilesPathCache.set(path, new Set(filesPath)) + + return filesPath + } + public async *getFilesFrom(path: string) { const filesPath = await this.getFilesPath(path) for (const filePath of filesPath) {