From a6a7568ed9be713cc738b4b6997ec0739f70fb54 Mon Sep 17 00:00:00 2001 From: jdalton Date: Sun, 23 Nov 2025 22:49:37 -0600 Subject: [PATCH 1/3] style: apply code formatting with biome and oxlint - Format all .mjs and .mts files with biome - Add eslint.config.js from v1.x branch - Format 66 files across packages and scripts # Conflicts: # packages/cli/test/unit/commands/manifest/handle-manifest-setup.test.mts --- eslint.config.js | 340 ++ .../bootstrap/.config/esbuild.npm.config.mjs | 11 +- .../bootstrap/.config/esbuild.sea.config.mjs | 11 +- packages/bootstrap/scripts/build.mjs | 12 +- packages/bootstrap/src/bootstrap-npm.mts | 8 +- packages/bootstrap/src/bootstrap-sea.mts | 14 +- .../bootstrap/src/shared/bootstrap-shared.mjs | 32 +- .../esbuild-plugin-dead-code-elimination.mjs | 5 +- .../lib/esbuild-plugin-unicode-transform.mjs | 2 +- packages/build-infra/lib/extraction-cache.mjs | 4 +- packages/build-infra/lib/script-runner.mjs | 7 +- packages/build-infra/lib/setup-helpers.mjs | 34 +- .../lib/unicode-property-escape-transform.mjs | 211 +- .../.config/esbuild.config.mjs | 3 +- .../.config/esbuild.inject.config.mjs | 3 +- packages/cli-with-sentry/scripts/build.mjs | 18 +- .../cli-with-sentry/scripts/compress-cli.mjs | 3 +- .../scripts/verify-package.mjs | 3 +- .../cli-with-sentry/test/package.test.mjs | 32 +- packages/cli/package.json | 1 + packages/cli/scripts/claude.mjs | 2 +- packages/cli/scripts/compress-cli.mjs | 3 +- packages/cli/scripts/cover.mjs | 21 +- packages/cli/scripts/e2e.mjs | 3 +- packages/cli/scripts/integration.mjs | 3 +- packages/cli/scripts/utils/patches.mjs | 3 +- packages/cli/src/cli-entry.mts | 12 +- .../cli/src/commands/scan/cmd-scan-create.mts | 1 + .../commands/scan/handle-create-new-scan.mts | 75 +- .../src/commands/scan/handle-scan-reach.mts | 31 +- packages/cli/src/constants/env.mts | 3 + .../src/env/socket-cli-skip-update-check.mts | 9 + packages/cli/src/utils/fs/glob.mts | 92 +- packages/cli/src/utils/fs/path-resolve.mts | 11 +- packages/cli/src/utils/memoization.mts | 7 +- packages/cli/src/utils/update/checker.mts | 127 +- .../audit-log/handle-audit-log.test.mts | 8 +- .../config/handle-config-auto.test.mts | 6 - .../config/handle-config-get.test.mts | 2 - .../config/handle-config-set.test.mts | 6 - .../config/handle-config-unset.test.mts | 3 - .../unit/commands/fix/ghsa-tracker.test.mts | 13 +- .../manifest/handle-manifest-conda.test.mts | 22 +- .../repository/fetch-list-repos.test.mts | 2 +- .../scan/handle-create-new-scan.test.mts | 34 +- .../commands/scan/handle-delete-scan.test.mts | 16 +- .../commands/scan/handle-list-scans.test.mts | 32 +- .../scan/handle-scan-metadata.test.mts | 40 +- .../commands/scan/handle-scan-view.test.mts | 12 +- packages/cli/tsconfig.json | 9 +- packages/cli/vitest.e2e.config.mts | 4 +- packages/socket/scripts/build.mjs | 14 +- .../scripts/esbuild.bootstrap.config.mjs | 4 +- packages/socket/scripts/verify-package.mjs | 3 +- packages/socket/test/bootstrap.test.mjs | 44 +- pnpm-lock.yaml | 4327 ++++++++++++----- scripts/apply-socket-mods.mjs | 16 +- scripts/build-all-from-source.mjs | 13 +- scripts/build-binaries.mjs | 43 +- scripts/build.mjs | 104 +- scripts/check-build-deps.mjs | 39 +- scripts/check-version-consistency.mjs | 7 +- scripts/check.mjs | 24 +- scripts/clean-cache.mjs | 30 +- scripts/clean.mjs | 4 +- scripts/create-sea-symlinks.mjs | 3 +- scripts/fix.mjs | 1 - scripts/generate-node-patches.mjs | 13 +- scripts/lib/build-exec.mjs | 1 - scripts/lib/build-helpers.mjs | 26 +- scripts/lib/build-output.mjs | 1 - scripts/lib/patch-validator.mjs | 3 +- scripts/lint.mjs | 7 +- scripts/llm/compute-embeddings-pure.mjs | 2 +- scripts/llm/download-minilm.mjs | 3 +- scripts/llm/generate-semantic-index.mjs | 6 +- scripts/llm/generate-skill-embeddings.mjs | 2 +- scripts/optimize-binary-size.mjs | 65 +- scripts/prepare-package-for-publish.mjs | 5 +- scripts/prepublish-socketbin.mjs | 17 +- scripts/publish.mjs | 15 +- scripts/regenerate-node-patches.mjs | 12 +- scripts/setup-build-toolchain.mjs | 54 +- scripts/setup-monorepo.mjs | 4 +- scripts/setup.mjs | 57 +- scripts/test-monorepo.mjs | 26 +- scripts/test-with-custom-node.mjs | 1 - scripts/test.mjs | 22 +- scripts/type.mjs | 23 +- scripts/update-socketbin-versions.mjs | 5 +- scripts/update.mjs | 2 +- scripts/utils/changed-test-mapper.mjs | 5 +- scripts/utils/monorepo-helper.mjs | 31 +- scripts/validate-bundle-deps.mjs | 6 +- scripts/validate-file-count.mjs | 92 +- scripts/validate-file-size.mjs | 97 +- scripts/validate-markdown-filenames.mjs | 95 +- scripts/validate-no-cdn-refs.mjs | 2 +- scripts/validate-no-link-deps.mjs | 1 - scripts/verify-node-build.mjs | 17 +- scripts/wasm/benchmark-build.mjs | 11 +- scripts/wasm/build-model-packages.mjs | 28 +- scripts/wasm/build-unified-wasm.mjs | 86 +- scripts/wasm/check-rust-toolchain.mjs | 1 - scripts/wasm/download-models.mjs | 12 +- scripts/wasm/optimize-embedded-wasm.mjs | 22 +- vitest.config.mts | 2 +- 107 files changed, 4701 insertions(+), 2221 deletions(-) create mode 100644 eslint.config.js create mode 100644 packages/cli/src/env/socket-cli-skip-update-check.mts diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 000000000..51b97172c --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,340 @@ +'use strict' + +const path = require('node:path') + +const { + convertIgnorePatternToMinimatch, + includeIgnoreFile, +} = require('@eslint/compat') +const js = require('@eslint/js') +const tsParser = require('@typescript-eslint/parser') +const { + createTypeScriptImportResolver, +} = require('eslint-import-resolver-typescript') +const importXPlugin = require('eslint-plugin-import-x') +const nodePlugin = require('eslint-plugin-n') +const sortDestructureKeysPlugin = require('eslint-plugin-sort-destructure-keys') +const unicornPlugin = require('eslint-plugin-unicorn') +const globals = require('globals') +const tsEslint = require('typescript-eslint') + +const constants = require('@socketsecurity/registry/lib/constants') +const { BIOME_JSON, GITIGNORE, LATEST, TSCONFIG_JSON } = constants + +const { flatConfigs: origImportXFlatConfigs } = importXPlugin + +const rootPath = __dirname +const rootTsConfigPath = path.join(rootPath, TSCONFIG_JSON) + +const nodeGlobalsConfig = Object.fromEntries( + Object.entries(globals.node).map(([k]) => [k, 'readonly']), +) + +const biomeConfigPath = path.join(rootPath, BIOME_JSON) +const biomeConfig = require(biomeConfigPath) +const biomeIgnores = { + name: 'Imported biome.json ignore patterns', + ignores: biomeConfig.files.includes + .filter(p => p.startsWith('!')) + .map(p => convertIgnorePatternToMinimatch(p.slice(1))), +} + +const gitignorePath = path.join(rootPath, GITIGNORE) +const gitIgnores = includeIgnoreFile(gitignorePath) + +if (process.env.LINT_DIST) { + const isNotDistGlobPattern = p => !/(?:^|[\\/])dist/.test(p) + biomeIgnores.ignores = biomeIgnores.ignores?.filter(isNotDistGlobPattern) + gitIgnores.ignores = gitIgnores.ignores?.filter(isNotDistGlobPattern) +} + +if (process.env.LINT_EXTERNAL) { + const isNotExternalGlobPattern = p => !/(?:^|[\\/])external/.test(p) + biomeIgnores.ignores = biomeIgnores.ignores?.filter(isNotExternalGlobPattern) + gitIgnores.ignores = gitIgnores.ignores?.filter(isNotExternalGlobPattern) +} + +const sharedPlugins = { + 'sort-destructure-keys': sortDestructureKeysPlugin, + unicorn: unicornPlugin, +} + +const sharedRules = { + 'unicorn/consistent-function-scoping': 'error', + curly: 'error', + 'line-comment-position': ['error', { position: 'above' }], + 'no-await-in-loop': 'error', + 'no-control-regex': 'error', + 'no-empty': ['error', { allowEmptyCatch: true }], + 'no-new': 'error', + 'no-proto': 'error', + 'no-undef': 'error', + 'no-unused-vars': [ + 'error', + { + argsIgnorePattern: '^_|^this$', + ignoreRestSiblings: true, + varsIgnorePattern: '^_', + }, + ], + 'no-var': 'error', + 'no-warning-comments': ['warn', { terms: ['fixme'] }], + 'prefer-const': 'error', + 'sort-destructure-keys/sort-destructure-keys': 'error', + 'sort-imports': ['error', { ignoreDeclarationSort: true }], +} + +const sharedRulesForImportX = { + ...origImportXFlatConfigs.recommended.rules, + 'import-x/extensions': [ + 'error', + 'never', + { + cjs: 'ignorePackages', + js: 'ignorePackages', + json: 'always', + mjs: 'ignorePackages', + mts: 'ignorePackages', + ts: 'ignorePackages', + }, + ], + 'import-x/order': [ + 'warn', + { + groups: [ + 'builtin', + 'external', + 'internal', + ['parent', 'sibling', 'index'], + 'type', + ], + pathGroups: [ + { + pattern: '@socket{registry,security}/**', + group: 'internal', + }, + ], + pathGroupsExcludedImportTypes: ['type'], + 'newlines-between': 'always', + alphabetize: { + order: 'asc', + }, + }, + ], +} + +const sharedRulesForNode = { + 'n/exports-style': ['error', 'module.exports'], + 'n/no-missing-require': ['off'], + // The n/no-unpublished-bin rule does does not support non-trivial glob + // patterns used in package.json "files" fields. In those cases we simplify + // the glob patterns used. + 'n/no-unpublished-bin': 'error', + 'n/no-unsupported-features/es-builtins': 'error', + 'n/no-unsupported-features/es-syntax': 'error', + 'n/no-unsupported-features/node-builtins': [ + 'error', + { + ignores: [ + 'fetch', + 'fs.promises.cp', + 'module.enableCompileCache', + 'readline/promises', + 'test', + 'test.describe', + ], + version: constants.maintainedNodeVersions.current, + }, + ], + 'n/prefer-node-protocol': 'error', +} + +function getImportXFlatConfigs(isEsm) { + return { + recommended: { + ...origImportXFlatConfigs.recommended, + languageOptions: { + ...origImportXFlatConfigs.recommended.languageOptions, + ecmaVersion: LATEST, + sourceType: isEsm ? 'module' : 'script', + }, + rules: { + ...sharedRulesForImportX, + 'import-x/no-named-as-default-member': 'off', + }, + }, + typescript: { + ...origImportXFlatConfigs.typescript, + plugins: origImportXFlatConfigs.recommended.plugins, + settings: { + ...origImportXFlatConfigs.typescript.settings, + 'import-x/resolver-next': [ + createTypeScriptImportResolver({ + project: rootTsConfigPath, + }), + ], + }, + rules: { + ...sharedRulesForImportX, + // TypeScript compilation already ensures that named imports exist in + // the referenced module. + 'import-x/named': 'off', + 'import-x/no-named-as-default-member': 'off', + 'import-x/no-unresolved': 'off', + }, + }, + } +} + +const importFlatConfigsForScript = getImportXFlatConfigs(false) +const importFlatConfigsForModule = getImportXFlatConfigs(true) + +module.exports = [ + gitIgnores, + biomeIgnores, + { + files: ['**/*.{cts,mts,ts}'], + ...js.configs.recommended, + ...importFlatConfigsForModule.typescript, + languageOptions: { + ...js.configs.recommended.languageOptions, + ...importFlatConfigsForModule.typescript.languageOptions, + globals: { + ...js.configs.recommended.languageOptions?.globals, + ...importFlatConfigsForModule.typescript.languageOptions?.globals, + ...nodeGlobalsConfig, + BufferConstructor: 'readonly', + BufferEncoding: 'readonly', + NodeJS: 'readonly', + }, + parser: tsParser, + parserOptions: { + ...js.configs.recommended.languageOptions?.parserOptions, + ...importFlatConfigsForModule.typescript.languageOptions?.parserOptions, + projectService: { + ...importFlatConfigsForModule.typescript.languageOptions + ?.parserOptions?.projectService, + allowDefaultProject: [ + // Allow configs. + '*.config.mts', + // Allow paths like src/utils/*.test.mts. + 'src/*/*.test.mts', + // Allow paths like src/commands/optimize/*.test.mts. + 'src/*/*/*.test.mts', + 'test/*.mts', + ], + defaultProject: 'tsconfig.json', + tsconfigRootDir: rootPath, + // Need this to glob the test files in /src. Otherwise it won't work. + maximumDefaultProjectFileMatchCount_THIS_WILL_SLOW_DOWN_LINTING: 1_000_000, + }, + }, + }, + linterOptions: { + ...js.configs.recommended.linterOptions, + ...importFlatConfigsForModule.typescript.linterOptions, + reportUnusedDisableDirectives: 'off', + }, + plugins: { + ...js.configs.recommended.plugins, + ...importFlatConfigsForModule.typescript.plugins, + ...nodePlugin.configs['flat/recommended-module'].plugins, + ...sharedPlugins, + '@typescript-eslint': tsEslint.plugin, + }, + rules: { + ...js.configs.recommended.rules, + ...importFlatConfigsForModule.typescript.rules, + ...nodePlugin.configs['flat/recommended-module'].rules, + ...sharedRulesForNode, + ...sharedRules, + '@typescript-eslint/array-type': ['error', { default: 'array-simple' }], + '@typescript-eslint/consistent-type-assertions': [ + 'error', + { assertionStyle: 'as' }, + ], + '@typescript-eslint/no-misused-new': 'error', + '@typescript-eslint/no-this-alias': [ + 'error', + { allowDestructuring: true }, + ], + // Returning unawaited promises in a try/catch/finally is dangerous + // (the `catch` won't catch if the promise is rejected, and the `finally` + // won't wait for the promise to resolve). Returning unawaited promises + // elsewhere is probably fine, but this lint rule doesn't have a way + // to only apply to try/catch/finally (the 'in-try-catch' option *enforces* + // not awaiting promises *outside* of try/catch/finally, which is not what + // we want), and it's nice to await before returning anyways, since you get + // a slightly more comprehensive stack trace upon promise rejection. + '@typescript-eslint/return-await': ['error', 'always'], + // Disable the following rules because they don't play well with TypeScript. + 'n/hashbang': 'off', + 'n/no-extraneous-import': 'off', + 'n/no-missing-import': 'off', + 'no-redeclare': 'off', + 'no-unused-vars': 'off', + }, + }, + { + files: ['**/*.{cjs,js}'], + ...js.configs.recommended, + ...importFlatConfigsForScript.recommended, + ...nodePlugin.configs['flat/recommended-script'], + languageOptions: { + ...js.configs.recommended.languageOptions, + ...importFlatConfigsForModule.recommended.languageOptions, + ...nodePlugin.configs['flat/recommended-script'].languageOptions, + globals: { + ...js.configs.recommended.languageOptions?.globals, + ...importFlatConfigsForModule.recommended.languageOptions?.globals, + ...nodePlugin.configs['flat/recommended-script'].languageOptions + ?.globals, + ...nodeGlobalsConfig, + }, + }, + plugins: { + ...js.configs.recommended.plugins, + ...importFlatConfigsForScript.recommended.plugins, + ...nodePlugin.configs['flat/recommended-script'].plugins, + ...sharedPlugins, + }, + rules: { + ...js.configs.recommended.rules, + ...importFlatConfigsForScript.recommended.rules, + ...nodePlugin.configs['flat/recommended-script'].rules, + ...sharedRulesForNode, + ...sharedRules, + }, + }, + { + files: ['**/*.mjs'], + ...js.configs.recommended, + ...importFlatConfigsForModule.recommended, + ...nodePlugin.configs['flat/recommended-module'], + languageOptions: { + ...js.configs.recommended.languageOptions, + ...importFlatConfigsForModule.recommended.languageOptions, + ...nodePlugin.configs['flat/recommended-module'].languageOptions, + globals: { + ...js.configs.recommended.languageOptions?.globals, + ...importFlatConfigsForModule.recommended.languageOptions?.globals, + ...nodePlugin.configs['flat/recommended-module'].languageOptions + ?.globals, + ...nodeGlobalsConfig, + }, + }, + plugins: { + ...js.configs.recommended.plugins, + ...importFlatConfigsForModule.recommended.plugins, + ...nodePlugin.configs['flat/recommended-module'].plugins, + ...sharedPlugins, + }, + rules: { + ...js.configs.recommended.rules, + ...importFlatConfigsForModule.recommended.rules, + ...nodePlugin.configs['flat/recommended-module'].rules, + ...sharedRulesForNode, + ...sharedRules, + }, + }, +] diff --git a/packages/bootstrap/.config/esbuild.npm.config.mjs b/packages/bootstrap/.config/esbuild.npm.config.mjs index 8092048fa..c3e35d33f 100644 --- a/packages/bootstrap/.config/esbuild.npm.config.mjs +++ b/packages/bootstrap/.config/esbuild.npm.config.mjs @@ -6,13 +6,13 @@ import path from 'node:path' import { fileURLToPath } from 'node:url' +import { unicodeTransformPlugin } from 'build-infra/lib/esbuild-plugin-unicode-transform' import { build } from 'esbuild' import semver from 'semver' -import { unicodeTransformPlugin } from 'build-infra/lib/esbuild-plugin-unicode-transform' -import nodeVersionConfig from '../node-version.json' with { type: 'json' } import socketPackageJson from '../../socket/package.json' with { type: 'json' } +import nodeVersionConfig from '../node-version.json' with { type: 'json' } const __dirname = path.dirname(fileURLToPath(import.meta.url)) const rootPath = path.resolve(__dirname, '..') @@ -25,7 +25,9 @@ const config = { define: { __MIN_NODE_VERSION__: JSON.stringify(nodeVersionConfig.versionSemver), __SOCKET_CLI_VERSION__: JSON.stringify(socketPackageJson.version), - __SOCKET_CLI_VERSION_MAJOR__: JSON.stringify(semver.major(socketPackageJson.version)), + __SOCKET_CLI_VERSION_MAJOR__: JSON.stringify( + semver.major(socketPackageJson.version), + ), }, entryPoints: [path.join(rootPath, 'src', 'bootstrap-npm.mts')], external: [], @@ -39,7 +41,8 @@ const config = { plugins: [unicodeTransformPlugin()], target: 'node18', treeShaking: true, - write: false, // Plugin needs to transform output. + // Plugin needs to transform output. + write: false, } // Run build if invoked directly. diff --git a/packages/bootstrap/.config/esbuild.sea.config.mjs b/packages/bootstrap/.config/esbuild.sea.config.mjs index 9dfbefeb4..6d0f6c170 100644 --- a/packages/bootstrap/.config/esbuild.sea.config.mjs +++ b/packages/bootstrap/.config/esbuild.sea.config.mjs @@ -6,13 +6,13 @@ import path from 'node:path' import { fileURLToPath } from 'node:url' +import { unicodeTransformPlugin } from 'build-infra/lib/esbuild-plugin-unicode-transform' import { build } from 'esbuild' import semver from 'semver' -import { unicodeTransformPlugin } from 'build-infra/lib/esbuild-plugin-unicode-transform' -import nodeVersionConfig from '../node-version.json' with { type: 'json' } import socketPackageJson from '../../socket/package.json' with { type: 'json' } +import nodeVersionConfig from '../node-version.json' with { type: 'json' } const __dirname = path.dirname(fileURLToPath(import.meta.url)) const rootPath = path.resolve(__dirname, '..') @@ -25,7 +25,9 @@ const config = { define: { __MIN_NODE_VERSION__: JSON.stringify(nodeVersionConfig.versionSemver), __SOCKET_CLI_VERSION__: JSON.stringify(socketPackageJson.version), - __SOCKET_CLI_VERSION_MAJOR__: JSON.stringify(semver.major(socketPackageJson.version)), + __SOCKET_CLI_VERSION_MAJOR__: JSON.stringify( + semver.major(socketPackageJson.version), + ), }, entryPoints: [path.join(rootPath, 'src', 'bootstrap-sea.mts')], external: [], @@ -39,7 +41,8 @@ const config = { plugins: [unicodeTransformPlugin()], target: 'node18', treeShaking: true, - write: false, // Plugin needs to transform output. + // Plugin needs to transform output. + write: false, } // Run build if invoked directly. diff --git a/packages/bootstrap/scripts/build.mjs b/packages/bootstrap/scripts/build.mjs index c2ddec494..cf3f34203 100644 --- a/packages/bootstrap/scripts/build.mjs +++ b/packages/bootstrap/scripts/build.mjs @@ -1,4 +1,3 @@ -#!/usr/bin/env node /** * Build script for Socket bootstrap package. * @@ -12,8 +11,8 @@ import { mkdirSync, readFileSync, writeFileSync } from 'node:fs' import path from 'node:path' -import { brotliCompressSync, constants as zlibConstants } from 'node:zlib' import { fileURLToPath } from 'node:url' +import { brotliCompressSync, constants as zlibConstants } from 'node:zlib' import { build } from 'esbuild' import colors from 'yoctocolors-cjs' @@ -41,8 +40,13 @@ function compressFile(filePath) { const brPath = `${filePath}.br` writeFileSync(brPath, compressed) - const reductionPercent = ((1 - compressed.length / uncompressed.length) * 100).toFixed(1) - console.log(` Compressed: ${(compressed.length / 1024).toFixed(2)} KB (${reductionPercent}% reduction)`) + const reductionPercent = ( + (1 - compressed.length / uncompressed.length) * + 100 + ).toFixed(1) + console.log( + ` Compressed: ${(compressed.length / 1024).toFixed(2)} KB (${reductionPercent}% reduction)`, + ) } console.log('Building Socket bootstrap with esbuild...\\n') diff --git a/packages/bootstrap/src/bootstrap-npm.mts b/packages/bootstrap/src/bootstrap-npm.mts index 132425e66..868468453 100644 --- a/packages/bootstrap/src/bootstrap-npm.mts +++ b/packages/bootstrap/src/bootstrap-npm.mts @@ -19,12 +19,14 @@ async function main() { // Run the bootstrap. main() - .then((exitCode) => { + .then(exitCode => { // Exit with the code returned by the CLI. process.exit(exitCode) }) - .catch((e) => { + .catch(e => { const logger = getDefaultLogger() - logger.error(`Bootstrap error: ${e instanceof Error ? e.message : String(e)}`) + logger.error( + `Bootstrap error: ${e instanceof Error ? e.message : String(e)}`, + ) process.exit(1) }) diff --git a/packages/bootstrap/src/bootstrap-sea.mts b/packages/bootstrap/src/bootstrap-sea.mts index b36a6c351..40edfd84b 100644 --- a/packages/bootstrap/src/bootstrap-sea.mts +++ b/packages/bootstrap/src/bootstrap-sea.mts @@ -11,7 +11,11 @@ // Load Intl polyfill FIRST for ICU-disabled builds (if SEA uses minimal Node.js). import '@socketsecurity/cli/src/polyfills/intl-stub/index.mts' -import { findAndExecuteCli, getArgs, SOCKET_CLI_VERSION } from './shared/bootstrap-shared.mjs' +import { + findAndExecuteCli, + getArgs, + SOCKET_CLI_VERSION, +} from './shared/bootstrap-shared.mjs' async function main() { const args = getArgs() @@ -27,14 +31,16 @@ async function main() { // Run the bootstrap. main() - .then((exitCode) => { + .then(exitCode => { // Exit with the code returned by the CLI (or 0 if bootstrap was skipped). if (exitCode !== 0) { process.exit(exitCode) } }) - .catch((e) => { + .catch(e => { // Use process.stderr.write() directly to avoid console access during early bootstrap. - process.stderr.write(`Bootstrap error: ${e instanceof Error ? e.message : String(e)}\n`) + process.stderr.write( + `Bootstrap error: ${e instanceof Error ? e.message : String(e)}\n`, + ) process.exit(1) }) diff --git a/packages/bootstrap/src/shared/bootstrap-shared.mjs b/packages/bootstrap/src/shared/bootstrap-shared.mjs index 9b63556a0..91bdbfcfe 100644 --- a/packages/bootstrap/src/shared/bootstrap-shared.mjs +++ b/packages/bootstrap/src/shared/bootstrap-shared.mjs @@ -7,14 +7,16 @@ import { existsSync, mkdirSync } from 'node:fs' import { homedir } from 'node:os' import path from 'node:path' +import { gte } from 'semver' + import { whichReal } from '@socketsecurity/lib/bin' import { SOCKET_IPC_HANDSHAKE } from '@socketsecurity/lib/constants/socket' import { downloadPackage } from '@socketsecurity/lib/dlx-package' import { envAsBoolean } from '@socketsecurity/lib/env' import { getDefaultLogger } from '@socketsecurity/lib/logger' -import { Spinner, withSpinner } from '@socketsecurity/lib/spinner' import { spawn } from '@socketsecurity/lib/spawn' -import { gte } from 'semver' +import { Spinner, withSpinner } from '@socketsecurity/lib/spinner' + import { SOCKET_CLI_ISSUES_URL } from '../../../cli/src/constants/socket.mts' const logger = getDefaultLogger() @@ -26,7 +28,7 @@ export const SOCKET_DLX_DIR = path.join(homedir(), '.socket', '_dlx') * Set to '1', 'true', or 'yes' to disable forwarding (useful for e2e testing). */ const SOCKET_CLI_DISABLE_NODE_FORWARDING = envAsBoolean( - process.env.SOCKET_CLI_DISABLE_NODE_FORWARDING + process.env.SOCKET_CLI_DISABLE_NODE_FORWARDING, ) /** @@ -53,7 +55,14 @@ export function getCliPaths(cliPackageDir) { throw new Error('CLI package directory not initialized') } return { - cliEntry: path.join(cliPackageDir, 'node_modules', '@socketsecurity', 'cli', 'dist', 'index.js'), + cliEntry: path.join( + cliPackageDir, + 'node_modules', + '@socketsecurity', + 'cli', + 'dist', + 'index.js', + ), } } @@ -165,7 +174,12 @@ export async function executeCli(cliPath, args) { } catch (e) { // Spawn throws when child exits with non-zero code. // Extract the exit code from the error. - if (e && typeof e === 'object' && 'code' in e && typeof e.code === 'number') { + if ( + e && + typeof e === 'object' && + 'code' in e && + typeof e.code === 'number' + ) { return e.code } throw e @@ -210,8 +224,12 @@ export async function downloadCli() { logger.error('') // @ts-expect-error - Injected by esbuild define. if (!INLINED_SOCKET_BOOTSTRAP_PUBLISHED_BUILD) { - logger.error('For local development, set SOCKET_CLI_LOCAL_PATH to your CLI build:') - logger.error(` export SOCKET_CLI_LOCAL_PATH=/path/to/socket-cli/packages/cli/dist/index.js`) + logger.error( + 'For local development, set SOCKET_CLI_LOCAL_PATH to your CLI build:', + ) + logger.error( + ` export SOCKET_CLI_LOCAL_PATH=/path/to/socket-cli/packages/cli/dist/index.js`, + ) logger.error('') logger.error('Or try:') } else { diff --git a/packages/build-infra/lib/esbuild-plugin-dead-code-elimination.mjs b/packages/build-infra/lib/esbuild-plugin-dead-code-elimination.mjs index 978db3a9f..f72c33aa9 100644 --- a/packages/build-infra/lib/esbuild-plugin-dead-code-elimination.mjs +++ b/packages/build-infra/lib/esbuild-plugin-dead-code-elimination.mjs @@ -16,7 +16,8 @@ import { parse } from '@babel/parser' import { default as traverseImport } from '@babel/traverse' import MagicString from 'magic-string' -const traverse = typeof traverseImport === 'function' ? traverseImport : traverseImport.default +const traverse = + typeof traverseImport === 'function' ? traverseImport : traverseImport.default /** * Evaluate a test expression to determine if it's a constant boolean. @@ -129,7 +130,7 @@ export function deadCodeEliminationPlugin() { return { name: 'dead-code-elimination', setup(build) { - build.onEnd((result) => { + build.onEnd(result => { const outputs = result.outputFiles if (!outputs || outputs.length === 0) { return diff --git a/packages/build-infra/lib/esbuild-plugin-unicode-transform.mjs b/packages/build-infra/lib/esbuild-plugin-unicode-transform.mjs index 6df6ff467..51fcb2eb1 100644 --- a/packages/build-infra/lib/esbuild-plugin-unicode-transform.mjs +++ b/packages/build-infra/lib/esbuild-plugin-unicode-transform.mjs @@ -23,7 +23,7 @@ export function unicodeTransformPlugin() { return { name: 'unicode-transform', setup(build) { - build.onEnd((result) => { + build.onEnd(result => { const outputs = result.outputFiles if (!outputs || outputs.length === 0) { return diff --git a/packages/build-infra/lib/extraction-cache.mjs b/packages/build-infra/lib/extraction-cache.mjs index 0c10f1fa4..83099507f 100644 --- a/packages/build-infra/lib/extraction-cache.mjs +++ b/packages/build-infra/lib/extraction-cache.mjs @@ -27,9 +27,9 @@ import { getDefaultLogger } from '@socketsecurity/lib/logger' * @returns {Promise} True if extraction needed, false if cached */ export async function shouldExtract({ - sourcePaths, - outputPath, hashPattern = /Source hash: ([a-f0-9]{64})/, + outputPath, + sourcePaths, validateOutput, }) { // Normalize to array. diff --git a/packages/build-infra/lib/script-runner.mjs b/packages/build-infra/lib/script-runner.mjs index 923e3530e..0f1df2808 100644 --- a/packages/build-infra/lib/script-runner.mjs +++ b/packages/build-infra/lib/script-runner.mjs @@ -16,7 +16,12 @@ import { spawn } from '@socketsecurity/lib/spawn' * @param {object} options - Spawn options * @returns {Promise<{code: number, stdout?: string, stderr?: string}>} */ -export async function runPnpmScript(packageName, scriptName, args = [], options = {}) { +export async function runPnpmScript( + packageName, + scriptName, + args = [], + options = {}, +) { const pnpmArgs = ['--filter', packageName, 'run', scriptName, ...args] return spawn('pnpm', pnpmArgs, { diff --git a/packages/build-infra/lib/setup-helpers.mjs b/packages/build-infra/lib/setup-helpers.mjs index 62fb942fa..39d3202d4 100644 --- a/packages/build-infra/lib/setup-helpers.mjs +++ b/packages/build-infra/lib/setup-helpers.mjs @@ -3,9 +3,9 @@ * Provides helpers for checking and installing required development tools. */ -import { spawn } from '@socketsecurity/lib/spawn' -import { getDefaultLogger } from '@socketsecurity/lib/logger' import { WIN32 } from '@socketsecurity/lib/constants/platform' +import { getDefaultLogger } from '@socketsecurity/lib/logger' +import { spawn } from '@socketsecurity/lib/spawn' const logger = getDefaultLogger() @@ -55,7 +55,7 @@ export async function getVersion(command, args = ['--version']) { */ export function parseVersion(versionString) { const match = versionString.match(/(\d+)\.(\d+)\.(\d+)/) - if (!match) return null + if (!match) {return null} return { major: Number.parseInt(match[1], 10), minor: Number.parseInt(match[2], 10), @@ -71,9 +71,9 @@ export function parseVersion(versionString) { * @returns {number} -1 if a < b, 0 if a === b, 1 if a > b */ export function compareVersions(a, b) { - if (a.major !== b.major) return a.major < b.major ? -1 : 1 - if (a.minor !== b.minor) return a.minor < b.minor ? -1 : 1 - if (a.patch !== b.patch) return a.patch < b.patch ? -1 : 1 + if (a.major !== b.major) {return a.major < b.major ? -1 : 1} + if (a.minor !== b.minor) {return a.minor < b.minor ? -1 : 1} + if (a.patch !== b.patch) {return a.patch < b.patch ? -1 : 1} return 0 } @@ -110,7 +110,8 @@ export async function installHomebrew() { logger.step('Installing Homebrew...') logger.info('This requires sudo access and may take a few minutes') - const installScript = '/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"' + const installScript = + '/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"' const result = await spawn('bash', ['-c', installScript], { stdio: 'inherit', @@ -140,7 +141,8 @@ export async function installChocolatey() { logger.step('Installing Chocolatey...') logger.info('This requires admin access and may take a few minutes') - const installScript = 'Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString(\'https://community.chocolatey.org/install.ps1\'))' + const installScript = + "Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))" const result = await spawn('powershell', ['-Command', installScript], { stdio: 'inherit', @@ -163,7 +165,7 @@ export async function installChocolatey() { * @returns {Promise} True if installation succeeded */ export async function installWithHomebrew(packageName) { - if (!await hasHomebrew()) { + if (!(await hasHomebrew())) { logger.error('Homebrew not available') return false } @@ -190,7 +192,7 @@ export async function installWithHomebrew(packageName) { * @returns {Promise} True if installation succeeded */ export async function installWithChocolatey(packageName) { - if (!await hasChocolatey()) { + if (!(await hasChocolatey())) { logger.error('Chocolatey not available') return false } @@ -232,8 +234,10 @@ export async function installGhCli({ autoInstall = false } = {}) { // Windows: Try Chocolatey. if (WIN32) { - if (!await hasChocolatey()) { - logger.info('Chocolatey not found. Install Chocolatey first to auto-install gh CLI.') + if (!(await hasChocolatey())) { + logger.info( + 'Chocolatey not found. Install Chocolatey first to auto-install gh CLI.', + ) logger.info('Chocolatey: https://chocolatey.org/install') logger.info('gh CLI: https://cli.github.com/') return false @@ -242,8 +246,10 @@ export async function installGhCli({ autoInstall = false } = {}) { } // macOS/Linux: Try Homebrew. - if (!await hasHomebrew()) { - logger.info('Homebrew not found. Install Homebrew first to auto-install gh CLI.') + if (!(await hasHomebrew())) { + logger.info( + 'Homebrew not found. Install Homebrew first to auto-install gh CLI.', + ) logger.info('Homebrew: https://brew.sh/') logger.info('gh CLI: https://cli.github.com/') return false diff --git a/packages/build-infra/lib/unicode-property-escape-transform.mjs b/packages/build-infra/lib/unicode-property-escape-transform.mjs index c1bc36e6b..4e3976fce 100644 --- a/packages/build-infra/lib/unicode-property-escape-transform.mjs +++ b/packages/build-infra/lib/unicode-property-escape-transform.mjs @@ -9,7 +9,8 @@ import { parse } from '@babel/parser' import { default as traverseImport } from '@babel/traverse' import MagicString from 'magic-string' -const traverse = typeof traverseImport === 'function' ? traverseImport : traverseImport.default +const traverse = + typeof traverseImport === 'function' ? traverseImport : traverseImport.default /** * Map of Unicode property escapes to explicit character ranges. @@ -22,102 +23,115 @@ export const unicodePropertyMap = { __proto__: null, // Special properties. - 'Default_Ignorable_Code_Point': '\\u00AD\\u034F\\u061C\\u115F-\\u1160\\u17B4-\\u17B5\\u180B-\\u180D\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u3164\\uFE00-\\uFE0F\\uFEFF\\uFFA0\\uFFF0-\\uFFF8', - 'ASCII': '\\x00-\\x7F', - 'ASCII_Hex_Digit': '0-9A-Fa-f', - 'Alphabetic': 'A-Za-z\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE', + Default_Ignorable_Code_Point: + '\\u00AD\\u034F\\u061C\\u115F-\\u1160\\u17B4-\\u17B5\\u180B-\\u180D\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u3164\\uFE00-\\uFE0F\\uFEFF\\uFFA0\\uFFF0-\\uFFF8', + ASCII: '\\x00-\\x7F', + ASCII_Hex_Digit: '0-9A-Fa-f', + Alphabetic: + 'A-Za-z\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE', // General categories - Letter. - 'Letter': 'A-Za-z\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE', - 'L': 'A-Za-z\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE', - 'Lowercase_Letter': 'a-z\\u00B5\\u00DF-\\u00F6\\u00F8-\\u00FF', - 'Ll': 'a-z\\u00B5\\u00DF-\\u00F6\\u00F8-\\u00FF', - 'Uppercase_Letter': 'A-Z\\u00C0-\\u00D6\\u00D8-\\u00DE', - 'Lu': 'A-Z\\u00C0-\\u00D6\\u00D8-\\u00DE', - 'Titlecase_Letter': '\\u01C5\\u01C8\\u01CB\\u01F2', - 'Lt': '\\u01C5\\u01C8\\u01CB\\u01F2', - 'Modifier_Letter': '\\u02B0-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE', - 'Lm': '\\u02B0-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE', - 'Other_Letter': '\\u00AA\\u00BA', - 'Lo': '\\u00AA\\u00BA', + Letter: + 'A-Za-z\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE', + L: 'A-Za-z\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE', + Lowercase_Letter: 'a-z\\u00B5\\u00DF-\\u00F6\\u00F8-\\u00FF', + Ll: 'a-z\\u00B5\\u00DF-\\u00F6\\u00F8-\\u00FF', + Uppercase_Letter: 'A-Z\\u00C0-\\u00D6\\u00D8-\\u00DE', + Lu: 'A-Z\\u00C0-\\u00D6\\u00D8-\\u00DE', + Titlecase_Letter: '\\u01C5\\u01C8\\u01CB\\u01F2', + Lt: '\\u01C5\\u01C8\\u01CB\\u01F2', + Modifier_Letter: + '\\u02B0-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE', + Lm: '\\u02B0-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE', + Other_Letter: '\\u00AA\\u00BA', + Lo: '\\u00AA\\u00BA', // General categories - Mark. - 'Mark': '\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1-\\u05C2\\u05C4-\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7-\\u06E8\\u06EA-\\u06ED', - 'M': '\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1-\\u05C2\\u05C4-\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7-\\u06E8\\u06EA-\\u06ED', - 'Nonspacing_Mark': '\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1-\\u05C2\\u05C4-\\u05C5\\u05C7', - 'Mn': '\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1-\\u05C2\\u05C4-\\u05C5\\u05C7', - 'Spacing_Mark': '\\u0903\\u093B\\u093E-\\u0940\\u0949-\\u094C\\u094E-\\u094F', - 'Mc': '\\u0903\\u093B\\u093E-\\u0940\\u0949-\\u094C\\u094E-\\u094F', - 'Enclosing_Mark': '\\u0488-\\u0489', - 'Me': '\\u0488-\\u0489', + Mark: '\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1-\\u05C2\\u05C4-\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7-\\u06E8\\u06EA-\\u06ED', + M: '\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1-\\u05C2\\u05C4-\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7-\\u06E8\\u06EA-\\u06ED', + Nonspacing_Mark: + '\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1-\\u05C2\\u05C4-\\u05C5\\u05C7', + Mn: '\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1-\\u05C2\\u05C4-\\u05C5\\u05C7', + Spacing_Mark: '\\u0903\\u093B\\u093E-\\u0940\\u0949-\\u094C\\u094E-\\u094F', + Mc: '\\u0903\\u093B\\u093E-\\u0940\\u0949-\\u094C\\u094E-\\u094F', + Enclosing_Mark: '\\u0488-\\u0489', + Me: '\\u0488-\\u0489', // General categories - Number. - 'Number': '0-9\\u00B2-\\u00B3\\u00B9\\u00BC-\\u00BE', - 'N': '0-9\\u00B2-\\u00B3\\u00B9\\u00BC-\\u00BE', - 'Decimal_Number': '0-9', - 'Nd': '0-9', - 'Letter_Number': '\\u16EE-\\u16F0\\u2160-\\u2182\\u2185-\\u2188\\u3007\\u3021-\\u3029\\u3038-\\u303A', - 'Nl': '\\u16EE-\\u16F0\\u2160-\\u2182\\u2185-\\u2188\\u3007\\u3021-\\u3029\\u3038-\\u303A', - 'Other_Number': '\\u00B2-\\u00B3\\u00B9\\u00BC-\\u00BE', - 'No': '\\u00B2-\\u00B3\\u00B9\\u00BC-\\u00BE', + Number: '0-9\\u00B2-\\u00B3\\u00B9\\u00BC-\\u00BE', + N: '0-9\\u00B2-\\u00B3\\u00B9\\u00BC-\\u00BE', + Decimal_Number: '0-9', + Nd: '0-9', + Letter_Number: + '\\u16EE-\\u16F0\\u2160-\\u2182\\u2185-\\u2188\\u3007\\u3021-\\u3029\\u3038-\\u303A', + Nl: '\\u16EE-\\u16F0\\u2160-\\u2182\\u2185-\\u2188\\u3007\\u3021-\\u3029\\u3038-\\u303A', + Other_Number: '\\u00B2-\\u00B3\\u00B9\\u00BC-\\u00BE', + No: '\\u00B2-\\u00B3\\u00B9\\u00BC-\\u00BE', // General categories - Punctuation. - 'Punctuation': '!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\u00A1\\u00A7\\u00AB\\u00B6-\\u00B7\\u00BB\\u00BF', - 'P': '!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\u00A1\\u00A7\\u00AB\\u00B6-\\u00B7\\u00BB\\u00BF', - 'Connector_Punctuation': '_\\u203F-\\u2040', - 'Pc': '_\\u203F-\\u2040', - 'Dash_Punctuation': '\\-\\u2010-\\u2015', - 'Pd': '\\-\\u2010-\\u2015', - 'Open_Punctuation': '\\(\\[\\{', - 'Ps': '\\(\\[\\{', - 'Close_Punctuation': '\\)\\]\\}', - 'Pe': '\\)\\]\\}', - 'Initial_Punctuation': '\\u00AB', - 'Pi': '\\u00AB', - 'Final_Punctuation': '\\u00BB', - 'Pf': '\\u00BB', - 'Other_Punctuation': '!-#%-\\*,\\.\\/:;\\?@\\\\\\u00A1\\u00A7\\u00B6-\\u00B7\\u00BF', - 'Po': '!-#%-\\*,\\.\\/:;\\?@\\\\\\u00A1\\u00A7\\u00B6-\\u00B7\\u00BF', + Punctuation: + '!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\u00A1\\u00A7\\u00AB\\u00B6-\\u00B7\\u00BB\\u00BF', + P: '!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\u00A1\\u00A7\\u00AB\\u00B6-\\u00B7\\u00BB\\u00BF', + Connector_Punctuation: '_\\u203F-\\u2040', + Pc: '_\\u203F-\\u2040', + Dash_Punctuation: '\\-\\u2010-\\u2015', + Pd: '\\-\\u2010-\\u2015', + Open_Punctuation: '\\(\\[\\{', + Ps: '\\(\\[\\{', + Close_Punctuation: '\\)\\]\\}', + Pe: '\\)\\]\\}', + Initial_Punctuation: '\\u00AB', + Pi: '\\u00AB', + Final_Punctuation: '\\u00BB', + Pf: '\\u00BB', + Other_Punctuation: + '!-#%-\\*,\\.\\/:;\\?@\\\\\\u00A1\\u00A7\\u00B6-\\u00B7\\u00BF', + Po: '!-#%-\\*,\\.\\/:;\\?@\\\\\\u00A1\\u00A7\\u00B6-\\u00B7\\u00BF', // General categories - Symbol. - 'Symbol': '\\$\\+<->\\^`\\|~\\u00A2-\\u00A6\\u00A8-\\u00A9\\u00AC\\u00AE-\\u00B1\\u00B4\\u00B8\\u00D7\\u00F7', - 'S': '\\$\\+<->\\^`\\|~\\u00A2-\\u00A6\\u00A8-\\u00A9\\u00AC\\u00AE-\\u00B1\\u00B4\\u00B8\\u00D7\\u00F7', - 'Math_Symbol': '\\+<->\\|~\\u00AC\\u00B1\\u00D7\\u00F7', - 'Sm': '\\+<->\\|~\\u00AC\\u00B1\\u00D7\\u00F7', - 'Currency_Symbol': '\\$\\u00A2-\\u00A5', - 'Sc': '\\$\\u00A2-\\u00A5', - 'Modifier_Symbol': '\\^`\\u00A8\\u00AF\\u00B4\\u00B8', - 'Sk': '\\^`\\u00A8\\u00AF\\u00B4\\u00B8', - 'Other_Symbol': '\\u00A6\\u00A9\\u00AE\\u00B0', - 'So': '\\u00A6\\u00A9\\u00AE\\u00B0', + Symbol: + '\\$\\+<->\\^`\\|~\\u00A2-\\u00A6\\u00A8-\\u00A9\\u00AC\\u00AE-\\u00B1\\u00B4\\u00B8\\u00D7\\u00F7', + S: '\\$\\+<->\\^`\\|~\\u00A2-\\u00A6\\u00A8-\\u00A9\\u00AC\\u00AE-\\u00B1\\u00B4\\u00B8\\u00D7\\u00F7', + Math_Symbol: '\\+<->\\|~\\u00AC\\u00B1\\u00D7\\u00F7', + Sm: '\\+<->\\|~\\u00AC\\u00B1\\u00D7\\u00F7', + Currency_Symbol: '\\$\\u00A2-\\u00A5', + Sc: '\\$\\u00A2-\\u00A5', + Modifier_Symbol: '\\^`\\u00A8\\u00AF\\u00B4\\u00B8', + Sk: '\\^`\\u00A8\\u00AF\\u00B4\\u00B8', + Other_Symbol: '\\u00A6\\u00A9\\u00AE\\u00B0', + So: '\\u00A6\\u00A9\\u00AE\\u00B0', // General categories - Separator. - 'Separator': ' \\u00A0\\u1680\\u2000-\\u200A\\u2028-\\u2029\\u202F\\u205F\\u3000', - 'Z': ' \\u00A0\\u1680\\u2000-\\u200A\\u2028-\\u2029\\u202F\\u205F\\u3000', - 'Space_Separator': ' \\u00A0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000', - 'Zs': ' \\u00A0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000', - 'Line_Separator': '\\u2028', - 'Zl': '\\u2028', - 'Paragraph_Separator': '\\u2029', - 'Zp': '\\u2029', + Separator: + ' \\u00A0\\u1680\\u2000-\\u200A\\u2028-\\u2029\\u202F\\u205F\\u3000', + Z: ' \\u00A0\\u1680\\u2000-\\u200A\\u2028-\\u2029\\u202F\\u205F\\u3000', + Space_Separator: ' \\u00A0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000', + Zs: ' \\u00A0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000', + Line_Separator: '\\u2028', + Zl: '\\u2028', + Paragraph_Separator: '\\u2029', + Zp: '\\u2029', // General categories - Other. - 'Other': '\\x00-\\x1F\\x7F-\\x9F\\u00AD', - 'C': '\\x00-\\x1F\\x7F-\\x9F\\u00AD', - 'Control': '\\x00-\\x1F\\x7F-\\x9F', - 'Cc': '\\x00-\\x1F\\x7F-\\x9F', - 'Format': '\\u00AD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB', - 'Cf': '\\u00AD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB', - 'Surrogate': '\\uD800-\\uDFFF', - 'Cs': '\\uD800-\\uDFFF', - 'Private_Use': '\\uE000-\\uF8FF', - 'Co': '\\uE000-\\uF8FF', - 'Unassigned': '\\u0378-\\u0379\\u0380-\\u0383\\u038B\\u038D\\u03A2', - 'Cn': '\\u0378-\\u0379\\u0380-\\u0383\\u038B\\u038D\\u03A2', + Other: '\\x00-\\x1F\\x7F-\\x9F\\u00AD', + C: '\\x00-\\x1F\\x7F-\\x9F\\u00AD', + Control: '\\x00-\\x1F\\x7F-\\x9F', + Cc: '\\x00-\\x1F\\x7F-\\x9F', + Format: + '\\u00AD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB', + Cf: '\\u00AD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB', + Surrogate: '\\uD800-\\uDFFF', + Cs: '\\uD800-\\uDFFF', + Private_Use: '\\uE000-\\uF8FF', + Co: '\\uE000-\\uF8FF', + Unassigned: '\\u0378-\\u0379\\u0380-\\u0383\\u038B\\u038D\\u03A2', + Cn: '\\u0378-\\u0379\\u0380-\\u0383\\u038B\\u038D\\u03A2', // Emoji properties. - 'Extended_Pictographic': '\\u00A9\\u00AE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9-\\u21AA\\u231A-\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA-\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614-\\u2615\\u2618\\u261D\\u2620\\u2622-\\u2623\\u2626\\u262A\\u262E-\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F-\\u2660\\u2663\\u2665-\\u2666\\u2668\\u267B\\u267E-\\u267F\\u2692-\\u2697\\u2699\\u269B-\\u269C\\u26A0-\\u26A1\\u26A7\\u26AA-\\u26AB\\u26B0-\\u26B1\\u26BD-\\u26BE\\u26C4-\\u26C5\\u26C8\\u26CE-\\u26CF\\u26D1\\u26D3-\\u26D4\\u26E9-\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733-\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763-\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934-\\u2935\\u2B05-\\u2B07\\u2B1B-\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299', - 'RGI_Emoji': '\\u00A9\\u00AE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9-\\u21AA\\u231A-\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA-\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614-\\u2615\\u2618\\u261D\\u2620\\u2622-\\u2623\\u2626\\u262A\\u262E-\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F-\\u2660\\u2663\\u2665-\\u2666\\u2668\\u267B\\u267E-\\u267F\\u2692-\\u2697\\u2699\\u269B-\\u269C\\u26A0-\\u26A1\\u26A7\\u26AA-\\u26AB\\u26B0-\\u26B1\\u26BD-\\u26BE\\u26C4-\\u26C5\\u26C8\\u26CE-\\u26CF\\u26D1\\u26D3-\\u26D4\\u26E9-\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733-\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763-\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934-\\u2935\\u2B05-\\u2B07\\u2B1B-\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299', + Extended_Pictographic: + '\\u00A9\\u00AE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9-\\u21AA\\u231A-\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA-\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614-\\u2615\\u2618\\u261D\\u2620\\u2622-\\u2623\\u2626\\u262A\\u262E-\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F-\\u2660\\u2663\\u2665-\\u2666\\u2668\\u267B\\u267E-\\u267F\\u2692-\\u2697\\u2699\\u269B-\\u269C\\u26A0-\\u26A1\\u26A7\\u26AA-\\u26AB\\u26B0-\\u26B1\\u26BD-\\u26BE\\u26C4-\\u26C5\\u26C8\\u26CE-\\u26CF\\u26D1\\u26D3-\\u26D4\\u26E9-\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733-\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763-\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934-\\u2935\\u2B05-\\u2B07\\u2B1B-\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299', + RGI_Emoji: + '\\u00A9\\u00AE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9-\\u21AA\\u231A-\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA-\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614-\\u2615\\u2618\\u261D\\u2620\\u2622-\\u2623\\u2626\\u262A\\u262E-\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F-\\u2660\\u2663\\u2665-\\u2666\\u2668\\u267B\\u267E-\\u267F\\u2692-\\u2697\\u2699\\u269B-\\u269C\\u26A0-\\u26A1\\u26A7\\u26AA-\\u26AB\\u26B0-\\u26B1\\u26BD-\\u26BE\\u26C4-\\u26C5\\u26C8\\u26CE-\\u26CF\\u26D1\\u26D3-\\u26D4\\u26E9-\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733-\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763-\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934-\\u2935\\u2B05-\\u2B07\\u2B1B-\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299', } /** @@ -160,13 +174,17 @@ function transformRegexPattern(pattern) { * But when writing back into source code, we need to re-escape them. */ function escapeForStringLiteral(str) { - return str - .replace(/\\/g, '\\\\') // Backslash must be doubled. - .replace(/"/g, '\\"') // Escape quotes if needed (handled by keeping original quotes). - .replace(/'/g, "\\'") // Escape single quotes if needed. + return ( + str + // Backslash must be doubled. + .replace(/\\/g, '\\\\') + // Escape quotes if needed (handled by keeping original quotes). + .replace(/"/g, '\\"') + // Escape single quotes if needed. + .replace(/'/g, "\\'") + ) } - /** * Transform Unicode property escapes in regex patterns for ICU-free environments. * @@ -193,8 +211,8 @@ export function transformUnicodePropertyEscapes(content) { traverse(ast, { RegExpLiteral(path) { const { node } = path - const { pattern, flags } = node - const { start, end } = node + const { flags, pattern } = node + const { end, start } = node // Check if this regex has /u or /v flags. const hasUFlag = flags.includes('u') @@ -276,7 +294,10 @@ export function transformUnicodePropertyEscapes(content) { const flagsArg = node.arguments[1] // Both arguments must be string literals. - if (patternArg.type !== 'StringLiteral' || flagsArg.type !== 'StringLiteral') { + if ( + patternArg.type !== 'StringLiteral' || + flagsArg.type !== 'StringLiteral' + ) { return } @@ -315,10 +336,18 @@ export function transformUnicodePropertyEscapes(content) { const escapedPattern = escapeForStringLiteral(transformedPattern) // Replace pattern. - s.overwrite(patternArg.start, patternArg.end, `${patternQuote}${escapedPattern}${patternQuote}`) + s.overwrite( + patternArg.start, + patternArg.end, + `${patternQuote}${escapedPattern}${patternQuote}`, + ) // Replace flags. - s.overwrite(flagsArg.start, flagsArg.end, `${flagsQuote}${newFlags}${flagsQuote}`) + s.overwrite( + flagsArg.start, + flagsArg.end, + `${flagsQuote}${newFlags}${flagsQuote}`, + ) } }, }) diff --git a/packages/cli-with-sentry/.config/esbuild.config.mjs b/packages/cli-with-sentry/.config/esbuild.config.mjs index 21e412b74..84f9d69b0 100644 --- a/packages/cli-with-sentry/.config/esbuild.config.mjs +++ b/packages/cli-with-sentry/.config/esbuild.config.mjs @@ -3,11 +3,12 @@ * Builds a Sentry-enabled version of the CLI with error reporting. */ -import { build } from 'esbuild' import { mkdirSync, writeFileSync } from 'node:fs' import path from 'node:path' import { fileURLToPath } from 'node:url' +import { build } from 'esbuild' + // Import base esbuild config from main CLI. import baseConfig from '../../cli/.config/esbuild.cli.build.mjs' diff --git a/packages/cli-with-sentry/.config/esbuild.inject.config.mjs b/packages/cli-with-sentry/.config/esbuild.inject.config.mjs index e819e3cbc..8fd0fb88a 100644 --- a/packages/cli-with-sentry/.config/esbuild.inject.config.mjs +++ b/packages/cli-with-sentry/.config/esbuild.inject.config.mjs @@ -28,7 +28,8 @@ const config = { // With platform: 'node', esbuild automatically externalizes all Node.js built-ins. external: [ - 'node-gyp', // Required for require.resolve('node-gyp/package.json') + // Required for require.resolve('node-gyp/package.json') + 'node-gyp', ], // Suppress warnings for intentional CommonJS compatibility code. diff --git a/packages/cli-with-sentry/scripts/build.mjs b/packages/cli-with-sentry/scripts/build.mjs index a674f4a84..f4168156b 100644 --- a/packages/cli-with-sentry/scripts/build.mjs +++ b/packages/cli-with-sentry/scripts/build.mjs @@ -23,15 +23,11 @@ async function main() { // Build CLI bundle. const logger = getDefaultLogger() logger.info('Building CLI bundle...') - let result = await spawn( - 'node', - ['.config/esbuild.cli-sentry.build.mjs'], - { - shell: WIN32, - stdio: 'inherit', - cwd: rootPath, - }, - ) + let result = await spawn('node', ['.config/esbuild.cli-sentry.build.mjs'], { + shell: WIN32, + stdio: 'inherit', + cwd: rootPath, + }) if (result.code !== 0) { throw new Error(`CLI bundle build failed with exit code ${result.code}`) } @@ -57,7 +53,9 @@ async function main() { cwd: rootPath, }) if (result.code !== 0) { - throw new Error(`Shadow npm inject build failed with exit code ${result.code}`) + throw new Error( + `Shadow npm inject build failed with exit code ${result.code}`, + ) } logger.success('Built shadow npm inject') diff --git a/packages/cli-with-sentry/scripts/compress-cli.mjs b/packages/cli-with-sentry/scripts/compress-cli.mjs index af9fae085..ecd28f0f5 100644 --- a/packages/cli-with-sentry/scripts/compress-cli.mjs +++ b/packages/cli-with-sentry/scripts/compress-cli.mjs @@ -36,7 +36,8 @@ const originalSize = cliCode.length // Compress with brotli (max quality for best compression). const compressed = brotliCompressSync(cliCode, { params: { - [0]: 11, // BROTLI_PARAM_QUALITY: 11 (max quality). + // BROTLI_PARAM_QUALITY: 11 (max quality). + [0]: 11, }, }) const compressedSize = compressed.length diff --git a/packages/cli-with-sentry/scripts/verify-package.mjs b/packages/cli-with-sentry/scripts/verify-package.mjs index 2ee46009f..383dcf5fa 100644 --- a/packages/cli-with-sentry/scripts/verify-package.mjs +++ b/packages/cli-with-sentry/scripts/verify-package.mjs @@ -3,9 +3,10 @@ import path from 'node:path' import process from 'node:process' import { fileURLToPath } from 'node:url' -import { getDefaultLogger } from '@socketsecurity/lib/logger' import colors from 'yoctocolors-cjs' +import { getDefaultLogger } from '@socketsecurity/lib/logger' + const __filename = fileURLToPath(import.meta.url) const __dirname = path.dirname(__filename) const packageRoot = path.resolve(__dirname, '..') diff --git a/packages/cli-with-sentry/test/package.test.mjs b/packages/cli-with-sentry/test/package.test.mjs index 6fcf645a9..b4ed1e010 100644 --- a/packages/cli-with-sentry/test/package.test.mjs +++ b/packages/cli-with-sentry/test/package.test.mjs @@ -2,8 +2,7 @@ * @fileoverview Tests for @socketsecurity/cli-with-sentry package structure and configuration. */ -import { existsSync } from 'node:fs' -import { promises as fs } from 'node:fs' +import { existsSync, promises as fs } from 'node:fs' import path from 'node:path' import { fileURLToPath } from 'node:url' @@ -117,18 +116,12 @@ describe('@socketsecurity/cli-with-sentry package', () => { }) it('should have esbuild config', () => { - const esbuildPath = path.join( - configDir, - 'esbuild.cli-sentry.build.mjs', - ) + const esbuildPath = path.join(configDir, 'esbuild.cli-sentry.build.mjs') expect(existsSync(esbuildPath)).toBe(true) }) it('esbuild config should import base config', async () => { - const esbuildPath = path.join( - configDir, - 'esbuild.cli-sentry.build.mjs', - ) + const esbuildPath = path.join(configDir, 'esbuild.cli-sentry.build.mjs') const content = await fs.readFile(esbuildPath, 'utf-8') expect(content).toContain( @@ -137,10 +130,7 @@ describe('@socketsecurity/cli-with-sentry package', () => { }) it('esbuild config should enable Sentry build flag', async () => { - const esbuildPath = path.join( - configDir, - 'esbuild.cli-sentry.build.mjs', - ) + const esbuildPath = path.join(configDir, 'esbuild.cli-sentry.build.mjs') const content = await fs.readFile(esbuildPath, 'utf-8') expect(content).toContain('INLINED_SOCKET_CLI_SENTRY_BUILD') @@ -148,20 +138,14 @@ describe('@socketsecurity/cli-with-sentry package', () => { }) it('esbuild config should use CLI dispatch with Sentry entry point', async () => { - const esbuildPath = path.join( - configDir, - 'esbuild.cli-sentry.build.mjs', - ) + const esbuildPath = path.join(configDir, 'esbuild.cli-sentry.build.mjs') const content = await fs.readFile(esbuildPath, 'utf-8') expect(content).toContain('cli-dispatch-with-sentry.mts') }) it('esbuild config should call build() when run', async () => { - const esbuildPath = path.join( - configDir, - 'esbuild.cli-sentry.build.mjs', - ) + const esbuildPath = path.join(configDir, 'esbuild.cli-sentry.build.mjs') const content = await fs.readFile(esbuildPath, 'utf-8') expect(content).toContain('build(config)') @@ -246,9 +230,7 @@ describe('@socketsecurity/cli-with-sentry package', () => { expect(pkgJson.publishConfig).toBeDefined() expect(pkgJson.publishConfig.access).toBe('public') - expect(pkgJson.publishConfig.registry).toBe( - 'https://registry.npmjs.org/', - ) + expect(pkgJson.publishConfig.registry).toBe('https://registry.npmjs.org/') }) }) diff --git a/packages/cli/package.json b/packages/cli/package.json index cb4cbea3d..9626b5257 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -86,6 +86,7 @@ "@socketsecurity/lib": "catalog:", "@socketsecurity/registry": "catalog:", "@socketsecurity/sdk": "catalog:", + "@types/react": "^19.2.2", "ajv-dist": "catalog:", "ansi-regex": "catalog:", "brace-expansion": "catalog:", diff --git a/packages/cli/scripts/claude.mjs b/packages/cli/scripts/claude.mjs index 323ea81b2..7ab7a9061 100644 --- a/packages/cli/scripts/claude.mjs +++ b/packages/cli/scripts/claude.mjs @@ -8,9 +8,9 @@ import { spawn } from 'node:child_process' import crypto from 'node:crypto' import { existsSync, + promises as fs, readFileSync, writeFileSync, - promises as fs, } from 'node:fs' import os from 'node:os' import path from 'node:path' diff --git a/packages/cli/scripts/compress-cli.mjs b/packages/cli/scripts/compress-cli.mjs index f9106ff04..7369e1cf2 100644 --- a/packages/cli/scripts/compress-cli.mjs +++ b/packages/cli/scripts/compress-cli.mjs @@ -37,7 +37,8 @@ const originalSize = cliCode.length // Compress with brotli (max quality for best compression). const compressed = brotliCompressSync(cliCode, { params: { - [0]: 11, // BROTLI_PARAM_QUALITY: 11 (max quality). + // BROTLI_PARAM_QUALITY: 11 (max quality). + [0]: 11, }, }) const compressedSize = compressed.length diff --git a/packages/cli/scripts/cover.mjs b/packages/cli/scripts/cover.mjs index cf3e35faf..532fc2c07 100644 --- a/packages/cli/scripts/cover.mjs +++ b/packages/cli/scripts/cover.mjs @@ -219,8 +219,10 @@ async function main() { // Combine and clean output - remove ANSI color codes and spinner artifacts const ansiRegex = new RegExp(`${String.fromCharCode(27)}\\[[0-9;]*m`, 'g') const output = (codeCoverageResult.stdout + codeCoverageResult.stderr) - .replace(ansiRegex, '') // Remove ANSI color codes - .replace(/(?:✧|︎|⚡)\s*/g, '') // Remove spinner artifacts + // Remove ANSI color codes + .replace(ansiRegex, '') + // Remove spinner artifacts + .replace(/(?:✧|︎|⚡)\s*/g, '') .trim() // Extract test summary (Test Files ... Duration) @@ -254,11 +256,16 @@ async function main() { if (coverageHeaderMatch && allFilesMatch) { if (!values.summary) { logger.log(' % Coverage report from v8') - logger.log(coverageHeaderMatch[1]) // Top border - logger.log(coverageHeaderMatch[2]) // Header row - logger.log(coverageHeaderMatch[1]) // Middle border - logger.log(allFilesMatch[0]) // All files row - logger.log(coverageHeaderMatch[1]) // Bottom border + // Top border + logger.log(coverageHeaderMatch[1]) + // Header row + logger.log(coverageHeaderMatch[2]) + // Middle border + logger.log(coverageHeaderMatch[1]) + // All files row + logger.log(allFilesMatch[0]) + // Bottom border + logger.log(coverageHeaderMatch[1]) logger.log('') } diff --git a/packages/cli/scripts/e2e.mjs b/packages/cli/scripts/e2e.mjs index 2ca1619cb..cb11b8fe3 100644 --- a/packages/cli/scripts/e2e.mjs +++ b/packages/cli/scripts/e2e.mjs @@ -99,7 +99,8 @@ async function runVitest(binaryType) { { env: { ...process.env, - RUN_E2E_TESTS: '1', // Automatically enable tests when explicitly running e2e.mjs. + // Automatically enable tests when explicitly running e2e.mjs. + RUN_E2E_TESTS: '1', ...envVars, }, stdio: 'inherit', diff --git a/packages/cli/scripts/integration.mjs b/packages/cli/scripts/integration.mjs index efe8c8783..2a545d9f0 100644 --- a/packages/cli/scripts/integration.mjs +++ b/packages/cli/scripts/integration.mjs @@ -103,7 +103,8 @@ async function runVitest(binaryType) { cwd: ROOT_DIR, env: { ...process.env, - RUN_INTEGRATION_TESTS: '1', // Automatically enable tests when explicitly running integration.mjs. + // Automatically enable tests when explicitly running integration.mjs. + RUN_INTEGRATION_TESTS: '1', ...envVars, }, stdio: 'inherit', diff --git a/packages/cli/scripts/utils/patches.mjs b/packages/cli/scripts/utils/patches.mjs index 4c2305194..1da7fa936 100644 --- a/packages/cli/scripts/utils/patches.mjs +++ b/packages/cli/scripts/utils/patches.mjs @@ -96,7 +96,8 @@ export async function startPatch(packageSpec) { // First, try to run pnpm patch to see if directory already exists. let result = await spawn('pnpm', ['patch', packageSpec], { shell: WIN32, - stdio: ['inherit', 'pipe', 'pipe'], // Capture stdout and stderr. + // Capture stdout and stderr. + stdio: ['inherit', 'pipe', 'pipe'], stdioString: true, }) diff --git a/packages/cli/src/cli-entry.mts b/packages/cli/src/cli-entry.mts index 92fb1f607..89c3b8b7f 100755 --- a/packages/cli/src/cli-entry.mts +++ b/packages/cli/src/cli-entry.mts @@ -105,11 +105,14 @@ async function writeBootstrapManifestEntry(): Promise { } void (async () => { - // Skip update checks in test environments. - if (!ENV.VITEST && !ENV.CI) { + // Skip update checks in test environments or when explicitly disabled. + // Note: Update checks create HTTP connections that may delay process exit by up to 30s + // due to keep-alive timeouts. Set SOCKET_CLI_SKIP_UPDATE_CHECK=1 to disable. + if (!ENV.VITEST && !ENV.CI && !ENV.SOCKET_CLI_SKIP_UPDATE_CHECK) { const registryUrl = lookupRegistryUrl() // Unified update notifier handles both SEA and npm automatically. - await scheduleUpdateCheck({ + // Fire-and-forget: Don't await to avoid blocking on HTTP keep-alive timeouts. + scheduleUpdateCheck({ authInfo: lookupRegistryAuthToken(registryUrl, { recursive: true }), name: isSeaBinary() ? SOCKET_CLI_BIN_NAME @@ -120,7 +123,8 @@ void (async () => { // Write manifest entry if launched via bootstrap (SEA/smol). // Bootstrap passes spec and cache dir via env vars. - await writeBootstrapManifestEntry() + // Fire-and-forget: Don't await to avoid blocking. + writeBootstrapManifestEntry() // Background preflight downloads for optional dependencies. // This silently downloads @coana-tech/cli and @socketbin/cli-ai in the diff --git a/packages/cli/src/commands/scan/cmd-scan-create.mts b/packages/cli/src/commands/scan/cmd-scan-create.mts index d61c9a635..b1df84201 100644 --- a/packages/cli/src/commands/scan/cmd-scan-create.mts +++ b/packages/cli/src/commands/scan/cmd-scan-create.mts @@ -31,6 +31,7 @@ import { socketDashboardLink } from '../../utils/terminal/link.mts' import { checkCommandInput } from '../../utils/validation/check-input.mts' import { detectManifestActions } from '../manifest/detect-manifest-actions.mts' + import type { REPORT_LEVEL } from './types.mts' import type { MeowFlags } from '../../flags.mts' import type { diff --git a/packages/cli/src/commands/scan/handle-create-new-scan.mts b/packages/cli/src/commands/scan/handle-create-new-scan.mts index 27c537ac3..336bf47d8 100644 --- a/packages/cli/src/commands/scan/handle-create-new-scan.mts +++ b/packages/cli/src/commands/scan/handle-create-new-scan.mts @@ -1,9 +1,9 @@ import path from 'node:path' -import { debug, debugDir } from '@socketsecurity/lib/debug' -import { getDefaultLogger } from '@socketsecurity/lib/logger' import { getDefaultSpinner } from '@socketsecurity/lib/spinner' -import { pluralize } from '@socketsecurity/lib/words' +import { debugDir, debugFn } from '@socketsecurity/registry/lib/debug' +import { logger } from '@socketsecurity/registry/lib/logger' +import { pluralize } from '@socketsecurity/registry/lib/words' import { fetchCreateOrgFullScan } from './fetch-create-org-full-scan.mts' import { fetchSupportedScanFileNames } from './fetch-supported-scan-file-names.mts' @@ -11,9 +11,11 @@ import { finalizeTier1Scan } from './finalize-tier1-scan.mts' import { handleScanReport } from './handle-scan-report.mts' import { outputCreateNewScan } from './output-create-new-scan.mts' import { performReachabilityAnalysis } from './perform-reachability-analysis.mts' -import { DOT_SOCKET_DOT_FACTS_JSON } from '../../constants/paths.mts' -import { FOLD_SETTING_VERSION } from '../../constants/reporting.mjs' -import { getPackageFilesForScan } from '../../utils/fs/path-resolve.mjs' +import { + DOT_SOCKET_DOT_FACTS_JSON, + FOLD_SETTING_VERSION, +} from '../../constants.mts' +import { getPackageFilesForScan } from '../../utils/fs/path-resolve.mts' import { readOrDefaultSocketJson } from '../../utils/socket/json.mts' import { socketDocsLink } from '../../utils/terminal/link.mts' import { checkCommandInput } from '../../utils/validation/check-input.mts' @@ -23,8 +25,7 @@ import { generateAutoManifest } from '../manifest/generate_auto_manifest.mts' import type { ReachabilityOptions } from './perform-reachability-analysis.mts' import type { REPORT_LEVEL } from './types.mts' import type { OutputKind } from '../../types.mts' -import type { Remap } from '@socketsecurity/lib/objects' -const logger = getDefaultLogger() +import type { Remap } from '@socketsecurity/registry/lib/objects' export type HandleCreateNewScanConfig = { autoManifest: boolean @@ -73,8 +74,8 @@ export async function handleCreateNewScan({ targets, tmp, }: HandleCreateNewScanConfig): Promise { - debug(`Creating new scan for ${orgSlug}/${repoName}`) - debugDir({ + debugFn('notice', `Creating new scan for ${orgSlug}/${repoName}`) + debugDir('inspect', { autoManifest, branchName, commitHash, @@ -91,10 +92,10 @@ export async function handleCreateNewScan({ if (autoManifest) { logger.info('Auto-generating manifest files ...') - debug('Auto-manifest mode enabled') + debugFn('notice', 'Auto-manifest mode enabled') const sockJson = readOrDefaultSocketJson(cwd) const detected = await detectManifestActions(sockJson, cwd) - debugDir({ detected }) + debugDir('inspect', { detected }) await generateAutoManifest({ detected, cwd, @@ -105,28 +106,32 @@ export async function handleCreateNewScan({ } const spinner = getDefaultSpinner() - const supportedFilesCResult = await fetchSupportedScanFileNames({ - spinner: spinner ?? undefined, - }) + + const supportedFilesCResult = await fetchSupportedScanFileNames({ spinner }) if (!supportedFilesCResult.ok) { - debug('Failed to fetch supported scan file names') - debugDir({ supportedFilesCResult }) + debugFn('warn', 'Failed to fetch supported scan file names') + debugDir('inspect', { supportedFilesCResult }) await outputCreateNewScan(supportedFilesCResult, { interactive, outputKind, }) return } - debug(`Fetched ${supportedFilesCResult.data['size']} supported file types`) + debugFn( + 'notice', + `Fetched ${supportedFilesCResult.data['size']} supported file types`, + ) - spinner?.start('Searching for local files to include in scan...') + spinner.start('Searching for local files to include in scan...') const supportedFiles = supportedFilesCResult.data const packagePaths = await getPackageFilesForScan(targets, supportedFiles, { cwd, }) - spinner?.successAndStop('Finished searching for local files.') + spinner.successAndStop( + `Found ${packagePaths.length} ${pluralize('file', packagePaths.length)} to include in scan.`, + ) const wasValidInput = checkCommandInput(outputKind, { nook: true, @@ -136,15 +141,19 @@ export async function handleCreateNewScan({ 'TARGET (file/dir) must contain matching / supported file types for a scan', }) if (!wasValidInput) { - debug('No eligible files found to scan') + debugFn('warn', 'No eligible files found to scan') return } - debugDir({ packagePaths }) + logger.success( + `Found ${packagePaths.length} local ${pluralize('file', packagePaths.length)}`, + ) + + debugDir('inspect', { packagePaths }) if (readOnly) { logger.log('[ReadOnly] Bailing now') - debug('Read-only mode, exiting early') + debugFn('notice', 'Read-only mode, exiting early') return } @@ -155,10 +164,10 @@ export async function handleCreateNewScan({ if (reach.runReachabilityAnalysis) { logger.error('') logger.info('Starting reachability analysis...') - debug('Reachability analysis enabled') - debugDir({ reachabilityOptions: reach }) + debugFn('notice', 'Reachability analysis enabled') + debugDir('inspect', { reachabilityOptions: reach }) - spinner?.start() + spinner.start() const reachResult = await performReachabilityAnalysis({ branchName, @@ -167,11 +176,11 @@ export async function handleCreateNewScan({ packagePaths, reachabilityOptions: reach, repoName, - spinner: spinner ?? undefined, + spinner, target: targets[0]!, }) - spinner?.stop() + spinner.stop() if (!reachResult.ok) { await outputCreateNewScan(reachResult, { interactive, outputKind }) @@ -194,24 +203,18 @@ export async function handleCreateNewScan({ tier1ReachabilityScanId = reachResult.data?.tier1ReachabilityScanId } - // Display final file count after all modifications. - logger.success( - `Found ${scanPaths.length} ${pluralize('file', { count: scanPaths.length })} to include in scan`, - ) - const fullScanCResult = await fetchCreateOrgFullScan( scanPaths, orgSlug, { - branchName, commitHash, commitMessage, committers, pullRequest, repoName, + branchName, }, { - commandPath: 'socket scan create', cwd, defaultBranch, pendingHead, @@ -252,7 +255,7 @@ export async function handleCreateNewScan({ ) } } else { - spinner?.stop() + spinner.stop() await outputCreateNewScan(fullScanCResult, { interactive, outputKind }) } diff --git a/packages/cli/src/commands/scan/handle-scan-reach.mts b/packages/cli/src/commands/scan/handle-scan-reach.mts index 727c46e08..b9895519f 100644 --- a/packages/cli/src/commands/scan/handle-scan-reach.mts +++ b/packages/cli/src/commands/scan/handle-scan-reach.mts @@ -1,11 +1,11 @@ -import { getDefaultLogger } from '@socketsecurity/lib/logger' import { getDefaultSpinner } from '@socketsecurity/lib/spinner' -import { pluralize } from '@socketsecurity/lib/words' +import { logger } from '@socketsecurity/registry/lib/logger' +import { pluralize } from '@socketsecurity/registry/lib/words' import { fetchSupportedScanFileNames } from './fetch-supported-scan-file-names.mts' import { outputScanReach } from './output-scan-reach.mts' import { performReachabilityAnalysis } from './perform-reachability-analysis.mts' -import { getPackageFilesForScan } from '../../utils/fs/path-resolve.mjs' +import { getPackageFilesForScan } from '../../utils/fs/path-resolve.mts' import { checkCommandInput } from '../../utils/validation/check-input.mts' import type { ReachabilityOptions } from './perform-reachability-analysis.mts' @@ -16,7 +16,6 @@ export type HandleScanReachConfig = { interactive: boolean orgSlug: string outputKind: OutputKind - outputPath: string reachabilityOptions: ReachabilityOptions targets: string[] } @@ -26,26 +25,23 @@ export async function handleScanReach({ interactive: _interactive, orgSlug, outputKind, - outputPath, reachabilityOptions, targets, }: HandleScanReachConfig) { const spinner = getDefaultSpinner() // Get supported file names - const supportedFilesCResult = await fetchSupportedScanFileNames({ - spinner: spinner ?? undefined, - }) + const supportedFilesCResult = await fetchSupportedScanFileNames({ spinner }) if (!supportedFilesCResult.ok) { await outputScanReach(supportedFilesCResult, { cwd, outputKind, - outputPath, + outputPath: '', }) return } - spinner?.start( + spinner.start( 'Searching for local manifest files to include in reachability analysis...', ) @@ -54,8 +50,8 @@ export async function handleScanReach({ cwd, }) - spinner?.successAndStop( - `Found ${packagePaths.length} ${pluralize('manifest file', { count: packagePaths.length })} for reachability analysis.`, + spinner.successAndStop( + `Found ${packagePaths.length} ${pluralize('manifest file', packagePaths.length)} for reachability analysis.`, ) const wasValidInput = checkCommandInput(outputKind, { @@ -69,25 +65,24 @@ export async function handleScanReach({ return } - const logger = getDefaultLogger() logger.success( - `Found ${packagePaths.length} local ${pluralize('file', { count: packagePaths.length })}`, + `Found ${packagePaths.length} local ${pluralize('file', packagePaths.length)}`, ) - spinner?.start('Running reachability analysis...') + spinner.start('Running reachability analysis...') const result = await performReachabilityAnalysis({ cwd, orgSlug, - outputPath, packagePaths, reachabilityOptions, - spinner: spinner ?? undefined, + spinner, target: targets[0]!, uploadManifests: true, }) - spinner?.stop() + spinner.stop() + const outputPath = result.ok ? result.data.reachabilityReport : '' await outputScanReach(result, { cwd, outputKind, outputPath }) } diff --git a/packages/cli/src/constants/env.mts b/packages/cli/src/constants/env.mts index eae3a5882..a317acdf2 100644 --- a/packages/cli/src/constants/env.mts +++ b/packages/cli/src/constants/env.mts @@ -62,6 +62,7 @@ import { SOCKET_CLI_ORG_SLUG } from '../env/socket-cli-org-slug.mts' import { SOCKET_CLI_PYCLI_LOCAL_PATH } from '../env/socket-cli-pycli-local-path.mts' import { SOCKET_CLI_SEA_NODE_VERSION } from '../env/socket-cli-sea-node-version.mts' import { SOCKET_CLI_SFW_LOCAL_PATH } from '../env/socket-cli-sfw-local-path.mts' +import { SOCKET_CLI_SKIP_UPDATE_CHECK } from '../env/socket-cli-skip-update-check.mts' import { SOCKET_CLI_VIEW_ALL_RISKS } from '../env/socket-cli-view-all-risks.mts' import { getSynpVersion } from '../env/synp-version.mts' import { TEMP } from '../env/temp.mts' @@ -119,6 +120,7 @@ export { SOCKET_CLI_PYCLI_LOCAL_PATH, SOCKET_CLI_SEA_NODE_VERSION, SOCKET_CLI_SFW_LOCAL_PATH, + SOCKET_CLI_SKIP_UPDATE_CHECK, SOCKET_CLI_VIEW_ALL_RISKS, TEMP, TERM, @@ -198,6 +200,7 @@ const envSnapshot = { SOCKET_CLI_PYCLI_LOCAL_PATH, SOCKET_CLI_SEA_NODE_VERSION, SOCKET_CLI_SFW_LOCAL_PATH, + SOCKET_CLI_SKIP_UPDATE_CHECK, SOCKET_CLI_VIEW_ALL_RISKS, TEMP, TERM, diff --git a/packages/cli/src/env/socket-cli-skip-update-check.mts b/packages/cli/src/env/socket-cli-skip-update-check.mts new file mode 100644 index 000000000..d00ac2694 --- /dev/null +++ b/packages/cli/src/env/socket-cli-skip-update-check.mts @@ -0,0 +1,9 @@ +/** + * SOCKET_CLI_SKIP_UPDATE_CHECK environment variable snapshot. + * When set to a truthy value, disables background update checks. + * This prevents 30-second delays caused by HTTP keep-alive connections. + */ + +import { env } from 'node:process' + +export const SOCKET_CLI_SKIP_UPDATE_CHECK = env['SOCKET_CLI_SKIP_UPDATE_CHECK'] diff --git a/packages/cli/src/utils/fs/glob.mts b/packages/cli/src/utils/fs/glob.mts index f3d7ab27f..760883642 100644 --- a/packages/cli/src/utils/fs/glob.mts +++ b/packages/cli/src/utils/fs/glob.mts @@ -1,4 +1,3 @@ -import os from 'node:os' import path from 'node:path' import fastGlob from 'fast-glob' @@ -6,14 +5,13 @@ import ignore from 'ignore' import micromatch from 'micromatch' import { parse as yamlParse } from 'yaml' -import { isDirSync, safeReadFile } from '@socketsecurity/lib/fs' -import { defaultIgnore } from '@socketsecurity/lib/globs' -import { readPackageJson } from '@socketsecurity/lib/packages' -import { NODE_MODULES } from '@socketsecurity/lib/paths/dirnames' -import { transform } from '@socketsecurity/lib/streams' -import { isNonEmptyString } from '@socketsecurity/lib/strings' +import { isDirSync, safeReadFile } from '@socketsecurity/registry/lib/fs' +import { defaultIgnore } from '@socketsecurity/registry/lib/globs' +import { readPackageJson } from '@socketsecurity/registry/lib/packages' +import { transform } from '@socketsecurity/registry/lib/streams' +import { isNonEmptyString } from '@socketsecurity/registry/lib/strings' -import { PNPM } from '../../constants/agents.mjs' +import { NODE_MODULES, PNPM } from '../../constants.mts' import type { Agent } from '../ecosystem/environment.mts' import type { SocketYml } from '@socketsecurity/config' @@ -46,23 +44,19 @@ async function getWorkspaceGlobs( agent: Agent, cwd = process.cwd(), ): Promise { - let workspacePatterns: string[] | undefined + let workspacePatterns: unknown if (agent === PNPM) { const workspacePath = path.join(cwd, 'pnpm-workspace.yaml') const yml = await safeReadFile(workspacePath) if (yml) { try { - const ymlStr = typeof yml === 'string' ? yml : yml.toString('utf8') - workspacePatterns = yamlParse(ymlStr)?.packages + workspacePatterns = yamlParse(yml)?.packages } catch {} } } else { - const pkgWorkspaces = (await readPackageJson(cwd, { throws: false })) - ?.workspaces - // Workspaces can be an array or an object with a packages property. - workspacePatterns = Array.isArray(pkgWorkspaces) - ? pkgWorkspaces - : pkgWorkspaces?.packages + workspacePatterns = (await readPackageJson(cwd, { throws: false }))?.[ + 'workspaces' + ] } return Array.isArray(workspacePatterns) ? workspacePatterns @@ -79,8 +73,8 @@ function ignoreFileLinesToGlobPatterns( const base = path.relative(cwd, path.dirname(filepath)).replace(/\\/g, '/') const patterns = [] for (let i = 0, { length } = lines; i < length; i += 1) { - const pattern = lines[i]?.trim() - if (pattern && pattern.length > 0 && pattern.charCodeAt(0) !== 35 /*'#'*/) { + const pattern = lines[i]!.trim() + if (pattern.length > 0 && pattern.charCodeAt(0) !== 35 /*'#'*/) { patterns.push( ignorePatternToMinimatch( pattern.length && pattern.charCodeAt(0) === 33 /*'!'*/ @@ -176,12 +170,8 @@ export function getSupportedFilePatterns( const patterns: string[] = [] for (const key of Object.keys(supportedFiles)) { const supported = supportedFiles[key] - if (supported && typeof supported === 'object') { - patterns.push( - ...(Object.values(supported) as Array<{ pattern: string }>).map( - p => `**/${p.pattern}`, - ), - ) + if (supported) { + patterns.push(...Object.values(supported).map(p => `**/${p.pattern}`)) } } return patterns @@ -221,16 +211,13 @@ export async function globWithGitIgnore( ignore: DEFAULT_IGNORE_FOR_GIT_IGNORE, }) for await (const ignorePatterns of transform( - gitIgnoreStream as AsyncIterable, - async (filepath: string) => { - const content = await safeReadFile(filepath) - const contentStr = content - ? typeof content === 'string' - ? content - : content.toString('utf8') - : '' - return ignoreFileToGlobPatterns(contentStr, filepath, cwd) - }, + gitIgnoreStream, + async (filepath: string) => + ignoreFileToGlobPatterns( + (await safeReadFile(filepath)) ?? '', + filepath, + cwd, + ), { concurrency: 8 }, )) { for (const p of ignorePatterns) { @@ -246,13 +233,14 @@ export async function globWithGitIgnore( } } - const globOptions: GlobOptions = { + const globOptions = { + __proto__: null, absolute: true, cwd, dot: true, - ignore: hasNegatedPattern ? [...defaultIgnore] : [...ignores], + ignore: hasNegatedPattern ? defaultIgnore : [...ignores], ...additionalOptions, - } + } as GlobOptions if (!hasNegatedPattern) { return await fastGlob.glob(patterns as string[], globOptions) @@ -286,7 +274,7 @@ export async function globWorkspace( ? await fastGlob.glob(workspaceGlobs, { absolute: true, cwd, - ignore: [...defaultIgnore], + ignore: defaultIgnore, }) : [] } @@ -299,31 +287,23 @@ export function isReportSupportedFile( return micromatch.some(filepath, patterns) } -/** - * Expand tilde (~) to home directory. - */ -function expandTildePath(p: string): string { - if (p === '~' || p.startsWith('~/') || p.startsWith('~\\')) { - const homeDir = os.homedir() - return p === '~' ? homeDir : path.join(homeDir, p.slice(2)) - } - return p -} - export function pathsToGlobPatterns( paths: string[] | readonly string[], + cwd?: string | undefined, ): string[] { + // TODO: Does not support `~/` paths. return paths.map(p => { - // Expand tilde paths. - const expanded = expandTildePath(p) // Convert current directory references to glob patterns. - if (expanded === '.' || expanded === './') { + if (p === '.' || p === './') { return '**/*' } + const absolutePath = path.isAbsolute(p) + ? p + : path.resolve(cwd ?? process.cwd(), p) // If the path is a directory, scan it recursively for all files. - if (isDirSync(expanded)) { - return `${expanded}/**/*` + if (isDirSync(absolutePath)) { + return `${p}/**/*` } - return expanded + return p }) } diff --git a/packages/cli/src/utils/fs/path-resolve.mts b/packages/cli/src/utils/fs/path-resolve.mts index 436d063b7..1d73b296a 100644 --- a/packages/cli/src/utils/fs/path-resolve.mts +++ b/packages/cli/src/utils/fs/path-resolve.mts @@ -127,10 +127,13 @@ export async function getPackageFilesForScan( ...options, } as PackageFilesForScanOptions - const filepaths = await globWithGitIgnore(pathsToGlobPatterns(inputPaths), { - cwd, - socketConfig, - }) + const filepaths = await globWithGitIgnore( + pathsToGlobPatterns(inputPaths, options?.cwd), + { + cwd, + socketConfig, + }, + ) return filterBySupportedScanFiles(filepaths!, supportedFiles) } diff --git a/packages/cli/src/utils/memoization.mts b/packages/cli/src/utils/memoization.mts index fae1964ca..402b457f6 100644 --- a/packages/cli/src/utils/memoization.mts +++ b/packages/cli/src/utils/memoization.mts @@ -123,8 +123,11 @@ export function memoize( * * @example * const fetchUser = memoizeAsync(async (id: string) => { - * const response = await fetch(`/api/users/${id}`) - * return response.json() + * const https = await import('node:https') + * const response = await new Promise((resolve, reject) => { + * https.request(`https://api.example.com/users/${id}`, {agent: false}, resolve).on('error', reject).end() + * }) + * return response * }, { ttl: 300000, name: 'fetchUser' }) * * await fetchUser('123') // Fetches from API diff --git a/packages/cli/src/utils/update/checker.mts b/packages/cli/src/utils/update/checker.mts index 16fb55163..0dd07dbe0 100644 --- a/packages/cli/src/utils/update/checker.mts +++ b/packages/cli/src/utils/update/checker.mts @@ -19,6 +19,9 @@ * - Version compatibility checks */ +import https from 'node:https' +import { URL } from 'node:url' + import semver from 'semver' import { NPM_REGISTRY_URL } from '@socketsecurity/lib/constants/agents' @@ -90,7 +93,9 @@ function isUpdateAvailable(current: string, latest: string): boolean { */ const NetworkUtils = { /** - * Fetch package information from npm registry. + * Fetch package information from npm registry using https.request(). + * Uses Node.js built-in https module to avoid keep-alive connection pooling + * that causes 30-second delays in process exit. */ async fetch( url: string, @@ -103,76 +108,86 @@ const NetworkUtils = { const { authInfo } = { __proto__: null, ...options } as FetchOptions - const headers = new Headers({ + const parsedUrl = new URL(url) + const headers: Record = { Accept: 'application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*', 'User-Agent': 'socket-cli-updater/1.0', - }) + } if ( authInfo && isNonEmptyString(authInfo.token) && isNonEmptyString(authInfo.type) ) { - headers.set('Authorization', `${authInfo.type} ${authInfo.token}`) + headers['Authorization'] = `${authInfo.type} ${authInfo.token}` } - const aborter = new AbortController() - const signal = aborter.signal - - // Set up timeout. - const timeout = setTimeout(() => { - aborter.abort() - }, timeoutMs) - - // Also listen for process exit. - const exitHandler = () => aborter.abort() - onExit(exitHandler) - - try { - const request = await fetch(url, { - headers, - signal, - // Additional fetch options for reliability. - redirect: 'follow', - keepalive: false, + return new Promise((resolve, reject) => { + const req = https.request( + { + agent: false, // Disable connection pooling. + headers, + hostname: parsedUrl.hostname, + method: 'GET', + path: parsedUrl.pathname + parsedUrl.search, + port: parsedUrl.port, + timeout: timeoutMs, + }, + res => { + let data = '' + + res.on('data', chunk => { + data += chunk + }) + + res.on('end', () => { + try { + if (res.statusCode !== 200) { + reject( + new Error(`HTTP ${res.statusCode}: ${res.statusMessage}`), + ) + return + } + + const json = JSON.parse(data) as unknown + + if (!json || typeof json !== 'object') { + reject(new Error('Invalid JSON response from registry')) + return + } + + resolve(json as { version?: string }) + } catch (parseError) { + const contentType = res.headers['content-type'] + if (!contentType || !contentType.includes('application/json')) { + debug(`Unexpected content type: ${contentType}`) + } + reject( + new Error( + `Failed to parse JSON response: ${parseError instanceof Error ? parseError.message : String(parseError)}`, + ), + ) + } + }) + }, + ) + + req.on('timeout', () => { + req.destroy() + reject(new Error(`Request timed out after ${timeoutMs}ms`)) }) - if (!request.ok) { - throw new Error(`HTTP ${request.status}: ${request.statusText}`) - } - - const contentType = request.headers.get('content-type') - let json: unknown - - try { - json = await request.json() - } catch (parseError) { - // Only warn about content type if JSON parsing actually fails. - if (!contentType || !contentType.includes('application/json')) { - debug(`Unexpected content type: ${contentType}`) - } - throw new Error( - `Failed to parse JSON response: ${parseError instanceof Error ? parseError.message : String(parseError)}`, - ) - } + req.on('error', error => { + reject(new Error(`Network request failed: ${error.message}`)) + }) - if (!json || typeof json !== 'object') { - throw new Error('Invalid JSON response from registry') - } + // Also listen for process exit. + const exitHandler = () => req.destroy() + onExit(exitHandler) - return json as { version?: string } - } catch (error) { - if (error instanceof Error) { - if (error.name === 'AbortError') { - throw new Error(`Request timed out after ${timeoutMs}ms`) - } - throw new Error(`Network request failed: ${error.message}`) - } - throw new Error(`Unknown network error: ${String(error)}`) - } finally { - clearTimeout(timeout) - } + req.end() + }) }, /** diff --git a/packages/cli/test/unit/commands/audit-log/handle-audit-log.test.mts b/packages/cli/test/unit/commands/audit-log/handle-audit-log.test.mts index 5b74a7425..bacaa5d0f 100644 --- a/packages/cli/test/unit/commands/audit-log/handle-audit-log.test.mts +++ b/packages/cli/test/unit/commands/audit-log/handle-audit-log.test.mts @@ -186,9 +186,7 @@ describe('handleAuditLog', () => { }) it('handles empty audit logs', async () => { - const { fetchAuditLog } = await import( - '../../../../src/commands/audit-log/fetch-audit-log.mts' - ) + await import('../../../../src/commands/audit-log/fetch-audit-log.mts') const { outputAuditLog } = await import( '../../../../src/commands/audit-log/output-audit-log.mts' ) @@ -208,9 +206,7 @@ describe('handleAuditLog', () => { }) it('handles fetch errors', async () => { - const { fetchAuditLog } = await import( - '../../../../src/commands/audit-log/fetch-audit-log.mts' - ) + await import('../../../../src/commands/audit-log/fetch-audit-log.mts') const { outputAuditLog } = await import( '../../../../src/commands/audit-log/output-audit-log.mts' ) diff --git a/packages/cli/test/unit/commands/config/handle-config-auto.test.mts b/packages/cli/test/unit/commands/config/handle-config-auto.test.mts index 07f5cf7c6..05ff10ecb 100644 --- a/packages/cli/test/unit/commands/config/handle-config-auto.test.mts +++ b/packages/cli/test/unit/commands/config/handle-config-auto.test.mts @@ -97,9 +97,6 @@ describe('handleConfigAuto', () => { }) it('handles markdown output format', async () => { - const { discoverConfigValue } = await import( - '../../../../src/commands/config/discover-config-value.mts' - ) const { outputConfigAuto } = await import( '../../../../src/commands/config/output-config-auto.mts' ) @@ -133,9 +130,6 @@ describe('handleConfigAuto', () => { }) it('handles text output format', async () => { - const { discoverConfigValue } = await import( - '../../../../src/commands/config/discover-config-value.mts' - ) const { outputConfigAuto } = await import( '../../../../src/commands/config/output-config-auto.mts' ) diff --git a/packages/cli/test/unit/commands/config/handle-config-get.test.mts b/packages/cli/test/unit/commands/config/handle-config-get.test.mts index 9523f6372..9830acf04 100644 --- a/packages/cli/test/unit/commands/config/handle-config-get.test.mts +++ b/packages/cli/test/unit/commands/config/handle-config-get.test.mts @@ -143,7 +143,6 @@ describe('handleConfigGet', () => { }) it('handles empty config value', async () => { - const { getConfigValue } = await import('../../../../src/utils/config.mts') const { outputConfigGet } = await import( '../../../../src/commands/config/output-config-get.mts' ) @@ -160,7 +159,6 @@ describe('handleConfigGet', () => { }) it('handles undefined config value', async () => { - const { getConfigValue } = await import('../../../../src/utils/config.mts') const { outputConfigGet } = await import( '../../../../src/commands/config/output-config-get.mts' ) diff --git a/packages/cli/test/unit/commands/config/handle-config-set.test.mts b/packages/cli/test/unit/commands/config/handle-config-set.test.mts index dc00e3730..30f2280e5 100644 --- a/packages/cli/test/unit/commands/config/handle-config-set.test.mts +++ b/packages/cli/test/unit/commands/config/handle-config-set.test.mts @@ -137,9 +137,6 @@ describe('handleConfigSet', () => { it('logs debug information', async () => { const { debug, debugDir } = await import('@socketsecurity/lib/debug') - const { updateConfigValue } = await import( - '../../../../src/utils/config.mts' - ) mockUpdateConfigValue.mockReturnValue(createSuccessResult('debug-value')) @@ -162,9 +159,6 @@ describe('handleConfigSet', () => { it('logs debug information on failure', async () => { const { debug } = await import('@socketsecurity/lib/debug') - const { updateConfigValue } = await import( - '../../../../src/utils/config.mts' - ) mockUpdateConfigValue.mockReturnValue(createErrorResult('Failed')) diff --git a/packages/cli/test/unit/commands/config/handle-config-unset.test.mts b/packages/cli/test/unit/commands/config/handle-config-unset.test.mts index dceeba714..96e6e71b0 100644 --- a/packages/cli/test/unit/commands/config/handle-config-unset.test.mts +++ b/packages/cli/test/unit/commands/config/handle-config-unset.test.mts @@ -147,9 +147,6 @@ describe('handleConfigUnset', () => { }) it('handles text output', async () => { - const { updateConfigValue } = await import( - '../../../../src/utils/config.mts' - ) const { outputConfigUnset } = await import( '../../../../src/commands/config/output-config-unset.mts' ) diff --git a/packages/cli/test/unit/commands/fix/ghsa-tracker.test.mts b/packages/cli/test/unit/commands/fix/ghsa-tracker.test.mts index 8b64659ec..85a89642c 100644 --- a/packages/cli/test/unit/commands/fix/ghsa-tracker.test.mts +++ b/packages/cli/test/unit/commands/fix/ghsa-tracker.test.mts @@ -97,7 +97,6 @@ describe('ghsa-tracker', () => { }) it('creates new tracker when file does not exist', async () => { - const { readJson } = await import('@socketsecurity/lib/fs') mockReadJson.mockRejectedValue(new Error('ENOENT')) const result = await loadGhsaTracker(mockCwd) @@ -109,7 +108,6 @@ describe('ghsa-tracker', () => { }) it('handles null tracker data', async () => { - const { readJson } = await import('@socketsecurity/lib/fs') mockReadJson.mockResolvedValue(null) const result = await loadGhsaTracker(mockCwd) @@ -149,7 +147,7 @@ describe('ghsa-tracker', () => { describe('markGhsaFixed', () => { it('adds new GHSA fix record', async () => { - const { readJson, writeJson } = await import('@socketsecurity/lib/fs') + const { writeJson } = await import('@socketsecurity/lib/fs') const existingTracker: GhsaTracker = { version: 1, fixed: [], @@ -176,7 +174,7 @@ describe('ghsa-tracker', () => { }) it('replaces existing GHSA fix record', async () => { - const { readJson, writeJson } = await import('@socketsecurity/lib/fs') + const { writeJson } = await import('@socketsecurity/lib/fs') const existingTracker: GhsaTracker = { version: 1, fixed: [ @@ -213,7 +211,6 @@ describe('ghsa-tracker', () => { }) it('sorts records by fixedAt descending', async () => { - const { readJson, writeJson } = await import('@socketsecurity/lib/fs') const existingTracker: GhsaTracker = { version: 1, fixed: [ @@ -237,7 +234,6 @@ describe('ghsa-tracker', () => { }) it('handles errors gracefully', async () => { - const { readJson } = await import('@socketsecurity/lib/fs') mockReadJson.mockRejectedValue(new Error('Permission denied')) // Should not throw. @@ -249,7 +245,6 @@ describe('ghsa-tracker', () => { describe('isGhsaFixed', () => { it('returns true for fixed GHSA', async () => { - const { readJson } = await import('@socketsecurity/lib/fs') const tracker: GhsaTracker = { version: 1, fixed: [ @@ -270,7 +265,6 @@ describe('ghsa-tracker', () => { }) it('returns false for unfixed GHSA', async () => { - const { readJson } = await import('@socketsecurity/lib/fs') const tracker: GhsaTracker = { version: 1, fixed: [], @@ -284,7 +278,6 @@ describe('ghsa-tracker', () => { }) it('returns false on error', async () => { - const { readJson } = await import('@socketsecurity/lib/fs') mockReadJson.mockRejectedValue(new Error('Read error')) const result = await isGhsaFixed(mockCwd, 'GHSA-1234-5678-90ab') @@ -295,7 +288,6 @@ describe('ghsa-tracker', () => { describe('getFixedGhsas', () => { it('returns all fixed GHSA records', async () => { - const { readJson } = await import('@socketsecurity/lib/fs') const tracker: GhsaTracker = { version: 1, fixed: [ @@ -323,7 +315,6 @@ describe('ghsa-tracker', () => { }) it('returns empty array on error', async () => { - const { readJson } = await import('@socketsecurity/lib/fs') mockReadJson.mockRejectedValue(new Error('Read error')) const result = await getFixedGhsas(mockCwd) diff --git a/packages/cli/test/unit/commands/manifest/handle-manifest-conda.test.mts b/packages/cli/test/unit/commands/manifest/handle-manifest-conda.test.mts index 576dcf498..ae6ac1eb2 100644 --- a/packages/cli/test/unit/commands/manifest/handle-manifest-conda.test.mts +++ b/packages/cli/test/unit/commands/manifest/handle-manifest-conda.test.mts @@ -48,12 +48,10 @@ vi.mock('../../../../src/commands/manifest/output-requirements.mts', () => ({ describe('handleManifestConda', () => { it('converts conda file and outputs requirements successfully', async () => { - const { convertCondaToRequirements } = await import( + await import( '../../../../src/commands/manifest/convert-conda-to-requirements.mts' ) - const { outputRequirements } = await import( - '../../../../src/commands/manifest/output-requirements.mts' - ) + await import('../../../../src/commands/manifest/output-requirements.mts') const mockConvert = mockConvertCondaToRequirements const mockOutput = mockOutputRequirements @@ -86,12 +84,10 @@ describe('handleManifestConda', () => { }) it('handles conversion failure', async () => { - const { convertCondaToRequirements } = await import( + await import( '../../../../src/commands/manifest/convert-conda-to-requirements.mts' ) - const { outputRequirements } = await import( - '../../../../src/commands/manifest/output-requirements.mts' - ) + await import('../../../../src/commands/manifest/output-requirements.mts') const mockConvert = mockConvertCondaToRequirements const mockOutput = mockOutputRequirements @@ -111,12 +107,10 @@ describe('handleManifestConda', () => { }) it('handles different output formats', async () => { - const { convertCondaToRequirements } = await import( + await import( '../../../../src/commands/manifest/convert-conda-to-requirements.mts' ) - const { outputRequirements } = await import( - '../../../../src/commands/manifest/output-requirements.mts' - ) + await import('../../../../src/commands/manifest/output-requirements.mts') const mockConvert = mockConvertCondaToRequirements const mockOutput = mockOutputRequirements @@ -143,7 +137,7 @@ describe('handleManifestConda', () => { }) it('handles verbose mode', async () => { - const { convertCondaToRequirements } = await import( + await import( '../../../../src/commands/manifest/convert-conda-to-requirements.mts' ) const mockConvert = mockConvertCondaToRequirements @@ -166,7 +160,7 @@ describe('handleManifestConda', () => { }) it('handles different working directories', async () => { - const { convertCondaToRequirements } = await import( + await import( '../../../../src/commands/manifest/convert-conda-to-requirements.mts' ) const mockConvert = mockConvertCondaToRequirements diff --git a/packages/cli/test/unit/commands/repository/fetch-list-repos.test.mts b/packages/cli/test/unit/commands/repository/fetch-list-repos.test.mts index cc32148aa..2426c131f 100644 --- a/packages/cli/test/unit/commands/repository/fetch-list-repos.test.mts +++ b/packages/cli/test/unit/commands/repository/fetch-list-repos.test.mts @@ -192,7 +192,7 @@ describe('fetchListRepos', () => { }) it('handles empty results on specific page', async () => { - const { mockSdk } = await setupSdkMockSuccess('listRepositories', { + await setupSdkMockSuccess('listRepositories', { results: [], nextPage: null, }) diff --git a/packages/cli/test/unit/commands/scan/handle-create-new-scan.test.mts b/packages/cli/test/unit/commands/scan/handle-create-new-scan.test.mts index fb60bfdf9..d074729e4 100644 --- a/packages/cli/test/unit/commands/scan/handle-create-new-scan.test.mts +++ b/packages/cli/test/unit/commands/scan/handle-create-new-scan.test.mts @@ -150,9 +150,7 @@ describe('handleCreateNewScan', () => { const { getPackageFilesForScan } = await import( '../../../../src/utils/fs/path-resolve.mts' ) - const { checkCommandInput } = await import( - '../../../../src/utils/validation/check-input.mts' - ) + await import('../../../../src/utils/validation/check-input.mts') const { fetchCreateOrgFullScan } = await import( '../../../../src/commands/scan/fetch-create-org-full-scan.mts' ) @@ -202,15 +200,13 @@ describe('handleCreateNewScan', () => { const { generateAutoManifest } = await import( '../../../../src/commands/manifest/generate_auto_manifest.mts' ) - const { fetchSupportedScanFileNames } = await import( + await import( '../../../../src/commands/scan/fetch-supported-scan-file-names.mts' ) const { getPackageFilesForScan } = await import( '../../../../src/utils/fs/path-resolve.mts' ) - const { checkCommandInput } = await import( - '../../../../src/utils/validation/check-input.mts' - ) + await import('../../../../src/utils/validation/check-input.mts') mockReadOrDefaultSocketJson.mockReturnValue({}) mockDetectManifestActions.mockResolvedValue({ detected: true }) @@ -298,12 +294,8 @@ describe('handleCreateNewScan', () => { const { getPackageFilesForScan } = await import( '../../../../src/utils/fs/path-resolve.mts' ) - const { checkCommandInput } = await import( - '../../../../src/utils/validation/check-input.mts' - ) - const { fetchCreateOrgFullScan } = await import( - '../../../../src/commands/scan/fetch-create-org-full-scan.mts' - ) + await import('../../../../src/utils/validation/check-input.mts') + await import('../../../../src/commands/scan/fetch-create-org-full-scan.mts') const { finalizeTier1Scan } = await import( '../../../../src/commands/scan/finalize-tier1-scan.mts' ) @@ -339,18 +331,12 @@ describe('handleCreateNewScan', () => { }) it('handles scan report generation', async () => { - const { fetchSupportedScanFileNames } = await import( + await import( '../../../../src/commands/scan/fetch-supported-scan-file-names.mts' ) - const { getPackageFilesForScan } = await import( - '../../../../src/utils/fs/path-resolve.mts' - ) - const { checkCommandInput } = await import( - '../../../../src/utils/validation/check-input.mts' - ) - const { fetchCreateOrgFullScan } = await import( - '../../../../src/commands/scan/fetch-create-org-full-scan.mts' - ) + await import('../../../../src/utils/fs/path-resolve.mts') + await import('../../../../src/utils/validation/check-input.mts') + await import('../../../../src/commands/scan/fetch-create-org-full-scan.mts') const { handleScanReport } = await import( '../../../../src/commands/scan/handle-scan-report.mts' ) @@ -379,7 +365,7 @@ describe('handleCreateNewScan', () => { }) it('handles fetch supported files failure', async () => { - const { fetchSupportedScanFileNames } = await import( + await import( '../../../../src/commands/scan/fetch-supported-scan-file-names.mts' ) const { outputCreateNewScan } = await import( diff --git a/packages/cli/test/unit/commands/scan/handle-delete-scan.test.mts b/packages/cli/test/unit/commands/scan/handle-delete-scan.test.mts index d33eb7610..420962777 100644 --- a/packages/cli/test/unit/commands/scan/handle-delete-scan.test.mts +++ b/packages/cli/test/unit/commands/scan/handle-delete-scan.test.mts @@ -41,9 +41,7 @@ vi.mock('../../../../src/commands/scan/output-delete-scan.mts', () => ({ describe('handleDeleteScan', () => { it('deletes scan and outputs result successfully', async () => { - const { outputDeleteScan } = await import( - '../../../../src/commands/scan/output-delete-scan.mts' - ) + await import('../../../../src/commands/scan/output-delete-scan.mts') const mockFetch = mockFetchDeleteOrgFullScan const mockOutput = mockOutputDeleteScan @@ -63,9 +61,7 @@ describe('handleDeleteScan', () => { }) it('handles deletion failure', async () => { - const { outputDeleteScan } = await import( - '../../../../src/commands/scan/output-delete-scan.mts' - ) + await import('../../../../src/commands/scan/output-delete-scan.mts') const mockFetch = mockFetchDeleteOrgFullScan const mockOutput = mockOutputDeleteScan @@ -81,9 +77,7 @@ describe('handleDeleteScan', () => { }) it('handles markdown output format', async () => { - const { outputDeleteScan } = await import( - '../../../../src/commands/scan/output-delete-scan.mts' - ) + await import('../../../../src/commands/scan/output-delete-scan.mts') const mockFetch = mockFetchDeleteOrgFullScan const mockOutput = mockOutputDeleteScan @@ -116,9 +110,7 @@ describe('handleDeleteScan', () => { }) it('handles text output format', async () => { - const { outputDeleteScan } = await import( - '../../../../src/commands/scan/output-delete-scan.mts' - ) + await import('../../../../src/commands/scan/output-delete-scan.mts') const mockFetch = mockFetchDeleteOrgFullScan const mockOutput = mockOutputDeleteScan diff --git a/packages/cli/test/unit/commands/scan/handle-list-scans.test.mts b/packages/cli/test/unit/commands/scan/handle-list-scans.test.mts index 18b0d177d..9fa1de85b 100644 --- a/packages/cli/test/unit/commands/scan/handle-list-scans.test.mts +++ b/packages/cli/test/unit/commands/scan/handle-list-scans.test.mts @@ -41,12 +41,8 @@ vi.mock('../../../../src/commands/scan/output-list-scans.mts', () => ({ describe('handleListScans', () => { it('fetches and outputs scan list successfully', async () => { - const { fetchOrgFullScanList } = await import( - '../../../../src/commands/scan/fetch-list-scans.mts' - ) - const { outputListScans } = await import( - '../../../../src/commands/scan/output-list-scans.mts' - ) + await import('../../../../src/commands/scan/fetch-list-scans.mts') + await import('../../../../src/commands/scan/output-list-scans.mts') const mockFetch = mockFetchOrgFullScanList const mockOutput = mockOutputListScans @@ -101,12 +97,8 @@ describe('handleListScans', () => { }) it('handles fetch failure', async () => { - const { fetchOrgFullScanList } = await import( - '../../../../src/commands/scan/fetch-list-scans.mts' - ) - const { outputListScans } = await import( - '../../../../src/commands/scan/output-list-scans.mts' - ) + await import('../../../../src/commands/scan/fetch-list-scans.mts') + await import('../../../../src/commands/scan/output-list-scans.mts') const mockFetch = mockFetchOrgFullScanList const mockOutput = mockOutputListScans @@ -129,9 +121,7 @@ describe('handleListScans', () => { }) it('handles pagination parameters', async () => { - const { fetchOrgFullScanList } = await import( - '../../../../src/commands/scan/fetch-list-scans.mts' - ) + await import('../../../../src/commands/scan/fetch-list-scans.mts') const mockFetch = mockFetchOrgFullScanList mockFetch.mockResolvedValue(createSuccessResult([])) @@ -160,12 +150,8 @@ describe('handleListScans', () => { }) it('handles markdown output format', async () => { - const { fetchOrgFullScanList } = await import( - '../../../../src/commands/scan/fetch-list-scans.mts' - ) - const { outputListScans } = await import( - '../../../../src/commands/scan/output-list-scans.mts' - ) + await import('../../../../src/commands/scan/fetch-list-scans.mts') + await import('../../../../src/commands/scan/output-list-scans.mts') const mockFetch = mockFetchOrgFullScanList const mockOutput = mockOutputListScans @@ -187,9 +173,7 @@ describe('handleListScans', () => { }) it('handles filtering by branch and repository', async () => { - const { fetchOrgFullScanList } = await import( - '../../../../src/commands/scan/fetch-list-scans.mts' - ) + await import('../../../../src/commands/scan/fetch-list-scans.mts') const mockFetch = mockFetchOrgFullScanList mockFetch.mockResolvedValue(createSuccessResult([])) diff --git a/packages/cli/test/unit/commands/scan/handle-scan-metadata.test.mts b/packages/cli/test/unit/commands/scan/handle-scan-metadata.test.mts index 84536bac7..42d8a00c1 100644 --- a/packages/cli/test/unit/commands/scan/handle-scan-metadata.test.mts +++ b/packages/cli/test/unit/commands/scan/handle-scan-metadata.test.mts @@ -41,12 +41,8 @@ vi.mock('../../../../src/commands/scan/output-scan-metadata.mts', () => ({ describe('handleOrgScanMetadata', () => { it('fetches and outputs scan metadata successfully', async () => { - const { fetchScanMetadata } = await import( - '../../../../src/commands/scan/fetch-scan-metadata.mts' - ) - const { outputScanMetadata } = await import( - '../../../../src/commands/scan/output-scan-metadata.mts' - ) + await import('../../../../src/commands/scan/fetch-scan-metadata.mts') + await import('../../../../src/commands/scan/output-scan-metadata.mts') const mockFetch = mockFetchScanMetadata const mockOutput = mockOutputScanMetadata @@ -71,12 +67,8 @@ describe('handleOrgScanMetadata', () => { }) it('handles fetch failure', async () => { - const { fetchScanMetadata } = await import( - '../../../../src/commands/scan/fetch-scan-metadata.mts' - ) - const { outputScanMetadata } = await import( - '../../../../src/commands/scan/output-scan-metadata.mts' - ) + await import('../../../../src/commands/scan/fetch-scan-metadata.mts') + await import('../../../../src/commands/scan/output-scan-metadata.mts') const mockFetch = mockFetchScanMetadata const mockOutput = mockOutputScanMetadata @@ -92,12 +84,8 @@ describe('handleOrgScanMetadata', () => { }) it('handles markdown output format', async () => { - const { fetchScanMetadata } = await import( - '../../../../src/commands/scan/fetch-scan-metadata.mts' - ) - const { outputScanMetadata } = await import( - '../../../../src/commands/scan/output-scan-metadata.mts' - ) + await import('../../../../src/commands/scan/fetch-scan-metadata.mts') + await import('../../../../src/commands/scan/output-scan-metadata.mts') const mockFetch = mockFetchScanMetadata const mockOutput = mockOutputScanMetadata @@ -118,12 +106,8 @@ describe('handleOrgScanMetadata', () => { }) it('handles different scan IDs', async () => { - const { fetchScanMetadata } = await import( - '../../../../src/commands/scan/fetch-scan-metadata.mts' - ) - const { outputScanMetadata } = await import( - '../../../../src/commands/scan/output-scan-metadata.mts' - ) + await import('../../../../src/commands/scan/fetch-scan-metadata.mts') + await import('../../../../src/commands/scan/output-scan-metadata.mts') const mockFetch = mockFetchScanMetadata const _mockOutput = mockOutputScanMetadata @@ -145,12 +129,8 @@ describe('handleOrgScanMetadata', () => { }) it('handles text output with detailed metadata', async () => { - const { fetchScanMetadata } = await import( - '../../../../src/commands/scan/fetch-scan-metadata.mts' - ) - const { outputScanMetadata } = await import( - '../../../../src/commands/scan/output-scan-metadata.mts' - ) + await import('../../../../src/commands/scan/fetch-scan-metadata.mts') + await import('../../../../src/commands/scan/output-scan-metadata.mts') const mockFetch = mockFetchScanMetadata const mockOutput = mockOutputScanMetadata diff --git a/packages/cli/test/unit/commands/scan/handle-scan-view.test.mts b/packages/cli/test/unit/commands/scan/handle-scan-view.test.mts index 259be8a6c..f02ee4491 100644 --- a/packages/cli/test/unit/commands/scan/handle-scan-view.test.mts +++ b/packages/cli/test/unit/commands/scan/handle-scan-view.test.mts @@ -101,9 +101,7 @@ describe('handleScanView', () => { }) it('handles markdown output', async () => { - const { fetchScan } = await import( - '../../../../../src/commands/scan/fetch-scan.mts' - ) + await import('../../../../../src/commands/scan/fetch-scan.mts') const { outputScanView } = await import( '../../../../../src/commands/scan/output-scan-view.mts' ) @@ -130,9 +128,7 @@ describe('handleScanView', () => { }) it('handles empty file path', async () => { - const { fetchScan } = await import( - '../../../../../src/commands/scan/fetch-scan.mts' - ) + await import('../../../../../src/commands/scan/fetch-scan.mts') const { outputScanView } = await import( '../../../../../src/commands/scan/output-scan-view.mts' ) @@ -155,9 +151,7 @@ describe('handleScanView', () => { }) it('handles different scan statuses', async () => { - const { fetchScan } = await import( - '../../../../../src/commands/scan/fetch-scan.mts' - ) + await import('../../../../../src/commands/scan/fetch-scan.mts') const { outputScanView } = await import( '../../../../../src/commands/scan/output-scan-view.mts' ) diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json index 0ecd24baf..cc67c10c7 100644 --- a/packages/cli/tsconfig.json +++ b/packages/cli/tsconfig.json @@ -1,6 +1,11 @@ { "extends": "../../.config/tsconfig.base.json", - "include": ["src/**/*.mts", "src/**/*.d.ts", "src/**/*.tsx", "test/helpers/**/*.mts"], + "include": [ + "src/**/*.mts", + "src/**/*.d.ts", + "src/**/*.tsx", + "test/helpers/**/*.mts" + ], "exclude": [ ".cache/**", ".claude/**", @@ -14,6 +19,6 @@ "src/commands/analytics/output-analytics.mts", "src/commands/audit-log/output-audit-log.mts", "src/commands/threat-feed/output-threat-feed.mts", - "test/helpers/**/*.test.mts", + "test/helpers/**/*.test.mts" ] } diff --git a/packages/cli/vitest.e2e.config.mts b/packages/cli/vitest.e2e.config.mts index bd4ed84fc..b25b3d7c7 100644 --- a/packages/cli/vitest.e2e.config.mts +++ b/packages/cli/vitest.e2e.config.mts @@ -9,9 +9,7 @@ export default defineConfig({ test: { globals: false, environment: 'node', - include: [ - '**/*.e2e.test.{mts,ts}', - ], + include: ['**/*.e2e.test.{mts,ts}'], exclude: [ '**/node_modules/**', '**/dist/**', diff --git a/packages/socket/scripts/build.mjs b/packages/socket/scripts/build.mjs index 2a729cc0d..517355e72 100644 --- a/packages/socket/scripts/build.mjs +++ b/packages/socket/scripts/build.mjs @@ -7,17 +7,17 @@ * 3. Copies LICENSE, CHANGELOG.md, and logo images from repo root */ -import { existsSync, mkdirSync, writeFileSync } from 'node:fs' -import { promises as fs } from 'node:fs' +import { existsSync, promises as fs, mkdirSync, writeFileSync } from 'node:fs' import path from 'node:path' import { fileURLToPath } from 'node:url' import { build } from 'esbuild' -import { getSpinner } from '@socketsecurity/lib/constants/process' + import { WIN32 } from '@socketsecurity/lib/constants/platform' +import { getSpinner } from '@socketsecurity/lib/constants/process' import { getDefaultLogger } from '@socketsecurity/lib/logger' -import { Spinner, withSpinner } from '@socketsecurity/lib/spinner' import { spawn } from '@socketsecurity/lib/spawn' +import { Spinner, withSpinner } from '@socketsecurity/lib/spinner' import seaConfig from './esbuild.bootstrap.config.mjs' @@ -30,11 +30,11 @@ const logger = getDefaultLogger() async function ensureBootstrapPackageBuilt() { const bootstrapSource = path.join( monorepoRoot, - 'packages/bootstrap/src/bootstrap-npm.mts' + 'packages/bootstrap/src/bootstrap-npm.mts', ) const bootstrapDist = path.join( monorepoRoot, - 'packages/bootstrap/dist/bootstrap-npm.js' + 'packages/bootstrap/dist/bootstrap-npm.js', ) logger.group('Checking bootstrap package') @@ -66,7 +66,7 @@ async function ensureBootstrapPackageBuilt() { cwd: monorepoRoot, shell: WIN32, stdio: 'pipe', - } + }, ) if (spawnResult.code !== 0) { diff --git a/packages/socket/scripts/esbuild.bootstrap.config.mjs b/packages/socket/scripts/esbuild.bootstrap.config.mjs index 6bdca63d6..908d10194 100644 --- a/packages/socket/scripts/esbuild.bootstrap.config.mjs +++ b/packages/socket/scripts/esbuild.bootstrap.config.mjs @@ -6,9 +6,9 @@ import { readFileSync } from 'node:fs' import path from 'node:path' import { fileURLToPath } from 'node:url' +import { deadCodeEliminationPlugin } from 'build-infra/lib/esbuild-plugin-dead-code-elimination' import semver from 'semver' -import { deadCodeEliminationPlugin } from 'build-infra/lib/esbuild-plugin-dead-code-elimination' const __dirname = path.dirname(fileURLToPath(import.meta.url)) const packageRoot = path.resolve(__dirname, '..') @@ -35,7 +35,7 @@ export default { __MIN_NODE_VERSION__: JSON.stringify(minNodeVersion), __SOCKET_CLI_VERSION__: JSON.stringify(cliVersion), __SOCKET_CLI_VERSION_MAJOR__: JSON.stringify(cliVersionMajor), - 'INLINED_SOCKET_BOOTSTRAP_PUBLISHED_BUILD': 'true', + INLINED_SOCKET_BOOTSTRAP_PUBLISHED_BUILD: 'true', }, entryPoints: [path.join(bootstrapPackage, 'src', 'bootstrap-npm.mts')], external: [], diff --git a/packages/socket/scripts/verify-package.mjs b/packages/socket/scripts/verify-package.mjs index 2dbd74a7c..411402ff9 100644 --- a/packages/socket/scripts/verify-package.mjs +++ b/packages/socket/scripts/verify-package.mjs @@ -3,9 +3,10 @@ import path from 'node:path' import process from 'node:process' import { fileURLToPath } from 'node:url' -import { getDefaultLogger } from '@socketsecurity/lib/logger' import colors from 'yoctocolors-cjs' +import { getDefaultLogger } from '@socketsecurity/lib/logger' + const __filename = fileURLToPath(import.meta.url) const __dirname = path.dirname(__filename) const packageRoot = path.resolve(__dirname, '..') diff --git a/packages/socket/test/bootstrap.test.mjs b/packages/socket/test/bootstrap.test.mjs index 8a454ca1f..d542a4130 100644 --- a/packages/socket/test/bootstrap.test.mjs +++ b/packages/socket/test/bootstrap.test.mjs @@ -7,14 +7,13 @@ */ import { spawnSync } from 'node:child_process' -import { existsSync } from 'node:fs' -import { promises as fs } from 'node:fs' +import { existsSync, promises as fs } from 'node:fs' import { homedir, platform, tmpdir } from 'node:os' import path from 'node:path' import { fileURLToPath } from 'node:url' import { brotliCompressSync } from 'node:zlib' -import { describe, expect, it, beforeEach, afterEach } from 'vitest' +import { afterEach, beforeEach, describe, expect, it } from 'vitest' const __dirname = path.dirname(fileURLToPath(import.meta.url)) const packageDir = path.join(__dirname, '..') @@ -61,7 +60,9 @@ describe('socket package', () => { expect(pkgJson.optionalDependencies).toBeDefined() for (const platformPkg of expectedPlatforms) { - expect(pkgJson.optionalDependencies[platformPkg]).toMatch(/^\^?\d+\.\d+\.\d+/) + expect(pkgJson.optionalDependencies[platformPkg]).toMatch( + /^\^?\d+\.\d+\.\d+/, + ) } }) @@ -125,7 +126,8 @@ describe('socket package', () => { const result = spawnSync(process.execPath, [bootstrapPath, '--version'], { stdio: ['ignore', 'pipe', 'pipe'], - timeout: 60000, // 60s for npm download. + // 60s for npm download. + timeout: 60_000, }) // Should succeed. @@ -136,9 +138,17 @@ describe('socket package', () => { expect(stdout).toMatch(/\d+\.\d+\.\d+/) // Should have cached CLI. - const cliPath = path.join(testDir, '.socket', '_dlx', 'cli', 'dist', 'cli.js') + const cliPath = path.join( + testDir, + '.socket', + '_dlx', + 'cli', + 'dist', + 'cli.js', + ) expect(existsSync(cliPath)).toBe(true) - }, 120000) // 2 min timeout + // 2 min timeout + }, 120_000) it('should use local CLI path when SOCKET_CLI_LOCAL_PATH is set', async () => { // Create mock CLI directory. @@ -237,15 +247,19 @@ describe('socket package', () => { const invalidCliPath = path.join(invalidCliDir, 'bad-cli.js') await fs.writeFile(invalidCliPath, 'this is not valid javascript {{{') - const result = spawnSync(process.execPath, [bootstrapPath, '--version'], { - env: { - ...process.env, - HOME: testDir, - SOCKET_CLI_LOCAL_PATH: invalidCliPath, + const result = spawnSync( + process.execPath, + [bootstrapPath, '--version'], + { + env: { + ...process.env, + HOME: testDir, + SOCKET_CLI_LOCAL_PATH: invalidCliPath, + }, + stdio: ['ignore', 'pipe', 'pipe'], + timeout: 5000, }, - stdio: ['ignore', 'pipe', 'pipe'], - timeout: 5000, - }) + ) // Should fail gracefully. expect(result.status).not.toBe(0) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 557039c52..22a461bb5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,72 +15,21 @@ catalogs: '@babel/parser': specifier: 7.28.4 version: 7.28.4 - '@babel/plugin-proposal-export-default-from': - specifier: 7.27.1 - version: 7.27.1 - '@babel/plugin-transform-export-namespace-from': - specifier: 7.27.1 - version: 7.27.1 - '@babel/plugin-transform-runtime': - specifier: 7.28.3 - version: 7.28.3 - '@babel/preset-react': - specifier: 7.27.1 - version: 7.27.1 - '@babel/preset-typescript': - specifier: 7.27.1 - version: 7.27.1 - '@babel/runtime': - specifier: 7.28.4 - version: 7.28.4 '@babel/traverse': specifier: 7.28.4 version: 7.28.4 '@babel/types': specifier: 7.28.5 version: 7.28.5 - '@biomejs/biome': - specifier: 2.2.4 - version: 2.2.4 - '@dotenvx/dotenvx': - specifier: 1.49.0 - version: 1.49.0 - '@eslint/compat': - specifier: 1.3.2 - version: 1.3.2 - '@eslint/js': - specifier: 9.35.0 - version: 9.35.0 '@gitbeaker/rest': specifier: 43.7.0 version: 43.7.0 '@npmcli/arborist': specifier: 9.1.4 version: 9.1.4 - '@npmcli/config': - specifier: 10.4.0 - version: 10.4.0 - '@octokit/openapi-types': - specifier: 25.1.0 - version: 25.1.0 '@octokit/rest': specifier: 22.0.0 version: 22.0.0 - '@octokit/types': - specifier: 14.1.0 - version: 14.1.0 - '@pnpm/dependency-path': - specifier: 1001.1.0 - version: 1001.1.0 - '@pnpm/lockfile.detect-dep-types': - specifier: 1001.0.13 - version: 1001.0.13 - '@pnpm/lockfile.fs': - specifier: 1001.1.17 - version: 1001.1.17 - '@pnpm/logger': - specifier: 1001.0.0 - version: 1001.0.0 '@sentry/node': specifier: 8.0.0 version: 8.0.0 @@ -102,63 +51,12 @@ catalogs: '@socketsecurity/config': specifier: 3.0.1 version: 3.0.1 - '@socketsecurity/registry': - specifier: 2.0.2 - version: 2.0.2 + '@socketsecurity/lib': + specifier: 4.3.0 + version: 4.3.0 '@socketsecurity/sdk': specifier: 3.1.3 version: 3.1.3 - '@types/cmd-shim': - specifier: 5.0.2 - version: 5.0.2 - '@types/ink': - specifier: 2.0.3 - version: 2.0.3 - '@types/js-yaml': - specifier: 4.0.9 - version: 4.0.9 - '@types/micromatch': - specifier: 4.0.9 - version: 4.0.9 - '@types/mock-fs': - specifier: 4.13.4 - version: 4.13.4 - '@types/node': - specifier: 24.9.2 - version: 24.9.2 - '@types/npm-package-arg': - specifier: 6.1.4 - version: 6.1.4 - '@types/npmcli__arborist': - specifier: 6.3.1 - version: 6.3.1 - '@types/npmcli__config': - specifier: 6.0.3 - version: 6.0.3 - '@types/proc-log': - specifier: 3.0.4 - version: 3.0.4 - '@types/react': - specifier: 19.2.2 - version: 19.2.2 - '@types/semver': - specifier: 7.7.1 - version: 7.7.1 - '@types/which': - specifier: 3.0.4 - version: 3.0.4 - '@types/yargs-parser': - specifier: 21.0.3 - version: 21.0.3 - '@typescript-eslint/parser': - specifier: 8.44.1 - version: 8.44.1 - '@vitest/coverage-v8': - specifier: 4.0.3 - version: 4.0.3 - '@yao-pkg/pkg': - specifier: 6.8.0 - version: 6.8.0 ajv-dist: specifier: 8.17.1 version: 8.17.1 @@ -177,42 +75,21 @@ catalogs: del-cli: specifier: 6.0.0 version: 6.0.0 - dev-null-cli: - specifier: 2.0.0 - version: 2.0.0 + emoji-regex: + specifier: 10.6.0 + version: 10.6.0 esbuild: specifier: 0.25.11 version: 0.25.11 - eslint: - specifier: 9.35.0 - version: 9.35.0 - eslint-import-resolver-typescript: - specifier: 4.4.4 - version: 4.4.4 - eslint-plugin-import-x: - specifier: 4.16.1 - version: 4.16.1 - eslint-plugin-n: - specifier: 17.21.3 - version: 17.21.3 - eslint-plugin-sort-destructure-keys: - specifier: 2.0.0 - version: 2.0.0 - eslint-plugin-unicorn: - specifier: 56.0.1 - version: 56.0.1 fast-glob: specifier: 3.3.3 version: 3.3.3 - globals: - specifier: 16.4.0 - version: 16.4.0 hpagent: specifier: 1.2.0 version: 1.2.0 - husky: - specifier: 9.1.7 - version: 9.1.7 + https-proxy-agent: + specifier: 7.0.6 + version: 7.0.6 ignore: specifier: 7.0.5 version: 7.0.5 @@ -225,30 +102,15 @@ catalogs: ink-text-input: specifier: 6.0.0 version: 6.0.0 - js-yaml: - specifier: npm:@zkochan/js-yaml@0.0.10 - version: 0.0.10 - lint-staged: - specifier: 16.1.6 - version: 16.1.6 magic-string: specifier: 0.30.19 version: 0.30.19 micromatch: specifier: 4.0.8 version: 4.0.8 - mock-fs: - specifier: 5.5.0 - version: 5.5.0 nanotar: specifier: 0.2.0 version: 0.2.0 - nock: - specifier: 14.0.10 - version: 14.0.10 - npm-run-all2: - specifier: 8.0.4 - version: 8.0.4 onnxruntime-web: specifier: 1.23.0 version: 1.23.0 @@ -258,9 +120,6 @@ catalogs: pony-cause: specifier: 2.1.11 version: 2.1.11 - postject: - specifier: 1.0.0-alpha.6 - version: 1.0.0-alpha.6 react: specifier: 19.2.0 version: 19.2.0 @@ -276,36 +135,15 @@ catalogs: ssri: specifier: 12.0.0 version: 12.0.0 - synp: - specifier: 1.9.14 - version: 1.9.14 + string-width: + specifier: 8.1.0 + version: 8.1.0 tar-stream: specifier: 3.1.7 version: 3.1.7 - taze: - specifier: 19.6.0 - version: 19.6.0 terminal-link: specifier: 2.1.1 version: 2.1.1 - trash: - specifier: 10.0.0 - version: 10.0.0 - type-coverage: - specifier: 2.29.7 - version: 2.29.7 - typescript: - specifier: 5.9.3 - version: 5.9.3 - typescript-eslint: - specifier: 8.44.1 - version: 8.44.1 - unplugin-purge-polyfills: - specifier: 0.1.0 - version: 0.1.0 - vitest: - specifier: 4.0.3 - version: 4.0.3 yoctocolors-cjs: specifier: 2.1.3 version: 2.1.3 @@ -319,15 +157,21 @@ catalogs: overrides: '@octokit/graphql': 9.0.1 '@octokit/request-error': 7.0.0 - '@socketsecurity/lib': 4.3.0 - aggregate-error: npm:@socketregistry/aggregate-error@^1.0.15 - ansi-regex: 6.2.2 + '@rollup/plugin-commonjs': 28.0.6 + '@socketsecurity/registry': 1.1.17 + aggregate-error: npm:@socketregistry/aggregate-error@^1.0.14 + ansi-regex: 6.1.0 + ansi-term: 0.0.2 + blessed: 0.1.81 + blessed-contrib: 4.11.0 brace-expansion: 2.0.2 - emoji-regex: 10.6.0 + bresenham: 0.0.3 + drawille-blessed-contrib: 1.0.0 + drawille-canvas-blessed-contrib: 0.1.3 es-define-property: npm:@socketregistry/es-define-property@^1.0.7 - es-set-tostringtag: npm:@socketregistry/es-set-tostringtag@^1.0.10 + es-set-tostringtag: npm:@socketregistry/es-set-tostringtag@^1.0.9 function-bind: npm:@socketregistry/function-bind@^1.0.7 - globalthis: npm:@socketregistry/globalthis@^1.0.8 + globalthis: npm:@socketregistry/globalthis@^1.0.7 gopd: npm:@socketregistry/gopd@^1.0.7 graceful-fs: 4.2.11 has-property-descriptors: npm:@socketregistry/has-property-descriptors@^1.0.7 @@ -335,341 +179,367 @@ overrides: has-symbols: npm:@socketregistry/has-symbols@^1.0.7 has-tostringtag: npm:@socketregistry/has-tostringtag@^1.0.7 hasown: npm:@socketregistry/hasown@^1.0.7 - https-proxy-agent: 7.0.6 - indent-string: npm:@socketregistry/indent-string@^1.0.14 - is-core-module: npm:@socketregistry/is-core-module@^1.0.11 - isarray: npm:@socketregistry/isarray@^1.0.8 + indent-string: npm:@socketregistry/indent-string@^1.0.13 + is-core-module: npm:@socketregistry/is-core-module@^1.0.10 + isarray: npm:@socketregistry/isarray@^1.0.7 lodash: 4.17.21 + meow: 13.2.0 npm-package-arg: 13.0.0 - packageurl-js: npm:@socketregistry/packageurl-js@^1.3.5 - path-parse: npm:@socketregistry/path-parse@^1.0.8 - safe-buffer: npm:@socketregistry/safe-buffer@^1.0.9 - safer-buffer: npm:@socketregistry/safer-buffer@^1.0.10 + packageurl-js: npm:@socketregistry/packageurl-js@^1.0.9 + path-parse: npm:@socketregistry/path-parse@^1.0.7 + rollup: 4.50.1 + safe-buffer: npm:@socketregistry/safe-buffer@^1.0.8 + safer-buffer: npm:@socketregistry/safer-buffer@^1.0.9 semver: 7.7.2 - set-function-length: npm:@socketregistry/set-function-length@^1.0.10 - shell-quote: 1.8.3 - side-channel: npm:@socketregistry/side-channel@^1.0.10 + set-function-length: npm:@socketregistry/set-function-length@^1.0.9 + shell-quote: npm:shell-quote@^1.8.3 + side-channel: npm:@socketregistry/side-channel@^1.0.9 string_decoder: 0.10.31 - string-width: 8.1.0 - strip-ansi: 7.1.2 - wrap-ansi: 9.0.2 tiny-colors: 2.1.3 - typedarray: npm:@socketregistry/typedarray@^1.0.8 + tiny-updater: 3.5.3 + typedarray: npm:@socketregistry/typedarray@^1.0.7 undici: 6.21.3 - vite: 7.1.12 + vite: 7.1.5 xml2js: 0.6.2 yaml: 2.8.1 yargs-parser: 21.1.1 patchedDependencies: - '@npmcli/run-script@10.0.3': - hash: b1f74f31293142449c0be473fae0f0b977e1e1174e6a88e2021fcb93dc902ed6 - path: patches/@npmcli__run-script@10.0.3.patch - '@npmcli/run-script@9.1.0': - hash: 65d59a7c4dd7b00f1c218cbcf97d78fe2f462f2e048de4a22b41bd70dbdefcdc - path: patches/@npmcli__run-script@9.1.0.patch - ink@6.3.1: - hash: 03cccf82711216d0fa8283ea4716ed803a132ae8c31293f0f5a6677e2bdb4a64 - path: patches/ink@6.3.1.patch - node-gyp@11.5.0: - hash: 140ba43d43d74f7d3577feb3f8a6efad544dbb0059784102b144a0e2daa437f9 - path: patches/node-gyp@11.5.0.patch - node-gyp@12.1.0: - hash: 140ba43d43d74f7d3577feb3f8a6efad544dbb0059784102b144a0e2daa437f9 - path: patches/node-gyp@12.1.0.patch + '@rollup/plugin-commonjs@28.0.6': + hash: 4d412c02fa3df1b1f5b29b135bd3f0997f85248ceb3a578d01e7f40fba27c21b + path: patches/@rollup__plugin-commonjs@28.0.6.patch + ansi-term@0.0.2: + hash: 06bb5127b7689d6ab2ea833f9617b2c3fbe9fe0048ce1c6b59b81f7e25ccbccb + path: patches/ansi-term@0.0.2.patch + blessed-contrib@4.11.0: + hash: 2c9f0a87aa8ce9ed95ce201819ef3fcdb9a00f1cabe12815f586d2a3c0bff69e + path: patches/blessed-contrib@4.11.0.patch + blessed@0.1.81: + hash: cae83aa371bddce36c7a03bac146da97b1da2ce16059ce29e25c3af0182331a3 + path: patches/blessed@0.1.81.patch + brace-expansion@2.0.2: + hash: eac47f4a81cd7be766bd391c6bf91ac462816eb2f3c5f99270419ac752d6f02d + path: patches/brace-expansion@2.0.2.patch + bresenham@0.0.3: + hash: cc5bda185ad608af96d1018f588dae1b7e8390459011701bffa97ae0f12537a6 + path: patches/bresenham@0.0.3.patch + drawille-blessed-contrib@1.0.0: + hash: bc7802f29a5252694b94e911ea0fef9939529d6bd866c9e189539ae23f54187c + path: patches/drawille-blessed-contrib@1.0.0.patch + drawille-canvas-blessed-contrib@0.1.3: + hash: baf1e92576f78c2c86283e7a3182ddd59d52cd7e86ad9fe21d1c4ccc2274bcf3 + path: patches/drawille-canvas-blessed-contrib@0.1.3.patch + graceful-fs@4.2.11: + hash: 17007d43dcc01ee2047730ab13eb23c41adc01ae0f24ee872b1fe69142db5200 + path: patches/graceful-fs@4.2.11.patch + lodash@4.17.21: + hash: 9c24de093a43581e08151be377de2e0518d256eca3c50f117c523e45ab6272b1 + path: patches/lodash@4.17.21.patch + rollup@4.50.1: + hash: 071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f + path: patches/rollup@4.50.1.patch + string_decoder@0.10.31: + hash: 4f6ae5ec65b5537e81cd3ee7e83ae65bcc843a93cff14f147d8053e1c385ae1d + path: patches/string_decoder@0.10.31.patch + tiny-updater@3.5.3: + hash: b3f4afb74b370538fe45248cba31833aee4553f83f15a6a07da47f85afae2f24 + path: patches/tiny-updater@3.5.3.patch importers: .: devDependencies: '@babel/core': - specifier: 'catalog:' - version: 7.28.4 - '@babel/parser': - specifier: 'catalog:' + specifier: 7.28.4 version: 7.28.4 '@babel/plugin-proposal-export-default-from': - specifier: 'catalog:' + specifier: 7.27.1 version: 7.27.1(@babel/core@7.28.4) '@babel/plugin-transform-export-namespace-from': - specifier: 'catalog:' + specifier: 7.27.1 version: 7.27.1(@babel/core@7.28.4) '@babel/plugin-transform-runtime': - specifier: 'catalog:' + specifier: 7.28.3 version: 7.28.3(@babel/core@7.28.4) - '@babel/preset-react': - specifier: 'catalog:' - version: 7.27.1(@babel/core@7.28.4) '@babel/preset-typescript': - specifier: 'catalog:' + specifier: 7.27.1 version: 7.27.1(@babel/core@7.28.4) '@babel/runtime': - specifier: 'catalog:' - version: 7.28.4 - '@babel/traverse': - specifier: 'catalog:' + specifier: 7.28.4 version: 7.28.4 '@biomejs/biome': - specifier: 'catalog:' + specifier: 2.2.4 version: 2.2.4 + '@coana-tech/cli': + specifier: 14.12.98 + version: 14.12.98 + '@cyclonedx/cdxgen': + specifier: 11.11.0 + version: 11.11.0 '@dotenvx/dotenvx': - specifier: 'catalog:' + specifier: 1.49.0 version: 1.49.0 '@eslint/compat': - specifier: 'catalog:' + specifier: 1.3.2 version: 1.3.2(eslint@9.35.0(jiti@2.6.1)) '@eslint/js': - specifier: 'catalog:' + specifier: 9.35.0 version: 9.35.0 '@npmcli/arborist': - specifier: 'catalog:' + specifier: 9.1.4 version: 9.1.4 '@npmcli/config': - specifier: 'catalog:' + specifier: 10.4.0 version: 10.4.0 '@octokit/graphql': specifier: 9.0.1 version: 9.0.1 '@octokit/openapi-types': - specifier: 'catalog:' + specifier: 25.1.0 version: 25.1.0 '@octokit/request-error': specifier: 7.0.0 version: 7.0.0 '@octokit/rest': - specifier: 'catalog:' + specifier: 22.0.0 version: 22.0.0 '@octokit/types': - specifier: 'catalog:' + specifier: 14.1.0 version: 14.1.0 '@pnpm/dependency-path': - specifier: 'catalog:' + specifier: 1001.1.0 version: 1001.1.0 '@pnpm/lockfile.detect-dep-types': - specifier: 'catalog:' + specifier: 1001.0.13 version: 1001.0.13 '@pnpm/lockfile.fs': - specifier: 'catalog:' + specifier: 1001.1.17 version: 1001.1.17(@pnpm/logger@1001.0.0) '@pnpm/logger': - specifier: 'catalog:' + specifier: 1001.0.0 version: 1001.0.0 + '@rollup/plugin-babel': + specifier: 6.0.4 + version: 6.0.4(@babel/core@7.28.4)(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f)) + '@rollup/plugin-commonjs': + specifier: 28.0.6 + version: 28.0.6(patch_hash=4d412c02fa3df1b1f5b29b135bd3f0997f85248ceb3a578d01e7f40fba27c21b)(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f)) + '@rollup/plugin-json': + specifier: 6.1.0 + version: 6.1.0(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f)) + '@rollup/plugin-node-resolve': + specifier: 16.0.1 + version: 16.0.1(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f)) + '@rollup/plugin-replace': + specifier: 6.0.2 + version: 6.0.2(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f)) + '@rollup/pluginutils': + specifier: 5.3.0 + version: 5.3.0(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f)) '@socketregistry/hyrious__bun.lockb': - specifier: 'catalog:' - version: 1.0.19 + specifier: 1.0.18 + version: 1.0.18 '@socketregistry/indent-string': - specifier: 'catalog:' - version: 1.0.14 + specifier: 1.0.13 + version: 1.0.13 '@socketregistry/is-interactive': - specifier: 'catalog:' + specifier: 1.0.6 version: 1.0.6 '@socketregistry/packageurl-js': - specifier: 'catalog:' - version: 1.3.5 - '@socketregistry/yocto-spinner': - specifier: 'catalog:' - version: 1.0.25 + specifier: 1.0.9 + version: 1.0.9 '@socketsecurity/config': - specifier: 'catalog:' + specifier: 3.0.1 version: 3.0.1 - '@socketsecurity/lib': - specifier: 4.3.0 - version: 4.3.0(typescript@5.9.3) '@socketsecurity/registry': - specifier: 'catalog:' - version: 2.0.2(typescript@5.9.3) + specifier: 1.1.17 + version: 1.1.17 '@socketsecurity/sdk': - specifier: 'catalog:' - version: 3.1.3 + specifier: 1.4.94 + version: 1.4.94 + '@types/blessed': + specifier: 0.1.25 + version: 0.1.25 '@types/cmd-shim': - specifier: 'catalog:' + specifier: 5.0.2 version: 5.0.2 - '@types/ink': - specifier: 'catalog:' - version: 2.0.3(@types/react@19.2.2)(react@19.2.0) '@types/js-yaml': - specifier: 'catalog:' + specifier: 4.0.9 version: 4.0.9 '@types/micromatch': - specifier: 'catalog:' + specifier: 4.0.9 version: 4.0.9 '@types/mock-fs': - specifier: 'catalog:' + specifier: 4.13.4 version: 4.13.4 '@types/node': - specifier: 'catalog:' - version: 24.9.2 + specifier: 24.3.1 + version: 24.3.1 '@types/npm-package-arg': - specifier: 'catalog:' + specifier: 6.1.4 version: 6.1.4 '@types/npmcli__arborist': - specifier: 'catalog:' + specifier: 6.3.1 version: 6.3.1 '@types/npmcli__config': - specifier: 'catalog:' + specifier: 6.0.3 version: 6.0.3 '@types/proc-log': - specifier: 'catalog:' + specifier: 3.0.4 version: 3.0.4 - '@types/react': - specifier: 'catalog:' - version: 19.2.2 '@types/semver': - specifier: 'catalog:' + specifier: 7.7.1 version: 7.7.1 '@types/which': - specifier: 'catalog:' + specifier: 3.0.4 version: 3.0.4 '@types/yargs-parser': - specifier: 'catalog:' + specifier: 21.0.3 version: 21.0.3 '@typescript-eslint/parser': - specifier: 'catalog:' - version: 8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.43.0 + version: 8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript/native-preview': + specifier: 7.0.0-dev.20250912.1 + version: 7.0.0-dev.20250912.1 '@vitest/coverage-v8': - specifier: 'catalog:' - version: 4.0.3(vitest@4.0.3(@types/node@24.9.2)(jiti@2.6.1)(yaml@2.8.1)) - '@yao-pkg/pkg': - specifier: 'catalog:' - version: 6.8.0(encoding@0.1.13) + specifier: 3.2.4 + version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1)) + blessed: + specifier: 0.1.81 + version: 0.1.81(patch_hash=cae83aa371bddce36c7a03bac146da97b1da2ce16059ce29e25c3af0182331a3) + blessed-contrib: + specifier: 4.11.0 + version: 4.11.0(patch_hash=2c9f0a87aa8ce9ed95ce201819ef3fcdb9a00f1cabe12815f586d2a3c0bff69e) browserslist: - specifier: 'catalog:' + specifier: 4.25.4 version: 4.25.4 chalk-table: - specifier: 'catalog:' + specifier: 1.0.2 version: 1.0.2 cmd-shim: - specifier: 'catalog:' + specifier: 7.0.0 version: 7.0.0 del-cli: - specifier: 'catalog:' + specifier: 6.0.0 version: 6.0.0 dev-null-cli: - specifier: 'catalog:' + specifier: 2.0.0 version: 2.0.0 - esbuild: - specifier: 'catalog:' - version: 0.25.11 eslint: - specifier: 'catalog:' + specifier: 9.35.0 version: 9.35.0(jiti@2.6.1) eslint-import-resolver-typescript: - specifier: 'catalog:' + specifier: 4.4.4 version: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.35.0(jiti@2.6.1)))(eslint@9.35.0(jiti@2.6.1)) eslint-plugin-import-x: - specifier: 'catalog:' + specifier: 4.16.1 version: 4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.35.0(jiti@2.6.1)) eslint-plugin-n: - specifier: 'catalog:' + specifier: 17.21.3 version: 17.21.3(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) eslint-plugin-sort-destructure-keys: - specifier: 'catalog:' + specifier: 2.0.0 version: 2.0.0(eslint@9.35.0(jiti@2.6.1)) eslint-plugin-unicorn: - specifier: 'catalog:' + specifier: 56.0.1 version: 56.0.1(eslint@9.35.0(jiti@2.6.1)) fast-glob: - specifier: 'catalog:' + specifier: 3.3.3 version: 3.3.3 globals: - specifier: 'catalog:' + specifier: 16.4.0 version: 16.4.0 hpagent: - specifier: 'catalog:' + specifier: 1.2.0 version: 1.2.0 husky: - specifier: 'catalog:' + specifier: 9.1.7 version: 9.1.7 ignore: - specifier: 'catalog:' + specifier: 7.0.5 version: 7.0.5 - ink: - specifier: 'catalog:' - version: 6.3.1(patch_hash=03cccf82711216d0fa8283ea4716ed803a132ae8c31293f0f5a6677e2bdb4a64)(@types/react@19.2.2)(react@19.2.0) - ink-table: - specifier: 'catalog:' - version: 3.1.0(ink@6.3.1(patch_hash=03cccf82711216d0fa8283ea4716ed803a132ae8c31293f0f5a6677e2bdb4a64)(@types/react@19.2.2)(react@19.2.0))(react@19.2.0) js-yaml: - specifier: 'catalog:' + specifier: npm:@zkochan/js-yaml@0.0.10 version: '@zkochan/js-yaml@0.0.10' + knip: + specifier: 5.63.1 + version: 5.63.1(@types/node@24.3.1)(typescript@5.9.3) lint-staged: - specifier: 'catalog:' + specifier: 16.1.6 version: 16.1.6 magic-string: - specifier: 'catalog:' + specifier: 0.30.19 version: 0.30.19 + meow: + specifier: 13.2.0 + version: 13.2.0 micromatch: - specifier: 'catalog:' + specifier: 4.0.8 version: 4.0.8 mock-fs: - specifier: 'catalog:' + specifier: 5.5.0 version: 5.5.0 - nanotar: - specifier: 'catalog:' - version: 0.2.0 nock: - specifier: 'catalog:' + specifier: 14.0.10 version: 14.0.10 npm-package-arg: specifier: 13.0.0 version: 13.0.0 npm-run-all2: - specifier: 'catalog:' + specifier: 8.0.4 version: 8.0.4 open: - specifier: 'catalog:' + specifier: 10.2.0 version: 10.2.0 + oxlint: + specifier: 1.15.0 + version: 1.15.0 pony-cause: - specifier: 'catalog:' + specifier: 2.1.11 version: 2.1.11 postject: - specifier: 'catalog:' + specifier: 1.0.0-alpha.6 version: 1.0.0-alpha.6 - react: - specifier: 'catalog:' - version: 19.2.0 - react-reconciler: - specifier: 'catalog:' - version: 0.33.0(react@19.2.0) registry-auth-token: - specifier: 'catalog:' + specifier: 5.1.0 version: 5.1.0 registry-url: - specifier: 'catalog:' + specifier: 7.2.0 version: 7.2.0 + rollup: + specifier: 4.50.1 + version: 4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f) semver: specifier: 7.7.2 version: 7.7.2 - ssri: - specifier: 'catalog:' - version: 12.0.0 synp: - specifier: 'catalog:' + specifier: 1.9.14 version: 1.9.14 taze: - specifier: 'catalog:' + specifier: 19.6.0 version: 19.6.0 terminal-link: - specifier: 'catalog:' + specifier: 2.1.1 version: 2.1.1 + tiny-updater: + specifier: 3.5.3 + version: 3.5.3(patch_hash=b3f4afb74b370538fe45248cba31833aee4553f83f15a6a07da47f85afae2f24) trash: - specifier: 'catalog:' + specifier: 10.0.0 version: 10.0.0 type-coverage: - specifier: 'catalog:' + specifier: 2.29.7 version: 2.29.7(typescript@5.9.3) - typescript: - specifier: 'catalog:' - version: 5.9.3 typescript-eslint: - specifier: 'catalog:' - version: 8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.43.0 + version: 8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) unplugin-purge-polyfills: - specifier: 'catalog:' + specifier: 0.1.0 version: 0.1.0 vitest: - specifier: 'catalog:' - version: 4.0.3(@types/node@24.9.2)(jiti@2.6.1)(yaml@2.8.1) + specifier: 3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1) yaml: specifier: 2.8.1 version: 2.8.1 @@ -677,13 +547,10 @@ importers: specifier: 21.1.1 version: 21.1.1 yoctocolors-cjs: - specifier: 'catalog:' + specifier: 2.1.3 version: 2.1.3 - yoga-layout: - specifier: 'catalog:' - version: 3.2.1 zod: - specifier: 'catalog:' + specifier: 4.1.8 version: 4.1.8 packages/bootstrap: @@ -707,7 +574,7 @@ importers: specifier: workspace:* version: link:../cli '@socketsecurity/lib': - specifier: 4.3.0 + specifier: 'catalog:' version: 4.3.0(typescript@5.9.3) build-infra: specifier: workspace:* @@ -734,7 +601,7 @@ importers: specifier: 'catalog:' version: 7.28.4 '@socketsecurity/lib': - specifier: 4.3.0 + specifier: 'catalog:' version: 4.3.0(typescript@5.9.3) magic-string: specifier: 'catalog:' @@ -788,23 +655,26 @@ importers: specifier: 'catalog:' version: 3.0.1 '@socketsecurity/lib': - specifier: 4.3.0 + specifier: 'catalog:' version: 4.3.0(typescript@5.9.3) '@socketsecurity/registry': - specifier: 'catalog:' - version: 2.0.2(typescript@5.9.3) + specifier: 1.1.17 + version: 1.1.17 '@socketsecurity/sdk': specifier: 'catalog:' version: 3.1.3 + '@types/react': + specifier: ^19.2.2 + version: 19.2.2 ajv-dist: specifier: 'catalog:' version: 8.17.1 ansi-regex: - specifier: 6.2.2 - version: 6.2.2 + specifier: 6.1.0 + version: 6.1.0 brace-expansion: specifier: 2.0.2 - version: 2.0.2 + version: 2.0.2(patch_hash=eac47f4a81cd7be766bd391c6bf91ac462816eb2f3c5f99270419ac752d6f02d) browserslist: specifier: 'catalog:' version: 4.25.4 @@ -824,32 +694,32 @@ importers: specifier: 'catalog:' version: 6.0.0 emoji-regex: - specifier: 10.6.0 + specifier: 'catalog:' version: 10.6.0 fast-glob: specifier: 'catalog:' version: 3.3.3 graceful-fs: specifier: 4.2.11 - version: 4.2.11 + version: 4.2.11(patch_hash=17007d43dcc01ee2047730ab13eb23c41adc01ae0f24ee872b1fe69142db5200) hpagent: specifier: 'catalog:' version: 1.2.0 https-proxy-agent: - specifier: 7.0.6 + specifier: 'catalog:' version: 7.0.6 ignore: specifier: 'catalog:' version: 7.0.5 ink: specifier: 'catalog:' - version: 6.3.1(patch_hash=03cccf82711216d0fa8283ea4716ed803a132ae8c31293f0f5a6677e2bdb4a64)(@types/react@19.2.2)(react@19.2.0) + version: 6.3.1(@types/react@19.2.2)(react@19.2.0) ink-table: specifier: 'catalog:' - version: 3.1.0(ink@6.3.1(patch_hash=03cccf82711216d0fa8283ea4716ed803a132ae8c31293f0f5a6677e2bdb4a64)(@types/react@19.2.2)(react@19.2.0))(react@19.2.0) + version: 3.1.0(ink@6.3.1(@types/react@19.2.2)(react@19.2.0))(react@19.2.0) ink-text-input: specifier: 'catalog:' - version: 6.0.0(ink@6.3.1(patch_hash=03cccf82711216d0fa8283ea4716ed803a132ae8c31293f0f5a6677e2bdb4a64)(@types/react@19.2.2)(react@19.2.0))(react@19.2.0) + version: 6.0.0(ink@6.3.1(@types/react@19.2.2)(react@19.2.0))(react@19.2.0) micromatch: specifier: 'catalog:' version: 4.0.8 @@ -887,7 +757,7 @@ importers: specifier: 'catalog:' version: 12.0.0 string-width: - specifier: 8.1.0 + specifier: 'catalog:' version: 8.1.0 tar-stream: specifier: 'catalog:' @@ -927,7 +797,7 @@ importers: packages/socket: devDependencies: '@socketsecurity/lib': - specifier: 4.3.0 + specifier: 'catalog:' version: 4.3.0(typescript@5.9.3) build-infra: specifier: workspace:* @@ -936,16 +806,16 @@ importers: specifier: 'catalog:' version: 0.25.11 - packages/socketbin-cli-alpine-arm64: {} - - packages/socketbin-cli-alpine-x64: {} - packages/socketbin-cli-darwin-arm64: {} packages/socketbin-cli-darwin-x64: {} packages/socketbin-cli-linux-arm64: {} + packages/socketbin-cli-linux-musl-arm64: {} + + packages/socketbin-cli-linux-musl-x64: {} + packages/socketbin-cli-linux-x64: {} packages/socketbin-cli-win32-arm64: {} @@ -958,10 +828,35 @@ packages: resolution: {integrity: sha512-mkOh+Wwawzuf5wa30bvc4nA+Qb6DIrGWgBhRR/Pw4T9nsgYait8izvXkNyU78D6Wcu3Z+KUdwCmLCxlWjEotYA==} engines: {node: '>=18'} + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + '@antfu/ni@25.0.0': resolution: {integrity: sha512-9q/yCljni37pkMr4sPrI3G4jqdIk074+iukc5aFJl7kmDCCsiJrbZ6zKxnES1Gwg+i9RcDZwvktl23puGslmvA==} hasBin: true + '@appthreat/atom-common@1.0.12': + resolution: {integrity: sha512-bsy1J/1Ge9uO+/VBUH79F9btmnJfedvytF3jFpDsINabF+x0koWdegXsjYg5sBuI9D8bfODail7vNJCBPl2u0g==} + + '@appthreat/atom-parsetools@1.0.12': + resolution: {integrity: sha512-eqU3LYaduUEFCt+tDs58txvYkyhuYLJHQm7+S+RwKaICkO8kJDrrcfBqHXngvNG0Th/TpVe4X9tl5uf5bd2I7g==} + engines: {node: '>=16.0.0'} + hasBin: true + + '@appthreat/atom@2.4.2': + resolution: {integrity: sha512-z9PkDrSydnuP+VoBeHcF4evVE98S1+ZASWfMR0ryBFUEDsZCWw3/bs8bpZNqwBYSo5/58ilEJRUcHQs7HwtbTA==} + engines: {node: '>=16.0.0'} + hasBin: true + + '@appthreat/cdx-proto@1.1.4': + resolution: {integrity: sha512-cAC1EpAesqMOfaOl1Q37WN38PV+nbc3MQmab0p3cVGsrL3KWP3dUbNWRdzN4sVL/gVOYEouwvR/PXvDF9WCeVA==} + engines: {node: '>=20'} + + '@appthreat/sqlite3@6.0.9': + resolution: {integrity: sha512-Aim5tAIusHm2zZVhqedZwl1MGiSMaWhJ9Ev9ctBuv82fJv/gmE0FhHY/tv/ikoMTNGWlaClAgJayfPLJxvkQ7Q==} + engines: {node: '>=20'} + '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} @@ -1089,30 +984,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-display-name@7.28.0': - resolution: {integrity: sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx-development@7.27.1': - resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx@7.27.1': - resolution: {integrity: sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-pure-annotations@7.27.1': - resolution: {integrity: sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-runtime@7.28.3': resolution: {integrity: sha512-Y6ab1kGqZ0u42Zv/4a7l0l72n9DKP/MKoKWaUSBylrhNZO2prYuqFOLbn5aW5SIFXwSH93yfjbgllL8lxuGKLg==} engines: {node: '>=6.9.0'} @@ -1125,12 +996,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/preset-react@7.27.1': - resolution: {integrity: sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/preset-typescript@7.27.1': resolution: {integrity: sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==} engines: {node: '>=6.9.0'} @@ -1218,6 +1083,84 @@ packages: cpu: [x64] os: [win32] + '@bufbuild/protobuf@2.10.0': + resolution: {integrity: sha512-fdRs9PSrBF7QUntpZpq6BTw58fhgGJojgg39m9oFOJGZT+nip9b0so5cYY1oWl5pvemDLr0cPPsH46vwThEbpQ==} + + '@bufbuild/protobuf@2.6.3': + resolution: {integrity: sha512-w/gJKME9mYN7ZoUAmSMAWXk4hkVpxRKvEJCb3dV5g9wwWdxTJJ0ayOJAVcNxtdqaxDyFuC0uz4RSGVacJ030PQ==} + + '@coana-tech/cli@14.12.98': + resolution: {integrity: sha512-XCcBLjBSKMOWzl0mfenrpvJGMrsDrRDk/DZMLQNQZuMsRlE6/cH3A2MB1ukCum6s2n3NW2p1z+IJaINVHgZ4ww==} + hasBin: true + + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + + '@cyclonedx/cdxgen-plugins-bin-darwin-amd64@1.7.0': + resolution: {integrity: sha512-evJAEetfhKU7N9tCaOl/CZcs4upoEIKvLdhV9ogzk9QIur+HtZX5F9LddGNoQuzhB1Umy2tAyFAKhl+EX63BFQ==} + cpu: [x64] + os: [darwin] + + '@cyclonedx/cdxgen-plugins-bin-darwin-arm64@1.7.0': + resolution: {integrity: sha512-gnQqfDNd8RXKH3n/BUtSi1aJghPLSVpAScaM0iiuGvdfOVuwqBEMAKx/SC0v5yXdCtThC45W5/Zz8Lc9eNoNAw==} + cpu: [arm64] + os: [darwin] + + '@cyclonedx/cdxgen-plugins-bin-linux-amd64@1.7.0': + resolution: {integrity: sha512-Nitd3y1yb8Xv2e7ODqki3M8DO6SzWe/gGsioRiA6iNXcQ/JYzg03CyHEaTjCAhJXFO4qraCn4N6OPN2H7c8bew==} + cpu: [x64] + os: [linux] + libc: glibc + + '@cyclonedx/cdxgen-plugins-bin-linux-arm64@1.7.0': + resolution: {integrity: sha512-/96YdFdwASQVr+MDO1IbUMYbLoHawTDIsGlhyMV4AI47qKZ59Ein5dvdibqqmnxgmWvG4Vqp941gRaCBlCLWag==} + cpu: [arm64] + os: [linux] + libc: glibc + + '@cyclonedx/cdxgen-plugins-bin-linux-arm@1.7.0': + resolution: {integrity: sha512-eNnS9Kd+j4YDiIotCA3EQWyiHKjx7iZqh5+gyF38zmSJQRssEWvCdv+IPvXPyZw8hh5g9/8IQWPYMFpB3fpopg==} + cpu: [arm] + os: [linux] + libc: glibc + + '@cyclonedx/cdxgen-plugins-bin-linux-ppc64@1.7.0': + resolution: {integrity: sha512-AWLQ33x/mUtYLfIfCq8tZ8TykXUzzNo6ZLvf1eOmEeEyYw/9Yx6E7KzzaAakGl886lJW/1gzmhvFPXD+ZKEIpA==} + cpu: [ppc64] + os: [linux] + + '@cyclonedx/cdxgen-plugins-bin-linuxmusl-amd64@1.7.0': + resolution: {integrity: sha512-miYABkiNS+0m0z9L5lfIyiAQezuYthkzzPqX6DgPeMgFT8SfoUng2dtRzkCPLtCUBj8lMyBntXTjZrmH7QOMoA==} + cpu: [x64] + os: [linux] + libc: musl + + '@cyclonedx/cdxgen-plugins-bin-linuxmusl-arm64@1.7.0': + resolution: {integrity: sha512-Rh8ChTldyY/01EWrciyhnUltC2YNLmdkwaPDZsJT/as1Bu0Q4iOnepMw2WpqwzkaGbZG5PgFtzeuV1kBKjo07Q==} + cpu: [arm64] + os: [linux] + libc: musl + + '@cyclonedx/cdxgen-plugins-bin-windows-amd64@1.7.0': + resolution: {integrity: sha512-sCeTnlDq3Wojit2+MqErsYhD/Mv7VickLU2PazmamQc4LVZHakZPGxoG4CFUt4oFVux9CoY1+RxkE+Ia+E+fsA==} + cpu: [x64] + os: [win32] + + '@cyclonedx/cdxgen-plugins-bin-windows-arm64@1.7.0': + resolution: {integrity: sha512-AzQrY0H1A7JduJTBr/Ub7ppt9RKXjc2+AXV38dvekXYvKSnwnR4715gEZ0mwRnn/BZ4az0uQwMlJCpY8qttJIg==} + cpu: [arm64] + os: [win32] + + '@cyclonedx/cdxgen-plugins-bin@1.7.0': + resolution: {integrity: sha512-pgPMY2vHKMTcW24qtcql0uIck3t66U+QmUrO7C6E8kg06tJqBgo8PtT58FhI4B41lPrpq8rAQzo2jLCLu1JnCw==} + cpu: [x64] + + '@cyclonedx/cdxgen@11.11.0': + resolution: {integrity: sha512-2zBpuOUeL8ErifsQQJfQf3JNEo3veQUYNu3kg1JfPiyq8FBTuTiMUaHrMhjHb5N0Rl06yJU3YTBZtvMbEg3kXw==} + engines: {node: '>=20', pnpm: '>=10'} + hasBin: true + '@dotenvx/dotenvx@1.49.0': resolution: {integrity: sha512-M1cyP6YstFQCjih54SAxCqHLMMi8QqV8tenpgGE48RTXWD7vfMYJiw/6xcCDpS2h28AcLpTsFCZA863Ge9yxzA==} hasBin: true @@ -1468,6 +1411,9 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@iarna/toml@2.2.5': + resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} + '@isaacs/balanced-match@4.0.1': resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} engines: {node: 20 || >=22} @@ -1487,6 +1433,10 @@ packages: '@isaacs/string-locale-compare@1.1.0': resolution: {integrity: sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==} + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -1503,6 +1453,9 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@keyv/serialize@1.1.1': + resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} + '@mswjs/interceptors@0.39.8': resolution: {integrity: sha512-2+BzZbjRO7Ct61k8fMNHEtoKjeWI9pIlHFTqBwZ5icHpqszIgEZbjb1MW5Z0+bITTCTl3gk4PDBxs9tA/csXvA==} engines: {node: '>=18'} @@ -1510,6 +1463,9 @@ packages: '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} + '@napi-rs/wasm-runtime@1.0.7': + resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==} + '@noble/ciphers@1.3.0': resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} engines: {node: ^14.21.3 || >=16} @@ -1558,6 +1514,10 @@ packages: resolution: {integrity: sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==} engines: {node: ^18.17.0 || >=20.5.0} + '@npmcli/fs@5.0.0': + resolution: {integrity: sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og==} + engines: {node: ^20.17.0 || >=22.9.0} + '@npmcli/git@6.0.3': resolution: {integrity: sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ==} engines: {node: ^18.17.0 || >=20.5.0} @@ -1580,6 +1540,10 @@ packages: resolution: {integrity: sha512-mnuMuibEbkaBTYj9HQ3dMe6L0ylYW+s/gfz7tBDMFY/la0w9Kf44P9aLn4/+/t3aTR3YUHKoT6XQL9rlicIe3Q==} engines: {node: ^18.17.0 || >=20.5.0} + '@npmcli/map-workspaces@5.0.1': + resolution: {integrity: sha512-LFEh3vY5nyiVI9IY9rko7FtAtS9fjgQySARlccKbnS7BMWFyQF73OT/n8NG22/8xyp57xPIl13gwO/OD63nktg==} + engines: {node: ^20.17.0 || >=22.9.0} + '@npmcli/metavuln-calculator@9.0.3': resolution: {integrity: sha512-94GLSYhLXF2t2LAC7pDwLaM4uCARzxShyAQKsirmlNcpidH89VA4/+K1LbJmRMgz5gy65E/QBBWQdUvGLe2Frg==} engines: {node: ^20.17.0 || >=22.9.0} @@ -1588,6 +1552,10 @@ packages: resolution: {integrity: sha512-61cDL8LUc9y80fXn+lir+iVt8IS0xHqEKwPu/5jCjxQTVoSCmkXvw4vbMrzAMtmghz3/AkiBjhHkDKUH+kf7kA==} engines: {node: ^18.17.0 || >=20.5.0} + '@npmcli/name-from-folder@4.0.0': + resolution: {integrity: sha512-qfrhVlOSqmKM8i6rkNdZzABj8MKEITGFAY+4teqBziksCQAOLutiAxM1wY2BKEd8KjUSpWmWCYxvXr0y4VTlPg==} + engines: {node: ^20.17.0 || >=22.9.0} + '@npmcli/node-gyp@4.0.0': resolution: {integrity: sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==} engines: {node: ^18.17.0 || >=20.5.0} @@ -1600,6 +1568,10 @@ packages: resolution: {integrity: sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA==} engines: {node: ^18.17.0 || >=20.5.0} + '@npmcli/package-json@7.0.1': + resolution: {integrity: sha512-956YUeI0YITbk2+KnirCkD19HLzES0habV+Els+dyZaVsaM6VGSiNwnRu6t3CZaqDLz4KXy2zx+0N/Zy6YjlAA==} + engines: {node: ^20.17.0 || >=22.9.0} + '@npmcli/package-json@7.0.2': resolution: {integrity: sha512-0ylN3U5htO1SJTmy2YI78PZZjLkKUGg7EKgukb2CRi0kzyoDr0cfjHAzi7kozVhj2V3SxN1oyKqZ2NSo40z00g==} engines: {node: ^20.17.0 || >=22.9.0} @@ -1616,6 +1588,10 @@ packages: resolution: {integrity: sha512-4OIPFb4weUUwkDXJf4Hh1inAn8neBGq3xsH4ZsAaN6FK3ldrFkH7jSpCc7N9xesi0Sp+EBXJ9eGMDrEww2Ztqw==} engines: {node: ^18.17.0 || >=20.5.0} + '@npmcli/query@5.0.0': + resolution: {integrity: sha512-8TZWfTQOsODpLqo9SVhVjHovmKXNpevHU0gO9e+y4V4fRIOneiXy0u0sMP9LmS71XivrEWfZWg50ReH4WRT4aQ==} + engines: {node: ^20.17.0 || >=22.9.0} + '@npmcli/redact@3.2.2': resolution: {integrity: sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg==} engines: {node: ^18.17.0 || >=20.5.0} @@ -1909,19 +1885,166 @@ packages: peerDependencies: '@opentelemetry/api': ^1.1.0 - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} + '@oxc-resolver/binding-android-arm-eabi@11.13.2': + resolution: {integrity: sha512-vWd1NEaclg/t2DtEmYzRRBNQOueMI8tixw/fSNZ9XETXLRJiAjQMYpYeflQdRASloGze6ZelHE/wIBNt4S+pkw==} + cpu: [arm] + os: [android] - '@pnpm/config.env-replace@1.1.0': - resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} - engines: {node: '>=12.22.0'} + '@oxc-resolver/binding-android-arm64@11.13.2': + resolution: {integrity: sha512-jxZrYcxgpI6IuQpguQVAQNrZfUyiYfMVqR4pKVU3PRLCM7AsfXNKp0TIgcvp+l6dYVdoZ1MMMMa5Ayjd09rNOw==} + cpu: [arm64] + os: [android] - '@pnpm/constants@1001.3.0': - resolution: {integrity: sha512-ZFRekNHbDlu//67Byg+mG8zmtmCsfBhNsg1wKBLRtF7VjH+Q5TDGMX0+8aJYSikQDuzM2FOhvQcDwyjILKshJQ==} - engines: {node: '>=18.12'} + '@oxc-resolver/binding-darwin-arm64@11.13.2': + resolution: {integrity: sha512-RDS3HUe1FvgjNS1xfBUqiEJ8938Zb5r7iKABwxEblp3K4ufZZNAtoaHjdUH2TJ0THDmuf0OxxVUO/Y+4Ep4QfQ==} + cpu: [arm64] + os: [darwin] - '@pnpm/crypto.hash@1000.2.0': + '@oxc-resolver/binding-darwin-x64@11.13.2': + resolution: {integrity: sha512-tDcyWtkUzkt6auJLP2dOjL84BxqHkKW4mz2lNRIGPTq7b+HBraB+m8RdRH6BgqTvbnNECOxR3XAMaKBKC8J51g==} + cpu: [x64] + os: [darwin] + + '@oxc-resolver/binding-freebsd-x64@11.13.2': + resolution: {integrity: sha512-fpaeN8Q0kWvKns9uSMg6CcKo7cdgmWt6J91stPf8sdM+EKXzZ0YcRnWWyWF8SM16QcLUPCy5Iwt5Z8aYBGaZYA==} + cpu: [x64] + os: [freebsd] + + '@oxc-resolver/binding-linux-arm-gnueabihf@11.13.2': + resolution: {integrity: sha512-idBgJU5AvSsGOeaIWiFBKbNBjpuduHsJmrG4CBbEUNW/Ykx+ISzcuj1PHayiYX6R9stVsRhj3d2PyymfC5KWRg==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm-musleabihf@11.13.2': + resolution: {integrity: sha512-BlBvQUhvvIM/7s96KlKhMk0duR2sj8T7Hyii46/5QnwfN/pHwobvOL5czZ6/SKrHNB/F/qDY4hGsBuB1y7xgTg==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm64-gnu@11.13.2': + resolution: {integrity: sha512-lUmDTmYOGpbIK+FBfZ0ySaQTo7g1Ia/WnDnQR2wi/0AtehZIg/ZZIgiT/fD0iRvKEKma612/0PVo8dXdAKaAGA==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-arm64-musl@11.13.2': + resolution: {integrity: sha512-dkGzOxo+I9lA4Er6qzFgkFevl3JvwyI9i0T/PkOJHva04rb1p9dz8GPogTO9uMK4lrwLWzm/piAu+tHYC7v7+w==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxc-resolver/binding-linux-ppc64-gnu@11.13.2': + resolution: {integrity: sha512-53kWsjLkVFnoSA7COdps38pBssN48zI8LfsOvupsmQ0/4VeMYb+0Ao9O6r52PtmFZsGB3S1Qjqbjl/Pswj1a3g==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-riscv64-gnu@11.13.2': + resolution: {integrity: sha512-MfxN6DMpvmdCbGlheJ+ihy11oTcipqDfcEIQV9ah3FGXBRCZtBOHJpQDk8qI2Y+nCXVr3Nln7OSsOzoC4+rSYQ==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-riscv64-musl@11.13.2': + resolution: {integrity: sha512-WXrm4YiRU0ijqb72WHSjmfYaQZ7t6/kkQrFc4JtU+pUE4DZA/DEdxOuQEd4Q43VqmLvICTJWSaZMlCGQ4PSRUg==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxc-resolver/binding-linux-s390x-gnu@11.13.2': + resolution: {integrity: sha512-4pISWIlOFRUhWyvGCB3XUhtcwyvwGGhlXhHz7IXCXuGufaQtvR05trvw8U1ZnaPhsdPBkRhOMIedX11ayi5uXw==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-x64-gnu@11.13.2': + resolution: {integrity: sha512-DVo6jS8n73yNAmCsUOOk2vBeC60j2RauDXQM8p7RDl0afsEaA2le22vD8tky7iNoM5tsxfBmE4sOJXEKgpwWRw==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-x64-musl@11.13.2': + resolution: {integrity: sha512-6WqrE+hQBFP35KdwQjWcZpldbTq6yJmuTVThISu+rY3+j6MaDp2ciLHTr1X68r2H/7ocOIl4k3NnOVIzeRJE3w==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxc-resolver/binding-wasm32-wasi@11.13.2': + resolution: {integrity: sha512-YpxvQmP2D+mNUkLQZbBjGz20g/pY8XoOBdPPoWMl9X68liFFjXxkPQTrZxWw4zzG/UkTM5z6dPRTyTePRsMcjw==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@oxc-resolver/binding-win32-arm64-msvc@11.13.2': + resolution: {integrity: sha512-1SKBw6KcCmvPBdEw1/Qdpv6eSDf23lCXTWz9VxTe6QUQ/1wR+HZR2uS4q6C8W6jnIswMTQbxpTvVwdRXl+ufeA==} + cpu: [arm64] + os: [win32] + + '@oxc-resolver/binding-win32-ia32-msvc@11.13.2': + resolution: {integrity: sha512-KEVV7wggDucxRn3vvyHnmTCPXoCT7vWpH18UVLTygibHJvNRP2zl5lBaQcCIdIaYYZjKt1aGI/yZqxZvHoiCdg==} + cpu: [ia32] + os: [win32] + + '@oxc-resolver/binding-win32-x64-msvc@11.13.2': + resolution: {integrity: sha512-6AAdN9v/wO5c3td1yidgNLKYlzuNgfOtEqBq60WE469bJWR7gHgG/S5aLR2pH6/gyPLs9UXtItxi934D+0Estg==} + cpu: [x64] + os: [win32] + + '@oxlint/darwin-arm64@1.15.0': + resolution: {integrity: sha512-fwYg7WDKI6eAErREBGMXkIAOqBuBFN0LWbQJvVNXCGjywGxsisdwkHnNu4UG8IpHo4P71mUxf3l2xm+5Xiy+TA==} + cpu: [arm64] + os: [darwin] + + '@oxlint/darwin-x64@1.15.0': + resolution: {integrity: sha512-RtaAmB6NZZx4hvjCg6w35shzRY5fLclbMsToC92MTZ9lMDF9LotzcbyNHCZ1tvZb1tNPObpIsuX16BFeElF8nw==} + cpu: [x64] + os: [darwin] + + '@oxlint/linux-arm64-gnu@1.15.0': + resolution: {integrity: sha512-8uV0lAbmqp93KTBlJWyCdQWuxTzLn+QrDRidUaCLJjn65uvv8KlRhZJoZoyLh17X6U/cgezYktWTMiMhxX56BA==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxlint/linux-arm64-musl@1.15.0': + resolution: {integrity: sha512-/+hTqh1J29+2GitKrWUHIYjQBM1szWSJ1U7OzQlgL+Uvf8jxg4sn1nV79LcPMXhC2t8lZy5EOXOgwIh92DsdhQ==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxlint/linux-x64-gnu@1.15.0': + resolution: {integrity: sha512-GzeY3AhUd49yV+/76Gw0pjpwUJwxCkwYAJTNe7fFTdWjEQ6M6g8ZzJg5FKtUvgA5sMgmfzHhvSXxvT57YhcXnA==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxlint/linux-x64-musl@1.15.0': + resolution: {integrity: sha512-p/7+juizUOCpGYreFmdfmIOSSSE3+JfsgnXnOHuP8mqlZfiOeXyevyajuXpPNRM60+k0reGvlV7ezp1iFitF7w==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxlint/win32-arm64@1.15.0': + resolution: {integrity: sha512-2LaDLOtCMq+lzIQ63Eir3UJV/hQNlw01xtsij2L8sSxt4gA+zWvubOQJQIOPGMDxEKFcWT1lo/6YEXX/sNnZDA==} + cpu: [arm64] + os: [win32] + + '@oxlint/win32-x64@1.15.0': + resolution: {integrity: sha512-+jgRPpZrFIcrNxCVsDIy6HVCRpKVDN0DHD8VJodjrsDv6heqhq/qCTa2IXY3R4glWe1nWQ5JgdFKLn3Bl+aLNg==} + cpu: [x64] + os: [win32] + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@pnpm/config.env-replace@1.1.0': + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} + + '@pnpm/constants@1001.3.0': + resolution: {integrity: sha512-ZFRekNHbDlu//67Byg+mG8zmtmCsfBhNsg1wKBLRtF7VjH+Q5TDGMX0+8aJYSikQDuzM2FOhvQcDwyjILKshJQ==} + engines: {node: '>=18.12'} + + '@pnpm/crypto.hash@1000.2.0': resolution: {integrity: sha512-L22sQHDC4VM9cPSbOFi0e+C7JSt3isl/biV1jShz8MG9QjemiwTUMog4h0k0C5HoB1ycUjGkXTqAE4RJu3jLQA==} engines: {node: '>=18.12'} @@ -2042,126 +2165,182 @@ packages: '@quansync/fs@0.1.5': resolution: {integrity: sha512-lNS9hL2aS2NZgNW7BBj+6EBl4rOf8l+tQ0eRY6JWCI8jI2kc53gSoqbjojU0OnAWhzoXiOjFyGsHcDGePB3lhA==} - '@rollup/rollup-android-arm-eabi@4.53.2': - resolution: {integrity: sha512-yDPzwsgiFO26RJA4nZo8I+xqzh7sJTZIWQOxn+/XOdPE31lAvLIYCKqjV+lNH/vxE2L2iH3plKxDCRK6i+CwhA==} + '@rollup/plugin-babel@6.0.4': + resolution: {integrity: sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: 4.50.1 + peerDependenciesMeta: + '@types/babel__core': + optional: true + rollup: + optional: true + + '@rollup/plugin-commonjs@28.0.6': + resolution: {integrity: sha512-XSQB1K7FUU5QP+3lOQmVCE3I0FcbbNvmNT4VJSj93iUjayaARrTQeoRdiYQoftAJBLrR9t2agwAd3ekaTgHNlw==} + engines: {node: '>=16.0.0 || 14 >= 14.17'} + peerDependencies: + rollup: 4.50.1 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/plugin-json@6.1.0': + resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: 4.50.1 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/plugin-node-resolve@16.0.1': + resolution: {integrity: sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: 4.50.1 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/plugin-replace@6.0.2': + resolution: {integrity: sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: 4.50.1 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: 4.50.1 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.50.1': + resolution: {integrity: sha512-HJXwzoZN4eYTdD8bVV22DN8gsPCAj3V20NHKOs8ezfXanGpmVPR7kalUHd+Y31IJp9stdB87VKPFbsGY3H/2ag==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.53.2': - resolution: {integrity: sha512-k8FontTxIE7b0/OGKeSN5B6j25EuppBcWM33Z19JoVT7UTXFSo3D9CdU39wGTeb29NO3XxpMNauh09B+Ibw+9g==} + '@rollup/rollup-android-arm64@4.50.1': + resolution: {integrity: sha512-PZlsJVcjHfcH53mOImyt3bc97Ep3FJDXRpk9sMdGX0qgLmY0EIWxCag6EigerGhLVuL8lDVYNnSo8qnTElO4xw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.53.2': - resolution: {integrity: sha512-A6s4gJpomNBtJ2yioj8bflM2oogDwzUiMl2yNJ2v9E7++sHrSrsQ29fOfn5DM/iCzpWcebNYEdXpaK4tr2RhfQ==} + '@rollup/rollup-darwin-arm64@4.50.1': + resolution: {integrity: sha512-xc6i2AuWh++oGi4ylOFPmzJOEeAa2lJeGUGb4MudOtgfyyjr4UPNK+eEWTPLvmPJIY/pgw6ssFIox23SyrkkJw==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.53.2': - resolution: {integrity: sha512-e6XqVmXlHrBlG56obu9gDRPW3O3hLxpwHpLsBJvuI8qqnsrtSZ9ERoWUXtPOkY8c78WghyPHZdmPhHLWNdAGEw==} + '@rollup/rollup-darwin-x64@4.50.1': + resolution: {integrity: sha512-2ofU89lEpDYhdLAbRdeyz/kX3Y2lpYc6ShRnDjY35bZhd2ipuDMDi6ZTQ9NIag94K28nFMofdnKeHR7BT0CATw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.53.2': - resolution: {integrity: sha512-v0E9lJW8VsrwPux5Qe5CwmH/CF/2mQs6xU1MF3nmUxmZUCHazCjLgYvToOk+YuuUqLQBio1qkkREhxhc656ViA==} + '@rollup/rollup-freebsd-arm64@4.50.1': + resolution: {integrity: sha512-wOsE6H2u6PxsHY/BeFHA4VGQN3KUJFZp7QJBmDYI983fgxq5Th8FDkVuERb2l9vDMs1D5XhOrhBrnqcEY6l8ZA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.53.2': - resolution: {integrity: sha512-ClAmAPx3ZCHtp6ysl4XEhWU69GUB1D+s7G9YjHGhIGCSrsg00nEGRRZHmINYxkdoJehde8VIsDC5t9C0gb6yqA==} + '@rollup/rollup-freebsd-x64@4.50.1': + resolution: {integrity: sha512-A/xeqaHTlKbQggxCqispFAcNjycpUEHP52mwMQZUNqDUJFFYtPHCXS1VAG29uMlDzIVr+i00tSFWFLivMcoIBQ==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.53.2': - resolution: {integrity: sha512-EPlb95nUsz6Dd9Qy13fI5kUPXNSljaG9FiJ4YUGU1O/Q77i5DYFW5KR8g1OzTcdZUqQQ1KdDqsTohdFVwCwjqg==} + '@rollup/rollup-linux-arm-gnueabihf@4.50.1': + resolution: {integrity: sha512-54v4okehwl5TaSIkpp97rAHGp7t3ghinRd/vyC1iXqXMfjYUTm7TfYmCzXDoHUPTTf36L8pr0E7YsD3CfB3ZDg==} cpu: [arm] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.53.2': - resolution: {integrity: sha512-BOmnVW+khAUX+YZvNfa0tGTEMVVEerOxN0pDk2E6N6DsEIa2Ctj48FOMfNDdrwinocKaC7YXUZ1pHlKpnkja/Q==} + '@rollup/rollup-linux-arm-musleabihf@4.50.1': + resolution: {integrity: sha512-p/LaFyajPN/0PUHjv8TNyxLiA7RwmDoVY3flXHPSzqrGcIp/c2FjwPPP5++u87DGHtw+5kSH5bCJz0mvXngYxw==} cpu: [arm] os: [linux] libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.53.2': - resolution: {integrity: sha512-Xt2byDZ+6OVNuREgBXr4+CZDJtrVso5woFtpKdGPhpTPHcNG7D8YXeQzpNbFRxzTVqJf7kvPMCub/pcGUWgBjA==} + '@rollup/rollup-linux-arm64-gnu@4.50.1': + resolution: {integrity: sha512-2AbMhFFkTo6Ptna1zO7kAXXDLi7H9fGTbVaIq2AAYO7yzcAsuTNWPHhb2aTA6GPiP+JXh85Y8CiS54iZoj4opw==} cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.53.2': - resolution: {integrity: sha512-+LdZSldy/I9N8+klim/Y1HsKbJ3BbInHav5qE9Iy77dtHC/pibw1SR/fXlWyAk0ThnpRKoODwnAuSjqxFRDHUQ==} + '@rollup/rollup-linux-arm64-musl@4.50.1': + resolution: {integrity: sha512-Cgef+5aZwuvesQNw9eX7g19FfKX5/pQRIyhoXLCiBOrWopjo7ycfB292TX9MDcDijiuIJlx1IzJz3IoCPfqs9w==} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.53.2': - resolution: {integrity: sha512-8ms8sjmyc1jWJS6WdNSA23rEfdjWB30LH8Wqj0Cqvv7qSHnvw6kgMMXRdop6hkmGPlyYBdRPkjJnj3KCUHV/uQ==} + '@rollup/rollup-linux-loongarch64-gnu@4.50.1': + resolution: {integrity: sha512-RPhTwWMzpYYrHrJAS7CmpdtHNKtt2Ueo+BlLBjfZEhYBhK00OsEqM08/7f+eohiF6poe0YRDDd8nAvwtE/Y62Q==} cpu: [loong64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-gnu@4.53.2': - resolution: {integrity: sha512-3HRQLUQbpBDMmzoxPJYd3W6vrVHOo2cVW8RUo87Xz0JPJcBLBr5kZ1pGcQAhdZgX9VV7NbGNipah1omKKe23/g==} + '@rollup/rollup-linux-ppc64-gnu@4.50.1': + resolution: {integrity: sha512-eSGMVQw9iekut62O7eBdbiccRguuDgiPMsw++BVUg+1K7WjZXHOg/YOT9SWMzPZA+w98G+Fa1VqJgHZOHHnY0Q==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-gnu@4.53.2': - resolution: {integrity: sha512-fMjKi+ojnmIvhk34gZP94vjogXNNUKMEYs+EDaB/5TG/wUkoeua7p7VCHnE6T2Tx+iaghAqQX8teQzcvrYpaQA==} + '@rollup/rollup-linux-riscv64-gnu@4.50.1': + resolution: {integrity: sha512-S208ojx8a4ciIPrLgazF6AgdcNJzQE4+S9rsmOmDJkusvctii+ZvEuIC4v/xFqzbuP8yDjn73oBlNDgF6YGSXQ==} cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.53.2': - resolution: {integrity: sha512-XuGFGU+VwUUV5kLvoAdi0Wz5Xbh2SrjIxCtZj6Wq8MDp4bflb/+ThZsVxokM7n0pcbkEr2h5/pzqzDYI7cCgLQ==} + '@rollup/rollup-linux-riscv64-musl@4.50.1': + resolution: {integrity: sha512-3Ag8Ls1ggqkGUvSZWYcdgFwriy2lWo+0QlYgEFra/5JGtAd6C5Hw59oojx1DeqcA2Wds2ayRgvJ4qxVTzCHgzg==} cpu: [riscv64] os: [linux] libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.53.2': - resolution: {integrity: sha512-w6yjZF0P+NGzWR3AXWX9zc0DNEGdtvykB03uhonSHMRa+oWA6novflo2WaJr6JZakG2ucsyb+rvhrKac6NIy+w==} + '@rollup/rollup-linux-s390x-gnu@4.50.1': + resolution: {integrity: sha512-t9YrKfaxCYe7l7ldFERE1BRg/4TATxIg+YieHQ966jwvo7ddHJxPj9cNFWLAzhkVsbBvNA4qTbPVNsZKBO4NSg==} cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.53.2': - resolution: {integrity: sha512-yo8d6tdfdeBArzC7T/PnHd7OypfI9cbuZzPnzLJIyKYFhAQ8SvlkKtKBMbXDxe1h03Rcr7u++nFS7tqXz87Gtw==} + '@rollup/rollup-linux-x64-gnu@4.50.1': + resolution: {integrity: sha512-MCgtFB2+SVNuQmmjHf+wfI4CMxy3Tk8XjA5Z//A0AKD7QXUYFMQcns91K6dEHBvZPCnhJSyDWLApk40Iq/H3tA==} cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.53.2': - resolution: {integrity: sha512-ah59c1YkCxKExPP8O9PwOvs+XRLKwh/mV+3YdKqQ5AMQ0r4M4ZDuOrpWkUaqO7fzAHdINzV9tEVu8vNw48z0lA==} + '@rollup/rollup-linux-x64-musl@4.50.1': + resolution: {integrity: sha512-nEvqG+0jeRmqaUMuwzlfMKwcIVffy/9KGbAGyoa26iu6eSngAYQ512bMXuqqPrlTyfqdlB9FVINs93j534UJrg==} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openharmony-arm64@4.53.2': - resolution: {integrity: sha512-4VEd19Wmhr+Zy7hbUsFZ6YXEiP48hE//KPLCSVNY5RMGX2/7HZ+QkN55a3atM1C/BZCGIgqN+xrVgtdak2S9+A==} + '@rollup/rollup-openharmony-arm64@4.50.1': + resolution: {integrity: sha512-RDsLm+phmT3MJd9SNxA9MNuEAO/J2fhW8GXk62G/B4G7sLVumNFbRwDL6v5NrESb48k+QMqdGbHgEtfU0LCpbA==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.53.2': - resolution: {integrity: sha512-IlbHFYc/pQCgew/d5fslcy1KEaYVCJ44G8pajugd8VoOEI8ODhtb/j8XMhLpwHCMB3yk2J07ctup10gpw2nyMA==} + '@rollup/rollup-win32-arm64-msvc@4.50.1': + resolution: {integrity: sha512-hpZB/TImk2FlAFAIsoElM3tLzq57uxnGYwplg6WDyAxbYczSi8O2eQ+H2Lx74504rwKtZ3N2g4bCUkiamzS6TQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.53.2': - resolution: {integrity: sha512-lNlPEGgdUfSzdCWU176ku/dQRnA7W+Gp8d+cWv73jYrb8uT7HTVVxq62DUYxjbaByuf1Yk0RIIAbDzp+CnOTFg==} + '@rollup/rollup-win32-ia32-msvc@4.50.1': + resolution: {integrity: sha512-SXjv8JlbzKM0fTJidX4eVsH+Wmnp0/WcD8gJxIZyR6Gay5Qcsmdbi9zVtnbkGPG8v2vMR1AD06lGWy5FLMcG7A==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.53.2': - resolution: {integrity: sha512-S6YojNVrHybQis2lYov1sd+uj7K0Q05NxHcGktuMMdIQ2VixGwAfbJ23NnlvvVV1bdpR2m5MsNBViHJKcA4ADw==} + '@rollup/rollup-win32-x64-msvc@4.50.1': + resolution: {integrity: sha512-StxAO/8ts62KZVRAm4JZYq9+NqNsV7RvimNK+YM7ry//zebEH6meuugqW/P5OFUCjyQgui+9fUxT6d5NShvMvA==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.53.2': - resolution: {integrity: sha512-k+/Rkcyx//P6fetPoLMb8pBeqJBNGx81uuf7iljX9++yNBVRDQgD04L+SVXmXmh5ZP4/WOp4mWF0kmi06PW2tA==} - cpu: [x64] - os: [win32] + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} '@sentry/core@8.0.0': resolution: {integrity: sha512-PgOqQPdlIbiLFOo0F6IBzMbvusiEQ86+yXd76pIsuqQ2tj+iFL5gdYOckF/FKVpAwhfzIx64GKin2C+535c1qQ==} @@ -2226,6 +2405,10 @@ packages: resolution: {integrity: sha512-SME/vtXaJcnQ/HpeV6P82Egy+jThn11IKfwW8+/XVoRD0rmPHVTeKMtww1oWdVnMykzVPjmrDN9S8NBndPEHCQ==} engines: {node: '>=8'} + '@sindresorhus/is@7.1.1': + resolution: {integrity: sha512-rO92VvpgMc3kfiTjGT52LEtJ8Yc5kCWhZjLQ3LwlA4pSgPpQO7bVpYXParOD8Jwf+cVQECJo3yP/4I8aZtUQTQ==} + engines: {node: '>=18'} + '@sindresorhus/merge-streams@2.3.0': resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} @@ -2234,15 +2417,28 @@ packages: resolution: {integrity: sha512-btXmvw1JpA8WtSoXx9mTapo9NAyIDKRRzK84i48d8zc0X09M6ORfobVnHbgwhXf7CFhkRzhYrHG9dqbI9vpELQ==} engines: {node: '>=18'} + '@socketregistry/globalthis@1.0.8': + resolution: {integrity: sha512-keylYAVfNG8oovtMwsaai129NlhO7NwytSnRVNqR91nqx0uhA+XuWCcFDxw22QJYT/7mlNrR1MdkKL2Ks6Rq3Q==} + engines: {node: '>=18'} + '@socketregistry/hasown@1.0.7': resolution: {integrity: sha512-MZ5dyXOtiEc7q3801T+2EmKkxrd55BOSQnG8z/8/IkIJzDxqBxGGBKVyixqFm3W657TyUEBfIT9iWgSB6ipFsA==} engines: {node: '>=18'} + '@socketregistry/hyrious__bun.lockb@1.0.18': + resolution: {integrity: sha512-r1c03syFohMbFXAa3BNe+JyUQhynJmHrK8/6aL8DbTdwGVI0oHSnWxGVHjoPGPINAi+N2J5/CNm8kId3MBwelA==} + engines: {node: '>=18'} + hasBin: true + '@socketregistry/hyrious__bun.lockb@1.0.19': resolution: {integrity: sha512-Tqgd8FHrJBRaF/6GMTaJbQZQHnwoPVzowzlrZXSimujxVMIDSUlyx0TGmcz33gBWZLXaimZ9labhn44VG6CFkg==} engines: {node: '>=18'} hasBin: true + '@socketregistry/indent-string@1.0.13': + resolution: {integrity: sha512-h8MfBgjoPFiRYp60S9qzQJrmNIE/jAnqrjWZRGnHeKmpBH5M3DTwblrPG3hqxlu9IDtiu7H9NDvDGfFcM7dirw==} + engines: {node: '>=18'} + '@socketregistry/indent-string@1.0.14': resolution: {integrity: sha512-SCb2h+KkZppDEDyzZheazziUpJQVeCpEMQxSiTn4VMbVkGgvpNVAWQyx3IniSzwiSJpASmwTRTlhiYk6AR19bw==} engines: {node: '>=18'} @@ -2259,6 +2455,10 @@ packages: resolution: {integrity: sha512-DM81ydAjO2GJKkNf2Vn17InJ37sEYLK1YyhxpDX16OdbOpYlsDIw8QyeFEUZtc7GqsQXbcPKJmz3j/2qS+BhKQ==} engines: {node: '>=18'} + '@socketregistry/packageurl-js@1.0.9': + resolution: {integrity: sha512-q0DbpmRhvD9MNChqFtdbiEjMHayx5LeK6/8ZRDjHdE7L9wPPtAwVo+at5nMk2r3drV7sXoeUjkB/zGrh7r0DRQ==} + engines: {node: '>=18'} + '@socketregistry/packageurl-js@1.3.5': resolution: {integrity: sha512-Fl4GNUJ/z3IBJBGj4IsJfuRGUBCRMgX0df0mb5x5buaCPDKC+NhMhAFuxpc3viLSHV12CO2rGaNCf4fBYWI0FA==} engines: {node: '>=18', pnpm: '>=10.16.0'} @@ -2296,26 +2496,26 @@ packages: typescript: optional: true - '@socketsecurity/registry@2.0.2': - resolution: {integrity: sha512-hGfteZxSnPN2gmOc9A5cJmyTZBumgMWmg2MVOMRmQjFwxVssk/Bs5dgETGGSOfWBmo/g1K5rBfPs1vE0n/SXMQ==} + '@socketsecurity/registry@1.1.17': + resolution: {integrity: sha512-5j0eH6JaBZlcvnbdu+58Sw8c99AK25PTp0Z/lwP7HknHdJ0TMMoTzNIBbp7WCTZKoGrPgBWchi0udN1ObZ53VQ==} + engines: {node: '>=18'} + + '@socketsecurity/sdk@1.4.94': + resolution: {integrity: sha512-GVriiYWEx69WOfsP1NZ4/el8CrOeDEmSsa8M8uZRXhCweHSBMSy7ElZ2aARLgJj5ju9TY++pUTBFmYtKpLK6PQ==} engines: {node: '>=18'} - peerDependencies: - typescript: '>=5.0.0' - peerDependenciesMeta: - typescript: - optional: true '@socketsecurity/sdk@3.1.3': resolution: {integrity: sha512-GSOysDaKLAtXY6ZLJdf3YKPliCPxsa84J4JXBzTOZA6X+xSdcOPu1423VUmr5tG9ZJTRWH5z0fMNq3EyeALONA==} engines: {node: '>=18', pnpm: '>=10.16.0'} - '@standard-schema/spec@1.0.0': - resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} - '@stroncium/procfs@1.2.1': resolution: {integrity: sha512-X1Iui3FUNZP18EUvysTHxt+Avu2nlVzyf90YM8OYgP6SGzTzzX/0JgObfO1AQQDzuZtNNz29bVh8h5R97JrjxA==} engines: {node: '>=8'} + '@szmarczak/http-timer@5.0.1': + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} + '@tufjs/canonical-json@2.0.0': resolution: {integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==} engines: {node: ^16.14.0 || >=18.0.0} @@ -2330,6 +2530,9 @@ packages: '@types/accepts@1.3.7': resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==} + '@types/blessed@0.1.25': + resolution: {integrity: sha512-kQsjBgtsbJLmG6CJA+Z6Nujj+tq1fcSE3UIowbDvzQI4wWmoTV7djUDhSo5lDjgwpIN0oRvks0SA5mMdKE5eFg==} + '@types/body-parser@1.19.6': resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} @@ -2357,6 +2560,9 @@ packages: '@types/cookies@0.9.2': resolution: {integrity: sha512-1AvkDdZM2dbyFybL4fxpuNCaWyv//0AwsuUk2DWeXyM1/5ZKm6W3z6mQi24RZ4l2ucY+bkSHzbDVpySqPGuV8A==} + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} @@ -2372,13 +2578,12 @@ packages: '@types/http-assert@1.5.6': resolution: {integrity: sha512-TTEwmtjgVbYAzZYWyeHPrrtWnfVkm8tQkP8P21uQifPgMRgjrow3XDEYqucuC8SKZJT7pUnhU/JymvjggxO9vw==} + '@types/http-cache-semantics@4.0.4': + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + '@types/http-errors@2.0.5': resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} - '@types/ink@2.0.3': - resolution: {integrity: sha512-DYKIKEJqhsGfQ/jgX0t9BzfHmBJ/9dBBT2MDsHAQRAfOPhEe7LZm5QeNBx1J34/e108StCPuJ3r4bh1y38kCJA==} - deprecated: This is a stub types definition. ink provides its own type definitions, so you do not need this installed. - '@types/js-yaml@4.0.9': resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} @@ -2403,23 +2608,20 @@ packages: '@types/mime@1.3.5': resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - '@types/minimist@1.2.5': - resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - '@types/mock-fs@4.13.4': resolution: {integrity: sha512-mXmM0o6lULPI8z3XNnQCpL0BGxPwx1Ul1wXYEPBGl4efShyxW2Rln0JOPEWGyZaYZMM6OVXM/15zUuFMY52ljg==} + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/mysql@2.15.22': resolution: {integrity: sha512-wK1pzsJVVAjYCSZWQoWHziQZbNggXFDUEIGf54g4ZM/ERuP86uGdWeKZWMYlqTPMZfHJJvLPyogXGvCOg87yLQ==} '@types/node-fetch@2.6.13': resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==} - '@types/node@24.10.1': - resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} - - '@types/node@24.9.2': - resolution: {integrity: sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==} + '@types/node@24.3.1': + resolution: {integrity: sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2463,6 +2665,9 @@ packages: '@types/react@19.2.2': resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==} + '@types/resolve@1.20.2': + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + '@types/semver@7.7.1': resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} @@ -2481,50 +2686,73 @@ packages: '@types/ssri@7.1.5': resolution: {integrity: sha512-odD/56S3B51liILSk5aXJlnYt99S6Rt9EFDDqGtJM26rKHApHcwyU/UoYHrzKkdkHMAIquGWCuHtQTbes+FRQw==} + '@types/validator@13.15.10': + resolution: {integrity: sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA==} + '@types/which@3.0.4': resolution: {integrity: sha512-liyfuo/106JdlgSchJzXEQCVArk0CvevqPote8F8HgWgJ3dRCcTHgJIsLDuee0kxk/mhbInzIZk3QWSZJ8R+2w==} '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - '@typescript-eslint/eslint-plugin@8.44.1': - resolution: {integrity: sha512-molgphGqOBT7t4YKCSkbasmu1tb1MgrZ2szGzHbclF7PNmOkSTQVHy+2jXOSnxvR3+Xe1yySHFZoqMpz3TfQsw==} + '@typescript-eslint/eslint-plugin@8.43.0': + resolution: {integrity: sha512-8tg+gt7ENL7KewsKMKDHXR1vm8tt9eMxjJBYINf6swonlWgkYn5NwyIgXpbbDxTNU5DgpDFfj95prcTq2clIQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.44.1 + '@typescript-eslint/parser': ^8.43.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.44.1': - resolution: {integrity: sha512-EHrrEsyhOhxYt8MTg4zTF+DJMuNBzWwgvvOYNj/zm1vnaD/IC5zCXFehZv94Piqa2cRFfXrTFxIvO95L7Qc/cw==} + '@typescript-eslint/parser@8.43.0': + resolution: {integrity: sha512-B7RIQiTsCBBmY+yW4+ILd6mF5h1FUwJsVvpqkrgpszYifetQ2Ke+Z4u6aZh0CblkUGIdR59iYVyXqqZGkZ3aBw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/project-service@8.43.0': + resolution: {integrity: sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/project-service@8.44.1': resolution: {integrity: sha512-ycSa60eGg8GWAkVsKV4E6Nz33h+HjTXbsDT4FILyL8Obk5/mx4tbvCNsLf9zret3ipSumAOG89UcCs/KRaKYrA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/scope-manager@8.43.0': + resolution: {integrity: sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.44.1': resolution: {integrity: sha512-NdhWHgmynpSvyhchGLXh+w12OMT308Gm25JoRIyTZqEbApiBiQHD/8xgb6LqCWCFcxFtWwaVdFsLPQI3jvhywg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/tsconfig-utils@8.43.0': + resolution: {integrity: sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/tsconfig-utils@8.44.1': resolution: {integrity: sha512-B5OyACouEjuIvof3o86lRMvyDsFwZm+4fBOqFHccIctYgBjqR3qT39FBYGN87khcgf0ExpdCBeGKpKRhSFTjKQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.44.1': - resolution: {integrity: sha512-KdEerZqHWXsRNKjF9NYswNISnFzXfXNDfPxoTh7tqohU/PRIbwTmsjGK6V9/RTYWau7NZvfo52lgVk+sJh0K3g==} + '@typescript-eslint/type-utils@8.43.0': + resolution: {integrity: sha512-qaH1uLBpBuBBuRf8c1mLJ6swOfzCXryhKND04Igr4pckzSEW9JX5Aw9AgW00kwfjWJF0kk0ps9ExKTfvXfw4Qg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/types@8.43.0': + resolution: {integrity: sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.44.1': resolution: {integrity: sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2533,12 +2761,25 @@ packages: resolution: {integrity: sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.43.0': + resolution: {integrity: sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/typescript-estree@8.44.1': resolution: {integrity: sha512-qnQJ+mVa7szevdEyvfItbO5Vo+GfZ4/GZWWDRRLjrxYPkhM+6zYB2vRYwCsoJLzqFCdZT4mEqyJoyzkunsZ96A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@8.43.0': + resolution: {integrity: sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@8.44.1': resolution: {integrity: sha512-DpX5Fp6edTlocMCwA+mHY8Mra+pPjRZ0TfHkXI8QFelIKcbADQz1LUPNtzOFUriBB2UYqw4Pi9+xV4w9ZczHFg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2546,10 +2787,53 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/visitor-keys@8.43.0': + resolution: {integrity: sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.44.1': resolution: {integrity: sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20250912.1': + resolution: {integrity: sha512-yI9dgT+VGwNe4eS9ys9MTtbQcT3Ma+9AYVyab36oD10fbzgK/HScELbZLvBIAviHuyAlYX2BWq4Iits4RFnijg==} + cpu: [arm64] + os: [darwin] + + '@typescript/native-preview-darwin-x64@7.0.0-dev.20250912.1': + resolution: {integrity: sha512-SQ8QGEYva0NQ6kP2t/CeDMSua3PXJznTXe7vzQa+F8CYpv+52x+d+p8bOfKUKEZaRy5lvl/JBaIauxXGu6VmEQ==} + cpu: [x64] + os: [darwin] + + '@typescript/native-preview-linux-arm64@7.0.0-dev.20250912.1': + resolution: {integrity: sha512-PklJj6+5c54FAsr7xjqZCUaLWZbIOcgX+z/1eKUwIvgAgm3DxiTnomVth1SLqXkQuZ5IagrTRH+AmVAFsJtzuw==} + cpu: [arm64] + os: [linux] + + '@typescript/native-preview-linux-arm@7.0.0-dev.20250912.1': + resolution: {integrity: sha512-xXcens3GBg3EIpUY5gh56FZ8OVBsl+bVFRa75KjuN42D64JbCCyiQtaDO745MXNohc21VOOYTG6sWxhcmyIb8w==} + cpu: [arm] + os: [linux] + + '@typescript/native-preview-linux-x64@7.0.0-dev.20250912.1': + resolution: {integrity: sha512-vxZsR/O1qa+6QbwdHKT2LVGT6hJopxur9uqYuOc/bIxcprIWO2up789Fq8ssNTwnwo2v0nZAtx7758aveDcHGg==} + cpu: [x64] + os: [linux] + + '@typescript/native-preview-win32-arm64@7.0.0-dev.20250912.1': + resolution: {integrity: sha512-qkof7aS2at9tb8/SvPzH85JgIms1txPU9gZlPh5mkNTW1ylZyjYEuux2kt5EvnNa+XB/vhMAFnPmAW7X2EqA4w==} + cpu: [arm64] + os: [win32] + + '@typescript/native-preview-win32-x64@7.0.0-dev.20250912.1': + resolution: {integrity: sha512-cDyLN7k1a//cKIlkMepuyIpEtDQTC3cltjhw+wKwxiKNrPnLuYG7cCbGttzG5zWU9R6ACsZLR+tYjLth8L88aA==} + cpu: [x64] + os: [win32] + + '@typescript/native-preview@7.0.0-dev.20250912.1': + resolution: {integrity: sha512-gHhW7qbRRtbkxv5pEmmIGYUMGBkBZsfgDABLr5izOZY1qDP7ranAhIgfjjFF0gvYotYvW8dO4bArytwMqKysdg==} + hasBin: true + '@unrs/resolver-binding-android-arm-eabi@1.11.1': resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} cpu: [arm] @@ -2653,52 +2937,43 @@ packages: cpu: [x64] os: [win32] - '@vitest/coverage-v8@4.0.3': - resolution: {integrity: sha512-I+MlLwyJRBjmJr1kFYSxoseINbIdpxIAeK10jmXgB0FUtIfdYsvM3lGAvBu5yk8WPyhefzdmbCHCc1idFbNRcg==} + '@vitest/coverage-v8@3.2.4': + resolution: {integrity: sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==} peerDependencies: - '@vitest/browser': 4.0.3 - vitest: 4.0.3 + '@vitest/browser': 3.2.4 + vitest: 3.2.4 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@4.0.3': - resolution: {integrity: sha512-v3eSDx/bF25pzar6aEJrrdTXJduEBU3uSGXHslIdGIpJVP8tQQHV6x1ZfzbFQ/bLIomLSbR/2ZCfnaEGkWkiVQ==} + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} - '@vitest/mocker@4.0.3': - resolution: {integrity: sha512-evZcRspIPbbiJEe748zI2BRu94ThCBE+RkjCpVF8yoVYuTV7hMe+4wLF/7K86r8GwJHSmAPnPbZhpXWWrg1qbA==} + '@vitest/mocker@3.2.4': + resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} peerDependencies: msw: ^2.4.9 - vite: 7.1.12 + vite: 7.1.5 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@4.0.3': - resolution: {integrity: sha512-N7gly/DRXzxa9w9sbDXwD9QNFYP2hw90LLLGDobPNwiWgyW95GMxsCt29/COIKKh3P7XJICR38PSDePenMBtsw==} - - '@vitest/runner@4.0.3': - resolution: {integrity: sha512-1/aK6fPM0lYXWyGKwop2Gbvz1plyTps/HDbIIJXYtJtspHjpXIeB3If07eWpVH4HW7Rmd3Rl+IS/+zEAXrRtXA==} + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - '@vitest/snapshot@4.0.3': - resolution: {integrity: sha512-amnYmvZ5MTjNCP1HZmdeczAPLRD6iOm9+2nMRUGxbe/6sQ0Ymur0NnR9LIrWS8JA3wKE71X25D6ya/3LN9YytA==} + '@vitest/runner@3.2.4': + resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} - '@vitest/spy@4.0.3': - resolution: {integrity: sha512-82vVL8Cqz7rbXaNUl35V2G7xeNMAjBdNOVaHbrzznT9BmiCiPOzhf0FhU3eP41nP1bLDm/5wWKZqkG4nyU95DQ==} + '@vitest/snapshot@3.2.4': + resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} - '@vitest/utils@4.0.3': - resolution: {integrity: sha512-qV6KJkq8W3piW6MDIbGOmn1xhvcW4DuA07alqaQ+vdx7YA49J85pnwnxigZVQFQw3tWnQNRKWwhz5wbP6iv/GQ==} + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - '@yao-pkg/pkg-fetch@3.5.28': - resolution: {integrity: sha512-0dTu0yFgAuOp3OJBiwSZVkTMuGmvExwmG9mHKQhHkaNate5BWh6rBTzfQ0WId9DHXmg7GiT/kIyejEV0G3EHUQ==} - hasBin: true - - '@yao-pkg/pkg@6.8.0': - resolution: {integrity: sha512-QQcMbQHlaw7dFy3Nk7XQ7Gm8DlczTBcgSQB1V068L5/2rSZ3TO4CMc7rU7DeIOOR0Pm+mb5TDR3yH4jT6nfkpw==} - engines: {node: '>=18.0.0'} - hasBin: true + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} '@yarnpkg/lockfile@1.1.0': resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} @@ -2720,6 +2995,9 @@ packages: engines: {node: '>= 8'} hasBin: true + abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + abbrev@3.0.1: resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} engines: {node: ^18.17.0 || >=20.5.0} @@ -2756,6 +3034,14 @@ packages: ajv-dist@8.17.1: resolution: {integrity: sha512-KzJwANMzTTR/RERGnkx+bHzmxIfMTPMMv7+cH1d6Lx9UQ7BZyhiieq4hnO5lRuBWOtYTUL8hyWs7RJYI/45Rtg==} + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -2766,14 +3052,22 @@ packages: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} + ansi-escapes@6.2.1: + resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==} + engines: {node: '>=14.16'} + ansi-escapes@7.2.0: resolution: {integrity: sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==} engines: {node: '>=18'} - ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} + ansi-styles@2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} + ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -2786,6 +3080,12 @@ packages: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} + ansi-term@0.0.2: + resolution: {integrity: sha512-jLnGE+n8uAjksTJxiWZf/kcUmXq+cRWSl550B9NmQ8YiqaTM+lILcSe5dHdp8QkJPhaOghDjnMKwyYSMjosgAA==} + + ansicolors@0.3.2: + resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} + ansis@4.2.0: resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} engines: {node: '>=14'} @@ -2793,10 +3093,6 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -2804,6 +3100,10 @@ packages: ast-v8-to-istanbul@0.3.8: resolution: {integrity: sha512-szgSZqUxI5T8mLKvS7WTjF9is+MVbOeLADU73IseOcrqhxr/VAvy6wfoVE39KnKzA7JRhjF5eUagNlHwvZPlKQ==} + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -2845,36 +3145,6 @@ packages: bare-abort-controller: optional: true - bare-fs@4.5.1: - resolution: {integrity: sha512-zGUCsm3yv/ePt2PHNbVxjjn0nNB1MkIaR4wOCxJ2ig5pCf5cCVAYJXVhQg/3OhhJV6DB1ts7Hv0oUaElc2TPQg==} - engines: {bare: '>=1.16.0'} - peerDependencies: - bare-buffer: '*' - peerDependenciesMeta: - bare-buffer: - optional: true - - bare-os@3.6.2: - resolution: {integrity: sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==} - engines: {bare: '>=1.14.0'} - - bare-path@3.0.0: - resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} - - bare-stream@2.7.0: - resolution: {integrity: sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==} - peerDependencies: - bare-buffer: '*' - bare-events: '*' - peerDependenciesMeta: - bare-buffer: - optional: true - bare-events: - optional: true - - bare-url@2.3.2: - resolution: {integrity: sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==} - base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -2889,15 +3159,38 @@ packages: resolution: {integrity: sha512-sdleLVfCjBtgO5cNjA2HVRvWBJAHs4zwenaCPMNJAJU0yNxpzj80IpjOIimkpkr+mhlA+how5poQtt53PygbHA==} engines: {node: ^18.17.0 || >=20.5.0} + bin-links@6.0.0: + resolution: {integrity: sha512-X4CiKlcV2GjnCMwnKAfbVWpHa++65th9TuzAEYtZoATiOE2DQKhSp4CJlyLoTqdhBKlXjpXjCTYPNNFS33Fi6w==} + engines: {node: ^20.17.0 || >=22.9.0} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - bluebird@3.7.2: - resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + blessed-contrib@4.11.0: + resolution: {integrity: sha512-P00Xji3xPp53+FdU9f74WpvnOAn/SS0CKLy4vLAf5Ps7FGDOTY711ruJPZb3/7dpFuP+4i7f4a/ZTZdLlKG9WA==} + + blessed@0.1.81: + resolution: {integrity: sha512-LoF5gae+hlmfORcG1M5+5XZi4LBmvlXTzwJWzUlPryN/SJdSflZvROM2TwkT0GMpq7oqT48NRd4GS7BiVBc5OQ==} + engines: {node: '>= 0.8.0'} + hasBin: true + + body-parser@2.2.0: + resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} + engines: {node: '>=18'} bole@5.0.22: resolution: {integrity: sha512-BI0Fjfi38q0bnvG5FjQoLbipfme62eNENiXAWT3QjVvEa9Xdkkg4A0r4mkkOsbq8Hang0rSCbedUhdNA9hTCcg==} + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + boolean@3.2.0: + resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} @@ -2905,6 +3198,9 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + bresenham@0.0.3: + resolution: {integrity: sha512-wbMxoJJM1p3+6G7xEFXYNCJ30h2qkwmVxebkbwIl4OcnWtno5R3UT9VuYLfStlVNAQCmRjkGwjPFdfaPd4iNXw==} + browserslist@4.25.4: resolution: {integrity: sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -2915,9 +3211,16 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffers@0.1.1: + resolution: {integrity: sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==} + engines: {node: '>=0.2.0'} + builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} @@ -2926,6 +3229,10 @@ packages: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -2938,28 +3245,36 @@ packages: resolution: {integrity: sha512-+7LYcYGBYoNqTp1Rv7Ny1YjUo5E0/ftkQtraH3vkfAGgVHc+ouWdC8okAwQgQR7EVIdW6JTzTmhKFwzb+4okAQ==} engines: {node: ^20.17.0 || >=22.9.0} + cacheable-lookup@7.0.0: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} + + cacheable-request@13.0.15: + resolution: {integrity: sha512-NjiSrjv37X73FmGGU5ec/M83vWQ6q1Ae3BFe+ABfdeeMy4LOMKYTpfEjrBnLedu43clKZtsYbKrHTIQE7vKq+A==} + engines: {node: '>=18'} + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - camelcase-keys@7.0.2: - resolution: {integrity: sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==} - engines: {node: '>=12'} - - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - caniuse-lite@1.0.30001754: resolution: {integrity: sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==} - chai@6.2.1: - resolution: {integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==} + cardinal@2.1.1: + resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} + hasBin: true + + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} engines: {node: '>=18'} chalk-table@1.0.2: resolution: {integrity: sha512-lmtmQtr/GCtbiJiiuXPE5lj0arIXJir5hSjIhye/4Uyr7oTQlP+ufPnHzUS3Bre0xS/VWbz9NfeuPnvse9BXoQ==} + chalk@1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -2972,6 +3287,20 @@ packages: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + charm@0.1.2: + resolution: {integrity: sha512-syedaZ9cPe7r3hoQA9twWYKu5AIyCswN5+szkmPBe9ccdLrj4bYaCnLVPTLd2kgVRc7+zoX4tyPgRnFKCj5YjQ==} + + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + + cheerio-select@2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + + cheerio@1.1.2: + resolution: {integrity: sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==} + engines: {node: '>=20.18.1'} + chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} @@ -3002,6 +3331,10 @@ packages: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} + cli-table3@0.6.5: + resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} + engines: {node: 10.* || >= 12.*} + cli-truncate@4.0.0: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} @@ -3010,13 +3343,18 @@ packages: resolution: {integrity: sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==} engines: {node: '>=20'} - cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} cmd-shim@7.0.0: resolution: {integrity: sha512-rtpaCbr164TPPh+zFdkWpCyZuKkjpAzODfaZCf/SVJZzJN+4bHQb/LP3Jzq5/+84um3XXY8r548XiWKSborwVw==} engines: {node: ^18.17.0 || >=20.5.0} + cmd-shim@8.0.0: + resolution: {integrity: sha512-Jk/BK6NCapZ58BKUxlSI+ouKRbjH1NLZCgJkYoab+vEHUY3f6OzpNBN9u7HFSv9J6TRDGs4PLOHezoKGaFRSCA==} + engines: {node: ^20.17.0 || >=22.9.0} + code-excerpt@4.0.0: resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3071,6 +3409,17 @@ packages: common-ancestor-path@1.0.1: resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + compression@1.8.1: + resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} + engines: {node: '>= 0.8.0'} + compromise@14.14.4: resolution: {integrity: sha512-QdbJwronwxeqb7a5KFK/+Y5YieZ4PE1f7ai0vU58Pp4jih+soDCBMuKVbhDEPQ+6+vI3vSiG4UAAjTAXLJw1Qw==} engines: {node: '>=12.0.0'} @@ -3085,6 +3434,14 @@ packages: config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + connect@3.7.0: + resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} + engines: {node: '>= 0.10.0'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -3102,6 +3459,13 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} + + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} + engines: {node: '>= 6'} + cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -3110,6 +3474,14 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -3119,22 +3491,18 @@ packages: supports-color: optional: true - decamelize-keys@1.1.1: - resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} - engines: {node: '>=0.10.0'} - - decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - - decamelize@5.0.1: - resolution: {integrity: sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==} - engines: {node: '>=10'} + decompress-response@10.0.0: + resolution: {integrity: sha512-oj7KWToJuuxlPr7VV0vabvxEIiqNMo+q0NueIiL3XhtwC6FVOX7Hr1c0C4eD0bmf7Zr+S/dSf2xvkH3Ad6sU3Q==} + engines: {node: '>=20'} decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -3142,6 +3510,10 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + default-browser-id@5.0.0: resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} engines: {node: '>=18'} @@ -3150,6 +3522,10 @@ packages: resolution: {integrity: sha512-Qq68+VkJlc8tjnPV1i7HtbIn7ohmjZa88qUvHMIK0ZKUXMCuV45cT7cEXALPUmeXCe0q1DWQkQTemHVaLIFSrg==} engines: {node: '>=18'} + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + define-lazy-prop@3.0.0: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} @@ -3170,6 +3546,10 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + destr@2.0.5: resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} @@ -3177,22 +3557,57 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} + detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + dev-null-cli@2.0.0: resolution: {integrity: sha512-7wwzBy6Yo0UqCI+mNRtltZxAuqhmDWE4UPA0yiANku4ya6j6ABt1Uf+jpF8kheObKYWLH/r9Q/3gHsHADdduqA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + dotenv@17.2.3: resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} engines: {node: '>=12'} - duplexer2@0.1.4: - resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} + dottie@2.0.6: + resolution: {integrity: sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==} + + drawille-blessed-contrib@1.0.0: + resolution: {integrity: sha512-WnHMgf5en/hVOsFhxLI8ZX0qTJmerOsVjIMQmn4cR1eI8nLGu+L7w5ENbul+lZ6w827A3JakCuernES5xbHLzQ==} + + drawille-canvas-blessed-contrib@0.1.3: + resolution: {integrity: sha512-bdDvVJOxlrEoPLifGDPaxIzFh3cD7QH05ePoQ4fwnqfi08ZSxzEhOUpI5Z0/SQMlWgcCQOEtuw0zrwezacXglw==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} eciesjs@0.4.16: resolution: {integrity: sha512-dS5cbA9rA2VR4Ybuvhg6jvdmp46ubLn3E+px8cG/35aEDNclrqoCjg6mt0HYZ/M+OoESS3jSkCrqk1kWAEhWAw==} engines: {bun: '>=1', deno: '>=2', node: '>=16'} + edn-data@1.1.2: + resolution: {integrity: sha512-RI1i17URvOrBtSNEccbsXkuUZdc67QUBMqXGF62KPek85EdFGS2UKw76hNhOBl5kK4h7V4d32Ut15b/XVwKEXA==} + engines: {node: '>=12.0.0'} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + efrt@2.7.0: resolution: {integrity: sha512-/RInbCy1d4P6Zdfa+TMVsf/ufZVotat5hCw3QXmWtjU+3pFEOvOQ7ibo3aIxyCJw2leIeAMjmPj+1SLJiCpdrQ==} engines: {node: '>=12.0.0'} @@ -3203,6 +3618,19 @@ packages: emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + encoding-sniffer@0.2.1: + resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==} + encoding@0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} @@ -3213,6 +3641,14 @@ packages: resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} engines: {node: '>=10.13.0'} + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -3236,6 +3672,9 @@ packages: es-toolkit@1.41.0: resolution: {integrity: sha512-bDd3oRmbVgqZCJS6WmeQieOrzpl3URcWBUVDXxOELlUW2FuW+0glPOz1n0KnRie+PdyvUZcXz2sOn00c6pPRIA==} + es6-error@4.1.1: + resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + esbuild@0.25.11: resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} engines: {node: '>=18'} @@ -3245,6 +3684,9 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} @@ -3348,6 +3790,11 @@ packages: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + esquery@1.6.0: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} @@ -3360,6 +3807,9 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -3367,6 +3817,9 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + event-stream@0.9.8: + resolution: {integrity: sha512-o5h0Mp1bkoR6B0i7pTCAzRy+VzdsRWH997KQD4Psb0EOPoKEIiaRx/EsOdUl7p1Ktjw7aIWvweI/OY1R9XrlUg==} + eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} @@ -3420,6 +3873,9 @@ packages: fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + fd-package-json@2.0.0: + resolution: {integrity: sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ==} + fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -3433,10 +3889,17 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + finalhandler@1.1.2: + resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} + engines: {node: '>= 0.8'} + find-up-simple@1.0.1: resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} engines: {node: '>=18'} @@ -3463,20 +3926,22 @@ packages: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} + form-data-encoder@4.1.0: + resolution: {integrity: sha512-G6NsmEW15s0Uw9XnCg+33H3ViYRyiM0hMrMhhqQOR8NFc5GhYrI+6I3u7OTw7b91J2g8rtvMBZJDbcGb2YUniw==} + engines: {node: '>= 18'} + form-data@4.0.4: resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} engines: {node: '>= 6'} - from2@2.3.0: - resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} + formatly@0.3.0: + resolution: {integrity: sha512-9XNj/o4wrRFyhSMJOvsuyMwy8aUfBaZ1VrqHVfohyXf0Sw0e+yfKG+xZaY3arGCOMdwFsqObtzVOc1gU9KiT9w==} + engines: {node: '>=18.3.0'} + hasBin: true fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - fs-extra@11.3.2: - resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} - engines: {node: '>=14.14'} - fs-minipass@3.0.3: resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -3513,12 +3978,19 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + get-tsconfig@4.13.0: resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} github-from-package@0.0.0: resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + gl-matrix@2.8.1: + resolution: {integrity: sha512-0YCjVpE3pS5XWlN3J4X7AiAx65+nqAI54LndtVFnQZB6G/FVLkZH8y8V6R3cIoOQR4pUdfwQGd1iwyoXHJ4Qfw==} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -3536,6 +4008,10 @@ packages: engines: {node: 20 || >=22} hasBin: true + global-agent@3.0.0: + resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} + engines: {node: '>=10.0'} + globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} @@ -3555,6 +4031,10 @@ packages: globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + got@14.6.0: + resolution: {integrity: sha512-K30JHMsHcwhy+JYet3IxRFw+L9rb77y5LE3OkoAD4qzMR9/g30bWYBfkHYVJL2BBPgfU4lJsRwhy4HUkLPQc3g==} + engines: {node: '>=20'} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -3568,9 +4048,9 @@ packages: guid-typescript@1.0.9: resolution: {integrity: sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ==} - hard-rejection@2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} - engines: {node: '>=6'} + has-ansi@2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} @@ -3580,13 +4060,12 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + here@0.0.2: + resolution: {integrity: sha512-U7VYImCTcPoY27TSmzoiFsmWLEqQFaYNdpsPb9K0dXJhE6kufUqycaz51oR09CW85dDU9iWyy7At8M+p7hb3NQ==} + hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - hosted-git-info@4.1.0: - resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} - engines: {node: '>=10'} - hosted-git-info@8.1.0: resolution: {integrity: sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==} engines: {node: ^18.17.0 || >=20.5.0} @@ -3602,13 +4081,24 @@ packages: html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + htmlparser2@10.0.0: + resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==} + http-cache-semantics@4.2.0: resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + http-errors@2.0.1: + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} + engines: {node: '>= 0.8'} + http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} + http2-wrapper@2.2.1: + resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} + engines: {node: '>=10.19.0'} + https-proxy-agent@7.0.6: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} @@ -3626,6 +4116,10 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + iconv-lite@0.7.0: + resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} + engines: {node: '>=0.10.0'} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -3661,6 +4155,10 @@ packages: individual@3.0.0: resolution: {integrity: sha512-rUY5vtT748NMRbEMrTNiFfy29BgGZwGXUi2NFUVMWQrogSLzlJvQV9eeMWi+g1aVaQ53tpyLAQtd5x/JH0Nh1g==} + inflection@1.13.4: + resolution: {integrity: sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==} + engines: {'0': node >= 0.4.0} + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -3701,9 +4199,8 @@ packages: react-devtools-core: optional: true - into-stream@6.0.0: - resolution: {integrity: sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==} - engines: {node: '>=10'} + ionstore@1.0.1: + resolution: {integrity: sha512-g+99vyka3EiNFJCnbq3NxegjV211RzGtkDUMbZGB01Con8ZqUmMx/FpWMeqgDXOqgM7QoVeDhe+CfYCWznaDVA==} ip-address@10.1.0: resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} @@ -3754,6 +4251,9 @@ packages: engines: {node: '>=14.16'} hasBin: true + is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + is-node-process@1.2.0: resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} @@ -3769,18 +4269,21 @@ packages: resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} engines: {node: '>=12'} - is-plain-obj@1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} - engines: {node: '>=0.10.0'} - is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} + is-reference@1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + is-wsl@3.1.0: resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} engines: {node: '>=16'} @@ -3872,8 +4375,9 @@ packages: engines: {node: '>=6'} hasBin: true - jsonfile@6.2.0: - resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + jsonata@2.1.0: + resolution: {integrity: sha512-OCzaRMK8HobtX8fp37uIVmL8CY1IGc/a6gLsDqz3quExFR09/U78HUzWYr7T31UEB6+Eu0/8dkVD5fFDOl9a8w==} + engines: {node: '>= 8'} jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} @@ -3885,12 +4389,25 @@ packages: just-diff@6.0.2: resolution: {integrity: sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==} + jwa@2.0.1: + resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} + + jws@4.0.0: + resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} + keyv@5.5.4: + resolution: {integrity: sha512-eohl3hKTiVyD1ilYdw9T0OiB4hnjef89e3dMYKz+mVKDzj+5IteTseASUsOB+EU9Tf6VNTCjDePcP6wkDGmLKQ==} + + knip@5.63.1: + resolution: {integrity: sha512-wSznedUAzcU4o9e0O2WPqDnP7Jttu8cesq/R23eregRY8QYQ9NLJ3aGt9fadJfRzPBoU4tRyutwVQu6chhGDlA==} + engines: {node: '>=18.18.0'} + hasBin: true + peerDependencies: + '@types/node': '>=18' + typescript: '>=5.0.4' levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} @@ -3926,6 +4443,9 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -3936,6 +4456,13 @@ packages: long@5.3.2: resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + + lowercase-keys@3.0.0: + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -3946,10 +4473,6 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - magic-string@0.30.19: resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} @@ -3968,22 +4491,35 @@ packages: resolution: {integrity: sha512-iyyEpDty1mwW3dGlYXAJqC/azFn5PPvgKVwXayOGBSmKLxhKZ9fg4qIan2ePpp1vJIwfFiO34LAPZgq9SZW9Aw==} engines: {node: ^20.17.0 || >=22.9.0} - map-obj@1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} + map-canvas@0.1.5: + resolution: {integrity: sha512-f7M3sOuL9+up0NCOZbb1rQpWDLZwR/ftCiNbyscjl9LUUEwrRaoumH4sz6swgs58lF21DQ0hsYOCw5C6Zz7hbg==} - map-obj@4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} - engines: {node: '>=8'} + marked-terminal@5.2.0: + resolution: {integrity: sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA==} + engines: {node: '>=14.13.1 || >=16.0.0'} + peerDependencies: + marked: ^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + + marked@4.3.0: + resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} + engines: {node: '>= 12'} + hasBin: true + + matcher@3.0.0: + resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} + engines: {node: '>=10'} + + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + + memory-streams@0.1.3: + resolution: {integrity: sha512-qVQ/CjkMyMInPaaRMrwWNDvf6boRZXaT/DbQeMYcCWuXPEBf1v8qChOc9OlEVQp2uOvRXa1Qu30fLmKhY6NipA==} memorystream@0.3.1: resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} - meow@10.1.5: - resolution: {integrity: sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - meow@13.2.0: resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} engines: {node: '>=18'} @@ -4003,10 +4539,18 @@ packages: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mime-types@3.0.2: + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} + engines: {node: '>=18'} + mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -4019,10 +4563,18 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} + mimic-response@4.0.0: + resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} + minimatch@10.0.3: + resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} + engines: {node: 20 || >=22} + minimatch@10.1.1: resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} engines: {node: 20 || >=22} @@ -4034,10 +4586,6 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} - minimist-options@4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} - engines: {node: '>= 6'} - minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -4080,6 +4628,11 @@ packages: mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + mlly@1.8.0: resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} @@ -4090,6 +4643,12 @@ packages: module-details-from-path@1.0.4: resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} + moment-timezone@0.5.48: + resolution: {integrity: sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw==} + + moment@2.30.1: + resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} + mount-point@3.0.0: resolution: {integrity: sha512-jAhfD7ZCG+dbESZjcY1SdFVFqSJkh/yGbdsifHcPkvuLRO5ugK0Ssmd9jdATu29BTd4JiN+vkpMzVvsUgP3SZA==} engines: {node: '>=0.10.0'} @@ -4098,12 +4657,12 @@ packages: resolution: {integrity: sha512-4aE3U7CCBWgrQlQDMq8da4woBWDGHioJFiOZ8Ie6Yq2uwYQ9V2kGhTz4x3u6Wc+OU17nw0yc3rJ/lQ4jIiPe3A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - multistream@4.1.0: - resolution: {integrity: sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==} - nano-spawn@1.0.3: resolution: {integrity: sha512-jtpsQDetTnvS2Ts1fiRdci5rx0VYws5jGyC+4IYOTnIQ/wwdf6JdomlHBwqC3bJYOvaKu0C2GSZ1A60anrYpaA==} engines: {node: '>=20.17'} @@ -4135,6 +4694,10 @@ packages: engines: {node: '>=10'} hasBin: true + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + negotiator@1.0.0: resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} engines: {node: '>= 0.6'} @@ -4151,18 +4714,16 @@ packages: resolution: {integrity: sha512-zsFhmbkAzwhTft6nd3VxcG0cvJsT70rL+BIGHWVq5fi6MwGrHwzqKaxXE+Hl2GmnGItnDKPPkO5/LQqjVkIdFg==} engines: {node: '>=10'} + node-addon-api@8.5.0: + resolution: {integrity: sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==} + engines: {node: ^18 || ^20 || >= 21} + + node-emoji@1.11.0: + resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} + node-fetch-native@1.6.7: resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} - node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - node-gyp@11.5.0: resolution: {integrity: sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==} engines: {node: ^18.17.0 || >=20.5.0} @@ -4173,16 +4734,21 @@ packages: engines: {node: ^20.17.0 || >=22.9.0} hasBin: true - node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - node-releases@2.0.27: resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + node-stream-zip@1.15.0: + resolution: {integrity: sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==} + engines: {node: '>=0.12.0'} + noop-stream@1.0.0: resolution: {integrity: sha512-EHpIatM09Pg7dZOsowDwqqdacYpogTBb1BNSMIy8g/J+MGpaxy0k+qmrbYrjLNRPXtW3fqf+Q3b2Q0yFRnQdIw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + nopt@2.1.2: + resolution: {integrity: sha512-x8vXm7BZ2jE1Txrxh/hO74HTuYZQEbo8edoRcANgdZ4+PCV+pbjd/xdummkmjjC7LU5EjPzlu8zEq/oxWylnKA==} + hasBin: true + nopt@8.1.0: resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} engines: {node: ^18.17.0 || >=20.5.0} @@ -4196,14 +4762,14 @@ packages: normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - normalize-package-data@3.0.3: - resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} - engines: {node: '>=10'} - normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + normalize-url@8.1.0: + resolution: {integrity: sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==} + engines: {node: '>=14.16'} + npm-bundled@4.0.0: resolution: {integrity: sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==} engines: {node: ^18.17.0 || >=20.5.0} @@ -4265,6 +4831,9 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + object-hash@2.2.0: resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==} engines: {node: '>= 6'} @@ -4276,6 +4845,18 @@ packages: ofetch@1.5.1: resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} + on-finished@2.3.0: + resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} + engines: {node: '>= 0.8'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + on-headers@1.1.0: + resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} + engines: {node: '>= 0.8'} + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -4301,6 +4882,12 @@ packages: resolution: {integrity: sha512-aiSt/4ubOTyb1N5C2ZbGrBvaJOXIZhZvpRPYuUVxQJe27wJZqf/o65iPrqgLcgfeOLaQ8cS2Q+762jrYvniTrA==} engines: {node: '>18.0.0'} + optimist@0.2.8: + resolution: {integrity: sha512-Wy7E3cQDpqsTIFyW7m22hSevyTLxw850ahYv7FWsw4G6MIKVTZ8NSA95KBrQ95a4SMsMr1UGUUnwEFKhVaSzIg==} + + optimist@0.3.7: + resolution: {integrity: sha512-TCx0dXQzVtSCg2OgY/bO9hjM9cV4XYx09TVK+s3+FhkjT6LovsLe+pPMzpWf+6yXK/hUizs2gUoTw3jHM0VaTQ==} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -4312,14 +4899,27 @@ packages: outvariant@1.4.3: resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} + oxc-resolver@11.13.2: + resolution: {integrity: sha512-1SXVyYQ9bqMX3uZo8Px81EG7jhZkO9PvvR5X9roY5TLYVm4ZA7pbPDNlYaDBBeF9U+YO3OeMNoHde52hrcCu8w==} + + oxlint@1.15.0: + resolution: {integrity: sha512-GZngkdF2FabM0pp0/l5OOhIQg+9L6LmOrmS8V8Vg+Swv9/VLJd/oc/LtAkv4HO45BNWL3EVaXzswI0CmGokVzw==} + engines: {node: '>=8.*'} + hasBin: true + peerDependencies: + oxlint-tsgolint: '>=0.2.0' + peerDependenciesMeta: + oxlint-tsgolint: + optional: true + + p-cancelable@4.0.1: + resolution: {integrity: sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==} + engines: {node: '>=14.16'} + p-finally@2.0.1: resolution: {integrity: sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==} engines: {node: '>=8'} - p-is-promise@3.0.0: - resolution: {integrity: sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==} - engines: {node: '>=8'} - p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -4363,10 +4963,27 @@ packages: resolution: {integrity: sha512-37CN2VtcuvKgHUs8+0b1uJeEsbGn61GRHz469C94P5xiOoqpDYJYwjg4RY9Vmz39WyZAVkR5++nbJwLMIgOCnQ==} engines: {node: ^18.17.0 || >=20.5.0} + parse-conflict-json@5.0.1: + resolution: {integrity: sha512-ZHEmNKMq1wyJXNwLxyHnluPfRAFSIliBvbK/UiOceROt4Xh9Pz0fq49NytIaeaCUf5VR86hwQ/34FCcNU5/LKQ==} + engines: {node: ^20.17.0 || >=22.9.0} + parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} + parse5-htmlparser2-tree-adapter@7.1.0: + resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} + + parse5-parser-stream@7.1.2: + resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} + + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + patch-console@2.0.0: resolution: {integrity: sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4401,6 +5018,13 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} + + pg-connection-string@2.9.1: + resolution: {integrity: sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==} + pg-int8@1.0.1: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} engines: {node: '>=4.0.0'} @@ -4427,6 +5051,11 @@ packages: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} + picture-tuber@1.0.2: + resolution: {integrity: sha512-49/xq+wzbwDeI32aPvwQJldM8pr7dKDRuR76IjztrkmiCkAQDaWFJzkmfVqCHmt/iFoPFhHmI9L0oKhthrTOQw==} + engines: {node: '>=0.4.0'} + hasBin: true + pidtree@0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} engines: {node: '>=0.10'} @@ -4454,6 +5083,9 @@ packages: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} + png-js@0.1.1: + resolution: {integrity: sha512-NTtk2SyfjBm+xYl2/VZJBhFnTQ4kU5qWC7VC4/iGbrgiU4FuB4xC+74erxADYJIqZICOR1HCvRA7EBHkpjTg9g==} + pnpm-workspace-yaml@1.3.0: resolution: {integrity: sha512-Krb5q8Totd5mVuLx7we+EFHq/AfxA75nbfTm25Q1pIf606+RlaKUG+PXH8SDihfe5b5k4H09gE+sL47L1t5lbw==} @@ -4503,6 +5135,9 @@ packages: resolution: {integrity: sha512-E6rsNU1QNJgB3sjj7OANinGncFKuK+164sLXw1/CqBjj/EkXSoSdHCtWQGBNlREIGLnL7IEUEGa08YFVUbrhVg==} engines: {node: '>=16'} + prettify-xml@1.2.0: + resolution: {integrity: sha512-kuoTbmC+QQUfx45PrdkVzJqrNEp2lhK++WGyiqBx6JrCvZUQDgeYjdV3h53n7p+37s1Iwx6GjAQ7fcIgD8kkLQ==} + proc-log@5.0.0: resolution: {integrity: sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==} engines: {node: ^18.17.0 || >=20.5.0} @@ -4511,16 +5146,13 @@ packages: resolution: {integrity: sha512-KG/XsTDN901PNfPfAMmj6N/Ywg9tM+bHK8pAz+27fS4N4Pcr+4zoYBOcGSBu6ceXYNPxkLpa4ohtfxV1XcLAfA==} engines: {node: ^20.17.0 || >=22.9.0} - process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - proggy@3.0.0: resolution: {integrity: sha512-QE8RApCM3IaRRxVzxrjbgNMpQEX6Wu0p0KBeoSiSEw5/bsGwZHsshF4LCxH2jp/r6BU+bqA3LrMDEYNfJnpD8Q==} engines: {node: ^18.17.0 || >=20.5.0} - progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} + proggy@4.0.0: + resolution: {integrity: sha512-MbA4R+WQT76ZBm/5JUpV9yqcJt92175+Y0Bodg3HgiXzrmKu7Ggq+bpn6y6wHH+gN9NcyKn3yg1+d47VaKwNAQ==} + engines: {node: ^20.17.0 || >=22.9.0} promise-all-reject-late@1.0.1: resolution: {integrity: sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==} @@ -4536,6 +5168,10 @@ packages: resolution: {integrity: sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==} engines: {node: '>= 8'} + properties-reader@2.3.0: + resolution: {integrity: sha512-z597WicA7nDZxK12kZqHr2TcvwNU1GCfA5UwfDY/HDp3hXPoPlb5rlEx9bwGTiJnc0OqbBTkU975jDToth8Gxw==} + engines: {node: '>=14'} + proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} @@ -4567,6 +5203,10 @@ packages: rate-limiter-flexible@8.2.0: resolution: {integrity: sha512-lzpvMBP6GpCJftWP90RHzhCAAPFnO3BKaE6STNc6tPsu/uF6Y7kZDczV45a4Ms/H+5G2qqPFp8kg0l8gxCxcsw==} + raw-body@3.0.2: + resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} + engines: {node: '>= 0.10'} + rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -4591,36 +5231,35 @@ packages: resolution: {integrity: sha512-SEbJV7tohp3DAAILbEMPXavBjAnMN0tVnh4+9G8ihV4Pq3HYF9h8QNez9zkJ1ILkv9G2BjdzwctznGZXgu/HGw==} engines: {node: ^18.17.0 || >=20.5.0} + read-cmd-shim@6.0.0: + resolution: {integrity: sha512-1zM5HuOfagXCBWMN83fuFI/x+T/UhZ7k+KIzhrHXcQoeX5+7gmaDYjELQHmmzIodumBHeByBJT4QYS7ufAgs7A==} + engines: {node: ^20.17.0 || >=22.9.0} + read-package-json-fast@4.0.0: resolution: {integrity: sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==} engines: {node: ^18.17.0 || >=20.5.0} + read-package-json-fast@5.0.0: + resolution: {integrity: sha512-S16VePJnQcfmk6HIZAiP8TXW/VDlDtZfzVndRDE8lhZNA4YvAiwAjgvhoyf6+soofEH/vrZnOUctSt+jYE2tkg==} + engines: {node: ^20.17.0 || >=22.9.0} + read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} - read-pkg-up@8.0.0: - resolution: {integrity: sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==} - engines: {node: '>=12'} - read-pkg@5.2.0: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} - read-pkg@6.0.0: - resolution: {integrity: sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==} - engines: {node: '>=12'} - - readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + readable-stream@1.0.34: + resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} - redent@4.0.0: - resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} - engines: {node: '>=12'} + redeyed@2.1.1: + resolution: {integrity: sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==} regexp-tree@0.1.27: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} @@ -4650,6 +5289,9 @@ packages: resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==} engines: {node: '>=8.6.0'} + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -4662,6 +5304,10 @@ packages: engines: {node: '>= 0.4'} hasBin: true + responselike@4.0.2: + resolution: {integrity: sha512-cGk8IbWEAnaCpdAt1BHzJ3Ahz5ewDJa0KseTsE3qIRMJ3C698W8psM7byCeWVpd/Ha7FUYzuRVzXoKoM6nRUbA==} + engines: {node: '>=20'} + restore-cursor@4.0.0: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4670,6 +5316,9 @@ packages: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} + retry-as-promised@7.1.1: + resolution: {integrity: sha512-hMD7odLOt3LkTjcif8aRZqi/hybjpLNgSk5oF5FCowfCjok6LukpN2bDX7R5wDmbgBQFn7YoBxSagmtXHaJYJw==} + retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} @@ -4681,8 +5330,12 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rollup@4.53.2: - resolution: {integrity: sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g==} + roarr@2.15.4: + resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} + engines: {node: '>=8.0'} + + rollup@4.50.1: + resolution: {integrity: sha512-78E9voJHwnXQMiQdiqswVLZwJIzdBKJ1GdI5Zx6XwoFKUIk09/sSrr+05QFzvYb8q6Y9pPV45zzDuYa3907TZA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -4697,16 +5350,66 @@ packages: resolution: {integrity: sha512-vdTshSQ2JsRCgT8eKZWNJIL26C6bVqy1SOmuCMlKHegVeo8KYRobRrefOdUq9OozSPUUiSxrylteeRmLOMFfWg==} engines: {node: '>=12'} + sax@1.4.3: + resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==} + scheduler@0.26.0: resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + semver-compare@1.0.0: + resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} + + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + + sequelize-pool@7.1.0: + resolution: {integrity: sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==} + engines: {node: '>= 10.0.0'} + + sequelize@6.37.7: + resolution: {integrity: sha512-mCnh83zuz7kQxxJirtFD7q6Huy6liPanI67BSlbzSYgVNl5eXVdE2CN1FuAeZwG1SNpGsNRCV+bJAVVnykZAFA==} + engines: {node: '>=10.0.0'} + peerDependencies: + ibm_db: '*' + mariadb: '*' + mysql2: '*' + oracledb: '*' + pg: '*' + pg-hstore: '*' + snowflake-sdk: '*' + sqlite3: '*' + tedious: '*' + peerDependenciesMeta: + ibm_db: + optional: true + mariadb: + optional: true + mysql2: + optional: true + oracledb: + optional: true + pg: + optional: true + pg-hstore: + optional: true + snowflake-sdk: + optional: true + sqlite3: + optional: true + tedious: + optional: true + + serialize-error@7.0.1: + resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} engines: {node: '>=10'} - hasBin: true + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} @@ -4747,6 +5450,10 @@ packages: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + slice-ansi@5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} @@ -4759,6 +5466,10 @@ packages: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + smol-toml@1.5.2: + resolution: {integrity: sha512-QlaZEqcAH3/RtNyet1IPIYPsEWAaYyXXv1Krsi+1L/QHppjX4Ifm8MQsBISz9vE8cHicIq3clogsheili5vhaQ==} + engines: {node: '>= 18'} + socks-proxy-agent@8.0.5: resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} @@ -4778,6 +5489,11 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + sparkline@0.1.2: + resolution: {integrity: sha512-t//aVOiWt9fi/e22ea1vXVWBDX+gp18y+Ch9sKqmHl828bRfvP2VtfTJVEcgWFBQHd0yDPNQRiHdqzCvbcYSDA==} + engines: {node: '>= 0.8.0'} + hasBin: true + spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -4793,6 +5509,9 @@ packages: split2@3.2.2: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + ssri@10.0.5: resolution: {integrity: sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -4816,12 +5535,17 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + std-env@3.10.0: resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} - stream-meter@1.0.4: - resolution: {integrity: sha512-4sOEtrbgFotXwnEuzzsQBYEV1elAeFSO8rSGeTwabuX1RRn/kEq9JVH7I0MRBhKVRR0sJkr0M0QCH7yOLf9fhQ==} - streamx@2.23.0: resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==} @@ -4836,6 +5560,14 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + string-width@8.1.0: resolution: {integrity: sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==} engines: {node: '>=20'} @@ -4843,6 +5575,14 @@ packages: string_decoder@0.10.31: resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + + strip-ansi@5.2.0: + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} + engines: {node: '>=6'} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -4863,10 +5603,6 @@ packages: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} - strip-indent@4.1.1: - resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==} - engines: {node: '>=12'} - strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} @@ -4875,9 +5611,20 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strip-json-comments@5.0.2: + resolution: {integrity: sha512-4X2FR3UwhNUE9G49aIsJW5hRRR3GXGTBTZRMfv568O60ojM8HcWjV/VxAxCDW3SUND33O6ZY66ZuRcdkj73q2g==} + engines: {node: '>=14.16'} + + strip-literal@3.1.0: + resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} + suffix-thumb@5.0.2: resolution: {integrity: sha512-I5PWXAFKx3FYnI9a+dQMWNqTxoRt6vdBdb0O+BJ1sxXCWtSoQCusc13E58f+9p4MYx/qCnEMkD5jac6K2j3dgA==} + supports-color@2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -4898,6 +5645,10 @@ packages: resolution: {integrity: sha512-0e4u7KtrCrMqvuXvDN4nnHSEQbPlONtJuoolRWzut0PfuT2mEOvIFnYFHEpn5YPIOv7S5Ubher0b04jmYRQOzQ==} hasBin: true + table@6.9.0: + resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} + engines: {node: '>=10.0.0'} + tapable@2.3.0: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} @@ -4905,9 +5656,6 @@ packages: tar-fs@2.1.4: resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} - tar-fs@3.1.1: - resolution: {integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==} - tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} @@ -4915,6 +5663,10 @@ packages: tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + tar@7.5.1: + resolution: {integrity: sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==} + engines: {node: '>=18'} + tar@7.5.2: resolution: {integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==} engines: {node: '>=18'} @@ -4923,16 +5675,29 @@ packages: resolution: {integrity: sha512-hQGQH4WVtV9BqsZbrGzOmOP4NdWqie948BnqtH+NPwdVt5mI+qALVRDvgzgdf+neN7bcrVVpV4ToyFkxg0U0xQ==} hasBin: true + term-canvas@0.0.5: + resolution: {integrity: sha512-eZ3rIWi5yLnKiUcsW8P79fKyooaLmyLWAGqBhFspqMxRNUiB4GmHHk5AzQ4LxvFbJILaXqQZLwbbATLOhCFwkw==} + terminal-link@2.1.1: resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} engines: {node: '>=8'} + test-exclude@7.0.1: + resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} + engines: {node: '>=18'} + text-decoder@1.2.3: resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} through2@4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + tiny-colors@2.1.3: + resolution: {integrity: sha512-QKQBQx8Xm/jmaCDF8pdptiLWgmtbqEUgJnxqVeKQQcQP5XjGGImJ5hDHlDKAiwQhmp+xi3stYQZBedBMKzm+fw==} + + tiny-updater@3.5.3: + resolution: {integrity: sha512-wEUssfOOkVLg2raSaRbyZDHpVCDj6fnp7UjynpNE4XGuF+Gkj8GRRMoHdfk73VzLQs/AHKsbY8fCxXNz8Hx4Qg==} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -4947,16 +5712,28 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} - tinyrainbow@3.0.3: - resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} + tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + + tinyspy@4.0.4: + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} engines: {node: '>=14.0.0'} to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + toposort-class@1.0.1: + resolution: {integrity: sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg==} trash@10.0.0: resolution: {integrity: sha512-nyHQPJ7F4dYCfj1xN95DAkLkf9qlyRLDpT9yYwcR5SH16q+f7VA1L5VwsdEqWFUuGNpKwgLnbOS1QBvXMYnLfA==} @@ -4966,10 +5743,6 @@ packages: resolution: {integrity: sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - trim-newlines@4.1.1: - resolution: {integrity: sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==} - engines: {node: '>=12'} - ts-api-utils@2.1.0: resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} engines: {node: '>=18.12'} @@ -5013,6 +5786,10 @@ packages: resolution: {integrity: sha512-E67Chw7SxFe++uotisxt/xzB1UxxvLztzzQqVyUZ/jKujsejVqvoO5vn25oMvqJydqYrASBVBCQCy082E2qQYQ==} hasBin: true + type-fest@0.13.1: + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + engines: {node: '>=10'} + type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -5025,16 +5802,16 @@ packages: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} - type-fest@1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} - engines: {node: '>=10'} - type-fest@4.41.0: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - typescript-eslint@8.44.1: - resolution: {integrity: sha512-0ws8uWGrUVTjEeN2OM4K1pLKHK/4NiNP/vz6ns+LjT/6sqpaYzIVFajZb1fj/IDwpsrrHb3Jy0Qm5u9CPcKaeg==} + type-is@2.0.1: + resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} + engines: {node: '>= 0.6'} + + typescript-eslint@8.43.0: + resolution: {integrity: sha512-FyRGJKUGvcFekRRcBKFBlAhnp4Ng8rhe8tuvvkR9OiU0gfd4vyvTRQHEckO6VDlH57jbeUQem2IpqPq9kLJH+w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -5054,8 +5831,12 @@ packages: unconfig@7.4.1: resolution: {integrity: sha512-uyQ7LElcGizrOGZyIq9KU+xkuEjcRf9IpmDTkCSYv5mEeZzrXSj6rb51C0L+WTedsmAoVxW9WKrLWhSwebIM9Q==} - undici-types@7.16.0: - resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + undici-types@7.10.0: + resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} + + undici@6.21.3: + resolution: {integrity: sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==} + engines: {node: '>=18.17'} unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} @@ -5072,9 +5853,9 @@ packages: universal-user-agent@7.0.3: resolution: {integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==} - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} unplugin-purge-polyfills@0.1.0: resolution: {integrity: sha512-dHahgAhuzaHZHU65oY7BU24vqH/AtcXppdH1B1SmrBeglyX7NOBtkryjp2F8mOD4tL2RVxfAc41JRqRKTAeAkA==} @@ -5086,9 +5867,6 @@ packages: unrs-resolver@1.11.1: resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} - unzipper@0.12.3: - resolution: {integrity: sha512-PZ8hTS+AqcGxsaQntl3IRBw65QrBI6lxzqDEL7IAo/XCEqRTKGfOX56Vea5TH9SZczRVxuzk1re04z/YjuYCJA==} - update-browserslist-db@1.1.4: resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==} hasBin: true @@ -5105,6 +5883,18 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@11.1.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} + hasBin: true + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -5112,8 +5902,21 @@ packages: resolution: {integrity: sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==} engines: {node: ^18.17.0 || >=20.5.0} - vite@7.1.12: - resolution: {integrity: sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==} + validator@13.15.23: + resolution: {integrity: sha512-4yoz1kEWqUjzi5zsPbAS/903QXSYp0UOtHsPpp7p9rHAw/W+dkInskAE386Fat3oKRROwO98d9ZB0G4cObgUyw==} + engines: {node: '>= 0.10'} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vite-node@3.2.4: + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite@7.1.5: + resolution: {integrity: sha512-4cKBO9wR75r0BeIWWWId9XK9Lj6La5X846Zw9dFfzMRw38IlTk2iCcUt6hsyiDRcPidc55ZParFYDXi0nXOeLQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -5152,18 +5955,16 @@ packages: yaml: optional: true - vitest@4.0.3: - resolution: {integrity: sha512-IUSop8jgaT7w0g1yOM/35qVtKjr/8Va4PrjzH1OUb0YH4c3OXB2lCZDkMAB6glA8T5w8S164oJGsbcmAecr4sA==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + vitest@3.2.4: + resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/debug': ^4.1.12 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.3 - '@vitest/browser-preview': 4.0.3 - '@vitest/browser-webdriverio': 4.0.3 - '@vitest/ui': 4.0.3 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.2.4 + '@vitest/ui': 3.2.4 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -5173,11 +5974,7 @@ packages: optional: true '@types/node': optional: true - '@vitest/browser-playwright': - optional: true - '@vitest/browser-preview': - optional: true - '@vitest/browser-webdriverio': + '@vitest/browser': optional: true '@vitest/ui': optional: true @@ -5190,14 +5987,19 @@ packages: resolution: {integrity: sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==} engines: {node: 20 || >=22} - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + when-exit@2.1.5: + resolution: {integrity: sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==} which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} @@ -5228,14 +6030,25 @@ packages: resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} engines: {node: '>=18'} + wkx@0.5.0: + resolution: {integrity: sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==} + word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + wordwrap@0.0.3: + resolution: {integrity: sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==} + engines: {node: '>=0.4.0'} + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + wrap-ansi@9.0.2: resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} engines: {node: '>=18'} @@ -5251,6 +6064,10 @@ packages: resolution: {integrity: sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==} engines: {node: ^18.17.0 || >=20.5.0} + write-file-atomic@7.0.0: + resolution: {integrity: sha512-YnlPC6JqnZl6aO4uRc+dx5PHguiR9S6WeoLtpxNT9wIG+BDya7ZNE1q7KOjVgaA73hKhKLpVPgJ5QA9THQ5BRg==} + engines: {node: ^20.17.0 || >=22.9.0} + ws@8.18.3: resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} engines: {node: '>=10.0.0'} @@ -5267,6 +6084,10 @@ packages: resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} engines: {node: '>=18'} + x256@0.0.2: + resolution: {integrity: sha512-ZsIH+sheoF8YG9YG+QKEEIdtqpHRA9FYuD7MqhfyB1kayXU43RUNBFSxBEnF8ywSUxdg+8no4+bPr5qLbyxKgA==} + engines: {node: '>=0.4.0'} + xcase@2.0.1: resolution: {integrity: sha512-UmFXIPU+9Eg3E9m/728Bii0lAIuoc+6nbrNUKaRPJOFp91ih44qqGlWtxMB6kXFrRD6po+86ksHM5XHCfk6iPw==} @@ -5278,6 +6099,18 @@ packages: resolution: {integrity: sha512-N1XQngeqMBoj9wM4ZFadVV2MymImeiFfYD+fJrNlcVcOHsJFFQe7n3b+aBoTPwARuq2HQxukfzVpQmAk1gN4sQ==} engines: {node: '>=10'} + xml-js@1.6.11: + resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==} + hasBin: true + + xml2js@0.6.2: + resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} + engines: {node: '>=4.0.0'} + + xmlbuilder@11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -5305,9 +6138,9 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} @@ -5317,9 +6150,22 @@ packages: resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} engines: {node: '>=18'} + yoctocolors@2.1.2: + resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} + engines: {node: '>=18'} + yoga-layout@3.2.1: resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==} + zod-validation-error@3.5.4: + resolution: {integrity: sha512-+hEiRIiPobgyuFlEojnqjJnhFvg4r/i3cqgcm67eehZf/WBaK3g6cD02YU9mtdVxZjv8CzCA9n/Rhrs3yAAvAw==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.24.4 + + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + zod@4.1.8: resolution: {integrity: sha512-5R1P+WwQqmmMIEACyzSvo4JXHY5WiAFHRMg+zBZKgKS+Q1viRa0C1hmUKtHltoIFKtIdki3pRxkmpP74jnNYHQ==} @@ -5330,6 +6176,11 @@ snapshots: ansi-styles: 6.2.3 is-fullwidth-code-point: 5.1.0 + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + '@antfu/ni@25.0.0': dependencies: ansis: 4.2.0 @@ -5337,6 +6188,39 @@ snapshots: package-manager-detector: 1.5.0 tinyexec: 1.0.2 + '@appthreat/atom-common@1.0.12': + optional: true + + '@appthreat/atom-parsetools@1.0.12': + dependencies: + '@appthreat/atom-common': 1.0.12 + '@babel/parser': 7.28.5 + typescript: 5.9.3 + yargs: 17.7.2 + optional: true + + '@appthreat/atom@2.4.2': + dependencies: + '@appthreat/atom-common': 1.0.12 + '@appthreat/atom-parsetools': 1.0.12 + optional: true + + '@appthreat/cdx-proto@1.1.4': + dependencies: + '@bufbuild/protobuf': 2.6.3 + optional: true + + '@appthreat/sqlite3@6.0.9': + dependencies: + bindings: 1.5.0 + node-addon-api: 8.5.0 + prebuild-install: 7.1.3 + optionalDependencies: + node-gyp: 11.5.0 + transitivePeerDependencies: + - supports-color + optional: true + '@babel/code-frame@7.27.1': dependencies: '@babel/helper-validator-identifier': 7.28.5 @@ -5445,13 +6329,13 @@ snapshots: '@babel/core': 7.28.4 '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color @@ -5503,35 +6387,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.4) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) - '@babel/types': 7.28.5 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-runtime@7.28.3(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 @@ -5555,18 +6410,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/preset-react@7.27.1(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.28.4) - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.28.4) - transitivePeerDependencies: - - supports-color - '@babel/preset-typescript@7.27.1(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 @@ -5652,6 +6495,135 @@ snapshots: '@biomejs/cli-win32-x64@2.2.4': optional: true + '@bufbuild/protobuf@2.10.0': + optional: true + + '@bufbuild/protobuf@2.6.3': + optional: true + + '@coana-tech/cli@14.12.98': {} + + '@colors/colors@1.5.0': + optional: true + + '@cyclonedx/cdxgen-plugins-bin-darwin-amd64@1.7.0': + optional: true + + '@cyclonedx/cdxgen-plugins-bin-darwin-arm64@1.7.0': + optional: true + + '@cyclonedx/cdxgen-plugins-bin-linux-amd64@1.7.0': + optional: true + + '@cyclonedx/cdxgen-plugins-bin-linux-arm64@1.7.0': + optional: true + + '@cyclonedx/cdxgen-plugins-bin-linux-arm@1.7.0': + optional: true + + '@cyclonedx/cdxgen-plugins-bin-linux-ppc64@1.7.0': + optional: true + + '@cyclonedx/cdxgen-plugins-bin-linuxmusl-amd64@1.7.0': + optional: true + + '@cyclonedx/cdxgen-plugins-bin-linuxmusl-arm64@1.7.0': + optional: true + + '@cyclonedx/cdxgen-plugins-bin-windows-amd64@1.7.0': + optional: true + + '@cyclonedx/cdxgen-plugins-bin-windows-arm64@1.7.0': + optional: true + + '@cyclonedx/cdxgen-plugins-bin@1.7.0': + optional: true + + '@cyclonedx/cdxgen@11.11.0': + dependencies: + '@babel/parser': 7.28.5 + '@babel/traverse': 7.28.5 + '@iarna/toml': 2.2.5 + '@isaacs/string-locale-compare': 1.1.0 + '@npmcli/fs': 5.0.0 + '@npmcli/installed-package-contents': 4.0.0 + '@npmcli/map-workspaces': 5.0.1 + '@npmcli/name-from-folder': 4.0.0 + '@npmcli/package-json': 7.0.1 + '@npmcli/query': 5.0.0 + '@npmcli/redact': 4.0.0 + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + bin-links: 6.0.0 + cheerio: 1.1.2 + common-ancestor-path: 1.0.1 + edn-data: 1.1.2 + encoding: 0.1.13 + glob: 11.0.3 + global-agent: 3.0.0 + got: 14.6.0 + hosted-git-info: 9.0.2 + iconv-lite: 0.7.0 + json-stringify-nice: 1.1.4 + jws: 4.0.0 + minimatch: 10.0.3 + node-stream-zip: 1.15.0 + npm-install-checks: 8.0.0 + npm-normalize-package-bin: 5.0.0 + npm-package-arg: 13.0.0 + npm-pick-manifest: 11.0.3 + packageurl-js: '@socketregistry/packageurl-js@1.0.9' + parse-conflict-json: 5.0.1 + prettify-xml: 1.2.0 + proc-log: 6.0.0 + proggy: 4.0.0 + promise-all-reject-late: 1.0.1 + promise-call-limit: 3.0.2 + properties-reader: 2.3.0 + read-package-json-fast: 5.0.0 + semver: 7.7.2 + ssri: 13.0.0 + table: 6.9.0 + tar: 7.5.1 + treeverse: 3.0.0 + uuid: 11.1.0 + walk-up-path: 4.0.0 + xml-js: 1.6.11 + yaml: 2.8.1 + yargs: 17.7.2 + yoctocolors: 2.1.2 + optionalDependencies: + '@appthreat/atom': 2.4.2 + '@appthreat/cdx-proto': 1.1.4 + '@bufbuild/protobuf': 2.10.0 + '@cyclonedx/cdxgen-plugins-bin': 1.7.0 + '@cyclonedx/cdxgen-plugins-bin-darwin-amd64': 1.7.0 + '@cyclonedx/cdxgen-plugins-bin-darwin-arm64': 1.7.0 + '@cyclonedx/cdxgen-plugins-bin-linux-amd64': 1.7.0 + '@cyclonedx/cdxgen-plugins-bin-linux-arm': 1.7.0 + '@cyclonedx/cdxgen-plugins-bin-linux-arm64': 1.7.0 + '@cyclonedx/cdxgen-plugins-bin-linux-ppc64': 1.7.0 + '@cyclonedx/cdxgen-plugins-bin-linuxmusl-amd64': 1.7.0 + '@cyclonedx/cdxgen-plugins-bin-linuxmusl-arm64': 1.7.0 + '@cyclonedx/cdxgen-plugins-bin-windows-amd64': 1.7.0 + '@cyclonedx/cdxgen-plugins-bin-windows-arm64': 1.7.0 + body-parser: 2.2.0 + compression: 1.8.1 + connect: 3.7.0 + jsonata: 2.1.0 + sequelize: 6.37.7(@appthreat/sqlite3@6.0.9) + sqlite3: '@appthreat/sqlite3@6.0.9' + transitivePeerDependencies: + - ibm_db + - mariadb + - mysql2 + - oracledb + - pg + - pg-hstore + - snowflake-sdk + - supports-color + - tedious + '@dotenvx/dotenvx@1.49.0': dependencies: commander: 11.1.0 @@ -5839,6 +6811,8 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@iarna/toml@2.2.5': {} + '@isaacs/balanced-match@4.0.1': {} '@isaacs/brace-expansion@5.0.0': @@ -5847,11 +6821,11 @@ snapshots: '@isaacs/cliui@8.0.2': dependencies: - string-width: 8.1.0 + string-width: 5.1.2 string-width-cjs: string-width@4.2.3 strip-ansi: 7.1.2 strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 9.0.2 + wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 '@isaacs/fs-minipass@4.0.1': @@ -5860,6 +6834,8 @@ snapshots: '@isaacs/string-locale-compare@1.1.0': {} + '@istanbuljs/schema@0.1.3': {} + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -5879,6 +6855,8 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@keyv/serialize@1.1.1': {} + '@mswjs/interceptors@0.39.8': dependencies: '@open-draft/deferred-promise': 2.2.0 @@ -5895,6 +6873,13 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true + '@napi-rs/wasm-runtime@1.0.7': + dependencies: + '@emnapi/core': 1.7.0 + '@emnapi/runtime': 1.7.0 + '@tybys/wasm-util': 0.10.1 + optional: true + '@noble/ciphers@1.3.0': {} '@noble/curves@1.9.7': @@ -5949,7 +6934,7 @@ snapshots: '@npmcli/package-json': 6.2.0 '@npmcli/query': 4.0.1 '@npmcli/redact': 3.2.2 - '@npmcli/run-script': 9.1.0(patch_hash=65d59a7c4dd7b00f1c218cbcf97d78fe2f462f2e048de4a22b41bd70dbdefcdc) + '@npmcli/run-script': 9.1.0 bin-links: 5.0.0 cacache: 19.0.1 common-ancestor-path: 1.0.1 @@ -5991,6 +6976,10 @@ snapshots: dependencies: semver: 7.7.2 + '@npmcli/fs@5.0.0': + dependencies: + semver: 7.7.2 + '@npmcli/git@6.0.3': dependencies: '@npmcli/promise-spawn': 8.0.3 @@ -6030,6 +7019,13 @@ snapshots: glob: 10.4.5 minimatch: 9.0.5 + '@npmcli/map-workspaces@5.0.1': + dependencies: + '@npmcli/name-from-folder': 4.0.0 + '@npmcli/package-json': 7.0.2 + glob: 11.0.3 + minimatch: 10.1.1 + '@npmcli/metavuln-calculator@9.0.3': dependencies: cacache: 20.0.1 @@ -6042,6 +7038,8 @@ snapshots: '@npmcli/name-from-folder@3.0.0': {} + '@npmcli/name-from-folder@4.0.0': {} + '@npmcli/node-gyp@4.0.0': {} '@npmcli/node-gyp@5.0.0': {} @@ -6056,6 +7054,16 @@ snapshots: semver: 7.7.2 validate-npm-package-license: 3.0.4 + '@npmcli/package-json@7.0.1': + dependencies: + '@npmcli/git': 7.0.1 + glob: 11.0.3 + hosted-git-info: 9.0.2 + json-parse-even-better-errors: 4.0.0 + proc-log: 5.0.0 + semver: 7.7.2 + validate-npm-package-license: 3.0.4 + '@npmcli/package-json@7.0.2': dependencies: '@npmcli/git': 7.0.1 @@ -6078,27 +7086,31 @@ snapshots: dependencies: postcss-selector-parser: 7.1.0 + '@npmcli/query@5.0.0': + dependencies: + postcss-selector-parser: 7.1.0 + '@npmcli/redact@3.2.2': {} '@npmcli/redact@4.0.0': {} - '@npmcli/run-script@10.0.3(patch_hash=b1f74f31293142449c0be473fae0f0b977e1e1174e6a88e2021fcb93dc902ed6)': + '@npmcli/run-script@10.0.3': dependencies: '@npmcli/node-gyp': 5.0.0 '@npmcli/package-json': 7.0.2 '@npmcli/promise-spawn': 9.0.1 - node-gyp: 12.1.0(patch_hash=140ba43d43d74f7d3577feb3f8a6efad544dbb0059784102b144a0e2daa437f9) + node-gyp: 12.1.0 proc-log: 6.0.0 which: 6.0.0 transitivePeerDependencies: - supports-color - '@npmcli/run-script@9.1.0(patch_hash=65d59a7c4dd7b00f1c218cbcf97d78fe2f462f2e048de4a22b41bd70dbdefcdc)': + '@npmcli/run-script@9.1.0': dependencies: '@npmcli/node-gyp': 4.0.0 '@npmcli/package-json': 6.2.0 '@npmcli/promise-spawn': 8.0.3 - node-gyp: 11.5.0(patch_hash=140ba43d43d74f7d3577feb3f8a6efad544dbb0059784102b144a0e2daa437f9) + node-gyp: 11.5.0 proc-log: 5.0.0 which: 5.0.0 transitivePeerDependencies: @@ -6453,6 +7465,89 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@oxc-resolver/binding-android-arm-eabi@11.13.2': + optional: true + + '@oxc-resolver/binding-android-arm64@11.13.2': + optional: true + + '@oxc-resolver/binding-darwin-arm64@11.13.2': + optional: true + + '@oxc-resolver/binding-darwin-x64@11.13.2': + optional: true + + '@oxc-resolver/binding-freebsd-x64@11.13.2': + optional: true + + '@oxc-resolver/binding-linux-arm-gnueabihf@11.13.2': + optional: true + + '@oxc-resolver/binding-linux-arm-musleabihf@11.13.2': + optional: true + + '@oxc-resolver/binding-linux-arm64-gnu@11.13.2': + optional: true + + '@oxc-resolver/binding-linux-arm64-musl@11.13.2': + optional: true + + '@oxc-resolver/binding-linux-ppc64-gnu@11.13.2': + optional: true + + '@oxc-resolver/binding-linux-riscv64-gnu@11.13.2': + optional: true + + '@oxc-resolver/binding-linux-riscv64-musl@11.13.2': + optional: true + + '@oxc-resolver/binding-linux-s390x-gnu@11.13.2': + optional: true + + '@oxc-resolver/binding-linux-x64-gnu@11.13.2': + optional: true + + '@oxc-resolver/binding-linux-x64-musl@11.13.2': + optional: true + + '@oxc-resolver/binding-wasm32-wasi@11.13.2': + dependencies: + '@napi-rs/wasm-runtime': 1.0.7 + optional: true + + '@oxc-resolver/binding-win32-arm64-msvc@11.13.2': + optional: true + + '@oxc-resolver/binding-win32-ia32-msvc@11.13.2': + optional: true + + '@oxc-resolver/binding-win32-x64-msvc@11.13.2': + optional: true + + '@oxlint/darwin-arm64@1.15.0': + optional: true + + '@oxlint/darwin-x64@1.15.0': + optional: true + + '@oxlint/linux-arm64-gnu@1.15.0': + optional: true + + '@oxlint/linux-arm64-musl@1.15.0': + optional: true + + '@oxlint/linux-x64-gnu@1.15.0': + optional: true + + '@oxlint/linux-x64-musl@1.15.0': + optional: true + + '@oxlint/win32-arm64@1.15.0': + optional: true + + '@oxlint/win32-x64@1.15.0': + optional: true + '@pkgjs/parseargs@0.11.0': optional: true @@ -6484,7 +7579,7 @@ snapshots: '@pnpm/graceful-fs@1000.0.0': dependencies: - graceful-fs: 4.2.11 + graceful-fs: 4.2.11(patch_hash=17007d43dcc01ee2047730ab13eb23c41adc01ae0f24ee872b1fe69142db5200) '@pnpm/lockfile.detect-dep-types@1001.0.13': dependencies: @@ -6544,7 +7639,7 @@ snapshots: '@pnpm/network.ca-file@1.0.2': dependencies: - graceful-fs: 4.2.11 + graceful-fs: 4.2.11(patch_hash=17007d43dcc01ee2047730ab13eb23c41adc01ae0f24ee872b1fe69142db5200) '@pnpm/npm-conf@2.3.1': dependencies: @@ -6606,72 +7701,124 @@ snapshots: dependencies: quansync: 0.2.11 - '@rollup/rollup-android-arm-eabi@4.53.2': - optional: true + '@rollup/plugin-babel@6.0.4(@babel/core@7.28.4)(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f))': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-imports': 7.27.1 + '@rollup/pluginutils': 5.3.0(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f)) + optionalDependencies: + rollup: 4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f) + transitivePeerDependencies: + - supports-color + + '@rollup/plugin-commonjs@28.0.6(patch_hash=4d412c02fa3df1b1f5b29b135bd3f0997f85248ceb3a578d01e7f40fba27c21b)(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f))': + dependencies: + '@rollup/pluginutils': 5.3.0(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f)) + commondir: 1.0.1 + estree-walker: 2.0.2 + fdir: 6.5.0(picomatch@4.0.3) + is-reference: 1.2.1 + magic-string: 0.30.19 + picomatch: 4.0.3 + optionalDependencies: + rollup: 4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f) + + '@rollup/plugin-json@6.1.0(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f))': + dependencies: + '@rollup/pluginutils': 5.3.0(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f)) + optionalDependencies: + rollup: 4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f) + + '@rollup/plugin-node-resolve@16.0.1(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f))': + dependencies: + '@rollup/pluginutils': 5.3.0(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f)) + '@types/resolve': 1.20.2 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.11 + optionalDependencies: + rollup: 4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f) - '@rollup/rollup-android-arm64@4.53.2': + '@rollup/plugin-replace@6.0.2(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f))': + dependencies: + '@rollup/pluginutils': 5.3.0(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f)) + magic-string: 0.30.19 + optionalDependencies: + rollup: 4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f) + + '@rollup/pluginutils@5.3.0(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f))': + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.3 + optionalDependencies: + rollup: 4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f) + + '@rollup/rollup-android-arm-eabi@4.50.1': optional: true - '@rollup/rollup-darwin-arm64@4.53.2': + '@rollup/rollup-android-arm64@4.50.1': optional: true - '@rollup/rollup-darwin-x64@4.53.2': + '@rollup/rollup-darwin-arm64@4.50.1': optional: true - '@rollup/rollup-freebsd-arm64@4.53.2': + '@rollup/rollup-darwin-x64@4.50.1': optional: true - '@rollup/rollup-freebsd-x64@4.53.2': + '@rollup/rollup-freebsd-arm64@4.50.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.53.2': + '@rollup/rollup-freebsd-x64@4.50.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.53.2': + '@rollup/rollup-linux-arm-gnueabihf@4.50.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.53.2': + '@rollup/rollup-linux-arm-musleabihf@4.50.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.53.2': + '@rollup/rollup-linux-arm64-gnu@4.50.1': optional: true - '@rollup/rollup-linux-loong64-gnu@4.53.2': + '@rollup/rollup-linux-arm64-musl@4.50.1': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.53.2': + '@rollup/rollup-linux-loongarch64-gnu@4.50.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.53.2': + '@rollup/rollup-linux-ppc64-gnu@4.50.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.53.2': + '@rollup/rollup-linux-riscv64-gnu@4.50.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.53.2': + '@rollup/rollup-linux-riscv64-musl@4.50.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.53.2': + '@rollup/rollup-linux-s390x-gnu@4.50.1': optional: true - '@rollup/rollup-linux-x64-musl@4.53.2': + '@rollup/rollup-linux-x64-gnu@4.50.1': optional: true - '@rollup/rollup-openharmony-arm64@4.53.2': + '@rollup/rollup-linux-x64-musl@4.50.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.53.2': + '@rollup/rollup-openharmony-arm64@4.50.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.53.2': + '@rollup/rollup-win32-arm64-msvc@4.50.1': optional: true - '@rollup/rollup-win32-x64-gnu@4.53.2': + '@rollup/rollup-win32-ia32-msvc@4.50.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.53.2': + '@rollup/rollup-win32-x64-msvc@4.50.1': optional: true + '@sec-ant/readable-stream@0.4.1': {} + '@sentry/core@8.0.0': dependencies: '@sentry/types': 8.0.0 @@ -6767,14 +7914,22 @@ snapshots: dependencies: execa: 2.1.0 + '@sindresorhus/is@7.1.1': {} + '@sindresorhus/merge-streams@2.3.0': {} '@socketregistry/es-set-tostringtag@1.0.10': {} + '@socketregistry/globalthis@1.0.8': {} + '@socketregistry/hasown@1.0.7': {} + '@socketregistry/hyrious__bun.lockb@1.0.18': {} + '@socketregistry/hyrious__bun.lockb@1.0.19': {} + '@socketregistry/indent-string@1.0.13': {} + '@socketregistry/indent-string@1.0.14': {} '@socketregistry/is-core-module@1.0.11': {} @@ -6783,14 +7938,15 @@ snapshots: '@socketregistry/isarray@1.0.8': {} + '@socketregistry/packageurl-js@1.0.9': {} + '@socketregistry/packageurl-js@1.3.5': {} '@socketregistry/path-parse@1.0.8': {} '@socketregistry/safe-buffer@1.0.9': {} - '@socketregistry/safer-buffer@1.0.10': - optional: true + '@socketregistry/safer-buffer@1.0.10': {} '@socketregistry/side-channel@1.0.10': {} @@ -6808,16 +7964,20 @@ snapshots: optionalDependencies: typescript: 5.9.3 - '@socketsecurity/registry@2.0.2(typescript@5.9.3)': - optionalDependencies: - typescript: 5.9.3 + '@socketsecurity/registry@1.1.17': {} - '@socketsecurity/sdk@3.1.3': {} + '@socketsecurity/sdk@1.4.94': + dependencies: + '@socketsecurity/registry': 1.1.17 - '@standard-schema/spec@1.0.0': {} + '@socketsecurity/sdk@3.1.3': {} '@stroncium/procfs@1.2.1': {} + '@szmarczak/http-timer@5.0.1': + dependencies: + defer-to-connect: 2.0.1 + '@tufjs/canonical-json@2.0.0': {} '@tufjs/models@4.0.0': @@ -6832,18 +7992,22 @@ snapshots: '@types/accepts@1.3.7': dependencies: - '@types/node': 24.10.1 + '@types/node': 24.3.1 + + '@types/blessed@0.1.25': + dependencies: + '@types/node': 24.3.1 '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 24.10.1 + '@types/node': 24.3.1 '@types/braces@3.0.5': {} '@types/cacache@19.0.0': dependencies: - '@types/node': 24.9.2 + '@types/node': 24.3.1 '@types/chai@5.2.3': dependencies: @@ -6854,11 +8018,11 @@ snapshots: '@types/connect@3.4.36': dependencies: - '@types/node': 24.10.1 + '@types/node': 24.3.1 '@types/connect@3.4.38': dependencies: - '@types/node': 24.10.1 + '@types/node': 24.3.1 '@types/content-disposition@0.5.9': {} @@ -6867,7 +8031,12 @@ snapshots: '@types/connect': 3.4.38 '@types/express': 5.0.5 '@types/keygrip': 1.0.6 - '@types/node': 24.10.1 + '@types/node': 24.3.1 + + '@types/debug@4.1.12': + dependencies: + '@types/ms': 2.1.0 + optional: true '@types/deep-eql@4.0.2': {} @@ -6875,7 +8044,7 @@ snapshots: '@types/express-serve-static-core@5.1.0': dependencies: - '@types/node': 24.10.1 + '@types/node': 24.3.1 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -6888,17 +8057,9 @@ snapshots: '@types/http-assert@1.5.6': {} - '@types/http-errors@2.0.5': {} + '@types/http-cache-semantics@4.0.4': {} - '@types/ink@2.0.3(@types/react@19.2.2)(react@19.2.0)': - dependencies: - ink: 6.3.1(patch_hash=03cccf82711216d0fa8283ea4716ed803a132ae8c31293f0f5a6677e2bdb4a64)(@types/react@19.2.2)(react@19.2.0) - transitivePeerDependencies: - - '@types/react' - - bufferutil - - react - - react-devtools-core - - utf-8-validate + '@types/http-errors@2.0.5': {} '@types/js-yaml@4.0.9': {} @@ -6919,7 +8080,7 @@ snapshots: '@types/http-errors': 2.0.5 '@types/keygrip': 1.0.6 '@types/koa-compose': 3.2.9 - '@types/node': 24.10.1 + '@types/node': 24.3.1 '@types/koa__router@12.0.3': dependencies: @@ -6931,28 +8092,25 @@ snapshots: '@types/mime@1.3.5': {} - '@types/minimist@1.2.5': {} - '@types/mock-fs@4.13.4': dependencies: - '@types/node': 24.9.2 + '@types/node': 24.3.1 + + '@types/ms@2.1.0': + optional: true '@types/mysql@2.15.22': dependencies: - '@types/node': 24.10.1 + '@types/node': 24.3.1 '@types/node-fetch@2.6.13': dependencies: - '@types/node': 24.9.2 + '@types/node': 24.3.1 form-data: 4.0.4 - '@types/node@24.10.1': - dependencies: - undici-types: 7.16.0 - - '@types/node@24.9.2': + '@types/node@24.3.1': dependencies: - undici-types: 7.16.0 + undici-types: 7.10.0 '@types/normalize-package-data@2.4.4': {} @@ -6960,7 +8118,7 @@ snapshots: '@types/npm-registry-fetch@8.0.9': dependencies: - '@types/node': 24.9.2 + '@types/node': 24.3.1 '@types/node-fetch': 2.6.13 '@types/npm-package-arg': 6.1.4 '@types/npmlog': 7.0.0 @@ -6970,24 +8128,24 @@ snapshots: dependencies: '@npm/types': 1.0.2 '@types/cacache': 19.0.0 - '@types/node': 24.9.2 + '@types/node': 24.3.1 '@types/npmcli__package-json': 4.0.4 '@types/pacote': 11.1.8 '@types/npmcli__config@6.0.3': dependencies: - '@types/node': 24.9.2 + '@types/node': 24.3.1 '@types/semver': 7.7.1 '@types/npmcli__package-json@4.0.4': {} '@types/npmlog@7.0.0': dependencies: - '@types/node': 24.9.2 + '@types/node': 24.3.1 '@types/pacote@11.1.8': dependencies: - '@types/node': 24.9.2 + '@types/node': 24.3.1 '@types/npm-registry-fetch': 8.0.9 '@types/npmlog': 7.0.0 '@types/ssri': 7.1.5 @@ -6998,7 +8156,7 @@ snapshots: '@types/pg@8.6.1': dependencies: - '@types/node': 24.10.1 + '@types/node': 24.3.1 pg-protocol: 1.10.3 pg-types: 2.2.0 @@ -7012,41 +8170,46 @@ snapshots: dependencies: csstype: 3.1.3 + '@types/resolve@1.20.2': {} + '@types/semver@7.7.1': {} '@types/send@0.17.6': dependencies: '@types/mime': 1.3.5 - '@types/node': 24.10.1 + '@types/node': 24.3.1 '@types/send@1.2.1': dependencies: - '@types/node': 24.10.1 + '@types/node': 24.3.1 '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 24.10.1 + '@types/node': 24.3.1 '@types/send': 0.17.6 '@types/shimmer@1.2.0': {} '@types/ssri@7.1.5': dependencies: - '@types/node': 24.9.2 + '@types/node': 24.3.1 + + '@types/validator@13.15.10': + optional: true '@types/which@3.0.4': {} '@types/yargs-parser@21.0.3': {} - '@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.44.1 - '@typescript-eslint/type-utils': 8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.44.1 + '@typescript-eslint/parser': 8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.43.0 + '@typescript-eslint/type-utils': 8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.43.0 eslint: 9.35.0(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 @@ -7056,41 +8219,61 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.44.1 - '@typescript-eslint/types': 8.44.1 - '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.44.1 + '@typescript-eslint/scope-manager': 8.43.0 + '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.43.0 debug: 4.4.3 eslint: 9.35.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color + '@typescript-eslint/project-service@8.43.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.44.1(typescript@5.9.3) + '@typescript-eslint/types': 8.46.4 + debug: 4.4.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/project-service@8.44.1(typescript@5.9.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.44.1(typescript@5.9.3) - '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/types': 8.46.4 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color + optional: true + + '@typescript-eslint/scope-manager@8.43.0': + dependencies: + '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/visitor-keys': 8.43.0 '@typescript-eslint/scope-manager@8.44.1': dependencies: '@typescript-eslint/types': 8.44.1 '@typescript-eslint/visitor-keys': 8.44.1 + optional: true + + '@typescript-eslint/tsconfig-utils@8.43.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 '@typescript-eslint/tsconfig-utils@8.44.1(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.44.1 - '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3 eslint: 9.35.0(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.9.3) @@ -7098,10 +8281,29 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.44.1': {} + '@typescript-eslint/types@8.43.0': {} + + '@typescript-eslint/types@8.44.1': + optional: true '@typescript-eslint/types@8.46.4': {} + '@typescript-eslint/typescript-estree@8.43.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.43.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.3) + '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/visitor-keys': 8.43.0 + debug: 4.4.3 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/typescript-estree@8.44.1(typescript@5.9.3)': dependencies: '@typescript-eslint/project-service': 8.44.1(typescript@5.9.3) @@ -7117,6 +8319,18 @@ snapshots: typescript: 5.9.3 transitivePeerDependencies: - supports-color + optional: true + + '@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.43.0 + '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.3) + eslint: 9.35.0(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color '@typescript-eslint/utils@8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: @@ -7128,11 +8342,49 @@ snapshots: typescript: 5.9.3 transitivePeerDependencies: - supports-color + optional: true + + '@typescript-eslint/visitor-keys@8.43.0': + dependencies: + '@typescript-eslint/types': 8.43.0 + eslint-visitor-keys: 4.2.1 '@typescript-eslint/visitor-keys@8.44.1': dependencies: '@typescript-eslint/types': 8.44.1 eslint-visitor-keys: 4.2.1 + optional: true + + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20250912.1': + optional: true + + '@typescript/native-preview-darwin-x64@7.0.0-dev.20250912.1': + optional: true + + '@typescript/native-preview-linux-arm64@7.0.0-dev.20250912.1': + optional: true + + '@typescript/native-preview-linux-arm@7.0.0-dev.20250912.1': + optional: true + + '@typescript/native-preview-linux-x64@7.0.0-dev.20250912.1': + optional: true + + '@typescript/native-preview-win32-arm64@7.0.0-dev.20250912.1': + optional: true + + '@typescript/native-preview-win32-x64@7.0.0-dev.20250912.1': + optional: true + + '@typescript/native-preview@7.0.0-dev.20250912.1': + optionalDependencies: + '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20250912.1 + '@typescript/native-preview-darwin-x64': 7.0.0-dev.20250912.1 + '@typescript/native-preview-linux-arm': 7.0.0-dev.20250912.1 + '@typescript/native-preview-linux-arm64': 7.0.0-dev.20250912.1 + '@typescript/native-preview-linux-x64': 7.0.0-dev.20250912.1 + '@typescript/native-preview-win32-arm64': 7.0.0-dev.20250912.1 + '@typescript/native-preview-win32-x64': 7.0.0-dev.20250912.1 '@unrs/resolver-binding-android-arm-eabi@1.11.1': optional: true @@ -7193,101 +8445,66 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vitest/coverage-v8@4.0.3(vitest@4.0.3(@types/node@24.9.2)(jiti@2.6.1)(yaml@2.8.1))': + '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1))': dependencies: + '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.0.3 ast-v8-to-istanbul: 0.3.8 debug: 4.4.3 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.2.0 + magic-string: 0.30.19 magicast: 0.3.5 std-env: 3.10.0 - tinyrainbow: 3.0.3 - vitest: 4.0.3(@types/node@24.9.2)(jiti@2.6.1)(yaml@2.8.1) + test-exclude: 7.0.1 + tinyrainbow: 2.0.0 + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@vitest/expect@4.0.3': + '@vitest/expect@3.2.4': dependencies: - '@standard-schema/spec': 1.0.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.0.3 - '@vitest/utils': 4.0.3 - chai: 6.2.1 - tinyrainbow: 3.0.3 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 + tinyrainbow: 2.0.0 - '@vitest/mocker@4.0.3(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(yaml@2.8.1))': + '@vitest/mocker@3.2.4(vite@7.1.5(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1))': dependencies: - '@vitest/spy': 4.0.3 + '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.19 optionalDependencies: - vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(yaml@2.8.1) + vite: 7.1.5(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1) - '@vitest/pretty-format@4.0.3': + '@vitest/pretty-format@3.2.4': dependencies: - tinyrainbow: 3.0.3 + tinyrainbow: 2.0.0 - '@vitest/runner@4.0.3': + '@vitest/runner@3.2.4': dependencies: - '@vitest/utils': 4.0.3 + '@vitest/utils': 3.2.4 pathe: 2.0.3 + strip-literal: 3.1.0 - '@vitest/snapshot@4.0.3': + '@vitest/snapshot@3.2.4': dependencies: - '@vitest/pretty-format': 4.0.3 + '@vitest/pretty-format': 3.2.4 magic-string: 0.30.19 pathe: 2.0.3 - '@vitest/spy@4.0.3': {} - - '@vitest/utils@4.0.3': - dependencies: - '@vitest/pretty-format': 4.0.3 - tinyrainbow: 3.0.3 - - '@yao-pkg/pkg-fetch@3.5.28(encoding@0.1.13)': + '@vitest/spy@3.2.4': dependencies: - https-proxy-agent: 7.0.6 - node-fetch: 2.7.0(encoding@0.1.13) - picocolors: 1.1.1 - progress: 2.0.3 - semver: 7.7.2 - tar-fs: 3.1.1 - yargs: 16.2.0 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - encoding - - react-native-b4a - - supports-color + tinyspy: 4.0.4 - '@yao-pkg/pkg@6.8.0(encoding@0.1.13)': + '@vitest/utils@3.2.4': dependencies: - '@babel/generator': 7.28.5 - '@babel/parser': 7.28.4 - '@babel/types': 7.28.5 - '@yao-pkg/pkg-fetch': 3.5.28(encoding@0.1.13) - into-stream: 6.0.0 - minimist: 1.2.8 - multistream: 4.1.0 - picocolors: 1.1.1 - picomatch: 4.0.3 - prebuild-install: 7.1.3 - resolve: 1.22.11 - stream-meter: 1.0.4 - tar: 7.5.2 - tinyglobby: 0.2.15 - unzipper: 0.12.3 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - encoding - - react-native-b4a - - supports-color + '@vitest/pretty-format': 3.2.4 + loupe: 3.2.1 + tinyrainbow: 2.0.0 '@yarnpkg/lockfile@1.1.0': {} @@ -7305,6 +8522,8 @@ snapshots: dependencies: isexe: 2.0.0 + abbrev@1.1.1: {} + abbrev@3.0.1: {} abbrev@4.0.0: {} @@ -7327,6 +8546,10 @@ snapshots: ajv-dist@8.17.1: {} + ajv-formats@3.0.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -7345,11 +8568,15 @@ snapshots: dependencies: type-fest: 0.21.3 + ansi-escapes@6.2.1: {} + ansi-escapes@7.2.0: dependencies: environment: 1.1.0 - ansi-regex@6.2.2: {} + ansi-regex@6.1.0: {} + + ansi-styles@2.2.1: {} ansi-styles@3.2.1: dependencies: @@ -7361,12 +8588,16 @@ snapshots: ansi-styles@6.2.3: {} + ansi-term@0.0.2(patch_hash=06bb5127b7689d6ab2ea833f9617b2c3fbe9fe0048ce1c6b59b81f7e25ccbccb): + dependencies: + x256: 0.0.2 + + ansicolors@0.3.2: {} + ansis@4.2.0: {} argparse@2.0.1: {} - arrify@1.0.1: {} - assertion-error@2.0.1: {} ast-v8-to-istanbul@0.3.8: @@ -7375,6 +8606,8 @@ snapshots: estree-walker: 3.0.3 js-tokens: 9.0.1 + astral-regex@2.0.0: {} + asynckit@0.4.0: {} auto-bind@5.0.1: {} @@ -7403,48 +8636,14 @@ snapshots: '@babel/core': 7.28.4 '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) transitivePeerDependencies: - - supports-color - - balanced-match@1.0.2: {} - - bare-events@2.8.2: {} - - bare-fs@4.5.1: - dependencies: - bare-events: 2.8.2 - bare-path: 3.0.0 - bare-stream: 2.7.0(bare-events@2.8.2) - bare-url: 2.3.2 - fast-fifo: 1.3.2 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - optional: true - - bare-os@3.6.2: - optional: true - - bare-path@3.0.0: - dependencies: - bare-os: 3.6.2 - optional: true - - bare-stream@2.7.0(bare-events@2.8.2): - dependencies: - streamx: 2.23.0 - optionalDependencies: - bare-events: 2.8.2 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - optional: true + - supports-color - bare-url@2.3.2: - dependencies: - bare-path: 3.0.0 - optional: true + balanced-match@1.0.2: {} - base64-js@1.5.1: {} + bare-events@2.8.2: {} + + base64-js@1.5.1: + optional: true baseline-browser-mapping@2.8.28: {} @@ -7458,20 +8657,70 @@ snapshots: read-cmd-shim: 5.0.0 write-file-atomic: 6.0.0 + bin-links@6.0.0: + dependencies: + cmd-shim: 8.0.0 + npm-normalize-package-bin: 5.0.0 + proc-log: 6.0.0 + read-cmd-shim: 6.0.0 + write-file-atomic: 7.0.0 + + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + optional: true + bl@4.1.0: dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 + optional: true - bluebird@3.7.2: {} + blessed-contrib@4.11.0(patch_hash=2c9f0a87aa8ce9ed95ce201819ef3fcdb9a00f1cabe12815f586d2a3c0bff69e): + dependencies: + ansi-term: 0.0.2(patch_hash=06bb5127b7689d6ab2ea833f9617b2c3fbe9fe0048ce1c6b59b81f7e25ccbccb) + chalk: 1.1.3 + drawille-canvas-blessed-contrib: 0.1.3(patch_hash=baf1e92576f78c2c86283e7a3182ddd59d52cd7e86ad9fe21d1c4ccc2274bcf3) + lodash: 4.17.21(patch_hash=9c24de093a43581e08151be377de2e0518d256eca3c50f117c523e45ab6272b1) + map-canvas: 0.1.5 + marked: 4.3.0 + marked-terminal: 5.2.0(marked@4.3.0) + memory-streams: 0.1.3 + memorystream: 0.3.1 + picture-tuber: 1.0.2 + sparkline: 0.1.2 + strip-ansi: 3.0.1 + term-canvas: 0.0.5 + x256: 0.0.2 + + blessed@0.1.81(patch_hash=cae83aa371bddce36c7a03bac146da97b1da2ce16059ce29e25c3af0182331a3): {} + + body-parser@2.2.0: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 4.4.3 + http-errors: 2.0.1 + iconv-lite: 0.6.3 + on-finished: 2.4.1 + qs: 6.14.0 + raw-body: 3.0.2 + type-is: 2.0.1 + transitivePeerDependencies: + - supports-color + optional: true bole@5.0.22: dependencies: fast-safe-stringify: 2.1.1 individual: 3.0.0 - brace-expansion@2.0.2: + boolbase@1.0.0: {} + + boolean@3.2.0: {} + + brace-expansion@2.0.2(patch_hash=eac47f4a81cd7be766bd391c6bf91ac462816eb2f3c5f99270419ac752d6f02d): dependencies: balanced-match: 1.0.2 @@ -7479,6 +8728,8 @@ snapshots: dependencies: fill-range: 7.1.1 + bresenham@0.0.3(patch_hash=cc5bda185ad608af96d1018f588dae1b7e8390459011701bffa97ae0f12537a6): {} + browserslist@4.25.4: dependencies: caniuse-lite: 1.0.30001754 @@ -7494,10 +8745,15 @@ snapshots: node-releases: 2.0.27 update-browserslist-db: 1.1.4(browserslist@4.28.0) + buffer-equal-constant-time@1.0.1: {} + buffer@5.7.1: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 + optional: true + + buffers@0.1.1: {} builtin-modules@3.3.0: {} @@ -7505,6 +8761,9 @@ snapshots: dependencies: run-applescript: 7.1.0 + bytes@3.1.2: + optional: true + cac@6.7.14: {} cacache@19.0.1: @@ -7536,25 +8795,47 @@ snapshots: ssri: 12.0.0 unique-filename: 4.0.0 - callsites@3.1.0: {} + cacheable-lookup@7.0.0: {} - camelcase-keys@7.0.2: + cacheable-request@13.0.15: dependencies: - camelcase: 6.3.0 - map-obj: 4.3.0 - quick-lru: 5.1.1 - type-fest: 1.4.0 + '@types/http-cache-semantics': 4.0.4 + get-stream: 9.0.1 + http-cache-semantics: 4.2.0 + keyv: 5.5.4 + mimic-response: 4.0.0 + normalize-url: 8.1.0 + responselike: 4.0.2 - camelcase@6.3.0: {} + callsites@3.1.0: {} caniuse-lite@1.0.30001754: {} - chai@6.2.1: {} + cardinal@2.1.1: + dependencies: + ansicolors: 0.3.2 + redeyed: 2.1.1 + + chai@5.3.3: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.2.1 + pathval: 2.0.1 chalk-table@1.0.2: dependencies: chalk: 2.4.2 - strip-ansi: 7.1.2 + strip-ansi: 5.2.0 + + chalk@1.1.3: + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 chalk@2.4.2: dependencies: @@ -7569,7 +8850,35 @@ snapshots: chalk@5.6.2: {} - chownr@1.1.4: {} + charm@0.1.2: {} + + check-error@2.1.1: {} + + cheerio-select@2.1.0: + dependencies: + boolbase: 1.0.0 + css-select: 5.2.2 + css-what: 6.2.2 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + + cheerio@1.1.2: + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.2.2 + encoding-sniffer: 0.2.1 + htmlparser2: 10.0.0 + parse5: 7.3.0 + parse5-htmlparser2-tree-adapter: 7.1.0 + parse5-parser-stream: 7.1.2 + undici: 6.21.3 + whatwg-mimetype: 4.0.0 + + chownr@1.1.4: + optional: true chownr@3.0.0: {} @@ -7591,24 +8900,32 @@ snapshots: dependencies: restore-cursor: 5.1.0 + cli-table3@0.6.5: + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + cli-truncate@4.0.0: dependencies: slice-ansi: 5.0.0 - string-width: 8.1.0 + string-width: 7.2.0 cli-truncate@5.1.1: dependencies: slice-ansi: 7.1.2 string-width: 8.1.0 - cliui@7.0.4: + cliui@8.0.1: dependencies: - string-width: 8.1.0 - strip-ansi: 7.1.2 - wrap-ansi: 9.0.2 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 cmd-shim@7.0.0: {} + cmd-shim@8.0.0: {} + code-excerpt@4.0.0: dependencies: convert-to-spaces: 2.0.1 @@ -7647,6 +8964,26 @@ snapshots: common-ancestor-path@1.0.1: {} + commondir@1.0.1: {} + + compressible@2.0.18: + dependencies: + mime-db: 1.52.0 + optional: true + + compression@1.8.1: + dependencies: + bytes: 3.1.2 + compressible: 2.0.18 + debug: 2.6.9 + negotiator: 0.6.4 + on-headers: 1.1.0 + safe-buffer: '@socketregistry/safe-buffer@1.0.9' + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + optional: true + compromise@14.14.4: dependencies: efrt: 2.7.0 @@ -7662,6 +8999,19 @@ snapshots: ini: 1.3.8 proto-list: 1.2.4 + connect@3.7.0: + dependencies: + debug: 2.6.9 + finalhandler: 1.1.2 + parseurl: 1.3.3 + utils-merge: 1.0.1 + transitivePeerDependencies: + - supports-color + optional: true + + content-type@1.0.5: + optional: true + convert-source-map@2.0.0: {} convert-to-spaces@2.0.1: {} @@ -7678,31 +9028,47 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + css-select@5.2.2: + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-what@6.2.2: {} + cssesc@3.0.0: {} csstype@3.1.3: {} + debug@2.6.9: + dependencies: + ms: 2.0.0 + optional: true + debug@4.4.3: dependencies: ms: 2.1.3 - decamelize-keys@1.1.1: + decompress-response@10.0.0: dependencies: - decamelize: 1.2.0 - map-obj: 1.0.1 - - decamelize@1.2.0: {} - - decamelize@5.0.1: {} + mimic-response: 4.0.0 decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 + optional: true + + deep-eql@5.0.2: {} - deep-extend@0.6.0: {} + deep-extend@0.6.0: + optional: true deep-is@0.1.4: {} + deepmerge@4.3.1: {} + default-browser-id@5.0.0: {} default-browser@5.3.0: @@ -7710,6 +9076,8 @@ snapshots: bundle-name: 4.1.0 default-browser-id: 5.0.0 + defer-to-connect@2.0.1: {} + define-lazy-prop@3.0.0: {} defu@6.1.4: {} @@ -7731,20 +9099,59 @@ snapshots: delayed-stream@1.0.0: {} + depd@2.0.0: + optional: true + destr@2.0.5: {} - detect-libc@2.1.2: {} + detect-libc@2.1.2: + optional: true + + detect-node@2.1.0: {} dev-null-cli@2.0.0: dependencies: - meow: 10.1.5 + meow: 13.2.0 noop-stream: 1.0.0 + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + dotenv@17.2.3: {} - duplexer2@0.1.4: + dottie@2.0.6: + optional: true + + drawille-blessed-contrib@1.0.0(patch_hash=bc7802f29a5252694b94e911ea0fef9939529d6bd866c9e189539ae23f54187c): {} + + drawille-canvas-blessed-contrib@0.1.3(patch_hash=baf1e92576f78c2c86283e7a3182ddd59d52cd7e86ad9fe21d1c4ccc2274bcf3): dependencies: - readable-stream: 2.3.8 + ansi-term: 0.0.2(patch_hash=06bb5127b7689d6ab2ea833f9617b2c3fbe9fe0048ce1c6b59b81f7e25ccbccb) + bresenham: 0.0.3(patch_hash=cc5bda185ad608af96d1018f588dae1b7e8390459011701bffa97ae0f12537a6) + drawille-blessed-contrib: 1.0.0(patch_hash=bc7802f29a5252694b94e911ea0fef9939529d6bd866c9e189539ae23f54187c) + gl-matrix: 2.8.1 + x256: 0.0.2 + + eastasianwidth@0.2.0: {} + + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: '@socketregistry/safe-buffer@1.0.9' eciesjs@0.4.16: dependencies: @@ -7753,16 +9160,32 @@ snapshots: '@noble/curves': 1.9.7 '@noble/hashes': 1.8.0 + edn-data@1.1.2: {} + + ee-first@1.1.1: + optional: true + efrt@2.7.0: {} electron-to-chromium@1.5.251: {} emoji-regex@10.6.0: {} + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + encodeurl@1.0.2: + optional: true + + encoding-sniffer@0.2.1: + dependencies: + iconv-lite: 0.6.3 + whatwg-encoding: 3.1.1 + encoding@0.1.13: dependencies: iconv-lite: 0.6.3 - optional: true end-of-stream@1.4.5: dependencies: @@ -7770,9 +9193,13 @@ snapshots: enhanced-resolve@5.18.3: dependencies: - graceful-fs: 4.2.11 + graceful-fs: 4.2.11(patch_hash=17007d43dcc01ee2047730ab13eb23c41adc01ae0f24ee872b1fe69142db5200) tapable: 2.3.0 + entities@4.5.0: {} + + entities@6.0.1: {} + env-paths@2.2.1: {} environment@1.1.0: {} @@ -7789,6 +9216,8 @@ snapshots: es-toolkit@1.41.0: {} + es6-error@4.1.1: {} + esbuild@0.25.11: optionalDependencies: '@esbuild/aix-ppc64': 0.25.11 @@ -7820,6 +9249,9 @@ snapshots: escalade@3.2.0: {} + escape-html@1.0.3: + optional: true + escape-string-regexp@1.0.5: {} escape-string-regexp@2.0.0: {} @@ -7907,7 +9339,7 @@ snapshots: eslint: 9.35.0(jiti@2.6.1) esquery: 1.6.0 globals: 15.15.0 - indent-string: '@socketregistry/indent-string@1.0.14' + indent-string: '@socketregistry/indent-string@1.0.13' is-builtin-module: 3.2.1 jsesc: 3.1.0 pluralize: 8.0.0 @@ -7974,6 +9406,8 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 4.2.1 + esprima@4.0.1: {} + esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -7984,12 +9418,18 @@ snapshots: estraverse@5.3.0: {} + estree-walker@2.0.2: {} + estree-walker@3.0.3: dependencies: '@types/estree': 1.0.8 esutils@2.0.3: {} + event-stream@0.9.8: + dependencies: + optimist: 0.2.8 + eventemitter3@5.0.1: {} events-universal@1.0.1: @@ -8022,7 +9462,8 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 - expand-template@2.0.3: {} + expand-template@2.0.3: + optional: true expect-type@1.2.2: {} @@ -8054,6 +9495,10 @@ snapshots: dependencies: reusify: 1.1.0 + fd-package-json@2.0.0: + dependencies: + walk-up-path: 4.0.0 + fdir@6.5.0(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 @@ -8062,10 +9507,26 @@ snapshots: dependencies: flat-cache: 4.0.1 + file-uri-to-path@1.0.0: + optional: true + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 + finalhandler@1.1.2: + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.3.0 + parseurl: 1.3.3 + statuses: 1.5.0 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + optional: true + find-up-simple@1.0.1: {} find-up@4.1.0: @@ -8092,6 +9553,8 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 + form-data-encoder@4.1.0: {} + form-data@4.0.4: dependencies: asynckit: 0.4.0 @@ -8100,18 +9563,12 @@ snapshots: hasown: '@socketregistry/hasown@1.0.7' mime-types: 2.1.35 - from2@2.3.0: + formatly@0.3.0: dependencies: - inherits: 2.0.4 - readable-stream: 2.3.8 + fd-package-json: 2.0.0 - fs-constants@1.0.0: {} - - fs-extra@11.3.2: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.0 - universalify: 2.0.1 + fs-constants@1.0.0: + optional: true fs-minipass@3.0.3: dependencies: @@ -8136,11 +9593,19 @@ snapshots: get-stream@6.0.1: {} + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + get-tsconfig@4.13.0: dependencies: resolve-pkg-maps: 1.0.0 - github-from-package@0.0.0: {} + github-from-package@0.0.0: + optional: true + + gl-matrix@2.8.1: {} glob-parent@5.1.2: dependencies: @@ -8168,6 +9633,15 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 2.0.1 + global-agent@3.0.0: + dependencies: + boolean: 3.2.0 + es6-error: 4.1.1 + matcher: 3.0.0 + roarr: 2.15.4 + semver: 7.7.2 + serialize-error: 7.0.1 + globals@14.0.0: {} globals@15.15.0: {} @@ -8185,7 +9659,22 @@ snapshots: globrex@0.1.2: {} - graceful-fs@4.2.11: {} + got@14.6.0: + dependencies: + '@sindresorhus/is': 7.1.1 + '@szmarczak/http-timer': 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 13.0.15 + decompress-response: 10.0.0 + form-data-encoder: 4.1.0 + http2-wrapper: 2.2.1 + keyv: 5.5.4 + lowercase-keys: 3.0.0 + p-cancelable: 4.0.1 + responselike: 4.0.2 + type-fest: 4.41.0 + + graceful-fs@4.2.11(patch_hash=17007d43dcc01ee2047730ab13eb23c41adc01ae0f24ee872b1fe69142db5200): {} grad-school@0.0.5: {} @@ -8193,17 +9682,17 @@ snapshots: guid-typescript@1.0.9: {} - hard-rejection@2.1.0: {} + has-ansi@2.0.0: + dependencies: + ansi-regex: 6.1.0 has-flag@3.0.0: {} has-flag@4.0.0: {} - hosted-git-info@2.8.9: {} + here@0.0.2: {} - hosted-git-info@4.1.0: - dependencies: - lru-cache: 6.0.0 + hosted-git-info@2.8.9: {} hosted-git-info@8.1.0: dependencies: @@ -8217,8 +9706,24 @@ snapshots: html-escaper@2.0.2: {} + htmlparser2@10.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 6.0.1 + http-cache-semantics@4.2.0: {} + http-errors@2.0.1: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.2 + toidentifier: 1.0.1 + optional: true + http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.4 @@ -8226,6 +9731,11 @@ snapshots: transitivePeerDependencies: - supports-color + http2-wrapper@2.2.1: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.4 @@ -8240,9 +9750,13 @@ snapshots: iconv-lite@0.6.3: dependencies: safer-buffer: '@socketregistry/safer-buffer@1.0.10' - optional: true - ieee754@1.2.1: {} + iconv-lite@0.7.0: + dependencies: + safer-buffer: '@socketregistry/safer-buffer@1.0.10' + + ieee754@1.2.1: + optional: true ignore-walk@8.0.0: dependencies: @@ -8283,6 +9797,9 @@ snapshots: individual@3.0.0: {} + inflection@1.13.4: + optional: true + inherits@2.0.4: {} ini@1.3.8: {} @@ -8291,20 +9808,20 @@ snapshots: ini@6.0.0: {} - ink-table@3.1.0(ink@6.3.1(patch_hash=03cccf82711216d0fa8283ea4716ed803a132ae8c31293f0f5a6677e2bdb4a64)(@types/react@19.2.2)(react@19.2.0))(react@19.2.0): + ink-table@3.1.0(ink@6.3.1(@types/react@19.2.2)(react@19.2.0))(react@19.2.0): dependencies: - ink: 6.3.1(patch_hash=03cccf82711216d0fa8283ea4716ed803a132ae8c31293f0f5a6677e2bdb4a64)(@types/react@19.2.2)(react@19.2.0) + ink: 6.3.1(@types/react@19.2.2)(react@19.2.0) object-hash: 2.2.0 react: 19.2.0 - ink-text-input@6.0.0(ink@6.3.1(patch_hash=03cccf82711216d0fa8283ea4716ed803a132ae8c31293f0f5a6677e2bdb4a64)(@types/react@19.2.2)(react@19.2.0))(react@19.2.0): + ink-text-input@6.0.0(ink@6.3.1(@types/react@19.2.2)(react@19.2.0))(react@19.2.0): dependencies: chalk: 5.6.2 - ink: 6.3.1(patch_hash=03cccf82711216d0fa8283ea4716ed803a132ae8c31293f0f5a6677e2bdb4a64)(@types/react@19.2.2)(react@19.2.0) + ink: 6.3.1(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 type-fest: 4.41.0 - ink@6.3.1(patch_hash=03cccf82711216d0fa8283ea4716ed803a132ae8c31293f0f5a6677e2bdb4a64)(@types/react@19.2.2)(react@19.2.0): + ink@6.3.1(@types/react@19.2.2)(react@19.2.0): dependencies: '@alcalzone/ansi-tokenize': 0.2.2 ansi-escapes: 7.2.0 @@ -8316,7 +9833,7 @@ snapshots: cli-truncate: 4.0.0 code-excerpt: 4.0.0 es-toolkit: 1.41.0 - indent-string: '@socketregistry/indent-string@1.0.14' + indent-string: '@socketregistry/indent-string@1.0.13' is-in-ci: 2.0.0 patch-console: 2.0.0 react: 19.2.0 @@ -8324,7 +9841,7 @@ snapshots: signal-exit: 3.0.7 slice-ansi: 7.1.2 stack-utils: 2.0.6 - string-width: 8.1.0 + string-width: 7.2.0 type-fest: 4.41.0 widest-line: 5.0.0 wrap-ansi: 9.0.2 @@ -8336,10 +9853,7 @@ snapshots: - bufferutil - utf-8-validate - into-stream@6.0.0: - dependencies: - from2: 2.3.0 - p-is-promise: 3.0.0 + ionstore@1.0.1: {} ip-address@10.1.0: {} @@ -8375,6 +9889,8 @@ snapshots: dependencies: is-docker: 3.0.0 + is-module@1.0.0: {} + is-node-process@1.2.0: {} is-number@7.0.0: {} @@ -8383,12 +9899,16 @@ snapshots: is-path-inside@4.0.0: {} - is-plain-obj@1.1.0: {} - is-plain-obj@2.1.0: {} + is-reference@1.2.1: + dependencies: + '@types/estree': 1.0.8 + is-stream@2.0.1: {} + is-stream@4.0.1: {} + is-wsl@3.1.0: dependencies: is-inside-container: 1.0.0 @@ -8462,11 +9982,8 @@ snapshots: json5@2.2.3: {} - jsonfile@6.2.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 + jsonata@2.1.0: + optional: true jsonparse@1.3.1: {} @@ -8474,11 +9991,42 @@ snapshots: just-diff@6.0.2: {} + jwa@2.0.1: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: '@socketregistry/safe-buffer@1.0.9' + + jws@4.0.0: + dependencies: + jwa: 2.0.1 + safe-buffer: '@socketregistry/safe-buffer@1.0.9' + keyv@4.5.4: dependencies: json-buffer: 3.0.1 - kind-of@6.0.3: {} + keyv@5.5.4: + dependencies: + '@keyv/serialize': 1.1.1 + + knip@5.63.1(@types/node@24.3.1)(typescript@5.9.3): + dependencies: + '@nodelib/fs.walk': 1.2.8 + '@types/node': 24.3.1 + fast-glob: 3.3.3 + formatly: 0.3.0 + jiti: 2.6.1 + js-yaml: 4.1.1 + minimist: 1.2.8 + oxc-resolver: 11.13.2 + picocolors: 1.1.1 + picomatch: 4.0.3 + smol-toml: 1.5.2 + strip-json-comments: 5.0.2 + typescript: 5.9.3 + zod: 3.25.76 + zod-validation-error: 3.5.4(zod@3.25.76) levn@0.4.1: dependencies: @@ -8525,7 +10073,9 @@ snapshots: lodash.merge@4.6.2: {} - lodash@4.17.21: {} + lodash.truncate@4.4.2: {} + + lodash@4.17.21(patch_hash=9c24de093a43581e08151be377de2e0518d256eca3c50f117c523e45ab6272b1): {} log-update@6.1.0: dependencies: @@ -8537,6 +10087,10 @@ snapshots: long@5.3.2: {} + loupe@3.2.1: {} + + lowercase-keys@3.0.0: {} + lru-cache@10.4.3: {} lru-cache@11.2.2: {} @@ -8545,17 +10099,13 @@ snapshots: dependencies: yallist: 3.1.1 - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - magic-string@0.30.19: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 magicast@0.3.5: dependencies: - '@babel/parser': 7.28.4 + '@babel/parser': 7.28.5 '@babel/types': 7.28.5 source-map-js: 1.2.1 @@ -8595,26 +10145,35 @@ snapshots: transitivePeerDependencies: - supports-color - map-obj@1.0.1: {} + map-canvas@0.1.5: + dependencies: + drawille-canvas-blessed-contrib: 0.1.3(patch_hash=baf1e92576f78c2c86283e7a3182ddd59d52cd7e86ad9fe21d1c4ccc2274bcf3) + xml2js: 0.6.2 + + marked-terminal@5.2.0(marked@4.3.0): + dependencies: + ansi-escapes: 6.2.1 + cardinal: 2.1.1 + chalk: 5.6.2 + cli-table3: 0.6.5 + marked: 4.3.0 + node-emoji: 1.11.0 + supports-hyperlinks: 2.3.0 + + marked@4.3.0: {} - map-obj@4.3.0: {} + matcher@3.0.0: + dependencies: + escape-string-regexp: 4.0.0 - memorystream@0.3.1: {} + media-typer@1.1.0: + optional: true - meow@10.1.5: - dependencies: - '@types/minimist': 1.2.5 - camelcase-keys: 7.0.2 - decamelize: 5.0.1 - decamelize-keys: 1.1.1 - hard-rejection: 2.1.0 - minimist-options: 4.1.0 - normalize-package-data: 3.0.3 - read-pkg-up: 8.0.0 - redent: 4.0.0 - trim-newlines: 4.1.1 - type-fest: 1.4.0 - yargs-parser: 21.1.1 + memory-streams@0.1.3: + dependencies: + readable-stream: 1.0.34 + + memorystream@0.3.1: {} meow@13.2.0: {} @@ -8629,35 +10188,44 @@ snapshots: mime-db@1.52.0: {} + mime-db@1.54.0: + optional: true + mime-types@2.1.35: dependencies: mime-db: 1.52.0 + mime-types@3.0.2: + dependencies: + mime-db: 1.54.0 + optional: true + mimic-fn@2.1.0: {} mimic-function@5.0.1: {} - mimic-response@3.1.0: {} + mimic-response@3.1.0: + optional: true + + mimic-response@4.0.0: {} min-indent@1.0.1: {} + minimatch@10.0.3: + dependencies: + '@isaacs/brace-expansion': 5.0.0 + minimatch@10.1.1: dependencies: '@isaacs/brace-expansion': 5.0.0 minimatch@3.1.2: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 2.0.2(patch_hash=eac47f4a81cd7be766bd391c6bf91ac462816eb2f3c5f99270419ac752d6f02d) minimatch@9.0.5: dependencies: - brace-expansion: 2.0.2 - - minimist-options@4.1.0: - dependencies: - arrify: 1.0.1 - is-plain-obj: 1.1.0 - kind-of: 6.0.3 + brace-expansion: 2.0.2(patch_hash=eac47f4a81cd7be766bd391c6bf91ac462816eb2f3c5f99270419ac752d6f02d) minimist@1.2.8: {} @@ -8703,7 +10271,10 @@ snapshots: dependencies: minipass: 7.1.2 - mkdirp-classic@0.5.3: {} + mkdirp-classic@0.5.3: + optional: true + + mkdirp@1.0.4: {} mlly@1.8.0: dependencies: @@ -8714,7 +10285,15 @@ snapshots: mock-fs@5.5.0: {} - module-details-from-path@1.0.4: {} + module-details-from-path@1.0.4: {} + + moment-timezone@0.5.48: + dependencies: + moment: 2.30.1 + optional: true + + moment@2.30.1: + optional: true mount-point@3.0.0: dependencies: @@ -8726,12 +10305,10 @@ snapshots: dependencies: path-exists: 5.0.0 - ms@2.1.3: {} + ms@2.0.0: + optional: true - multistream@4.1.0: - dependencies: - once: 1.4.0 - readable-stream: 3.6.2 + ms@2.1.3: {} nano-spawn@1.0.3: {} @@ -8739,7 +10316,8 @@ snapshots: nanotar@0.2.0: {} - napi-build-utils@2.0.0: {} + napi-build-utils@2.0.0: + optional: true napi-postinstall@0.3.4: {} @@ -8755,6 +10333,9 @@ snapshots: split2: 3.2.2 through2: 4.0.2 + negotiator@0.6.4: + optional: true + negotiator@1.0.0: {} nmtree@1.0.6: @@ -8770,20 +10351,22 @@ snapshots: node-abi@3.85.0: dependencies: semver: 7.7.2 + optional: true - node-fetch-native@1.6.7: {} + node-addon-api@8.5.0: + optional: true - node-fetch@2.7.0(encoding@0.1.13): + node-emoji@1.11.0: dependencies: - whatwg-url: 5.0.0 - optionalDependencies: - encoding: 0.1.13 + lodash: 4.17.21(patch_hash=9c24de093a43581e08151be377de2e0518d256eca3c50f117c523e45ab6272b1) + + node-fetch-native@1.6.7: {} - node-gyp@11.5.0(patch_hash=140ba43d43d74f7d3577feb3f8a6efad544dbb0059784102b144a0e2daa437f9): + node-gyp@11.5.0: dependencies: env-paths: 2.2.1 exponential-backoff: 3.1.3 - graceful-fs: 4.2.11 + graceful-fs: 4.2.11(patch_hash=17007d43dcc01ee2047730ab13eb23c41adc01ae0f24ee872b1fe69142db5200) make-fetch-happen: 14.0.3 nopt: 8.1.0 proc-log: 5.0.0 @@ -8794,11 +10377,11 @@ snapshots: transitivePeerDependencies: - supports-color - node-gyp@12.1.0(patch_hash=140ba43d43d74f7d3577feb3f8a6efad544dbb0059784102b144a0e2daa437f9): + node-gyp@12.1.0: dependencies: env-paths: 2.2.1 exponential-backoff: 3.1.3 - graceful-fs: 4.2.11 + graceful-fs: 4.2.11(patch_hash=17007d43dcc01ee2047730ab13eb23c41adc01ae0f24ee872b1fe69142db5200) make-fetch-happen: 15.0.3 nopt: 9.0.0 proc-log: 6.0.0 @@ -8809,12 +10392,16 @@ snapshots: transitivePeerDependencies: - supports-color - node-int64@0.4.0: {} - node-releases@2.0.27: {} + node-stream-zip@1.15.0: {} + noop-stream@1.0.0: {} + nopt@2.1.2: + dependencies: + abbrev: 1.1.1 + nopt@8.1.0: dependencies: abbrev: 3.0.1 @@ -8830,15 +10417,10 @@ snapshots: semver: 7.7.2 validate-npm-package-license: 3.0.4 - normalize-package-data@3.0.3: - dependencies: - hosted-git-info: 4.1.0 - is-core-module: '@socketregistry/is-core-module@1.0.11' - semver: 7.7.2 - validate-npm-package-license: 3.0.4 - normalize-path@3.0.0: {} + normalize-url@8.1.0: {} + npm-bundled@4.0.0: dependencies: npm-normalize-package-bin: 4.0.0 @@ -8930,6 +10512,10 @@ snapshots: dependencies: path-key: 3.1.1 + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + object-hash@2.2.0: {} object-treeify@1.1.33: {} @@ -8940,6 +10526,19 @@ snapshots: node-fetch-native: 1.6.7 ufo: 1.6.1 + on-finished@2.3.0: + dependencies: + ee-first: 1.1.1 + optional: true + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + optional: true + + on-headers@1.1.0: + optional: true + once@1.4.0: dependencies: wrappy: 1.0.2 @@ -8979,6 +10578,14 @@ snapshots: - supports-color optional: true + optimist@0.2.8: + dependencies: + wordwrap: 0.0.3 + + optimist@0.3.7: + dependencies: + wordwrap: 0.0.3 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -8992,9 +10599,42 @@ snapshots: outvariant@1.4.3: {} - p-finally@2.0.1: {} + oxc-resolver@11.13.2: + optionalDependencies: + '@oxc-resolver/binding-android-arm-eabi': 11.13.2 + '@oxc-resolver/binding-android-arm64': 11.13.2 + '@oxc-resolver/binding-darwin-arm64': 11.13.2 + '@oxc-resolver/binding-darwin-x64': 11.13.2 + '@oxc-resolver/binding-freebsd-x64': 11.13.2 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.13.2 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.13.2 + '@oxc-resolver/binding-linux-arm64-gnu': 11.13.2 + '@oxc-resolver/binding-linux-arm64-musl': 11.13.2 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.13.2 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.13.2 + '@oxc-resolver/binding-linux-riscv64-musl': 11.13.2 + '@oxc-resolver/binding-linux-s390x-gnu': 11.13.2 + '@oxc-resolver/binding-linux-x64-gnu': 11.13.2 + '@oxc-resolver/binding-linux-x64-musl': 11.13.2 + '@oxc-resolver/binding-wasm32-wasi': 11.13.2 + '@oxc-resolver/binding-win32-arm64-msvc': 11.13.2 + '@oxc-resolver/binding-win32-ia32-msvc': 11.13.2 + '@oxc-resolver/binding-win32-x64-msvc': 11.13.2 + + oxlint@1.15.0: + optionalDependencies: + '@oxlint/darwin-arm64': 1.15.0 + '@oxlint/darwin-x64': 1.15.0 + '@oxlint/linux-arm64-gnu': 1.15.0 + '@oxlint/linux-arm64-musl': 1.15.0 + '@oxlint/linux-x64-gnu': 1.15.0 + '@oxlint/linux-x64-musl': 1.15.0 + '@oxlint/win32-arm64': 1.15.0 + '@oxlint/win32-x64': 1.15.0 - p-is-promise@3.0.0: {} + p-cancelable@4.0.1: {} + + p-finally@2.0.1: {} p-limit@2.3.0: dependencies: @@ -9026,7 +10666,7 @@ snapshots: '@npmcli/installed-package-contents': 4.0.0 '@npmcli/package-json': 7.0.2 '@npmcli/promise-spawn': 9.0.1 - '@npmcli/run-script': 10.0.3(patch_hash=b1f74f31293142449c0be473fae0f0b977e1e1174e6a88e2021fcb93dc902ed6) + '@npmcli/run-script': 10.0.3 cacache: 20.0.1 fs-minipass: 3.0.3 minipass: 7.1.2 @@ -9052,6 +10692,12 @@ snapshots: just-diff: 6.0.2 just-diff-apply: 5.5.0 + parse-conflict-json@5.0.1: + dependencies: + json-parse-even-better-errors: 5.0.0 + just-diff: 6.0.2 + just-diff-apply: 5.5.0 + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.27.1 @@ -9059,6 +10705,22 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + parse5-htmlparser2-tree-adapter@7.1.0: + dependencies: + domhandler: 5.0.3 + parse5: 7.3.0 + + parse5-parser-stream@7.1.2: + dependencies: + parse5: 7.3.0 + + parse5@7.3.0: + dependencies: + entities: 6.0.1 + + parseurl@1.3.3: + optional: true + patch-console@2.0.0: {} path-exists@4.0.0: {} @@ -9083,6 +10745,11 @@ snapshots: pathe@2.0.3: {} + pathval@2.0.1: {} + + pg-connection-string@2.9.1: + optional: true + pg-int8@1.0.1: {} pg-protocol@1.10.3: {} @@ -9103,6 +10770,15 @@ snapshots: picomatch@4.0.3: {} + picture-tuber@1.0.2: + dependencies: + buffers: 0.1.1 + charm: 0.1.2 + event-stream: 0.9.8 + optimist: 0.3.7 + png-js: 0.1.1 + x256: 0.0.2 + pidtree@0.6.0: {} pify@2.3.0: {} @@ -9123,6 +10799,8 @@ snapshots: pluralize@8.0.0: {} + png-js@0.1.1: {} + pnpm-workspace-yaml@1.3.0: dependencies: yaml: 2.8.1 @@ -9168,20 +10846,21 @@ snapshots: simple-get: 4.0.1 tar-fs: 2.1.4 tunnel-agent: 0.6.0 + optional: true prelude-ls@1.2.1: {} presentable-error@0.0.1: {} + prettify-xml@1.2.0: {} + proc-log@5.0.0: {} proc-log@6.0.0: {} - process-nextick-args@2.0.1: {} - proggy@3.0.0: {} - progress@2.0.3: {} + proggy@4.0.0: {} promise-all-reject-late@1.0.1: {} @@ -9194,6 +10873,10 @@ snapshots: propagate@2.0.1: {} + properties-reader@2.3.0: + dependencies: + mkdirp: 1.0.4 + proto-list@1.2.4: {} protobufjs@7.5.4: @@ -9208,7 +10891,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 24.10.1 + '@types/node': 24.3.1 long: 5.3.2 pump@3.0.3: @@ -9230,12 +10913,21 @@ snapshots: rate-limiter-flexible@8.2.0: {} + raw-body@3.0.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.1 + iconv-lite: 0.7.0 + unpipe: 1.0.0 + optional: true + rc@1.2.8: dependencies: deep-extend: 0.6.0 ini: 1.3.8 minimist: 1.2.8 strip-json-comments: 2.0.1 + optional: true react-reconciler@0.32.0(react@19.2.0): dependencies: @@ -9251,23 +10943,24 @@ snapshots: read-cmd-shim@5.0.0: {} + read-cmd-shim@6.0.0: {} + read-package-json-fast@4.0.0: dependencies: json-parse-even-better-errors: 4.0.0 npm-normalize-package-bin: 4.0.0 + read-package-json-fast@5.0.0: + dependencies: + json-parse-even-better-errors: 5.0.0 + npm-normalize-package-bin: 5.0.0 + read-pkg-up@7.0.1: dependencies: find-up: 4.1.0 read-pkg: 5.2.0 type-fest: 0.8.1 - read-pkg-up@8.0.0: - dependencies: - find-up: 5.0.0 - read-pkg: 6.0.0 - type-fest: 1.4.0 - read-pkg@5.2.0: dependencies: '@types/normalize-package-data': 2.4.4 @@ -9275,33 +10968,22 @@ snapshots: parse-json: 5.2.0 type-fest: 0.6.0 - read-pkg@6.0.0: - dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 3.0.3 - parse-json: 5.2.0 - type-fest: 1.4.0 - - readable-stream@2.3.8: + readable-stream@1.0.34: dependencies: core-util-is: 1.0.3 inherits: 2.0.4 isarray: '@socketregistry/isarray@1.0.8' - process-nextick-args: 2.0.1 - safe-buffer: '@socketregistry/safe-buffer@1.0.9' - string_decoder: 0.10.31 - util-deprecate: 1.0.2 + string_decoder: 0.10.31(patch_hash=4f6ae5ec65b5537e81cd3ee7e83ae65bcc843a93cff14f147d8053e1c385ae1d) readable-stream@3.6.2: dependencies: inherits: 2.0.4 - string_decoder: 0.10.31 + string_decoder: 0.10.31(patch_hash=4f6ae5ec65b5537e81cd3ee7e83ae65bcc843a93cff14f147d8053e1c385ae1d) util-deprecate: 1.0.2 - redent@4.0.0: + redeyed@2.1.1: dependencies: - indent-string: '@socketregistry/indent-string@1.0.14' - strip-indent: 4.1.1 + esprima: 4.0.1 regexp-tree@0.1.27: {} @@ -9330,6 +11012,8 @@ snapshots: transitivePeerDependencies: - supports-color + resolve-alpn@1.2.1: {} + resolve-from@4.0.0: {} resolve-pkg-maps@1.0.0: {} @@ -9340,6 +11024,10 @@ snapshots: path-parse: '@socketregistry/path-parse@1.0.8' supports-preserve-symlinks-flag: 1.0.0 + responselike@4.0.2: + dependencies: + lowercase-keys: 3.0.0 + restore-cursor@4.0.0: dependencies: onetime: 5.1.2 @@ -9350,38 +11038,49 @@ snapshots: onetime: 7.0.0 signal-exit: 4.1.0 + retry-as-promised@7.1.1: + optional: true + retry@0.12.0: {} reusify@1.1.0: {} rfdc@1.4.1: {} - rollup@4.53.2: + roarr@2.15.4: + dependencies: + boolean: 3.2.0 + detect-node: 2.1.0 + globalthis: '@socketregistry/globalthis@1.0.8' + json-stringify-safe: 5.0.1 + semver-compare: 1.0.0 + sprintf-js: 1.1.3 + + rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f): dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.53.2 - '@rollup/rollup-android-arm64': 4.53.2 - '@rollup/rollup-darwin-arm64': 4.53.2 - '@rollup/rollup-darwin-x64': 4.53.2 - '@rollup/rollup-freebsd-arm64': 4.53.2 - '@rollup/rollup-freebsd-x64': 4.53.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.53.2 - '@rollup/rollup-linux-arm-musleabihf': 4.53.2 - '@rollup/rollup-linux-arm64-gnu': 4.53.2 - '@rollup/rollup-linux-arm64-musl': 4.53.2 - '@rollup/rollup-linux-loong64-gnu': 4.53.2 - '@rollup/rollup-linux-ppc64-gnu': 4.53.2 - '@rollup/rollup-linux-riscv64-gnu': 4.53.2 - '@rollup/rollup-linux-riscv64-musl': 4.53.2 - '@rollup/rollup-linux-s390x-gnu': 4.53.2 - '@rollup/rollup-linux-x64-gnu': 4.53.2 - '@rollup/rollup-linux-x64-musl': 4.53.2 - '@rollup/rollup-openharmony-arm64': 4.53.2 - '@rollup/rollup-win32-arm64-msvc': 4.53.2 - '@rollup/rollup-win32-ia32-msvc': 4.53.2 - '@rollup/rollup-win32-x64-gnu': 4.53.2 - '@rollup/rollup-win32-x64-msvc': 4.53.2 + '@rollup/rollup-android-arm-eabi': 4.50.1 + '@rollup/rollup-android-arm64': 4.50.1 + '@rollup/rollup-darwin-arm64': 4.50.1 + '@rollup/rollup-darwin-x64': 4.50.1 + '@rollup/rollup-freebsd-arm64': 4.50.1 + '@rollup/rollup-freebsd-x64': 4.50.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.50.1 + '@rollup/rollup-linux-arm-musleabihf': 4.50.1 + '@rollup/rollup-linux-arm64-gnu': 4.50.1 + '@rollup/rollup-linux-arm64-musl': 4.50.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.50.1 + '@rollup/rollup-linux-ppc64-gnu': 4.50.1 + '@rollup/rollup-linux-riscv64-gnu': 4.50.1 + '@rollup/rollup-linux-riscv64-musl': 4.50.1 + '@rollup/rollup-linux-s390x-gnu': 4.50.1 + '@rollup/rollup-linux-x64-gnu': 4.50.1 + '@rollup/rollup-linux-x64-musl': 4.50.1 + '@rollup/rollup-openharmony-arm64': 4.50.1 + '@rollup/rollup-win32-arm64-msvc': 4.50.1 + '@rollup/rollup-win32-ia32-msvc': 4.50.1 + '@rollup/rollup-win32-x64-msvc': 4.50.1 fsevents: 2.3.3 run-applescript@7.1.0: {} @@ -9396,12 +11095,50 @@ snapshots: execa: 5.1.1 path-name: 1.0.0 + sax@1.4.3: {} + scheduler@0.26.0: {} scheduler@0.27.0: {} + semver-compare@1.0.0: {} + semver@7.7.2: {} + sequelize-pool@7.1.0: + optional: true + + sequelize@6.37.7(@appthreat/sqlite3@6.0.9): + dependencies: + '@types/debug': 4.1.12 + '@types/validator': 13.15.10 + debug: 4.4.3 + dottie: 2.0.6 + inflection: 1.13.4 + lodash: 4.17.21(patch_hash=9c24de093a43581e08151be377de2e0518d256eca3c50f117c523e45ab6272b1) + moment: 2.30.1 + moment-timezone: 0.5.48 + pg-connection-string: 2.9.1 + retry-as-promised: 7.1.1 + semver: 7.7.2 + sequelize-pool: 7.1.0 + toposort-class: 1.0.1 + uuid: 8.3.2 + validator: 13.15.23 + wkx: 0.5.0 + optionalDependencies: + sqlite3: '@appthreat/sqlite3@6.0.9' + transitivePeerDependencies: + - supports-color + optional: true + + serialize-error@7.0.1: + dependencies: + type-fest: 0.13.1 + + setprototypeof@1.2.0: + optional: true + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -9429,16 +11166,24 @@ snapshots: transitivePeerDependencies: - supports-color - simple-concat@1.0.1: {} + simple-concat@1.0.1: + optional: true simple-get@4.0.1: dependencies: decompress-response: 6.0.0 once: 1.4.0 simple-concat: 1.0.1 + optional: true slash@5.1.0: {} + slice-ansi@4.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + slice-ansi@5.0.0: dependencies: ansi-styles: 6.2.3 @@ -9451,6 +11196,8 @@ snapshots: smart-buffer@4.2.0: {} + smol-toml@1.5.2: {} + socks-proxy-agent@8.0.5: dependencies: agent-base: 7.1.4 @@ -9472,6 +11219,11 @@ snapshots: source-map-js@1.2.1: {} + sparkline@0.1.2: + dependencies: + here: 0.0.2 + nopt: 2.1.2 + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 @@ -9490,6 +11242,8 @@ snapshots: dependencies: readable-stream: 3.6.2 + sprintf-js@1.1.3: {} + ssri@10.0.5: dependencies: minipass: 7.1.2 @@ -9510,11 +11264,13 @@ snapshots: stackback@0.0.2: {} - std-env@3.10.0: {} + statuses@1.5.0: + optional: true - stream-meter@1.0.4: - dependencies: - readable-stream: 2.3.8 + statuses@2.0.2: + optional: true + + std-env@3.10.0: {} streamx@2.23.0: dependencies: @@ -9531,8 +11287,20 @@ snapshots: string-width@4.2.3: dependencies: - emoji-regex: 10.6.0 + emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.2 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.4.0 strip-ansi: 7.1.2 string-width@8.1.0: @@ -9540,15 +11308,23 @@ snapshots: get-east-asian-width: 1.4.0 strip-ansi: 7.1.2 - string_decoder@0.10.31: {} + string_decoder@0.10.31(patch_hash=4f6ae5ec65b5537e81cd3ee7e83ae65bcc843a93cff14f147d8053e1c385ae1d): {} + + strip-ansi@3.0.1: + dependencies: + ansi-regex: 6.1.0 + + strip-ansi@5.2.0: + dependencies: + ansi-regex: 6.1.0 strip-ansi@6.0.1: dependencies: - ansi-regex: 6.2.2 + ansi-regex: 6.1.0 strip-ansi@7.1.2: dependencies: - ansi-regex: 6.2.2 + ansi-regex: 6.1.0 strip-bom@4.0.0: {} @@ -9558,14 +11334,21 @@ snapshots: dependencies: min-indent: 1.0.1 - strip-indent@4.1.1: {} - - strip-json-comments@2.0.1: {} + strip-json-comments@2.0.1: + optional: true strip-json-comments@3.1.1: {} + strip-json-comments@5.0.2: {} + + strip-literal@3.1.0: + dependencies: + js-tokens: 9.0.1 + suffix-thumb@5.0.2: {} + supports-color@2.0.0: {} + supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -9588,11 +11371,19 @@ snapshots: commander: 7.2.0 eol: 0.10.0 fast-glob: 3.3.3 - lodash: 4.17.21 + lodash: 4.17.21(patch_hash=9c24de093a43581e08151be377de2e0518d256eca3c50f117c523e45ab6272b1) nmtree: 1.0.6 semver: 7.7.2 sort-object-keys: 1.1.3 + table@6.9.0: + dependencies: + ajv: 8.17.1 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + tapable@2.3.0: {} tar-fs@2.1.4: @@ -9601,18 +11392,7 @@ snapshots: mkdirp-classic: 0.5.3 pump: 3.0.3 tar-stream: 2.2.0 - - tar-fs@3.1.1: - dependencies: - pump: 3.0.3 - tar-stream: 3.1.7 - optionalDependencies: - bare-fs: 4.5.1 - bare-path: 3.0.0 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a + optional: true tar-stream@2.2.0: dependencies: @@ -9621,6 +11401,7 @@ snapshots: fs-constants: 1.0.0 inherits: 2.0.4 readable-stream: 3.6.2 + optional: true tar-stream@3.1.7: dependencies: @@ -9631,6 +11412,14 @@ snapshots: - bare-abort-controller - react-native-b4a + tar@7.5.1: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.1.0 + yallist: 5.0.0 + tar@7.5.2: dependencies: '@isaacs/fs-minipass': 4.0.1 @@ -9654,11 +11443,19 @@ snapshots: unconfig: 7.4.1 yaml: 2.8.1 + term-canvas@0.0.5: {} + terminal-link@2.1.1: dependencies: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 + test-exclude@7.0.1: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 10.4.5 + minimatch: 9.0.5 + text-decoder@1.2.3: dependencies: b4a: 1.7.3 @@ -9669,6 +11466,14 @@ snapshots: dependencies: readable-stream: 3.6.2 + tiny-colors@2.1.3: {} + + tiny-updater@3.5.3(patch_hash=b3f4afb74b370538fe45248cba31833aee4553f83f15a6a07da47f85afae2f24): + dependencies: + ionstore: 1.0.1 + tiny-colors: 2.1.3 + when-exit: 2.1.5 + tinybench@2.9.0: {} tinyexec@0.3.2: {} @@ -9680,13 +11485,21 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - tinyrainbow@3.0.3: {} + tinypool@1.1.1: {} + + tinyrainbow@2.0.0: {} + + tinyspy@4.0.4: {} to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - tr46@0.0.3: {} + toidentifier@1.0.1: + optional: true + + toposort-class@1.0.1: + optional: true trash@10.0.0: dependencies: @@ -9700,8 +11513,6 @@ snapshots: treeverse@3.0.0: {} - trim-newlines@4.1.1: {} - ts-api-utils@2.1.0(typescript@5.9.3): dependencies: typescript: 5.9.3 @@ -9731,6 +11542,7 @@ snapshots: tunnel-agent@0.6.0: dependencies: safe-buffer: '@socketregistry/safe-buffer@1.0.9' + optional: true type-check@0.4.0: dependencies: @@ -9753,22 +11565,29 @@ snapshots: transitivePeerDependencies: - typescript + type-fest@0.13.1: {} + type-fest@0.21.3: {} type-fest@0.6.0: {} type-fest@0.8.1: {} - type-fest@1.4.0: {} - type-fest@4.41.0: {} - typescript-eslint@8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3): + type-is@2.0.1: dependencies: - '@typescript-eslint/eslint-plugin': 8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) + content-type: 1.0.5 + media-typer: 1.1.0 + mime-types: 3.0.2 + optional: true + + typescript-eslint@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.35.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: @@ -9791,7 +11610,9 @@ snapshots: quansync: 0.2.11 unconfig-core: 7.4.1 - undici-types@7.16.0: {} + undici-types@7.10.0: {} + + undici@6.21.3: {} unicorn-magic@0.3.0: {} @@ -9805,7 +11626,8 @@ snapshots: universal-user-agent@7.0.3: {} - universalify@2.0.1: {} + unpipe@1.0.0: + optional: true unplugin-purge-polyfills@0.1.0: dependencies: @@ -9845,14 +11667,6 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - unzipper@0.12.3: - dependencies: - bluebird: 3.7.2 - duplexer2: 0.1.4 - fs-extra: 11.3.2 - graceful-fs: 4.2.11 - node-int64: 0.4.0 - update-browserslist-db@1.1.4(browserslist@4.25.4): dependencies: browserslist: 4.25.4 @@ -9875,6 +11689,14 @@ snapshots: util-deprecate@1.0.2: {} + utils-merge@1.0.1: + optional: true + + uuid@11.1.0: {} + + uuid@8.3.2: + optional: true + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 @@ -9882,31 +11704,59 @@ snapshots: validate-npm-package-name@6.0.2: {} - vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(yaml@2.8.1): + validator@13.15.23: + optional: true + + vary@1.1.2: + optional: true + + vite-node@3.2.4(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1): + dependencies: + cac: 6.7.14 + debug: 4.4.3 + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 7.1.5(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vite@7.1.5(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1): dependencies: esbuild: 0.25.11 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.53.2 + rollup: 4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f) tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.9.2 + '@types/node': 24.3.1 fsevents: 2.3.3 jiti: 2.6.1 yaml: 2.8.1 - vitest@4.0.3(@types/node@24.9.2)(jiti@2.6.1)(yaml@2.8.1): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1): dependencies: - '@vitest/expect': 4.0.3 - '@vitest/mocker': 4.0.3(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(yaml@2.8.1)) - '@vitest/pretty-format': 4.0.3 - '@vitest/runner': 4.0.3 - '@vitest/snapshot': 4.0.3 - '@vitest/spy': 4.0.3 - '@vitest/utils': 4.0.3 + '@types/chai': 5.2.3 + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(vite@7.1.5(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1)) + '@vitest/pretty-format': 3.2.4 + '@vitest/runner': 3.2.4 + '@vitest/snapshot': 3.2.4 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 debug: 4.4.3 - es-module-lexer: 1.7.0 expect-type: 1.2.2 magic-string: 0.30.19 pathe: 2.0.3 @@ -9915,11 +11765,14 @@ snapshots: tinybench: 2.9.0 tinyexec: 0.3.2 tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(yaml@2.8.1) + tinypool: 1.1.1 + tinyrainbow: 2.0.0 + vite: 7.1.5(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 24.9.2 + '@types/debug': 4.1.12 + '@types/node': 24.3.1 transitivePeerDependencies: - jiti - less @@ -9936,14 +11789,15 @@ snapshots: walk-up-path@4.0.0: {} - webidl-conversions@3.0.1: {} - webpack-virtual-modules@0.6.2: {} - whatwg-url@5.0.0: + whatwg-encoding@3.1.1: dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 + iconv-lite: 0.6.3 + + whatwg-mimetype@4.0.0: {} + + when-exit@2.1.5: {} which@2.0.2: dependencies: @@ -9968,20 +11822,33 @@ snapshots: widest-line@5.0.0: dependencies: - string-width: 8.1.0 + string-width: 7.2.0 + + wkx@0.5.0: + dependencies: + '@types/node': 24.3.1 + optional: true word-wrap@1.2.5: {} + wordwrap@0.0.3: {} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 - string-width: 8.1.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 5.1.2 strip-ansi: 7.1.2 wrap-ansi@9.0.2: dependencies: ansi-styles: 6.2.3 - string-width: 8.1.0 + string-width: 7.2.0 strip-ansi: 7.1.2 wrappy@1.0.2: {} @@ -9996,12 +11863,19 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 4.1.0 + write-file-atomic@7.0.0: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 + ws@8.18.3: {} wsl-utils@0.1.0: dependencies: is-wsl: 3.1.0 + x256@0.0.2: {} + xcase@2.0.1: {} xdg-basedir@4.0.0: {} @@ -10013,6 +11887,17 @@ snapshots: user-home: 2.0.0 xdg-basedir: 4.0.0 + xml-js@1.6.11: + dependencies: + sax: 1.4.3 + + xml2js@0.6.2: + dependencies: + sax: 1.4.3 + xmlbuilder: 11.0.1 + + xmlbuilder@11.0.1: {} + xtend@4.0.2: {} y18n@5.0.8: {} @@ -10027,13 +11912,13 @@ snapshots: yargs-parser@21.1.1: {} - yargs@16.2.0: + yargs@17.7.2: dependencies: - cliui: 7.0.4 + cliui: 8.0.1 escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 - string-width: 8.1.0 + string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 @@ -10041,6 +11926,14 @@ snapshots: yoctocolors-cjs@2.1.3: {} + yoctocolors@2.1.2: {} + yoga-layout@3.2.1: {} + zod-validation-error@3.5.4(zod@3.25.76): + dependencies: + zod: 3.25.76 + + zod@3.25.76: {} + zod@4.1.8: {} diff --git a/scripts/apply-socket-mods.mjs b/scripts/apply-socket-mods.mjs index 5864293b2..c063fe80e 100644 --- a/scripts/apply-socket-mods.mjs +++ b/scripts/apply-socket-mods.mjs @@ -11,9 +11,10 @@ import { readFile, writeFile } from 'node:fs/promises' import { dirname, join } from 'node:path' import { fileURLToPath } from 'node:url' -import { getDefaultLogger } from '@socketsecurity/lib/logger' + import colors from 'yoctocolors-cjs' +import { getDefaultLogger } from '@socketsecurity/lib/logger' const logger = getDefaultLogger() const __filename = fileURLToPath(import.meta.url) @@ -95,7 +96,9 @@ async function fixV8IncludePaths() { await writeFile(filePath, content, 'utf8') } } catch (e) { - logger.warn(` ${colors.yellow('⚠')} Could not fix ${file}: ${e.message}`) + logger.warn( + ` ${colors.yellow('⚠')} Could not fix ${file}: ${e.message}`, + ) } } @@ -128,7 +131,9 @@ const { getAsset: getAssetInternal, getAssetKeys: getAssetKeysInternal } = inter logger.log(' ℹ️ lib/sea.js already modified or structure changed') } } catch (e) { - logger.warn(` ${colors.yellow('⚠')} Could not modify lib/sea.js: ${e.message}`) + logger.warn( + ` ${colors.yellow('⚠')} Could not modify lib/sea.js: ${e.message}`, + ) } logger.log(`${colors.green('✓')} SEA detection enabled`) @@ -155,6 +160,9 @@ async function main() { // Run main function main().catch(error => { - logger.error(`${colors.red('✗')} Failed to apply modifications:`, error.message) + logger.error( + `${colors.red('✗')} Failed to apply modifications:`, + error.message, + ) process.exitCode = 1 }) diff --git a/scripts/build-all-from-source.mjs b/scripts/build-all-from-source.mjs index c4fe86058..5f9ddefa5 100644 --- a/scripts/build-all-from-source.mjs +++ b/scripts/build-all-from-source.mjs @@ -31,7 +31,7 @@ const ROOT_DIR = path.join(__dirname, '..') // Parse arguments. const args = process.argv.slice(2) const FORCE_BUILD = args.includes('--force') -const specificPackage = args.find((arg) => !arg.startsWith('--')) +const specificPackage = args.find(arg => !arg.startsWith('--')) // Build packages in order (dependencies first). const PACKAGES = [ @@ -39,7 +39,8 @@ const PACKAGES = [ name: 'build-infra', description: 'Shared build infrastructure', path: 'packages/build-infra', - build: false, // No build needed (utilities only) + // No build needed (utilities only) + build: false, }, { name: 'node-smol-builder', @@ -136,7 +137,7 @@ async function main() { let packagesToBuild = PACKAGES if (specificPackage) { - const pkg = PACKAGES.find((p) => p.name === specificPackage) + const pkg = PACKAGES.find(p => p.name === specificPackage) if (!pkg) { logger.fail(`Unknown package: ${specificPackage}`) logger.info('') @@ -176,7 +177,9 @@ async function main() { logger.info(`Total time: ${totalMinutes}m ${totalSeconds}s`) logger.log('') logger.info('Build artifacts:') - logger.info(' node-smol-builder: packages/node-smol-builder/build/out/Release/node') + logger.info( + ' node-smol-builder: packages/node-smol-builder/build/out/Release/node', + ) logger.info(' onnx-runtime: packages/onnx-runtime/build/wasm/') logger.info(' codet5-models: packages/codet5-models/build/models/') logger.info(' yoga-layout: packages/yoga-layout/build/wasm/') @@ -189,7 +192,7 @@ async function main() { } // Run main function. -main().catch((e) => { +main().catch(e => { logger.fail(`Build failed: ${e.message}`) process.exit(1) }) diff --git a/scripts/build-binaries.mjs b/scripts/build-binaries.mjs index ff113d842..6f3c44dae 100755 --- a/scripts/build-binaries.mjs +++ b/scripts/build-binaries.mjs @@ -1,4 +1,3 @@ -#!/usr/bin/env node /** * Build Socket binaries (WASM, SEA, smol) without running tests. * @@ -37,11 +36,19 @@ const tasks = [] // Build bootstrap first (required for all binaries). console.log('\n🔨 Building bootstrap...\n') -tasks.push({ name: 'bootstrap', cmd: 'pnpm', args: ['--filter', '@socketsecurity/bootstrap', 'run', 'build'] }) +tasks.push({ + name: 'bootstrap', + cmd: 'pnpm', + args: ['--filter', '@socketsecurity/bootstrap', 'run', 'build'], +}) // Build CLI (required for binaries). console.log('🔨 Building CLI...\n') -tasks.push({ name: 'cli', cmd: 'pnpm', args: ['--filter', '@socketsecurity/cli', 'run', 'build'] }) +tasks.push({ + name: 'cli', + cmd: 'pnpm', + args: ['--filter', '@socketsecurity/cli', 'run', 'build'], +}) // Build WASM (slowest, optional). if (buildWasm) { @@ -52,20 +59,30 @@ if (buildWasm) { // Build SEA binary. if (buildSea) { - const seaArgs = ['--filter', '@socketsecurity/node-sea-builder', 'run', 'build'] - if (values.dev) seaArgs.push('--dev') - if (values.prod) seaArgs.push('--prod') - if (values.clean) seaArgs.push('--clean') + const seaArgs = [ + '--filter', + '@socketsecurity/node-sea-builder', + 'run', + 'build', + ] + if (values.dev) {seaArgs.push('--dev')} + if (values.prod) {seaArgs.push('--prod')} + if (values.clean) {seaArgs.push('--clean')} console.log('🔨 Building SEA binary...\n') tasks.push({ name: 'sea', cmd: 'pnpm', args: seaArgs }) } // Build smol binary. if (buildSmol) { - const smolArgs = ['--filter', '@socketsecurity/node-smol-builder', 'run', 'build'] - if (values.dev) smolArgs.push('--dev') - if (values.prod) smolArgs.push('--prod') - if (values.clean) smolArgs.push('--clean') + const smolArgs = [ + '--filter', + '@socketsecurity/node-smol-builder', + 'run', + 'build', + ] + if (values.dev) {smolArgs.push('--dev')} + if (values.prod) {smolArgs.push('--prod')} + if (values.clean) {smolArgs.push('--clean')} console.log('🔨 Building smol binary...\n') tasks.push({ name: 'smol', cmd: 'pnpm', args: smolArgs }) } @@ -78,7 +95,7 @@ async function runTask(task) { shell: WIN32, }) - proc.on('close', (code) => { + proc.on('close', code => { if (code === 0) { resolve() } else { @@ -88,7 +105,7 @@ async function runTask(task) { }) } -(async () => { +;(async () => { const startTime = Date.now() for (const task of tasks) { diff --git a/scripts/build.mjs b/scripts/build.mjs index fe9ace0ef..c19b168cf 100755 --- a/scripts/build.mjs +++ b/scripts/build.mjs @@ -1,4 +1,3 @@ -#!/usr/bin/env node /** * Comprehensive build script with intelligent caching. @@ -23,11 +22,11 @@ import path from 'node:path' import process from 'node:process' import { fileURLToPath } from 'node:url' +import colors from 'yoctocolors-cjs' + import { WIN32 } from '@socketsecurity/lib/constants/platform' import { getDefaultLogger } from '@socketsecurity/lib/logger' import { spawn } from '@socketsecurity/lib/spawn' -import colors from 'yoctocolors-cjs' - const logger = getDefaultLogger() const __filename = fileURLToPath(import.meta.url) @@ -50,7 +49,7 @@ const TARGET_PACKAGES = { sea: '@socketbin/node-sea-builder-builder', socket: 'socket', 'win32-arm64': '@socketbin/cli-win32-arm64', - 'win32-x64': '@socketbin/cli-win32-x64' + 'win32-x64': '@socketbin/cli-win32-x64', } const PLATFORM_TARGETS = [ @@ -61,7 +60,7 @@ const PLATFORM_TARGETS = [ 'linux-arm64', 'linux-x64', 'win32-arm64', - 'win32-x64' + 'win32-x64', ] /** @@ -139,7 +138,17 @@ function parseArgs() { target = `${platform}-${arch}` } - return { arch, buildArgs, force, help, parallel, platform, platforms, target, targets } + return { + arch, + buildArgs, + force, + help, + parallel, + platform, + platforms, + target, + targets, + } } /** @@ -150,13 +159,25 @@ function showHelp() { logger.log(`${colors.blue('Socket CLI Build System')}`) logger.log('') logger.log('Usage:') - logger.log(' pnpm run build # Smart build (skips unchanged)') + logger.log( + ' pnpm run build # Smart build (skips unchanged)', + ) logger.log(' pnpm run build --force # Force rebuild all') - logger.log(' pnpm run build --target # Build specific target') - logger.log(' pnpm run build --platform

--arch # Build specific platform/arch') - logger.log(' pnpm run build --targets # Build multiple targets') - logger.log(' pnpm run build --platforms # Build all platform binaries') - logger.log(' pnpm run build --platforms --parallel # Build platforms in parallel') + logger.log( + ' pnpm run build --target # Build specific target', + ) + logger.log( + ' pnpm run build --platform

--arch # Build specific platform/arch', + ) + logger.log( + ' pnpm run build --targets # Build multiple targets', + ) + logger.log( + ' pnpm run build --platforms # Build all platform binaries', + ) + logger.log( + ' pnpm run build --platforms --parallel # Build platforms in parallel', + ) logger.log(' pnpm run build --help # Show this help') logger.log('') logger.log('Default Build Order:') @@ -205,7 +226,9 @@ async function buildPackage(pkg, force) { const skip = !needsBuild(pkg, force) if (skip) { - logger.log(`${colors.cyan('→')} ${pkg.name}: ${colors.gray('skipped (up to date)')}`) + logger.log( + `${colors.cyan('→')} ${pkg.name}: ${colors.gray('skipped (up to date)')}`, + ) return { success: true, skipped: true } } @@ -222,11 +245,15 @@ async function buildPackage(pkg, force) { const duration = ((Date.now() - startTime) / 1000).toFixed(1) if (result.code !== 0) { - logger.log(`${colors.red('✗')} ${pkg.name}: ${colors.red('failed')} (${duration}s)`) + logger.log( + `${colors.red('✗')} ${pkg.name}: ${colors.red('failed')} (${duration}s)`, + ) return { success: false, skipped: false } } - logger.log(`${colors.green('✓')} ${pkg.name}: ${colors.green('built')} (${duration}s)`) + logger.log( + `${colors.green('✓')} ${pkg.name}: ${colors.green('built')} (${duration}s)`, + ) return { success: true, skipped: false } } @@ -301,17 +328,13 @@ async function runTargetedBuild(target, buildArgs) { const packageFilter = TARGET_PACKAGES[target] if (!packageFilter) { logger.error(`Unknown build target: ${target}`) - logger.error(`Available targets: ${Object.keys(TARGET_PACKAGES).join(', ')}`) + logger.error( + `Available targets: ${Object.keys(TARGET_PACKAGES).join(', ')}`, + ) process.exit(1) } - const pnpmArgs = [ - '--filter', - packageFilter, - 'run', - 'build', - ...buildArgs - ] + const pnpmArgs = ['--filter', packageFilter, 'run', 'build', ...buildArgs] const result = await spawn('pnpm', pnpmArgs, { shell: WIN32, @@ -333,13 +356,7 @@ async function buildTarget(target, buildArgs) { const startTime = Date.now() logger.log(`${colors.cyan('→')} [${target}] Starting build...`) - const pnpmArgs = [ - '--filter', - packageFilter, - 'run', - 'build', - ...buildArgs - ] + const pnpmArgs = ['--filter', packageFilter, 'run', 'build', ...buildArgs] const result = await spawn('pnpm', pnpmArgs, { shell: WIN32, @@ -349,7 +366,9 @@ async function buildTarget(target, buildArgs) { const duration = ((Date.now() - startTime) / 1000).toFixed(1) if (result.code === 0) { - logger.log(`${colors.green('✓')} [${target}] Build succeeded (${duration}s)`) + logger.log( + `${colors.green('✓')} [${target}] Build succeeded (${duration}s)`, + ) return { success: true, target, duration } } @@ -367,7 +386,9 @@ async function buildTarget(target, buildArgs) { async function runParallelBuilds(targetsToBuild, buildArgs) { logger.log('') logger.log('='.repeat(60)) - logger.log(`${colors.blue('Building ' + targetsToBuild.length + ' targets in parallel')}`) + logger.log( + `${colors.blue('Building ' + targetsToBuild.length + ' targets in parallel')}`, + ) logger.log('='.repeat(60)) logger.log('') logger.log(`Targets: ${targetsToBuild.join(', ')}`) @@ -375,7 +396,7 @@ async function runParallelBuilds(targetsToBuild, buildArgs) { const startTime = Date.now() const results = await Promise.allSettled( - targetsToBuild.map(target => buildTarget(target, buildArgs)) + targetsToBuild.map(target => buildTarget(target, buildArgs)), ) const totalDuration = ((Date.now() - startTime) / 1000).toFixed(1) @@ -386,8 +407,13 @@ async function runParallelBuilds(targetsToBuild, buildArgs) { logger.log('='.repeat(60)) logger.log('') - const successful = results.filter(r => r.status === 'fulfilled' && r.value.success).length - const failed = results.filter(r => r.status === 'rejected' || (r.status === 'fulfilled' && !r.value.success)).length + const successful = results.filter( + r => r.status === 'fulfilled' && r.value.success, + ).length + const failed = results.filter( + r => + r.status === 'rejected' || (r.status === 'fulfilled' && !r.value.success), + ).length logger.log(`${colors.green('Succeeded:')} ${successful}`) logger.log(`${colors.red('Failed:')} ${failed}`) @@ -411,7 +437,9 @@ async function runParallelBuilds(targetsToBuild, buildArgs) { async function runSequentialBuilds(targetsToBuild, buildArgs) { logger.log('') logger.log('='.repeat(60)) - logger.log(`${colors.blue('Building ' + targetsToBuild.length + ' targets sequentially')}`) + logger.log( + `${colors.blue('Building ' + targetsToBuild.length + ' targets sequentially')}`, + ) logger.log('='.repeat(60)) logger.log('') logger.log(`Targets: ${targetsToBuild.join(', ')}`) @@ -446,7 +474,9 @@ async function runSequentialBuilds(targetsToBuild, buildArgs) { logger.log('') if (failed > 0) { - logger.log(`${colors.red('✗')} Build failed at target: ${results.find(r => !r.success)?.target}`) + logger.log( + `${colors.red('✗')} Build failed at target: ${results.find(r => !r.success)?.target}`, + ) logger.log('') process.exit(1) } diff --git a/scripts/check-build-deps.mjs b/scripts/check-build-deps.mjs index 1a45a7116..7c5da3811 100644 --- a/scripts/check-build-deps.mjs +++ b/scripts/check-build-deps.mjs @@ -13,10 +13,10 @@ import { existsSync } from 'node:fs' import { platform } from 'node:os' -import { spawn } from '@socketsecurity/lib/spawn' -import { getDefaultLogger } from '@socketsecurity/lib/logger' import colors from 'yoctocolors-cjs' +import { getDefaultLogger } from '@socketsecurity/lib/logger' +import { spawn } from '@socketsecurity/lib/spawn' const logger = getDefaultLogger() const IS_MACOS = platform() === 'darwin' @@ -70,7 +70,8 @@ async function checkDiskSpace() { const lines = result.stdout.trim().split('\n') if (lines.length > 1) { const parts = lines[1].split(/\s+/) - return parts[3] // Available space + // Available space + return parts[3] } } } catch { @@ -164,7 +165,9 @@ async function main() { const gcc = await commandExists('gcc') const gccVersion = gcc ? await getVersion('gcc') : null checks.push({ name: 'gcc', required: true, found: gcc, version: gccVersion }) - logger.log(` ${gcc ? `${colors.green('✓')}` : `${colors.red('✗')}`} gcc: ${gccVersion || 'not found'}`) + logger.log( + ` ${gcc ? `${colors.green('✓')}` : `${colors.red('✗')}`} gcc: ${gccVersion || 'not found'}`, + ) if (!gcc) { hasErrors = true } @@ -172,7 +175,9 @@ async function main() { const gxx = await commandExists('g++') const gxxVersion = gxx ? await getVersion('g++') : null checks.push({ name: 'g++', required: true, found: gxx, version: gxxVersion }) - logger.log(` ${gxx ? `${colors.green('✓')}` : `${colors.red('✗')}`} g++: ${gxxVersion || 'not found'}`) + logger.log( + ` ${gxx ? `${colors.green('✓')}` : `${colors.red('✗')}`} g++: ${gxxVersion || 'not found'}`, + ) if (!gxx) { hasErrors = true } @@ -185,7 +190,9 @@ async function main() { found: make, version: makeVersion, }) - logger.log(` ${make ? `${colors.green('✓')}` : `${colors.red('✗')}`} make: ${makeVersion || 'not found'}`) + logger.log( + ` ${make ? `${colors.green('✓')}` : `${colors.red('✗')}`} make: ${makeVersion || 'not found'}`, + ) if (!make) { hasErrors = true } @@ -208,7 +215,9 @@ async function main() { const git = await commandExists('git') const gitVersion = git ? await getVersion('git') : null checks.push({ name: 'git', required: true, found: git, version: gitVersion }) - logger.log(` ${git ? `${colors.green('✓')}` : `${colors.red('✗')}`} git: ${gitVersion || 'not found'}`) + logger.log( + ` ${git ? `${colors.green('✓')}` : `${colors.red('✗')}`} git: ${gitVersion || 'not found'}`, + ) if (!git) { hasErrors = true } @@ -225,12 +234,12 @@ async function main() { if (IS_MACOS) { logger.log(' ℹ️ UPX: not used on macOS (incompatible with code signing)') } else { - logger.log(` ${upx ? `${colors.green('✓')}` : `${colors.yellow('⚠')} `} upx: ${upxVersion || 'not found'}`) + logger.log( + ` ${upx ? `${colors.green('✓')}` : `${colors.yellow('⚠')} `} upx: ${upxVersion || 'not found'}`, + ) if (!upx) { hasWarnings = true - logger.log( - ' UPX enables 30-50% binary compression on Linux/Windows', - ) + logger.log(' UPX enables 30-50% binary compression on Linux/Windows') logger.log( ' Build will succeed without UPX but produce larger binaries', ) @@ -247,9 +256,7 @@ async function main() { logger.log('') // Check existing build - const nodeBuilt = existsSync( - 'build/node-smol/out/Release/node', - ) + const nodeBuilt = existsSync('build/node-smol/out/Release/node') if (nodeBuilt) { logger.log(`${colors.green('✓')} Custom Node.js binary already built`) logger.log(' Location: build/node-smol/out/Release/node') @@ -297,9 +304,7 @@ async function main() { logger.log('') } else if (IS_WINDOWS) { logger.log(' Windows (Chocolatey):') - logger.log( - ' $ choco install visualstudio2022buildtools python git upx', - ) + logger.log(' $ choco install visualstudio2022buildtools python git upx') logger.log('') logger.log(' Or use WSL2 (recommended):') logger.log(' $ wsl --install -d Ubuntu') diff --git a/scripts/check-version-consistency.mjs b/scripts/check-version-consistency.mjs index 3be18d343..14b5d4a33 100644 --- a/scripts/check-version-consistency.mjs +++ b/scripts/check-version-consistency.mjs @@ -2,9 +2,10 @@ import { promises as fs } from 'node:fs' import path from 'node:path' import process from 'node:process' import { fileURLToPath } from 'node:url' -import { getDefaultLogger } from '@socketsecurity/lib/logger' + import colors from 'yoctocolors-cjs' +import { getDefaultLogger } from '@socketsecurity/lib/logger' const logger = getDefaultLogger() const __filename = fileURLToPath(import.meta.url) @@ -41,7 +42,9 @@ async function checkVersionConsistency() { // Only check root package.json if the expected version looks like a socketbin version // (contains timestamp like YYYYMMDD.HHmmss) or if root package version matches. const isSocketbinVersion = /\d{8}\.\d{6}/.test(cleanVersion) - const shouldCheckRoot = isSocketbinVersion ? mainPkg.version === cleanVersion : true + const shouldCheckRoot = isSocketbinVersion + ? mainPkg.version === cleanVersion + : true if (shouldCheckRoot) { checked.push({ diff --git a/scripts/check.mjs b/scripts/check.mjs index 2cf0a48d2..06111f823 100644 --- a/scripts/check.mjs +++ b/scripts/check.mjs @@ -87,7 +87,13 @@ async function runEslintCheck(options = {}) { } // Run lint across affected packages. - return await runAcrossPackages(packages, 'lint', [], quiet, 'Running ESLint checks') + return await runAcrossPackages( + packages, + 'lint', + [], + quiet, + 'Running ESLint checks', + ) } /** @@ -107,7 +113,13 @@ async function runTypeCheck(options = {}) { } // Run type check across packages. - return await runAcrossPackages(packages, 'type', [], quiet, 'Running TypeScript checks') + return await runAcrossPackages( + packages, + 'type', + [], + quiet, + 'Running TypeScript checks', + ) } async function main() { @@ -141,11 +153,15 @@ async function main() { logger.log(' --changed Check packages with changed files') logger.log(' --quiet, --silent Suppress progress messages') logger.log('\nExamples:') - logger.log(' pnpm check # Run all checks on changed packages') + logger.log( + ' pnpm check # Run all checks on changed packages', + ) logger.log(' pnpm check --all # Run all checks on all packages') logger.log(' pnpm check --lint # Run ESLint only') logger.log(' pnpm check --types # Run TypeScript only') - logger.log(' pnpm check --lint --staged # Run ESLint on staged packages') + logger.log( + ' pnpm check --lint --staged # Run ESLint on staged packages', + ) process.exitCode = 0 return } diff --git a/scripts/clean-cache.mjs b/scripts/clean-cache.mjs index 15871bfd5..98a1ebd99 100755 --- a/scripts/clean-cache.mjs +++ b/scripts/clean-cache.mjs @@ -1,4 +1,3 @@ -#!/usr/bin/env node /** * Clean stale caches across all packages. * @@ -10,8 +9,8 @@ import { readdirSync, rmSync, statSync } from 'node:fs' import { join } from 'node:path' -import { parseArgs } from 'node:util' import { fileURLToPath } from 'node:url' +import { parseArgs } from 'node:util' const __dirname = fileURLToPath(new URL('.', import.meta.url)) const ROOT_DIR = join(__dirname, '..') @@ -70,7 +69,9 @@ function analyzeCacheDir(cacheDir) { path: itemPath, size: getDirSize(itemPath), mtime: stats.mtime, - ageD: Math.floor((Date.now() - stats.mtime.getTime()) / (1000 * 60 * 60 * 24)), + ageD: Math.floor( + (Date.now() - stats.mtime.getTime()) / (1000 * 60 * 60 * 24), + ), }) } } @@ -107,9 +108,10 @@ function getDirSize(dir) { * Format bytes to human readable. */ function formatSize(bytes) { - if (bytes < 1024) return `${bytes} B` - if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB` - if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB` + if (bytes < 1024) {return `${bytes} B`} + if (bytes < 1024 * 1024) {return `${(bytes / 1024).toFixed(1)} KB`} + if (bytes < 1024 * 1024 * 1024) + {return `${(bytes / (1024 * 1024)).toFixed(1)} MB`} return `${(bytes / (1024 * 1024 * 1024)).toFixed(2)} GB` } @@ -120,7 +122,9 @@ if (!cacheDirs.length) { process.exit(0) } -console.log(`Found ${cacheDirs.length} cache director${cacheDirs.length === 1 ? 'y' : 'ies'}:\n`) +console.log( + `Found ${cacheDirs.length} cache director${cacheDirs.length === 1 ? 'y' : 'ies'}:\n`, +) let totalDeleted = 0 let totalSize = 0 @@ -138,7 +142,9 @@ for (const { package: pkg, path: cacheDir } of cacheDirs) { if (cleanAll) { // Delete everything. for (const entry of entries) { - console.log(` ${dryRun ? '[DRY RUN]' : '✗'} ${entry.name} (${formatSize(entry.size)}, ${entry.ageD}d old)`) + console.log( + ` ${dryRun ? '[DRY RUN]' : '✗'} ${entry.name} (${formatSize(entry.size)}, ${entry.ageD}d old)`, + ) if (!dryRun) { rmSync(entry.path, { recursive: true, force: true }) } @@ -149,10 +155,14 @@ for (const { package: pkg, path: cacheDir } of cacheDirs) { // Keep most recent, delete older ones. const [latest, ...older] = entries - console.log(` ✓ ${latest.name} (${formatSize(latest.size)}, ${latest.ageD}d old) - KEEP`) + console.log( + ` ✓ ${latest.name} (${formatSize(latest.size)}, ${latest.ageD}d old) - KEEP`, + ) for (const entry of older) { - console.log(` ${dryRun ? '[DRY RUN]' : '✗'} ${entry.name} (${formatSize(entry.size)}, ${entry.ageD}d old)`) + console.log( + ` ${dryRun ? '[DRY RUN]' : '✗'} ${entry.name} (${formatSize(entry.size)}, ${entry.ageD}d old)`, + ) if (!dryRun) { rmSync(entry.path, { recursive: true, force: true }) } diff --git a/scripts/clean.mjs b/scripts/clean.mjs index 8b008181b..6ec35fff0 100644 --- a/scripts/clean.mjs +++ b/scripts/clean.mjs @@ -119,9 +119,7 @@ async function main() { logger.log('\nUsage: pnpm clean [options]') logger.log('\nOptions:') logger.log(' --help Show this help message') - logger.log( - ' --all Clean everything (default if no flags)', - ) + logger.log(' --all Clean everything (default if no flags)') logger.log(' --cache Clean cache directories') logger.log(' --coverage Clean coverage reports') logger.log(' --dist Clean build output') diff --git a/scripts/create-sea-symlinks.mjs b/scripts/create-sea-symlinks.mjs index 9458e870a..4e91553d2 100644 --- a/scripts/create-sea-symlinks.mjs +++ b/scripts/create-sea-symlinks.mjs @@ -19,9 +19,10 @@ import { promises as fs } from 'node:fs' import path from 'node:path' import process from 'node:process' -import { getDefaultLogger } from '@socketsecurity/lib/logger' + import colors from 'yoctocolors-cjs' +import { getDefaultLogger } from '@socketsecurity/lib/logger' const logger = getDefaultLogger() const COMMANDS = ['socket-npm', 'socket-npx', 'socket-pnpm', 'socket-yarn'] diff --git a/scripts/fix.mjs b/scripts/fix.mjs index 253b08224..3b96f0c61 100644 --- a/scripts/fix.mjs +++ b/scripts/fix.mjs @@ -20,7 +20,6 @@ import { getDefaultLogger } from '@socketsecurity/lib/logger' import { spawn } from '@socketsecurity/lib/spawn' import { printHeader } from '@socketsecurity/lib/stdio/header' - const logger = getDefaultLogger() async function main() { const { values } = parseArgs({ diff --git a/scripts/generate-node-patches.mjs b/scripts/generate-node-patches.mjs index d7e15ad4d..ca332ff23 100644 --- a/scripts/generate-node-patches.mjs +++ b/scripts/generate-node-patches.mjs @@ -14,10 +14,10 @@ import { mkdir, writeFile } from 'node:fs/promises' import { dirname, join } from 'node:path' import { fileURLToPath } from 'node:url' -import { spawn } from '@socketsecurity/lib/spawn' -import { getDefaultLogger } from '@socketsecurity/lib/logger' import colors from 'yoctocolors-cjs' +import { getDefaultLogger } from '@socketsecurity/lib/logger' +import { spawn } from '@socketsecurity/lib/spawn' const logger = getDefaultLogger() const __filename = fileURLToPath(import.meta.url) @@ -180,7 +180,10 @@ async function main() { try { patches.push(await generateV8IncludePathsPatch()) } catch (e) { - logger.error(`${colors.red('✗')} Failed to generate V8 include paths patch:`, e.message) + logger.error( + `${colors.red('✗')} Failed to generate V8 include paths patch:`, + e.message, + ) } try { @@ -199,9 +202,7 @@ async function main() { logger.log('') logger.log('📝 Next steps:') logger.log(' 1. Review the generated patches') - logger.log( - ' 2. Update build-yao-pkg-node.mjs to reference new patch files', - ) + logger.log(' 2. Update build-yao-pkg-node.mjs to reference new patch files') logger.log(' 3. Test the build with new patches') logger.log('') } diff --git a/scripts/lib/build-exec.mjs b/scripts/lib/build-exec.mjs index fd25ebbb9..eea8f1c55 100644 --- a/scripts/lib/build-exec.mjs +++ b/scripts/lib/build-exec.mjs @@ -9,7 +9,6 @@ import { spawn } from '@socketsecurity/lib/spawn' import { saveBuildLog } from './build-helpers.mjs' - const logger = getDefaultLogger() /** * Execute a command and stream output. diff --git a/scripts/lib/build-helpers.mjs b/scripts/lib/build-helpers.mjs index 5aeec7cbe..0ebebce9e 100644 --- a/scripts/lib/build-helpers.mjs +++ b/scripts/lib/build-helpers.mjs @@ -7,10 +7,10 @@ import { promises as fs, statfsSync } from 'node:fs' import { join } from 'node:path' -import { spawn } from '@socketsecurity/lib/spawn' -import { getDefaultLogger } from '@socketsecurity/lib/logger' import colors from 'yoctocolors-cjs' +import { getDefaultLogger } from '@socketsecurity/lib/logger' +import { spawn } from '@socketsecurity/lib/spawn' const logger = getDefaultLogger() /** @@ -47,7 +47,8 @@ export async function checkDiskSpace(path) { return { availableGB: Math.floor(availableGB), availableBytes, - sufficient: availableGB >= 5, // Need 5GB for build. + // Need 5GB for build. + sufficient: availableGB >= 5, } } catch (e) { // If we can't check, assume it's fine (don't block builds). @@ -358,7 +359,8 @@ export function estimateBuildTime(cpuCount) { // 4 cores: ~60 min // 2 cores: ~90 min - const baseTime = 300 // 300 seconds for 10 cores. + // 300 seconds for 10 cores. + const baseTime = 300 const adjustedTime = (baseTime * 10) / cpuCount const minutes = Math.round(adjustedTime / 60) @@ -430,11 +432,9 @@ export async function smokeTestBinary(binaryPath, env = {}) { } // Test 2: Execute simple JS. - const jsResult = await execCapture( - binaryPath, - ['-e', 'logger.log("OK")'], - { env }, - ) + const jsResult = await execCapture(binaryPath, ['-e', 'logger.log("OK")'], { + env, + }) if (jsResult.code !== 0 || jsResult.stdout !== 'OK') { return { passed: false, reason: 'JS execution failed' } } @@ -498,7 +498,9 @@ export async function installHomebrew(exec) { logger.log('') return true } catch (e) { - logger.error(`${colors.red('✗')} Homebrew installation failed: ${e.message}`) + logger.error( + `${colors.red('✗')} Homebrew installation failed: ${e.message}`, + ) logger.error('Install manually: https://brew.sh') logger.error() return false @@ -523,7 +525,9 @@ export async function installBrewPackage(packageName, exec) { logger.log('') return true } catch (e) { - logger.error(`${colors.red('✗')} ${packageName} installation failed: ${e.message}`) + logger.error( + `${colors.red('✗')} ${packageName} installation failed: ${e.message}`, + ) logger.error(`Try manually: brew install ${packageName}`) logger.error() return false diff --git a/scripts/lib/build-output.mjs b/scripts/lib/build-output.mjs index 9164119e6..b55de31bb 100644 --- a/scripts/lib/build-output.mjs +++ b/scripts/lib/build-output.mjs @@ -6,7 +6,6 @@ import { getDefaultLogger } from '@socketsecurity/lib/logger' - const logger = getDefaultLogger() /** * Print section header. diff --git a/scripts/lib/patch-validator.mjs b/scripts/lib/patch-validator.mjs index 79302537b..0289689ab 100644 --- a/scripts/lib/patch-validator.mjs +++ b/scripts/lib/patch-validator.mjs @@ -20,9 +20,10 @@ export function parsePatchMetadata(patchContent) { } for (const line of lines) { + // Stop at first non-comment if (!line.startsWith('#')) { break - } // Stop at first non-comment + } // Parse metadata directives. if (line.includes('@node-versions:')) { diff --git a/scripts/lint.mjs b/scripts/lint.mjs index 0b5f72a41..63e730c13 100644 --- a/scripts/lint.mjs +++ b/scripts/lint.mjs @@ -126,8 +126,11 @@ async function main() { // Display what we're linting. if (!quiet) { const modeText = mode === 'all' ? 'all packages' : `${mode} packages` - logger.step(`Linting ${modeText} (${packages.length} package${packages.length > 1 ? 's' : ''})`) - logger.error('') // Blank line. + logger.step( + `Linting ${modeText} (${packages.length} package${packages.length > 1 ? 's' : ''})`, + ) + // Blank line. + logger.error('') } // Run lint across affected packages. diff --git a/scripts/llm/compute-embeddings-pure.mjs b/scripts/llm/compute-embeddings-pure.mjs index b14240227..ec706f3b1 100644 --- a/scripts/llm/compute-embeddings-pure.mjs +++ b/scripts/llm/compute-embeddings-pure.mjs @@ -8,9 +8,9 @@ import path from 'node:path' import { fileURLToPath } from 'node:url' import * as ort from 'onnxruntime-node' -import { getDefaultLogger } from '@socketsecurity/lib/logger' import colors from 'yoctocolors-cjs' +import { getDefaultLogger } from '@socketsecurity/lib/logger' const logger = getDefaultLogger() const __dirname = path.dirname(fileURLToPath(import.meta.url)) diff --git a/scripts/llm/download-minilm.mjs b/scripts/llm/download-minilm.mjs index e5b73b659..0de6b6fe5 100644 --- a/scripts/llm/download-minilm.mjs +++ b/scripts/llm/download-minilm.mjs @@ -27,9 +27,10 @@ import { promises as fs } from 'node:fs' import path from 'node:path' import { fileURLToPath } from 'node:url' -import { getDefaultLogger } from '@socketsecurity/lib/logger' + import colors from 'yoctocolors-cjs' +import { getDefaultLogger } from '@socketsecurity/lib/logger' const logger = getDefaultLogger() const __dirname = path.dirname(fileURLToPath(import.meta.url)) diff --git a/scripts/llm/generate-semantic-index.mjs b/scripts/llm/generate-semantic-index.mjs index 11426d192..7cf5bdc98 100644 --- a/scripts/llm/generate-semantic-index.mjs +++ b/scripts/llm/generate-semantic-index.mjs @@ -28,9 +28,10 @@ import { readFileSync, writeFileSync } from 'node:fs' import path from 'node:path' import { fileURLToPath } from 'node:url' -import { getDefaultLogger } from '@socketsecurity/lib/logger' + import colors from 'yoctocolors-cjs' +import { getDefaultLogger } from '@socketsecurity/lib/logger' const logger = getDefaultLogger() // Get the directory of this script file. @@ -148,7 +149,8 @@ function extractWords(text) { .toLowerCase() .replace(/[^\w\s-]/g, '') .split(/\s+/) - .filter(w => w.length > 2) // Filter short words. + // Filter short words. + .filter(w => w.length > 2) // Canonicalize. return words.map(canonicalize) diff --git a/scripts/llm/generate-skill-embeddings.mjs b/scripts/llm/generate-skill-embeddings.mjs index e81ad8c12..913754f77 100644 --- a/scripts/llm/generate-skill-embeddings.mjs +++ b/scripts/llm/generate-skill-embeddings.mjs @@ -9,9 +9,9 @@ import path from 'node:path' import { fileURLToPath } from 'node:url' import { pipeline } from '@xenova/transformers' -import { getDefaultLogger } from '@socketsecurity/lib/logger' import colors from 'yoctocolors-cjs' +import { getDefaultLogger } from '@socketsecurity/lib/logger' const logger = getDefaultLogger() const __dirname = path.dirname(fileURLToPath(import.meta.url)) diff --git a/scripts/optimize-binary-size.mjs b/scripts/optimize-binary-size.mjs index 07ee41a41..c852c8524 100755 --- a/scripts/optimize-binary-size.mjs +++ b/scripts/optimize-binary-size.mjs @@ -1,4 +1,3 @@ -#!/usr/bin/env node /** * Binary Size Optimization Script * @@ -20,12 +19,12 @@ import { platform as osPlatform } from 'node:os' import path from 'node:path' import { fileURLToPath } from 'node:url' +import colors from 'yoctocolors-cjs' + import { WIN32 } from '@socketsecurity/lib/constants/platform' import { getDefaultLogger } from '@socketsecurity/lib/logger' import { spawn } from '@socketsecurity/lib/spawn' -import colors from 'yoctocolors-cjs' - const logger = getDefaultLogger() const __dirname = path.dirname(fileURLToPath(import.meta.url)) @@ -121,7 +120,7 @@ async function optimizeDarwin(binaryPath) { // strip and llvm-strip already handle this well. const afterSize = await getFileSizeMB(binaryPath) - const savings = ((beforeSize - afterSize) / beforeSize * 100).toFixed(1) + const savings = (((beforeSize - afterSize) / beforeSize) * 100).toFixed(1) logger.log(`\n After: ${afterSize} MB (${savings}% reduction)`) // Re-sign binary if on macOS ARM64 (required). @@ -130,7 +129,11 @@ async function optimizeDarwin(binaryPath) { await exec('codesign', ['--force', '--sign', '-', binaryPath]) } - return { before: parseFloat(beforeSize), after: parseFloat(afterSize), savings: parseFloat(savings) } + return { + before: parseFloat(beforeSize), + after: parseFloat(afterSize), + savings: parseFloat(savings), + } } /** @@ -168,10 +171,14 @@ async function optimizeLinux(binaryPath) { } const afterSize = await getFileSizeMB(binaryPath) - const savings = ((beforeSize - afterSize) / beforeSize * 100).toFixed(1) + const savings = (((beforeSize - afterSize) / beforeSize) * 100).toFixed(1) logger.log(`\n After: ${afterSize} MB (${savings}% reduction)`) - return { before: parseFloat(beforeSize), after: parseFloat(afterSize), savings: parseFloat(savings) } + return { + before: parseFloat(beforeSize), + after: parseFloat(afterSize), + savings: parseFloat(savings), + } } /** @@ -195,10 +202,14 @@ async function optimizeWindows(binaryPath) { } const afterSize = await getFileSizeMB(binaryPath) - const savings = ((beforeSize - afterSize) / beforeSize * 100).toFixed(1) + const savings = (((beforeSize - afterSize) / beforeSize) * 100).toFixed(1) logger.log(`\n After: ${afterSize} MB (${savings}% reduction)`) - return { before: parseFloat(beforeSize), after: parseFloat(afterSize), savings: parseFloat(savings) } + return { + before: parseFloat(beforeSize), + after: parseFloat(afterSize), + savings: parseFloat(savings), + } } /** @@ -268,7 +279,12 @@ async function optimizeAllBinaries() { for (const pkg of packages) { if (pkg.startsWith('socketbin-cli-')) { - const binPath = path.join(packagesDir, pkg, 'bin', file.replace('*', '')) + const binPath = path.join( + packagesDir, + pkg, + 'bin', + file.replace('*', ''), + ) if (existsSync(binPath)) { const stats = await fs.stat(binPath) // Only process actual binaries (>1MB), not placeholders. @@ -305,7 +321,7 @@ async function optimizeAllBinaries() { */ async function main() { logger.log('⚡ Socket CLI Binary Size Optimizer') - logger.log('=' .repeat(50)) + logger.log('='.repeat(50)) let results = [] @@ -319,11 +335,17 @@ async function main() { } else { logger.error(`\n${colors.red('✗')} Error: No binary specified`) logger.log('\nUsage:') - logger.log(' node scripts/optimize-binary-size.mjs [--platform=]') + logger.log( + ' node scripts/optimize-binary-size.mjs [--platform=]', + ) logger.log(' node scripts/optimize-binary-size.mjs --all') logger.log('\nExamples:') - logger.log(' node scripts/optimize-binary-size.mjs packages/socketbin-cli-darwin-arm64/bin/socket') - logger.log(' node scripts/optimize-binary-size.mjs build/out/Release/node --platform=linux') + logger.log( + ' node scripts/optimize-binary-size.mjs packages/socketbin-cli-darwin-arm64/bin/socket', + ) + logger.log( + ' node scripts/optimize-binary-size.mjs build/out/Release/node --platform=linux', + ) logger.log(' node scripts/optimize-binary-size.mjs --all') process.exit(1) } @@ -338,22 +360,29 @@ async function main() { let totalBefore = 0 let totalAfter = 0 - for (const { path: binPath, before, after, savings } of results) { + for (const { after, before, path: binPath, savings } of results) { totalBefore += before totalAfter += after logger.log(` ${path.basename(binPath)}:`) logger.log(` Before: ${before.toFixed(2)} MB`) logger.log(` After: ${after.toFixed(2)} MB`) - logger.log(` Saved: ${(before - after).toFixed(2)} MB (${savings.toFixed(1)}%)`) + logger.log( + ` Saved: ${(before - after).toFixed(2)} MB (${savings.toFixed(1)}%)`, + ) logger.log('') } if (results.length > 1) { - const totalSavings = ((totalBefore - totalAfter) / totalBefore * 100).toFixed(1) + const totalSavings = ( + ((totalBefore - totalAfter) / totalBefore) * + 100 + ).toFixed(1) logger.log(' Total:') logger.log(` Before: ${totalBefore.toFixed(2)} MB`) logger.log(` After: ${totalAfter.toFixed(2)} MB`) - logger.log(` Saved: ${(totalBefore - totalAfter).toFixed(2)} MB (${totalSavings}%)`) + logger.log( + ` Saved: ${(totalBefore - totalAfter).toFixed(2)} MB (${totalSavings}%)`, + ) } logger.log(`\n${colors.green('✓')} All optimizations complete!`) diff --git a/scripts/prepare-package-for-publish.mjs b/scripts/prepare-package-for-publish.mjs index 4e60573e3..4d6a7c600 100644 --- a/scripts/prepare-package-for-publish.mjs +++ b/scripts/prepare-package-for-publish.mjs @@ -1,4 +1,3 @@ -#!/usr/bin/env node /** * @fileoverview Helper script to prepare package.json for publishing. * Handles removing private field and optionally setting version. @@ -12,7 +11,9 @@ const packagePath = args[0] const version = args[1] if (!packagePath) { - console.error('Usage: prepare-package-for-publish.mjs [version]') + console.error( + 'Usage: prepare-package-for-publish.mjs [version]', + ) process.exit(1) } diff --git a/scripts/prepublish-socketbin.mjs b/scripts/prepublish-socketbin.mjs index b2769460b..a575a017b 100644 --- a/scripts/prepublish-socketbin.mjs +++ b/scripts/prepublish-socketbin.mjs @@ -8,11 +8,11 @@ import { promises as fs } from 'node:fs' import path from 'node:path' import { fileURLToPath } from 'node:url' -import { parseArgs } from '@socketsecurity/lib/argv/parse' -import { getDefaultLogger } from '@socketsecurity/lib/logger' import semver from 'semver' import colors from 'yoctocolors-cjs' +import { parseArgs } from '@socketsecurity/lib/argv/parse' +import { getDefaultLogger } from '@socketsecurity/lib/logger' const logger = getDefaultLogger() const __dirname = path.dirname(fileURLToPath(import.meta.url)) @@ -25,11 +25,18 @@ const rootDir = path.join(__dirname, '..') */ function generateDatetimeVersion(platform, arch, tool = 'cli') { // Read base version from the current package being generated. - const basePackagePath = path.join(rootDir, 'packages', `socketbin-${tool}-${platform}-${arch}`, 'package.json') + const basePackagePath = path.join( + rootDir, + 'packages', + `socketbin-${tool}-${platform}-${arch}`, + 'package.json', + ) let baseVersion = '0.0.0' try { - const basePackage = JSON.parse(require('fs').readFileSync(basePackagePath, 'utf-8')) + const basePackage = JSON.parse( + require('node:fs').readFileSync(basePackagePath, 'utf-8'), + ) const version = basePackage.version || '0.0.0' // Extract just the core version (X.Y.Z), ignoring any prerelease/placeholder text. const versionMatch = version.match(/^(\d+\.\d+\.\d+)/) @@ -63,11 +70,11 @@ const { values } = parseArgs({ const { arch, + method: buildMethod = 'smol', outdir, platform, tool = 'cli', version: providedVersion, - method: buildMethod = 'smol', } = values if (!platform || !arch) { diff --git a/scripts/publish.mjs b/scripts/publish.mjs index d8f30db3c..7aebdc0bc 100755 --- a/scripts/publish.mjs +++ b/scripts/publish.mjs @@ -1,4 +1,3 @@ -#!/usr/bin/env node /** * Unified publish script router. @@ -11,7 +10,6 @@ import { WIN32 } from '@socketsecurity/lib/constants/platform' import { getDefaultLogger } from '@socketsecurity/lib/logger' import { spawn } from '@socketsecurity/lib/spawn' - const logger = getDefaultLogger() const TARGET_PACKAGES = { __proto__: null, @@ -28,7 +26,7 @@ const TARGET_PACKAGES = { sea: '@socketbin/node-sea-builder-builder', socket: 'socket', 'win32-arm64': '@socketbin/cli-win32-arm64', - 'win32-x64': '@socketbin/cli-win32-x64' + 'win32-x64': '@socketbin/cli-win32-x64', } const args = process.argv.slice(2) @@ -48,7 +46,9 @@ async function main() { const packageFilter = TARGET_PACKAGES[target] if (!packageFilter) { logger.error(`Unknown publish target: ${target}`) - logger.error(`Available targets: ${Object.keys(TARGET_PACKAGES).join(', ')}`) + logger.error( + `Available targets: ${Object.keys(TARGET_PACKAGES).join(', ')}`, + ) process.exit(1) } @@ -58,12 +58,7 @@ async function main() { logger.log('Note: Packages are published in dependency order by pnpm') } - const pnpmArgs = [ - '--filter', - packageFilter, - 'publish', - ...publishArgs - ] + const pnpmArgs = ['--filter', packageFilter, 'publish', ...publishArgs] logger.log(`Publishing ${target}...`) logger.log(`Command: pnpm ${pnpmArgs.join(' ')}`) diff --git a/scripts/regenerate-node-patches.mjs b/scripts/regenerate-node-patches.mjs index 1ca026734..03f172536 100644 --- a/scripts/regenerate-node-patches.mjs +++ b/scripts/regenerate-node-patches.mjs @@ -18,10 +18,10 @@ import { mkdir, readFile, rm, writeFile } from 'node:fs/promises' import { dirname, join } from 'node:path' import { fileURLToPath } from 'node:url' -import { spawn } from '@socketsecurity/lib/spawn' -import { getDefaultLogger } from '@socketsecurity/lib/logger' import colors from 'yoctocolors-cjs' +import { getDefaultLogger } from '@socketsecurity/lib/logger' +import { spawn } from '@socketsecurity/lib/spawn' const logger = getDefaultLogger() const __filename = fileURLToPath(import.meta.url) @@ -40,7 +40,9 @@ if (!versionArg) { const NODE_VERSION = versionArg.split('=')[1] if (!NODE_VERSION.startsWith('v')) { - logger.error(`${colors.red('✗')} Version must start with "v" (e.g., v24.10.0)`) + logger.error( + `${colors.red('✗')} Version must start with "v" (e.g., v24.10.0)`, + ) process.exit(1) } @@ -269,7 +271,9 @@ async function main() { logger.log(' 3. Update SOCKET_PATCHES array with new filenames') logger.log(' 4. Test the build') } else { - logger.log(`${colors.yellow('⚠')} No patches were generated (no changes detected)`) + logger.log( + `${colors.yellow('⚠')} No patches were generated (no changes detected)`, + ) } logger.log('') diff --git a/scripts/setup-build-toolchain.mjs b/scripts/setup-build-toolchain.mjs index 5586a525e..31b2b55ad 100755 --- a/scripts/setup-build-toolchain.mjs +++ b/scripts/setup-build-toolchain.mjs @@ -1,4 +1,3 @@ -#!/usr/bin/env node /** * Automatic Build Toolchain Setup Script * @@ -29,9 +28,10 @@ import { mkdir, writeFile } from 'node:fs/promises' import { homedir, platform as osPlatform, tmpdir } from 'node:os' import path from 'node:path' import { fileURLToPath } from 'node:url' -import { getDefaultLogger } from '@socketsecurity/lib/logger' + import colors from 'yoctocolors-cjs' +import { getDefaultLogger } from '@socketsecurity/lib/logger' const logger = getDefaultLogger() const __filename = fileURLToPath(import.meta.url) @@ -40,10 +40,14 @@ const __dirname = path.dirname(__filename) // Parse arguments. const args = process.argv.slice(2) const CHECK_ONLY = args.includes('--check-only') -const INSTALL_EMSCRIPTEN = args.includes('--emscripten') || !args.some(a => a.startsWith('--')) -const INSTALL_RUST = args.includes('--rust') || !args.some(a => a.startsWith('--')) -const INSTALL_PYTHON = args.includes('--python') || !args.some(a => a.startsWith('--')) -const INSTALL_COMPILER = args.includes('--compiler') || !args.some(a => a.startsWith('--')) +const INSTALL_EMSCRIPTEN = + args.includes('--emscripten') || !args.some(a => a.startsWith('--')) +const INSTALL_RUST = + args.includes('--rust') || !args.some(a => a.startsWith('--')) +const INSTALL_PYTHON = + args.includes('--python') || !args.some(a => a.startsWith('--')) +const INSTALL_COMPILER = + args.includes('--compiler') || !args.some(a => a.startsWith('--')) const FORCE_INSTALL = args.includes('--force') const QUIET = args.includes('--quiet') @@ -62,7 +66,7 @@ const PLATFORM = osPlatform() * Log with color support. */ function log(message, color = '') { - if (QUIET && !color.includes('red')) return + if (QUIET && !color.includes('red')) {return} const colors = { red: '\x1b[31m', @@ -155,7 +159,7 @@ function checkEmscripten() { for (const emsdkPath of possiblePaths) { const emsdkEnv = path.join( emsdkPath, - PLATFORM === 'win32' ? 'emsdk_env.bat' : 'emsdk_env.sh' + PLATFORM === 'win32' ? 'emsdk_env.bat' : 'emsdk_env.sh', ) if (existsSync(emsdkEnv)) { @@ -181,7 +185,8 @@ async function installEmscripten() { logInfo('Installing Emscripten SDK...') const emsdkPath = path.join(homedir(), '.emsdk') - const emsdkVersion = '3.1.70' // Pinned version for reproducibility. + // Pinned version for reproducibility. + const emsdkVersion = '3.1.70' try { // Clone emsdk if not exists. @@ -189,7 +194,7 @@ async function installEmscripten() { logInfo(`Cloning emsdk to ${emsdkPath}...`) if ( !exec( - `git clone https://github.com/emscripten-core/emsdk.git "${emsdkPath}"` + `git clone https://github.com/emscripten-core/emsdk.git "${emsdkPath}"`, ) ) { logError('Failed to clone emsdk') @@ -200,7 +205,7 @@ async function installEmscripten() { // Install and activate specific version. const emsdkCmd = path.join( emsdkPath, - PLATFORM === 'win32' ? 'emsdk.bat' : 'emsdk' + PLATFORM === 'win32' ? 'emsdk.bat' : 'emsdk', ) logInfo(`Installing Emscripten ${emsdkVersion}...`) @@ -220,7 +225,7 @@ async function installEmscripten() { await writeFile( activateScript, `#!/bin/bash\nsource "${emsdkPath}/emsdk_env.sh"\n`, - { mode: 0o755 } + { mode: 0o755 }, ) logSuccess('Emscripten SDK installed successfully') @@ -311,7 +316,7 @@ async function installRust() { if (PLATFORM === 'win32') { logInfo('Download Rust from: https://rustup.rs/') logError( - 'Automatic Rust installation not supported on Windows via script' + 'Automatic Rust installation not supported on Windows via script', ) logInfo('Please install manually and run this script again') return false @@ -320,7 +325,7 @@ async function installRust() { logInfo('Installing Rust via rustup...') if ( !exec( - 'curl --proto "=https" --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y' + 'curl --proto "=https" --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y', ) ) { logError('Failed to install Rust') @@ -347,7 +352,7 @@ async function installRust() { exec('brew install wasm-pack') } else if ( !exec( - 'curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh' + 'curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh', ) ) { logError('Failed to install wasm-pack') @@ -430,7 +435,8 @@ async function installPackageManager() { log('') // Install Homebrew using official installation script. - const installCmd = '/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"' + const installCmd = + '/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"' if (!exec(installCmd)) { logError('Failed to install Homebrew') @@ -456,11 +462,14 @@ async function installPackageManager() { log('') // Install Chocolatey using official PowerShell script. - const installCmd = 'powershell -NoProfile -ExecutionPolicy Bypass -Command "Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString(\'https://community.chocolatey.org/install.ps1\'))"' + const installCmd = + 'powershell -NoProfile -ExecutionPolicy Bypass -Command "Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString(\'https://community.chocolatey.org/install.ps1\'))"' if (!exec(installCmd)) { logError('Failed to install Chocolatey') - logInfo('Visit https://chocolatey.org/install for manual installation instructions') + logInfo( + 'Visit https://chocolatey.org/install for manual installation instructions', + ) return false } @@ -473,7 +482,7 @@ async function installPackageManager() { if (PLATFORM === 'linux') { logError('Linux package managers (apt-get/yum) should be pre-installed') - logInfo('Please install your distribution\'s package manager manually') + logInfo("Please install your distribution's package manager manually") return false } @@ -742,7 +751,7 @@ async function installCompiler() { logError('Chocolatey not found') logInfo( - 'Install Visual Studio Build Tools from: https://visualstudio.microsoft.com/downloads/' + 'Install Visual Studio Build Tools from: https://visualstudio.microsoft.com/downloads/', ) return false } @@ -895,7 +904,6 @@ async function installBuildTools() { } } - /** * Main entry point. */ @@ -906,8 +914,8 @@ async function main() { logInfo(`Platform: ${PLATFORM}`) logInfo(`CI Environment: ${IS_CI ? 'Yes' : 'No'}`) - if (IS_GITHUB_ACTIONS) logInfo('GitHub Actions detected') - if (IS_DOCKER) logInfo('Docker environment detected') + if (IS_GITHUB_ACTIONS) {logInfo('GitHub Actions detected')} + if (IS_DOCKER) {logInfo('Docker environment detected')} log('') // Check package manager FIRST - required for all subsequent installations. diff --git a/scripts/setup-monorepo.mjs b/scripts/setup-monorepo.mjs index 2cf4bbb4b..ee66872c2 100644 --- a/scripts/setup-monorepo.mjs +++ b/scripts/setup-monorepo.mjs @@ -1,4 +1,3 @@ -#!/usr/bin/env node /** * Setup monorepo structure for Socket CLI. * @@ -11,9 +10,10 @@ import { existsSync, promises as fs } from 'node:fs' import path from 'node:path' import { fileURLToPath } from 'node:url' -import { getDefaultLogger } from '@socketsecurity/lib/logger' + import colors from 'yoctocolors-cjs' +import { getDefaultLogger } from '@socketsecurity/lib/logger' const logger = getDefaultLogger() const __dirname = path.dirname(fileURLToPath(import.meta.url)) diff --git a/scripts/setup.mjs b/scripts/setup.mjs index c8f46e826..8847e7aaa 100644 --- a/scripts/setup.mjs +++ b/scripts/setup.mjs @@ -1,4 +1,3 @@ -#!/usr/bin/env node /** * @fileoverview Developer setup script - checks prerequisites and prepares environment. * @@ -34,9 +33,10 @@ import { existsSync } from 'node:fs' import { mkdir } from 'node:fs/promises' -import { spawn } from '@socketsecurity/lib/spawn' + import { WIN32 } from '@socketsecurity/lib/constants/platform' import { getDefaultLogger } from '@socketsecurity/lib/logger' +import { spawn } from '@socketsecurity/lib/spawn' const logger = getDefaultLogger() @@ -105,7 +105,7 @@ async function getVersion(command, args = ['--version']) { */ function parseVersion(versionString) { const match = versionString.match(/(\d+)\.(\d+)\.(\d+)/) - if (!match) return null + if (!match) {return null} return { major: Number.parseInt(match[1], 10), minor: Number.parseInt(match[2], 10), @@ -118,9 +118,9 @@ function parseVersion(versionString) { * Returns: -1 if a < b, 0 if a === b, 1 if a > b */ function compareVersions(a, b) { - if (a.major !== b.major) return a.major < b.major ? -1 : 1 - if (a.minor !== b.minor) return a.minor < b.minor ? -1 : 1 - if (a.patch !== b.patch) return a.patch < b.patch ? -1 : 1 + if (a.major !== b.major) {return a.major < b.major ? -1 : 1} + if (a.minor !== b.minor) {return a.minor < b.minor ? -1 : 1} + if (a.patch !== b.patch) {return a.patch < b.patch ? -1 : 1} return 0 } @@ -136,7 +136,8 @@ async function installHomebrew() { logger.step('Installing Homebrew...') logger.info('This requires sudo access and may take a few minutes') - const installScript = '/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"' + const installScript = + '/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"' const result = await spawn('bash', ['-c', installScript], { stdio: 'inherit', @@ -163,7 +164,8 @@ async function installChocolatey() { logger.step('Installing Chocolatey...') logger.info('This requires admin access and may take a few minutes') - const installScript = 'Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString(\'https://community.chocolatey.org/install.ps1\'))' + const installScript = + "Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))" const result = await spawn('powershell', ['-Command', installScript], { stdio: 'inherit', @@ -183,7 +185,7 @@ async function installChocolatey() { * Install a package using Homebrew (macOS/Linux). */ async function installWithHomebrew(packageName) { - if (!await hasCommand('brew')) { + if (!(await hasCommand('brew'))) { logger.error('Homebrew not available') return false } @@ -207,7 +209,7 @@ async function installWithHomebrew(packageName) { * Install a package using Chocolatey (Windows). */ async function installWithChocolatey(packageName) { - if (!await hasCommand('choco')) { + if (!(await hasCommand('choco'))) { logger.error('Chocolatey not available') return false } @@ -248,14 +250,16 @@ async function ensureGhCli() { // Auto-install mode. if (WIN32) { // Windows: Try Chocolatey. - if (!await hasCommand('choco')) { + if (!(await hasCommand('choco'))) { logger.info('Chocolatey not found (needed for auto-install on Windows)') logger.log('Attempting to install Chocolatey...') const installed = await installChocolatey() if (!installed) { logger.warn('Could not install Chocolatey') logger.info('Install gh CLI manually from: https://cli.github.com/') - logger.info('Or install Chocolatey from: https://chocolatey.org/install') + logger.info( + 'Or install Chocolatey from: https://chocolatey.org/install', + ) return false } } @@ -281,7 +285,7 @@ async function ensureGhCli() { } // macOS/Linux: Try Homebrew. - if (!await hasCommand('brew')) { + if (!(await hasCommand('brew'))) { logger.info('Homebrew not found (needed for auto-install)') logger.log('Attempting to install Homebrew...') const installed = await installHomebrew() @@ -315,7 +319,12 @@ async function ensureGhCli() { /** * Check prerequisite. */ -async function checkPrerequisite({ command, minVersion, name, required = true }) { +async function checkPrerequisite({ + command, + minVersion, + name, + required = true, +}) { const version = await getVersion(command) if (!version) { @@ -369,7 +378,7 @@ async function restoreCache(hasGh) { ['--filter', '@socketsecurity/cli', 'run', 'restore-cache', '--quiet'], { stdio: 'inherit', - } + }, ) if (result.code === 0) { @@ -459,7 +468,9 @@ async function main() { } if (!nodeOk || !pnpmOk) { - logger.error('Required prerequisites missing. Please install and try again.') + logger.error( + 'Required prerequisites missing. Please install and try again.', + ) if (!quiet) { logger.log('') } @@ -498,9 +509,11 @@ async function main() { return 0 } -main().then(code => { - process.exit(code) -}).catch(error => { - logger.error(error.message) - process.exit(1) -}) +main() + .then(code => { + process.exit(code) + }) + .catch(error => { + logger.error(error.message) + process.exit(1) + }) diff --git a/scripts/test-monorepo.mjs b/scripts/test-monorepo.mjs index bf1f3be24..d016ddc1b 100644 --- a/scripts/test-monorepo.mjs +++ b/scripts/test-monorepo.mjs @@ -3,21 +3,22 @@ * Runs tests across affected packages based on changed files. */ +import colors from 'yoctocolors-cjs' + import { isQuiet } from '@socketsecurity/lib/argv/flags' import { parseArgs } from '@socketsecurity/lib/argv/parse' +import { WIN32 } from '@socketsecurity/lib/constants/platform' import { getChangedFiles, getStagedFiles } from '@socketsecurity/lib/git' import { getDefaultLogger } from '@socketsecurity/lib/logger' import { onExit } from '@socketsecurity/lib/signal-exit' -import { ProgressBar } from '@socketsecurity/lib/stdio/progress' +import { isSpawnError, spawn } from '@socketsecurity/lib/spawn' import { printHeader } from '@socketsecurity/lib/stdio/header' -import colors from 'yoctocolors-cjs' +import { ProgressBar } from '@socketsecurity/lib/stdio/progress' import { getAffectedPackages, getPackagesWithScript, } from './utils/monorepo-helper.mjs' -import { WIN32 } from '@socketsecurity/lib/constants/platform' -import { isSpawnError, spawn } from '@socketsecurity/lib/spawn' const logger = getDefaultLogger() @@ -74,7 +75,12 @@ async function getPackagesToTest(options) { /** * Run tests on a specific package with pretty output. */ -async function runPackageTest(pkg, testArgs = [], quiet = false, showProgress = true) { +async function runPackageTest( + pkg, + testArgs = [], + quiet = false, + showProgress = true, +) { const displayName = pkg.displayName || pkg.name if (!quiet && showProgress) { @@ -193,7 +199,8 @@ async function main() { logger.step( `Testing ${modeText} (${packages.length} package${packages.length > 1 ? 's' : ''})`, ) - logger.error('') // Blank line. + // Blank line. + logger.error('') } // Setup progress bar. @@ -229,7 +236,12 @@ async function main() { progressBar.update(completedCount, { pkg: colors.cyan(displayName) }) } - const result = await runPackageTest(pkg, positionals, quiet, !useProgressBar) + const result = await runPackageTest( + pkg, + positionals, + quiet, + !useProgressBar, + ) if (progressBar) { completedCount++ diff --git a/scripts/test-with-custom-node.mjs b/scripts/test-with-custom-node.mjs index c4a96ad44..ea54f9fc0 100755 --- a/scripts/test-with-custom-node.mjs +++ b/scripts/test-with-custom-node.mjs @@ -19,7 +19,6 @@ import { fileURLToPath } from 'node:url' import { getDefaultLogger } from '@socketsecurity/lib/logger' import { spawn } from '@socketsecurity/lib/spawn' - const logger = getDefaultLogger() const __filename = fileURLToPath(import.meta.url) const __dirname = dirname(__filename) diff --git a/scripts/test.mjs b/scripts/test.mjs index b202d3430..c0b6524c0 100644 --- a/scripts/test.mjs +++ b/scripts/test.mjs @@ -46,7 +46,13 @@ const nodeModulesBinPath = path.join(rootPath, 'node_modules', '.bin') */ function hasExternalRepos() { const libPath = path.join(rootPath, '..', 'socket-lib', 'package.json') - const registryPath = path.join(rootPath, '..', 'socket-registry', 'registry', 'package.json') + const registryPath = path.join( + rootPath, + '..', + 'socket-registry', + 'registry', + 'package.json', + ) return existsSync(libPath) || existsSync(registryPath) } @@ -193,13 +199,9 @@ async function runCheck() { // Run TypeScript check const tsConfigPath = getTsConfigPath() spinner.start('Checking TypeScript...') - exitCode = await runCommand( - 'tsgo', - ['--noEmit', '-p', tsConfigPath], - { - stdio: 'pipe', - }, - ) + exitCode = await runCommand('tsgo', ['--noEmit', '-p', tsConfigPath], { + stdio: 'pipe', + }) if (exitCode !== 0) { spinner.stop() logger.error('TypeScript check failed') @@ -401,9 +403,7 @@ async function main() { ' pnpm test # Run checks, build, and tests for changed files', ) logger.log(' pnpm test --all # Run all tests') - logger.log( - ' pnpm test --fast # Skip checks for quick testing', - ) + logger.log(' pnpm test --fast # Skip checks for quick testing') logger.log(' pnpm test --cover # Run with coverage report') logger.log(' pnpm test --fast --cover # Quick test with coverage') logger.log(' pnpm test --update # Update test snapshots') diff --git a/scripts/type.mjs b/scripts/type.mjs index 03946d23e..0b9597678 100644 --- a/scripts/type.mjs +++ b/scripts/type.mjs @@ -3,17 +3,17 @@ * Runs type checking across packages with pretty UI. */ +import colors from 'yoctocolors-cjs' + import { isQuiet } from '@socketsecurity/lib/argv/flags' import { parseArgs } from '@socketsecurity/lib/argv/parse' import { WIN32 } from '@socketsecurity/lib/constants/platform' import { getDefaultLogger } from '@socketsecurity/lib/logger' import { spawn } from '@socketsecurity/lib/spawn' import { printFooter, printHeader } from '@socketsecurity/lib/stdio/header' -import colors from 'yoctocolors-cjs' import { getPackagesWithScript } from './utils/monorepo-helper.mjs' - const logger = getDefaultLogger() /** * Run type check on a specific package with pretty output. @@ -25,16 +25,12 @@ async function runPackageTypeCheck(pkg, quiet = false) { logger.progress(`${displayName}: checking types`) } - const result = await spawn( - 'pnpm', - ['--filter', pkg.name, 'run', 'type'], - { - cwd: process.cwd(), - shell: WIN32, - stdio: 'pipe', - stdioString: true, - }, - ) + const result = await spawn('pnpm', ['--filter', pkg.name, 'run', 'type'], { + cwd: process.cwd(), + shell: WIN32, + stdio: 'pipe', + stdioString: true, + }) if (result.code !== 0) { if (!quiet) { @@ -109,7 +105,8 @@ async function main() { logger.step( `Type checking ${packages.length} package${packages.length > 1 ? 's' : ''}`, ) - logger.error('') // Blank line. + // Blank line. + logger.error('') } // Run type check across all packages. diff --git a/scripts/update-socketbin-versions.mjs b/scripts/update-socketbin-versions.mjs index c50808781..7ec86319a 100755 --- a/scripts/update-socketbin-versions.mjs +++ b/scripts/update-socketbin-versions.mjs @@ -1,4 +1,3 @@ -#!/usr/bin/env node /** * @fileoverview Update optionalDependencies in socket package.json with latest @socketbin/* versions from npm. */ @@ -69,9 +68,7 @@ async function main() { }) pkg.optionalDependencies[packageName] = latestVersion - console.log( - ` ${packageName}: ${currentVersion} → ${latestVersion}`, - ) + console.log(` ${packageName}: ${currentVersion} → ${latestVersion}`) } // Write updated package.json. diff --git a/scripts/update.mjs b/scripts/update.mjs index 338bced2f..e3fb323d5 100644 --- a/scripts/update.mjs +++ b/scripts/update.mjs @@ -12,8 +12,8 @@ */ import { isQuiet, isVerbose } from '@socketsecurity/lib/argv/flags' -import { getDefaultLogger } from '@socketsecurity/lib/logger' import { WIN32 } from '@socketsecurity/lib/constants/platform' +import { getDefaultLogger } from '@socketsecurity/lib/logger' import { spawn } from '@socketsecurity/lib/spawn' async function main() { diff --git a/scripts/utils/changed-test-mapper.mjs b/scripts/utils/changed-test-mapper.mjs index 49c19b99d..16eb9a28d 100644 --- a/scripts/utils/changed-test-mapper.mjs +++ b/scripts/utils/changed-test-mapper.mjs @@ -108,7 +108,10 @@ function mapSourceToTests(filepath) { } // External or fixtures changes - if (normalized.startsWith('external/') || normalized.startsWith('fixtures/')) { + if ( + normalized.startsWith('external/') || + normalized.startsWith('fixtures/') + ) { return ['packages/cli/test/integration/'] } diff --git a/scripts/utils/monorepo-helper.mjs b/scripts/utils/monorepo-helper.mjs index 22da3c15f..268c0cedf 100644 --- a/scripts/utils/monorepo-helper.mjs +++ b/scripts/utils/monorepo-helper.mjs @@ -6,11 +6,11 @@ import { existsSync, readFileSync } from 'node:fs' import path from 'node:path' +import colors from 'yoctocolors-cjs' + import { WIN32 } from '@socketsecurity/lib/constants/platform' import { getDefaultLogger } from '@socketsecurity/lib/logger' import { spawn } from '@socketsecurity/lib/spawn' -import colors from 'yoctocolors-cjs' - const logger = getDefaultLogger() /** @@ -112,7 +112,13 @@ export function getAffectedPackages(changedFiles) { * @param {string} [progressMessage] - Optional custom progress message * @returns {Promise} Exit code */ -export async function runPackageScript(pkg, scriptName, args = [], quiet = false, progressMessage = '') { +export async function runPackageScript( + pkg, + scriptName, + args = [], + quiet = false, + progressMessage = '', +) { const displayName = pkg.displayName || pkg.name if (!quiet) { @@ -162,7 +168,13 @@ export async function runPackageScript(pkg, scriptName, args = [], quiet = false * @param {string} [sectionTitle] - Optional section title to use as progress message * @returns {Promise} Exit code (0 if all succeed, first failure code otherwise) */ -export async function runAcrossPackages(packages, scriptName, args = [], quiet = false, sectionTitle = '') { +export async function runAcrossPackages( + packages, + scriptName, + args = [], + quiet = false, + sectionTitle = '', +) { if (!packages.length) { if (!quiet) { logger.substep('No packages to process') @@ -171,8 +183,15 @@ export async function runAcrossPackages(packages, scriptName, args = [], quiet = } for (const pkg of packages) { - const progressMessage = sectionTitle || `${pkg.displayName || pkg.name}: running ${scriptName}` - const exitCode = await runPackageScript(pkg, scriptName, args, quiet, progressMessage) + const progressMessage = + sectionTitle || `${pkg.displayName || pkg.name}: running ${scriptName}` + const exitCode = await runPackageScript( + pkg, + scriptName, + args, + quiet, + progressMessage, + ) if (exitCode !== 0) { return exitCode } diff --git a/scripts/validate-bundle-deps.mjs b/scripts/validate-bundle-deps.mjs index 6a9298ce8..4adc7c037 100644 --- a/scripts/validate-bundle-deps.mjs +++ b/scripts/validate-bundle-deps.mjs @@ -30,9 +30,7 @@ const BUILTIN_MODULES = new Set([ // Packages that are marked external but are excused from validation. // These are packages referenced in bundled code that's never actually called. -const EXCUSED_EXTERNALS = new Set([ - 'node-gyp', -]) +const EXCUSED_EXTERNALS = new Set(['node-gyp']) /** * Find all JavaScript files in dist directory. @@ -236,7 +234,7 @@ async function isDirectDependency(packageName, devDependencies) { // For scoped packages: from '@scope/package' or from "@scope/package" const importPattern = new RegExp( `from\\s+['"]${packageName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}(?:['"/]|$)`, - 'm' + 'm', ) if (importPattern.test(content)) { return true diff --git a/scripts/validate-file-count.mjs b/scripts/validate-file-count.mjs index cba047b0b..4a4d75d3e 100644 --- a/scripts/validate-file-count.mjs +++ b/scripts/validate-file-count.mjs @@ -1,4 +1,3 @@ -#!/usr/bin/env node /** * @fileoverview Validates that commits don't contain too many files. * @@ -8,20 +7,21 @@ * - Prevents overly large commits that are hard to review */ -import { exec } from 'node:child_process'; -import path from 'node:path'; -import { promisify } from 'node:util'; -import { fileURLToPath } from 'node:url'; -import { getDefaultLogger } from '@socketsecurity/lib/logger'; +import { exec } from 'node:child_process' +import path from 'node:path' +import { fileURLToPath } from 'node:url' +import { promisify } from 'node:util' -const logger = getDefaultLogger(); -const execAsync = promisify(exec); +import { getDefaultLogger } from '@socketsecurity/lib/logger' -const __dirname = path.dirname(fileURLToPath(import.meta.url)); -const rootPath = path.join(__dirname, '..'); +const logger = getDefaultLogger() +const execAsync = promisify(exec) + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) +const rootPath = path.join(__dirname, '..') // Maximum number of files in a single commit -const MAX_FILES_PER_COMMIT = 50; +const MAX_FILES_PER_COMMIT = 50 /** * Check if too many files are staged for commit. @@ -29,79 +29,85 @@ const MAX_FILES_PER_COMMIT = 50; async function validateStagedFileCount() { try { // Check if we're in a git repository - const { stdout: gitRoot } = await execAsync('git rev-parse --show-toplevel', { - cwd: rootPath, - }); + const { stdout: gitRoot } = await execAsync( + 'git rev-parse --show-toplevel', + { + cwd: rootPath, + }, + ) if (!gitRoot.trim()) { - return null; // Not a git repository + // Not a git repository + return null } // Get list of staged files - const { stdout } = await execAsync('git diff --cached --name-only', { cwd: rootPath }); + const { stdout } = await execAsync('git diff --cached --name-only', { + cwd: rootPath, + }) const stagedFiles = stdout .trim() .split('\n') - .filter(line => line.length > 0); + .filter(line => line.length > 0) if (stagedFiles.length >= MAX_FILES_PER_COMMIT) { return { count: stagedFiles.length, files: stagedFiles, limit: MAX_FILES_PER_COMMIT, - }; + } } - return null; + return null } catch { // Not a git repo or git not available - return null; + return null } } async function main() { try { - const violation = await validateStagedFileCount(); + const violation = await validateStagedFileCount() if (!violation) { - logger.success('Commit size is acceptable'); - process.exitCode = 0; - return; + logger.success('Commit size is acceptable') + process.exitCode = 0 + return } - logger.fail('Too many files staged for commit'); - logger.log(''); - logger.log(`Staged files: ${violation.count}`); - logger.log(`Maximum allowed: ${violation.limit}`); - logger.log(''); - logger.log('Staged files:'); - logger.log(''); + logger.fail('Too many files staged for commit') + logger.log('') + logger.log(`Staged files: ${violation.count}`) + logger.log(`Maximum allowed: ${violation.limit}`) + logger.log('') + logger.log('Staged files:') + logger.log('') // Show first 20 files, then summary if more - const filesToShow = violation.files.slice(0, 20); + const filesToShow = violation.files.slice(0, 20) for (const file of filesToShow) { - logger.log(` ${file}`); + logger.log(` ${file}`) } if (violation.files.length > 20) { - logger.log(` ... and ${violation.files.length - 20} more files`); + logger.log(` ... and ${violation.files.length - 20} more files`) } - logger.log(''); + logger.log('') logger.log( 'Split into smaller commits, check for accidentally staged files, or exclude generated files.', - ); - logger.log(''); + ) + logger.log('') - process.exitCode = 1; + process.exitCode = 1 } catch (error) { - logger.fail(`Validation failed: ${error.message}`); - process.exitCode = 1; + logger.fail(`Validation failed: ${error.message}`) + process.exitCode = 1 } } main().catch(error => { - logger.fail(`Validation failed: ${error}`); - process.exitCode = 1; -}); + logger.fail(`Validation failed: ${error}`) + process.exitCode = 1 +}) diff --git a/scripts/validate-file-size.mjs b/scripts/validate-file-size.mjs index 1eaaae288..7ec974857 100644 --- a/scripts/validate-file-size.mjs +++ b/scripts/validate-file-size.mjs @@ -1,4 +1,3 @@ -#!/usr/bin/env node /** * @fileoverview Validates that no individual files exceed size threshold. * @@ -8,18 +7,20 @@ * - Excludes: node_modules, .git, dist, build, coverage directories */ -import { promises as fs } from 'node:fs'; -import path from 'node:path'; -import { fileURLToPath } from 'node:url'; -import { getDefaultLogger } from '@socketsecurity/lib/logger'; +import { promises as fs } from 'node:fs' +import path from 'node:path' +import { fileURLToPath } from 'node:url' -const logger = getDefaultLogger(); +import { getDefaultLogger } from '@socketsecurity/lib/logger' -const __dirname = path.dirname(fileURLToPath(import.meta.url)); -const rootPath = path.join(__dirname, '..'); +const logger = getDefaultLogger() + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) +const rootPath = path.join(__dirname, '..') // Maximum file size: 2MB -const MAX_FILE_SIZE = 2 * 1024 * 1024; // 2,097,152 bytes +// 2,097,152 bytes +const MAX_FILE_SIZE = 2 * 1024 * 1024 // Directories to skip const SKIP_DIRS = new Set([ @@ -37,17 +38,17 @@ const SKIP_DIRS = new Set([ '.vscode', 'tmp', 'external', -]); +]) /** * Format bytes to human-readable size. */ function formatBytes(bytes) { - if (bytes === 0) return '0 B'; - const k = 1024; - const sizes = ['B', 'KB', 'MB', 'GB']; - const i = Math.floor(Math.log(bytes) / Math.log(k)); - return `${(bytes / Math.pow(k, i)).toFixed(2)} ${sizes[i]}`; + if (bytes === 0) {return '0 B'} + const k = 1024 + const sizes = ['B', 'KB', 'MB', 'GB'] + const i = Math.floor(Math.log(bytes) / Math.log(k)) + return `${(bytes / Math.pow(k, i)).toFixed(2)} ${sizes[i]}` } /** @@ -55,10 +56,10 @@ function formatBytes(bytes) { */ async function scanDirectory(dir, violations = []) { try { - const entries = await fs.readdir(dir, { withFileTypes: true }); + const entries = await fs.readdir(dir, { withFileTypes: true }) for (const entry of entries) { - const fullPath = path.join(dir, entry.name); + const fullPath = path.join(dir, entry.name) if (entry.isDirectory()) { // Skip excluded directories and hidden directories (except .claude, .config, .github) @@ -69,19 +70,19 @@ async function scanDirectory(dir, violations = []) { entry.name === '.config' || entry.name === '.github') ) { - await scanDirectory(fullPath, violations); + await scanDirectory(fullPath, violations) } } else if (entry.isFile()) { try { - const stats = await fs.stat(fullPath); + const stats = await fs.stat(fullPath) if (stats.size > MAX_FILE_SIZE) { - const relativePath = path.relative(rootPath, fullPath); + const relativePath = path.relative(rootPath, fullPath) violations.push({ file: relativePath, size: stats.size, formattedSize: formatBytes(stats.size), maxSize: formatBytes(MAX_FILE_SIZE), - }); + }) } } catch { // Skip files we can't stat @@ -92,58 +93,60 @@ async function scanDirectory(dir, violations = []) { // Skip directories we can't read } - return violations; + return violations } /** * Validate file sizes in repository. */ async function validateFileSizes() { - const violations = await scanDirectory(rootPath); + const violations = await scanDirectory(rootPath) // Sort by size descending (largest first) - violations.sort((a, b) => b.size - a.size); + violations.sort((a, b) => b.size - a.size) - return violations; + return violations } async function main() { try { - const violations = await validateFileSizes(); + const violations = await validateFileSizes() if (violations.length === 0) { - logger.success('All files are within size limits'); - process.exitCode = 0; - return; + logger.success('All files are within size limits') + process.exitCode = 0 + return } - logger.fail('File size violations found'); - logger.log(''); - logger.log(`Maximum allowed file size: ${formatBytes(MAX_FILE_SIZE)}`); - logger.log(''); - logger.log('Files exceeding limit:'); - logger.log(''); + logger.fail('File size violations found') + logger.log('') + logger.log(`Maximum allowed file size: ${formatBytes(MAX_FILE_SIZE)}`) + logger.log('') + logger.log('Files exceeding limit:') + logger.log('') for (const violation of violations) { - logger.log(` ${violation.file}`); - logger.log(` Size: ${violation.formattedSize}`); - logger.log(` Exceeds limit by: ${formatBytes(violation.size - MAX_FILE_SIZE)}`); - logger.log(''); + logger.log(` ${violation.file}`) + logger.log(` Size: ${violation.formattedSize}`) + logger.log( + ` Exceeds limit by: ${formatBytes(violation.size - MAX_FILE_SIZE)}`, + ) + logger.log('') } logger.log( 'Reduce file sizes, move large files to external storage, or exclude from repository.', - ); - logger.log(''); + ) + logger.log('') - process.exitCode = 1; + process.exitCode = 1 } catch (error) { - logger.fail(`Validation failed: ${error.message}`); - process.exitCode = 1; + logger.fail(`Validation failed: ${error.message}`) + process.exitCode = 1 } } main().catch(error => { - logger.fail(`Validation failed: ${error}`); - process.exitCode = 1; -}); + logger.fail(`Validation failed: ${error}`) + process.exitCode = 1 +}) diff --git a/scripts/validate-markdown-filenames.mjs b/scripts/validate-markdown-filenames.mjs index 42b75573d..b594b476d 100644 --- a/scripts/validate-markdown-filenames.mjs +++ b/scripts/validate-markdown-filenames.mjs @@ -1,4 +1,3 @@ -#!/usr/bin/env node /** * @fileoverview Validates that markdown files follow naming conventions. * @@ -17,15 +16,16 @@ * - NOT be at root level */ -import { promises as fs } from 'node:fs'; -import path from 'node:path'; -import { fileURLToPath } from 'node:url'; -import { getDefaultLogger } from '@socketsecurity/lib/logger'; +import { promises as fs } from 'node:fs' +import path from 'node:path' +import { fileURLToPath } from 'node:url' -const logger = getDefaultLogger(); +import { getDefaultLogger } from '@socketsecurity/lib/logger' -const __dirname = path.dirname(fileURLToPath(import.meta.url)); -const rootPath = path.join(__dirname, '..'); +const logger = getDefaultLogger() + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) +const rootPath = path.join(__dirname, '..') // Allowed SCREAMING_CASE markdown files (without .md extension for comparison) const ALLOWED_SCREAMING_CASE = new Set([ @@ -177,8 +177,13 @@ function validateFilename(filePath) { const relativePath = path.relative(rootPath, filePath) // README.md, CHANGELOG.md, and LICENSE are special - allowed anywhere - if (nameWithoutExt === 'README' || nameWithoutExt === 'CHANGELOG' || nameWithoutExt === 'LICENSE') { - return null // Valid - allowed in any location + if ( + nameWithoutExt === 'README' || + nameWithoutExt === 'CHANGELOG' || + nameWithoutExt === 'LICENSE' + ) { + // Valid - allowed in any location + return null } // Check if it's an allowed SCREAMING_CASE file @@ -192,7 +197,8 @@ function validateFilename(filePath) { suggestion: `Move to root, docs/, or .claude/, or rename to ${filename.toLowerCase().replace(/_/g, '-')}`, } } - return null // Valid + // Valid + return null } // Check if it's in SCREAMING_CASE but not allowed @@ -242,7 +248,8 @@ function validateFilename(filePath) { } } - return null // Valid + // Valid + return null } /** @@ -264,49 +271,49 @@ async function validateMarkdownFilenames() { async function main() { try { - const violations = await validateMarkdownFilenames(); + const violations = await validateMarkdownFilenames() if (violations.length === 0) { - logger.success('All markdown filenames follow conventions'); - process.exitCode = 0; - return; + logger.success('All markdown filenames follow conventions') + process.exitCode = 0 + return } - logger.fail('Markdown filename violations found'); - logger.log(''); - logger.log('Special files (allowed anywhere):'); - logger.log(' README.md, CHANGELOG.md, LICENSE'); - logger.log(''); - logger.log('Allowed SCREAMING_CASE files (root, docs/, or .claude/ only):'); - logger.log(' AUTHORS.md, CITATION.md, CLAUDE.md,'); - logger.log(' CODE_OF_CONDUCT.md, CONTRIBUTORS.md, CONTRIBUTING.md,'); - logger.log(' COPYING, CREDITS.md, GOVERNANCE.md, MAINTAINERS.md,'); - logger.log(' NOTICE.md, SECURITY.md, SUPPORT.md, TRADEMARK.md'); - logger.log(''); - logger.log('All other .md files must:'); - logger.log(' - Be lowercase-with-hyphens'); - logger.log(' - Be in docs/ or .claude/ directories (any depth)'); - logger.log(''); + logger.fail('Markdown filename violations found') + logger.log('') + logger.log('Special files (allowed anywhere):') + logger.log(' README.md, CHANGELOG.md, LICENSE') + logger.log('') + logger.log('Allowed SCREAMING_CASE files (root, docs/, or .claude/ only):') + logger.log(' AUTHORS.md, CITATION.md, CLAUDE.md,') + logger.log(' CODE_OF_CONDUCT.md, CONTRIBUTORS.md, CONTRIBUTING.md,') + logger.log(' COPYING, CREDITS.md, GOVERNANCE.md, MAINTAINERS.md,') + logger.log(' NOTICE.md, SECURITY.md, SUPPORT.md, TRADEMARK.md') + logger.log('') + logger.log('All other .md files must:') + logger.log(' - Be lowercase-with-hyphens') + logger.log(' - Be in docs/ or .claude/ directories (any depth)') + logger.log('') for (const violation of violations) { - logger.log(` ${violation.file}`); - logger.log(` Issue: ${violation.issue}`); - logger.log(` Current: ${violation.filename}`); - logger.log(` Suggested: ${violation.suggestion}`); - logger.log(''); + logger.log(` ${violation.file}`) + logger.log(` Issue: ${violation.issue}`) + logger.log(` Current: ${violation.filename}`) + logger.log(` Suggested: ${violation.suggestion}`) + logger.log('') } - logger.log('Rename files to follow conventions.'); - logger.log(''); + logger.log('Rename files to follow conventions.') + logger.log('') - process.exitCode = 1; + process.exitCode = 1 } catch (error) { - logger.fail(`Validation failed: ${error.message}`); - process.exitCode = 1; + logger.fail(`Validation failed: ${error.message}`) + process.exitCode = 1 } } main().catch(error => { - logger.fail(`Validation failed: ${error}`); - process.exitCode = 1; -}); + logger.fail(`Validation failed: ${error}`) + process.exitCode = 1 +}) diff --git a/scripts/validate-no-cdn-refs.mjs b/scripts/validate-no-cdn-refs.mjs index afeecff9b..8f04f3cb5 100644 --- a/scripts/validate-no-cdn-refs.mjs +++ b/scripts/validate-no-cdn-refs.mjs @@ -1,4 +1,3 @@ -#!/usr/bin/env node /** * @fileoverview Validates that there are no CDN references in the codebase. * @@ -16,6 +15,7 @@ import { promises as fs } from 'node:fs' import path from 'node:path' import { fileURLToPath } from 'node:url' + import { getDefaultLogger } from '@socketsecurity/lib/logger' const logger = getDefaultLogger() diff --git a/scripts/validate-no-link-deps.mjs b/scripts/validate-no-link-deps.mjs index 9698b8eba..d41b1d5d7 100755 --- a/scripts/validate-no-link-deps.mjs +++ b/scripts/validate-no-link-deps.mjs @@ -1,4 +1,3 @@ -#!/usr/bin/env node /** * @fileoverview Validates that no package.json files contain link: dependencies. * Link dependencies are prohibited - use workspace: or catalog: instead. diff --git a/scripts/verify-node-build.mjs b/scripts/verify-node-build.mjs index 3dbb6fdfc..b00c4e758 100644 --- a/scripts/verify-node-build.mjs +++ b/scripts/verify-node-build.mjs @@ -18,10 +18,10 @@ import { platform } from 'node:os' import { dirname, join } from 'node:path' import { fileURLToPath } from 'node:url' -import { getDefaultLogger } from '@socketsecurity/lib/logger' -import { spawn } from '@socketsecurity/lib/spawn' import colors from 'yoctocolors-cjs' +import { getDefaultLogger } from '@socketsecurity/lib/logger' +import { spawn } from '@socketsecurity/lib/spawn' const logger = getDefaultLogger() const __filename = fileURLToPath(import.meta.url) @@ -333,13 +333,9 @@ async function testBinary() { success(`Binary version: ${version}`) // Test 2: Execute simple script. - const execResult = await execCapture( - nodeBinary, - ['-e', 'logger.log("OK")'], - { - env: { ...process.env, PKG_EXECPATH: '' }, - }, - ) + const execResult = await execCapture(nodeBinary, ['-e', 'logger.log("OK")'], { + env: { ...process.env, PKG_EXECPATH: '' }, + }) if (execResult.code !== 0 || execResult.stdout !== 'OK') { error('Binary failed to execute simple script') @@ -424,7 +420,8 @@ async function verifySignature() { if (result.code !== 0) { warn('Binary is not signed (may cause issues on macOS)') warn('Run: codesign --sign - --force out/Release/node') - return true // Not fatal. + // Not fatal. + return true } success('Binary is properly signed for macOS') diff --git a/scripts/wasm/benchmark-build.mjs b/scripts/wasm/benchmark-build.mjs index 67cc5c25e..51f4da4f2 100644 --- a/scripts/wasm/benchmark-build.mjs +++ b/scripts/wasm/benchmark-build.mjs @@ -12,13 +12,12 @@ import { existsSync, promises as fs } from 'node:fs' import path from 'node:path' -import { fileURLToPath } from 'node:url' import { performance } from 'node:perf_hooks' +import { fileURLToPath } from 'node:url' import { getDefaultLogger } from '@socketsecurity/lib/logger' import { spawn } from '@socketsecurity/lib/spawn' - const logger = getDefaultLogger() const __dirname = path.dirname(fileURLToPath(import.meta.url)) const buildScript = path.join(__dirname, 'build-unified-wasm.mjs') @@ -158,10 +157,7 @@ async function displaySizes() { const wasmMB = (sizes.wasmSize / 1024 / 1024).toFixed(2) const syncMB = (sizes.syncSize / 1024 / 1024).toFixed(2) - const compressionRatio = ( - (sizes.syncSize / sizes.wasmSize) * - 100 - ).toFixed(1) + const compressionRatio = ((sizes.syncSize / sizes.wasmSize) * 100).toFixed(1) logger.log(` WASM (raw): ${wasmMB} MB`) logger.log(` JS (compressed): ${syncMB} MB`) @@ -195,7 +191,8 @@ async function main() { // Run prod build. if (!devOnly) { if (devResult) { - logger.log('') // Spacing. + // Spacing. + logger.log('') } prodResult = await benchmarkBuild('production') if (!prodResult) { diff --git a/scripts/wasm/build-model-packages.mjs b/scripts/wasm/build-model-packages.mjs index 4ff84ea0c..4edf9e6b4 100755 --- a/scripts/wasm/build-model-packages.mjs +++ b/scripts/wasm/build-model-packages.mjs @@ -1,4 +1,3 @@ -#!/usr/bin/env node /** * Build separate WASM model packages for npm distribution. * @@ -16,17 +15,21 @@ */ import { execSync } from 'node:child_process' -import { existsSync, mkdirSync, promises as fs } from 'node:fs' +import { existsSync, promises as fs, mkdirSync } from 'node:fs' import path from 'node:path' import { fileURLToPath } from 'node:url' -import { getDefaultLogger } from '@socketsecurity/lib/logger' + import colors from 'yoctocolors-cjs' +import { getDefaultLogger } from '@socketsecurity/lib/logger' const logger = getDefaultLogger() const __dirname = path.dirname(fileURLToPath(import.meta.url)) const rootPath = path.join(__dirname, '../..') -const wasmBundlePath = path.join(rootPath, 'packages/node-smol-builder/wasm-bundle') +const wasmBundlePath = path.join( + rootPath, + 'packages/node-smol-builder/wasm-bundle', +) const packagesPath = path.join(rootPath, 'packages') // Parse command line arguments. @@ -96,7 +99,7 @@ async function buildWasm(modelName, feature) { // Copy built WASM. const wasmSource = path.join( wasmBundlePath, - 'target/wasm32-unknown-unknown/release/socket_ai.wasm' + 'target/wasm32-unknown-unknown/release/socket_ai.wasm', ) const wasmBuild = path.join(buildDir, `${modelName}.wasm`) @@ -128,14 +131,19 @@ async function optimizeWasm(inputPath, modelName) { const optimizedPath = path.join(buildDir, `${modelName}.optimized.wasm`) exec( - `wasm-opt -Oz --enable-simd --enable-bulk-memory ${inputPath} -o ${optimizedPath}` + `wasm-opt -Oz --enable-simd --enable-bulk-memory ${inputPath} -o ${optimizedPath}`, ) const originalSize = (await fs.stat(inputPath)).size const optimizedSize = (await fs.stat(optimizedPath)).size - const reduction = (((originalSize - optimizedSize) / originalSize) * 100).toFixed(1) + const reduction = ( + ((originalSize - optimizedSize) / originalSize) * + 100 + ).toFixed(1) - logger.log(` Optimized: ${(optimizedSize / (1024 * 1024)).toFixed(1)} MB (${reduction}% reduction)`) + logger.log( + ` Optimized: ${(optimizedSize / (1024 * 1024)).toFixed(1)} MB (${reduction}% reduction)`, + ) return optimizedPath } @@ -181,7 +189,9 @@ async function main() { logger.log(' - packages/socketbin-minilm-wasm/') logger.log(' - packages/socketbin-codet5-wasm/') logger.log('\nNext steps:') - logger.log(' 1. Test locally: cd packages/socketbin-minilm-wasm && npm pack') + logger.log( + ' 1. Test locally: cd packages/socketbin-minilm-wasm && npm pack', + ) logger.log(' 2. Publish: npm publish') } catch (error) { logger.error(`\n${colors.red('✗')} Build failed:`, error.message) diff --git a/scripts/wasm/build-unified-wasm.mjs b/scripts/wasm/build-unified-wasm.mjs index 7a117fc63..3bb17c194 100644 --- a/scripts/wasm/build-unified-wasm.mjs +++ b/scripts/wasm/build-unified-wasm.mjs @@ -127,7 +127,8 @@ async function installBinaryen() { // Fallback: Download from GitHub releases (all platforms). logger.substep('Downloading pre-built binaryen from GitHub') - const version = 'version_119' // Latest stable as of implementation. + // Latest stable as of implementation. + const version = 'version_119' let platformSuffix = '' if (isWindows) { @@ -246,19 +247,27 @@ const buildEnv = { // Add RUSTFLAGS for additional optimizations (if not already set). if (!buildEnv.RUSTFLAGS) { const rustFlags = [ - '-C target-feature=+simd128', // Enable WASM SIMD (73% browser support) - '-C target-feature=+bulk-memory', // Bulk memory operations (faster copies) - '-C target-feature=+mutable-globals', // Mutable globals support - '-C target-feature=+sign-ext', // Sign extension operations + // Enable WASM SIMD (73% browser support) + '-C target-feature=+simd128', + // Bulk memory operations (faster copies) + '-C target-feature=+bulk-memory', + // Mutable globals support + '-C target-feature=+mutable-globals', + // Sign extension operations + '-C target-feature=+sign-ext', ] // Production-only optimizations. if (!isDev) { rustFlags.push( - '-C link-arg=--strip-debug', // Strip debug info - '-C link-arg=--strip-all', // Strip all symbols - '-C link-arg=-zstack-size=131_072', // Smaller stack size (128KB) - '-C embed-bitcode=yes', // Embed bitcode for LTO + // Strip debug info + '-C link-arg=--strip-debug', + // Strip all symbols + '-C link-arg=--strip-all', + // Smaller stack size (128KB) + '-C link-arg=-zstack-size=131_072', + // Embed bitcode for LTO + '-C embed-bitcode=yes', ) } @@ -310,22 +319,37 @@ try { // Aggressive optimization flags (no backward compat needed). const wasmOptFlags = [ - '-Oz', // Optimize for size - '--enable-simd', // Enable SIMD operations - '--enable-bulk-memory', // Enable bulk memory - '--enable-sign-ext', // Enable sign extension - '--enable-mutable-globals', // Enable mutable globals - '--enable-nontrapping-float-to-int', // Non-trapping float conversions - '--enable-reference-types', // Enable reference types - '--low-memory-unused', // Optimize for low memory usage - '--flatten', // Flatten IR for better optimization - '--rereloop', // Optimize control flow - '--vacuum', // Remove unused code + // Optimize for size + '-Oz', + // Enable SIMD operations + '--enable-simd', + // Enable bulk memory + '--enable-bulk-memory', + // Enable sign extension + '--enable-sign-ext', + // Enable mutable globals + '--enable-mutable-globals', + // Non-trapping float conversions + '--enable-nontrapping-float-to-int', + // Enable reference types + '--enable-reference-types', + // Optimize for low memory usage + '--low-memory-unused', + // Flatten IR for better optimization + '--flatten', + // Optimize control flow + '--rereloop', + // Remove unused code + '--vacuum', ] - const optResult = await exec('wasm-opt', [...wasmOptFlags, wasmFile, '-o', wasmFile], { - stdio: 'inherit', - }) + const optResult = await exec( + 'wasm-opt', + [...wasmOptFlags, wasmFile, '-o', wasmFile], + { + stdio: 'inherit', + }, + ) if (optResult.code === 0) { stats = await fs.stat(wasmFile) @@ -348,7 +372,9 @@ try { // Report final size. if (!optimizationSucceeded) { - logger.info(`Final size: ${(originalSize / 1024 / 1024).toFixed(2)} MB (unoptimized)`) + logger.info( + `Final size: ${(originalSize / 1024 / 1024).toFixed(2)} MB (unoptimized)`, + ) } // Step 5: Embed as base64 in JavaScript. @@ -362,10 +388,14 @@ logger.progress('Compressing with brotli (quality 11 - maximum)') const { constants } = await import('node:zlib') const wasmCompressed = brotliCompressSync(wasmData, { params: { - [constants.BROTLI_PARAM_QUALITY]: 11, // Maximum quality (0-11) - [constants.BROTLI_PARAM_SIZE_HINT]: wasmData.length, // Hint for better compression - [constants.BROTLI_PARAM_LGWIN]: 24, // Maximum window size (10-24) - [constants.BROTLI_PARAM_MODE]: constants.BROTLI_MODE_GENERIC, // Generic mode for binary data + // Maximum quality (0-11) + [constants.BROTLI_PARAM_QUALITY]: 11, + // Hint for better compression + [constants.BROTLI_PARAM_SIZE_HINT]: wasmData.length, + // Maximum window size (10-24) + [constants.BROTLI_PARAM_LGWIN]: 24, + // Generic mode for binary data + [constants.BROTLI_PARAM_MODE]: constants.BROTLI_MODE_GENERIC, }, }) const compressionRatio = ( diff --git a/scripts/wasm/check-rust-toolchain.mjs b/scripts/wasm/check-rust-toolchain.mjs index a1bedbd14..3ac515143 100644 --- a/scripts/wasm/check-rust-toolchain.mjs +++ b/scripts/wasm/check-rust-toolchain.mjs @@ -18,7 +18,6 @@ import path from 'node:path' import { getDefaultLogger } from '@socketsecurity/lib/logger' import { spawn } from '@socketsecurity/lib/spawn' - const logger = getDefaultLogger() /** * Execute command and wait for completion. diff --git a/scripts/wasm/download-models.mjs b/scripts/wasm/download-models.mjs index 934802abe..71e310fc7 100644 --- a/scripts/wasm/download-models.mjs +++ b/scripts/wasm/download-models.mjs @@ -52,21 +52,25 @@ const FILES = [ // CodeT5 (needs manual conversion first - see convert-codet5.mjs). { - copyFrom: null, // Set after conversion + // Set after conversion + copyFrom: null, description: 'CodeT5 encoder (int4)', name: 'codet5-encoder-int4.onnx', - url: null, // Needs conversion first + // Needs conversion first + url: null, }, { copyFrom: null, description: 'CodeT5 decoder (int4)', name: 'codet5-decoder-int4.onnx', - url: null, // Needs conversion first + // Needs conversion first + url: null, }, { description: 'CodeT5 tokenizer', name: 'codet5-tokenizer.json', - url: null, // Will be created by convert-codet5.mjs + // Will be created by convert-codet5.mjs + url: null, }, // ONNX Runtime WASM (from node_modules). diff --git a/scripts/wasm/optimize-embedded-wasm.mjs b/scripts/wasm/optimize-embedded-wasm.mjs index 628d9920e..87da64588 100644 --- a/scripts/wasm/optimize-embedded-wasm.mjs +++ b/scripts/wasm/optimize-embedded-wasm.mjs @@ -19,7 +19,6 @@ import { fileURLToPath } from 'node:url' import { getDefaultLogger } from '@socketsecurity/lib/logger' import { spawn } from '@socketsecurity/lib/spawn' - const logger = getDefaultLogger() const __dirname = path.dirname(fileURLToPath(import.meta.url)) const rootPath = path.join(__dirname, '../..') @@ -69,7 +68,7 @@ async function getFileSizeMB(filePath) { * Optimize a single WASM file. */ async function optimizeWasmFile(inputPath, outputPath, options = {}) { - const { name, aggressive = false } = options + const { aggressive = false, name } = options if (!existsSync(inputPath)) { logger.warn(`File not found: ${inputPath}`) @@ -82,7 +81,8 @@ async function optimizeWasmFile(inputPath, outputPath, options = {}) { // Build optimization flags. const flags = [ - '-Oz', // Optimize for size + // Optimize for size + '-Oz', '--enable-simd', '--enable-bulk-memory', '--enable-sign-ext', @@ -97,7 +97,8 @@ async function optimizeWasmFile(inputPath, outputPath, options = {}) { '--flatten', '--rereloop', '--vacuum', - '--dce', // Dead code elimination + // Dead code elimination + '--dce', '--remove-unused-names', '--remove-unused-module-elements', '--strip-debug', @@ -108,9 +109,13 @@ async function optimizeWasmFile(inputPath, outputPath, options = {}) { } try { - const result = await exec('wasm-opt', [...flags, inputPath, '-o', outputPath], { - stdio: 'pipe', - }) + const result = await exec( + 'wasm-opt', + [...flags, inputPath, '-o', outputPath], + { + stdio: 'pipe', + }, + ) if (result.code === 0) { const optimizedSize = await getFileSizeMB(outputPath) @@ -190,7 +195,8 @@ async function main() { totalOriginal += originalSize totalOptimized += optimizedSize - logger.log('') // Spacing. + // Spacing. + logger.log('') } // Summary. diff --git a/vitest.config.mts b/vitest.config.mts index 61a3945b6..8e45928db 100644 --- a/vitest.config.mts +++ b/vitest.config.mts @@ -59,7 +59,7 @@ export default defineConfig({ hookTimeout: 30_000, bail: process.env.CI ? 1 : 0, // Exit on first failure in CI for faster feedback. sequence: { - concurrent: true // Run tests concurrently within suites for better parallelism. + concurrent: true, // Run tests concurrently within suites for better parallelism. }, coverage: { provider: 'v8', From d1319229cbe0091cc0aba6609c1f0034456b71df Mon Sep 17 00:00:00 2001 From: jdalton Date: Fri, 21 Nov 2025 00:55:05 -0600 Subject: [PATCH 2/3] chore(deps): update @socketsecurity/lib to 4.3.0 --- pnpm-lock.yaml | 4304 ++++++++++++++---------------------------------- 1 file changed, 1207 insertions(+), 3097 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 22a461bb5..98f2ad0b3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,21 +15,72 @@ catalogs: '@babel/parser': specifier: 7.28.4 version: 7.28.4 + '@babel/plugin-proposal-export-default-from': + specifier: 7.27.1 + version: 7.27.1 + '@babel/plugin-transform-export-namespace-from': + specifier: 7.27.1 + version: 7.27.1 + '@babel/plugin-transform-runtime': + specifier: 7.28.3 + version: 7.28.3 + '@babel/preset-react': + specifier: 7.27.1 + version: 7.27.1 + '@babel/preset-typescript': + specifier: 7.27.1 + version: 7.27.1 + '@babel/runtime': + specifier: 7.28.4 + version: 7.28.4 '@babel/traverse': specifier: 7.28.4 version: 7.28.4 '@babel/types': specifier: 7.28.5 version: 7.28.5 + '@biomejs/biome': + specifier: 2.2.4 + version: 2.2.4 + '@dotenvx/dotenvx': + specifier: 1.49.0 + version: 1.49.0 + '@eslint/compat': + specifier: 1.3.2 + version: 1.3.2 + '@eslint/js': + specifier: 9.35.0 + version: 9.35.0 '@gitbeaker/rest': specifier: 43.7.0 version: 43.7.0 '@npmcli/arborist': specifier: 9.1.4 version: 9.1.4 + '@npmcli/config': + specifier: 10.4.0 + version: 10.4.0 + '@octokit/openapi-types': + specifier: 25.1.0 + version: 25.1.0 '@octokit/rest': specifier: 22.0.0 version: 22.0.0 + '@octokit/types': + specifier: 14.1.0 + version: 14.1.0 + '@pnpm/dependency-path': + specifier: 1001.1.0 + version: 1001.1.0 + '@pnpm/lockfile.detect-dep-types': + specifier: 1001.0.13 + version: 1001.0.13 + '@pnpm/lockfile.fs': + specifier: 1001.1.17 + version: 1001.1.17 + '@pnpm/logger': + specifier: 1001.0.0 + version: 1001.0.0 '@sentry/node': specifier: 8.0.0 version: 8.0.0 @@ -51,12 +102,63 @@ catalogs: '@socketsecurity/config': specifier: 3.0.1 version: 3.0.1 - '@socketsecurity/lib': - specifier: 4.3.0 - version: 4.3.0 + '@socketsecurity/registry': + specifier: 2.0.2 + version: 2.0.2 '@socketsecurity/sdk': specifier: 3.1.3 version: 3.1.3 + '@types/cmd-shim': + specifier: 5.0.2 + version: 5.0.2 + '@types/ink': + specifier: 2.0.3 + version: 2.0.3 + '@types/js-yaml': + specifier: 4.0.9 + version: 4.0.9 + '@types/micromatch': + specifier: 4.0.9 + version: 4.0.9 + '@types/mock-fs': + specifier: 4.13.4 + version: 4.13.4 + '@types/node': + specifier: 24.9.2 + version: 24.9.2 + '@types/npm-package-arg': + specifier: 6.1.4 + version: 6.1.4 + '@types/npmcli__arborist': + specifier: 6.3.1 + version: 6.3.1 + '@types/npmcli__config': + specifier: 6.0.3 + version: 6.0.3 + '@types/proc-log': + specifier: 3.0.4 + version: 3.0.4 + '@types/react': + specifier: 19.2.2 + version: 19.2.2 + '@types/semver': + specifier: 7.7.1 + version: 7.7.1 + '@types/which': + specifier: 3.0.4 + version: 3.0.4 + '@types/yargs-parser': + specifier: 21.0.3 + version: 21.0.3 + '@typescript-eslint/parser': + specifier: 8.44.1 + version: 8.44.1 + '@vitest/coverage-v8': + specifier: 4.0.3 + version: 4.0.3 + '@yao-pkg/pkg': + specifier: 6.8.0 + version: 6.8.0 ajv-dist: specifier: 8.17.1 version: 8.17.1 @@ -75,21 +177,42 @@ catalogs: del-cli: specifier: 6.0.0 version: 6.0.0 - emoji-regex: - specifier: 10.6.0 - version: 10.6.0 + dev-null-cli: + specifier: 2.0.0 + version: 2.0.0 esbuild: specifier: 0.25.11 version: 0.25.11 + eslint: + specifier: 9.35.0 + version: 9.35.0 + eslint-import-resolver-typescript: + specifier: 4.4.4 + version: 4.4.4 + eslint-plugin-import-x: + specifier: 4.16.1 + version: 4.16.1 + eslint-plugin-n: + specifier: 17.21.3 + version: 17.21.3 + eslint-plugin-sort-destructure-keys: + specifier: 2.0.0 + version: 2.0.0 + eslint-plugin-unicorn: + specifier: 56.0.1 + version: 56.0.1 fast-glob: specifier: 3.3.3 version: 3.3.3 + globals: + specifier: 16.4.0 + version: 16.4.0 hpagent: specifier: 1.2.0 version: 1.2.0 - https-proxy-agent: - specifier: 7.0.6 - version: 7.0.6 + husky: + specifier: 9.1.7 + version: 9.1.7 ignore: specifier: 7.0.5 version: 7.0.5 @@ -102,15 +225,30 @@ catalogs: ink-text-input: specifier: 6.0.0 version: 6.0.0 + js-yaml: + specifier: npm:@zkochan/js-yaml@0.0.10 + version: 0.0.10 + lint-staged: + specifier: 16.1.6 + version: 16.1.6 magic-string: specifier: 0.30.19 version: 0.30.19 micromatch: specifier: 4.0.8 version: 4.0.8 + mock-fs: + specifier: 5.5.0 + version: 5.5.0 nanotar: specifier: 0.2.0 version: 0.2.0 + nock: + specifier: 14.0.10 + version: 14.0.10 + npm-run-all2: + specifier: 8.0.4 + version: 8.0.4 onnxruntime-web: specifier: 1.23.0 version: 1.23.0 @@ -120,6 +258,9 @@ catalogs: pony-cause: specifier: 2.1.11 version: 2.1.11 + postject: + specifier: 1.0.0-alpha.6 + version: 1.0.0-alpha.6 react: specifier: 19.2.0 version: 19.2.0 @@ -135,15 +276,36 @@ catalogs: ssri: specifier: 12.0.0 version: 12.0.0 - string-width: - specifier: 8.1.0 - version: 8.1.0 + synp: + specifier: 1.9.14 + version: 1.9.14 tar-stream: specifier: 3.1.7 version: 3.1.7 + taze: + specifier: 19.6.0 + version: 19.6.0 terminal-link: specifier: 2.1.1 version: 2.1.1 + trash: + specifier: 10.0.0 + version: 10.0.0 + type-coverage: + specifier: 2.29.7 + version: 2.29.7 + typescript: + specifier: 5.9.3 + version: 5.9.3 + typescript-eslint: + specifier: 8.44.1 + version: 8.44.1 + unplugin-purge-polyfills: + specifier: 0.1.0 + version: 0.1.0 + vitest: + specifier: 4.0.3 + version: 4.0.3 yoctocolors-cjs: specifier: 2.1.3 version: 2.1.3 @@ -157,21 +319,15 @@ catalogs: overrides: '@octokit/graphql': 9.0.1 '@octokit/request-error': 7.0.0 - '@rollup/plugin-commonjs': 28.0.6 - '@socketsecurity/registry': 1.1.17 - aggregate-error: npm:@socketregistry/aggregate-error@^1.0.14 - ansi-regex: 6.1.0 - ansi-term: 0.0.2 - blessed: 0.1.81 - blessed-contrib: 4.11.0 + '@socketsecurity/lib': 4.3.0 + aggregate-error: npm:@socketregistry/aggregate-error@^1.0.15 + ansi-regex: 6.2.2 brace-expansion: 2.0.2 - bresenham: 0.0.3 - drawille-blessed-contrib: 1.0.0 - drawille-canvas-blessed-contrib: 0.1.3 + emoji-regex: 10.6.0 es-define-property: npm:@socketregistry/es-define-property@^1.0.7 - es-set-tostringtag: npm:@socketregistry/es-set-tostringtag@^1.0.9 + es-set-tostringtag: npm:@socketregistry/es-set-tostringtag@^1.0.10 function-bind: npm:@socketregistry/function-bind@^1.0.7 - globalthis: npm:@socketregistry/globalthis@^1.0.7 + globalthis: npm:@socketregistry/globalthis@^1.0.8 gopd: npm:@socketregistry/gopd@^1.0.7 graceful-fs: 4.2.11 has-property-descriptors: npm:@socketregistry/has-property-descriptors@^1.0.7 @@ -179,367 +335,341 @@ overrides: has-symbols: npm:@socketregistry/has-symbols@^1.0.7 has-tostringtag: npm:@socketregistry/has-tostringtag@^1.0.7 hasown: npm:@socketregistry/hasown@^1.0.7 - indent-string: npm:@socketregistry/indent-string@^1.0.13 - is-core-module: npm:@socketregistry/is-core-module@^1.0.10 - isarray: npm:@socketregistry/isarray@^1.0.7 + https-proxy-agent: 7.0.6 + indent-string: npm:@socketregistry/indent-string@^1.0.14 + is-core-module: npm:@socketregistry/is-core-module@^1.0.11 + isarray: npm:@socketregistry/isarray@^1.0.8 lodash: 4.17.21 - meow: 13.2.0 npm-package-arg: 13.0.0 - packageurl-js: npm:@socketregistry/packageurl-js@^1.0.9 - path-parse: npm:@socketregistry/path-parse@^1.0.7 - rollup: 4.50.1 - safe-buffer: npm:@socketregistry/safe-buffer@^1.0.8 - safer-buffer: npm:@socketregistry/safer-buffer@^1.0.9 + packageurl-js: npm:@socketregistry/packageurl-js@^1.3.5 + path-parse: npm:@socketregistry/path-parse@^1.0.8 + safe-buffer: npm:@socketregistry/safe-buffer@^1.0.9 + safer-buffer: npm:@socketregistry/safer-buffer@^1.0.10 semver: 7.7.2 - set-function-length: npm:@socketregistry/set-function-length@^1.0.9 - shell-quote: npm:shell-quote@^1.8.3 - side-channel: npm:@socketregistry/side-channel@^1.0.9 + set-function-length: npm:@socketregistry/set-function-length@^1.0.10 + shell-quote: 1.8.3 + side-channel: npm:@socketregistry/side-channel@^1.0.10 string_decoder: 0.10.31 + string-width: 8.1.0 + strip-ansi: 7.1.2 + wrap-ansi: 9.0.2 tiny-colors: 2.1.3 - tiny-updater: 3.5.3 - typedarray: npm:@socketregistry/typedarray@^1.0.7 + typedarray: npm:@socketregistry/typedarray@^1.0.8 undici: 6.21.3 - vite: 7.1.5 + vite: 7.1.12 xml2js: 0.6.2 yaml: 2.8.1 yargs-parser: 21.1.1 patchedDependencies: - '@rollup/plugin-commonjs@28.0.6': - hash: 4d412c02fa3df1b1f5b29b135bd3f0997f85248ceb3a578d01e7f40fba27c21b - path: patches/@rollup__plugin-commonjs@28.0.6.patch - ansi-term@0.0.2: - hash: 06bb5127b7689d6ab2ea833f9617b2c3fbe9fe0048ce1c6b59b81f7e25ccbccb - path: patches/ansi-term@0.0.2.patch - blessed-contrib@4.11.0: - hash: 2c9f0a87aa8ce9ed95ce201819ef3fcdb9a00f1cabe12815f586d2a3c0bff69e - path: patches/blessed-contrib@4.11.0.patch - blessed@0.1.81: - hash: cae83aa371bddce36c7a03bac146da97b1da2ce16059ce29e25c3af0182331a3 - path: patches/blessed@0.1.81.patch - brace-expansion@2.0.2: - hash: eac47f4a81cd7be766bd391c6bf91ac462816eb2f3c5f99270419ac752d6f02d - path: patches/brace-expansion@2.0.2.patch - bresenham@0.0.3: - hash: cc5bda185ad608af96d1018f588dae1b7e8390459011701bffa97ae0f12537a6 - path: patches/bresenham@0.0.3.patch - drawille-blessed-contrib@1.0.0: - hash: bc7802f29a5252694b94e911ea0fef9939529d6bd866c9e189539ae23f54187c - path: patches/drawille-blessed-contrib@1.0.0.patch - drawille-canvas-blessed-contrib@0.1.3: - hash: baf1e92576f78c2c86283e7a3182ddd59d52cd7e86ad9fe21d1c4ccc2274bcf3 - path: patches/drawille-canvas-blessed-contrib@0.1.3.patch - graceful-fs@4.2.11: - hash: 17007d43dcc01ee2047730ab13eb23c41adc01ae0f24ee872b1fe69142db5200 - path: patches/graceful-fs@4.2.11.patch - lodash@4.17.21: - hash: 9c24de093a43581e08151be377de2e0518d256eca3c50f117c523e45ab6272b1 - path: patches/lodash@4.17.21.patch - rollup@4.50.1: - hash: 071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f - path: patches/rollup@4.50.1.patch - string_decoder@0.10.31: - hash: 4f6ae5ec65b5537e81cd3ee7e83ae65bcc843a93cff14f147d8053e1c385ae1d - path: patches/string_decoder@0.10.31.patch - tiny-updater@3.5.3: - hash: b3f4afb74b370538fe45248cba31833aee4553f83f15a6a07da47f85afae2f24 - path: patches/tiny-updater@3.5.3.patch + '@npmcli/run-script@10.0.3': + hash: b1f74f31293142449c0be473fae0f0b977e1e1174e6a88e2021fcb93dc902ed6 + path: patches/@npmcli__run-script@10.0.3.patch + '@npmcli/run-script@9.1.0': + hash: 65d59a7c4dd7b00f1c218cbcf97d78fe2f462f2e048de4a22b41bd70dbdefcdc + path: patches/@npmcli__run-script@9.1.0.patch + ink@6.3.1: + hash: 03cccf82711216d0fa8283ea4716ed803a132ae8c31293f0f5a6677e2bdb4a64 + path: patches/ink@6.3.1.patch + node-gyp@11.5.0: + hash: 140ba43d43d74f7d3577feb3f8a6efad544dbb0059784102b144a0e2daa437f9 + path: patches/node-gyp@11.5.0.patch + node-gyp@12.1.0: + hash: 140ba43d43d74f7d3577feb3f8a6efad544dbb0059784102b144a0e2daa437f9 + path: patches/node-gyp@12.1.0.patch importers: .: devDependencies: '@babel/core': - specifier: 7.28.4 + specifier: 'catalog:' + version: 7.28.4 + '@babel/parser': + specifier: 'catalog:' version: 7.28.4 '@babel/plugin-proposal-export-default-from': - specifier: 7.27.1 + specifier: 'catalog:' version: 7.27.1(@babel/core@7.28.4) '@babel/plugin-transform-export-namespace-from': - specifier: 7.27.1 + specifier: 'catalog:' version: 7.27.1(@babel/core@7.28.4) '@babel/plugin-transform-runtime': - specifier: 7.28.3 + specifier: 'catalog:' version: 7.28.3(@babel/core@7.28.4) + '@babel/preset-react': + specifier: 'catalog:' + version: 7.27.1(@babel/core@7.28.4) '@babel/preset-typescript': - specifier: 7.27.1 + specifier: 'catalog:' version: 7.27.1(@babel/core@7.28.4) '@babel/runtime': - specifier: 7.28.4 + specifier: 'catalog:' + version: 7.28.4 + '@babel/traverse': + specifier: 'catalog:' version: 7.28.4 '@biomejs/biome': - specifier: 2.2.4 + specifier: 'catalog:' version: 2.2.4 - '@coana-tech/cli': - specifier: 14.12.98 - version: 14.12.98 - '@cyclonedx/cdxgen': - specifier: 11.11.0 - version: 11.11.0 '@dotenvx/dotenvx': - specifier: 1.49.0 + specifier: 'catalog:' version: 1.49.0 '@eslint/compat': - specifier: 1.3.2 + specifier: 'catalog:' version: 1.3.2(eslint@9.35.0(jiti@2.6.1)) '@eslint/js': - specifier: 9.35.0 + specifier: 'catalog:' version: 9.35.0 '@npmcli/arborist': - specifier: 9.1.4 + specifier: 'catalog:' version: 9.1.4 '@npmcli/config': - specifier: 10.4.0 + specifier: 'catalog:' version: 10.4.0 '@octokit/graphql': specifier: 9.0.1 version: 9.0.1 '@octokit/openapi-types': - specifier: 25.1.0 + specifier: 'catalog:' version: 25.1.0 '@octokit/request-error': specifier: 7.0.0 version: 7.0.0 '@octokit/rest': - specifier: 22.0.0 + specifier: 'catalog:' version: 22.0.0 '@octokit/types': - specifier: 14.1.0 + specifier: 'catalog:' version: 14.1.0 '@pnpm/dependency-path': - specifier: 1001.1.0 + specifier: 'catalog:' version: 1001.1.0 '@pnpm/lockfile.detect-dep-types': - specifier: 1001.0.13 + specifier: 'catalog:' version: 1001.0.13 '@pnpm/lockfile.fs': - specifier: 1001.1.17 + specifier: 'catalog:' version: 1001.1.17(@pnpm/logger@1001.0.0) '@pnpm/logger': - specifier: 1001.0.0 + specifier: 'catalog:' version: 1001.0.0 - '@rollup/plugin-babel': - specifier: 6.0.4 - version: 6.0.4(@babel/core@7.28.4)(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f)) - '@rollup/plugin-commonjs': - specifier: 28.0.6 - version: 28.0.6(patch_hash=4d412c02fa3df1b1f5b29b135bd3f0997f85248ceb3a578d01e7f40fba27c21b)(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f)) - '@rollup/plugin-json': - specifier: 6.1.0 - version: 6.1.0(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f)) - '@rollup/plugin-node-resolve': - specifier: 16.0.1 - version: 16.0.1(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f)) - '@rollup/plugin-replace': - specifier: 6.0.2 - version: 6.0.2(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f)) - '@rollup/pluginutils': - specifier: 5.3.0 - version: 5.3.0(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f)) '@socketregistry/hyrious__bun.lockb': - specifier: 1.0.18 - version: 1.0.18 + specifier: 'catalog:' + version: 1.0.19 '@socketregistry/indent-string': - specifier: 1.0.13 - version: 1.0.13 + specifier: 'catalog:' + version: 1.0.14 '@socketregistry/is-interactive': - specifier: 1.0.6 + specifier: 'catalog:' version: 1.0.6 '@socketregistry/packageurl-js': - specifier: 1.0.9 - version: 1.0.9 + specifier: 'catalog:' + version: 1.3.5 + '@socketregistry/yocto-spinner': + specifier: 'catalog:' + version: 1.0.25 '@socketsecurity/config': - specifier: 3.0.1 + specifier: 'catalog:' version: 3.0.1 + '@socketsecurity/lib': + specifier: 4.3.0 + version: 4.3.0(typescript@5.9.3) '@socketsecurity/registry': - specifier: 1.1.17 - version: 1.1.17 + specifier: 'catalog:' + version: 2.0.2(typescript@5.9.3) '@socketsecurity/sdk': - specifier: 1.4.94 - version: 1.4.94 - '@types/blessed': - specifier: 0.1.25 - version: 0.1.25 + specifier: 'catalog:' + version: 3.1.3 '@types/cmd-shim': - specifier: 5.0.2 + specifier: 'catalog:' version: 5.0.2 + '@types/ink': + specifier: 'catalog:' + version: 2.0.3(@types/react@19.2.2)(react@19.2.0) '@types/js-yaml': - specifier: 4.0.9 + specifier: 'catalog:' version: 4.0.9 '@types/micromatch': - specifier: 4.0.9 + specifier: 'catalog:' version: 4.0.9 '@types/mock-fs': - specifier: 4.13.4 + specifier: 'catalog:' version: 4.13.4 '@types/node': - specifier: 24.3.1 - version: 24.3.1 + specifier: 'catalog:' + version: 24.9.2 '@types/npm-package-arg': - specifier: 6.1.4 + specifier: 'catalog:' version: 6.1.4 '@types/npmcli__arborist': - specifier: 6.3.1 + specifier: 'catalog:' version: 6.3.1 '@types/npmcli__config': - specifier: 6.0.3 + specifier: 'catalog:' version: 6.0.3 '@types/proc-log': - specifier: 3.0.4 + specifier: 'catalog:' version: 3.0.4 + '@types/react': + specifier: 'catalog:' + version: 19.2.2 '@types/semver': - specifier: 7.7.1 + specifier: 'catalog:' version: 7.7.1 '@types/which': - specifier: 3.0.4 + specifier: 'catalog:' version: 3.0.4 '@types/yargs-parser': - specifier: 21.0.3 + specifier: 'catalog:' version: 21.0.3 '@typescript-eslint/parser': - specifier: 8.43.0 - version: 8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript/native-preview': - specifier: 7.0.0-dev.20250912.1 - version: 7.0.0-dev.20250912.1 + specifier: 'catalog:' + version: 8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) '@vitest/coverage-v8': - specifier: 3.2.4 - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1)) - blessed: - specifier: 0.1.81 - version: 0.1.81(patch_hash=cae83aa371bddce36c7a03bac146da97b1da2ce16059ce29e25c3af0182331a3) - blessed-contrib: - specifier: 4.11.0 - version: 4.11.0(patch_hash=2c9f0a87aa8ce9ed95ce201819ef3fcdb9a00f1cabe12815f586d2a3c0bff69e) + specifier: 'catalog:' + version: 4.0.3(vitest@4.0.3(@types/node@24.9.2)(jiti@2.6.1)(yaml@2.8.1)) + '@yao-pkg/pkg': + specifier: 'catalog:' + version: 6.8.0(encoding@0.1.13) browserslist: - specifier: 4.25.4 + specifier: 'catalog:' version: 4.25.4 chalk-table: - specifier: 1.0.2 + specifier: 'catalog:' version: 1.0.2 cmd-shim: - specifier: 7.0.0 + specifier: 'catalog:' version: 7.0.0 del-cli: - specifier: 6.0.0 + specifier: 'catalog:' version: 6.0.0 dev-null-cli: - specifier: 2.0.0 + specifier: 'catalog:' version: 2.0.0 + esbuild: + specifier: 'catalog:' + version: 0.25.11 eslint: - specifier: 9.35.0 + specifier: 'catalog:' version: 9.35.0(jiti@2.6.1) eslint-import-resolver-typescript: - specifier: 4.4.4 + specifier: 'catalog:' version: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.35.0(jiti@2.6.1)))(eslint@9.35.0(jiti@2.6.1)) eslint-plugin-import-x: - specifier: 4.16.1 + specifier: 'catalog:' version: 4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.35.0(jiti@2.6.1)) eslint-plugin-n: - specifier: 17.21.3 + specifier: 'catalog:' version: 17.21.3(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) eslint-plugin-sort-destructure-keys: - specifier: 2.0.0 + specifier: 'catalog:' version: 2.0.0(eslint@9.35.0(jiti@2.6.1)) eslint-plugin-unicorn: - specifier: 56.0.1 + specifier: 'catalog:' version: 56.0.1(eslint@9.35.0(jiti@2.6.1)) fast-glob: - specifier: 3.3.3 + specifier: 'catalog:' version: 3.3.3 globals: - specifier: 16.4.0 + specifier: 'catalog:' version: 16.4.0 hpagent: - specifier: 1.2.0 + specifier: 'catalog:' version: 1.2.0 husky: - specifier: 9.1.7 + specifier: 'catalog:' version: 9.1.7 ignore: - specifier: 7.0.5 + specifier: 'catalog:' version: 7.0.5 + ink: + specifier: 'catalog:' + version: 6.3.1(patch_hash=03cccf82711216d0fa8283ea4716ed803a132ae8c31293f0f5a6677e2bdb4a64)(@types/react@19.2.2)(react@19.2.0) + ink-table: + specifier: 'catalog:' + version: 3.1.0(ink@6.3.1(patch_hash=03cccf82711216d0fa8283ea4716ed803a132ae8c31293f0f5a6677e2bdb4a64)(@types/react@19.2.2)(react@19.2.0))(react@19.2.0) js-yaml: - specifier: npm:@zkochan/js-yaml@0.0.10 + specifier: 'catalog:' version: '@zkochan/js-yaml@0.0.10' - knip: - specifier: 5.63.1 - version: 5.63.1(@types/node@24.3.1)(typescript@5.9.3) lint-staged: - specifier: 16.1.6 + specifier: 'catalog:' version: 16.1.6 magic-string: - specifier: 0.30.19 + specifier: 'catalog:' version: 0.30.19 - meow: - specifier: 13.2.0 - version: 13.2.0 micromatch: - specifier: 4.0.8 + specifier: 'catalog:' version: 4.0.8 mock-fs: - specifier: 5.5.0 + specifier: 'catalog:' version: 5.5.0 + nanotar: + specifier: 'catalog:' + version: 0.2.0 nock: - specifier: 14.0.10 + specifier: 'catalog:' version: 14.0.10 npm-package-arg: specifier: 13.0.0 version: 13.0.0 npm-run-all2: - specifier: 8.0.4 + specifier: 'catalog:' version: 8.0.4 open: - specifier: 10.2.0 + specifier: 'catalog:' version: 10.2.0 - oxlint: - specifier: 1.15.0 - version: 1.15.0 pony-cause: - specifier: 2.1.11 + specifier: 'catalog:' version: 2.1.11 postject: - specifier: 1.0.0-alpha.6 + specifier: 'catalog:' version: 1.0.0-alpha.6 + react: + specifier: 'catalog:' + version: 19.2.0 + react-reconciler: + specifier: 'catalog:' + version: 0.33.0(react@19.2.0) registry-auth-token: - specifier: 5.1.0 + specifier: 'catalog:' version: 5.1.0 registry-url: - specifier: 7.2.0 + specifier: 'catalog:' version: 7.2.0 - rollup: - specifier: 4.50.1 - version: 4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f) semver: specifier: 7.7.2 version: 7.7.2 + ssri: + specifier: 'catalog:' + version: 12.0.0 synp: - specifier: 1.9.14 + specifier: 'catalog:' version: 1.9.14 taze: - specifier: 19.6.0 + specifier: 'catalog:' version: 19.6.0 terminal-link: - specifier: 2.1.1 + specifier: 'catalog:' version: 2.1.1 - tiny-updater: - specifier: 3.5.3 - version: 3.5.3(patch_hash=b3f4afb74b370538fe45248cba31833aee4553f83f15a6a07da47f85afae2f24) trash: - specifier: 10.0.0 + specifier: 'catalog:' version: 10.0.0 type-coverage: - specifier: 2.29.7 + specifier: 'catalog:' version: 2.29.7(typescript@5.9.3) + typescript: + specifier: 'catalog:' + version: 5.9.3 typescript-eslint: - specifier: 8.43.0 - version: 8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) + specifier: 'catalog:' + version: 8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) unplugin-purge-polyfills: - specifier: 0.1.0 + specifier: 'catalog:' version: 0.1.0 vitest: - specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1) + specifier: 'catalog:' + version: 4.0.3(@types/node@24.9.2)(jiti@2.6.1)(yaml@2.8.1) yaml: specifier: 2.8.1 version: 2.8.1 @@ -547,10 +677,13 @@ importers: specifier: 21.1.1 version: 21.1.1 yoctocolors-cjs: - specifier: 2.1.3 + specifier: 'catalog:' version: 2.1.3 + yoga-layout: + specifier: 'catalog:' + version: 3.2.1 zod: - specifier: 4.1.8 + specifier: 'catalog:' version: 4.1.8 packages/bootstrap: @@ -574,7 +707,7 @@ importers: specifier: workspace:* version: link:../cli '@socketsecurity/lib': - specifier: 'catalog:' + specifier: 4.3.0 version: 4.3.0(typescript@5.9.3) build-infra: specifier: workspace:* @@ -601,7 +734,7 @@ importers: specifier: 'catalog:' version: 7.28.4 '@socketsecurity/lib': - specifier: 'catalog:' + specifier: 4.3.0 version: 4.3.0(typescript@5.9.3) magic-string: specifier: 'catalog:' @@ -655,11 +788,11 @@ importers: specifier: 'catalog:' version: 3.0.1 '@socketsecurity/lib': - specifier: 'catalog:' + specifier: 4.3.0 version: 4.3.0(typescript@5.9.3) '@socketsecurity/registry': - specifier: 1.1.17 - version: 1.1.17 + specifier: 'catalog:' + version: 2.0.2(typescript@5.9.3) '@socketsecurity/sdk': specifier: 'catalog:' version: 3.1.3 @@ -670,11 +803,11 @@ importers: specifier: 'catalog:' version: 8.17.1 ansi-regex: - specifier: 6.1.0 - version: 6.1.0 + specifier: 6.2.2 + version: 6.2.2 brace-expansion: specifier: 2.0.2 - version: 2.0.2(patch_hash=eac47f4a81cd7be766bd391c6bf91ac462816eb2f3c5f99270419ac752d6f02d) + version: 2.0.2 browserslist: specifier: 'catalog:' version: 4.25.4 @@ -694,32 +827,32 @@ importers: specifier: 'catalog:' version: 6.0.0 emoji-regex: - specifier: 'catalog:' + specifier: 10.6.0 version: 10.6.0 fast-glob: specifier: 'catalog:' version: 3.3.3 graceful-fs: specifier: 4.2.11 - version: 4.2.11(patch_hash=17007d43dcc01ee2047730ab13eb23c41adc01ae0f24ee872b1fe69142db5200) + version: 4.2.11 hpagent: specifier: 'catalog:' version: 1.2.0 https-proxy-agent: - specifier: 'catalog:' + specifier: 7.0.6 version: 7.0.6 ignore: specifier: 'catalog:' version: 7.0.5 ink: specifier: 'catalog:' - version: 6.3.1(@types/react@19.2.2)(react@19.2.0) + version: 6.3.1(patch_hash=03cccf82711216d0fa8283ea4716ed803a132ae8c31293f0f5a6677e2bdb4a64)(@types/react@19.2.2)(react@19.2.0) ink-table: specifier: 'catalog:' - version: 3.1.0(ink@6.3.1(@types/react@19.2.2)(react@19.2.0))(react@19.2.0) + version: 3.1.0(ink@6.3.1(patch_hash=03cccf82711216d0fa8283ea4716ed803a132ae8c31293f0f5a6677e2bdb4a64)(@types/react@19.2.2)(react@19.2.0))(react@19.2.0) ink-text-input: specifier: 'catalog:' - version: 6.0.0(ink@6.3.1(@types/react@19.2.2)(react@19.2.0))(react@19.2.0) + version: 6.0.0(ink@6.3.1(patch_hash=03cccf82711216d0fa8283ea4716ed803a132ae8c31293f0f5a6677e2bdb4a64)(@types/react@19.2.2)(react@19.2.0))(react@19.2.0) micromatch: specifier: 'catalog:' version: 4.0.8 @@ -757,7 +890,7 @@ importers: specifier: 'catalog:' version: 12.0.0 string-width: - specifier: 'catalog:' + specifier: 8.1.0 version: 8.1.0 tar-stream: specifier: 'catalog:' @@ -797,7 +930,7 @@ importers: packages/socket: devDependencies: '@socketsecurity/lib': - specifier: 'catalog:' + specifier: 4.3.0 version: 4.3.0(typescript@5.9.3) build-infra: specifier: workspace:* @@ -828,35 +961,10 @@ packages: resolution: {integrity: sha512-mkOh+Wwawzuf5wa30bvc4nA+Qb6DIrGWgBhRR/Pw4T9nsgYait8izvXkNyU78D6Wcu3Z+KUdwCmLCxlWjEotYA==} engines: {node: '>=18'} - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - '@antfu/ni@25.0.0': resolution: {integrity: sha512-9q/yCljni37pkMr4sPrI3G4jqdIk074+iukc5aFJl7kmDCCsiJrbZ6zKxnES1Gwg+i9RcDZwvktl23puGslmvA==} hasBin: true - '@appthreat/atom-common@1.0.12': - resolution: {integrity: sha512-bsy1J/1Ge9uO+/VBUH79F9btmnJfedvytF3jFpDsINabF+x0koWdegXsjYg5sBuI9D8bfODail7vNJCBPl2u0g==} - - '@appthreat/atom-parsetools@1.0.12': - resolution: {integrity: sha512-eqU3LYaduUEFCt+tDs58txvYkyhuYLJHQm7+S+RwKaICkO8kJDrrcfBqHXngvNG0Th/TpVe4X9tl5uf5bd2I7g==} - engines: {node: '>=16.0.0'} - hasBin: true - - '@appthreat/atom@2.4.2': - resolution: {integrity: sha512-z9PkDrSydnuP+VoBeHcF4evVE98S1+ZASWfMR0ryBFUEDsZCWw3/bs8bpZNqwBYSo5/58ilEJRUcHQs7HwtbTA==} - engines: {node: '>=16.0.0'} - hasBin: true - - '@appthreat/cdx-proto@1.1.4': - resolution: {integrity: sha512-cAC1EpAesqMOfaOl1Q37WN38PV+nbc3MQmab0p3cVGsrL3KWP3dUbNWRdzN4sVL/gVOYEouwvR/PXvDF9WCeVA==} - engines: {node: '>=20'} - - '@appthreat/sqlite3@6.0.9': - resolution: {integrity: sha512-Aim5tAIusHm2zZVhqedZwl1MGiSMaWhJ9Ev9ctBuv82fJv/gmE0FhHY/tv/ikoMTNGWlaClAgJayfPLJxvkQ7Q==} - engines: {node: '>=20'} - '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} @@ -984,6 +1092,30 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-display-name@7.28.0': + resolution: {integrity: sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-development@7.27.1': + resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx@7.27.1': + resolution: {integrity: sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-pure-annotations@7.27.1': + resolution: {integrity: sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-runtime@7.28.3': resolution: {integrity: sha512-Y6ab1kGqZ0u42Zv/4a7l0l72n9DKP/MKoKWaUSBylrhNZO2prYuqFOLbn5aW5SIFXwSH93yfjbgllL8lxuGKLg==} engines: {node: '>=6.9.0'} @@ -996,6 +1128,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/preset-react@7.27.1': + resolution: {integrity: sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/preset-typescript@7.27.1': resolution: {integrity: sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==} engines: {node: '>=6.9.0'} @@ -1083,84 +1221,6 @@ packages: cpu: [x64] os: [win32] - '@bufbuild/protobuf@2.10.0': - resolution: {integrity: sha512-fdRs9PSrBF7QUntpZpq6BTw58fhgGJojgg39m9oFOJGZT+nip9b0so5cYY1oWl5pvemDLr0cPPsH46vwThEbpQ==} - - '@bufbuild/protobuf@2.6.3': - resolution: {integrity: sha512-w/gJKME9mYN7ZoUAmSMAWXk4hkVpxRKvEJCb3dV5g9wwWdxTJJ0ayOJAVcNxtdqaxDyFuC0uz4RSGVacJ030PQ==} - - '@coana-tech/cli@14.12.98': - resolution: {integrity: sha512-XCcBLjBSKMOWzl0mfenrpvJGMrsDrRDk/DZMLQNQZuMsRlE6/cH3A2MB1ukCum6s2n3NW2p1z+IJaINVHgZ4ww==} - hasBin: true - - '@colors/colors@1.5.0': - resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} - engines: {node: '>=0.1.90'} - - '@cyclonedx/cdxgen-plugins-bin-darwin-amd64@1.7.0': - resolution: {integrity: sha512-evJAEetfhKU7N9tCaOl/CZcs4upoEIKvLdhV9ogzk9QIur+HtZX5F9LddGNoQuzhB1Umy2tAyFAKhl+EX63BFQ==} - cpu: [x64] - os: [darwin] - - '@cyclonedx/cdxgen-plugins-bin-darwin-arm64@1.7.0': - resolution: {integrity: sha512-gnQqfDNd8RXKH3n/BUtSi1aJghPLSVpAScaM0iiuGvdfOVuwqBEMAKx/SC0v5yXdCtThC45W5/Zz8Lc9eNoNAw==} - cpu: [arm64] - os: [darwin] - - '@cyclonedx/cdxgen-plugins-bin-linux-amd64@1.7.0': - resolution: {integrity: sha512-Nitd3y1yb8Xv2e7ODqki3M8DO6SzWe/gGsioRiA6iNXcQ/JYzg03CyHEaTjCAhJXFO4qraCn4N6OPN2H7c8bew==} - cpu: [x64] - os: [linux] - libc: glibc - - '@cyclonedx/cdxgen-plugins-bin-linux-arm64@1.7.0': - resolution: {integrity: sha512-/96YdFdwASQVr+MDO1IbUMYbLoHawTDIsGlhyMV4AI47qKZ59Ein5dvdibqqmnxgmWvG4Vqp941gRaCBlCLWag==} - cpu: [arm64] - os: [linux] - libc: glibc - - '@cyclonedx/cdxgen-plugins-bin-linux-arm@1.7.0': - resolution: {integrity: sha512-eNnS9Kd+j4YDiIotCA3EQWyiHKjx7iZqh5+gyF38zmSJQRssEWvCdv+IPvXPyZw8hh5g9/8IQWPYMFpB3fpopg==} - cpu: [arm] - os: [linux] - libc: glibc - - '@cyclonedx/cdxgen-plugins-bin-linux-ppc64@1.7.0': - resolution: {integrity: sha512-AWLQ33x/mUtYLfIfCq8tZ8TykXUzzNo6ZLvf1eOmEeEyYw/9Yx6E7KzzaAakGl886lJW/1gzmhvFPXD+ZKEIpA==} - cpu: [ppc64] - os: [linux] - - '@cyclonedx/cdxgen-plugins-bin-linuxmusl-amd64@1.7.0': - resolution: {integrity: sha512-miYABkiNS+0m0z9L5lfIyiAQezuYthkzzPqX6DgPeMgFT8SfoUng2dtRzkCPLtCUBj8lMyBntXTjZrmH7QOMoA==} - cpu: [x64] - os: [linux] - libc: musl - - '@cyclonedx/cdxgen-plugins-bin-linuxmusl-arm64@1.7.0': - resolution: {integrity: sha512-Rh8ChTldyY/01EWrciyhnUltC2YNLmdkwaPDZsJT/as1Bu0Q4iOnepMw2WpqwzkaGbZG5PgFtzeuV1kBKjo07Q==} - cpu: [arm64] - os: [linux] - libc: musl - - '@cyclonedx/cdxgen-plugins-bin-windows-amd64@1.7.0': - resolution: {integrity: sha512-sCeTnlDq3Wojit2+MqErsYhD/Mv7VickLU2PazmamQc4LVZHakZPGxoG4CFUt4oFVux9CoY1+RxkE+Ia+E+fsA==} - cpu: [x64] - os: [win32] - - '@cyclonedx/cdxgen-plugins-bin-windows-arm64@1.7.0': - resolution: {integrity: sha512-AzQrY0H1A7JduJTBr/Ub7ppt9RKXjc2+AXV38dvekXYvKSnwnR4715gEZ0mwRnn/BZ4az0uQwMlJCpY8qttJIg==} - cpu: [arm64] - os: [win32] - - '@cyclonedx/cdxgen-plugins-bin@1.7.0': - resolution: {integrity: sha512-pgPMY2vHKMTcW24qtcql0uIck3t66U+QmUrO7C6E8kg06tJqBgo8PtT58FhI4B41lPrpq8rAQzo2jLCLu1JnCw==} - cpu: [x64] - - '@cyclonedx/cdxgen@11.11.0': - resolution: {integrity: sha512-2zBpuOUeL8ErifsQQJfQf3JNEo3veQUYNu3kg1JfPiyq8FBTuTiMUaHrMhjHb5N0Rl06yJU3YTBZtvMbEg3kXw==} - engines: {node: '>=20', pnpm: '>=10'} - hasBin: true - '@dotenvx/dotenvx@1.49.0': resolution: {integrity: sha512-M1cyP6YstFQCjih54SAxCqHLMMi8QqV8tenpgGE48RTXWD7vfMYJiw/6xcCDpS2h28AcLpTsFCZA863Ge9yxzA==} hasBin: true @@ -1411,9 +1471,6 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@iarna/toml@2.2.5': - resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} - '@isaacs/balanced-match@4.0.1': resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} engines: {node: 20 || >=22} @@ -1433,10 +1490,6 @@ packages: '@isaacs/string-locale-compare@1.1.0': resolution: {integrity: sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==} - '@istanbuljs/schema@0.1.3': - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -1453,9 +1506,6 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@keyv/serialize@1.1.1': - resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} - '@mswjs/interceptors@0.39.8': resolution: {integrity: sha512-2+BzZbjRO7Ct61k8fMNHEtoKjeWI9pIlHFTqBwZ5icHpqszIgEZbjb1MW5Z0+bITTCTl3gk4PDBxs9tA/csXvA==} engines: {node: '>=18'} @@ -1463,9 +1513,6 @@ packages: '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - '@napi-rs/wasm-runtime@1.0.7': - resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==} - '@noble/ciphers@1.3.0': resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} engines: {node: ^14.21.3 || >=16} @@ -1514,10 +1561,6 @@ packages: resolution: {integrity: sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==} engines: {node: ^18.17.0 || >=20.5.0} - '@npmcli/fs@5.0.0': - resolution: {integrity: sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og==} - engines: {node: ^20.17.0 || >=22.9.0} - '@npmcli/git@6.0.3': resolution: {integrity: sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ==} engines: {node: ^18.17.0 || >=20.5.0} @@ -1540,10 +1583,6 @@ packages: resolution: {integrity: sha512-mnuMuibEbkaBTYj9HQ3dMe6L0ylYW+s/gfz7tBDMFY/la0w9Kf44P9aLn4/+/t3aTR3YUHKoT6XQL9rlicIe3Q==} engines: {node: ^18.17.0 || >=20.5.0} - '@npmcli/map-workspaces@5.0.1': - resolution: {integrity: sha512-LFEh3vY5nyiVI9IY9rko7FtAtS9fjgQySARlccKbnS7BMWFyQF73OT/n8NG22/8xyp57xPIl13gwO/OD63nktg==} - engines: {node: ^20.17.0 || >=22.9.0} - '@npmcli/metavuln-calculator@9.0.3': resolution: {integrity: sha512-94GLSYhLXF2t2LAC7pDwLaM4uCARzxShyAQKsirmlNcpidH89VA4/+K1LbJmRMgz5gy65E/QBBWQdUvGLe2Frg==} engines: {node: ^20.17.0 || >=22.9.0} @@ -1552,10 +1591,6 @@ packages: resolution: {integrity: sha512-61cDL8LUc9y80fXn+lir+iVt8IS0xHqEKwPu/5jCjxQTVoSCmkXvw4vbMrzAMtmghz3/AkiBjhHkDKUH+kf7kA==} engines: {node: ^18.17.0 || >=20.5.0} - '@npmcli/name-from-folder@4.0.0': - resolution: {integrity: sha512-qfrhVlOSqmKM8i6rkNdZzABj8MKEITGFAY+4teqBziksCQAOLutiAxM1wY2BKEd8KjUSpWmWCYxvXr0y4VTlPg==} - engines: {node: ^20.17.0 || >=22.9.0} - '@npmcli/node-gyp@4.0.0': resolution: {integrity: sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==} engines: {node: ^18.17.0 || >=20.5.0} @@ -1568,10 +1603,6 @@ packages: resolution: {integrity: sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA==} engines: {node: ^18.17.0 || >=20.5.0} - '@npmcli/package-json@7.0.1': - resolution: {integrity: sha512-956YUeI0YITbk2+KnirCkD19HLzES0habV+Els+dyZaVsaM6VGSiNwnRu6t3CZaqDLz4KXy2zx+0N/Zy6YjlAA==} - engines: {node: ^20.17.0 || >=22.9.0} - '@npmcli/package-json@7.0.2': resolution: {integrity: sha512-0ylN3U5htO1SJTmy2YI78PZZjLkKUGg7EKgukb2CRi0kzyoDr0cfjHAzi7kozVhj2V3SxN1oyKqZ2NSo40z00g==} engines: {node: ^20.17.0 || >=22.9.0} @@ -1588,10 +1619,6 @@ packages: resolution: {integrity: sha512-4OIPFb4weUUwkDXJf4Hh1inAn8neBGq3xsH4ZsAaN6FK3ldrFkH7jSpCc7N9xesi0Sp+EBXJ9eGMDrEww2Ztqw==} engines: {node: ^18.17.0 || >=20.5.0} - '@npmcli/query@5.0.0': - resolution: {integrity: sha512-8TZWfTQOsODpLqo9SVhVjHovmKXNpevHU0gO9e+y4V4fRIOneiXy0u0sMP9LmS71XivrEWfZWg50ReH4WRT4aQ==} - engines: {node: ^20.17.0 || >=22.9.0} - '@npmcli/redact@3.2.2': resolution: {integrity: sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg==} engines: {node: ^18.17.0 || >=20.5.0} @@ -1885,168 +1912,21 @@ packages: peerDependencies: '@opentelemetry/api': ^1.1.0 - '@oxc-resolver/binding-android-arm-eabi@11.13.2': - resolution: {integrity: sha512-vWd1NEaclg/t2DtEmYzRRBNQOueMI8tixw/fSNZ9XETXLRJiAjQMYpYeflQdRASloGze6ZelHE/wIBNt4S+pkw==} - cpu: [arm] - os: [android] + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} - '@oxc-resolver/binding-android-arm64@11.13.2': - resolution: {integrity: sha512-jxZrYcxgpI6IuQpguQVAQNrZfUyiYfMVqR4pKVU3PRLCM7AsfXNKp0TIgcvp+l6dYVdoZ1MMMMa5Ayjd09rNOw==} - cpu: [arm64] - os: [android] + '@pnpm/config.env-replace@1.1.0': + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} - '@oxc-resolver/binding-darwin-arm64@11.13.2': - resolution: {integrity: sha512-RDS3HUe1FvgjNS1xfBUqiEJ8938Zb5r7iKABwxEblp3K4ufZZNAtoaHjdUH2TJ0THDmuf0OxxVUO/Y+4Ep4QfQ==} - cpu: [arm64] - os: [darwin] + '@pnpm/constants@1001.3.0': + resolution: {integrity: sha512-ZFRekNHbDlu//67Byg+mG8zmtmCsfBhNsg1wKBLRtF7VjH+Q5TDGMX0+8aJYSikQDuzM2FOhvQcDwyjILKshJQ==} + engines: {node: '>=18.12'} - '@oxc-resolver/binding-darwin-x64@11.13.2': - resolution: {integrity: sha512-tDcyWtkUzkt6auJLP2dOjL84BxqHkKW4mz2lNRIGPTq7b+HBraB+m8RdRH6BgqTvbnNECOxR3XAMaKBKC8J51g==} - cpu: [x64] - os: [darwin] - - '@oxc-resolver/binding-freebsd-x64@11.13.2': - resolution: {integrity: sha512-fpaeN8Q0kWvKns9uSMg6CcKo7cdgmWt6J91stPf8sdM+EKXzZ0YcRnWWyWF8SM16QcLUPCy5Iwt5Z8aYBGaZYA==} - cpu: [x64] - os: [freebsd] - - '@oxc-resolver/binding-linux-arm-gnueabihf@11.13.2': - resolution: {integrity: sha512-idBgJU5AvSsGOeaIWiFBKbNBjpuduHsJmrG4CBbEUNW/Ykx+ISzcuj1PHayiYX6R9stVsRhj3d2PyymfC5KWRg==} - cpu: [arm] - os: [linux] - - '@oxc-resolver/binding-linux-arm-musleabihf@11.13.2': - resolution: {integrity: sha512-BlBvQUhvvIM/7s96KlKhMk0duR2sj8T7Hyii46/5QnwfN/pHwobvOL5czZ6/SKrHNB/F/qDY4hGsBuB1y7xgTg==} - cpu: [arm] - os: [linux] - - '@oxc-resolver/binding-linux-arm64-gnu@11.13.2': - resolution: {integrity: sha512-lUmDTmYOGpbIK+FBfZ0ySaQTo7g1Ia/WnDnQR2wi/0AtehZIg/ZZIgiT/fD0iRvKEKma612/0PVo8dXdAKaAGA==} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@oxc-resolver/binding-linux-arm64-musl@11.13.2': - resolution: {integrity: sha512-dkGzOxo+I9lA4Er6qzFgkFevl3JvwyI9i0T/PkOJHva04rb1p9dz8GPogTO9uMK4lrwLWzm/piAu+tHYC7v7+w==} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@oxc-resolver/binding-linux-ppc64-gnu@11.13.2': - resolution: {integrity: sha512-53kWsjLkVFnoSA7COdps38pBssN48zI8LfsOvupsmQ0/4VeMYb+0Ao9O6r52PtmFZsGB3S1Qjqbjl/Pswj1a3g==} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@oxc-resolver/binding-linux-riscv64-gnu@11.13.2': - resolution: {integrity: sha512-MfxN6DMpvmdCbGlheJ+ihy11oTcipqDfcEIQV9ah3FGXBRCZtBOHJpQDk8qI2Y+nCXVr3Nln7OSsOzoC4+rSYQ==} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@oxc-resolver/binding-linux-riscv64-musl@11.13.2': - resolution: {integrity: sha512-WXrm4YiRU0ijqb72WHSjmfYaQZ7t6/kkQrFc4JtU+pUE4DZA/DEdxOuQEd4Q43VqmLvICTJWSaZMlCGQ4PSRUg==} - cpu: [riscv64] - os: [linux] - libc: [musl] - - '@oxc-resolver/binding-linux-s390x-gnu@11.13.2': - resolution: {integrity: sha512-4pISWIlOFRUhWyvGCB3XUhtcwyvwGGhlXhHz7IXCXuGufaQtvR05trvw8U1ZnaPhsdPBkRhOMIedX11ayi5uXw==} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@oxc-resolver/binding-linux-x64-gnu@11.13.2': - resolution: {integrity: sha512-DVo6jS8n73yNAmCsUOOk2vBeC60j2RauDXQM8p7RDl0afsEaA2le22vD8tky7iNoM5tsxfBmE4sOJXEKgpwWRw==} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@oxc-resolver/binding-linux-x64-musl@11.13.2': - resolution: {integrity: sha512-6WqrE+hQBFP35KdwQjWcZpldbTq6yJmuTVThISu+rY3+j6MaDp2ciLHTr1X68r2H/7ocOIl4k3NnOVIzeRJE3w==} - cpu: [x64] - os: [linux] - libc: [musl] - - '@oxc-resolver/binding-wasm32-wasi@11.13.2': - resolution: {integrity: sha512-YpxvQmP2D+mNUkLQZbBjGz20g/pY8XoOBdPPoWMl9X68liFFjXxkPQTrZxWw4zzG/UkTM5z6dPRTyTePRsMcjw==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - - '@oxc-resolver/binding-win32-arm64-msvc@11.13.2': - resolution: {integrity: sha512-1SKBw6KcCmvPBdEw1/Qdpv6eSDf23lCXTWz9VxTe6QUQ/1wR+HZR2uS4q6C8W6jnIswMTQbxpTvVwdRXl+ufeA==} - cpu: [arm64] - os: [win32] - - '@oxc-resolver/binding-win32-ia32-msvc@11.13.2': - resolution: {integrity: sha512-KEVV7wggDucxRn3vvyHnmTCPXoCT7vWpH18UVLTygibHJvNRP2zl5lBaQcCIdIaYYZjKt1aGI/yZqxZvHoiCdg==} - cpu: [ia32] - os: [win32] - - '@oxc-resolver/binding-win32-x64-msvc@11.13.2': - resolution: {integrity: sha512-6AAdN9v/wO5c3td1yidgNLKYlzuNgfOtEqBq60WE469bJWR7gHgG/S5aLR2pH6/gyPLs9UXtItxi934D+0Estg==} - cpu: [x64] - os: [win32] - - '@oxlint/darwin-arm64@1.15.0': - resolution: {integrity: sha512-fwYg7WDKI6eAErREBGMXkIAOqBuBFN0LWbQJvVNXCGjywGxsisdwkHnNu4UG8IpHo4P71mUxf3l2xm+5Xiy+TA==} - cpu: [arm64] - os: [darwin] - - '@oxlint/darwin-x64@1.15.0': - resolution: {integrity: sha512-RtaAmB6NZZx4hvjCg6w35shzRY5fLclbMsToC92MTZ9lMDF9LotzcbyNHCZ1tvZb1tNPObpIsuX16BFeElF8nw==} - cpu: [x64] - os: [darwin] - - '@oxlint/linux-arm64-gnu@1.15.0': - resolution: {integrity: sha512-8uV0lAbmqp93KTBlJWyCdQWuxTzLn+QrDRidUaCLJjn65uvv8KlRhZJoZoyLh17X6U/cgezYktWTMiMhxX56BA==} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@oxlint/linux-arm64-musl@1.15.0': - resolution: {integrity: sha512-/+hTqh1J29+2GitKrWUHIYjQBM1szWSJ1U7OzQlgL+Uvf8jxg4sn1nV79LcPMXhC2t8lZy5EOXOgwIh92DsdhQ==} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@oxlint/linux-x64-gnu@1.15.0': - resolution: {integrity: sha512-GzeY3AhUd49yV+/76Gw0pjpwUJwxCkwYAJTNe7fFTdWjEQ6M6g8ZzJg5FKtUvgA5sMgmfzHhvSXxvT57YhcXnA==} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@oxlint/linux-x64-musl@1.15.0': - resolution: {integrity: sha512-p/7+juizUOCpGYreFmdfmIOSSSE3+JfsgnXnOHuP8mqlZfiOeXyevyajuXpPNRM60+k0reGvlV7ezp1iFitF7w==} - cpu: [x64] - os: [linux] - libc: [musl] - - '@oxlint/win32-arm64@1.15.0': - resolution: {integrity: sha512-2LaDLOtCMq+lzIQ63Eir3UJV/hQNlw01xtsij2L8sSxt4gA+zWvubOQJQIOPGMDxEKFcWT1lo/6YEXX/sNnZDA==} - cpu: [arm64] - os: [win32] - - '@oxlint/win32-x64@1.15.0': - resolution: {integrity: sha512-+jgRPpZrFIcrNxCVsDIy6HVCRpKVDN0DHD8VJodjrsDv6heqhq/qCTa2IXY3R4glWe1nWQ5JgdFKLn3Bl+aLNg==} - cpu: [x64] - os: [win32] - - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - - '@pnpm/config.env-replace@1.1.0': - resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} - engines: {node: '>=12.22.0'} - - '@pnpm/constants@1001.3.0': - resolution: {integrity: sha512-ZFRekNHbDlu//67Byg+mG8zmtmCsfBhNsg1wKBLRtF7VjH+Q5TDGMX0+8aJYSikQDuzM2FOhvQcDwyjILKshJQ==} - engines: {node: '>=18.12'} - - '@pnpm/crypto.hash@1000.2.0': - resolution: {integrity: sha512-L22sQHDC4VM9cPSbOFi0e+C7JSt3isl/biV1jShz8MG9QjemiwTUMog4h0k0C5HoB1ycUjGkXTqAE4RJu3jLQA==} - engines: {node: '>=18.12'} + '@pnpm/crypto.hash@1000.2.0': + resolution: {integrity: sha512-L22sQHDC4VM9cPSbOFi0e+C7JSt3isl/biV1jShz8MG9QjemiwTUMog4h0k0C5HoB1ycUjGkXTqAE4RJu3jLQA==} + engines: {node: '>=18.12'} '@pnpm/crypto.polyfill@1000.1.0': resolution: {integrity: sha512-tNe7a6U4rCpxLMBaR0SIYTdjxGdL0Vwb3G1zY8++sPtHSvy7qd54u8CIB0Z+Y6t5tc9pNYMYCMwhE/wdSY7ltg==} @@ -2165,182 +2045,126 @@ packages: '@quansync/fs@0.1.5': resolution: {integrity: sha512-lNS9hL2aS2NZgNW7BBj+6EBl4rOf8l+tQ0eRY6JWCI8jI2kc53gSoqbjojU0OnAWhzoXiOjFyGsHcDGePB3lhA==} - '@rollup/plugin-babel@6.0.4': - resolution: {integrity: sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==} - engines: {node: '>=14.0.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@types/babel__core': ^7.1.9 - rollup: 4.50.1 - peerDependenciesMeta: - '@types/babel__core': - optional: true - rollup: - optional: true - - '@rollup/plugin-commonjs@28.0.6': - resolution: {integrity: sha512-XSQB1K7FUU5QP+3lOQmVCE3I0FcbbNvmNT4VJSj93iUjayaARrTQeoRdiYQoftAJBLrR9t2agwAd3ekaTgHNlw==} - engines: {node: '>=16.0.0 || 14 >= 14.17'} - peerDependencies: - rollup: 4.50.1 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-json@6.1.0': - resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: 4.50.1 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-node-resolve@16.0.1': - resolution: {integrity: sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: 4.50.1 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-replace@6.0.2': - resolution: {integrity: sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: 4.50.1 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/pluginutils@5.3.0': - resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: 4.50.1 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/rollup-android-arm-eabi@4.50.1': - resolution: {integrity: sha512-HJXwzoZN4eYTdD8bVV22DN8gsPCAj3V20NHKOs8ezfXanGpmVPR7kalUHd+Y31IJp9stdB87VKPFbsGY3H/2ag==} + '@rollup/rollup-android-arm-eabi@4.53.2': + resolution: {integrity: sha512-yDPzwsgiFO26RJA4nZo8I+xqzh7sJTZIWQOxn+/XOdPE31lAvLIYCKqjV+lNH/vxE2L2iH3plKxDCRK6i+CwhA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.50.1': - resolution: {integrity: sha512-PZlsJVcjHfcH53mOImyt3bc97Ep3FJDXRpk9sMdGX0qgLmY0EIWxCag6EigerGhLVuL8lDVYNnSo8qnTElO4xw==} + '@rollup/rollup-android-arm64@4.53.2': + resolution: {integrity: sha512-k8FontTxIE7b0/OGKeSN5B6j25EuppBcWM33Z19JoVT7UTXFSo3D9CdU39wGTeb29NO3XxpMNauh09B+Ibw+9g==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.50.1': - resolution: {integrity: sha512-xc6i2AuWh++oGi4ylOFPmzJOEeAa2lJeGUGb4MudOtgfyyjr4UPNK+eEWTPLvmPJIY/pgw6ssFIox23SyrkkJw==} + '@rollup/rollup-darwin-arm64@4.53.2': + resolution: {integrity: sha512-A6s4gJpomNBtJ2yioj8bflM2oogDwzUiMl2yNJ2v9E7++sHrSrsQ29fOfn5DM/iCzpWcebNYEdXpaK4tr2RhfQ==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.50.1': - resolution: {integrity: sha512-2ofU89lEpDYhdLAbRdeyz/kX3Y2lpYc6ShRnDjY35bZhd2ipuDMDi6ZTQ9NIag94K28nFMofdnKeHR7BT0CATw==} + '@rollup/rollup-darwin-x64@4.53.2': + resolution: {integrity: sha512-e6XqVmXlHrBlG56obu9gDRPW3O3hLxpwHpLsBJvuI8qqnsrtSZ9ERoWUXtPOkY8c78WghyPHZdmPhHLWNdAGEw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.50.1': - resolution: {integrity: sha512-wOsE6H2u6PxsHY/BeFHA4VGQN3KUJFZp7QJBmDYI983fgxq5Th8FDkVuERb2l9vDMs1D5XhOrhBrnqcEY6l8ZA==} + '@rollup/rollup-freebsd-arm64@4.53.2': + resolution: {integrity: sha512-v0E9lJW8VsrwPux5Qe5CwmH/CF/2mQs6xU1MF3nmUxmZUCHazCjLgYvToOk+YuuUqLQBio1qkkREhxhc656ViA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.50.1': - resolution: {integrity: sha512-A/xeqaHTlKbQggxCqispFAcNjycpUEHP52mwMQZUNqDUJFFYtPHCXS1VAG29uMlDzIVr+i00tSFWFLivMcoIBQ==} + '@rollup/rollup-freebsd-x64@4.53.2': + resolution: {integrity: sha512-ClAmAPx3ZCHtp6ysl4XEhWU69GUB1D+s7G9YjHGhIGCSrsg00nEGRRZHmINYxkdoJehde8VIsDC5t9C0gb6yqA==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.50.1': - resolution: {integrity: sha512-54v4okehwl5TaSIkpp97rAHGp7t3ghinRd/vyC1iXqXMfjYUTm7TfYmCzXDoHUPTTf36L8pr0E7YsD3CfB3ZDg==} + '@rollup/rollup-linux-arm-gnueabihf@4.53.2': + resolution: {integrity: sha512-EPlb95nUsz6Dd9Qy13fI5kUPXNSljaG9FiJ4YUGU1O/Q77i5DYFW5KR8g1OzTcdZUqQQ1KdDqsTohdFVwCwjqg==} cpu: [arm] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.50.1': - resolution: {integrity: sha512-p/LaFyajPN/0PUHjv8TNyxLiA7RwmDoVY3flXHPSzqrGcIp/c2FjwPPP5++u87DGHtw+5kSH5bCJz0mvXngYxw==} + '@rollup/rollup-linux-arm-musleabihf@4.53.2': + resolution: {integrity: sha512-BOmnVW+khAUX+YZvNfa0tGTEMVVEerOxN0pDk2E6N6DsEIa2Ctj48FOMfNDdrwinocKaC7YXUZ1pHlKpnkja/Q==} cpu: [arm] os: [linux] libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.50.1': - resolution: {integrity: sha512-2AbMhFFkTo6Ptna1zO7kAXXDLi7H9fGTbVaIq2AAYO7yzcAsuTNWPHhb2aTA6GPiP+JXh85Y8CiS54iZoj4opw==} + '@rollup/rollup-linux-arm64-gnu@4.53.2': + resolution: {integrity: sha512-Xt2byDZ+6OVNuREgBXr4+CZDJtrVso5woFtpKdGPhpTPHcNG7D8YXeQzpNbFRxzTVqJf7kvPMCub/pcGUWgBjA==} cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.50.1': - resolution: {integrity: sha512-Cgef+5aZwuvesQNw9eX7g19FfKX5/pQRIyhoXLCiBOrWopjo7ycfB292TX9MDcDijiuIJlx1IzJz3IoCPfqs9w==} + '@rollup/rollup-linux-arm64-musl@4.53.2': + resolution: {integrity: sha512-+LdZSldy/I9N8+klim/Y1HsKbJ3BbInHav5qE9Iy77dtHC/pibw1SR/fXlWyAk0ThnpRKoODwnAuSjqxFRDHUQ==} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loongarch64-gnu@4.50.1': - resolution: {integrity: sha512-RPhTwWMzpYYrHrJAS7CmpdtHNKtt2Ueo+BlLBjfZEhYBhK00OsEqM08/7f+eohiF6poe0YRDDd8nAvwtE/Y62Q==} + '@rollup/rollup-linux-loong64-gnu@4.53.2': + resolution: {integrity: sha512-8ms8sjmyc1jWJS6WdNSA23rEfdjWB30LH8Wqj0Cqvv7qSHnvw6kgMMXRdop6hkmGPlyYBdRPkjJnj3KCUHV/uQ==} cpu: [loong64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-gnu@4.50.1': - resolution: {integrity: sha512-eSGMVQw9iekut62O7eBdbiccRguuDgiPMsw++BVUg+1K7WjZXHOg/YOT9SWMzPZA+w98G+Fa1VqJgHZOHHnY0Q==} + '@rollup/rollup-linux-ppc64-gnu@4.53.2': + resolution: {integrity: sha512-3HRQLUQbpBDMmzoxPJYd3W6vrVHOo2cVW8RUo87Xz0JPJcBLBr5kZ1pGcQAhdZgX9VV7NbGNipah1omKKe23/g==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-gnu@4.50.1': - resolution: {integrity: sha512-S208ojx8a4ciIPrLgazF6AgdcNJzQE4+S9rsmOmDJkusvctii+ZvEuIC4v/xFqzbuP8yDjn73oBlNDgF6YGSXQ==} + '@rollup/rollup-linux-riscv64-gnu@4.53.2': + resolution: {integrity: sha512-fMjKi+ojnmIvhk34gZP94vjogXNNUKMEYs+EDaB/5TG/wUkoeua7p7VCHnE6T2Tx+iaghAqQX8teQzcvrYpaQA==} cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.50.1': - resolution: {integrity: sha512-3Ag8Ls1ggqkGUvSZWYcdgFwriy2lWo+0QlYgEFra/5JGtAd6C5Hw59oojx1DeqcA2Wds2ayRgvJ4qxVTzCHgzg==} + '@rollup/rollup-linux-riscv64-musl@4.53.2': + resolution: {integrity: sha512-XuGFGU+VwUUV5kLvoAdi0Wz5Xbh2SrjIxCtZj6Wq8MDp4bflb/+ThZsVxokM7n0pcbkEr2h5/pzqzDYI7cCgLQ==} cpu: [riscv64] os: [linux] libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.50.1': - resolution: {integrity: sha512-t9YrKfaxCYe7l7ldFERE1BRg/4TATxIg+YieHQ966jwvo7ddHJxPj9cNFWLAzhkVsbBvNA4qTbPVNsZKBO4NSg==} + '@rollup/rollup-linux-s390x-gnu@4.53.2': + resolution: {integrity: sha512-w6yjZF0P+NGzWR3AXWX9zc0DNEGdtvykB03uhonSHMRa+oWA6novflo2WaJr6JZakG2ucsyb+rvhrKac6NIy+w==} cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.50.1': - resolution: {integrity: sha512-MCgtFB2+SVNuQmmjHf+wfI4CMxy3Tk8XjA5Z//A0AKD7QXUYFMQcns91K6dEHBvZPCnhJSyDWLApk40Iq/H3tA==} + '@rollup/rollup-linux-x64-gnu@4.53.2': + resolution: {integrity: sha512-yo8d6tdfdeBArzC7T/PnHd7OypfI9cbuZzPnzLJIyKYFhAQ8SvlkKtKBMbXDxe1h03Rcr7u++nFS7tqXz87Gtw==} cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.50.1': - resolution: {integrity: sha512-nEvqG+0jeRmqaUMuwzlfMKwcIVffy/9KGbAGyoa26iu6eSngAYQ512bMXuqqPrlTyfqdlB9FVINs93j534UJrg==} + '@rollup/rollup-linux-x64-musl@4.53.2': + resolution: {integrity: sha512-ah59c1YkCxKExPP8O9PwOvs+XRLKwh/mV+3YdKqQ5AMQ0r4M4ZDuOrpWkUaqO7fzAHdINzV9tEVu8vNw48z0lA==} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openharmony-arm64@4.50.1': - resolution: {integrity: sha512-RDsLm+phmT3MJd9SNxA9MNuEAO/J2fhW8GXk62G/B4G7sLVumNFbRwDL6v5NrESb48k+QMqdGbHgEtfU0LCpbA==} + '@rollup/rollup-openharmony-arm64@4.53.2': + resolution: {integrity: sha512-4VEd19Wmhr+Zy7hbUsFZ6YXEiP48hE//KPLCSVNY5RMGX2/7HZ+QkN55a3atM1C/BZCGIgqN+xrVgtdak2S9+A==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.50.1': - resolution: {integrity: sha512-hpZB/TImk2FlAFAIsoElM3tLzq57uxnGYwplg6WDyAxbYczSi8O2eQ+H2Lx74504rwKtZ3N2g4bCUkiamzS6TQ==} + '@rollup/rollup-win32-arm64-msvc@4.53.2': + resolution: {integrity: sha512-IlbHFYc/pQCgew/d5fslcy1KEaYVCJ44G8pajugd8VoOEI8ODhtb/j8XMhLpwHCMB3yk2J07ctup10gpw2nyMA==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.50.1': - resolution: {integrity: sha512-SXjv8JlbzKM0fTJidX4eVsH+Wmnp0/WcD8gJxIZyR6Gay5Qcsmdbi9zVtnbkGPG8v2vMR1AD06lGWy5FLMcG7A==} + '@rollup/rollup-win32-ia32-msvc@4.53.2': + resolution: {integrity: sha512-lNlPEGgdUfSzdCWU176ku/dQRnA7W+Gp8d+cWv73jYrb8uT7HTVVxq62DUYxjbaByuf1Yk0RIIAbDzp+CnOTFg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.50.1': - resolution: {integrity: sha512-StxAO/8ts62KZVRAm4JZYq9+NqNsV7RvimNK+YM7ry//zebEH6meuugqW/P5OFUCjyQgui+9fUxT6d5NShvMvA==} + '@rollup/rollup-win32-x64-gnu@4.53.2': + resolution: {integrity: sha512-S6YojNVrHybQis2lYov1sd+uj7K0Q05NxHcGktuMMdIQ2VixGwAfbJ23NnlvvVV1bdpR2m5MsNBViHJKcA4ADw==} cpu: [x64] os: [win32] - '@sec-ant/readable-stream@0.4.1': - resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + '@rollup/rollup-win32-x64-msvc@4.53.2': + resolution: {integrity: sha512-k+/Rkcyx//P6fetPoLMb8pBeqJBNGx81uuf7iljX9++yNBVRDQgD04L+SVXmXmh5ZP4/WOp4mWF0kmi06PW2tA==} + cpu: [x64] + os: [win32] '@sentry/core@8.0.0': resolution: {integrity: sha512-PgOqQPdlIbiLFOo0F6IBzMbvusiEQ86+yXd76pIsuqQ2tj+iFL5gdYOckF/FKVpAwhfzIx64GKin2C+535c1qQ==} @@ -2405,10 +2229,6 @@ packages: resolution: {integrity: sha512-SME/vtXaJcnQ/HpeV6P82Egy+jThn11IKfwW8+/XVoRD0rmPHVTeKMtww1oWdVnMykzVPjmrDN9S8NBndPEHCQ==} engines: {node: '>=8'} - '@sindresorhus/is@7.1.1': - resolution: {integrity: sha512-rO92VvpgMc3kfiTjGT52LEtJ8Yc5kCWhZjLQ3LwlA4pSgPpQO7bVpYXParOD8Jwf+cVQECJo3yP/4I8aZtUQTQ==} - engines: {node: '>=18'} - '@sindresorhus/merge-streams@2.3.0': resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} @@ -2417,28 +2237,15 @@ packages: resolution: {integrity: sha512-btXmvw1JpA8WtSoXx9mTapo9NAyIDKRRzK84i48d8zc0X09M6ORfobVnHbgwhXf7CFhkRzhYrHG9dqbI9vpELQ==} engines: {node: '>=18'} - '@socketregistry/globalthis@1.0.8': - resolution: {integrity: sha512-keylYAVfNG8oovtMwsaai129NlhO7NwytSnRVNqR91nqx0uhA+XuWCcFDxw22QJYT/7mlNrR1MdkKL2Ks6Rq3Q==} - engines: {node: '>=18'} - '@socketregistry/hasown@1.0.7': resolution: {integrity: sha512-MZ5dyXOtiEc7q3801T+2EmKkxrd55BOSQnG8z/8/IkIJzDxqBxGGBKVyixqFm3W657TyUEBfIT9iWgSB6ipFsA==} engines: {node: '>=18'} - '@socketregistry/hyrious__bun.lockb@1.0.18': - resolution: {integrity: sha512-r1c03syFohMbFXAa3BNe+JyUQhynJmHrK8/6aL8DbTdwGVI0oHSnWxGVHjoPGPINAi+N2J5/CNm8kId3MBwelA==} - engines: {node: '>=18'} - hasBin: true - '@socketregistry/hyrious__bun.lockb@1.0.19': resolution: {integrity: sha512-Tqgd8FHrJBRaF/6GMTaJbQZQHnwoPVzowzlrZXSimujxVMIDSUlyx0TGmcz33gBWZLXaimZ9labhn44VG6CFkg==} engines: {node: '>=18'} hasBin: true - '@socketregistry/indent-string@1.0.13': - resolution: {integrity: sha512-h8MfBgjoPFiRYp60S9qzQJrmNIE/jAnqrjWZRGnHeKmpBH5M3DTwblrPG3hqxlu9IDtiu7H9NDvDGfFcM7dirw==} - engines: {node: '>=18'} - '@socketregistry/indent-string@1.0.14': resolution: {integrity: sha512-SCb2h+KkZppDEDyzZheazziUpJQVeCpEMQxSiTn4VMbVkGgvpNVAWQyx3IniSzwiSJpASmwTRTlhiYk6AR19bw==} engines: {node: '>=18'} @@ -2455,10 +2262,6 @@ packages: resolution: {integrity: sha512-DM81ydAjO2GJKkNf2Vn17InJ37sEYLK1YyhxpDX16OdbOpYlsDIw8QyeFEUZtc7GqsQXbcPKJmz3j/2qS+BhKQ==} engines: {node: '>=18'} - '@socketregistry/packageurl-js@1.0.9': - resolution: {integrity: sha512-q0DbpmRhvD9MNChqFtdbiEjMHayx5LeK6/8ZRDjHdE7L9wPPtAwVo+at5nMk2r3drV7sXoeUjkB/zGrh7r0DRQ==} - engines: {node: '>=18'} - '@socketregistry/packageurl-js@1.3.5': resolution: {integrity: sha512-Fl4GNUJ/z3IBJBGj4IsJfuRGUBCRMgX0df0mb5x5buaCPDKC+NhMhAFuxpc3viLSHV12CO2rGaNCf4fBYWI0FA==} engines: {node: '>=18', pnpm: '>=10.16.0'} @@ -2496,26 +2299,26 @@ packages: typescript: optional: true - '@socketsecurity/registry@1.1.17': - resolution: {integrity: sha512-5j0eH6JaBZlcvnbdu+58Sw8c99AK25PTp0Z/lwP7HknHdJ0TMMoTzNIBbp7WCTZKoGrPgBWchi0udN1ObZ53VQ==} - engines: {node: '>=18'} - - '@socketsecurity/sdk@1.4.94': - resolution: {integrity: sha512-GVriiYWEx69WOfsP1NZ4/el8CrOeDEmSsa8M8uZRXhCweHSBMSy7ElZ2aARLgJj5ju9TY++pUTBFmYtKpLK6PQ==} + '@socketsecurity/registry@2.0.2': + resolution: {integrity: sha512-hGfteZxSnPN2gmOc9A5cJmyTZBumgMWmg2MVOMRmQjFwxVssk/Bs5dgETGGSOfWBmo/g1K5rBfPs1vE0n/SXMQ==} engines: {node: '>=18'} + peerDependencies: + typescript: '>=5.0.0' + peerDependenciesMeta: + typescript: + optional: true '@socketsecurity/sdk@3.1.3': resolution: {integrity: sha512-GSOysDaKLAtXY6ZLJdf3YKPliCPxsa84J4JXBzTOZA6X+xSdcOPu1423VUmr5tG9ZJTRWH5z0fMNq3EyeALONA==} engines: {node: '>=18', pnpm: '>=10.16.0'} + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + '@stroncium/procfs@1.2.1': resolution: {integrity: sha512-X1Iui3FUNZP18EUvysTHxt+Avu2nlVzyf90YM8OYgP6SGzTzzX/0JgObfO1AQQDzuZtNNz29bVh8h5R97JrjxA==} engines: {node: '>=8'} - '@szmarczak/http-timer@5.0.1': - resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} - engines: {node: '>=14.16'} - '@tufjs/canonical-json@2.0.0': resolution: {integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==} engines: {node: ^16.14.0 || >=18.0.0} @@ -2530,9 +2333,6 @@ packages: '@types/accepts@1.3.7': resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==} - '@types/blessed@0.1.25': - resolution: {integrity: sha512-kQsjBgtsbJLmG6CJA+Z6Nujj+tq1fcSE3UIowbDvzQI4wWmoTV7djUDhSo5lDjgwpIN0oRvks0SA5mMdKE5eFg==} - '@types/body-parser@1.19.6': resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} @@ -2560,9 +2360,6 @@ packages: '@types/cookies@0.9.2': resolution: {integrity: sha512-1AvkDdZM2dbyFybL4fxpuNCaWyv//0AwsuUk2DWeXyM1/5ZKm6W3z6mQi24RZ4l2ucY+bkSHzbDVpySqPGuV8A==} - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} @@ -2578,12 +2375,13 @@ packages: '@types/http-assert@1.5.6': resolution: {integrity: sha512-TTEwmtjgVbYAzZYWyeHPrrtWnfVkm8tQkP8P21uQifPgMRgjrow3XDEYqucuC8SKZJT7pUnhU/JymvjggxO9vw==} - '@types/http-cache-semantics@4.0.4': - resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} - '@types/http-errors@2.0.5': resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} + '@types/ink@2.0.3': + resolution: {integrity: sha512-DYKIKEJqhsGfQ/jgX0t9BzfHmBJ/9dBBT2MDsHAQRAfOPhEe7LZm5QeNBx1J34/e108StCPuJ3r4bh1y38kCJA==} + deprecated: This is a stub types definition. ink provides its own type definitions, so you do not need this installed. + '@types/js-yaml@4.0.9': resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} @@ -2608,20 +2406,23 @@ packages: '@types/mime@1.3.5': resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + '@types/minimist@1.2.5': + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} + '@types/mock-fs@4.13.4': resolution: {integrity: sha512-mXmM0o6lULPI8z3XNnQCpL0BGxPwx1Ul1wXYEPBGl4efShyxW2Rln0JOPEWGyZaYZMM6OVXM/15zUuFMY52ljg==} - '@types/ms@2.1.0': - resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/mysql@2.15.22': resolution: {integrity: sha512-wK1pzsJVVAjYCSZWQoWHziQZbNggXFDUEIGf54g4ZM/ERuP86uGdWeKZWMYlqTPMZfHJJvLPyogXGvCOg87yLQ==} '@types/node-fetch@2.6.13': resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==} - '@types/node@24.3.1': - resolution: {integrity: sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g==} + '@types/node@24.10.1': + resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} + + '@types/node@24.9.2': + resolution: {integrity: sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2665,9 +2466,6 @@ packages: '@types/react@19.2.2': resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==} - '@types/resolve@1.20.2': - resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - '@types/semver@7.7.1': resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} @@ -2686,73 +2484,50 @@ packages: '@types/ssri@7.1.5': resolution: {integrity: sha512-odD/56S3B51liILSk5aXJlnYt99S6Rt9EFDDqGtJM26rKHApHcwyU/UoYHrzKkdkHMAIquGWCuHtQTbes+FRQw==} - '@types/validator@13.15.10': - resolution: {integrity: sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA==} - '@types/which@3.0.4': resolution: {integrity: sha512-liyfuo/106JdlgSchJzXEQCVArk0CvevqPote8F8HgWgJ3dRCcTHgJIsLDuee0kxk/mhbInzIZk3QWSZJ8R+2w==} '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - '@typescript-eslint/eslint-plugin@8.43.0': - resolution: {integrity: sha512-8tg+gt7ENL7KewsKMKDHXR1vm8tt9eMxjJBYINf6swonlWgkYn5NwyIgXpbbDxTNU5DgpDFfj95prcTq2clIQQ==} + '@typescript-eslint/eslint-plugin@8.44.1': + resolution: {integrity: sha512-molgphGqOBT7t4YKCSkbasmu1tb1MgrZ2szGzHbclF7PNmOkSTQVHy+2jXOSnxvR3+Xe1yySHFZoqMpz3TfQsw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.43.0 + '@typescript-eslint/parser': ^8.44.1 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.43.0': - resolution: {integrity: sha512-B7RIQiTsCBBmY+yW4+ILd6mF5h1FUwJsVvpqkrgpszYifetQ2Ke+Z4u6aZh0CblkUGIdR59iYVyXqqZGkZ3aBw==} + '@typescript-eslint/parser@8.44.1': + resolution: {integrity: sha512-EHrrEsyhOhxYt8MTg4zTF+DJMuNBzWwgvvOYNj/zm1vnaD/IC5zCXFehZv94Piqa2cRFfXrTFxIvO95L7Qc/cw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.43.0': - resolution: {integrity: sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.44.1': resolution: {integrity: sha512-ycSa60eGg8GWAkVsKV4E6Nz33h+HjTXbsDT4FILyL8Obk5/mx4tbvCNsLf9zret3ipSumAOG89UcCs/KRaKYrA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.43.0': - resolution: {integrity: sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.44.1': resolution: {integrity: sha512-NdhWHgmynpSvyhchGLXh+w12OMT308Gm25JoRIyTZqEbApiBiQHD/8xgb6LqCWCFcxFtWwaVdFsLPQI3jvhywg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.43.0': - resolution: {integrity: sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.44.1': resolution: {integrity: sha512-B5OyACouEjuIvof3o86lRMvyDsFwZm+4fBOqFHccIctYgBjqR3qT39FBYGN87khcgf0ExpdCBeGKpKRhSFTjKQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.43.0': - resolution: {integrity: sha512-qaH1uLBpBuBBuRf8c1mLJ6swOfzCXryhKND04Igr4pckzSEW9JX5Aw9AgW00kwfjWJF0kk0ps9ExKTfvXfw4Qg==} + '@typescript-eslint/type-utils@8.44.1': + resolution: {integrity: sha512-KdEerZqHWXsRNKjF9NYswNISnFzXfXNDfPxoTh7tqohU/PRIbwTmsjGK6V9/RTYWau7NZvfo52lgVk+sJh0K3g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.43.0': - resolution: {integrity: sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.44.1': resolution: {integrity: sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2761,25 +2536,12 @@ packages: resolution: {integrity: sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.43.0': - resolution: {integrity: sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@8.44.1': resolution: {integrity: sha512-qnQJ+mVa7szevdEyvfItbO5Vo+GfZ4/GZWWDRRLjrxYPkhM+6zYB2vRYwCsoJLzqFCdZT4mEqyJoyzkunsZ96A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.43.0': - resolution: {integrity: sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.44.1': resolution: {integrity: sha512-DpX5Fp6edTlocMCwA+mHY8Mra+pPjRZ0TfHkXI8QFelIKcbADQz1LUPNtzOFUriBB2UYqw4Pi9+xV4w9ZczHFg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2787,53 +2549,10 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.43.0': - resolution: {integrity: sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.44.1': resolution: {integrity: sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20250912.1': - resolution: {integrity: sha512-yI9dgT+VGwNe4eS9ys9MTtbQcT3Ma+9AYVyab36oD10fbzgK/HScELbZLvBIAviHuyAlYX2BWq4Iits4RFnijg==} - cpu: [arm64] - os: [darwin] - - '@typescript/native-preview-darwin-x64@7.0.0-dev.20250912.1': - resolution: {integrity: sha512-SQ8QGEYva0NQ6kP2t/CeDMSua3PXJznTXe7vzQa+F8CYpv+52x+d+p8bOfKUKEZaRy5lvl/JBaIauxXGu6VmEQ==} - cpu: [x64] - os: [darwin] - - '@typescript/native-preview-linux-arm64@7.0.0-dev.20250912.1': - resolution: {integrity: sha512-PklJj6+5c54FAsr7xjqZCUaLWZbIOcgX+z/1eKUwIvgAgm3DxiTnomVth1SLqXkQuZ5IagrTRH+AmVAFsJtzuw==} - cpu: [arm64] - os: [linux] - - '@typescript/native-preview-linux-arm@7.0.0-dev.20250912.1': - resolution: {integrity: sha512-xXcens3GBg3EIpUY5gh56FZ8OVBsl+bVFRa75KjuN42D64JbCCyiQtaDO745MXNohc21VOOYTG6sWxhcmyIb8w==} - cpu: [arm] - os: [linux] - - '@typescript/native-preview-linux-x64@7.0.0-dev.20250912.1': - resolution: {integrity: sha512-vxZsR/O1qa+6QbwdHKT2LVGT6hJopxur9uqYuOc/bIxcprIWO2up789Fq8ssNTwnwo2v0nZAtx7758aveDcHGg==} - cpu: [x64] - os: [linux] - - '@typescript/native-preview-win32-arm64@7.0.0-dev.20250912.1': - resolution: {integrity: sha512-qkof7aS2at9tb8/SvPzH85JgIms1txPU9gZlPh5mkNTW1ylZyjYEuux2kt5EvnNa+XB/vhMAFnPmAW7X2EqA4w==} - cpu: [arm64] - os: [win32] - - '@typescript/native-preview-win32-x64@7.0.0-dev.20250912.1': - resolution: {integrity: sha512-cDyLN7k1a//cKIlkMepuyIpEtDQTC3cltjhw+wKwxiKNrPnLuYG7cCbGttzG5zWU9R6ACsZLR+tYjLth8L88aA==} - cpu: [x64] - os: [win32] - - '@typescript/native-preview@7.0.0-dev.20250912.1': - resolution: {integrity: sha512-gHhW7qbRRtbkxv5pEmmIGYUMGBkBZsfgDABLr5izOZY1qDP7ranAhIgfjjFF0gvYotYvW8dO4bArytwMqKysdg==} - hasBin: true - '@unrs/resolver-binding-android-arm-eabi@1.11.1': resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} cpu: [arm] @@ -2937,43 +2656,52 @@ packages: cpu: [x64] os: [win32] - '@vitest/coverage-v8@3.2.4': - resolution: {integrity: sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==} + '@vitest/coverage-v8@4.0.3': + resolution: {integrity: sha512-I+MlLwyJRBjmJr1kFYSxoseINbIdpxIAeK10jmXgB0FUtIfdYsvM3lGAvBu5yk8WPyhefzdmbCHCc1idFbNRcg==} peerDependencies: - '@vitest/browser': 3.2.4 - vitest: 3.2.4 + '@vitest/browser': 4.0.3 + vitest: 4.0.3 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@3.2.4': - resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + '@vitest/expect@4.0.3': + resolution: {integrity: sha512-v3eSDx/bF25pzar6aEJrrdTXJduEBU3uSGXHslIdGIpJVP8tQQHV6x1ZfzbFQ/bLIomLSbR/2ZCfnaEGkWkiVQ==} - '@vitest/mocker@3.2.4': - resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} + '@vitest/mocker@4.0.3': + resolution: {integrity: sha512-evZcRspIPbbiJEe748zI2BRu94ThCBE+RkjCpVF8yoVYuTV7hMe+4wLF/7K86r8GwJHSmAPnPbZhpXWWrg1qbA==} peerDependencies: msw: ^2.4.9 - vite: 7.1.5 + vite: 7.1.12 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@3.2.4': - resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + '@vitest/pretty-format@4.0.3': + resolution: {integrity: sha512-N7gly/DRXzxa9w9sbDXwD9QNFYP2hw90LLLGDobPNwiWgyW95GMxsCt29/COIKKh3P7XJICR38PSDePenMBtsw==} - '@vitest/runner@3.2.4': - resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} + '@vitest/runner@4.0.3': + resolution: {integrity: sha512-1/aK6fPM0lYXWyGKwop2Gbvz1plyTps/HDbIIJXYtJtspHjpXIeB3If07eWpVH4HW7Rmd3Rl+IS/+zEAXrRtXA==} - '@vitest/snapshot@3.2.4': - resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} + '@vitest/snapshot@4.0.3': + resolution: {integrity: sha512-amnYmvZ5MTjNCP1HZmdeczAPLRD6iOm9+2nMRUGxbe/6sQ0Ymur0NnR9LIrWS8JA3wKE71X25D6ya/3LN9YytA==} - '@vitest/spy@3.2.4': - resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + '@vitest/spy@4.0.3': + resolution: {integrity: sha512-82vVL8Cqz7rbXaNUl35V2G7xeNMAjBdNOVaHbrzznT9BmiCiPOzhf0FhU3eP41nP1bLDm/5wWKZqkG4nyU95DQ==} - '@vitest/utils@3.2.4': - resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + '@vitest/utils@4.0.3': + resolution: {integrity: sha512-qV6KJkq8W3piW6MDIbGOmn1xhvcW4DuA07alqaQ+vdx7YA49J85pnwnxigZVQFQw3tWnQNRKWwhz5wbP6iv/GQ==} + + '@yao-pkg/pkg-fetch@3.5.28': + resolution: {integrity: sha512-0dTu0yFgAuOp3OJBiwSZVkTMuGmvExwmG9mHKQhHkaNate5BWh6rBTzfQ0WId9DHXmg7GiT/kIyejEV0G3EHUQ==} + hasBin: true + + '@yao-pkg/pkg@6.8.0': + resolution: {integrity: sha512-QQcMbQHlaw7dFy3Nk7XQ7Gm8DlczTBcgSQB1V068L5/2rSZ3TO4CMc7rU7DeIOOR0Pm+mb5TDR3yH4jT6nfkpw==} + engines: {node: '>=18.0.0'} + hasBin: true '@yarnpkg/lockfile@1.1.0': resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} @@ -2995,9 +2723,6 @@ packages: engines: {node: '>= 8'} hasBin: true - abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - abbrev@3.0.1: resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} engines: {node: ^18.17.0 || >=20.5.0} @@ -3034,14 +2759,6 @@ packages: ajv-dist@8.17.1: resolution: {integrity: sha512-KzJwANMzTTR/RERGnkx+bHzmxIfMTPMMv7+cH1d6Lx9UQ7BZyhiieq4hnO5lRuBWOtYTUL8hyWs7RJYI/45Rtg==} - ajv-formats@3.0.1: - resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -3052,22 +2769,14 @@ packages: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} - ansi-escapes@6.2.1: - resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==} - engines: {node: '>=14.16'} - ansi-escapes@7.2.0: resolution: {integrity: sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==} engines: {node: '>=18'} - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} engines: {node: '>=12'} - ansi-styles@2.2.1: - resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} - engines: {node: '>=0.10.0'} - ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -3080,12 +2789,6 @@ packages: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} - ansi-term@0.0.2: - resolution: {integrity: sha512-jLnGE+n8uAjksTJxiWZf/kcUmXq+cRWSl550B9NmQ8YiqaTM+lILcSe5dHdp8QkJPhaOghDjnMKwyYSMjosgAA==} - - ansicolors@0.3.2: - resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} - ansis@4.2.0: resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} engines: {node: '>=14'} @@ -3093,6 +2796,10 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -3100,10 +2807,6 @@ packages: ast-v8-to-istanbul@0.3.8: resolution: {integrity: sha512-szgSZqUxI5T8mLKvS7WTjF9is+MVbOeLADU73IseOcrqhxr/VAvy6wfoVE39KnKzA7JRhjF5eUagNlHwvZPlKQ==} - astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -3145,6 +2848,36 @@ packages: bare-abort-controller: optional: true + bare-fs@4.5.1: + resolution: {integrity: sha512-zGUCsm3yv/ePt2PHNbVxjjn0nNB1MkIaR4wOCxJ2ig5pCf5cCVAYJXVhQg/3OhhJV6DB1ts7Hv0oUaElc2TPQg==} + engines: {bare: '>=1.16.0'} + peerDependencies: + bare-buffer: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + + bare-os@3.6.2: + resolution: {integrity: sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==} + engines: {bare: '>=1.14.0'} + + bare-path@3.0.0: + resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} + + bare-stream@2.7.0: + resolution: {integrity: sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==} + peerDependencies: + bare-buffer: '*' + bare-events: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + bare-events: + optional: true + + bare-url@2.3.2: + resolution: {integrity: sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -3159,38 +2892,15 @@ packages: resolution: {integrity: sha512-sdleLVfCjBtgO5cNjA2HVRvWBJAHs4zwenaCPMNJAJU0yNxpzj80IpjOIimkpkr+mhlA+how5poQtt53PygbHA==} engines: {node: ^18.17.0 || >=20.5.0} - bin-links@6.0.0: - resolution: {integrity: sha512-X4CiKlcV2GjnCMwnKAfbVWpHa++65th9TuzAEYtZoATiOE2DQKhSp4CJlyLoTqdhBKlXjpXjCTYPNNFS33Fi6w==} - engines: {node: ^20.17.0 || >=22.9.0} - - bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - blessed-contrib@4.11.0: - resolution: {integrity: sha512-P00Xji3xPp53+FdU9f74WpvnOAn/SS0CKLy4vLAf5Ps7FGDOTY711ruJPZb3/7dpFuP+4i7f4a/ZTZdLlKG9WA==} - - blessed@0.1.81: - resolution: {integrity: sha512-LoF5gae+hlmfORcG1M5+5XZi4LBmvlXTzwJWzUlPryN/SJdSflZvROM2TwkT0GMpq7oqT48NRd4GS7BiVBc5OQ==} - engines: {node: '>= 0.8.0'} - hasBin: true - - body-parser@2.2.0: - resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} - engines: {node: '>=18'} + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} bole@5.0.22: resolution: {integrity: sha512-BI0Fjfi38q0bnvG5FjQoLbipfme62eNENiXAWT3QjVvEa9Xdkkg4A0r4mkkOsbq8Hang0rSCbedUhdNA9hTCcg==} - boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - - boolean@3.2.0: - resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} @@ -3198,9 +2908,6 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - bresenham@0.0.3: - resolution: {integrity: sha512-wbMxoJJM1p3+6G7xEFXYNCJ30h2qkwmVxebkbwIl4OcnWtno5R3UT9VuYLfStlVNAQCmRjkGwjPFdfaPd4iNXw==} - browserslist@4.25.4: resolution: {integrity: sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -3211,16 +2918,9 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - buffer-equal-constant-time@1.0.1: - resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} - buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - buffers@0.1.1: - resolution: {integrity: sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==} - engines: {node: '>=0.2.0'} - builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} @@ -3229,10 +2929,6 @@ packages: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} - bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -3245,36 +2941,28 @@ packages: resolution: {integrity: sha512-+7LYcYGBYoNqTp1Rv7Ny1YjUo5E0/ftkQtraH3vkfAGgVHc+ouWdC8okAwQgQR7EVIdW6JTzTmhKFwzb+4okAQ==} engines: {node: ^20.17.0 || >=22.9.0} - cacheable-lookup@7.0.0: - resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} - engines: {node: '>=14.16'} - - cacheable-request@13.0.15: - resolution: {integrity: sha512-NjiSrjv37X73FmGGU5ec/M83vWQ6q1Ae3BFe+ABfdeeMy4LOMKYTpfEjrBnLedu43clKZtsYbKrHTIQE7vKq+A==} - engines: {node: '>=18'} - callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + camelcase-keys@7.0.2: + resolution: {integrity: sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==} + engines: {node: '>=12'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + caniuse-lite@1.0.30001754: resolution: {integrity: sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==} - cardinal@2.1.1: - resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} - hasBin: true - - chai@5.3.3: - resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + chai@6.2.1: + resolution: {integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==} engines: {node: '>=18'} chalk-table@1.0.2: resolution: {integrity: sha512-lmtmQtr/GCtbiJiiuXPE5lj0arIXJir5hSjIhye/4Uyr7oTQlP+ufPnHzUS3Bre0xS/VWbz9NfeuPnvse9BXoQ==} - chalk@1.1.3: - resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} - engines: {node: '>=0.10.0'} - chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -3287,20 +2975,6 @@ packages: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - charm@0.1.2: - resolution: {integrity: sha512-syedaZ9cPe7r3hoQA9twWYKu5AIyCswN5+szkmPBe9ccdLrj4bYaCnLVPTLd2kgVRc7+zoX4tyPgRnFKCj5YjQ==} - - check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} - engines: {node: '>= 16'} - - cheerio-select@2.1.0: - resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} - - cheerio@1.1.2: - resolution: {integrity: sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==} - engines: {node: '>=20.18.1'} - chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} @@ -3331,10 +3005,6 @@ packages: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} - cli-table3@0.6.5: - resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} - engines: {node: 10.* || >= 12.*} - cli-truncate@4.0.0: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} @@ -3343,18 +3013,13 @@ packages: resolution: {integrity: sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==} engines: {node: '>=20'} - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} cmd-shim@7.0.0: resolution: {integrity: sha512-rtpaCbr164TPPh+zFdkWpCyZuKkjpAzODfaZCf/SVJZzJN+4bHQb/LP3Jzq5/+84um3XXY8r548XiWKSborwVw==} engines: {node: ^18.17.0 || >=20.5.0} - cmd-shim@8.0.0: - resolution: {integrity: sha512-Jk/BK6NCapZ58BKUxlSI+ouKRbjH1NLZCgJkYoab+vEHUY3f6OzpNBN9u7HFSv9J6TRDGs4PLOHezoKGaFRSCA==} - engines: {node: ^20.17.0 || >=22.9.0} - code-excerpt@4.0.0: resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3409,17 +3074,6 @@ packages: common-ancestor-path@1.0.1: resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} - commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - - compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} - - compression@1.8.1: - resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} - engines: {node: '>= 0.8.0'} - compromise@14.14.4: resolution: {integrity: sha512-QdbJwronwxeqb7a5KFK/+Y5YieZ4PE1f7ai0vU58Pp4jih+soDCBMuKVbhDEPQ+6+vI3vSiG4UAAjTAXLJw1Qw==} engines: {node: '>=12.0.0'} @@ -3434,14 +3088,6 @@ packages: config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} - connect@3.7.0: - resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} - engines: {node: '>= 0.10.0'} - - content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -3459,13 +3105,6 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - css-select@5.2.2: - resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} - - css-what@6.2.2: - resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} - engines: {node: '>= 6'} - cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -3474,14 +3113,6 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -3491,18 +3122,22 @@ packages: supports-color: optional: true - decompress-response@10.0.0: - resolution: {integrity: sha512-oj7KWToJuuxlPr7VV0vabvxEIiqNMo+q0NueIiL3XhtwC6FVOX7Hr1c0C4eD0bmf7Zr+S/dSf2xvkH3Ad6sU3Q==} - engines: {node: '>=20'} + decamelize-keys@1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} + + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + decamelize@5.0.1: + resolution: {integrity: sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==} + engines: {node: '>=10'} decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} - deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} - deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -3510,10 +3145,6 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - default-browser-id@5.0.0: resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} engines: {node: '>=18'} @@ -3522,10 +3153,6 @@ packages: resolution: {integrity: sha512-Qq68+VkJlc8tjnPV1i7HtbIn7ohmjZa88qUvHMIK0ZKUXMCuV45cT7cEXALPUmeXCe0q1DWQkQTemHVaLIFSrg==} engines: {node: '>=18'} - defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} - define-lazy-prop@3.0.0: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} @@ -3546,10 +3173,6 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - destr@2.0.5: resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} @@ -3557,57 +3180,22 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} - detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - dev-null-cli@2.0.0: resolution: {integrity: sha512-7wwzBy6Yo0UqCI+mNRtltZxAuqhmDWE4UPA0yiANku4ya6j6ABt1Uf+jpF8kheObKYWLH/r9Q/3gHsHADdduqA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true - dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} - - domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - - domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} - - domutils@3.2.2: - resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} - dotenv@17.2.3: resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} engines: {node: '>=12'} - dottie@2.0.6: - resolution: {integrity: sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==} - - drawille-blessed-contrib@1.0.0: - resolution: {integrity: sha512-WnHMgf5en/hVOsFhxLI8ZX0qTJmerOsVjIMQmn4cR1eI8nLGu+L7w5ENbul+lZ6w827A3JakCuernES5xbHLzQ==} - - drawille-canvas-blessed-contrib@0.1.3: - resolution: {integrity: sha512-bdDvVJOxlrEoPLifGDPaxIzFh3cD7QH05ePoQ4fwnqfi08ZSxzEhOUpI5Z0/SQMlWgcCQOEtuw0zrwezacXglw==} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - ecdsa-sig-formatter@1.0.11: - resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + duplexer2@0.1.4: + resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} eciesjs@0.4.16: resolution: {integrity: sha512-dS5cbA9rA2VR4Ybuvhg6jvdmp46ubLn3E+px8cG/35aEDNclrqoCjg6mt0HYZ/M+OoESS3jSkCrqk1kWAEhWAw==} engines: {bun: '>=1', deno: '>=2', node: '>=16'} - edn-data@1.1.2: - resolution: {integrity: sha512-RI1i17URvOrBtSNEccbsXkuUZdc67QUBMqXGF62KPek85EdFGS2UKw76hNhOBl5kK4h7V4d32Ut15b/XVwKEXA==} - engines: {node: '>=12.0.0'} - - ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - efrt@2.7.0: resolution: {integrity: sha512-/RInbCy1d4P6Zdfa+TMVsf/ufZVotat5hCw3QXmWtjU+3pFEOvOQ7ibo3aIxyCJw2leIeAMjmPj+1SLJiCpdrQ==} engines: {node: '>=12.0.0'} @@ -3618,19 +3206,6 @@ packages: emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - - encoding-sniffer@0.2.1: - resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==} - encoding@0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} @@ -3641,14 +3216,6 @@ packages: resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} engines: {node: '>=10.13.0'} - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - - entities@6.0.1: - resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} - engines: {node: '>=0.12'} - env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -3672,9 +3239,6 @@ packages: es-toolkit@1.41.0: resolution: {integrity: sha512-bDd3oRmbVgqZCJS6WmeQieOrzpl3URcWBUVDXxOELlUW2FuW+0glPOz1n0KnRie+PdyvUZcXz2sOn00c6pPRIA==} - es6-error@4.1.1: - resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} - esbuild@0.25.11: resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} engines: {node: '>=18'} @@ -3684,9 +3248,6 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} - escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} @@ -3790,11 +3351,6 @@ packages: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - esquery@1.6.0: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} @@ -3807,9 +3363,6 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -3817,9 +3370,6 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - event-stream@0.9.8: - resolution: {integrity: sha512-o5h0Mp1bkoR6B0i7pTCAzRy+VzdsRWH997KQD4Psb0EOPoKEIiaRx/EsOdUl7p1Ktjw7aIWvweI/OY1R9XrlUg==} - eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} @@ -3873,9 +3423,6 @@ packages: fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - fd-package-json@2.0.0: - resolution: {integrity: sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ==} - fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -3889,17 +3436,10 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} - file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - finalhandler@1.1.2: - resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} - engines: {node: '>= 0.8'} - find-up-simple@1.0.1: resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} engines: {node: '>=18'} @@ -3926,22 +3466,20 @@ packages: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} - form-data-encoder@4.1.0: - resolution: {integrity: sha512-G6NsmEW15s0Uw9XnCg+33H3ViYRyiM0hMrMhhqQOR8NFc5GhYrI+6I3u7OTw7b91J2g8rtvMBZJDbcGb2YUniw==} - engines: {node: '>= 18'} - form-data@4.0.4: resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} engines: {node: '>= 6'} - formatly@0.3.0: - resolution: {integrity: sha512-9XNj/o4wrRFyhSMJOvsuyMwy8aUfBaZ1VrqHVfohyXf0Sw0e+yfKG+xZaY3arGCOMdwFsqObtzVOc1gU9KiT9w==} - engines: {node: '>=18.3.0'} - hasBin: true + from2@2.3.0: + resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + fs-extra@11.3.2: + resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} + engines: {node: '>=14.14'} + fs-minipass@3.0.3: resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -3978,19 +3516,12 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - get-stream@9.0.1: - resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} - engines: {node: '>=18'} - get-tsconfig@4.13.0: resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} github-from-package@0.0.0: resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} - gl-matrix@2.8.1: - resolution: {integrity: sha512-0YCjVpE3pS5XWlN3J4X7AiAx65+nqAI54LndtVFnQZB6G/FVLkZH8y8V6R3cIoOQR4pUdfwQGd1iwyoXHJ4Qfw==} - glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -4008,10 +3539,6 @@ packages: engines: {node: 20 || >=22} hasBin: true - global-agent@3.0.0: - resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} - engines: {node: '>=10.0'} - globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} @@ -4031,10 +3558,6 @@ packages: globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - got@14.6.0: - resolution: {integrity: sha512-K30JHMsHcwhy+JYet3IxRFw+L9rb77y5LE3OkoAD4qzMR9/g30bWYBfkHYVJL2BBPgfU4lJsRwhy4HUkLPQc3g==} - engines: {node: '>=20'} - graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -4048,9 +3571,9 @@ packages: guid-typescript@1.0.9: resolution: {integrity: sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ==} - has-ansi@2.0.0: - resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} - engines: {node: '>=0.10.0'} + hard-rejection@2.1.0: + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} @@ -4060,12 +3583,13 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - here@0.0.2: - resolution: {integrity: sha512-U7VYImCTcPoY27TSmzoiFsmWLEqQFaYNdpsPb9K0dXJhE6kufUqycaz51oR09CW85dDU9iWyy7At8M+p7hb3NQ==} - hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + hosted-git-info@4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + hosted-git-info@8.1.0: resolution: {integrity: sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==} engines: {node: ^18.17.0 || >=20.5.0} @@ -4081,24 +3605,13 @@ packages: html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - htmlparser2@10.0.0: - resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==} - http-cache-semantics@4.2.0: resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} - http-errors@2.0.1: - resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} - engines: {node: '>= 0.8'} - http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} - http2-wrapper@2.2.1: - resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} - engines: {node: '>=10.19.0'} - https-proxy-agent@7.0.6: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} @@ -4116,10 +3629,6 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} - iconv-lite@0.7.0: - resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} - engines: {node: '>=0.10.0'} - ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -4155,10 +3664,6 @@ packages: individual@3.0.0: resolution: {integrity: sha512-rUY5vtT748NMRbEMrTNiFfy29BgGZwGXUi2NFUVMWQrogSLzlJvQV9eeMWi+g1aVaQ53tpyLAQtd5x/JH0Nh1g==} - inflection@1.13.4: - resolution: {integrity: sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==} - engines: {'0': node >= 0.4.0} - inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -4199,8 +3704,9 @@ packages: react-devtools-core: optional: true - ionstore@1.0.1: - resolution: {integrity: sha512-g+99vyka3EiNFJCnbq3NxegjV211RzGtkDUMbZGB01Con8ZqUmMx/FpWMeqgDXOqgM7QoVeDhe+CfYCWznaDVA==} + into-stream@6.0.0: + resolution: {integrity: sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==} + engines: {node: '>=10'} ip-address@10.1.0: resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} @@ -4251,9 +3757,6 @@ packages: engines: {node: '>=14.16'} hasBin: true - is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - is-node-process@1.2.0: resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} @@ -4269,21 +3772,18 @@ packages: resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} engines: {node: '>=12'} + is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} - is-reference@1.2.1: - resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} - is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - is-stream@4.0.1: - resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} - engines: {node: '>=18'} - is-wsl@3.1.0: resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} engines: {node: '>=16'} @@ -4375,9 +3875,8 @@ packages: engines: {node: '>=6'} hasBin: true - jsonata@2.1.0: - resolution: {integrity: sha512-OCzaRMK8HobtX8fp37uIVmL8CY1IGc/a6gLsDqz3quExFR09/U78HUzWYr7T31UEB6+Eu0/8dkVD5fFDOl9a8w==} - engines: {node: '>= 8'} + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} @@ -4389,25 +3888,12 @@ packages: just-diff@6.0.2: resolution: {integrity: sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==} - jwa@2.0.1: - resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} - - jws@4.0.0: - resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} - keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - keyv@5.5.4: - resolution: {integrity: sha512-eohl3hKTiVyD1ilYdw9T0OiB4hnjef89e3dMYKz+mVKDzj+5IteTseASUsOB+EU9Tf6VNTCjDePcP6wkDGmLKQ==} - - knip@5.63.1: - resolution: {integrity: sha512-wSznedUAzcU4o9e0O2WPqDnP7Jttu8cesq/R23eregRY8QYQ9NLJ3aGt9fadJfRzPBoU4tRyutwVQu6chhGDlA==} - engines: {node: '>=18.18.0'} - hasBin: true - peerDependencies: - '@types/node': '>=18' - typescript: '>=5.0.4' + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} @@ -4443,9 +3929,6 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash.truncate@4.4.2: - resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} - lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -4456,13 +3939,6 @@ packages: long@5.3.2: resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} - loupe@3.2.1: - resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} - - lowercase-keys@3.0.0: - resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -4473,6 +3949,10 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + magic-string@0.30.19: resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} @@ -4491,35 +3971,22 @@ packages: resolution: {integrity: sha512-iyyEpDty1mwW3dGlYXAJqC/azFn5PPvgKVwXayOGBSmKLxhKZ9fg4qIan2ePpp1vJIwfFiO34LAPZgq9SZW9Aw==} engines: {node: ^20.17.0 || >=22.9.0} - map-canvas@0.1.5: - resolution: {integrity: sha512-f7M3sOuL9+up0NCOZbb1rQpWDLZwR/ftCiNbyscjl9LUUEwrRaoumH4sz6swgs58lF21DQ0hsYOCw5C6Zz7hbg==} - - marked-terminal@5.2.0: - resolution: {integrity: sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA==} - engines: {node: '>=14.13.1 || >=16.0.0'} - peerDependencies: - marked: ^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 - - marked@4.3.0: - resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} - engines: {node: '>= 12'} - hasBin: true - - matcher@3.0.0: - resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} - engines: {node: '>=10'} - - media-typer@1.1.0: - resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} - engines: {node: '>= 0.8'} + map-obj@1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} - memory-streams@0.1.3: - resolution: {integrity: sha512-qVQ/CjkMyMInPaaRMrwWNDvf6boRZXaT/DbQeMYcCWuXPEBf1v8qChOc9OlEVQp2uOvRXa1Qu30fLmKhY6NipA==} + map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} memorystream@0.3.1: resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} + meow@10.1.5: + resolution: {integrity: sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + meow@13.2.0: resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} engines: {node: '>=18'} @@ -4539,18 +4006,10 @@ packages: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} - mime-db@1.54.0: - resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} - engines: {node: '>= 0.6'} - mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - mime-types@3.0.2: - resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} - engines: {node: '>=18'} - mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -4563,18 +4022,10 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} - mimic-response@4.0.0: - resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - minimatch@10.0.3: - resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} - engines: {node: 20 || >=22} - minimatch@10.1.1: resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} engines: {node: 20 || >=22} @@ -4586,6 +4037,10 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} + minimist-options@4.1.0: + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} + minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -4628,11 +4083,6 @@ packages: mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - mlly@1.8.0: resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} @@ -4643,12 +4093,6 @@ packages: module-details-from-path@1.0.4: resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} - moment-timezone@0.5.48: - resolution: {integrity: sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw==} - - moment@2.30.1: - resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} - mount-point@3.0.0: resolution: {integrity: sha512-jAhfD7ZCG+dbESZjcY1SdFVFqSJkh/yGbdsifHcPkvuLRO5ugK0Ssmd9jdATu29BTd4JiN+vkpMzVvsUgP3SZA==} engines: {node: '>=0.10.0'} @@ -4657,12 +4101,12 @@ packages: resolution: {integrity: sha512-4aE3U7CCBWgrQlQDMq8da4woBWDGHioJFiOZ8Ie6Yq2uwYQ9V2kGhTz4x3u6Wc+OU17nw0yc3rJ/lQ4jIiPe3A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + multistream@4.1.0: + resolution: {integrity: sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==} + nano-spawn@1.0.3: resolution: {integrity: sha512-jtpsQDetTnvS2Ts1fiRdci5rx0VYws5jGyC+4IYOTnIQ/wwdf6JdomlHBwqC3bJYOvaKu0C2GSZ1A60anrYpaA==} engines: {node: '>=20.17'} @@ -4694,10 +4138,6 @@ packages: engines: {node: '>=10'} hasBin: true - negotiator@0.6.4: - resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} - engines: {node: '>= 0.6'} - negotiator@1.0.0: resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} engines: {node: '>= 0.6'} @@ -4714,16 +4154,18 @@ packages: resolution: {integrity: sha512-zsFhmbkAzwhTft6nd3VxcG0cvJsT70rL+BIGHWVq5fi6MwGrHwzqKaxXE+Hl2GmnGItnDKPPkO5/LQqjVkIdFg==} engines: {node: '>=10'} - node-addon-api@8.5.0: - resolution: {integrity: sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==} - engines: {node: ^18 || ^20 || >= 21} - - node-emoji@1.11.0: - resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} - node-fetch-native@1.6.7: resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + node-gyp@11.5.0: resolution: {integrity: sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==} engines: {node: ^18.17.0 || >=20.5.0} @@ -4734,21 +4176,16 @@ packages: engines: {node: ^20.17.0 || >=22.9.0} hasBin: true + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + node-releases@2.0.27: resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} - node-stream-zip@1.15.0: - resolution: {integrity: sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==} - engines: {node: '>=0.12.0'} - noop-stream@1.0.0: resolution: {integrity: sha512-EHpIatM09Pg7dZOsowDwqqdacYpogTBb1BNSMIy8g/J+MGpaxy0k+qmrbYrjLNRPXtW3fqf+Q3b2Q0yFRnQdIw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - nopt@2.1.2: - resolution: {integrity: sha512-x8vXm7BZ2jE1Txrxh/hO74HTuYZQEbo8edoRcANgdZ4+PCV+pbjd/xdummkmjjC7LU5EjPzlu8zEq/oxWylnKA==} - hasBin: true - nopt@8.1.0: resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} engines: {node: ^18.17.0 || >=20.5.0} @@ -4762,14 +4199,14 @@ packages: normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + normalize-package-data@3.0.3: + resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} + engines: {node: '>=10'} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - normalize-url@8.1.0: - resolution: {integrity: sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==} - engines: {node: '>=14.16'} - npm-bundled@4.0.0: resolution: {integrity: sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==} engines: {node: ^18.17.0 || >=20.5.0} @@ -4831,9 +4268,6 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} - nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - object-hash@2.2.0: resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==} engines: {node: '>= 6'} @@ -4845,18 +4279,6 @@ packages: ofetch@1.5.1: resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} - on-finished@2.3.0: - resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} - engines: {node: '>= 0.8'} - - on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - - on-headers@1.1.0: - resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} - engines: {node: '>= 0.8'} - once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -4882,12 +4304,6 @@ packages: resolution: {integrity: sha512-aiSt/4ubOTyb1N5C2ZbGrBvaJOXIZhZvpRPYuUVxQJe27wJZqf/o65iPrqgLcgfeOLaQ8cS2Q+762jrYvniTrA==} engines: {node: '>18.0.0'} - optimist@0.2.8: - resolution: {integrity: sha512-Wy7E3cQDpqsTIFyW7m22hSevyTLxw850ahYv7FWsw4G6MIKVTZ8NSA95KBrQ95a4SMsMr1UGUUnwEFKhVaSzIg==} - - optimist@0.3.7: - resolution: {integrity: sha512-TCx0dXQzVtSCg2OgY/bO9hjM9cV4XYx09TVK+s3+FhkjT6LovsLe+pPMzpWf+6yXK/hUizs2gUoTw3jHM0VaTQ==} - optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -4899,27 +4315,14 @@ packages: outvariant@1.4.3: resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} - oxc-resolver@11.13.2: - resolution: {integrity: sha512-1SXVyYQ9bqMX3uZo8Px81EG7jhZkO9PvvR5X9roY5TLYVm4ZA7pbPDNlYaDBBeF9U+YO3OeMNoHde52hrcCu8w==} - - oxlint@1.15.0: - resolution: {integrity: sha512-GZngkdF2FabM0pp0/l5OOhIQg+9L6LmOrmS8V8Vg+Swv9/VLJd/oc/LtAkv4HO45BNWL3EVaXzswI0CmGokVzw==} - engines: {node: '>=8.*'} - hasBin: true - peerDependencies: - oxlint-tsgolint: '>=0.2.0' - peerDependenciesMeta: - oxlint-tsgolint: - optional: true - - p-cancelable@4.0.1: - resolution: {integrity: sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==} - engines: {node: '>=14.16'} - p-finally@2.0.1: resolution: {integrity: sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==} engines: {node: '>=8'} + p-is-promise@3.0.0: + resolution: {integrity: sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==} + engines: {node: '>=8'} + p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -4963,27 +4366,10 @@ packages: resolution: {integrity: sha512-37CN2VtcuvKgHUs8+0b1uJeEsbGn61GRHz469C94P5xiOoqpDYJYwjg4RY9Vmz39WyZAVkR5++nbJwLMIgOCnQ==} engines: {node: ^18.17.0 || >=20.5.0} - parse-conflict-json@5.0.1: - resolution: {integrity: sha512-ZHEmNKMq1wyJXNwLxyHnluPfRAFSIliBvbK/UiOceROt4Xh9Pz0fq49NytIaeaCUf5VR86hwQ/34FCcNU5/LKQ==} - engines: {node: ^20.17.0 || >=22.9.0} - parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} - parse5-htmlparser2-tree-adapter@7.1.0: - resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} - - parse5-parser-stream@7.1.2: - resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} - - parse5@7.3.0: - resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} - - parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - patch-console@2.0.0: resolution: {integrity: sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -5018,13 +4404,6 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@2.0.1: - resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} - engines: {node: '>= 14.16'} - - pg-connection-string@2.9.1: - resolution: {integrity: sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==} - pg-int8@1.0.1: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} engines: {node: '>=4.0.0'} @@ -5051,11 +4430,6 @@ packages: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} - picture-tuber@1.0.2: - resolution: {integrity: sha512-49/xq+wzbwDeI32aPvwQJldM8pr7dKDRuR76IjztrkmiCkAQDaWFJzkmfVqCHmt/iFoPFhHmI9L0oKhthrTOQw==} - engines: {node: '>=0.4.0'} - hasBin: true - pidtree@0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} engines: {node: '>=0.10'} @@ -5083,9 +4457,6 @@ packages: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} - png-js@0.1.1: - resolution: {integrity: sha512-NTtk2SyfjBm+xYl2/VZJBhFnTQ4kU5qWC7VC4/iGbrgiU4FuB4xC+74erxADYJIqZICOR1HCvRA7EBHkpjTg9g==} - pnpm-workspace-yaml@1.3.0: resolution: {integrity: sha512-Krb5q8Totd5mVuLx7we+EFHq/AfxA75nbfTm25Q1pIf606+RlaKUG+PXH8SDihfe5b5k4H09gE+sL47L1t5lbw==} @@ -5135,9 +4506,6 @@ packages: resolution: {integrity: sha512-E6rsNU1QNJgB3sjj7OANinGncFKuK+164sLXw1/CqBjj/EkXSoSdHCtWQGBNlREIGLnL7IEUEGa08YFVUbrhVg==} engines: {node: '>=16'} - prettify-xml@1.2.0: - resolution: {integrity: sha512-kuoTbmC+QQUfx45PrdkVzJqrNEp2lhK++WGyiqBx6JrCvZUQDgeYjdV3h53n7p+37s1Iwx6GjAQ7fcIgD8kkLQ==} - proc-log@5.0.0: resolution: {integrity: sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==} engines: {node: ^18.17.0 || >=20.5.0} @@ -5146,13 +4514,16 @@ packages: resolution: {integrity: sha512-KG/XsTDN901PNfPfAMmj6N/Ywg9tM+bHK8pAz+27fS4N4Pcr+4zoYBOcGSBu6ceXYNPxkLpa4ohtfxV1XcLAfA==} engines: {node: ^20.17.0 || >=22.9.0} + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + proggy@3.0.0: resolution: {integrity: sha512-QE8RApCM3IaRRxVzxrjbgNMpQEX6Wu0p0KBeoSiSEw5/bsGwZHsshF4LCxH2jp/r6BU+bqA3LrMDEYNfJnpD8Q==} engines: {node: ^18.17.0 || >=20.5.0} - proggy@4.0.0: - resolution: {integrity: sha512-MbA4R+WQT76ZBm/5JUpV9yqcJt92175+Y0Bodg3HgiXzrmKu7Ggq+bpn6y6wHH+gN9NcyKn3yg1+d47VaKwNAQ==} - engines: {node: ^20.17.0 || >=22.9.0} + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} promise-all-reject-late@1.0.1: resolution: {integrity: sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==} @@ -5168,10 +4539,6 @@ packages: resolution: {integrity: sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==} engines: {node: '>= 8'} - properties-reader@2.3.0: - resolution: {integrity: sha512-z597WicA7nDZxK12kZqHr2TcvwNU1GCfA5UwfDY/HDp3hXPoPlb5rlEx9bwGTiJnc0OqbBTkU975jDToth8Gxw==} - engines: {node: '>=14'} - proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} @@ -5203,10 +4570,6 @@ packages: rate-limiter-flexible@8.2.0: resolution: {integrity: sha512-lzpvMBP6GpCJftWP90RHzhCAAPFnO3BKaE6STNc6tPsu/uF6Y7kZDczV45a4Ms/H+5G2qqPFp8kg0l8gxCxcsw==} - raw-body@3.0.2: - resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} - engines: {node: '>= 0.10'} - rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -5231,35 +4594,36 @@ packages: resolution: {integrity: sha512-SEbJV7tohp3DAAILbEMPXavBjAnMN0tVnh4+9G8ihV4Pq3HYF9h8QNez9zkJ1ILkv9G2BjdzwctznGZXgu/HGw==} engines: {node: ^18.17.0 || >=20.5.0} - read-cmd-shim@6.0.0: - resolution: {integrity: sha512-1zM5HuOfagXCBWMN83fuFI/x+T/UhZ7k+KIzhrHXcQoeX5+7gmaDYjELQHmmzIodumBHeByBJT4QYS7ufAgs7A==} - engines: {node: ^20.17.0 || >=22.9.0} - read-package-json-fast@4.0.0: resolution: {integrity: sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==} engines: {node: ^18.17.0 || >=20.5.0} - read-package-json-fast@5.0.0: - resolution: {integrity: sha512-S16VePJnQcfmk6HIZAiP8TXW/VDlDtZfzVndRDE8lhZNA4YvAiwAjgvhoyf6+soofEH/vrZnOUctSt+jYE2tkg==} - engines: {node: ^20.17.0 || >=22.9.0} - read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} + read-pkg-up@8.0.0: + resolution: {integrity: sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==} + engines: {node: '>=12'} + read-pkg@5.2.0: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} - readable-stream@1.0.34: - resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} + read-pkg@6.0.0: + resolution: {integrity: sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==} + engines: {node: '>=12'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} - redeyed@2.1.1: - resolution: {integrity: sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==} + redent@4.0.0: + resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} + engines: {node: '>=12'} regexp-tree@0.1.27: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} @@ -5289,9 +4653,6 @@ packages: resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==} engines: {node: '>=8.6.0'} - resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -5304,10 +4665,6 @@ packages: engines: {node: '>= 0.4'} hasBin: true - responselike@4.0.2: - resolution: {integrity: sha512-cGk8IbWEAnaCpdAt1BHzJ3Ahz5ewDJa0KseTsE3qIRMJ3C698W8psM7byCeWVpd/Ha7FUYzuRVzXoKoM6nRUbA==} - engines: {node: '>=20'} - restore-cursor@4.0.0: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -5316,9 +4673,6 @@ packages: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} - retry-as-promised@7.1.1: - resolution: {integrity: sha512-hMD7odLOt3LkTjcif8aRZqi/hybjpLNgSk5oF5FCowfCjok6LukpN2bDX7R5wDmbgBQFn7YoBxSagmtXHaJYJw==} - retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} @@ -5330,12 +4684,8 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - roarr@2.15.4: - resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} - engines: {node: '>=8.0'} - - rollup@4.50.1: - resolution: {integrity: sha512-78E9voJHwnXQMiQdiqswVLZwJIzdBKJ1GdI5Zx6XwoFKUIk09/sSrr+05QFzvYb8q6Y9pPV45zzDuYa3907TZA==} + rollup@4.53.2: + resolution: {integrity: sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -5350,67 +4700,17 @@ packages: resolution: {integrity: sha512-vdTshSQ2JsRCgT8eKZWNJIL26C6bVqy1SOmuCMlKHegVeo8KYRobRrefOdUq9OozSPUUiSxrylteeRmLOMFfWg==} engines: {node: '>=12'} - sax@1.4.3: - resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==} - scheduler@0.26.0: resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} - semver-compare@1.0.0: - resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} - semver@7.7.2: resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} engines: {node: '>=10'} hasBin: true - sequelize-pool@7.1.0: - resolution: {integrity: sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==} - engines: {node: '>= 10.0.0'} - - sequelize@6.37.7: - resolution: {integrity: sha512-mCnh83zuz7kQxxJirtFD7q6Huy6liPanI67BSlbzSYgVNl5eXVdE2CN1FuAeZwG1SNpGsNRCV+bJAVVnykZAFA==} - engines: {node: '>=10.0.0'} - peerDependencies: - ibm_db: '*' - mariadb: '*' - mysql2: '*' - oracledb: '*' - pg: '*' - pg-hstore: '*' - snowflake-sdk: '*' - sqlite3: '*' - tedious: '*' - peerDependenciesMeta: - ibm_db: - optional: true - mariadb: - optional: true - mysql2: - optional: true - oracledb: - optional: true - pg: - optional: true - pg-hstore: - optional: true - snowflake-sdk: - optional: true - sqlite3: - optional: true - tedious: - optional: true - - serialize-error@7.0.1: - resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} - engines: {node: '>=10'} - - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -5450,10 +4750,6 @@ packages: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} - slice-ansi@4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} - slice-ansi@5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} @@ -5466,10 +4762,6 @@ packages: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - smol-toml@1.5.2: - resolution: {integrity: sha512-QlaZEqcAH3/RtNyet1IPIYPsEWAaYyXXv1Krsi+1L/QHppjX4Ifm8MQsBISz9vE8cHicIq3clogsheili5vhaQ==} - engines: {node: '>= 18'} - socks-proxy-agent@8.0.5: resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} @@ -5489,11 +4781,6 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - sparkline@0.1.2: - resolution: {integrity: sha512-t//aVOiWt9fi/e22ea1vXVWBDX+gp18y+Ch9sKqmHl828bRfvP2VtfTJVEcgWFBQHd0yDPNQRiHdqzCvbcYSDA==} - engines: {node: '>= 0.8.0'} - hasBin: true - spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -5509,9 +4796,6 @@ packages: split2@3.2.2: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} - sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - ssri@10.0.5: resolution: {integrity: sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -5535,17 +4819,12 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} - - statuses@2.0.2: - resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} - engines: {node: '>= 0.8'} - std-env@3.10.0: resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + stream-meter@1.0.4: + resolution: {integrity: sha512-4sOEtrbgFotXwnEuzzsQBYEV1elAeFSO8rSGeTwabuX1RRn/kEq9JVH7I0MRBhKVRR0sJkr0M0QCH7yOLf9fhQ==} + streamx@2.23.0: resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==} @@ -5560,14 +4839,6 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - - string-width@7.2.0: - resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} - engines: {node: '>=18'} - string-width@8.1.0: resolution: {integrity: sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==} engines: {node: '>=20'} @@ -5575,14 +4846,6 @@ packages: string_decoder@0.10.31: resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} - strip-ansi@3.0.1: - resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} - engines: {node: '>=0.10.0'} - - strip-ansi@5.2.0: - resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} - engines: {node: '>=6'} - strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -5603,6 +4866,10 @@ packages: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} + strip-indent@4.1.1: + resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==} + engines: {node: '>=12'} + strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} @@ -5611,20 +4878,9 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strip-json-comments@5.0.2: - resolution: {integrity: sha512-4X2FR3UwhNUE9G49aIsJW5hRRR3GXGTBTZRMfv568O60ojM8HcWjV/VxAxCDW3SUND33O6ZY66ZuRcdkj73q2g==} - engines: {node: '>=14.16'} - - strip-literal@3.1.0: - resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} - suffix-thumb@5.0.2: resolution: {integrity: sha512-I5PWXAFKx3FYnI9a+dQMWNqTxoRt6vdBdb0O+BJ1sxXCWtSoQCusc13E58f+9p4MYx/qCnEMkD5jac6K2j3dgA==} - supports-color@2.0.0: - resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} - engines: {node: '>=0.8.0'} - supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -5645,10 +4901,6 @@ packages: resolution: {integrity: sha512-0e4u7KtrCrMqvuXvDN4nnHSEQbPlONtJuoolRWzut0PfuT2mEOvIFnYFHEpn5YPIOv7S5Ubher0b04jmYRQOzQ==} hasBin: true - table@6.9.0: - resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} - engines: {node: '>=10.0.0'} - tapable@2.3.0: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} @@ -5656,6 +4908,9 @@ packages: tar-fs@2.1.4: resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} + tar-fs@3.1.1: + resolution: {integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==} + tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} @@ -5663,10 +4918,6 @@ packages: tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} - tar@7.5.1: - resolution: {integrity: sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==} - engines: {node: '>=18'} - tar@7.5.2: resolution: {integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==} engines: {node: '>=18'} @@ -5675,29 +4926,16 @@ packages: resolution: {integrity: sha512-hQGQH4WVtV9BqsZbrGzOmOP4NdWqie948BnqtH+NPwdVt5mI+qALVRDvgzgdf+neN7bcrVVpV4ToyFkxg0U0xQ==} hasBin: true - term-canvas@0.0.5: - resolution: {integrity: sha512-eZ3rIWi5yLnKiUcsW8P79fKyooaLmyLWAGqBhFspqMxRNUiB4GmHHk5AzQ4LxvFbJILaXqQZLwbbATLOhCFwkw==} - terminal-link@2.1.1: resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} engines: {node: '>=8'} - test-exclude@7.0.1: - resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} - engines: {node: '>=18'} - text-decoder@1.2.3: resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} through2@4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} - tiny-colors@2.1.3: - resolution: {integrity: sha512-QKQBQx8Xm/jmaCDF8pdptiLWgmtbqEUgJnxqVeKQQcQP5XjGGImJ5hDHlDKAiwQhmp+xi3stYQZBedBMKzm+fw==} - - tiny-updater@3.5.3: - resolution: {integrity: sha512-wEUssfOOkVLg2raSaRbyZDHpVCDj6fnp7UjynpNE4XGuF+Gkj8GRRMoHdfk73VzLQs/AHKsbY8fCxXNz8Hx4Qg==} - tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -5712,28 +4950,16 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} - tinypool@1.1.1: - resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} - engines: {node: ^18.0.0 || >=20.0.0} - - tinyrainbow@2.0.0: - resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} - engines: {node: '>=14.0.0'} - - tinyspy@4.0.4: - resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} + tinyrainbow@3.0.3: + resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} engines: {node: '>=14.0.0'} to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - - toposort-class@1.0.1: - resolution: {integrity: sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg==} + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} trash@10.0.0: resolution: {integrity: sha512-nyHQPJ7F4dYCfj1xN95DAkLkf9qlyRLDpT9yYwcR5SH16q+f7VA1L5VwsdEqWFUuGNpKwgLnbOS1QBvXMYnLfA==} @@ -5743,6 +4969,10 @@ packages: resolution: {integrity: sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + trim-newlines@4.1.1: + resolution: {integrity: sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==} + engines: {node: '>=12'} + ts-api-utils@2.1.0: resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} engines: {node: '>=18.12'} @@ -5786,10 +5016,6 @@ packages: resolution: {integrity: sha512-E67Chw7SxFe++uotisxt/xzB1UxxvLztzzQqVyUZ/jKujsejVqvoO5vn25oMvqJydqYrASBVBCQCy082E2qQYQ==} hasBin: true - type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} - engines: {node: '>=10'} - type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -5802,16 +5028,16 @@ packages: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} + type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + type-fest@4.41.0: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - type-is@2.0.1: - resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} - engines: {node: '>= 0.6'} - - typescript-eslint@8.43.0: - resolution: {integrity: sha512-FyRGJKUGvcFekRRcBKFBlAhnp4Ng8rhe8tuvvkR9OiU0gfd4vyvTRQHEckO6VDlH57jbeUQem2IpqPq9kLJH+w==} + typescript-eslint@8.44.1: + resolution: {integrity: sha512-0ws8uWGrUVTjEeN2OM4K1pLKHK/4NiNP/vz6ns+LjT/6sqpaYzIVFajZb1fj/IDwpsrrHb3Jy0Qm5u9CPcKaeg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -5831,12 +5057,8 @@ packages: unconfig@7.4.1: resolution: {integrity: sha512-uyQ7LElcGizrOGZyIq9KU+xkuEjcRf9IpmDTkCSYv5mEeZzrXSj6rb51C0L+WTedsmAoVxW9WKrLWhSwebIM9Q==} - undici-types@7.10.0: - resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} - - undici@6.21.3: - resolution: {integrity: sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==} - engines: {node: '>=18.17'} + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} @@ -5853,9 +5075,9 @@ packages: universal-user-agent@7.0.3: resolution: {integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==} - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} unplugin-purge-polyfills@0.1.0: resolution: {integrity: sha512-dHahgAhuzaHZHU65oY7BU24vqH/AtcXppdH1B1SmrBeglyX7NOBtkryjp2F8mOD4tL2RVxfAc41JRqRKTAeAkA==} @@ -5867,6 +5089,9 @@ packages: unrs-resolver@1.11.1: resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} + unzipper@0.12.3: + resolution: {integrity: sha512-PZ8hTS+AqcGxsaQntl3IRBw65QrBI6lxzqDEL7IAo/XCEqRTKGfOX56Vea5TH9SZczRVxuzk1re04z/YjuYCJA==} + update-browserslist-db@1.1.4: resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==} hasBin: true @@ -5883,18 +5108,6 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - - uuid@11.1.0: - resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} - hasBin: true - - uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -5902,21 +5115,8 @@ packages: resolution: {integrity: sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==} engines: {node: ^18.17.0 || >=20.5.0} - validator@13.15.23: - resolution: {integrity: sha512-4yoz1kEWqUjzi5zsPbAS/903QXSYp0UOtHsPpp7p9rHAw/W+dkInskAE386Fat3oKRROwO98d9ZB0G4cObgUyw==} - engines: {node: '>= 0.10'} - - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - - vite-node@3.2.4: - resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - - vite@7.1.5: - resolution: {integrity: sha512-4cKBO9wR75r0BeIWWWId9XK9Lj6La5X846Zw9dFfzMRw38IlTk2iCcUt6hsyiDRcPidc55ZParFYDXi0nXOeLQ==} + vite@7.1.12: + resolution: {integrity: sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -5955,16 +5155,18 @@ packages: yaml: optional: true - vitest@3.2.4: - resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vitest@4.0.3: + resolution: {integrity: sha512-IUSop8jgaT7w0g1yOM/35qVtKjr/8Va4PrjzH1OUb0YH4c3OXB2lCZDkMAB6glA8T5w8S164oJGsbcmAecr4sA==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/debug': ^4.1.12 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.2.4 - '@vitest/ui': 3.2.4 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.0.3 + '@vitest/browser-preview': 4.0.3 + '@vitest/browser-webdriverio': 4.0.3 + '@vitest/ui': 4.0.3 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -5974,7 +5176,11 @@ packages: optional: true '@types/node': optional: true - '@vitest/browser': + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': optional: true '@vitest/ui': optional: true @@ -5987,19 +5193,14 @@ packages: resolution: {integrity: sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==} engines: {node: 20 || >=22} + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - whatwg-encoding@3.1.1: - resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} - engines: {node: '>=18'} - - whatwg-mimetype@4.0.0: - resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} - engines: {node: '>=18'} - - when-exit@2.1.5: - resolution: {integrity: sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==} + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} @@ -6030,25 +5231,14 @@ packages: resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} engines: {node: '>=18'} - wkx@0.5.0: - resolution: {integrity: sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==} - word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - wordwrap@0.0.3: - resolution: {integrity: sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==} - engines: {node: '>=0.4.0'} - wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - wrap-ansi@9.0.2: resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} engines: {node: '>=18'} @@ -6064,10 +5254,6 @@ packages: resolution: {integrity: sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==} engines: {node: ^18.17.0 || >=20.5.0} - write-file-atomic@7.0.0: - resolution: {integrity: sha512-YnlPC6JqnZl6aO4uRc+dx5PHguiR9S6WeoLtpxNT9wIG+BDya7ZNE1q7KOjVgaA73hKhKLpVPgJ5QA9THQ5BRg==} - engines: {node: ^20.17.0 || >=22.9.0} - ws@8.18.3: resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} engines: {node: '>=10.0.0'} @@ -6084,10 +5270,6 @@ packages: resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} engines: {node: '>=18'} - x256@0.0.2: - resolution: {integrity: sha512-ZsIH+sheoF8YG9YG+QKEEIdtqpHRA9FYuD7MqhfyB1kayXU43RUNBFSxBEnF8ywSUxdg+8no4+bPr5qLbyxKgA==} - engines: {node: '>=0.4.0'} - xcase@2.0.1: resolution: {integrity: sha512-UmFXIPU+9Eg3E9m/728Bii0lAIuoc+6nbrNUKaRPJOFp91ih44qqGlWtxMB6kXFrRD6po+86ksHM5XHCfk6iPw==} @@ -6099,18 +5281,6 @@ packages: resolution: {integrity: sha512-N1XQngeqMBoj9wM4ZFadVV2MymImeiFfYD+fJrNlcVcOHsJFFQe7n3b+aBoTPwARuq2HQxukfzVpQmAk1gN4sQ==} engines: {node: '>=10'} - xml-js@1.6.11: - resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==} - hasBin: true - - xml2js@0.6.2: - resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} - engines: {node: '>=4.0.0'} - - xmlbuilder@11.0.1: - resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} - engines: {node: '>=4.0'} - xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -6138,9 +5308,9 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} @@ -6150,22 +5320,9 @@ packages: resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} engines: {node: '>=18'} - yoctocolors@2.1.2: - resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} - engines: {node: '>=18'} - yoga-layout@3.2.1: resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==} - zod-validation-error@3.5.4: - resolution: {integrity: sha512-+hEiRIiPobgyuFlEojnqjJnhFvg4r/i3cqgcm67eehZf/WBaK3g6cD02YU9mtdVxZjv8CzCA9n/Rhrs3yAAvAw==} - engines: {node: '>=18.0.0'} - peerDependencies: - zod: ^3.24.4 - - zod@3.25.76: - resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - zod@4.1.8: resolution: {integrity: sha512-5R1P+WwQqmmMIEACyzSvo4JXHY5WiAFHRMg+zBZKgKS+Q1viRa0C1hmUKtHltoIFKtIdki3pRxkmpP74jnNYHQ==} @@ -6176,11 +5333,6 @@ snapshots: ansi-styles: 6.2.3 is-fullwidth-code-point: 5.1.0 - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - '@antfu/ni@25.0.0': dependencies: ansis: 4.2.0 @@ -6188,39 +5340,6 @@ snapshots: package-manager-detector: 1.5.0 tinyexec: 1.0.2 - '@appthreat/atom-common@1.0.12': - optional: true - - '@appthreat/atom-parsetools@1.0.12': - dependencies: - '@appthreat/atom-common': 1.0.12 - '@babel/parser': 7.28.5 - typescript: 5.9.3 - yargs: 17.7.2 - optional: true - - '@appthreat/atom@2.4.2': - dependencies: - '@appthreat/atom-common': 1.0.12 - '@appthreat/atom-parsetools': 1.0.12 - optional: true - - '@appthreat/cdx-proto@1.1.4': - dependencies: - '@bufbuild/protobuf': 2.6.3 - optional: true - - '@appthreat/sqlite3@6.0.9': - dependencies: - bindings: 1.5.0 - node-addon-api: 8.5.0 - prebuild-install: 7.1.3 - optionalDependencies: - node-gyp: 11.5.0 - transitivePeerDependencies: - - supports-color - optional: true - '@babel/code-frame@7.27.1': dependencies: '@babel/helper-validator-identifier': 7.28.5 @@ -6329,13 +5448,13 @@ snapshots: '@babel/core': 7.28.4 '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.5 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.28.5 + '@babel/traverse': 7.28.4 '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color @@ -6387,6 +5506,35 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.4) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) + '@babel/types': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-runtime@7.28.3(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 @@ -6410,6 +5558,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/preset-react@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.28.4) + transitivePeerDependencies: + - supports-color + '@babel/preset-typescript@7.27.1(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 @@ -6495,135 +5655,6 @@ snapshots: '@biomejs/cli-win32-x64@2.2.4': optional: true - '@bufbuild/protobuf@2.10.0': - optional: true - - '@bufbuild/protobuf@2.6.3': - optional: true - - '@coana-tech/cli@14.12.98': {} - - '@colors/colors@1.5.0': - optional: true - - '@cyclonedx/cdxgen-plugins-bin-darwin-amd64@1.7.0': - optional: true - - '@cyclonedx/cdxgen-plugins-bin-darwin-arm64@1.7.0': - optional: true - - '@cyclonedx/cdxgen-plugins-bin-linux-amd64@1.7.0': - optional: true - - '@cyclonedx/cdxgen-plugins-bin-linux-arm64@1.7.0': - optional: true - - '@cyclonedx/cdxgen-plugins-bin-linux-arm@1.7.0': - optional: true - - '@cyclonedx/cdxgen-plugins-bin-linux-ppc64@1.7.0': - optional: true - - '@cyclonedx/cdxgen-plugins-bin-linuxmusl-amd64@1.7.0': - optional: true - - '@cyclonedx/cdxgen-plugins-bin-linuxmusl-arm64@1.7.0': - optional: true - - '@cyclonedx/cdxgen-plugins-bin-windows-amd64@1.7.0': - optional: true - - '@cyclonedx/cdxgen-plugins-bin-windows-arm64@1.7.0': - optional: true - - '@cyclonedx/cdxgen-plugins-bin@1.7.0': - optional: true - - '@cyclonedx/cdxgen@11.11.0': - dependencies: - '@babel/parser': 7.28.5 - '@babel/traverse': 7.28.5 - '@iarna/toml': 2.2.5 - '@isaacs/string-locale-compare': 1.1.0 - '@npmcli/fs': 5.0.0 - '@npmcli/installed-package-contents': 4.0.0 - '@npmcli/map-workspaces': 5.0.1 - '@npmcli/name-from-folder': 4.0.0 - '@npmcli/package-json': 7.0.1 - '@npmcli/query': 5.0.0 - '@npmcli/redact': 4.0.0 - ajv: 8.17.1 - ajv-formats: 3.0.1(ajv@8.17.1) - bin-links: 6.0.0 - cheerio: 1.1.2 - common-ancestor-path: 1.0.1 - edn-data: 1.1.2 - encoding: 0.1.13 - glob: 11.0.3 - global-agent: 3.0.0 - got: 14.6.0 - hosted-git-info: 9.0.2 - iconv-lite: 0.7.0 - json-stringify-nice: 1.1.4 - jws: 4.0.0 - minimatch: 10.0.3 - node-stream-zip: 1.15.0 - npm-install-checks: 8.0.0 - npm-normalize-package-bin: 5.0.0 - npm-package-arg: 13.0.0 - npm-pick-manifest: 11.0.3 - packageurl-js: '@socketregistry/packageurl-js@1.0.9' - parse-conflict-json: 5.0.1 - prettify-xml: 1.2.0 - proc-log: 6.0.0 - proggy: 4.0.0 - promise-all-reject-late: 1.0.1 - promise-call-limit: 3.0.2 - properties-reader: 2.3.0 - read-package-json-fast: 5.0.0 - semver: 7.7.2 - ssri: 13.0.0 - table: 6.9.0 - tar: 7.5.1 - treeverse: 3.0.0 - uuid: 11.1.0 - walk-up-path: 4.0.0 - xml-js: 1.6.11 - yaml: 2.8.1 - yargs: 17.7.2 - yoctocolors: 2.1.2 - optionalDependencies: - '@appthreat/atom': 2.4.2 - '@appthreat/cdx-proto': 1.1.4 - '@bufbuild/protobuf': 2.10.0 - '@cyclonedx/cdxgen-plugins-bin': 1.7.0 - '@cyclonedx/cdxgen-plugins-bin-darwin-amd64': 1.7.0 - '@cyclonedx/cdxgen-plugins-bin-darwin-arm64': 1.7.0 - '@cyclonedx/cdxgen-plugins-bin-linux-amd64': 1.7.0 - '@cyclonedx/cdxgen-plugins-bin-linux-arm': 1.7.0 - '@cyclonedx/cdxgen-plugins-bin-linux-arm64': 1.7.0 - '@cyclonedx/cdxgen-plugins-bin-linux-ppc64': 1.7.0 - '@cyclonedx/cdxgen-plugins-bin-linuxmusl-amd64': 1.7.0 - '@cyclonedx/cdxgen-plugins-bin-linuxmusl-arm64': 1.7.0 - '@cyclonedx/cdxgen-plugins-bin-windows-amd64': 1.7.0 - '@cyclonedx/cdxgen-plugins-bin-windows-arm64': 1.7.0 - body-parser: 2.2.0 - compression: 1.8.1 - connect: 3.7.0 - jsonata: 2.1.0 - sequelize: 6.37.7(@appthreat/sqlite3@6.0.9) - sqlite3: '@appthreat/sqlite3@6.0.9' - transitivePeerDependencies: - - ibm_db - - mariadb - - mysql2 - - oracledb - - pg - - pg-hstore - - snowflake-sdk - - supports-color - - tedious - '@dotenvx/dotenvx@1.49.0': dependencies: commander: 11.1.0 @@ -6811,8 +5842,6 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@iarna/toml@2.2.5': {} - '@isaacs/balanced-match@4.0.1': {} '@isaacs/brace-expansion@5.0.0': @@ -6821,11 +5850,11 @@ snapshots: '@isaacs/cliui@8.0.2': dependencies: - string-width: 5.1.2 + string-width: 8.1.0 string-width-cjs: string-width@4.2.3 strip-ansi: 7.1.2 strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 + wrap-ansi: 9.0.2 wrap-ansi-cjs: wrap-ansi@7.0.0 '@isaacs/fs-minipass@4.0.1': @@ -6834,8 +5863,6 @@ snapshots: '@isaacs/string-locale-compare@1.1.0': {} - '@istanbuljs/schema@0.1.3': {} - '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -6855,8 +5882,6 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@keyv/serialize@1.1.1': {} - '@mswjs/interceptors@0.39.8': dependencies: '@open-draft/deferred-promise': 2.2.0 @@ -6873,13 +5898,6 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@napi-rs/wasm-runtime@1.0.7': - dependencies: - '@emnapi/core': 1.7.0 - '@emnapi/runtime': 1.7.0 - '@tybys/wasm-util': 0.10.1 - optional: true - '@noble/ciphers@1.3.0': {} '@noble/curves@1.9.7': @@ -6934,7 +5952,7 @@ snapshots: '@npmcli/package-json': 6.2.0 '@npmcli/query': 4.0.1 '@npmcli/redact': 3.2.2 - '@npmcli/run-script': 9.1.0 + '@npmcli/run-script': 9.1.0(patch_hash=65d59a7c4dd7b00f1c218cbcf97d78fe2f462f2e048de4a22b41bd70dbdefcdc) bin-links: 5.0.0 cacache: 19.0.1 common-ancestor-path: 1.0.1 @@ -6976,10 +5994,6 @@ snapshots: dependencies: semver: 7.7.2 - '@npmcli/fs@5.0.0': - dependencies: - semver: 7.7.2 - '@npmcli/git@6.0.3': dependencies: '@npmcli/promise-spawn': 8.0.3 @@ -7019,13 +6033,6 @@ snapshots: glob: 10.4.5 minimatch: 9.0.5 - '@npmcli/map-workspaces@5.0.1': - dependencies: - '@npmcli/name-from-folder': 4.0.0 - '@npmcli/package-json': 7.0.2 - glob: 11.0.3 - minimatch: 10.1.1 - '@npmcli/metavuln-calculator@9.0.3': dependencies: cacache: 20.0.1 @@ -7038,8 +6045,6 @@ snapshots: '@npmcli/name-from-folder@3.0.0': {} - '@npmcli/name-from-folder@4.0.0': {} - '@npmcli/node-gyp@4.0.0': {} '@npmcli/node-gyp@5.0.0': {} @@ -7054,16 +6059,6 @@ snapshots: semver: 7.7.2 validate-npm-package-license: 3.0.4 - '@npmcli/package-json@7.0.1': - dependencies: - '@npmcli/git': 7.0.1 - glob: 11.0.3 - hosted-git-info: 9.0.2 - json-parse-even-better-errors: 4.0.0 - proc-log: 5.0.0 - semver: 7.7.2 - validate-npm-package-license: 3.0.4 - '@npmcli/package-json@7.0.2': dependencies: '@npmcli/git': 7.0.1 @@ -7086,31 +6081,27 @@ snapshots: dependencies: postcss-selector-parser: 7.1.0 - '@npmcli/query@5.0.0': - dependencies: - postcss-selector-parser: 7.1.0 - '@npmcli/redact@3.2.2': {} '@npmcli/redact@4.0.0': {} - '@npmcli/run-script@10.0.3': + '@npmcli/run-script@10.0.3(patch_hash=b1f74f31293142449c0be473fae0f0b977e1e1174e6a88e2021fcb93dc902ed6)': dependencies: '@npmcli/node-gyp': 5.0.0 '@npmcli/package-json': 7.0.2 '@npmcli/promise-spawn': 9.0.1 - node-gyp: 12.1.0 + node-gyp: 12.1.0(patch_hash=140ba43d43d74f7d3577feb3f8a6efad544dbb0059784102b144a0e2daa437f9) proc-log: 6.0.0 which: 6.0.0 transitivePeerDependencies: - supports-color - '@npmcli/run-script@9.1.0': + '@npmcli/run-script@9.1.0(patch_hash=65d59a7c4dd7b00f1c218cbcf97d78fe2f462f2e048de4a22b41bd70dbdefcdc)': dependencies: '@npmcli/node-gyp': 4.0.0 '@npmcli/package-json': 6.2.0 '@npmcli/promise-spawn': 8.0.3 - node-gyp: 11.5.0 + node-gyp: 11.5.0(patch_hash=140ba43d43d74f7d3577feb3f8a6efad544dbb0059784102b144a0e2daa437f9) proc-log: 5.0.0 which: 5.0.0 transitivePeerDependencies: @@ -7465,89 +6456,6 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) - '@oxc-resolver/binding-android-arm-eabi@11.13.2': - optional: true - - '@oxc-resolver/binding-android-arm64@11.13.2': - optional: true - - '@oxc-resolver/binding-darwin-arm64@11.13.2': - optional: true - - '@oxc-resolver/binding-darwin-x64@11.13.2': - optional: true - - '@oxc-resolver/binding-freebsd-x64@11.13.2': - optional: true - - '@oxc-resolver/binding-linux-arm-gnueabihf@11.13.2': - optional: true - - '@oxc-resolver/binding-linux-arm-musleabihf@11.13.2': - optional: true - - '@oxc-resolver/binding-linux-arm64-gnu@11.13.2': - optional: true - - '@oxc-resolver/binding-linux-arm64-musl@11.13.2': - optional: true - - '@oxc-resolver/binding-linux-ppc64-gnu@11.13.2': - optional: true - - '@oxc-resolver/binding-linux-riscv64-gnu@11.13.2': - optional: true - - '@oxc-resolver/binding-linux-riscv64-musl@11.13.2': - optional: true - - '@oxc-resolver/binding-linux-s390x-gnu@11.13.2': - optional: true - - '@oxc-resolver/binding-linux-x64-gnu@11.13.2': - optional: true - - '@oxc-resolver/binding-linux-x64-musl@11.13.2': - optional: true - - '@oxc-resolver/binding-wasm32-wasi@11.13.2': - dependencies: - '@napi-rs/wasm-runtime': 1.0.7 - optional: true - - '@oxc-resolver/binding-win32-arm64-msvc@11.13.2': - optional: true - - '@oxc-resolver/binding-win32-ia32-msvc@11.13.2': - optional: true - - '@oxc-resolver/binding-win32-x64-msvc@11.13.2': - optional: true - - '@oxlint/darwin-arm64@1.15.0': - optional: true - - '@oxlint/darwin-x64@1.15.0': - optional: true - - '@oxlint/linux-arm64-gnu@1.15.0': - optional: true - - '@oxlint/linux-arm64-musl@1.15.0': - optional: true - - '@oxlint/linux-x64-gnu@1.15.0': - optional: true - - '@oxlint/linux-x64-musl@1.15.0': - optional: true - - '@oxlint/win32-arm64@1.15.0': - optional: true - - '@oxlint/win32-x64@1.15.0': - optional: true - '@pkgjs/parseargs@0.11.0': optional: true @@ -7579,7 +6487,7 @@ snapshots: '@pnpm/graceful-fs@1000.0.0': dependencies: - graceful-fs: 4.2.11(patch_hash=17007d43dcc01ee2047730ab13eb23c41adc01ae0f24ee872b1fe69142db5200) + graceful-fs: 4.2.11 '@pnpm/lockfile.detect-dep-types@1001.0.13': dependencies: @@ -7639,7 +6547,7 @@ snapshots: '@pnpm/network.ca-file@1.0.2': dependencies: - graceful-fs: 4.2.11(patch_hash=17007d43dcc01ee2047730ab13eb23c41adc01ae0f24ee872b1fe69142db5200) + graceful-fs: 4.2.11 '@pnpm/npm-conf@2.3.1': dependencies: @@ -7701,123 +6609,71 @@ snapshots: dependencies: quansync: 0.2.11 - '@rollup/plugin-babel@6.0.4(@babel/core@7.28.4)(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f))': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-imports': 7.27.1 - '@rollup/pluginutils': 5.3.0(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f)) - optionalDependencies: - rollup: 4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f) - transitivePeerDependencies: - - supports-color - - '@rollup/plugin-commonjs@28.0.6(patch_hash=4d412c02fa3df1b1f5b29b135bd3f0997f85248ceb3a578d01e7f40fba27c21b)(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f))': - dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f)) - commondir: 1.0.1 - estree-walker: 2.0.2 - fdir: 6.5.0(picomatch@4.0.3) - is-reference: 1.2.1 - magic-string: 0.30.19 - picomatch: 4.0.3 - optionalDependencies: - rollup: 4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f) - - '@rollup/plugin-json@6.1.0(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f))': - dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f)) - optionalDependencies: - rollup: 4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f) - - '@rollup/plugin-node-resolve@16.0.1(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f))': - dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f)) - '@types/resolve': 1.20.2 - deepmerge: 4.3.1 - is-module: 1.0.0 - resolve: 1.22.11 - optionalDependencies: - rollup: 4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f) - - '@rollup/plugin-replace@6.0.2(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f))': - dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f)) - magic-string: 0.30.19 - optionalDependencies: - rollup: 4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f) - - '@rollup/pluginutils@5.3.0(rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f))': - dependencies: - '@types/estree': 1.0.8 - estree-walker: 2.0.2 - picomatch: 4.0.3 - optionalDependencies: - rollup: 4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f) - - '@rollup/rollup-android-arm-eabi@4.50.1': + '@rollup/rollup-android-arm-eabi@4.53.2': optional: true - '@rollup/rollup-android-arm64@4.50.1': + '@rollup/rollup-android-arm64@4.53.2': optional: true - '@rollup/rollup-darwin-arm64@4.50.1': + '@rollup/rollup-darwin-arm64@4.53.2': optional: true - '@rollup/rollup-darwin-x64@4.50.1': + '@rollup/rollup-darwin-x64@4.53.2': optional: true - '@rollup/rollup-freebsd-arm64@4.50.1': + '@rollup/rollup-freebsd-arm64@4.53.2': optional: true - '@rollup/rollup-freebsd-x64@4.50.1': + '@rollup/rollup-freebsd-x64@4.53.2': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.50.1': + '@rollup/rollup-linux-arm-gnueabihf@4.53.2': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.50.1': + '@rollup/rollup-linux-arm-musleabihf@4.53.2': optional: true - '@rollup/rollup-linux-arm64-gnu@4.50.1': + '@rollup/rollup-linux-arm64-gnu@4.53.2': optional: true - '@rollup/rollup-linux-arm64-musl@4.50.1': + '@rollup/rollup-linux-arm64-musl@4.53.2': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.50.1': + '@rollup/rollup-linux-loong64-gnu@4.53.2': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.50.1': + '@rollup/rollup-linux-ppc64-gnu@4.53.2': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.50.1': + '@rollup/rollup-linux-riscv64-gnu@4.53.2': optional: true - '@rollup/rollup-linux-riscv64-musl@4.50.1': + '@rollup/rollup-linux-riscv64-musl@4.53.2': optional: true - '@rollup/rollup-linux-s390x-gnu@4.50.1': + '@rollup/rollup-linux-s390x-gnu@4.53.2': optional: true - '@rollup/rollup-linux-x64-gnu@4.50.1': + '@rollup/rollup-linux-x64-gnu@4.53.2': optional: true - '@rollup/rollup-linux-x64-musl@4.50.1': + '@rollup/rollup-linux-x64-musl@4.53.2': optional: true - '@rollup/rollup-openharmony-arm64@4.50.1': + '@rollup/rollup-openharmony-arm64@4.53.2': optional: true - '@rollup/rollup-win32-arm64-msvc@4.50.1': + '@rollup/rollup-win32-arm64-msvc@4.53.2': optional: true - '@rollup/rollup-win32-ia32-msvc@4.50.1': + '@rollup/rollup-win32-ia32-msvc@4.53.2': optional: true - '@rollup/rollup-win32-x64-msvc@4.50.1': + '@rollup/rollup-win32-x64-gnu@4.53.2': optional: true - '@sec-ant/readable-stream@0.4.1': {} + '@rollup/rollup-win32-x64-msvc@4.53.2': + optional: true '@sentry/core@8.0.0': dependencies: @@ -7914,22 +6770,14 @@ snapshots: dependencies: execa: 2.1.0 - '@sindresorhus/is@7.1.1': {} - '@sindresorhus/merge-streams@2.3.0': {} '@socketregistry/es-set-tostringtag@1.0.10': {} - '@socketregistry/globalthis@1.0.8': {} - '@socketregistry/hasown@1.0.7': {} - '@socketregistry/hyrious__bun.lockb@1.0.18': {} - '@socketregistry/hyrious__bun.lockb@1.0.19': {} - '@socketregistry/indent-string@1.0.13': {} - '@socketregistry/indent-string@1.0.14': {} '@socketregistry/is-core-module@1.0.11': {} @@ -7938,15 +6786,14 @@ snapshots: '@socketregistry/isarray@1.0.8': {} - '@socketregistry/packageurl-js@1.0.9': {} - '@socketregistry/packageurl-js@1.3.5': {} '@socketregistry/path-parse@1.0.8': {} '@socketregistry/safe-buffer@1.0.9': {} - '@socketregistry/safer-buffer@1.0.10': {} + '@socketregistry/safer-buffer@1.0.10': + optional: true '@socketregistry/side-channel@1.0.10': {} @@ -7964,19 +6811,15 @@ snapshots: optionalDependencies: typescript: 5.9.3 - '@socketsecurity/registry@1.1.17': {} - - '@socketsecurity/sdk@1.4.94': - dependencies: - '@socketsecurity/registry': 1.1.17 + '@socketsecurity/registry@2.0.2(typescript@5.9.3)': + optionalDependencies: + typescript: 5.9.3 '@socketsecurity/sdk@3.1.3': {} - '@stroncium/procfs@1.2.1': {} + '@standard-schema/spec@1.0.0': {} - '@szmarczak/http-timer@5.0.1': - dependencies: - defer-to-connect: 2.0.1 + '@stroncium/procfs@1.2.1': {} '@tufjs/canonical-json@2.0.0': {} @@ -7992,22 +6835,18 @@ snapshots: '@types/accepts@1.3.7': dependencies: - '@types/node': 24.3.1 - - '@types/blessed@0.1.25': - dependencies: - '@types/node': 24.3.1 + '@types/node': 24.10.1 '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 24.3.1 + '@types/node': 24.10.1 '@types/braces@3.0.5': {} '@types/cacache@19.0.0': dependencies: - '@types/node': 24.3.1 + '@types/node': 24.9.2 '@types/chai@5.2.3': dependencies: @@ -8018,11 +6857,11 @@ snapshots: '@types/connect@3.4.36': dependencies: - '@types/node': 24.3.1 + '@types/node': 24.10.1 '@types/connect@3.4.38': dependencies: - '@types/node': 24.3.1 + '@types/node': 24.10.1 '@types/content-disposition@0.5.9': {} @@ -8031,12 +6870,7 @@ snapshots: '@types/connect': 3.4.38 '@types/express': 5.0.5 '@types/keygrip': 1.0.6 - '@types/node': 24.3.1 - - '@types/debug@4.1.12': - dependencies: - '@types/ms': 2.1.0 - optional: true + '@types/node': 24.10.1 '@types/deep-eql@4.0.2': {} @@ -8044,7 +6878,7 @@ snapshots: '@types/express-serve-static-core@5.1.0': dependencies: - '@types/node': 24.3.1 + '@types/node': 24.10.1 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -8057,10 +6891,18 @@ snapshots: '@types/http-assert@1.5.6': {} - '@types/http-cache-semantics@4.0.4': {} - '@types/http-errors@2.0.5': {} + '@types/ink@2.0.3(@types/react@19.2.2)(react@19.2.0)': + dependencies: + ink: 6.3.1(patch_hash=03cccf82711216d0fa8283ea4716ed803a132ae8c31293f0f5a6677e2bdb4a64)(@types/react@19.2.2)(react@19.2.0) + transitivePeerDependencies: + - '@types/react' + - bufferutil + - react + - react-devtools-core + - utf-8-validate + '@types/js-yaml@4.0.9': {} '@types/json-schema@7.0.15': {} @@ -8080,7 +6922,7 @@ snapshots: '@types/http-errors': 2.0.5 '@types/keygrip': 1.0.6 '@types/koa-compose': 3.2.9 - '@types/node': 24.3.1 + '@types/node': 24.10.1 '@types/koa__router@12.0.3': dependencies: @@ -8092,25 +6934,28 @@ snapshots: '@types/mime@1.3.5': {} + '@types/minimist@1.2.5': {} + '@types/mock-fs@4.13.4': dependencies: - '@types/node': 24.3.1 - - '@types/ms@2.1.0': - optional: true + '@types/node': 24.9.2 '@types/mysql@2.15.22': dependencies: - '@types/node': 24.3.1 + '@types/node': 24.10.1 '@types/node-fetch@2.6.13': dependencies: - '@types/node': 24.3.1 + '@types/node': 24.9.2 form-data: 4.0.4 - '@types/node@24.3.1': + '@types/node@24.10.1': dependencies: - undici-types: 7.10.0 + undici-types: 7.16.0 + + '@types/node@24.9.2': + dependencies: + undici-types: 7.16.0 '@types/normalize-package-data@2.4.4': {} @@ -8118,7 +6963,7 @@ snapshots: '@types/npm-registry-fetch@8.0.9': dependencies: - '@types/node': 24.3.1 + '@types/node': 24.9.2 '@types/node-fetch': 2.6.13 '@types/npm-package-arg': 6.1.4 '@types/npmlog': 7.0.0 @@ -8128,24 +6973,24 @@ snapshots: dependencies: '@npm/types': 1.0.2 '@types/cacache': 19.0.0 - '@types/node': 24.3.1 + '@types/node': 24.9.2 '@types/npmcli__package-json': 4.0.4 '@types/pacote': 11.1.8 '@types/npmcli__config@6.0.3': dependencies: - '@types/node': 24.3.1 + '@types/node': 24.9.2 '@types/semver': 7.7.1 '@types/npmcli__package-json@4.0.4': {} '@types/npmlog@7.0.0': dependencies: - '@types/node': 24.3.1 + '@types/node': 24.9.2 '@types/pacote@11.1.8': dependencies: - '@types/node': 24.3.1 + '@types/node': 24.9.2 '@types/npm-registry-fetch': 8.0.9 '@types/npmlog': 7.0.0 '@types/ssri': 7.1.5 @@ -8156,7 +7001,7 @@ snapshots: '@types/pg@8.6.1': dependencies: - '@types/node': 24.3.1 + '@types/node': 24.10.1 pg-protocol: 1.10.3 pg-types: 2.2.0 @@ -8170,46 +7015,41 @@ snapshots: dependencies: csstype: 3.1.3 - '@types/resolve@1.20.2': {} - '@types/semver@7.7.1': {} '@types/send@0.17.6': dependencies: '@types/mime': 1.3.5 - '@types/node': 24.3.1 + '@types/node': 24.10.1 '@types/send@1.2.1': dependencies: - '@types/node': 24.3.1 + '@types/node': 24.10.1 '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 24.3.1 + '@types/node': 24.10.1 '@types/send': 0.17.6 '@types/shimmer@1.2.0': {} '@types/ssri@7.1.5': dependencies: - '@types/node': 24.3.1 - - '@types/validator@13.15.10': - optional: true + '@types/node': 24.9.2 '@types/which@3.0.4': {} '@types/yargs-parser@21.0.3': {} - '@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.43.0 - '@typescript-eslint/type-utils': 8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.43.0 + '@typescript-eslint/parser': 8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/type-utils': 8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.44.1 eslint: 9.35.0(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 @@ -8219,61 +7059,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.43.0 - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.43.0 + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.44.1 debug: 4.4.3 eslint: 9.35.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.43.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.44.1(typescript@5.9.3) - '@typescript-eslint/types': 8.46.4 - debug: 4.4.3 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/project-service@8.44.1(typescript@5.9.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.44.1(typescript@5.9.3) - '@typescript-eslint/types': 8.46.4 + '@typescript-eslint/types': 8.44.1 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - optional: true - - '@typescript-eslint/scope-manager@8.43.0': - dependencies: - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/visitor-keys': 8.43.0 '@typescript-eslint/scope-manager@8.44.1': dependencies: '@typescript-eslint/types': 8.44.1 '@typescript-eslint/visitor-keys': 8.44.1 - optional: true - - '@typescript-eslint/tsconfig-utils@8.43.0(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 '@typescript-eslint/tsconfig-utils@8.44.1(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3 eslint: 9.35.0(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.9.3) @@ -8281,29 +7101,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.43.0': {} - - '@typescript-eslint/types@8.44.1': - optional: true + '@typescript-eslint/types@8.44.1': {} '@typescript-eslint/types@8.46.4': {} - '@typescript-eslint/typescript-estree@8.43.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.43.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.3) - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/visitor-keys': 8.43.0 - debug: 4.4.3 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/typescript-estree@8.44.1(typescript@5.9.3)': dependencies: '@typescript-eslint/project-service': 8.44.1(typescript@5.9.3) @@ -8319,18 +7120,6 @@ snapshots: typescript: 5.9.3 transitivePeerDependencies: - supports-color - optional: true - - '@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.43.0 - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.3) - eslint: 9.35.0(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color '@typescript-eslint/utils@8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: @@ -8342,49 +7131,11 @@ snapshots: typescript: 5.9.3 transitivePeerDependencies: - supports-color - optional: true - - '@typescript-eslint/visitor-keys@8.43.0': - dependencies: - '@typescript-eslint/types': 8.43.0 - eslint-visitor-keys: 4.2.1 '@typescript-eslint/visitor-keys@8.44.1': dependencies: '@typescript-eslint/types': 8.44.1 eslint-visitor-keys: 4.2.1 - optional: true - - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20250912.1': - optional: true - - '@typescript/native-preview-darwin-x64@7.0.0-dev.20250912.1': - optional: true - - '@typescript/native-preview-linux-arm64@7.0.0-dev.20250912.1': - optional: true - - '@typescript/native-preview-linux-arm@7.0.0-dev.20250912.1': - optional: true - - '@typescript/native-preview-linux-x64@7.0.0-dev.20250912.1': - optional: true - - '@typescript/native-preview-win32-arm64@7.0.0-dev.20250912.1': - optional: true - - '@typescript/native-preview-win32-x64@7.0.0-dev.20250912.1': - optional: true - - '@typescript/native-preview@7.0.0-dev.20250912.1': - optionalDependencies: - '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20250912.1 - '@typescript/native-preview-darwin-x64': 7.0.0-dev.20250912.1 - '@typescript/native-preview-linux-arm': 7.0.0-dev.20250912.1 - '@typescript/native-preview-linux-arm64': 7.0.0-dev.20250912.1 - '@typescript/native-preview-linux-x64': 7.0.0-dev.20250912.1 - '@typescript/native-preview-win32-arm64': 7.0.0-dev.20250912.1 - '@typescript/native-preview-win32-x64': 7.0.0-dev.20250912.1 '@unrs/resolver-binding-android-arm-eabi@1.11.1': optional: true @@ -8445,66 +7196,101 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1))': + '@vitest/coverage-v8@4.0.3(vitest@4.0.3(@types/node@24.9.2)(jiti@2.6.1)(yaml@2.8.1))': dependencies: - '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 + '@vitest/utils': 4.0.3 ast-v8-to-istanbul: 0.3.8 debug: 4.4.3 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.2.0 - magic-string: 0.30.19 magicast: 0.3.5 std-env: 3.10.0 - test-exclude: 7.0.1 - tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1) + tinyrainbow: 3.0.3 + vitest: 4.0.3(@types/node@24.9.2)(jiti@2.6.1)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@vitest/expect@3.2.4': + '@vitest/expect@4.0.3': dependencies: + '@standard-schema/spec': 1.0.0 '@types/chai': 5.2.3 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.3.3 - tinyrainbow: 2.0.0 + '@vitest/spy': 4.0.3 + '@vitest/utils': 4.0.3 + chai: 6.2.1 + tinyrainbow: 3.0.3 - '@vitest/mocker@3.2.4(vite@7.1.5(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1))': + '@vitest/mocker@4.0.3(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(yaml@2.8.1))': dependencies: - '@vitest/spy': 3.2.4 + '@vitest/spy': 4.0.3 estree-walker: 3.0.3 magic-string: 0.30.19 optionalDependencies: - vite: 7.1.5(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(yaml@2.8.1) - '@vitest/pretty-format@3.2.4': + '@vitest/pretty-format@4.0.3': dependencies: - tinyrainbow: 2.0.0 + tinyrainbow: 3.0.3 - '@vitest/runner@3.2.4': + '@vitest/runner@4.0.3': dependencies: - '@vitest/utils': 3.2.4 + '@vitest/utils': 4.0.3 pathe: 2.0.3 - strip-literal: 3.1.0 - '@vitest/snapshot@3.2.4': + '@vitest/snapshot@4.0.3': dependencies: - '@vitest/pretty-format': 3.2.4 + '@vitest/pretty-format': 4.0.3 magic-string: 0.30.19 pathe: 2.0.3 - '@vitest/spy@3.2.4': + '@vitest/spy@4.0.3': {} + + '@vitest/utils@4.0.3': + dependencies: + '@vitest/pretty-format': 4.0.3 + tinyrainbow: 3.0.3 + + '@yao-pkg/pkg-fetch@3.5.28(encoding@0.1.13)': dependencies: - tinyspy: 4.0.4 + https-proxy-agent: 7.0.6 + node-fetch: 2.7.0(encoding@0.1.13) + picocolors: 1.1.1 + progress: 2.0.3 + semver: 7.7.2 + tar-fs: 3.1.1 + yargs: 16.2.0 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - encoding + - react-native-b4a + - supports-color - '@vitest/utils@3.2.4': + '@yao-pkg/pkg@6.8.0(encoding@0.1.13)': dependencies: - '@vitest/pretty-format': 3.2.4 - loupe: 3.2.1 - tinyrainbow: 2.0.0 + '@babel/generator': 7.28.5 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.5 + '@yao-pkg/pkg-fetch': 3.5.28(encoding@0.1.13) + into-stream: 6.0.0 + minimist: 1.2.8 + multistream: 4.1.0 + picocolors: 1.1.1 + picomatch: 4.0.3 + prebuild-install: 7.1.3 + resolve: 1.22.11 + stream-meter: 1.0.4 + tar: 7.5.2 + tinyglobby: 0.2.15 + unzipper: 0.12.3 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - encoding + - react-native-b4a + - supports-color '@yarnpkg/lockfile@1.1.0': {} @@ -8522,8 +7308,6 @@ snapshots: dependencies: isexe: 2.0.0 - abbrev@1.1.1: {} - abbrev@3.0.1: {} abbrev@4.0.0: {} @@ -8546,10 +7330,6 @@ snapshots: ajv-dist@8.17.1: {} - ajv-formats@3.0.1(ajv@8.17.1): - optionalDependencies: - ajv: 8.17.1 - ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -8568,15 +7348,11 @@ snapshots: dependencies: type-fest: 0.21.3 - ansi-escapes@6.2.1: {} - ansi-escapes@7.2.0: dependencies: environment: 1.1.0 - ansi-regex@6.1.0: {} - - ansi-styles@2.2.1: {} + ansi-regex@6.2.2: {} ansi-styles@3.2.1: dependencies: @@ -8588,16 +7364,12 @@ snapshots: ansi-styles@6.2.3: {} - ansi-term@0.0.2(patch_hash=06bb5127b7689d6ab2ea833f9617b2c3fbe9fe0048ce1c6b59b81f7e25ccbccb): - dependencies: - x256: 0.0.2 - - ansicolors@0.3.2: {} - ansis@4.2.0: {} argparse@2.0.1: {} + arrify@1.0.1: {} + assertion-error@2.0.1: {} ast-v8-to-istanbul@0.3.8: @@ -8606,8 +7378,6 @@ snapshots: estree-walker: 3.0.3 js-tokens: 9.0.1 - astral-regex@2.0.0: {} - asynckit@0.4.0: {} auto-bind@5.0.1: {} @@ -8642,9 +7412,43 @@ snapshots: bare-events@2.8.2: {} - base64-js@1.5.1: + bare-fs@4.5.1: + dependencies: + bare-events: 2.8.2 + bare-path: 3.0.0 + bare-stream: 2.7.0(bare-events@2.8.2) + bare-url: 2.3.2 + fast-fifo: 1.3.2 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + optional: true + + bare-os@3.6.2: + optional: true + + bare-path@3.0.0: + dependencies: + bare-os: 3.6.2 + optional: true + + bare-stream@2.7.0(bare-events@2.8.2): + dependencies: + streamx: 2.23.0 + optionalDependencies: + bare-events: 2.8.2 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + optional: true + + bare-url@2.3.2: + dependencies: + bare-path: 3.0.0 optional: true + base64-js@1.5.1: {} + baseline-browser-mapping@2.8.28: {} before-after-hook@4.0.0: {} @@ -8657,70 +7461,20 @@ snapshots: read-cmd-shim: 5.0.0 write-file-atomic: 6.0.0 - bin-links@6.0.0: - dependencies: - cmd-shim: 8.0.0 - npm-normalize-package-bin: 5.0.0 - proc-log: 6.0.0 - read-cmd-shim: 6.0.0 - write-file-atomic: 7.0.0 - - bindings@1.5.0: - dependencies: - file-uri-to-path: 1.0.0 - optional: true - bl@4.1.0: dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 - optional: true - blessed-contrib@4.11.0(patch_hash=2c9f0a87aa8ce9ed95ce201819ef3fcdb9a00f1cabe12815f586d2a3c0bff69e): - dependencies: - ansi-term: 0.0.2(patch_hash=06bb5127b7689d6ab2ea833f9617b2c3fbe9fe0048ce1c6b59b81f7e25ccbccb) - chalk: 1.1.3 - drawille-canvas-blessed-contrib: 0.1.3(patch_hash=baf1e92576f78c2c86283e7a3182ddd59d52cd7e86ad9fe21d1c4ccc2274bcf3) - lodash: 4.17.21(patch_hash=9c24de093a43581e08151be377de2e0518d256eca3c50f117c523e45ab6272b1) - map-canvas: 0.1.5 - marked: 4.3.0 - marked-terminal: 5.2.0(marked@4.3.0) - memory-streams: 0.1.3 - memorystream: 0.3.1 - picture-tuber: 1.0.2 - sparkline: 0.1.2 - strip-ansi: 3.0.1 - term-canvas: 0.0.5 - x256: 0.0.2 - - blessed@0.1.81(patch_hash=cae83aa371bddce36c7a03bac146da97b1da2ce16059ce29e25c3af0182331a3): {} - - body-parser@2.2.0: - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 4.4.3 - http-errors: 2.0.1 - iconv-lite: 0.6.3 - on-finished: 2.4.1 - qs: 6.14.0 - raw-body: 3.0.2 - type-is: 2.0.1 - transitivePeerDependencies: - - supports-color - optional: true + bluebird@3.7.2: {} bole@5.0.22: dependencies: fast-safe-stringify: 2.1.1 individual: 3.0.0 - boolbase@1.0.0: {} - - boolean@3.2.0: {} - - brace-expansion@2.0.2(patch_hash=eac47f4a81cd7be766bd391c6bf91ac462816eb2f3c5f99270419ac752d6f02d): + brace-expansion@2.0.2: dependencies: balanced-match: 1.0.2 @@ -8728,8 +7482,6 @@ snapshots: dependencies: fill-range: 7.1.1 - bresenham@0.0.3(patch_hash=cc5bda185ad608af96d1018f588dae1b7e8390459011701bffa97ae0f12537a6): {} - browserslist@4.25.4: dependencies: caniuse-lite: 1.0.30001754 @@ -8745,15 +7497,10 @@ snapshots: node-releases: 2.0.27 update-browserslist-db: 1.1.4(browserslist@4.28.0) - buffer-equal-constant-time@1.0.1: {} - buffer@5.7.1: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - optional: true - - buffers@0.1.1: {} builtin-modules@3.3.0: {} @@ -8761,9 +7508,6 @@ snapshots: dependencies: run-applescript: 7.1.0 - bytes@3.1.2: - optional: true - cac@6.7.14: {} cacache@19.0.1: @@ -8795,47 +7539,25 @@ snapshots: ssri: 12.0.0 unique-filename: 4.0.0 - cacheable-lookup@7.0.0: {} + callsites@3.1.0: {} - cacheable-request@13.0.15: + camelcase-keys@7.0.2: dependencies: - '@types/http-cache-semantics': 4.0.4 - get-stream: 9.0.1 - http-cache-semantics: 4.2.0 - keyv: 5.5.4 - mimic-response: 4.0.0 - normalize-url: 8.1.0 - responselike: 4.0.2 + camelcase: 6.3.0 + map-obj: 4.3.0 + quick-lru: 5.1.1 + type-fest: 1.4.0 - callsites@3.1.0: {} + camelcase@6.3.0: {} caniuse-lite@1.0.30001754: {} - cardinal@2.1.1: - dependencies: - ansicolors: 0.3.2 - redeyed: 2.1.1 - - chai@5.3.3: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.1 - deep-eql: 5.0.2 - loupe: 3.2.1 - pathval: 2.0.1 + chai@6.2.1: {} chalk-table@1.0.2: dependencies: chalk: 2.4.2 - strip-ansi: 5.2.0 - - chalk@1.1.3: - dependencies: - ansi-styles: 2.2.1 - escape-string-regexp: 1.0.5 - has-ansi: 2.0.0 - strip-ansi: 3.0.1 - supports-color: 2.0.0 + strip-ansi: 7.1.2 chalk@2.4.2: dependencies: @@ -8850,35 +7572,7 @@ snapshots: chalk@5.6.2: {} - charm@0.1.2: {} - - check-error@2.1.1: {} - - cheerio-select@2.1.0: - dependencies: - boolbase: 1.0.0 - css-select: 5.2.2 - css-what: 6.2.2 - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.2.2 - - cheerio@1.1.2: - dependencies: - cheerio-select: 2.1.0 - dom-serializer: 2.0.0 - domhandler: 5.0.3 - domutils: 3.2.2 - encoding-sniffer: 0.2.1 - htmlparser2: 10.0.0 - parse5: 7.3.0 - parse5-htmlparser2-tree-adapter: 7.1.0 - parse5-parser-stream: 7.1.2 - undici: 6.21.3 - whatwg-mimetype: 4.0.0 - - chownr@1.1.4: - optional: true + chownr@1.1.4: {} chownr@3.0.0: {} @@ -8900,32 +7594,24 @@ snapshots: dependencies: restore-cursor: 5.1.0 - cli-table3@0.6.5: - dependencies: - string-width: 4.2.3 - optionalDependencies: - '@colors/colors': 1.5.0 - cli-truncate@4.0.0: dependencies: slice-ansi: 5.0.0 - string-width: 7.2.0 + string-width: 8.1.0 cli-truncate@5.1.1: dependencies: slice-ansi: 7.1.2 string-width: 8.1.0 - cliui@8.0.1: + cliui@7.0.4: dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 + string-width: 8.1.0 + strip-ansi: 7.1.2 + wrap-ansi: 9.0.2 cmd-shim@7.0.0: {} - cmd-shim@8.0.0: {} - code-excerpt@4.0.0: dependencies: convert-to-spaces: 2.0.1 @@ -8964,26 +7650,6 @@ snapshots: common-ancestor-path@1.0.1: {} - commondir@1.0.1: {} - - compressible@2.0.18: - dependencies: - mime-db: 1.52.0 - optional: true - - compression@1.8.1: - dependencies: - bytes: 3.1.2 - compressible: 2.0.18 - debug: 2.6.9 - negotiator: 0.6.4 - on-headers: 1.1.0 - safe-buffer: '@socketregistry/safe-buffer@1.0.9' - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - optional: true - compromise@14.14.4: dependencies: efrt: 2.7.0 @@ -8999,19 +7665,6 @@ snapshots: ini: 1.3.8 proto-list: 1.2.4 - connect@3.7.0: - dependencies: - debug: 2.6.9 - finalhandler: 1.1.2 - parseurl: 1.3.3 - utils-merge: 1.0.1 - transitivePeerDependencies: - - supports-color - optional: true - - content-type@1.0.5: - optional: true - convert-source-map@2.0.0: {} convert-to-spaces@2.0.1: {} @@ -9028,47 +7681,31 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-select@5.2.2: - dependencies: - boolbase: 1.0.0 - css-what: 6.2.2 - domhandler: 5.0.3 - domutils: 3.2.2 - nth-check: 2.1.1 - - css-what@6.2.2: {} - cssesc@3.0.0: {} csstype@3.1.3: {} - debug@2.6.9: - dependencies: - ms: 2.0.0 - optional: true - debug@4.4.3: dependencies: ms: 2.1.3 - decompress-response@10.0.0: + decamelize-keys@1.1.1: dependencies: - mimic-response: 4.0.0 + decamelize: 1.2.0 + map-obj: 1.0.1 + + decamelize@1.2.0: {} + + decamelize@5.0.1: {} decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 - optional: true - - deep-eql@5.0.2: {} - deep-extend@0.6.0: - optional: true + deep-extend@0.6.0: {} deep-is@0.1.4: {} - deepmerge@4.3.1: {} - default-browser-id@5.0.0: {} default-browser@5.3.0: @@ -9076,8 +7713,6 @@ snapshots: bundle-name: 4.1.0 default-browser-id: 5.0.0 - defer-to-connect@2.0.1: {} - define-lazy-prop@3.0.0: {} defu@6.1.4: {} @@ -9099,59 +7734,20 @@ snapshots: delayed-stream@1.0.0: {} - depd@2.0.0: - optional: true - destr@2.0.5: {} - detect-libc@2.1.2: - optional: true - - detect-node@2.1.0: {} + detect-libc@2.1.2: {} dev-null-cli@2.0.0: dependencies: - meow: 13.2.0 + meow: 10.1.5 noop-stream: 1.0.0 - dom-serializer@2.0.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - entities: 4.5.0 - - domelementtype@2.3.0: {} - - domhandler@5.0.3: - dependencies: - domelementtype: 2.3.0 - - domutils@3.2.2: - dependencies: - dom-serializer: 2.0.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - dotenv@17.2.3: {} - dottie@2.0.6: - optional: true - - drawille-blessed-contrib@1.0.0(patch_hash=bc7802f29a5252694b94e911ea0fef9939529d6bd866c9e189539ae23f54187c): {} - - drawille-canvas-blessed-contrib@0.1.3(patch_hash=baf1e92576f78c2c86283e7a3182ddd59d52cd7e86ad9fe21d1c4ccc2274bcf3): + duplexer2@0.1.4: dependencies: - ansi-term: 0.0.2(patch_hash=06bb5127b7689d6ab2ea833f9617b2c3fbe9fe0048ce1c6b59b81f7e25ccbccb) - bresenham: 0.0.3(patch_hash=cc5bda185ad608af96d1018f588dae1b7e8390459011701bffa97ae0f12537a6) - drawille-blessed-contrib: 1.0.0(patch_hash=bc7802f29a5252694b94e911ea0fef9939529d6bd866c9e189539ae23f54187c) - gl-matrix: 2.8.1 - x256: 0.0.2 - - eastasianwidth@0.2.0: {} - - ecdsa-sig-formatter@1.0.11: - dependencies: - safe-buffer: '@socketregistry/safe-buffer@1.0.9' + readable-stream: 2.3.8 eciesjs@0.4.16: dependencies: @@ -9160,32 +7756,16 @@ snapshots: '@noble/curves': 1.9.7 '@noble/hashes': 1.8.0 - edn-data@1.1.2: {} - - ee-first@1.1.1: - optional: true - efrt@2.7.0: {} electron-to-chromium@1.5.251: {} emoji-regex@10.6.0: {} - emoji-regex@8.0.0: {} - - emoji-regex@9.2.2: {} - - encodeurl@1.0.2: - optional: true - - encoding-sniffer@0.2.1: - dependencies: - iconv-lite: 0.6.3 - whatwg-encoding: 3.1.1 - encoding@0.1.13: dependencies: iconv-lite: 0.6.3 + optional: true end-of-stream@1.4.5: dependencies: @@ -9193,13 +7773,9 @@ snapshots: enhanced-resolve@5.18.3: dependencies: - graceful-fs: 4.2.11(patch_hash=17007d43dcc01ee2047730ab13eb23c41adc01ae0f24ee872b1fe69142db5200) + graceful-fs: 4.2.11 tapable: 2.3.0 - entities@4.5.0: {} - - entities@6.0.1: {} - env-paths@2.2.1: {} environment@1.1.0: {} @@ -9216,8 +7792,6 @@ snapshots: es-toolkit@1.41.0: {} - es6-error@4.1.1: {} - esbuild@0.25.11: optionalDependencies: '@esbuild/aix-ppc64': 0.25.11 @@ -9249,9 +7823,6 @@ snapshots: escalade@3.2.0: {} - escape-html@1.0.3: - optional: true - escape-string-regexp@1.0.5: {} escape-string-regexp@2.0.0: {} @@ -9339,7 +7910,7 @@ snapshots: eslint: 9.35.0(jiti@2.6.1) esquery: 1.6.0 globals: 15.15.0 - indent-string: '@socketregistry/indent-string@1.0.13' + indent-string: '@socketregistry/indent-string@1.0.14' is-builtin-module: 3.2.1 jsesc: 3.1.0 pluralize: 8.0.0 @@ -9406,8 +7977,6 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 4.2.1 - esprima@4.0.1: {} - esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -9418,18 +7987,12 @@ snapshots: estraverse@5.3.0: {} - estree-walker@2.0.2: {} - estree-walker@3.0.3: dependencies: '@types/estree': 1.0.8 esutils@2.0.3: {} - event-stream@0.9.8: - dependencies: - optimist: 0.2.8 - eventemitter3@5.0.1: {} events-universal@1.0.1: @@ -9462,8 +8025,7 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 - expand-template@2.0.3: - optional: true + expand-template@2.0.3: {} expect-type@1.2.2: {} @@ -9495,10 +8057,6 @@ snapshots: dependencies: reusify: 1.1.0 - fd-package-json@2.0.0: - dependencies: - walk-up-path: 4.0.0 - fdir@6.5.0(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 @@ -9507,26 +8065,10 @@ snapshots: dependencies: flat-cache: 4.0.1 - file-uri-to-path@1.0.0: - optional: true - fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 - finalhandler@1.1.2: - dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.3.0 - parseurl: 1.3.3 - statuses: 1.5.0 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - optional: true - find-up-simple@1.0.1: {} find-up@4.1.0: @@ -9553,8 +8095,6 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - form-data-encoder@4.1.0: {} - form-data@4.0.4: dependencies: asynckit: 0.4.0 @@ -9563,12 +8103,18 @@ snapshots: hasown: '@socketregistry/hasown@1.0.7' mime-types: 2.1.35 - formatly@0.3.0: + from2@2.3.0: dependencies: - fd-package-json: 2.0.0 + inherits: 2.0.4 + readable-stream: 2.3.8 - fs-constants@1.0.0: - optional: true + fs-constants@1.0.0: {} + + fs-extra@11.3.2: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 fs-minipass@3.0.3: dependencies: @@ -9593,19 +8139,11 @@ snapshots: get-stream@6.0.1: {} - get-stream@9.0.1: - dependencies: - '@sec-ant/readable-stream': 0.4.1 - is-stream: 4.0.1 - get-tsconfig@4.13.0: dependencies: resolve-pkg-maps: 1.0.0 - github-from-package@0.0.0: - optional: true - - gl-matrix@2.8.1: {} + github-from-package@0.0.0: {} glob-parent@5.1.2: dependencies: @@ -9633,15 +8171,6 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 2.0.1 - global-agent@3.0.0: - dependencies: - boolean: 3.2.0 - es6-error: 4.1.1 - matcher: 3.0.0 - roarr: 2.15.4 - semver: 7.7.2 - serialize-error: 7.0.1 - globals@14.0.0: {} globals@15.15.0: {} @@ -9659,22 +8188,7 @@ snapshots: globrex@0.1.2: {} - got@14.6.0: - dependencies: - '@sindresorhus/is': 7.1.1 - '@szmarczak/http-timer': 5.0.1 - cacheable-lookup: 7.0.0 - cacheable-request: 13.0.15 - decompress-response: 10.0.0 - form-data-encoder: 4.1.0 - http2-wrapper: 2.2.1 - keyv: 5.5.4 - lowercase-keys: 3.0.0 - p-cancelable: 4.0.1 - responselike: 4.0.2 - type-fest: 4.41.0 - - graceful-fs@4.2.11(patch_hash=17007d43dcc01ee2047730ab13eb23c41adc01ae0f24ee872b1fe69142db5200): {} + graceful-fs@4.2.11: {} grad-school@0.0.5: {} @@ -9682,18 +8196,18 @@ snapshots: guid-typescript@1.0.9: {} - has-ansi@2.0.0: - dependencies: - ansi-regex: 6.1.0 + hard-rejection@2.1.0: {} has-flag@3.0.0: {} has-flag@4.0.0: {} - here@0.0.2: {} - hosted-git-info@2.8.9: {} + hosted-git-info@4.1.0: + dependencies: + lru-cache: 6.0.0 + hosted-git-info@8.1.0: dependencies: lru-cache: 10.4.3 @@ -9706,24 +8220,8 @@ snapshots: html-escaper@2.0.2: {} - htmlparser2@10.0.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.2.2 - entities: 6.0.1 - http-cache-semantics@4.2.0: {} - http-errors@2.0.1: - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.2 - toidentifier: 1.0.1 - optional: true - http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.4 @@ -9731,11 +8229,6 @@ snapshots: transitivePeerDependencies: - supports-color - http2-wrapper@2.2.1: - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.4 @@ -9750,14 +8243,10 @@ snapshots: iconv-lite@0.6.3: dependencies: safer-buffer: '@socketregistry/safer-buffer@1.0.10' - - iconv-lite@0.7.0: - dependencies: - safer-buffer: '@socketregistry/safer-buffer@1.0.10' - - ieee754@1.2.1: optional: true + ieee754@1.2.1: {} + ignore-walk@8.0.0: dependencies: minimatch: 10.1.1 @@ -9797,9 +8286,6 @@ snapshots: individual@3.0.0: {} - inflection@1.13.4: - optional: true - inherits@2.0.4: {} ini@1.3.8: {} @@ -9808,20 +8294,20 @@ snapshots: ini@6.0.0: {} - ink-table@3.1.0(ink@6.3.1(@types/react@19.2.2)(react@19.2.0))(react@19.2.0): + ink-table@3.1.0(ink@6.3.1(patch_hash=03cccf82711216d0fa8283ea4716ed803a132ae8c31293f0f5a6677e2bdb4a64)(@types/react@19.2.2)(react@19.2.0))(react@19.2.0): dependencies: - ink: 6.3.1(@types/react@19.2.2)(react@19.2.0) + ink: 6.3.1(patch_hash=03cccf82711216d0fa8283ea4716ed803a132ae8c31293f0f5a6677e2bdb4a64)(@types/react@19.2.2)(react@19.2.0) object-hash: 2.2.0 react: 19.2.0 - ink-text-input@6.0.0(ink@6.3.1(@types/react@19.2.2)(react@19.2.0))(react@19.2.0): + ink-text-input@6.0.0(ink@6.3.1(patch_hash=03cccf82711216d0fa8283ea4716ed803a132ae8c31293f0f5a6677e2bdb4a64)(@types/react@19.2.2)(react@19.2.0))(react@19.2.0): dependencies: chalk: 5.6.2 - ink: 6.3.1(@types/react@19.2.2)(react@19.2.0) + ink: 6.3.1(patch_hash=03cccf82711216d0fa8283ea4716ed803a132ae8c31293f0f5a6677e2bdb4a64)(@types/react@19.2.2)(react@19.2.0) react: 19.2.0 type-fest: 4.41.0 - ink@6.3.1(@types/react@19.2.2)(react@19.2.0): + ink@6.3.1(patch_hash=03cccf82711216d0fa8283ea4716ed803a132ae8c31293f0f5a6677e2bdb4a64)(@types/react@19.2.2)(react@19.2.0): dependencies: '@alcalzone/ansi-tokenize': 0.2.2 ansi-escapes: 7.2.0 @@ -9833,7 +8319,7 @@ snapshots: cli-truncate: 4.0.0 code-excerpt: 4.0.0 es-toolkit: 1.41.0 - indent-string: '@socketregistry/indent-string@1.0.13' + indent-string: '@socketregistry/indent-string@1.0.14' is-in-ci: 2.0.0 patch-console: 2.0.0 react: 19.2.0 @@ -9841,7 +8327,7 @@ snapshots: signal-exit: 3.0.7 slice-ansi: 7.1.2 stack-utils: 2.0.6 - string-width: 7.2.0 + string-width: 8.1.0 type-fest: 4.41.0 widest-line: 5.0.0 wrap-ansi: 9.0.2 @@ -9853,7 +8339,10 @@ snapshots: - bufferutil - utf-8-validate - ionstore@1.0.1: {} + into-stream@6.0.0: + dependencies: + from2: 2.3.0 + p-is-promise: 3.0.0 ip-address@10.1.0: {} @@ -9889,8 +8378,6 @@ snapshots: dependencies: is-docker: 3.0.0 - is-module@1.0.0: {} - is-node-process@1.2.0: {} is-number@7.0.0: {} @@ -9899,16 +8386,12 @@ snapshots: is-path-inside@4.0.0: {} - is-plain-obj@2.1.0: {} + is-plain-obj@1.1.0: {} - is-reference@1.2.1: - dependencies: - '@types/estree': 1.0.8 + is-plain-obj@2.1.0: {} is-stream@2.0.1: {} - is-stream@4.0.1: {} - is-wsl@3.1.0: dependencies: is-inside-container: 1.0.0 @@ -9982,8 +8465,11 @@ snapshots: json5@2.2.3: {} - jsonata@2.1.0: - optional: true + jsonfile@6.2.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 jsonparse@1.3.1: {} @@ -9991,42 +8477,11 @@ snapshots: just-diff@6.0.2: {} - jwa@2.0.1: - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: '@socketregistry/safe-buffer@1.0.9' - - jws@4.0.0: - dependencies: - jwa: 2.0.1 - safe-buffer: '@socketregistry/safe-buffer@1.0.9' - keyv@4.5.4: dependencies: json-buffer: 3.0.1 - keyv@5.5.4: - dependencies: - '@keyv/serialize': 1.1.1 - - knip@5.63.1(@types/node@24.3.1)(typescript@5.9.3): - dependencies: - '@nodelib/fs.walk': 1.2.8 - '@types/node': 24.3.1 - fast-glob: 3.3.3 - formatly: 0.3.0 - jiti: 2.6.1 - js-yaml: 4.1.1 - minimist: 1.2.8 - oxc-resolver: 11.13.2 - picocolors: 1.1.1 - picomatch: 4.0.3 - smol-toml: 1.5.2 - strip-json-comments: 5.0.2 - typescript: 5.9.3 - zod: 3.25.76 - zod-validation-error: 3.5.4(zod@3.25.76) + kind-of@6.0.3: {} levn@0.4.1: dependencies: @@ -10073,9 +8528,7 @@ snapshots: lodash.merge@4.6.2: {} - lodash.truncate@4.4.2: {} - - lodash@4.17.21(patch_hash=9c24de093a43581e08151be377de2e0518d256eca3c50f117c523e45ab6272b1): {} + lodash@4.17.21: {} log-update@6.1.0: dependencies: @@ -10087,10 +8540,6 @@ snapshots: long@5.3.2: {} - loupe@3.2.1: {} - - lowercase-keys@3.0.0: {} - lru-cache@10.4.3: {} lru-cache@11.2.2: {} @@ -10099,13 +8548,17 @@ snapshots: dependencies: yallist: 3.1.1 + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + magic-string@0.30.19: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 magicast@0.3.5: dependencies: - '@babel/parser': 7.28.5 + '@babel/parser': 7.28.4 '@babel/types': 7.28.5 source-map-js: 1.2.1 @@ -10145,36 +8598,27 @@ snapshots: transitivePeerDependencies: - supports-color - map-canvas@0.1.5: - dependencies: - drawille-canvas-blessed-contrib: 0.1.3(patch_hash=baf1e92576f78c2c86283e7a3182ddd59d52cd7e86ad9fe21d1c4ccc2274bcf3) - xml2js: 0.6.2 - - marked-terminal@5.2.0(marked@4.3.0): - dependencies: - ansi-escapes: 6.2.1 - cardinal: 2.1.1 - chalk: 5.6.2 - cli-table3: 0.6.5 - marked: 4.3.0 - node-emoji: 1.11.0 - supports-hyperlinks: 2.3.0 - - marked@4.3.0: {} - - matcher@3.0.0: - dependencies: - escape-string-regexp: 4.0.0 - - media-typer@1.1.0: - optional: true + map-obj@1.0.1: {} - memory-streams@0.1.3: - dependencies: - readable-stream: 1.0.34 + map-obj@4.3.0: {} memorystream@0.3.1: {} + meow@10.1.5: + dependencies: + '@types/minimist': 1.2.5 + camelcase-keys: 7.0.2 + decamelize: 5.0.1 + decamelize-keys: 1.1.1 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 3.0.3 + read-pkg-up: 8.0.0 + redent: 4.0.0 + trim-newlines: 4.1.1 + type-fest: 1.4.0 + yargs-parser: 21.1.1 + meow@13.2.0: {} merge-stream@2.0.0: {} @@ -10188,44 +8632,35 @@ snapshots: mime-db@1.52.0: {} - mime-db@1.54.0: - optional: true - mime-types@2.1.35: dependencies: mime-db: 1.52.0 - mime-types@3.0.2: - dependencies: - mime-db: 1.54.0 - optional: true - mimic-fn@2.1.0: {} mimic-function@5.0.1: {} - mimic-response@3.1.0: - optional: true - - mimic-response@4.0.0: {} + mimic-response@3.1.0: {} min-indent@1.0.1: {} - minimatch@10.0.3: - dependencies: - '@isaacs/brace-expansion': 5.0.0 - minimatch@10.1.1: dependencies: '@isaacs/brace-expansion': 5.0.0 minimatch@3.1.2: dependencies: - brace-expansion: 2.0.2(patch_hash=eac47f4a81cd7be766bd391c6bf91ac462816eb2f3c5f99270419ac752d6f02d) + brace-expansion: 2.0.2 minimatch@9.0.5: dependencies: - brace-expansion: 2.0.2(patch_hash=eac47f4a81cd7be766bd391c6bf91ac462816eb2f3c5f99270419ac752d6f02d) + brace-expansion: 2.0.2 + + minimist-options@4.1.0: + dependencies: + arrify: 1.0.1 + is-plain-obj: 1.1.0 + kind-of: 6.0.3 minimist@1.2.8: {} @@ -10271,10 +8706,7 @@ snapshots: dependencies: minipass: 7.1.2 - mkdirp-classic@0.5.3: - optional: true - - mkdirp@1.0.4: {} + mkdirp-classic@0.5.3: {} mlly@1.8.0: dependencies: @@ -10285,15 +8717,7 @@ snapshots: mock-fs@5.5.0: {} - module-details-from-path@1.0.4: {} - - moment-timezone@0.5.48: - dependencies: - moment: 2.30.1 - optional: true - - moment@2.30.1: - optional: true + module-details-from-path@1.0.4: {} mount-point@3.0.0: dependencies: @@ -10305,19 +8729,20 @@ snapshots: dependencies: path-exists: 5.0.0 - ms@2.0.0: - optional: true - ms@2.1.3: {} + multistream@4.1.0: + dependencies: + once: 1.4.0 + readable-stream: 3.6.2 + nano-spawn@1.0.3: {} nanoid@3.3.11: {} nanotar@0.2.0: {} - napi-build-utils@2.0.0: - optional: true + napi-build-utils@2.0.0: {} napi-postinstall@0.3.4: {} @@ -10333,9 +8758,6 @@ snapshots: split2: 3.2.2 through2: 4.0.2 - negotiator@0.6.4: - optional: true - negotiator@1.0.0: {} nmtree@1.0.6: @@ -10351,22 +8773,20 @@ snapshots: node-abi@3.85.0: dependencies: semver: 7.7.2 - optional: true - node-addon-api@8.5.0: - optional: true + node-fetch-native@1.6.7: {} - node-emoji@1.11.0: + node-fetch@2.7.0(encoding@0.1.13): dependencies: - lodash: 4.17.21(patch_hash=9c24de093a43581e08151be377de2e0518d256eca3c50f117c523e45ab6272b1) - - node-fetch-native@1.6.7: {} + whatwg-url: 5.0.0 + optionalDependencies: + encoding: 0.1.13 - node-gyp@11.5.0: + node-gyp@11.5.0(patch_hash=140ba43d43d74f7d3577feb3f8a6efad544dbb0059784102b144a0e2daa437f9): dependencies: env-paths: 2.2.1 exponential-backoff: 3.1.3 - graceful-fs: 4.2.11(patch_hash=17007d43dcc01ee2047730ab13eb23c41adc01ae0f24ee872b1fe69142db5200) + graceful-fs: 4.2.11 make-fetch-happen: 14.0.3 nopt: 8.1.0 proc-log: 5.0.0 @@ -10377,11 +8797,11 @@ snapshots: transitivePeerDependencies: - supports-color - node-gyp@12.1.0: + node-gyp@12.1.0(patch_hash=140ba43d43d74f7d3577feb3f8a6efad544dbb0059784102b144a0e2daa437f9): dependencies: env-paths: 2.2.1 exponential-backoff: 3.1.3 - graceful-fs: 4.2.11(patch_hash=17007d43dcc01ee2047730ab13eb23c41adc01ae0f24ee872b1fe69142db5200) + graceful-fs: 4.2.11 make-fetch-happen: 15.0.3 nopt: 9.0.0 proc-log: 6.0.0 @@ -10392,16 +8812,12 @@ snapshots: transitivePeerDependencies: - supports-color - node-releases@2.0.27: {} + node-int64@0.4.0: {} - node-stream-zip@1.15.0: {} + node-releases@2.0.27: {} noop-stream@1.0.0: {} - nopt@2.1.2: - dependencies: - abbrev: 1.1.1 - nopt@8.1.0: dependencies: abbrev: 3.0.1 @@ -10417,9 +8833,14 @@ snapshots: semver: 7.7.2 validate-npm-package-license: 3.0.4 - normalize-path@3.0.0: {} + normalize-package-data@3.0.3: + dependencies: + hosted-git-info: 4.1.0 + is-core-module: '@socketregistry/is-core-module@1.0.11' + semver: 7.7.2 + validate-npm-package-license: 3.0.4 - normalize-url@8.1.0: {} + normalize-path@3.0.0: {} npm-bundled@4.0.0: dependencies: @@ -10512,10 +8933,6 @@ snapshots: dependencies: path-key: 3.1.1 - nth-check@2.1.1: - dependencies: - boolbase: 1.0.0 - object-hash@2.2.0: {} object-treeify@1.1.33: {} @@ -10526,19 +8943,6 @@ snapshots: node-fetch-native: 1.6.7 ufo: 1.6.1 - on-finished@2.3.0: - dependencies: - ee-first: 1.1.1 - optional: true - - on-finished@2.4.1: - dependencies: - ee-first: 1.1.1 - optional: true - - on-headers@1.1.0: - optional: true - once@1.4.0: dependencies: wrappy: 1.0.2 @@ -10578,14 +8982,6 @@ snapshots: - supports-color optional: true - optimist@0.2.8: - dependencies: - wordwrap: 0.0.3 - - optimist@0.3.7: - dependencies: - wordwrap: 0.0.3 - optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -10599,43 +8995,10 @@ snapshots: outvariant@1.4.3: {} - oxc-resolver@11.13.2: - optionalDependencies: - '@oxc-resolver/binding-android-arm-eabi': 11.13.2 - '@oxc-resolver/binding-android-arm64': 11.13.2 - '@oxc-resolver/binding-darwin-arm64': 11.13.2 - '@oxc-resolver/binding-darwin-x64': 11.13.2 - '@oxc-resolver/binding-freebsd-x64': 11.13.2 - '@oxc-resolver/binding-linux-arm-gnueabihf': 11.13.2 - '@oxc-resolver/binding-linux-arm-musleabihf': 11.13.2 - '@oxc-resolver/binding-linux-arm64-gnu': 11.13.2 - '@oxc-resolver/binding-linux-arm64-musl': 11.13.2 - '@oxc-resolver/binding-linux-ppc64-gnu': 11.13.2 - '@oxc-resolver/binding-linux-riscv64-gnu': 11.13.2 - '@oxc-resolver/binding-linux-riscv64-musl': 11.13.2 - '@oxc-resolver/binding-linux-s390x-gnu': 11.13.2 - '@oxc-resolver/binding-linux-x64-gnu': 11.13.2 - '@oxc-resolver/binding-linux-x64-musl': 11.13.2 - '@oxc-resolver/binding-wasm32-wasi': 11.13.2 - '@oxc-resolver/binding-win32-arm64-msvc': 11.13.2 - '@oxc-resolver/binding-win32-ia32-msvc': 11.13.2 - '@oxc-resolver/binding-win32-x64-msvc': 11.13.2 - - oxlint@1.15.0: - optionalDependencies: - '@oxlint/darwin-arm64': 1.15.0 - '@oxlint/darwin-x64': 1.15.0 - '@oxlint/linux-arm64-gnu': 1.15.0 - '@oxlint/linux-arm64-musl': 1.15.0 - '@oxlint/linux-x64-gnu': 1.15.0 - '@oxlint/linux-x64-musl': 1.15.0 - '@oxlint/win32-arm64': 1.15.0 - '@oxlint/win32-x64': 1.15.0 - - p-cancelable@4.0.1: {} - p-finally@2.0.1: {} + p-is-promise@3.0.0: {} + p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -10666,7 +9029,7 @@ snapshots: '@npmcli/installed-package-contents': 4.0.0 '@npmcli/package-json': 7.0.2 '@npmcli/promise-spawn': 9.0.1 - '@npmcli/run-script': 10.0.3 + '@npmcli/run-script': 10.0.3(patch_hash=b1f74f31293142449c0be473fae0f0b977e1e1174e6a88e2021fcb93dc902ed6) cacache: 20.0.1 fs-minipass: 3.0.3 minipass: 7.1.2 @@ -10692,12 +9055,6 @@ snapshots: just-diff: 6.0.2 just-diff-apply: 5.5.0 - parse-conflict-json@5.0.1: - dependencies: - json-parse-even-better-errors: 5.0.0 - just-diff: 6.0.2 - just-diff-apply: 5.5.0 - parse-json@5.2.0: dependencies: '@babel/code-frame': 7.27.1 @@ -10705,22 +9062,6 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - parse5-htmlparser2-tree-adapter@7.1.0: - dependencies: - domhandler: 5.0.3 - parse5: 7.3.0 - - parse5-parser-stream@7.1.2: - dependencies: - parse5: 7.3.0 - - parse5@7.3.0: - dependencies: - entities: 6.0.1 - - parseurl@1.3.3: - optional: true - patch-console@2.0.0: {} path-exists@4.0.0: {} @@ -10745,11 +9086,6 @@ snapshots: pathe@2.0.3: {} - pathval@2.0.1: {} - - pg-connection-string@2.9.1: - optional: true - pg-int8@1.0.1: {} pg-protocol@1.10.3: {} @@ -10770,15 +9106,6 @@ snapshots: picomatch@4.0.3: {} - picture-tuber@1.0.2: - dependencies: - buffers: 0.1.1 - charm: 0.1.2 - event-stream: 0.9.8 - optimist: 0.3.7 - png-js: 0.1.1 - x256: 0.0.2 - pidtree@0.6.0: {} pify@2.3.0: {} @@ -10799,8 +9126,6 @@ snapshots: pluralize@8.0.0: {} - png-js@0.1.1: {} - pnpm-workspace-yaml@1.3.0: dependencies: yaml: 2.8.1 @@ -10846,21 +9171,20 @@ snapshots: simple-get: 4.0.1 tar-fs: 2.1.4 tunnel-agent: 0.6.0 - optional: true prelude-ls@1.2.1: {} presentable-error@0.0.1: {} - prettify-xml@1.2.0: {} - proc-log@5.0.0: {} proc-log@6.0.0: {} + process-nextick-args@2.0.1: {} + proggy@3.0.0: {} - proggy@4.0.0: {} + progress@2.0.3: {} promise-all-reject-late@1.0.1: {} @@ -10873,10 +9197,6 @@ snapshots: propagate@2.0.1: {} - properties-reader@2.3.0: - dependencies: - mkdirp: 1.0.4 - proto-list@1.2.4: {} protobufjs@7.5.4: @@ -10891,7 +9211,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 24.3.1 + '@types/node': 24.10.1 long: 5.3.2 pump@3.0.3: @@ -10913,21 +9233,12 @@ snapshots: rate-limiter-flexible@8.2.0: {} - raw-body@3.0.2: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.1 - iconv-lite: 0.7.0 - unpipe: 1.0.0 - optional: true - rc@1.2.8: dependencies: deep-extend: 0.6.0 ini: 1.3.8 minimist: 1.2.8 strip-json-comments: 2.0.1 - optional: true react-reconciler@0.32.0(react@19.2.0): dependencies: @@ -10943,24 +9254,23 @@ snapshots: read-cmd-shim@5.0.0: {} - read-cmd-shim@6.0.0: {} - read-package-json-fast@4.0.0: dependencies: json-parse-even-better-errors: 4.0.0 npm-normalize-package-bin: 4.0.0 - read-package-json-fast@5.0.0: - dependencies: - json-parse-even-better-errors: 5.0.0 - npm-normalize-package-bin: 5.0.0 - read-pkg-up@7.0.1: dependencies: find-up: 4.1.0 read-pkg: 5.2.0 type-fest: 0.8.1 + read-pkg-up@8.0.0: + dependencies: + find-up: 5.0.0 + read-pkg: 6.0.0 + type-fest: 1.4.0 + read-pkg@5.2.0: dependencies: '@types/normalize-package-data': 2.4.4 @@ -10968,22 +9278,33 @@ snapshots: parse-json: 5.2.0 type-fest: 0.6.0 - readable-stream@1.0.34: + read-pkg@6.0.0: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 3.0.3 + parse-json: 5.2.0 + type-fest: 1.4.0 + + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 inherits: 2.0.4 isarray: '@socketregistry/isarray@1.0.8' - string_decoder: 0.10.31(patch_hash=4f6ae5ec65b5537e81cd3ee7e83ae65bcc843a93cff14f147d8053e1c385ae1d) + process-nextick-args: 2.0.1 + safe-buffer: '@socketregistry/safe-buffer@1.0.9' + string_decoder: 0.10.31 + util-deprecate: 1.0.2 readable-stream@3.6.2: dependencies: inherits: 2.0.4 - string_decoder: 0.10.31(patch_hash=4f6ae5ec65b5537e81cd3ee7e83ae65bcc843a93cff14f147d8053e1c385ae1d) + string_decoder: 0.10.31 util-deprecate: 1.0.2 - redeyed@2.1.1: + redent@4.0.0: dependencies: - esprima: 4.0.1 + indent-string: '@socketregistry/indent-string@1.0.14' + strip-indent: 4.1.1 regexp-tree@0.1.27: {} @@ -11012,8 +9333,6 @@ snapshots: transitivePeerDependencies: - supports-color - resolve-alpn@1.2.1: {} - resolve-from@4.0.0: {} resolve-pkg-maps@1.0.0: {} @@ -11024,10 +9343,6 @@ snapshots: path-parse: '@socketregistry/path-parse@1.0.8' supports-preserve-symlinks-flag: 1.0.0 - responselike@4.0.2: - dependencies: - lowercase-keys: 3.0.0 - restore-cursor@4.0.0: dependencies: onetime: 5.1.2 @@ -11038,49 +9353,38 @@ snapshots: onetime: 7.0.0 signal-exit: 4.1.0 - retry-as-promised@7.1.1: - optional: true - retry@0.12.0: {} reusify@1.1.0: {} rfdc@1.4.1: {} - roarr@2.15.4: - dependencies: - boolean: 3.2.0 - detect-node: 2.1.0 - globalthis: '@socketregistry/globalthis@1.0.8' - json-stringify-safe: 5.0.1 - semver-compare: 1.0.0 - sprintf-js: 1.1.3 - - rollup@4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f): + rollup@4.53.2: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.50.1 - '@rollup/rollup-android-arm64': 4.50.1 - '@rollup/rollup-darwin-arm64': 4.50.1 - '@rollup/rollup-darwin-x64': 4.50.1 - '@rollup/rollup-freebsd-arm64': 4.50.1 - '@rollup/rollup-freebsd-x64': 4.50.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.50.1 - '@rollup/rollup-linux-arm-musleabihf': 4.50.1 - '@rollup/rollup-linux-arm64-gnu': 4.50.1 - '@rollup/rollup-linux-arm64-musl': 4.50.1 - '@rollup/rollup-linux-loongarch64-gnu': 4.50.1 - '@rollup/rollup-linux-ppc64-gnu': 4.50.1 - '@rollup/rollup-linux-riscv64-gnu': 4.50.1 - '@rollup/rollup-linux-riscv64-musl': 4.50.1 - '@rollup/rollup-linux-s390x-gnu': 4.50.1 - '@rollup/rollup-linux-x64-gnu': 4.50.1 - '@rollup/rollup-linux-x64-musl': 4.50.1 - '@rollup/rollup-openharmony-arm64': 4.50.1 - '@rollup/rollup-win32-arm64-msvc': 4.50.1 - '@rollup/rollup-win32-ia32-msvc': 4.50.1 - '@rollup/rollup-win32-x64-msvc': 4.50.1 + '@rollup/rollup-android-arm-eabi': 4.53.2 + '@rollup/rollup-android-arm64': 4.53.2 + '@rollup/rollup-darwin-arm64': 4.53.2 + '@rollup/rollup-darwin-x64': 4.53.2 + '@rollup/rollup-freebsd-arm64': 4.53.2 + '@rollup/rollup-freebsd-x64': 4.53.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.53.2 + '@rollup/rollup-linux-arm-musleabihf': 4.53.2 + '@rollup/rollup-linux-arm64-gnu': 4.53.2 + '@rollup/rollup-linux-arm64-musl': 4.53.2 + '@rollup/rollup-linux-loong64-gnu': 4.53.2 + '@rollup/rollup-linux-ppc64-gnu': 4.53.2 + '@rollup/rollup-linux-riscv64-gnu': 4.53.2 + '@rollup/rollup-linux-riscv64-musl': 4.53.2 + '@rollup/rollup-linux-s390x-gnu': 4.53.2 + '@rollup/rollup-linux-x64-gnu': 4.53.2 + '@rollup/rollup-linux-x64-musl': 4.53.2 + '@rollup/rollup-openharmony-arm64': 4.53.2 + '@rollup/rollup-win32-arm64-msvc': 4.53.2 + '@rollup/rollup-win32-ia32-msvc': 4.53.2 + '@rollup/rollup-win32-x64-gnu': 4.53.2 + '@rollup/rollup-win32-x64-msvc': 4.53.2 fsevents: 2.3.3 run-applescript@7.1.0: {} @@ -11095,50 +9399,12 @@ snapshots: execa: 5.1.1 path-name: 1.0.0 - sax@1.4.3: {} - scheduler@0.26.0: {} scheduler@0.27.0: {} - semver-compare@1.0.0: {} - semver@7.7.2: {} - sequelize-pool@7.1.0: - optional: true - - sequelize@6.37.7(@appthreat/sqlite3@6.0.9): - dependencies: - '@types/debug': 4.1.12 - '@types/validator': 13.15.10 - debug: 4.4.3 - dottie: 2.0.6 - inflection: 1.13.4 - lodash: 4.17.21(patch_hash=9c24de093a43581e08151be377de2e0518d256eca3c50f117c523e45ab6272b1) - moment: 2.30.1 - moment-timezone: 0.5.48 - pg-connection-string: 2.9.1 - retry-as-promised: 7.1.1 - semver: 7.7.2 - sequelize-pool: 7.1.0 - toposort-class: 1.0.1 - uuid: 8.3.2 - validator: 13.15.23 - wkx: 0.5.0 - optionalDependencies: - sqlite3: '@appthreat/sqlite3@6.0.9' - transitivePeerDependencies: - - supports-color - optional: true - - serialize-error@7.0.1: - dependencies: - type-fest: 0.13.1 - - setprototypeof@1.2.0: - optional: true - shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -11166,24 +9432,16 @@ snapshots: transitivePeerDependencies: - supports-color - simple-concat@1.0.1: - optional: true + simple-concat@1.0.1: {} simple-get@4.0.1: dependencies: decompress-response: 6.0.0 once: 1.4.0 simple-concat: 1.0.1 - optional: true slash@5.1.0: {} - slice-ansi@4.0.0: - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - slice-ansi@5.0.0: dependencies: ansi-styles: 6.2.3 @@ -11196,8 +9454,6 @@ snapshots: smart-buffer@4.2.0: {} - smol-toml@1.5.2: {} - socks-proxy-agent@8.0.5: dependencies: agent-base: 7.1.4 @@ -11219,11 +9475,6 @@ snapshots: source-map-js@1.2.1: {} - sparkline@0.1.2: - dependencies: - here: 0.0.2 - nopt: 2.1.2 - spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 @@ -11242,8 +9493,6 @@ snapshots: dependencies: readable-stream: 3.6.2 - sprintf-js@1.1.3: {} - ssri@10.0.5: dependencies: minipass: 7.1.2 @@ -11264,14 +9513,12 @@ snapshots: stackback@0.0.2: {} - statuses@1.5.0: - optional: true - - statuses@2.0.2: - optional: true - std-env@3.10.0: {} + stream-meter@1.0.4: + dependencies: + readable-stream: 2.3.8 + streamx@2.23.0: dependencies: events-universal: 1.0.1 @@ -11286,21 +9533,9 @@ snapshots: string-argv@0.3.2: {} string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.2 - - string-width@7.2.0: dependencies: emoji-regex: 10.6.0 - get-east-asian-width: 1.4.0 + is-fullwidth-code-point: 3.0.0 strip-ansi: 7.1.2 string-width@8.1.0: @@ -11308,23 +9543,15 @@ snapshots: get-east-asian-width: 1.4.0 strip-ansi: 7.1.2 - string_decoder@0.10.31(patch_hash=4f6ae5ec65b5537e81cd3ee7e83ae65bcc843a93cff14f147d8053e1c385ae1d): {} - - strip-ansi@3.0.1: - dependencies: - ansi-regex: 6.1.0 - - strip-ansi@5.2.0: - dependencies: - ansi-regex: 6.1.0 + string_decoder@0.10.31: {} strip-ansi@6.0.1: dependencies: - ansi-regex: 6.1.0 + ansi-regex: 6.2.2 strip-ansi@7.1.2: dependencies: - ansi-regex: 6.1.0 + ansi-regex: 6.2.2 strip-bom@4.0.0: {} @@ -11334,21 +9561,14 @@ snapshots: dependencies: min-indent: 1.0.1 - strip-json-comments@2.0.1: - optional: true - - strip-json-comments@3.1.1: {} + strip-indent@4.1.1: {} - strip-json-comments@5.0.2: {} + strip-json-comments@2.0.1: {} - strip-literal@3.1.0: - dependencies: - js-tokens: 9.0.1 + strip-json-comments@3.1.1: {} suffix-thumb@5.0.2: {} - supports-color@2.0.0: {} - supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -11371,19 +9591,11 @@ snapshots: commander: 7.2.0 eol: 0.10.0 fast-glob: 3.3.3 - lodash: 4.17.21(patch_hash=9c24de093a43581e08151be377de2e0518d256eca3c50f117c523e45ab6272b1) + lodash: 4.17.21 nmtree: 1.0.6 semver: 7.7.2 sort-object-keys: 1.1.3 - table@6.9.0: - dependencies: - ajv: 8.17.1 - lodash.truncate: 4.4.2 - slice-ansi: 4.0.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - tapable@2.3.0: {} tar-fs@2.1.4: @@ -11392,7 +9604,18 @@ snapshots: mkdirp-classic: 0.5.3 pump: 3.0.3 tar-stream: 2.2.0 - optional: true + + tar-fs@3.1.1: + dependencies: + pump: 3.0.3 + tar-stream: 3.1.7 + optionalDependencies: + bare-fs: 4.5.1 + bare-path: 3.0.0 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a tar-stream@2.2.0: dependencies: @@ -11401,7 +9624,6 @@ snapshots: fs-constants: 1.0.0 inherits: 2.0.4 readable-stream: 3.6.2 - optional: true tar-stream@3.1.7: dependencies: @@ -11412,14 +9634,6 @@ snapshots: - bare-abort-controller - react-native-b4a - tar@7.5.1: - dependencies: - '@isaacs/fs-minipass': 4.0.1 - chownr: 3.0.0 - minipass: 7.1.2 - minizlib: 3.1.0 - yallist: 5.0.0 - tar@7.5.2: dependencies: '@isaacs/fs-minipass': 4.0.1 @@ -11443,19 +9657,11 @@ snapshots: unconfig: 7.4.1 yaml: 2.8.1 - term-canvas@0.0.5: {} - terminal-link@2.1.1: dependencies: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - test-exclude@7.0.1: - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 10.4.5 - minimatch: 9.0.5 - text-decoder@1.2.3: dependencies: b4a: 1.7.3 @@ -11466,14 +9672,6 @@ snapshots: dependencies: readable-stream: 3.6.2 - tiny-colors@2.1.3: {} - - tiny-updater@3.5.3(patch_hash=b3f4afb74b370538fe45248cba31833aee4553f83f15a6a07da47f85afae2f24): - dependencies: - ionstore: 1.0.1 - tiny-colors: 2.1.3 - when-exit: 2.1.5 - tinybench@2.9.0: {} tinyexec@0.3.2: {} @@ -11485,21 +9683,13 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - tinypool@1.1.1: {} - - tinyrainbow@2.0.0: {} - - tinyspy@4.0.4: {} + tinyrainbow@3.0.3: {} to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - toidentifier@1.0.1: - optional: true - - toposort-class@1.0.1: - optional: true + tr46@0.0.3: {} trash@10.0.0: dependencies: @@ -11513,6 +9703,8 @@ snapshots: treeverse@3.0.0: {} + trim-newlines@4.1.1: {} + ts-api-utils@2.1.0(typescript@5.9.3): dependencies: typescript: 5.9.3 @@ -11542,7 +9734,6 @@ snapshots: tunnel-agent@0.6.0: dependencies: safe-buffer: '@socketregistry/safe-buffer@1.0.9' - optional: true type-check@0.4.0: dependencies: @@ -11565,29 +9756,22 @@ snapshots: transitivePeerDependencies: - typescript - type-fest@0.13.1: {} - type-fest@0.21.3: {} type-fest@0.6.0: {} type-fest@0.8.1: {} - type-fest@4.41.0: {} + type-fest@1.4.0: {} - type-is@2.0.1: - dependencies: - content-type: 1.0.5 - media-typer: 1.1.0 - mime-types: 3.0.2 - optional: true + type-fest@4.41.0: {} - typescript-eslint@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.44.1(eslint@9.35.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.35.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: @@ -11610,9 +9794,7 @@ snapshots: quansync: 0.2.11 unconfig-core: 7.4.1 - undici-types@7.10.0: {} - - undici@6.21.3: {} + undici-types@7.16.0: {} unicorn-magic@0.3.0: {} @@ -11626,8 +9808,7 @@ snapshots: universal-user-agent@7.0.3: {} - unpipe@1.0.0: - optional: true + universalify@2.0.1: {} unplugin-purge-polyfills@0.1.0: dependencies: @@ -11667,6 +9848,14 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 + unzipper@0.12.3: + dependencies: + bluebird: 3.7.2 + duplexer2: 0.1.4 + fs-extra: 11.3.2 + graceful-fs: 4.2.11 + node-int64: 0.4.0 + update-browserslist-db@1.1.4(browserslist@4.25.4): dependencies: browserslist: 4.25.4 @@ -11689,14 +9878,6 @@ snapshots: util-deprecate@1.0.2: {} - utils-merge@1.0.1: - optional: true - - uuid@11.1.0: {} - - uuid@8.3.2: - optional: true - validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 @@ -11704,59 +9885,31 @@ snapshots: validate-npm-package-name@6.0.2: {} - validator@13.15.23: - optional: true - - vary@1.1.2: - optional: true - - vite-node@3.2.4(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1): - dependencies: - cac: 6.7.14 - debug: 4.4.3 - es-module-lexer: 1.7.0 - pathe: 2.0.3 - vite: 7.1.5(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1) - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - vite@7.1.5(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1): + vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(yaml@2.8.1): dependencies: esbuild: 0.25.11 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.50.1(patch_hash=071f391315feb3e71235ac70bfbf18a993f10a53259f3ec37507a614a5645f9f) + rollup: 4.53.2 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.3.1 + '@types/node': 24.9.2 fsevents: 2.3.3 jiti: 2.6.1 yaml: 2.8.1 - vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1): + vitest@4.0.3(@types/node@24.9.2)(jiti@2.6.1)(yaml@2.8.1): dependencies: - '@types/chai': 5.2.3 - '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.1.5(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1)) - '@vitest/pretty-format': 3.2.4 - '@vitest/runner': 3.2.4 - '@vitest/snapshot': 3.2.4 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.3.3 + '@vitest/expect': 4.0.3 + '@vitest/mocker': 4.0.3(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(yaml@2.8.1)) + '@vitest/pretty-format': 4.0.3 + '@vitest/runner': 4.0.3 + '@vitest/snapshot': 4.0.3 + '@vitest/spy': 4.0.3 + '@vitest/utils': 4.0.3 debug: 4.4.3 + es-module-lexer: 1.7.0 expect-type: 1.2.2 magic-string: 0.30.19 pathe: 2.0.3 @@ -11765,14 +9918,11 @@ snapshots: tinybench: 2.9.0 tinyexec: 0.3.2 tinyglobby: 0.2.15 - tinypool: 1.1.1 - tinyrainbow: 2.0.0 - vite: 7.1.5(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@24.3.1)(jiti@2.6.1)(yaml@2.8.1) + tinyrainbow: 3.0.3 + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: - '@types/debug': 4.1.12 - '@types/node': 24.3.1 + '@types/node': 24.9.2 transitivePeerDependencies: - jiti - less @@ -11789,15 +9939,14 @@ snapshots: walk-up-path@4.0.0: {} + webidl-conversions@3.0.1: {} + webpack-virtual-modules@0.6.2: {} - whatwg-encoding@3.1.1: + whatwg-url@5.0.0: dependencies: - iconv-lite: 0.6.3 - - whatwg-mimetype@4.0.0: {} - - when-exit@2.1.5: {} + tr46: 0.0.3 + webidl-conversions: 3.0.1 which@2.0.2: dependencies: @@ -11822,33 +9971,20 @@ snapshots: widest-line@5.0.0: dependencies: - string-width: 7.2.0 - - wkx@0.5.0: - dependencies: - '@types/node': 24.3.1 - optional: true + string-width: 8.1.0 word-wrap@1.2.5: {} - wordwrap@0.0.3: {} - wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.3 - string-width: 5.1.2 + string-width: 8.1.0 strip-ansi: 7.1.2 wrap-ansi@9.0.2: dependencies: ansi-styles: 6.2.3 - string-width: 7.2.0 + string-width: 8.1.0 strip-ansi: 7.1.2 wrappy@1.0.2: {} @@ -11863,19 +9999,12 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 4.1.0 - write-file-atomic@7.0.0: - dependencies: - imurmurhash: 0.1.4 - signal-exit: 4.1.0 - ws@8.18.3: {} wsl-utils@0.1.0: dependencies: is-wsl: 3.1.0 - x256@0.0.2: {} - xcase@2.0.1: {} xdg-basedir@4.0.0: {} @@ -11887,17 +10016,6 @@ snapshots: user-home: 2.0.0 xdg-basedir: 4.0.0 - xml-js@1.6.11: - dependencies: - sax: 1.4.3 - - xml2js@0.6.2: - dependencies: - sax: 1.4.3 - xmlbuilder: 11.0.1 - - xmlbuilder@11.0.1: {} - xtend@4.0.2: {} y18n@5.0.8: {} @@ -11912,13 +10030,13 @@ snapshots: yargs-parser@21.1.1: {} - yargs@17.7.2: + yargs@16.2.0: dependencies: - cliui: 8.0.1 + cliui: 7.0.4 escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 - string-width: 4.2.3 + string-width: 8.1.0 y18n: 5.0.8 yargs-parser: 21.1.1 @@ -11926,14 +10044,6 @@ snapshots: yoctocolors-cjs@2.1.3: {} - yoctocolors@2.1.2: {} - yoga-layout@3.2.1: {} - zod-validation-error@3.5.4(zod@3.25.76): - dependencies: - zod: 3.25.76 - - zod@3.25.76: {} - zod@4.1.8: {} From a79794183c29858cd131dff9d6b6c8cbc0642d76 Mon Sep 17 00:00:00 2001 From: Bill Li Date: Thu, 20 Nov 2025 19:53:51 +0000 Subject: [PATCH 3/3] feat(telemetry): adding initial telemetry for cli init, complete and error, with subcommand init, complete and error --- package.json | 2 +- packages/cli/package.json | 3 +- packages/cli/src/cli-entry.mts | 93 ++- .../cli/src/commands/bundler/cmd-bundler.mts | 11 +- packages/cli/src/commands/cargo/cmd-cargo.mts | 11 +- packages/cli/src/commands/gem/cmd-gem.mts | 11 +- packages/cli/src/commands/go/cmd-go.mts | 11 +- packages/cli/src/commands/npm/cmd-npm.mts | 13 +- packages/cli/src/commands/npx/cmd-npx.mts | 11 +- packages/cli/src/commands/nuget/cmd-nuget.mts | 11 +- packages/cli/src/commands/pip/cmd-pip.mts | 12 +- packages/cli/src/commands/pnpm/cmd-pnpm.mts | 12 +- packages/cli/src/commands/uv/cmd-uv.mts | 12 +- packages/cli/src/commands/yarn/cmd-yarn.mts | 12 +- packages/cli/src/meow.mts | 2 + packages/cli/src/npm-cli.mts | 4 + packages/cli/src/npx-cli.mts | 4 + packages/cli/src/pnpm-cli.mts | 4 + .../cli/src/utils/cli/with-subcommands.mts | 6 + packages/cli/src/utils/process/runner.mts | 35 + packages/cli/src/utils/socket/sdk.mts | 41 +- .../cli/src/utils/telemetry/integration.mts | 451 ++++++++++++ packages/cli/src/utils/telemetry/service.mts | 390 +++++++++++ packages/cli/src/utils/telemetry/types.mts | 42 ++ packages/cli/src/yarn-cli.mts | 2 + .../unit/utils/telemetry/integration.test.mts | 644 ++++++++++++++++++ .../unit/utils/telemetry/service.test.mts | 643 +++++++++++++++++ pnpm-lock.yaml | 24 +- pnpm-workspace.yaml | 3 +- 29 files changed, 2493 insertions(+), 27 deletions(-) create mode 100644 packages/cli/src/utils/telemetry/integration.mts create mode 100644 packages/cli/src/utils/telemetry/service.mts create mode 100644 packages/cli/src/utils/telemetry/types.mts create mode 100644 packages/cli/test/unit/utils/telemetry/integration.test.mts create mode 100644 packages/cli/test/unit/utils/telemetry/service.test.mts diff --git a/package.json b/package.json index fb149f814..c15dc1b84 100644 --- a/package.json +++ b/package.json @@ -93,7 +93,7 @@ "@socketsecurity/config": "catalog:", "@socketsecurity/lib": "catalog:", "@socketsecurity/registry": "catalog:", - "@socketsecurity/sdk": "catalog:", + "@socketsecurity/sdk":"file:///Users/billli/code/socketdev/socket-sdk-js/socketsecurity-sdk-3.1.3.tgz", "@types/cmd-shim": "catalog:", "@types/ink": "catalog:", "@types/js-yaml": "catalog:", diff --git a/packages/cli/package.json b/packages/cli/package.json index 9626b5257..61bb67948 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -85,7 +85,8 @@ "@socketsecurity/config": "catalog:", "@socketsecurity/lib": "catalog:", "@socketsecurity/registry": "catalog:", - "@socketsecurity/sdk": "catalog:", + + "@socketsecurity/sdk":"file:///Users/billli/code/socketdev/socket-sdk-js/socketsecurity-sdk-3.1.3.tgz", "@types/react": "^19.2.2", "ajv-dist": "catalog:", "ansi-regex": "catalog:", diff --git a/packages/cli/src/cli-entry.mts b/packages/cli/src/cli-entry.mts index 89c3b8b7f..1accb24f2 100755 --- a/packages/cli/src/cli-entry.mts +++ b/packages/cli/src/cli-entry.mts @@ -2,6 +2,7 @@ // Set global Socket theme for consistent CLI branding. import { setTheme } from '@socketsecurity/lib/themes' + setTheme('socket') import path from 'node:path' @@ -48,6 +49,12 @@ import { failMsgWithBadge } from './utils/error/fail-msg-with-badge.mts' import { serializeResultJson } from './utils/output/result-json.mts' import { runPreflightDownloads } from './utils/preflight/downloads.mts' import { isSeaBinary } from './utils/sea/detect.mts' +import { + finalizeTelemetry, + trackCliComplete, + trackCliError, + trackCliStart, +} from './utils/telemetry/integration.mts' import { scheduleUpdateCheck } from './utils/update/manager.mts' import { dlxManifest } from '@socketsecurity/lib/dlx-manifest' @@ -104,6 +111,54 @@ async function writeBootstrapManifestEntry(): Promise { } } +/** + * Global start time for CLI execution. + * Used by global error handlers to calculate duration. + */ +let globalCliStartTime: number = Date.now() + +/** + * Global exception handler for uncaught errors. + * Tracks telemetry and exits with error code. + */ +process.on('uncaughtException', (error: Error) => { + logger.error('\n') + logger.error('Uncaught exception:') + logger.error(stackWithCauses(error)) + + // Track error with telemetry using global start time. + trackCliError(process.argv, globalCliStartTime, error, 1) + .then(() => finalizeTelemetry()) + .catch(telemetryError => { + // Silently ignore telemetry errors in exception handler. + debug(`Failed to track uncaught exception: ${telemetryError}`) + }) +}) + +/** + * Global handler for unhandled promise rejections. + * Tracks telemetry and exits with error code. + */ +process.on('unhandledRejection', (reason: unknown) => { + const error = reason instanceof Error ? reason : new Error(String(reason)) + + logger.error('\n') + logger.error('Unhandled promise rejection:') + logger.error(stackWithCauses(error)) + + // Track error with telemetry using global start time. + trackCliError(process.argv, globalCliStartTime, error, 1) + .then(() => finalizeTelemetry()) + .catch(telemetryError => { + // Silently ignore telemetry errors in rejection handler. + debug(`Failed to track unhandled rejection: ${telemetryError}`) + }) + .finally(() => { + // eslint-disable-next-line n/no-process-exit + process.exit(1) + }) +}) + void (async () => { // Skip update checks in test environments or when explicitly disabled. // Note: Update checks create HTTP connections that may delay process exit by up to 30s @@ -132,6 +187,11 @@ void (async () => { runPreflightDownloads() } + // Track CLI start with argv for telemetry. + const cliCommandStartTime = await trackCliStart(process.argv) + // Update global start time for error handlers. + globalCliStartTime = cliCommandStartTime + try { await meowWithSubcommands( { @@ -142,11 +202,25 @@ void (async () => { }, { aliases: rootAliases }, ) + + // Track completion or error based on exit code. + const exitCode = process.exitCode ?? 0 + if (exitCode !== 0) { + // Non-zero exit code without exception. + const error = new Error(`CLI exited with code ${exitCode}`) + await trackCliError(process.argv, cliCommandStartTime, error, exitCode) + } else { + // Success. + await trackCliComplete(process.argv, cliCommandStartTime, exitCode) + } } catch (e) { process.exitCode = 1 debug('CLI uncaught error') debugDir(e) + // Track CLI error for exceptions. + await trackCliError(process.argv, cliCommandStartTime, e, process.exitCode) + let errorBody: string | undefined let errorTitle: string let errorMessage = '' @@ -196,5 +270,22 @@ void (async () => { } await captureException(e) + } finally { + // Finalize telemetry to ensure all events are sent. + // This runs on both success and error paths. + await finalizeTelemetry() + } +})().catch(async err => { + // Fatal error in main async function. + console.error('Fatal error:', err) + + // Try to finalize telemetry even on fatal errors. + try { + await finalizeTelemetry() + } catch (_telemetryErr) { + // Silently ignore telemetry errors in fatal error handler. } -})() + + // eslint-disable-next-line n/no-process-exit + process.exit(1) +}) diff --git a/packages/cli/src/commands/bundler/cmd-bundler.mts b/packages/cli/src/commands/bundler/cmd-bundler.mts index 5d72307a4..837594e1e 100644 --- a/packages/cli/src/commands/bundler/cmd-bundler.mts +++ b/packages/cli/src/commands/bundler/cmd-bundler.mts @@ -27,6 +27,10 @@ import { commonFlags } from '../../flags.mts' import { meowOrExit } from '../../utils/cli/with-subcommands.mjs' import { spawnSfwDlx } from '../../utils/dlx/spawn.mjs' import { filterFlags } from '../../utils/process/cmd.mts' +import { + trackSubprocessExit, + trackSubprocessStart, +} from '../../utils/telemetry/integration.mjs' import type { CliCommandConfig, @@ -101,6 +105,9 @@ async function run( // Set default exit code to 1 (failure). Will be overwritten on success. process.exitCode = 1 + // Track subprocess start. + const subprocessStartTime = await trackSubprocessStart(CMD_NAME) + // Forward arguments to sfw (Socket Firewall) using Socket's dlx. const { spawnPromise } = await spawnSfwDlx(['bundler', ...argsToForward], { stdio: 'inherit', @@ -111,7 +118,9 @@ async function run( const { process: childProcess } = spawnPromise as any childProcess.on( 'exit', - (code: number | null, signalName: NodeJS.Signals | null) => { + async (code: number | null, signalName: NodeJS.Signals | null) => { + await trackSubprocessExit(CMD_NAME, subprocessStartTime, code) + if (signalName) { process.kill(process.pid, signalName) } else if (typeof code === 'number') { diff --git a/packages/cli/src/commands/cargo/cmd-cargo.mts b/packages/cli/src/commands/cargo/cmd-cargo.mts index 1d063955d..91f602d7f 100644 --- a/packages/cli/src/commands/cargo/cmd-cargo.mts +++ b/packages/cli/src/commands/cargo/cmd-cargo.mts @@ -27,6 +27,10 @@ import { commonFlags } from '../../flags.mts' import { meowOrExit } from '../../utils/cli/with-subcommands.mjs' import { spawnSfwDlx } from '../../utils/dlx/spawn.mjs' import { filterFlags } from '../../utils/process/cmd.mts' +import { + trackSubprocessExit, + trackSubprocessStart, +} from '../../utils/telemetry/integration.mjs' import type { CliCommandConfig, @@ -101,6 +105,9 @@ async function run( // Set default exit code to 1 (failure). Will be overwritten on success. process.exitCode = 1 + // Track subprocess start. + const subprocessStartTime = await trackSubprocessStart(CMD_NAME) + // Forward arguments to sfw (Socket Firewall) using Socket's dlx. const { spawnPromise } = await spawnSfwDlx(['cargo', ...argsToForward], { stdio: 'inherit', @@ -111,7 +118,9 @@ async function run( const { process: childProcess } = spawnPromise as any childProcess.on( 'exit', - (code: number | null, signalName: NodeJS.Signals | null) => { + async (code: number | null, signalName: NodeJS.Signals | null) => { + await trackSubprocessExit(CMD_NAME, subprocessStartTime, code) + if (signalName) { process.kill(process.pid, signalName) } else if (typeof code === 'number') { diff --git a/packages/cli/src/commands/gem/cmd-gem.mts b/packages/cli/src/commands/gem/cmd-gem.mts index 1a7a52597..dfff7428c 100644 --- a/packages/cli/src/commands/gem/cmd-gem.mts +++ b/packages/cli/src/commands/gem/cmd-gem.mts @@ -27,6 +27,10 @@ import { commonFlags } from '../../flags.mts' import { meowOrExit } from '../../utils/cli/with-subcommands.mjs' import { spawnSfwDlx } from '../../utils/dlx/spawn.mjs' import { filterFlags } from '../../utils/process/cmd.mts' +import { + trackSubprocessExit, + trackSubprocessStart, +} from '../../utils/telemetry/integration.mjs' import type { CliCommandConfig, @@ -101,6 +105,9 @@ async function run( // Set default exit code to 1 (failure). Will be overwritten on success. process.exitCode = 1 + // Track subprocess start. + const subprocessStartTime = await trackSubprocessStart(CMD_NAME) + // Forward arguments to sfw (Socket Firewall) using Socket's dlx. const { spawnPromise } = await spawnSfwDlx(['gem', ...argsToForward], { stdio: 'inherit', @@ -111,7 +118,9 @@ async function run( const { process: childProcess } = spawnPromise as any childProcess.on( 'exit', - (code: number | null, signalName: NodeJS.Signals | null) => { + async (code: number | null, signalName: NodeJS.Signals | null) => { + await trackSubprocessExit(CMD_NAME, subprocessStartTime, code) + if (signalName) { process.kill(process.pid, signalName) } else if (typeof code === 'number') { diff --git a/packages/cli/src/commands/go/cmd-go.mts b/packages/cli/src/commands/go/cmd-go.mts index 82232ea72..df38f2f4b 100644 --- a/packages/cli/src/commands/go/cmd-go.mts +++ b/packages/cli/src/commands/go/cmd-go.mts @@ -28,6 +28,10 @@ import { commonFlags } from '../../flags.mts' import { meowOrExit } from '../../utils/cli/with-subcommands.mjs' import { spawnSfwDlx } from '../../utils/dlx/spawn.mjs' import { filterFlags } from '../../utils/process/cmd.mts' +import { + trackSubprocessExit, + trackSubprocessStart, +} from '../../utils/telemetry/integration.mjs' import type { CliCommandConfig, @@ -103,6 +107,9 @@ async function run( // Set default exit code to 1 (failure). Will be overwritten on success. process.exitCode = 1 + // Track subprocess start. + const subprocessStartTime = await trackSubprocessStart(CMD_NAME) + // Forward arguments to sfw (Socket Firewall) using Socket's dlx. const { spawnPromise } = await spawnSfwDlx(['go', ...argsToForward], { stdio: 'inherit', @@ -113,7 +120,9 @@ async function run( const { process: childProcess } = spawnPromise as any childProcess.on( 'exit', - (code: number | null, signalName: NodeJS.Signals | null) => { + async (code: number | null, signalName: NodeJS.Signals | null) => { + await trackSubprocessExit(CMD_NAME, subprocessStartTime, code) + if (signalName) { process.kill(process.pid, signalName) } else if (typeof code === 'number') { diff --git a/packages/cli/src/commands/npm/cmd-npm.mts b/packages/cli/src/commands/npm/cmd-npm.mts index 844db5e37..e718cd37a 100644 --- a/packages/cli/src/commands/npm/cmd-npm.mts +++ b/packages/cli/src/commands/npm/cmd-npm.mts @@ -12,6 +12,10 @@ import shadowNpmBin from '../../shadow/npm/bin.mts' import { meowOrExit } from '../../utils/cli/with-subcommands.mjs' import { getFlagApiRequirementsOutput } from '../../utils/output/formatting.mts' import { filterFlags } from '../../utils/process/cmd.mts' +import { + trackSubprocessExit, + trackSubprocessStart, +} from '../../utils/telemetry/integration.mts' import type { CliCommandConfig, @@ -84,6 +88,10 @@ async function run( const argsToForward = filterFlags(argv, { ...commonFlags, ...outputFlags }, [ FLAG_JSON, ]) + + // Track subprocess start. + const subprocessStartTime = await trackSubprocessStart(NPM) + const { spawnPromise } = await shadowNpmBin(argsToForward, { stdio: 'inherit', }) @@ -92,7 +100,10 @@ async function run( // See https://nodejs.org/api/child_process.html#event-exit. spawnPromise.process.on( 'exit', - (code: number | null, signalName: NodeJS.Signals | null) => { + async (code: number | null, signalName: NodeJS.Signals | null) => { + // Track subprocess exit and flush telemetry. + await trackSubprocessExit(NPM, subprocessStartTime, code) + if (signalName) { process.kill(process.pid, signalName) } else if (typeof code === 'number') { diff --git a/packages/cli/src/commands/npx/cmd-npx.mts b/packages/cli/src/commands/npx/cmd-npx.mts index 774f08644..252c2c2d2 100644 --- a/packages/cli/src/commands/npx/cmd-npx.mts +++ b/packages/cli/src/commands/npx/cmd-npx.mts @@ -10,6 +10,10 @@ import { commonFlags } from '../../flags.mts' import shadowNpxBin from '../../shadow/npx/bin.mts' import { meowOrExit } from '../../utils/cli/with-subcommands.mjs' import { getFlagApiRequirementsOutput } from '../../utils/output/formatting.mts' +import { + trackSubprocessExit, + trackSubprocessStart, +} from '../../utils/telemetry/integration.mjs' import type { CliCommandConfig, @@ -76,6 +80,9 @@ async function run( process.exitCode = 1 + // Track subprocess start. + const subprocessStartTime = await trackSubprocessStart(CMD_NAME) + const { spawnPromise } = await shadowNpxBin(argv, { stdio: 'inherit' }) // Handle exit codes and signals using event-based pattern. @@ -83,7 +90,9 @@ async function run( const { process: childProcess } = spawnPromise as any childProcess.on( 'exit', - (code: number | null, signalName: NodeJS.Signals | null) => { + async (code: number | null, signalName: NodeJS.Signals | null) => { + await trackSubprocessExit(CMD_NAME, subprocessStartTime, code) + if (signalName) { process.kill(process.pid, signalName) } else if (typeof code === 'number') { diff --git a/packages/cli/src/commands/nuget/cmd-nuget.mts b/packages/cli/src/commands/nuget/cmd-nuget.mts index eb00da825..b974a82aa 100644 --- a/packages/cli/src/commands/nuget/cmd-nuget.mts +++ b/packages/cli/src/commands/nuget/cmd-nuget.mts @@ -27,6 +27,10 @@ import { commonFlags } from '../../flags.mts' import { meowOrExit } from '../../utils/cli/with-subcommands.mjs' import { spawnSfwDlx } from '../../utils/dlx/spawn.mjs' import { filterFlags } from '../../utils/process/cmd.mts' +import { + trackSubprocessExit, + trackSubprocessStart, +} from '../../utils/telemetry/integration.mjs' import type { CliCommandConfig, @@ -101,6 +105,9 @@ async function run( // Set default exit code to 1 (failure). Will be overwritten on success. process.exitCode = 1 + // Track subprocess start. + const subprocessStartTime = await trackSubprocessStart(CMD_NAME) + // Forward arguments to sfw (Socket Firewall) using Socket's dlx. const { spawnPromise } = await spawnSfwDlx(['nuget', ...argsToForward], { stdio: 'inherit', @@ -111,7 +118,9 @@ async function run( const { process: childProcess } = spawnPromise as any childProcess.on( 'exit', - (code: number | null, signalName: NodeJS.Signals | null) => { + async (code: number | null, signalName: NodeJS.Signals | null) => { + await trackSubprocessExit(CMD_NAME, subprocessStartTime, code) + if (signalName) { process.kill(process.pid, signalName) } else if (typeof code === 'number') { diff --git a/packages/cli/src/commands/pip/cmd-pip.mts b/packages/cli/src/commands/pip/cmd-pip.mts index ce5dd56b3..e52710130 100644 --- a/packages/cli/src/commands/pip/cmd-pip.mts +++ b/packages/cli/src/commands/pip/cmd-pip.mts @@ -33,6 +33,10 @@ import { commonFlags } from '../../flags.mts' import { meowOrExit } from '../../utils/cli/with-subcommands.mjs' import { spawnSfwDlx } from '../../utils/dlx/spawn.mjs' import { filterFlags } from '../../utils/process/cmd.mts' +import { + trackSubprocessExit, + trackSubprocessStart, +} from '../../utils/telemetry/integration.mts' import type { CliCommandConfig, @@ -145,6 +149,9 @@ async function run( // Set default exit code to 1 (failure). Will be overwritten on success. process.exitCode = 1 + // Track subprocess start. + const subprocessStartTime = await trackSubprocessStart(pipBinName) + // Forward arguments to sfw (Socket Firewall) using Socket's dlx. const { spawnPromise } = await spawnSfwDlx([pipBinName, ...argsToForward], { stdio: 'inherit', @@ -155,7 +162,10 @@ async function run( const { process: childProcess } = spawnPromise as any childProcess.on( 'exit', - (code: number | null, signalName: NodeJS.Signals | null) => { + async (code: number | null, signalName: NodeJS.Signals | null) => { + // Track subprocess exit and flush telemetry. + await trackSubprocessExit(pipBinName, subprocessStartTime, code) + if (signalName) { process.kill(process.pid, signalName) } else if (typeof code === 'number') { diff --git a/packages/cli/src/commands/pnpm/cmd-pnpm.mts b/packages/cli/src/commands/pnpm/cmd-pnpm.mts index 84eff5b03..ef1c9fa6d 100644 --- a/packages/cli/src/commands/pnpm/cmd-pnpm.mts +++ b/packages/cli/src/commands/pnpm/cmd-pnpm.mts @@ -7,6 +7,10 @@ import { meowOrExit } from '../../utils/cli/with-subcommands.mjs' import { spawnSfwDlx } from '../../utils/dlx/spawn.mjs' import { getFlagApiRequirementsOutput } from '../../utils/output/formatting.mts' import { filterFlags } from '../../utils/process/cmd.mts' +import { + trackSubprocessExit, + trackSubprocessStart, +} from '../../utils/telemetry/integration.mjs' import type { CliCommandConfig, @@ -80,6 +84,9 @@ async function run( // Set default exit code to 1 (failure). Will be overwritten on success. process.exitCode = 1 + // Track subprocess start. + const subprocessStartTime = await trackSubprocessStart(CMD_NAME) + // Forward arguments to sfw (Socket Firewall) using Socket's dlx. const { spawnPromise } = await spawnSfwDlx(['pnpm', ...filteredArgv], { stdio: 'inherit', @@ -90,7 +97,10 @@ async function run( const { process: childProcess } = spawnPromise as any childProcess.on( 'exit', - (code: number | null, signalName: NodeJS.Signals | null) => { + async (code: number | null, signalName: NodeJS.Signals | null) => { + // Track subprocess exit and flush telemetry. + await trackSubprocessExit(CMD_NAME, subprocessStartTime, code) + if (signalName) { process.kill(process.pid, signalName) } else if (typeof code === 'number') { diff --git a/packages/cli/src/commands/uv/cmd-uv.mts b/packages/cli/src/commands/uv/cmd-uv.mts index b5fd79821..be00af6a3 100644 --- a/packages/cli/src/commands/uv/cmd-uv.mts +++ b/packages/cli/src/commands/uv/cmd-uv.mts @@ -27,6 +27,10 @@ import { commonFlags } from '../../flags.mts' import { meowOrExit } from '../../utils/cli/with-subcommands.mjs' import { spawnSfwDlx } from '../../utils/dlx/spawn.mjs' import { filterFlags } from '../../utils/process/cmd.mts' +import { + trackSubprocessExit, + trackSubprocessStart, +} from '../../utils/telemetry/integration.mjs' import type { CliCommandConfig, @@ -101,6 +105,9 @@ async function run( // Set default exit code to 1 (failure). Will be overwritten on success. process.exitCode = 1 + // Track subprocess start. + const subprocessStartTime = await trackSubprocessStart(CMD_NAME) + // Forward arguments to sfw (Socket Firewall) using Socket's dlx. const { spawnPromise } = await spawnSfwDlx(['uv', ...argsToForward], { stdio: 'inherit', @@ -111,7 +118,10 @@ async function run( const { process: childProcess } = spawnPromise as any childProcess.on( 'exit', - (code: number | null, signalName: NodeJS.Signals | null) => { + async (code: number | null, signalName: NodeJS.Signals | null) => { + // Track subprocess exit and flush telemetry. + await trackSubprocessExit(CMD_NAME, subprocessStartTime, code) + if (signalName) { process.kill(process.pid, signalName) } else if (typeof code === 'number') { diff --git a/packages/cli/src/commands/yarn/cmd-yarn.mts b/packages/cli/src/commands/yarn/cmd-yarn.mts index c2fdacfb2..89e9d2527 100644 --- a/packages/cli/src/commands/yarn/cmd-yarn.mts +++ b/packages/cli/src/commands/yarn/cmd-yarn.mts @@ -7,6 +7,10 @@ import { meowOrExit } from '../../utils/cli/with-subcommands.mjs' import { spawnSfwDlx } from '../../utils/dlx/spawn.mjs' import { getFlagApiRequirementsOutput } from '../../utils/output/formatting.mts' import { filterFlags } from '../../utils/process/cmd.mts' +import { + trackSubprocessExit, + trackSubprocessStart, +} from '../../utils/telemetry/integration.mjs' import type { CliCommandConfig, @@ -79,6 +83,9 @@ async function run( // Set default exit code to 1 (failure). Will be overwritten on success. process.exitCode = 1 + // Track subprocess start. + const subprocessStartTime = await trackSubprocessStart(CMD_NAME) + // Forward arguments to sfw (Socket Firewall) using Socket's dlx. const { spawnPromise } = await spawnSfwDlx(['yarn', ...filteredArgv], { stdio: 'inherit', @@ -89,7 +96,10 @@ async function run( const { process: childProcess } = spawnPromise as any childProcess.on( 'exit', - (code: number | null, signalName: NodeJS.Signals | null) => { + async (code: number | null, signalName: NodeJS.Signals | null) => { + // Track subprocess exit and flush telemetry. + await trackSubprocessExit(CMD_NAME, subprocessStartTime, code) + if (signalName) { process.kill(process.pid, signalName) } else if (typeof code === 'number') { diff --git a/packages/cli/src/meow.mts b/packages/cli/src/meow.mts index b3e682a32..c53e9c1b6 100644 --- a/packages/cli/src/meow.mts +++ b/packages/cli/src/meow.mts @@ -177,12 +177,14 @@ export default function meow< const showHelp = (exitCode = 2) => { logger.log(fullHelp) + console.log(`process.exit called at meow.mts:181 with code ${exitCode}`) // eslint-disable-next-line n/no-process-exit -- Required for CLI exit behavior. process.exit(exitCode) } const showVersion = () => { logger.log(pkg['version'] || '0.0.0') + console.log('process.exit called at meow.mts:187 with code 0') // eslint-disable-next-line n/no-process-exit -- Required for CLI exit behavior. process.exit(0) } diff --git a/packages/cli/src/npm-cli.mts b/packages/cli/src/npm-cli.mts index 7aa80341d..037bdc912 100644 --- a/packages/cli/src/npm-cli.mts +++ b/packages/cli/src/npm-cli.mts @@ -20,6 +20,9 @@ export default async function runNpmCli() { if (result.signal) { process.kill(process.pid, result.signal) } else if (typeof result.code === 'number') { + console.log( + `process.exit called at npm-cli.mts:24 with code ${result.code}`, + ) // eslint-disable-next-line n/no-process-exit process.exit(result.code) } @@ -29,6 +32,7 @@ export default async function runNpmCli() { if (import.meta.url === `file://${process.argv[1]}`) { runNpmCli().catch(error => { logger.error('Socket npm wrapper error:', error) + console.log('process.exit called at npm-cli.mts:33') // eslint-disable-next-line n/no-process-exit process.exit(1) }) diff --git a/packages/cli/src/npx-cli.mts b/packages/cli/src/npx-cli.mts index 127b9b5e6..55096651b 100644 --- a/packages/cli/src/npx-cli.mts +++ b/packages/cli/src/npx-cli.mts @@ -18,6 +18,9 @@ export default async function runNpxCli() { if (result.signal) { process.kill(process.pid, result.signal) } else if (typeof result.code === 'number') { + console.log( + `process.exit called at npx-cli.mts:22 with code ${result.code}`, + ) // eslint-disable-next-line n/no-process-exit process.exit(result.code) } @@ -27,6 +30,7 @@ export default async function runNpxCli() { if (import.meta.url === `file://${process.argv[1]}`) { runNpxCli().catch(error => { logger.error('Socket npx wrapper error:', error) + console.log('process.exit called at npx-cli.mts:31') // eslint-disable-next-line n/no-process-exit process.exit(1) }) diff --git a/packages/cli/src/pnpm-cli.mts b/packages/cli/src/pnpm-cli.mts index 640da74e9..882a9f933 100644 --- a/packages/cli/src/pnpm-cli.mts +++ b/packages/cli/src/pnpm-cli.mts @@ -20,6 +20,9 @@ export default async function runPnpmCli() { if (result.signal) { process.kill(process.pid, result.signal) } else if (typeof result.code === 'number') { + console.log( + `process.exit called at pnpm-cli.mts:24 with code ${result.code}`, + ) // eslint-disable-next-line n/no-process-exit process.exit(result.code) } @@ -29,6 +32,7 @@ export default async function runPnpmCli() { if (import.meta.url === `file://${process.argv[1]}`) { runPnpmCli().catch(error => { logger.error('Socket pnpm wrapper error:', error) + console.log('process.exit called at pnpm-cli.mts:33') // eslint-disable-next-line n/no-process-exit process.exit(1) }) diff --git a/packages/cli/src/utils/cli/with-subcommands.mts b/packages/cli/src/utils/cli/with-subcommands.mts index ee76efc3d..d17a1b785 100644 --- a/packages/cli/src/utils/cli/with-subcommands.mts +++ b/packages/cli/src/utils/cli/with-subcommands.mts @@ -868,6 +868,9 @@ export async function meowWithSubcommands( } if (!helpFlag && dryRun) { logger.log(`${DRY_RUN_LABEL}: No-op, call a sub-command; ok`) + console.log( + 'process.exit called at utils/cli/with-subcommands.mts:873 with code 0', + ) // Exit immediately to prevent tests from hanging waiting for stdin. // eslint-disable-next-line n/no-process-exit -- Required for dry-run mode. process.exit(0) @@ -988,6 +991,9 @@ export function meowOrExit( // Meow doesn't detect 'version' as an unknown flag, so we do the leg work here. if (versionFlag && !hasOwn(cliConfig.flags, 'version')) { logger.error('Unknown flag\n--version') + console.log( + 'process.exit called at utils/cli/with-subcommands.mts:994 with code 2', + ) // eslint-disable-next-line n/no-process-exit process.exit(2) // This line is never reached in production, but helps tests. diff --git a/packages/cli/src/utils/process/runner.mts b/packages/cli/src/utils/process/runner.mts index 8efb8a554..cc69334e0 100644 --- a/packages/cli/src/utils/process/runner.mts +++ b/packages/cli/src/utils/process/runner.mts @@ -7,6 +7,11 @@ import { Spinner as createSpinner } from '@socketsecurity/lib/spinner' import { ensureIpcInStdio } from '../../shadow/stdio-ipc.mjs' import { debugNs } from '../debug.mts' import { formatExternalCliError } from '../error/display.mts' +import { + trackSubprocessComplete, + trackSubprocessError, + trackSubprocessStart, +} from '../telemetry/integration.mts' import type { IpcObject } from '../../constants/shadow.mts' import type { CResult } from '../../types.mjs' @@ -57,6 +62,9 @@ export async function runExternalCommand( let spinner: Spinner | undefined + // Track subprocess start for telemetry. + const subprocessStartTime = await trackSubprocessStart(command) + try { // Start spinner if requested. if (showSpinner) { @@ -104,6 +112,30 @@ export async function runExternalCommand( debugNs('stdio', `Command completed with exit code: ${exitCode}`) + // Track subprocess completion or error based on exit code. + if (exitCode !== 0) { + // Non-zero exit code is an error. + const error = new Error( + `Command failed with exit code ${exitCode}: ${command} ${args.join(' ')}`, + ) + await trackSubprocessError( + command, + subprocessStartTime, + error, + exitCode, + { + stderr_length: stderr.length, + stdout_length: stdout.length, + }, + ) + } else { + // Zero exit code is success. + await trackSubprocessComplete(command, subprocessStartTime, exitCode, { + stderr_length: stderr.length, + stdout_length: stdout.length, + }) + } + // If buffered and has output, log it. if (bufferOutput && stdout) { const logger = getDefaultLogger() @@ -132,6 +164,9 @@ export async function runExternalCommand( ? Number((e as { code: unknown }).code) : 1 + // Track subprocess error for telemetry. + await trackSubprocessError(command, subprocessStartTime, e, exitCode) + const errorMessage = formatExternalCliError(command, e, { verbose: false, }) diff --git a/packages/cli/src/utils/socket/sdk.mts b/packages/cli/src/utils/socket/sdk.mts index 739defc6d..8ce211150 100644 --- a/packages/cli/src/utils/socket/sdk.mts +++ b/packages/cli/src/utils/socket/sdk.mts @@ -43,9 +43,15 @@ import { import ENV from '../../constants/env.mts' import { TOKEN_PREFIX_LENGTH } from '../../constants/socket.mts' import { getConfigValueOrUndef } from '../config.mts' +import { trackCliEvent } from '../telemetry/integration.mts' import type { CResult } from '../../types.mts' -import type { FileValidationResult } from '@socketsecurity/sdk' +import type { + FileValidationResult, + RequestInfo, + ResponseInfo, +} from '@socketsecurity/sdk' + const logger = getDefaultLogger() const TOKEN_VISIBLE_LENGTH = 5 @@ -182,6 +188,39 @@ export async function setupSdk( version: ENV.INLINED_SOCKET_CLI_VERSION || '0.0.0', homepage: ENV.INLINED_SOCKET_CLI_HOMEPAGE || 'https://socket.dev/cli', }), + hooks: { + onRequest: (info: RequestInfo) => { + // Track API request event. + void trackCliEvent('api_request', process.argv, { + method: info.method, + timeout: info.timeout, + url: info.url, + }) + }, + onResponse: (info: ResponseInfo) => { + // Track API response event. + const metadata = { + duration: info.duration, + method: info.method, + status: info.status, + statusText: info.statusText, + url: info.url, + headers: info.headers, + } + + if (info.error) { + // Track as error event if request failed. + void trackCliEvent('api_error', process.argv, { + ...metadata, + error_message: info.error.message, + error_type: info.error.constructor.name, + }) + } else { + // Track as successful response. + void trackCliEvent('api_response', process.argv, metadata) + } + }, + }, }), } } diff --git a/packages/cli/src/utils/telemetry/integration.mts b/packages/cli/src/utils/telemetry/integration.mts new file mode 100644 index 000000000..4738112c7 --- /dev/null +++ b/packages/cli/src/utils/telemetry/integration.mts @@ -0,0 +1,451 @@ +/** + * Telemetry integration helpers for Socket CLI. + * Provides utilities for tracking common CLI events and subprocess executions. + * + * Usage: + * ```typescript + * import { + * trackCliStart, + * trackCliEvent, + * trackCliComplete, + * trackCliError, + * trackSubprocessStart, + * trackSubprocessComplete, + * trackSubprocessError + * } from './utils/telemetry/integration.mts' + * + * // Track main CLI execution. + * const startTime = await trackCliStart(process.argv) + * await trackCliComplete(process.argv, startTime, 0) + * + * // Track custom event with optional metadata. + * await trackCliEvent('custom_event', process.argv, { key: 'value' }) + * + * // Track subprocess/forked CLI execution. + * const subStart = await trackSubprocessStart('npm', { cwd: '/path' }) + * await trackSubprocessComplete('npm', subStart, 0, { stdout_length: 1234 }) + * + * // On subprocess error. + * await trackSubprocessError('npm', subStart, error, 1) + * ``` + */ +import { homedir } from 'node:os' +import process from 'node:process' + +import { debug } from '@socketsecurity/lib/debug' + +import { TelemetryService } from './service.mts' +import { CONFIG_KEY_DEFAULT_ORG } from '../../constants/config.mjs' +import { getCliVersion } from '../../constants/env.mts' +import { getConfigValueOrUndef } from '../config.mts' + +import type { TelemetryContext } from './types.mts' + +/** + * Flush any pending telemetry events. + * This should be called before process.exit to ensure telemetry is sent. + * + * @returns Promise that resolves when flush completes. + */ +export async function finalizeTelemetry(): Promise { + const instance = TelemetryService.getCurrentInstance() + if (instance) { + debug('Flushing telemetry before exit') + await instance.flush() + } +} + +/** + * Track subprocess exit and finalize telemetry. + * This is a convenience function that tracks completion/error based on exit code + * and ensures telemetry is flushed before returning. + * + * @param command - Command name (e.g., 'npm', 'pip'). + * @param startTime - Start timestamp from trackSubprocessStart. + * @param exitCode - Process exit code (null treated as error). + * @returns Promise that resolves when tracking and flush complete. + * + * @example + * ```typescript + * await trackSubprocessExit(NPM, subprocessStartTime, code) + * ``` + */ +export async function trackSubprocessExit( + command: string, + startTime: number, + exitCode: number | null, +): Promise { + // Track subprocess completion or error based on exit code. + if (exitCode !== null && exitCode !== 0) { + const error = new Error(`${command} exited with code ${exitCode}`) + await trackSubprocessError(command, startTime, error, exitCode) + } else if (exitCode === 0) { + await trackSubprocessComplete(command, startTime, exitCode) + } + + // Flush telemetry to ensure events are sent before exit. + await finalizeTelemetry() +} + +const WRAPPER_CLI = ['npm', 'yarn', 'pip'] + +const API_TOKEN_FLAGS = ['--api-token', '--token', '-t'] + +/** + * Calculate duration from start timestamp. + * + * @param startTime - Start timestamp from Date.now(). + * @returns Duration in milliseconds. + */ +function calculateDuration(startTime: number): number { + return Date.now() - startTime +} + +/** + * Normalize exit code to a number with default fallback. + * + * @param exitCode - Exit code (may be string, number, null, or undefined). + * @param defaultValue - Default value if exitCode is not a number. + * @returns Normalized exit code. + */ +function normalizeExitCode( + exitCode: string | number | null | undefined, + defaultValue: number, +): number { + return typeof exitCode === 'number' ? exitCode : defaultValue +} + +/** + * Normalize error to Error object. + * + * @param error - Unknown error value. + * @returns Error object. + */ +function normalizeError(error: unknown): Error { + return error instanceof Error ? error : new Error(String(error)) +} + +/** + * Build context for the current telemetry entry. + * + * The context contains the current execution context, in which all CLI invocation should have access to. + * + * @param argv Command line arguments. + * @returns Telemetry context object. + */ +function buildContext(argv: string[]): TelemetryContext { + return { + arch: process.arch, + argv: sanitizeArgv(argv), + node_version: process.version, + platform: process.platform, + version: getCliVersion(), + } +} + +/** + * Sanitize argv to remove sensitive information. + * Removes API tokens, file paths with usernames, and other PII. + * Also strips arguments after wrapper CLIs to avoid leaking package names. + * + * @param argv Raw command line arguments (full process.argv including execPath and script). + * @returns Sanitized argv array. + * + * @example + * // Input: ['node', 'socket', 'npm', 'install', '@my/private-package', '--token', 'sktsec_abc123'] + * // Output: ['npm', 'install'] + */ +function sanitizeArgv(argv: string[]): string[] { + // Strip the first two values to drop the execPath and script. + const withoutPathAndScript = argv.slice(2) + + // Then strip arguments after wrapper CLIs to avoid leaking package names. + const wrapperIndex = withoutPathAndScript.findIndex(arg => + WRAPPER_CLI.includes(arg), + ) + let strippedArgv = withoutPathAndScript + + if (wrapperIndex !== -1) { + // Keep only wrapper + first command (e.g., ['npm']). + const endIndex = wrapperIndex + 1 + strippedArgv = withoutPathAndScript.slice(0, endIndex) + } + + // Then sanitize remaining arguments. + return strippedArgv.map((arg, index) => { + // Check if previous arg was an API token flag. + if (index > 0) { + const prevArg = strippedArgv[index - 1] + if (prevArg && API_TOKEN_FLAGS.includes(prevArg)) { + return '[REDACTED]' + } + } + + // Redact anything that looks like a socket API token. + if (arg.startsWith('sktsec_') || arg.match(/^[a-f0-9]{32,}$/i)) { + return '[REDACTED]' + } + + // Remove user home directory from file paths. + const homeDir = homedir() + if (homeDir) { + return arg.replace(new RegExp(homeDir, 'g'), '~') + } + + return arg + }) +} + +/** + * Sanitize error attribute to remove user specific paths. + * Replaces user home directory and other sensitive paths. + * + * @param input Raw input. + * @returns Sanitized input. + */ +function sanitizeErrorAttribute(input: string | undefined): string | undefined { + if (!input) { + return undefined + } + + // Remove user home directory. + const homeDir = homedir() + if (homeDir) { + return input.replace(new RegExp(homeDir, 'g'), '~') + } + + return input +} + +/** + * Generic event tracking function. + * Tracks any telemetry event with optional error details and flush. + * + * @param eventType Type of event to track. + * @param context Event context. + * @param metadata Event metadata. + * @param options Optional configuration. + * @returns Promise that resolves when tracking completes. + */ +export async function trackEvent( + eventType: string, + context: TelemetryContext, + metadata: Record = {}, + options: { + error?: Error | undefined + flush?: boolean | undefined + } = {}, +): Promise { + try { + const orgSlug = getConfigValueOrUndef(CONFIG_KEY_DEFAULT_ORG) + + if (orgSlug) { + const telemetry = await TelemetryService.getTelemetryClient(orgSlug) + debug(`Got telemetry service for org: ${orgSlug}`) + + const event = { + context, + event_sender_created_at: new Date().toISOString(), + event_type: eventType, + ...(Object.keys(metadata).length > 0 && { metadata }), + ...(options.error && { + error: { + message: sanitizeErrorAttribute(options.error.message), + stack: sanitizeErrorAttribute(options.error.stack), + type: options.error.constructor.name, + }, + }), + } + + telemetry.track(event) + + // Flush events if requested. + if (options.flush) { + await telemetry.flush() + } + } + } catch (err) { + // Telemetry errors should never block CLI execution. + debug(`Failed to track event ${eventType}: ${err}`) + } +} + +/** + * Track CLI initialization event. + * Should be called at the start of CLI execution. + * + * @param argv Command line arguments (process.argv). + * @returns Start timestamp for duration calculation. + */ +export async function trackCliStart(argv: string[]): Promise { + debug('Capture start of command') + + const startTime = Date.now() + + await trackEvent('cli_start', buildContext(argv)) + + return startTime +} + +/** + * Track a generic CLI event with optional metadata. + * Use this for tracking custom events during CLI execution. + * + * @param eventType Type of event to track. + * @param argv Command line arguments (process.argv). + * @param metadata Optional additional metadata to include with the event. + */ +export async function trackCliEvent( + eventType: string, + argv: string[], + metadata?: Record | undefined, +): Promise { + debug(`Tracking CLI event: ${eventType}`) + + await trackEvent(eventType, buildContext(argv), metadata) +} + +/** + * Track CLI completion event. + * Should be called on successful CLI exit. + * + * @param argv + * @param startTime Start timestamp from trackCliStart. + * @param exitCode Process exit code (default: 0). + */ +export async function trackCliComplete( + argv: string[], + startTime: number, + exitCode?: string | number | undefined | null, +): Promise { + debug('Capture end of command') + + await trackEvent( + 'cli_complete', + buildContext(argv), + { + duration: calculateDuration(startTime), + exit_code: normalizeExitCode(exitCode, 0), + }, + { + flush: true, + }, + ) +} + +/** + * Track CLI error event. + * Should be called when CLI exits with an error. + * + * @param argv + * @param startTime Start timestamp from trackCliStart. + * @param error Error that occurred. + * @param exitCode Process exit code (default: 1). + */ +export async function trackCliError( + argv: string[], + startTime: number, + error: unknown, + exitCode?: number | string | undefined | null, +): Promise { + debug('Capture error and stack trace of command') + + await trackEvent( + 'cli_error', + buildContext(argv), + { + duration: calculateDuration(startTime), + exit_code: normalizeExitCode(exitCode, 1), + }, + { + error: normalizeError(error), + flush: true, + }, + ) +} + +/** + * Track subprocess/command start event. + * + * Use this when spawning external commands like npm, npx, coana, cdxgen, etc. + * + * @param command Command being executed (e.g., 'npm', 'npx', 'coana'). + * @param metadata Optional additional metadata (e.g., cwd, purpose). + * @returns Start timestamp for duration calculation. + */ +export async function trackSubprocessStart( + command: string, + metadata?: Record | undefined, +): Promise { + debug(`Tracking subprocess start: ${command}`) + + const startTime = Date.now() + + await trackEvent('subprocess_start', buildContext(process.argv), { + command, + ...metadata, + }) + + return startTime +} + +/** + * Track subprocess/command completion event. + * + * Should be called when spawned command completes successfully. + * + * @param command Command that was executed. + * @param startTime Start timestamp from trackSubprocessStart. + * @param exitCode Process exit code. + * @param metadata Optional additional metadata (e.g., stdout length, stderr length). + */ +export async function trackSubprocessComplete( + command: string, + startTime: number, + exitCode: number | null, + metadata?: Record | undefined, +): Promise { + debug(`Tracking subprocess complete: ${command}`) + + await trackEvent('subprocess_complete', buildContext(process.argv), { + command, + duration: calculateDuration(startTime), + exit_code: normalizeExitCode(exitCode, 0), + ...metadata, + }) +} + +/** + * Track subprocess/command error event. + * + * Should be called when spawned command fails or throws error. + * + * @param command Command that was executed. + * @param startTime Start timestamp from trackSubprocessStart. + * @param error Error that occurred. + * @param exitCode Process exit code. + * @param metadata Optional additional metadata. + */ +export async function trackSubprocessError( + command: string, + startTime: number, + error: unknown, + exitCode?: number | null | undefined, + metadata?: Record | undefined, +): Promise { + debug(`Tracking subprocess error: ${command}`) + + await trackEvent( + 'subprocess_error', + buildContext(process.argv), + { + command, + duration: calculateDuration(startTime), + exit_code: normalizeExitCode(exitCode, 1), + ...metadata, + }, + { + error: normalizeError(error), + }, + ) +} diff --git a/packages/cli/src/utils/telemetry/service.mts b/packages/cli/src/utils/telemetry/service.mts new file mode 100644 index 000000000..505f7fd13 --- /dev/null +++ b/packages/cli/src/utils/telemetry/service.mts @@ -0,0 +1,390 @@ +/** + * Telemetry service for Socket CLI. + * Manages event collection, batching, and submission to Socket API. + * + * IMPORTANT: Telemetry is ALWAYS scoped to an organization. + * Cannot track telemetry without an org context. + * + * Features: + * - Singleton pattern (one instance per process) + * - Organization-scoped tracking (required) + * - Event batching (configurable batch size) + * - Periodic flush (configurable interval) + * - Automatic session ID assignment + * - Explicit finalization via destroy() for controlled cleanup + * - Graceful degradation (errors don't block CLI) + * + * @example + * ```typescript + * // Get telemetry client (returns singleton instance) + * const telemetry = await TelemetryService.getTelemetryClient('my-org') + * + * // Track an event (session_id is auto-set) + * telemetry.track({ + * event_sender_created_at: new Date().toISOString(), + * event_type: 'cli_start', + * context: { + * version: '2.2.15', + * platform: process.platform, + * node_version: process.version, + * arch: process.arch, + * argv: process.argv.slice(2) + * } + * }) + * + * // Flush is automatic on batch size, but can be called manually + * await telemetry.flush() + * + * // Always call destroy() before exit to flush remaining events + * await telemetry.destroy() + * ``` + */ + +import { randomUUID } from 'node:crypto' + +import { debug, debugDir } from '@socketsecurity/lib/debug' + +import { setupSdk } from '../socket/sdk.mts' + +import type { TelemetryEvent } from './types.mts' +import type { + PostOrgTelemetryPayload, + TelemetryConfig, +} from '@socketsecurity/sdk' + +/** + * Process-wide session ID. + * Generated once per CLI invocation and shared across all telemetry instances. + */ +const SESSION_ID = randomUUID() + +/** + * Default telemetry configuration. + * Used as fallback if API config fetch fails. + */ +const DEFAULT_TELEMETRY_CONFIG = { + telemetry: { + enabled: false, + }, +} as TelemetryConfig + +/** + * Static configuration for telemetry service behavior. + */ +const TELEMETRY_SERVICE_CONFIG = { + batch_size: 10, + flush_interval: 1_000, // 1 second. + flush_timeout: 5_000, // 5 seconds maximum for flush operations. +} as const + +/** + * Singleton instance holder. + */ +interface TelemetryServiceInstance { + current: TelemetryService | null +} + +/** + * Singleton telemetry service instance holder. + * Only one instance exists per process. + */ +const telemetryServiceInstance: TelemetryServiceInstance = { + current: null, +} + +/** + * Wrap a promise with a timeout. + * Rejects if promise doesn't resolve within timeout. + * + * @param promise Promise to wrap. + * @param timeoutMs Timeout in milliseconds. + * @param errorMessage Error message if timeout occurs. + * @returns Promise that resolves or times out. + */ +function withTimeout( + promise: Promise, + timeoutMs: number, + errorMessage: string, +): Promise { + return Promise.race([ + promise, + new Promise((_, reject) => { + setTimeout(() => { + reject(new Error(errorMessage)) + }, timeoutMs) + }), + ]) +} + +/** + * Centralized telemetry service for Socket CLI. + * Telemetry is always scoped to an organization. + * Singleton pattern ensures only one instance exists per process. + */ +export class TelemetryService { + private readonly orgSlug: string + private config: TelemetryConfig | null = null + private eventQueue: TelemetryEvent[] = [] + private flushTimer: NodeJS.Timeout | null = null + private isDestroyed = false + + /** + * Private constructor. + * Requires organization slug. + * + * @param orgSlug - Organization identifier. + */ + private constructor(orgSlug: string) { + this.orgSlug = orgSlug + debug( + `Telemetry service created for org '${orgSlug}' with session ID: ${SESSION_ID}`, + ) + } + + /** + * Get the current telemetry instance if one exists. + * Does not create a new instance. + * + * @returns Current telemetry instance or null if none exists. + */ + static getCurrentInstance(): TelemetryService | null { + return telemetryServiceInstance.current + } + + /** + * Get telemetry client for an organization. + * Creates and initializes client if it doesn't exist. + * Returns existing instance if already initialized. + * + * @param orgSlug - Organization identifier (required). + * @returns Initialized telemetry service instance. + */ + static async getTelemetryClient(orgSlug: string): Promise { + // Return existing instance if already initialized. + if (telemetryServiceInstance.current) { + debug( + `Telemetry already initialized for org: ${telemetryServiceInstance.current.orgSlug}`, + ) + return telemetryServiceInstance.current + } + + const instance = new TelemetryService(orgSlug) + + try { + const sdkResult = await setupSdk() + if (!sdkResult.ok) { + debug('Failed to setup SDK for telemetry, using default config') + instance.config = DEFAULT_TELEMETRY_CONFIG + telemetryServiceInstance.current = instance + return instance + } + + const sdk = sdkResult.data + const configResult = await sdk.getTelemetryConfig(orgSlug) + + if (configResult.success) { + instance.config = configResult.data + debug( + `Telemetry configuration fetched successfully: enabled=${instance.config.telemetry.enabled}`, + ) + debugDir({ config: instance.config }) + + // Start periodic flush if enabled. + if (instance.config.telemetry.enabled) { + instance.startPeriodicFlush() + } + } else { + debug(`Failed to fetch telemetry config: ${configResult.error}`) + instance.config = DEFAULT_TELEMETRY_CONFIG + } + } catch (e) { + debug(`Error initializing telemetry: ${e}`) + instance.config = DEFAULT_TELEMETRY_CONFIG + } + + // Only set singleton instance after full initialization. + telemetryServiceInstance.current = instance + return instance + } + + /** + * Track a telemetry event. + * Adds event to queue for batching and eventual submission. + * + * @param event - Telemetry event to track (session_id is optional and will be auto-set). + */ + track(event: Omit): void { + debug('Incoming track event request') + + if (this.isDestroyed) { + debug('Telemetry service destroyed, ignoring event') + return + } + + if (!this.config?.telemetry.enabled) { + debug(`Telemetry disabled, skipping event: ${event.event_type}`) + return + } + + // Create complete event with session_id and org_slug. + const completeEvent: TelemetryEvent = { + ...event, + session_id: SESSION_ID, + } + + debug(`Tracking telemetry event: ${completeEvent.event_type}`) + debugDir(completeEvent) + + this.eventQueue.push(completeEvent) + + // Auto-flush if batch size reached. + const batchSize = TELEMETRY_SERVICE_CONFIG.batch_size + if (this.eventQueue.length >= batchSize) { + debug(`Batch size reached (${batchSize}), flushing events`) + void this.flush() + } + } + + /** + * Flush all queued events to the API. + * Returns immediately if no events queued or telemetry disabled. + * Times out after configured flush_timeout to prevent blocking CLI exit. + */ + async flush(): Promise { + if (this.isDestroyed) { + debug('Telemetry service destroyed, cannot flush') + return + } + + if (this.eventQueue.length === 0) { + debug('No events to flush') + return + } + + if (!this.config?.telemetry.enabled) { + debug('Telemetry disabled, clearing queue without sending') + this.eventQueue = [] + return + } + + const eventsToSend = [...this.eventQueue] + this.eventQueue = [] + + debug(`Flushing ${eventsToSend.length} telemetry events`) + + try { + await withTimeout( + this.sendEvents(eventsToSend), + TELEMETRY_SERVICE_CONFIG.flush_timeout, + `Telemetry flush timed out after ${TELEMETRY_SERVICE_CONFIG.flush_timeout}ms`, + ) + + debug( + `Telemetry events sent successfully (${eventsToSend.length} events)`, + ) + } catch (e) { + debug(`Error flushing telemetry: ${e}`) + // Events are discarded on error to prevent infinite growth. + } + } + + /** + * Send events to the API. + * Extracted as separate method for timeout wrapping. + * + * @param events Events to send. + */ + private async sendEvents(events: TelemetryEvent[]): Promise { + const sdkResult = await setupSdk() + if (!sdkResult.ok) { + debug('Failed to setup SDK for flush, events discarded') + return + } + + const sdk = sdkResult.data + + // Send events individually (no batch endpoint available). + for (const event of events) { + const result = await sdk.postOrgTelemetry( + this.orgSlug, + event as unknown as PostOrgTelemetryPayload, + ) + + if (result.success) { + debug('Telemetry sent to telemetry:') + debugDir(event) + } else { + debug(`Failed to send telemetry event: ${result.error}`) + } + } + } + + /** + * Destroy the telemetry service for this organization. + * Flushes remaining events and clears all state. + * Idempotent - safe to call multiple times. + */ + async destroy(): Promise { + if (this.isDestroyed) { + debug('Telemetry service already destroyed, skipping') + return + } + + debug(`Destroying telemetry service for org: ${this.orgSlug}`) + + // Mark as destroyed immediately to prevent concurrent destroy() calls. + this.isDestroyed = true + + // Stop periodic flush. + if (this.flushTimer) { + clearInterval(this.flushTimer) + this.flushTimer = null + } + + // Flush remaining events with timeout. + const eventsToFlush = [...this.eventQueue] + this.eventQueue = [] + + if (eventsToFlush.length > 0 && this.config?.telemetry.enabled) { + debug(`Flushing ${eventsToFlush.length} events before destroy`) + try { + await withTimeout( + this.sendEvents(eventsToFlush), + TELEMETRY_SERVICE_CONFIG.flush_timeout, + `Telemetry flush during destroy timed out after ${TELEMETRY_SERVICE_CONFIG.flush_timeout}ms`, + ) + debug('Events flushed successfully during destroy') + } catch (e) { + debug(`Error flushing telemetry during destroy: ${e}`) + } + } + + this.config = null + + // Clear singleton instance. + telemetryServiceInstance.current = null + + debug(`Telemetry service destroyed for org: ${this.orgSlug}`) + } + + /** + * Start periodic flush timer. + */ + private startPeriodicFlush(): void { + if (this.flushTimer) { + return + } + + const flushInterval = TELEMETRY_SERVICE_CONFIG.flush_interval + + this.flushTimer = setInterval(() => { + debug('Periodic flush triggered') + void this.flush() + }, flushInterval) + + // Don't keep process alive for telemetry. + this.flushTimer.unref() + + debug(`Periodic flush started with interval: ${flushInterval}ms`) + } +} diff --git a/packages/cli/src/utils/telemetry/types.mts b/packages/cli/src/utils/telemetry/types.mts new file mode 100644 index 000000000..60b7786ec --- /dev/null +++ b/packages/cli/src/utils/telemetry/types.mts @@ -0,0 +1,42 @@ +/** + * Telemetry types for Socket CLI. + * Defines the structure of telemetry events and related data. + */ + +/** + * Error details for telemetry events. + */ +export interface TelemetryEventError { + /** Error class/type name. */ + type: string + /** Error message. */ + message: string | undefined + /** Stack trace (sanitized). */ + stack?: string | undefined +} + +/** + * Telemetry Context. + * + * This represent how the cli was invoked and met. + */ +export interface TelemetryContext { + version: string + platform: string + node_version: string + arch: string + argv: string[] +} + +/** + * Telemetry event structure. + * All telemetry events must follow this schema. + */ +export interface TelemetryEvent { + event_sender_created_at: string + event_type: string + context: TelemetryContext + session_id?: string + metadata?: Record + error?: TelemetryEventError | undefined +} diff --git a/packages/cli/src/yarn-cli.mts b/packages/cli/src/yarn-cli.mts index 2779c26bd..ad73ca85b 100644 --- a/packages/cli/src/yarn-cli.mts +++ b/packages/cli/src/yarn-cli.mts @@ -24,6 +24,7 @@ export default async function runYarnCli() { if (signalName) { process.kill(process.pid, signalName) } else if (typeof code === 'number') { + console.log(`process.exit called at yarn-cli.mts:28 with code ${code}`) // eslint-disable-next-line n/no-process-exit process.exit(code) } @@ -37,6 +38,7 @@ export default async function runYarnCli() { if (import.meta.url === `file://${process.argv[1]}`) { runYarnCli().catch(error => { logger.error('Socket yarn wrapper error:', error) + console.log('process.exit called at yarn-cli.mts:41') // eslint-disable-next-line n/no-process-exit process.exit(1) }) diff --git a/packages/cli/test/unit/utils/telemetry/integration.test.mts b/packages/cli/test/unit/utils/telemetry/integration.test.mts new file mode 100644 index 000000000..1f6d2a723 --- /dev/null +++ b/packages/cli/test/unit/utils/telemetry/integration.test.mts @@ -0,0 +1,644 @@ +/** + * Unit tests for telemetry integration helpers. + * + * Purpose: + * Tests telemetry tracking utilities for CLI lifecycle and subprocess events. + * + * Test Coverage: + * - CLI lifecycle tracking (start, complete, error) + * - Subprocess tracking (start, complete, error, exit) + * - Argument sanitization (tokens, paths, package names) + * - Context building (version, platform, node version, arch) + * - Error normalization and sanitization + * - Event metadata handling + * - Telemetry finalization and flushing + * + * Testing Approach: + * Mocks TelemetryService and SDK to test integration logic without network calls. + * + * Related Files: + * - utils/telemetry/integration.mts (implementation) + * - utils/telemetry/service.mts (service implementation) + */ + +import { beforeEach, describe, expect, it, vi } from 'vitest' + +// Mock TelemetryService. +const mockTrack = vi.hoisted(() => vi.fn()) +const mockFlush = vi.hoisted(() => vi.fn()) +const mockGetTelemetryClient = vi.hoisted(() => + vi.fn(() => + Promise.resolve({ + flush: mockFlush, + track: mockTrack, + }), + ), +) +const mockGetCurrentInstance = vi.hoisted(() => + vi.fn(() => ({ + flush: mockFlush, + track: mockTrack, + })), +) + +vi.mock('../../../../src/utils/telemetry/service.mts', () => ({ + TelemetryService: { + getCurrentInstance: mockGetCurrentInstance, + getTelemetryClient: mockGetTelemetryClient, + }, +})) + +// Mock debug functions. +const mockDebug = vi.hoisted(() => vi.fn()) +vi.mock('@socketsecurity/lib/debug', () => ({ + debug: mockDebug, +})) + +// Mock config function. +const mockGetConfigValueOrUndef = vi.hoisted(() => vi.fn(() => 'test-org')) +vi.mock('../../../../src/utils/config.mts', () => ({ + getConfigValueOrUndef: mockGetConfigValueOrUndef, +})) + +// Mock constants. +vi.mock('../../../../src/constants/env.mts', () => ({ + getCliVersion: () => '2.2.15', +})) + +import { + finalizeTelemetry, + trackCliComplete, + trackCliError, + trackCliEvent, + trackCliStart, + trackEvent, + trackSubprocessComplete, + trackSubprocessError, + trackSubprocessExit, + trackSubprocessStart, +} from '../../../../src/utils/telemetry/integration.mts' + +describe('telemetry integration', () => { + beforeEach(() => { + vi.clearAllMocks() + mockGetConfigValueOrUndef.mockReturnValue('test-org') + }) + + describe('finalizeTelemetry', () => { + it('flushes telemetry when instance exists', async () => { + await finalizeTelemetry() + + expect(mockGetCurrentInstance).toHaveBeenCalled() + expect(mockFlush).toHaveBeenCalled() + }) + + it('does nothing when no instance exists', async () => { + mockGetCurrentInstance.mockReturnValueOnce(null) + + await finalizeTelemetry() + + expect(mockGetCurrentInstance).toHaveBeenCalled() + expect(mockFlush).not.toHaveBeenCalled() + }) + }) + + describe('trackEvent', () => { + const mockContext = { + arch: 'x64', + argv: ['scan'], + node_version: 'v20.0.0', + platform: 'darwin', + version: '2.2.15', + } + + it('tracks event with context and metadata', async () => { + await trackEvent('test_event', mockContext, { foo: 'bar' }) + + expect(mockGetTelemetryClient).toHaveBeenCalledWith('test-org') + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + context: mockContext, + event_type: 'test_event', + metadata: { foo: 'bar' }, + }), + ) + }) + + it('tracks event with error details', async () => { + const error = new Error('Test error') + await trackEvent('test_event', mockContext, {}, { error }) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + error: { + message: 'Test error', + stack: expect.any(String), + type: 'Error', + }, + }), + ) + }) + + it('flushes when flush option is true', async () => { + await trackEvent('test_event', mockContext, {}, { flush: true }) + + expect(mockFlush).toHaveBeenCalled() + }) + + it('does not track when org slug is undefined', async () => { + mockGetConfigValueOrUndef.mockReturnValueOnce(undefined) + + await trackEvent('test_event', mockContext) + + expect(mockGetTelemetryClient).not.toHaveBeenCalled() + expect(mockTrack).not.toHaveBeenCalled() + }) + + it('does not throw when telemetry client fails', async () => { + mockGetTelemetryClient.mockRejectedValueOnce( + new Error('Client creation failed'), + ) + + await expect(trackEvent('test_event', mockContext)).resolves.not.toThrow() + }) + + it('omits metadata when empty', async () => { + await trackEvent('test_event', mockContext, {}) + + expect(mockTrack).toHaveBeenCalledWith( + expect.not.objectContaining({ + metadata: expect.anything(), + }), + ) + }) + }) + + describe('trackCliStart', () => { + it('returns start timestamp', async () => { + const startTime = await trackCliStart(['node', 'socket', 'scan']) + + expect(typeof startTime).toBe('number') + expect(startTime).toBeGreaterThan(0) + }) + + it('tracks cli_start event with sanitized argv', async () => { + await trackCliStart(['node', 'socket', 'scan', '--token', 'sktsec_abc']) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + context: expect.objectContaining({ + argv: ['scan', '--token', '[REDACTED]'], + }), + event_type: 'cli_start', + }), + ) + }) + }) + + describe('trackCliEvent', () => { + it('tracks custom event with metadata', async () => { + await trackCliEvent('custom_event', ['node', 'socket', 'scan'], { + key: 'value', + }) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + event_type: 'custom_event', + metadata: { key: 'value' }, + }), + ) + }) + + it('tracks custom event without metadata', async () => { + await trackCliEvent('custom_event', ['node', 'socket', 'scan']) + + expect(mockTrack).toHaveBeenCalledWith( + expect.not.objectContaining({ + metadata: expect.anything(), + }), + ) + }) + }) + + describe('trackCliComplete', () => { + it('tracks cli_complete event with duration', async () => { + const startTime = Date.now() - 1000 + await trackCliComplete(['node', 'socket', 'scan'], startTime, 0) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + event_type: 'cli_complete', + metadata: expect.objectContaining({ + duration: expect.any(Number), + exit_code: 0, + }), + }), + ) + expect(mockFlush).toHaveBeenCalled() + }) + + it('normalizes exit code when string', async () => { + const startTime = Date.now() + await trackCliComplete(['node', 'socket', 'scan'], startTime, '0') + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + metadata: expect.objectContaining({ + exit_code: 0, + }), + }), + ) + }) + + it('uses default exit code when null', async () => { + const startTime = Date.now() + await trackCliComplete(['node', 'socket', 'scan'], startTime, null) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + metadata: expect.objectContaining({ + exit_code: 0, + }), + }), + ) + }) + }) + + describe('trackCliError', () => { + it('tracks cli_error event with error details', async () => { + const startTime = Date.now() - 500 + const error = new Error('Test error') + + await trackCliError(['node', 'socket', 'scan'], startTime, error, 1) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + error: expect.objectContaining({ + message: 'Test error', + type: 'Error', + }), + event_type: 'cli_error', + metadata: expect.objectContaining({ + duration: expect.any(Number), + exit_code: 1, + }), + }), + ) + expect(mockFlush).toHaveBeenCalled() + }) + + it('normalizes non-Error objects', async () => { + const startTime = Date.now() + await trackCliError(['node', 'socket', 'scan'], startTime, 'string error') + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + error: expect.objectContaining({ + message: 'string error', + type: 'Error', + }), + }), + ) + }) + + it('uses default exit code when not provided', async () => { + const startTime = Date.now() + const error = new Error('Test') + + await trackCliError(['node', 'socket', 'scan'], startTime, error) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + metadata: expect.objectContaining({ + exit_code: 1, + }), + }), + ) + }) + }) + + describe('trackSubprocessStart', () => { + it('returns start timestamp', async () => { + const startTime = await trackSubprocessStart('npm') + + expect(typeof startTime).toBe('number') + expect(startTime).toBeGreaterThan(0) + }) + + it('tracks subprocess_start event with command', async () => { + await trackSubprocessStart('npm', { cwd: '/path' }) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + event_type: 'subprocess_start', + metadata: expect.objectContaining({ + command: 'npm', + cwd: '/path', + }), + }), + ) + }) + + it('tracks subprocess_start without metadata', async () => { + await trackSubprocessStart('coana') + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + metadata: expect.objectContaining({ + command: 'coana', + }), + }), + ) + }) + }) + + describe('trackSubprocessComplete', () => { + it('tracks subprocess_complete event with duration', async () => { + const startTime = Date.now() - 2000 + await trackSubprocessComplete('npm', startTime, 0) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + event_type: 'subprocess_complete', + metadata: expect.objectContaining({ + command: 'npm', + duration: expect.any(Number), + exit_code: 0, + }), + }), + ) + }) + + it('includes additional metadata', async () => { + const startTime = Date.now() + await trackSubprocessComplete('npm', startTime, 0, { stdout_length: 1234 }) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + metadata: expect.objectContaining({ + stdout_length: 1234, + }), + }), + ) + }) + }) + + describe('trackSubprocessError', () => { + it('tracks subprocess_error event with error details', async () => { + const startTime = Date.now() - 1000 + const error = new Error('Subprocess failed') + + await trackSubprocessError('npm', startTime, error, 1) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + error: expect.objectContaining({ + message: 'Subprocess failed', + type: 'Error', + }), + event_type: 'subprocess_error', + metadata: expect.objectContaining({ + command: 'npm', + duration: expect.any(Number), + exit_code: 1, + }), + }), + ) + }) + + it('includes additional metadata', async () => { + const startTime = Date.now() + const error = new Error('Test') + + await trackSubprocessError('npm', startTime, error, 1, { stderr: 'log' }) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + metadata: expect.objectContaining({ + stderr: 'log', + }), + }), + ) + }) + }) + + describe('trackSubprocessExit', () => { + it('tracks completion when exit code is 0', async () => { + const startTime = Date.now() + await trackSubprocessExit('npm', startTime, 0) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + event_type: 'subprocess_complete', + }), + ) + expect(mockFlush).toHaveBeenCalled() + }) + + it('tracks error when exit code is non-zero', async () => { + const startTime = Date.now() + await trackSubprocessExit('npm', startTime, 1) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + error: expect.objectContaining({ + message: 'npm exited with code 1', + }), + event_type: 'subprocess_error', + }), + ) + expect(mockFlush).toHaveBeenCalled() + }) + + it('does not track when exit code is null', async () => { + const startTime = Date.now() + await trackSubprocessExit('npm', startTime, null) + + expect(mockTrack).not.toHaveBeenCalled() + expect(mockFlush).toHaveBeenCalled() + }) + }) + + describe('argv sanitization', () => { + it('strips node and script paths', async () => { + await trackCliStart(['node', '/path/socket', 'scan']) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + context: expect.objectContaining({ + argv: ['scan'], + }), + }), + ) + }) + + it('redacts API tokens after flags', async () => { + await trackCliStart([ + 'node', + 'socket', + 'scan', + '--api-token', + 'sktsec_secret', + ]) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + context: expect.objectContaining({ + argv: ['scan', '--api-token', '[REDACTED]'], + }), + }), + ) + }) + + it('redacts socket tokens starting with sktsec_', async () => { + await trackCliStart(['node', 'socket', 'scan', 'sktsec_abc123def']) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + context: expect.objectContaining({ + argv: ['scan', '[REDACTED]'], + }), + }), + ) + }) + + it('redacts hex tokens', async () => { + await trackCliStart([ + 'node', + 'socket', + 'scan', + 'abcdef1234567890abcdef1234567890', + ]) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + context: expect.objectContaining({ + argv: ['scan', '[REDACTED]'], + }), + }), + ) + }) + + it('replaces home directory with tilde', async () => { + const homeDir = require('node:os').homedir() + await trackCliStart([ + 'node', + 'socket', + 'scan', + `${homeDir}/projects/app`, + ]) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + context: expect.objectContaining({ + argv: ['scan', '~/projects/app'], + }), + }), + ) + }) + + it('strips arguments after npm wrapper', async () => { + await trackCliStart([ + 'node', + 'socket', + 'npm', + 'install', + '@my/private-package', + ]) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + context: expect.objectContaining({ + argv: ['npm'], + }), + }), + ) + }) + + it('strips arguments after yarn wrapper', async () => { + await trackCliStart(['node', 'socket', 'yarn', 'add', 'private-pkg']) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + context: expect.objectContaining({ + argv: ['yarn'], + }), + }), + ) + }) + + it('strips arguments after pip wrapper', async () => { + await trackCliStart(['node', 'socket', 'pip', 'install', 'flask']) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + context: expect.objectContaining({ + argv: ['pip'], + }), + }), + ) + }) + + it('preserves non-wrapper commands fully', async () => { + await trackCliStart(['node', 'socket', 'scan', '--json', '--all']) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + context: expect.objectContaining({ + argv: ['scan', '--json', '--all'], + }), + }), + ) + }) + }) + + describe('context building', () => { + it('includes CLI version', async () => { + await trackCliStart(['node', 'socket', 'scan']) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + context: expect.objectContaining({ + version: '2.2.15', + }), + }), + ) + }) + + it('includes platform', async () => { + await trackCliStart(['node', 'socket', 'scan']) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + context: expect.objectContaining({ + platform: process.platform, + }), + }), + ) + }) + + it('includes node version', async () => { + await trackCliStart(['node', 'socket', 'scan']) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + context: expect.objectContaining({ + node_version: process.version, + }), + }), + ) + }) + + it('includes architecture', async () => { + await trackCliStart(['node', 'socket', 'scan']) + + expect(mockTrack).toHaveBeenCalledWith( + expect.objectContaining({ + context: expect.objectContaining({ + arch: process.arch, + }), + }), + ) + }) + }) +}) diff --git a/packages/cli/test/unit/utils/telemetry/service.test.mts b/packages/cli/test/unit/utils/telemetry/service.test.mts new file mode 100644 index 000000000..7a71737a8 --- /dev/null +++ b/packages/cli/test/unit/utils/telemetry/service.test.mts @@ -0,0 +1,643 @@ +/** + * Unit tests for telemetry service. + * + * Purpose: + * Tests TelemetryService singleton and event management. Validates service lifecycle, event batching, and API integration. + * + * Test Coverage: + * - Singleton pattern (getTelemetryClient, getCurrentInstance) + * - Event tracking and batching + * - Periodic and manual flushing + * - Service initialization and configuration + * - Session ID generation and assignment + * - Error handling and graceful degradation + * - Service destruction and cleanup + * - Timeout handling for flush operations + * + * Testing Approach: + * Mocks SDK and tests service behavior with various configurations. + * Uses fake timers to test periodic flush behavior. + * + * Related Files: + * - utils/telemetry/service.mts (implementation) + * - utils/telemetry/types.mts (types) + */ + +import { beforeEach, describe, expect, it, vi } from 'vitest' + +// Mock SDK setup. +const mockPostOrgTelemetry = vi.hoisted(() => + vi.fn(() => Promise.resolve({ success: true })), +) +const mockGetTelemetryConfig = vi.hoisted(() => + vi.fn(() => + Promise.resolve({ + data: { telemetry: { enabled: true } }, + success: true, + }), + ), +) +const mockSetupSdk = vi.hoisted(() => + vi.fn(() => + Promise.resolve({ + data: { + getTelemetryConfig: mockGetTelemetryConfig, + postOrgTelemetry: mockPostOrgTelemetry, + }, + ok: true, + }), + ), +) + +vi.mock('../../../../src/utils/socket/sdk.mts', () => ({ + setupSdk: mockSetupSdk, +})) + +// Mock debug functions. +const mockDebug = vi.hoisted(() => vi.fn()) +const mockDebugDir = vi.hoisted(() => vi.fn()) + +vi.mock('@socketsecurity/lib/debug', () => ({ + debug: mockDebug, + debugDir: mockDebugDir, +})) + +import { TelemetryService } from '../../../../src/utils/telemetry/service.mts' + +import type { TelemetryEvent } from '../../../../src/utils/telemetry/types.mts' + +describe('TelemetryService', () => { + beforeEach(async () => { + vi.clearAllMocks() + vi.restoreAllMocks() + + // Reset singleton instance. + const instance = TelemetryService.getCurrentInstance() + if (instance) { + await instance.destroy() + } + + // Reset mock implementations. + mockSetupSdk.mockResolvedValue({ + data: { + getTelemetryConfig: mockGetTelemetryConfig, + postOrgTelemetry: mockPostOrgTelemetry, + }, + ok: true, + }) + + mockGetTelemetryConfig.mockResolvedValue({ + data: { telemetry: { enabled: true } }, + success: true, + }) + + mockPostOrgTelemetry.mockResolvedValue({ success: true }) + }) + + describe('singleton pattern', () => { + it('creates new instance when none exists', async () => { + const client = await TelemetryService.getTelemetryClient('test-org') + + expect(client).toBeDefined() + expect(TelemetryService.getCurrentInstance()).toBe(client) + }) + + it('returns existing instance on subsequent calls', async () => { + const client1 = await TelemetryService.getTelemetryClient('test-org') + const client2 = await TelemetryService.getTelemetryClient('test-org') + + expect(client1).toBe(client2) + }) + + it('getCurrentInstance returns null when no instance exists', async () => { + expect(TelemetryService.getCurrentInstance()).toBeNull() + }) + }) + + describe('initialization', () => { + it('fetches telemetry configuration on creation', async () => { + await TelemetryService.getTelemetryClient('test-org') + + expect(mockSetupSdk).toHaveBeenCalled() + expect(mockGetTelemetryConfig).toHaveBeenCalledWith('test-org') + }) + + it('uses default config when SDK setup fails', async () => { + mockSetupSdk.mockResolvedValueOnce({ ok: false }) + + const client = await TelemetryService.getTelemetryClient('test-org') + + expect(client).toBeDefined() + expect(mockGetTelemetryConfig).not.toHaveBeenCalled() + }) + + it('uses default config when config fetch fails', async () => { + mockGetTelemetryConfig.mockResolvedValueOnce({ + error: 'Config fetch failed', + success: false, + }) + + const client = await TelemetryService.getTelemetryClient('test-org') + + expect(client).toBeDefined() + }) + + it('uses default config when initialization throws', async () => { + mockSetupSdk.mockRejectedValueOnce(new Error('Network error')) + + const client = await TelemetryService.getTelemetryClient('test-org') + + expect(client).toBeDefined() + }) + }) + + describe('event tracking', () => { + it('tracks event with session_id', async () => { + const client = await TelemetryService.getTelemetryClient('test-org') + + const event: Omit = { + context: { + arch: 'x64', + argv: ['scan'], + node_version: 'v20.0.0', + platform: 'darwin', + version: '2.2.15', + }, + event_sender_created_at: new Date().toISOString(), + event_type: 'cli_start', + } + + client.track(event) + + // Verify event is queued (not sent immediately). + expect(mockPostOrgTelemetry).not.toHaveBeenCalled() + }) + + it('includes metadata when provided', async () => { + const client = await TelemetryService.getTelemetryClient('test-org') + + const event: Omit = { + context: { + arch: 'x64', + argv: ['scan'], + node_version: 'v20.0.0', + platform: 'darwin', + version: '2.2.15', + }, + event_sender_created_at: new Date().toISOString(), + event_type: 'cli_complete', + metadata: { + duration: 1000, + exit_code: 0, + }, + } + + client.track(event) + + await client.flush() + + expect(mockPostOrgTelemetry).toHaveBeenCalledWith( + 'test-org', + expect.objectContaining({ + metadata: { + duration: 1000, + exit_code: 0, + }, + }), + ) + }) + + it('includes error when provided', async () => { + const client = await TelemetryService.getTelemetryClient('test-org') + + const event: Omit = { + context: { + arch: 'x64', + argv: ['scan'], + node_version: 'v20.0.0', + platform: 'darwin', + version: '2.2.15', + }, + error: { + message: 'Test error', + stack: 'stack trace', + type: 'Error', + }, + event_sender_created_at: new Date().toISOString(), + event_type: 'cli_error', + } + + client.track(event) + + await client.flush() + + expect(mockPostOrgTelemetry).toHaveBeenCalledWith( + 'test-org', + expect.objectContaining({ + error: { + message: 'Test error', + stack: 'stack trace', + type: 'Error', + }, + }), + ) + }) + + it('ignores events when telemetry disabled', async () => { + mockGetTelemetryConfig.mockResolvedValueOnce({ + data: { telemetry: { enabled: false } }, + success: true, + }) + + const client = await TelemetryService.getTelemetryClient('test-org') + + const event: Omit = { + context: { + arch: 'x64', + argv: ['scan'], + node_version: 'v20.0.0', + platform: 'darwin', + version: '2.2.15', + }, + event_sender_created_at: new Date().toISOString(), + event_type: 'cli_start', + } + + client.track(event) + + await client.flush() + + expect(mockPostOrgTelemetry).not.toHaveBeenCalled() + }) + + it('ignores events after destroy', async () => { + const client = await TelemetryService.getTelemetryClient('test-org') + + await client.destroy() + + const event: Omit = { + context: { + arch: 'x64', + argv: ['scan'], + node_version: 'v20.0.0', + platform: 'darwin', + version: '2.2.15', + }, + event_sender_created_at: new Date().toISOString(), + event_type: 'cli_start', + } + + client.track(event) + + expect(mockPostOrgTelemetry).not.toHaveBeenCalled() + }) + }) + + describe('batching', () => { + it('auto-flushes when batch size reached', async () => { + const client = await TelemetryService.getTelemetryClient('test-org') + + const baseEvent: Omit = { + context: { + arch: 'x64', + argv: ['scan'], + node_version: 'v20.0.0', + platform: 'darwin', + version: '2.2.15', + }, + event_sender_created_at: new Date().toISOString(), + event_type: 'cli_start', + } + + // Track 10 events (batch size). + for (let i = 0; i < 10; i++) { + client.track(baseEvent) + } + + // Wait for async flush to complete. + await new Promise(resolve => { + setTimeout(resolve, 100) + }) + + expect(mockPostOrgTelemetry).toHaveBeenCalledTimes(10) + }) + + it('does not flush before batch size reached', async () => { + const client = await TelemetryService.getTelemetryClient('test-org') + + const event: Omit = { + context: { + arch: 'x64', + argv: ['scan'], + node_version: 'v20.0.0', + platform: 'darwin', + version: '2.2.15', + }, + event_sender_created_at: new Date().toISOString(), + event_type: 'cli_start', + } + + // Track fewer than batch size events. + client.track(event) + client.track(event) + + expect(mockPostOrgTelemetry).not.toHaveBeenCalled() + }) + }) + + describe('flushing', () => { + it('sends all queued events', async () => { + // Clear any previous calls before this test. + mockPostOrgTelemetry.mockClear() + + const client = await TelemetryService.getTelemetryClient('test-org') + + const event: Omit = { + context: { + arch: 'x64', + argv: ['scan'], + node_version: 'v20.0.0', + platform: 'darwin', + version: '2.2.15', + }, + event_sender_created_at: new Date().toISOString(), + event_type: 'cli_start', + } + + client.track(event) + client.track(event) + client.track(event) + + await client.flush() + + expect(mockPostOrgTelemetry).toHaveBeenCalledTimes(3) + }) + + it('clears queue after successful flush', async () => { + const client = await TelemetryService.getTelemetryClient('test-org') + + const event: Omit = { + context: { + arch: 'x64', + argv: ['scan'], + node_version: 'v20.0.0', + platform: 'darwin', + version: '2.2.15', + }, + event_sender_created_at: new Date().toISOString(), + event_type: 'cli_start', + } + + client.track(event) + + await client.flush() + await client.flush() + + // Second flush should not send anything. + expect(mockPostOrgTelemetry).toHaveBeenCalledTimes(1) + }) + + it('does nothing when queue is empty', async () => { + const client = await TelemetryService.getTelemetryClient('test-org') + + await client.flush() + + expect(mockPostOrgTelemetry).not.toHaveBeenCalled() + }) + + it('discards events on flush error', async () => { + const client = await TelemetryService.getTelemetryClient('test-org') + + mockPostOrgTelemetry.mockRejectedValueOnce(new Error('Network error')) + + const event: Omit = { + context: { + arch: 'x64', + argv: ['scan'], + node_version: 'v20.0.0', + platform: 'darwin', + version: '2.2.15', + }, + event_sender_created_at: new Date().toISOString(), + event_type: 'cli_start', + } + + client.track(event) + + await client.flush() + + // Events should be discarded even after error. + await client.flush() + + expect(mockPostOrgTelemetry).toHaveBeenCalledTimes(1) + }) + + it('does not flush after destroy', async () => { + const client = await TelemetryService.getTelemetryClient('test-org') + + await client.destroy() + await client.flush() + + expect(mockPostOrgTelemetry).not.toHaveBeenCalled() + }) + + it('handles flush timeout', async () => { + const client = await TelemetryService.getTelemetryClient('test-org') + + // Make postOrgTelemetry hang longer than timeout. + mockPostOrgTelemetry.mockImplementationOnce( + () => + new Promise(resolve => { + setTimeout(() => { + resolve({ success: true }) + }, 10_000) + }), + ) + + const event: Omit = { + context: { + arch: 'x64', + argv: ['scan'], + node_version: 'v20.0.0', + platform: 'darwin', + version: '2.2.15', + }, + event_sender_created_at: new Date().toISOString(), + event_type: 'cli_start', + } + + client.track(event) + + // Flush should timeout and not throw. + await expect(client.flush()).resolves.not.toThrow() + }) + + it('clears queue when telemetry disabled', async () => { + mockGetTelemetryConfig.mockResolvedValueOnce({ + data: { telemetry: { enabled: false } }, + success: true, + }) + + const client = await TelemetryService.getTelemetryClient('test-org') + + const event: Omit = { + context: { + arch: 'x64', + argv: ['scan'], + node_version: 'v20.0.0', + platform: 'darwin', + version: '2.2.15', + }, + event_sender_created_at: new Date().toISOString(), + event_type: 'cli_start', + } + + client.track(event) + + await client.flush() + + expect(mockPostOrgTelemetry).not.toHaveBeenCalled() + }) + }) + + describe('destroy', () => { + it('flushes remaining events', async () => { + const client = await TelemetryService.getTelemetryClient('test-org') + + const event: Omit = { + context: { + arch: 'x64', + argv: ['scan'], + node_version: 'v20.0.0', + platform: 'darwin', + version: '2.2.15', + }, + event_sender_created_at: new Date().toISOString(), + event_type: 'cli_start', + } + + client.track(event) + + await client.destroy() + + expect(mockPostOrgTelemetry).toHaveBeenCalled() + }) + + it('clears singleton instance', async () => { + const client = await TelemetryService.getTelemetryClient('test-org') + + await client.destroy() + + expect(TelemetryService.getCurrentInstance()).toBeNull() + }) + + it('is idempotent', async () => { + const client = await TelemetryService.getTelemetryClient('test-org') + + await client.destroy() + await client.destroy() + + // No error should occur. + expect(TelemetryService.getCurrentInstance()).toBeNull() + }) + + it('handles flush timeout during destroy', async () => { + const client = await TelemetryService.getTelemetryClient('test-org') + + // Make postOrgTelemetry hang longer than timeout. + mockPostOrgTelemetry.mockImplementationOnce( + () => + new Promise(resolve => { + setTimeout(() => { + resolve({ success: true }) + }, 10_000) + }), + ) + + const event: Omit = { + context: { + arch: 'x64', + argv: ['scan'], + node_version: 'v20.0.0', + platform: 'darwin', + version: '2.2.15', + }, + event_sender_created_at: new Date().toISOString(), + event_type: 'cli_start', + } + + client.track(event) + + await expect(client.destroy()).resolves.not.toThrow() + }) + + it('does not flush when telemetry disabled', async () => { + mockGetTelemetryConfig.mockResolvedValueOnce({ + data: { telemetry: { enabled: false } }, + success: true, + }) + + const client = await TelemetryService.getTelemetryClient('test-org') + + const event: Omit = { + context: { + arch: 'x64', + argv: ['scan'], + node_version: 'v20.0.0', + platform: 'darwin', + version: '2.2.15', + }, + event_sender_created_at: new Date().toISOString(), + event_type: 'cli_start', + } + + client.track(event) + + await client.destroy() + + expect(mockPostOrgTelemetry).not.toHaveBeenCalled() + }) + }) + + describe('session ID', () => { + it('assigns same session_id to all events in a session', async () => { + const client = await TelemetryService.getTelemetryClient('test-org') + + const event1: Omit = { + context: { + arch: 'x64', + argv: ['scan'], + node_version: 'v20.0.0', + platform: 'darwin', + version: '2.2.15', + }, + event_sender_created_at: new Date().toISOString(), + event_type: 'cli_start', + } + + const event2: Omit = { + context: { + arch: 'x64', + argv: ['scan'], + node_version: 'v20.0.0', + platform: 'darwin', + version: '2.2.15', + }, + event_sender_created_at: new Date().toISOString(), + event_type: 'cli_complete', + } + + client.track(event1) + client.track(event2) + + await client.flush() + + const sessionIds = mockPostOrgTelemetry.mock.calls.map( + call => call[1].session_id, + ) + + expect(sessionIds[0]).toBeDefined() + expect(sessionIds[0]).toBe(sessionIds[1]) + }) + }) +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 98f2ad0b3..9a28c6642 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -105,9 +105,6 @@ catalogs: '@socketsecurity/registry': specifier: 2.0.2 version: 2.0.2 - '@socketsecurity/sdk': - specifier: 3.1.3 - version: 3.1.3 '@types/cmd-shim': specifier: 5.0.2 version: 5.0.2 @@ -479,8 +476,8 @@ importers: specifier: 'catalog:' version: 2.0.2(typescript@5.9.3) '@socketsecurity/sdk': - specifier: 'catalog:' - version: 3.1.3 + specifier: file:///Users/billli/code/socketdev/socket-sdk-js/socketsecurity-sdk-3.1.3.tgz + version: file:../../code/socketdev/socket-sdk-js/socketsecurity-sdk-3.1.3.tgz(typescript@5.9.3) '@types/cmd-shim': specifier: 'catalog:' version: 5.0.2 @@ -794,8 +791,8 @@ importers: specifier: 'catalog:' version: 2.0.2(typescript@5.9.3) '@socketsecurity/sdk': - specifier: 'catalog:' - version: 3.1.3 + specifier: file:///Users/billli/code/socketdev/socket-sdk-js/socketsecurity-sdk-3.1.3.tgz + version: file:../../code/socketdev/socket-sdk-js/socketsecurity-sdk-3.1.3.tgz(typescript@5.9.3) '@types/react': specifier: ^19.2.2 version: 19.2.2 @@ -2308,9 +2305,10 @@ packages: typescript: optional: true - '@socketsecurity/sdk@3.1.3': - resolution: {integrity: sha512-GSOysDaKLAtXY6ZLJdf3YKPliCPxsa84J4JXBzTOZA6X+xSdcOPu1423VUmr5tG9ZJTRWH5z0fMNq3EyeALONA==} - engines: {node: '>=18', pnpm: '>=10.16.0'} + '@socketsecurity/sdk@file:../../code/socketdev/socket-sdk-js/socketsecurity-sdk-3.1.3.tgz': + resolution: {integrity: sha512-kE25ZK8z/66x8mZ76jU+kYOZOVifUKj5lPosjuTcGf3/hSPPEvd0qi+KApao7vGMG9N/wnreoW2ixXzSb8vPBg==, tarball: file:../../code/socketdev/socket-sdk-js/socketsecurity-sdk-3.1.3.tgz} + version: 3.1.3 + engines: {node: '>=18', pnpm: '>=10.22.0'} '@standard-schema/spec@1.0.0': resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} @@ -6815,7 +6813,11 @@ snapshots: optionalDependencies: typescript: 5.9.3 - '@socketsecurity/sdk@3.1.3': {} + '@socketsecurity/sdk@file:../../code/socketdev/socket-sdk-js/socketsecurity-sdk-3.1.3.tgz(typescript@5.9.3)': + dependencies: + '@socketsecurity/lib': 4.3.0(typescript@5.9.3) + transitivePeerDependencies: + - typescript '@standard-schema/spec@1.0.0': {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 048a02cd2..74c490869 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -14,6 +14,8 @@ catalog: '@babel/traverse': 7.28.4 '@babel/types': 7.28.5 '@biomejs/biome': 2.2.4 + '@coana-tech/cli': 14.12.51 + '@cyclonedx/cdxgen': 11.11.0 '@dotenvx/dotenvx': 1.49.0 '@eslint/compat': 1.3.2 '@eslint/js': 9.35.0 @@ -39,7 +41,6 @@ catalog: '@socketsecurity/config': 3.0.1 '@socketsecurity/lib': 4.3.0 '@socketsecurity/registry': 2.0.2 - '@socketsecurity/sdk': 3.1.3 '@types/cmd-shim': 5.0.2 '@types/ink': 2.0.3 '@types/js-yaml': 4.0.9