diff --git a/package.json b/package.json index c07c5e286..9ce0db947 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "semver": "^7.7.4", "typescript": "5.5.4", "upath": "^2.0.1", - "vite": ">=7.3.2 <8", + "vite": "^8.0.13", "vitest": "^4.1.2" }, "scripts": { diff --git a/packages/ckeditor5-dev-manual-server/CHANGELOG.md b/packages/ckeditor5-dev-manual-server/CHANGELOG.md new file mode 100644 index 000000000..2cc0cf250 --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/CHANGELOG.md @@ -0,0 +1,4 @@ +Changelog +========= + +All changes in the package are documented in the main repository. See: https://github.com/ckeditor/ckeditor5-dev/blob/master/CHANGELOG.md. diff --git a/packages/ckeditor5-dev-manual-server/LICENSE.md b/packages/ckeditor5-dev-manual-server/LICENSE.md new file mode 100644 index 000000000..24a241576 --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/LICENSE.md @@ -0,0 +1,16 @@ +Software License Agreement +========================== + +Copyright (c) 2003-2026, [CKSource](http://cksource.com) Holding sp. z o.o. All rights reserved. + +Licensed under the terms of [GNU General Public License Version 2 or later](http://www.gnu.org/licenses/gpl.html). + +Sources of Intellectual Property Included in CKEditor +----------------------------------------------------- + +Where not otherwise indicated, all CKEditor content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, CKEditor will incorporate work done by developers outside of CKSource with their express permission. + +Trademarks +---------- + +**CKEditor** is a trademark of [CKSource](http://cksource.com) Holding sp. z o.o. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders. diff --git a/packages/ckeditor5-dev-manual-server/README.md b/packages/ckeditor5-dev-manual-server/README.md new file mode 100644 index 000000000..6f205ce8d --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/README.md @@ -0,0 +1,17 @@ +CKEditor 5 manual server +======================= + +[![npm version](https://badge.fury.io/js/%40ckeditor%2Fckeditor5-dev-manual-server.svg)](https://www.npmjs.com/package/@ckeditor/ckeditor5-dev-manual-server) +[![CircleCI](https://circleci.com/gh/ckeditor/ckeditor5-dev.svg?style=shield)](https://app.circleci.com/pipelines/github/ckeditor/ckeditor5-dev?branch=master) + +Used to extend Vite to create a manual test server for CKEditor 5. + +More information about development tools packages can be found at the following URL: . + +## Changelog + +See the [`CHANGELOG.md`](https://github.com/ckeditor/ckeditor5-dev/blob/master/packages/ckeditor5-dev-manual-server/CHANGELOG.md) file. + +## License + +Licensed under the terms of [GNU General Public License Version 2 or later](http://www.gnu.org/licenses/gpl.html). For full details about the license, please check the `LICENSE.md` file. diff --git a/packages/ckeditor5-dev-manual-server/package.json b/packages/ckeditor5-dev-manual-server/package.json new file mode 100644 index 000000000..5ad70724b --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/package.json @@ -0,0 +1,51 @@ +{ + "name": "@ckeditor/ckeditor5-dev-manual-server", + "version": "0.1.0", + "description": "Used to extend Vite to create a manual test server for CKEditor 5.", + "keywords": [], + "author": "CKSource (http://cksource.com/)", + "license": "GPL-2.0-or-later", + "homepage": "https://github.com/ckeditor/ckeditor5-dev/tree/master/packages/ckeditor5-dev-manual-server", + "bugs": "https://github.com/ckeditor/ckeditor5/issues", + "repository": { + "type": "git", + "url": "https://github.com/ckeditor/ckeditor5-dev.git", + "directory": "packages/ckeditor5-dev-manual-server" + }, + "engines": { + "node": ">=24.11.0", + "npm": ">=5.7.1" + }, + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist", + "theme" + ], + "scripts": { + "build": "rolldown -c rolldown.config.ts", + "dev": "rolldown -c rolldown.config.ts --watch", + "test": "vitest run --config vitest.config.ts", + "coverage": "vitest run --config vitest.config.ts --coverage", + "test:dev": "vitest dev" + }, + "dependencies": { + "@ckeditor/ckeditor5-inspector": "^5.0.1", + "@parse5/tools": "^0.7.0", + "hast-util-to-html": "^9.0.5", + "parse5": "^8.0.1", + "remark-gfm": "^4.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "unified": "^11.0.5", + "vite": "^8.0.13", + "vite-svg-loader": "^5.1.1" + }, + "devDependencies": { + "@vitest/coverage-v8": "^4.1.2", + "rolldown": "^1.0.3", + "upath": "^2.0.1", + "vitest": "^4.1.2" + } +} diff --git a/packages/ckeditor5-dev-manual-server/rolldown.config.ts b/packages/ckeditor5-dev-manual-server/rolldown.config.ts new file mode 100644 index 000000000..30437262e --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/rolldown.config.ts @@ -0,0 +1,35 @@ +/** + * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. + * For licensing, see LICENSE.md. + */ + +import { defineConfig } from 'rolldown'; +import { declarationFiles } from '../ckeditor5-dev-build-tools/src/plugins/declarations.js'; +import pkg from './package.json' with { type: 'json' }; + +const packageJson = pkg as { + dependencies?: Record; + peerDependencies?: Record; +}; + +const externals = [ + ...Object.keys( packageJson.dependencies || {} ), + ...Object.keys( packageJson.peerDependencies || {} ) +]; + +export default defineConfig( { + input: 'src/index.ts', + platform: 'node', + output: { + cleanDir: true, + format: 'esm', + dir: 'dist', + assetFileNames: '[name][extname]' + }, + plugins: [ + declarationFiles( { + sourceDirectory: 'src' + } ) + ], + external: id => externals.some( name => id.startsWith( name ) ) +} ); diff --git a/packages/ckeditor5-dev-manual-server/src/index.ts b/packages/ckeditor5-dev-manual-server/src/index.ts new file mode 100644 index 000000000..f6345e2f8 --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/src/index.ts @@ -0,0 +1,13 @@ +/** + * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. + * For licensing, see LICENSE.md. + */ + +export { manualTestsPlugin } from './manual-test-plugin/plugin.js'; +export type { ManualData } from './manual-test-plugin/plugin.js'; + +export { refreshPlugin } from './refresh-plugin/plugin.js'; + +export { rawHtmlPlugin } from './raw-plugin/plugin.js'; + +export { getOptimizedPackageIncludes, stringifyValues } from './utils.js'; diff --git a/packages/ckeditor5-dev-manual-server/src/manual-test-plugin/collect-pages.ts b/packages/ckeditor5-dev-manual-server/src/manual-test-plugin/collect-pages.ts new file mode 100644 index 000000000..95f4e14a1 --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/src/manual-test-plugin/collect-pages.ts @@ -0,0 +1,99 @@ +/** + * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. + * For licensing, see LICENSE.md. + */ + +import { globSync } from 'node:fs'; +import { stripLeadingSlash, toPosixPath, toPublicSpecifier } from '../utils.js'; +import type { ManualPageEntry, ManualTestAssetExtension } from './types.js'; + +interface ParsedManualTestAssetPath { + extension: ManualTestAssetExtension; + packageName: string; + packageRootPath: string; + slug: string; +} + +export function collectManualPages( patterns: Array, workspaceRoot: string ): Map { + const groupedFiles = new Map>>(); + const manualPages: Array = []; + + for ( const relativeFilePath of matchFiles( patterns, workspaceRoot ) ) { + if ( relativeFilePath.includes( '/_utils/' ) ) { + continue; + } + + const parsedPath = parseManualTestAssetPath( relativeFilePath ); + + if ( !parsedPath ) { + continue; + } + + const entryKey = `${ parsedPath.packageRootPath }/${ parsedPath.packageName }/${ parsedPath.slug }`; + const matchedFiles = groupedFiles.get( entryKey ) || {}; + + matchedFiles[ parsedPath.extension ] = relativeFilePath; + groupedFiles.set( entryKey, matchedFiles ); + } + + for ( const matchedFiles of groupedFiles.values() ) { + if ( !matchedFiles.html ) { + continue; + } + + const scriptFilePath = matchedFiles.ts || matchedFiles.js; + + if ( !scriptFilePath ) { + continue; + } + + const parsedPath = parseManualTestAssetPath( scriptFilePath )!; + + manualPages.push( { + displayName: humanizeSlug( parsedPath.slug ), + htmlFilePath: toPublicSpecifier( matchedFiles.html ), + instructionsFilePath: matchedFiles.md ? toPublicSpecifier( matchedFiles.md ) : undefined, + packageName: parsedPath.packageName, + scriptFilePath: toPublicSpecifier( scriptFilePath ), + slug: parsedPath.slug + } ); + } + + manualPages.sort( ( a, b ) => a.packageName.localeCompare( b.packageName ) || a.slug.localeCompare( b.slug ) ); + + return new Map( manualPages.map( entry => [ entry.htmlFilePath, entry ] ) ); +} + +function parseManualTestAssetPath( filePath: string ): ParsedManualTestAssetPath | null { + const normalizedFilePath = stripLeadingSlash( toPosixPath( filePath ) ); + const match = normalizedFilePath.match( + /^(packages|external\/ckeditor5\/packages)\/([^/]+)\/tests\/manual\/(.+)\.(html|js|md|ts)$/ + ); + + if ( !match ) { + return null; + } + + return { + extension: match[ 4 ]! as ParsedManualTestAssetPath[ 'extension' ], + packageName: match[ 2 ]!, + packageRootPath: match[ 1 ]!, + slug: match[ 3 ]! + }; +} + +function humanizeSlug( slug: string ): string { + return slug + .split( '/' ) + .map( pathPart => + pathPart + .split( '-' ) + .map( part => part.charAt( 0 ).toUpperCase() + part.slice( 1 ) ) + .join( ' ' ) + ) + .join( ' / ' ); +} + +function matchFiles( patterns: Array, workspaceRoot: string ): Array { + return patterns.flatMap( pattern => globSync( pattern, { cwd: workspaceRoot } ).map( match => toPosixPath( match ) ) ); +} diff --git a/packages/ckeditor5-dev-manual-server/src/manual-test-plugin/parse-markdown.ts b/packages/ckeditor5-dev-manual-server/src/manual-test-plugin/parse-markdown.ts new file mode 100644 index 000000000..650972a89 --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/src/manual-test-plugin/parse-markdown.ts @@ -0,0 +1,36 @@ +/** + * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. + * For licensing, see LICENSE.md. + */ + +import { resolve } from 'node:path'; +import { readFileSync } from 'node:fs'; +import { unified } from 'unified'; +import remarkGfm from 'remark-gfm'; +import remarkParse from 'remark-parse'; +import remarkRehype from 'remark-rehype'; +import { toHtml } from 'hast-util-to-html'; +import type { ManualPageEntry } from './types.js'; + +const markdownProcessor = unified() + .use( remarkParse ) + .use( remarkGfm ) + .use( remarkRehype ); + +export function loadRenderedInstructions( entry: ManualPageEntry, workspaceRoot: string ): string { + if ( !entry.instructionsFilePath ) { + return ''; + } + + const absolutePath = resolve( workspaceRoot, entry.instructionsFilePath.slice( 1 ) ); + const markdown = readFileSync( absolutePath, 'utf8' ).trim(); + + if ( !markdown ) { + return ''; + } + + const tree = markdownProcessor.runSync( markdownProcessor.parse( markdown ) ); + + return toHtml( tree ); +} + diff --git a/packages/ckeditor5-dev-manual-server/src/manual-test-plugin/plugin.ts b/packages/ckeditor5-dev-manual-server/src/manual-test-plugin/plugin.ts new file mode 100644 index 000000000..d78cf106b --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/src/manual-test-plugin/plugin.ts @@ -0,0 +1,141 @@ +/** + * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. + * For licensing, see LICENSE.md. + */ + +import { fileURLToPath } from 'node:url'; +import { dirname, resolve, relative } from 'node:path'; +import { collectManualPages } from './collect-pages.js'; +import { collectManualStaticAssets, createManualStaticAssetsMiddleware } from './static-assets.js'; +import { createManualShellHtml } from './shell-html.js'; +import { toPosixPath, toPublicFilePath, toPublicSpecifier } from '../utils.js'; +import type { Plugin } from 'vite'; +import type { ManualPageEntry } from './types.js'; +export type { ManualData } from './types.js'; + +interface ManualTestClientEntry { + displayName: string; + href: string; + packageName: string; + slug: string; +} + +interface ManualTestServerLike { + middlewares: { + use( middleware: unknown ): void; + }; +} + +const PACKAGE_ROOT = dirname( fileURLToPath( import.meta.resolve( '@ckeditor/ckeditor5-dev-manual-server/package.json' ) ) ); +const MANUAL_ENTRIES_VIRTUAL_ID = 'virtual:ckeditor5-manual-entries'; +const MANUAL_THEME_ROOT = resolve( PACKAGE_ROOT, 'theme' ); +const MANUAL_CATALOG_FILE_PATH = resolve( MANUAL_THEME_ROOT, 'catalog.html' ); +const MANUAL_CATALOG_SCRIPT_FILE_PATH = resolve( MANUAL_THEME_ROOT, 'catalog.ts' ); +const MANUAL_SHELL_TEMPLATE_FILE_PATH = resolve( MANUAL_THEME_ROOT, 'shell.html' ); +const MANUAL_SHELL_SCRIPT_FILE_PATH = resolve( MANUAL_THEME_ROOT, 'shell.ts' ); + +export function manualTestsPlugin( manualTestPatterns: Array ): Plugin { + const workspaceRoot = process.cwd(); + const manualCatalogPublicPath = toPublicFilePath( MANUAL_CATALOG_FILE_PATH, workspaceRoot ); + const manualCatalogScriptPublicPath = toPublicFilePath( MANUAL_CATALOG_SCRIPT_FILE_PATH, workspaceRoot ); + const manualShellScriptPublicPath = toPublicFilePath( MANUAL_SHELL_SCRIPT_FILE_PATH, workspaceRoot ); + const manualPages = collectManualPages( manualTestPatterns.map( pattern => `${ pattern }.{html,js,md,ts}` ), workspaceRoot ); + const manualStaticAssets = collectManualStaticAssets( manualTestPatterns, workspaceRoot ); + const getManualPageEntryForFile = ( filePath: string ): ManualPageEntry | undefined => { + return manualPages.get( toPublicSpecifier( relative( workspaceRoot, filePath ) ) ); + }; + const resolvedVirtualModuleId = `\0${ MANUAL_ENTRIES_VIRTUAL_ID }`; + const clientEntries: Array = [ ...manualPages.values() ].map( entry => ( { + displayName: entry.displayName, + href: entry.htmlFilePath, + packageName: entry.packageName, + slug: entry.slug + } ) ); + + return { + name: 'ckeditor5-manual-tests', + + configureServer( server ) { + useManualTestMiddlewares( server, manualCatalogPublicPath, manualStaticAssets ); + }, + + configurePreviewServer( server ) { + useManualTestMiddlewares( server, manualCatalogPublicPath, manualStaticAssets ); + }, + + config() { + return { + build: { + rolldownOptions: { + input: [ + MANUAL_CATALOG_FILE_PATH, + ...[ ...manualPages.values() ].map( entry => resolve( workspaceRoot, entry.htmlFilePath.slice( 1 ) ) ) + ] + } + } + }; + }, + + resolveId( source ) { + if ( source == MANUAL_ENTRIES_VIRTUAL_ID ) { + return resolvedVirtualModuleId; + } + + return null; + }, + + load( id ) { + if ( id == resolvedVirtualModuleId ) { + return `export const manualTestEntries = ${ JSON.stringify( clientEntries, null, 2 ) };`; + } + + return null; + }, + + transformIndexHtml: { + order: 'pre', + + handler( html, context ) { + if ( toPosixPath( context.filename ) == toPosixPath( MANUAL_CATALOG_FILE_PATH ) ) { + return html.replace( './catalog.ts', manualCatalogScriptPublicPath ); + } + + const entry = getManualPageEntryForFile( context.filename ); + + if ( !entry ) { + return undefined; + } + + return createManualShellHtml( { + entry, + html, + shellScriptPublicPath: manualShellScriptPublicPath, + shellTemplateFilePath: MANUAL_SHELL_TEMPLATE_FILE_PATH, + workspaceRoot + } ); + } + } + }; +} + +function useManualTestMiddlewares( + server: ManualTestServerLike, + manualCatalogPublicPath: string, + manualStaticAssets: Map +): void { + server.middlewares.use( createManualStaticAssetsMiddleware( manualStaticAssets ) ); + + server.middlewares.use( ( request: { url?: string }, _response: unknown, next: () => void ) => { + rewriteCatalogRequest( request, manualCatalogPublicPath ); + + next(); + } ); +} + +function rewriteCatalogRequest( request: { url?: string }, manualCatalogPublicPath: string ): void { + const requestPath = request.url?.split( '?' )[ 0 ]; + + if ( requestPath == '/' || requestPath == '/index.html' ) { + request.url = manualCatalogPublicPath; + } +} diff --git a/packages/ckeditor5-dev-manual-server/src/manual-test-plugin/shell-html.ts b/packages/ckeditor5-dev-manual-server/src/manual-test-plugin/shell-html.ts new file mode 100644 index 000000000..5d9be6517 --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/src/manual-test-plugin/shell-html.ts @@ -0,0 +1,168 @@ +/** + * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. + * For licensing, see LICENSE.md. + */ + +import { posix } from 'node:path'; +import { readFileSync } from 'node:fs'; +import { parse, serialize } from 'parse5'; +import { + appendChild, + createElement, + getAttribute, + getTextContent, + hasAttribute, + isElementNode, + query, + removeAttribute, + removeNode, + setAttribute, + setTextContent, + type ChildNode, + type Element, + type Node, + type ParentNode +} from '@parse5/tools'; +import { loadRenderedInstructions } from './parse-markdown.js'; +import type { ManualData, ManualPageEntry } from './types.js'; + +export interface CreateManualShellHtmlOptions { + entry: ManualPageEntry; + html: string; + shellScriptPublicPath: string; + shellTemplateFilePath: string; + workspaceRoot: string; +} + +export function createManualShellHtml( { + entry, + html, + shellScriptPublicPath, + shellTemplateFilePath, + workspaceRoot +}: CreateManualShellHtmlOptions ): string { + // Elements from shell template. + const shellHtml = readFileSync( shellTemplateFilePath, 'utf8' ); + const shellDocument = parse( shellHtml ); + const shellHead = getRequiredElementByTagName( shellDocument, 'head' ); + const shellBody = getRequiredElementByTagName( shellDocument, 'body' ); + const shellTitle = getRequiredElementByTagName( shellHead, 'title' ); + const shellDataElement = query( shellBody, candidate => { + return isElementNode( candidate ) && getAttribute( candidate, 'id' ) == 'manual-shell-data'; + } )!; + const shellScriptElement = getRequiredElementByAttribute( shellHead, 'data-manual-shell-script' ); + + // Elements from manual page. + const manualDocument = parse( html ); + const manualHead = getRequiredElementByTagName( manualDocument, 'head' ); + const manualBody = getRequiredElementByTagName( manualDocument, 'body' ); + const manualTitle = findChildElement( manualHead, 'title' ); + + const testScriptElement = getRequiredElementByAttribute( shellHead, 'data-manual-test-script' ); + const testScriptFileName = posix.basename( entry.scriptFilePath ); + + removeManualTestScriptNodes( manualDocument, testScriptFileName ); + + setTextContent( shellTitle, ( manualTitle ? getTextContent( manualTitle ) : '' ).trim() || entry.displayName ); + setAttribute( shellScriptElement, 'src', shellScriptPublicPath ); + removeAttribute( shellScriptElement, 'data-manual-shell-script' ); + setAttribute( testScriptElement, 'src', `./${ testScriptFileName }` ); + removeAttribute( testScriptElement, 'data-manual-test-script' ); + setTextContent( shellDataElement, stringifyHtmlScriptData( createManualData( entry, workspaceRoot ) ) ); + appendChildren( shellHead, manualHead.childNodes.filter( shouldMoveManualHeadNode ) ); + // Wrap before the browser parses the page so iframe elements are not reparented after loading starts. + appendChild( shellBody, createManualTestContainer( manualBody ) ); + + return serialize( shellDocument ); +} + +function createManualData( entry: ManualPageEntry, workspaceRoot: string ): ManualData { + return { + displayName: entry.displayName, + instructionsHtml: loadRenderedInstructions( entry, workspaceRoot ), + packageName: entry.packageName + }; +} + +function stringifyHtmlScriptData( value: ManualData ): string { + return JSON.stringify( value ).split( '<' ).join( '\\u003c' ); +} + +function shouldMoveManualHeadNode( node: ChildNode ): boolean { + if ( !isElementNode( node ) ) { + return true; + } + + if ( node.tagName == 'title' ) { + return false; + } + + if ( node.tagName != 'meta' ) { + return true; + } + + return !getAttribute( node, 'charset' ) && getAttribute( node, 'name' ) != 'viewport'; +} + +function appendChildren( parent: ParentNode, childNodes: Array ): void { + for ( const node of childNodes ) { + removeNode( node ); + appendChild( parent, node ); + } +} + +function createManualTestContainer( manualBody: ParentNode ): Element { + const container = createElement( 'div', { class: 'manual-test-container' } ); + + appendChildren( container, [ ...manualBody.childNodes ] ); + + return container; +} + +function removeManualTestScriptNodes( parent: ParentNode, testScriptFileName: string ): void { + for ( const node of [ ...parent.childNodes ] ) { + if ( !isElementNode( node ) ) { + continue; + } + + if ( isManualTestScriptNode( node, testScriptFileName ) ) { + removeNode( node ); + + continue; + } + + removeManualTestScriptNodes( node, testScriptFileName ); + } +} + +function isManualTestScriptNode( node: Element, testScriptFileName: string ): boolean { + if ( node.tagName != 'script' ) { + return false; + } + + const source = getAttribute( node, 'src' ); + + if ( !source ) { + return false; + } + + const sourceFileName = posix.basename( source.split( '?' )[ 0 ]!.split( '#' )[ 0 ]! ); + + return getScriptModuleName( sourceFileName ) == getScriptModuleName( testScriptFileName ); +} + +function getScriptModuleName( fileName: string ): string { + return fileName.replace( /\.[jt]s$/, '' ); +} + +function getRequiredElementByTagName( root: Node, tagName: string ): Element { + return query( root, candidate => isElementNode( candidate ) && candidate.tagName == tagName )!; +} + +function getRequiredElementByAttribute( root: ParentNode, attributeName: string ): Element { + return query( root, candidate => isElementNode( candidate ) && hasAttribute( candidate, attributeName ) )!; +} + +function findChildElement( root: ParentNode, tagName: string ): Element | undefined { + return root.childNodes.find( ( node ): node is Element => isElementNode( node ) && node.tagName == tagName ); +} diff --git a/packages/ckeditor5-dev-manual-server/src/manual-test-plugin/static-assets.ts b/packages/ckeditor5-dev-manual-server/src/manual-test-plugin/static-assets.ts new file mode 100644 index 000000000..525d4f4f6 --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/src/manual-test-plugin/static-assets.ts @@ -0,0 +1,143 @@ +/** + * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. + * For licensing, see LICENSE.md. + */ + +import { resolve, extname } from 'node:path'; +import { globSync, statSync, createReadStream } from 'node:fs'; +import type { IncomingMessage, ServerResponse } from 'node:http'; +import { toPublicSpecifier } from '../utils.js'; + +const PROCESSED_MANUAL_TEST_EXTENSIONS = new Set( [ '.css', '.html', '.js', '.md', '.ts' ] ); +const VITE_MODULE_QUERY_PARAMETERS = new Set( [ + 'import', + 'raw', + 'url', + 'worker', + 'inline' +] ); + +type ManualStaticAssetsMiddleware = ( request: IncomingMessage, response: ServerResponse, next: () => void ) => void; + +export function collectManualStaticAssets( patterns: Array, workspaceRoot: string ): Map { + return new Map( patterns + .flatMap( pattern => globSync( pattern, { cwd: workspaceRoot } ) ) + .sort() + .filter( relativeFilePath => statSync( resolve( workspaceRoot, relativeFilePath ) ).isFile() ) + .filter( isManualStaticAssetPath ) + .map( relativeFilePath => [ + toPublicSpecifier( relativeFilePath ), + resolve( workspaceRoot, relativeFilePath ) + ] ) + ); +} + +export function createManualStaticAssetsMiddleware( staticAssets: Map ): ManualStaticAssetsMiddleware { + return ( request, response, next ) => { + if ( request.method != 'GET' && request.method != 'HEAD' ) { + next(); + + return; + } + + const filePath = getManualStaticAssetFilePath( request.url, staticAssets ); + + if ( !filePath ) { + next(); + + return; + } + + const fileStats = statSync( filePath ); + + response.statusCode = 200; + response.setHeader( 'Content-Length', fileStats.size ); + response.setHeader( 'Content-Type', getContentType( extname( filePath ) ) ); + + if ( request.method == 'HEAD' ) { + response.end(); + + return; + } + + createReadStream( filePath ).pipe( response ); + }; +} + +export function getManualStaticAssetFilePath( + requestUrl: string | undefined, + staticAssets: Map +): string | null { + if ( !requestUrl ) { + return null; + } + + let url: URL; + + try { + url = new URL( requestUrl, 'http://ckeditor5.local' ); + } catch { + return null; + } + + if ( [ ...url.searchParams.keys() ].some( key => VITE_MODULE_QUERY_PARAMETERS.has( key ) ) ) { + return null; + } + + return staticAssets.get( url.pathname ) || null; +} + +function isManualStaticAssetPath( filePath: string ): boolean { + return extname( filePath ) != '' && !PROCESSED_MANUAL_TEST_EXTENSIONS.has( extname( filePath ) ); +} + +function getContentType( extension: string ): string { + switch ( extension ) { + case '.avif': + return 'image/avif'; + + case '.css': + return 'text/css; charset=utf-8'; + + case '.gif': + return 'image/gif'; + + case '.ico': + return 'image/x-icon'; + + case '.jpg': + case '.jpeg': + return 'image/jpeg'; + + case '.json': + case '.map': + return 'application/json; charset=utf-8'; + + case '.mp3': + return 'audio/mpeg'; + + case '.mp4': + return 'video/mp4'; + + case '.png': + return 'image/png'; + + case '.svg': + return 'image/svg+xml'; + + case '.txt': + return 'text/plain; charset=utf-8'; + + case '.webp': + return 'image/webp'; + + case '.woff': + return 'font/woff'; + + case '.woff2': + return 'font/woff2'; + + default: + return 'application/octet-stream'; + } +} diff --git a/packages/ckeditor5-dev-manual-server/src/manual-test-plugin/types.ts b/packages/ckeditor5-dev-manual-server/src/manual-test-plugin/types.ts new file mode 100644 index 000000000..e1db27023 --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/src/manual-test-plugin/types.ts @@ -0,0 +1,21 @@ +/** + * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. + * For licensing, see LICENSE.md. + */ + +export interface ManualData { + displayName: string; + instructionsHtml: string; + packageName: string; +} + +export interface ManualPageEntry { + displayName: string; + htmlFilePath: string; + instructionsFilePath?: string; + packageName: string; + scriptFilePath: string; + slug: string; +} + +export type ManualTestAssetExtension = 'html' | 'js' | 'md' | 'ts'; diff --git a/packages/ckeditor5-dev-manual-server/src/raw-plugin/plugin.ts b/packages/ckeditor5-dev-manual-server/src/raw-plugin/plugin.ts new file mode 100644 index 000000000..85193cde9 --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/src/raw-plugin/plugin.ts @@ -0,0 +1,27 @@ +/** + * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. + * For licensing, see LICENSE.md. + */ + +import type { Plugin } from 'vite'; + +const RAW_QUERY = '?raw'; + +export function rawHtmlPlugin(): Plugin { + return { + name: 'ckeditor5-raw', + enforce: 'pre', + + async resolveId( source, importer ) { + if ( !importer || source.includes( '?' ) ) { + return null; + } + + if ( !source.endsWith( '.html' ) ) { + return null; + } + + return this.resolve( `${ source }${ RAW_QUERY }`, importer, { skipSelf: true } ); + } + }; +} diff --git a/packages/ckeditor5-dev-manual-server/src/refresh-plugin/plugin.ts b/packages/ckeditor5-dev-manual-server/src/refresh-plugin/plugin.ts new file mode 100644 index 000000000..3b6a368c7 --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/src/refresh-plugin/plugin.ts @@ -0,0 +1,28 @@ +/** + * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. + * For licensing, see LICENSE.md. + */ + +import type { Plugin } from 'vite'; + +export const MANUAL_REFRESH_EVENT_NAME = 'ckeditor5-manual:refresh-available'; + +export function refreshPlugin(): Plugin { + return { + name: 'ckeditor5-manual-refresh', + apply: 'serve', + + handleHotUpdate( { file, server } ) { + if ( file.endsWith( '.css' ) ) { + return; + } + + server.hot.send( { + type: 'custom', + event: MANUAL_REFRESH_EVENT_NAME + } ); + + return []; + } + }; +} diff --git a/packages/ckeditor5-dev-manual-server/src/utils.ts b/packages/ckeditor5-dev-manual-server/src/utils.ts new file mode 100644 index 000000000..e2114d96d --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/src/utils.ts @@ -0,0 +1,56 @@ +/** + * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. + * For licensing, see LICENSE.md. + */ + +import { resolve, relative, isAbsolute } from 'node:path'; +import { globSync, readFileSync } from 'node:fs'; + +/** + * Stringifies the values of the given object. + */ +export function stringifyValues( obj: Record ): Record { + return Object.fromEntries( + Object + .entries( obj ) + .map( ( [ key, value ] ) => [ key, JSON.stringify( value ) ] ) + ); +} + +/** + * Returns package names that should be pre-bundled by the manual test server. + */ +export function getOptimizedPackageIncludes( packageJsonGlobs: Array ): Array { + const packageNames = globSync( packageJsonGlobs, { cwd: process.cwd() } ) + .map( packageJsonPath => { + const resolvedPath = resolve( process.cwd(), packageJsonPath ); + const packageJson = JSON.parse( readFileSync( resolvedPath, 'utf8' ) ); + + return packageJson.name; + } ) + .sort(); + + return [ ...new Set( packageNames ) ]; +} + +export function toPublicFilePath( filePath: string, workspaceRoot: string ): string { + const relativeFilePath = relative( workspaceRoot, filePath ); + + if ( !relativeFilePath.startsWith( '..' ) && !isAbsolute( relativeFilePath ) ) { + return toPublicSpecifier( relativeFilePath ); + } + + return `/@fs/${ toPosixPath( filePath ) }`; +} + +export function toPublicSpecifier( relativeFilePath: string ): string { + return `/${ stripLeadingSlash( toPosixPath( relativeFilePath ) ) }`; +} + +export function toPosixPath( value: string ): string { + return value.replace( /\\/g, '/' ); +} + +export function stripLeadingSlash( value: string ): string { + return value.startsWith( '/' ) ? value.slice( 1 ) : value; +} diff --git a/packages/ckeditor5-dev-manual-server/tests/manual-test-plugin/collect-pages.ts b/packages/ckeditor5-dev-manual-server/tests/manual-test-plugin/collect-pages.ts new file mode 100644 index 000000000..4e205f113 --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/tests/manual-test-plugin/collect-pages.ts @@ -0,0 +1,88 @@ +/** + * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. + * For licensing, see LICENSE.md. + */ + +import { tmpdir } from 'node:os'; +import { join, dirname } from 'node:path'; +import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises'; +import { afterEach, beforeEach, describe, expect, test } from 'vitest'; +import { collectManualPages } from '../../src/manual-test-plugin/collect-pages.js'; + +describe( 'collectManualPages()', () => { + let workspaceRoot: string; + + beforeEach( async () => { + workspaceRoot = await mkdtemp( join( tmpdir(), 'ckeditor5-manual-pages-' ) ); + } ); + + afterEach( async () => { + await rm( workspaceRoot, { recursive: true, force: true } ); + } ); + + test( 'collects sorted manual page entries from package and external package paths', async () => { + await Promise.all( [ + createFile( 'packages/ckeditor5-zeta/tests/manual/nested/demo-case.html' ), + createFile( 'packages/ckeditor5-zeta/tests/manual/nested/demo-case.js' ), + createFile( 'packages/ckeditor5-zeta/tests/manual/nested/demo-case.md' ), + createFile( 'external/ckeditor5/packages/ckeditor5-alpha/tests/manual/sample.html' ), + createFile( 'external/ckeditor5/packages/ckeditor5-alpha/tests/manual/sample.ts' ) + ] ); + + const pages = collectManualPages( [ + 'packages/*/tests/manual/**/*.{html,js,md,ts}', + 'external/ckeditor5/packages/*/tests/manual/**/*.{html,js,md,ts}' + ], workspaceRoot ); + + expect( [ ...pages.values() ] ).to.deep.equal( [ + { + displayName: 'Sample', + htmlFilePath: '/external/ckeditor5/packages/ckeditor5-alpha/tests/manual/sample.html', + instructionsFilePath: undefined, + packageName: 'ckeditor5-alpha', + scriptFilePath: '/external/ckeditor5/packages/ckeditor5-alpha/tests/manual/sample.ts', + slug: 'sample' + }, + { + displayName: 'Nested / Demo Case', + htmlFilePath: '/packages/ckeditor5-zeta/tests/manual/nested/demo-case.html', + instructionsFilePath: '/packages/ckeditor5-zeta/tests/manual/nested/demo-case.md', + packageName: 'ckeditor5-zeta', + scriptFilePath: '/packages/ckeditor5-zeta/tests/manual/nested/demo-case.js', + slug: 'nested/demo-case' + } + ] ); + } ); + + test( 'ignores utility files, unsupported paths, and incomplete manual pages', async () => { + await Promise.all( [ + createFile( 'packages/ckeditor5-foo/tests/manual/_utils/helper.js' ), + createFile( 'packages/ckeditor5-foo/tests/manual/html-only.html' ), + createFile( 'packages/ckeditor5-foo/tests/manual/script-only.js' ), + createFile( 'packages/ckeditor5-foo/tests/other/sample.html' ), + createFile( 'packages/ckeditor5-foo/tests/other/sample.js' ) + ] ); + + expect( collectManualPages( [ 'packages/**/*.{html,js,md,ts}' ], workspaceRoot ) ).to.deep.equal( new Map() ); + } ); + + test( 'prefers TypeScript test scripts over JavaScript scripts', async () => { + await Promise.all( [ + createFile( 'packages/ckeditor5-foo/tests/manual/sample.html' ), + createFile( 'packages/ckeditor5-foo/tests/manual/sample.js' ), + createFile( 'packages/ckeditor5-foo/tests/manual/sample.ts' ) + ] ); + + const pages = collectManualPages( [ 'packages/*/tests/manual/**/*.{html,js,md,ts}' ], workspaceRoot ); + + expect( pages.get( '/packages/ckeditor5-foo/tests/manual/sample.html' )!.scriptFilePath ) + .to.equal( '/packages/ckeditor5-foo/tests/manual/sample.ts' ); + } ); + + async function createFile( relativeFilePath: string ): Promise { + const filePath = join( workspaceRoot, relativeFilePath ); + + await mkdir( dirname( filePath ), { recursive: true } ); + await writeFile( filePath, '' ); + } +} ); diff --git a/packages/ckeditor5-dev-manual-server/tests/manual-test-plugin/parse-markdown.ts b/packages/ckeditor5-dev-manual-server/tests/manual-test-plugin/parse-markdown.ts new file mode 100644 index 000000000..1fd3b23cf --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/tests/manual-test-plugin/parse-markdown.ts @@ -0,0 +1,61 @@ +/** + * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. + * For licensing, see LICENSE.md. + */ + +import { tmpdir } from 'node:os'; +import { join, dirname } from 'node:path'; +import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises'; +import { afterEach, beforeEach, describe, expect, test } from 'vitest'; +import { loadRenderedInstructions } from '../../src/manual-test-plugin/parse-markdown.js'; +import type { ManualPageEntry } from '../../src/manual-test-plugin/types.js'; + +describe( 'loadRenderedInstructions()', () => { + let workspaceRoot: string; + + beforeEach( async () => { + workspaceRoot = await mkdtemp( join( tmpdir(), 'ckeditor5-manual-instructions-' ) ); + } ); + + afterEach( async () => { + await rm( workspaceRoot, { recursive: true, force: true } ); + } ); + + test( 'returns an empty string for entries without instructions', () => { + expect( loadRenderedInstructions( createEntry(), workspaceRoot ) ).to.equal( '' ); + } ); + + test( 'returns an empty string for empty instructions', async () => { + await createFile( 'packages/ckeditor5-foo/tests/manual/sample.md', ' \n' ); + + expect( loadRenderedInstructions( createEntry( { + instructionsFilePath: '/packages/ckeditor5-foo/tests/manual/sample.md' + } ), workspaceRoot ) ).to.equal( '' ); + } ); + + test( 'renders markdown instructions to HTML', async () => { + await createFile( 'packages/ckeditor5-foo/tests/manual/sample.md', '## Steps\n\n- Click **Bold**' ); + + expect( loadRenderedInstructions( createEntry( { + instructionsFilePath: '/packages/ckeditor5-foo/tests/manual/sample.md' + } ), workspaceRoot ) ).to.equal( '

Steps

\n
    \n
  • Click Bold
  • \n
' ); + } ); + + async function createFile( relativeFilePath: string, content: string ): Promise { + const filePath = join( workspaceRoot, relativeFilePath ); + + await mkdir( dirname( filePath ), { recursive: true } ); + await writeFile( filePath, content ); + } +} ); + +function createEntry( overrides: Partial = {} ): ManualPageEntry { + return { + displayName: 'Sample', + htmlFilePath: '/packages/ckeditor5-foo/tests/manual/sample.html', + packageName: 'ckeditor5-foo', + scriptFilePath: '/packages/ckeditor5-foo/tests/manual/sample.js', + slug: 'sample', + ...overrides + }; +} diff --git a/packages/ckeditor5-dev-manual-server/tests/manual-test-plugin/plugin.ts b/packages/ckeditor5-dev-manual-server/tests/manual-test-plugin/plugin.ts new file mode 100644 index 000000000..a4049a132 --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/tests/manual-test-plugin/plugin.ts @@ -0,0 +1,186 @@ +/** + * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. + * For licensing, see LICENSE.md. + */ + +import { tmpdir } from 'node:os'; +import { join, resolve, dirname } from 'node:path'; +import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises'; +import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest'; +import { manualTestsPlugin } from '../../src/manual-test-plugin/plugin.js'; + +type ConfigHook = ( this: unknown, config: Record, env: { command: 'build'; mode: string } ) => TestConfig; +type ResolveIdHook = ( this: unknown, source: string, importer: string | undefined, options: Record ) => string | null; +type LoadHook = ( this: unknown, id: string, options: Record ) => string | null; +type ServerHook = ( server: TestServer ) => void; +type TestConfig = { + build?: { + rolldownOptions?: { + input?: unknown; + }; + }; +}; +type TransformIndexHtmlHook = { + handler( html: string, context: { filename: string } ): string | undefined; +}; +type TestServer = { + middlewares: { + use: ReturnType; + }; +}; + +describe( 'manualTestsPlugin()', () => { + let workspaceRoot: string; + + beforeEach( async () => { + workspaceRoot = await mkdtemp( join( tmpdir(), 'ckeditor5-manual-test-plugin-' ) ); + vi.spyOn( process, 'cwd' ).mockReturnValue( workspaceRoot ); + } ); + + afterEach( async () => { + await rm( workspaceRoot, { recursive: true, force: true } ); + } ); + + test( 'uses provided broad manual test globs for page entries', async () => { + await Promise.all( [ + createFile( 'packages/ckeditor5-foo/tests/manual/foo.html' ), + createFile( 'packages/ckeditor5-foo/tests/manual/foo.js' ), + createFile( 'packages/ckeditor5-bar/tests/manual/bar.html' ), + createFile( 'packages/ckeditor5-bar/tests/manual/bar.js' ) + ] ); + + const plugin = manualTestsPlugin( [ 'packages/ckeditor5-foo/tests/manual/**/*' ] ); + const config = ( plugin.config as unknown as ConfigHook ).call( {}, {}, { command: 'build', mode: 'production' } ); + const input = config!.build!.rolldownOptions!.input as Array; + + expect( input ).to.include( join( workspaceRoot, 'packages/ckeditor5-foo/tests/manual/foo.html' ) ); + expect( input ).not.to.include( join( workspaceRoot, 'packages/ckeditor5-bar/tests/manual/bar.html' ) ); + } ); + + test( 'exposes entries collected from provided broad manual test globs', async () => { + await Promise.all( [ + createFile( 'packages/ckeditor5-foo/tests/manual/foo.html' ), + createFile( 'packages/ckeditor5-foo/tests/manual/foo.ts' ), + createFile( 'packages/ckeditor5-bar/tests/manual/bar.html' ), + createFile( 'packages/ckeditor5-bar/tests/manual/bar.ts' ) + ] ); + + const plugin = manualTestsPlugin( [ 'packages/ckeditor5-foo/tests/manual/**/*' ] ); + const resolvedId = ( plugin.resolveId as unknown as ResolveIdHook ).call( {}, 'virtual:ckeditor5-manual-entries', undefined, {} ); + const source = ( plugin.load as unknown as LoadHook ).call( {}, resolvedId as string, {} ) as string; + + expect( source ).to.contain( '/packages/ckeditor5-foo/tests/manual/foo.html' ); + expect( source ).not.to.contain( '/packages/ckeditor5-bar/tests/manual/bar.html' ); + } ); + + test( 'returns null for unknown virtual module requests', () => { + const plugin = manualTestsPlugin( [] ); + + expect( ( plugin.resolveId as unknown as ResolveIdHook ).call( {}, 'virtual:other', undefined, {} ) ).to.be.null; + expect( ( plugin.load as unknown as LoadHook ).call( {}, 'virtual:other', {} ) ).to.be.null; + } ); + + test( 'registers manual test middlewares for dev and preview servers', () => { + const plugin = manualTestsPlugin( [] ); + const devServer = createServer(); + const previewServer = createServer(); + + ( plugin.configureServer as unknown as ServerHook )( devServer ); + ( plugin.configurePreviewServer as unknown as ServerHook )( previewServer ); + + expect( devServer.middlewares.use ).toHaveBeenCalledTimes( 2 ); + expect( previewServer.middlewares.use ).toHaveBeenCalledTimes( 2 ); + } ); + + test( 'rewrites root and index requests to the manual test catalog', () => { + const plugin = manualTestsPlugin( [] ); + const server = createServer(); + + ( plugin.configureServer as unknown as ServerHook )( server ); + + const middleware = server.middlewares.use.mock.calls[ 1 ]![ 0 ] as ( + request: { url?: string }, + response: unknown, + next: () => void + ) => void; + const rootRequest = { url: '/?q=1' }; + const indexRequest = { url: '/index.html' }; + const otherRequest = { url: '/manual.html' }; + const next = vi.fn(); + + middleware( rootRequest, {}, next ); + middleware( indexRequest, {}, next ); + middleware( otherRequest, {}, next ); + + expect( rootRequest.url ).to.contain( '/theme/catalog.html' ); + expect( indexRequest.url ).to.contain( '/theme/catalog.html' ); + expect( otherRequest.url ).to.equal( '/manual.html' ); + expect( next ).toHaveBeenCalledTimes( 3 ); + } ); + + test( 'rewrites the catalog script to a public file path', () => { + const plugin = manualTestsPlugin( [] ); + const transformIndexHtml = plugin.transformIndexHtml as TransformIndexHtmlHook; + const catalogFilePath = resolve( import.meta.dirname, '../../theme/catalog.html' ); + const catalogScriptFilePath = resolve( import.meta.dirname, '../../theme/catalog.ts' ).replace( /\\/g, '/' ); + + expect( transformIndexHtml.handler( + '', + { filename: catalogFilePath } + ) ).to.equal( `` ); + } ); + + test( 'rewrites the catalog script when the context filename uses Windows separators', () => { + const plugin = manualTestsPlugin( [] ); + const transformIndexHtml = plugin.transformIndexHtml as TransformIndexHtmlHook; + const catalogFilePath = resolve( import.meta.dirname, '../../theme/catalog.html' ); + const catalogScriptFilePath = resolve( import.meta.dirname, '../../theme/catalog.ts' ).replace( /\\/g, '/' ); + + expect( transformIndexHtml.handler( + '', + { filename: catalogFilePath.replace( /\//g, '\\' ) } + ) ).to.equal( `` ); + } ); + + test( 'passes through HTML files that are not manual pages', () => { + const plugin = manualTestsPlugin( [] ); + const transformIndexHtml = plugin.transformIndexHtml as TransformIndexHtmlHook; + + expect( transformIndexHtml.handler( '

Sample

', { + filename: join( workspaceRoot, 'packages/ckeditor5-foo/tests/manual/missing.html' ) + } ) ).to.be.undefined; + } ); + + test( 'wraps manual page HTML with the shell', async () => { + await Promise.all( [ + createFile( 'packages/ckeditor5-foo/tests/manual/foo.html', 'Foo

Manual test

' ), + createFile( 'packages/ckeditor5-foo/tests/manual/foo.js' ) + ] ); + + const plugin = manualTestsPlugin( [ 'packages/ckeditor5-foo/tests/manual/**/*' ] ); + const transformIndexHtml = plugin.transformIndexHtml as TransformIndexHtmlHook; + const html = transformIndexHtml.handler( + 'Foo

Manual test

', + { filename: join( workspaceRoot, 'packages/ckeditor5-foo/tests/manual/foo.html' ) } + )!; + + expect( html ).to.contain( 'manual-test-container' ); + expect( html ).to.contain( 'Foo' ); + expect( html ).to.contain( '

Manual test

' ); + } ); + + async function createFile( relativeFilePath: string, content = '' ): Promise { + const filePath = join( workspaceRoot, relativeFilePath ); + + await mkdir( dirname( filePath ), { recursive: true } ); + await writeFile( filePath, content ); + } +} ); + +function createServer(): TestServer { + return { + middlewares: { + use: vi.fn() + } + }; +} diff --git a/packages/ckeditor5-dev-manual-server/tests/manual-test-plugin/shell-html.ts b/packages/ckeditor5-dev-manual-server/tests/manual-test-plugin/shell-html.ts new file mode 100644 index 000000000..0e4c6d972 --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/tests/manual-test-plugin/shell-html.ts @@ -0,0 +1,98 @@ +/** + * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. + * For licensing, see LICENSE.md. + */ + +import { resolve } from 'node:path'; +import { parse } from 'parse5'; +import { describe, expect, test } from 'vitest'; +import { getAttribute, isElementNode, query, queryAll, type Element } from '@parse5/tools'; +import { createManualShellHtml } from '../../src/manual-test-plugin/shell-html.js'; +import type { ManualPageEntry } from '../../src/manual-test-plugin/types.js'; + +describe( 'createManualShellHtml()', () => { + const shellTemplateFilePath = resolve( import.meta.dirname, '../../theme/shell.html' ); + const workspaceRoot = resolve( '/workspace' ); + const entry: ManualPageEntry = { + displayName: 'Iframe test', + htmlFilePath: '/packages/ckeditor5-foo/tests/manual/iframe.html', + packageName: 'ckeditor5-foo', + scriptFilePath: '/packages/ckeditor5-foo/tests/manual/iframe.js', + slug: 'iframe' + }; + + test( 'wraps manual test content during HTML transform to avoid runtime iframe reparenting', () => { + const html = createManualShellHtml( { + entry, + html: '

Manual test

', + shellScriptPublicPath: '/theme/shell.ts', + shellTemplateFilePath, + workspaceRoot + } ); + const document = parse( html ); + const containers = [ ...queryAll( document, node => { + return isElementNode( node ) && getAttribute( node, 'class' ) == 'manual-test-container'; + } ) ]; + + expect( containers ).to.have.length( 1 ); + + const iframe = query( containers[ 0 ]!, node => isElementNode( node ) && node.tagName == 'iframe' ); + + expect( containers[ 0 ]!.parentNode ).to.equal( query( document, node => { + return isElementNode( node ) && node.tagName == 'body'; + } ) ); + expect( iframe ).not.to.be.null; + expect( getAttribute( iframe!, 'src' ) ).to.equal( 'assets/frame.html' ); + } ); + + test( 'keeps only the shell-injected manual test script', () => { + const html = createManualShellHtml( { + entry, + html: [ + '', + '', + '', + '', + '', + '', + '' + ].join( '' ), + shellScriptPublicPath: '/theme/shell.ts', + shellTemplateFilePath, + workspaceRoot + } ); + const document = parse( html ); + const scriptSources = [ ...queryAll( document, node => isElementNode( node ) && node.tagName == 'script' ) ] + .map( script => getAttribute( script, 'src' ) ) + .filter( ( source ): source is string => Boolean( source ) ); + + expect( scriptSources.filter( source => source == './iframe.js' ) ).to.have.length( 1 ); + expect( scriptSources ).to.include( './helper.js' ); + } ); + + test( 'removes stale JavaScript test script when TypeScript test script is selected', () => { + const html = createManualShellHtml( { + entry: { + ...entry, + scriptFilePath: '/packages/ckeditor5-foo/tests/manual/iframe.ts' + }, + html: [ + '', + '', + '', + '' + ].join( '' ), + shellScriptPublicPath: '/theme/shell.ts', + shellTemplateFilePath, + workspaceRoot + } ); + const document = parse( html ); + const scriptSources = [ ...queryAll( document, node => isElementNode( node ) && node.tagName == 'script' ) ] + .map( script => getAttribute( script, 'src' ) ) + .filter( ( source ): source is string => Boolean( source ) ); + + expect( scriptSources ).to.include( './iframe.ts' ); + expect( scriptSources ).to.include( './iframe-helper.js' ); + expect( scriptSources ).not.to.include( './iframe.js' ); + } ); +} ); diff --git a/packages/ckeditor5-dev-manual-server/tests/manual-test-plugin/static-assets.ts b/packages/ckeditor5-dev-manual-server/tests/manual-test-plugin/static-assets.ts new file mode 100644 index 000000000..11f2631e7 --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/tests/manual-test-plugin/static-assets.ts @@ -0,0 +1,208 @@ +/** + * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. + * For licensing, see LICENSE.md. + */ + +import { tmpdir } from 'node:os'; +import { join, dirname } from 'node:path'; +import { Writable } from 'node:stream'; +import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises'; +import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest'; +import { + collectManualStaticAssets, + createManualStaticAssetsMiddleware, + getManualStaticAssetFilePath +} from '../../src/manual-test-plugin/static-assets.js'; + +describe( 'manual static assets', () => { + let workspaceRoot: string; + + beforeEach( async () => { + workspaceRoot = await mkdtemp( join( tmpdir(), 'ckeditor5-manual-static-assets-' ) ); + } ); + + afterEach( async () => { + await rm( workspaceRoot, { recursive: true, force: true } ); + } ); + + test( 'collects manual test assets from configured patterns', async () => { + await Promise.all( [ + createFile( 'packages/ckeditor5-foo/tests/manual/assets/image.png' ), + createFile( 'external/ckeditor5/packages/ckeditor5-bar/tests/manual/sample.jpg' ), + createFile( 'packages/ckeditor5-foo/tests/manual/styles.css' ), + createFile( 'packages/ckeditor5-foo/tests/manual/test.html' ), + createFile( 'packages/ckeditor5-foo/tests/manual/test.js' ) + ] ); + + const staticAssets = collectManualStaticAssets( [ + 'packages/*/tests/manual/**/*', + 'external/ckeditor5/packages/*/tests/manual/**/*' + ], workspaceRoot ); + + expect( [ ...staticAssets.entries() ] ).to.deep.equal( [ + [ + '/external/ckeditor5/packages/ckeditor5-bar/tests/manual/sample.jpg', + join( workspaceRoot, 'external/ckeditor5/packages/ckeditor5-bar/tests/manual/sample.jpg' ) + ], + [ + '/packages/ckeditor5-foo/tests/manual/assets/image.png', + join( workspaceRoot, 'packages/ckeditor5-foo/tests/manual/assets/image.png' ) + ] + ] ); + } ); + + test( 'returns the collected file path for a request URL', () => { + const staticAssets = new Map( [ + [ '/packages/ckeditor5-foo/tests/manual/assets/image.png', '/workspace/packages/ckeditor5-foo/tests/manual/assets/image.png' ] + ] ); + + expect( getManualStaticAssetFilePath( + '/packages/ckeditor5-foo/tests/manual/assets/image.png?v=1', + staticAssets + ) ).to.equal( '/workspace/packages/ckeditor5-foo/tests/manual/assets/image.png' ); + } ); + + test( 'does not handle Vite module requests', () => { + const staticAssets = new Map( [ + [ '/packages/ckeditor5-foo/tests/manual/assets/image.png', '/workspace/packages/ckeditor5-foo/tests/manual/assets/image.png' ] + ] ); + + expect( getManualStaticAssetFilePath( + '/packages/ckeditor5-foo/tests/manual/assets/image.png?url', + staticAssets + ) ).to.be.null; + } ); + + test( 'ignores unknown and invalid request URLs', () => { + const staticAssets = new Map( [ + [ '/packages/ckeditor5-foo/tests/manual/assets/image.png', '/workspace/packages/ckeditor5-foo/tests/manual/assets/image.png' ] + ] ); + + expect( getManualStaticAssetFilePath( + '/packages/ckeditor5-foo/tests/manual/missing.png', + staticAssets + ) ).to.be.null; + expect( getManualStaticAssetFilePath( 'http://%', staticAssets ) ).to.be.null; + expect( getManualStaticAssetFilePath( undefined, staticAssets ) ).to.be.null; + } ); + + test( 'serves collected static assets', async () => { + const filePath = await createFile( 'packages/ckeditor5-foo/tests/manual/assets/image.svg', '' ); + const response = createResponse(); + const next = vi.fn(); + const middleware = createManualStaticAssetsMiddleware( new Map( [ + [ '/packages/ckeditor5-foo/tests/manual/assets/image.svg', filePath ] + ] ) ); + const finished = new Promise( resolve => response.on( 'finish', resolve ) ); + + middleware( { + method: 'GET', + url: '/packages/ckeditor5-foo/tests/manual/assets/image.svg' + } as never, response as never, next ); + + await finished; + + expect( next ).not.toHaveBeenCalled(); + expect( response.statusCode ).to.equal( 200 ); + expect( response.setHeader ).toHaveBeenCalledWith( 'Content-Length', 11 ); + expect( response.setHeader ).toHaveBeenCalledWith( 'Content-Type', 'image/svg+xml' ); + expect( response.getBody() ).to.equal( '' ); + } ); + + test( 'ends HEAD requests without streaming the static asset body', async () => { + const filePath = await createFile( 'packages/ckeditor5-foo/tests/manual/assets/data.json', '{ "ok": true }' ); + const response = createResponse(); + const next = vi.fn(); + const middleware = createManualStaticAssetsMiddleware( new Map( [ + [ '/packages/ckeditor5-foo/tests/manual/assets/data.json', filePath ] + ] ) ); + const finished = new Promise( resolve => response.on( 'finish', resolve ) ); + + middleware( { + method: 'HEAD', + url: '/packages/ckeditor5-foo/tests/manual/assets/data.json' + } as never, response as never, next ); + + await finished; + + expect( next ).not.toHaveBeenCalled(); + expect( response.setHeader ).toHaveBeenCalledWith( 'Content-Type', 'application/json; charset=utf-8' ); + expect( response.getBody() ).to.equal( '' ); + } ); + + test( 'passes through unsupported static asset requests', () => { + const middleware = createManualStaticAssetsMiddleware( new Map() ); + const response = createResponse(); + const next = vi.fn(); + + middleware( { method: 'POST', url: '/asset.png' } as never, response as never, next ); + middleware( { method: 'GET', url: '/missing.png' } as never, response as never, next ); + + expect( next ).toHaveBeenCalledTimes( 2 ); + } ); + + test( 'sets content types for supported static asset extensions', async () => { + const cases = [ + [ 'image.avif', 'image/avif' ], + [ 'styles.css', 'text/css; charset=utf-8' ], + [ 'animation.gif', 'image/gif' ], + [ 'favicon.ico', 'image/x-icon' ], + [ 'photo.jpg', 'image/jpeg' ], + [ 'photo.jpeg', 'image/jpeg' ], + [ 'sound.mp3', 'audio/mpeg' ], + [ 'video.mp4', 'video/mp4' ], + [ 'image.png', 'image/png' ], + [ 'readme.txt', 'text/plain; charset=utf-8' ], + [ 'image.webp', 'image/webp' ], + [ 'font.woff', 'font/woff' ], + [ 'font.woff2', 'font/woff2' ], + [ 'file.bin', 'application/octet-stream' ] + ] as const; + + for ( const [ fileName, contentType ] of cases ) { + const requestPath = `/packages/ckeditor5-foo/tests/manual/assets/${ fileName }`; + const filePath = await createFile( `packages/ckeditor5-foo/tests/manual/assets/${ fileName }`, '' ); + const response = createResponse(); + const middleware = createManualStaticAssetsMiddleware( new Map( [ [ requestPath, filePath ] ] ) ); + const finished = new Promise( resolve => response.on( 'finish', resolve ) ); + + middleware( { method: 'HEAD', url: requestPath } as never, response as never, vi.fn() ); + + await finished; + + expect( response.setHeader ).toHaveBeenCalledWith( 'Content-Type', contentType ); + } + } ); + + async function createFile( relativeFilePath: string, content = '' ): Promise { + const filePath = join( workspaceRoot, relativeFilePath ); + + await mkdir( dirname( filePath ), { recursive: true } ); + await writeFile( filePath, content ); + + return filePath; + } +} ); + +function createResponse(): Writable & { + statusCode?: number; + setHeader: ReturnType; + getBody(): string; +} { + const chunks: Array = []; + const response = new Writable( { + write( chunk: Buffer, _encoding, callback ) { + chunks.push( Buffer.from( chunk ) ); + callback(); + } + } ) as Writable & { + statusCode?: number; + setHeader: ReturnType; + getBody(): string; + }; + + response.setHeader = vi.fn(); + response.getBody = () => Buffer.concat( chunks ).toString( 'utf8' ); + + return response; +} diff --git a/packages/ckeditor5-dev-manual-server/tests/raw-plugin/plugin.ts b/packages/ckeditor5-dev-manual-server/tests/raw-plugin/plugin.ts new file mode 100644 index 000000000..293c8bd2a --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/tests/raw-plugin/plugin.ts @@ -0,0 +1,109 @@ +/** + * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. + * For licensing, see LICENSE.md. + */ + +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; +import { mkdtemp, rm, writeFile } from 'node:fs/promises'; +import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest'; +import { rawHtmlPlugin } from '../../src/raw-plugin/plugin.js'; +import type { PluginContext, ResolveIdResult } from 'rollup'; + +type ResolveIdHook = ( this: PluginContext, source: string, importer?: string ) => Promise; + +describe( 'rawHtmlPlugin()', () => { + let temporaryDirectory: string; + + beforeEach( async () => { + temporaryDirectory = await mkdtemp( join( tmpdir(), 'ckeditor5-raw-plugin-' ) ); + } ); + + afterEach( async () => { + await rm( temporaryDirectory, { recursive: true, force: true } ); + } ); + + test( 'runs before Vite built-in HTML handling', () => { + expect( rawHtmlPlugin().enforce ).to.equal( 'pre' ); + } ); + + test( 'resolves imported HTML files as Vite raw imports by default', async () => { + const plugin = rawHtmlPlugin(); + const htmlFilePath = join( temporaryDirectory, 'template.html' ); + const importer = join( temporaryDirectory, 'manual.js' ); + const resolveId = plugin.resolveId as unknown as ResolveIdHook; + + await writeFile( htmlFilePath, '
Text
' ); + + expect( await resolveId.call( createPluginContext( `${ htmlFilePath }?raw` ), './template.html', importer ) ) + .to.equal( `${ htmlFilePath }?raw` ); + } ); + + test( 'delegates raw import resolution to Vite', async () => { + const plugin = rawHtmlPlugin(); + const htmlFilePath = join( temporaryDirectory, 'template.html' ); + const importer = join( temporaryDirectory, 'manual.js' ); + const resolveId = plugin.resolveId as unknown as ResolveIdHook; + const context = createPluginContext( `${ htmlFilePath }?raw` ); + + await writeFile( htmlFilePath, '

Template

' ); + await resolveId.call( context, './template.html', importer ); + + expect( context.resolve ).toHaveBeenCalledWith( './template.html?raw', importer, { skipSelf: true } ); + } ); + + test( 'does not resolve SVG files by default', async () => { + const plugin = rawHtmlPlugin(); + const filePath = join( temporaryDirectory, 'icon.svg' ); + const importer = join( temporaryDirectory, 'manual.js' ); + const resolveId = plugin.resolveId as unknown as ResolveIdHook; + + await writeFile( filePath, '' ); + + expect( await resolveId.call( createPluginContext( filePath ), './icon.svg', importer ) ).to.be.null; + } ); + + test( 'does not resolve HTML entry points without an importer', async () => { + const plugin = rawHtmlPlugin(); + const filePath = join( temporaryDirectory, 'manual.html' ); + const resolveId = plugin.resolveId as unknown as ResolveIdHook; + + expect( await resolveId.call( createPluginContext( filePath ), filePath ) ).to.be.null; + } ); + + test( 'does not resolve HTML imports that Vite cannot resolve', async () => { + const plugin = rawHtmlPlugin(); + const importer = join( temporaryDirectory, 'manual.js' ); + const resolveId = plugin.resolveId as unknown as ResolveIdHook; + + expect( await resolveId.call( createPluginContext( null ), './missing.html', importer ) ).to.be.null; + } ); + + test( 'ignores files with unsupported extensions', async () => { + const plugin = rawHtmlPlugin(); + const filePath = join( temporaryDirectory, 'script.js' ); + const importer = join( temporaryDirectory, 'manual.js' ); + const resolveId = plugin.resolveId as unknown as ResolveIdHook; + + await writeFile( filePath, 'export default 1;' ); + + expect( await resolveId.call( createPluginContext( filePath ), './script.js', importer ) ).to.be.null; + } ); + + test( 'ignores imports with explicit request queries', async () => { + const plugin = rawHtmlPlugin(); + const filePath = join( temporaryDirectory, 'template.html' ); + const importer = join( temporaryDirectory, 'manual.js' ); + const resolveId = plugin.resolveId as unknown as ResolveIdHook; + + await writeFile( filePath, '

Query

' ); + + expect( await resolveId.call( createPluginContext( filePath ), './template.html?url', importer ) ).to.be.null; + } ); +} ); + +function createPluginContext( resolvedId: string | null ): PluginContext & { resolve: ReturnType } { + return { + resolve: vi.fn( async () => resolvedId ) + } as unknown as PluginContext & { resolve: ReturnType }; +} diff --git a/packages/ckeditor5-dev-manual-server/tests/refresh-plugin/plugin.ts b/packages/ckeditor5-dev-manual-server/tests/refresh-plugin/plugin.ts new file mode 100644 index 000000000..cb65e9a4c --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/tests/refresh-plugin/plugin.ts @@ -0,0 +1,92 @@ +/** + * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. + * For licensing, see LICENSE.md. + */ + +import { describe, expect, test, vi } from 'vitest'; +import { refreshPlugin, MANUAL_REFRESH_EVENT_NAME } from '../../src/refresh-plugin/plugin.js'; +import type { ModuleNode } from 'vite'; + +interface TestHmrContext { + file: string; + modules: Array; + server: { + hot: { + send: ReturnType; + }; + }; +} + +interface TestModule { + type: ModuleNode[ 'type' ]; +} + +type TestHandleHotUpdateHook = ( context: TestHmrContext ) => unknown; + +describe( 'refreshPlugin()', () => { + test( 'applies only in the dev server', () => { + expect( refreshPlugin().apply ).to.equal( 'serve' ); + } ); + + test( 'keeps regular Vite HMR for CSS file updates', () => { + const handleHotUpdate = getHandleHotUpdate(); + const context = createHmrContext( '/workspace/theme/styles.css', [ createModule( 'js' ) ] ); + + expect( handleHotUpdate.call( {}, context ) ).to.be.undefined; + expect( context.server.hot.send ).not.toHaveBeenCalled(); + } ); + + test( 'shows the manual refresh prompt for non-CSS updates', () => { + const handleHotUpdate = getHandleHotUpdate(); + const context = createHmrContext( '/workspace/tests/manual/sample.ts', [ createModule( 'js' ) ] ); + + expect( handleHotUpdate.call( {}, context ) ).to.deep.equal( [] ); + expect( context.server.hot.send ).toHaveBeenCalledWith( { + type: 'custom', + event: MANUAL_REFRESH_EVENT_NAME + } ); + } ); + + test( 'shows the manual refresh prompt for full reload updates', () => { + const handleHotUpdate = getHandleHotUpdate(); + const context = createHmrContext( '/workspace/tests/manual/sample.html', [] ); + + expect( handleHotUpdate.call( {}, context ) ).to.deep.equal( [] ); + expect( context.server.hot.send ).toHaveBeenCalledWith( { + type: 'custom', + event: MANUAL_REFRESH_EVENT_NAME + } ); + } ); +} ); + +function getHandleHotUpdate(): TestHandleHotUpdateHook { + const hook = refreshPlugin().handleHotUpdate!; + + if ( typeof hook == 'function' ) { + return context => hook.call( {} as never, context as never ); + } + + return context => hook.handler.call( {} as never, context as never ); +} + +function createHmrContext( file: string, modules: Array ): TestHmrContext { + const context: TestHmrContext = { + file, + modules, + server: { + hot: { + send: vi.fn() + } + } + }; + + return context; +} + +function createModule( type: ModuleNode[ 'type' ] ): TestModule { + const module: TestModule = { + type + }; + + return module; +} diff --git a/packages/ckeditor5-dev-manual-server/tests/utils.ts b/packages/ckeditor5-dev-manual-server/tests/utils.ts new file mode 100644 index 000000000..825248cdb --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/tests/utils.ts @@ -0,0 +1,90 @@ +/** + * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. + * For licensing, see LICENSE.md. + */ + +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; +import { mkdtemp, rm, writeFile } from 'node:fs/promises'; +import { afterEach, beforeEach, describe, expect, test } from 'vitest'; +import { getOptimizedPackageIncludes, stringifyValues, toPublicFilePath, toPublicSpecifier } from '../src/utils.js'; + +describe( 'getOptimizedPackageIncludes()', () => { + let temporaryDirectory: string; + + beforeEach( async () => { + temporaryDirectory = await mkdtemp( join( tmpdir(), 'ckeditor5-optimized-package-includes-' ) ); + } ); + + afterEach( async () => { + await rm( temporaryDirectory, { recursive: true, force: true } ); + } ); + + test( 'returns sorted unique package names', async () => { + await Promise.all( [ + createPackageJson( 'alpha', { name: '@ckeditor/ckeditor5-zeta' } ), + createPackageJson( 'bravo', { name: '@ckeditor/ckeditor5-alpha' } ), + createPackageJson( 'charlie', { name: '@ckeditor/ckeditor5-zeta' } ) + ] ); + + expect( getOptimizedPackageIncludes( [ join( temporaryDirectory, '*.json' ) ] ) ).to.deep.equal( [ + '@ckeditor/ckeditor5-alpha', + '@ckeditor/ckeditor5-zeta' + ] ); + } ); + + test( 'uses all provided globs', async () => { + await Promise.all( [ + createPackageJson( 'alpha', { name: '@ckeditor/ckeditor5-alpha' } ), + createPackageJson( 'bravo', { name: '@ckeditor/ckeditor5-bravo' } ), + createPackageJson( 'charlie', { name: '@ckeditor/ckeditor5-charlie' } ) + ] ); + + expect( getOptimizedPackageIncludes( [ + join( temporaryDirectory, 'alpha.json' ), + join( temporaryDirectory, 'bravo.json' ) + ] ) ).to.deep.equal( [ + '@ckeditor/ckeditor5-alpha', + '@ckeditor/ckeditor5-bravo' + ] ); + } ); + + function createPackageJson( directoryName: string, packageJson: Record ): Promise { + const packageJsonPath = join( temporaryDirectory, `${ directoryName }.json` ); + + return writeFile( packageJsonPath, JSON.stringify( packageJson ) ) + .then( () => packageJsonPath ); + } +} ); + +describe( 'stringifyValues()', () => { + test( 'JSON-stringifies object values', () => { + expect( stringifyValues( { + array: [ 'foo' ], + boolean: true, + number: 5, + string: 'bar' + } ) ).to.deep.equal( { + array: '["foo"]', + boolean: 'true', + number: '5', + string: '"bar"' + } ); + } ); +} ); + +describe( 'public path utilities', () => { + test( 'returns a public path for files inside the workspace', () => { + expect( toPublicFilePath( '/workspace/packages/foo/manual.html', '/workspace' ) ) + .to.equal( '/packages/foo/manual.html' ); + } ); + + test( 'returns a Vite file-system path for files outside the workspace', () => { + expect( toPublicFilePath( '/external/theme/shell.ts', '/workspace' ) ) + .to.equal( '/@fs//external/theme/shell.ts' ); + } ); + + test( 'normalizes public specifiers', () => { + expect( toPublicSpecifier( '\\packages\\foo\\manual.html' ) ).to.equal( '/packages/foo/manual.html' ); + } ); +} ); diff --git a/packages/ckeditor5-dev-manual-server/theme/catalog.css b/packages/ckeditor5-dev-manual-server/theme/catalog.css new file mode 100644 index 000000000..c93b1bab5 --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/theme/catalog.css @@ -0,0 +1,267 @@ +:root { + color-scheme: light dark; + font-family: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; + line-height: 1.5; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + --bg: #fafafa; + --surface: #fff; + --surface-hover: #f5f5f5; + --border: #e5e5e5; + --border-strong: #d4d4d4; + --text: #0a0a0a; + --text-muted: #737373; + --text-subtle: #a3a3a3; + --accent: #171717; + --accent-ring: rgb(23 23 23 / 10%); + --radius-lg: 12px; + --radius-md: 8px; + --radius-sm: 6px; +} + +@media (prefers-color-scheme: dark) { + :root { + --bg: #0a0a0a; + --surface: #141414; + --surface-hover: #1c1c1c; + --border: #262626; + --border-strong: #404040; + --text: #ededed; + --text-muted: #a3a3a3; + --text-subtle: #737373; + --accent: #fafafa; + --accent-ring: rgb(250 250 250 / 15%); + } +} + +* { + box-sizing: border-box; +} + +body { + margin: 0; + min-height: 100vh; + background: var(--bg); + color: var(--text); + font-size: 14px; +} + +a { + color: inherit; +} + +.app { + max-width: 1280px; + margin: 0 auto; + padding: 0 24px 80px; +} + +.app__header { + position: sticky; + top: 0; + z-index: 10; + display: flex; + flex-direction: column; + gap: 20px; + padding: 32px 0 24px; + background: linear-gradient(var(--bg) 80%, transparent); + backdrop-filter: blur(8px); +} + +.app__titles { + display: flex; + align-items: baseline; + justify-content: space-between; + gap: 16px; +} + +.app__title { + margin: 0; + font-size: clamp(24px, 3vw, 32px); + font-weight: 700; + letter-spacing: -0.02em; +} + +.app__subtitle { + margin: 0; + font-size: 13px; + color: var(--text-muted); + font-variant-numeric: tabular-nums; +} + +.app__search { + display: flex; + align-items: center; + gap: 10px; + height: 44px; + padding: 0 14px; + background: var(--surface); + border: 1px solid var(--border); + border-radius: var(--radius-md); + transition: border-color 0.12s, box-shadow 0.12s; +} + +.app__search:focus-within { + border-color: var(--border-strong); + box-shadow: 0 0 0 4px var(--accent-ring); +} + +.app__search-icon { + flex-shrink: 0; + color: var(--text-subtle); +} + +.app__search-input { + flex: 1; + min-width: 0; + font: inherit; + font-size: 14px; + color: var(--text); + background: transparent; + border: 0; + outline: none; + padding: 0; +} + +.app__search-input::-webkit-search-cancel-button { + cursor: pointer; +} + +.app__search-input::placeholder { + color: var(--text-muted); +} + +.app__list { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(360px, 1fr)); + gap: 16px; + align-items: start; +} + +.app__empty { + grid-column: 1 / -1; + padding: 64px 24px; + text-align: center; + background: var(--surface); + border: 1px dashed var(--border); + border-radius: var(--radius-lg); +} + +.app__empty-title { + margin: 0 0 4px; + font-size: 15px; + font-weight: 600; +} + +.app__empty-hint { + margin: 0; + font-size: 13px; + color: var(--text-muted); +} + +.pkg { + background: var(--surface); + border: 1px solid var(--border); + border-radius: var(--radius-lg); + overflow: hidden; + transition: border-color 0.12s; +} + +.pkg:hover { + border-color: var(--border-strong); +} + +.pkg__header { + display: flex; + align-items: center; + gap: 10px; + padding: 12px 16px; + border-bottom: 1px solid var(--border); +} + +.pkg__name { + flex: 1; + min-width: 0; + font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; + font-size: 13px; + font-weight: 600; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.pkg__count { + flex-shrink: 0; + min-width: 24px; + text-align: right; + font-size: 12px; + color: var(--text-muted); + font-variant-numeric: tabular-nums; +} + +.pkg__list { + list-style: none; + margin: 0; + padding: 6px; +} + +.pkg__link { + display: flex; + align-items: center; + gap: 12px; + padding: 10px 12px; + border-radius: var(--radius-sm); + text-decoration: none; + color: inherit; + transition: background 0.08s; +} + +.pkg__link:hover { + background: var(--surface-hover); +} + +.pkg__link:focus-visible { + outline: none; + background: var(--surface-hover); + box-shadow: inset 0 0 0 2px var(--border-strong); +} + +.pkg__test-name { + flex: 1; + min-width: 0; + font-size: 13px; + font-weight: 500; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.pkg__test-slug { + flex-shrink: 0; + max-width: 50%; + font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; + font-size: 11px; + color: var(--text-subtle); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +@media (max-width: 600px) { + .app { + padding: 0 16px 48px; + } + + .app__header { + padding: 20px 0 16px; + } + + .app__list { + grid-template-columns: 1fr; + } + + .pkg__test-slug { + display: none; + } +} diff --git a/packages/ckeditor5-dev-manual-server/theme/catalog.html b/packages/ckeditor5-dev-manual-server/theme/catalog.html new file mode 100644 index 000000000..3c93a9816 --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/theme/catalog.html @@ -0,0 +1,57 @@ + + + + + + + CKEditor 5 manual tests catalog + + + + + + + + + + + +
+ + diff --git a/packages/ckeditor5-dev-manual-server/theme/catalog.ts b/packages/ckeditor5-dev-manual-server/theme/catalog.ts new file mode 100644 index 000000000..f0c0cf5d8 --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/theme/catalog.ts @@ -0,0 +1,122 @@ +/** + * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. + * For licensing, see LICENSE.md. + */ + +// @ts-expect-error Virtual module provided by the manual test entries plugin. +import { manualTestEntries, type ManualTestEntry } from 'virtual:ckeditor5-manual-entries'; + +import './catalog.css'; + +/** + * Root element for the manual test index application. + */ +const appElement = document.querySelector( '#app' )!; + +renderApp( appElement, manualTestEntries ); + +/** + * Renders the index shell from the HTML template and wires filtering behavior. + */ +function renderApp( root: HTMLElement, entries: Array ): void { + const packageCount = new Set( entries.map( entry => entry.packageName ) ).size; + + root.replaceChildren( cloneTemplateElement( 'manual-index-template' ) ); + + root.querySelector( '.app__subtitle' )!.textContent = `${ entries.length } tests across ${ packageCount } packages`; + + const listElement = root.querySelector( '.app__list' )!; + const searchInput = root.querySelector( '.app__search-input' )!; + + const render = ( query: string ): void => { + listElement.replaceChildren( ...renderGroups( filterEntries( entries, query ) ) ); + }; + + searchInput.addEventListener( 'input', () => render( searchInput.value ) ); + + document.addEventListener( 'keydown', event => { + if ( event.key == '/' && document.activeElement != searchInput ) { + event.preventDefault(); + searchInput.focus(); + searchInput.select(); + } + } ); + + render( '' ); +} + +/** + * Returns entries matching the current search query. + */ +function filterEntries( entries: Array, query: string ): Array { + const normalized = query.trim().toLowerCase(); + + if ( !normalized ) { + return entries; + } + + return entries.filter( entry => + entry.packageName.toLowerCase().includes( normalized ) || + entry.slug.toLowerCase().includes( normalized ) || + entry.displayName.toLowerCase().includes( normalized ) + ); +} + +/** + * Groups visible entries by package and renders package cards. + */ +function renderGroups( entries: Array ): Array { + if ( !entries.length ) { + return [ cloneTemplateElement( 'manual-empty-template' ) ]; + } + + const groups = new Map>(); + + for ( const entry of entries ) { + const group = groups.get( entry.packageName ) || []; + + group.push( entry ); + groups.set( entry.packageName, group ); + } + + return [ ...groups.entries() ].map( ( [ packageName, packageEntries ] ) => renderPackageCard( packageName, packageEntries ) ); +} + +/** + * Renders a single package card with all tests belonging to that package. + */ +function renderPackageCard( packageName: string, entries: Array ): HTMLElement { + const packageCard = cloneTemplateElement( 'manual-package-template' ); + const list = packageCard.querySelector( '.pkg__list' )!; + + packageCard.querySelector( '.pkg__name' )!.textContent = packageName; + packageCard.querySelector( '.pkg__count' )!.textContent = String( entries.length ); + list.replaceChildren( ...entries.map( entry => renderTestItem( entry ) ) ); + + return packageCard; +} + +/** + * Renders a single test link inside a package card. + */ +function renderTestItem( entry: ManualTestEntry ): HTMLElement { + const testItem = cloneTemplateElement( 'manual-test-template' ); + const link = testItem.querySelector( '.pkg__link' )!; + + link.href = entry.href; + testItem.querySelector( '.pkg__test-name' )!.textContent = entry.displayName; + testItem.querySelector( '.pkg__test-slug' )!.textContent = entry.slug; + + return testItem; +} + +/** + * Clones a one-root HTML template used by the index UI. + */ +function cloneTemplateElement( templateId: string ): HTMLElement { + const fragment = document + .querySelector( `#${ templateId }` )! + .content.cloneNode( true ) as DocumentFragment; + + return fragment.firstElementChild as HTMLElement; +} diff --git a/packages/ckeditor5-dev-manual-server/theme/shell.css b/packages/ckeditor5-dev-manual-server/theme/shell.css new file mode 100644 index 000000000..51bc39ee0 --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/theme/shell.css @@ -0,0 +1,475 @@ +.manual-test-container { + grid-column: 1; + grid-row: 2; + order: 1; + flex: 1 1 auto; + min-height: 0; + min-width: 0; + box-sizing: border-box; + overflow: auto; + padding: 8px; +} + +body.shell-enabled { + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + grid-template-rows: auto minmax(0, 1fr); + box-sizing: border-box; + height: 100vh; + margin: 0; + min-height: 0; + overflow: hidden; + padding: 0; +} + +.shell { + grid-column: 1 / -1; + grid-row: 1; + position: relative; + z-index: 99999; + display: flex; + align-items: stretch; + box-sizing: border-box; + padding: 6px 8px; + width: 100vw; + font-family: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; + font-size: 12px; + line-height: 1.25; + color: #0a0a0a; + background: rgb(255 255 255 / 85%); + backdrop-filter: saturate(180%) blur(20px); + -webkit-backdrop-filter: saturate(180%) blur(20px); + border-bottom: 1px solid rgb(0 0 0 / 8%); + box-shadow: 0 1px 2px rgb(0 0 0 / 4%); +} + +.shell__pill { + display: inline-flex; + align-items: center; + padding: 8px 14px; + border: 0; + background: transparent; + border-radius: 999px; + text-decoration: none; + color: inherit; + font: inherit; + font-weight: 500; + white-space: nowrap; + transition: background 0.1s; + cursor: pointer; +} + +.shell__pill:hover { + background: rgb(0 0 0 / 5%); +} + +.shell__pill:active { + background: rgb(0 0 0 / 10%); +} + +.shell__pill:focus-visible { + outline: 2px solid rgb(0 0 0 / 30%); + outline-offset: 1px; +} + +.shell__divider { + flex-shrink: 0; + align-self: center; + width: 1px; + height: 16px; + background: rgb(0 0 0 / 10%); + margin: 0 2px; +} + +.shell__label { + display: inline-flex; + align-items: center; + flex: 1 1 auto; + gap: 10px; + padding: 8px 14px; + overflow: hidden; + min-width: 0; +} + +.shell__label-name { + font-weight: 600; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.shell__label-package { + font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; + font-weight: 400; + font-size: 11px; + opacity: 0.55; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.manual-refresh-prompt { + position: fixed; + top: calc( var( --shell-height, 44px ) / 1.25 ); + left: 50%; + z-index: 100000; + box-sizing: border-box; + padding: 8px 14px; + border: 1px solid #bfdbfe; + border-radius: 999px; + font: 600 12px/1.25 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; + color: #1d4ed8; + background: #dbeafe; + cursor: pointer; + opacity: 0; + pointer-events: none; + transform: translate(-50%, calc( -100% - var( --shell-height, 44px ) ) ); + transition: transform 0.18s ease-out, opacity 0.18s ease-out, background 0.1s; +} + +.manual-refresh-prompt--visible { + opacity: 1; + pointer-events: auto; + transform: translate(-50%, -50%); +} + +.manual-refresh-prompt:hover { + background: #bfdbfe; +} + +.manual-refresh-prompt:active { + background: #93c5fd; +} + +.manual-refresh-prompt:focus-visible { + outline: 2px solid #2563eb; + outline-offset: 1px; +} + +@media (prefers-color-scheme: dark) { + .shell { + color: #ededed; + background: rgb(20 20 20 / 80%); + border-color: rgb(255 255 255 / 10%); + box-shadow: 0 1px 2px rgb(0 0 0 / 30%), 0 8px 24px rgb(0 0 0 / 50%); + } + + .shell__pill:hover { + background: rgb(255 255 255 / 8%); + } + + .shell__pill:active { + background: rgb(255 255 255 / 14%); + } + + .shell__pill:focus-visible { + outline-color: rgb(255 255 255 / 30%); + } + + .shell__divider { + background: rgb(255 255 255 / 12%); + } + + .manual-refresh-prompt { + color: #bfdbfe; + background: #1e3a8a; + border-color: #2563eb; + box-shadow: 0 8px 24px rgb(37 99 235 / 25%), 0 1px 2px rgb(0 0 0 / 30%); + } + + .manual-refresh-prompt:hover { + background: #1d4ed8; + } + + .manual-refresh-prompt:active { + background: #2563eb; + } + + .manual-refresh-prompt:focus-visible { + outline-color: #93c5fd; + } +} + +@media (max-width: 600px) { + .shell { + font-size: 11px; + } + + .shell__label-package { + display: none; + } + + .shell__label-name { + max-width: 20ch; + } +} + +.shell-instructions { + --shell-instructions-width: min(420px, 45vw); + --shell-instructions-transition-duration: 0.18s; + + position: fixed; + top: 44px; + right: 0; + bottom: 0; + z-index: 99998; + order: 2; + align-self: start; + flex: 0 0 0; + width: 0; + height: 0; + min-height: 0; + padding: 0; + border: 0; + background: #fff; + color: #0a0a0a; + font-family: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; + line-height: 1.6; + overflow: hidden; + transition: + flex-basis var(--shell-instructions-transition-duration) ease-out, + width var(--shell-instructions-transition-duration) ease-out; +} + +.shell-instructions--open, +.shell-instructions--closing { + align-self: stretch; + height: auto; + border-left: 1px solid rgb(0 0 0 / 8%); + box-shadow: -8px 0 24px rgb(0 0 0 / 8%); +} + +.shell-instructions--open { + flex-basis: var(--shell-instructions-width); + width: var(--shell-instructions-width); +} + +.shell-instructions__inner { + display: flex; + flex-direction: column; + width: var(--shell-instructions-width); + height: 100%; +} + +.shell-instructions__header { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 16px; + padding: 20px 24px; + border-bottom: 1px solid rgb(0 0 0 / 8%); + flex-shrink: 0; +} + +.shell-instructions__titles { + min-width: 0; +} + +.shell-instructions__title { + margin: 0 0 4px; + font-size: 18px; + font-weight: 700; + letter-spacing: -0.01em; + line-height: 1.3; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.shell-instructions__package { + font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; + font-size: 12px; + color: #737373; +} + +.shell-instructions__close { + flex-shrink: 0; + display: inline-flex; + align-items: center; + justify-content: center; + width: 32px; + height: 32px; + padding: 0; + border: 0; + border-radius: 8px; + background: transparent; + color: #737373; + cursor: pointer; + transition: background 0.1s, color 0.1s; +} + +.shell-instructions__close:hover { + background: rgb(0 0 0 / 5%); + color: #0a0a0a; +} + +.shell-instructions__close:focus-visible { + outline: 2px solid rgb(0 0 0 / 30%); + outline-offset: 1px; +} + +.shell-instructions__body { + padding: 20px 24px 28px; + font-size: 14px; + overflow-y: auto; + min-height: 0; +} + +.shell-instructions__body h1, +.shell-instructions__body h2, +.shell-instructions__body h3, +.shell-instructions__body h4, +.shell-instructions__body h5, +.shell-instructions__body h6 { + margin: 24px 0 8px; + font-weight: 600; + letter-spacing: -0.01em; + line-height: 1.3; +} + +.shell-instructions__body h1 { font-size: 20px; } +.shell-instructions__body h2 { font-size: 17px; } +.shell-instructions__body h3 { font-size: 15px; } +.shell-instructions__body h4, +.shell-instructions__body h5, +.shell-instructions__body h6 { font-size: 14px; } + +.shell-instructions__body > :first-child { margin-top: 0; } +.shell-instructions__body > :last-child { margin-bottom: 0; } + +.shell-instructions__body p { + margin: 8px 0; +} + +.shell-instructions__body ul, +.shell-instructions__body ol { + margin: 8px 0; + padding-left: 24px; +} + +.shell-instructions__body li { + margin: 3px 0; +} + +.shell-instructions__body code { + padding: 1px 6px; + border-radius: 4px; + background: #f0f0f0; + font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; + font-size: 0.9em; +} + +.shell-instructions__body pre { + margin: 12px 0; + padding: 12px 14px; + border-radius: 8px; + background: #f5f5f5; + overflow-x: auto; + font-size: 12px; + line-height: 1.5; +} + +.shell-instructions__body pre code { + padding: 0; + background: transparent; + font-size: inherit; +} + +.shell-instructions__body a { + color: #1d4ed8; + text-decoration: underline; + text-underline-offset: 2px; +} + +.shell-instructions__body blockquote { + margin: 12px 0; + padding: 4px 14px; + border-left: 3px solid rgb(0 0 0 / 15%); + color: #525252; +} + +.shell-instructions__body table { + margin: 12px 0; + border-collapse: collapse; + font-size: 13px; +} + +.shell-instructions__body th, +.shell-instructions__body td { + padding: 6px 10px; + border: 1px solid rgb(0 0 0 / 10%); + text-align: left; +} + +.shell-instructions__body th { + background: #f5f5f5; + font-weight: 600; +} + +.shell-instructions__body hr { + margin: 16px 0; + border: 0; + border-top: 1px solid rgb(0 0 0 / 10%); +} + +@media (prefers-color-scheme: dark) { + .shell-instructions { + background: #141414; + color: #ededed; + border-left-color: rgb(255 255 255 / 10%); + box-shadow: -8px 0 24px rgb(0 0 0 / 40%); + } + + .shell-instructions__header { + border-color: rgb(255 255 255 / 10%); + } + + .shell-instructions__package { + color: #a3a3a3; + } + + .shell-instructions__close { + color: #a3a3a3; + } + + .shell-instructions__close:hover { + background: rgb(255 255 255 / 8%); + color: #ededed; + } + + .shell-instructions__body code { + background: #1e1e1e; + } + + .shell-instructions__body pre { + background: #1e1e1e; + } + + .shell-instructions__body a { + color: #93c5fd; + } + + .shell-instructions__body blockquote { + border-left-color: rgb(255 255 255 / 15%); + color: #a3a3a3; + } + + .shell-instructions__body th, + .shell-instructions__body td { + border-color: rgb(255 255 255 / 12%); + } + + .shell-instructions__body th { + background: #1e1e1e; + } + + .shell-instructions__body hr { + border-top-color: rgb(255 255 255 / 12%); + } +} + +@media (max-width: 800px) { + .shell-instructions { + --shell-instructions-width: min(360px, 70vw); + } +} diff --git a/packages/ckeditor5-dev-manual-server/theme/shell.html b/packages/ckeditor5-dev-manual-server/theme/shell.html new file mode 100644 index 000000000..e8a8f9d57 --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/theme/shell.html @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + diff --git a/packages/ckeditor5-dev-manual-server/theme/shell.ts b/packages/ckeditor5-dev-manual-server/theme/shell.ts new file mode 100644 index 000000000..a9072b99f --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/theme/shell.ts @@ -0,0 +1,184 @@ +/** + * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. + * For licensing, see LICENSE.md. + */ + +import CKEditorInspector from '@ckeditor/ckeditor5-inspector'; + +import './shell.css'; + +declare const LICENSE_KEY: string; + +interface ManualData { + displayName: string; + instructionsHtml: string; + packageName: string; +} + +interface ViteHotContextLike { + on( event: string, callback: () => void ): void; +} + +const MANUAL_REFRESH_EVENT_NAME = 'ckeditor5-manual:refresh-available'; +const globalTarget = window as any; + +renderManual(); +setupManualTestContainerState(); +setupManualRefreshPrompt(); + +// In direct HTML manual tests, `id="editor"` creates `window.editor` as a named DOM property. +// Reset it so manual tests can safely reuse `window.editor` for the editor instance. +if ( globalTarget.editor instanceof Element ) { + globalTarget.editor = null; +} + +if ( !globalTarget.CKEditorInspector ) { + globalTarget.CKEditorInspector = CKEditorInspector; +} + +if ( !globalTarget.CKEDITOR_GLOBAL_LICENSE_KEY ) { + globalTarget.CKEDITOR_GLOBAL_LICENSE_KEY = LICENSE_KEY; +} + +/** + * Clones the injected Shell template, fills it with current test metadata, + * and prepends it to the page before the test content is wrapped. + */ +function renderManual(): void { + const template = document.querySelector( '#manual-shell-template' )!; + const dataElement = document.querySelector( '#manual-shell-data' )!; + const data = JSON.parse( dataElement.textContent! ) as ManualData; + const fragment = template.content.cloneNode( true ) as DocumentFragment; + + for ( const element of fragment.querySelectorAll( '[data-manual-shell-field="displayName"]' ) ) { + element.textContent = data.displayName; + } + + for ( const element of fragment.querySelectorAll( '[data-manual-shell-field="packageName"]' ) ) { + element.textContent = data.packageName; + } + + if ( data.instructionsHtml ) { + fragment.querySelector( '.shell-instructions__body' )!.innerHTML = data.instructionsHtml; + } else { + for ( const element of fragment.querySelectorAll( '[data-manual-shell-section="instructions"]' ) ) { + element.remove(); + } + } + + template.remove(); + dataElement.remove(); + document.body.prepend( fragment ); +} + +/** + * Sets up shell-related state for the manual test container injected by the HTML transform. + */ +function setupManualTestContainerState(): void { + document.body.classList.add( 'shell-enabled' ); + + if ( document.querySelector( '.shell-instructions' ) ) { + document.body.classList.add( 'shell-has-instructions' ); + } +} + +/** + * Shows a manual refresh prompt when the dev server reports source changes. + */ +function setupManualRefreshPrompt(): void { + const hot = ( import.meta as ImportMeta & { hot?: ViteHotContextLike } ).hot; + + if ( !hot ) { + return; + } + + const button = document.createElement( 'button' ); + + button.type = 'button'; + button.className = 'manual-refresh-prompt'; + button.textContent = 'Source changed. Click here to refresh the page.'; + button.tabIndex = -1; + button.setAttribute( 'aria-hidden', 'true' ); + button.addEventListener( 'click', () => window.location.reload() ); + + document.body.appendChild( button ); + + hot.on( MANUAL_REFRESH_EVENT_NAME, () => { + button.removeAttribute( 'aria-hidden' ); + button.removeAttribute( 'tabindex' ); + button.classList.add( 'manual-refresh-prompt--visible' ); + } ); +} + +/** + * Opens or closes the instructions panel and synchronizes related accessibility state. + */ +function toggleInstructions( isOpen: boolean ): void { + const panel = document.querySelector( '.shell-instructions' ); + const trigger = document.querySelector( '[data-shell-action="show-instructions"]' ); + + if ( !panel || !trigger ) { + return; + } + + panel.classList.remove( 'shell-instructions--closing' ); + + if ( !isOpen && panel.classList.contains( 'shell-instructions--open' ) ) { + panel.classList.add( 'shell-instructions--closing' ); + } + + panel.classList.toggle( 'shell-instructions--open', isOpen ); + panel.setAttribute( 'aria-hidden', String( !isOpen ) ); + panel.toggleAttribute( 'inert', !isOpen ); + trigger.setAttribute( 'aria-expanded', String( isOpen ) ); +} + +/** + * Handles clicks on Shell action buttons. + */ +document.addEventListener( 'click', event => { + const target = event.target; + + if ( !( target instanceof Element ) ) { + return; + } + + const trigger = target.closest( '[data-shell-action]' ); + + if ( !trigger ) { + return; + } + + if ( trigger.dataset.shellAction == 'show-instructions' ) { + const panel = document.querySelector( '.shell-instructions' )!; + + toggleInstructions( !panel.classList.contains( 'shell-instructions--open' ) ); + } else if ( trigger.dataset.shellAction == 'close-instructions' ) { + toggleInstructions( false ); + } +} ); + +/** + * Cleans up the closing state after the instructions panel transition finishes. + */ +document.addEventListener( 'transitionend', event => { + const target = event.target; + + if ( + event.propertyName == 'width' && + target instanceof Element && + target.classList.contains( 'shell-instructions' ) && + !target.classList.contains( 'shell-instructions--open' ) + ) { + target.classList.remove( 'shell-instructions--closing' ); + } +} ); + +/** + * Allows closing the instructions panel with Escape. + */ +document.addEventListener( 'keydown', event => { + if ( event.key == 'Escape' ) { + toggleInstructions( false ); + } +} ); diff --git a/packages/ckeditor5-dev-manual-server/vitest.config.ts b/packages/ckeditor5-dev-manual-server/vitest.config.ts new file mode 100644 index 000000000..c3e9f1592 --- /dev/null +++ b/packages/ckeditor5-dev-manual-server/vitest.config.ts @@ -0,0 +1,27 @@ +/** + * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. + * For licensing, see LICENSE.md. + */ + +import { defineConfig } from 'vitest/config'; + +export default defineConfig( { + test: { + testTimeout: 10000, + restoreMocks: true, + clearMocks: true, + mockReset: true, + unstubEnvs: true, + unstubGlobals: true, + include: [ + 'tests/**/*.ts' + ], + coverage: { + provider: 'v8', + include: [ + 'src/**' + ], + reporter: [ 'text', 'json', 'html', 'lcov' ] + } + } +} ); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f1f96b79c..7c6c913ba 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,25 +18,25 @@ importers: devDependencies: '@inquirer/prompts': specifier: ^7.10.1 - version: 7.10.1(@types/node@25.5.2) + version: 7.10.1(@types/node@22.19.19) '@listr2/prompt-adapter-inquirer': specifier: ^2.0.22 - version: 2.0.22(@inquirer/prompts@7.10.1(@types/node@25.5.2)) + version: 2.0.22(@inquirer/prompts@7.10.1(@types/node@22.19.19)) '@vitest/coverage-v8': specifier: ^4.1.2 - version: 4.1.2(vitest@4.1.2(@types/node@25.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))) + version: 4.1.7(vitest@4.1.7) eslint: specifier: ^9.39.4 - version: 9.39.4(jiti@2.6.1) + version: 9.39.4 eslint-config-ckeditor5: specifier: ^13.0.1 - version: 13.0.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.5.4) + version: 13.0.1(eslint@9.39.4)(typescript@5.5.4) eslint-plugin-ckeditor5-rules: specifier: ^13.0.1 version: 13.0.1 fs-extra: specifier: ^11.3.4 - version: 11.3.4 + version: 11.3.5 glob: specifier: ^13.0.6 version: 13.0.6 @@ -60,7 +60,7 @@ importers: version: 1.2.8 semver: specifier: ^7.7.4 - version: 7.7.4 + version: 7.8.1 typescript: specifier: 5.5.4 version: 5.5.4 @@ -68,26 +68,26 @@ importers: specifier: ^2.0.1 version: 2.0.1 vite: - specifier: '>=7.3.2 <8' - version: 7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3) + specifier: ^8.0.13 + version: 8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(terser@5.48.0)(yaml@2.9.0) vitest: specifier: ^4.1.2 - version: 4.1.2(@types/node@25.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) + version: 4.1.7(@types/node@22.19.19)(@vitest/coverage-v8@4.1.7)(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(terser@5.48.0)(yaml@2.9.0)) packages/ckeditor5-dev-build-tools: dependencies: '@rollup/pluginutils': specifier: ^5.3.0 - version: 5.3.0(rollup@4.60.1) + version: 5.3.0(rollup@4.60.4) cssnano: specifier: ^7.1.4 - version: 7.1.4(postcss@8.5.10) + version: 7.1.9(postcss@8.5.15) cssnano-preset-lite: specifier: ^4.0.4 - version: 4.0.4(postcss@8.5.10) + version: 4.0.6(postcss@8.5.15) es-toolkit: specifier: ^1.45.1 - version: 1.45.1 + version: 1.47.0 glob: specifier: ^13.0.6 version: 13.0.6 @@ -121,16 +121,16 @@ importers: version: 0.0.38 '@types/node': specifier: ^22.19.17 - version: 22.19.17 + version: 22.19.19 '@vitest/coverage-v8': specifier: ^4.1.2 - version: 4.1.2(vitest@4.1.2(@types/node@22.19.17)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))) + version: 4.1.7(vitest@4.1.7) type-fest: specifier: ^4.41.0 version: 4.41.0 vitest: specifier: ^4.1.2 - version: 4.1.2(@types/node@22.19.17)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) + version: 4.1.7(@types/node@22.19.19)(@vitest/coverage-v8@4.1.7)(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(terser@5.48.0)(yaml@2.9.0)) packages/ckeditor5-dev-bump-year: dependencies: @@ -148,7 +148,7 @@ importers: version: 7.0.0 date-fns: specifier: ^4.1.0 - version: 4.1.0 + version: 4.3.0 glob: specifier: ^13.0.6 version: 13.0.6 @@ -157,10 +157,10 @@ importers: version: 4.0.3 inquirer: specifier: ^12.11.1 - version: 12.11.1(@types/node@25.5.2) + version: 12.11.1(@types/node@22.19.19) semver: specifier: ^7.7.4 - version: 7.7.4 + version: 7.8.1 upath: specifier: ^2.0.1 version: 2.0.1 @@ -170,13 +170,13 @@ importers: version: 7.7.1 '@vitest/coverage-v8': specifier: ^4.1.2 - version: 4.1.2(vitest@4.1.2(@types/node@25.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))) + version: 4.1.7(vitest@4.1.7) rolldown: specifier: ^1.0.3 version: 1.0.3 vitest: specifier: ^4.1.2 - version: 4.1.2(@types/node@25.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) + version: 4.1.7(@types/node@22.19.19)(@vitest/coverage-v8@4.1.7)(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(terser@5.48.0)(yaml@2.9.0)) packages/ckeditor5-dev-ci: dependencies: @@ -188,11 +188,11 @@ importers: version: 2.0.7 snyk: specifier: ^1.1303.2 - version: 1.1303.2 + version: 1.1305.0 devDependencies: vitest: specifier: ^4.1.2 - version: 4.1.2(@types/node@25.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) + version: 4.1.7(@types/node@22.19.19)(@vitest/coverage-v8@4.1.7)(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(terser@5.48.0)(yaml@2.9.0)) packages/ckeditor5-dev-dependency-checker: dependencies: @@ -220,7 +220,7 @@ importers: devDependencies: vitest: specifier: ^4.1.2 - version: 4.1.2(@types/node@25.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) + version: 4.1.7(@types/node@22.19.19)(@vitest/coverage-v8@4.1.7)(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(terser@5.48.0)(yaml@2.9.0)) packages/ckeditor5-dev-docs: dependencies: @@ -232,10 +232,10 @@ importers: version: 13.0.6 typedoc: specifier: ^0.28.18 - version: 0.28.18(typescript@5.5.4) + version: 0.28.19(typescript@5.5.4) typedoc-plugin-rename-defaults: specifier: ^0.7.3 - version: 0.7.3(typedoc@0.28.18(typescript@5.5.4)) + version: 0.7.3(typedoc@0.28.19(typescript@5.5.4)) upath: specifier: ^2.0.1 version: 2.0.1 @@ -245,7 +245,7 @@ importers: version: 5.0.3 vitest: specifier: ^4.1.2 - version: 4.1.2(@types/node@25.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) + version: 4.1.7(@types/node@22.19.19)(@vitest/coverage-v8@4.1.7)(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(terser@5.48.0)(yaml@2.9.0)) packages/ckeditor5-dev-license-checker: dependencies: @@ -258,13 +258,59 @@ importers: devDependencies: '@vitest/coverage-v8': specifier: ^4.1.2 - version: 4.1.2(vitest@4.1.2(@types/node@25.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))) + version: 4.1.7(vitest@4.1.7) rolldown: specifier: ^1.0.3 version: 1.0.3 vitest: specifier: ^4.1.2 - version: 4.1.2(@types/node@25.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) + version: 4.1.7(@types/node@22.19.19)(@vitest/coverage-v8@4.1.7)(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(terser@5.48.0)(yaml@2.9.0)) + + packages/ckeditor5-dev-manual-server: + dependencies: + '@ckeditor/ckeditor5-inspector': + specifier: ^5.0.1 + version: 5.0.1 + '@parse5/tools': + specifier: ^0.7.0 + version: 0.7.0(parse5@8.0.1) + hast-util-to-html: + specifier: ^9.0.5 + version: 9.0.5 + parse5: + specifier: ^8.0.1 + version: 8.0.1 + remark-gfm: + specifier: ^4.0.1 + version: 4.0.1 + remark-parse: + specifier: ^11.0.0 + version: 11.0.0 + remark-rehype: + specifier: ^11.1.2 + version: 11.1.2 + unified: + specifier: ^11.0.5 + version: 11.0.5 + vite: + specifier: ^8.0.13 + version: 8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(terser@5.48.0)(yaml@2.9.0) + vite-svg-loader: + specifier: ^5.1.1 + version: 5.1.1(vue@3.5.34(typescript@5.5.4)) + devDependencies: + '@vitest/coverage-v8': + specifier: ^4.1.2 + version: 4.1.7(vitest@4.1.7) + rolldown: + specifier: ^1.0.3 + version: 1.0.3 + upath: + specifier: ^2.0.1 + version: 2.0.1 + vitest: + specifier: ^4.1.2 + version: 4.1.7(@types/node@22.19.19)(@vitest/coverage-v8@4.1.7)(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(terser@5.48.0)(yaml@2.9.0)) packages/ckeditor5-dev-release-tools: dependencies: @@ -282,10 +328,10 @@ importers: version: 13.0.6 inquirer: specifier: ^12.11.1 - version: 12.11.1(@types/node@25.5.2) + version: 12.11.1(@types/node@22.19.19) semver: specifier: ^7.7.4 - version: 7.7.4 + version: 7.8.1 shell-escape: specifier: ^0.2.0 version: 0.2.0 @@ -298,7 +344,7 @@ importers: devDependencies: date-fns: specifier: ^4.1.0 - version: 4.1.0 + version: 4.3.0 jest-extended: specifier: ^5.0.3 version: 5.0.3 @@ -307,7 +353,7 @@ importers: version: 5.5.0 vitest: specifier: ^4.1.2 - version: 4.1.2(@types/node@25.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) + version: 4.1.7(@types/node@22.19.19)(@vitest/coverage-v8@4.1.7)(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(terser@5.48.0)(yaml@2.9.0)) packages/ckeditor5-dev-stale-bot: dependencies: @@ -316,13 +362,13 @@ importers: version: link:../ckeditor5-dev-utils date-fns: specifier: ^4.1.0 - version: 4.1.0 + version: 4.3.0 graphql: specifier: ^16.13.2 - version: 16.13.2 + version: 16.14.0 graphql-request: specifier: ^7.4.0 - version: 7.4.0(graphql@16.13.2) + version: 7.4.0(graphql@16.14.0) minimist: specifier: ^1.2.8 version: 1.2.8 @@ -335,13 +381,13 @@ importers: devDependencies: vitest: specifier: ^4.1.2 - version: 4.1.2(@types/node@25.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) + version: 4.1.7(@types/node@22.19.19)(@vitest/coverage-v8@4.1.7)(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(terser@5.48.0)(yaml@2.9.0)) packages/ckeditor5-dev-tests: dependencies: '@babel/core': specifier: ^7.29.0 - version: 7.29.0 + version: 7.29.7 '@ckeditor/ckeditor5-dev-translations': specifier: workspace:* version: link:../ckeditor5-dev-translations @@ -389,7 +435,7 @@ importers: version: 0.1.3 es-toolkit: specifier: ^1.45.1 - version: 1.45.1 + version: 1.47.0 glob: specifier: ^13.0.6 version: 13.0.6 @@ -431,7 +477,7 @@ importers: version: 0.4.0 karma-webpack: specifier: ^5.0.1 - version: 5.0.1(webpack@5.105.4) + version: 5.0.1(webpack@5.107.2(esbuild@0.27.7)) minimatch: specifier: ^10.2.5 version: 10.2.5 @@ -443,7 +489,7 @@ importers: version: 3.0.1 mocha: specifier: ^11.7.5 - version: 11.7.5 + version: 11.7.6 node-notifier: specifier: ^10.0.1 version: 10.0.1 @@ -467,23 +513,23 @@ importers: version: 2.0.1 webpack: specifier: ^5.105.4 - version: 5.105.4 + version: 5.107.2(esbuild@0.27.7) devDependencies: jest-extended: specifier: ^5.0.3 version: 5.0.3 vitest: specifier: ^4.1.2 - version: 4.1.2(@types/node@25.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) + version: 4.1.7(@types/node@22.19.19)(@vitest/coverage-v8@4.1.7)(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(terser@5.48.0)(yaml@2.9.0)) packages/ckeditor5-dev-translations: dependencies: '@babel/parser': specifier: ^7.29.2 - version: 7.29.2 + version: 7.29.7 '@babel/traverse': specifier: ^7.29.0 - version: 7.29.0 + version: 7.29.7 '@ckeditor/ckeditor5-dev-utils': specifier: workspace:* version: link:../ckeditor5-dev-utils @@ -507,11 +553,11 @@ importers: version: 2.0.1 webpack-sources: specifier: ^3.3.4 - version: 3.3.4 + version: 3.5.0 devDependencies: vitest: specifier: ^4.1.2 - version: 4.1.2(@types/node@25.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) + version: 4.1.7(@types/node@22.19.19)(@vitest/coverage-v8@4.1.7)(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(terser@5.48.0)(yaml@2.9.0)) packages/ckeditor5-dev-utils: dependencies: @@ -523,7 +569,7 @@ importers: version: 2.0.41 babel-loader: specifier: ^10.1.1 - version: 10.1.1(@babel/core@7.29.0)(webpack@5.105.4) + version: 10.1.1(@babel/core@7.29.7)(webpack@5.107.2(esbuild@0.27.7)(lightningcss@1.32.0)(postcss@8.5.15)) cli-cursor: specifier: ^5.0.0 version: 5.0.0 @@ -532,10 +578,10 @@ importers: version: 3.4.0 css-loader: specifier: ^7.1.4 - version: 7.1.4(webpack@5.105.4) + version: 7.1.4(webpack@5.107.2(esbuild@0.27.7)(lightningcss@1.32.0)(postcss@8.5.15)) esbuild-loader: specifier: ^4.4.3 - version: 4.4.3(webpack@5.105.4) + version: 4.4.3(webpack@5.107.2(esbuild@0.27.7)(lightningcss@1.32.0)(postcss@8.5.15)) glob: specifier: ^13.0.6 version: 13.0.6 @@ -547,13 +593,13 @@ importers: version: 1.32.0 mini-css-extract-plugin: specifier: ^2.10.2 - version: 2.10.2(webpack@5.105.4) + version: 2.10.2(webpack@5.107.2(esbuild@0.27.7)(lightningcss@1.32.0)(postcss@8.5.15)) pacote: specifier: ^21.5.0 version: 21.5.0 raw-loader: specifier: ^4.0.2 - version: 4.0.2(webpack@5.105.4) + version: 4.0.2(webpack@5.107.2(esbuild@0.27.7)(lightningcss@1.32.0)(postcss@8.5.15)) shelljs: specifier: ^0.10.0 version: 0.10.0 @@ -562,7 +608,7 @@ importers: version: 3.36.0 style-loader: specifier: ^4.0.0 - version: 4.0.0(webpack@5.105.4) + version: 4.0.0(webpack@5.107.2(esbuild@0.27.7)(lightningcss@1.32.0)(postcss@8.5.15)) through2: specifier: ^4.0.2 version: 4.0.2 @@ -575,7 +621,7 @@ importers: version: 11.1.8 '@vitest/coverage-v8': specifier: ^4.1.2 - version: 4.1.2(vitest@4.1.2(@types/node@25.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))) + version: 4.1.7(vitest@4.1.7) jest-extended: specifier: ^5.0.3 version: 5.0.3 @@ -584,20 +630,20 @@ importers: version: 1.0.3 vitest: specifier: ^4.1.2 - version: 4.1.2(@types/node@25.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) + version: 4.1.7(@types/node@22.19.19)(@vitest/coverage-v8@4.1.7)(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(terser@5.48.0)(yaml@2.9.0)) packages/ckeditor5-dev-web-crawler: dependencies: puppeteer: specifier: ^24.40.0 - version: 24.40.0(typescript@5.5.4) + version: 24.43.1(typescript@5.5.4) puppeteer-cluster: specifier: ^0.24.0 - version: 0.24.0(puppeteer@24.40.0(typescript@5.5.4)) + version: 0.24.0(puppeteer@24.43.1(typescript@5.5.4)) devDependencies: '@vitest/coverage-v8': specifier: ^4.1.2 - version: 4.1.2(vitest@4.1.2(@types/node@25.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))) + version: 4.1.7(vitest@4.1.7) rolldown: specifier: ^1.0.3 version: 1.0.3 @@ -606,7 +652,7 @@ importers: version: 2.0.1 vitest: specifier: ^4.1.2 - version: 4.1.2(@types/node@25.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) + version: 4.1.7(@types/node@22.19.19)(@vitest/coverage-v8@4.1.7)(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(terser@5.48.0)(yaml@2.9.0)) packages/typedoc-plugins: dependencies: @@ -622,85 +668,85 @@ importers: version: 1.0.3 typedoc: specifier: ^0.28.18 - version: 0.28.18(typescript@5.5.4) + version: 0.28.19(typescript@5.5.4) typedoc-plugin-rename-defaults: specifier: ^0.7.3 - version: 0.7.3(typedoc@0.28.18(typescript@5.5.4)) + version: 0.7.3(typedoc@0.28.19(typescript@5.5.4)) vitest: specifier: ^4.1.2 - version: 4.1.2(@types/node@25.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) + version: 4.1.7(@types/node@22.19.19)(@vitest/coverage-v8@4.1.7)(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(terser@5.48.0)(yaml@2.9.0)) packages: - '@babel/code-frame@7.29.0': - resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.29.0': - resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} + '@babel/compat-data@7.29.7': + resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==} engines: {node: '>=6.9.0'} - '@babel/core@7.29.0': - resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} + '@babel/core@7.29.7': + resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.29.1': - resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + '@babel/generator@7.29.7': + resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.28.6': - resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + '@babel/helper-compilation-targets@7.29.7': + resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} engines: {node: '>=6.9.0'} - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + '@babel/helper-globals@7.29.7': + resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.28.6': - resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + '@babel/helper-module-imports@7.29.7': + resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.28.6': - resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + '@babel/helper-module-transforms@7.29.7': + resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-plugin-utils@7.28.6': - resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + '@babel/helper-plugin-utils@7.29.7': + resolution: {integrity: sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + '@babel/helper-validator-option@7.29.7': + resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.29.2': - resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} + '@babel/helpers@7.29.7': + resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} engines: {node: '>=6.9.0'} - '@babel/parser@7.29.2': - resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/template@7.28.6': - resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + '@babel/template@7.29.7': + resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.29.0': - resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + '@babel/traverse@7.29.7': + resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==} engines: {node: '>=6.9.0'} - '@babel/types@7.29.0': - resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@1.0.2': @@ -720,8 +766,8 @@ packages: - react-rnd - redux - '@colordx/core@5.0.3': - resolution: {integrity: sha512-xBQ0MYRTNNxW3mS2sJtlQTT7C3Sasqgh1/PsHva7fyDb5uqYY+gv9V0utDdX8X80mqzbGz3u/IDJdn2d/uW09g==} + '@colordx/core@5.4.3': + resolution: {integrity: sha512-kIxYSfA5T8HXjav55UaaH/o/cKivF6jCCGIb8eqtcsfI46wsvlSiT8jMDyrl779qLec3c2c2oHBZo4oAhvbjrQ==} '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} @@ -962,12 +1008,16 @@ packages: peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} engines: {node: '>=18.18.0'} - '@humanfs/node@0.16.7': - resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': @@ -1128,8 +1178,8 @@ packages: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} - '@istanbuljs/schema@0.1.3': - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + '@istanbuljs/schema@0.1.6': + resolution: {integrity: sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==} engines: {node: '>=8'} '@jest/schemas@29.6.3': @@ -1266,8 +1316,8 @@ packages: resolution: {integrity: sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==} engines: {node: '>= 20'} - '@octokit/request@10.0.8': - resolution: {integrity: sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw==} + '@octokit/request@10.0.10': + resolution: {integrity: sha512-KxNC2pTqqhszMNrf12ZRd4PonRgyJdsM4F/jySiddQK+DsRcfBtUvqn8t7UsyZhnRJHvX46OohDt5N3VqIWC2w==} engines: {node: '>= 20'} '@octokit/rest@22.0.1': @@ -1369,6 +1419,9 @@ packages: cpu: [x64] os: [win32] + '@oxc-project/types@0.132.0': + resolution: {integrity: sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==} + '@oxc-project/types@0.133.0': resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} @@ -1502,45 +1555,87 @@ packages: cpu: [x64] os: [win32] + '@parse5/tools@0.7.0': + resolution: {integrity: sha512-JDvrGhc8kYBq7/SM4obJkpgwWo6pRjF/fo9CCaiJyVOkDf203Ciq2UF6TjzCFXKs7Q/zS2sS4deyBx0XzRvh9Q==} + peerDependencies: + parse5: 7.x || 8.x + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@puppeteer/browsers@2.13.0': - resolution: {integrity: sha512-46BZJYJjc/WwmKjsvDFykHtXrtomsCIrwYQPOP7VfMJoZY2bsDF9oROBABR3paDjDcmkUye1Pb1BqdcdiipaWA==} + '@puppeteer/browsers@2.13.2': + resolution: {integrity: sha512-5EUZSUIc37H6aIXyWO0Z4y8NlF8NnjgmqeQgOGiswAU7pY0HOo16ho4+alIWmSfdZnjqBRawMsP3I5YqLSn6kw==} engines: {node: '>=18'} hasBin: true + '@rolldown/binding-android-arm64@1.0.2': + resolution: {integrity: sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + '@rolldown/binding-android-arm64@1.0.3': resolution: {integrity: sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] + '@rolldown/binding-darwin-arm64@1.0.2': + resolution: {integrity: sha512-vdFA9+C/rekyGce7WqHs/xoT0ioZEWaOFyZLIV1mEeNFaFDUQrPIo8Vs2GvJ6eetb3rzDUtUBgzto3ExpXJB3w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + '@rolldown/binding-darwin-arm64@1.0.3': resolution: {integrity: sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] + '@rolldown/binding-darwin-x64@1.0.2': + resolution: {integrity: sha512-BewSOwTHazv77DTYiAZXSqqKZ4KP/KonFisDMVU7PImxoWfB2aepnPhd2E4SWz3zDzYgDNbs6jBmTdgNnF02GA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + '@rolldown/binding-darwin-x64@1.0.3': resolution: {integrity: sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] + '@rolldown/binding-freebsd-x64@1.0.2': + resolution: {integrity: sha512-m41o7M0YWtUdqk61Tb+jnKb2rN++iRdIASlExkUoKfIAH30DOHCB8fVLzSUpbWHHU8esmEioY62PxzexE8MBuA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + '@rolldown/binding-freebsd-x64@1.0.3': resolution: {integrity: sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] + '@rolldown/binding-linux-arm-gnueabihf@1.0.2': + resolution: {integrity: sha512-jcojB9H7W/jS29pMKWAK1N+fU99vXodHDTatS3b3y/XSOCiHo0kkA74pL3jJmkoQtYpOCxDvaKs1fo2Ij/1X5w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + '@rolldown/binding-linux-arm-gnueabihf@1.0.3': resolution: {integrity: sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] + '@rolldown/binding-linux-arm64-gnu@1.0.2': + resolution: {integrity: sha512-1jn6qDU5iiOgFgygDzKUuKP0maTi0/f1+sBLgvij/76C77Nm3ts6ufz9Bjg5q5dduxiUIxtq86JIoBvo1xQ4Ig==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@rolldown/binding-linux-arm64-gnu@1.0.3': resolution: {integrity: sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1548,6 +1643,13 @@ packages: os: [linux] libc: [glibc] + '@rolldown/binding-linux-arm64-musl@1.0.2': + resolution: {integrity: sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + '@rolldown/binding-linux-arm64-musl@1.0.3': resolution: {integrity: sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1555,6 +1657,13 @@ packages: os: [linux] libc: [musl] + '@rolldown/binding-linux-ppc64-gnu@1.0.2': + resolution: {integrity: sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + '@rolldown/binding-linux-ppc64-gnu@1.0.3': resolution: {integrity: sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1562,6 +1671,13 @@ packages: os: [linux] libc: [glibc] + '@rolldown/binding-linux-s390x-gnu@1.0.2': + resolution: {integrity: sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + '@rolldown/binding-linux-s390x-gnu@1.0.3': resolution: {integrity: sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1569,6 +1685,13 @@ packages: os: [linux] libc: [glibc] + '@rolldown/binding-linux-x64-gnu@1.0.2': + resolution: {integrity: sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + '@rolldown/binding-linux-x64-gnu@1.0.3': resolution: {integrity: sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1576,6 +1699,13 @@ packages: os: [linux] libc: [glibc] + '@rolldown/binding-linux-x64-musl@1.0.2': + resolution: {integrity: sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + '@rolldown/binding-linux-x64-musl@1.0.3': resolution: {integrity: sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1583,31 +1713,54 @@ packages: os: [linux] libc: [musl] + '@rolldown/binding-openharmony-arm64@1.0.2': + resolution: {integrity: sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + '@rolldown/binding-openharmony-arm64@1.0.3': resolution: {integrity: sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] + '@rolldown/binding-wasm32-wasi@1.0.2': + resolution: {integrity: sha512-mb1VobWn6NheziTk5/WEaR6AKVbrwT5sOi6C7zk3gy/pD1qtJfU1j4PgTo2NJnOtbL9Dl3Aeei8w9jJ7qC2jZQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + '@rolldown/binding-wasm32-wasi@1.0.3': resolution: {integrity: sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] + '@rolldown/binding-win32-arm64-msvc@1.0.2': + resolution: {integrity: sha512-SqKonF56vA/L2yHwHYcEp2P34URpOZ7d1fS635cTkpDnUtEGdUbhI6NzsPdqeSWvAAeGDrxjWjNmibDIdFf9/A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + '@rolldown/binding-win32-arm64-msvc@1.0.3': resolution: {integrity: sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] + '@rolldown/binding-win32-x64-msvc@1.0.2': + resolution: {integrity: sha512-v7qRI7gXLRINcOGXt+7YmAZ6iFuyZVMIoXAxhd8oP+DR9dLfL9GfNIx7PLMxmhZdvq8waUJBQiWN9EKNy+TRBQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@rolldown/binding-win32-x64-msvc@1.0.3': resolution: {integrity: sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0': - resolution: {integrity: sha512-aKs/3GSWyV0mrhNmt/96/Z3yczC3yvrzYATCiCXQebBsGyYzjNdUphRVLeJQ67ySKVXRfMxt2lm12pmXvbPFQQ==} + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} '@rollup/pluginutils@5.3.0': resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} @@ -1618,141 +1771,141 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.60.1': - resolution: {integrity: sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==} + '@rollup/rollup-android-arm-eabi@4.60.4': + resolution: {integrity: sha512-F5QXMSiFebS9hKZj02XhWLLnRpJ3B3AROP0tWbFBSj+6kCbg5m9j5JoHKd4mmSVy5mS/IMQloYgYxCuJC0fxEQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.60.1': - resolution: {integrity: sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==} + '@rollup/rollup-android-arm64@4.60.4': + resolution: {integrity: sha512-GxxTKApUpzRhof7poWvCJHRF51C67u1R7D6DiluBE8wKU1u5GWE8t+v81JvJYtbawoBFX1hLv5Ei4eVjkWokaw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.60.1': - resolution: {integrity: sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==} + '@rollup/rollup-darwin-arm64@4.60.4': + resolution: {integrity: sha512-tua0TaJxMOB1R0V0RS1jFZ/RpURFDJIOR2A6jWwQeawuFyS4gBW+rntLRaQd0EQ4bd6Vp44Z2rXW+YYDBsj6IA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.60.1': - resolution: {integrity: sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==} + '@rollup/rollup-darwin-x64@4.60.4': + resolution: {integrity: sha512-CSKq7MsP+5PFIcydhAiR1K0UhEI1A2jWXVKHPCBZ151yOutENwvnPocgVHkivu2kviURtCEB6zUQw0vs8RrhMg==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.60.1': - resolution: {integrity: sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==} + '@rollup/rollup-freebsd-arm64@4.60.4': + resolution: {integrity: sha512-+O8OkVdyvXMtJEciu2wS/pzm1IxntEEQx3z5TAVy4l32G0etZn+RsA48ARRrFm6Ri8fvqPQfgrvNxSjKAbnd3g==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.60.1': - resolution: {integrity: sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==} + '@rollup/rollup-freebsd-x64@4.60.4': + resolution: {integrity: sha512-Iw3oMskH3AfNuhU0MSN7vNbdi4me/NiYo2azqPz/Le16zHSa+3RRmliCMWWQmh4lcndccU40xcJuTYJZxNo/lw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.60.1': - resolution: {integrity: sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==} + '@rollup/rollup-linux-arm-gnueabihf@4.60.4': + resolution: {integrity: sha512-EIPRXTVQpHyF8WOo219AD2yEltPehLTcTMz2fn6JsatLYSzQf00hj3rulF+yauOlF9/FtM2WpkT/hJh/KJFGhA==} cpu: [arm] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.60.1': - resolution: {integrity: sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==} + '@rollup/rollup-linux-arm-musleabihf@4.60.4': + resolution: {integrity: sha512-J3Yh9PzzF1Ovah2At+lHiGQdsYgArxBbXv/zHfSyaiFQEqvNv7DcW98pCrmdjCZBrqBiKrKKe2V+aaSGWuBe/w==} cpu: [arm] os: [linux] libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.60.1': - resolution: {integrity: sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==} + '@rollup/rollup-linux-arm64-gnu@4.60.4': + resolution: {integrity: sha512-BFDEZMYfUvLn37ONE1yMBojPxnMlTFsdyNoqncT0qFq1mAfllL+ATMMJd8TeuVMiX84s1KbcxcZbXInmcO2mRg==} cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.60.1': - resolution: {integrity: sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==} + '@rollup/rollup-linux-arm64-musl@4.60.4': + resolution: {integrity: sha512-pc9EYOSlOgdQ2uPl1o9PF6/kLSgaUosia7gOuS8mB69IxJvlclko1MECXysjs5ryez1/5zjYqx3+xYU0TU6R1A==} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.60.1': - resolution: {integrity: sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==} + '@rollup/rollup-linux-loong64-gnu@4.60.4': + resolution: {integrity: sha512-NxnomyxYerDh5n4iLrNa+sH+Z+U4BMEE46V2PgQ/hoB909i8gV1M5wPojWg9fk1jWpO3IQnOs20K4wyZuFLEFQ==} cpu: [loong64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-loong64-musl@4.60.1': - resolution: {integrity: sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==} + '@rollup/rollup-linux-loong64-musl@4.60.4': + resolution: {integrity: sha512-nbJnQ8a3z1mtmrwImCYhc6BGpThAyYVRQxw9uKSKG4wR6aAYno9sVjJ0zaZcW9BPJX1GbrDPf+SvdWjgTuDmnw==} cpu: [loong64] os: [linux] libc: [musl] - '@rollup/rollup-linux-ppc64-gnu@4.60.1': - resolution: {integrity: sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==} + '@rollup/rollup-linux-ppc64-gnu@4.60.4': + resolution: {integrity: sha512-2EU6acNrQLd8tYvo/LXW535wupT3m6fo7HKo6lr7ktQoItxTyOL1ZCR/GfGCuXl2vR+zmfI6eRXkSemafv+iVg==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-musl@4.60.1': - resolution: {integrity: sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==} + '@rollup/rollup-linux-ppc64-musl@4.60.4': + resolution: {integrity: sha512-WeBtoMuaMxiiIrO2IYP3xs6GMWkJP2C0EoT8beTLkUPmzV1i/UcOSVw1d5r9KBODtHKilG5yFxsGRnBbK3wJ4A==} cpu: [ppc64] os: [linux] libc: [musl] - '@rollup/rollup-linux-riscv64-gnu@4.60.1': - resolution: {integrity: sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==} + '@rollup/rollup-linux-riscv64-gnu@4.60.4': + resolution: {integrity: sha512-FJHFfqpKUI3A10WrWKiFbBZ7yVbGT4q4B5o1qKFFojqpaYoh9LrQgqWCmmcxQzVSXYtyB5bzkXrYzlHTs21MYA==} cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.60.1': - resolution: {integrity: sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==} + '@rollup/rollup-linux-riscv64-musl@4.60.4': + resolution: {integrity: sha512-mcEl6CUT5IAUmQf1m9FYSmVqCJlpQ8r8eyftFUHG8i9OhY7BkBXSUdnLH5DOf0wCOjcP9v/QO93zpmF1SptCCw==} cpu: [riscv64] os: [linux] libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.60.1': - resolution: {integrity: sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==} + '@rollup/rollup-linux-s390x-gnu@4.60.4': + resolution: {integrity: sha512-ynt3JxVd2w2buzoKDWIyiV1pJW93xlQic1THVLXilz429oijRpSHivZAgp65KBu+cMcgf1eVVjdnTLvPxgCuoQ==} cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.60.1': - resolution: {integrity: sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==} + '@rollup/rollup-linux-x64-gnu@4.60.4': + resolution: {integrity: sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==} cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.60.1': - resolution: {integrity: sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==} + '@rollup/rollup-linux-x64-musl@4.60.4': + resolution: {integrity: sha512-+qfSY27qIrFfI/Hom04KYFw3GKZSGU4lXus51wsb5EuySfFlWRwjkKWoE9emgRw/ukoT4Udsj4W/+xxG8VbPKg==} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openbsd-x64@4.60.1': - resolution: {integrity: sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==} + '@rollup/rollup-openbsd-x64@4.60.4': + resolution: {integrity: sha512-VpTfOPHgVXEBeeR8hZ2O0F3aSso+JDWqTWmTmzcQKted54IAdUVbxE+j/MVxUsKa8L20HJhv3vUezVPoquqWjA==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.60.1': - resolution: {integrity: sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==} + '@rollup/rollup-openharmony-arm64@4.60.4': + resolution: {integrity: sha512-IPOsh5aRYuLv/nkU51X10Bf75Bsf6+gZdx1X+QP5QM6lIJFHHqbHLG0uJn/hWthzo13UAc2umiUorqZy3axoZg==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.60.1': - resolution: {integrity: sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==} + '@rollup/rollup-win32-arm64-msvc@4.60.4': + resolution: {integrity: sha512-4QzE9E81OohJ/HKzHhsqU+zcYYojVOXlFMs1DdyMT6qXl/niOH7AVElmmEdUNHHS/oRkc++d5k6Vy85zFs0DEw==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.60.1': - resolution: {integrity: sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==} + '@rollup/rollup-win32-ia32-msvc@4.60.4': + resolution: {integrity: sha512-zTPgT1YuHHcd+Tmx7h8aml0FWFVelV5N54oHow9SLj+GfoDy/huQ+UV396N/C7KpMDMiPspRktzM1/0r1usYEA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.60.1': - resolution: {integrity: sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==} + '@rollup/rollup-win32-x64-gnu@4.60.4': + resolution: {integrity: sha512-DRS4G7mi9lJxqEDezIkKCaUIKCrLUUDCUaCsTPCi/rtqaC6D/jjwslMQyiDU50Ka0JKpeXeRBFBAXwArY52vBw==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.60.1': - resolution: {integrity: sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==} + '@rollup/rollup-win32-x64-msvc@4.60.4': + resolution: {integrity: sha512-QVTUovf40zgTqlFVrKA1uXMVvU2QWEFWfAH8Wdc48IxLvrJMQVMBRjuQyUpzZCDkakImib9eVazbWlC6ksWtJw==} cpu: [x64] os: [win32] @@ -1799,12 +1952,12 @@ packages: resolution: {integrity: sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A==} engines: {node: ^20.17.0 || >=22.9.0} - '@sigstore/core@3.2.0': - resolution: {integrity: sha512-kxHrDQ9YgfrWUSXU0cjsQGv8JykOFZQ9ErNKbFPWzk3Hgpwu8x2hHrQ9IdA8yl+j9RTLTC3sAF3Tdq1IQCP4oA==} + '@sigstore/core@3.2.1': + resolution: {integrity: sha512-qRsxPnCrbC/puegGxKuynfnxgLiHqWStrSjxkoB4YKqq3Z3s4cyZyj42ZdWFAEblNP65C+rBH8EuREHIXoi83g==} engines: {node: ^20.17.0 || >=22.9.0} - '@sigstore/protobuf-specs@0.5.0': - resolution: {integrity: sha512-MM8XIwUjN2bwvCg1QvrMtbBmpcSHrkhFSCu1D11NyPvDQ25HEc4oG5/OcQfd/Tlf/OxmKWERDj0zGE23jQaMwA==} + '@sigstore/protobuf-specs@0.5.1': + resolution: {integrity: sha512-/ScWUhhoFasJsSRGTVBwId1loQjjnjAfE4djL6ZhrXRpNCmPTnUKF5Jokd58ILseOMjzET3UrMOtJPS9sYeI0g==} engines: {node: ^18.17.0 || >=20.5.0} '@sigstore/sign@4.1.1': @@ -1815,8 +1968,8 @@ packages: resolution: {integrity: sha512-TCAzTy0xzdP79EnxSjq9KQ3eaR7+FmudLC6eRKknVKZbV7ZNlGLClAAQb/HMNJ5n2OBNk2GT1tEmU0xuPr+SLQ==} engines: {node: ^20.17.0 || >=22.9.0} - '@sigstore/verify@3.1.0': - resolution: {integrity: sha512-mNe0Iigql08YupSOGv197YdHpPPr+EzDZmfCgMc7RPNaZTw5aLN01nBl6CHJOh3BGtnMIj83EeN4butBchc8Ag==} + '@sigstore/verify@3.1.1': + resolution: {integrity: sha512-qv7+G3J2cc6wwFj3yKvXOamzqhMwSk1ogPGmhpS8iXllcPrJaIIBA+4HbttlHVu1pqWTdmaCH/WE7UOC51kdoA==} engines: {node: ^20.17.0 || >=22.9.0} '@simple-git/args-pathspec@1.0.3': @@ -1870,8 +2023,8 @@ packages: resolution: {integrity: sha512-Y8cK9aggNRsqJVaKUlEYs4s7CvQ1b1ta2DVPyAimb0I2qhzjNk+A+mxvll/klL0RlfuIUei8BF7YWiua4kQqww==} engines: {node: ^20.17.0 || >=22.9.0} - '@tybys/wasm-util@0.10.1': - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@tybys/wasm-util@0.10.2': + resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} '@types/chai@4.3.20': resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==} @@ -1891,15 +2044,12 @@ packages: '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} - '@types/eslint-scope@3.7.7': - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - - '@types/eslint@9.6.1': - resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} - '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} @@ -1927,11 +2077,8 @@ packages: '@types/node-fetch@2.6.13': resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==} - '@types/node@22.19.17': - resolution: {integrity: sha512-wGdMcf+vPYM6jikpS/qhg6WiqSV/OhG+jeeHT/KlVqxYfD40iYJf9/AE1uQxVWFvU7MipKRkRv8NSHiCGgPr8Q==} - - '@types/node@25.5.2': - resolution: {integrity: sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==} + '@types/node@22.19.19': + resolution: {integrity: sha512-dyh/xO2Fh5bYrfWaaqGrRQQGkNdmYw6AmaAUvYeUMNTWQtvb796ikLdmTchRmOlOiIJ1TDXfWgVx1QkUlQ6Hew==} '@types/npm-package-arg@6.1.4': resolution: {integrity: sha512-vDgdbMy2QXHnAruzlv68pUtXCjmqUk3WrBAsRboRovsOmxbfn/WiYCjmecyKjGztnMps5dWp4Uq2prp+Ilo17Q==} @@ -1978,79 +2125,82 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.58.0': - resolution: {integrity: sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg==} + '@typescript-eslint/eslint-plugin@8.60.0': + resolution: {integrity: sha512-QYb/sa74/s7OKMbACMjrYnGspj9Hs5YI5aaffSL65UfeBUzVzBJfVo3oWSpbzPurvm7yaCCo2Lk7lVj610HqKw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.58.0 + '@typescript-eslint/parser': ^8.60.0 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.58.0': - resolution: {integrity: sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA==} + '@typescript-eslint/parser@8.60.0': + resolution: {integrity: sha512-fcqpj/MyK4sxDPcbe7STNPbpQL4RLZOPWuaTmwZYuc+hJKzRf58yRxfhqGpc6PIq9ZyfSBpfHgmUHmHs0KwHwg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.58.0': - resolution: {integrity: sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg==} + '@typescript-eslint/project-service@8.60.0': + resolution: {integrity: sha512-aZu74NNKJeUWqCjDddzdiKaS82dgYgV/vmf+Ui3ZdZejmgfXR/q+pRumgobnQ2cCJTgGTWp4ypiwsuofFubavg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.58.0': - resolution: {integrity: sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ==} + '@typescript-eslint/scope-manager@8.60.0': + resolution: {integrity: sha512-pFzqhllJMs+jghLQWzV00ds39xLzuyqPSev5pd8f4Ir0rtKR3ZLUB4/4dhjOFighWb9larvtfJvqL+4yKDI3Xw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.58.0': - resolution: {integrity: sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A==} + '@typescript-eslint/tsconfig-utils@8.60.0': + resolution: {integrity: sha512-BZPR3RGYlAXnly6ymAxfkVn5rCbZzQNou0rxv3GfWZ8cTQp+hhVd73khbGLAd8k1TlAPLISH337M+tAgAnaJDQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.58.0': - resolution: {integrity: sha512-aGsCQImkDIqMyx1u4PrVlbi/krmDsQUs4zAcCV6M7yPcPev+RqVlndsJy9kJ8TLihW9TZ0kbDAzctpLn5o+lOg==} + '@typescript-eslint/type-utils@8.60.0': + resolution: {integrity: sha512-SX46wEUtitCpq7AN38HkUU/+zvUpdKf7ephtWAFgckH8O7PQIyL5gvrhQgBLuEYgLfuKWOVvWVskMbuFHAz5xg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.58.0': - resolution: {integrity: sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==} + '@typescript-eslint/types@8.60.0': + resolution: {integrity: sha512-AsE7x2XaAK+CVbeih0Fvbn+r1qHxtpLDJ3XUuFcIinT318T90yHMJC+Zgv+jUuDjQQd06HKwxnDu6sz1IcTilA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.58.0': - resolution: {integrity: sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA==} + '@typescript-eslint/typescript-estree@8.60.0': + resolution: {integrity: sha512-3AcZNBGMClm6CXDyo8kYvVGT/sx29sS0oBsIb9oZI2gunA4Vm2M3YHzRLPvsUBBsl+yB5FPtltq7gGH0iTlp9g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.58.0': - resolution: {integrity: sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA==} + '@typescript-eslint/utils@8.60.0': + resolution: {integrity: sha512-HtXuPfrHTyBDkameWpl+vJb1Uevu2tznAyahM1Oc4AENidCLTPiZDWIo4GfcxNdC/RcfGcadzzkqbRG87dUrQA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.58.0': - resolution: {integrity: sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ==} + '@typescript-eslint/visitor-keys@8.60.0': + resolution: {integrity: sha512-9WI52t8ZGLVGrPMBet25yAftqY/n95+zmoUUtJBBQTKDSKUu7OsPTroT2op7U9JatkoRccL0YkWDNMFfC4Sjxg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@vitest/coverage-v8@4.1.2': - resolution: {integrity: sha512-sPK//PHO+kAkScb8XITeB1bf7fsk85Km7+rt4eeuRR3VS1/crD47cmV5wicisJmjNdfeokTZwjMk4Mj2d58Mgg==} + '@ungap/structured-clone@1.3.1': + resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==} + + '@vitest/coverage-v8@4.1.7': + resolution: {integrity: sha512-qsYPeXc5Q9dFLd1i8Ap+Bx8sQgcp+rFVQo4R0dDsWNBzl26ldVF1qOO+RL24K7FDrR6pA+50XedRLSoSG24bVQ==} peerDependencies: - '@vitest/browser': 4.1.2 - vitest: 4.1.2 + '@vitest/browser': 4.1.7 + vitest: 4.1.7 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@4.1.2': - resolution: {integrity: sha512-gbu+7B0YgUJ2nkdsRJrFFW6X7NTP44WlhiclHniUhxADQJH5Szt9mZ9hWnJPJ8YwOK5zUOSSlSvyzRf0u1DSBQ==} + '@vitest/expect@4.1.7': + resolution: {integrity: sha512-1R+tw0ortHEbZDGMymm+pN7/AFQ/RkFFdtd7EN+VBpynKmLbP8A3rpEXdshBJ7+8hQ9zBJh/i1s0yKNtxAnU7w==} - '@vitest/mocker@4.1.2': - resolution: {integrity: sha512-Ize4iQtEALHDttPRCmN+FKqOl2vxTiNUhzobQFFt/BM1lRUTG7zRCLOykG/6Vo4E4hnUdfVLo5/eqKPukcWW7Q==} + '@vitest/mocker@4.1.7': + resolution: {integrity: sha512-vY7nuamKgfvpA1Koa3oYIw/k7D6kZnpGyNMZW8loow2bsBYla1TFdqTaXncWdRn4pgwNs+90RhnXhJScDwQeJA==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -2060,35 +2210,49 @@ packages: vite: optional: true - '@vitest/pretty-format@4.1.2': - resolution: {integrity: sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA==} + '@vitest/pretty-format@4.1.7': + resolution: {integrity: sha512-umgCarTOYQWIaDMvGDRZij+6b9oVeLIyJzfN+AS88e0ZOU3QTgNNSTtjQOpcvWr3np1N0j4WgZj+sb3oYBDscw==} + + '@vitest/runner@4.1.7': + resolution: {integrity: sha512-BapjmAQ2aI78WdMEfeUWivnfVzB+VPGwWRQcJE0OUq7qEeEcBsCSf+0T5iREBNE5nBb4wA5Ya0W6IA+sghdEFw==} + + '@vitest/snapshot@4.1.7': + resolution: {integrity: sha512-ZacLzja+TmJeZ1h14xW2FB/WpeimUD3haBXQPyJqxvo8jQTmfeA8zv58mtjN2C7EHXZDYVcVYdYmAxjkWVvKCw==} + + '@vitest/spy@4.1.7': + resolution: {integrity: sha512-kbkI5LMWakyuTIvs6fUJ5qdIVb1XVKsYJAT4OJ938cHMROYMSfmoQdZy0aaAnjbbc8F61vkoTqz/Az+/HiIu5Q==} - '@vitest/runner@4.1.2': - resolution: {integrity: sha512-Gr+FQan34CdiYAwpGJmQG8PgkyFVmARK8/xSijia3eTFgVfpcpztWLuP6FttGNfPLJhaZVP/euvujeNYar36OQ==} + '@vitest/utils@4.1.7': + resolution: {integrity: sha512-T532WBu791cBxJlCl6SO+J14l81DQx6uQHm1bQbmCDY7nqlEIgkza/UFnSBNaUtSf41unldDFjdOBYEQC4b5Hw==} - '@vitest/snapshot@4.1.2': - resolution: {integrity: sha512-g7yfUmxYS4mNxk31qbOYsSt2F4m1E02LFqO53Xpzg3zKMhLAPZAjjfyl9e6z7HrW6LvUdTwAQR3HHfLjpko16A==} + '@vue/compiler-core@3.5.34': + resolution: {integrity: sha512-s9cLyK5mLcvZ4Agva5QgRsQyLKvts9WbU9DB6NqiZkkGEdwmcEiylj5Jbwkp680drF/NNCV8OlAJSe+yMLxaJw==} - '@vitest/spy@4.1.2': - resolution: {integrity: sha512-DU4fBnbVCJGNBwVA6xSToNXrkZNSiw59H8tcuUspVMsBDBST4nfvsPsEHDHGtWRRnqBERBQu7TrTKskmjqTXKA==} + '@vue/compiler-dom@3.5.34': + resolution: {integrity: sha512-EbF/T++k0e2MMZlJsBhzK8Sgwt0HcIPOhzn1CTB/lv6sQcyk+OWf8YeiLxZp3ro7MbbLcAfAJ6sEvjFWuNgUCw==} - '@vitest/utils@4.1.2': - resolution: {integrity: sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ==} + '@vue/compiler-sfc@3.5.34': + resolution: {integrity: sha512-D/ihr6uZeIt6r+pVZf46RWT1fAsLFMbUP7k8G1VkiiWexriED9GrX3echHd4Abbt17zjlfiFJ8z7a3BxZOPNjg==} - '@vue/compiler-core@3.5.32': - resolution: {integrity: sha512-4x74Tbtqnda8s/NSD6e1Dr5p1c8HdMU5RWSjMSUzb8RTcUQqevDCxVAitcLBKT+ie3o0Dl9crc/S/opJM7qBGQ==} + '@vue/compiler-ssr@3.5.34': + resolution: {integrity: sha512-cDtTHKibkThKGHH1SP+WdccquNRYQDFH6rRjQCqT9G2ltFAfoR5pUftpab/z+aM5mW9HLLVQW7hfKKQe/1GBeQ==} - '@vue/compiler-dom@3.5.32': - resolution: {integrity: sha512-ybHAu70NtiEI1fvAUz3oXZqkUYEe5J98GjMDpTGl5iHb0T15wQYLR4wE3h9xfuTNA+Cm2f4czfe8B4s+CCH57Q==} + '@vue/reactivity@3.5.34': + resolution: {integrity: sha512-y9XDjCEuBp+98k+UL5dbYkh57AHU4o6cxZedOPXw3bmrZZYLQsVHguGurq7hVrPCSrQtrnz1f9dssyFr+dMXfQ==} - '@vue/compiler-sfc@3.5.32': - resolution: {integrity: sha512-8UYUYo71cP/0YHMO814TRZlPuUUw3oifHuMR7Wp9SNoRSrxRQnhMLNlCeaODNn6kNTJsjFoQ/kqIj4qGvya4Xg==} + '@vue/runtime-core@3.5.34': + resolution: {integrity: sha512-mKeBYvu8tcMSLhypAHBmriUFfWXKTCF/23Z4jiCoYK3UtWepkliViNLuR90V9XOyD62mUxs9p1jsrpK3CCGIzw==} - '@vue/compiler-ssr@3.5.32': - resolution: {integrity: sha512-Gp4gTs22T3DgRotZ8aA/6m2jMR+GMztvBXUBEUOYOcST+giyGWJ4WvFd7QLHBkzTxkfOt8IELKNdpzITLbA2rw==} + '@vue/runtime-dom@3.5.34': + resolution: {integrity: sha512-e8kZzERmCwUnBRVsgSQlAfrfU2rGoy0FFKPBXSlfEjc/O3KfA7QP0t1/2ZylrbchjmIKB4dPTd07A6WPr0eOrg==} - '@vue/shared@3.5.32': - resolution: {integrity: sha512-ksNyrmRQzWJJ8n3cRDuSF7zNNontuJg1YHnmWRJd2AMu8Ij2bqwiiri2lH5rHtYPZjj4STkNcgcmiQqlOjiYGg==} + '@vue/server-renderer@3.5.34': + resolution: {integrity: sha512-nHxmJoTrKsmrkbILRhkC9gY1G3moZbJTqCzDd7DOOzG5KH9oeJ0Unqrff5f9v0pW//jES05ZkJcNtfE8JjOIew==} + peerDependencies: + vue: 3.5.34 + + '@vue/shared@3.5.34': + resolution: {integrity: sha512-24uqU4OIiX29ryC3MeWid/Xf2fa2EFRUVLb77nRhk+UrTVrh/XiGtFAFmJBAtBRbjwNdsPRP+jj/OL27Eg1NDA==} '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -2191,11 +2355,11 @@ packages: peerDependencies: ajv: ^8.8.2 - ajv@6.14.0: - resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} - ajv@8.18.0: - resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} ansi-escapes@7.3.0: resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} @@ -2262,14 +2426,14 @@ packages: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} - ast-v8-to-istanbul@1.0.0: - resolution: {integrity: sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg==} + ast-v8-to-istanbul@1.0.2: + resolution: {integrity: sha512-dKmJxJsGItLmc5CYZKuEjuG6GnBs6PG4gohMhyFOWKaNQoYCuRZJDECaBlHmcG0lv2wc2E0uU8lESmBEumC3DQ==} asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - b4a@1.8.0: - resolution: {integrity: sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==} + b4a@1.8.1: + resolution: {integrity: sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==} peerDependencies: react-native-b4a: '*' peerDependenciesMeta: @@ -2293,6 +2457,9 @@ packages: resolution: {integrity: sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==} engines: {node: '>=12'} + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -2300,16 +2467,16 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - bare-events@2.8.2: - resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==} + bare-events@2.8.3: + resolution: {integrity: sha512-HdUm8EMQBLaJvGUdidNNbqpA1kYkwNcb+MYxkxCLAPJGQzlv9J0C24h8V65Z4c5GLd/JEALDvpFCQgpLJqc0zw==} peerDependencies: bare-abort-controller: '*' peerDependenciesMeta: bare-abort-controller: optional: true - bare-fs@4.6.0: - resolution: {integrity: sha512-2YkS7NuiJceSEbyEOdSNLE9tsGd+f4+f7C+Nik/MCk27SYdwIMPT/yRKvg++FZhQXgk0KWJKJyXX9RhVV0RGqA==} + bare-fs@4.7.1: + resolution: {integrity: sha512-WDRsyVN52eAx/lBamKD6uyw8H4228h/x0sGGGegOamM2cd7Pag88GfMQalobXI+HaEUxpCkbKQUDOQqt9wawRw==} engines: {bare: '>=1.16.0'} peerDependencies: bare-buffer: '*' @@ -2317,15 +2484,15 @@ packages: bare-buffer: optional: true - bare-os@3.8.7: - resolution: {integrity: sha512-G4Gr1UsGeEy2qtDTZwL7JFLo2wapUarz7iTMcYcMFdS89AIQuBoyjgXZz0Utv7uHs3xA9LckhVbeBi8lEQrC+w==} + bare-os@3.9.1: + resolution: {integrity: sha512-6M5XjcnsygQNPMCMPXSK379xrJFiZ/AEMNBmFEmQW8d/789VQATvriyi5r0HYTL9TkQ26rn3kgdTG3aisbrXkQ==} engines: {bare: '>=1.14.0'} bare-path@3.0.0: resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} - bare-stream@2.12.0: - resolution: {integrity: sha512-w28i8lkBgREV3rPXGbgK+BO66q+ZpKqRWrZLiCdmmUlLPrQ45CzkvRhN+7lnv00Gpi2zy5naRxnUFAxCECDm9g==} + bare-stream@2.13.1: + resolution: {integrity: sha512-Vp0cnjYyrEC4whYTymQ+YZi6pBpfiICZO3cfRG8sy67ZNWe951urv1x4eW1BKNngw3U+3fPYb5JQvHbCtxH7Ow==} peerDependencies: bare-abort-controller: '*' bare-buffer: '*' @@ -2338,8 +2505,8 @@ packages: bare-events: optional: true - bare-url@2.4.0: - resolution: {integrity: sha512-NSTU5WN+fy/L0DDenfE8SXQna4voXuW0FHM7wH8i3/q9khUSchfPbPezO4zSFMnDGIf9YE+mt/RWhZgNRKRIXA==} + bare-url@2.4.3: + resolution: {integrity: sha512-Kccpc7ACfXaxfeInfqKcZtW4pT5YBn1mesc4sCsun6sRwtbJ4h+sNOaksUpYEJUKfN65YWC6Bw2OJEFiKxq8nQ==} base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -2348,8 +2515,8 @@ packages: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} engines: {node: ^4.5.0 || >= 5.9} - baseline-browser-mapping@2.10.15: - resolution: {integrity: sha512-1nfKCq9wuAZFTkA2ey/3OXXx7GzFjLdkTiFVNwlJ9WqdI706CZRIhEqjuwanjMIja+84jDLa9rcyZDPDiVkASQ==} + baseline-browser-mapping@2.10.32: + resolution: {integrity: sha512-wbPvpyjJPC0zdfdKXxqEL3Ea+bOMD/87X4lftiJkkaBiuG6ALQy1SLmEd7BSmVCuwCQsBrCamgBoLyfFDD1EPg==} engines: {node: '>=6.0.0'} hasBin: true @@ -2367,8 +2534,8 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} - body-parser@1.20.4: - resolution: {integrity: sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==} + body-parser@1.20.5: + resolution: {integrity: sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} boolbase@1.0.0: @@ -2378,11 +2545,11 @@ packages: resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - brace-expansion@1.1.13: - resolution: {integrity: sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==} + brace-expansion@1.1.15: + resolution: {integrity: sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==} - brace-expansion@2.0.3: - resolution: {integrity: sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==} + brace-expansion@2.1.1: + resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} brace-expansion@5.0.6: resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} @@ -2451,8 +2618,8 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-lite@1.0.30001786: - resolution: {integrity: sha512-4oxTZEvqmLLrERwxO76yfKM7acZo310U+v4kqexI2TL1DkkUEMT8UijrxxcnVdxR3qkVf5awGRX+4Z6aPHVKrA==} + caniuse-lite@1.0.30001793: + resolution: {integrity: sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -2477,6 +2644,12 @@ packages: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} @@ -2562,6 +2735,9 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + commander@10.0.1: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} @@ -2581,6 +2757,10 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + comment-parser@1.4.1: resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} engines: {node: '>= 12.0.0'} @@ -2606,6 +2786,10 @@ packages: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} + content-type@2.0.0: + resolution: {integrity: sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==} + engines: {node: '>=18'} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -2634,8 +2818,8 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - css-declaration-sorter@7.3.1: - resolution: {integrity: sha512-gz6x+KkgNCjxq3Var03pRYLhyNfwhkKF1g/yoLgDNtFvVu0/fOLV9C8fFEZRjACp/XQLumjAYo7JVjzH3wLbxA==} + css-declaration-sorter@7.4.0: + resolution: {integrity: sha512-LTuzjPoyA2vMGKKcaOqKSp7Ub2eGrNfKiZH4LpezxpNrsICGCSFvsQOI29psISxNZtaXibkC2CXzrQ5enMeGGw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.0.9 @@ -2659,6 +2843,10 @@ packages: resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + css-tree@3.2.1: resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} @@ -2672,34 +2860,37 @@ packages: engines: {node: '>=4'} hasBin: true - cssnano-preset-default@7.0.12: - resolution: {integrity: sha512-B3Eoouzw/sl2zANI0AL9KbacummJTCww+fkHaDBMZad/xuVx8bUduPLly6hKVQAlrmvYkS1jB1CVQEKm3gn0AA==} + cssnano-preset-default@7.0.17: + resolution: {integrity: sha512-11qO63A+czwguQFJCaTdICvbaxn0pJzz/XghLlv+OT7WyToDxAMR0Xb3/26/l0y0hQJywwNbj/SLSQlGBHE1OA==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - cssnano-preset-lite@4.0.4: - resolution: {integrity: sha512-iV7xT9JEk0OJwRWuSV2Y48IkntNjvoiscoioFDcgmuoIvpZV8gIg1++GBHTj72HgmDCALH8y9ELgt+aFM2Nh9g==} + cssnano-preset-lite@4.0.6: + resolution: {integrity: sha512-EI/VDoucl8SmVkXUZtWIux31cWoxgNUbF7njnpPxdz5ZbnKOjAd5DueLuCE1RKKLrOPQsEUaNfUgB1taohIIyQ==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - cssnano-utils@5.0.1: - resolution: {integrity: sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg==} + cssnano-utils@5.0.3: + resolution: {integrity: sha512-ynIREMICLxkxm7e9bCR9sh75s4Q5drICi0ua1yxo5jH2XPBqSKkl4dOh4EbFqtUmnTMhRffHgYL0EKKkMjtJTg==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - cssnano@7.1.4: - resolution: {integrity: sha512-T9PNS7y+5Nc9Qmu9mRONqfxG1RVY7Vuvky0XN6MZ+9hqplesTEwnj9r0ROtVuSwUVfaDhVlavuzWIVLUgm4hkQ==} + cssnano@7.1.9: + resolution: {integrity: sha512-uPR75+5Dk/WJ/YSPR1/YDHdwMM9c5FsaARljfKWgeCKLKOtJ0we21xy/RcCjn53fZnD/f6yYEIZ8pu18+GnbNQ==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 csso@5.0.5: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + custom-event@1.0.1: resolution: {integrity: sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==} @@ -2707,8 +2898,8 @@ packages: resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} engines: {node: '>= 14'} - date-fns@4.1.0: - resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + date-fns@4.3.0: + resolution: {integrity: sha512-OYcL+3N/jyWbYdFGqoMAhytDgxP9pbYPUUiRCOgn4Fewaadk9l/Wam4Avciiyp2BgkpfQyBV9B+ehnVJych+eQ==} date-format@4.0.14: resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==} @@ -2799,8 +2990,8 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - devtools-protocol@0.0.1581282: - resolution: {integrity: sha512-nv7iKtNZQshSW2hKzYNr46nM/Cfh5SEvE2oV0/SEGgc9XupIY5ggf84Cz8eJIkBce7S3bmTAauFD6aysMpnqsQ==} + devtools-protocol@0.0.1608973: + resolution: {integrity: sha512-Tpm17fxYzt+J7VrGdc1k8YdRqS3YV7se/M6KeemEqvUbq/n7At1rWVuXMxQgpWkdwSdIEKYbU//Bve+Shm4YNQ==} di@0.0.1: resolution: {integrity: sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==} @@ -2860,8 +3051,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.331: - resolution: {integrity: sha512-IbxXrsTlD3hRodkLnbxAPP4OuJYdWCeM3IOdT+CpcMoIwIoDfCmRpEtSPfwBXxVkg9xmBeY7Lz2Eo2TDn/HC3Q==} + electron-to-chromium@1.5.361: + resolution: {integrity: sha512-Q6Hts7N9FnJc5LeGRINFvLhCI9xZmNtTDe5ZbcVezQz7cU4a8Aua3GH1b8J2XY8Al9PF+OCwYqhgsOOheMdvkA==} emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} @@ -2887,12 +3078,12 @@ packages: resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} engines: {node: '>=10.0.0'} - engine.io@6.6.6: - resolution: {integrity: sha512-U2SN0w3OpjFRVlrc17E6TMDmH58Xl9rai1MblNjAdwWp07Kk+llmzX0hjDpQdrDGzwmvOtgM5yI+meYX6iZ2xA==} + engine.io@6.6.8: + resolution: {integrity: sha512-2agL3ueZhqxoVrfmntO8yuVj+uNSlIOnhykYHk3Cq0ShYPdUjjUiSJrQvXjq01I9jAuI0Zl2YO8Evv5Mqytm5g==} engines: {node: '>=10.2.0'} - enhanced-resolve@5.20.1: - resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} + enhanced-resolve@5.22.0: + resolution: {integrity: sha512-xYcDWrpELkFzz9SpZ3PlI6Eu6eD93Yf0WLDRxikGhWJ3MAir2SNZTIVCVZqZ/NUyx8AdMc2gT9C0gPiw18kG+A==} engines: {node: '>=10.13.0'} ent@2.2.2: @@ -2914,6 +3105,10 @@ packages: resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} engines: {node: '>=0.12'} + entities@8.0.0: + resolution: {integrity: sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==} + engines: {node: '>=20.19.0'} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -2933,19 +3128,19 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@2.0.0: - resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} + es-module-lexer@2.1.0: + resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + es-object-atoms@1.1.2: + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} engines: {node: '>= 0.4'} es-set-tostringtag@2.1.0: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - es-toolkit@1.45.1: - resolution: {integrity: sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw==} + es-toolkit@1.47.0: + resolution: {integrity: sha512-n1GuoD0WEQZMBk5tttoZSqwgyLx01oqa5XsBmCHwPyNe1S9jPBEmtR2pSgp2kJuWE3ciFZ6yRHmY4pM4C3OOkw==} es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} @@ -2995,8 +3190,8 @@ packages: resolution: {integrity: sha512-T3DsRDZWp0NV1i7Tp7usvSgUm0QmJjQrq8RzxKdR5ezaesIkIP6yS3x/bAB+vvKPY+UY1a3id2lk3/eUmS02Dw==} engines: {node: '>=24.11.0'} - eslint-plugin-mocha@11.2.0: - resolution: {integrity: sha512-nMdy3tEXZac8AH5Z/9hwUkSfWu8xHf4XqwB5UEQzyTQGKcNlgFeciRAjLjliIKC3dR1Ex/a2/5sqgQzvYRkkkA==} + eslint-plugin-mocha@11.3.0: + resolution: {integrity: sha512-anENwrIwmdvunmmssjMn5a4nTd+mYMkqBlwjksxOECcIThLNhefWJIiTWY7pY/arMQFjNwHQjVOZb6pQ9PrLjg==} peerDependencies: eslint: '>=9.0.0' @@ -3105,9 +3300,6 @@ packages: engines: {node: '>= 10.17.0'} hasBin: true - fast-content-type-parse@3.0.0: - resolution: {integrity: sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==} - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -3201,8 +3393,8 @@ packages: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} - fs-extra@11.3.4: - resolution: {integrity: sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==} + fs-extra@11.3.5: + resolution: {integrity: sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==} engines: {node: '>=14.14'} fs-extra@8.1.0: @@ -3232,8 +3424,8 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.5.0: - resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} + get-east-asian-width@1.6.0: + resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} engines: {node: '>=18'} get-func-name@2.0.2: @@ -3259,8 +3451,8 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - get-tsconfig@4.13.7: - resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} + get-tsconfig@4.14.0: + resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} get-uri@6.0.5: resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} @@ -3337,8 +3529,8 @@ packages: peerDependencies: graphql: 14 - 16 - graphql@16.13.2: - resolution: {integrity: sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig==} + graphql@16.14.0: + resolution: {integrity: sha512-BBvQ/406p+4CZbTpCbVPSxfzrZrbnuWSP1ELYgyS6B+hNeKzgrdB4JczCa5VZUBQrDa9hUngm0KnexY6pJRN5Q==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} gray-matter@4.0.3: @@ -3367,10 +3559,16 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + hasown@2.0.3: + resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} engines: {node: '>= 0.4'} + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true @@ -3379,13 +3577,16 @@ packages: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} - hosted-git-info@9.0.2: - resolution: {integrity: sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==} + hosted-git-info@9.0.3: + resolution: {integrity: sha512-Hc+ghLoSt6QaYZUv0WBiIvmMDZuZZ7oaDvdH8MbfOO4lOsxdXLEvuC6ePoGs9H1X9oCLyq6+NVN0MKqD+ydxyg==} engines: {node: ^20.17.0 || >=22.9.0} html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + http-cache-semantics@4.2.0: resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} @@ -3488,8 +3689,8 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + is-core-module@2.16.2: + resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} engines: {node: '>= 0.4'} is-docker@2.2.1: @@ -3555,6 +3756,10 @@ packages: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -3649,10 +3854,6 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} - hasBin: true - js-beautify@1.15.4: resolution: {integrity: sha512-9/KXeZUKKJwqCXUdBxFJ3vPh467OCckSBmYDwSK/EtV090K+iMJ7zx2S3HLVDIWFQdqMIsZWbnaGiba18aWhaA==} engines: {node: '>=14'} @@ -3717,8 +3918,8 @@ packages: jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - jsonfile@6.2.0: - resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + jsonfile@6.2.1: + resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} @@ -3874,8 +4075,8 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - linkify-it@5.0.0: - resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + linkify-it@5.0.1: + resolution: {integrity: sha512-wVoTjP4Q6R0NW5hiZkVJaFZPWgtXfoGF+6LucL3/FtiNjmcHhYjEr5f1Kqjirc1nBW07J/ZuRFumqr2oqccEWg==} lint-staged@16.4.0: resolution: {integrity: sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw==} @@ -3890,8 +4091,8 @@ packages: resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==} engines: {node: '>=20.0.0'} - loader-runner@4.3.1: - resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==} + loader-runner@4.3.2: + resolution: {integrity: sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w==} engines: {node: '>=6.11.5'} loader-utils@2.0.4: @@ -3954,8 +4155,8 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.3.0: - resolution: {integrity: sha512-sr8xPKE25m6vJVcrdn6NxtC0fVfuPowbscLypegRgOm0yXSqr5JNHCAY3hnusdJ7HRBW04j6Ip4khvHU778DuQ==} + lru-cache@11.5.0: + resolution: {integrity: sha512-5YgH9UJd7wVb9hIouI2adWpgqrrICkt070Dnj8EUY1+B4B2P9eRLPAkAAo6NICA7CEhOIeBHl46u9zSNpNu7zA==} engines: {node: 20 || >=22} lru-cache@5.1.1: @@ -3974,8 +4175,8 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - magicast@0.5.2: - resolution: {integrity: sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==} + magicast@0.5.3: + resolution: {integrity: sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==} make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} @@ -3985,8 +4186,8 @@ packages: resolution: {integrity: sha512-uCbIa8jWWmQZt4dSnEStkVC6gdakiinAm4PiGsywIkguF0eWMdcjDz0ECYhUolFU3pFLOev9VNPCEygydXnddg==} engines: {node: ^20.17.0 || >=22.9.0} - markdown-it@14.1.1: - resolution: {integrity: sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==} + markdown-it@14.2.0: + resolution: {integrity: sha512-1TGiQiJVRQ3NPmZH6sx5Cfnmg6GQm9jvC1ch4TK511NjSJvjzKLzn5pPfZRNZkRPZP0HqCioSndqH8v2nRaWVQ==} hasBin: true markdown-table@3.0.4: @@ -4030,6 +4231,9 @@ packages: mdast-util-phrasing@4.1.0: resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + mdast-util-to-markdown@2.1.2: resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} @@ -4039,6 +4243,9 @@ packages: mdn-data@2.0.28: resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + mdn-data@2.27.1: resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} @@ -4154,6 +4361,10 @@ packages: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} @@ -4242,8 +4453,8 @@ packages: mlly@1.8.2: resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} - mocha@11.7.5: - resolution: {integrity: sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig==} + mocha@11.7.6: + resolution: {integrity: sha512-nS9xOGbw2I3cjCpxwZAEJ9xK9lmJ08vEkQvLtz4du9ZrF9UrjRpeJGiIgl2Z+Qs++pmB4ecDe48Fwsh+j+j7xA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true @@ -4269,8 +4480,8 @@ packages: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -4288,23 +4499,24 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - netmask@2.0.2: - resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + netmask@2.1.1: + resolution: {integrity: sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==} engines: {node: '>= 0.4.0'} nise@4.1.0: resolution: {integrity: sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==} - node-gyp@12.2.0: - resolution: {integrity: sha512-q23WdzrQv48KozXlr0U1v9dwO/k59NHeSzn6loGcasyf0UnSrtzs8kRxM+mfwJSf0DkX0s43hcqgnSO4/VNthQ==} + node-gyp@12.3.0: + resolution: {integrity: sha512-QNcUWM+HgJplcPzBvFBZ9VXacyGZ4+VTOb80PwWR+TlVzoHbRKULNEzpRsnaoxG3Wzr7Qh7BYxGDU3CbKib2Yg==} engines: {node: ^20.17.0 || >=22.9.0} hasBin: true node-notifier@10.0.1: resolution: {integrity: sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==} - node-releases@2.0.37: - resolution: {integrity: sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==} + node-releases@2.0.46: + resolution: {integrity: sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==} + engines: {node: '>=18'} nopt@7.2.1: resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} @@ -4465,6 +4677,9 @@ packages: parse5@1.0.0: resolution: {integrity: sha512-NNdCAcwvTGOapmA/TF14m4HE4IMWiZBkCYKwaIyT5aq3COGzxdTn/u2Cvr/8lOYkwpaXvXEVx8RATtfzqOSYdw==} + parse5@8.0.1: + resolution: {integrity: sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -4541,77 +4756,77 @@ packages: peerDependencies: postcss: ^8.4.38 - postcss-colormin@7.0.7: - resolution: {integrity: sha512-sBQ628lSj3VQpDquQel8Pen5mmjFPsO4pH9lDLaHB1AVkMRHtkl0pRB5DCWznc9upWsxint/kV+AveSj7W1tew==} + postcss-colormin@7.0.10: + resolution: {integrity: sha512-yFr6JezOolHLta/buLE71VKPh2mXursp4saVe98/ol8ZnEWhL+racShqPKlvd/DKWLre/39B6HhcMXf7RZ3hxg==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - postcss-convert-values@7.0.9: - resolution: {integrity: sha512-l6uATQATZaCa0bckHV+r6dLXfWtUBKXxO3jK+AtxxJJtgMPD+VhhPCCx51I4/5w8U5uHV67g3w7PXj+V3wlMlg==} + postcss-convert-values@7.0.12: + resolution: {integrity: sha512-xurKu5qqk4viR3Cp3p4xBR4KfnZm4w4ys6+UBwBmeuBSNkH7+DtLnYOYnOffgtE4yx8sH9S1VZ6RAAvROXzP2Q==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - postcss-discard-comments@7.0.6: - resolution: {integrity: sha512-Sq+Fzj1Eg5/CPf1ERb0wS1Im5cvE2gDXCE+si4HCn1sf+jpQZxDI4DXEp8t77B/ImzDceWE2ebJQFXdqZ6GRJw==} + postcss-discard-comments@7.0.8: + resolution: {integrity: sha512-CvvS5S9WrXblFXCEJ9nVo+4z+eA7zSC7Z88V1HEJuwlQhlFnYTIjg1xJY+BCUiG2bvICap2tXii4mP22BD108Q==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - postcss-discard-duplicates@7.0.2: - resolution: {integrity: sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w==} + postcss-discard-duplicates@7.0.4: + resolution: {integrity: sha512-VBNn1+EuMZkeGVVtz0gRfbNGtx9IFgAsAV+E2pHtXPrp4qfGBkhTIiAuE/wrb+Y6Pakg9NewAlfTpYIFAWODtw==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - postcss-discard-empty@7.0.1: - resolution: {integrity: sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg==} + postcss-discard-empty@7.0.3: + resolution: {integrity: sha512-M2pyjQCU+/7cMHVtL6bKTHjv0lZnPLMpicgr67Dlth7AbuV9gjVTtUqaRwn6Pp6BwSDspUzhz8SaUrRykJU5Dw==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - postcss-discard-overridden@7.0.1: - resolution: {integrity: sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg==} + postcss-discard-overridden@7.0.3: + resolution: {integrity: sha512-aNovXo9UsZuRNLzHJtp13lHIvinDPfiXBPePpXkSjCbgp++iU2FqE+YxvjIsg6EdyPZsASFbfu+JcBFVsErXIQ==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - postcss-merge-longhand@7.0.5: - resolution: {integrity: sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw==} + postcss-merge-longhand@7.0.7: + resolution: {integrity: sha512-b3mfYUxR388u5Pt0HPcVIUtUDn/k15UfTY9M+ORW+meCR6JLNxoZffiYvXyOYQoRYQNZyX/UFkMCM/mNHxe1qA==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - postcss-merge-rules@7.0.8: - resolution: {integrity: sha512-BOR1iAM8jnr7zoQSlpeBmCsWV5Uudi/+5j7k05D0O/WP3+OFMPD86c1j/20xiuRtyt45bhxw/7hnhZNhW2mNFA==} + postcss-merge-rules@7.0.11: + resolution: {integrity: sha512-SJUPM18g2BmPhf8BVlbwqWz4aK3pLu6u6xjfwEzra7xL6IBR10sUaiB++EzqcVfadPHrKBSMlNdP+XieykhI+Q==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - postcss-minify-font-values@7.0.1: - resolution: {integrity: sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ==} + postcss-minify-font-values@7.0.3: + resolution: {integrity: sha512-yilG/VOaNI74IylQvAQQxm3/wZVBkXyYUqNUAdxqwtbWUXPsbK1q8Ms0mL83v+f8YicgcyfYCRZtWACUdYajpA==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - postcss-minify-gradients@7.0.2: - resolution: {integrity: sha512-fVY3AB8Um7SJR5usHqTY2Ngf9qh8IRN+FFzrBP0ONJy6yYXsP7xyjK2BvSAIrpgs1cST+H91V0TXi3diHLYJtw==} + postcss-minify-gradients@7.0.5: + resolution: {integrity: sha512-YraROyQRg3BI1+Hg8E05B/JPdnTm8EDSVu4P2BxdM+CRiOyfmou809+chGIqo6fQqwjPGQ947nbGncSjmTU1WQ==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - postcss-minify-params@7.0.6: - resolution: {integrity: sha512-YOn02gC68JijlaXVuKvFSCvQOhTpblkcfDre2hb/Aaa58r2BIaK4AtE/cyZf2wV7YKAG+UlP9DT+By0ry1E4VQ==} + postcss-minify-params@7.0.9: + resolution: {integrity: sha512-R8itbB8BhlpoYyBm1ou0dD+vJnQ3F6adQipR4UnkCHUwlo+S9WXJaDRg1RHjC8YVAtIdrQzSWvJl40HnGDTKjA==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - postcss-minify-selectors@7.0.6: - resolution: {integrity: sha512-lIbC0jy3AAwDxEgciZlBullDiMBeBCT+fz5G8RcA9MWqh/hfUkpOI3vNDUNEZHgokaoiv0juB9Y8fGcON7rU/A==} + postcss-minify-selectors@7.1.2: + resolution: {integrity: sha512-aQtrEWKwqafNlExcKHQvPGsXR2+vlUqqJtf5XsCQcgsSb5PL4wlujWBYDJuWsP4UnQX1YHDHU8qRlD+1PzTQ+Q==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 postcss-modules-extract-imports@3.1.0: resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} @@ -4637,99 +4852,99 @@ packages: peerDependencies: postcss: ^8.1.0 - postcss-normalize-charset@7.0.1: - resolution: {integrity: sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ==} + postcss-normalize-charset@7.0.3: + resolution: {integrity: sha512-NoBfZu8PR4c2NlmjvrqQTzCzLY79hwcSRgNQ3ZiNK0ABzf9kYKloE/jNj+/8GQY1wsm8pRRgANk6ydLH8cwo0Q==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - postcss-normalize-display-values@7.0.1: - resolution: {integrity: sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ==} + postcss-normalize-display-values@7.0.3: + resolution: {integrity: sha512-ldsCX0QIt05pKIOobZtVQ48wXJecr+czw4+e1/YjVhLMqslShgpVxgPtI2CefURR8oyVoYaU/l829MMwExDMLw==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - postcss-normalize-positions@7.0.1: - resolution: {integrity: sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ==} + postcss-normalize-positions@7.0.4: + resolution: {integrity: sha512-VEvlpeGd3Ju1Hqa/oN4jaP3+ms4laYwkEL9N9u+B6k54PZjXbW1n6wI+aVprf1BQXlCYpS5+1pl/7/vHiKgARg==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - postcss-normalize-repeat-style@7.0.1: - resolution: {integrity: sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ==} + postcss-normalize-repeat-style@7.0.4: + resolution: {integrity: sha512-6mPKlY/8cSaDHxX502wERADarJsccwlky6yIrOapHH2ZgfoKAV94SbiTKfKEs4EEpdazuc3J72WsqeYk7hp9+Q==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - postcss-normalize-string@7.0.1: - resolution: {integrity: sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ==} + postcss-normalize-string@7.0.3: + resolution: {integrity: sha512-HnEQPUchi1eznmDKEYrKUTqrprEq97SrpUYClgUkv7V2zRODD9DFoUsYU+m9ZOetmD5ku7fEMZB/lwy8IT6xVQ==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - postcss-normalize-timing-functions@7.0.1: - resolution: {integrity: sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg==} + postcss-normalize-timing-functions@7.0.3: + resolution: {integrity: sha512-zmEzHdvpZBZu0OKlbJSfgASQvaayyAoVuWtvyr34IJ/LyS+DaOKvvR3EvFJ9RWWtNIx+CMvO125OVophaxNYew==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - postcss-normalize-unicode@7.0.6: - resolution: {integrity: sha512-z6bwTV84YW6ZvvNoaNLuzRW4/uWxDKYI1iIDrzk6D2YTL7hICApy+Q1LP6vBEsljX8FM7YSuV9qI79XESd4ddQ==} + postcss-normalize-unicode@7.0.9: + resolution: {integrity: sha512-DRAdWfeh/TjmhLJsw91vdiWCnUod9iwvM7xyS02/nF/sLsCR3A8l3pztrSUrWG8DSBqfX7yEk9FM0USaVJ2mSg==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - postcss-normalize-url@7.0.1: - resolution: {integrity: sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ==} + postcss-normalize-url@7.0.3: + resolution: {integrity: sha512-CL93wmloq5qsffmFv+bw24MIRbmhHrp53qoh1LDAb/5TtjWEXI/np4xcP/Gw9oWCb2XyWnqHYLDUwiKRoJBA1Q==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - postcss-normalize-whitespace@7.0.1: - resolution: {integrity: sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA==} + postcss-normalize-whitespace@7.0.3: + resolution: {integrity: sha512-FdHjjn+Ht5Z2ZRjNOmeCbNq6lq09sUYKpmlF/Aq0XjVNSLTL6fmHlA/3swN2wP2caY9GV/tjSDcIIyS7aN7W0A==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - postcss-ordered-values@7.0.2: - resolution: {integrity: sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw==} + postcss-ordered-values@7.0.4: + resolution: {integrity: sha512-nubSi49hDHQk4E8KIj+IbLY8Bg+8OcSUEhgyolgM+atnOvXjV7EjaR6bac4YGZoFyPa9mWoAF3EaYbWdFkKqVg==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - postcss-reduce-initial@7.0.6: - resolution: {integrity: sha512-G6ZyK68AmrPdMB6wyeA37ejnnRG2S8xinJrZJnOv+IaRKf6koPAVbQsiC7MfkmXaGmF1UO+QCijb27wfpxuRNg==} + postcss-reduce-initial@7.0.9: + resolution: {integrity: sha512-ztTNPdIxXTxtBcG03E9u8v44M4ElXbMIRT7pf2onlquGula0Y83nKKxqM22FA/hMgkfCjN7ohevkVlaNwI8iOQ==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - postcss-reduce-transforms@7.0.1: - resolution: {integrity: sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g==} + postcss-reduce-transforms@7.0.3: + resolution: {integrity: sha512-FXsnN9ZwcZTT8Yf8cAHA8qIGUXcX6WfLd9JoYhrdDfmvsVhhfqkkv7m4AC3rwFOfz+GzkUa87OCKF9dUcicd+g==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 postcss-selector-parser@7.1.1: resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} engines: {node: '>=4'} - postcss-svgo@7.1.1: - resolution: {integrity: sha512-zU9H9oEDrUFKa0JB7w+IYL7Qs9ey1mZyjhbf0KLxwJDdDRtoPvCmaEfknzqfHj44QS9VD6c5sJnBAVYTLRg/Sg==} + postcss-svgo@7.1.3: + resolution: {integrity: sha512-2QfoFOYMcj8lwcVEf9WeTlkVIAm7u2QvOEhMzkQU3KUhhGX/l8hVV9EtjMv4iq3E9iI3OeeMN0YoMLbGusuigw==} engines: {node: ^18.12.0 || ^20.9.0 || >= 18} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 - postcss-unique-selectors@7.0.5: - resolution: {integrity: sha512-3QoYmEt4qg/rUWDn6Tc8+ZVPmbp4G1hXDtCNWDx0st8SjtCbRcxRXDDM1QrEiXGG3A45zscSJFb4QH90LViyxg==} + postcss-unique-selectors@7.0.7: + resolution: {integrity: sha512-d+sCkaRnSefghOUdH8CMJZV9yUQhj2ojpe8Nw/lA+LV1UOfeleGkLTl6XdCFFSai9UJ+DJPb69FFuqthXYsY8w==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.10: - resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==} + postcss@8.5.15: + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -4756,6 +4971,9 @@ packages: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} @@ -4785,12 +5003,12 @@ packages: peerDependencies: puppeteer: '>=22.0.0' - puppeteer-core@24.40.0: - resolution: {integrity: sha512-MWL3XbUCfVgGR0gRsidzT6oKJT2QydPLhMITU6HoVWiiv4gkb6gJi3pcdAa8q4HwjBTbqISOWVP4aJiiyUJvag==} + puppeteer-core@24.43.1: + resolution: {integrity: sha512-T5ScUMAsmhdNbgDR41AGESYeS6V9MSgetkSnVhhW+gXvzC42VesKCn5ld87gAZDJ6vLHL9GkRvY9WtQWSnwFbw==} engines: {node: '>=18'} - puppeteer@24.40.0: - resolution: {integrity: sha512-IxQbDq93XHVVLWHrAkFP7F7iHvb9o0mgfsSIMlhHb+JM+JjM1V4v4MNSQfcRWJopx9dsNOr9adYv0U5fm9BJBQ==} + puppeteer@24.43.1: + resolution: {integrity: sha512-/FSOViCrqRdb1HDocpsM9Z1giA71gTQPUt3SpHGVRALKAy/rJr1fLFYZW9F23qPxqVxTHQnbh/5B5opJST3kAw==} engines: {node: '>=18'} hasBin: true @@ -4842,6 +5060,18 @@ packages: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} hasBin: true + remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + + remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} + + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -4875,8 +5105,8 @@ packages: resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} engines: {node: '>=10'} - resolve@1.22.11: - resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} + resolve@1.22.12: + resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} engines: {node: '>= 0.4'} hasBin: true @@ -4905,13 +5135,18 @@ packages: resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} engines: {node: '>=8.0'} + rolldown@1.0.2: + resolution: {integrity: sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + rolldown@1.0.3: resolution: {integrity: sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rollup@4.60.1: - resolution: {integrity: sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==} + rollup@4.60.4: + resolution: {integrity: sha512-WHeFSbZYsPu3+bLoNRUuAO+wavNlocOPf3wSHTP7hcFKVnJeWsYlCDbr3mTS14FCizf9ccIxXA8sGL8zKeQN3g==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -4958,8 +5193,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.7.4: - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + semver@7.8.1: + resolution: {integrity: sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==} engines: {node: '>=10'} hasBin: true @@ -4992,8 +5227,8 @@ packages: shellwords@0.1.1: resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==} - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} engines: {node: '>= 0.4'} side-channel-map@1.0.1: @@ -5018,8 +5253,8 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - sigstore@4.1.0: - resolution: {integrity: sha512-/fUgUhYghuLzVT/gaJoeVehLCgZiUxPCPMcyVNY0lIf/cTCz58K/WTI7PefDarXxp9nUKpEwg1yyz3eSBMTtgA==} + sigstore@4.1.1: + resolution: {integrity: sha512-endqECJkfhozrXMK5ngu/UAA0xVcVEFdnHJCElGaExypjW+HK5i6zu3NteLoaX/iFbRUbC3+DjttQs0GARr+5w==} engines: {node: ^20.17.0 || >=22.9.0} simple-git@3.36.0: @@ -5059,13 +5294,13 @@ packages: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - snyk@1.1303.2: - resolution: {integrity: sha512-hZBvU1MiqTBfoFDcgoIFKZEfR98Y9lYtabhDS1vH77S1JWwLaRyeiiMiPGjrI56SD2ZRfHcfyicDI1eQ6A60VQ==} + snyk@1.1305.0: + resolution: {integrity: sha512-dFBJW92gbJW0B85aSwq6ZCuC0jO1dDDyjN0WnKVjsfUdKNi7CXvlSPiXteUgaPNy0qbM4jJec9fQZB5/A2LHwg==} engines: {node: '>=12'} hasBin: true - socket.io-adapter@2.5.6: - resolution: {integrity: sha512-DkkO/dz7MGln0dHn5bmN3pPy+JmywNICWrJqVWiVOyvXjWQFIv9c2h24JrQLLFJ2aQVQf/Cvl1vblnd4r2apLQ==} + socket.io-adapter@2.5.7: + resolution: {integrity: sha512-e0LyK91f3cUxTmv95/KzoLg47+zF+s/sbxRGDNsyG4dmIP8ZSX8ax6byOxfJXeNNtS/8AZlfD+uP7gBeR7DLlg==} socket.io-parser@4.2.6: resolution: {integrity: sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==} @@ -5079,8 +5314,8 @@ packages: resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} - socks@2.8.7: - resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} + socks@2.8.9: + resolution: {integrity: sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} source-map-js@1.2.1: @@ -5098,6 +5333,9 @@ packages: resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} engines: {node: '>= 12'} + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + spdx-exceptions@2.5.0: resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} @@ -5128,8 +5366,8 @@ packages: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} - std-env@4.0.0: - resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} + std-env@4.1.0: + resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} stdin-discarder@0.2.2: resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} @@ -5158,13 +5396,16 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} - string-width@8.2.0: - resolution: {integrity: sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==} + string-width@8.2.1: + resolution: {integrity: sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==} engines: {node: '>=20'} string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi@4.0.0: resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} engines: {node: '>=4'} @@ -5195,11 +5436,11 @@ packages: peerDependencies: webpack: ^5.27.0 - stylehacks@7.0.8: - resolution: {integrity: sha512-I3f053GBLIiS5Fg6OMFhq/c+yW+5Hc2+1fgq7gElDMMSqwlRb3tBf2ef6ucLStYRpId4q//bQO1FjcyNyy4yDQ==} + stylehacks@7.0.11: + resolution: {integrity: sha512-iODNfhXVLqc5LADs+Y6Oh5wJuK5ZcHbVng8aiK3y9pjMQdc5hLrBW0eFU6FtnpNrE6PoEg/MmFTU4waotj5WNg==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.13 supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} @@ -5217,46 +5458,78 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + svgo@3.3.3: + resolution: {integrity: sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng==} + engines: {node: '>=14.0.0'} + hasBin: true + svgo@4.0.1: resolution: {integrity: sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==} engines: {node: '>=16'} hasBin: true - tapable@2.3.2: - resolution: {integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==} + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} engines: {node: '>=6'} tar-fs@3.1.2: resolution: {integrity: sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==} - tar-stream@3.1.8: - resolution: {integrity: sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==} + tar-stream@3.2.0: + resolution: {integrity: sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==} - tar@7.5.13: - resolution: {integrity: sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==} + tar@7.5.15: + resolution: {integrity: sha512-dzGK0boVlC4W5QFuQN1EFSl3bIDYsk7Tj40U6eIBnK2k/8ml7TZ5agbI5j5+qnoVcAA+rNtBml8SEiLxZpNqRQ==} engines: {node: '>=18'} teex@1.0.1: resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} - terser-webpack-plugin@5.4.0: - resolution: {integrity: sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==} + terser-webpack-plugin@5.6.0: + resolution: {integrity: sha512-Eum+5ajkaOhf5KbM26osvv21kLD7BaGqQ1UA4Ami4arYwylmGUQTgHFpHDdmJod1q4QXa66p0to/FBKID+J1vA==} engines: {node: '>= 10.13.0'} peerDependencies: + '@minify-html/node': '*' '@swc/core': '*' + '@swc/css': '*' + '@swc/html': '*' + clean-css: '*' + cssnano: '*' + csso: '*' esbuild: '*' + html-minifier-terser: '*' + lightningcss: '*' + postcss: '*' uglify-js: '*' webpack: ^5.1.0 peerDependenciesMeta: + '@minify-html/node': + optional: true '@swc/core': optional: true + '@swc/css': + optional: true + '@swc/html': + optional: true + clean-css: + optional: true + cssnano: + optional: true + csso: + optional: true esbuild: optional: true + html-minifier-terser: + optional: true + lightningcss: + optional: true + postcss: + optional: true uglify-js: optional: true - terser@5.46.1: - resolution: {integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==} + terser@5.48.0: + resolution: {integrity: sha512-J/9An6vs9Us6wKRriSFXBWdRZapREHqFzdNUKk0pmu804EMR6dr6winwo7e5JDxN4xahxQsuysyYFwlwj4XN/Q==} engines: {node: '>=10'} hasBin: true @@ -5273,12 +5546,12 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@1.0.4: - resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} + tinyexec@1.2.2: + resolution: {integrity: sha512-M/Q0B2cp4K7kynaT/vnED1j8TlLY+Pp7C6Wl2bl/7u/F0mUVwdyOpwomQb8JpYLitHUssAJRmLZdMCGsrx7i+g==} engines: {node: '>=18'} - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + tinyglobby@0.2.16: + resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} engines: {node: '>=12.0.0'} tinyrainbow@3.1.0: @@ -5297,6 +5570,12 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + ts-api-utils@2.5.0: resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} engines: {node: '>=18.12'} @@ -5337,23 +5616,23 @@ packages: type-level-regexp@0.1.17: resolution: {integrity: sha512-wTk4DH3cxwk196uGLK/E9pE45aLfeKJacKmcEgEOA/q5dnPGNxXt0cfYdFxb57L+sEpf1oJH4Dnx/pnRcku9jg==} - typed-query-selector@2.12.1: - resolution: {integrity: sha512-uzR+FzI8qrUEIu96oaeBJmd9E7CFEiQ3goA5qCVgc4s5llSubcfGHq9yUstZx/k4s9dXHVKsE35YWoFyvEqEHA==} + typed-query-selector@2.12.2: + resolution: {integrity: sha512-EOPFbyIub4ngnEdqi2yOcNeDLaX/0jcE1JoAXQDDMIthap7FoN795lc/SHfIq2d416VufXpM8z/lD+WRm2gfOQ==} typedoc-plugin-rename-defaults@0.7.3: resolution: {integrity: sha512-fDtrWZ9NcDfdGdlL865GW7uIGQXlthPscURPOhDkKUe4DBQSRRFUf33fhWw41FLlsz8ZTeSxzvvuNmh54MynFA==} peerDependencies: typedoc: '>=0.22.x <0.29.x' - typedoc@0.28.18: - resolution: {integrity: sha512-NTWTUOFRQ9+SGKKTuWKUioUkjxNwtS3JDRPVKZAXGHZy2wCA8bdv2iJiyeePn0xkmK+TCCqZFT0X7+2+FLjngA==} + typedoc@0.28.19: + resolution: {integrity: sha512-wKh+lhdmMFivMlc6vRRcMGXeGEHGU2g8a2CkPTJjJlwRf1iXbimWIPcFolCqe4E0d/FRtGszpIrsp3WLpDB8Pw==} engines: {node: '>= 18', pnpm: '>= 10'} hasBin: true peerDependencies: typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x || 6.0.x - typescript-eslint@8.58.0: - resolution: {integrity: sha512-e2TQzKfaI85fO+F3QywtX+tCTsu/D3WW5LVU6nz8hTFKFZ8yBJ6mSYRpXqdR3mFjPWmO0eWsTa5f+UpAOe/FMA==} + typescript-eslint@8.60.0: + resolution: {integrity: sha512-9f65qWLZdAW9m1JaxBDUHcqRUfL8bkxxXL7XxEfI+F09q56PkBvIfCjLF3yInsDM/BBmwkqmCQdCZe/RYlIWEw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -5371,22 +5650,29 @@ packages: uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - ufo@1.6.3: - resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + ufo@1.6.4: + resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici-types@7.18.2: - resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + undici@6.26.0: + resolution: {integrity: sha512-4yqz8a3n5HmGTlsbADNtr/dJlhkh/55Rq798G6ibiULcXbDtaLpTl1pvdqcbFfeoj3iSi52lePFM7h9H21cw/A==} + engines: {node: '>=18.17'} unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + unist-util-is@6.0.1: resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} @@ -5451,15 +5737,27 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - vite@7.3.2: - resolution: {integrity: sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==} + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + vite-svg-loader@5.1.1: + resolution: {integrity: sha512-RPzcXA/EpKJA0585x58DBgs7my2VfeJ+j2j1EoHY4Zh82Y7hV4cR1fElgy2aZi85+QSrcLLoTStQ5uZjD68u+Q==} + peerDependencies: + vue: '>=3.2.13' + + vite@8.0.14: + resolution: {integrity: sha512-s4BJJ+5y1pYL6Otw51FHhVJQhPnuRinKig64g/1+EUNaJsd3gCKdD31IPFvswUgW9/60QT9oFHbZHbQK5imcxw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.1.18 + esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 - lightningcss: ^1.21.0 sass: ^1.70.0 sass-embedded: ^1.70.0 stylus: '>=0.54.8' @@ -5470,12 +5768,14 @@ packages: peerDependenciesMeta: '@types/node': optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true jiti: optional: true less: optional: true - lightningcss: - optional: true sass: optional: true sass-embedded: @@ -5491,18 +5791,20 @@ packages: yaml: optional: true - vitest@4.1.2: - resolution: {integrity: sha512-xjR1dMTVHlFLh98JE3i/f/WePqJsah4A0FK9cc8Ehp9Udk0AZk6ccpIZhh1qJ/yxVWRZ+Q54ocnD8TXmkhspGg==} + vitest@4.1.7: + resolution: {integrity: sha512-flYyaFd2CgoCoU+0UKt3pxksgC+S02iTDN0n3LtqaMeXsI9SBcdNujc2k0DeFLzUn/0k538yNjOSdwgCqcrwJA==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.2 - '@vitest/browser-preview': 4.1.2 - '@vitest/browser-webdriverio': 4.1.2 - '@vitest/ui': 4.1.2 + '@vitest/browser-playwright': 4.1.7 + '@vitest/browser-preview': 4.1.7 + '@vitest/browser-webdriverio': 4.1.7 + '@vitest/coverage-istanbul': 4.1.7 + '@vitest/coverage-v8': 4.1.7 + '@vitest/ui': 4.1.7 happy-dom: '*' jsdom: '*' vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -5519,6 +5821,10 @@ packages: optional: true '@vitest/browser-webdriverio': optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': + optional: true '@vitest/ui': optional: true happy-dom: @@ -5530,6 +5836,14 @@ packages: resolution: {integrity: sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==} engines: {node: '>=0.10.0'} + vue@3.5.34: + resolution: {integrity: sha512-WdLBG9gm02OgJIG9axd5Hpx0TFLdzVgfG2evFFu8Rur5O/IoGc5cMjnjh3tPL6GnRGsYvUhBSKVPYVcxRKpMCA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + watchpack@2.5.1: resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==} engines: {node: '>=10.13.0'} @@ -5540,15 +5854,15 @@ packages: webpack-merge@4.2.2: resolution: {integrity: sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==} - webpack-sources@3.3.4: - resolution: {integrity: sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==} + webpack-sources@3.5.0: + resolution: {integrity: sha512-HPuy+uuoTCaaoEoI1LQ3JN9+vrPBvEesnnX1jADHy728cHSMlq4wUc4afYqahq2B1mhQVZxCXOkNTnXltr+2vQ==} engines: {node: '>=10.13.0'} webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - webpack@5.105.4: - resolution: {integrity: sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw==} + webpack@5.107.2: + resolution: {integrity: sha512-v7RhXaJbpMlV0D7hC7lb2EbnxkoeUqf9qhKr6lozx3Q48pmFrqqNRmZFUEGmi7pSwm6fCQ2H1IjvCkHqdpVdjQ==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -5607,8 +5921,8 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.20.1: - resolution: {integrity: sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==} + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -5637,8 +5951,8 @@ packages: resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==} engines: {node: '>= 6'} - yaml@2.8.3: - resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} engines: {node: '>= 14.6'} hasBin: true @@ -5681,25 +5995,25 @@ packages: snapshots: - '@babel/code-frame@7.29.0': + '@babel/code-frame@7.29.7': dependencies: - '@babel/helper-validator-identifier': 7.28.5 + '@babel/helper-validator-identifier': 7.29.7 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.29.0': {} + '@babel/compat-data@7.29.7': {} - '@babel/core@7.29.0': + '@babel/core@7.29.7': dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) - '@babel/helpers': 7.29.2 - '@babel/parser': 7.29.2 - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helpers': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3(supports-color@8.1.1) @@ -5709,85 +6023,85 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.29.1': + '@babel/generator@7.29.7': dependencies: - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - '@babel/helper-compilation-targets@7.28.6': + '@babel/helper-compilation-targets@7.29.7': dependencies: - '@babel/compat-data': 7.29.0 - '@babel/helper-validator-option': 7.27.1 + '@babel/compat-data': 7.29.7 + '@babel/helper-validator-option': 7.29.7 browserslist: 4.28.2 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-globals@7.28.0': {} + '@babel/helper-globals@7.29.7': {} - '@babel/helper-module-imports@7.28.6': + '@babel/helper-module-imports@7.29.7': dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.29.0 + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-plugin-utils@7.28.6': {} + '@babel/helper-plugin-utils@7.29.7': {} - '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-string-parser@7.29.7': {} - '@babel/helper-validator-identifier@7.28.5': {} + '@babel/helper-validator-identifier@7.29.7': {} - '@babel/helper-validator-option@7.27.1': {} + '@babel/helper-validator-option@7.29.7': {} - '@babel/helpers@7.29.2': + '@babel/helpers@7.29.7': dependencies: - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 - '@babel/parser@7.29.2': + '@babel/parser@7.29.7': dependencies: - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 - '@babel/template@7.28.6': + '@babel/template@7.29.7': dependencies: - '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 + '@babel/code-frame': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 - '@babel/traverse@7.29.0': + '@babel/traverse@7.29.7': dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.2 - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-globals': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color - '@babel/types@7.29.0': + '@babel/types@7.29.7': dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 '@bcoe/v8-coverage@1.0.2': {} '@ckeditor/ckeditor5-inspector@5.0.1': {} - '@colordx/core@5.0.3': {} + '@colordx/core@5.4.3': {} '@colors/colors@1.5.0': {} @@ -5809,8 +6123,8 @@ snapshots: '@es-joy/jsdoccomment@0.50.2': dependencies: - '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.58.0 + '@types/estree': 1.0.9 + '@typescript-eslint/types': 8.60.0 comment-parser: 1.4.1 esquery: 1.7.0 jsdoc-type-pratt-parser: 4.1.0 @@ -5893,9 +6207,9 @@ snapshots: '@esbuild/win32-x64@0.27.7': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4)': dependencies: - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -5926,7 +6240,7 @@ snapshots: '@eslint/eslintrc@3.3.5': dependencies: - ajv: 6.14.0 + ajv: 6.15.0 debug: 4.4.3(supports-color@8.1.1) espree: 10.4.0 globals: 14.0.0 @@ -5975,149 +6289,154 @@ snapshots: '@shikijs/types': 3.23.0 '@shikijs/vscode-textmate': 10.0.2 - '@graphql-typed-document-node/core@3.2.0(graphql@16.13.2)': + '@graphql-typed-document-node/core@3.2.0(graphql@16.14.0)': dependencies: - graphql: 16.13.2 + graphql: 16.14.0 - '@humanfs/core@0.19.1': {} + '@humanfs/core@0.19.2': + dependencies: + '@humanfs/types': 0.15.0 - '@humanfs/node@0.16.7': + '@humanfs/node@0.16.8': dependencies: - '@humanfs/core': 0.19.1 + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 '@humanwhocodes/retry': 0.4.3 + '@humanfs/types@0.15.0': {} + '@humanwhocodes/module-importer@1.0.1': {} '@humanwhocodes/retry@0.4.3': {} '@inquirer/ansi@1.0.2': {} - '@inquirer/checkbox@4.3.2(@types/node@25.5.2)': + '@inquirer/checkbox@4.3.2(@types/node@22.19.19)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.5.2) + '@inquirer/core': 10.3.2(@types/node@22.19.19) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.5.2) + '@inquirer/type': 3.0.10(@types/node@22.19.19) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.5.2 + '@types/node': 22.19.19 - '@inquirer/confirm@5.1.21(@types/node@25.5.2)': + '@inquirer/confirm@5.1.21(@types/node@22.19.19)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.5.2) - '@inquirer/type': 3.0.10(@types/node@25.5.2) + '@inquirer/core': 10.3.2(@types/node@22.19.19) + '@inquirer/type': 3.0.10(@types/node@22.19.19) optionalDependencies: - '@types/node': 25.5.2 + '@types/node': 22.19.19 - '@inquirer/core@10.3.2(@types/node@25.5.2)': + '@inquirer/core@10.3.2(@types/node@22.19.19)': dependencies: '@inquirer/ansi': 1.0.2 '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.5.2) + '@inquirer/type': 3.0.10(@types/node@22.19.19) cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.5.2 + '@types/node': 22.19.19 - '@inquirer/editor@4.2.23(@types/node@25.5.2)': + '@inquirer/editor@4.2.23(@types/node@22.19.19)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.5.2) - '@inquirer/external-editor': 1.0.3(@types/node@25.5.2) - '@inquirer/type': 3.0.10(@types/node@25.5.2) + '@inquirer/core': 10.3.2(@types/node@22.19.19) + '@inquirer/external-editor': 1.0.3(@types/node@22.19.19) + '@inquirer/type': 3.0.10(@types/node@22.19.19) optionalDependencies: - '@types/node': 25.5.2 + '@types/node': 22.19.19 - '@inquirer/expand@4.0.23(@types/node@25.5.2)': + '@inquirer/expand@4.0.23(@types/node@22.19.19)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.5.2) - '@inquirer/type': 3.0.10(@types/node@25.5.2) + '@inquirer/core': 10.3.2(@types/node@22.19.19) + '@inquirer/type': 3.0.10(@types/node@22.19.19) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.5.2 + '@types/node': 22.19.19 - '@inquirer/external-editor@1.0.3(@types/node@25.5.2)': + '@inquirer/external-editor@1.0.3(@types/node@22.19.19)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 25.5.2 + '@types/node': 22.19.19 '@inquirer/figures@1.0.15': {} - '@inquirer/input@4.3.1(@types/node@25.5.2)': + '@inquirer/input@4.3.1(@types/node@22.19.19)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.5.2) - '@inquirer/type': 3.0.10(@types/node@25.5.2) + '@inquirer/core': 10.3.2(@types/node@22.19.19) + '@inquirer/type': 3.0.10(@types/node@22.19.19) optionalDependencies: - '@types/node': 25.5.2 + '@types/node': 22.19.19 - '@inquirer/number@3.0.23(@types/node@25.5.2)': + '@inquirer/number@3.0.23(@types/node@22.19.19)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.5.2) - '@inquirer/type': 3.0.10(@types/node@25.5.2) + '@inquirer/core': 10.3.2(@types/node@22.19.19) + '@inquirer/type': 3.0.10(@types/node@22.19.19) optionalDependencies: - '@types/node': 25.5.2 + '@types/node': 22.19.19 - '@inquirer/password@4.0.23(@types/node@25.5.2)': + '@inquirer/password@4.0.23(@types/node@22.19.19)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.5.2) - '@inquirer/type': 3.0.10(@types/node@25.5.2) + '@inquirer/core': 10.3.2(@types/node@22.19.19) + '@inquirer/type': 3.0.10(@types/node@22.19.19) optionalDependencies: - '@types/node': 25.5.2 - - '@inquirer/prompts@7.10.1(@types/node@25.5.2)': - dependencies: - '@inquirer/checkbox': 4.3.2(@types/node@25.5.2) - '@inquirer/confirm': 5.1.21(@types/node@25.5.2) - '@inquirer/editor': 4.2.23(@types/node@25.5.2) - '@inquirer/expand': 4.0.23(@types/node@25.5.2) - '@inquirer/input': 4.3.1(@types/node@25.5.2) - '@inquirer/number': 3.0.23(@types/node@25.5.2) - '@inquirer/password': 4.0.23(@types/node@25.5.2) - '@inquirer/rawlist': 4.1.11(@types/node@25.5.2) - '@inquirer/search': 3.2.2(@types/node@25.5.2) - '@inquirer/select': 4.4.2(@types/node@25.5.2) + '@types/node': 22.19.19 + + '@inquirer/prompts@7.10.1(@types/node@22.19.19)': + dependencies: + '@inquirer/checkbox': 4.3.2(@types/node@22.19.19) + '@inquirer/confirm': 5.1.21(@types/node@22.19.19) + '@inquirer/editor': 4.2.23(@types/node@22.19.19) + '@inquirer/expand': 4.0.23(@types/node@22.19.19) + '@inquirer/input': 4.3.1(@types/node@22.19.19) + '@inquirer/number': 3.0.23(@types/node@22.19.19) + '@inquirer/password': 4.0.23(@types/node@22.19.19) + '@inquirer/rawlist': 4.1.11(@types/node@22.19.19) + '@inquirer/search': 3.2.2(@types/node@22.19.19) + '@inquirer/select': 4.4.2(@types/node@22.19.19) optionalDependencies: - '@types/node': 25.5.2 + '@types/node': 22.19.19 - '@inquirer/rawlist@4.1.11(@types/node@25.5.2)': + '@inquirer/rawlist@4.1.11(@types/node@22.19.19)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.5.2) - '@inquirer/type': 3.0.10(@types/node@25.5.2) + '@inquirer/core': 10.3.2(@types/node@22.19.19) + '@inquirer/type': 3.0.10(@types/node@22.19.19) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.5.2 + '@types/node': 22.19.19 - '@inquirer/search@3.2.2(@types/node@25.5.2)': + '@inquirer/search@3.2.2(@types/node@22.19.19)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.5.2) + '@inquirer/core': 10.3.2(@types/node@22.19.19) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.5.2) + '@inquirer/type': 3.0.10(@types/node@22.19.19) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.5.2 + '@types/node': 22.19.19 - '@inquirer/select@4.4.2(@types/node@25.5.2)': + '@inquirer/select@4.4.2(@types/node@22.19.19)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.5.2) + '@inquirer/core': 10.3.2(@types/node@22.19.19) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.5.2) + '@inquirer/type': 3.0.10(@types/node@22.19.19) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.5.2 + '@types/node': 22.19.19 '@inquirer/type@1.5.5': dependencies: mute-stream: 1.0.0 - '@inquirer/type@3.0.10(@types/node@25.5.2)': + '@inquirer/type@3.0.10(@types/node@22.19.19)': optionalDependencies: - '@types/node': 25.5.2 + '@types/node': 22.19.19 '@isaacs/cliui@8.0.2': dependencies: @@ -6140,7 +6459,7 @@ snapshots: js-yaml: 3.14.2 resolve-from: 5.0.0 - '@istanbuljs/schema@0.1.3': {} + '@istanbuljs/schema@0.1.6': {} '@jest/schemas@29.6.3': dependencies: @@ -6178,23 +6497,23 @@ snapshots: '@kwsites/promise-deferred@1.1.1': {} - '@listr2/prompt-adapter-inquirer@2.0.22(@inquirer/prompts@7.10.1(@types/node@25.5.2))': + '@listr2/prompt-adapter-inquirer@2.0.22(@inquirer/prompts@7.10.1(@types/node@22.19.19))': dependencies: - '@inquirer/prompts': 7.10.1(@types/node@25.5.2) + '@inquirer/prompts': 7.10.1(@types/node@22.19.19) '@inquirer/type': 1.5.5 '@napi-rs/wasm-runtime@0.2.12': dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@tybys/wasm-util': 0.10.1 + '@tybys/wasm-util': 0.10.2 optional: true '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@tybys/wasm-util': 0.10.1 + '@tybys/wasm-util': 0.10.2 optional: true '@nodelib/fs.scandir@2.1.5': @@ -6214,24 +6533,24 @@ snapshots: agent-base: 7.1.4 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 - lru-cache: 11.3.0 + lru-cache: 11.5.0 socks-proxy-agent: 8.0.5 transitivePeerDependencies: - supports-color '@npmcli/fs@5.0.0': dependencies: - semver: 7.7.4 + semver: 7.8.1 '@npmcli/git@7.0.2': dependencies: '@gar/promise-retry': 1.0.3 '@npmcli/promise-spawn': 9.0.1 ini: 6.0.0 - lru-cache: 11.3.0 + lru-cache: 11.5.0 npm-pick-manifest: 11.0.3 proc-log: 6.1.0 - semver: 7.7.4 + semver: 7.8.1 which: 6.0.1 '@npmcli/installed-package-contents@4.0.0': @@ -6245,10 +6564,10 @@ snapshots: dependencies: '@npmcli/git': 7.0.2 glob: 13.0.6 - hosted-git-info: 9.0.2 + hosted-git-info: 9.0.3 json-parse-even-better-errors: 5.0.0 proc-log: 6.1.0 - semver: 7.7.4 + semver: 7.8.1 spdx-expression-parse: 4.0.0 '@npmcli/promise-spawn@9.0.1': @@ -6262,10 +6581,8 @@ snapshots: '@npmcli/node-gyp': 5.0.0 '@npmcli/package-json': 7.0.5 '@npmcli/promise-spawn': 9.0.1 - node-gyp: 12.2.0 + node-gyp: 12.3.0 proc-log: 6.1.0 - transitivePeerDependencies: - - supports-color '@octokit/auth-token@6.0.0': {} @@ -6273,7 +6590,7 @@ snapshots: dependencies: '@octokit/auth-token': 6.0.0 '@octokit/graphql': 9.0.3 - '@octokit/request': 10.0.8 + '@octokit/request': 10.0.10 '@octokit/request-error': 7.1.0 '@octokit/types': 16.0.0 before-after-hook: 4.0.0 @@ -6286,7 +6603,7 @@ snapshots: '@octokit/graphql@9.0.3': dependencies: - '@octokit/request': 10.0.8 + '@octokit/request': 10.0.10 '@octokit/types': 16.0.0 universal-user-agent: 7.0.3 @@ -6310,12 +6627,12 @@ snapshots: dependencies: '@octokit/types': 16.0.0 - '@octokit/request@10.0.8': + '@octokit/request@10.0.10': dependencies: '@octokit/endpoint': 11.0.3 '@octokit/request-error': 7.1.0 '@octokit/types': 16.0.0 - fast-content-type-parse: 3.0.0 + content-type: 2.0.0 json-with-bigint: 3.5.8 universal-user-agent: 7.0.3 @@ -6376,6 +6693,8 @@ snapshots: '@oxc-parser/binding-win32-x64-msvc@0.72.3': optional: true + '@oxc-project/types@0.132.0': {} + '@oxc-project/types@0.133.0': {} '@oxc-project/types@0.72.3': {} @@ -6444,16 +6763,20 @@ snapshots: '@oxc-transform/binding-win32-x64-msvc@0.134.0': optional: true + '@parse5/tools@0.7.0(parse5@8.0.1)': + dependencies: + parse5: 8.0.1 + '@pkgjs/parseargs@0.11.0': optional: true - '@puppeteer/browsers@2.13.0': + '@puppeteer/browsers@2.13.2': dependencies: debug: 4.4.3(supports-color@8.1.1) extract-zip: 2.0.1 progress: 2.0.3 proxy-agent: 6.5.0 - semver: 7.7.4 + semver: 7.8.1 tar-fs: 3.1.2 yargs: 17.7.2 transitivePeerDependencies: @@ -6462,42 +6785,85 @@ snapshots: - react-native-b4a - supports-color + '@rolldown/binding-android-arm64@1.0.2': + optional: true + '@rolldown/binding-android-arm64@1.0.3': optional: true + '@rolldown/binding-darwin-arm64@1.0.2': + optional: true + '@rolldown/binding-darwin-arm64@1.0.3': optional: true + '@rolldown/binding-darwin-x64@1.0.2': + optional: true + '@rolldown/binding-darwin-x64@1.0.3': optional: true + '@rolldown/binding-freebsd-x64@1.0.2': + optional: true + '@rolldown/binding-freebsd-x64@1.0.3': optional: true + '@rolldown/binding-linux-arm-gnueabihf@1.0.2': + optional: true + '@rolldown/binding-linux-arm-gnueabihf@1.0.3': optional: true + '@rolldown/binding-linux-arm64-gnu@1.0.2': + optional: true + '@rolldown/binding-linux-arm64-gnu@1.0.3': optional: true + '@rolldown/binding-linux-arm64-musl@1.0.2': + optional: true + '@rolldown/binding-linux-arm64-musl@1.0.3': optional: true + '@rolldown/binding-linux-ppc64-gnu@1.0.2': + optional: true + '@rolldown/binding-linux-ppc64-gnu@1.0.3': optional: true + '@rolldown/binding-linux-s390x-gnu@1.0.2': + optional: true + '@rolldown/binding-linux-s390x-gnu@1.0.3': optional: true + '@rolldown/binding-linux-x64-gnu@1.0.2': + optional: true + '@rolldown/binding-linux-x64-gnu@1.0.3': optional: true + '@rolldown/binding-linux-x64-musl@1.0.2': + optional: true + '@rolldown/binding-linux-x64-musl@1.0.3': optional: true + '@rolldown/binding-openharmony-arm64@1.0.2': + optional: true + '@rolldown/binding-openharmony-arm64@1.0.3': optional: true + '@rolldown/binding-wasm32-wasi@1.0.2': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + optional: true + '@rolldown/binding-wasm32-wasi@1.0.3': dependencies: '@emnapi/core': 1.10.0 @@ -6505,95 +6871,101 @@ snapshots: '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true + '@rolldown/binding-win32-arm64-msvc@1.0.2': + optional: true + '@rolldown/binding-win32-arm64-msvc@1.0.3': optional: true + '@rolldown/binding-win32-x64-msvc@1.0.2': + optional: true + '@rolldown/binding-win32-x64-msvc@1.0.3': optional: true - '@rolldown/pluginutils@1.0.0': {} + '@rolldown/pluginutils@1.0.1': {} - '@rollup/pluginutils@5.3.0(rollup@4.60.1)': + '@rollup/pluginutils@5.3.0(rollup@4.60.4)': dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 estree-walker: 2.0.2 picomatch: 4.0.4 optionalDependencies: - rollup: 4.60.1 + rollup: 4.60.4 - '@rollup/rollup-android-arm-eabi@4.60.1': + '@rollup/rollup-android-arm-eabi@4.60.4': optional: true - '@rollup/rollup-android-arm64@4.60.1': + '@rollup/rollup-android-arm64@4.60.4': optional: true - '@rollup/rollup-darwin-arm64@4.60.1': + '@rollup/rollup-darwin-arm64@4.60.4': optional: true - '@rollup/rollup-darwin-x64@4.60.1': + '@rollup/rollup-darwin-x64@4.60.4': optional: true - '@rollup/rollup-freebsd-arm64@4.60.1': + '@rollup/rollup-freebsd-arm64@4.60.4': optional: true - '@rollup/rollup-freebsd-x64@4.60.1': + '@rollup/rollup-freebsd-x64@4.60.4': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.60.1': + '@rollup/rollup-linux-arm-gnueabihf@4.60.4': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.60.1': + '@rollup/rollup-linux-arm-musleabihf@4.60.4': optional: true - '@rollup/rollup-linux-arm64-gnu@4.60.1': + '@rollup/rollup-linux-arm64-gnu@4.60.4': optional: true - '@rollup/rollup-linux-arm64-musl@4.60.1': + '@rollup/rollup-linux-arm64-musl@4.60.4': optional: true - '@rollup/rollup-linux-loong64-gnu@4.60.1': + '@rollup/rollup-linux-loong64-gnu@4.60.4': optional: true - '@rollup/rollup-linux-loong64-musl@4.60.1': + '@rollup/rollup-linux-loong64-musl@4.60.4': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.60.1': + '@rollup/rollup-linux-ppc64-gnu@4.60.4': optional: true - '@rollup/rollup-linux-ppc64-musl@4.60.1': + '@rollup/rollup-linux-ppc64-musl@4.60.4': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.60.1': + '@rollup/rollup-linux-riscv64-gnu@4.60.4': optional: true - '@rollup/rollup-linux-riscv64-musl@4.60.1': + '@rollup/rollup-linux-riscv64-musl@4.60.4': optional: true - '@rollup/rollup-linux-s390x-gnu@4.60.1': + '@rollup/rollup-linux-s390x-gnu@4.60.4': optional: true - '@rollup/rollup-linux-x64-gnu@4.60.1': + '@rollup/rollup-linux-x64-gnu@4.60.4': optional: true - '@rollup/rollup-linux-x64-musl@4.60.1': + '@rollup/rollup-linux-x64-musl@4.60.4': optional: true - '@rollup/rollup-openbsd-x64@4.60.1': + '@rollup/rollup-openbsd-x64@4.60.4': optional: true - '@rollup/rollup-openharmony-arm64@4.60.1': + '@rollup/rollup-openharmony-arm64@4.60.4': optional: true - '@rollup/rollup-win32-arm64-msvc@4.60.1': + '@rollup/rollup-win32-arm64-msvc@4.60.4': optional: true - '@rollup/rollup-win32-ia32-msvc@4.60.1': + '@rollup/rollup-win32-ia32-msvc@4.60.4': optional: true - '@rollup/rollup-win32-x64-gnu@4.60.1': + '@rollup/rollup-win32-x64-gnu@4.60.4': optional: true - '@rollup/rollup-win32-x64-msvc@4.60.1': + '@rollup/rollup-win32-x64-msvc@4.60.4': optional: true '@sentry-internal/tracing@7.120.4': @@ -6650,18 +7022,18 @@ snapshots: '@sigstore/bundle@4.0.0': dependencies: - '@sigstore/protobuf-specs': 0.5.0 + '@sigstore/protobuf-specs': 0.5.1 - '@sigstore/core@3.2.0': {} + '@sigstore/core@3.2.1': {} - '@sigstore/protobuf-specs@0.5.0': {} + '@sigstore/protobuf-specs@0.5.1': {} '@sigstore/sign@4.1.1': dependencies: '@gar/promise-retry': 1.0.3 '@sigstore/bundle': 4.0.0 - '@sigstore/core': 3.2.0 - '@sigstore/protobuf-specs': 0.5.0 + '@sigstore/core': 3.2.1 + '@sigstore/protobuf-specs': 0.5.1 make-fetch-happen: 15.0.5 proc-log: 6.1.0 transitivePeerDependencies: @@ -6669,16 +7041,16 @@ snapshots: '@sigstore/tuf@4.0.2': dependencies: - '@sigstore/protobuf-specs': 0.5.0 + '@sigstore/protobuf-specs': 0.5.1 tuf-js: 4.1.0 transitivePeerDependencies: - supports-color - '@sigstore/verify@3.1.0': + '@sigstore/verify@3.1.1': dependencies: '@sigstore/bundle': 4.0.0 - '@sigstore/core': 3.2.0 - '@sigstore/protobuf-specs': 0.5.0 + '@sigstore/core': 3.2.1 + '@sigstore/protobuf-specs': 0.5.1 '@simple-git/args-pathspec@1.0.3': {} @@ -6710,10 +7082,10 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@stylistic/eslint-plugin@4.4.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.5.4)': + '@stylistic/eslint-plugin@4.4.1(eslint@9.39.4)(typescript@5.5.4)': dependencies: - '@typescript-eslint/utils': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.5.4) - eslint: 9.39.4(jiti@2.6.1) + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4)(typescript@5.5.4) + eslint: 9.39.4 eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 @@ -6731,7 +7103,7 @@ snapshots: '@tufjs/canonical-json': 2.0.0 minimatch: 10.2.5 - '@tybys/wasm-util@0.10.1': + '@tybys/wasm-util@0.10.2': dependencies: tslib: 2.8.1 optional: true @@ -6745,7 +7117,7 @@ snapshots: '@types/cors@2.8.19': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/css@0.0.38': {} @@ -6755,17 +7127,10 @@ snapshots: '@types/deep-eql@4.0.2': {} - '@types/eslint-scope@3.7.7': - dependencies: - '@types/eslint': 9.6.1 - '@types/estree': 1.0.8 - - '@types/eslint@9.6.1': - dependencies: - '@types/estree': 1.0.8 - '@types/json-schema': 7.0.15 + '@types/estree@1.0.8': + optional: true - '@types/estree@1.0.8': {} + '@types/estree@1.0.9': {} '@types/hast@3.0.4': dependencies: @@ -6784,7 +7149,7 @@ snapshots: '@types/karma@6.3.9': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 log4js: 6.9.1 transitivePeerDependencies: - supports-color @@ -6801,23 +7166,18 @@ snapshots: '@types/node-fetch@2.6.13': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 form-data: 4.0.5 - '@types/node@22.19.17': + '@types/node@22.19.19': dependencies: undici-types: 6.21.0 - '@types/node@25.5.2': - dependencies: - undici-types: 7.18.2 - optional: true - '@types/npm-package-arg@6.1.4': {} '@types/npm-registry-fetch@8.0.9': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/node-fetch': 2.6.13 '@types/npm-package-arg': 6.1.4 '@types/npmlog': 7.0.0 @@ -6825,11 +7185,11 @@ snapshots: '@types/npmlog@7.0.0': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/pacote@11.1.8': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/npm-registry-fetch': 8.0.9 '@types/npmlog': 7.0.0 '@types/ssri': 7.1.5 @@ -6840,7 +7200,7 @@ snapshots: '@types/shelljs@0.10.0': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 fast-glob: 3.3.3 '@types/sinon-chai@2.7.42': @@ -6856,32 +7216,32 @@ snapshots: '@types/ssri@7.1.5': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/through2@2.0.41': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/unist@3.0.3': {} '@types/ws@8.18.1': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 optional: true - '@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.4(jiti@2.6.1))(typescript@5.5.4)': + '@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4)(typescript@5.5.4))(eslint@9.39.4)(typescript@5.5.4)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.5.4) - '@typescript-eslint/scope-manager': 8.58.0 - '@typescript-eslint/type-utils': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.5.4) - '@typescript-eslint/utils': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 8.58.0 - eslint: 9.39.4(jiti@2.6.1) + '@typescript-eslint/parser': 8.60.0(eslint@9.39.4)(typescript@5.5.4) + '@typescript-eslint/scope-manager': 8.60.0 + '@typescript-eslint/type-utils': 8.60.0(eslint@9.39.4)(typescript@5.5.4) + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4)(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.60.0 + eslint: 9.39.4 ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@5.5.4) @@ -6889,189 +7249,191 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.5.4)': + '@typescript-eslint/parser@8.60.0(eslint@9.39.4)(typescript@5.5.4)': dependencies: - '@typescript-eslint/scope-manager': 8.58.0 - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 8.58.0 + '@typescript-eslint/scope-manager': 8.60.0 + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/typescript-estree': 8.60.0(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.60.0 debug: 4.4.3(supports-color@8.1.1) - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4 typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.58.0(typescript@5.5.4)': + '@typescript-eslint/project-service@8.60.0(typescript@5.5.4)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@5.5.4) - '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/tsconfig-utils': 8.60.0(typescript@5.5.4) + '@typescript-eslint/types': 8.60.0 debug: 4.4.3(supports-color@8.1.1) typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.58.0': + '@typescript-eslint/scope-manager@8.60.0': dependencies: - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/visitor-keys': 8.58.0 + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/visitor-keys': 8.60.0 - '@typescript-eslint/tsconfig-utils@8.58.0(typescript@5.5.4)': + '@typescript-eslint/tsconfig-utils@8.60.0(typescript@5.5.4)': dependencies: typescript: 5.5.4 - '@typescript-eslint/type-utils@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.5.4)': + '@typescript-eslint/type-utils@8.60.0(eslint@9.39.4)(typescript@5.5.4)': dependencies: - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.5.4) - '@typescript-eslint/utils': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.5.4) + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/typescript-estree': 8.60.0(typescript@5.5.4) + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4)(typescript@5.5.4) debug: 4.4.3(supports-color@8.1.1) - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4 ts-api-utils: 2.5.0(typescript@5.5.4) typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.58.0': {} + '@typescript-eslint/types@8.60.0': {} - '@typescript-eslint/typescript-estree@8.58.0(typescript@5.5.4)': + '@typescript-eslint/typescript-estree@8.60.0(typescript@5.5.4)': dependencies: - '@typescript-eslint/project-service': 8.58.0(typescript@5.5.4) - '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@5.5.4) - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/visitor-keys': 8.58.0 + '@typescript-eslint/project-service': 8.60.0(typescript@5.5.4) + '@typescript-eslint/tsconfig-utils': 8.60.0(typescript@5.5.4) + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/visitor-keys': 8.60.0 debug: 4.4.3(supports-color@8.1.1) minimatch: 10.2.5 - semver: 7.7.4 - tinyglobby: 0.2.15 + semver: 7.8.1 + tinyglobby: 0.2.16 ts-api-utils: 2.5.0(typescript@5.5.4) typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.5.4)': + '@typescript-eslint/utils@8.60.0(eslint@9.39.4)(typescript@5.5.4)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.58.0 - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.5.4) - eslint: 9.39.4(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4) + '@typescript-eslint/scope-manager': 8.60.0 + '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/typescript-estree': 8.60.0(typescript@5.5.4) + eslint: 9.39.4 typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.58.0': + '@typescript-eslint/visitor-keys@8.60.0': dependencies: - '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/types': 8.60.0 eslint-visitor-keys: 5.0.1 - '@vitest/coverage-v8@4.1.2(vitest@4.1.2(@types/node@22.19.17)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)))': - dependencies: - '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.1.2 - ast-v8-to-istanbul: 1.0.0 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-report: 3.0.1 - istanbul-reports: 3.2.0 - magicast: 0.5.2 - obug: 2.1.1 - std-env: 4.0.0 - tinyrainbow: 3.1.0 - vitest: 4.1.2(@types/node@22.19.17)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) + '@ungap/structured-clone@1.3.1': {} - '@vitest/coverage-v8@4.1.2(vitest@4.1.2(@types/node@25.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)))': + '@vitest/coverage-v8@4.1.7(vitest@4.1.7)': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.1.2 - ast-v8-to-istanbul: 1.0.0 + '@vitest/utils': 4.1.7 + ast-v8-to-istanbul: 1.0.2 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-reports: 3.2.0 - magicast: 0.5.2 + magicast: 0.5.3 obug: 2.1.1 - std-env: 4.0.0 + std-env: 4.1.0 tinyrainbow: 3.1.0 - vitest: 4.1.2(@types/node@25.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) + vitest: 4.1.7(@types/node@22.19.19)(@vitest/coverage-v8@4.1.7)(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(terser@5.48.0)(yaml@2.9.0)) - '@vitest/expect@4.1.2': + '@vitest/expect@4.1.7': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.1.2 - '@vitest/utils': 4.1.2 + '@vitest/spy': 4.1.7 + '@vitest/utils': 4.1.7 chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.2(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))': + '@vitest/mocker@4.1.7(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(terser@5.48.0)(yaml@2.9.0))': dependencies: - '@vitest/spy': 4.1.2 + '@vitest/spy': 4.1.7 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3) + vite: 8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(terser@5.48.0)(yaml@2.9.0) - '@vitest/mocker@4.1.2(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))': - dependencies: - '@vitest/spy': 4.1.2 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - vite: 7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3) - - '@vitest/pretty-format@4.1.2': + '@vitest/pretty-format@4.1.7': dependencies: tinyrainbow: 3.1.0 - '@vitest/runner@4.1.2': + '@vitest/runner@4.1.7': dependencies: - '@vitest/utils': 4.1.2 + '@vitest/utils': 4.1.7 pathe: 2.0.3 - '@vitest/snapshot@4.1.2': + '@vitest/snapshot@4.1.7': dependencies: - '@vitest/pretty-format': 4.1.2 - '@vitest/utils': 4.1.2 + '@vitest/pretty-format': 4.1.7 + '@vitest/utils': 4.1.7 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.1.2': {} + '@vitest/spy@4.1.7': {} - '@vitest/utils@4.1.2': + '@vitest/utils@4.1.7': dependencies: - '@vitest/pretty-format': 4.1.2 + '@vitest/pretty-format': 4.1.7 convert-source-map: 2.0.0 tinyrainbow: 3.1.0 - '@vue/compiler-core@3.5.32': + '@vue/compiler-core@3.5.34': dependencies: - '@babel/parser': 7.29.2 - '@vue/shared': 3.5.32 + '@babel/parser': 7.29.7 + '@vue/shared': 3.5.34 entities: 7.0.1 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-dom@3.5.32': + '@vue/compiler-dom@3.5.34': dependencies: - '@vue/compiler-core': 3.5.32 - '@vue/shared': 3.5.32 + '@vue/compiler-core': 3.5.34 + '@vue/shared': 3.5.34 - '@vue/compiler-sfc@3.5.32': + '@vue/compiler-sfc@3.5.34': dependencies: - '@babel/parser': 7.29.2 - '@vue/compiler-core': 3.5.32 - '@vue/compiler-dom': 3.5.32 - '@vue/compiler-ssr': 3.5.32 - '@vue/shared': 3.5.32 + '@babel/parser': 7.29.7 + '@vue/compiler-core': 3.5.34 + '@vue/compiler-dom': 3.5.34 + '@vue/compiler-ssr': 3.5.34 + '@vue/shared': 3.5.34 estree-walker: 2.0.2 magic-string: 0.30.21 - postcss: 8.5.10 + postcss: 8.5.15 source-map-js: 1.2.1 - '@vue/compiler-ssr@3.5.32': + '@vue/compiler-ssr@3.5.34': dependencies: - '@vue/compiler-dom': 3.5.32 - '@vue/shared': 3.5.32 + '@vue/compiler-dom': 3.5.34 + '@vue/shared': 3.5.34 - '@vue/shared@3.5.32': {} + '@vue/reactivity@3.5.34': + dependencies: + '@vue/shared': 3.5.34 + + '@vue/runtime-core@3.5.34': + dependencies: + '@vue/reactivity': 3.5.34 + '@vue/shared': 3.5.34 + + '@vue/runtime-dom@3.5.34': + dependencies: + '@vue/reactivity': 3.5.34 + '@vue/runtime-core': 3.5.34 + '@vue/shared': 3.5.34 + csstype: 3.2.3 + + '@vue/server-renderer@3.5.34(vue@3.5.34(typescript@5.5.4))': + dependencies: + '@vue/compiler-ssr': 3.5.34 + '@vue/shared': 3.5.34 + vue: 3.5.34(typescript@5.5.4) + + '@vue/shared@3.5.34': {} '@webassemblyjs/ast@1.14.1': dependencies: @@ -7174,27 +7536,27 @@ snapshots: agent-base@7.1.4: {} - ajv-formats@2.1.1(ajv@8.18.0): + ajv-formats@2.1.1(ajv@8.20.0): optionalDependencies: - ajv: 8.18.0 + ajv: 8.20.0 - ajv-keywords@3.5.2(ajv@6.14.0): + ajv-keywords@3.5.2(ajv@6.15.0): dependencies: - ajv: 6.14.0 + ajv: 6.15.0 - ajv-keywords@5.1.0(ajv@8.18.0): + ajv-keywords@5.1.0(ajv@8.20.0): dependencies: - ajv: 8.18.0 + ajv: 8.20.0 fast-deep-equal: 3.1.3 - ajv@6.14.0: + ajv@6.15.0: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.18.0: + ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 fast-uri: 3.1.2 @@ -7248,7 +7610,7 @@ snapshots: dependencies: tslib: 2.8.1 - ast-v8-to-istanbul@1.0.0: + ast-v8-to-istanbul@1.0.2: dependencies: '@jridgewell/trace-mapping': 0.3.31 estree-walker: 3.0.3 @@ -7256,58 +7618,60 @@ snapshots: asynckit@0.4.0: {} - b4a@1.8.0: {} + b4a@1.8.1: {} - babel-loader@10.1.1(@babel/core@7.29.0)(webpack@5.105.4): + babel-loader@10.1.1(@babel/core@7.29.7)(webpack@5.107.2(esbuild@0.27.7)(lightningcss@1.32.0)(postcss@8.5.15)): dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 find-up: 5.0.0 optionalDependencies: - webpack: 5.105.4 + webpack: 5.107.2(esbuild@0.27.7)(lightningcss@1.32.0)(postcss@8.5.15) babel-plugin-istanbul@7.0.1: dependencies: - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 + '@istanbuljs/schema': 0.1.6 istanbul-lib-instrument: 6.0.3 test-exclude: 6.0.0 transitivePeerDependencies: - supports-color + bail@2.0.2: {} + balanced-match@1.0.2: {} balanced-match@4.0.4: {} - bare-events@2.8.2: {} + bare-events@2.8.3: {} - bare-fs@4.6.0: + bare-fs@4.7.1: dependencies: - bare-events: 2.8.2 + bare-events: 2.8.3 bare-path: 3.0.0 - bare-stream: 2.12.0(bare-events@2.8.2) - bare-url: 2.4.0 + bare-stream: 2.13.1(bare-events@2.8.3) + bare-url: 2.4.3 fast-fifo: 1.3.2 transitivePeerDependencies: - bare-abort-controller - react-native-b4a - bare-os@3.8.7: {} + bare-os@3.9.1: {} bare-path@3.0.0: dependencies: - bare-os: 3.8.7 + bare-os: 3.9.1 - bare-stream@2.12.0(bare-events@2.8.2): + bare-stream@2.13.1(bare-events@2.8.3): dependencies: streamx: 2.25.0 teex: 1.0.1 optionalDependencies: - bare-events: 2.8.2 + bare-events: 2.8.3 transitivePeerDependencies: - react-native-b4a - bare-url@2.4.0: + bare-url@2.4.3: dependencies: bare-path: 3.0.0 @@ -7315,7 +7679,7 @@ snapshots: base64id@2.0.0: {} - baseline-browser-mapping@2.10.15: {} + baseline-browser-mapping@2.10.32: {} basic-ftp@5.3.1: {} @@ -7325,7 +7689,7 @@ snapshots: binary-extensions@2.3.0: {} - body-parser@1.20.4: + body-parser@1.20.5: dependencies: bytes: 3.1.2 content-type: 1.0.5 @@ -7346,12 +7710,12 @@ snapshots: boolean@3.2.0: {} - brace-expansion@1.1.13: + brace-expansion@1.1.15: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.3: + brace-expansion@2.1.1: dependencies: balanced-match: 1.0.2 @@ -7367,10 +7731,10 @@ snapshots: browserslist@4.28.2: dependencies: - baseline-browser-mapping: 2.10.15 - caniuse-lite: 1.0.30001786 - electron-to-chromium: 1.5.331 - node-releases: 2.0.37 + baseline-browser-mapping: 2.10.32 + caniuse-lite: 1.0.30001793 + electron-to-chromium: 1.5.361 + node-releases: 2.0.46 update-browserslist-db: 1.2.3(browserslist@4.28.2) buffer-crc32@0.2.13: {} @@ -7391,7 +7755,7 @@ snapshots: '@npmcli/fs': 5.0.0 fs-minipass: 3.0.3 glob: 13.0.6 - lru-cache: 11.3.0 + lru-cache: 11.5.0 minipass: 7.1.3 minipass-collect: 2.0.1 minipass-flush: 1.0.7 @@ -7422,11 +7786,11 @@ snapshots: caniuse-api@3.0.0: dependencies: browserslist: 4.28.2 - caniuse-lite: 1.0.30001786 + caniuse-lite: 1.0.30001793 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001786: {} + caniuse-lite@1.0.30001793: {} ccount@2.0.1: {} @@ -7455,6 +7819,10 @@ snapshots: chalk@5.6.2: {} + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + character-entities@2.0.2: {} chardet@2.1.1: {} @@ -7483,9 +7851,9 @@ snapshots: chrome-trace-event@1.0.4: {} - chromium-bidi@14.0.0(devtools-protocol@0.0.1581282): + chromium-bidi@14.0.0(devtools-protocol@0.0.1608973): dependencies: - devtools-protocol: 0.0.1581282 + devtools-protocol: 0.0.1608973 mitt: 3.0.1 zod: 3.25.76 @@ -7510,7 +7878,7 @@ snapshots: cli-truncate@5.2.0: dependencies: slice-ansi: 8.0.0 - string-width: 8.2.0 + string-width: 8.2.1 cli-width@4.1.0: {} @@ -7544,6 +7912,8 @@ snapshots: dependencies: delayed-stream: 1.0.0 + comma-separated-tokens@2.0.3: {} + commander@10.0.1: {} commander@11.1.0: {} @@ -7554,6 +7924,8 @@ snapshots: commander@2.20.3: {} + commander@7.2.0: {} + comment-parser@1.4.1: {} commonmark@0.31.2: @@ -7582,6 +7954,8 @@ snapshots: content-type@1.0.5: {} + content-type@2.0.0: {} + convert-source-map@2.0.0: {} cookie@0.7.2: {} @@ -7614,22 +7988,22 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-declaration-sorter@7.3.1(postcss@8.5.10): + css-declaration-sorter@7.4.0(postcss@8.5.15): dependencies: - postcss: 8.5.10 + postcss: 8.5.15 - css-loader@7.1.4(webpack@5.105.4): + css-loader@7.1.4(webpack@5.107.2(esbuild@0.27.7)(lightningcss@1.32.0)(postcss@8.5.15)): dependencies: - icss-utils: 5.1.0(postcss@8.5.10) - postcss: 8.5.10 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.10) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.10) - postcss-modules-scope: 3.2.1(postcss@8.5.10) - postcss-modules-values: 4.0.0(postcss@8.5.10) + icss-utils: 5.1.0(postcss@8.5.15) + postcss: 8.5.15 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.15) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.15) + postcss-modules-scope: 3.2.1(postcss@8.5.15) + postcss-modules-values: 4.0.0(postcss@8.5.15) postcss-value-parser: 4.2.0 - semver: 7.7.4 + semver: 7.8.1 optionalDependencies: - webpack: 5.105.4 + webpack: 5.107.2(esbuild@0.27.7)(lightningcss@1.32.0)(postcss@8.5.15) css-select@5.2.2: dependencies: @@ -7644,6 +8018,11 @@ snapshots: mdn-data: 2.0.28 source-map-js: 1.2.1 + css-tree@2.3.1: + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.2.1 + css-tree@3.2.1: dependencies: mdn-data: 2.27.1 @@ -7653,67 +8032,69 @@ snapshots: cssesc@3.0.0: {} - cssnano-preset-default@7.0.12(postcss@8.5.10): + cssnano-preset-default@7.0.17(postcss@8.5.15): dependencies: browserslist: 4.28.2 - css-declaration-sorter: 7.3.1(postcss@8.5.10) - cssnano-utils: 5.0.1(postcss@8.5.10) - postcss: 8.5.10 - postcss-calc: 10.1.1(postcss@8.5.10) - postcss-colormin: 7.0.7(postcss@8.5.10) - postcss-convert-values: 7.0.9(postcss@8.5.10) - postcss-discard-comments: 7.0.6(postcss@8.5.10) - postcss-discard-duplicates: 7.0.2(postcss@8.5.10) - postcss-discard-empty: 7.0.1(postcss@8.5.10) - postcss-discard-overridden: 7.0.1(postcss@8.5.10) - postcss-merge-longhand: 7.0.5(postcss@8.5.10) - postcss-merge-rules: 7.0.8(postcss@8.5.10) - postcss-minify-font-values: 7.0.1(postcss@8.5.10) - postcss-minify-gradients: 7.0.2(postcss@8.5.10) - postcss-minify-params: 7.0.6(postcss@8.5.10) - postcss-minify-selectors: 7.0.6(postcss@8.5.10) - postcss-normalize-charset: 7.0.1(postcss@8.5.10) - postcss-normalize-display-values: 7.0.1(postcss@8.5.10) - postcss-normalize-positions: 7.0.1(postcss@8.5.10) - postcss-normalize-repeat-style: 7.0.1(postcss@8.5.10) - postcss-normalize-string: 7.0.1(postcss@8.5.10) - postcss-normalize-timing-functions: 7.0.1(postcss@8.5.10) - postcss-normalize-unicode: 7.0.6(postcss@8.5.10) - postcss-normalize-url: 7.0.1(postcss@8.5.10) - postcss-normalize-whitespace: 7.0.1(postcss@8.5.10) - postcss-ordered-values: 7.0.2(postcss@8.5.10) - postcss-reduce-initial: 7.0.6(postcss@8.5.10) - postcss-reduce-transforms: 7.0.1(postcss@8.5.10) - postcss-svgo: 7.1.1(postcss@8.5.10) - postcss-unique-selectors: 7.0.5(postcss@8.5.10) - - cssnano-preset-lite@4.0.4(postcss@8.5.10): - dependencies: - cssnano-utils: 5.0.1(postcss@8.5.10) - postcss: 8.5.10 - postcss-discard-comments: 7.0.6(postcss@8.5.10) - postcss-discard-empty: 7.0.1(postcss@8.5.10) - postcss-normalize-whitespace: 7.0.1(postcss@8.5.10) - - cssnano-utils@5.0.1(postcss@8.5.10): - dependencies: - postcss: 8.5.10 - - cssnano@7.1.4(postcss@8.5.10): - dependencies: - cssnano-preset-default: 7.0.12(postcss@8.5.10) + css-declaration-sorter: 7.4.0(postcss@8.5.15) + cssnano-utils: 5.0.3(postcss@8.5.15) + postcss: 8.5.15 + postcss-calc: 10.1.1(postcss@8.5.15) + postcss-colormin: 7.0.10(postcss@8.5.15) + postcss-convert-values: 7.0.12(postcss@8.5.15) + postcss-discard-comments: 7.0.8(postcss@8.5.15) + postcss-discard-duplicates: 7.0.4(postcss@8.5.15) + postcss-discard-empty: 7.0.3(postcss@8.5.15) + postcss-discard-overridden: 7.0.3(postcss@8.5.15) + postcss-merge-longhand: 7.0.7(postcss@8.5.15) + postcss-merge-rules: 7.0.11(postcss@8.5.15) + postcss-minify-font-values: 7.0.3(postcss@8.5.15) + postcss-minify-gradients: 7.0.5(postcss@8.5.15) + postcss-minify-params: 7.0.9(postcss@8.5.15) + postcss-minify-selectors: 7.1.2(postcss@8.5.15) + postcss-normalize-charset: 7.0.3(postcss@8.5.15) + postcss-normalize-display-values: 7.0.3(postcss@8.5.15) + postcss-normalize-positions: 7.0.4(postcss@8.5.15) + postcss-normalize-repeat-style: 7.0.4(postcss@8.5.15) + postcss-normalize-string: 7.0.3(postcss@8.5.15) + postcss-normalize-timing-functions: 7.0.3(postcss@8.5.15) + postcss-normalize-unicode: 7.0.9(postcss@8.5.15) + postcss-normalize-url: 7.0.3(postcss@8.5.15) + postcss-normalize-whitespace: 7.0.3(postcss@8.5.15) + postcss-ordered-values: 7.0.4(postcss@8.5.15) + postcss-reduce-initial: 7.0.9(postcss@8.5.15) + postcss-reduce-transforms: 7.0.3(postcss@8.5.15) + postcss-svgo: 7.1.3(postcss@8.5.15) + postcss-unique-selectors: 7.0.7(postcss@8.5.15) + + cssnano-preset-lite@4.0.6(postcss@8.5.15): + dependencies: + cssnano-utils: 5.0.3(postcss@8.5.15) + postcss: 8.5.15 + postcss-discard-comments: 7.0.8(postcss@8.5.15) + postcss-discard-empty: 7.0.3(postcss@8.5.15) + postcss-normalize-whitespace: 7.0.3(postcss@8.5.15) + + cssnano-utils@5.0.3(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + + cssnano@7.1.9(postcss@8.5.15): + dependencies: + cssnano-preset-default: 7.0.17(postcss@8.5.15) lilconfig: 3.1.3 - postcss: 8.5.10 + postcss: 8.5.15 csso@5.0.5: dependencies: css-tree: 2.2.1 + csstype@3.2.3: {} + custom-event@1.0.1: {} data-uri-to-buffer@6.0.2: {} - date-fns@4.1.0: {} + date-fns@4.3.0: {} date-format@4.0.14: {} @@ -7771,9 +8152,9 @@ snapshots: depcheck@1.4.7: dependencies: - '@babel/parser': 7.29.2 - '@babel/traverse': 7.29.0 - '@vue/compiler-sfc': 3.5.32 + '@babel/parser': 7.29.7 + '@babel/traverse': 7.29.7 + '@vue/compiler-sfc': 3.5.34 callsite: 1.0.0 camelcase: 6.3.0 cosmiconfig: 7.1.0 @@ -7781,7 +8162,7 @@ snapshots: deps-regex: 0.2.0 findup-sync: 5.0.0 ignore: 5.3.2 - is-core-module: 2.16.1 + is-core-module: 2.16.2 js-yaml: 3.14.2 json5: 2.2.3 lodash: 4.18.1 @@ -7790,9 +8171,9 @@ snapshots: please-upgrade-node: 3.2.0 readdirp: 3.6.0 require-package-name: 2.0.1 - resolve: 1.22.11 + resolve: 1.22.12 resolve-from: 5.0.0 - semver: 7.7.4 + semver: 7.8.1 yargs: 16.2.0 transitivePeerDependencies: - supports-color @@ -7815,7 +8196,7 @@ snapshots: dependencies: dequal: 2.0.3 - devtools-protocol@0.0.1581282: {} + devtools-protocol@0.0.1608973: {} di@0.0.1: {} @@ -7881,11 +8262,11 @@ snapshots: '@one-ini/wasm': 0.1.1 commander: 10.0.1 minimatch: 9.0.9 - semver: 7.7.4 + semver: 7.8.1 ee-first@1.1.1: {} - electron-to-chromium@1.5.331: {} + electron-to-chromium@1.5.361: {} emoji-regex@10.6.0: {} @@ -7903,10 +8284,10 @@ snapshots: engine.io-parser@5.2.3: {} - engine.io@6.6.6: + engine.io@6.6.8: dependencies: '@types/cors': 2.8.19 - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/ws': 8.18.1 accepts: 1.3.8 base64id: 2.0.0 @@ -7914,16 +8295,16 @@ snapshots: cors: 2.8.6 debug: 4.4.3(supports-color@8.1.1) engine.io-parser: 5.2.3 - ws: 8.20.1 + ws: 8.21.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - enhanced-resolve@5.20.1: + enhanced-resolve@5.22.0: dependencies: graceful-fs: 4.2.11 - tapable: 2.3.2 + tapable: 2.3.3 ent@2.2.2: dependencies: @@ -7940,6 +8321,8 @@ snapshots: entities@7.0.1: {} + entities@8.0.0: {} + env-paths@2.2.1: {} environment@1.1.0: {} @@ -7952,9 +8335,9 @@ snapshots: es-errors@1.3.0: {} - es-module-lexer@2.0.0: {} + es-module-lexer@2.1.0: {} - es-object-atoms@1.1.1: + es-object-atoms@1.1.2: dependencies: es-errors: 1.3.0 @@ -7963,19 +8346,19 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 has-tostringtag: 1.0.2 - hasown: 2.0.2 + hasown: 2.0.3 - es-toolkit@1.45.1: {} + es-toolkit@1.47.0: {} es6-error@4.1.1: {} - esbuild-loader@4.4.3(webpack@5.105.4): + esbuild-loader@4.4.3(webpack@5.107.2(esbuild@0.27.7)(lightningcss@1.32.0)(postcss@8.5.15)): dependencies: esbuild: 0.27.7 - get-tsconfig: 4.13.7 + get-tsconfig: 4.14.0 loader-utils: 2.0.4 - webpack: 5.105.4 - webpack-sources: 3.3.4 + webpack: 5.107.2(esbuild@0.27.7)(lightningcss@1.32.0)(postcss@8.5.15) + webpack-sources: 3.5.0 esbuild@0.27.7: optionalDependencies: @@ -8024,33 +8407,33 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-ckeditor5@13.0.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.5.4): + eslint-config-ckeditor5@13.0.1(eslint@9.39.4)(typescript@5.5.4): dependencies: '@eslint/js': 9.39.4 '@eslint/markdown': 6.6.0 - '@stylistic/eslint-plugin': 4.4.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.5.4) - eslint: 9.39.4(jiti@2.6.1) + '@stylistic/eslint-plugin': 4.4.1(eslint@9.39.4)(typescript@5.5.4) + eslint: 9.39.4 eslint-plugin-ckeditor5-rules: 13.0.1 - eslint-plugin-mocha: 11.2.0(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-mocha: 11.3.0(eslint@9.39.4) globals: 16.5.0 typescript: 5.5.4 - typescript-eslint: 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.5.4) + typescript-eslint: 8.60.0(eslint@9.39.4)(typescript@5.5.4) transitivePeerDependencies: - supports-color eslint-plugin-ckeditor5-rules@13.0.1: dependencies: '@es-joy/jsdoccomment': 0.50.2 - enhanced-resolve: 5.20.1 + enhanced-resolve: 5.22.0 resolve.exports: 2.0.3 upath: 2.0.1 validate-npm-package-name: 6.0.2 - yaml: 2.8.3 + yaml: 2.9.0 - eslint-plugin-mocha@11.2.0(eslint@9.39.4(jiti@2.6.1)): + eslint-plugin-mocha@11.3.0(eslint@9.39.4): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) - eslint: 9.39.4(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4) + eslint: 9.39.4 globals: 15.15.0 eslint-scope@5.1.1: @@ -8069,9 +8452,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@9.39.4(jiti@2.6.1): + eslint@9.39.4: dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.21.2 '@eslint/config-helpers': 0.4.2 @@ -8079,11 +8462,11 @@ snapshots: '@eslint/eslintrc': 3.3.5 '@eslint/js': 9.39.4 '@eslint/plugin-kit': 0.4.1 - '@humanfs/node': 0.16.7 + '@humanfs/node': 0.16.8 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 - ajv: 6.14.0 + '@types/estree': 1.0.9 + ajv: 6.15.0 chalk: 4.1.2 cross-spawn: 7.0.6 debug: 4.4.3(supports-color@8.1.1) @@ -8105,8 +8488,6 @@ snapshots: minimatch: 3.1.5 natural-compare: 1.4.0 optionator: 0.9.4 - optionalDependencies: - jiti: 2.6.1 transitivePeerDependencies: - supports-color @@ -8134,7 +8515,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 esutils@2.0.3: {} @@ -8144,7 +8525,7 @@ snapshots: events-universal@1.0.1: dependencies: - bare-events: 2.8.2 + bare-events: 2.8.3 transitivePeerDependencies: - bare-abort-controller @@ -8186,8 +8567,6 @@ snapshots: transitivePeerDependencies: - supports-color - fast-content-type-parse@3.0.0: {} - fast-deep-equal@3.1.3: {} fast-fifo@1.3.2: {} @@ -8280,15 +8659,15 @@ snapshots: asynckit: 0.4.0 combined-stream: 1.0.8 es-set-tostringtag: 2.1.0 - hasown: 2.0.2 + hasown: 2.0.3 mime-types: 2.1.35 format@0.2.2: {} - fs-extra@11.3.4: + fs-extra@11.3.5: dependencies: graceful-fs: 4.2.11 - jsonfile: 6.2.0 + jsonfile: 6.2.1 universalify: 2.0.1 fs-extra@8.1.0: @@ -8312,7 +8691,7 @@ snapshots: get-caller-file@2.0.5: {} - get-east-asian-width@1.5.0: {} + get-east-asian-width@1.6.0: {} get-func-name@2.0.2: {} @@ -8321,12 +8700,12 @@ snapshots: call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 function-bind: 1.1.2 get-proto: 1.0.1 gopd: 1.2.0 has-symbols: 1.1.0 - hasown: 2.0.2 + hasown: 2.0.3 math-intrinsics: 1.1.0 get-package-type@0.1.0: {} @@ -8334,7 +8713,7 @@ snapshots: get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 get-stream@5.2.0: dependencies: @@ -8342,7 +8721,7 @@ snapshots: get-stream@6.0.1: {} - get-tsconfig@4.13.7: + get-tsconfig@4.14.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -8396,7 +8775,7 @@ snapshots: es6-error: 4.1.1 matcher: 3.0.0 roarr: 2.15.4 - semver: 7.7.4 + semver: 7.8.1 serialize-error: 7.0.1 global-modules@1.0.0: @@ -8437,12 +8816,12 @@ snapshots: graceful-fs@4.2.11: {} - graphql-request@7.4.0(graphql@16.13.2): + graphql-request@7.4.0(graphql@16.14.0): dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.2) - graphql: 16.13.2 + '@graphql-typed-document-node/core': 3.2.0(graphql@16.14.0) + graphql: 16.14.0 - graphql@16.13.2: {} + graphql@16.14.0: {} gray-matter@4.0.3: dependencies: @@ -8467,22 +8846,42 @@ snapshots: dependencies: has-symbols: 1.1.0 - hasown@2.0.2: + hasown@2.0.3: dependencies: function-bind: 1.1.2 + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + he@1.2.0: {} homedir-polyfill@1.0.3: dependencies: parse-passwd: 1.0.0 - hosted-git-info@9.0.2: + hosted-git-info@9.0.3: dependencies: - lru-cache: 11.3.0 + lru-cache: 11.5.0 html-escaper@2.0.2: {} + html-void-elements@3.0.0: {} + http-cache-semantics@4.2.0: {} http-errors@2.0.1: @@ -8527,9 +8926,9 @@ snapshots: dependencies: safer-buffer: 2.1.2 - icss-utils@5.1.0(postcss@8.5.10): + icss-utils@5.1.0(postcss@8.5.15): dependencies: - postcss: 8.5.10 + postcss: 8.5.15 ieee754@1.2.1: {} @@ -8561,17 +8960,17 @@ snapshots: ini@6.0.0: {} - inquirer@12.11.1(@types/node@25.5.2): + inquirer@12.11.1(@types/node@22.19.19): dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.5.2) - '@inquirer/prompts': 7.10.1(@types/node@25.5.2) - '@inquirer/type': 3.0.10(@types/node@25.5.2) + '@inquirer/core': 10.3.2(@types/node@22.19.19) + '@inquirer/prompts': 7.10.1(@types/node@22.19.19) + '@inquirer/type': 3.0.10(@types/node@22.19.19) mute-stream: 2.0.0 run-async: 4.0.6 rxjs: 7.8.2 optionalDependencies: - '@types/node': 25.5.2 + '@types/node': 22.19.19 ip-address@10.2.0: {} @@ -8581,9 +8980,9 @@ snapshots: dependencies: binary-extensions: 2.3.0 - is-core-module@2.16.1: + is-core-module@2.16.2: dependencies: - hasown: 2.0.2 + hasown: 2.0.3 is-docker@2.2.1: {} @@ -8599,7 +8998,7 @@ snapshots: is-fullwidth-code-point@5.1.0: dependencies: - get-east-asian-width: 1.5.0 + get-east-asian-width: 1.6.0 is-glob@4.0.3: dependencies: @@ -8621,12 +9020,14 @@ snapshots: is-plain-obj@2.1.0: {} + is-plain-obj@4.1.0: {} + is-regex@1.2.1: dependencies: call-bound: 1.0.4 gopd: 1.2.0 has-tostringtag: 1.0.2 - hasown: 2.0.2 + hasown: 2.0.3 is-stream@2.0.1: {} @@ -8658,9 +9059,9 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: - '@babel/core': 7.29.0 - '@babel/parser': 7.29.2 - '@istanbuljs/schema': 0.1.3 + '@babel/core': 7.29.7 + '@babel/parser': 7.29.7 + '@istanbuljs/schema': 0.1.6 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 transitivePeerDependencies: @@ -8668,11 +9069,11 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.29.0 - '@babel/parser': 7.29.2 - '@istanbuljs/schema': 0.1.3 + '@babel/core': 7.29.7 + '@babel/parser': 7.29.7 + '@istanbuljs/schema': 0.1.6 istanbul-lib-coverage: 3.2.2 - semver: 7.7.4 + semver: 7.8.1 transitivePeerDependencies: - supports-color @@ -8716,13 +9117,10 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 merge-stream: 2.0.0 supports-color: 8.1.1 - jiti@2.6.1: - optional: true - js-beautify@1.15.4: dependencies: config-chain: 1.1.13 @@ -8772,7 +9170,7 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - jsonfile@6.2.0: + jsonfile@6.2.1: dependencies: universalify: 2.0.1 optionalDependencies: @@ -8833,17 +9231,17 @@ snapshots: dependencies: graceful-fs: 4.2.11 - karma-webpack@5.0.1(webpack@5.105.4): + karma-webpack@5.0.1(webpack@5.107.2(esbuild@0.27.7)): dependencies: glob: 7.2.3 minimatch: 9.0.9 - webpack: 5.105.4 + webpack: 5.107.2(esbuild@0.27.7) webpack-merge: 4.2.2 karma@6.4.4: dependencies: '@colors/colors': 1.5.0 - body-parser: 1.20.4 + body-parser: 1.20.5 braces: 3.0.3 chokidar: 3.6.0 connect: 3.7.0 @@ -8940,7 +9338,7 @@ snapshots: lines-and-columns@1.2.4: {} - linkify-it@5.0.0: + linkify-it@5.0.1: dependencies: uc.micro: 2.1.0 @@ -8950,8 +9348,8 @@ snapshots: listr2: 9.0.5 picomatch: 4.0.4 string-argv: 0.3.2 - tinyexec: 1.0.4 - yaml: 2.8.3 + tinyexec: 1.2.2 + yaml: 2.9.0 listr2@8.3.3: dependencies: @@ -8971,7 +9369,7 @@ snapshots: rfdc: 1.4.1 wrap-ansi: 9.0.2 - loader-runner@4.3.1: {} + loader-runner@4.3.2: {} loader-utils@2.0.4: dependencies: @@ -9041,7 +9439,7 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.3.0: {} + lru-cache@11.5.0: {} lru-cache@5.1.1: dependencies: @@ -9058,22 +9456,22 @@ snapshots: mlly: 1.8.2 regexp-tree: 0.1.27 type-level-regexp: 0.1.17 - ufo: 1.6.3 + ufo: 1.6.4 unplugin: 2.3.11 magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - magicast@0.5.2: + magicast@0.5.3: dependencies: - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 source-map-js: 1.2.1 make-dir@4.0.0: dependencies: - semver: 7.7.4 + semver: 7.8.1 make-fetch-happen@15.0.5: dependencies: @@ -9092,11 +9490,11 @@ snapshots: transitivePeerDependencies: - supports-color - markdown-it@14.1.1: + markdown-it@14.2.0: dependencies: argparse: 2.0.1 entities: 4.5.0 - linkify-it: 5.0.0 + linkify-it: 5.0.1 mdurl: 2.0.0 punycode.js: 2.3.1 uc.micro: 2.1.0 @@ -9206,6 +9604,18 @@ snapshots: '@types/mdast': 4.0.4 unist-util-is: 6.0.1 + mdast-util-to-hast@13.2.1: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.1 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + mdast-util-to-markdown@2.1.2: dependencies: '@types/mdast': 4.0.4 @@ -9224,6 +9634,8 @@ snapshots: mdn-data@2.0.28: {} + mdn-data@2.0.30: {} + mdn-data@2.27.1: {} mdurl@1.0.1: {} @@ -9441,6 +9853,8 @@ snapshots: mime-db@1.52.0: {} + mime-db@1.54.0: {} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 @@ -9451,11 +9865,11 @@ snapshots: mimic-function@5.0.1: {} - mini-css-extract-plugin@2.10.2(webpack@5.105.4): + mini-css-extract-plugin@2.10.2(webpack@5.107.2(esbuild@0.27.7)(lightningcss@1.32.0)(postcss@8.5.15)): dependencies: schema-utils: 4.3.3 - tapable: 2.3.2 - webpack: 5.105.4 + tapable: 2.3.3 + webpack: 5.107.2(esbuild@0.27.7)(lightningcss@1.32.0)(postcss@8.5.15) minimatch@10.2.5: dependencies: @@ -9463,15 +9877,15 @@ snapshots: minimatch@3.1.5: dependencies: - brace-expansion: 1.1.13 + brace-expansion: 1.1.15 minimatch@7.4.9: dependencies: - brace-expansion: 2.0.3 + brace-expansion: 2.1.1 minimatch@9.0.9: dependencies: - brace-expansion: 2.0.3 + brace-expansion: 2.1.1 minimist@1.2.8: {} @@ -9522,9 +9936,9 @@ snapshots: acorn: 8.16.0 pathe: 2.0.3 pkg-types: 1.3.1 - ufo: 1.6.3 + ufo: 1.6.4 - mocha@11.7.5: + mocha@11.7.6: dependencies: browser-stdout: 1.3.1 chokidar: 4.0.3 @@ -9566,7 +9980,7 @@ snapshots: mute-stream@2.0.0: {} - nanoid@3.3.11: {} + nanoid@3.3.12: {} natural-compare@1.4.0: {} @@ -9576,7 +9990,7 @@ snapshots: neo-async@2.6.2: {} - netmask@2.0.2: {} + netmask@2.1.1: {} nise@4.1.0: dependencies: @@ -9586,31 +10000,29 @@ snapshots: just-extend: 4.2.1 path-to-regexp: 1.9.0 - node-gyp@12.2.0: + node-gyp@12.3.0: dependencies: env-paths: 2.2.1 exponential-backoff: 3.1.3 graceful-fs: 4.2.11 - make-fetch-happen: 15.0.5 nopt: 9.0.0 proc-log: 6.1.0 - semver: 7.7.4 - tar: 7.5.13 - tinyglobby: 0.2.15 + semver: 7.8.1 + tar: 7.5.15 + tinyglobby: 0.2.16 + undici: 6.26.0 which: 6.0.1 - transitivePeerDependencies: - - supports-color node-notifier@10.0.1: dependencies: growly: 1.3.0 is-wsl: 2.2.0 - semver: 7.7.4 + semver: 7.8.1 shellwords: 0.1.1 uuid: 14.0.0 which: 2.0.2 - node-releases@2.0.37: {} + node-releases@2.0.46: {} nopt@7.2.1: dependencies: @@ -9628,15 +10040,15 @@ snapshots: npm-install-checks@8.0.0: dependencies: - semver: 7.7.4 + semver: 7.8.1 npm-normalize-package-bin@5.0.0: {} npm-package-arg@13.0.2: dependencies: - hosted-git-info: 9.0.2 + hosted-git-info: 9.0.3 proc-log: 6.1.0 - semver: 7.7.4 + semver: 7.8.1 validate-npm-package-name: 7.0.2 npm-packlist@10.0.4: @@ -9649,7 +10061,7 @@ snapshots: npm-install-checks: 8.0.0 npm-normalize-package-bin: 5.0.0 npm-package-arg: 13.0.2 - semver: 7.7.4 + semver: 7.8.1 npm-registry-fetch@19.1.1: dependencies: @@ -9805,7 +10217,7 @@ snapshots: pac-resolver@7.0.1: dependencies: degenerator: 5.0.1 - netmask: 2.0.2 + netmask: 2.1.1 package-json-from-dist@1.0.1: {} @@ -9825,9 +10237,9 @@ snapshots: npm-pick-manifest: 11.0.3 npm-registry-fetch: 19.1.1 proc-log: 6.1.0 - sigstore: 4.1.0 + sigstore: 4.1.1 ssri: 13.0.1 - tar: 7.5.13 + tar: 7.5.15 transitivePeerDependencies: - supports-color @@ -9837,7 +10249,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.29.0 + '@babel/code-frame': 7.29.7 error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -9846,6 +10258,10 @@ snapshots: parse5@1.0.0: {} + parse5@8.0.1: + dependencies: + entities: 8.0.0 + parseurl@1.3.3: {} path-exists@4.0.0: {} @@ -9863,7 +10279,7 @@ snapshots: path-scurry@2.0.2: dependencies: - lru-cache: 11.3.0 + lru-cache: 11.5.0 minipass: 7.1.3 path-to-regexp@1.9.0: @@ -9900,163 +10316,165 @@ snapshots: pofile@1.1.4: {} - postcss-calc@10.1.1(postcss@8.5.10): + postcss-calc@10.1.1(postcss@8.5.15): dependencies: - postcss: 8.5.10 + postcss: 8.5.15 postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - postcss-colormin@7.0.7(postcss@8.5.10): + postcss-colormin@7.0.10(postcss@8.5.15): dependencies: - '@colordx/core': 5.0.3 + '@colordx/core': 5.4.3 browserslist: 4.28.2 caniuse-api: 3.0.0 - postcss: 8.5.10 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-convert-values@7.0.9(postcss@8.5.10): + postcss-convert-values@7.0.12(postcss@8.5.15): dependencies: browserslist: 4.28.2 - postcss: 8.5.10 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-discard-comments@7.0.6(postcss@8.5.10): + postcss-discard-comments@7.0.8(postcss@8.5.15): dependencies: - postcss: 8.5.10 + postcss: 8.5.15 postcss-selector-parser: 7.1.1 - postcss-discard-duplicates@7.0.2(postcss@8.5.10): + postcss-discard-duplicates@7.0.4(postcss@8.5.15): dependencies: - postcss: 8.5.10 + postcss: 8.5.15 - postcss-discard-empty@7.0.1(postcss@8.5.10): + postcss-discard-empty@7.0.3(postcss@8.5.15): dependencies: - postcss: 8.5.10 + postcss: 8.5.15 - postcss-discard-overridden@7.0.1(postcss@8.5.10): + postcss-discard-overridden@7.0.3(postcss@8.5.15): dependencies: - postcss: 8.5.10 + postcss: 8.5.15 - postcss-merge-longhand@7.0.5(postcss@8.5.10): + postcss-merge-longhand@7.0.7(postcss@8.5.15): dependencies: - postcss: 8.5.10 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - stylehacks: 7.0.8(postcss@8.5.10) + stylehacks: 7.0.11(postcss@8.5.15) - postcss-merge-rules@7.0.8(postcss@8.5.10): + postcss-merge-rules@7.0.11(postcss@8.5.15): dependencies: browserslist: 4.28.2 caniuse-api: 3.0.0 - cssnano-utils: 5.0.1(postcss@8.5.10) - postcss: 8.5.10 + cssnano-utils: 5.0.3(postcss@8.5.15) + postcss: 8.5.15 postcss-selector-parser: 7.1.1 - postcss-minify-font-values@7.0.1(postcss@8.5.10): + postcss-minify-font-values@7.0.3(postcss@8.5.15): dependencies: - postcss: 8.5.10 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-minify-gradients@7.0.2(postcss@8.5.10): + postcss-minify-gradients@7.0.5(postcss@8.5.15): dependencies: - '@colordx/core': 5.0.3 - cssnano-utils: 5.0.1(postcss@8.5.10) - postcss: 8.5.10 + '@colordx/core': 5.4.3 + cssnano-utils: 5.0.3(postcss@8.5.15) + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-minify-params@7.0.6(postcss@8.5.10): + postcss-minify-params@7.0.9(postcss@8.5.15): dependencies: browserslist: 4.28.2 - cssnano-utils: 5.0.1(postcss@8.5.10) - postcss: 8.5.10 + cssnano-utils: 5.0.3(postcss@8.5.15) + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-minify-selectors@7.0.6(postcss@8.5.10): + postcss-minify-selectors@7.1.2(postcss@8.5.15): dependencies: + browserslist: 4.28.2 + caniuse-api: 3.0.0 cssesc: 3.0.0 - postcss: 8.5.10 + postcss: 8.5.15 postcss-selector-parser: 7.1.1 - postcss-modules-extract-imports@3.1.0(postcss@8.5.10): + postcss-modules-extract-imports@3.1.0(postcss@8.5.15): dependencies: - postcss: 8.5.10 + postcss: 8.5.15 - postcss-modules-local-by-default@4.2.0(postcss@8.5.10): + postcss-modules-local-by-default@4.2.0(postcss@8.5.15): dependencies: - icss-utils: 5.1.0(postcss@8.5.10) - postcss: 8.5.10 + icss-utils: 5.1.0(postcss@8.5.15) + postcss: 8.5.15 postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.1(postcss@8.5.10): + postcss-modules-scope@3.2.1(postcss@8.5.15): dependencies: - postcss: 8.5.10 + postcss: 8.5.15 postcss-selector-parser: 7.1.1 - postcss-modules-values@4.0.0(postcss@8.5.10): + postcss-modules-values@4.0.0(postcss@8.5.15): dependencies: - icss-utils: 5.1.0(postcss@8.5.10) - postcss: 8.5.10 + icss-utils: 5.1.0(postcss@8.5.15) + postcss: 8.5.15 - postcss-normalize-charset@7.0.1(postcss@8.5.10): + postcss-normalize-charset@7.0.3(postcss@8.5.15): dependencies: - postcss: 8.5.10 + postcss: 8.5.15 - postcss-normalize-display-values@7.0.1(postcss@8.5.10): + postcss-normalize-display-values@7.0.3(postcss@8.5.15): dependencies: - postcss: 8.5.10 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-normalize-positions@7.0.1(postcss@8.5.10): + postcss-normalize-positions@7.0.4(postcss@8.5.15): dependencies: - postcss: 8.5.10 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-normalize-repeat-style@7.0.1(postcss@8.5.10): + postcss-normalize-repeat-style@7.0.4(postcss@8.5.15): dependencies: - postcss: 8.5.10 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-normalize-string@7.0.1(postcss@8.5.10): + postcss-normalize-string@7.0.3(postcss@8.5.15): dependencies: - postcss: 8.5.10 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-normalize-timing-functions@7.0.1(postcss@8.5.10): + postcss-normalize-timing-functions@7.0.3(postcss@8.5.15): dependencies: - postcss: 8.5.10 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-normalize-unicode@7.0.6(postcss@8.5.10): + postcss-normalize-unicode@7.0.9(postcss@8.5.15): dependencies: browserslist: 4.28.2 - postcss: 8.5.10 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-normalize-url@7.0.1(postcss@8.5.10): + postcss-normalize-url@7.0.3(postcss@8.5.15): dependencies: - postcss: 8.5.10 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-normalize-whitespace@7.0.1(postcss@8.5.10): + postcss-normalize-whitespace@7.0.3(postcss@8.5.15): dependencies: - postcss: 8.5.10 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-ordered-values@7.0.2(postcss@8.5.10): + postcss-ordered-values@7.0.4(postcss@8.5.15): dependencies: - cssnano-utils: 5.0.1(postcss@8.5.10) - postcss: 8.5.10 + cssnano-utils: 5.0.3(postcss@8.5.15) + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-reduce-initial@7.0.6(postcss@8.5.10): + postcss-reduce-initial@7.0.9(postcss@8.5.15): dependencies: browserslist: 4.28.2 caniuse-api: 3.0.0 - postcss: 8.5.10 + postcss: 8.5.15 - postcss-reduce-transforms@7.0.1(postcss@8.5.10): + postcss-reduce-transforms@7.0.3(postcss@8.5.15): dependencies: - postcss: 8.5.10 + postcss: 8.5.15 postcss-value-parser: 4.2.0 postcss-selector-parser@7.1.1: @@ -10064,22 +10482,22 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-svgo@7.1.1(postcss@8.5.10): + postcss-svgo@7.1.3(postcss@8.5.15): dependencies: - postcss: 8.5.10 + postcss: 8.5.15 postcss-value-parser: 4.2.0 svgo: 4.0.1 - postcss-unique-selectors@7.0.5(postcss@8.5.10): + postcss-unique-selectors@7.0.7(postcss@8.5.15): dependencies: - postcss: 8.5.10 + postcss: 8.5.15 postcss-selector-parser: 7.1.1 postcss-value-parser@4.2.0: {} - postcss@8.5.10: + postcss@8.5.15: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.12 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -10099,6 +10517,8 @@ snapshots: progress@2.0.3: {} + property-information@7.1.0: {} + proto-list@1.2.4: {} proxy-agent@6.5.0: @@ -10127,22 +10547,22 @@ snapshots: punycode@2.3.1: {} - puppeteer-cluster@0.24.0(puppeteer@24.40.0(typescript@5.5.4)): + puppeteer-cluster@0.24.0(puppeteer@24.43.1(typescript@5.5.4)): dependencies: debug: 4.4.3(supports-color@8.1.1) - puppeteer: 24.40.0(typescript@5.5.4) + puppeteer: 24.43.1(typescript@5.5.4) transitivePeerDependencies: - supports-color - puppeteer-core@24.40.0: + puppeteer-core@24.43.1: dependencies: - '@puppeteer/browsers': 2.13.0 - chromium-bidi: 14.0.0(devtools-protocol@0.0.1581282) + '@puppeteer/browsers': 2.13.2 + chromium-bidi: 14.0.0(devtools-protocol@0.0.1608973) debug: 4.4.3(supports-color@8.1.1) - devtools-protocol: 0.0.1581282 - typed-query-selector: 2.12.1 + devtools-protocol: 0.0.1608973 + typed-query-selector: 2.12.2 webdriver-bidi-protocol: 0.4.1 - ws: 8.20.1 + ws: 8.21.0 transitivePeerDependencies: - bare-abort-controller - bare-buffer @@ -10151,14 +10571,14 @@ snapshots: - supports-color - utf-8-validate - puppeteer@24.40.0(typescript@5.5.4): + puppeteer@24.43.1(typescript@5.5.4): dependencies: - '@puppeteer/browsers': 2.13.0 - chromium-bidi: 14.0.0(devtools-protocol@0.0.1581282) + '@puppeteer/browsers': 2.13.2 + chromium-bidi: 14.0.0(devtools-protocol@0.0.1608973) cosmiconfig: 9.0.1(typescript@5.5.4) - devtools-protocol: 0.0.1581282 - puppeteer-core: 24.40.0 - typed-query-selector: 2.12.1 + devtools-protocol: 0.0.1608973 + puppeteer-core: 24.43.1 + typed-query-selector: 2.12.2 transitivePeerDependencies: - bare-abort-controller - bare-buffer @@ -10172,7 +10592,7 @@ snapshots: dependencies: commander: 12.1.0 fast-glob: 3.3.3 - postcss: 8.5.10 + postcss: 8.5.15 postcss-selector-parser: 7.1.1 qjobs@1.2.0: {} @@ -10192,11 +10612,11 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 - raw-loader@4.0.2(webpack@5.105.4): + raw-loader@4.0.2(webpack@5.107.2(esbuild@0.27.7)(lightningcss@1.32.0)(postcss@8.5.15)): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.105.4 + webpack: 5.107.2(esbuild@0.27.7)(lightningcss@1.32.0)(postcss@8.5.15) react-is@18.3.1: {} @@ -10214,6 +10634,40 @@ snapshots: regexp-tree@0.1.27: {} + remark-gfm@4.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3 + micromark-util-types: 2.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-rehype@11.1.2: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.1 + unified: 11.0.5 + vfile: 6.0.3 + + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -10235,9 +10689,10 @@ snapshots: resolve.exports@2.0.3: {} - resolve@1.22.11: + resolve@1.22.12: dependencies: - is-core-module: 2.16.1 + es-errors: 1.3.0 + is-core-module: 2.16.2 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -10268,10 +10723,31 @@ snapshots: semver-compare: 1.0.0 sprintf-js: 1.1.3 + rolldown@1.0.2: + dependencies: + '@oxc-project/types': 0.132.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.2 + '@rolldown/binding-darwin-arm64': 1.0.2 + '@rolldown/binding-darwin-x64': 1.0.2 + '@rolldown/binding-freebsd-x64': 1.0.2 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.2 + '@rolldown/binding-linux-arm64-gnu': 1.0.2 + '@rolldown/binding-linux-arm64-musl': 1.0.2 + '@rolldown/binding-linux-ppc64-gnu': 1.0.2 + '@rolldown/binding-linux-s390x-gnu': 1.0.2 + '@rolldown/binding-linux-x64-gnu': 1.0.2 + '@rolldown/binding-linux-x64-musl': 1.0.2 + '@rolldown/binding-openharmony-arm64': 1.0.2 + '@rolldown/binding-wasm32-wasi': 1.0.2 + '@rolldown/binding-win32-arm64-msvc': 1.0.2 + '@rolldown/binding-win32-x64-msvc': 1.0.2 + rolldown@1.0.3: dependencies: '@oxc-project/types': 0.133.0 - '@rolldown/pluginutils': 1.0.0 + '@rolldown/pluginutils': 1.0.1 optionalDependencies: '@rolldown/binding-android-arm64': 1.0.3 '@rolldown/binding-darwin-arm64': 1.0.3 @@ -10289,36 +10765,37 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.0.3 '@rolldown/binding-win32-x64-msvc': 1.0.3 - rollup@4.60.1: + rollup@4.60.4: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.60.1 - '@rollup/rollup-android-arm64': 4.60.1 - '@rollup/rollup-darwin-arm64': 4.60.1 - '@rollup/rollup-darwin-x64': 4.60.1 - '@rollup/rollup-freebsd-arm64': 4.60.1 - '@rollup/rollup-freebsd-x64': 4.60.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.60.1 - '@rollup/rollup-linux-arm-musleabihf': 4.60.1 - '@rollup/rollup-linux-arm64-gnu': 4.60.1 - '@rollup/rollup-linux-arm64-musl': 4.60.1 - '@rollup/rollup-linux-loong64-gnu': 4.60.1 - '@rollup/rollup-linux-loong64-musl': 4.60.1 - '@rollup/rollup-linux-ppc64-gnu': 4.60.1 - '@rollup/rollup-linux-ppc64-musl': 4.60.1 - '@rollup/rollup-linux-riscv64-gnu': 4.60.1 - '@rollup/rollup-linux-riscv64-musl': 4.60.1 - '@rollup/rollup-linux-s390x-gnu': 4.60.1 - '@rollup/rollup-linux-x64-gnu': 4.60.1 - '@rollup/rollup-linux-x64-musl': 4.60.1 - '@rollup/rollup-openbsd-x64': 4.60.1 - '@rollup/rollup-openharmony-arm64': 4.60.1 - '@rollup/rollup-win32-arm64-msvc': 4.60.1 - '@rollup/rollup-win32-ia32-msvc': 4.60.1 - '@rollup/rollup-win32-x64-gnu': 4.60.1 - '@rollup/rollup-win32-x64-msvc': 4.60.1 + '@rollup/rollup-android-arm-eabi': 4.60.4 + '@rollup/rollup-android-arm64': 4.60.4 + '@rollup/rollup-darwin-arm64': 4.60.4 + '@rollup/rollup-darwin-x64': 4.60.4 + '@rollup/rollup-freebsd-arm64': 4.60.4 + '@rollup/rollup-freebsd-x64': 4.60.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.60.4 + '@rollup/rollup-linux-arm-musleabihf': 4.60.4 + '@rollup/rollup-linux-arm64-gnu': 4.60.4 + '@rollup/rollup-linux-arm64-musl': 4.60.4 + '@rollup/rollup-linux-loong64-gnu': 4.60.4 + '@rollup/rollup-linux-loong64-musl': 4.60.4 + '@rollup/rollup-linux-ppc64-gnu': 4.60.4 + '@rollup/rollup-linux-ppc64-musl': 4.60.4 + '@rollup/rollup-linux-riscv64-gnu': 4.60.4 + '@rollup/rollup-linux-riscv64-musl': 4.60.4 + '@rollup/rollup-linux-s390x-gnu': 4.60.4 + '@rollup/rollup-linux-x64-gnu': 4.60.4 + '@rollup/rollup-linux-x64-musl': 4.60.4 + '@rollup/rollup-openbsd-x64': 4.60.4 + '@rollup/rollup-openharmony-arm64': 4.60.4 + '@rollup/rollup-win32-arm64-msvc': 4.60.4 + '@rollup/rollup-win32-ia32-msvc': 4.60.4 + '@rollup/rollup-win32-x64-gnu': 4.60.4 + '@rollup/rollup-win32-x64-msvc': 4.60.4 fsevents: 2.3.3 + optional: true run-async@4.0.6: {} @@ -10345,15 +10822,15 @@ snapshots: schema-utils@3.3.0: dependencies: '@types/json-schema': 7.0.15 - ajv: 6.14.0 - ajv-keywords: 3.5.2(ajv@6.14.0) + ajv: 6.15.0 + ajv-keywords: 3.5.2(ajv@6.15.0) schema-utils@4.3.3: dependencies: '@types/json-schema': 7.0.15 - ajv: 8.18.0 - ajv-formats: 2.1.1(ajv@8.18.0) - ajv-keywords: 5.1.0(ajv@8.18.0) + ajv: 8.20.0 + ajv-formats: 2.1.1(ajv@8.20.0) + ajv-keywords: 5.1.0(ajv@8.20.0) section-matter@1.0.0: dependencies: @@ -10364,7 +10841,7 @@ snapshots: semver@6.3.1: {} - semver@7.7.4: {} + semver@7.8.1: {} serialize-error@7.0.1: dependencies: @@ -10389,7 +10866,7 @@ snapshots: shellwords@0.1.1: {} - side-channel-list@1.0.0: + side-channel-list@1.0.1: dependencies: es-errors: 1.3.0 object-inspect: 1.13.4 @@ -10413,7 +10890,7 @@ snapshots: dependencies: es-errors: 1.3.0 object-inspect: 1.13.4 - side-channel-list: 1.0.0 + side-channel-list: 1.0.1 side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 @@ -10423,14 +10900,14 @@ snapshots: signal-exit@4.1.0: {} - sigstore@4.1.0: + sigstore@4.1.1: dependencies: '@sigstore/bundle': 4.0.0 - '@sigstore/core': 3.2.0 - '@sigstore/protobuf-specs': 0.5.0 + '@sigstore/core': 3.2.1 + '@sigstore/protobuf-specs': 0.5.1 '@sigstore/sign': 4.1.1 '@sigstore/tuf': 4.0.2 - '@sigstore/verify': 3.1.0 + '@sigstore/verify': 3.1.1 transitivePeerDependencies: - supports-color @@ -10479,15 +10956,15 @@ snapshots: smart-buffer@4.2.0: {} - snyk@1.1303.2: + snyk@1.1305.0: dependencies: '@sentry/node': 7.120.4 global-agent: 3.0.0 - socket.io-adapter@2.5.6: + socket.io-adapter@2.5.7: dependencies: debug: 4.4.3(supports-color@8.1.1) - ws: 8.20.1 + ws: 8.21.0 transitivePeerDependencies: - bufferutil - supports-color @@ -10506,8 +10983,8 @@ snapshots: base64id: 2.0.0 cors: 2.8.6 debug: 4.4.3(supports-color@8.1.1) - engine.io: 6.6.6 - socket.io-adapter: 2.5.6 + engine.io: 6.6.8 + socket.io-adapter: 2.5.7 socket.io-parser: 4.2.6 transitivePeerDependencies: - bufferutil @@ -10518,11 +10995,11 @@ snapshots: dependencies: agent-base: 7.1.4 debug: 4.4.3(supports-color@8.1.1) - socks: 2.8.7 + socks: 2.8.9 transitivePeerDependencies: - supports-color - socks@2.8.7: + socks@2.8.9: dependencies: ip-address: 10.2.0 smart-buffer: 4.2.0 @@ -10538,6 +11015,8 @@ snapshots: source-map@0.7.6: {} + space-separated-tokens@2.0.2: {} + spdx-exceptions@2.5.0: {} spdx-expression-parse@4.0.0: @@ -10561,7 +11040,7 @@ snapshots: statuses@2.0.2: {} - std-env@4.0.0: {} + std-env@4.1.0: {} stdin-discarder@0.2.2: {} @@ -10599,18 +11078,23 @@ snapshots: string-width@7.2.0: dependencies: emoji-regex: 10.6.0 - get-east-asian-width: 1.5.0 + get-east-asian-width: 1.6.0 strip-ansi: 7.2.0 - string-width@8.2.0: + string-width@8.2.1: dependencies: - get-east-asian-width: 1.5.0 + get-east-asian-width: 1.6.0 strip-ansi: 7.2.0 string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + strip-ansi@4.0.0: dependencies: ansi-regex: 3.0.1 @@ -10629,14 +11113,14 @@ snapshots: strip-json-comments@3.1.1: {} - style-loader@4.0.0(webpack@5.105.4): + style-loader@4.0.0(webpack@5.107.2(esbuild@0.27.7)(lightningcss@1.32.0)(postcss@8.5.15)): dependencies: - webpack: 5.105.4 + webpack: 5.107.2(esbuild@0.27.7)(lightningcss@1.32.0)(postcss@8.5.15) - stylehacks@7.0.8(postcss@8.5.10): + stylehacks@7.0.11(postcss@8.5.15): dependencies: browserslist: 4.28.2 - postcss: 8.5.10 + postcss: 8.5.15 postcss-selector-parser: 7.1.1 supports-color@5.5.0: @@ -10653,6 +11137,16 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + svgo@3.3.3: + dependencies: + commander: 7.2.0 + css-select: 5.2.2 + css-tree: 2.3.1 + css-what: 6.2.2 + csso: 5.0.5 + picocolors: 1.1.1 + sax: 1.6.0 + svgo@4.0.1: dependencies: commander: 11.1.0 @@ -10663,24 +11157,24 @@ snapshots: picocolors: 1.1.1 sax: 1.6.0 - tapable@2.3.2: {} + tapable@2.3.3: {} tar-fs@3.1.2: dependencies: pump: 3.0.4 - tar-stream: 3.1.8 + tar-stream: 3.2.0 optionalDependencies: - bare-fs: 4.6.0 + bare-fs: 4.7.1 bare-path: 3.0.0 transitivePeerDependencies: - bare-abort-controller - bare-buffer - react-native-b4a - tar-stream@3.1.8: + tar-stream@3.2.0: dependencies: - b4a: 1.8.0 - bare-fs: 4.6.0 + b4a: 1.8.1 + bare-fs: 4.7.1 fast-fifo: 1.3.2 streamx: 2.25.0 transitivePeerDependencies: @@ -10688,7 +11182,7 @@ snapshots: - bare-buffer - react-native-b4a - tar@7.5.13: + tar@7.5.15: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 @@ -10703,15 +11197,29 @@ snapshots: - bare-abort-controller - react-native-b4a - terser-webpack-plugin@5.4.0(webpack@5.105.4): + terser-webpack-plugin@5.6.0(esbuild@0.27.7)(lightningcss@1.32.0)(postcss@8.5.15)(webpack@5.107.2(esbuild@0.27.7)(lightningcss@1.32.0)(postcss@8.5.15)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 - terser: 5.46.1 - webpack: 5.105.4 + terser: 5.48.0 + webpack: 5.107.2(esbuild@0.27.7)(lightningcss@1.32.0)(postcss@8.5.15) + optionalDependencies: + esbuild: 0.27.7 + lightningcss: 1.32.0 + postcss: 8.5.15 - terser@5.46.1: + terser-webpack-plugin@5.6.0(esbuild@0.27.7)(webpack@5.107.2(esbuild@0.27.7)): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + jest-worker: 27.5.1 + schema-utils: 4.3.3 + terser: 5.48.0 + webpack: 5.107.2(esbuild@0.27.7) + optionalDependencies: + esbuild: 0.27.7 + + terser@5.48.0: dependencies: '@jridgewell/source-map': 0.3.11 acorn: 8.16.0 @@ -10720,13 +11228,13 @@ snapshots: test-exclude@6.0.0: dependencies: - '@istanbuljs/schema': 0.1.3 + '@istanbuljs/schema': 0.1.6 glob: 7.2.3 minimatch: 3.1.5 text-decoder@1.2.7: dependencies: - b4a: 1.8.0 + b4a: 1.8.1 transitivePeerDependencies: - react-native-b4a @@ -10736,9 +11244,9 @@ snapshots: tinybench@2.9.0: {} - tinyexec@1.0.4: {} + tinyexec@1.2.2: {} - tinyglobby@0.2.15: + tinyglobby@0.2.16: dependencies: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 @@ -10753,6 +11261,10 @@ snapshots: toidentifier@1.0.1: {} + trim-lines@3.0.1: {} + + trough@2.2.0: {} + ts-api-utils@2.5.0(typescript@5.5.4): dependencies: typescript: 5.5.4 @@ -10786,29 +11298,29 @@ snapshots: type-level-regexp@0.1.17: {} - typed-query-selector@2.12.1: {} + typed-query-selector@2.12.2: {} - typedoc-plugin-rename-defaults@0.7.3(typedoc@0.28.18(typescript@5.5.4)): + typedoc-plugin-rename-defaults@0.7.3(typedoc@0.28.19(typescript@5.5.4)): dependencies: camelcase: 8.0.0 - typedoc: 0.28.18(typescript@5.5.4) + typedoc: 0.28.19(typescript@5.5.4) - typedoc@0.28.18(typescript@5.5.4): + typedoc@0.28.19(typescript@5.5.4): dependencies: '@gerrit0/mini-shiki': 3.23.0 lunr: 2.3.9 - markdown-it: 14.1.1 + markdown-it: 14.2.0 minimatch: 10.2.5 typescript: 5.5.4 - yaml: 2.8.3 + yaml: 2.9.0 - typescript-eslint@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.5.4): + typescript-eslint@8.60.0(eslint@9.39.4)(typescript@5.5.4): dependencies: - '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.4(jiti@2.6.1))(typescript@5.5.4) - '@typescript-eslint/parser': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.5.4) - '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.5.4) - '@typescript-eslint/utils': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.5.4) - eslint: 9.39.4(jiti@2.6.1) + '@typescript-eslint/eslint-plugin': 8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4)(typescript@5.5.4))(eslint@9.39.4)(typescript@5.5.4) + '@typescript-eslint/parser': 8.60.0(eslint@9.39.4)(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 8.60.0(typescript@5.5.4) + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4)(typescript@5.5.4) + eslint: 9.39.4 typescript: 5.5.4 transitivePeerDependencies: - supports-color @@ -10819,19 +11331,32 @@ snapshots: uc.micro@2.1.0: {} - ufo@1.6.3: {} + ufo@1.6.4: {} undici-types@6.21.0: {} - undici-types@7.18.2: - optional: true + undici@6.26.0: {} unicorn-magic@0.3.0: {} + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + unist-util-is@6.0.1: dependencies: '@types/unist': 3.0.3 + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position@4.0.0: dependencies: '@types/unist': 3.0.3 @@ -10886,93 +11411,77 @@ snapshots: vary@1.1.2: {} - vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3): + vfile-message@4.0.3: dependencies: - esbuild: 0.27.7 - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 - postcss: 8.5.10 - rollup: 4.60.1 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 22.19.17 - fsevents: 2.3.3 - jiti: 2.6.1 - lightningcss: 1.32.0 - terser: 5.46.1 - yaml: 2.8.3 + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 - vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3): + vfile@6.0.3: dependencies: - esbuild: 0.27.7 - fdir: 6.5.0(picomatch@4.0.4) + '@types/unist': 3.0.3 + vfile-message: 4.0.3 + + vite-svg-loader@5.1.1(vue@3.5.34(typescript@5.5.4)): + dependencies: + debug: 4.4.3(supports-color@8.1.1) + svgo: 3.3.3 + vue: 3.5.34(typescript@5.5.4) + transitivePeerDependencies: + - supports-color + + vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(terser@5.48.0)(yaml@2.9.0): + dependencies: + lightningcss: 1.32.0 picomatch: 4.0.4 - postcss: 8.5.10 - rollup: 4.60.1 - tinyglobby: 0.2.15 + postcss: 8.5.15 + rolldown: 1.0.2 + tinyglobby: 0.2.16 optionalDependencies: - '@types/node': 25.5.2 + '@types/node': 22.19.19 + esbuild: 0.27.7 fsevents: 2.3.3 - jiti: 2.6.1 - lightningcss: 1.32.0 - terser: 5.46.1 - yaml: 2.8.3 - - vitest@4.1.2(@types/node@22.19.17)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)): - dependencies: - '@vitest/expect': 4.1.2 - '@vitest/mocker': 4.1.2(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) - '@vitest/pretty-format': 4.1.2 - '@vitest/runner': 4.1.2 - '@vitest/snapshot': 4.1.2 - '@vitest/spy': 4.1.2 - '@vitest/utils': 4.1.2 - es-module-lexer: 2.0.0 + terser: 5.48.0 + yaml: 2.9.0 + + vitest@4.1.7(@types/node@22.19.19)(@vitest/coverage-v8@4.1.7)(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(terser@5.48.0)(yaml@2.9.0)): + dependencies: + '@vitest/expect': 4.1.7 + '@vitest/mocker': 4.1.7(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(terser@5.48.0)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.7 + '@vitest/runner': 4.1.7 + '@vitest/snapshot': 4.1.7 + '@vitest/spy': 4.1.7 + '@vitest/utils': 4.1.7 + es-module-lexer: 2.1.0 expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.1 pathe: 2.0.3 picomatch: 4.0.4 - std-env: 4.0.0 + std-env: 4.1.0 tinybench: 2.9.0 - tinyexec: 1.0.4 - tinyglobby: 0.2.15 + tinyexec: 1.2.2 + tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3) + vite: 8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(terser@5.48.0)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 + '@vitest/coverage-v8': 4.1.7(vitest@4.1.7) transitivePeerDependencies: - msw - vitest@4.1.2(@types/node@25.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)): + void-elements@2.0.1: {} + + vue@3.5.34(typescript@5.5.4): dependencies: - '@vitest/expect': 4.1.2 - '@vitest/mocker': 4.1.2(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) - '@vitest/pretty-format': 4.1.2 - '@vitest/runner': 4.1.2 - '@vitest/snapshot': 4.1.2 - '@vitest/spy': 4.1.2 - '@vitest/utils': 4.1.2 - es-module-lexer: 2.0.0 - expect-type: 1.3.0 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 - picomatch: 4.0.4 - std-env: 4.0.0 - tinybench: 2.9.0 - tinyexec: 1.0.4 - tinyglobby: 0.2.15 - tinyrainbow: 3.1.0 - vite: 7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3) - why-is-node-running: 2.3.0 + '@vue/compiler-dom': 3.5.34 + '@vue/compiler-sfc': 3.5.34 + '@vue/runtime-dom': 3.5.34 + '@vue/server-renderer': 3.5.34(vue@3.5.34(typescript@5.5.4)) + '@vue/shared': 3.5.34 optionalDependencies: - '@types/node': 25.5.2 - transitivePeerDependencies: - - msw - - void-elements@2.0.1: {} + typescript: 5.5.4 watchpack@2.5.1: dependencies: @@ -10985,14 +11494,13 @@ snapshots: dependencies: lodash: 4.18.1 - webpack-sources@3.3.4: {} + webpack-sources@3.5.0: {} webpack-virtual-modules@0.6.2: {} - webpack@5.105.4: + webpack@5.107.2(esbuild@0.27.7): dependencies: - '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/json-schema': 7.0.15 '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 @@ -11001,24 +11509,71 @@ snapshots: acorn-import-phases: 1.0.4(acorn@8.16.0) browserslist: 4.28.2 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.20.1 - es-module-lexer: 2.0.0 + enhanced-resolve: 5.22.0 + es-module-lexer: 2.1.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.1 - mime-types: 2.1.35 + loader-runner: 4.3.2 + mime-db: 1.54.0 + neo-async: 2.6.2 + schema-utils: 4.3.3 + tapable: 2.3.3 + terser-webpack-plugin: 5.6.0(esbuild@0.27.7)(webpack@5.107.2(esbuild@0.27.7)) + watchpack: 2.5.1 + webpack-sources: 3.5.0 + transitivePeerDependencies: + - '@minify-html/node' + - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso + - esbuild + - html-minifier-terser + - lightningcss + - postcss + - uglify-js + + webpack@5.107.2(esbuild@0.27.7)(lightningcss@1.32.0)(postcss@8.5.15): + dependencies: + '@types/estree': 1.0.9 + '@types/json-schema': 7.0.15 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.16.0 + acorn-import-phases: 1.0.4(acorn@8.16.0) + browserslist: 4.28.2 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.22.0 + es-module-lexer: 2.1.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + loader-runner: 4.3.2 + mime-db: 1.54.0 neo-async: 2.6.2 schema-utils: 4.3.3 - tapable: 2.3.2 - terser-webpack-plugin: 5.4.0(webpack@5.105.4) + tapable: 2.3.3 + terser-webpack-plugin: 5.6.0(esbuild@0.27.7)(lightningcss@1.32.0)(postcss@8.5.15)(webpack@5.107.2(esbuild@0.27.7)(lightningcss@1.32.0)(postcss@8.5.15)) watchpack: 2.5.1 - webpack-sources: 3.3.4 + webpack-sources: 3.5.0 transitivePeerDependencies: + - '@minify-html/node' - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso - esbuild + - html-minifier-terser + - lightningcss + - postcss - uglify-js which@1.3.1: @@ -11072,7 +11627,7 @@ snapshots: wrappy@1.0.2: {} - ws@8.20.1: {} + ws@8.21.0: {} y18n@5.0.8: {} @@ -11084,7 +11639,7 @@ snapshots: yaml@1.10.3: {} - yaml@2.8.3: {} + yaml@2.9.0: {} yargs-parser@20.2.9: {}