diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f407f60b006..a44f0e62dc3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -286,7 +286,7 @@ jobs: - run: pnpm install - if: matrix.settings.wasm - run: pnpm install wasm-pack + run: pnpm install -w wasm-pack - name: Lint check if: matrix.settings.wasm diff --git a/package.json b/package.json index 18079d679ab..5c95643585a 100644 --- a/package.json +++ b/package.json @@ -143,22 +143,22 @@ "prettier-plugin-tailwindcss": "0.6.14", "pretty-quick": "4.2.2", "prompts": "2.4.2", - "rollup": "4.52.3", + "rollup": "4.52.4", "semver": "7.7.2", "simple-git-hooks": "2.13.1", "snoop": "1.0.4", "source-map": "0.7.6", "svgo": "3.3.2", "syncpack": "13.0.4", - "terser": "5.43.1", + "terser": "5.44.0", "tmp": "0.2.5", "tree-kill": "1.2.2", - "tsx": "4.20.5", - "typescript": "5.9.2", - "typescript-eslint": "8.41.0", + "tsx": "4.20.6", + "typescript": "5.9.3", + "typescript-eslint": "8.45.0", "vfile": "6.0.3", - "vite": "7.1.7", - "vite-imagetools": "8.0.0", + "vite": "7.1.9", + "vite-imagetools": "9.0.0", "vite-plugin-dts": "4.5.4", "vite-tsconfig-paths": "5.1.4", "vitest": "3.2.4", diff --git a/packages/docs/package.json b/packages/docs/package.json index cf27aa491d9..a5089f23f46 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -20,7 +20,7 @@ "@qwik.dev/partytown": "0.11.2", "@qwik.dev/react": "workspace:*", "@qwik.dev/router": "workspace:*", - "@rolldown/browser": "1.0.0-beta.36", + "@rolldown/browser": "1.0.0-beta.41", "@shikijs/colorized-brackets": "3.12.2", "@shikijs/langs": "3.12.2", "@shikijs/rehype": "3.12.2", @@ -51,11 +51,11 @@ "shiki": "3.12.2", "snarkdown": "2.0.0", "tailwindcss": "4.1.12", - "terser": "5.43.1", + "terser": "5.44.0", "tsm": "2.3.0", - "typescript": "5.9.2", + "typescript": "5.9.3", "valibot": "0.33.3", - "vite": "7.1.7", + "vite": "7.1.9", "vite-plugin-inspect": "11.3.3", "vite-tsconfig-paths": "5.1.4", "wrangler": "3.65.1" diff --git a/packages/docs/src/routes/api/qwik-router/api.json b/packages/docs/src/routes/api/qwik-router/api.json index dcba8cae5ed..659c327c524 100644 --- a/packages/docs/src/routes/api/qwik-router/api.json +++ b/packages/docs/src/routes/api/qwik-router/api.json @@ -796,7 +796,7 @@ } ], "kind": "TypeAlias", - "content": "```typescript\nexport type RouteData = [routeName: string, loaders: ModuleLoader[]] | [\n routeName: string,\n loaders: ModuleLoader[],\n originalPathname: string,\n routeBundleNames: string[]\n];\n```", + "content": "```typescript\nexport type RouteData = [\n routeName: string,\n moduleLoaders: ModuleLoader[]\n] | [\n routeName: string,\n moduleLoaders: ModuleLoader[],\n originalPathname: string,\n routeBundleNames: string[]\n];\n```", "editUrl": "https://github.com/QwikDev/qwik/tree/main/packages/qwik-router/src/runtime/src/types.ts", "mdFile": "router.routedata.md" }, diff --git a/packages/docs/src/routes/api/qwik-router/index.mdx b/packages/docs/src/routes/api/qwik-router/index.mdx index 57aa7db932d..8301a0c13ee 100644 --- a/packages/docs/src/routes/api/qwik-router/index.mdx +++ b/packages/docs/src/routes/api/qwik-router/index.mdx @@ -1854,10 +1854,10 @@ routeAction$: ActionConstructor; ```typescript export type RouteData = - | [routeName: string, loaders: ModuleLoader[]] + | [routeName: string, moduleLoaders: ModuleLoader[]] | [ routeName: string, - loaders: ModuleLoader[], + moduleLoaders: ModuleLoader[], originalPathname: string, routeBundleNames: string[], ]; diff --git a/packages/insights/package.json b/packages/insights/package.json index d0417d6a10b..2868c40cebc 100644 --- a/packages/insights/package.json +++ b/packages/insights/package.json @@ -31,9 +31,9 @@ "prettier": "3.6.2", "prettier-plugin-tailwindcss": "0.6.14", "tailwindcss": "4.1.12", - "typescript": "5.9.2", - "typescript-eslint": "8.41.0", - "vite": "7.1.7", + "typescript": "5.9.3", + "typescript-eslint": "8.45.0", + "vite": "7.1.9", "vite-tsconfig-paths": "5.1.4", "vitest": "3.2.4", "zod": "3.25.48" diff --git a/packages/qwik-react/package.json b/packages/qwik-react/package.json index 128873304af..c11e5364105 100644 --- a/packages/qwik-react/package.json +++ b/packages/qwik-react/package.json @@ -9,8 +9,8 @@ "@types/react-dom": "19.1.7", "react": "19.1.1", "react-dom": "19.1.1", - "typescript": "5.9.2", - "vite": "7.1.7" + "typescript": "5.9.3", + "vite": "7.1.9" }, "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0" diff --git a/packages/qwik-router/package.json b/packages/qwik-router/package.json index 3ee1d0284bd..b55ddb48883 100644 --- a/packages/qwik-router/package.json +++ b/packages/qwik-router/package.json @@ -22,12 +22,12 @@ "set-cookie-parser": "^2.7.1", "source-map": "^0.7.6", "svgo": "^3.3.2", - "typescript": "5.9.2", + "typescript": "5.9.3", "unified": "^11.0.5", "unist-util-visit": "^5.0.0", "valibot": ">=0.36.0 <2", "vfile": "6.0.3", - "vite-imagetools": "^8.0.0", + "vite-imagetools": "^9.0.0", "yaml": "^2.8.1", "zod": "^3.25.40" }, diff --git a/packages/qwik-router/src/adapters/shared/vite/index.ts b/packages/qwik-router/src/adapters/shared/vite/index.ts index 142187e215d..40fc021be76 100644 --- a/packages/qwik-router/src/adapters/shared/vite/index.ts +++ b/packages/qwik-router/src/adapters/shared/vite/index.ts @@ -3,7 +3,7 @@ import type { StaticGenerateOptions, SsgRenderOptions } from 'packages/qwik-rout import type { QwikRouterPlugin } from '@qwik.dev/router/vite'; import { basename, dirname, join, resolve } from 'node:path'; import type { Plugin, UserConfig } from 'vite'; -import type { BuildRoute } from '../../../buildtime/types'; +import type { BuiltRoute } from '../../../buildtime/types'; import { postBuild } from './post-build'; /** @@ -299,7 +299,7 @@ interface ViteAdapterPluginOptions { clientPublicOutDir: string; serverOutDir: string; basePathname: string; - routes: BuildRoute[]; + routes: BuiltRoute[]; assetsDir?: string; warn: (message: string) => void; error: (message: string) => void; diff --git a/packages/qwik-router/src/adapters/shared/vite/post-build.ts b/packages/qwik-router/src/adapters/shared/vite/post-build.ts index 1582950462b..e8c8e7d18f9 100644 --- a/packages/qwik-router/src/adapters/shared/vite/post-build.ts +++ b/packages/qwik-router/src/adapters/shared/vite/post-build.ts @@ -1,6 +1,6 @@ -import { getErrorHtml } from '@qwik.dev/router/middleware/request-handler'; import fs from 'node:fs'; import { join } from 'node:path'; +import { getErrorHtml } from '../../../middleware/request-handler/error-handler'; /** Cleans the client output SSG results if needed and injects the SSG metadata into the build output */ export async function postBuild( diff --git a/packages/qwik-router/src/buildtime/build.ts b/packages/qwik-router/src/buildtime/build.ts index 6ff46893494..100f3d21265 100644 --- a/packages/qwik-router/src/buildtime/build.ts +++ b/packages/qwik-router/src/buildtime/build.ts @@ -1,12 +1,13 @@ import { addError, addWarning } from '../utils/format'; import { resolveSourceFiles } from './routing/resolve-source-file'; +import { routeSortCompare } from './routing/sort-routes'; import { walkRoutes } from './routing/walk-routes-dir'; import { walkServerPlugins } from './routing/walk-server-plugins'; -import type { BuildContext, BuildRoute, RewriteRouteOption } from './types'; +import type { RoutingContext, BuiltRoute, RewriteRouteOption } from './types'; -export async function build(ctx: BuildContext) { +export async function parseRoutesDir(ctx: RoutingContext) { try { - await updateBuildContext(ctx); + await updateRoutingContext(ctx); validateBuild(ctx); } catch (e) { addError(ctx, e); @@ -21,38 +22,32 @@ export async function build(ctx: BuildContext) { } } -export async function updateBuildContext(ctx: BuildContext) { - if (!ctx.activeBuild) { - ctx.activeBuild = new Promise((resolve, reject) => { - walkServerPlugins(ctx.opts) - .then((serverPlugins) => { - ctx.serverPlugins = serverPlugins; - return walkRoutes(ctx.opts.routesDir); - }) - .then((sourceFiles) => { - const resolved = resolveSourceFiles(ctx.opts, sourceFiles); - rewriteRoutes(ctx, resolved); - ctx.layouts = resolved.layouts; - ctx.routes = resolved.routes; - ctx.entries = resolved.entries; - ctx.serviceWorkers = resolved.serviceWorkers; - ctx.menus = resolved.menus; - resolve(); - }, reject) - .finally(() => { - ctx.activeBuild = null; - }); - }); - } +export function updateRoutingContext(ctx: RoutingContext) { + ctx.activeBuild ||= _updateRoutingContext(ctx).finally(() => { + ctx.activeBuild = null; + }); return ctx.activeBuild; } -function rewriteRoutes(ctx: BuildContext, resolvedFiles: ReturnType) { - if (!ctx.opts.rewriteRoutes || !resolvedFiles.routes) { - return; +async function _updateRoutingContext(ctx: RoutingContext) { + const serverPlugins = await walkServerPlugins(ctx.opts); + const sourceFiles = await walkRoutes(ctx.opts.routesDir); + const resolved = resolveSourceFiles(ctx.opts, sourceFiles); + resolved.routes = rewriteRoutes(ctx, resolved.routes); + ctx.serverPlugins = serverPlugins; + ctx.layouts = resolved.layouts; + ctx.routes = resolved.routes; + ctx.entries = resolved.entries; + ctx.serviceWorkers = resolved.serviceWorkers; + ctx.menus = resolved.menus; +} + +function rewriteRoutes(ctx: RoutingContext, routes: BuiltRoute[]) { + if (!ctx.opts.rewriteRoutes) { + return routes; } - const translatedRoutes: BuildRoute[] = []; + const translatedRoutes: BuiltRoute[] = []; let segmentsToTranslate = ctx.opts.rewriteRoutes.flatMap((rewriteConfig) => { return Object.keys(rewriteConfig.paths || {}); @@ -60,7 +55,7 @@ function rewriteRoutes(ctx: BuildContext, resolvedFiles: ReturnType { + routes.forEach((route) => { // always push the original route translatedRoutes.push(route); @@ -91,14 +86,14 @@ function rewriteRoutes(ctx: BuildContext, resolvedFiles: ReturnType (config.paths || {})[part] ?? part; const pathnamePrefix = config.prefix ? '/' + config.prefix : ''; @@ -156,7 +151,7 @@ function translateRoute( return routeToPush; } -function validateBuild(ctx: BuildContext) { +function validateBuild(ctx: RoutingContext) { const pathnames = Array.from(new Set(ctx.routes.map((r) => r.pathname))).sort(); for (const pathname of pathnames) { diff --git a/packages/qwik-router/src/buildtime/context.ts b/packages/qwik-router/src/buildtime/context.ts index 14e7b2bc9e5..0386db30551 100644 --- a/packages/qwik-router/src/buildtime/context.ts +++ b/packages/qwik-router/src/buildtime/context.ts @@ -1,6 +1,6 @@ import { isAbsolute, resolve } from 'node:path'; import { normalizePath } from '../utils/fs'; -import type { BuildContext, NormalizedPluginOptions, PluginOptions } from './types'; +import type { RoutingContext, NormalizedPluginOptions, PluginOptions } from './types'; export function createBuildContext( rootDir: string, @@ -9,7 +9,7 @@ export function createBuildContext( target?: 'ssr' | 'client', dynamicImports?: boolean ) { - const ctx: BuildContext = { + const ctx: RoutingContext = { rootDir: normalizePath(rootDir), opts: normalizeOptions(rootDir, viteBasePath, userOpts), routes: [], @@ -28,7 +28,7 @@ export function createBuildContext( return ctx; } -export function resetBuildContext(ctx: BuildContext | null) { +export function resetBuildContext(ctx: RoutingContext | null) { if (ctx) { ctx.routes.length = 0; ctx.layouts.length = 0; diff --git a/packages/qwik-router/src/buildtime/markdown/frontmatter.ts b/packages/qwik-router/src/buildtime/markdown/frontmatter.ts index 9cf16941044..5e90b608b77 100644 --- a/packages/qwik-router/src/buildtime/markdown/frontmatter.ts +++ b/packages/qwik-router/src/buildtime/markdown/frontmatter.ts @@ -1,12 +1,12 @@ import type { Transformer } from 'unified'; -import type { BuildContext, FrontmatterAttrs } from '../types'; +import type { RoutingContext, FrontmatterAttrs } from '../types'; import { normalizePath } from '../../utils/fs'; import { visit } from 'unist-util-visit'; import { parse as parseYaml } from 'yaml'; import type { ResolvedDocumentHead } from '../../runtime/src'; import type { DocumentMeta, Editable } from '../../runtime/src/types'; -export function parseFrontmatter(ctx: BuildContext): Transformer { +export function parseFrontmatter(ctx: RoutingContext): Transformer { return (mdast, vfile) => { const attrs: FrontmatterAttrs = {}; diff --git a/packages/qwik-router/src/buildtime/markdown/mdx.ts b/packages/qwik-router/src/buildtime/markdown/mdx.ts index c527791fe5b..b97ef52f8c9 100644 --- a/packages/qwik-router/src/buildtime/markdown/mdx.ts +++ b/packages/qwik-router/src/buildtime/markdown/mdx.ts @@ -1,12 +1,12 @@ import type { CompileOptions } from '@mdx-js/mdx'; import { SourceMapGenerator } from 'source-map'; import { getExtension } from '../../utils/fs'; -import type { BuildContext } from '../types'; +import type { RoutingContext } from '../types'; import { parseFrontmatter } from './frontmatter'; import { rehypePage, rehypeSlug, renameClassname, wrapTableWithDiv } from './rehype'; import { rehypeSyntaxHighlight } from './syntax-highlight'; -export async function createMdxTransformer(ctx: BuildContext): Promise { +export async function createMdxTransformer(ctx: RoutingContext): Promise { const { compile } = await import('@mdx-js/mdx'); const { default: remarkFrontmatter } = await import('remark-frontmatter'); const { default: remarkGfm } = await import('remark-gfm'); diff --git a/packages/qwik-router/src/buildtime/markdown/menu.ts b/packages/qwik-router/src/buildtime/markdown/menu.ts index 50527560fe2..0fb6760444b 100644 --- a/packages/qwik-router/src/buildtime/markdown/menu.ts +++ b/packages/qwik-router/src/buildtime/markdown/menu.ts @@ -1,10 +1,10 @@ -import type { NormalizedPluginOptions, BuildMenu, ParsedMenuItem, RouteSourceFile } from '../types'; +import type { NormalizedPluginOptions, BuiltMenu, ParsedMenuItem, RouteSourceFile } from '../types'; import { marked } from 'marked'; import { createFileId, getMenuPathname } from '../../utils/fs'; import { getMarkdownRelativeUrl } from './markdown-url'; export function createMenu(opts: NormalizedPluginOptions, filePath: string) { - const menu: BuildMenu = { + const menu: BuiltMenu = { pathname: getMenuPathname(opts, filePath), filePath, }; diff --git a/packages/qwik-router/src/buildtime/markdown/rehype.ts b/packages/qwik-router/src/buildtime/markdown/rehype.ts index 27bbf47bc41..a7577e50dd1 100644 --- a/packages/qwik-router/src/buildtime/markdown/rehype.ts +++ b/packages/qwik-router/src/buildtime/markdown/rehype.ts @@ -7,7 +7,7 @@ import { headingRank } from 'hast-util-heading-rank'; import { toString } from 'hast-util-to-string'; import { visit } from 'unist-util-visit'; import type { ContentHeading } from '../../runtime/src'; -import type { BuildContext, NormalizedPluginOptions } from '../types'; +import type { RoutingContext, NormalizedPluginOptions } from '../types'; import { getExtension, isMarkdownExt, normalizePath } from '../../utils/fs'; import { frontmatterAttrsToDocumentHead } from './frontmatter'; import { isSameOriginUrl } from '../../utils/pathname'; @@ -31,7 +31,7 @@ export function rehypeSlug(): Transformer { }; } -export function rehypePage(ctx: BuildContext): Transformer { +export function rehypePage(ctx: RoutingContext): Transformer { return (ast, vfile) => { const mdast = ast as Root; const sourcePath = normalizePath(vfile.path); @@ -96,12 +96,12 @@ function updateContentLinks(mdast: Root, opts: NormalizedPluginOptions, sourcePa }); } -function exportFrontmatter(ctx: BuildContext, mdast: Root, sourcePath: string) { +function exportFrontmatter(ctx: RoutingContext, mdast: Root, sourcePath: string) { const attrs = ctx.frontmatter.get(sourcePath); createExport(mdast, 'frontmatter', attrs); } -function exportContentHead(ctx: BuildContext, mdast: Root, sourcePath: string) { +function exportContentHead(ctx: RoutingContext, mdast: Root, sourcePath: string) { const attrs = ctx.frontmatter.get(sourcePath); const head = frontmatterAttrsToDocumentHead(attrs); if (head) { diff --git a/packages/qwik-router/src/buildtime/routing/resolve-source-file.ts b/packages/qwik-router/src/buildtime/routing/resolve-source-file.ts index c7ffd80fc0a..74a016c8cc2 100644 --- a/packages/qwik-router/src/buildtime/routing/resolve-source-file.ts +++ b/packages/qwik-router/src/buildtime/routing/resolve-source-file.ts @@ -1,10 +1,10 @@ import { dirname } from 'node:path'; import { resolveMenu } from '../markdown/menu'; import type { - BuildEntry, - BuildLayout, - BuildRoute, - BuildServerPlugin, + BuiltEntry, + BuiltLayout, + BuiltRoute, + BuiltServerPlugin, NormalizedPluginOptions, RouteSourceFile, } from '../types'; @@ -93,7 +93,7 @@ export function resolveLayout(opts: NormalizedPluginOptions, layoutSourceFile: R layoutName = ''; } - const layout: BuildLayout = { + const layout: BuiltLayout = { id: createFileId(opts.routesDir, filePath), filePath, dirPath, @@ -110,11 +110,11 @@ const LAYOUT_TOP_SUFFIX = '!'; export function resolveRoute( opts: NormalizedPluginOptions, - appLayouts: BuildLayout[], + appLayouts: BuiltLayout[], sourceFile: RouteSourceFile ) { const filePath = sourceFile.filePath; - const layouts: BuildLayout[] = []; + const layouts: BuiltLayout[] = []; const routesDir = opts.routesDir; const { layoutName, layoutStop } = parseRouteIndexName(sourceFile.extlessName); let pathname = getPathnameFromDirPath(opts, sourceFile.dirPath); @@ -129,7 +129,7 @@ export function resolveRoute( const hasNamedLayout = layoutName !== ''; for (let i = 0; i < 20; i++) { - let layout: BuildLayout | undefined = undefined; + let layout: BuiltLayout | undefined = undefined; if (hasNamedLayout && !hasFoundNamedLayout) { layout = appLayouts.find((l) => l.dirPath === currentDir && l.layoutName === layoutName); @@ -155,7 +155,7 @@ export function resolveRoute( } } - const buildRoute: BuildRoute = { + const buildRoute: BuiltRoute = { id: createFileId(opts.routesDir, filePath, 'Route'), filePath, pathname, @@ -169,7 +169,7 @@ export function resolveRoute( export function resolveServerPlugin(opts: NormalizedPluginOptions, sourceFile: RouteSourceFile) { const filePath = sourceFile.filePath; - const buildRoute: BuildServerPlugin = { + const buildRoute: BuiltServerPlugin = { id: createFileId(opts.serverPluginsDir, filePath, 'Plugin'), filePath, ext: sourceFile.ext, @@ -181,7 +181,7 @@ function resolveEntry(opts: NormalizedPluginOptions, sourceFile: RouteSourceFile const pathname = getPathnameFromDirPath(opts, sourceFile.dirPath); const chunkFileName = pathname.slice(opts.basePathname.length); - const buildEntry: BuildEntry = { + const buildEntry: BuiltEntry = { id: createFileId(opts.routesDir, sourceFile.filePath, 'Route'), filePath: sourceFile.filePath, chunkFileName, @@ -196,7 +196,7 @@ function resolveServiceWorkerEntry(opts: NormalizedPluginOptions, sourceFile: Ro const pathname = dirPathname + sourceFile.extlessName + '.js'; const chunkFileName = pathname.slice(opts.basePathname.length); - const buildEntry: BuildEntry = { + const buildEntry: BuiltEntry = { id: createFileId(opts.routesDir, sourceFile.filePath, 'ServiceWorker'), filePath: sourceFile.filePath, chunkFileName, diff --git a/packages/qwik-router/src/buildtime/routing/sort-routes.ts b/packages/qwik-router/src/buildtime/routing/sort-routes.ts index 76aad9656dc..8a6d5005880 100644 --- a/packages/qwik-router/src/buildtime/routing/sort-routes.ts +++ b/packages/qwik-router/src/buildtime/routing/sort-routes.ts @@ -1,6 +1,7 @@ -import type { BuildRoute } from '../types'; +import type { BuiltRoute } from '../types'; -export function routeSortCompare(a: BuildRoute, b: BuildRoute) { +/** Sort routes by pathname, then by extension. Longer routes are sorted first. */ +export function routeSortCompare(a: BuiltRoute, b: BuiltRoute) { const maxSegments = Math.max(a.segments.length, b.segments.length); for (let i = 0; i < maxSegments; i += 1) { diff --git a/packages/qwik-router/src/buildtime/routing/sort-routes.unit.ts b/packages/qwik-router/src/buildtime/routing/sort-routes.unit.ts index 4aa7606faf1..1cc27d285b2 100644 --- a/packages/qwik-router/src/buildtime/routing/sort-routes.unit.ts +++ b/packages/qwik-router/src/buildtime/routing/sort-routes.unit.ts @@ -1,4 +1,4 @@ -import type { BuildRoute } from '../types'; +import type { BuiltRoute } from '../types'; import { createFileId } from '../../utils/fs'; import { parseRoutePathname } from './parse-pathname'; import { routeSortCompare } from './sort-routes'; @@ -44,7 +44,7 @@ test('routeSortCompare', () => { function route(r: TestRoute) { const pathname = r.pathname || '/'; - const route: BuildRoute = { + const route: BuiltRoute = { id: createFileId('', pathname, 'Route'), filePath: pathname, pathname, diff --git a/packages/qwik-router/src/buildtime/routing/walk-server-plugins.ts b/packages/qwik-router/src/buildtime/routing/walk-server-plugins.ts index 199d908b81d..4a4d09db3a0 100644 --- a/packages/qwik-router/src/buildtime/routing/walk-server-plugins.ts +++ b/packages/qwik-router/src/buildtime/routing/walk-server-plugins.ts @@ -1,6 +1,6 @@ import fs from 'node:fs'; import { join } from 'node:path'; -import type { BuildServerPlugin, NormalizedPluginOptions } from '../types'; +import type { BuiltServerPlugin, NormalizedPluginOptions } from '../types'; import { createFileId, getExtension, @@ -14,7 +14,7 @@ import { export async function walkServerPlugins(opts: NormalizedPluginOptions) { const dirPath = opts.serverPluginsDir; const dirItemNames = await fs.promises.readdir(dirPath); - const sourceFiles: BuildServerPlugin[] = []; + const sourceFiles: BuiltServerPlugin[] = []; await Promise.all( dirItemNames.map(async (itemName) => { const itemPath = normalizePath(join(dirPath, itemName)); diff --git a/packages/qwik-router/src/buildtime/runtime-generation/generate-entries.ts b/packages/qwik-router/src/buildtime/runtime-generation/generate-entries.ts index 2dbcf67c86a..fe950c014d1 100644 --- a/packages/qwik-router/src/buildtime/runtime-generation/generate-entries.ts +++ b/packages/qwik-router/src/buildtime/runtime-generation/generate-entries.ts @@ -1,6 +1,6 @@ -import type { BuildContext } from '../types'; +import type { RoutingContext } from '../types'; -export function createEntries(ctx: BuildContext, c: string[]) { +export function createEntries(ctx: RoutingContext, c: string[]) { const isClient = ctx.target === 'client'; const entries = [...ctx.entries, ...ctx.serviceWorkers]; @@ -14,7 +14,7 @@ export function createEntries(ctx: BuildContext, c: string[]) { } } -export function generateQwikRouterEntries(ctx: BuildContext) { +export function generateQwikRouterEntries(ctx: RoutingContext) { // generate @qwik-router-entries const c: string[] = []; diff --git a/packages/qwik-router/src/buildtime/runtime-generation/generate-menus.ts b/packages/qwik-router/src/buildtime/runtime-generation/generate-menus.ts index c64fb414a66..2c203d1ee10 100644 --- a/packages/qwik-router/src/buildtime/runtime-generation/generate-menus.ts +++ b/packages/qwik-router/src/buildtime/runtime-generation/generate-menus.ts @@ -1,8 +1,13 @@ import { createFileId } from '../../utils/fs'; -import type { BuildContext } from '../types'; +import type { RoutingContext } from '../types'; import { getImportPath } from './utils'; -export function createMenus(ctx: BuildContext, c: string[], esmImports: string[], isSSR: boolean) { +export function createMenus( + ctx: RoutingContext, + c: string[], + esmImports: string[], + isSSR: boolean +) { c.push(`\n/** Qwik Router Menus (${ctx.menus.length}) */`); c.push(`export const menus = [`); diff --git a/packages/qwik-router/src/buildtime/runtime-generation/generate-qwik-router-config.ts b/packages/qwik-router/src/buildtime/runtime-generation/generate-qwik-router-config.ts index 9dc2089d678..a7eb83bf6fe 100644 --- a/packages/qwik-router/src/buildtime/runtime-generation/generate-qwik-router-config.ts +++ b/packages/qwik-router/src/buildtime/runtime-generation/generate-qwik-router-config.ts @@ -1,5 +1,5 @@ import type { QwikVitePlugin } from '@qwik.dev/core/optimizer'; -import type { BuildContext } from '../types'; +import type { RoutingContext } from '../types'; import { createEntries } from './generate-entries'; import { createMenus } from './generate-menus'; import { createRoutes } from './generate-routes'; @@ -7,7 +7,7 @@ import { createServerPlugins } from './generate-server-plugins'; /** Generates the Qwik Router Config runtime code */ export function generateQwikRouterConfig( - ctx: BuildContext, + ctx: RoutingContext, qwikPlugin: QwikVitePlugin, isSSR: boolean ) { diff --git a/packages/qwik-router/src/buildtime/runtime-generation/generate-routes.ts b/packages/qwik-router/src/buildtime/runtime-generation/generate-routes.ts index 4efed351d6b..f06bae80212 100644 --- a/packages/qwik-router/src/buildtime/runtime-generation/generate-routes.ts +++ b/packages/qwik-router/src/buildtime/runtime-generation/generate-routes.ts @@ -1,10 +1,10 @@ import type { QwikManifest, QwikVitePlugin } from '@qwik.dev/core/optimizer'; import { isModuleExt, isPageExt, removeExtension } from '../../utils/fs'; -import type { BuildContext, BuildRoute } from '../types'; +import type { RoutingContext, BuiltRoute } from '../types'; import { getImportPath } from './utils'; export function createRoutes( - ctx: BuildContext, + ctx: RoutingContext, qwikPlugin: QwikVitePlugin, c: string[], esmImports: string[], @@ -30,33 +30,33 @@ export function createRoutes( c.push(`export const routes = [`); for (const route of ctx.routes) { - const loaders = []; + const layouts = []; if (isPageExt(route.ext)) { // page module or markdown for (const layout of route.layouts) { - loaders.push(layout.id); + layouts.push(layout.id); } const importPath = getImportPath(route.filePath); if (dynamicImports) { - loaders.push(`()=>import(${JSON.stringify(importPath)})`); + layouts.push(`()=>import(${JSON.stringify(importPath)})`); } else { esmImports.push(`import * as ${route.id} from ${JSON.stringify(importPath)};`); - loaders.push(`()=>${route.id}`); + layouts.push(`()=>${route.id}`); } } else if (includeEndpoints && isModuleExt(route.ext)) { // include endpoints, and this is a module const importPath = getImportPath(route.filePath); esmImports.push(`import * as ${route.id} from ${JSON.stringify(importPath)};`); for (const layout of route.layouts) { - loaders.push(layout.id); + layouts.push(layout.id); } - loaders.push(`()=>${route.id}`); + layouts.push(`()=>${route.id}`); } - if (loaders.length > 0) { - c.push(` ${createRouteData(qwikPlugin, route, loaders, isSSR)},`); + if (layouts.length > 0) { + c.push(` ${createRouteData(qwikPlugin, route, layouts, isSSR)},`); } } @@ -65,12 +65,12 @@ export function createRoutes( function createRouteData( qwikPlugin: QwikVitePlugin, - r: BuildRoute, - loaders: string[], + r: BuiltRoute, + layouts: string[], isSsr: boolean ) { const routeName = JSON.stringify(r.routeName); - const moduleLoaders = `[ ${loaders.join(', ')} ]`; + const moduleLayouts = `[ ${layouts.join(', ')} ]`; // Use RouteData interface @@ -79,14 +79,16 @@ function createRouteData( const clientBundleNames = JSON.stringify(getClientRouteBundleNames(qwikPlugin, r)); // SSR also adds the originalPathname and clientBundleNames to the RouteData - return `[ ${routeName}, ${moduleLoaders}, ${originalPathname}, ${clientBundleNames} ]`; + // ["qwikrouter-test/loaders-serialization/", [Layout, () => __vitePreload(() => import("./index58.js"), true ? [] : void 0)]], + return `[ ${routeName}, ${moduleLayouts}, ${originalPathname}, ${clientBundleNames} ]`; } // simple RouteData, only route name and module loaders - return `[ ${routeName}, ${moduleLoaders} ]`; + return `[ ${routeName}, ${moduleLayouts} ]`; } -function getClientRouteBundleNames(qwikPlugin: QwikVitePlugin, r: BuildRoute) { +// TODO is this still used? We have the preloader now. Maybe this is what generates the data for it? +function getClientRouteBundleNames(qwikPlugin: QwikVitePlugin, r: BuiltRoute) { const bundlesNames: string[] = []; const manifest: QwikManifest = qwikPlugin.api.getManifest()!; diff --git a/packages/qwik-router/src/buildtime/runtime-generation/generate-server-plugins.ts b/packages/qwik-router/src/buildtime/runtime-generation/generate-server-plugins.ts index 2b475ba98e0..52358ffb70f 100644 --- a/packages/qwik-router/src/buildtime/runtime-generation/generate-server-plugins.ts +++ b/packages/qwik-router/src/buildtime/runtime-generation/generate-server-plugins.ts @@ -1,9 +1,9 @@ import type { QwikVitePlugin } from '@qwik.dev/core/optimizer'; -import type { BuildContext } from '../types'; +import type { RoutingContext } from '../types'; import { getImportPath } from './utils'; export function createServerPlugins( - ctx: BuildContext, + ctx: RoutingContext, _qwikPlugin: QwikVitePlugin, c: string[], esmImports: string[], diff --git a/packages/qwik-router/src/buildtime/runtime-generation/generate-service-worker.ts b/packages/qwik-router/src/buildtime/runtime-generation/generate-service-worker.ts index 383c1b4f75e..8488f54d698 100644 --- a/packages/qwik-router/src/buildtime/runtime-generation/generate-service-worker.ts +++ b/packages/qwik-router/src/buildtime/runtime-generation/generate-service-worker.ts @@ -1,6 +1,6 @@ -import type { BuildContext } from '../types'; +import type { RoutingContext } from '../types'; -export function generateServiceWorkerRegister(ctx: BuildContext, swRegister: string) { +export function generateServiceWorkerRegister(ctx: RoutingContext, swRegister: string) { let swReg: string; let swUrl = '/service-worker.js'; diff --git a/packages/qwik-router/src/buildtime/types.ts b/packages/qwik-router/src/buildtime/types.ts index 1b9a1292659..83aa9c2d0d3 100644 --- a/packages/qwik-router/src/buildtime/types.ts +++ b/packages/qwik-router/src/buildtime/types.ts @@ -1,14 +1,14 @@ import type { SerializationStrategy } from '@qwik.dev/core/internal'; -export interface BuildContext { +export interface RoutingContext { rootDir: string; opts: NormalizedPluginOptions; - routes: BuildRoute[]; - serverPlugins: BuildServerPlugin[]; - layouts: BuildLayout[]; - entries: BuildEntry[]; - serviceWorkers: BuildEntry[]; - menus: BuildMenu[]; + routes: BuiltRoute[]; + serverPlugins: BuiltServerPlugin[]; + layouts: BuiltLayout[]; + entries: BuiltEntry[]; + serviceWorkers: BuiltEntry[]; + menus: BuiltMenu[]; frontmatter: Map; diagnostics: Diagnostic[]; target: 'ssr' | 'client' | undefined; @@ -45,7 +45,7 @@ export interface RouteSourceFileName { export type RouteSourceType = 'route' | 'layout' | 'entry' | 'menu' | 'service-worker'; -export interface BuildRoute extends ParsedPathname { +export interface BuiltRoute extends ParsedPathname { /** Unique id built from its relative file system path */ id: string; /** Local file system path */ @@ -53,10 +53,10 @@ export interface BuildRoute extends ParsedPathname { ext: string; /** URL Pathname */ pathname: string; - layouts: BuildLayout[]; + layouts: BuiltLayout[]; } -export interface BuildServerPlugin { +export interface BuiltServerPlugin { /** Unique id built from its relative file system path */ id: string; /** Local file system path */ @@ -79,7 +79,7 @@ export interface PathnameSegmentPart { rest: boolean; } -export interface BuildLayout { +export interface BuiltLayout { filePath: string; dirPath: string; id: string; @@ -87,13 +87,13 @@ export interface BuildLayout { layoutName: string; } -export interface BuildEntry extends ParsedPathname { +export interface BuiltEntry extends ParsedPathname { id: string; chunkFileName: string; filePath: string; } -export interface BuildMenu { +export interface BuiltMenu { pathname: string; filePath: string; } diff --git a/packages/qwik-router/src/buildtime/vite/dev-middleware.ts b/packages/qwik-router/src/buildtime/vite/dev-middleware.ts index e7e820babb7..065315f70fb 100644 --- a/packages/qwik-router/src/buildtime/vite/dev-middleware.ts +++ b/packages/qwik-router/src/buildtime/vite/dev-middleware.ts @@ -1,13 +1,13 @@ import type { Render } from '@qwik.dev/core/server'; import type { RendererOptions } from '@qwik.dev/router'; import type { Connect, ModuleNode, ViteDevServer } from 'vite'; -import { build } from '../build'; -import type { BuildContext } from '../types'; +import { updateRoutingContext } from '../build'; +import type { RoutingContext } from '../types'; import { formatError } from './format-error'; import { wrapResponseForHtmlTransform } from './html-transform-wrapper'; export const makeRouterDevMiddleware = - (server: ViteDevServer, ctx: BuildContext): Connect.NextHandleFunction => + (server: ViteDevServer, ctx: RoutingContext): Connect.NextHandleFunction => async (req, res, next) => { // This middleware is the fallback for Vite dev mode; it renders the application @@ -20,7 +20,7 @@ export const makeRouterDevMiddleware = } const renderer = mod.default; if (ctx!.isDirty) { - await build(ctx!); + await updateRoutingContext(ctx!); ctx!.isDirty = false; } diff --git a/packages/qwik-router/src/buildtime/vite/get-route-imports.ts b/packages/qwik-router/src/buildtime/vite/get-route-imports.ts index 5b17131691e..1e6d3976837 100644 --- a/packages/qwik-router/src/buildtime/vite/get-route-imports.ts +++ b/packages/qwik-router/src/buildtime/vite/get-route-imports.ts @@ -1,9 +1,9 @@ import type { QwikBundle, QwikManifest } from '@qwik.dev/core/optimizer'; import { removeExtension } from '../../utils/fs'; -import type { BuildRoute } from '../types'; +import type { BuiltRoute } from '../types'; import { QWIK_ROUTER_CONFIG_ID } from './plugin'; -export function getRouteImports(routes: BuildRoute[], manifest: QwikManifest) { +export function getRouteImports(routes: BuiltRoute[], manifest: QwikManifest) { const result: Record = {}; routes.forEach((route) => { const routePath = removeExtension(route.filePath); diff --git a/packages/qwik-router/src/buildtime/vite/get-route-imports.unit.ts b/packages/qwik-router/src/buildtime/vite/get-route-imports.unit.ts index 424a6424c7a..832c348f65c 100644 --- a/packages/qwik-router/src/buildtime/vite/get-route-imports.unit.ts +++ b/packages/qwik-router/src/buildtime/vite/get-route-imports.unit.ts @@ -1,6 +1,6 @@ import { type QwikBundle, type QwikManifest } from '@qwik.dev/core/optimizer'; import { describe, expect, test } from 'vitest'; -import type { BuildLayout, BuildRoute } from '../types'; +import type { BuiltLayout, BuiltRoute } from '../types'; import { getRouteImports } from './get-route-imports'; describe('modifyBundleGraph', () => { @@ -33,7 +33,7 @@ describe('modifyBundleGraph', () => { } as Record, } as QwikManifest; - const fakeRoutes: BuildRoute[] = [ + const fakeRoutes: BuiltRoute[] = [ { routeName: '/', filePath: '/home/qwik-app/src/routes/index.tsx', @@ -45,9 +45,9 @@ describe('modifyBundleGraph', () => { { filePath: '/home/qwik-app/src/routes/layout.tsx', }, - ] as BuildLayout[], + ] as BuiltLayout[], }, - ] as BuildRoute[]; + ] as BuiltRoute[]; const actualResult = getRouteImports(fakeRoutes, fakeManifest); expect(actualResult).toMatchInlineSnapshot(` @@ -87,12 +87,12 @@ describe('modifyBundleGraph', () => { } as Record, } as QwikManifest; - const fakeRoutes: BuildRoute[] = [ + const fakeRoutes: BuiltRoute[] = [ { routeName: '/', filePath: '/home/qwik-app/src/routes/index.tsx', }, - ] as BuildRoute[]; + ] as BuiltRoute[]; const actualResult = getRouteImports(fakeRoutes, fakeManifest); diff --git a/packages/qwik-router/src/buildtime/vite/plugin.ts b/packages/qwik-router/src/buildtime/vite/plugin.ts index b313b15a417..2d80e2b6ff5 100644 --- a/packages/qwik-router/src/buildtime/vite/plugin.ts +++ b/packages/qwik-router/src/buildtime/vite/plugin.ts @@ -5,14 +5,14 @@ import { basename, extname, join, resolve } from 'node:path'; import type { Plugin, PluginOption, Rollup, UserConfig, ViteDevServer } from 'vite'; import { loadEnv } from 'vite'; import { isMenuFileName, normalizePath, removeExtension } from '../../utils/fs'; -import { build } from '../build'; +import { parseRoutesDir } from '../build'; import { createBuildContext, resetBuildContext } from '../context'; import { createMdxTransformer, type MdxTransform } from '../markdown/mdx'; import { transformMenu } from '../markdown/menu'; import { generateQwikRouterEntries } from '../runtime-generation/generate-entries'; import { generateQwikRouterConfig } from '../runtime-generation/generate-qwik-router-config'; import { generateServiceWorkerRegister } from '../runtime-generation/generate-service-worker'; -import type { BuildContext } from '../types'; +import type { RoutingContext } from '../types'; import { getRouteImports } from './get-route-imports'; import { imagePlugin } from './image-jsx'; import type { @@ -42,7 +42,7 @@ export function qwikRouter(userOpts?: QwikRouterVitePluginOptions): PluginOption } function qwikRouterPlugin(userOpts?: QwikRouterVitePluginOptions): any { - let ctx: BuildContext | null = null; + let ctx: RoutingContext | null = null; let mdxTransform: MdxTransform | null = null; let rootDir: string | null = null; let qwikPlugin: QwikVitePlugin | null; @@ -236,7 +236,7 @@ function qwikRouterPlugin(userOpts?: QwikRouterVitePluginOptions): any { const isSwRegister = id.endsWith(QWIK_ROUTER_SW_REGISTER); if (isRouterConfig || isSwRegister) { if (ctx.isDirty) { - await build(ctx); + await parseRoutesDir(ctx); ctx.isDirty = false; ctx.diagnostics.forEach((d) => { diff --git a/packages/qwik-router/src/buildtime/vite/types.ts b/packages/qwik-router/src/buildtime/vite/types.ts index 53fd701a047..8bad3a40649 100644 --- a/packages/qwik-router/src/buildtime/vite/types.ts +++ b/packages/qwik-router/src/buildtime/vite/types.ts @@ -3,7 +3,7 @@ import type { Config as SVGOConfig } from 'svgo'; import type { BuiltinsWithOptionalParams as SVGOBuiltinPluginsWithOptionalParams } from 'svgo/plugins/plugins-types'; import type { Plugin as VitePlugin } from 'vite'; import type { MdxTransform } from '../markdown/mdx'; -import type { BuildContext, BuildEntry, BuildRoute, MdxPlugins, PluginOptions } from '../types'; +import type { RoutingContext, BuiltEntry, BuiltRoute, MdxPlugins, PluginOptions } from '../types'; /** @public */ export interface ImageOptimizationOptions { @@ -52,7 +52,7 @@ export type MdxOptions = CompileOptions; /** @deprecated Not being used anywhere. Will be removed in V3. */ export interface PluginContext { - buildCtx: BuildContext | null; + buildCtx: RoutingContext | null; rootDir: string; cityPlanCode: string | null; mdxTransform: MdxTransform | null; @@ -74,8 +74,8 @@ export type QwikCityPlugin = QwikRouterPlugin; /** @public */ export interface QwikRouterPluginApi { getBasePathname: () => string; - getRoutes: () => BuildRoute[]; - getServiceWorkers: () => BuildEntry[]; + getRoutes: () => BuiltRoute[]; + getServiceWorkers: () => BuiltEntry[]; } /** diff --git a/packages/qwik-router/src/middleware/request-handler/middleware.request-handler.api.md b/packages/qwik-router/src/middleware/request-handler/middleware.request-handler.api.md index b430ba87592..b0b2bb84eed 100644 --- a/packages/qwik-router/src/middleware/request-handler/middleware.request-handler.api.md +++ b/packages/qwik-router/src/middleware/request-handler/middleware.request-handler.api.md @@ -11,6 +11,7 @@ import type { Loader as Loader_2 } from '@qwik.dev/router'; import type { QwikCityPlan } from '@qwik.dev/router'; import type { QwikIntrinsicElements } from '@qwik.dev/core'; import type { QwikRouterConfig } from '@qwik.dev/router'; +import { RedirectMessage as RedirectMessage_2 } from '@qwik.dev/router/middleware/request-handler'; import type { Render } from '@qwik.dev/core/server'; import type { RenderOptions } from '@qwik.dev/core/server'; import { RequestEvent as RequestEvent_2 } from '@qwik.dev/router/middleware/request-handler'; diff --git a/packages/qwik-router/src/middleware/request-handler/request-event.ts b/packages/qwik-router/src/middleware/request-handler/request-event.ts index 46aac9335fd..a66b141befa 100644 --- a/packages/qwik-router/src/middleware/request-handler/request-event.ts +++ b/packages/qwik-router/src/middleware/request-handler/request-event.ts @@ -141,9 +141,11 @@ export function createRequestEvent( return exit(); }; - const exit = () => { + const exit = ( + message: T = new AbortMessage() as T + ) => { routeModuleIndex = ABORT_INDEX; - return new AbortMessage(); + return message; }; const loaders: Record | undefined> = {}; @@ -250,9 +252,7 @@ export function createRequestEvent( if (statusCode > 301) { headers.set('Cache-Control', 'no-store'); } - - routeModuleIndex = ABORT_INDEX; - return new RedirectMessage(); + return exit(new RedirectMessage()); }, rewrite: (pathname: string) => { @@ -261,7 +261,7 @@ export function createRequestEvent( throw new Error('Rewrite does not support absolute urls'); } sharedMap.set(RequestEvIsRewrite, true); - return new RewriteMessage(pathname.replace(/\/+/g, '/')); + return exit(new RewriteMessage(pathname.replace(/\/+/g, '/'))); }, defer: (returnData) => { diff --git a/packages/qwik-router/src/middleware/request-handler/request-handler.ts b/packages/qwik-router/src/middleware/request-handler/request-handler.ts index 4ad22eadfd6..ffe7abcd6ba 100644 --- a/packages/qwik-router/src/middleware/request-handler/request-handler.ts +++ b/packages/qwik-router/src/middleware/request-handler/request-handler.ts @@ -11,7 +11,7 @@ import { getRouteMatchPathname, runQwikRouter, type QwikRouterRun } from './user */ let qwikRouterConfigActual: QwikRouterConfig; /** - * The request handler for QwikRouter. Called by every integration. + * The request handler for QwikRouter. Called by every adapter. * * @public */ diff --git a/packages/qwik-router/src/middleware/request-handler/resolve-request-handlers.ts b/packages/qwik-router/src/middleware/request-handler/resolve-request-handlers.ts index 768bc86bc43..9a95631bfa0 100644 --- a/packages/qwik-router/src/middleware/request-handler/resolve-request-handlers.ts +++ b/packages/qwik-router/src/middleware/request-handler/resolve-request-handlers.ts @@ -71,6 +71,15 @@ export const resolveRequestHandlers = ( } if (route) { + const routeModules = route[LoadedRouteProp.Mods]; + _resolveRequestHandlers( + routeLoaders, + routeActions, + requestHandlers, + routeModules, + isPageRoute, + method + ); const routeName = route[LoadedRouteProp.RouteName]; if ( checkOrigin && @@ -96,15 +105,7 @@ export const resolveRequestHandlers = ( requestHandlers.push(renderQData); } } - const routeModules = route[LoadedRouteProp.Mods]; - _resolveRequestHandlers( - routeLoaders, - routeActions, - requestHandlers, - routeModules, - isPageRoute, - method - ); + if (isPageRoute) { requestHandlers.push((ev) => { // Set the current route name @@ -254,20 +255,7 @@ export function loadersMiddleware(routeLoaders: LoaderInternal[]): RequestHandle const loaders = getRequestLoaders(requestEv); const isDev = getRequestMode(requestEv) === 'dev'; if (routeLoaders.length > 0) { - let currentLoaders: LoaderInternal[] = []; - if (requestEv.query.has(QLOADER_KEY)) { - const selectedLoaderIds = requestEv.query.getAll(QLOADER_KEY); - for (const loader of routeLoaders) { - if (selectedLoaderIds.includes(loader.__id)) { - currentLoaders.push(loader); - } else { - loaders[loader.__id] = _UNINITIALIZED; - } - } - } else { - currentLoaders = routeLoaders; - } - const resolvedLoadersPromises = currentLoaders.map((loader) => + const resolvedLoadersPromises = routeLoaders.map((loader) => getRouteLoaderPromise(loader, loaders, requestEv, isDev) ); await Promise.all(resolvedLoadersPromises); diff --git a/packages/qwik-router/src/middleware/request-handler/types.ts b/packages/qwik-router/src/middleware/request-handler/types.ts index 5531efcd88b..487622e8bc0 100644 --- a/packages/qwik-router/src/middleware/request-handler/types.ts +++ b/packages/qwik-router/src/middleware/request-handler/types.ts @@ -590,13 +590,6 @@ export interface CookieValue { number: () => number; } -/** @public */ -export interface QwikSerializer { - _deserialize: typeof _deserialize; - _serialize: typeof _serialize; - _verifySerializable: typeof _verifySerializable; -} - /** @public */ export type HttpMethod = | 'GET' diff --git a/packages/qwik-router/src/middleware/request-handler/user-response.ts b/packages/qwik-router/src/middleware/request-handler/user-response.ts index 592b2ab856f..939de87008d 100644 --- a/packages/qwik-router/src/middleware/request-handler/user-response.ts +++ b/packages/qwik-router/src/middleware/request-handler/user-response.ts @@ -9,6 +9,7 @@ import { getErrorHtml } from './error-handler'; import { createRequestEvent, getRequestMode, type RequestEventInternal } from './request-event'; import { encoder } from './resolve-request-handlers'; import type { ServerRequestEvent, StatusCodes } from './types'; + // Import separately to avoid duplicate imports in the vite dev server import { AbortMessage, @@ -18,9 +19,21 @@ import { } from '@qwik.dev/router/middleware/request-handler'; export interface QwikRouterRun { + /** + * The response to the request, if any. If there is no response, there might have been an error, + * or the request was aborted. + */ response: Promise; requestEv: RequestEvent; - completion: Promise; + /** + * Promise for the completion of the request. + * + * If it returns a RedirectMessage, it means the request must be redirected. + * + * If it returns an Error, it means there was an error, and if possible, the response already + * includes the error. The error is informational only. + */ + completion: Promise; } let asyncStore: AsyncStore | undefined; @@ -67,7 +80,7 @@ async function runNext( requestEv: RequestEventInternal, rebuildRouteInfo: RebuildRouteInfoInternal, resolve: (value: any) => void -) { +): Promise { try { const isValidURL = (url: URL) => new URL(url.pathname + url.search, url); isValidURL(requestEv.originalUrl); @@ -90,9 +103,10 @@ async function runNext( if (e instanceof RedirectMessage) { const stream = requestEv.getWritableStream(); await stream.close(); + return e; } else if (e instanceof RewriteMessage) { if (rewriteAttempt > 50) { - throw new Error(`Infinite rewrite loop`); + return new Error(`Infinite rewrite loop`); } rewriteAttempt += 1; @@ -101,48 +115,47 @@ async function runNext( const { loadedRoute, requestHandlers } = await rebuildRouteInfo(url); requestEv.resetRoute(loadedRoute, requestHandlers, url); return await _runNext(); - } else if (e instanceof ServerError) { - if (!requestEv.headersSent) { - const status = e.status as StatusCodes; - const accept = requestEv.request.headers.get('Accept'); - if (accept && !accept.includes('text/html')) { - requestEv.headers.set('Content-Type', 'application/qwik-json'); - requestEv.send(status, await _serialize([e.data])); - } else { - const html = getErrorHtml(e.status, e.data); - requestEv.html(status, html); - } + } else if (e instanceof AbortMessage) { + return; + } else if (e instanceof ServerError && !requestEv.headersSent) { + const status = e.status as StatusCodes; + const accept = requestEv.request.headers.get('Accept'); + if (accept && !accept.includes('text/html')) { + requestEv.headers.set('Content-Type', 'application/qwik-json'); + requestEv.send(status, await _serialize([e.data])); + } else { + // TODO render the custom error route + requestEv.html(status, getErrorHtml(status, e.data)); } - } else if (!(e instanceof AbortMessage)) { - if (getRequestMode(requestEv) !== 'dev') { - try { - if (!requestEv.headersSent) { - requestEv.headers.set('content-type', 'text/html; charset=utf-8'); - requestEv.cacheControl({ noCache: true }); - requestEv.status(500); - } - const stream = requestEv.getWritableStream(); - if (!stream.locked) { - const writer = stream.getWriter(); - await writer.write(encoder.encode(getErrorHtml(500, 'Internal Server Error'))); - await writer.close(); - } - } catch { - console.error('Unable to render error page'); + return e; + } + if (getRequestMode(requestEv) !== 'dev') { + try { + if (!requestEv.headersSent) { + requestEv.headers.set('content-type', 'text/html; charset=utf-8'); + requestEv.cacheControl({ noCache: true }); + requestEv.status(500); } + const stream = requestEv.getWritableStream(); + if (!stream.locked) { + const writer = stream.getWriter(); + await writer.write(encoder.encode(getErrorHtml(500, 'Internal Server Error'))); + await writer.close(); + } + } catch { + console.error('Unable to render error page'); } - - return e; } - } - return undefined; + return e as Error; + } } try { return await _runNext(); } finally { if (!requestEv.isDirty()) { + // The request didn't get handled, so we need to resolve with null. resolve(null); } } diff --git a/packages/qwik-router/src/runtime/src/qwik-router.runtime.api.md b/packages/qwik-router/src/runtime/src/qwik-router.runtime.api.md index d6ae2ba798d..645ee16d2b8 100644 --- a/packages/qwik-router/src/runtime/src/qwik-router.runtime.api.md +++ b/packages/qwik-router/src/runtime/src/qwik-router.runtime.api.md @@ -416,9 +416,12 @@ export const routeActionQrl: ActionConstructorQRL; // Warning: (ae-forgotten-export) The symbol "ModuleLoader" needs to be exported by the entry point index.d.ts // // @public (undocumented) -export type RouteData = [routeName: string, loaders: ModuleLoader[]] | [ +export type RouteData = [ routeName: string, -loaders: ModuleLoader[], +moduleLoaders: ModuleLoader[] +] | [ +routeName: string, +moduleLoaders: ModuleLoader[], originalPathname: string, routeBundleNames: string[] ]; diff --git a/packages/qwik-router/src/runtime/src/routing.ts b/packages/qwik-router/src/runtime/src/routing.ts index f8bceed96e2..a272ce2c968 100644 --- a/packages/qwik-router/src/runtime/src/routing.ts +++ b/packages/qwik-router/src/runtime/src/routing.ts @@ -30,12 +30,12 @@ export const loadRoute = async ( if (!params) { continue; } - const loaders = routeData[RouteDataProp.Loaders]; + const moduleLoaders = routeData[RouteDataProp.ModuleLoaders]; const routeBundleNames = routeData[RouteDataProp.RouteBundleNames]; - const modules: RouteModule[] = new Array(loaders.length); + const modules: RouteModule[] = new Array(moduleLoaders.length); const pendingLoads: Promise[] = []; - loaders.forEach((moduleLoader, i) => { + moduleLoaders.forEach((moduleLoader, i) => { loadModule( moduleLoader, pendingLoads, diff --git a/packages/qwik-router/src/runtime/src/server-functions.ts b/packages/qwik-router/src/runtime/src/server-functions.ts index 323486d30a1..32e6c196b48 100644 --- a/packages/qwik-router/src/runtime/src/server-functions.ts +++ b/packages/qwik-router/src/runtime/src/server-functions.ts @@ -227,6 +227,7 @@ export const routeLoaderQrl = (( loader.__validators = validators; loader.__id = id; loader.__serializationStrategy = serializationStrategy; + loader.__expires = -1; // -1 means no expiration Object.freeze(loader); return loader; diff --git a/packages/qwik-router/src/runtime/src/types.ts b/packages/qwik-router/src/runtime/src/types.ts index fb0a0c8e4a2..83d3c835734 100644 --- a/packages/qwik-router/src/runtime/src/types.ts +++ b/packages/qwik-router/src/runtime/src/types.ts @@ -252,22 +252,34 @@ export interface ContentHeading { export type ContentModuleLoader = () => Promise; export type EndpointModuleLoader = () => Promise; -export type ModuleLoader = ContentModuleLoader | EndpointModuleLoader; +// export type RouteLoaderLoader = () => Promise; +export type ModuleLoader = ContentModuleLoader | EndpointModuleLoader; //| RouteLoaderLoader; export type MenuModuleLoader = () => Promise; +export type RouteLoaderInfo = [qrl: string, expires: number, live?: true]; /** @public */ export type RouteData = - | [routeName: string, loaders: ModuleLoader[]] + // SSR side | [ routeName: string, - loaders: ModuleLoader[], + moduleLoaders: ModuleLoader[], + // , routeLoaderModules: ModuleLoader[] + ] + // Client side + | [ + routeName: string, + moduleLoaders: ModuleLoader[], + // routeLoaderModules: ModuleLoader[], + /** The actual src/routes pathname, not rewritten */ originalPathname: string, + /** The bundles that contain the loaders */ routeBundleNames: string[], ]; export const enum RouteDataProp { RouteName, - Loaders, + ModuleLoaders, + // RouteLoaderModules, OriginalPathname, RouteBundleNames, } @@ -812,6 +824,8 @@ export interface LoaderInternal extends Loader { __id: string; __validators: DataValidator[] | undefined; __serializationStrategy: SerializationStrategy; + __expires: number; + // __live: boolean; (): LoaderSignal; } diff --git a/packages/qwik-router/src/ssg/worker-thread.ts b/packages/qwik-router/src/ssg/worker-thread.ts index 4c1beb02120..33c7b684975 100644 --- a/packages/qwik-router/src/ssg/worker-thread.ts +++ b/packages/qwik-router/src/ssg/worker-thread.ts @@ -1,6 +1,10 @@ import { _serialize } from '@qwik.dev/core/internal'; import type { ServerRequestEvent } from '@qwik.dev/router/middleware/request-handler'; -import { RequestEvShareQData, requestHandler } from '@qwik.dev/router/middleware/request-handler'; +import { + RedirectMessage, + RequestEvShareQData, + requestHandler, +} from '@qwik.dev/router/middleware/request-handler'; import { WritableStream } from 'node:stream/web'; import { pathToFileURL } from 'node:url'; import type { ClientPageData } from '../runtime/src/types'; @@ -152,6 +156,7 @@ async function workerRender( }); } } catch (e: any) { + console.error('Error during stream start', staticRoute.pathname, e); routeWriter = null; result.error = { message: String(e), @@ -166,6 +171,7 @@ async function workerRender( routeWriter.write(Buffer.from(chunk.buffer)); } } catch (e: any) { + console.error('Error during stream write', staticRoute.pathname, e); routeWriter = null; result.error = { message: String(e), @@ -219,6 +225,7 @@ async function workerRender( await Promise.all(writePromises); } } catch (e: any) { + console.error('Error during stream close', staticRoute.pathname, e); routeWriter = null; result.error = { message: String(e), @@ -242,8 +249,13 @@ async function workerRender( }); } }) - .then((e) => { + .then((e: any) => { if (e !== undefined) { + if (e instanceof RedirectMessage) { + // TODO We should render a html page for redirects too + // that would require refactoring redirects + return; + } if (e instanceof Error) { result.error = { message: e.message, @@ -255,6 +267,7 @@ async function workerRender( stack: undefined, }; } + console.error('Error during request handling', staticRoute.pathname, e); } }) .finally(() => { @@ -264,6 +277,7 @@ async function workerRender( pendingPromises.add(promise); } catch (e: any) { + console.error('Error during render', staticRoute.pathname, e); if (e instanceof Error) { result.error = { message: e.message, diff --git a/packages/qwik-router/src/utils/format.ts b/packages/qwik-router/src/utils/format.ts index 8bf6f60fab3..6030aa1e3ea 100644 --- a/packages/qwik-router/src/utils/format.ts +++ b/packages/qwik-router/src/utils/format.ts @@ -1,4 +1,4 @@ -import type { BuildContext } from '../buildtime/types'; +import type { RoutingContext } from '../buildtime/types'; export function toTitleCase(str: string) { return str.replace(/\w\S*/g, (txt) => { @@ -6,14 +6,14 @@ export function toTitleCase(str: string) { }); } -export function addError(ctx: BuildContext, e: any) { +export function addError(ctx: RoutingContext, e: any) { ctx.diagnostics.push({ type: 'error', message: e ? String(e.stack || e) : 'Error', }); } -export function addWarning(ctx: BuildContext, message: string) { +export function addWarning(ctx: RoutingContext, message: string) { ctx.diagnostics.push({ type: 'warn', message: String(message), diff --git a/packages/qwik-router/src/utils/fs.ts b/packages/qwik-router/src/utils/fs.ts index 4ee726f340c..df49fe345ae 100644 --- a/packages/qwik-router/src/utils/fs.ts +++ b/packages/qwik-router/src/utils/fs.ts @@ -79,7 +79,7 @@ export function normalizePath(path: string) { export function normalizePathSlash(path: string) { // MIT https://github.com/sindresorhus/slash/blob/main/license // Convert Windows backslash paths to slash paths: foo\\bar ➔ foo/bar - const isExtendedLengthPath = /^\\\\\?\\/.test(path); + const isExtendedLengthPath = path.startsWith('\\\\?\\'); const hasNonAscii = /[^\u0000-\u0080]+/.test(path); // eslint-disable-line no-control-regex if (isExtendedLengthPath || hasNonAscii) { @@ -139,17 +139,17 @@ export function createFileId( const PAGE_MODULE_EXTS: { [type: string]: boolean } = { '.tsx': true, '.jsx': true, -}; +} as const; const MODULE_EXTS: { [type: string]: boolean } = { '.ts': true, '.js': true, -}; +} as const; const MARKDOWN_EXTS: { [type: string]: boolean } = { '.md': true, '.mdx': true, -}; +} as const; export function isIndexModule(extlessName: string) { return /^index(|!|@.+)$/.test(extlessName); @@ -192,13 +192,7 @@ export function isEntryName(extlessName: string) { } export function isErrorName(extlessName: string) { - try { - const statusCode = parseInt(extlessName, 10); - return statusCode >= 400 && statusCode <= 599; - } catch (e) { - // - } - return false; + return /^[45][0-9]{2}$/.test(extlessName); } export function isGroupedLayoutName(dirName: string, warn = true) { diff --git a/packages/qwik-router/src/utils/test-suite.ts b/packages/qwik-router/src/utils/test-suite.ts index df64a9b05fe..a4a6e3669f2 100644 --- a/packages/qwik-router/src/utils/test-suite.ts +++ b/packages/qwik-router/src/utils/test-suite.ts @@ -3,12 +3,12 @@ import { tmpdir } from 'node:os'; import { join } from 'node:path'; import { fileURLToPath } from 'node:url'; import { assert, beforeAll, test, type TestAPI } from 'vitest'; -import { build } from '../buildtime/build'; +import { parseRoutesDir } from '../buildtime/build'; import { createBuildContext } from '../buildtime/context'; import type { - BuildContext, - BuildLayout, - BuildRoute, + RoutingContext, + BuiltLayout, + BuiltRoute, MarkdownAttributes, PluginOptions, } from '../buildtime/types'; @@ -39,7 +39,7 @@ export function testAppSuite( title: string, userOpts?: PluginOptions ): TestAPI { - let buildCtx: BuildContext; + let buildCtx: RoutingContext; beforeAll(async (testCtx) => { const testAppRootDir = join( @@ -58,7 +58,7 @@ export function testAppSuite( assert.equal(normalizePath(testAppRootDir), ctx.rootDir); assert.equal(normalizePath(join(testAppRootDir, 'src', 'routes')), ctx.opts.routesDir); - await build(ctx); + await parseRoutesDir(ctx); assert.deepEqual(ctx.diagnostics, []); @@ -98,12 +98,12 @@ export function testAppSuite( } export interface TestAppBuildContext extends TestContext { - assertRoute: (pathname: string) => BuildRoute; - assertLayout: (id: string) => BuildLayout; + assertRoute: (pathname: string) => BuiltRoute; + assertLayout: (id: string) => BuiltLayout; } export interface TestContext { - ctx: BuildContext; + ctx: RoutingContext; filePath: string; attrs: MarkdownAttributes; } diff --git a/packages/qwik/package.json b/packages/qwik/package.json index efbc1fee5f2..33a1d69a921 100644 --- a/packages/qwik/package.json +++ b/packages/qwik/package.json @@ -10,7 +10,7 @@ "dependencies": { "csstype": "^3.1.3", "launch-editor": "^2.11.1", - "rollup": "^4.52.3" + "rollup": "^4.52.4" }, "devDependencies": { "@croct/json5-parser": "0.2.0", diff --git a/packages/qwik/src/optimizer/core/src/parse.rs b/packages/qwik/src/optimizer/core/src/parse.rs index 5e95c3ba8a5..0392eba6dfe 100644 --- a/packages/qwik/src/optimizer/core/src/parse.rs +++ b/packages/qwik/src/optimizer/core/src/parse.rs @@ -388,6 +388,7 @@ pub fn transform_code(config: TransformCodeOptions) -> Result QwikTransform<'a> { true } + // TODO export segment data for the noop qrl fn create_noop_qrl( &mut self, symbol_name: &swc_atoms::Atom, diff --git a/packages/qwik/src/optimizer/src/plugins/plugin.ts b/packages/qwik/src/optimizer/src/plugins/plugin.ts index a4487977c1e..6aa1e7754e3 100644 --- a/packages/qwik/src/optimizer/src/plugins/plugin.ts +++ b/packages/qwik/src/optimizer/src/plugins/plugin.ts @@ -818,6 +818,7 @@ export function createQwikPlugin(optimizerOptions: OptimizerOptions = {}) { } const deps = new Set(); for (const mod of newOutput.modules) { + // TODO handle noop modules if (mod !== module) { const key = normalizePath(path.join(srcDir, mod.path)); debug(`transform(${count})`, `segment ${key}`, mod.segment!.displayName); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 71f2d009f7a..973c953d29b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,7 +9,7 @@ overrides: '@builder.io/qwik-city': npm:@qwik.dev/router '@types/estree': 1.0.8 prettier: 3.6.2 - typescript: 5.9.2 + typescript: 5.9.3 vfile: 6.0.3 patchedDependencies: @@ -111,10 +111,10 @@ importers: version: 1.0.2 '@vitejs/plugin-basic-ssl': specifier: 2.1.0 - version: 2.1.0(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + version: 2.1.0(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@vitest/coverage-v8': specifier: 3.2.4 - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) all-contributors-cli: specifier: 6.26.1 version: 6.26.1 @@ -188,8 +188,8 @@ importers: specifier: 2.4.2 version: 2.4.2 rollup: - specifier: 4.52.3 - version: 4.52.3 + specifier: 4.52.4 + version: 4.52.4 semver: specifier: 7.7.2 version: 7.7.2 @@ -207,10 +207,10 @@ importers: version: 3.3.2 syncpack: specifier: 13.0.4 - version: 13.0.4(typescript@5.9.2) + version: 13.0.4(typescript@5.9.3) terser: - specifier: 5.43.1 - version: 5.43.1 + specifier: 5.44.0 + version: 5.44.0 tmp: specifier: 0.2.5 version: 0.2.5 @@ -218,32 +218,32 @@ importers: specifier: 1.2.2 version: 1.2.2 tsx: - specifier: 4.20.5 - version: 4.20.5 + specifier: 4.20.6 + version: 4.20.6 typescript: - specifier: 5.9.2 - version: 5.9.2 + specifier: 5.9.3 + version: 5.9.3 typescript-eslint: - specifier: 8.41.0 - version: 8.41.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.2) + specifier: 8.45.0 + version: 8.45.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.3) vfile: specifier: 6.0.3 version: 6.0.3 vite: - specifier: 7.1.7 - version: 7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + specifier: 7.1.9 + version: 7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) vite-imagetools: - specifier: 8.0.0 - version: 8.0.0(rollup@4.52.3) + specifier: 9.0.0 + version: 9.0.0(rollup@4.52.4) vite-plugin-dts: specifier: 4.5.4 - version: 4.5.4(@types/node@24.3.0)(rollup@4.52.3)(typescript@5.9.2)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + version: 4.5.4(@types/node@24.3.0)(rollup@4.52.4)(typescript@5.9.3)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vite-tsconfig-paths: specifier: 5.1.4 - version: 5.1.4(typescript@5.9.2)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + version: 5.1.4(typescript@5.9.3)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) watchlist: specifier: 0.3.1 version: 0.3.1 @@ -314,10 +314,10 @@ importers: version: 4.14.3 '@builder.io/qwik': specifier: npm:@qwik.dev/core@* - version: '@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))' + version: '@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))' '@builder.io/qwik-city': specifier: npm:@qwik.dev/router - version: '@qwik.dev/router@2.0.0-beta.11(@qwik.dev/core@packages+qwik)(acorn@8.15.0)(rollup@4.52.3)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))' + version: '@qwik.dev/router@2.0.0-beta.11(@qwik.dev/core@packages+qwik)(acorn@8.15.0)(rollup@4.52.4)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))' '@emotion/react': specifier: 11.14.0 version: 11.14.0(@types/react@19.1.13)(react@19.1.1) @@ -326,7 +326,7 @@ importers: version: 11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1) '@modular-forms/qwik': specifier: 0.29.1 - version: 0.29.1(@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(@qwik.dev/router@2.0.0-beta.11(@qwik.dev/core@packages+qwik)(acorn@8.15.0)(rollup@4.52.3)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(typescript@5.9.2) + version: 0.29.1(@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(@qwik.dev/router@2.0.0-beta.11(@qwik.dev/core@packages+qwik)(acorn@8.15.0)(rollup@4.52.4)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(typescript@5.9.3) '@mui/material': specifier: 7.3.2 version: 7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) @@ -338,7 +338,7 @@ importers: version: 8.11.3(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@mui/material@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.3.2(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react@19.1.1))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@qwik-ui/headless': specifier: 0.6.7 - version: 0.6.7(@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))) + version: 0.6.7(@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))) '@qwik.dev/core': specifier: workspace:* version: link:../qwik @@ -352,8 +352,8 @@ importers: specifier: workspace:* version: link:../qwik-router '@rolldown/browser': - specifier: 1.0.0-beta.36 - version: 1.0.0-beta.36 + specifier: 1.0.0-beta.41 + version: 1.0.0-beta.41 '@shikijs/colorized-brackets': specifier: 3.12.2 version: 3.12.2 @@ -377,7 +377,7 @@ importers: version: 2.53.0 '@tailwindcss/vite': specifier: 4.1.12 - version: 4.1.12(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + version: 4.1.12(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@types/leaflet': specifier: 1.9.20 version: 1.9.20 @@ -395,7 +395,7 @@ importers: version: 0.0.42 '@unpic/qwik': specifier: 0.0.38 - version: 0.0.38(@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))) + version: 0.0.38(@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))) algoliasearch: specifier: 4.16.0 version: 4.16.0 @@ -425,7 +425,7 @@ importers: version: 1.30.0 puppeteer: specifier: 22.13.1 - version: 22.13.1(typescript@5.9.2) + version: 22.13.1(typescript@5.9.3) qwik-image: specifier: 0.0.16 version: 0.0.16 @@ -445,26 +445,26 @@ importers: specifier: 4.1.12 version: 4.1.12 terser: - specifier: 5.43.1 - version: 5.43.1 + specifier: 5.44.0 + version: 5.44.0 tsm: specifier: 2.3.0 version: 2.3.0 typescript: - specifier: 5.9.2 - version: 5.9.2 + specifier: 5.9.3 + version: 5.9.3 valibot: specifier: 0.33.3 version: 0.33.3 vite: - specifier: 7.1.7 - version: 7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + specifier: 7.1.9 + version: 7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) vite-plugin-inspect: specifier: 11.3.3 - version: 11.3.3(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + version: 11.3.3(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vite-tsconfig-paths: specifier: 5.1.4 - version: 5.1.4(typescript@5.9.2)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + version: 5.1.4(typescript@5.9.3)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) wrangler: specifier: 3.65.1 version: 3.65.1 @@ -473,7 +473,7 @@ importers: dependencies: '@typescript-eslint/utils': specifier: ^8.38.0 - version: 8.45.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.2) + version: 8.45.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.3) jsx-ast-utils: specifier: ^3.3.5 version: 3.3.5 @@ -489,7 +489,7 @@ importers: version: 1.0.8 '@typescript-eslint/rule-tester': specifier: 8.38.0 - version: 8.38.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.2) + version: 8.38.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.3) redent: specifier: 4.0.0 version: 4.0.0 @@ -504,7 +504,7 @@ importers: version: 0.15.15 '@modular-forms/qwik': specifier: ^0.29.1 - version: 0.29.1(@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(@qwik.dev/router@2.0.0-beta.11(@qwik.dev/core@packages+qwik)(acorn@8.15.0)(rollup@4.52.3)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(typescript@5.9.2) + version: 0.29.1(@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(@qwik.dev/router@2.0.0-beta.11(@qwik.dev/core@packages+qwik)(acorn@8.15.0)(rollup@4.52.4)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(typescript@5.9.3) '@typescript/analyze-trace': specifier: ^0.10.1 version: 0.10.1 @@ -523,10 +523,10 @@ importers: devDependencies: '@builder.io/qwik': specifier: npm:@qwik.dev/core@* - version: '@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))' + version: '@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))' '@builder.io/qwik-city': specifier: npm:@qwik.dev/router - version: '@qwik.dev/router@2.0.0-beta.11(@qwik.dev/core@packages+qwik)(acorn@8.15.0)(rollup@4.52.3)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))' + version: '@qwik.dev/router@2.0.0-beta.11(@qwik.dev/core@packages+qwik)(acorn@8.15.0)(rollup@4.52.4)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))' '@eslint/js': specifier: 9.33.0 version: 9.33.0 @@ -541,7 +541,7 @@ importers: version: link:../qwik-router '@tailwindcss/vite': specifier: 4.1.12 - version: 4.1.12(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + version: 4.1.12(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@types/density-clustering': specifier: 1.3.3 version: 1.3.3 @@ -562,7 +562,7 @@ importers: version: 16.3.0 netlify-cli: specifier: 23.7.3 - version: 23.7.3(@types/express@5.0.3)(@types/node@24.3.0)(picomatch@4.0.3)(rollup@4.52.3) + version: 23.7.3(@types/express@5.0.3)(@types/node@24.3.0)(picomatch@4.0.3)(rollup@4.52.4) postcss: specifier: 8.5.6 version: 8.5.6 @@ -576,20 +576,20 @@ importers: specifier: 4.1.12 version: 4.1.12 typescript: - specifier: 5.9.2 - version: 5.9.2 + specifier: 5.9.3 + version: 5.9.3 typescript-eslint: - specifier: 8.41.0 - version: 8.41.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.2) + specifier: 8.45.0 + version: 8.45.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.3) vite: - specifier: 7.1.7 - version: 7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + specifier: 7.1.9 + version: 7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) vite-tsconfig-paths: specifier: 5.1.4 - version: 5.1.4(typescript@5.9.2)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + version: 5.1.4(typescript@5.9.3)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) zod: specifier: 3.25.48 version: 3.25.48 @@ -603,8 +603,8 @@ importers: specifier: ^2.11.1 version: 2.11.1 rollup: - specifier: ^4.52.3 - version: 4.52.3 + specifier: ^4.52.4 + version: 4.52.4 devDependencies: '@croct/json5-parser': specifier: 0.2.0 @@ -635,7 +635,7 @@ importers: version: 23.0.0 vitest: specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) packages/qwik-dom: {} @@ -657,11 +657,11 @@ importers: specifier: 19.1.1 version: 19.1.1(react@19.1.1) typescript: - specifier: 5.9.2 - version: 5.9.2 + specifier: 5.9.3 + version: 5.9.3 vite: - specifier: 7.1.7 - version: 7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + specifier: 7.1.9 + version: 7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) packages/qwik-router: dependencies: @@ -720,8 +720,8 @@ importers: specifier: ^3.3.2 version: 3.3.2 typescript: - specifier: 5.9.2 - version: 5.9.2 + specifier: 5.9.3 + version: 5.9.3 unified: specifier: ^11.0.5 version: 11.0.5 @@ -730,13 +730,13 @@ importers: version: 5.0.0 valibot: specifier: '>=0.36.0 <2' - version: 1.1.0(typescript@5.9.2) + version: 1.1.0(typescript@5.9.3) vfile: specifier: 6.0.3 version: 6.0.3 vite-imagetools: - specifier: ^8.0.0 - version: 8.0.0(rollup@4.52.3) + specifier: ^9.0.0 + version: 9.0.0(rollup@4.52.4) yaml: specifier: ^2.8.1 version: 2.8.1 @@ -2324,8 +2324,8 @@ packages: '@napi-rs/triples@1.2.0': resolution: {integrity: sha512-HAPjR3bnCsdXBsATpDIP5WCrw0JcACwhhrwIAQhiR46n+jm+a2F8kBsfseAuWtSyQ+H3Yebt2k43B5dy+04yMA==} - '@napi-rs/wasm-runtime@1.0.5': - resolution: {integrity: sha512-TBr9Cf9onSAS2LQ2+QHx6XcC6h9+RIzJgbqG3++9TUZSH204AwEy5jg3BTQ0VATsyoGj4ee49tN/y6rvaOOtcg==} + '@napi-rs/wasm-runtime@1.0.6': + resolution: {integrity: sha512-DXj75ewm11LIWUk198QSKUTxjyRjsBwk09MuMk5DGK+GDUtyPhhEHOGP/Xwwj3DjQXXkivoBirmOnKrLfc0+9g==} '@neon-rs/load@0.0.4': resolution: {integrity: sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==} @@ -2665,10 +2665,6 @@ packages: resolution: {integrity: sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==} engines: {node: '>=8.0.0'} - '@oxc-project/runtime@0.87.0': - resolution: {integrity: sha512-ky2Hqi2q/uGX36UfY79zxMbUqiNIl1RyKKVJfFenG70lbn+/fcaKBVTbhmUwn8a2wPyv2gNtDQxuDytbKX9giQ==} - engines: {node: '>=6.9.0'} - '@panva/hkdf@1.2.1': resolution: {integrity: sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==} @@ -2832,8 +2828,8 @@ packages: '@qwik.dev/core': ^2.0.0-beta.11 vite: '>=5 <8' - '@rolldown/browser@1.0.0-beta.36': - resolution: {integrity: sha512-IMG0sSqiM1DT/fxRVeUTu02szosEUH0eywp5LMedsA4BuDYGQjBZi/ywnkeQGp31cPvQRAxDwljOXorq+gGg4w==} + '@rolldown/browser@1.0.0-beta.41': + resolution: {integrity: sha512-JWWFGh4p86zVAuDcUrdbcN1PLEcpu4ZXkzE5BOF20RWAI5na51IIf2I62JCgL8rGhwzhoJIgfwKDxjgvKI3qTA==} hasBin: true '@rollup/pluginutils@5.3.0': @@ -2845,113 +2841,113 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.52.3': - resolution: {integrity: sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw==} + '@rollup/rollup-android-arm-eabi@4.52.4': + resolution: {integrity: sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.52.3': - resolution: {integrity: sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw==} + '@rollup/rollup-android-arm64@4.52.4': + resolution: {integrity: sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.52.3': - resolution: {integrity: sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg==} + '@rollup/rollup-darwin-arm64@4.52.4': + resolution: {integrity: sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.52.3': - resolution: {integrity: sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A==} + '@rollup/rollup-darwin-x64@4.52.4': + resolution: {integrity: sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.52.3': - resolution: {integrity: sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ==} + '@rollup/rollup-freebsd-arm64@4.52.4': + resolution: {integrity: sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.52.3': - resolution: {integrity: sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A==} + '@rollup/rollup-freebsd-x64@4.52.4': + resolution: {integrity: sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.52.3': - resolution: {integrity: sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA==} + '@rollup/rollup-linux-arm-gnueabihf@4.52.4': + resolution: {integrity: sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.52.3': - resolution: {integrity: sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA==} + '@rollup/rollup-linux-arm-musleabihf@4.52.4': + resolution: {integrity: sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.52.3': - resolution: {integrity: sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ==} + '@rollup/rollup-linux-arm64-gnu@4.52.4': + resolution: {integrity: sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.52.3': - resolution: {integrity: sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw==} + '@rollup/rollup-linux-arm64-musl@4.52.4': + resolution: {integrity: sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.52.3': - resolution: {integrity: sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg==} + '@rollup/rollup-linux-loong64-gnu@4.52.4': + resolution: {integrity: sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.52.3': - resolution: {integrity: sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw==} + '@rollup/rollup-linux-ppc64-gnu@4.52.4': + resolution: {integrity: sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.52.3': - resolution: {integrity: sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg==} + '@rollup/rollup-linux-riscv64-gnu@4.52.4': + resolution: {integrity: sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.52.3': - resolution: {integrity: sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg==} + '@rollup/rollup-linux-riscv64-musl@4.52.4': + resolution: {integrity: sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.52.3': - resolution: {integrity: sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg==} + '@rollup/rollup-linux-s390x-gnu@4.52.4': + resolution: {integrity: sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.52.3': - resolution: {integrity: sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA==} + '@rollup/rollup-linux-x64-gnu@4.52.4': + resolution: {integrity: sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.52.3': - resolution: {integrity: sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw==} + '@rollup/rollup-linux-x64-musl@4.52.4': + resolution: {integrity: sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==} cpu: [x64] os: [linux] - '@rollup/rollup-openharmony-arm64@4.52.3': - resolution: {integrity: sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA==} + '@rollup/rollup-openharmony-arm64@4.52.4': + resolution: {integrity: sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.52.3': - resolution: {integrity: sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA==} + '@rollup/rollup-win32-arm64-msvc@4.52.4': + resolution: {integrity: sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.52.3': - resolution: {integrity: sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g==} + '@rollup/rollup-win32-ia32-msvc@4.52.4': + resolution: {integrity: sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.52.3': - resolution: {integrity: sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ==} + '@rollup/rollup-win32-x64-gnu@4.52.4': + resolution: {integrity: sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.52.3': - resolution: {integrity: sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA==} + '@rollup/rollup-win32-x64-msvc@4.52.4': + resolution: {integrity: sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==} cpu: [x64] os: [win32] @@ -3360,45 +3356,39 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.41.0': - resolution: {integrity: sha512-8fz6oa6wEKZrhXWro/S3n2eRJqlRcIa6SlDh59FXJ5Wp5XRZ8B9ixpJDcjadHq47hMx0u+HW6SNa6LjJQ6NLtw==} + '@typescript-eslint/eslint-plugin@8.45.0': + resolution: {integrity: sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.41.0 + '@typescript-eslint/parser': ^8.45.0 eslint: ^8.57.0 || ^9.0.0 - typescript: 5.9.2 + typescript: 5.9.3 '@typescript-eslint/parser@8.38.0': resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: 5.9.2 + typescript: 5.9.3 - '@typescript-eslint/parser@8.41.0': - resolution: {integrity: sha512-gTtSdWX9xiMPA/7MV9STjJOOYtWwIJIYxkQxnSV1U3xcE+mnJSH3f6zI0RYP+ew66WSlZ5ed+h0VCxsvdC1jJg==} + '@typescript-eslint/parser@8.45.0': + resolution: {integrity: sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: 5.9.2 + typescript: 5.9.3 '@typescript-eslint/project-service@8.38.0': resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: 5.9.2 - - '@typescript-eslint/project-service@8.41.0': - resolution: {integrity: sha512-b8V9SdGBQzQdjJ/IO3eDifGpDBJfvrNTp2QD9P2BeqWTGrRibgfgIlBSw6z3b6R7dPzg752tOs4u/7yCLxksSQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: 5.9.2 + typescript: 5.9.3 '@typescript-eslint/project-service@8.45.0': resolution: {integrity: sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: 5.9.2 + typescript: 5.9.3 '@typescript-eslint/rule-tester@8.38.0': resolution: {integrity: sha512-uoGpIY8WdJw1KOnUTZTmp99k+DtpBJEKuGk/asSY6GfWz7vlF84p/EpTL6jraD0hW/3mkU/ipd5Nq0UxfIidsw==} @@ -3410,10 +3400,6 @@ packages: resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.41.0': - resolution: {integrity: sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.45.0': resolution: {integrity: sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3422,35 +3408,25 @@ packages: resolution: {integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: 5.9.2 - - '@typescript-eslint/tsconfig-utils@8.41.0': - resolution: {integrity: sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: 5.9.2 + typescript: 5.9.3 '@typescript-eslint/tsconfig-utils@8.45.0': resolution: {integrity: sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: 5.9.2 + typescript: 5.9.3 - '@typescript-eslint/type-utils@8.41.0': - resolution: {integrity: sha512-63qt1h91vg3KsjVVonFJWjgSK7pZHSQFKH6uwqxAH9bBrsyRhO6ONoKyXxyVBzG1lJnFAJcKAcxLS54N1ee1OQ==} + '@typescript-eslint/type-utils@8.45.0': + resolution: {integrity: sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: 5.9.2 + typescript: 5.9.3 '@typescript-eslint/types@8.38.0': resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.41.0': - resolution: {integrity: sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.45.0': resolution: {integrity: sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3459,49 +3435,32 @@ packages: resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: 5.9.2 - - '@typescript-eslint/typescript-estree@8.41.0': - resolution: {integrity: sha512-D43UwUYJmGhuwHfY7MtNKRZMmfd8+p/eNSfFe6tH5mbVDto+VQCayeAt35rOx3Cs6wxD16DQtIKw/YXxt5E0UQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: 5.9.2 + typescript: 5.9.3 '@typescript-eslint/typescript-estree@8.45.0': resolution: {integrity: sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: 5.9.2 + typescript: 5.9.3 '@typescript-eslint/utils@8.38.0': resolution: {integrity: sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: 5.9.2 - - '@typescript-eslint/utils@8.41.0': - resolution: {integrity: sha512-udbCVstxZ5jiPIXrdH+BZWnPatjlYwJuJkDA4Tbo3WyYLh8NvB+h/bKeSZHDOFKfphsZYJQqaFtLeXEqurQn1A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: 5.9.2 + typescript: 5.9.3 '@typescript-eslint/utils@8.45.0': resolution: {integrity: sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: 5.9.2 + typescript: 5.9.3 '@typescript-eslint/visitor-keys@8.38.0': resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.41.0': - resolution: {integrity: sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.45.0': resolution: {integrity: sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3598,7 +3557,7 @@ packages: '@vue/language-core@2.2.0': resolution: {integrity: sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==} peerDependencies: - typescript: 5.9.2 + typescript: 5.9.3 peerDependenciesMeta: typescript: optional: true @@ -4384,7 +4343,7 @@ packages: resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} engines: {node: '>=14'} peerDependencies: - typescript: 5.9.2 + typescript: 5.9.3 peerDependenciesMeta: typescript: optional: true @@ -4661,13 +4620,13 @@ packages: resolution: {integrity: sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw==} engines: {node: '>=18'} peerDependencies: - typescript: 5.9.2 + typescript: 5.9.3 detective-vue2@2.2.0: resolution: {integrity: sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA==} engines: {node: '>=18'} peerDependencies: - typescript: 5.9.2 + typescript: 5.9.3 dettle@1.0.5: resolution: {integrity: sha512-ZVyjhAJ7sCe1PNXEGveObOH9AC8QvMga3HJIghHawtG7mE4K5pW9nz/vDGAr/U7a3LWgdOzEE7ac9MURnyfaTA==} @@ -5924,6 +5883,10 @@ packages: resolution: {integrity: sha512-5i4Cx5vrBpVdvT3gvkSGAzzkUCrg/5Jm54UwWbDUSTMp4AjDI4IxiC6dI4+X1PRJYi6eKqWuE+684NJY2iOn3w==} engines: {node: '>=18.0.0'} + imagetools-core@9.0.0: + resolution: {integrity: sha512-LAU2iVl6MuLbARLrZFEOrgqUFGmHij0FqqOR1/mMndUzJoPz2BU4gCXUhjikgwwmfhBPa/1szwiliUy//ZWafw==} + engines: {node: '>=20.0.0'} + import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} @@ -7714,7 +7677,7 @@ packages: puppeteer@22.13.1: resolution: {integrity: sha512-PwXLDQK5u83Fm5A7TGMq+9BR7iHDJ8a3h21PSsh/E6VfhxiKYkU7+tvGZNSCap6k3pCNDd9oNteVBEctcBalmQ==} engines: {node: '>=18'} - deprecated: < 24.10.2 is no longer supported + deprecated: < 24.15.0 is no longer supported hasBin: true pure-rand@6.1.0: @@ -8001,8 +7964,8 @@ packages: rollup-pluginutils@2.8.2: resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} - rollup@4.52.3: - resolution: {integrity: sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A==} + rollup@4.52.4: + resolution: {integrity: sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -8503,8 +8466,8 @@ packages: resolution: {integrity: sha512-lk+vH+MccxNqgVqSnkMVKx4VLJfnLjDBGzH16JVZjKE2DoxP57s6/vt6JmXV5I3jBcfGrxNrYtC+mPtU7WJztA==} engines: {node: '>=18'} - terser@5.43.1: - resolution: {integrity: sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==} + terser@5.44.0: + resolution: {integrity: sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==} engines: {node: '>=10'} hasBin: true @@ -8634,7 +8597,7 @@ packages: resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} engines: {node: '>=18.12'} peerDependencies: - typescript: 5.9.2 + typescript: 5.9.3 ts-morph@23.0.0: resolution: {integrity: sha512-FcvFx7a9E8TUe6T3ShihXJLiJOiqyafzFKUO4aqIHDUCIvADdGNShcbc2W5PMr3LerXRv7mafvFZ9lRENxJmug==} @@ -8646,7 +8609,7 @@ packages: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' '@types/node': '*' - typescript: 5.9.2 + typescript: 5.9.3 peerDependenciesMeta: '@swc/core': optional: true @@ -8661,7 +8624,7 @@ packages: engines: {node: ^18 || >=20} hasBin: true peerDependencies: - typescript: 5.9.2 + typescript: 5.9.3 peerDependenciesMeta: typescript: optional: true @@ -8680,8 +8643,8 @@ packages: engines: {node: '>=12'} hasBin: true - tsx@4.20.5: - resolution: {integrity: sha512-+wKjMNU9w/EaQayHXb7WA7ZaHY6hN8WgfvHNQ3t1PnU91/7O8TcTnIhCDYTZwnt8JsO9IBqZ30Ln1r7pPF52Aw==} + tsx@4.20.6: + resolution: {integrity: sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==} engines: {node: '>=18.0.0'} hasBin: true @@ -8717,15 +8680,15 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript-eslint@8.41.0: - resolution: {integrity: sha512-n66rzs5OBXW3SFSnZHr2T685q1i4ODm2nulFJhMZBotaTavsS8TrI3d7bDlRSs9yWo7HmyWrN9qDu14Qv7Y0Dw==} + typescript-eslint@8.45.0: + resolution: {integrity: sha512-qzDmZw/Z5beNLUrXfd0HIW6MzIaAV5WNDxmMs9/3ojGOpYavofgNAAD/nC6tGV2PczIi0iw8vot2eAe/sBn7zg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: 5.9.2 + typescript: 5.9.3 - typescript@5.9.2: - resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} hasBin: true @@ -8955,7 +8918,7 @@ packages: valibot@1.1.0: resolution: {integrity: sha512-Nk8lX30Qhu+9txPYTwM0cFlWLdPFsFr6LblzqIySfbZph9+BFsAHsNvHOymEviUepeIW6KFHzpX8TKhbptBXXw==} peerDependencies: - typescript: 5.9.2 + typescript: 5.9.3 peerDependenciesMeta: typescript: optional: true @@ -8995,6 +8958,10 @@ packages: resolution: {integrity: sha512-3bkkA0vQ57tMynsetY2j4QhCnZKrxFv0RScaZipzYgkjkkUBEmZL5UIVHOUHhVMfwCetAeM9e3DNwyPK1ff4xg==} engines: {node: '>=18.0.0'} + vite-imagetools@9.0.0: + resolution: {integrity: sha512-nxTMh7+PkZlOinV1DwgcDAill4+khOF29yQVqYEzleyKEb6qunRDYBYaT9TmGfx4l1fk2xSvDNgbiTYyiekHAw==} + engines: {node: '>=20.0.0'} + vite-node@3.2.4: resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -9003,7 +8970,7 @@ packages: vite-plugin-dts@4.5.4: resolution: {integrity: sha512-d4sOM8M/8z7vRXHHq/ebbblfaxENjogAAekcfcDCCwAyvGqnPrc7f4NZbvItS+g4WTgerW0xDwSz5qz11JT3vg==} peerDependencies: - typescript: 5.9.2 + typescript: 5.9.3 vite: '*' peerDependenciesMeta: vite: @@ -9027,8 +8994,8 @@ packages: vite: optional: true - vite@7.1.7: - resolution: {integrity: sha512-VbA8ScMvAISJNJVbRDTJdCwqQoAareR/wutevKanhR2/1EkoXVZVkkORaYm/tNVCjP/UDTKtcw3bAkwOUdedmA==} + vite@7.1.9: + resolution: {integrity: sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -10682,7 +10649,7 @@ snapshots: resolve: 1.22.10 semver: 7.5.4 source-map: 0.6.1 - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - '@types/node' @@ -10695,12 +10662,12 @@ snapshots: '@microsoft/tsdoc@0.15.1': {} - '@modular-forms/qwik@0.29.1(@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(@qwik.dev/router@2.0.0-beta.11(@qwik.dev/core@packages+qwik)(acorn@8.15.0)(rollup@4.52.3)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(typescript@5.9.2)': + '@modular-forms/qwik@0.29.1(@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(@qwik.dev/router@2.0.0-beta.11(@qwik.dev/core@packages+qwik)(acorn@8.15.0)(rollup@4.52.4)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(typescript@5.9.3)': dependencies: - '@builder.io/qwik': '@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))' - '@builder.io/qwik-city': '@qwik.dev/router@2.0.0-beta.11(@qwik.dev/core@packages+qwik)(acorn@8.15.0)(rollup@4.52.3)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))' + '@builder.io/qwik': '@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))' + '@builder.io/qwik-city': '@qwik.dev/router@2.0.0-beta.11(@qwik.dev/core@packages+qwik)(acorn@8.15.0)(rollup@4.52.4)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))' decode-formdata: 0.8.0 - valibot: 1.1.0(typescript@5.9.2) + valibot: 1.1.0(typescript@5.9.3) transitivePeerDependencies: - typescript @@ -10826,7 +10793,7 @@ snapshots: '@napi-rs/triples@1.2.0': {} - '@napi-rs/wasm-runtime@1.0.5': + '@napi-rs/wasm-runtime@1.0.6': dependencies: '@emnapi/core': 1.5.0 '@emnapi/runtime': 1.5.0 @@ -10864,19 +10831,19 @@ snapshots: yaml: 2.8.1 yargs: 17.7.2 - '@netlify/build@35.1.7(@opentelemetry/api@1.8.0)(@types/node@24.3.0)(picomatch@4.0.3)(rollup@4.52.3)': + '@netlify/build@35.1.7(@opentelemetry/api@1.8.0)(@types/node@24.3.0)(picomatch@4.0.3)(rollup@4.52.4)': dependencies: '@bugsnag/js': 8.6.0 '@netlify/blobs': 10.0.11 '@netlify/cache-utils': 6.0.4 '@netlify/config': 24.0.4 '@netlify/edge-bundler': 14.5.5 - '@netlify/functions-utils': 6.2.8(rollup@4.52.3)(supports-color@10.2.2) + '@netlify/functions-utils': 6.2.8(rollup@4.52.4)(supports-color@10.2.2) '@netlify/git-utils': 6.0.2 '@netlify/opentelemetry-utils': 2.0.1(@opentelemetry/api@1.8.0) '@netlify/plugins-list': 6.80.0 '@netlify/run-utils': 6.0.2 - '@netlify/zip-it-and-ship-it': 14.1.8(rollup@4.52.3)(supports-color@10.2.2) + '@netlify/zip-it-and-ship-it': 14.1.8(rollup@4.52.4)(supports-color@10.2.2) '@opentelemetry/api': 1.8.0 '@sindresorhus/slugify': 2.2.1 ansi-escapes: 7.1.1 @@ -10912,8 +10879,8 @@ snapshots: string-width: 7.2.0 supports-color: 10.2.2 terminal-link: 4.0.0 - ts-node: 10.9.2(@types/node@24.3.0)(typescript@5.9.2) - typescript: 5.9.2 + ts-node: 10.9.2(@types/node@24.3.0)(typescript@5.9.3) + typescript: 5.9.3 uuid: 11.1.0 yaml: 2.8.1 yargs: 17.7.2 @@ -11087,9 +11054,9 @@ snapshots: '@netlify/types': 2.0.3 get-port: 7.1.0 - '@netlify/functions-utils@6.2.8(rollup@4.52.3)(supports-color@10.2.2)': + '@netlify/functions-utils@6.2.8(rollup@4.52.4)(supports-color@10.2.2)': dependencies: - '@netlify/zip-it-and-ship-it': 14.1.8(rollup@4.52.3)(supports-color@10.2.2) + '@netlify/zip-it-and-ship-it': 14.1.8(rollup@4.52.4)(supports-color@10.2.2) cpy: 11.1.0 path-exists: 5.0.0 transitivePeerDependencies: @@ -11193,13 +11160,13 @@ snapshots: '@netlify/types@2.0.3': {} - '@netlify/zip-it-and-ship-it@14.1.8(rollup@4.52.3)(supports-color@10.2.2)': + '@netlify/zip-it-and-ship-it@14.1.8(rollup@4.52.4)(supports-color@10.2.2)': dependencies: '@babel/parser': 7.28.4 '@babel/types': 7.28.4 '@netlify/binary-info': 1.0.0 '@netlify/serverless-functions-api': 2.5.0 - '@vercel/nft': 0.29.4(rollup@4.52.3)(supports-color@10.2.2) + '@vercel/nft': 0.29.4(rollup@4.52.4)(supports-color@10.2.2) archiver: 7.0.1 common-path-prefix: 3.0.0 copy-file: 11.1.0 @@ -11387,8 +11354,6 @@ snapshots: '@opentelemetry/api@1.8.0': {} - '@oxc-project/runtime@0.87.0': {} - '@panva/hkdf@1.2.1': {} '@parcel/watcher-android-arm64@2.5.1': @@ -11505,30 +11470,30 @@ snapshots: - react-native-b4a - supports-color - '@qwik-ui/headless@0.6.7(@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))': + '@qwik-ui/headless@0.6.7(@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))': dependencies: - '@builder.io/qwik': '@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))' + '@builder.io/qwik': '@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))' '@floating-ui/core': 1.7.3 '@floating-ui/dom': 1.7.4 '@oddbird/popover-polyfill': 0.4.3 body-scroll-lock-upgrade: 1.1.0 focus-trap: 7.5.4 - '@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))': + '@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: csstype: 3.1.3 launch-editor: 2.11.1 - rollup: 4.52.3 - vite: 7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + rollup: 4.52.4 + vite: 7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) optionalDependencies: prettier: 3.6.2 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) '@qwik.dev/partytown@0.11.2': dependencies: dotenv: 16.5.0 - '@qwik.dev/router@2.0.0-beta.11(@qwik.dev/core@packages+qwik)(acorn@8.15.0)(rollup@4.52.3)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))': + '@qwik.dev/router@2.0.0-beta.11(@qwik.dev/core@packages+qwik)(acorn@8.15.0)(rollup@4.52.4)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@azure/functions': 3.5.1 '@mdx-js/mdx': 3.1.0(acorn@8.15.0) @@ -11549,13 +11514,13 @@ snapshots: set-cookie-parser: 2.7.1 source-map: 0.7.6 svgo: 3.3.2 - typescript: 5.9.2 + typescript: 5.9.3 unified: 11.0.5 unist-util-visit: 5.0.0 - valibot: 1.1.0(typescript@5.9.2) + valibot: 1.1.0(typescript@5.9.3) vfile: 6.0.3 - vite: 7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) - vite-imagetools: 8.0.0(rollup@4.52.3) + vite: 7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite-imagetools: 8.0.0(rollup@4.52.4) yaml: 2.8.1 zod: 3.25.48 transitivePeerDependencies: @@ -11563,83 +11528,82 @@ snapshots: - rollup - supports-color - '@rolldown/browser@1.0.0-beta.36': + '@rolldown/browser@1.0.0-beta.41': dependencies: - '@napi-rs/wasm-runtime': 1.0.5 - '@oxc-project/runtime': 0.87.0 + '@napi-rs/wasm-runtime': 1.0.6 - '@rollup/pluginutils@5.3.0(rollup@4.52.3)': + '@rollup/pluginutils@5.3.0(rollup@4.52.4)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.52.3 + rollup: 4.52.4 - '@rollup/rollup-android-arm-eabi@4.52.3': + '@rollup/rollup-android-arm-eabi@4.52.4': optional: true - '@rollup/rollup-android-arm64@4.52.3': + '@rollup/rollup-android-arm64@4.52.4': optional: true - '@rollup/rollup-darwin-arm64@4.52.3': + '@rollup/rollup-darwin-arm64@4.52.4': optional: true - '@rollup/rollup-darwin-x64@4.52.3': + '@rollup/rollup-darwin-x64@4.52.4': optional: true - '@rollup/rollup-freebsd-arm64@4.52.3': + '@rollup/rollup-freebsd-arm64@4.52.4': optional: true - '@rollup/rollup-freebsd-x64@4.52.3': + '@rollup/rollup-freebsd-x64@4.52.4': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.52.3': + '@rollup/rollup-linux-arm-gnueabihf@4.52.4': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.52.3': + '@rollup/rollup-linux-arm-musleabihf@4.52.4': optional: true - '@rollup/rollup-linux-arm64-gnu@4.52.3': + '@rollup/rollup-linux-arm64-gnu@4.52.4': optional: true - '@rollup/rollup-linux-arm64-musl@4.52.3': + '@rollup/rollup-linux-arm64-musl@4.52.4': optional: true - '@rollup/rollup-linux-loong64-gnu@4.52.3': + '@rollup/rollup-linux-loong64-gnu@4.52.4': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.52.3': + '@rollup/rollup-linux-ppc64-gnu@4.52.4': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.52.3': + '@rollup/rollup-linux-riscv64-gnu@4.52.4': optional: true - '@rollup/rollup-linux-riscv64-musl@4.52.3': + '@rollup/rollup-linux-riscv64-musl@4.52.4': optional: true - '@rollup/rollup-linux-s390x-gnu@4.52.3': + '@rollup/rollup-linux-s390x-gnu@4.52.4': optional: true - '@rollup/rollup-linux-x64-gnu@4.52.3': + '@rollup/rollup-linux-x64-gnu@4.52.4': optional: true - '@rollup/rollup-linux-x64-musl@4.52.3': + '@rollup/rollup-linux-x64-musl@4.52.4': optional: true - '@rollup/rollup-openharmony-arm64@4.52.3': + '@rollup/rollup-openharmony-arm64@4.52.4': optional: true - '@rollup/rollup-win32-arm64-msvc@4.52.3': + '@rollup/rollup-win32-arm64-msvc@4.52.4': optional: true - '@rollup/rollup-win32-ia32-msvc@4.52.3': + '@rollup/rollup-win32-ia32-msvc@4.52.4': optional: true - '@rollup/rollup-win32-x64-gnu@4.52.3': + '@rollup/rollup-win32-x64-gnu@4.52.4': optional: true - '@rollup/rollup-win32-x64-msvc@4.52.3': + '@rollup/rollup-win32-x64-msvc@4.52.4': optional: true '@rtsao/scc@1.1.0': {} @@ -11867,12 +11831,12 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.1.12 '@tailwindcss/oxide-win32-x64-msvc': 4.1.12 - '@tailwindcss/vite@4.1.12(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))': + '@tailwindcss/vite@4.1.12(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@tailwindcss/node': 4.1.12 '@tailwindcss/oxide': 4.1.12 tailwindcss: 4.1.12 - vite: 7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + vite: 7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) '@tokenizer/token@0.3.0': {} @@ -12082,79 +12046,70 @@ snapshots: '@types/node': 24.3.0 optional: true - '@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.3))(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.41.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.41.0 - '@typescript-eslint/type-utils': 8.41.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.2) - '@typescript-eslint/utils': 8.41.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.41.0 + '@typescript-eslint/parser': 8.45.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.45.0 + '@typescript-eslint/type-utils': 8.45.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.45.0 eslint: 9.33.0(jiti@2.6.0) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.38.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.2)': + '@typescript-eslint/parser@8.38.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.38.0 '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.3(supports-color@10.2.2) eslint: 9.33.0(jiti@2.6.0) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.41.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.2)': - dependencies: - '@typescript-eslint/scope-manager': 8.41.0 - '@typescript-eslint/types': 8.41.0 - '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.41.0 - debug: 4.4.3(supports-color@10.2.2) - eslint: 9.33.0(jiti@2.6.0) - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.38.0(typescript@5.9.2)': + '@typescript-eslint/parser@8.45.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.45.0 '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/typescript-estree': 8.45.0(supports-color@10.2.2)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.45.0 debug: 4.4.3(supports-color@10.2.2) - typescript: 5.9.2 + eslint: 9.33.0(jiti@2.6.0) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.41.0(typescript@5.9.2)': + '@typescript-eslint/project-service@8.38.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.3) '@typescript-eslint/types': 8.45.0 debug: 4.4.3(supports-color@10.2.2) - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.45.0(supports-color@10.2.2)(typescript@5.9.2)': + '@typescript-eslint/project-service@8.45.0(supports-color@10.2.2)(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.3) '@typescript-eslint/types': 8.45.0 debug: 4.4.3(supports-color@10.2.2) - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/rule-tester@8.38.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.2)': + '@typescript-eslint/rule-tester@8.38.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.3)': dependencies: - '@typescript-eslint/parser': 8.38.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.2) - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.38.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/parser': 8.38.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.3) ajv: 6.12.6 eslint: 9.33.0(jiti@2.6.0) json-stable-stringify-without-jsonify: 1.0.1 @@ -12169,50 +12124,39 @@ snapshots: '@typescript-eslint/types': 8.38.0 '@typescript-eslint/visitor-keys': 8.38.0 - '@typescript-eslint/scope-manager@8.41.0': - dependencies: - '@typescript-eslint/types': 8.41.0 - '@typescript-eslint/visitor-keys': 8.41.0 - '@typescript-eslint/scope-manager@8.45.0': dependencies: '@typescript-eslint/types': 8.45.0 '@typescript-eslint/visitor-keys': 8.45.0 - '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.9.2)': + '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.9.3)': dependencies: - typescript: 5.9.2 + typescript: 5.9.3 - '@typescript-eslint/tsconfig-utils@8.41.0(typescript@5.9.2)': + '@typescript-eslint/tsconfig-utils@8.45.0(typescript@5.9.3)': dependencies: - typescript: 5.9.2 + typescript: 5.9.3 - '@typescript-eslint/tsconfig-utils@8.45.0(typescript@5.9.2)': + '@typescript-eslint/type-utils@8.45.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.3)': dependencies: - typescript: 5.9.2 - - '@typescript-eslint/type-utils@8.41.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.2)': - dependencies: - '@typescript-eslint/types': 8.41.0 - '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.41.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/typescript-estree': 8.45.0(supports-color@10.2.2)(typescript@5.9.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.3) debug: 4.4.3(supports-color@10.2.2) eslint: 9.33.0(jiti@2.6.0) - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color '@typescript-eslint/types@8.38.0': {} - '@typescript-eslint/types@8.41.0': {} - '@typescript-eslint/types@8.45.0': {} - '@typescript-eslint/typescript-estree@8.38.0(typescript@5.9.2)': + '@typescript-eslint/typescript-estree@8.38.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.38.0(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.2) + '@typescript-eslint/project-service': 8.38.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.3) '@typescript-eslint/types': 8.38.0 '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.3(supports-color@10.2.2) @@ -12220,31 +12164,15 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@8.41.0(typescript@5.9.2)': - dependencies: - '@typescript-eslint/project-service': 8.41.0(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.41.0(typescript@5.9.2) - '@typescript-eslint/types': 8.41.0 - '@typescript-eslint/visitor-keys': 8.41.0 - debug: 4.4.3(supports-color@10.2.2) - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.45.0(supports-color@10.2.2)(typescript@5.9.2)': + '@typescript-eslint/typescript-estree@8.45.0(supports-color@10.2.2)(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.45.0(supports-color@10.2.2)(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.2) + '@typescript-eslint/project-service': 8.45.0(supports-color@10.2.2)(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.3) '@typescript-eslint/types': 8.45.0 '@typescript-eslint/visitor-keys': 8.45.0 debug: 4.4.3(supports-color@10.2.2) @@ -12252,41 +12180,30 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.38.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.2)': + '@typescript-eslint/utils@8.38.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.33.0(jiti@2.6.0)) '@typescript-eslint/scope-manager': 8.38.0 '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) - eslint: 9.33.0(jiti@2.6.0) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.41.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.2)': - dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.33.0(jiti@2.6.0)) - '@typescript-eslint/scope-manager': 8.41.0 - '@typescript-eslint/types': 8.41.0 - '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.3) eslint: 9.33.0(jiti@2.6.0) - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.45.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.2)': + '@typescript-eslint/utils@8.45.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.33.0(jiti@2.6.0)) '@typescript-eslint/scope-manager': 8.45.0 '@typescript-eslint/types': 8.45.0 - '@typescript-eslint/typescript-estree': 8.45.0(supports-color@10.2.2)(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.45.0(supports-color@10.2.2)(typescript@5.9.3) eslint: 9.33.0(jiti@2.6.0) - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -12295,11 +12212,6 @@ snapshots: '@typescript-eslint/types': 8.38.0 eslint-visitor-keys: 4.2.1 - '@typescript-eslint/visitor-keys@8.41.0': - dependencies: - '@typescript-eslint/types': 8.41.0 - eslint-visitor-keys: 4.2.1 - '@typescript-eslint/visitor-keys@8.45.0': dependencies: '@typescript-eslint/types': 8.45.0 @@ -12322,14 +12234,14 @@ snapshots: dependencies: unpic: 3.22.0 - '@unpic/qwik@0.0.38(@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))': + '@unpic/qwik@0.0.38(@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))': dependencies: - '@builder.io/qwik': '@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))' + '@builder.io/qwik': '@qwik.dev/core@2.0.0-beta.11(prettier@3.6.2)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))' - '@vercel/nft@0.29.4(rollup@4.52.3)(supports-color@10.2.2)': + '@vercel/nft@0.29.4(rollup@4.52.4)(supports-color@10.2.2)': dependencies: '@mapbox/node-pre-gyp': 2.0.0(supports-color@10.2.2) - '@rollup/pluginutils': 5.3.0(rollup@4.52.3) + '@rollup/pluginutils': 5.3.0(rollup@4.52.4) acorn: 8.15.0 acorn-import-attributes: 1.9.5(acorn@8.15.0) async-sema: 3.1.1 @@ -12345,11 +12257,11 @@ snapshots: - rollup - supports-color - '@vitejs/plugin-basic-ssl@2.1.0(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))': + '@vitejs/plugin-basic-ssl@2.1.0(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: - vite: 7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + vite: 7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))': + '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -12364,7 +12276,7 @@ snapshots: std-env: 3.9.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -12376,13 +12288,13 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))': + '@vitest/mocker@3.2.4(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + vite: 7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -12457,7 +12369,7 @@ snapshots: de-indent: 1.0.2 he: 1.2.0 - '@vue/language-core@2.2.0(typescript@5.9.2)': + '@vue/language-core@2.2.0(typescript@5.9.3)': dependencies: '@volar/language-core': 2.4.23 '@vue/compiler-dom': 3.5.22 @@ -12468,7 +12380,7 @@ snapshots: muggle-string: 0.4.1 path-browserify: 1.0.1 optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 '@vue/shared@3.5.22': {} @@ -13332,14 +13244,14 @@ snapshots: path-type: 4.0.0 yaml: 1.10.2 - cosmiconfig@9.0.0(typescript@5.9.2): + cosmiconfig@9.0.0(typescript@5.9.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 cpy@11.1.0: dependencies: @@ -13573,16 +13485,16 @@ snapshots: detective-stylus@5.0.1: {} - detective-typescript@14.0.0(supports-color@10.2.2)(typescript@5.9.2): + detective-typescript@14.0.0(supports-color@10.2.2)(typescript@5.9.3): dependencies: - '@typescript-eslint/typescript-estree': 8.45.0(supports-color@10.2.2)(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.45.0(supports-color@10.2.2)(typescript@5.9.3) ast-module-types: 6.0.1 node-source-walk: 7.0.1 - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - detective-vue2@2.2.0(supports-color@10.2.2)(typescript@5.9.2): + detective-vue2@2.2.0(supports-color@10.2.2)(typescript@5.9.3): dependencies: '@dependents/detective-less': 5.0.1 '@vue/compiler-sfc': 3.5.22 @@ -13590,8 +13502,8 @@ snapshots: detective-sass: 6.0.1 detective-scss: 5.0.1 detective-stylus: 5.0.1 - detective-typescript: 14.0.0(supports-color@10.2.2)(typescript@5.9.2) - typescript: 5.9.2 + detective-typescript: 14.0.0(supports-color@10.2.2)(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -15078,6 +14990,8 @@ snapshots: imagetools-core@8.0.0: {} + imagetools-core@9.0.0: {} + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 @@ -16449,13 +16363,13 @@ snapshots: negotiator@0.6.3: {} - netlify-cli@23.7.3(@types/express@5.0.3)(@types/node@24.3.0)(picomatch@4.0.3)(rollup@4.52.3): + netlify-cli@23.7.3(@types/express@5.0.3)(@types/node@24.3.0)(picomatch@4.0.3)(rollup@4.52.4): dependencies: '@fastify/static': 7.0.4 '@netlify/ai': 0.2.1 '@netlify/api': 14.0.5 '@netlify/blobs': 10.0.11 - '@netlify/build': 35.1.7(@opentelemetry/api@1.8.0)(@types/node@24.3.0)(picomatch@4.0.3)(rollup@4.52.3) + '@netlify/build': 35.1.7(@opentelemetry/api@1.8.0)(@types/node@24.3.0)(picomatch@4.0.3)(rollup@4.52.4) '@netlify/build-info': 10.0.8 '@netlify/config': 24.0.4 '@netlify/dev-utils': 4.1.3 @@ -16465,7 +16379,7 @@ snapshots: '@netlify/headers-parser': 9.0.2 '@netlify/local-functions-proxy': 2.0.3 '@netlify/redirect-parser': 15.0.3 - '@netlify/zip-it-and-ship-it': 14.1.8(rollup@4.52.3)(supports-color@10.2.2) + '@netlify/zip-it-and-ship-it': 14.1.8(rollup@4.52.4)(supports-color@10.2.2) '@octokit/rest': 21.1.1 '@opentelemetry/api': 1.8.0 '@pnpm/tabtab': 0.5.4 @@ -17080,12 +16994,12 @@ snapshots: detective-sass: 6.0.1 detective-scss: 5.0.1 detective-stylus: 5.0.1 - detective-typescript: 14.0.0(supports-color@10.2.2)(typescript@5.9.2) - detective-vue2: 2.2.0(supports-color@10.2.2)(typescript@5.9.2) + detective-typescript: 14.0.0(supports-color@10.2.2)(typescript@5.9.3) + detective-vue2: 2.2.0(supports-color@10.2.2)(typescript@5.9.3) module-definition: 6.0.1 node-source-walk: 7.0.1 postcss: 8.5.6 - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -17219,10 +17133,10 @@ snapshots: - supports-color - utf-8-validate - puppeteer@22.13.1(typescript@5.9.2): + puppeteer@22.13.1(typescript@5.9.3): dependencies: '@puppeteer/browsers': 2.2.4 - cosmiconfig: 9.0.0(typescript@5.9.2) + cosmiconfig: 9.0.0(typescript@5.9.3) devtools-protocol: 0.0.1299070 puppeteer-core: 22.13.1 transitivePeerDependencies: @@ -17592,32 +17506,32 @@ snapshots: dependencies: estree-walker: 0.6.1 - rollup@4.52.3: + rollup@4.52.4: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.52.3 - '@rollup/rollup-android-arm64': 4.52.3 - '@rollup/rollup-darwin-arm64': 4.52.3 - '@rollup/rollup-darwin-x64': 4.52.3 - '@rollup/rollup-freebsd-arm64': 4.52.3 - '@rollup/rollup-freebsd-x64': 4.52.3 - '@rollup/rollup-linux-arm-gnueabihf': 4.52.3 - '@rollup/rollup-linux-arm-musleabihf': 4.52.3 - '@rollup/rollup-linux-arm64-gnu': 4.52.3 - '@rollup/rollup-linux-arm64-musl': 4.52.3 - '@rollup/rollup-linux-loong64-gnu': 4.52.3 - '@rollup/rollup-linux-ppc64-gnu': 4.52.3 - '@rollup/rollup-linux-riscv64-gnu': 4.52.3 - '@rollup/rollup-linux-riscv64-musl': 4.52.3 - '@rollup/rollup-linux-s390x-gnu': 4.52.3 - '@rollup/rollup-linux-x64-gnu': 4.52.3 - '@rollup/rollup-linux-x64-musl': 4.52.3 - '@rollup/rollup-openharmony-arm64': 4.52.3 - '@rollup/rollup-win32-arm64-msvc': 4.52.3 - '@rollup/rollup-win32-ia32-msvc': 4.52.3 - '@rollup/rollup-win32-x64-gnu': 4.52.3 - '@rollup/rollup-win32-x64-msvc': 4.52.3 + '@rollup/rollup-android-arm-eabi': 4.52.4 + '@rollup/rollup-android-arm64': 4.52.4 + '@rollup/rollup-darwin-arm64': 4.52.4 + '@rollup/rollup-darwin-x64': 4.52.4 + '@rollup/rollup-freebsd-arm64': 4.52.4 + '@rollup/rollup-freebsd-x64': 4.52.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.52.4 + '@rollup/rollup-linux-arm-musleabihf': 4.52.4 + '@rollup/rollup-linux-arm64-gnu': 4.52.4 + '@rollup/rollup-linux-arm64-musl': 4.52.4 + '@rollup/rollup-linux-loong64-gnu': 4.52.4 + '@rollup/rollup-linux-ppc64-gnu': 4.52.4 + '@rollup/rollup-linux-riscv64-gnu': 4.52.4 + '@rollup/rollup-linux-riscv64-musl': 4.52.4 + '@rollup/rollup-linux-s390x-gnu': 4.52.4 + '@rollup/rollup-linux-x64-gnu': 4.52.4 + '@rollup/rollup-linux-x64-musl': 4.52.4 + '@rollup/rollup-openharmony-arm64': 4.52.4 + '@rollup/rollup-win32-arm64-msvc': 4.52.4 + '@rollup/rollup-win32-ia32-msvc': 4.52.4 + '@rollup/rollup-win32-x64-gnu': 4.52.4 + '@rollup/rollup-win32-x64-msvc': 4.52.4 fsevents: 2.3.3 run-applescript@7.1.0: {} @@ -18154,12 +18068,12 @@ snapshots: picocolors: 1.1.1 sax: 1.4.1 - syncpack@13.0.4(typescript@5.9.2): + syncpack@13.0.4(typescript@5.9.3): dependencies: chalk: 5.6.2 chalk-template: 1.1.2 commander: 13.1.0 - cosmiconfig: 9.0.0(typescript@5.9.2) + cosmiconfig: 9.0.0(typescript@5.9.3) effect: 3.18.0 enquirer: 2.4.1 fast-check: 3.23.2 @@ -18218,7 +18132,7 @@ snapshots: ansi-escapes: 7.1.1 supports-hyperlinks: 3.2.0 - terser@5.43.1: + terser@5.44.0: dependencies: '@jridgewell/source-map': 0.3.11 acorn: 8.15.0 @@ -18324,16 +18238,16 @@ snapshots: trough@2.2.0: {} - ts-api-utils@2.1.0(typescript@5.9.2): + ts-api-utils@2.1.0(typescript@5.9.3): dependencies: - typescript: 5.9.2 + typescript: 5.9.3 ts-morph@23.0.0: dependencies: '@ts-morph/common': 0.24.0 code-block-writer: 13.0.3 - ts-node@10.9.2(@types/node@24.3.0)(typescript@5.9.2): + ts-node@10.9.2(@types/node@24.3.0)(typescript@5.9.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -18347,15 +18261,15 @@ snapshots: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.9.2 + typescript: 5.9.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 ts-toolbelt@9.6.0: {} - tsconfck@3.1.6(typescript@5.9.2): + tsconfck@3.1.6(typescript@5.9.3): optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 tsconfig-paths@3.15.0: dependencies: @@ -18372,7 +18286,7 @@ snapshots: dependencies: esbuild: 0.15.18 - tsx@4.20.5: + tsx@4.20.6: dependencies: esbuild: 0.25.9 get-tsconfig: 4.10.1 @@ -18425,18 +18339,18 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.41.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.2): + typescript-eslint@8.45.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.2))(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.2) - '@typescript-eslint/parser': 8.41.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.2) - '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.41.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.3))(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.3) + '@typescript-eslint/parser': 8.45.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.45.0(supports-color@10.2.2)(typescript@5.9.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.33.0(jiti@2.6.0))(typescript@5.9.3) eslint: 9.33.0(jiti@2.6.0) - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - typescript@5.9.2: {} + typescript@5.9.3: {} ufo@1.6.1: {} @@ -18620,9 +18534,9 @@ snapshots: valibot@0.33.3: {} - valibot@1.1.0(typescript@5.9.2): + valibot@1.1.0(typescript@5.9.3): optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 validate-npm-package-license@3.0.4: dependencies: @@ -18645,31 +18559,39 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-dev-rpc@1.1.0(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)): + vite-dev-rpc@1.1.0(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: birpc: 2.6.1 - vite: 7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) - vite-hot-client: 2.1.0(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + vite: 7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite-hot-client: 2.1.0(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) - vite-hot-client@2.1.0(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)): + vite-hot-client@2.1.0(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: - vite: 7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + vite: 7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite-imagetools@8.0.0(rollup@4.52.3): + vite-imagetools@8.0.0(rollup@4.52.4): dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.52.3) + '@rollup/pluginutils': 5.3.0(rollup@4.52.4) imagetools-core: 8.0.0 sharp: 0.34.4 transitivePeerDependencies: - rollup - vite-node@3.2.4(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1): + vite-imagetools@9.0.0(rollup@4.52.4): + dependencies: + '@rollup/pluginutils': 5.3.0(rollup@4.52.4) + imagetools-core: 9.0.0 + sharp: 0.34.4 + transitivePeerDependencies: + - rollup + + vite-node@3.2.4(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: cac: 6.7.14 debug: 4.4.3(supports-color@10.2.2) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + vite: 7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -18684,26 +18606,26 @@ snapshots: - tsx - yaml - vite-plugin-dts@4.5.4(@types/node@24.3.0)(rollup@4.52.3)(typescript@5.9.2)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)): + vite-plugin-dts@4.5.4(@types/node@24.3.0)(rollup@4.52.4)(typescript@5.9.3)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: '@microsoft/api-extractor': 7.52.10(@types/node@24.3.0) - '@rollup/pluginutils': 5.3.0(rollup@4.52.3) + '@rollup/pluginutils': 5.3.0(rollup@4.52.4) '@volar/typescript': 2.4.23 - '@vue/language-core': 2.2.0(typescript@5.9.2) + '@vue/language-core': 2.2.0(typescript@5.9.3) compare-versions: 6.1.1 debug: 4.4.3(supports-color@10.2.2) kolorist: 1.8.0 local-pkg: 1.1.2 magic-string: 0.30.17 - typescript: 5.9.2 + typescript: 5.9.3 optionalDependencies: - vite: 7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + vite: 7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-inspect@11.3.3(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)): + vite-plugin-inspect@11.3.3(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: ansis: 4.2.0 debug: 4.4.3(supports-color@10.2.2) @@ -18713,44 +18635,44 @@ snapshots: perfect-debounce: 2.0.0 sirv: 3.0.2 unplugin-utils: 0.3.0 - vite: 7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) - vite-dev-rpc: 1.1.0(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + vite: 7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite-dev-rpc: 1.1.0(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) transitivePeerDependencies: - supports-color - vite-tsconfig-paths@5.1.4(typescript@5.9.2)(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)): + vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: debug: 4.4.3(supports-color@10.2.2) globrex: 0.1.2 - tsconfck: 3.1.6(typescript@5.9.2) + tsconfck: 3.1.6(typescript@5.9.3) optionalDependencies: - vite: 7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + vite: 7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - typescript - vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1): + vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: esbuild: 0.25.9 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.52.3 + rollup: 4.52.4 tinyglobby: 0.2.15 optionalDependencies: '@types/node': 24.3.0 fsevents: 2.3.3 jiti: 2.6.0 lightningcss: 1.30.1 - terser: 5.43.1 - tsx: 4.20.5 + terser: 5.44.0 + tsx: 4.20.6 yaml: 2.8.1 - vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(vite@7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -18768,8 +18690,8 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.1.7(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + vite: 7.1.9(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@24.3.0)(jiti@2.6.0)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 09a0063fb0c..1067c5aa65b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -23,7 +23,7 @@ overrides: '@builder.io/qwik-city': npm:@qwik.dev/router '@types/estree': 1.0.8 prettier: 3.6.2 - typescript: 5.9.2 + typescript: 5.9.3 vfile: 6.0.3 patchedDependencies: