From f43cab8e018cd0d77f3f4564eed41753ae1945e5 Mon Sep 17 00:00:00 2001 From: kirillgroshkov Date: Sat, 31 Aug 2024 23:35:42 +0200 Subject: [PATCH] feat(deps): use exec2 --- scripts/eslintPrintConfig.script.ts | 6 +- src/build.util.ts | 69 ++++++------ src/lint.util.ts | 82 +++++--------- src/test.util.ts | 12 +- src/test/cfg/eslint.config.dump.json | 6 +- src/yarn.util.ts | 16 +-- yarn.lock | 162 +++++++++++++-------------- 7 files changed, 169 insertions(+), 184 deletions(-) diff --git a/scripts/eslintPrintConfig.script.ts b/scripts/eslintPrintConfig.script.ts index fdd5346..c74c46e 100644 --- a/scripts/eslintPrintConfig.script.ts +++ b/scripts/eslintPrintConfig.script.ts @@ -9,15 +9,13 @@ Changes are visible in git diff every time they are observed. */ import { _sortObjectDeep } from '@naturalcycles/js-lib' -import { execVoidCommandSync, fs2, runScript } from '@naturalcycles/nodejs-lib' +import { exec2, fs2, runScript } from '@naturalcycles/nodejs-lib' import { testDir } from '../src/paths' runScript(async () => { const outputPath = `${testDir}/cfg/eslint.config.dump.json` - execVoidCommandSync(`eslint --print-config src/index.ts > ${outputPath}`, [], { - shell: true, - }) + exec2.spawn(`eslint --print-config src/index.ts > ${outputPath}`) // execVoidCommandSync(`eslint --config ./eslint.config.js --parser-options=project:./scripts/tsconfig.json --print-config scripts/eslintPrintConfig.script.ts > ${outputPath}`, [], { // shell: true, diff --git a/src/build.util.ts b/src/build.util.ts index 2f49378..7a7392a 100644 --- a/src/build.util.ts +++ b/src/build.util.ts @@ -1,6 +1,5 @@ import fs from 'node:fs' -import { _since } from '@naturalcycles/js-lib' -import { boldGrey, dimGrey, execVoidCommand, fs2, kpySync } from '@naturalcycles/nodejs-lib' +import { exec2, fs2, kpySync } from '@naturalcycles/nodejs-lib' export async function buildEsmCjs(): Promise { // You cannot have a shared `tsconfig.prod.json` because of relative paths for `include` @@ -21,28 +20,34 @@ export async function buildEsmCjs(): Promise { const esmPath = esmExists ? TSCONF_ESM_PATH : TSCONF_PROD_PATH await Promise.all([ - execVoidCommand('tsc', [ - '-P', - cjsPath, - '--outDir', - './dist', - '--module', - 'nodenext', - '--moduleResolution', - 'nodenext', - ]), - execVoidCommand('tsc', [ - '-P', - esmPath, - '--outDir', - './dist-esm', - '--module', - 'esnext', - '--moduleResolution', - 'bundler', - '--declaration', - 'false', - ]), + exec2.spawnAsync('tsc', { + args: [ + '-P', + cjsPath, + '--outDir', + './dist', + '--module', + 'nodenext', + '--moduleResolution', + 'nodenext', + ], + shell: false, + }), + exec2.spawnAsync('tsc', { + args: [ + '-P', + esmPath, + '--outDir', + './dist-esm', + '--module', + 'esnext', + '--moduleResolution', + 'bundler', + '--declaration', + 'false', + ], + shell: false, + }), ]) } @@ -78,19 +83,19 @@ export async function runTSCInFolder(tsconfigPath: string, args: string[] = []): return } - const started = Date.now() - await execVoidCommand(`tsc`, ['-P', tsconfigPath, ...args]) - console.log(`${boldGrey(`tsc ${tsconfigPath}`)} ${dimGrey(`took ` + _since(started))}`) + await exec2.spawnAsync(`tsc`, { + args: ['-P', tsconfigPath, ...args], + shell: false, + }) } export async function runTSCProd(): Promise { const tsconfigPath = [`./tsconfig.prod.json`].find(p => fs.existsSync(p)) || 'tsconfig.json' - const args: string[] = ['-P', tsconfigPath] - - const started = Date.now() - await execVoidCommand(`tsc`, args) - console.log(`${boldGrey('tsc prod')} ${dimGrey(`took ` + _since(started))}`) + await exec2.spawnAsync(`tsc`, { + args: ['-P', tsconfigPath], + shell: false, + }) } export function buildCopy(): void { diff --git a/src/lint.util.ts b/src/lint.util.ts index 00a1aa3..14a86f4 100644 --- a/src/lint.util.ts +++ b/src/lint.util.ts @@ -1,18 +1,7 @@ -import cp, { type ExecSyncOptions } from 'node:child_process' +import cp from 'node:child_process' import fs from 'node:fs' import { _isTruthy, _since, _truncate } from '@naturalcycles/js-lib' -import { - boldGrey, - commitMessageToTitleMessage, - dimGrey, - execVoidCommand, - execVoidCommandSync, - getLastGitCommitMsg, - gitCommitAll, - gitCurrentBranchName, - gitPull, - gitPush, -} from '@naturalcycles/nodejs-lib' +import { boldGrey, dimGrey, exec2, git2 } from '@naturalcycles/nodejs-lib' import yargs from 'yargs' import { cfgDir, scriptsDir } from './paths' const { @@ -73,12 +62,13 @@ export async function lintAllCommand(): Promise { const gitStatusAfter = gitStatus() const hasChanges = gitStatusAfter !== gitStatusAtStart if (!hasChanges) return - const msg = 'style(ci): ' + _truncate(commitMessageToTitleMessage(getLastGitCommitMsg()), 60) + const msg = + 'style(ci): ' + _truncate(git2.commitMessageToTitleMessage(git2.getLastGitCommitMsg()), 60) // pull, commit, push changes - gitPull() - gitCommitAll(msg) - gitPush() + git2.pull() + git2.commitAll(msg) + git2.push() // fail on changes if (failOnChanges) { @@ -176,9 +166,8 @@ async function runESLint( ): Promise { if (!eslintConfigPath || !fs.existsSync(dir)) return // faster to bail-out like this - await execVoidCommand( - 'eslint', - [ + await exec2.spawnAsync('eslint', { + args: [ `--config`, eslintConfigPath, `${dir}/**/*.{${extensions.join(',')}}`, @@ -187,7 +176,8 @@ async function runESLint( `--report-unused-disable-directives`, // todo: unnecessary with flat, as it's defined in the config fix ? `--fix` : '', ].filter(Boolean), - ) + shell: false, + }) } const prettierPaths = [ @@ -206,13 +196,10 @@ export function runPrettier(): void { if (!prettierConfigPath) return // prettier --write 'src/**/*.{js,ts,css,scss,graphql}' - execVoidCommandSync('prettier', [ - `--write`, - `--log-level=warn`, - `--config`, - prettierConfigPath, - ...prettierPaths, - ]) + exec2.spawn('prettier', { + args: [`--write`, `--log-level=warn`, `--config`, prettierConfigPath, ...prettierPaths], + shell: false, + }) } const stylelintPaths = [ @@ -234,12 +221,12 @@ export function stylelintAll(): void { const config = [`./stylelint.config.js`].find(f => fs.existsSync(f)) if (!config) return - execVoidCommandSync( - 'stylelint', - [fix ? `--fix` : '', `--allow-empty-input`, `--config`, config, ...stylelintPaths].filter( + exec2.spawn('stylelint', { + args: [fix ? `--fix` : '', `--allow-empty-input`, `--config`, config, ...stylelintPaths].filter( Boolean, ), - ) + shell: false, + }) } export async function lintStagedCommand(): Promise { @@ -277,12 +264,14 @@ export function runCommitlintCommand(): void { const env = { ...process.env, // important to pass it through, to preserve $PATH - GIT_BRANCH: gitCurrentBranchName(), + GIT_BRANCH: git2.getCurrentBranchName(), } // await execWithArgs(`commitlint`, [`--edit`, editMsg, `--config`, config], { env }) - execSync(`node ./node_modules/.bin/commitlint --edit ${editMsg} --config ${config}`, { + exec2.spawn(`node ./node_modules/.bin/commitlint --edit ${editMsg} --config ${config}`, { env, + passProcessEnv: false, + forceColor: false, }) } @@ -297,9 +286,7 @@ function runActionLint(): void { if (!fs.existsSync('.github/workflows')) return if (canRunBinary('actionlint')) { - const started = Date.now() - execVoidCommandSync(`actionlint`) - console.log(`${boldGrey('actionlint')} ${dimGrey(`took ` + _since(started))}`) + exec2.spawn(`actionlint`) } else { console.log( `actionlint is not installed and won't be run.\nThis is how to install it: https://github.com/rhysd/actionlint/blob/main/docs/install.md`, @@ -323,12 +310,13 @@ export function runBiome(fix = true): void { const dirs = [`src`, `scripts`, `e2e`, `playwright`].filter(d => fs.existsSync(d)) - execVoidCommandSync( - `biome`, - [`lint`, fix && '--write', fix && '--unsafe', '--no-errors-on-unmatched', ...dirs].filter( + exec2.spawn(`biome`, { + args: [`lint`, fix && '--write', fix && '--unsafe', '--no-errors-on-unmatched', ...dirs].filter( _isTruthy, ), - ) + logFinish: false, + shell: false, + }) } function canRunBinary(name: string): boolean { @@ -347,15 +335,3 @@ function gitStatus(): string | undefined { }) } catch {} } - -function execSync(cmd: string, opt?: ExecSyncOptions): void { - try { - cp.execSync(cmd, { - ...opt, - encoding: 'utf8', - stdio: 'inherit', - }) - } catch { - process.exit(1) - } -} diff --git a/src/test.util.ts b/src/test.util.ts index 3f895dc..a95c010 100644 --- a/src/test.util.ts +++ b/src/test.util.ts @@ -1,6 +1,6 @@ import fs from 'node:fs' import { _range, _uniq } from '@naturalcycles/js-lib' -import { dimGrey, execVoidCommandSync, white } from '@naturalcycles/nodejs-lib' +import { dimGrey, exec2, white } from '@naturalcycles/nodejs-lib' import { cfgDir } from './paths' interface RunJestOpt { @@ -100,12 +100,18 @@ export function runJest(opt: RunJestOpt = {}): void { const shards = _range(1, totalShards + 1) for (const shard of shards) { - execVoidCommandSync('jest', _uniq([...args, `--shard=${shard}/${totalShards}`]), { + exec2.spawn('jest', { + args: _uniq([...args, `--shard=${shard}/${totalShards}`]), + logFinish: false, + shell: false, env, }) } } else { - execVoidCommandSync('jest', _uniq(args), { + exec2.spawn('jest', { + args: _uniq(args), + logFinish: false, + shell: false, env, }) } diff --git a/src/test/cfg/eslint.config.dump.json b/src/test/cfg/eslint.config.dump.json index 214b9f8..bdb9d51 100644 --- a/src/test/cfg/eslint.config.dump.json +++ b/src/test/cfg/eslint.config.dump.json @@ -8,7 +8,7 @@ "0": ".vue", "1": ".html" }, - "parser": "typescript-eslint/parser@8.0.1", + "parser": "typescript-eslint/parser@8.3.0", "project": "tsconfig.json" }, "sourceType": "module" @@ -18,13 +18,13 @@ }, "plugins": [ "@", - "@typescript-eslint:@typescript-eslint/eslint-plugin@8.0.1", + "@typescript-eslint:@typescript-eslint/eslint-plugin@8.3.0", "unicorn:eslint-plugin-unicorn@55.0.0", "vue:eslint-plugin-vue@9.27.0", "import-x", "simple-import-sort:eslint-plugin-simple-import-sort@12.1.1", "jsdoc", - "jest:eslint-plugin-jest@28.8.0" + "jest:eslint-plugin-jest@28.8.1" ], "processor": "vue/vue", "rules": { diff --git a/src/yarn.util.ts b/src/yarn.util.ts index 8f04c7a..6d54d3f 100644 --- a/src/yarn.util.ts +++ b/src/yarn.util.ts @@ -1,18 +1,18 @@ import fs from 'node:fs' -import { execVoidCommandSync } from '@naturalcycles/nodejs-lib' +import { exec2 } from '@naturalcycles/nodejs-lib' export function up(): void { - execVoidCommandSync('yarn', ['upgrade']) - execVoidCommandSync('yarn-deduplicate') - execVoidCommandSync('yarn') + exec2.spawn('yarn upgrade') + exec2.spawn('yarn-deduplicate') + exec2.spawn('yarn') if (fs.existsSync(`node_modules/patch-package`)) { - execVoidCommandSync('patch-package') + exec2.spawn('patch-package') } } export function upnc(): void { - execVoidCommandSync('yarn', ['upgrade', '--pattern', `@naturalcycles`]) - execVoidCommandSync('yarn-deduplicate') - execVoidCommandSync('yarn') + exec2.spawn('yarn upgrade --pattern @naturalcycles') + exec2.spawn('yarn-deduplicate') + exec2.spawn('yarn') } diff --git a/yarn.lock b/yarn.lock index ad358d4..57e9318 100644 --- a/yarn.lock +++ b/yarn.lock @@ -44,12 +44,12 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.25.0", "@babel/generator@^7.25.4", "@babel/generator@^7.7.2": - version "7.25.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.5.tgz#b31cf05b3fe8c32d206b6dad03bb0aacbde73450" - integrity sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w== +"@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.4" + "@babel/types" "^7.25.6" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" @@ -112,12 +112,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" @@ -129,12 +129,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.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.4.tgz#af4f2df7d02440286b7de57b1c21acfb2a6f257a" - integrity sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA== +"@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.4" + "@babel/types" "^7.25.6" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -165,11 +165,11 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-import-attributes@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz#b4f9ea95a79e6912480c4b626739f86a076624ca" - integrity sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A== + 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.7" + "@babel/helper-plugin-utils" "^7.24.8" "@babel/plugin-syntax-import-meta@^7.10.4": version "7.10.4" @@ -265,22 +265,22 @@ "@babel/types" "^7.25.0" "@babel/traverse@^7.24.7", "@babel/traverse@^7.25.2": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.4.tgz#648678046990f2957407e3086e97044f13c3e18e" - integrity sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg== + 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.4" - "@babel/parser" "^7.25.4" + "@babel/generator" "^7.25.6" + "@babel/parser" "^7.25.6" "@babel/template" "^7.25.0" - "@babel/types" "^7.25.4" + "@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.25.4", "@babel/types@^7.3.3": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.4.tgz#6bcb46c72fdf1012a209d016c07f769e10adcb5f" - integrity sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ== +"@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" @@ -346,12 +346,12 @@ integrity sha512-/PJ59vA1pnQeKahemaQf4Nyj7IKUvGQSc3Ze1uIGi+Wvr1xF7rGobSrAAG01T/gUDG21vkDsZYM03NAmPiVkqg== "@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" @@ -359,9 +359,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" @@ -407,14 +407,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": @@ -470,10 +470,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" @@ -508,17 +508,17 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@csstools/css-parser-algorithms@^3.0.0": +"@csstools/css-parser-algorithms@^3.0.1": version "3.0.1" resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.1.tgz#f14ade63bae5f6025ac85c7d03fe47a7ca0e58af" integrity sha512-lSquqZCHxDfuTg/Sk2hiS0mcSFCEBuj49JfzPHJogDBT0mGCyY5A1AQzBWngitrp7i1/HAZpIgzF/VjhOEIJIg== -"@csstools/css-tokenizer@^3.0.0": +"@csstools/css-tokenizer@^3.0.1": version "3.0.1" resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-3.0.1.tgz#9dd9b10084f3011290f96789598091e5bcb3c29a" integrity sha512-UBqaiu7kU0lfvaP982/o3khfXccVlHPWp0/vwwiIgDF0GmqqqxoiXC/6FCjlS9u92f7CoEz6nXKQnrn1kIAkOw== -"@csstools/media-query-list-parser@^3.0.0": +"@csstools/media-query-list-parser@^3.0.1": version "3.0.1" resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-3.0.1.tgz#9474e08e6d7767cf68c56bf1581b59d203360cb0" integrity sha512-HNo8gGD02kHmcbX6PvCoUuOQvn4szyB9ca63vZHKX5A81QytgDG4oxG4IaEfHTlEZSZ6MjPEMWIVU+zF2PZcgw== @@ -1017,9 +1017,9 @@ zod "^3.20.2" "@naturalcycles/nodejs-lib@^13.0.1": - version "13.32.0" - resolved "https://registry.yarnpkg.com/@naturalcycles/nodejs-lib/-/nodejs-lib-13.32.0.tgz#5bde75eb20cd521b203bb6022e4f6171e2f0349d" - integrity sha512-NorY8F9PS2S7wpzyh7novBh1KhcH/43OPzCubmZfl7/kICtW2kJmkbWs60OmoHVloNcJibwsKEXBBuNLz0P2dg== + version "13.34.5" + resolved "https://registry.yarnpkg.com/@naturalcycles/nodejs-lib/-/nodejs-lib-13.34.5.tgz#79b26d52a123c7557948d3de5ed7b216ab3f14a0" + integrity sha512-GU3bkeQFHg9+xPWwpXlOkq14ZdsDuANPHzuViFm9qysKq9FaLxo+Sj5LgZue5QNyepuKhmRreSasdpCm4tpAeg== dependencies: "@naturalcycles/js-lib" "^14.244.0" "@types/js-yaml" "^4.0.9" @@ -1216,9 +1216,9 @@ "@types/node" "*" "@types/node@*", "@types/node@^22.0.0", "@types/node@^22.1.0": - version "22.5.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.0.tgz#10f01fe9465166b4cab72e75f60d8b99d019f958" - integrity sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg== + 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.19.2" @@ -1664,9 +1664,9 @@ camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001646: - version "1.0.30001653" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001653.tgz#b8af452f8f33b1c77f122780a4aecebea0caca56" - integrity sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw== + 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" @@ -2058,9 +2058,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" @@ -2087,9 +2087,9 @@ eslint-import-resolver-node@^0.3.9: resolve "^1.22.4" eslint-plugin-import-x@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import-x/-/eslint-plugin-import-x-4.0.0.tgz#c367c27dfab458c92da59e3ff21768cad4e99a09" - integrity sha512-5bWZ+2p3DKlpLSP830cAUmRUoYEnnvuBmSOSlURffEUuXL68uQUX0v2JpoXxyoDRIQWApzbqhnFeHA0XoQWosA== + 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/typescript-estree" "^8.1.0" "@typescript-eslint/utils" "^8.1.0" @@ -2104,9 +2104,9 @@ eslint-plugin-import-x@^4.0.0: 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" @@ -2404,9 +2404,9 @@ file-entry-cache@^8.0.0: flat-cache "^4.0.0" file-entry-cache@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-9.0.0.tgz#4478e7ceaa5191fa9676a2daa7030211c31b1e7e" - integrity sha512-6MgEugi8p2tiUhqO7GnPsmbCCzj0YRCwwaTbpGRyKZesjRSzkqkAE9fPp7V2yMs5hwfgbQLgdvSSkGNg1s5Uvw== + version "9.1.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-9.1.0.tgz#2e66ad98ce93f49aed1b178c57b0b5741591e075" + integrity sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg== dependencies: flat-cache "^5.0.0" @@ -2516,9 +2516,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" @@ -3653,7 +3653,7 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^4.0.4, micromatch@^4.0.5, micromatch@^4.0.7, micromatch@~4.0.7: +micromatch@^4.0.4, micromatch@^4.0.5, micromatch@^4.0.8, micromatch@~4.0.7: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -4471,13 +4471,13 @@ stylelint-scss@^6.4.0: postcss-value-parser "^4.2.0" stylelint@^16.0.2: - version "16.8.2" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-16.8.2.tgz#7fda18b919a36e206e897417d4720baceb3af122" - integrity sha512-fInKATippQhcSm7AB+T32GpI+626yohrg33GkFT/5jzliUw5qhlwZq2UQQwgl3HsHrf09oeARi0ZwgY/UWEv9A== + version "16.9.0" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-16.9.0.tgz#81615c0608b9dc645486e08e35c6c9206e1ba132" + integrity sha512-31Nm3WjxGOBGpQqF43o3wO9L5AC36TPIe6030Lnm13H3vDMTcS21DrLh69bMX+DBilKqMMVLian4iG6ybBoNRQ== dependencies: - "@csstools/css-parser-algorithms" "^3.0.0" - "@csstools/css-tokenizer" "^3.0.0" - "@csstools/media-query-list-parser" "^3.0.0" + "@csstools/css-parser-algorithms" "^3.0.1" + "@csstools/css-tokenizer" "^3.0.1" + "@csstools/media-query-list-parser" "^3.0.1" "@csstools/selector-specificity" "^4.0.0" "@dual-bundle/import-meta-resolve" "^4.1.0" balanced-match "^2.0.0" @@ -4499,7 +4499,7 @@ stylelint@^16.0.2: known-css-properties "^0.34.0" mathml-tag-names "^2.1.3" meow "^13.2.0" - micromatch "^4.0.7" + micromatch "^4.0.8" normalize-path "^3.0.0" picocolors "^1.0.1" postcss "^8.4.41" @@ -4510,7 +4510,7 @@ stylelint@^16.0.2: resolve-from "^5.0.0" string-width "^4.2.3" strip-ansi "^7.1.0" - supports-hyperlinks "^3.0.0" + supports-hyperlinks "^3.1.0" svg-tags "^1.0.0" table "^6.8.2" write-file-atomic "^5.0.1" @@ -4536,7 +4536,7 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^3.0.0: +supports-hyperlinks@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz#b56150ff0173baacc15f21956450b61f2b18d3ac" integrity sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==