From 74c0186762d104a565a612a53a0ea3b65adfb767 Mon Sep 17 00:00:00 2001 From: kirillgroshkov Date: Sat, 31 Aug 2024 18:36:50 +0200 Subject: [PATCH] feat: exec2, git2 - grouped utility classes Replacing previous set of function with grouped utility classes. git2 is almost 1-1 as before, exec2 is fully rethought/refactored implementation. --- scripts/dot.script.js | 39 ++ scripts/exec2.script.ts | 40 ++ src/index.ts | 4 +- src/util/buildInfo.util.ts | 15 +- src/util/exec.util.ts | 79 --- src/util/exec2.test.ts | 77 +++ src/util/exec2.ts | 326 +++++++++++ src/util/git.util.ts | 113 ---- src/util/{git.util.test.ts => git2.test.ts} | 21 +- src/util/git2.ts | 105 ++++ yarn.lock | 581 +++++++++----------- 11 files changed, 876 insertions(+), 524 deletions(-) create mode 100644 scripts/dot.script.js create mode 100644 scripts/exec2.script.ts delete mode 100644 src/util/exec.util.ts create mode 100644 src/util/exec2.test.ts create mode 100644 src/util/exec2.ts delete mode 100644 src/util/git.util.ts rename src/util/{git.util.test.ts => git2.test.ts} (50%) create mode 100644 src/util/git2.ts diff --git a/scripts/dot.script.js b/scripts/dot.script.js new file mode 100644 index 0000000..0c2f8d3 --- /dev/null +++ b/scripts/dot.script.js @@ -0,0 +1,39 @@ +/* + +node scripts/dot.script.js +node scripts/dot.script.js --count 3 + + */ + +const { parseArgs } = require('node:util') +const { pDelay } = require('@naturalcycles/js-lib') +const { count: countStr, error } = parseArgs({ + options: { + count: { + type: 'string', + default: '3', + }, + error: { + type: 'boolean', + default: false, + }, + }, +}).values + +const count = Number(countStr) + +console.log({ + count, + error, +}) +;(async () => { + for (let i = 1; i <= count; i++) { + await pDelay(1000) + console.log(i) + } + if (error) { + console.log('the error') + return process.exit(1) + } + console.log('done') +})() diff --git a/scripts/exec2.script.ts b/scripts/exec2.script.ts new file mode 100644 index 0000000..517b401 --- /dev/null +++ b/scripts/exec2.script.ts @@ -0,0 +1,40 @@ +/* + +yarn tsn exec2.script.ts + + */ + +import { runScript } from '../src' +import { exec2 } from '../src/util/exec2' + +runScript(async () => { + // exec2.spawn({ + // cmd: 'node scripts/dot.script.js --error', + // log: true, + // }) + + // const s = exec2.exec({ + // cmd: 'node scripts/dot.script.js --error', + // log: true, + // }) + // console.log(s) + + // exec2.spawn({ + // cmd: 'git status', + // log: true, + // }) + // + // exec2.spawn({ + // cmd: 'git stat', + // log: true, + // }) + + // const s = exec2.exec({ + // cmd: 'git status', + // log: true, + // }) + const { stdout } = await exec2.spawnAsync('git status', { + log: true, + }) + console.log(stdout) +}) diff --git a/src/index.ts b/src/index.ts index 0c9f532..1c091b7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -72,8 +72,8 @@ export * from './stream/writable/writableVoid' export * from './string/inspect' export * from './util/buildInfo.util' export * from './util/env.util' -export * from './util/exec.util' -export * from './util/git.util' +export * from './util/exec2' +export * from './util/git2' export * from './util/lruMemoCache' export * from './util/zip.util' export * from './validation/ajv/ajv.util' diff --git a/src/util/buildInfo.util.ts b/src/util/buildInfo.util.ts index f753716..e4ee805 100644 --- a/src/util/buildInfo.util.ts +++ b/src/util/buildInfo.util.ts @@ -6,12 +6,7 @@ import { UnixTimestampNumber, } from '@naturalcycles/js-lib' import { fs2 } from '../fs/fs2' -import { - gitCurrentBranchName, - gitCurrentCommitSha, - gitCurrentCommitTimestamp, - gitCurrentRepoName, -} from './git.util' +import { git2 } from './git2' export interface GenerateBuildInfoOptions { /** @@ -24,10 +19,10 @@ export function generateBuildInfo(opt: GenerateBuildInfoOptions = {}): BuildInfo const now = localTime.orNow(opt.overrideTimestamp) const ts = now.unix - const rev = gitCurrentCommitSha() - const branchName = gitCurrentBranchName() - const repoName = gitCurrentRepoName() - const tsCommit = gitCurrentCommitTimestamp() + const rev = git2.gitCurrentCommitSha() + const branchName = git2.gitCurrentBranchName() + const repoName = git2.gitCurrentRepoName() + const tsCommit = git2.gitCurrentCommitTimestamp() const ver = [now.toStringCompact(), repoName, branchName, rev].join('_') diff --git a/src/util/exec.util.ts b/src/util/exec.util.ts deleted file mode 100644 index 0049684..0000000 --- a/src/util/exec.util.ts +++ /dev/null @@ -1,79 +0,0 @@ -import type { ProcessEnvOptions, SpawnOptions } from 'node:child_process' -import cp from 'node:child_process' - -export interface ExecOptions extends SpawnOptions { - /** - * Defaults to true. - * Set to false to skip logging. - */ - log?: boolean -} - -export async function execVoidCommand( - cmd: string, - args: string[] = [], - opt: ExecOptions = {}, -): Promise { - logExec(cmd, args, opt) - - await new Promise(resolve => { - const p = cp.spawn(cmd, [...args], { - stdio: 'inherit', - // shell: true, - ...opt, - env: { - ...process.env, - ...opt.env, - }, - }) - - p.on('close', code => { - if (code) { - console.log(`${cmd} exited with code ${code}`) - process.exit(code) - } - resolve() - }) - }) -} - -export function execVoidCommandSync(cmd: string, args: string[] = [], opt: ExecOptions = {}): void { - logExec(cmd, args, opt) - - const r = cp.spawnSync(cmd, [...args], { - encoding: 'utf8', - stdio: 'inherit', - // shell: true, // removing shell breaks executing `tsc` - ...opt, - env: { - ...process.env, - ...opt.env, - }, - }) - - if (r.status) { - console.log(`${cmd} exited with code ${r.status}`) - process.exit(r.status) - } - - if (r.error) { - console.log(r.error) - process.exit((r.error as NodeJS.ErrnoException).errno || 1) - } -} - -function logExec( - cmd: string, - args: string[] = [], - opt: ProcessEnvOptions & ExecOptions = {}, -): void { - if (opt.log === false) return - - const cmdline = [ - ...Object.entries(opt.env || {}).map(([k, v]) => [k, v].join('=')), - cmd, - ...args, - ].join(' ') - - console.log(cmdline) -} diff --git a/src/util/exec2.test.ts b/src/util/exec2.test.ts new file mode 100644 index 0000000..2726ea6 --- /dev/null +++ b/src/util/exec2.test.ts @@ -0,0 +1,77 @@ +import { _expectedErrorString, _stringify, pExpectedError } from '@naturalcycles/js-lib' +import { exec2, SpawnError } from './exec2' + +test('spawn ok', () => { + exec2.spawn('git status', { + log: true, + }) + // no error +}) + +test('spawn error', () => { + const err = _expectedErrorString(() => + exec2.spawn('git stat', { + log: true, + }), + ) + expect(err).toMatchInlineSnapshot(`"Error: spawn exited with code 1: git stat"`) +}) + +test('exec ok', () => { + const s = exec2.exec('git version', { + log: true, + }) + expect(s.startsWith('git version')).toBe(true) +}) + +test('exec error', () => { + const err = _expectedErrorString(() => + exec2.exec('git stat', { + log: true, + }), + ) + expect(err).toMatchInlineSnapshot(`"Error: exec exited with code 1: git stat"`) +}) + +test('spawnAsync ok', async () => { + const s = await exec2.spawnAsync('git version', { + log: true, + }) + expect(s.exitCode).toBe(0) + expect(s.stderr).toBe('') + expect(s.stdout.startsWith('git version')).toBe(true) +}) + +test('spawnAsync error with throw', async () => { + const err = await pExpectedError(exec2.spawnAsync('git stat'), SpawnError) + expect(_stringify(err)).toMatchInlineSnapshot( + `"SpawnError: spawnAsync exited with code 1: git stat"`, + ) + expect(err.data.exitCode).toBe(1) + expect(err.data.stdout).toBe('') + expect(err.data.stderr).toMatchInlineSnapshot(` +"git: 'stat' is not a git command. See 'git --help'. + +The most similar commands are + status + stage + stash" +`) +}) + +test('spawnAsync error without throw', async () => { + const { exitCode, stdout, stderr } = await exec2.spawnAsync('git stat', { + log: true, + throwOnNonZeroCode: false, + }) + expect(exitCode).toBe(1) + expect(stdout).toBe('') + expect(stderr).toMatchInlineSnapshot(` +"git: 'stat' is not a git command. See 'git --help'. + +The most similar commands are + status + stage + stash" +`) +}) diff --git a/src/util/exec2.ts b/src/util/exec2.ts new file mode 100644 index 0000000..aaaa0b3 --- /dev/null +++ b/src/util/exec2.ts @@ -0,0 +1,326 @@ +import cp from 'node:child_process' +import { + _since, + AnyObject, + AppError, + NumberOfMilliseconds, + UnixTimestampMillisNumber, +} from '@naturalcycles/js-lib' +import { dimGrey, white } from '../colors/colors' + +/** + * Set of utility functions to work with Spawn / Exec. + * + * How to decide between Spawn and Exec? + * + * Long-running job that prints output, and no need to return the output - use Spawn. + * + * Short-running job, no need to print the output, might want to return the output - use Exec. + * + * Need to both print and return the output - use SpawnAsync. + * + * *** + * + * Spawn is good for long-running large-output processes, that continuously output data. + * E.g running `jest`. + * + * Exec is the opposite - good for short-running processes that output small data. + * Exec allows to return the output as a string. + * Exec doesn't stream data during execution, so the output/error will only be printed + * at the end. + * Exec always uses the shell (there's no option to disable it). + */ +class Exec2 { + /** + * Advanced/async version of Spawn. + * Consider simpler `spawn` or `exec` first, which are also sync. + * + * spawnAsync features: + * + * 1. Async + * 2. Allows to collect the output AND print it while running. + * 3. Returns SpawnOutput with stdout, stderr and exitCode. + * 4. Allows to not throw on error, but just return SpawnOutput for further inspection. + * + * Defaults: + * + * shell: true + * printWhileRunning: true + * collectOutputWhileRunning: true + * throwOnNonZeroCode: true + * log: true + */ + async spawnAsync(cmd: string, opt: SpawnAsyncOptions = {}): Promise { + const started = Date.now() + this.logStart(cmd, opt) + const { + shell = true, + printWhileRunning = true, + collectOutputWhileRunning = true, + throwOnNonZeroCode = true, + cwd, + env, + } = opt + let stdout = '' + let stderr = '' + + return await new Promise((resolve, reject) => { + const p = cp.spawn(cmd, opt.args || [], { + shell, + cwd, + env, + // ...process.env, // not passing by default for security reasons + }) + + p.stdout.on('data', data => { + if (collectOutputWhileRunning) { + stdout += data.toString() + // console.log('stdout:', data.toString()) + } + if (printWhileRunning) { + process.stdout.write(data) + // console.log('stderr:', data.toString()) + } + }) + p.stderr.on('data', data => { + if (collectOutputWhileRunning) { + stderr += data.toString() + } + if (printWhileRunning) { + process.stderr.write(data) + } + }) + + p.on('close', code => { + this.logFinish(cmd, opt, started) + const exitCode = code || 0 + const o: SpawnOutput = { + exitCode, + stdout: stdout.trim(), + stderr: stderr.trim(), + } + if (throwOnNonZeroCode && code) { + return reject(new SpawnError(`spawnAsync exited with code ${code}: ${cmd}`, o)) + } + resolve(o) + }) + }) + } + + /** + * Reasons to use it: + * - Sync + * - Need to print output while running + * + * Limitations: + * - Cannot return stdout/stderr (use exec or spawnAsync for that) + * + * Defaults: + * + * shell: true + * log: true + */ + spawn(cmd: string, opt: SpawnOptions = {}): void { + const started = Date.now() + this.logStart(cmd, opt) + const { shell = true, cwd, env } = opt + + const r = cp.spawnSync(cmd, opt.args, { + encoding: 'utf8', + stdio: 'inherit', + shell, + cwd, + env, + // ...process.env, // not passing by default for security reasons + }) + + this.logFinish(cmd, opt, started) + + if (r.error) { + throw r.error + } + if (r.status) { + throw new Error(`spawn exited with code ${r.status}: ${cmd}`) + } + } + + /** + * Reasons to use it: + * + * - Sync + * - Need to return output + * + * Limitations: + * - Cannot print while running (use spawn or spawnAsync for that) + * + * Defaults: + * + * shell: true + * log: true + */ + exec(cmd: string, opt: ExecOptions = {}): string { + const started = Date.now() + this.logStart(cmd, opt) + const { cwd, env, timeout } = opt + + try { + return cp + .execSync(cmd, { + encoding: 'utf8', + // stdio: 'inherit', // no, otherwise we don't get the output returned + stdio: undefined, + // shell: undefined, + cwd, + timeout, + env, + // ...process.env, // not passing by default for security reasons + }) + .trim() + } catch (err) { + // Not logging stderr, as it's printed by execSync by default (somehow) + // stdout is not printed by execSync though, therefor we print it here + // if ((err as any).stderr) { + // process.stderr.write((err as any).stderr) + // } + if ((err as any).stdout) { + process.stdout.write((err as any).stdout) + } + throw new Error(`exec exited with code ${(err as any).status}: ${cmd}`) + } finally { + this.logFinish(cmd, opt, started) + } + } + + throwOnNonZeroExitCode(o: SpawnOutput): void { + if (o.exitCode) { + throw new SpawnError(`spawn exited with code ${o.exitCode}`, o) + } + } + + private logStart(cmd: string, opt: SpawnOptions | ExecOptions): void { + if (!opt.logStart && !opt.log) return + + console.log( + [ + dimGrey(...Object.entries(opt.env || {}).map(([k, v]) => [k, v].join('='))), + white(opt.name || cmd), + ...((!opt.name && (opt as SpawnOptions).args) || []), + ] + .filter(Boolean) + .join(' '), + ) + } + + private logFinish( + cmd: string, + opt: SpawnOptions | ExecOptions, + started: UnixTimestampMillisNumber, + ): void { + if (!opt.logFinish && !opt.log) return + + console.log([white(opt.name || cmd), dimGrey('took ' + _since(started))].join(' ')) + } +} + +export const exec2 = new Exec2() + +export class SpawnError extends AppError { + constructor(message: string, data: SpawnErrorData) { + super(message, data, { name: 'SpawnError' }) + } +} + +export interface SpawnErrorData extends SpawnOutput {} + +export interface SpawnOutput { + /** + * Exit code of the spawned process. + * 0 means success, anything else means failure. + */ + exitCode: number + stdout: string + stderr: string +} + +export interface SpawnAsyncOptions extends SpawnOptions { + /** + * Defaults to true. + * If true - prints both stdout and stderr to console while running, + * otherwise runs "silently". + * Returns SpawnOutput in the same way, regardless of `printWhileRunning` setting. + */ + printWhileRunning?: boolean + + /** + * Defaults to true. + * If true - collects stdout and stderr while running, and return it in the end. + * stdout/stderr are collected and returned regardless if it returns with error or not. + * On success - stdout/stderr are available from `SpawnOutput`. + * On error - stdout/stderr are available from `SpawnError.data`. + */ + collectOutputWhileRunning?: boolean + + /** + * Defaults to true. + * If true - throws SpawnError if non-zero code is returned. + * SpawnError conveniently contains .data.stdout and .data.strerr for inspection. + * If false - will not throw, but return SpawnOutput with stdout, stderr and exitCode. + */ + throwOnNonZeroCode?: boolean +} + +export interface SpawnOptions { + args?: string[] + /** + * Defaults to true. + */ + logStart?: boolean + /** + * Defaults to true. + */ + logFinish?: boolean + /** + * Defaults to true. + * Controls/overrides both logStart and logFinish simultaneously. + */ + log?: boolean + /** + * Defaults to true. + */ + shell?: boolean + + /** + * If specified - will be used as "command name" for logging purposes, + * instead of "cmd + args" + */ + name?: string + cwd?: string + + env?: AnyObject +} + +export interface ExecOptions { + /** + * Defaults to false. + */ + logStart?: boolean + /** + * Defaults to false. + */ + logFinish?: boolean + /** + * Defaults to false. + * Controls/overrides both logStart and logFinish simultaneously. + */ + log?: boolean + + /** + * If specified - will be used as "command name" for logging purposes, + * instead of "cmd + args" + */ + name?: string + cwd?: string + timeout?: NumberOfMilliseconds + + env?: AnyObject +} diff --git a/src/util/git.util.ts b/src/util/git.util.ts deleted file mode 100644 index f99bbdd..0000000 --- a/src/util/git.util.ts +++ /dev/null @@ -1,113 +0,0 @@ -import cp from 'node:child_process' -import path from 'node:path' -import type { UnixTimestampNumber } from '@naturalcycles/js-lib' -import { grey } from '../colors/colors' - -export function getLastGitCommitMsg(): string { - return execSync('git log -1 --pretty=%B') -} - -export function commitMessageToTitleMessage(msg: string): string { - const firstLine = msg.split('\n')[0]! - const [preTitle, title] = firstLine.split(': ') - return title || preTitle! -} - -export function gitHasUncommittedChanges(): boolean { - // git diff-index --quiet HEAD -- || echo "untracked" - try { - cp.execSync('git diff-index --quiet HEAD --', { - encoding: 'utf8', - }) - return false - } catch { - return true - } -} - -/** - * @returns true if there were changes - */ -export function gitCommitAll(msg: string): boolean { - // git commit -a -m "style(lint-all): $GIT_MSG" || true - const cmd = `git commit -a --no-verify -m "${msg}"` - // const cmd = `git` - // const args = ['commit', '-a', '--no-verify', '-m', msg] - - console.log(grey(cmd)) - - try { - cp.execSync(cmd, { - stdio: 'inherit', - }) - return true - } catch { - return false - } -} - -/** - * @returns true if there are not pushed commits. - */ -export function gitIsAhead(): boolean { - // ahead=`git rev-list HEAD --not --remotes | wc -l | awk '{print $1}'` - const cmd = `git rev-list HEAD --not --remotes | wc -l | awk '{print $1}'` - - const stdout = execSync(cmd) - - // console.log(`gitIsAhead: ${stdout}`) - return Number(stdout) > 0 -} - -export function gitPull(): void { - const cmd = 'git pull' - try { - cp.execSync(cmd, { - stdio: 'inherit', - }) - } catch {} -} - -export function gitPush(): void { - // git push --set-upstream origin $CIRCLE_BRANCH && echo "pushed, exiting" && exit 0 - let cmd = 'git push' - - const branchName = gitCurrentBranchName() - - if (branchName) { - cmd += ` --set-upstream origin ${branchName}` - } - - console.log(grey(cmd)) - - cp.execSync(cmd, { - stdio: 'inherit', - }) -} - -export function gitCurrentCommitSha(full = false): string { - const sha = execSync('git rev-parse HEAD') - return full ? sha : sha.slice(0, 7) -} - -export function gitCurrentCommitTimestamp(): UnixTimestampNumber { - return Number(execSync('git log -1 --format=%ct')) -} - -export function gitCurrentBranchName(): string { - return execSync('git rev-parse --abbrev-ref HEAD') -} - -export function gitCurrentRepoName(): string { - const originUrl = execSync('git config --get remote.origin.url') - return path.basename(originUrl, '.git') -} - -function execSync(cmd: string): string { - return cp - .execSync(cmd, { - encoding: 'utf8', - // stdio: 'inherit', // no, otherwise we don't get the output returned - }) - .trim() -} diff --git a/src/util/git.util.test.ts b/src/util/git2.test.ts similarity index 50% rename from src/util/git.util.test.ts rename to src/util/git2.test.ts index 0e60455..f7619cf 100644 --- a/src/util/git.util.test.ts +++ b/src/util/git2.test.ts @@ -1,37 +1,30 @@ -import { - commitMessageToTitleMessage, - getLastGitCommitMsg, - gitCurrentBranchName, - gitCurrentCommitTimestamp, - gitCurrentRepoName, - gitHasUncommittedChanges, -} from './git.util' +import { git2 } from './git2' test('getLastGitCommitMsg', async () => { - const msg = getLastGitCommitMsg() + const msg = git2.getLastGitCommitMsg() console.log({ msg }) expect(msg).toBeDefined() - const title = commitMessageToTitleMessage(msg) + const title = git2.commitMessageToTitleMessage(msg) console.log({ title }) expect(title).toBeDefined() }) test('gitHasUncommittedChanges', async () => { - const changes = gitHasUncommittedChanges() + const changes = git2.gitHasUncommittedChanges() console.log({ changes }) }) test('gitCurrentBranchName', async () => { - const branchName = gitCurrentBranchName() + const branchName = git2.gitCurrentBranchName() console.log(branchName) }) test('gitCurrentRepoName', async () => { - gitCurrentRepoName() + git2.gitCurrentRepoName() }) test('gitCurrentCommitTimestamp', async () => { - const ts = gitCurrentCommitTimestamp() + const ts = git2.gitCurrentCommitTimestamp() console.log(ts, new Date(ts * 1000)) }) diff --git a/src/util/git2.ts b/src/util/git2.ts new file mode 100644 index 0000000..3d3bc87 --- /dev/null +++ b/src/util/git2.ts @@ -0,0 +1,105 @@ +import cp from 'node:child_process' +import path from 'node:path' +import type { UnixTimestampNumber } from '@naturalcycles/js-lib' +import { grey } from '../colors/colors' +import { exec2 } from './exec2' + +/** + * Set of utility functions to work with git. + */ +class Git2 { + getLastGitCommitMsg(): string { + return exec2.exec('git log -1 --pretty=%B') + } + + commitMessageToTitleMessage(msg: string): string { + const firstLine = msg.split('\n')[0]! + const [preTitle, title] = firstLine.split(': ') + return title || preTitle! + } + + gitHasUncommittedChanges(): boolean { + // git diff-index --quiet HEAD -- || echo "untracked" + try { + cp.execSync('git diff-index --quiet HEAD --', { + encoding: 'utf8', + }) + return false + } catch { + return true + } + } + + /** + * Returns true if there were changes + */ + gitCommitAll(msg: string): boolean { + // git commit -a -m "style(lint-all): $GIT_MSG" || true + const cmd = `git commit -a --no-verify -m "${msg}"` + // const cmd = `git` + // const args = ['commit', '-a', '--no-verify', '-m', msg] + console.log(grey(cmd)) + + try { + cp.execSync(cmd, { + stdio: 'inherit', + }) + return true + } catch { + return false + } + } + + /** + * @returns true if there are not pushed commits. + */ + gitIsAhead(): boolean { + // ahead=`git rev-list HEAD --not --remotes | wc -l | awk '{print $1}'` + const cmd = `git rev-list HEAD --not --remotes | wc -l | awk '{print $1}'` + const stdout = exec2.exec(cmd) + // console.log(`gitIsAhead: ${stdout}`) + return Number(stdout) > 0 + } + + gitPull(): void { + const cmd = 'git pull' + try { + cp.execSync(cmd, { + stdio: 'inherit', + }) + } catch {} + } + + gitPush(): void { + // git push --set-upstream origin $CIRCLE_BRANCH && echo "pushed, exiting" && exit 0 + let cmd = 'git push' + + const branchName = this.gitCurrentBranchName() + + if (branchName) { + cmd += ` --set-upstream origin ${branchName}` + } + + exec2.spawn(cmd, { logStart: true }) + } + + gitCurrentCommitSha(full = false): string { + const sha = exec2.exec('git rev-parse HEAD') + return full ? sha : sha.slice(0, 7) + } + + gitCurrentCommitTimestamp(): UnixTimestampNumber { + return Number(exec2.exec('git log -1 --format=%ct')) + } + + gitCurrentBranchName(): string { + return exec2.exec('git rev-parse --abbrev-ref HEAD') + } + + gitCurrentRepoName(): string { + const originUrl = exec2.exec('git config --get remote.origin.url') + return path.basename(originUrl, '.git') + } +} + +export const git2 = new Git2() diff --git a/yarn.lock b/yarn.lock index cbeb24e..647ba69 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24,9 +24,9 @@ picocolors "^1.0.0" "@babel/compat-data@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.2.tgz#e41928bd33475305c586f6acbbb7e3ade7a6f7f5" - integrity sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ== + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.4.tgz#7d2a80ce229890edcf4cc259d4d696cb4dae2fcb" + integrity sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ== "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": version "7.25.2" @@ -49,12 +49,12 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.25.0", "@babel/generator@^7.7.2": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.0.tgz#f858ddfa984350bc3d3b7f125073c9af6988f18e" - integrity sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw== +"@babel/generator@^7.25.0", "@babel/generator@^7.25.6", "@babel/generator@^7.7.2": + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.6.tgz#0df1ad8cb32fe4d2b01d8bf437f153d19342a87c" + integrity sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw== dependencies: - "@babel/types" "^7.25.0" + "@babel/types" "^7.25.6" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" @@ -88,7 +88,7 @@ "@babel/helper-validator-identifier" "^7.24.7" "@babel/traverse" "^7.25.2" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.8.0": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.24.8", "@babel/helper-plugin-utils@^7.8.0": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878" integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== @@ -117,12 +117,12 @@ integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== "@babel/helpers@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.0.tgz#e69beb7841cb93a6505531ede34f34e6a073650a" - integrity sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw== + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.6.tgz#57ee60141829ba2e102f30711ffe3afab357cc60" + integrity sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q== dependencies: "@babel/template" "^7.25.0" - "@babel/types" "^7.25.0" + "@babel/types" "^7.25.6" "@babel/highlight@^7.24.7": version "7.24.7" @@ -134,12 +134,12 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.25.0", "@babel/parser@^7.25.3": - version "7.25.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.3.tgz#91fb126768d944966263f0657ab222a642b82065" - integrity sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.25.0", "@babel/parser@^7.25.6": + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.6.tgz#85660c5ef388cbbf6e3d2a694ee97a38f18afe2f" + integrity sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q== dependencies: - "@babel/types" "^7.25.2" + "@babel/types" "^7.25.6" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -155,14 +155,28 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.8.3": +"@babel/plugin-syntax-class-properties@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-import-meta@^7.8.3": +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-import-attributes@^7.24.7": + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz#6d4c78f042db0e82fd6436cd65fec5dc78ad2bde" + integrity sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-syntax-import-meta@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== @@ -183,7 +197,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== @@ -197,7 +211,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.8.3": +"@babel/plugin-syntax-numeric-separator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== @@ -225,7 +239,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-top-level-await@^7.8.3": +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== @@ -233,11 +254,11 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz#58d458271b4d3b6bb27ee6ac9525acbb259bad1c" - integrity sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA== + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz#04db9ce5a9043d9c635e75ae7969a2cd50ca97ff" + integrity sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.8" "@babel/template@^7.25.0", "@babel/template@^7.3.3": version "7.25.0" @@ -249,22 +270,22 @@ "@babel/types" "^7.25.0" "@babel/traverse@^7.24.7", "@babel/traverse@^7.25.2": - version "7.25.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.3.tgz#f1b901951c83eda2f3e29450ce92743783373490" - integrity sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ== + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.6.tgz#04fad980e444f182ecf1520504941940a90fea41" + integrity sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ== dependencies: "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.25.0" - "@babel/parser" "^7.25.3" + "@babel/generator" "^7.25.6" + "@babel/parser" "^7.25.6" "@babel/template" "^7.25.0" - "@babel/types" "^7.25.2" + "@babel/types" "^7.25.6" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.3.3": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.2.tgz#55fb231f7dc958cd69ea141a4c2997e819646125" - integrity sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.25.6", "@babel/types@^7.3.3": + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.6.tgz#893942ddb858f32ae7a004ec9d3a76b3463ef8e6" + integrity sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw== dependencies: "@babel/helper-string-parser" "^7.24.8" "@babel/helper-validator-identifier" "^7.24.7" @@ -335,12 +356,12 @@ integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== "@commitlint/cli@^19.0.0": - version "19.4.0" - resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-19.4.0.tgz#9f93d3ed07e531fcfa371015c8c87e0aa26d974f" - integrity sha512-sJX4J9UioVwZHq7JWM9tjT5bgWYaIN3rC4FP7YwfEwBYiIO+wMyRttRvQLNkow0vCdM0D67r9NEWU0Ui03I4Eg== + version "19.4.1" + resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-19.4.1.tgz#51dbd88750620c9e5fb6f5bc773872728a29674a" + integrity sha512-EerFVII3ZcnhXsDT9VePyIdCJoh3jEzygN1L37MjQXgPfGS6fJTWL/KHClVMod1d8w94lFC3l4Vh/y5ysVAz2A== dependencies: "@commitlint/format" "^19.3.0" - "@commitlint/lint" "^19.2.2" + "@commitlint/lint" "^19.4.1" "@commitlint/load" "^19.4.0" "@commitlint/read" "^19.4.0" "@commitlint/types" "^19.0.3" @@ -348,9 +369,9 @@ yargs "^17.0.0" "@commitlint/config-conventional@^19.0.0": - version "19.2.2" - resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-19.2.2.tgz#1f4e6975d428985deacf2b3ff6547e02c9302054" - integrity sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw== + version "19.4.1" + resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-19.4.1.tgz#c6f05d478c7576d5affff82d67d9ca37e96c94e6" + integrity sha512-D5S5T7ilI5roybWGc8X35OBlRXLAwuTseH1ro0XgqkOWrhZU8yOwBOslrNmSDlTXhXLq8cnfhQyC42qaUCzlXA== dependencies: "@commitlint/types" "^19.0.3" conventional-changelog-conventionalcommits "^7.0.2" @@ -396,14 +417,14 @@ "@commitlint/types" "^19.0.3" semver "^7.6.0" -"@commitlint/lint@^19.2.2": - version "19.2.2" - resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-19.2.2.tgz#57f69e24bd832a7dcce8ebf82d11e3bf03ccc2a9" - integrity sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA== +"@commitlint/lint@^19.4.1": + version "19.4.1" + resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-19.4.1.tgz#0760d34fcdaee0bf05befe666ca14c0fc1ecb57e" + integrity sha512-Ws4YVAZ0jACTv6VThumITC1I5AG0UyXMGua3qcf55JmXIXm/ejfaVKykrqx7RyZOACKVAs8uDRIsEsi87JZ3+Q== dependencies: "@commitlint/is-ignored" "^19.2.2" "@commitlint/parse" "^19.0.3" - "@commitlint/rules" "^19.0.3" + "@commitlint/rules" "^19.4.1" "@commitlint/types" "^19.0.3" "@commitlint/load@^19.4.0": @@ -459,10 +480,10 @@ lodash.mergewith "^4.6.2" resolve-from "^5.0.0" -"@commitlint/rules@^19.0.3": - version "19.0.3" - resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-19.0.3.tgz#de647a9055847cae4f3ae32b4798096b604584f3" - integrity sha512-TspKb9VB6svklxNCKKwxhELn7qhtY1rFF8ls58DcFd0F97XoG07xugPjjbVnLqmMkRjZDbDIwBKt9bddOfLaPw== +"@commitlint/rules@^19.4.1": + version "19.4.1" + resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-19.4.1.tgz#df15baad1092e2be1b39aa1aa7cc05e12f59f677" + integrity sha512-AgctfzAONoVxmxOXRyxXIq7xEPrd7lK/60h2egp9bgGUMZK9v0+YqLOA+TH+KqCa63ZoCr8owP2YxoSSu7IgnQ== dependencies: "@commitlint/ensure" "^19.0.3" "@commitlint/message" "^19.0.0" @@ -497,14 +518,14 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@es-joy/jsdoccomment@~0.46.0": - version "0.46.0" - resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.46.0.tgz#47a2ee4bfc0081f252e058272dfab680aaed464d" - integrity sha512-C3Axuq1xd/9VqFZpW4YAzOx5O9q/LP46uIQy/iNDpHG3fmPa6TBtvfglMCs3RBiBxAIi0Go97r8+jvTt55XMyQ== +"@es-joy/jsdoccomment@~0.48.0": + version "0.48.0" + resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.48.0.tgz#5d9dc1a295cf5d1ed224dffafb4800d5c7206c27" + integrity sha512-G6QUWIcC+KvSwXNsJyDTHvqUdNoAVJPPgkc3+Uk4WBKqZvoXhlvazOgm9aL0HwihJLQf0l+tOE2UFzXBqCqgDw== dependencies: comment-parser "1.4.1" esquery "^1.6.0" - jsdoc-type-pratt-parser "~4.0.0" + jsdoc-type-pratt-parser "~4.1.0" "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" @@ -518,10 +539,10 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== -"@eslint/config-array@^0.17.1": - version "0.17.1" - resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.17.1.tgz#d9b8b8b6b946f47388f32bedfd3adf29ca8f8910" - integrity sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA== +"@eslint/config-array@^0.18.0": + version "0.18.0" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.18.0.tgz#37d8fe656e0d5e3dbaea7758ea56540867fd074d" + integrity sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw== dependencies: "@eslint/object-schema" "^2.1.4" debug "^4.3.1" @@ -542,10 +563,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.9.0", "@eslint/js@^9.7.0": - version "9.9.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.9.0.tgz#d8437adda50b3ed4401964517b64b4f59b0e2638" - integrity sha512-hhetes6ZHP3BlXLxmd8K2SNgkhNSi+UcecbnwWKwpP7kyi/uC75DJ1lOOBO3xrC4jyojtGE3YxKZPHfk4yrgug== +"@eslint/js@9.9.1", "@eslint/js@^9.7.0": + version "9.9.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.9.1.tgz#4a97e85e982099d6c7ee8410aacb55adaa576f06" + integrity sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ== "@eslint/object-schema@^2.1.4": version "2.1.4" @@ -972,9 +993,9 @@ benchmark "^2.1.4" "@naturalcycles/cli@^1.0.0": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@naturalcycles/cli/-/cli-1.6.1.tgz#f3ca427f1295d681cc73146e6d982ac4f5dced63" - integrity sha512-cSEDVIxYLllS6LZ9eKGPEB3sq4cG6mQRQ3z1RqzRueDRRXuAhj8qPzTCKV09eIdVXvKfslCZvVdr1eUfaJuj8A== + version "1.7.0" + resolved "https://registry.yarnpkg.com/@naturalcycles/cli/-/cli-1.7.0.tgz#2df44b88a3b19a78a528d2def5d4009221b638e2" + integrity sha512-MKhIizahcWWsDfG83dAgkn5JyKcTMeaJKn3lq+a7pcSzk2T764hp4kRT77biGaWoMLl67+T5te7lp4d32AKKrw== dependencies: "@naturalcycles/nodejs-lib" "^13.0.1" dotenv "^16.0.0" @@ -983,10 +1004,11 @@ typescript "^5.0.2" "@naturalcycles/dev-lib@^15.0.3": - version "15.8.2" - resolved "https://registry.yarnpkg.com/@naturalcycles/dev-lib/-/dev-lib-15.8.2.tgz#4cc4b15831b1fa8e6a9f7fb8da4e1fd8d52b6557" - integrity sha512-+/Rtk45mMTQb94g3ujIYWzs+Mi+T8yi2dNi/VATlcKeX9zUv1t0Vqkf0pZj1+NSB4ATDQzsFKU1mEdG1ksW/Fg== + version "15.12.0" + resolved "https://registry.yarnpkg.com/@naturalcycles/dev-lib/-/dev-lib-15.12.0.tgz#c41fe7a16df8b8ae5b1d774fcf5ac558ae4dabc6" + integrity sha512-pbdM80ijOwwwTBmtCapH+WTPwCbU0anbybntls527Zxj/WrITzXXOpVSsusvJ4sPaW6TXXpwpee0gqOIb/XyOA== dependencies: + "@biomejs/biome" "^1.8.3" "@commitlint/cli" "^19.0.0" "@commitlint/config-conventional" "^19.0.0" "@eslint/js" "^9.7.0" @@ -998,14 +1020,13 @@ "@types/node" "^22.0.0" "@types/yargs" "^16.0.0" eslint "^9.0.0" - eslint-config-prettier "^9.0.0" - eslint-plugin-import-x "^3.1.0" + eslint-plugin-import-x "^4.0.0" eslint-plugin-jest "^28.0.0" eslint-plugin-jsdoc "^50.0.0" eslint-plugin-simple-import-sort "^12.1.1" eslint-plugin-unicorn "^55.0.0" eslint-plugin-vue "^9.0.0" - expect-type "^0.19.0" + expect-type "^0.20.0" globals "^15.8.0" husky "^9.0.2" jest-junit "^16.0.0" @@ -1020,9 +1041,9 @@ yargs "^17.0.0" "@naturalcycles/js-lib@^14.0.0", "@naturalcycles/js-lib@^14.244.0": - version "14.251.0" - resolved "https://registry.yarnpkg.com/@naturalcycles/js-lib/-/js-lib-14.251.0.tgz#704f82a077c63795ea18aea968e37362c87a4f13" - integrity sha512-O8PH9vCc7UeMPvKQuoXU/Y62T+GDBRKePSgIOiW3pectYoB3PqSVTcNsUI2XqW17h0F2BoZX0dB4vaHcm+K6+w== + version "14.252.0" + resolved "https://registry.yarnpkg.com/@naturalcycles/js-lib/-/js-lib-14.252.0.tgz#5e95d833a04bb88572d9f2018f6da4fa5f0db315" + integrity sha512-zg/Rl7eJn81mUKxLmopLuAXzpS6pybgqAmdO+44KnAeQJ1yQ5+3QWMugQTGkphAXNTbrtdw1WozfTxi3tm+acw== dependencies: tslib "^2.0.0" zod "^3.20.2" @@ -1227,11 +1248,11 @@ "@types/node" "*" "@types/node@*", "@types/node@^22.0.0", "@types/node@^22.1.0": - version "22.2.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.2.0.tgz#7cf046a99f0ba4d628ad3088cb21f790df9b0c5b" - integrity sha512-bm6EG6/pCpkxDf/0gDNDdtDILMOHgaQBVOJGdwsqClnxA3xL6jtMv76rLBc006RVMWbmaf0xbmom4Z/5o2nRkQ== + version "22.5.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.1.tgz#de01dce265f6b99ed32b295962045d10b5b99560" + integrity sha512-KkHsxej0j9IW1KKOOAA/XBA0z08UFSrRQHErzEfA3Vgq57eXIMYboIlHJuYIfd+lwCQjtKqUu3UnmKbtUc9yRw== dependencies: - undici-types "~6.13.0" + undici-types "~6.19.2" "@types/normalize-package-data@^2.4.0": version "2.4.4" @@ -1282,130 +1303,85 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@8.0.1": - version "8.0.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.0.1.tgz#5dbd1b498fdea83a16d292322d27d293ce156f94" - integrity sha512-5g3Y7GDFsJAnY4Yhvk8sZtFfV6YNF2caLzjrRPUBzewjPCaj0yokePB4LJSobyCzGMzjZZYFbwuzbfDHlimXbQ== +"@typescript-eslint/eslint-plugin@8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.3.0.tgz#726627fad16d41d20539637efee8c2329fe6be32" + integrity sha512-FLAIn63G5KH+adZosDYiutqkOkYEx0nvcwNNfJAf+c7Ae/H35qWwTYvPZUKFj5AS+WfHG/WJJfWnDnyNUlp8UA== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.0.1" - "@typescript-eslint/type-utils" "8.0.1" - "@typescript-eslint/utils" "8.0.1" - "@typescript-eslint/visitor-keys" "8.0.1" + "@typescript-eslint/scope-manager" "8.3.0" + "@typescript-eslint/type-utils" "8.3.0" + "@typescript-eslint/utils" "8.3.0" + "@typescript-eslint/visitor-keys" "8.3.0" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" ts-api-utils "^1.3.0" -"@typescript-eslint/parser@8.0.1": - version "8.0.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.0.1.tgz#eb0728147a3a79edf43dde84c797f117213bbfdb" - integrity sha512-5IgYJ9EO/12pOUwiBKFkpU7rS3IU21mtXzB81TNwq2xEybcmAZrE9qwDtsb5uQd9aVO9o0fdabFyAmKveXyujg== +"@typescript-eslint/parser@8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.3.0.tgz#3c72c32bc909cb91ce3569e7d11d729ad84deafa" + integrity sha512-h53RhVyLu6AtpUzVCYLPhZGL5jzTD9fZL+SYf/+hYOx2bDkyQXztXSc4tbvKYHzfMXExMLiL9CWqJmVz6+78IQ== dependencies: - "@typescript-eslint/scope-manager" "8.0.1" - "@typescript-eslint/types" "8.0.1" - "@typescript-eslint/typescript-estree" "8.0.1" - "@typescript-eslint/visitor-keys" "8.0.1" + "@typescript-eslint/scope-manager" "8.3.0" + "@typescript-eslint/types" "8.3.0" + "@typescript-eslint/typescript-estree" "8.3.0" + "@typescript-eslint/visitor-keys" "8.3.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83" - integrity sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA== +"@typescript-eslint/scope-manager@8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.3.0.tgz#834301d2e70baf924c26818b911bdc40086f7468" + integrity sha512-mz2X8WcN2nVu5Hodku+IR8GgCOl4C0G/Z1ruaWN4dgec64kDBabuXyPAr+/RgJtumv8EEkqIzf3X2U5DUKB2eg== dependencies: - "@typescript-eslint/types" "7.18.0" - "@typescript-eslint/visitor-keys" "7.18.0" + "@typescript-eslint/types" "8.3.0" + "@typescript-eslint/visitor-keys" "8.3.0" -"@typescript-eslint/scope-manager@8.0.1": - version "8.0.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.0.1.tgz#544259c29e1ebf65d30b6e99a9f420d98795a54e" - integrity sha512-NpixInP5dm7uukMiRyiHjRKkom5RIFA4dfiHvalanD2cF0CLUuQqxfg8PtEUo9yqJI2bBhF+pcSafqnG3UBnRQ== +"@typescript-eslint/type-utils@8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.3.0.tgz#c1ae6af8c21a27254321016b052af67ddb44a9ac" + integrity sha512-wrV6qh//nLbfXZQoj32EXKmwHf4b7L+xXLrP3FZ0GOUU72gSvLjeWUl5J5Ue5IwRxIV1TfF73j/eaBapxx99Lg== dependencies: - "@typescript-eslint/types" "8.0.1" - "@typescript-eslint/visitor-keys" "8.0.1" - -"@typescript-eslint/type-utils@8.0.1": - version "8.0.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.0.1.tgz#a613ee2dfeed4a9781300b5d326ec7cf946eed92" - integrity sha512-+/UT25MWvXeDX9YaHv1IS6KI1fiuTto43WprE7pgSMswHbn1Jm9GEM4Txp+X74ifOWV8emu2AWcbLhpJAvD5Ng== - dependencies: - "@typescript-eslint/typescript-estree" "8.0.1" - "@typescript-eslint/utils" "8.0.1" + "@typescript-eslint/typescript-estree" "8.3.0" + "@typescript-eslint/utils" "8.3.0" debug "^4.3.4" ts-api-utils "^1.3.0" -"@typescript-eslint/types@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9" - integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== - -"@typescript-eslint/types@8.0.1": - version "8.0.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.0.1.tgz#333e2f4c158952dbc8181a4ddcc6e49898a28918" - integrity sha512-PpqTVT3yCA/bIgJ12czBuE3iBlM3g4inRSC5J0QOdQFAn07TYrYEQBBKgXH1lQpglup+Zy6c1fxuwTk4MTNKIw== +"@typescript-eslint/types@8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.3.0.tgz#378e62447c2d7028236e55a81d3391026600563b" + integrity sha512-y6sSEeK+facMaAyixM36dQ5NVXTnKWunfD1Ft4xraYqxP0lC0POJmIaL/mw72CUMqjY9qfyVfXafMeaUj0noWw== -"@typescript-eslint/typescript-estree@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931" - integrity sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA== +"@typescript-eslint/typescript-estree@8.3.0", "@typescript-eslint/typescript-estree@^8.1.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.3.0.tgz#3e3d38af101ba61a8568f034733b72bfc9f176b9" + integrity sha512-Mq7FTHl0R36EmWlCJWojIC1qn/ZWo2YiWYc1XVtasJ7FIgjo0MVv9rZWXEE7IK2CGrtwe1dVOxWwqXUdNgfRCA== dependencies: - "@typescript-eslint/types" "7.18.0" - "@typescript-eslint/visitor-keys" "7.18.0" + "@typescript-eslint/types" "8.3.0" + "@typescript-eslint/visitor-keys" "8.3.0" debug "^4.3.4" - globby "^11.1.0" + fast-glob "^3.3.2" is-glob "^4.0.3" minimatch "^9.0.4" semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/typescript-estree@8.0.1": - version "8.0.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.1.tgz#64575ec7b77aedfe497acdfb2779ec942bb8d866" - integrity sha512-8V9hriRvZQXPWU3bbiUV4Epo7EvgM6RTs+sUmxp5G//dBGy402S7Fx0W0QkB2fb4obCF8SInoUzvTYtc3bkb5w== - dependencies: - "@typescript-eslint/types" "8.0.1" - "@typescript-eslint/visitor-keys" "8.0.1" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - minimatch "^9.0.4" - semver "^7.6.0" - ts-api-utils "^1.3.0" - -"@typescript-eslint/utils@8.0.1", "@typescript-eslint/utils@^6.0.0 || ^7.0.0 || ^8.0.0": - version "8.0.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.0.1.tgz#b48e3320c4f9011f97d25e0588b8c143adc38d2a" - integrity sha512-CBFR0G0sCt0+fzfnKaciu9IBsKvEKYwN9UZ+eeogK1fYHg4Qxk1yf/wLQkLXlq8wbU2dFlgAesxt8Gi76E8RTA== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "8.0.1" - "@typescript-eslint/types" "8.0.1" - "@typescript-eslint/typescript-estree" "8.0.1" - -"@typescript-eslint/utils@^7.4.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f" - integrity sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw== +"@typescript-eslint/utils@8.3.0", "@typescript-eslint/utils@^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/utils@^8.1.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.3.0.tgz#b10972319deac5959c7a7075d0cf2b5e1de7ec08" + integrity sha512-F77WwqxIi/qGkIGOGXNBLV7nykwfjLsdauRB/DOFPdv6LTF3BHHkBpq81/b5iMPSF055oO2BiivDJV4ChvNtXA== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "7.18.0" - "@typescript-eslint/types" "7.18.0" - "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/scope-manager" "8.3.0" + "@typescript-eslint/types" "8.3.0" + "@typescript-eslint/typescript-estree" "8.3.0" -"@typescript-eslint/visitor-keys@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7" - integrity sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg== - dependencies: - "@typescript-eslint/types" "7.18.0" - eslint-visitor-keys "^3.4.3" - -"@typescript-eslint/visitor-keys@8.0.1": - version "8.0.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.1.tgz#e5816803b4dad1de5e97f00df8dc15d0bcb49778" - integrity sha512-W5E+o0UfUcK5EgchLZsyVWqARmsM7v54/qEq6PY3YI5arkgmCzHiuk0zKSJJbm71V0xdRna4BGomkCTXz2/LkQ== +"@typescript-eslint/visitor-keys@8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.3.0.tgz#320d747d107af1eef1eb43fbc4ccdbddda13068b" + integrity sha512-RmZwrTbQ9QveF15m/Cl28n0LXD6ea2CjkhH5rQ55ewz3H24w+AMCJHPVYaZ8/0HoG8Z3cLLFFycRXxeO2tz9FA== dependencies: - "@typescript-eslint/types" "8.0.1" + "@typescript-eslint/types" "8.3.0" eslint-visitor-keys "^3.4.3" JSONStream@^1.3.5: @@ -1556,9 +1532,9 @@ array-union@^2.1.0: integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== async@^3.2.3: - version "3.2.5" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" - integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== asynckit@^0.4.0: version "0.4.0" @@ -1629,22 +1605,25 @@ babel-plugin-jest-hoist@^29.6.3: "@types/babel__traverse" "^7.0.6" babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + version "1.1.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz#9a929eafece419612ef4ae4f60b1862ebad8ef30" + integrity sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw== 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" babel-preset-jest@^29.6.3: version "29.6.3" @@ -1709,7 +1688,7 @@ browserslist@^4.23.1, browserslist@^4.23.3: node-releases "^2.0.18" update-browserslist-db "^1.1.0" -bs-logger@0.x: +bs-logger@^0.2.6: version "0.2.6" resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== @@ -1762,9 +1741,9 @@ camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001646: - version "1.0.30001651" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz#52de59529e8b02b1aedcaaf5c05d9e23c0c28138" - integrity sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg== + version "1.0.30001655" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz#0ce881f5a19a2dcfda2ecd927df4d5c1684b982f" + integrity sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg== chalk@^2.4.2: version "2.4.2" @@ -1814,9 +1793,9 @@ ci-info@^4.0.0: integrity sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg== cjs-module-lexer@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz#c485341ae8fd999ca4ee5af2d7a1c9ae01e0099c" - integrity sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q== + version "1.4.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.0.tgz#677de7ed7efff67cc40c9bf1897fea79d41b5215" + integrity sha512-N1NGmowPlGBLsOZLPvm48StN04V4YvQRL0i6b7ctrVY3epjP/ct7hFLOItz6pDIvRjwpfPxi52a2UWV2ziir8g== clean-regexp@^1.0.0: version "1.0.0" @@ -1972,9 +1951,9 @@ convert-source-map@^2.0.0: integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== core-js-compat@^3.37.0: - version "3.38.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.38.0.tgz#d93393b1aa346b6ee683377b0c31172ccfe607aa" - integrity sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A== + version "3.38.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.38.1.tgz#2bc7a298746ca5a7bcb9c164bcb120f2ebc09a09" + integrity sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw== dependencies: browserslist "^4.23.3" @@ -2049,7 +2028,7 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@~4.3.6: +debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.6, debug@~4.3.6: version "4.3.6" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== @@ -2132,9 +2111,9 @@ ejs@^3.1.10: jake "^10.8.5" electron-to-chromium@^1.5.4: - version "1.5.6" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.6.tgz#c81d9938b5a877314ad370feb73b4e5409b36abd" - integrity sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw== + version "1.5.13" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz#1abf0410c5344b2b829b7247e031f02810d442e6" + integrity sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q== emittery@^0.13.1: version "0.13.1" @@ -2142,9 +2121,9 @@ emittery@^0.13.1: integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== emoji-regex@^10.3.0: - version "10.3.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23" - integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw== + version "10.4.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.4.0.tgz#03553afea80b3975749cfcb36f776ca268e413d4" + integrity sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw== emoji-regex@^8.0.0: version "8.0.0" @@ -2174,9 +2153,9 @@ es-module-lexer@^1.5.3: integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== escalade@^3.1.1, escalade@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" - integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-string-regexp@^1.0.5: version "1.0.5" @@ -2193,11 +2172,6 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-config-prettier@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" - integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== - eslint-import-resolver-node@^0.3.9: version "0.3.9" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" @@ -2207,38 +2181,39 @@ eslint-import-resolver-node@^0.3.9: is-core-module "^2.13.0" resolve "^1.22.4" -eslint-plugin-import-x@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import-x/-/eslint-plugin-import-x-3.1.0.tgz#e1d132bde47c431b37f3b294d9ff813098375e7d" - integrity sha512-/UbPA+bYY7nIxcjL3kpcDY3UNdoLHFhyBFzHox2M0ypcUoueTn6woZUUmzzi5et/dXChksasYYFeKE2wshOrhg== +eslint-plugin-import-x@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import-x/-/eslint-plugin-import-x-4.1.1.tgz#715efe257eddeb5986c68cda73908d019c954280" + integrity sha512-dBEM8fACIFNt4H7GoOaRmnH6evJW6JSTJTYYgmRd3vI4geBTjgDM/JyUDKUwIw0HDSyI+u7Vs3vFRXUo/BOAtA== dependencies: - "@typescript-eslint/utils" "^7.4.0" + "@typescript-eslint/typescript-estree" "^8.1.0" + "@typescript-eslint/utils" "^8.1.0" debug "^4.3.4" doctrine "^3.0.0" eslint-import-resolver-node "^0.3.9" get-tsconfig "^4.7.3" is-glob "^4.0.3" minimatch "^9.0.3" - semver "^7.6.0" + semver "^7.6.3" stable-hash "^0.0.4" - tslib "^2.6.2" + tslib "^2.6.3" eslint-plugin-jest@^28.0.0: - version "28.8.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-28.8.0.tgz#54f597b5a3295ad04ec946baa245ad02b9b2bca0" - integrity sha512-Tubj1hooFxCl52G4qQu0edzV/+EZzPUeN8p2NnW5uu4fbDs+Yo7+qDVDc4/oG3FbCqEBmu/OC3LSsyiU22oghw== + version "28.8.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-28.8.1.tgz#3cf7d2752350bd711ca0de000b048a5464b52e0b" + integrity sha512-G46XMyYu6PtSNJUkQ0hsPjzXYpzq/O4vpCciMizTKRJG8kNsRreGoMRDG6H9FIB/xVgfFuclVnuX4XRvFUzrZQ== dependencies: "@typescript-eslint/utils" "^6.0.0 || ^7.0.0 || ^8.0.0" eslint-plugin-jsdoc@^50.0.0: - version "50.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.0.0.tgz#0d064e14e1a8a3624c0474359fc51325b38b0fc9" - integrity sha512-czyJ5F7/qY2LIhUD5Bl6q1CCZ8mjvfEA9HQN5nvIp/Pb8VLIlUNd+DMZdA2OKN74QQMS3pobC06hFqAOJyOv5Q== + version "50.2.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.2.2.tgz#151e63c8bc245ea8b2357d4229392a5b993827b0" + integrity sha512-i0ZMWA199DG7sjxlzXn5AeYZxpRfMJjDPUl7lL9eJJX8TPRoIaxJU4ys/joP5faM5AXE1eqW/dslCj3uj4Nqpg== dependencies: - "@es-joy/jsdoccomment" "~0.46.0" + "@es-joy/jsdoccomment" "~0.48.0" are-docs-informative "^0.0.2" comment-parser "1.4.1" - debug "^4.3.5" + debug "^4.3.6" escape-string-regexp "^4.0.0" espree "^10.1.0" esquery "^1.6.0" @@ -2315,15 +2290,15 @@ eslint-visitor-keys@^4.0.0: integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw== eslint@^9.0.0: - version "9.9.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.9.0.tgz#8d214e69ae4debeca7ae97daebbefe462072d975" - integrity sha512-JfiKJrbx0506OEerjK2Y1QlldtBxkAlLxT5OEcRF8uaQ86noDe2k31Vw9rnSWv+MXZHj7OOUV/dA0AhdLFcyvA== + version "9.9.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.9.1.tgz#147ac9305d56696fb84cf5bdecafd6517ddc77ec" + integrity sha512-dHvhrbfr4xFQ9/dq+jcVneZMyRYLjggWjk6RVsIiHsP8Rz6yZ8LvZ//iU4TrZF+SXWG+JkNF2OyiZRvzgRDqMg== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.11.0" - "@eslint/config-array" "^0.17.1" + "@eslint/config-array" "^0.18.0" "@eslint/eslintrc" "^3.1.0" - "@eslint/js" "9.9.0" + "@eslint/js" "9.9.1" "@humanwhocodes/module-importer" "^1.0.1" "@humanwhocodes/retry" "^0.3.0" "@nodelib/fs.walk" "^1.2.8" @@ -2441,10 +2416,10 @@ exit@^0.1.2: resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== -expect-type@^0.19.0: - version "0.19.0" - resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-0.19.0.tgz#72eca0ea90f34fa793c70f44adc1974c0e031914" - integrity sha512-piv9wz3IrAG4Wnk2A+n2VRCHieAyOSxrRLU872Xo6nyn39kYXKDALk4OcqnvLRnFvkz659CnWC8MWZLuuQnoqg== +expect-type@^0.20.0: + version "0.20.0" + resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-0.20.0.tgz#be0db937492df1db368ad772b977336f3395a152" + integrity sha512-uHaC9LYNv6BcW+8SvXcwUUDCrrUxt3GSa61DFvTHj8JC+M0hekMFBwMlCarLQDk5bbpZ2vStpnQPIwRuV98YMw== expect@^29.0.0, expect@^29.7.0: version "29.7.0" @@ -2471,7 +2446,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.11, fast-glob@^3.2.9: +fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -2625,9 +2600,9 @@ get-stream@^8.0.1: integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== get-tsconfig@^4.7.3: - version "4.7.6" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.6.tgz#118fd5b7b9bae234cc7705a00cd771d7eb65d62a" - integrity sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA== + version "4.8.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.8.0.tgz#125dc13a316f61650a12b20c97c11b8fd996fedd" + integrity sha512-Pgba6TExTZ0FJAn1qkJAjIeKoDJ3CsI2ChuLohJnZl/tTU8MVrq3b+2t5UOPfRa4RMsorClBjJALkJUMjG1PAw== dependencies: resolve-pkg-maps "^1.0.0" @@ -2695,7 +2670,7 @@ globals@^15.7.0, globals@^15.8.0: resolved "https://registry.yarnpkg.com/globals/-/globals-15.9.0.tgz#e9de01771091ffbc37db5714dab484f9f69ff399" integrity sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA== -globby@^11.0.0, globby@^11.1.0: +globby@^11.0.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -2779,14 +2754,14 @@ human-signals@^5.0.0: integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== husky@^9.0.2: - version "9.1.4" - resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.4.tgz#926fd19c18d345add5eab0a42b2b6d9a80259b34" - integrity sha512-bho94YyReb4JV7LYWRWxZ/xr6TtOTt8cMfmQ39MQYJ7f/YE268s3GdghGwi+y4zAeqewE5zYLvuhV0M0ijsDEA== + version "9.1.5" + resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.5.tgz#2b6edede53ee1adbbd3a3da490628a23f5243b83" + integrity sha512-rowAVRUBfI0b4+niA4SJMhfQwc107VLkBUgEYYAOQAbqDCnra1nYh83hF/MDmhYs9t9n1E3DuKOrs2LYNC+0Ag== hyperid@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/hyperid/-/hyperid-3.2.0.tgz#b3b160a27f5791cdc8b0557f7bd2ef0616c6c218" - integrity sha512-PdTtDo+Rmza9nEhTunaDSUKwbC69TIzLEpZUwiB6f+0oqmY0UPfhyHCPt6K1NQ4WFv5yJBTG5vELztVWP+nEVQ== + version "3.3.0" + resolved "https://registry.yarnpkg.com/hyperid/-/hyperid-3.3.0.tgz#2042bb296b7f1d5ba0797a5705469af0899c8556" + integrity sha512-7qhCVT4MJIoEsNcbhglhdmBKb09QtcmJNiIQGq7js/Khf5FtQQ9bzcAuloeqBeee7XD7JqDeve9KNlQya5tSGQ== dependencies: buffer "^5.2.1" uuid "^8.3.2" @@ -2805,9 +2780,9 @@ ieee754@^1.1.13: integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^5.2.0, ignore@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" @@ -2871,9 +2846,9 @@ is-builtin-module@^3.2.1: builtin-modules "^3.3.0" is-core-module@^2.13.0: - version "2.15.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.0.tgz#71c72ec5442ace7e76b306e9d48db361f22699ea" - integrity sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA== + version "2.15.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" + integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== dependencies: hasown "^2.0.2" @@ -3420,10 +3395,10 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsdoc-type-pratt-parser@~4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz#136f0571a99c184d84ec84662c45c29ceff71114" - integrity sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ== +jsdoc-type-pratt-parser@~4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz#ff6b4a3f339c34a6c188cbf50a16087858d22113" + integrity sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg== jsesc@^2.5.1: version "2.5.2" @@ -3544,9 +3519,9 @@ lines-and-columns@^1.1.6: integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== lint-staged@^15.0.1: - version "15.2.8" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-15.2.8.tgz#5e19eb7b4dbb922f56fafb4635b44ee3c92f7322" - integrity sha512-PUWFf2zQzsd9EFU+kM1d7UP+AZDbKFKuj+9JNVTBkhUFhbg4MAt6WfyMMwBfM4lYqd4D2Jwac5iuTu9rVj4zCQ== + version "15.2.9" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-15.2.9.tgz#bf70d40b6b192df6ad756fb89822211615e0f4da" + integrity sha512-BZAt8Lk3sEnxw7tfxM7jeZlPRuT4M68O0/CwZhhaw6eeWu0Lz5eERE3m386InivXB64fp/mDID452h48tvKlRQ== dependencies: chalk "~5.3.0" commander "~12.1.0" @@ -3647,7 +3622,7 @@ lodash.kebabcase@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== -lodash.memoize@4.x: +lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== @@ -3722,7 +3697,7 @@ make-dir@^4.0.0: dependencies: semver "^7.5.3" -make-error@1.x, make-error@^1.1.1: +make-error@^1.1.1, make-error@^1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== @@ -3755,9 +3730,9 @@ merge2@^1.3.0, merge2@^1.4.1: integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^4.0.4, micromatch@^4.0.5, micromatch@~4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" - integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: braces "^3.0.3" picomatch "^2.3.1" @@ -3821,12 +3796,11 @@ minimist@^1.1.0, minimist@^1.2.8: integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== mitm@^1.7.0: - version "1.7.2" - resolved "https://registry.yarnpkg.com/mitm/-/mitm-1.7.2.tgz#d079c44c763a333b15a0f7bfd02446fb8dbbe8e8" - integrity sha512-SuiJbc5xisP/iUYvsKAvrvPeoyJQbYI3WOfnp8A7XHDn4wkdtmGZe2ZTFXIo3K1of05oxUiaJIK+GoAU5KgFOw== + version "1.7.3" + resolved "https://registry.yarnpkg.com/mitm/-/mitm-1.7.3.tgz#07692631f86cc485bca2be51d973440d178ca4de" + integrity sha512-linie/mGisDH73C7aiW6JmstA5XskXd15JBJAEeNQBdH3/L0dJdE/yZ+rw/y2zT7Fcib5KAnL5OvxYOOFQbsgw== dependencies: semver ">= 5 < 6" - underscore ">= 1.1.6 < 1.14" mkdirp@^1.0.4: version "1.0.4" @@ -4099,9 +4073,9 @@ pluralize@^8.0.0: integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== postcss-selector-parser@^6.0.15: - version "6.1.1" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz#5be94b277b8955904476a2400260002ce6c56e38" - integrity sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg== + version "6.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" + integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -4419,9 +4393,9 @@ spdx-expression-parse@^4.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.18" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz#22aa922dcf2f2885a6494a261f2d8b75345d0326" - integrity sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ== + version "3.0.20" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz#e44ed19ed318dd1e5888f93325cee800f0f51b89" + integrity sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw== split2@^4.0.0: version "4.2.0" @@ -4644,19 +4618,19 @@ ts-api-utils@^1.3.0: integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== ts-jest@^29.0.0: - version "29.2.4" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.2.4.tgz#38ccf487407d7a63054a72689f6f99b075e296e5" - integrity sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw== + version "29.2.5" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.2.5.tgz#591a3c108e1f5ebd013d3152142cb5472b399d63" + integrity sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA== dependencies: - bs-logger "0.x" + bs-logger "^0.2.6" ejs "^3.1.10" - fast-json-stable-stringify "2.x" + fast-json-stable-stringify "^2.1.0" jest-util "^29.0.0" json5 "^2.2.3" - lodash.memoize "4.x" - make-error "1.x" - semver "^7.5.3" - yargs-parser "^21.0.1" + lodash.memoize "^4.1.2" + make-error "^1.3.6" + semver "^7.6.3" + yargs-parser "^21.1.1" ts-node@^10.0.0: version "10.9.2" @@ -4677,10 +4651,10 @@ ts-node@^10.0.0: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tslib@^2.0.0, tslib@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" - integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== +tslib@^2.0.0, tslib@^2.6.2, tslib@^2.6.3: + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -4715,28 +4689,23 @@ type-fest@^0.8.1: integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== typescript-eslint@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.0.1.tgz#e812ce16e9332c6c81cfa2f17aecf99b74473da7" - integrity sha512-V3Y+MdfhawxEjE16dWpb7/IOgeXnLwAEEkS7v8oDqNcR1oYlqWhGH/iHqHdKVdpWme1VPZ0SoywXAkCqawj2eQ== + version "8.3.0" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.3.0.tgz#f4d9c5ba71f6bead03ec41ecb2bece1de511e49f" + integrity sha512-EvWjwWLwwKDIJuBjk2I6UkV8KEQcwZ0VM10nR1rIunRDIP67QJTZAHBXTX0HW/oI1H10YESF8yWie8fRQxjvFA== dependencies: - "@typescript-eslint/eslint-plugin" "8.0.1" - "@typescript-eslint/parser" "8.0.1" - "@typescript-eslint/utils" "8.0.1" + "@typescript-eslint/eslint-plugin" "8.3.0" + "@typescript-eslint/parser" "8.3.0" + "@typescript-eslint/utils" "8.3.0" typescript@^5.0.2: version "5.5.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== -"underscore@>= 1.1.6 < 1.14": - version "1.13.7" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.7.tgz#970e33963af9a7dda228f17ebe8399e5fbe63a10" - integrity sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g== - -undici-types@~6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.13.0.tgz#e3e79220ab8c81ed1496b5812471afd7cf075ea5" - integrity sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg== +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== unicorn-magic@^0.1.0: version "0.1.0" @@ -4897,7 +4866,7 @@ yaml@~2.5.0: resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.5.0.tgz#c6165a721cf8000e91c36490a41d7be25176cf5d" integrity sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw== -yargs-parser@^21.0.1, yargs-parser@^21.1.1: +yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==