From f6a2203fff31e8b566d6b8ff818b8fdaa7d9c645 Mon Sep 17 00:00:00 2001 From: Maciej Krajowski-Kukiel Date: Thu, 29 Jan 2026 13:40:11 +0100 Subject: [PATCH 1/3] add pos-cli check command --- README.md | 130 ++++++ bin/pos-cli-check-init.js | 13 + bin/pos-cli-check-run.js | 24 ++ bin/pos-cli-check.js | 8 + bin/pos-cli.js | 3 +- lib/check.js | 395 ++++++++++++++++++ package-lock.json | 7 + .../check/clean/app/views/pages/index.liquid | 5 + .../app/views/pages/about.liquid | 5 + .../app/views/partials/header.liquid | 4 + .../with-issues/app/views/pages/index.liquid | 6 + test/integration/check.test.js | 214 ++++++++++ 12 files changed, 813 insertions(+), 1 deletion(-) create mode 100755 bin/pos-cli-check-init.js create mode 100755 bin/pos-cli-check-run.js create mode 100755 bin/pos-cli-check.js create mode 100644 lib/check.js create mode 100644 test/fixtures/check/clean/app/views/pages/index.liquid create mode 100644 test/fixtures/check/multiple-issues/app/views/pages/about.liquid create mode 100644 test/fixtures/check/multiple-issues/app/views/partials/header.liquid create mode 100644 test/fixtures/check/with-issues/app/views/pages/index.liquid create mode 100644 test/integration/check.test.js diff --git a/README.md b/README.md index e9f473c65..6fb40a27b 100644 --- a/README.md +++ b/README.md @@ -91,6 +91,136 @@ Example: `pos-cli audit` This command checks your application files for issues using static analysis, helping you maintain code quality and identify potential errors. +### Liquid Code Quality Check + +pos-cli provides a powerful Liquid code quality checker powered by platformos-check. This helps you catch issues early, enforce best practices, and maintain high-quality code. + +#### Initialize Configuration + +Before running checks, you can create a `.platformos-check.yml` configuration file to customize which checks to run: + + pos-cli check init [path] + +Example: `pos-cli check init` + +This creates a `.platformos-check.yml` file that: +- Extends the recommended platformos-check configuration +- Ignores `node_modules/**` by default +- Includes all available settings as comments for easy customization + +#### Run Checks + +To check your Liquid code quality, use: + + pos-cli check run [path] + +Example: `pos-cli check run` + +This command analyzes Liquid templates for common issues, syntax errors, and best practices violations. By default, it checks the current directory, but you can specify a path to check a specific directory. + +The output includes: +- **Severity levels**: Errors, warnings, and info messages color-coded for easy identification +- **Code snippets**: Shows the actual problematic code with line numbers +- **Grouped by file**: Offenses are organized by file for better readability +- **Summary counts**: Total offenses broken down by severity + +#### Options + +- `-a` - Enable automatic fixing of issues where possible +- `-f ` - Output format: `text` (default) or `json` +- `-s, --silent` - Only show errors, no success messages + +#### Examples + +Check current directory: + + pos-cli check run + +Check specific directory: + + pos-cli check run ./app/views + +Auto-fix issues: + + pos-cli check run -a + +JSON output for CI/CD: + + pos-cli check run -f json + +Silent mode (no success message): + + pos-cli check run -s + +Combined options: + + pos-cli check run -a -f json + +The command exits with code 0 if no issues are found, or 1 if issues are detected, making it suitable for CI/CD pipelines. + +#### Output Format + +**Text output** displays offenses grouped by file with code snippets: + +``` +3 offenses found in 1 file: + 3 warnings + +app/views/pages/index.liquid + +[warning] UndefinedObject + Unknown object 'user' used. + + 5

{{ user.name }}

+``` + +**JSON output** provides structured data with severity counts: + +```json +{ + "offenseCount": 3, + "fileCount": 1, + "errorCount": 0, + "warningCount": 3, + "infoCount": 0, + "files": [ + { + "path": "app/views/pages/index.liquid", + "offenses": [...], + "errorCount": 0, + "warningCount": 3, + "infoCount": 0 + } + ] +} +``` + +#### Configuration File + +After running `pos-cli check init`, you can customize `.platformos-check.yml`: + +```yaml +extends: platformos-check:recommended +ignore: + - node_modules/** + - dist/** + +# Customize individual checks +UndefinedObject: + enabled: true + severity: error # error (0), warning (1), or info (2) + +DeprecatedFilter: + enabled: true + severity: warning +``` + +The configuration file controls: +- Which checks are enabled/disabled +- Severity levels for each check +- File patterns to ignore +- Check-specific settings + ### Reading Logs Use the `logs` command to access errors and logs that you or the system logs: diff --git a/bin/pos-cli-check-init.js b/bin/pos-cli-check-init.js new file mode 100755 index 000000000..9c4ee9e9c --- /dev/null +++ b/bin/pos-cli-check-init.js @@ -0,0 +1,13 @@ +#!/usr/bin/env node +import { program } from 'commander'; +import { initConfig } from '../lib/check.js'; + +program + .name('pos-cli check init') + .description('initialize .platformos-check.yml configuration file') + .argument('[path]', 'path to initialize config in (defaults to current directory)', process.cwd()) + .action(async (configPath) => { + await initConfig(configPath); + }); + +program.parse(process.argv); diff --git a/bin/pos-cli-check-run.js b/bin/pos-cli-check-run.js new file mode 100755 index 000000000..a6f074f99 --- /dev/null +++ b/bin/pos-cli-check-run.js @@ -0,0 +1,24 @@ +#!/usr/bin/env node +import path from 'path'; +import { program } from 'commander'; +import { run } from '../lib/check.js'; + +program + .name('pos-cli check run') + .description('check Liquid code quality with platformos-check linter') + .argument('[path]', 'path to check (defaults to current directory)', process.cwd()) + .option('-a', 'enable automatic fixing') + .option('-f ', 'output format: text or json', 'text') + .option('-s, --silent', 'only show errors, no success messages') + .action(async (checkPath, options) => { + const absolutePath = path.resolve(checkPath); + + await run({ + path: absolutePath, + autoFix: options.a || false, + format: options.f || 'text', + silent: options.silent || false + }); + }); + +program.parse(process.argv); diff --git a/bin/pos-cli-check.js b/bin/pos-cli-check.js new file mode 100755 index 000000000..0b2b838a8 --- /dev/null +++ b/bin/pos-cli-check.js @@ -0,0 +1,8 @@ +#!/usr/bin/env node +import { program } from 'commander'; + +program + .name('pos-cli check') + .command('run [path]', 'check Liquid code quality with platformos-check linter') + .command('init [path]', 'initialize .platformos-check.yml configuration file') + .parse(process.argv); diff --git a/bin/pos-cli.js b/bin/pos-cli.js index bbf24d808..e60a4929c 100755 --- a/bin/pos-cli.js +++ b/bin/pos-cli.js @@ -19,8 +19,9 @@ program .version(version, '-v, --version') .command('archive', 'create an archive only (no deployment)') .command('audit', 'check your code for deprecations, recommendations, errors') - .command('constants', 'manage constants') + .command('check', 'check Liquid code quality with platformos-check linter') .command('clone', 'clone instances') + .command('constants', 'manage constants') .command('data', 'export, import or clean data on instance') .command('deploy ', 'deploy code to environment').alias('d') .command('env', 'manage environments') diff --git a/lib/check.js b/lib/check.js new file mode 100644 index 000000000..21427a79c --- /dev/null +++ b/lib/check.js @@ -0,0 +1,395 @@ +import fs from 'fs'; +import path from 'path'; +import logger from './logger.js'; +import chalk from 'chalk'; +import YAML from 'yaml'; +import ora from 'ora'; + +// Severity levels from platformos-check-node +const Severity = { + ERROR: 0, + WARNING: 1, + INFO: 2 +}; + +const checkThemeCheck = async () => { + try { + const themeCheck = await import('@platformos/platformos-check-node'); + return themeCheck; + } catch (error) { + await logger.Error( + 'The @platformos/platformos-check-node package is not installed.\n' + + 'Install it with: npm install @platformos/platformos-check-node' + ); + } +}; + +const validatePath = async (checkPath) => { + if (!fs.existsSync(checkPath)) { + await logger.Error(`Path does not exist: ${checkPath}`); + } + + const stats = fs.statSync(checkPath); + if (!stats.isDirectory()) { + await logger.Error(`Path is not a directory: ${checkPath}`); + } +}; + +/** + * Convert file:// URI to filesystem path + */ +const uriToPath = (uri) => { + return uri.replace('file://', ''); +}; + +/** + * Get severity label + */ +const severityToLabel = (severity) => { + switch (severity) { + case Severity.ERROR: + return 'error'; + case Severity.WARNING: + return 'warning'; + case Severity.INFO: + return 'info'; + default: + return 'unknown'; + } +}; + +/** + * Get code snippet from file (lines are 0-indexed from platformos-check) + */ +const getSnippet = (uri, startLine, endLine) => { + try { + const fsPath = uriToPath(uri); + const fileContent = fs.readFileSync(fsPath, 'utf8'); + const lines = fileContent.split('\n'); + const snippetLines = lines.slice(startLine, endLine + 1); + + return snippetLines + .map((line, index) => { + const lineNumber = startLine + index + 1; + const paddedLineNum = String(lineNumber).padStart(4, ' '); + return `${paddedLineNum} ${line}`; + }) + .join('\n'); + } catch (error) { + return ''; + } +}; + +/** + * Format a single offense with code snippet + */ +const formatOffense = (offense, basePath = null) => { + const absolutePath = uriToPath(offense.uri); + const filePath = basePath ? path.relative(basePath, absolutePath) : absolutePath; + const severityLabel = severityToLabel(offense.severity); + const location = `${filePath}:${offense.start.line + 1}:${offense.start.character}`; + const snippet = getSnippet(offense.uri, offense.start.line, offense.end.line); + + return { + location, + message: offense.message, + check: offense.check, + severity: severityLabel, + snippet, + file: filePath + }; +}; + +/** + * Sort offenses by severity (ERROR < WARNING < INFO) + */ +const sortBySeverity = (a, b) => a.severity - b.severity; + +/** + * Group and sort offenses by file, then by severity + */ +const groupOffensesByFile = (offenses, basePath = null) => { + const grouped = {}; + + offenses.forEach(offense => { + const absolutePath = uriToPath(offense.uri); + const filePath = basePath ? path.relative(basePath, absolutePath) : absolutePath; + if (!grouped[filePath]) { + grouped[filePath] = []; + } + grouped[filePath].push(offense); + }); + + // Sort offenses within each file by severity + Object.keys(grouped).forEach(file => { + grouped[file].sort(sortBySeverity); + }); + + return grouped; +}; + +/** + * Count offenses by severity + */ +const countOffensesBySeverity = (offenses) => { + return offenses.reduce((counts, offense) => { + switch (offense.severity) { + case Severity.ERROR: + counts.errors++; + break; + case Severity.WARNING: + counts.warnings++; + break; + case Severity.INFO: + counts.info++; + break; + } + return counts; + }, { errors: 0, warnings: 0, info: 0 }); +}; + +/** + * Format and display offenses in text format + */ +const printTextOutput = async (offenses, silent, basePath = null) => { + if (offenses.length === 0) { + if (!silent) { + await logger.Success('No offenses found.'); + } + return; + } + + const grouped = groupOffensesByFile(offenses, basePath); + const fileCount = Object.keys(grouped).length; + const counts = countOffensesBySeverity(offenses); + + // Print offenses grouped by file + await logger.Log(''); + const sortedFiles = Object.keys(grouped).sort(); + for (const file of sortedFiles) { + await logger.Log(chalk.bold.cyan(file)); + await logger.Log(''); + + for (const offense of grouped[file]) { + const formatted = formatOffense(offense, basePath); + + // Print severity icon and check name + let severityIcon, checkName; + switch (offense.severity) { + case Severity.ERROR: + severityIcon = chalk.red.bold('✖'); + checkName = chalk.red.bold(formatted.check); + break; + case Severity.WARNING: + severityIcon = chalk.yellow.bold('⚠'); + checkName = chalk.yellow.bold(formatted.check); + break; + case Severity.INFO: + severityIcon = chalk.cyan.bold('ℹ'); + checkName = chalk.cyan.bold(formatted.check); + break; + } + + await logger.Log(`${severityIcon} ${checkName}`); + await logger.Log(chalk.gray(` ${formatted.message}`)); + + // Print code snippet if available + if (formatted.snippet) { + await logger.Log(''); + await logger.Log(chalk.gray(formatted.snippet)); + } + + await logger.Log(''); + } + } + + // Print summary at the end + await logger.Log(chalk.gray('─'.repeat(60))); + await logger.Log(''); + + // Summary header + const totalOffenses = offenses.length; + const summaryHeader = `${totalOffenses} offense${totalOffenses === 1 ? '' : 's'} found in ${fileCount} file${fileCount === 1 ? '' : 's'}`; + + await logger.Log(chalk.bold.white(summaryHeader)); + await logger.Log(''); + + // Count badges + const badges = []; + if (counts.errors > 0) { + badges.push(chalk.red(`✖ ${counts.errors} error${counts.errors === 1 ? '' : 's'}`)); + } + if (counts.warnings > 0) { + badges.push(chalk.yellow(`⚠ ${counts.warnings} warning${counts.warnings === 1 ? '' : 's'}`)); + } + if (counts.info > 0) { + badges.push(chalk.cyan(`ℹ ${counts.info} info`)); + } + + await logger.Log(' ' + badges.join(' ')); + await logger.Log(''); +}; + +/** + * Format offenses as JSON + */ +const printJsonOutput = async (offenses, basePath = null) => { + const grouped = groupOffensesByFile(offenses, basePath); + + const result = Object.entries(grouped).map(([filePath, fileOffenses]) => { + const counts = countOffensesBySeverity(fileOffenses); + + return { + path: filePath, + offenses: fileOffenses.map(offense => ({ + check: offense.check, + severity: severityToLabel(offense.severity), + start_row: offense.start.line, + start_column: offense.start.character, + end_row: offense.end.line, + end_column: offense.end.character, + message: offense.message + })), + errorCount: counts.errors, + warningCount: counts.warnings, + infoCount: counts.info + }; + }); + + const totalCounts = countOffensesBySeverity(offenses); + + const output = { + offenseCount: offenses.length, + fileCount: Object.keys(grouped).length, + errorCount: totalCounts.errors, + warningCount: totalCounts.warnings, + infoCount: totalCounts.info, + files: result + }; + + await logger.Log(JSON.stringify(output, null, 2)); +}; + +/** + * Add '#' character at the start of each line in a string + */ +const commentString = (input) => { + return input + .split('\n') + .map(line => `# ${line}`) + .join('\n'); +}; + +/** + * Initialize .platformos-check.yml configuration file + */ +const initConfig = async (rootPath) => { + const configFileName = '.platformos-check.yml'; + const configFilePath = path.join(rootPath, configFileName); + + // Check if config file already exists + if (fs.existsSync(configFilePath)) { + await logger.Info(`${configFileName} already exists at ${rootPath}`); + return; + } + + const themeCheck = await checkThemeCheck(); + + try { + // Load default configuration + const { settings } = await themeCheck.loadConfig(undefined, rootPath); + + // Create the initial config that extends recommended settings + const initConfig = { + extends: 'platformos-check:recommended', + ignore: ['node_modules/**'] + }; + + const initConfigYml = YAML.stringify(initConfig); + + // Comment out all settings for user reference + const settingsYml = commentString(YAML.stringify(settings)); + + // Combine: base config + commented settings + const finalConfig = `${initConfigYml}\n# Below are all available settings with their default values:\n${settingsYml}`; + + // Write config file + fs.writeFileSync(configFilePath, finalConfig, 'utf8'); + + await logger.Success(`Created ${configFileName} at ${rootPath}`); + } catch (error) { + await logger.Error(`Error creating config file: ${error.message}`); + } +}; + +const run = async (opts) => { + const { path: checkPath, autoFix, format, silent } = opts; + + await validatePath(checkPath); + + const themeCheck = await checkThemeCheck(); + + let offenses = []; + let spinner; + let theme; + + // Only show spinner for text output (not JSON) + if (format !== 'json' && !silent) { + spinner = ora({ text: 'Loading files...', stream: process.stdout }); + spinner.start(); + } + + try { + // Run checks with progress callback + let fileCount = 0; + const result = await themeCheck.themeCheckRun(checkPath, undefined, (message) => { + if (spinner && message) { + spinner.text = message; + } + }); + + offenses = result.offenses; + theme = result.theme; + fileCount = theme.length; + + // Update spinner with completion info if it's still running + if (spinner && spinner.isSpinning) { + spinner.text = `Checked ${fileCount} file${fileCount === 1 ? '' : 's'}`; + } + + if (autoFix && offenses.length > 0) { + if (spinner) { + spinner.text = `Applying automatic fixes to ${offenses.length} offense${offenses.length === 1 ? '' : 's'}...`; + } + await themeCheck.autofix(theme, offenses); + + // Re-run check after autofix to get updated offenses + if (spinner) { + spinner.text = 'Re-checking after fixes...'; + } + const recheck = await themeCheck.themeCheckRun(checkPath); + offenses = recheck.offenses; + } + + if (spinner) { + spinner.stop(); + } + } catch (error) { + if (spinner) { + spinner.fail('Check failed'); + } + await logger.Error(`Error running platformos-check: ${error.message}`); + } + + if (format === 'json') { + await printJsonOutput(offenses, checkPath); + } else { + await printTextOutput(offenses, silent, checkPath); + } + + if (offenses.length > 0) { + process.exit(1); + } +}; + +export { run, initConfig }; diff --git a/package-lock.json b/package-lock.json index 78c676410..e8c497e46 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2628,6 +2628,7 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.9.tgz", "integrity": "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw==", "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -3348,6 +3349,7 @@ "resolved": "https://registry.npmjs.org/@yeoman/types/-/types-1.9.1.tgz", "integrity": "sha512-5BMdA/zMzLv/ahnL1ktaV46nSXorb4sU4kQPQKDhIcK8ERbx9TAbGAE+XAlCXKioNIiOrihYj6gW1d/GEfU9Zw==", "license": "MIT", + "peer": true, "engines": { "node": "^16.13.0 || >=18.12.0" }, @@ -3409,6 +3411,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -5305,6 +5308,7 @@ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -11364,6 +11368,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -11857,6 +11862,7 @@ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -11950,6 +11956,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, diff --git a/test/fixtures/check/clean/app/views/pages/index.liquid b/test/fixtures/check/clean/app/views/pages/index.liquid new file mode 100644 index 000000000..6704194f5 --- /dev/null +++ b/test/fixtures/check/clean/app/views/pages/index.liquid @@ -0,0 +1,5 @@ +--- +slug: / +--- +

Welcome

+

This is a clean page

diff --git a/test/fixtures/check/multiple-issues/app/views/pages/about.liquid b/test/fixtures/check/multiple-issues/app/views/pages/about.liquid new file mode 100644 index 000000000..b82fda6a0 --- /dev/null +++ b/test/fixtures/check/multiple-issues/app/views/pages/about.liquid @@ -0,0 +1,5 @@ +--- +slug: /about +--- +

{{ page_title }}

+

{{ unknown_object }}

diff --git a/test/fixtures/check/multiple-issues/app/views/partials/header.liquid b/test/fixtures/check/multiple-issues/app/views/partials/header.liquid new file mode 100644 index 000000000..8cd3d2b01 --- /dev/null +++ b/test/fixtures/check/multiple-issues/app/views/partials/header.liquid @@ -0,0 +1,4 @@ +
+

{{ site.name }}

+

{{ undefined_var }}

+
diff --git a/test/fixtures/check/with-issues/app/views/pages/index.liquid b/test/fixtures/check/with-issues/app/views/pages/index.liquid new file mode 100644 index 000000000..696073675 --- /dev/null +++ b/test/fixtures/check/with-issues/app/views/pages/index.liquid @@ -0,0 +1,6 @@ +--- +slug: / +--- +

{{ title }}

+

{{ user.name }}

+

{{ undefined_variable }}

diff --git a/test/integration/check.test.js b/test/integration/check.test.js new file mode 100644 index 000000000..2e3be3f89 --- /dev/null +++ b/test/integration/check.test.js @@ -0,0 +1,214 @@ +import { describe, test, expect, vi } from 'vitest'; +import exec from '#test/utils/exec'; +import cliPath from '#test/utils/cliPath'; +import path from 'path'; + +vi.setConfig({ testTimeout: 30000 }); + +const cwd = name => path.join(process.cwd(), 'test', 'fixtures', 'check', name); +const run = (fixtureName, options = '') => exec(`${cliPath} check run ${options}`, { cwd: cwd(fixtureName) }); + +describe('pos-cli check run', () => { + describe('Happy path', () => { + test('Clean liquid files - no issues', async () => { + const { stdout, code } = await run('clean'); + + expect(code).toEqual(0); + expect(stdout).toMatch('No offenses found'); + }); + + test('Clean liquid files with silent mode', async () => { + const { stdout, code } = await run('clean', '-s'); + + expect(code).toEqual(0); + expect(stdout).not.toMatch('No offenses found'); + }); + + test('Liquid files with issues', async () => { + const { stdout, code } = await run('with-issues'); + + expect(code).toEqual(1); + expect(stdout).toMatch('3 offenses found in 1 file'); + expect(stdout).toMatch('3 warnings'); + expect(stdout).toMatch('app/views/pages/index.liquid'); + expect(stdout).toMatch('UndefinedObject'); + expect(stdout).toMatch('Unknown object \'title\' used'); + expect(stdout).toMatch('Unknown object \'user\' used'); + expect(stdout).toMatch('Unknown object \'undefined_variable\' used'); + // Check for code snippets + expect(stdout).toMatch('{{ title }}'); + expect(stdout).toMatch('{{ user.name }}'); + }); + + test('Multiple files with issues', async () => { + const { stdout, code } = await run('multiple-issues'); + + expect(code).toEqual(1); + expect(stdout).toMatch('4 offenses found in 2 files'); + expect(stdout).toMatch('4 warnings'); + expect(stdout).toMatch('app/views/pages/about.liquid'); + expect(stdout).toMatch('app/views/partials/header.liquid'); + expect(stdout).toMatch('Unknown object \'page_title\' used'); + expect(stdout).toMatch('Unknown object \'unknown_object\' used'); + expect(stdout).toMatch('Unknown object \'site\' used'); + expect(stdout).toMatch('Unknown object \'undefined_var\' used'); + // Check for code snippets + expect(stdout).toMatch('{{ page_title }}'); + expect(stdout).toMatch('{{ site.name }}'); + }); + + test('JSON output format with clean files', async () => { + const { stdout, code } = await run('clean', '-f json'); + + expect(code).toEqual(0); + + const json = JSON.parse(stdout); + expect(json.offenseCount).toEqual(0); + expect(json.fileCount).toEqual(0); + expect(json.errorCount).toEqual(0); + expect(json.warningCount).toEqual(0); + expect(json.infoCount).toEqual(0); + expect(json.files).toEqual([]); + }); + + test('JSON output format with issues', async () => { + const { stdout, code } = await run('with-issues', '-f json'); + + expect(code).toEqual(1); + + const json = JSON.parse(stdout); + expect(json.offenseCount).toEqual(3); + expect(json.fileCount).toEqual(1); + expect(json.errorCount).toEqual(0); + expect(json.warningCount).toEqual(3); + expect(json.infoCount).toEqual(0); + expect(json.files).toHaveLength(1); + expect(json.files[0]).toHaveProperty('path'); + expect(json.files[0]).toHaveProperty('offenses'); + expect(json.files[0]).toHaveProperty('errorCount'); + expect(json.files[0]).toHaveProperty('warningCount'); + expect(json.files[0]).toHaveProperty('infoCount'); + expect(json.files[0].offenses).toHaveLength(3); + expect(json.files[0].offenses[0]).toHaveProperty('check'); + expect(json.files[0].offenses[0]).toHaveProperty('severity'); + expect(json.files[0].offenses[0]).toHaveProperty('start_row'); + expect(json.files[0].offenses[0]).toHaveProperty('start_column'); + expect(json.files[0].offenses[0]).toHaveProperty('message'); + expect(json.files[0].path).toMatch('app/views/pages/index.liquid'); + expect(json.files[0].offenses[0].severity).toEqual('warning'); + }); + + test('Specific path argument', async () => { + const cwdPath = cwd('with-issues'); + const specificPath = path.join(cwdPath, 'app/views/pages'); + const { stdout, code } = await exec(`${cliPath} check run ${specificPath}`); + + expect(code).toEqual(1); + expect(stdout).toMatch('3 offenses found in 1 file'); + }); + }); + + describe('Error handling', () => { + test('Non-existent path', async () => { + const nonExistentPath = path.join(process.cwd(), 'test', 'fixtures', 'check', 'nonexistent'); + const { stderr, code } = await exec(`${cliPath} check run ${nonExistentPath}`); + + expect(code).toEqual(1); + expect(stderr).toMatch('Path does not exist'); + }); + + test('File instead of directory', async () => { + const filePath = path.join(cwd('clean'), 'app/views/pages/index.liquid'); + const { stderr, code } = await exec(`${cliPath} check run ${filePath}`); + + expect(code).toEqual(1); + expect(stderr).toMatch('Path is not a directory'); + }); + }); + + describe('Init command', () => { + test('Create config file', async () => { + const tempDir = path.join(process.cwd(), 'test', 'fixtures', 'check', 'init-test-' + Date.now()); + const fs = await import('fs'); + + // Create temp directory + fs.mkdirSync(tempDir, { recursive: true }); + fs.writeFileSync(path.join(tempDir, '.pos'), '{}'); + + try { + const { stdout, code } = await exec(`${cliPath} check init ${tempDir}`); + + expect(code).toEqual(0); + expect(stdout).toMatch('Created .platformos-check.yml'); + + // Verify config file was created + const configPath = path.join(tempDir, '.platformos-check.yml'); + expect(fs.existsSync(configPath)).toBeTruthy(); + + // Verify config file content + const configContent = fs.readFileSync(configPath, 'utf8'); + expect(configContent).toMatch('extends: platformos-check:recommended'); + expect(configContent).toMatch('ignore:'); + expect(configContent).toMatch('- node_modules/**'); + expect(configContent).toMatch('# Below are all available settings'); + } finally { + // Cleanup + fs.rmSync(tempDir, { recursive: true, force: true }); + } + }); + + test('Config file already exists', async () => { + const tempDir = path.join(process.cwd(), 'test', 'fixtures', 'check', 'init-exists-' + Date.now()); + const fs = await import('fs'); + + // Create temp directory with existing config + fs.mkdirSync(tempDir, { recursive: true }); + fs.writeFileSync(path.join(tempDir, '.pos'), '{}'); + fs.writeFileSync(path.join(tempDir, '.platformos-check.yml'), 'existing config'); + + try { + const { stdout, code } = await exec(`${cliPath} check init ${tempDir}`); + + expect(code).toEqual(0); + expect(stdout).toMatch('.platformos-check.yml already exists'); + + // Verify original file wasn't overwritten + const configContent = fs.readFileSync(path.join(tempDir, '.platformos-check.yml'), 'utf8'); + expect(configContent).toEqual('existing config'); + } finally { + // Cleanup + fs.rmSync(tempDir, { recursive: true, force: true }); + } + }); + }); + + describe('Help text', () => { + test('Check command help', async () => { + const { stdout } = await exec(`${cliPath} check --help`); + + expect(stdout).toMatch('Usage: pos-cli check'); + expect(stdout).toMatch('run [path]'); + expect(stdout).toMatch('init [path]'); + expect(stdout).toMatch('check Liquid code quality with platformos-check linter'); + expect(stdout).toMatch('initialize .platformos-check.yml configuration file'); + }); + + test('Check run command help', async () => { + const { stdout } = await exec(`${cliPath} check run --help`); + + expect(stdout).toMatch('Usage: pos-cli check run'); + expect(stdout).toMatch('-a'); + expect(stdout).toMatch('enable automatic fixing'); + expect(stdout).toMatch('-f '); + expect(stdout).toMatch('output format'); + expect(stdout).toMatch('-s, --silent'); + }); + + test('Check init command help', async () => { + const { stdout } = await exec(`${cliPath} check init --help`); + + expect(stdout).toMatch('Usage: pos-cli check init'); + expect(stdout).toMatch('initialize .platformos-check.yml configuration file'); + }); + }); +}); From 02ca7e2553e9c80483db7ac5e6c6f5910d74cdce Mon Sep 17 00:00:00 2001 From: Maciej Krajowski-Kukiel Date: Wed, 18 Feb 2026 11:12:55 +0100 Subject: [PATCH 2/3] fix CI --- CLAUDE.md | 168 +++++++++++++++++++ lib/check.js | 36 +++- package-lock.json | 417 +++++++++++++++++++++++++++++++++++++++++++--- package.json | 6 + 4 files changed, 599 insertions(+), 28 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 9d68a6c0b..6b814a357 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -359,6 +359,174 @@ GUI apps are pre-built (in dist/ or build/ directories). To modify: - **OpenObserve** - Log aggregation and search (logs v2) - **CDN** - Asset delivery and verification +## Cross-Platform Compatibility + +pos-cli must work correctly on both Windows and Linux/macOS. Follow these patterns to ensure cross-platform compatibility: + +### Path Handling Patterns + +#### 1. **Use Node.js `path` Module for Filesystem Operations** +Always use `path` module functions for filesystem operations, never hardcode path separators: + +**✓ Correct:** +```javascript +const filePath = path.join(baseDir, 'app', 'views', 'page.liquid'); +const absPath = path.resolve(relativePath); +const relPath = path.relative(baseDir, absPath); +const dir = path.dirname(filePath); +const filename = path.basename(filePath); +const ext = path.extname(filePath); +``` + +**✗ Incorrect:** +```javascript +const filePath = baseDir + '/app/views/page.liquid'; // Breaks on Windows +const parts = filePath.split('/'); // Breaks on Windows (use path.sep) +``` + +#### 2. **Normalize Paths to Forward Slashes for API/Output** +The platformOS API and user-facing output should always use forward slashes. Use this pattern: + +```javascript +// Pattern from lib/watch.js +const filePathUnixified = filePath => + filePath.replace(/\\/g, '/'); // Convert backslashes to forward slashes + +// Alternative pattern from lib/check.js +const normalizedPath = filePath.split(path.sep).join('/'); +``` + +**When to use:** +- Before sending paths to platformOS API +- For user-facing output (logs, error messages) +- For pattern matching with regex +- For JSON output + +#### 3. **Path Splitting with `path.sep`** +When you need to split a path into components, use `path.sep`: + +```javascript +// Extract module name from path like "modules/my-module/file.js" +const moduleName = filePath.split(path.sep)[1]; + +// Join path components +const normalizedPath = filePath.split(path.sep).join('/'); +``` + +#### 4. **Complete Path Normalization Pattern** +For complex path operations (like in lib/check.js), use this comprehensive pattern: + +```javascript +import { fileURLToPath } from 'url'; +import path from 'path'; + +// 1. Convert URI to path (if from external source) +let absolutePath = fileURLToPath(uri); + +// 2. Normalize OS-specific separators +absolutePath = path.normalize(absolutePath); + +// 3. Generate relative path +let filePath = absolutePath; +if (basePath) { + const normalizedBase = path.normalize(path.resolve(basePath)); + filePath = path.relative(normalizedBase, absolutePath); + + // 4. Convert to forward slashes for output + filePath = filePath.split(path.sep).join('/'); +} +``` + +#### 5. **URI to Path Conversion** +When converting file:// URIs to filesystem paths, use `fileURLToPath`: + +```javascript +import { fileURLToPath } from 'url'; + +const uriToPath = (uri) => { + try { + return fileURLToPath(uri); // Handles Windows drive letters correctly + } catch (error) { + // Fallback for non-standard URIs + return uri.replace('file://', ''); + } +}; +``` + +**Why:** On Windows, `file:///C:/path/file.txt` needs to become `C:\path\file.txt`, not `\C:\path\file.txt`. + +#### 6. **Third-Party Normalization: `normalize-path`** +For consistent forward-slash conversion, the `normalize-path` package is available: + +```javascript +import normalize from 'normalize-path'; + +const normalizedPath = normalize(windowsPath); // Always returns forward slashes +``` + +**Used in:** +- `lib/shouldBeSynced.js` - For pattern matching +- `lib/assets/manifest.js` - For asset path normalization + +#### 7. **Pattern Matching on Paths** +Always normalize paths before regex matching: + +```javascript +const isAssetsPath = path => { + const normalizedPath = path.replace(/\\/g, '/'); + return normalizedPath.startsWith('app/assets') || + /^modules\/\w+\/public\/assets/.test(normalizedPath); +}; +``` + +### Testing Cross-Platform Code + +When adding or modifying path-handling code: + +1. **Test locally if possible** - If on Windows, test Windows behavior; if on Linux, test Linux behavior +2. **Check test output** - Look for path-related test failures in CI (tests run on both platforms) +3. **Verify path separators** - Ensure output paths use forward slashes consistently +4. **Test edge cases:** + - Paths with spaces + - Deeply nested paths + - Paths at root level + - Module paths vs app paths + +### Common Mistakes to Avoid + +**❌ Hardcoded path separators:** +```javascript +filePath.split('/'); // Breaks on Windows +filePath.includes('/'); // May not work on Windows +``` + +**❌ String concatenation for paths:** +```javascript +const fullPath = dir + '/' + filename; // Use path.join() instead +``` + +**❌ Not normalizing before pattern matching:** +```javascript +if (filePath.startsWith('app/assets')) // May fail on Windows +// Should be: +if (filePath.replace(/\\/g, '/').startsWith('app/assets')) +``` + +**❌ Using `path.relative()` without normalizing base:** +```javascript +path.relative(basePath, absolutePath); // May give incorrect results +// Should normalize both first: +path.relative(path.normalize(path.resolve(basePath)), path.normalize(absolutePath)); +``` + +### Key Files Demonstrating Best Practices + +- **`lib/check.js`** - Comprehensive path normalization for linter output +- **`lib/watch.js`** - API-ready path preparation (`filePathUnixified`) +- **`lib/shouldBeSynced.js`** - Pattern matching with normalized paths +- **`lib/overwrites.js`** - Relative path generation +- **`lib/assets/manifest.js`** - Asset path normalization + ## Node.js Version - **Minimum**: Node.js 22 diff --git a/lib/check.js b/lib/check.js index 21427a79c..09483ffa0 100644 --- a/lib/check.js +++ b/lib/check.js @@ -1,5 +1,6 @@ import fs from 'fs'; import path from 'path'; +import { fileURLToPath } from 'url'; import logger from './logger.js'; import chalk from 'chalk'; import YAML from 'yaml'; @@ -39,7 +40,12 @@ const validatePath = async (checkPath) => { * Convert file:// URI to filesystem path */ const uriToPath = (uri) => { - return uri.replace('file://', ''); + try { + return fileURLToPath(uri); + } catch (error) { + // Fallback for non-standard URIs + return uri.replace('file://', ''); + } }; /** @@ -84,8 +90,18 @@ const getSnippet = (uri, startLine, endLine) => { * Format a single offense with code snippet */ const formatOffense = (offense, basePath = null) => { - const absolutePath = uriToPath(offense.uri); - const filePath = basePath ? path.relative(basePath, absolutePath) : absolutePath; + let absolutePath = uriToPath(offense.uri); + // Normalize path separators and resolve to absolute path + absolutePath = path.normalize(absolutePath); + + let filePath = absolutePath; + if (basePath) { + const normalizedBase = path.normalize(path.resolve(basePath)); + filePath = path.relative(normalizedBase, absolutePath); + // Convert backslashes to forward slashes for consistent output + filePath = filePath.split(path.sep).join('/'); + } + const severityLabel = severityToLabel(offense.severity); const location = `${filePath}:${offense.start.line + 1}:${offense.start.character}`; const snippet = getSnippet(offense.uri, offense.start.line, offense.end.line); @@ -112,8 +128,18 @@ const groupOffensesByFile = (offenses, basePath = null) => { const grouped = {}; offenses.forEach(offense => { - const absolutePath = uriToPath(offense.uri); - const filePath = basePath ? path.relative(basePath, absolutePath) : absolutePath; + let absolutePath = uriToPath(offense.uri); + // Normalize path separators and resolve to absolute path + absolutePath = path.normalize(absolutePath); + + let filePath = absolutePath; + if (basePath) { + const normalizedBase = path.normalize(path.resolve(basePath)); + filePath = path.relative(normalizedBase, absolutePath); + // Convert backslashes to forward slashes for consistent output + filePath = filePath.split(path.sep).join('/'); + } + if (!grouped[filePath]) { grouped[filePath] = []; } diff --git a/package-lock.json b/package-lock.json index e8c497e46..b16770686 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,8 @@ "hasInstallScript": true, "license": "CC BY 3.0", "dependencies": { + "@platformos/platformos-check-node": "^0.0.4", + "@platformos/platformos-common": "^0.0.4", "archiver": "^7.0.1", "async": "^3.2.6", "body-parser": "^2.0.2", @@ -48,6 +50,7 @@ "text-table": "^0.2.0", "unzipper": "^0.12.3", "update-notifier": "^7.3.1", + "yaml": "^2.7.0", "yeoman-environment": "^5.1.2", "yeoman-generator": "^7.5.1" }, @@ -2023,6 +2026,191 @@ "node": ">=14" } }, + "node_modules/@platformos/liquid-html-parser": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@platformos/liquid-html-parser/-/liquid-html-parser-0.0.4.tgz", + "integrity": "sha512-QHNEJd5DLug6fnocu8Lv1FMEEKu/LHbIlzt0sjvP3yosN/2g6fm0NnrJL5nZXfzfjr9v8yJzHayGIXQZKlZn3w==", + "license": "MIT", + "dependencies": { + "line-column": "^1.0.2", + "ohm-js": "^17.0.0" + } + }, + "node_modules/@platformos/platformos-check-common": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@platformos/platformos-check-common/-/platformos-check-common-0.0.4.tgz", + "integrity": "sha512-UrixHAr/NgxeSCOO1v9iQrL9WlygelTAkyJ08hxKk8XYMCcvGnJ47+foaAsFt1sc/hYyrvvF4/7llGqLHvqUAg==", + "license": "MIT", + "dependencies": { + "@platformos/liquid-html-parser": "0.0.4", + "cross-fetch": "^4.0.0", + "graphql": "^16.12.0", + "js-yaml": "^3.14.1", + "jsonc-parser": "^3.2.0", + "line-column": "^1.0.2", + "lodash": "^4.17.21", + "minimatch": "^9.0.1", + "vscode-json-languageservice": "^5.3.10", + "vscode-uri": "^3.0.7" + } + }, + "node_modules/@platformos/platformos-check-common/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@platformos/platformos-check-common/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@platformos/platformos-check-common/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@platformos/platformos-check-common/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@platformos/platformos-check-docs-updater": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@platformos/platformos-check-docs-updater/-/platformos-check-docs-updater-0.0.4.tgz", + "integrity": "sha512-0wh0hVNircon5IGpBhPKX3jW15XRu11PXXr2mgyVQlIJg2f+V96oHkarX1I4H9yV4japGVXad1BUpPTtKcTSGg==", + "license": "MIT", + "dependencies": { + "@platformos/platformos-check-common": "0.0.4", + "env-paths": "^2.2.1", + "he": "^1.2.0", + "node-fetch": "^2.6.11" + }, + "bin": { + "theme-docs": "scripts/cli.js" + } + }, + "node_modules/@platformos/platformos-check-docs-updater/node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@platformos/platformos-check-node": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@platformos/platformos-check-node/-/platformos-check-node-0.0.4.tgz", + "integrity": "sha512-Q9+datYAkQOReeW7jQewvsJmIZOkgK6mICnCkEvp0tk8qppzTM0kkJNGPKSoQWBxWtWmeIN14x/3C5/I5I6i9w==", + "license": "MIT", + "dependencies": { + "@platformos/platformos-check-common": "0.0.4", + "@platformos/platformos-check-docs-updater": "0.0.4", + "glob": "^8.0.3", + "vscode-uri": "^3.0.7", + "yaml": "^2.3.0" + } + }, + "node_modules/@platformos/platformos-check-node/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@platformos/platformos-check-node/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@platformos/platformos-check-node/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@platformos/platformos-common": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@platformos/platformos-common/-/platformos-common-0.0.4.tgz", + "integrity": "sha512-plPOxM6mH8mtz/bJtCnewtuDKrK3Cmwv9l9cvREutnMF6ZJ+lrinPbKskFq5HDsNA8A7MfqdbwqsLI0k/UxAMw==", + "license": "MIT", + "dependencies": { + "js-yaml": "^3.14.1", + "vscode-json-languageservice": "^5.3.10", + "vscode-uri": "^3.0.7" + } + }, + "node_modules/@platformos/platformos-common/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@platformos/platformos-common/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@pnpm/config.env-replace": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", @@ -2791,6 +2979,12 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/@vscode/l10n": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.18.tgz", + "integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==", + "license": "MIT" + }, "node_modules/@yeoman/adapter": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@yeoman/adapter/-/adapter-3.1.1.tgz", @@ -4604,6 +4798,15 @@ "node": ">= 14" } }, + "node_modules/cross-fetch": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", + "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -5021,29 +5224,6 @@ "node": ">= 0.8" } }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/enhanced-resolve": { "version": "5.18.4", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz", @@ -5665,6 +5845,19 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/esquery": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", @@ -6277,6 +6470,12 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -6623,6 +6822,15 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, + "node_modules/graphql": { + "version": "16.12.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.12.0.tgz", + "integrity": "sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, "node_modules/grouped-queue": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/grouped-queue/-/grouped-queue-2.1.0.tgz", @@ -6730,6 +6938,15 @@ "node": ">= 0.4" } }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, "node_modules/hosted-git-info": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", @@ -6929,6 +7146,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -7625,6 +7853,24 @@ "inBundle": true, "license": "ISC" }, + "node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "license": "MIT", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isobject/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", @@ -7781,6 +8027,12 @@ "json5": "lib/cli.js" } }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "license": "MIT" + }, "node_modules/jsonfile": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", @@ -7922,6 +8174,22 @@ "node": ">= 0.8.0" } }, + "node_modules/line-column": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/line-column/-/line-column-1.0.2.tgz", + "integrity": "sha512-Ktrjk5noGYlHsVnYWh62FLVs4hTb8A3e+vucNZMgPeAOITdshMSgv4cCZQeRDjm7+goqmo6+liZwTXo+U3sVww==", + "license": "MIT", + "dependencies": { + "isarray": "^1.0.0", + "isobject": "^2.0.0" + } + }, + "node_modules/line-column/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, "node_modules/livereload": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.10.3.tgz", @@ -8712,6 +8980,26 @@ "node": ">=18.20.0 <20 || >=20.12.1" } }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/node-gyp": { "version": "12.1.0", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.1.0.tgz", @@ -9078,6 +9366,15 @@ ], "license": "MIT" }, + "node_modules/ohm-js": { + "version": "17.5.0", + "resolved": "https://registry.npmjs.org/ohm-js/-/ohm-js-17.5.0.tgz", + "integrity": "sha512-l4Sa7026+6jsvYbt0PXKmL+f+ML32fD++IznLgxDhx2t9Cx6NC7zwRqblCujPHGGmkQerHoeBzRutdxaw/S72g==", + "license": "MIT", + "engines": { + "node": ">=0.12.1" + } + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -10826,6 +11123,12 @@ "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", "license": "CC0-1.0" }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, "node_modules/ssri": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.0.tgz", @@ -11408,6 +11711,12 @@ "node": ">=0.6" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, "node_modules/treeverse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz", @@ -12056,6 +12365,37 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/vscode-json-languageservice": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-5.7.1.tgz", + "integrity": "sha512-sMK2F8p7St0lJCr/4IfbQRoEUDUZRR7Ud0IiSl8I/JtN+m9Gv+FJlNkSAYns2R7Ebm/PKxqUuWYOfBej/rAdBQ==", + "license": "MIT", + "dependencies": { + "@vscode/l10n": "^0.0.18", + "jsonc-parser": "^3.3.1", + "vscode-languageserver-textdocument": "^1.0.12", + "vscode-languageserver-types": "^3.17.5", + "vscode-uri": "^3.1.0" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", + "license": "MIT" + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "license": "MIT" + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "license": "MIT" + }, "node_modules/walk-up-path": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-4.0.0.tgz", @@ -12065,6 +12405,22 @@ "node": "20 || >=22" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/when-exit": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.5.tgz", @@ -12564,6 +12920,21 @@ "node": ">=18" } }, + "node_modules/yaml": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, "node_modules/yeoman-environment": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-5.1.2.tgz", diff --git a/package.json b/package.json index bd7b5c48c..0a4ae4d82 100644 --- a/package.json +++ b/package.json @@ -72,6 +72,9 @@ "text-table": "^0.2.0", "unzipper": "^0.12.3", "update-notifier": "^7.3.1", + "@platformos/platformos-check-node": "^0.0.4", + "@platformos/platformos-common": "^0.0.4", + "yaml": "^2.7.0", "yeoman-environment": "^5.1.2", "yeoman-generator": "^7.5.1" }, @@ -79,6 +82,9 @@ "bin": { "pos-cli": "bin/pos-cli.js", "pos-cli-audit": "bin/pos-cli-audit.js", + "pos-cli-check": "bin/pos-cli-check.js", + "pos-cli-check-init": "bin/pos-cli-check-init.js", + "pos-cli-check-run": "bin/pos-cli-check-run.js", "pos-cli-deploy": "bin/pos-cli-deploy.js", "pos-cli-env": "bin/pos-cli-env.js", "pos-cli-env-add": "bin/pos-cli-env-add.js", From 35faa6562fffe237386cc1b3321d251625b7554e Mon Sep 17 00:00:00 2001 From: Maciej Krajowski-Kukiel Date: Thu, 19 Feb 2026 19:01:06 +0100 Subject: [PATCH 3/3] update dependencies, fix linter errors --- bin/pos-cli-generate-run.js | 5 +- eslint.config.js | 1 + lib/check.js | 6 +- lib/environments.js | 2 +- package-lock.json | 788 ++++++++++++----------- package.json | 14 +- test/unit/env-refresh-token-unit.test.js | 1 - test/unit/generators.test.js | 2 +- 8 files changed, 418 insertions(+), 401 deletions(-) diff --git a/bin/pos-cli-generate-run.js b/bin/pos-cli-generate-run.js index a6476b92f..860c80512 100755 --- a/bin/pos-cli-generate-run.js +++ b/bin/pos-cli-generate-run.js @@ -11,7 +11,6 @@ import { program } from 'commander'; import { createEnv } from 'yeoman-environment'; const yeomanEnv = createEnv(); import { execaSync } from 'execa'; -import reject from 'lodash.reject'; import table from 'text-table'; import logger from '../lib/logger.js'; import { confirm } from '@inquirer/prompts'; @@ -142,7 +141,7 @@ const confirmInstallation = async (packageRoot, pkg, autoConfirm) => { default: true }); return answer; - } catch (e) { + } catch { // User cancelled with Ctrl+C return false; } @@ -222,7 +221,7 @@ const registerGenerator = async (generatorPath, autoConfirm = false) => { if (e.message.includes('Cannot find module')) { throw new Error( `Generator registration failed due to missing module: ${e.message}\n` + - `This usually means the generator has an undeclared dependency.\n` + + 'This usually means the generator has an undeclared dependency.\n' + `Try running 'npm install' manually in: ${path.dirname(generatorPath)}` ); } diff --git a/eslint.config.js b/eslint.config.js index 7fc99dc3d..cd3192187 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -151,6 +151,7 @@ export default [ global: 'readonly', require: 'readonly', URL: 'readonly', + AbortController: 'readonly', module: 'readonly', program: 'readonly', token: 'readonly', diff --git a/lib/check.js b/lib/check.js index 09483ffa0..125faf589 100644 --- a/lib/check.js +++ b/lib/check.js @@ -17,7 +17,7 @@ const checkThemeCheck = async () => { try { const themeCheck = await import('@platformos/platformos-check-node'); return themeCheck; - } catch (error) { + } catch { await logger.Error( 'The @platformos/platformos-check-node package is not installed.\n' + 'Install it with: npm install @platformos/platformos-check-node' @@ -42,7 +42,7 @@ const validatePath = async (checkPath) => { const uriToPath = (uri) => { try { return fileURLToPath(uri); - } catch (error) { + } catch { // Fallback for non-standard URIs return uri.replace('file://', ''); } @@ -81,7 +81,7 @@ const getSnippet = (uri, startLine, endLine) => { return `${paddedLineNum} ${line}`; }) .join('\n'); - } catch (error) { + } catch { return ''; } }; diff --git a/lib/environments.js b/lib/environments.js index 5212e23c7..5832a83e6 100644 --- a/lib/environments.js +++ b/lib/environments.js @@ -64,7 +64,7 @@ const deviceAuthorizationFlow = async (instanceUrl) => { if (error.statusCode === 404 && error.options?.uri?.includes('/oauth/authorize_device')) { await logger.Error( `Instance ${instanceUrl} is not registered in the Partner Portal.\n` + - `Please double-check if the instance URL is correct.`, + 'Please double-check if the instance URL is correct.', { hideTimestamp: true, exit: false } ); throw error; diff --git a/package-lock.json b/package-lock.json index b16770686..ed0ae391c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,14 +15,14 @@ "hasInstallScript": true, "license": "CC BY 3.0", "dependencies": { - "@platformos/platformos-check-node": "^0.0.4", - "@platformos/platformos-common": "^0.0.4", + "@platformos/platformos-check-node": "^0.0.5", + "@platformos/platformos-common": "^0.0.5", "archiver": "^7.0.1", "async": "^3.2.6", "body-parser": "^2.0.2", "chalk": "^5.6.2", "chokidar": "^5.0.0", - "commander": "^12.1.0", + "commander": "^14.0.3", "degit": "^2.8.4", "email-validator": "^2.0.4", "execa": "^9.5.2", @@ -57,6 +57,9 @@ "bin": { "pos-cli": "bin/pos-cli.js", "pos-cli-audit": "bin/pos-cli-audit.js", + "pos-cli-check": "bin/pos-cli-check.js", + "pos-cli-check-init": "bin/pos-cli-check-init.js", + "pos-cli-check-run": "bin/pos-cli-check-run.js", "pos-cli-deploy": "bin/pos-cli-deploy.js", "pos-cli-env": "bin/pos-cli-env.js", "pos-cli-env-add": "bin/pos-cli-env-add.js", @@ -74,10 +77,10 @@ "pos-cli-test-run": "bin/pos-cli-test-run.js" }, "devDependencies": { - "@eslint/js": "^9.17.0", - "@vitest/coverage-v8": "^4.0.17", - "dotenv": "^16.6.1", - "eslint": "^9.17.0", + "@eslint/js": "^9.39.2", + "@vitest/coverage-v8": "^4.0.18", + "dotenv": "^17.3.1", + "eslint": "^9.39.2", "eslint-plugin-import": "^2.31.0", "eslint-plugin-n": "^17.15.1", "eslint-plugin-promise": "^7.2.1", @@ -172,9 +175,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", - "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", "cpu": [ "ppc64" ], @@ -189,9 +192,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", - "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", "cpu": [ "arm" ], @@ -206,9 +209,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", - "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", "cpu": [ "arm64" ], @@ -223,9 +226,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", - "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", "cpu": [ "x64" ], @@ -240,9 +243,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", - "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", "cpu": [ "arm64" ], @@ -257,9 +260,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", - "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", "cpu": [ "x64" ], @@ -274,9 +277,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", - "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", "cpu": [ "arm64" ], @@ -291,9 +294,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", - "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", "cpu": [ "x64" ], @@ -308,9 +311,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", - "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", "cpu": [ "arm" ], @@ -325,9 +328,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", - "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", "cpu": [ "arm64" ], @@ -342,9 +345,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", - "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", "cpu": [ "ia32" ], @@ -359,9 +362,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", - "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", "cpu": [ "loong64" ], @@ -376,9 +379,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", - "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", "cpu": [ "mips64el" ], @@ -393,9 +396,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", - "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", "cpu": [ "ppc64" ], @@ -410,9 +413,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", - "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", "cpu": [ "riscv64" ], @@ -427,9 +430,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", - "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", "cpu": [ "s390x" ], @@ -444,9 +447,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", - "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", "cpu": [ "x64" ], @@ -461,9 +464,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", - "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", "cpu": [ "arm64" ], @@ -478,9 +481,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", - "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", "cpu": [ "x64" ], @@ -495,9 +498,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", - "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", "cpu": [ "arm64" ], @@ -512,9 +515,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", - "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", "cpu": [ "x64" ], @@ -529,9 +532,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", - "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", "cpu": [ "arm64" ], @@ -546,9 +549,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", - "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", "cpu": [ "x64" ], @@ -563,9 +566,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", - "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", "cpu": [ "arm64" ], @@ -580,9 +583,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", - "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", "cpu": [ "ia32" ], @@ -597,9 +600,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", - "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", "cpu": [ "x64" ], @@ -829,13 +832,13 @@ } }, "node_modules/@inquirer/checkbox": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.0.4.tgz", - "integrity": "sha512-DrAMU3YBGMUAp6ArwTIp/25CNDtDbxk7UjIrrtM25JVVrlVYlVzHh5HR1BDFu9JMyUoZ4ZanzeaHqNDttf3gVg==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.0.7.tgz", + "integrity": "sha512-OGJykc3mpe4kiNXwXlDlP4MFqZso5QOoXJaJrmTJI+Y+gq68wxTyCUIFv34qgwZTHnGGeqwUKGOi4oxptTe+ZQ==", "license": "MIT", "dependencies": { "@inquirer/ansi": "^2.0.3", - "@inquirer/core": "^11.1.1", + "@inquirer/core": "^11.1.4", "@inquirer/figures": "^2.0.3", "@inquirer/type": "^4.0.3" }, @@ -852,12 +855,12 @@ } }, "node_modules/@inquirer/confirm": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.0.4.tgz", - "integrity": "sha512-WdaPe7foUnoGYvXzH4jp4wH/3l+dBhZ3uwhKjXjwdrq5tEIFaANxj6zrGHxLdsIA0yKM0kFPVcEalOZXBB5ISA==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.0.7.tgz", + "integrity": "sha512-lKdNloHLnGoBUUwprxKFd+SpkAnyQTBrZACFPtxDq9GiLICD2t+CaeJ1Ku4goZsGPyBIFc2YYpmDSJLEXoc16g==", "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.1", + "@inquirer/core": "^11.1.4", "@inquirer/type": "^4.0.3" }, "engines": { @@ -873,18 +876,18 @@ } }, "node_modules/@inquirer/core": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.1.1.tgz", - "integrity": "sha512-hV9o15UxX46OyQAtaoMqAOxGR8RVl1aZtDx1jHbCtSJy1tBdTfKxLPKf7utsE4cRy4tcmCQ4+vdV+ca+oNxqNA==", + "version": "11.1.4", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.1.4.tgz", + "integrity": "sha512-1HvwyASF0tE/7W8geTTn0ydiWb463pq4SBIpaWcVabTrw55+CiRmytV9eZoqt3ohchsPw4Vv60jfNiI6YljVUg==", "license": "MIT", "dependencies": { "@inquirer/ansi": "^2.0.3", "@inquirer/figures": "^2.0.3", "@inquirer/type": "^4.0.3", "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", "mute-stream": "^3.0.0", - "signal-exit": "^4.1.0", - "wrap-ansi": "^9.0.2" + "signal-exit": "^4.1.0" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -899,12 +902,12 @@ } }, "node_modules/@inquirer/editor": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.0.4.tgz", - "integrity": "sha512-QI3Jfqcv6UO2/VJaEFONH8Im1ll++Xn/AJTBn9Xf+qx2M+H8KZAdQ5sAe2vtYlo+mLW+d7JaMJB4qWtK4BG3pw==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.0.7.tgz", + "integrity": "sha512-d36tisyvmxH7H+LICTeTofrKmJ+R1jAYV8q0VTYh96cm8mP2BdGh9TAIqbCGcciX8/dr0fJW+VJq3jAnco5xfg==", "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.1", + "@inquirer/core": "^11.1.4", "@inquirer/external-editor": "^2.0.3", "@inquirer/type": "^4.0.3" }, @@ -921,12 +924,12 @@ } }, "node_modules/@inquirer/expand": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.0.4.tgz", - "integrity": "sha512-0I/16YwPPP0Co7a5MsomlZLpch48NzYfToyqYAOWtBmaXSB80RiNQ1J+0xx2eG+Wfxt0nHtpEWSRr6CzNVnOGg==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.0.7.tgz", + "integrity": "sha512-h2RRFzDdeXOXLrJOUAaHzyR1HbiZlrl/NxorOAgNrzhiSThbwEFVOf88lJzbF5WXGrQ2RwqK2h0xAE7eo8QP5w==", "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.1", + "@inquirer/core": "^11.1.4", "@inquirer/type": "^4.0.3" }, "engines": { @@ -972,12 +975,12 @@ } }, "node_modules/@inquirer/input": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.0.4.tgz", - "integrity": "sha512-4B3s3jvTREDFvXWit92Yc6jF1RJMDy2VpSqKtm4We2oVU65YOh2szY5/G14h4fHlyQdpUmazU5MPCFZPRJ0AOw==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.0.7.tgz", + "integrity": "sha512-b+eKk/eUvKLQ6c+rDu9u4I1+twdjOfrEaw9NURDpCrWYJTWL1/JQEudZi0AeqXDGcn0tMdhlfpEfjcqr33B/qw==", "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.1", + "@inquirer/core": "^11.1.4", "@inquirer/type": "^4.0.3" }, "engines": { @@ -993,12 +996,12 @@ } }, "node_modules/@inquirer/number": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.0.4.tgz", - "integrity": "sha512-CmMp9LF5HwE+G/xWsC333TlCzYYbXMkcADkKzcawh49fg2a1ryLc7JL1NJYYt1lJ+8f4slikNjJM9TEL/AljYQ==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.0.7.tgz", + "integrity": "sha512-/l5KxcLFFexzOwh8DcVOI7zgVQCwcBt/9yHWtvMdYvaYLMK5J31BSR/fO3Z9WauA21qwAkDGRvYNHIG4vR6JwA==", "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.1", + "@inquirer/core": "^11.1.4", "@inquirer/type": "^4.0.3" }, "engines": { @@ -1014,13 +1017,13 @@ } }, "node_modules/@inquirer/password": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.0.4.tgz", - "integrity": "sha512-ZCEPyVYvHK4W4p2Gy6sTp9nqsdHQCfiPXIP9LbJVW4yCinnxL/dDDmPaEZVysGrj8vxVReRnpfS2fOeODe9zjg==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.0.7.tgz", + "integrity": "sha512-h3Rgzb8nFMxgK6X5246MtwTX/rXs5Z58DbeuUKI6W5dQ+CZusEunNeT7rosdB+Upn79BkfZJO0AaiH8MIi9v1A==", "license": "MIT", "dependencies": { "@inquirer/ansi": "^2.0.3", - "@inquirer/core": "^11.1.1", + "@inquirer/core": "^11.1.4", "@inquirer/type": "^4.0.3" }, "engines": { @@ -1036,21 +1039,21 @@ } }, "node_modules/@inquirer/prompts": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.2.0.tgz", - "integrity": "sha512-rqTzOprAj55a27jctS3vhvDDJzYXsr33WXTjODgVOru21NvBo9yIgLIAf7SBdSV0WERVly3dR6TWyp7ZHkvKFA==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.2.1.tgz", + "integrity": "sha512-76knJFW2oXdI6If5YRmEoT5u7l+QroXYrMiINFcb97LsyECgsbO9m6iWlPuhBtaFgNITPHQCk3wbex38q8gsjg==", "license": "MIT", "dependencies": { - "@inquirer/checkbox": "^5.0.4", - "@inquirer/confirm": "^6.0.4", - "@inquirer/editor": "^5.0.4", - "@inquirer/expand": "^5.0.4", - "@inquirer/input": "^5.0.4", - "@inquirer/number": "^4.0.4", - "@inquirer/password": "^5.0.4", - "@inquirer/rawlist": "^5.2.0", - "@inquirer/search": "^4.1.0", - "@inquirer/select": "^5.0.4" + "@inquirer/checkbox": "^5.0.5", + "@inquirer/confirm": "^6.0.5", + "@inquirer/editor": "^5.0.5", + "@inquirer/expand": "^5.0.5", + "@inquirer/input": "^5.0.5", + "@inquirer/number": "^4.0.5", + "@inquirer/password": "^5.0.5", + "@inquirer/rawlist": "^5.2.1", + "@inquirer/search": "^4.1.1", + "@inquirer/select": "^5.0.5" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -1065,12 +1068,12 @@ } }, "node_modules/@inquirer/rawlist": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.2.0.tgz", - "integrity": "sha512-CciqGoOUMrFo6HxvOtU5uL8fkjCmzyeB6fG7O1vdVAZVSopUBYECOwevDBlqNLyyYmzpm2Gsn/7nLrpruy9RFg==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.2.3.tgz", + "integrity": "sha512-EuvV6N/T3xDmRVihAOqfnbmtHGdu26TocRKANvcX/7nLLD8QO0c22Dtlc5C15+V433d9v0E0SSyqywdNCIXfLg==", "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.1", + "@inquirer/core": "^11.1.4", "@inquirer/type": "^4.0.3" }, "engines": { @@ -1086,12 +1089,12 @@ } }, "node_modules/@inquirer/search": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.1.0.tgz", - "integrity": "sha512-EAzemfiP4IFvIuWnrHpgZs9lAhWDA0GM3l9F4t4mTQ22IFtzfrk8xbkMLcAN7gmVML9O/i+Hzu8yOUyAaL6BKA==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.1.3.tgz", + "integrity": "sha512-6BE8MqVMakEiLDRtrwj9fbx6AYhuj7McW3GOkOoEiQ5Qkh6v6f5HCoYNqSRE4j6nT+u+73518iUQPE+mZYlAjA==", "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.1", + "@inquirer/core": "^11.1.4", "@inquirer/figures": "^2.0.3", "@inquirer/type": "^4.0.3" }, @@ -1108,13 +1111,13 @@ } }, "node_modules/@inquirer/select": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.0.4.tgz", - "integrity": "sha512-s8KoGpPYMEQ6WXc0dT9blX2NtIulMdLOO3LA1UKOiv7KFWzlJ6eLkEYTDBIi+JkyKXyn8t/CD6TinxGjyLt57g==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.0.7.tgz", + "integrity": "sha512-1JUJIR+Z2PsvwP6VWty7aE0aCPaT2cy2c4Vp3LPhL2Pi3+aXewAld/AyJ/CW9XWx1JbKxmdElfvls/G/7jG7ZQ==", "license": "MIT", "dependencies": { "@inquirer/ansi": "^2.0.3", - "@inquirer/core": "^11.1.1", + "@inquirer/core": "^11.1.4", "@inquirer/figures": "^2.0.3", "@inquirer/type": "^4.0.3" }, @@ -1264,9 +1267,9 @@ "license": "MIT" }, "node_modules/@mswjs/interceptors": { - "version": "0.39.8", - "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.39.8.tgz", - "integrity": "sha512-2+BzZbjRO7Ct61k8fMNHEtoKjeWI9pIlHFTqBwZ5icHpqszIgEZbjb1MW5Z0+bITTCTl3gk4PDBxs9tA/csXvA==", + "version": "0.41.3", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.41.3.tgz", + "integrity": "sha512-cXu86tF4VQVfwz8W1SPbhoRyHJkti6mjH/XJIxp40jhO4j2k1m4KYrEykxqWPkFF3vrK4rgQppBh//AwyGSXPA==", "dev": true, "license": "MIT", "dependencies": { @@ -2027,9 +2030,9 @@ } }, "node_modules/@platformos/liquid-html-parser": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@platformos/liquid-html-parser/-/liquid-html-parser-0.0.4.tgz", - "integrity": "sha512-QHNEJd5DLug6fnocu8Lv1FMEEKu/LHbIlzt0sjvP3yosN/2g6fm0NnrJL5nZXfzfjr9v8yJzHayGIXQZKlZn3w==", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@platformos/liquid-html-parser/-/liquid-html-parser-0.0.5.tgz", + "integrity": "sha512-bTyFrPbQ7mkiQpEMOAQSrEi8AsfeGw6h0NKb4aTsVne7mDYtP+sQghunw87g2pYcKemYjdiiVddCRkYGJnamuA==", "license": "MIT", "dependencies": { "line-column": "^1.0.2", @@ -2037,12 +2040,12 @@ } }, "node_modules/@platformos/platformos-check-common": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@platformos/platformos-check-common/-/platformos-check-common-0.0.4.tgz", - "integrity": "sha512-UrixHAr/NgxeSCOO1v9iQrL9WlygelTAkyJ08hxKk8XYMCcvGnJ47+foaAsFt1sc/hYyrvvF4/7llGqLHvqUAg==", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@platformos/platformos-check-common/-/platformos-check-common-0.0.5.tgz", + "integrity": "sha512-5OVTcskbTHPYIsDpnN52ol/DTSFmLq6tB+56tx+db2YJxIXQKzzHYIXfEkt4TI3YT7CFsp6ygf5l1H8x1W/57Q==", "license": "MIT", "dependencies": { - "@platformos/liquid-html-parser": "0.0.4", + "@platformos/liquid-html-parser": "0.0.5", "cross-fetch": "^4.0.0", "graphql": "^16.12.0", "js-yaml": "^3.14.1", @@ -2101,12 +2104,12 @@ } }, "node_modules/@platformos/platformos-check-docs-updater": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@platformos/platformos-check-docs-updater/-/platformos-check-docs-updater-0.0.4.tgz", - "integrity": "sha512-0wh0hVNircon5IGpBhPKX3jW15XRu11PXXr2mgyVQlIJg2f+V96oHkarX1I4H9yV4japGVXad1BUpPTtKcTSGg==", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@platformos/platformos-check-docs-updater/-/platformos-check-docs-updater-0.0.5.tgz", + "integrity": "sha512-W20BlkoAG8PAdWCtZiUWPqKgB+gKyyMHzWRPSD/mJlFnQ8BizB7XWvJJYrTMyKQSSASTXUtesDigux4wsRsz4w==", "license": "MIT", "dependencies": { - "@platformos/platformos-check-common": "0.0.4", + "@platformos/platformos-check-common": "0.0.5", "env-paths": "^2.2.1", "he": "^1.2.0", "node-fetch": "^2.6.11" @@ -2125,13 +2128,13 @@ } }, "node_modules/@platformos/platformos-check-node": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@platformos/platformos-check-node/-/platformos-check-node-0.0.4.tgz", - "integrity": "sha512-Q9+datYAkQOReeW7jQewvsJmIZOkgK6mICnCkEvp0tk8qppzTM0kkJNGPKSoQWBxWtWmeIN14x/3C5/I5I6i9w==", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@platformos/platformos-check-node/-/platformos-check-node-0.0.5.tgz", + "integrity": "sha512-JtqeIro+tVNzb4vsLozKKdLlhF5r8z5VMkhAAky4mJIfCiCO6oqIqRcmlyiRF/M/aMg5hW7DJd1nworc1uwoYA==", "license": "MIT", "dependencies": { - "@platformos/platformos-check-common": "0.0.4", - "@platformos/platformos-check-docs-updater": "0.0.4", + "@platformos/platformos-check-common": "0.0.5", + "@platformos/platformos-check-docs-updater": "0.0.5", "glob": "^8.0.3", "vscode-uri": "^3.0.7", "yaml": "^2.3.0" @@ -2179,9 +2182,9 @@ } }, "node_modules/@platformos/platformos-common": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@platformos/platformos-common/-/platformos-common-0.0.4.tgz", - "integrity": "sha512-plPOxM6mH8mtz/bJtCnewtuDKrK3Cmwv9l9cvREutnMF6ZJ+lrinPbKskFq5HDsNA8A7MfqdbwqsLI0k/UxAMw==", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@platformos/platformos-common/-/platformos-common-0.0.5.tgz", + "integrity": "sha512-Jj+WqIRVpwsll5bjolbCZH4ot8wLFAKka716mb7rL7ZX5xpNhdCQDaUfmgZjU/4yFU6H863Mdk8Y53ufaDIWcg==", "license": "MIT", "dependencies": { "js-yaml": "^3.14.1", @@ -2253,9 +2256,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.3.tgz", - "integrity": "sha512-qyX8+93kK/7R5BEXPC2PjUt0+fS/VO2BVHjEHyIEWiYn88rcRBHmdLgoJjktBltgAf+NY7RfCGB1SoyKS/p9kg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz", + "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==", "cpu": [ "arm" ], @@ -2267,9 +2270,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.3.tgz", - "integrity": "sha512-6sHrL42bjt5dHQzJ12Q4vMKfN+kUnZ0atHHnv4V0Wd9JMTk7FDzSY35+7qbz3ypQYMBPANbpGK7JpnWNnhGt8g==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz", + "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==", "cpu": [ "arm64" ], @@ -2281,9 +2284,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.3.tgz", - "integrity": "sha512-1ht2SpGIjEl2igJ9AbNpPIKzb1B5goXOcmtD0RFxnwNuMxqkR6AUaaErZz+4o+FKmzxcSNBOLrzsICZVNYa1Rw==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz", + "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==", "cpu": [ "arm64" ], @@ -2295,9 +2298,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.3.tgz", - "integrity": "sha512-FYZ4iVunXxtT+CZqQoPVwPhH7549e/Gy7PIRRtq4t5f/vt54pX6eG9ebttRH6QSH7r/zxAFA4EZGlQ0h0FvXiA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz", + "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==", "cpu": [ "x64" ], @@ -2309,9 +2312,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.3.tgz", - "integrity": "sha512-M/mwDCJ4wLsIgyxv2Lj7Len+UMHd4zAXu4GQ2UaCdksStglWhP61U3uowkaYBQBhVoNpwx5Hputo8eSqM7K82Q==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz", + "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==", "cpu": [ "arm64" ], @@ -2323,9 +2326,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.3.tgz", - "integrity": "sha512-5jZT2c7jBCrMegKYTYTpni8mg8y3uY8gzeq2ndFOANwNuC/xJbVAoGKR9LhMDA0H3nIhvaqUoBEuJoICBudFrA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz", + "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==", "cpu": [ "x64" ], @@ -2337,9 +2340,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.3.tgz", - "integrity": "sha512-YeGUhkN1oA+iSPzzhEjVPS29YbViOr8s4lSsFaZKLHswgqP911xx25fPOyE9+khmN6W4VeM0aevbDp4kkEoHiA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz", + "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==", "cpu": [ "arm" ], @@ -2351,9 +2354,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.3.tgz", - "integrity": "sha512-eo0iOIOvcAlWB3Z3eh8pVM8hZ0oVkK3AjEM9nSrkSug2l15qHzF3TOwT0747omI6+CJJvl7drwZepT+re6Fy/w==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz", + "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==", "cpu": [ "arm" ], @@ -2365,9 +2368,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.3.tgz", - "integrity": "sha512-DJay3ep76bKUDImmn//W5SvpjRN5LmK/ntWyeJs/dcnwiiHESd3N4uteK9FDLf0S0W8E6Y0sVRXpOCoQclQqNg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz", + "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==", "cpu": [ "arm64" ], @@ -2379,9 +2382,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.3.tgz", - "integrity": "sha512-BKKWQkY2WgJ5MC/ayvIJTHjy0JUGb5efaHCUiG/39sSUvAYRBaO3+/EK0AZT1RF3pSj86O24GLLik9mAYu0IJg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz", + "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==", "cpu": [ "arm64" ], @@ -2393,9 +2396,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.3.tgz", - "integrity": "sha512-Q9nVlWtKAG7ISW80OiZGxTr6rYtyDSkauHUtvkQI6TNOJjFvpj4gcH+KaJihqYInnAzEEUetPQubRwHef4exVg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz", + "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==", "cpu": [ "loong64" ], @@ -2407,9 +2410,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.3.tgz", - "integrity": "sha512-2H5LmhzrpC4fFRNwknzmmTvvyJPHwESoJgyReXeFoYYuIDfBhP29TEXOkCJE/KxHi27mj7wDUClNq78ue3QEBQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz", + "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==", "cpu": [ "loong64" ], @@ -2421,9 +2424,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.3.tgz", - "integrity": "sha512-9S542V0ie9LCTznPYlvaeySwBeIEa7rDBgLHKZ5S9DBgcqdJYburabm8TqiqG6mrdTzfV5uttQRHcbKff9lWtA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz", + "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==", "cpu": [ "ppc64" ], @@ -2435,9 +2438,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.3.tgz", - "integrity": "sha512-ukxw+YH3XXpcezLgbJeasgxyTbdpnNAkrIlFGDl7t+pgCxZ89/6n1a+MxlY7CegU+nDgrgdqDelPRNQ/47zs0g==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz", + "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==", "cpu": [ "ppc64" ], @@ -2449,9 +2452,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.3.tgz", - "integrity": "sha512-Iauw9UsTTvlF++FhghFJjqYxyXdggXsOqGpFBylaRopVpcbfyIIsNvkf9oGwfgIcf57z3m8+/oSYTo6HutBFNw==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz", + "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==", "cpu": [ "riscv64" ], @@ -2463,9 +2466,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.3.tgz", - "integrity": "sha512-3OqKAHSEQXKdq9mQ4eajqUgNIK27VZPW3I26EP8miIzuKzCJ3aW3oEn2pzF+4/Hj/Moc0YDsOtBgT5bZ56/vcA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz", + "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==", "cpu": [ "riscv64" ], @@ -2477,9 +2480,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.3.tgz", - "integrity": "sha512-0CM8dSVzVIaqMcXIFej8zZrSFLnGrAE8qlNbbHfTw1EEPnFTg1U1ekI0JdzjPyzSfUsHWtodilQQG/RA55berA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz", + "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==", "cpu": [ "s390x" ], @@ -2491,9 +2494,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.3.tgz", - "integrity": "sha512-+fgJE12FZMIgBaKIAGd45rxf+5ftcycANJRWk8Vz0NnMTM5rADPGuRFTYar+Mqs560xuART7XsX2lSACa1iOmQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz", + "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==", "cpu": [ "x64" ], @@ -2505,9 +2508,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.3.tgz", - "integrity": "sha512-tMD7NnbAolWPzQlJQJjVFh/fNH3K/KnA7K8gv2dJWCwwnaK6DFCYST1QXYWfu5V0cDwarWC8Sf/cfMHniNq21A==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz", + "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==", "cpu": [ "x64" ], @@ -2519,9 +2522,9 @@ ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.3.tgz", - "integrity": "sha512-u5KsqxOxjEeIbn7bUK1MPM34jrnPwjeqgyin4/N6e/KzXKfpE9Mi0nCxcQjaM9lLmPcHmn/xx1yOjgTMtu1jWQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz", + "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==", "cpu": [ "x64" ], @@ -2533,9 +2536,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.3.tgz", - "integrity": "sha512-vo54aXwjpTtsAnb3ca7Yxs9t2INZg7QdXN/7yaoG7nPGbOBXYXQY41Km+S1Ov26vzOAzLcAjmMdjyEqS1JkVhw==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz", + "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==", "cpu": [ "arm64" ], @@ -2547,9 +2550,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.3.tgz", - "integrity": "sha512-HI+PIVZ+m+9AgpnY3pt6rinUdRYrGHvmVdsNQ4odNqQ/eRF78DVpMR7mOq7nW06QxpczibwBmeQzB68wJ+4W4A==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz", + "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==", "cpu": [ "arm64" ], @@ -2561,9 +2564,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.3.tgz", - "integrity": "sha512-vRByotbdMo3Wdi+8oC2nVxtc3RkkFKrGaok+a62AT8lz/YBuQjaVYAS5Zcs3tPzW43Vsf9J0wehJbUY5xRSekA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz", + "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==", "cpu": [ "ia32" ], @@ -2575,9 +2578,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.3.tgz", - "integrity": "sha512-POZHq7UeuzMJljC5NjKi8vKMFN6/5EOqcX1yGntNLp7rUTpBAXQ1hW8kWPFxYLv07QMcNM75xqVLGPWQq6TKFA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz", + "integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==", "cpu": [ "x64" ], @@ -2589,9 +2592,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.3.tgz", - "integrity": "sha512-aPFONczE4fUFKNXszdvnd2GqKEYQdV5oEsIbKPujJmWlCI9zEsv1Otig8RKK+X9bed9gFUN6LAeN4ZcNuu4zjg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz", + "integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==", "cpu": [ "x64" ], @@ -2838,14 +2841,14 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.0.17.tgz", - "integrity": "sha512-/6zU2FLGg0jsd+ePZcwHRy3+WpNTBBhDY56P4JTRqUN/Dp6CvOEa9HrikcQ4KfV2b2kAHUFB4dl1SuocWXSFEw==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.0.18.tgz", + "integrity": "sha512-7i+N2i0+ME+2JFZhfuz7Tg/FqKtilHjGyGvoHYQ6iLV0zahbsJ9sljC9OcFcPDbhYKCet+sG8SsVqlyGvPflZg==", "dev": true, "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^1.0.2", - "@vitest/utils": "4.0.17", + "@vitest/utils": "4.0.18", "ast-v8-to-istanbul": "^0.3.10", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", @@ -2859,8 +2862,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "4.0.17", - "vitest": "4.0.17" + "@vitest/browser": "4.0.18", + "vitest": "4.0.18" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -2869,16 +2872,16 @@ } }, "node_modules/@vitest/expect": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.17.tgz", - "integrity": "sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.18.tgz", + "integrity": "sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==", "dev": true, "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", - "@vitest/spy": "4.0.17", - "@vitest/utils": "4.0.17", + "@vitest/spy": "4.0.18", + "@vitest/utils": "4.0.18", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" }, @@ -2887,13 +2890,13 @@ } }, "node_modules/@vitest/mocker": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.17.tgz", - "integrity": "sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.18.tgz", + "integrity": "sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "4.0.17", + "@vitest/spy": "4.0.18", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, @@ -2914,9 +2917,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.17.tgz", - "integrity": "sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.18.tgz", + "integrity": "sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==", "dev": true, "license": "MIT", "dependencies": { @@ -2927,13 +2930,13 @@ } }, "node_modules/@vitest/runner": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.17.tgz", - "integrity": "sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.18.tgz", + "integrity": "sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.0.17", + "@vitest/utils": "4.0.18", "pathe": "^2.0.3" }, "funding": { @@ -2941,13 +2944,13 @@ } }, "node_modules/@vitest/snapshot": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.17.tgz", - "integrity": "sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.18.tgz", + "integrity": "sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.17", + "@vitest/pretty-format": "4.0.18", "magic-string": "^0.30.21", "pathe": "^2.0.3" }, @@ -2956,9 +2959,9 @@ } }, "node_modules/@vitest/spy": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.17.tgz", - "integrity": "sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.18.tgz", + "integrity": "sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==", "dev": true, "license": "MIT", "funding": { @@ -2966,13 +2969,13 @@ } }, "node_modules/@vitest/utils": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.17.tgz", - "integrity": "sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.18.tgz", + "integrity": "sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.17", + "@vitest/pretty-format": "4.0.18", "tinyrainbow": "^3.0.3" }, "funding": { @@ -4603,13 +4606,13 @@ } }, "node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", "inBundle": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/common-ancestor-path": { @@ -5087,9 +5090,9 @@ } }, "node_modules/dotenv": { - "version": "16.6.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", - "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", + "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -5410,9 +5413,9 @@ } }, "node_modules/esbuild": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", - "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -5423,32 +5426,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.2", - "@esbuild/android-arm": "0.27.2", - "@esbuild/android-arm64": "0.27.2", - "@esbuild/android-x64": "0.27.2", - "@esbuild/darwin-arm64": "0.27.2", - "@esbuild/darwin-x64": "0.27.2", - "@esbuild/freebsd-arm64": "0.27.2", - "@esbuild/freebsd-x64": "0.27.2", - "@esbuild/linux-arm": "0.27.2", - "@esbuild/linux-arm64": "0.27.2", - "@esbuild/linux-ia32": "0.27.2", - "@esbuild/linux-loong64": "0.27.2", - "@esbuild/linux-mips64el": "0.27.2", - "@esbuild/linux-ppc64": "0.27.2", - "@esbuild/linux-riscv64": "0.27.2", - "@esbuild/linux-s390x": "0.27.2", - "@esbuild/linux-x64": "0.27.2", - "@esbuild/netbsd-arm64": "0.27.2", - "@esbuild/netbsd-x64": "0.27.2", - "@esbuild/openbsd-arm64": "0.27.2", - "@esbuild/openbsd-x64": "0.27.2", - "@esbuild/openharmony-arm64": "0.27.2", - "@esbuild/sunos-x64": "0.27.2", - "@esbuild/win32-arm64": "0.27.2", - "@esbuild/win32-ia32": "0.27.2", - "@esbuild/win32-x64": "0.27.2" + "@esbuild/aix-ppc64": "0.27.3", + "@esbuild/android-arm": "0.27.3", + "@esbuild/android-arm64": "0.27.3", + "@esbuild/android-x64": "0.27.3", + "@esbuild/darwin-arm64": "0.27.3", + "@esbuild/darwin-x64": "0.27.3", + "@esbuild/freebsd-arm64": "0.27.3", + "@esbuild/freebsd-x64": "0.27.3", + "@esbuild/linux-arm": "0.27.3", + "@esbuild/linux-arm64": "0.27.3", + "@esbuild/linux-ia32": "0.27.3", + "@esbuild/linux-loong64": "0.27.3", + "@esbuild/linux-mips64el": "0.27.3", + "@esbuild/linux-ppc64": "0.27.3", + "@esbuild/linux-riscv64": "0.27.3", + "@esbuild/linux-s390x": "0.27.3", + "@esbuild/linux-x64": "0.27.3", + "@esbuild/netbsd-arm64": "0.27.3", + "@esbuild/netbsd-x64": "0.27.3", + "@esbuild/openbsd-arm64": "0.27.3", + "@esbuild/openbsd-x64": "0.27.3", + "@esbuild/openharmony-arm64": "0.27.3", + "@esbuild/sunos-x64": "0.27.3", + "@esbuild/win32-arm64": "0.27.3", + "@esbuild/win32-ia32": "0.27.3", + "@esbuild/win32-x64": "0.27.3" } }, "node_modules/escape-goat": { @@ -5686,9 +5689,9 @@ } }, "node_modules/eslint-plugin-n": { - "version": "17.23.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.23.2.tgz", - "integrity": "sha512-RhWBeb7YVPmNa2eggvJooiuehdL76/bbfj/OJewyoGT80qn5PXdz8zMOTO6YHOsI7byPt7+Ighh/i/4a5/v7hw==", + "version": "17.24.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.24.0.tgz", + "integrity": "sha512-/gC7/KAYmfNnPNOb3eu8vw+TdVnV0zhdQwexsw6FLXbhzroVj20vRn2qL8lDWDGnAQ2J8DhdfvXxX9EoxvERvw==", "dev": true, "license": "MIT", "dependencies": { @@ -6133,6 +6136,30 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-string-truncated-width": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz", + "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==", + "license": "MIT" + }, + "node_modules/fast-string-width": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz", + "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==", + "license": "MIT", + "dependencies": { + "fast-string-truncated-width": "^3.0.2" + } + }, + "node_modules/fast-wrap-ansi": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.0.tgz", + "integrity": "sha512-rLV8JHxTyhVmFYhBJuMujcrHqOT2cnO5Zxj37qROj23CP39GXubJRBUFF0z8KFK77Uc0SukZUf7JZhsVEQ6n8w==", + "license": "MIT", + "dependencies": { + "fast-string-width": "^3.0.2" + } + }, "node_modules/fastq": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", @@ -7173,14 +7200,14 @@ } }, "node_modules/inquirer": { - "version": "13.2.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-13.2.1.tgz", - "integrity": "sha512-kjIN+joqgbSncQJ6GfN7gV9AbDQlMA+hJ96xcwkQUwP9KN/ZIusoJ2mAfdt0LPrZJQsEyk5i/YrgJQTxSgzlPw==", + "version": "13.2.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-13.2.5.tgz", + "integrity": "sha512-JHvVPgOIre0NrA9o8BGHUBh9rNuKkN1gS1ffbYgy3BuuJmJZhnFy9IHz3pcNbZm9zK6qTYvQ6LN5wl3Xcg4Jkw==", "license": "MIT", "dependencies": { "@inquirer/ansi": "^2.0.3", - "@inquirer/core": "^11.1.1", - "@inquirer/prompts": "^8.2.0", + "@inquirer/core": "^11.1.4", + "@inquirer/prompts": "^8.2.1", "@inquirer/type": "^4.0.3", "mute-stream": "^3.0.0", "run-async": "^4.0.6", @@ -8966,13 +8993,13 @@ } }, "node_modules/nock": { - "version": "14.0.10", - "resolved": "https://registry.npmjs.org/nock/-/nock-14.0.10.tgz", - "integrity": "sha512-Q7HjkpyPeLa0ZVZC5qpxBt5EyLczFJ91MEewQiIi9taWuA0KB/MDJlUWtON+7dGouVdADTQsf9RA7TZk6D8VMw==", + "version": "14.0.11", + "resolved": "https://registry.npmjs.org/nock/-/nock-14.0.11.tgz", + "integrity": "sha512-u5xUnYE+UOOBA6SpELJheMCtj2Laqx15Vl70QxKo43Wz/6nMHXS7PrEioXLjXAwhmawdEMNImwKCcPhBJWbKVw==", "dev": true, "license": "MIT", "dependencies": { - "@mswjs/interceptors": "^0.39.5", + "@mswjs/interceptors": "^0.41.0", "json-stringify-safe": "^5.0.1", "propagate": "^2.0.0" }, @@ -9456,9 +9483,9 @@ "license": "BSD-2-Clause" }, "node_modules/ora": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-9.1.0.tgz", - "integrity": "sha512-53uuLsXHOAJl5zLrUrzY9/kE+uIFEx7iaH4g2BIJQK4LZjY4LpCCYZVKDWIkL+F01wAaCg93duQ1whnK/AmY1A==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-9.3.0.tgz", + "integrity": "sha512-lBX72MWFduWEf7v7uWf5DHp9Jn5BI8bNPGuFgtXMmr2uDz2Gz2749y3am3agSDdkhHPHYmmxEGSKH85ZLGzgXw==", "license": "MIT", "dependencies": { "chalk": "^5.6.2", @@ -9467,7 +9494,7 @@ "is-interactive": "^2.0.0", "is-unicode-supported": "^2.1.0", "log-symbols": "^7.0.1", - "stdin-discarder": "^0.2.2", + "stdin-discarder": "^0.3.1", "string-width": "^8.1.0" }, "engines": { @@ -10444,9 +10471,9 @@ } }, "node_modules/rollup": { - "version": "4.55.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.3.tgz", - "integrity": "sha512-y9yUpfQvetAjiDLtNMf1hL9NXchIJgWt6zIKeoB+tCd3npX08Eqfzg60V9DhIGVMtQ0AlMkFw5xa+AQ37zxnAA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz", + "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", "dev": true, "license": "MIT", "dependencies": { @@ -10460,31 +10487,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.55.3", - "@rollup/rollup-android-arm64": "4.55.3", - "@rollup/rollup-darwin-arm64": "4.55.3", - "@rollup/rollup-darwin-x64": "4.55.3", - "@rollup/rollup-freebsd-arm64": "4.55.3", - "@rollup/rollup-freebsd-x64": "4.55.3", - "@rollup/rollup-linux-arm-gnueabihf": "4.55.3", - "@rollup/rollup-linux-arm-musleabihf": "4.55.3", - "@rollup/rollup-linux-arm64-gnu": "4.55.3", - "@rollup/rollup-linux-arm64-musl": "4.55.3", - "@rollup/rollup-linux-loong64-gnu": "4.55.3", - "@rollup/rollup-linux-loong64-musl": "4.55.3", - "@rollup/rollup-linux-ppc64-gnu": "4.55.3", - "@rollup/rollup-linux-ppc64-musl": "4.55.3", - "@rollup/rollup-linux-riscv64-gnu": "4.55.3", - "@rollup/rollup-linux-riscv64-musl": "4.55.3", - "@rollup/rollup-linux-s390x-gnu": "4.55.3", - "@rollup/rollup-linux-x64-gnu": "4.55.3", - "@rollup/rollup-linux-x64-musl": "4.55.3", - "@rollup/rollup-openbsd-x64": "4.55.3", - "@rollup/rollup-openharmony-arm64": "4.55.3", - "@rollup/rollup-win32-arm64-msvc": "4.55.3", - "@rollup/rollup-win32-ia32-msvc": "4.55.3", - "@rollup/rollup-win32-x64-gnu": "4.55.3", - "@rollup/rollup-win32-x64-msvc": "4.55.3", + "@rollup/rollup-android-arm-eabi": "4.57.1", + "@rollup/rollup-android-arm64": "4.57.1", + "@rollup/rollup-darwin-arm64": "4.57.1", + "@rollup/rollup-darwin-x64": "4.57.1", + "@rollup/rollup-freebsd-arm64": "4.57.1", + "@rollup/rollup-freebsd-x64": "4.57.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", + "@rollup/rollup-linux-arm-musleabihf": "4.57.1", + "@rollup/rollup-linux-arm64-gnu": "4.57.1", + "@rollup/rollup-linux-arm64-musl": "4.57.1", + "@rollup/rollup-linux-loong64-gnu": "4.57.1", + "@rollup/rollup-linux-loong64-musl": "4.57.1", + "@rollup/rollup-linux-ppc64-gnu": "4.57.1", + "@rollup/rollup-linux-ppc64-musl": "4.57.1", + "@rollup/rollup-linux-riscv64-gnu": "4.57.1", + "@rollup/rollup-linux-riscv64-musl": "4.57.1", + "@rollup/rollup-linux-s390x-gnu": "4.57.1", + "@rollup/rollup-linux-x64-gnu": "4.57.1", + "@rollup/rollup-linux-x64-musl": "4.57.1", + "@rollup/rollup-openbsd-x64": "4.57.1", + "@rollup/rollup-openharmony-arm64": "4.57.1", + "@rollup/rollup-win32-arm64-msvc": "4.57.1", + "@rollup/rollup-win32-ia32-msvc": "4.57.1", + "@rollup/rollup-win32-x64-gnu": "4.57.1", + "@rollup/rollup-win32-x64-msvc": "4.57.1", "fsevents": "~2.3.2" } }, @@ -10640,9 +10667,9 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -11165,9 +11192,9 @@ "license": "MIT" }, "node_modules/stdin-discarder": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", - "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.3.1.tgz", + "integrity": "sha512-reExS1kSGoElkextOcPkel4NE99S0BWxjUHQeDFnR8S993JxpPX7KU4MNmO19NXhlJp+8dmdCbKQVNgLJh2teA==", "license": "MIT", "engines": { "node": ">=18" @@ -12274,20 +12301,20 @@ } }, "node_modules/vitest": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.17.tgz", - "integrity": "sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.18.tgz", + "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@vitest/expect": "4.0.17", - "@vitest/mocker": "4.0.17", - "@vitest/pretty-format": "4.0.17", - "@vitest/runner": "4.0.17", - "@vitest/snapshot": "4.0.17", - "@vitest/spy": "4.0.17", - "@vitest/utils": "4.0.17", + "@vitest/expect": "4.0.18", + "@vitest/mocker": "4.0.18", + "@vitest/pretty-format": "4.0.18", + "@vitest/runner": "4.0.18", + "@vitest/snapshot": "4.0.18", + "@vitest/spy": "4.0.18", + "@vitest/utils": "4.0.18", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", "magic-string": "^0.30.21", @@ -12315,10 +12342,10 @@ "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.0.17", - "@vitest/browser-preview": "4.0.17", - "@vitest/browser-webdriverio": "4.0.17", - "@vitest/ui": "4.0.17", + "@vitest/browser-playwright": "4.0.18", + "@vitest/browser-preview": "4.0.18", + "@vitest/browser-webdriverio": "4.0.18", + "@vitest/ui": "4.0.18", "happy-dom": "*", "jsdom": "*" }, @@ -12936,9 +12963,9 @@ } }, "node_modules/yeoman-environment": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-5.1.2.tgz", - "integrity": "sha512-NFNm3T+Lk+57Lp+4SSnUdcHwSlyD5yq7KvDwx0xIUg5GngNPezWHLaejWRj3j26xgmlJXUw9371p1LZzv4s/6g==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-5.1.3.tgz", + "integrity": "sha512-SqxwIDysjTqNG1YX9LgrC5y5c6L9qfBjMD1u81co1Cze6kZwQzW8lzivCug283UbSOhEA0as39rO6EyzDJYhuw==", "license": "BSD-2-Clause", "dependencies": { "@yeoman/adapter": "^3.1.0", @@ -12978,15 +13005,6 @@ "mem-fs": "^4.1.2" } }, - "node_modules/yeoman-environment/node_modules/commander": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz", - "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==", - "license": "MIT", - "engines": { - "node": ">=20" - } - }, "node_modules/yeoman-environment/node_modules/locate-path": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-8.0.0.tgz", diff --git a/package.json b/package.json index 0a4ae4d82..3b6e3ef0b 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "body-parser": "^2.0.2", "chalk": "^5.6.2", "chokidar": "^5.0.0", - "commander": "^12.1.0", + "commander": "^14.0.3", "degit": "^2.8.4", "email-validator": "^2.0.4", "execa": "^9.5.2", @@ -72,8 +72,8 @@ "text-table": "^0.2.0", "unzipper": "^0.12.3", "update-notifier": "^7.3.1", - "@platformos/platformos-check-node": "^0.0.4", - "@platformos/platformos-common": "^0.0.4", + "@platformos/platformos-check-node": "^0.0.5", + "@platformos/platformos-common": "^0.0.5", "yaml": "^2.7.0", "yeoman-environment": "^5.1.2", "yeoman-generator": "^7.5.1" @@ -111,10 +111,10 @@ }, "homepage": "https://github.com/Platform-OS/pos-cli/issues#readme", "devDependencies": { - "@eslint/js": "^9.17.0", - "@vitest/coverage-v8": "^4.0.17", - "dotenv": "^16.6.1", - "eslint": "^9.17.0", + "@eslint/js": "^9.39.2", + "@vitest/coverage-v8": "^4.0.18", + "dotenv": "^17.3.1", + "eslint": "^9.39.2", "eslint-plugin-import": "^2.31.0", "eslint-plugin-n": "^17.15.1", "eslint-plugin-promise": "^7.2.1", diff --git a/test/unit/env-refresh-token-unit.test.js b/test/unit/env-refresh-token-unit.test.js index 956b67a00..5cc32ef56 100644 --- a/test/unit/env-refresh-token-unit.test.js +++ b/test/unit/env-refresh-token-unit.test.js @@ -1,6 +1,5 @@ import { vi, describe, test, expect, afterEach, beforeEach } from 'vitest'; import fs from 'fs'; -import { settingsFromDotPos } from '#lib/settings.js'; import { storeEnvironment } from '#lib/environments.js'; vi.mock('open', () => ({ diff --git a/test/unit/generators.test.js b/test/unit/generators.test.js index 961493f5a..f12fc1735 100644 --- a/test/unit/generators.test.js +++ b/test/unit/generators.test.js @@ -628,7 +628,7 @@ describe('pos-cli generate command', () => { // Ignore if doesn't exist } - const { stdout, code } = await run( + const { code } = await run( 'test/fixtures/yeoman/custom/generators/simple testitem --auto-confirm', { cwd: testDir, timeout: 15000 } );