From 5d9c13ba2ac5ab1924bead94d709c2b24f39b6cc Mon Sep 17 00:00:00 2001 From: ShenQingchuan Date: Sun, 13 Jul 2025 23:05:30 +0800 Subject: [PATCH 01/35] wip: support vapor compile --- packages/compiler/package.json | 2 + packages/compiler/src/analyze.ts | 2 + packages/compiler/src/babel-helpers/ast.ts | 30 +- packages/compiler/src/constants.ts | 1 + packages/compiler/src/template/compose.ts | 180 ++++++++--- packages/compiler/src/transform/steps.ts | 12 +- packages/compiler/src/types.ts | 1 + packages/compiler/tests/analyze.spec.ts | 14 + pnpm-lock.yaml | 329 +++++++++++++++------ pnpm-workspace.yaml | 4 +- 10 files changed, 442 insertions(+), 133 deletions(-) diff --git a/packages/compiler/package.json b/packages/compiler/package.json index 87d6b49c..129d3391 100644 --- a/packages/compiler/package.json +++ b/packages/compiler/package.json @@ -35,8 +35,10 @@ "dependencies": { "@babel/parser": "catalog:compiler", "@babel/types": "catalog:compiler", + "@vue/compiler-core": "catalog:vue-libs", "@vue/compiler-dom": "catalog:vue-libs", "@vue/compiler-ssr": "catalog:vue-libs", + "@vue/compiler-vapor": "catalog:vue-libs", "@vue/shared": "catalog:vue-libs", "get-tsconfig": "catalog:compiler", "hash-sum": "catalog:utils", diff --git a/packages/compiler/src/analyze.ts b/packages/compiler/src/analyze.ts index fc4a8593..28f47f6d 100644 --- a/packages/compiler/src/analyze.ts +++ b/packages/compiler/src/analyze.ts @@ -92,6 +92,7 @@ import { isVineSlots, isVineStyle, isVineValidators, + isVineVaporTaggedTemplateString, tryInferExpressionTSType, } from './babel-helpers/ast' import { DEFAULT_MODEL_MODIFIERS_NAME, SUPPORTED_STYLE_FILE_EXTS, VineBindingTypes } from './constants' @@ -1193,6 +1194,7 @@ function buildVineCompFnCtx( isExportDefault: isExportDefaultDeclaration(fnDeclNode), isAsync: fnItselfNode?.async ?? false, isCustomElement: false, + isVapor: isVineVaporTaggedTemplateString(templateStringNode), fnName, scopeId, fnDeclNode, diff --git a/packages/compiler/src/babel-helpers/ast.ts b/packages/compiler/src/babel-helpers/ast.ts index 021085e2..f9dc8e6f 100644 --- a/packages/compiler/src/babel-helpers/ast.ts +++ b/packages/compiler/src/babel-helpers/ast.ts @@ -132,14 +132,36 @@ export function isDescendant(node: Node, potentialDescendant: Node): boolean { return false } -export function isVineTaggedTemplateString(node: Node | null | undefined): node is TaggedTemplateExpression { +export function isVineVaporTaggedTemplateString(node: Node | null | undefined): node is TaggedTemplateExpression { + if (!isTaggedTemplateExpression(node)) { + return false + } + return ( - isTaggedTemplateExpression(node) - && isIdentifier(node.tag) - && node.tag.name === 'vine' + isMemberExpression(node.tag) + && isIdentifier(node.tag.object) + && node.tag.object.name === 'vine' + && isIdentifier(node.tag.property) + && node.tag.property.name === 'vapor' ) } +export function isVineTaggedTemplateString(node: Node | null | undefined): node is TaggedTemplateExpression { + if (!isTaggedTemplateExpression(node)) { + return false + } + + // vine`...` or vine.vapor`...` + if (isIdentifier(node.tag) && node.tag.name === 'vine') { + return true + } + if (isVineVaporTaggedTemplateString(node)) { + return true + } + + return false +} + export function isVineMacroCallExpression(node: Node): node is CallExpression { if (isCallExpression(node)) { const calleeName = getVineMacroCalleeName(node) diff --git a/packages/compiler/src/constants.ts b/packages/compiler/src/constants.ts index d55384b3..1c80c9bd 100644 --- a/packages/compiler/src/constants.ts +++ b/packages/compiler/src/constants.ts @@ -1,6 +1,7 @@ import type { BindingTypes as VueBindingTypes } from '@vue/compiler-dom' export const DEFINE_COMPONENT_HELPER = 'defineComponent' +export const DEFINE_VAPOR_COMPONENT_HELPER = 'defineVaporComponent' export const DEFINE_CUSTOM_ELEMENT_HELPER = 'defineCustomElement' export const USE_DEFAULTS_HELPER = 'useDefaults' export const TO_REFS_HELPER = 'toRefs' diff --git a/packages/compiler/src/template/compose.ts b/packages/compiler/src/template/compose.ts index 616b4f8f..14b74c06 100644 --- a/packages/compiler/src/template/compose.ts +++ b/packages/compiler/src/template/compose.ts @@ -1,9 +1,11 @@ import type { SourceLocation as BabelSourceLocation, ExportNamedDeclaration, ImportDeclaration, Node } from '@babel/types' -import type { AttributeNode, BindingTypes, CodegenResult, CompilerOptions, NodeTransform, SourceLocation as VueSourceLocation } from '@vue/compiler-dom' +import type { AttributeNode, BindingTypes, CompilerOptions, NodeTransform, CodegenResult as VDOMCodegenResult, SourceLocation as VueSourceLocation } from '@vue/compiler-dom' +import type { CompilerOptions as CompilerOptionsVapor, VaporCodegenResult } from '@vue/compiler-vapor' import type { VineCompFnCtx, VineCompilerHooks, VineCompilerOptions, VineFileCtx } from '../types' import { isExportNamedDeclaration, isFunctionDeclaration, isIdentifier, isImportDeclaration, isImportDefaultSpecifier, isImportSpecifier } from '@babel/types' -import { compile, ElementTypes, NodeTypes, parse } from '@vue/compiler-dom' +import { compile as compileVDOM, ElementTypes, NodeTypes, parse } from '@vue/compiler-dom' import { compile as ssrCompile } from '@vue/compiler-ssr' +import { compile as compileVapor } from '@vue/compiler-vapor' import lineColumn from 'line-column' import { babelParse } from '../babel-helpers/parse' import { VineBindingTypes } from '../constants' @@ -18,6 +20,16 @@ const SHOULD_ADD_SUFFIX_REGEXP = /(?<=<[^>/]+)$/ function toPascalCase(str: string) { return str.replace(/(?:^|-)(\w)/g, (_, c) => c.toUpperCase()) } +function getTransformNegativeBoolPlugin( + transformNegativeBool: Required['vueCompilerOptions']['__transformNegativeBool'], +): NodeTransform[] { + if (typeof transformNegativeBool === 'object') { + return [transformBooleanProp({ constType: transformNegativeBool.constType })] + } + + return [transformBooleanProp()] +} + export function postProcessForRenderCodegen(codegen: string): string { return codegen // https://github.com/vue-vine/vue-vine/issues/171 @@ -32,29 +44,96 @@ export function postProcessForRenderCodegen(codegen: string): string { ) } -function getTransformNegativeBoolPlugin( - transformNegativeBool: Required['vueCompilerOptions']['__transformNegativeBool'], -): NodeTransform[] { - if (typeof transformNegativeBool === 'object') { - return [transformBooleanProp({ constType: transformNegativeBool.constType })] +const sharedCompilerOptions = { + mode: 'module', + hoistStatic: true, + cacheHandlers: true, + prefixIdentifiers: true, + inline: true, +} as const + +function getTemplateParsedAst( + vineCompFnCtx: VineCompFnCtx, + getParsedAst: boolean, +) { + if (!getParsedAst) { + return } - return [transformBooleanProp()] + return { + templateParsedAst: parse(vineCompFnCtx.templateSource, { + parseMode: 'base', + prefixIdentifiers: true, + expressionPlugins: ['typescript'], + }), + } +} + +function compileForSSR( + vineCompFnCtx: VineCompFnCtx, + params: Partial, + getParsedAst: boolean, +) { + const codegenResult = ssrCompile( + vineCompFnCtx.templateSource, + { + ...sharedCompilerOptions, + ...params, + }, + ) + return { + ...codegenResult, + ...getTemplateParsedAst(vineCompFnCtx, getParsedAst), + } +} +function compileForVirtualDOM( + vineCompFnCtx: VineCompFnCtx, + params: Partial, + getParsedAst: boolean, +) { + const codegenResult = compileVDOM( + vineCompFnCtx.templateSource, + { + ...sharedCompilerOptions, + ...params, + }, + ) + return { + ...codegenResult, + ...getTemplateParsedAst(vineCompFnCtx, getParsedAst), + } +} +function compileForVapor( + vineCompFnCtx: VineCompFnCtx, + params: Partial, + getParsedAst: boolean, +) { + const codegenResult = compileVapor( + vineCompFnCtx.templateSource, + { + ...sharedCompilerOptions, + ...params, + }, + ) + + return { + ...codegenResult, + ...getTemplateParsedAst(vineCompFnCtx, getParsedAst), + } } export function compileVineTemplate( vineCompFnCtx: VineCompFnCtx, compilerHooks: VineCompilerHooks, - params: Partial, + params: Partial, { ssr, getParsedAst = false }: { ssr: boolean getParsedAst?: boolean }, ): ( - CodegenResult + (VDOMCodegenResult | VaporCodegenResult) & { templateParsedAst?: ReturnType } ) | null { - const _compile = ssr ? ssrCompile : compile const { __enableTransformAssetsURL = true, __transformNegativeBool, @@ -72,36 +151,49 @@ export function compileVineTemplate( vineCompFnCtx.templateSource += '>' } - return { - ..._compile(vineCompFnCtx.templateSource, { - mode: 'module', - hoistStatic: true, - cacheHandlers: true, - prefixIdentifiers: true, - inline: true, - nodeTransforms: [ - ...(__enableTransformAssetsURL - ? [transformAssetUrl] - : [] - ), - ...getTransformNegativeBoolPlugin( - __transformNegativeBool, - ), - ], - ...params, - }), - templateParsedAst: ( - getParsedAst - ? parse(vineCompFnCtx.templateSource, { - parseMode: 'base', - prefixIdentifiers: true, - expressionPlugins: [ - 'typescript', - ], - }) - : (void 0) + const nodeTransforms = [ + ...(__enableTransformAssetsURL + ? [transformAssetUrl] + : [] ), + ...getTransformNegativeBoolPlugin( + __transformNegativeBool, + ), + ] + + if (ssr) { + return compileForSSR( + vineCompFnCtx, + { + ...params as CompilerOptions, + nodeTransforms, + }, + getParsedAst, + ) } + + if (vineCompFnCtx.isVapor) { + return compileForVapor( + vineCompFnCtx, + { + ...params as CompilerOptionsVapor, + nodeTransforms: [ + // Todo: node transformers implementation needs to be refactored + // in vapor mode, because the TransformContext is different + ], + }, + getParsedAst, + ) + } + + return compileForVirtualDOM( + vineCompFnCtx, + { + ...params as CompilerOptions, + nodeTransforms, + }, + getParsedAst, + ) } catch { return null @@ -250,7 +342,15 @@ function setVineTemplateAst( vineCompFnCtx: VineCompFnCtx, compileResult: ReturnType, ) { - const { ast, templateParsedAst } = compileResult! + const { templateParsedAst } = compileResult! + let ast = compileResult!.ast + + // Vapor mode's `ast` is `RootIRNode` + // but we need `RootNode` + if ('node' in ast) { + ast = ast.node + } + vineCompFnCtx.templateAst = ast vineCompFnCtx.templateParsedAst = templateParsedAst diff --git a/packages/compiler/src/transform/steps.ts b/packages/compiler/src/transform/steps.ts index 092b2199..3ef67c11 100644 --- a/packages/compiler/src/transform/steps.ts +++ b/packages/compiler/src/transform/steps.ts @@ -14,6 +14,7 @@ import { CSS_VARS_HELPER, DEFINE_COMPONENT_HELPER, DEFINE_CUSTOM_ELEMENT_HELPER, + DEFINE_VAPOR_COMPONENT_HELPER, TO_REFS_HELPER, UN_REF_HELPER, USE_DEFAULTS_HELPER, @@ -74,6 +75,9 @@ export function createVueImportsSpecs( if (vineCompFnCtx.isCustomElement && !vueImportsSpecs.has(DEFINE_CUSTOM_ELEMENT_HELPER)) { vueImportsSpecs.set(DEFINE_CUSTOM_ELEMENT_HELPER, `_${DEFINE_CUSTOM_ELEMENT_HELPER}`) } + if (vineCompFnCtx.isVapor && !vueImportsSpecs.has(DEFINE_VAPOR_COMPONENT_HELPER)) { + vueImportsSpecs.set(DEFINE_VAPOR_COMPONENT_HELPER, `_${DEFINE_VAPOR_COMPONENT_HELPER}`) + } // add useCssVars if (!vueImportsSpecs.has(CSS_VARS_HELPER) && vineCompFnCtx.cssBindings) { vueImportsSpecs.set(CSS_VARS_HELPER, `_${CSS_VARS_HELPER}`) @@ -771,10 +775,14 @@ export function generateDefineComponentWrapper( transformCtx: TransformContext, fnTransformCtx: SingleFnCompTransformCtx, ): void { - const { firstStmt, lastStmt } = fnTransformCtx + const { firstStmt, lastStmt, vineCompFnCtx } = fnTransformCtx const ms = transformCtx.vineFileCtx.fileMagicCode - ms.prependLeft(firstStmt.start!, `const __vine = _${DEFINE_COMPONENT_HELPER}({\n`) + ms.prependLeft(firstStmt.start!, `const __vine = _${ + vineCompFnCtx.isVapor + ? DEFINE_VAPOR_COMPONENT_HELPER + : DEFINE_COMPONENT_HELPER + }({\n`) ms.appendRight(lastStmt.end!, '\n})') } diff --git a/packages/compiler/src/types.ts b/packages/compiler/src/types.ts index b02bf3f6..704559c0 100644 --- a/packages/compiler/src/types.ts +++ b/packages/compiler/src/types.ts @@ -224,6 +224,7 @@ export interface VineCompFnCtx { templateRefNames: Set isExportDefault: boolean isAsync: boolean + isVapor: boolean /** is web component (customElement) */ isCustomElement: boolean fnName: string diff --git a/packages/compiler/tests/analyze.spec.ts b/packages/compiler/tests/analyze.spec.ts index 495f1b10..0f802f94 100644 --- a/packages/compiler/tests/analyze.spec.ts +++ b/packages/compiler/tests/analyze.spec.ts @@ -523,6 +523,20 @@ function MyComp() { `) expect(mockCompilerCtx.vineCompileWarnings.length).toBe(0) }) + + it('analyze vine vapor template', () => { + const content = ` + function MyComp() { + return vine.vapor\`
Test vine vapor template
\` + } + ` + const { mockCompilerCtx, mockCompilerHooks } = createMockTransformCtx() + compileVineTypeScriptFile(content, 'testVineVaporTemplate', { compilerHooks: mockCompilerHooks }) + expect(mockCompilerCtx.vineCompileErrors.length).toBe(0) + const fileCtx = mockCompilerCtx.fileCtxMap.get('testVineVaporTemplate') + const MyComp = fileCtx?.vineCompFns[0] + expect(MyComp?.isVapor).toBe(true) + }) }) describe('test other helpers for compiler', () => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fd7aed07..d2e4e9b4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -362,12 +362,18 @@ catalogs: specifier: ^3.1.0 version: 3.1.0 vue-libs: + '@vue/compiler-core': + specifier: ^3.6.0-alpha.1 + version: 3.6.0-alpha.1 '@vue/compiler-dom': - specifier: ^3.5.17 - version: 3.5.17 + specifier: ^3.6.0-alpha.1 + version: 3.6.0-alpha.1 '@vue/compiler-ssr': - specifier: ^3.5.17 - version: 3.5.17 + specifier: ^3.6.0-alpha.1 + version: 3.6.0-alpha.1 + '@vue/compiler-vapor': + specifier: ^3.6.0-alpha.1 + version: 3.6.0-alpha.1 '@vue/language-core': specifier: ~3.0.1 version: 3.0.1 @@ -375,8 +381,8 @@ catalogs: specifier: ~3.0.1 version: 3.0.1 '@vue/shared': - specifier: ^3.5.17 - version: 3.5.17 + specifier: ^3.6.0-alpha.1 + version: 3.6.0-alpha.1 '@vue/test-utils': specifier: ^2.4.6 version: 2.4.6 @@ -387,8 +393,8 @@ catalogs: specifier: ^3.0.3 version: 3.0.3 vue: - specifier: ^3.5.17 - version: 3.5.17 + specifier: ^3.6.0-alpha.1 + version: 3.6.0-alpha.1 vue-router: specifier: ^4.5.1 version: 4.5.1 @@ -402,7 +408,7 @@ importers: devDependencies: '@antfu/eslint-config': specifier: catalog:lint-libs - version: 4.16.2(@vue/compiler-sfc@3.5.17)(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.16.0)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)) + version: 4.16.2(@vue/compiler-sfc@3.6.0-alpha.1)(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.16.0)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)) '@baiwusanyu/utils-log': specifier: catalog:utils version: 1.1.2(ansi-colors@4.1.3) @@ -450,7 +456,7 @@ importers: version: 3.2.4(@types/debug@4.1.12)(@types/node@22.16.0)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0) vue: specifier: catalog:vue-libs - version: 3.5.17(typescript@5.8.3) + version: 3.6.0-alpha.1(typescript@5.8.3) yaml: specifier: catalog:utils version: 2.8.0 @@ -463,15 +469,21 @@ importers: '@babel/types': specifier: catalog:compiler version: 7.28.0 + '@vue/compiler-core': + specifier: catalog:vue-libs + version: 3.6.0-alpha.1 '@vue/compiler-dom': specifier: catalog:vue-libs - version: 3.5.17 + version: 3.6.0-alpha.1 '@vue/compiler-ssr': specifier: catalog:vue-libs - version: 3.5.17 + version: 3.6.0-alpha.1 + '@vue/compiler-vapor': + specifier: catalog:vue-libs + version: 3.6.0-alpha.1 '@vue/shared': specifier: catalog:vue-libs - version: 3.5.17 + version: 3.6.0-alpha.1 get-tsconfig: specifier: catalog:compiler version: 4.10.1 @@ -548,10 +560,10 @@ importers: version: 4.1.11 unocss: specifier: catalog:styles - version: 66.3.3(postcss@8.5.6)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3)) + version: 66.3.3(postcss@8.5.6)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.6.0-alpha.1(typescript@5.8.3)) unplugin-auto-import: specifier: catalog:vite-ecosystem - version: 19.3.0(@nuxt/kit@3.17.6(magicast@0.3.5))(@vueuse/core@13.5.0(vue@3.5.17(typescript@5.8.3))) + version: 19.3.0(@nuxt/kit@3.17.6(magicast@0.3.5))(@vueuse/core@13.5.0(vue@3.6.0-alpha.1(typescript@5.8.3))) vite: specifier: catalog:vite-ecosystem version: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0) @@ -560,7 +572,7 @@ importers: version: 11.3.0(@nuxt/kit@3.17.6(magicast@0.3.5))(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)) vue: specifier: catalog:vue-libs - version: 3.5.17(typescript@5.8.3) + version: 3.6.0-alpha.1(typescript@5.8.3) vue-vine: specifier: workspace:* version: link:../vue-vine @@ -602,10 +614,10 @@ importers: version: 22.16.0 '@vitejs/plugin-vue': specifier: catalog:vite-ecosystem - version: 6.0.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3)) + version: 6.0.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.6.0-alpha.1(typescript@5.8.3)) '@vitejs/plugin-vue-jsx': specifier: catalog:vite-ecosystem - version: 5.0.1(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3)) + version: 5.0.1(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.6.0-alpha.1(typescript@5.8.3)) '@vue-vine/eslint-config': specifier: workspace:* version: link:../eslint-config @@ -614,16 +626,16 @@ importers: version: 2.4.6 '@vueuse/core': specifier: catalog:vue-libs - version: 13.5.0(vue@3.5.17(typescript@5.8.3)) + version: 13.5.0(vue@3.6.0-alpha.1(typescript@5.8.3)) element-plus: specifier: catalog:miscs - version: 2.10.3(vue@3.5.17(typescript@5.8.3)) + version: 2.10.3(vue@3.6.0-alpha.1(typescript@5.8.3)) jsdom: specifier: catalog:vitest-libs version: 26.1.0 pinia: specifier: catalog:vue-libs - version: 3.0.3(typescript@5.8.3)(vue@3.5.17(typescript@5.8.3)) + version: 3.0.3(typescript@5.8.3)(vue@3.6.0-alpha.1(typescript@5.8.3)) rolldown-vite: specifier: catalog:vite-ecosystem version: 7.0.4(@types/node@22.16.0)(esbuild@0.25.5)(jiti@2.4.2)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0) @@ -632,16 +644,16 @@ importers: version: 1.89.2 unocss: specifier: catalog:styles - version: 66.3.3(postcss@8.5.6)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3)) + version: 66.3.3(postcss@8.5.6)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.6.0-alpha.1(typescript@5.8.3)) unplugin-auto-import: specifier: catalog:vite-ecosystem - version: 19.3.0(@nuxt/kit@3.17.6(magicast@0.3.5))(@vueuse/core@13.5.0(vue@3.5.17(typescript@5.8.3))) + version: 19.3.0(@nuxt/kit@3.17.6(magicast@0.3.5))(@vueuse/core@13.5.0(vue@3.6.0-alpha.1(typescript@5.8.3))) vite-plugin-inspect: specifier: catalog:vite-ecosystem version: 11.3.0(@nuxt/kit@3.17.6(magicast@0.3.5))(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)) vue-router: specifier: catalog:vue-libs - version: 4.5.1(vue@3.5.17(typescript@5.8.3)) + version: 4.5.1(vue@3.6.0-alpha.1(typescript@5.8.3)) vue-tsc: specifier: catalog:vue-libs version: 3.0.1(typescript@5.8.3) @@ -663,7 +675,7 @@ importers: devDependencies: '@antfu/eslint-config': specifier: catalog:lint-libs - version: 4.16.2(@vue/compiler-sfc@3.5.17)(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.10)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)) + version: 4.16.2(@vue/compiler-sfc@3.6.0-alpha.1)(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.10)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)) '@stylistic/eslint-plugin': specifier: catalog:lint-libs version: 5.1.0(eslint@9.30.1(jiti@2.4.2)) @@ -752,7 +764,7 @@ importers: devDependencies: '@antfu/eslint-config': specifier: catalog:lint-libs - version: 4.16.2(@vue/compiler-sfc@3.5.17)(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.10)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)) + version: 4.16.2(@vue/compiler-sfc@3.6.0-alpha.1)(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.10)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)) '@types/eslint': specifier: catalog:types version: 9.6.1 @@ -831,7 +843,7 @@ importers: version: 7.0.0-dev.20250705.1 '@vue/shared': specifier: catalog:vue-libs - version: 3.5.17 + version: 3.6.0-alpha.1 vscode-html-languageservice: specifier: catalog:vscode version: 5.5.1 @@ -861,7 +873,7 @@ importers: version: 3.0.1(typescript@5.8.3) '@vue/shared': specifier: catalog:vue-libs - version: 3.5.17 + version: 3.6.0-alpha.1 destr: specifier: catalog:utils version: 2.0.5 @@ -911,10 +923,10 @@ importers: version: 2.6.2(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3)) '@nuxt/eslint-config': specifier: catalog:nuxt-libs - version: 1.5.2(@vue/compiler-sfc@3.5.17)(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + version: 1.5.2(@vue/compiler-sfc@3.6.0-alpha.1)(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) '@nuxt/module-builder': specifier: catalog:nuxt-libs - version: 1.0.1(@nuxt/cli@3.25.1(magicast@0.3.5))(@vue/compiler-core@3.5.17)(esbuild@0.25.5)(sass@1.89.2)(typescript@5.8.3)(vue-tsc@3.0.1(typescript@5.8.3))(vue@3.5.17(typescript@5.8.3)) + version: 1.0.1(@nuxt/cli@3.25.1(magicast@0.3.5))(@vue/compiler-core@3.6.0-alpha.1)(esbuild@0.25.5)(sass@1.89.2)(typescript@5.8.3)(vue-tsc@3.0.1(typescript@5.8.3))(vue@3.5.17(typescript@5.8.3)) '@nuxt/schema': specifier: catalog:nuxt-libs version: 3.17.6 @@ -926,7 +938,7 @@ importers: version: 0.6.2(magicast@0.3.5) nuxt: specifier: catalog:nuxt-libs - version: 3.17.6(@azure/identity@4.10.2)(@parcel/watcher@2.5.1)(@types/node@24.0.10)(@vue/compiler-sfc@3.5.17)(db0@0.3.2)(eslint@9.30.1(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.24)(rollup@4.44.2)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue-tsc@3.0.1(typescript@5.8.3))(yaml@2.8.0) + version: 3.17.6(@azure/identity@4.10.2)(@parcel/watcher@2.5.1)(@types/node@24.0.10)(@vue/compiler-sfc@3.6.0-alpha.1)(db0@0.3.2)(eslint@9.30.1(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.24)(rollup@4.44.2)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue-tsc@3.0.1(typescript@5.8.3))(yaml@2.8.0) vue-tsc: specifier: catalog:vue-libs version: 3.0.1(typescript@5.8.3) @@ -3507,15 +3519,30 @@ packages: '@vue/compiler-core@3.5.17': resolution: {integrity: sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA==} + '@vue/compiler-core@3.6.0-alpha.1': + resolution: {integrity: sha512-6Nimayca+s9D73UC9wET40Yog7mI2+v3JZbtZXs+ARbI/QDpnsQXPmebE57Dnra8UKttXRJjcLPxELb64dB9Ow==} + '@vue/compiler-dom@3.5.17': resolution: {integrity: sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ==} + '@vue/compiler-dom@3.6.0-alpha.1': + resolution: {integrity: sha512-uaEkyelv3oIL5iNjsB8Fl7US706w06KB+Q8ZNBO+us5+BGTyt5ChBawiirhHdra57tPgTSxMkjkpNgGmLKIBEQ==} + '@vue/compiler-sfc@3.5.17': resolution: {integrity: sha512-rQQxbRJMgTqwRugtjw0cnyQv9cP4/4BxWfTdRBkqsTfLOHWykLzbOc3C4GGzAmdMDxhzU/1Ija5bTjMVrddqww==} + '@vue/compiler-sfc@3.6.0-alpha.1': + resolution: {integrity: sha512-ZHXzwJh/CrWEUEFzUNoV8dJWFe94UCGHZpLpAFJQjd6lSKf3focAmYMhgz3bnYKO/KQg4sKqNRGOtPBFCrwbig==} + '@vue/compiler-ssr@3.5.17': resolution: {integrity: sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ==} + '@vue/compiler-ssr@3.6.0-alpha.1': + resolution: {integrity: sha512-I6ODpN9BYI/E7YZ8bygmfEgNwMCIYnzHBPe+1vptY5ry2ocgWC60r3O5vi2hOsuEYElSHAdwegIWJ8Q1/0q6/Q==} + + '@vue/compiler-vapor@3.6.0-alpha.1': + resolution: {integrity: sha512-h4jdbZksWUSCCW3OseJaG43L7NJjMp6KnS6Ic81DNOMcbu9Cn+iQUULWseACTHuwjoTRDigoPGAqpxd2V8T4rQ==} + '@vue/compiler-vue2@2.7.16': resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} @@ -3550,20 +3577,42 @@ packages: '@vue/reactivity@3.5.17': resolution: {integrity: sha512-l/rmw2STIscWi7SNJp708FK4Kofs97zc/5aEPQh4bOsReD/8ICuBcEmS7KGwDj5ODQLYWVN2lNibKJL1z5b+Lw==} + '@vue/reactivity@3.6.0-alpha.1': + resolution: {integrity: sha512-h/Rscsd7OhcBM3YWKwEg4FG5iLSjASMZVl5ahPfma19xig/MhwKrUc9dE4tLNMtd3ZbocIPzZsV+O4fgoAZFdw==} + '@vue/runtime-core@3.5.17': resolution: {integrity: sha512-QQLXa20dHg1R0ri4bjKeGFKEkJA7MMBxrKo2G+gJikmumRS7PTD4BOU9FKrDQWMKowz7frJJGqBffYMgQYS96Q==} + '@vue/runtime-core@3.6.0-alpha.1': + resolution: {integrity: sha512-HYCDiD2GrkiOqc+XHSDCOFeg2grCvFK0xw6gsPgUa8g0CK/vx+Ks3Qba6sBTdjwP9NNWWXtyAoHzd7uySlgBXg==} + '@vue/runtime-dom@3.5.17': resolution: {integrity: sha512-8El0M60TcwZ1QMz4/os2MdlQECgGoVHPuLnQBU3m9h3gdNRW9xRmI8iLS4t/22OQlOE6aJvNNlBiCzPHur4H9g==} + '@vue/runtime-dom@3.6.0-alpha.1': + resolution: {integrity: sha512-jpVyR9WNaft6xvL3dxA1bO7AnXFHw8IMdgru/XmmVIxpGQMQ+yXrXkjggO1GCDwkyjRz0mvZPXBEvY/aCizRoQ==} + + '@vue/runtime-vapor@3.6.0-alpha.1': + resolution: {integrity: sha512-K2WGUY5pNhzVi9QKqcwRv/zvAebcdjMFdmn1vC4/QJY/zP4hx9zRBWhS1mHwZsyj+NS9SDUV/tOrax6sWFO1BQ==} + peerDependencies: + '@vue/runtime-dom': 3.6.0-alpha.1 + '@vue/server-renderer@3.5.17': resolution: {integrity: sha512-BOHhm8HalujY6lmC3DbqF6uXN/K00uWiEeF22LfEsm9Q93XeJ/plHTepGwf6tqFcF7GA5oGSSAAUock3VvzaCA==} peerDependencies: vue: 3.5.17 + '@vue/server-renderer@3.6.0-alpha.1': + resolution: {integrity: sha512-TPAt4lNfGLrhncSImLqQQ1BmjIptW6lYtUbCCLeq8PvGVz19G4H1aC0vT1IyqjftV/lZuh7CyYohaEbdi4STFg==} + peerDependencies: + vue: 3.6.0-alpha.1 + '@vue/shared@3.5.17': resolution: {integrity: sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==} + '@vue/shared@3.6.0-alpha.1': + resolution: {integrity: sha512-3GhFAnJdh5vqmqCwNqxc/SRHSjnw6eQyDK1/8pRS7cgddt+ko8RLz7gjDqZuOfCut8xBPLxXjPDT9fmSVgXxIQ==} + '@vue/test-utils@2.4.6': resolution: {integrity: sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==} @@ -8404,6 +8453,14 @@ packages: typescript: optional: true + vue@3.6.0-alpha.1: + resolution: {integrity: sha512-DZjYvysI4pp2o+y/Qeswe+8rWe/eYY13NLB9Bei2Ba5ecz+G1n3Uch2LI7IBa1favAqX8fZ4GJ5+XPBbPWwwxQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + w3c-xmlserializer@5.0.0: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} @@ -8703,7 +8760,7 @@ snapshots: '@jridgewell/gen-mapping': 0.3.12 '@jridgewell/trace-mapping': 0.3.29 - '@antfu/eslint-config@4.16.2(@vue/compiler-sfc@3.5.17)(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.16.0)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))': + '@antfu/eslint-config@4.16.2(@vue/compiler-sfc@3.6.0-alpha.1)(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.16.0)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))': dependencies: '@antfu/install-pkg': 1.1.0 '@clack/prompts': 0.11.0 @@ -8734,7 +8791,7 @@ snapshots: eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2)) eslint-plugin-vue: 10.3.0(@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(vue-eslint-parser@10.2.0(eslint@9.30.1(jiti@2.4.2))) eslint-plugin-yml: 1.18.0(eslint@9.30.1(jiti@2.4.2)) - eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.17)(eslint@9.30.1(jiti@2.4.2)) + eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.6.0-alpha.1)(eslint@9.30.1(jiti@2.4.2)) globals: 16.3.0 jsonc-eslint-parser: 2.4.0 local-pkg: 1.1.1 @@ -8749,7 +8806,7 @@ snapshots: - typescript - vitest - '@antfu/eslint-config@4.16.2(@vue/compiler-sfc@3.5.17)(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.10)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))': + '@antfu/eslint-config@4.16.2(@vue/compiler-sfc@3.6.0-alpha.1)(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.10)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))': dependencies: '@antfu/install-pkg': 1.1.0 '@clack/prompts': 0.11.0 @@ -8780,7 +8837,7 @@ snapshots: eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2)) eslint-plugin-vue: 10.3.0(@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(vue-eslint-parser@10.2.0(eslint@9.30.1(jiti@2.4.2))) eslint-plugin-yml: 1.18.0(eslint@9.30.1(jiti@2.4.2)) - eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.17)(eslint@9.30.1(jiti@2.4.2)) + eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.6.0-alpha.1)(eslint@9.30.1(jiti@2.4.2)) globals: 16.3.0 jsonc-eslint-parser: 2.4.0 local-pkg: 1.1.1 @@ -9358,9 +9415,9 @@ snapshots: transitivePeerDependencies: - '@algolia/client-search' - '@element-plus/icons-vue@2.3.1(vue@3.5.17(typescript@5.8.3))': + '@element-plus/icons-vue@2.3.1(vue@3.6.0-alpha.1(typescript@5.8.3))': dependencies: - vue: 3.5.17(typescript@5.8.3) + vue: 3.6.0-alpha.1(typescript@5.8.3) '@emmetio/abbreviation@2.3.3': dependencies: @@ -10044,7 +10101,7 @@ snapshots: - utf-8-validate - vue - '@nuxt/eslint-config@1.5.2(@vue/compiler-sfc@3.5.17)(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': + '@nuxt/eslint-config@1.5.2(@vue/compiler-sfc@3.6.0-alpha.1)(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@antfu/install-pkg': 1.1.0 '@clack/prompts': 0.11.0 @@ -10062,7 +10119,7 @@ snapshots: eslint-plugin-regexp: 2.9.0(eslint@9.30.1(jiti@2.4.2)) eslint-plugin-unicorn: 59.0.1(eslint@9.30.1(jiti@2.4.2)) eslint-plugin-vue: 10.3.0(@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(vue-eslint-parser@10.2.0(eslint@9.30.1(jiti@2.4.2))) - eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.17)(eslint@9.30.1(jiti@2.4.2)) + eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.6.0-alpha.1)(eslint@9.30.1(jiti@2.4.2)) globals: 16.3.0 local-pkg: 1.1.1 pathe: 2.0.3 @@ -10108,7 +10165,7 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/module-builder@1.0.1(@nuxt/cli@3.25.1(magicast@0.3.5))(@vue/compiler-core@3.5.17)(esbuild@0.25.5)(sass@1.89.2)(typescript@5.8.3)(vue-tsc@3.0.1(typescript@5.8.3))(vue@3.5.17(typescript@5.8.3))': + '@nuxt/module-builder@1.0.1(@nuxt/cli@3.25.1(magicast@0.3.5))(@vue/compiler-core@3.6.0-alpha.1)(esbuild@0.25.5)(sass@1.89.2)(typescript@5.8.3)(vue-tsc@3.0.1(typescript@5.8.3))(vue@3.5.17(typescript@5.8.3))': dependencies: '@nuxt/cli': 3.25.1(magicast@0.3.5) citty: 0.1.6 @@ -10116,14 +10173,14 @@ snapshots: defu: 6.1.4 jiti: 2.4.2 magic-regexp: 0.8.0 - mkdist: 2.3.0(sass@1.89.2)(typescript@5.8.3)(vue-sfc-transformer@0.1.16(@vue/compiler-core@3.5.17)(esbuild@0.25.5)(vue@3.5.17(typescript@5.8.3)))(vue-tsc@3.0.1(typescript@5.8.3))(vue@3.5.17(typescript@5.8.3)) + mkdist: 2.3.0(sass@1.89.2)(typescript@5.8.3)(vue-sfc-transformer@0.1.16(@vue/compiler-core@3.6.0-alpha.1)(esbuild@0.25.5)(vue@3.5.17(typescript@5.8.3)))(vue-tsc@3.0.1(typescript@5.8.3))(vue@3.5.17(typescript@5.8.3)) mlly: 1.7.4 pathe: 2.0.3 pkg-types: 2.2.0 tsconfck: 3.1.6(typescript@5.8.3) typescript: 5.8.3 - unbuild: 3.5.0(sass@1.89.2)(typescript@5.8.3)(vue-sfc-transformer@0.1.16(@vue/compiler-core@3.5.17)(esbuild@0.25.5)(vue@3.5.17(typescript@5.8.3)))(vue-tsc@3.0.1(typescript@5.8.3))(vue@3.5.17(typescript@5.8.3)) - vue-sfc-transformer: 0.1.16(@vue/compiler-core@3.5.17)(esbuild@0.25.5)(vue@3.5.17(typescript@5.8.3)) + unbuild: 3.5.0(sass@1.89.2)(typescript@5.8.3)(vue-sfc-transformer@0.1.16(@vue/compiler-core@3.6.0-alpha.1)(esbuild@0.25.5)(vue@3.5.17(typescript@5.8.3)))(vue-tsc@3.0.1(typescript@5.8.3))(vue@3.5.17(typescript@5.8.3)) + vue-sfc-transformer: 0.1.16(@vue/compiler-core@3.6.0-alpha.1)(esbuild@0.25.5)(vue@3.5.17(typescript@5.8.3)) transitivePeerDependencies: - '@vue/compiler-core' - esbuild @@ -11135,11 +11192,11 @@ snapshots: transitivePeerDependencies: - vue - '@unocss/astro@66.3.3(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))': + '@unocss/astro@66.3.3(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.6.0-alpha.1(typescript@5.8.3))': dependencies: '@unocss/core': 66.3.3 '@unocss/reset': 66.3.3 - '@unocss/vite': 66.3.3(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3)) + '@unocss/vite': 66.3.3(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.6.0-alpha.1(typescript@5.8.3)) optionalDependencies: vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0) transitivePeerDependencies: @@ -11183,6 +11240,17 @@ snapshots: transitivePeerDependencies: - vue + '@unocss/inspector@66.3.3(vue@3.6.0-alpha.1(typescript@5.8.3))': + dependencies: + '@unocss/core': 66.3.3 + '@unocss/rule-utils': 66.3.3 + colorette: 2.0.20 + gzip-size: 6.0.0 + sirv: 3.0.1 + vue-flow-layout: 0.1.1(vue@3.6.0-alpha.1(typescript@5.8.3)) + transitivePeerDependencies: + - vue + '@unocss/postcss@66.3.3(postcss@8.5.6)': dependencies: '@unocss/config': 66.3.3 @@ -11287,12 +11355,12 @@ snapshots: transitivePeerDependencies: - vue - '@unocss/vite@66.3.3(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))': + '@unocss/vite@66.3.3(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.6.0-alpha.1(typescript@5.8.3))': dependencies: '@ampproject/remapping': 2.3.0 '@unocss/config': 66.3.3 '@unocss/core': 66.3.3 - '@unocss/inspector': 66.3.3(vue@3.5.17(typescript@5.8.3)) + '@unocss/inspector': 66.3.3(vue@3.6.0-alpha.1(typescript@5.8.3)) chokidar: 3.6.0 magic-string: 0.30.17 pathe: 2.0.3 @@ -11332,14 +11400,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue-jsx@5.0.1(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))': + '@vitejs/plugin-vue-jsx@5.0.1(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.6.0-alpha.1(typescript@5.8.3))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.0) '@rolldown/pluginutils': 1.0.0-beta.24 '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.28.0) vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0) - vue: 3.5.17(typescript@5.8.3) + vue: 3.6.0-alpha.1(typescript@5.8.3) transitivePeerDependencies: - supports-color @@ -11353,11 +11421,11 @@ snapshots: vite: 6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0) vue: 3.5.17(typescript@5.8.3) - '@vitejs/plugin-vue@6.0.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))': + '@vitejs/plugin-vue@6.0.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.6.0-alpha.1(typescript@5.8.3))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.19 vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0) - vue: 3.5.17(typescript@5.8.3) + vue: 3.6.0-alpha.1(typescript@5.8.3) '@vitest/eslint-plugin@1.3.4(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.16.0)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))': dependencies: @@ -11590,11 +11658,24 @@ snapshots: estree-walker: 2.0.2 source-map-js: 1.2.1 + '@vue/compiler-core@3.6.0-alpha.1': + dependencies: + '@babel/parser': 7.28.0 + '@vue/shared': 3.6.0-alpha.1 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + '@vue/compiler-dom@3.5.17': dependencies: '@vue/compiler-core': 3.5.17 '@vue/shared': 3.5.17 + '@vue/compiler-dom@3.6.0-alpha.1': + dependencies: + '@vue/compiler-core': 3.6.0-alpha.1 + '@vue/shared': 3.6.0-alpha.1 + '@vue/compiler-sfc@3.5.17': dependencies: '@babel/parser': 7.28.0 @@ -11607,11 +11688,37 @@ snapshots: postcss: 8.5.6 source-map-js: 1.2.1 + '@vue/compiler-sfc@3.6.0-alpha.1': + dependencies: + '@babel/parser': 7.28.0 + '@vue/compiler-core': 3.6.0-alpha.1 + '@vue/compiler-dom': 3.6.0-alpha.1 + '@vue/compiler-ssr': 3.6.0-alpha.1 + '@vue/compiler-vapor': 3.6.0-alpha.1 + '@vue/shared': 3.6.0-alpha.1 + estree-walker: 2.0.2 + magic-string: 0.30.17 + postcss: 8.5.6 + source-map-js: 1.2.1 + '@vue/compiler-ssr@3.5.17': dependencies: '@vue/compiler-dom': 3.5.17 '@vue/shared': 3.5.17 + '@vue/compiler-ssr@3.6.0-alpha.1': + dependencies: + '@vue/compiler-dom': 3.6.0-alpha.1 + '@vue/shared': 3.6.0-alpha.1 + + '@vue/compiler-vapor@3.6.0-alpha.1': + dependencies: + '@babel/parser': 7.28.0 + '@vue/compiler-dom': 3.6.0-alpha.1 + '@vue/shared': 3.6.0-alpha.1 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + '@vue/compiler-vue2@2.7.16': dependencies: de-indent: 1.0.2 @@ -11685,11 +11792,20 @@ snapshots: dependencies: '@vue/shared': 3.5.17 + '@vue/reactivity@3.6.0-alpha.1': + dependencies: + '@vue/shared': 3.6.0-alpha.1 + '@vue/runtime-core@3.5.17': dependencies: '@vue/reactivity': 3.5.17 '@vue/shared': 3.5.17 + '@vue/runtime-core@3.6.0-alpha.1': + dependencies: + '@vue/reactivity': 3.6.0-alpha.1 + '@vue/shared': 3.6.0-alpha.1 + '@vue/runtime-dom@3.5.17': dependencies: '@vue/reactivity': 3.5.17 @@ -11697,14 +11813,35 @@ snapshots: '@vue/shared': 3.5.17 csstype: 3.1.3 + '@vue/runtime-dom@3.6.0-alpha.1': + dependencies: + '@vue/reactivity': 3.6.0-alpha.1 + '@vue/runtime-core': 3.6.0-alpha.1 + '@vue/shared': 3.6.0-alpha.1 + csstype: 3.1.3 + + '@vue/runtime-vapor@3.6.0-alpha.1(@vue/runtime-dom@3.6.0-alpha.1)': + dependencies: + '@vue/reactivity': 3.6.0-alpha.1 + '@vue/runtime-dom': 3.6.0-alpha.1 + '@vue/shared': 3.6.0-alpha.1 + '@vue/server-renderer@3.5.17(vue@3.5.17(typescript@5.8.3))': dependencies: '@vue/compiler-ssr': 3.5.17 '@vue/shared': 3.5.17 vue: 3.5.17(typescript@5.8.3) + '@vue/server-renderer@3.6.0-alpha.1(vue@3.6.0-alpha.1(typescript@5.8.3))': + dependencies: + '@vue/compiler-ssr': 3.6.0-alpha.1 + '@vue/shared': 3.6.0-alpha.1 + vue: 3.6.0-alpha.1(typescript@5.8.3) + '@vue/shared@3.5.17': {} + '@vue/shared@3.6.0-alpha.1': {} + '@vue/test-utils@2.4.6': dependencies: js-beautify: 1.15.4 @@ -11719,19 +11856,19 @@ snapshots: transitivePeerDependencies: - typescript - '@vueuse/core@13.5.0(vue@3.5.17(typescript@5.8.3))': + '@vueuse/core@13.5.0(vue@3.6.0-alpha.1(typescript@5.8.3))': dependencies: '@types/web-bluetooth': 0.0.21 '@vueuse/metadata': 13.5.0 - '@vueuse/shared': 13.5.0(vue@3.5.17(typescript@5.8.3)) - vue: 3.5.17(typescript@5.8.3) + '@vueuse/shared': 13.5.0(vue@3.6.0-alpha.1(typescript@5.8.3)) + vue: 3.6.0-alpha.1(typescript@5.8.3) - '@vueuse/core@9.13.0(vue@3.5.17(typescript@5.8.3))': + '@vueuse/core@9.13.0(vue@3.6.0-alpha.1(typescript@5.8.3))': dependencies: '@types/web-bluetooth': 0.0.16 '@vueuse/metadata': 9.13.0 - '@vueuse/shared': 9.13.0(vue@3.5.17(typescript@5.8.3)) - vue-demi: 0.14.10(vue@3.5.17(typescript@5.8.3)) + '@vueuse/shared': 9.13.0(vue@3.6.0-alpha.1(typescript@5.8.3)) + vue-demi: 0.14.10(vue@3.6.0-alpha.1(typescript@5.8.3)) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -11761,13 +11898,13 @@ snapshots: transitivePeerDependencies: - typescript - '@vueuse/shared@13.5.0(vue@3.5.17(typescript@5.8.3))': + '@vueuse/shared@13.5.0(vue@3.6.0-alpha.1(typescript@5.8.3))': dependencies: - vue: 3.5.17(typescript@5.8.3) + vue: 3.6.0-alpha.1(typescript@5.8.3) - '@vueuse/shared@9.13.0(vue@3.5.17(typescript@5.8.3))': + '@vueuse/shared@9.13.0(vue@3.6.0-alpha.1(typescript@5.8.3))': dependencies: - vue-demi: 0.14.10(vue@3.5.17(typescript@5.8.3)) + vue-demi: 0.14.10(vue@3.6.0-alpha.1(typescript@5.8.3)) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -12661,15 +12798,15 @@ snapshots: electron-to-chromium@1.5.179: {} - element-plus@2.10.3(vue@3.5.17(typescript@5.8.3)): + element-plus@2.10.3(vue@3.6.0-alpha.1(typescript@5.8.3)): dependencies: '@ctrl/tinycolor': 3.6.1 - '@element-plus/icons-vue': 2.3.1(vue@3.5.17(typescript@5.8.3)) + '@element-plus/icons-vue': 2.3.1(vue@3.6.0-alpha.1(typescript@5.8.3)) '@floating-ui/dom': 1.7.2 '@popperjs/core': '@sxzz/popperjs-es@2.11.7' '@types/lodash': 4.17.20 '@types/lodash-es': 4.17.12 - '@vueuse/core': 9.13.0(vue@3.5.17(typescript@5.8.3)) + '@vueuse/core': 9.13.0(vue@3.6.0-alpha.1(typescript@5.8.3)) async-validator: 4.2.5 dayjs: 1.11.13 escape-html: 1.0.3 @@ -12678,7 +12815,7 @@ snapshots: lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21) memoize-one: 6.0.0 normalize-wheel-es: 1.2.0 - vue: 3.5.17(typescript@5.8.3) + vue: 3.6.0-alpha.1(typescript@5.8.3) transitivePeerDependencies: - '@vue/composition-api' @@ -13017,9 +13154,9 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.17)(eslint@9.30.1(jiti@2.4.2)): + eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.6.0-alpha.1)(eslint@9.30.1(jiti@2.4.2)): dependencies: - '@vue/compiler-sfc': 3.5.17 + '@vue/compiler-sfc': 3.6.0-alpha.1 eslint: 9.30.1(jiti@2.4.2) eslint-scope@8.4.0: @@ -14631,7 +14768,7 @@ snapshots: mkdirp@3.0.1: {} - mkdist@2.3.0(sass@1.89.2)(typescript@5.8.3)(vue-sfc-transformer@0.1.16(@vue/compiler-core@3.5.17)(esbuild@0.25.5)(vue@3.5.17(typescript@5.8.3)))(vue-tsc@3.0.1(typescript@5.8.3))(vue@3.5.17(typescript@5.8.3)): + mkdist@2.3.0(sass@1.89.2)(typescript@5.8.3)(vue-sfc-transformer@0.1.16(@vue/compiler-core@3.6.0-alpha.1)(esbuild@0.25.5)(vue@3.5.17(typescript@5.8.3)))(vue-tsc@3.0.1(typescript@5.8.3))(vue@3.5.17(typescript@5.8.3)): dependencies: autoprefixer: 10.4.21(postcss@8.5.6) citty: 0.1.6 @@ -14650,7 +14787,7 @@ snapshots: sass: 1.89.2 typescript: 5.8.3 vue: 3.5.17(typescript@5.8.3) - vue-sfc-transformer: 0.1.16(@vue/compiler-core@3.5.17)(esbuild@0.25.5)(vue@3.5.17(typescript@5.8.3)) + vue-sfc-transformer: 0.1.16(@vue/compiler-core@3.6.0-alpha.1)(esbuild@0.25.5)(vue@3.5.17(typescript@5.8.3)) vue-tsc: 3.0.1(typescript@5.8.3) mlly@1.7.4: @@ -14879,7 +15016,7 @@ snapshots: dependencies: boolbase: 1.0.0 - nuxt@3.17.6(@azure/identity@4.10.2)(@parcel/watcher@2.5.1)(@types/node@24.0.10)(@vue/compiler-sfc@3.5.17)(db0@0.3.2)(eslint@9.30.1(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.24)(rollup@4.44.2)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue-tsc@3.0.1(typescript@5.8.3))(yaml@2.8.0): + nuxt@3.17.6(@azure/identity@4.10.2)(@parcel/watcher@2.5.1)(@types/node@24.0.10)(@vue/compiler-sfc@3.6.0-alpha.1)(db0@0.3.2)(eslint@9.30.1(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.24)(rollup@4.44.2)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue-tsc@3.0.1(typescript@5.8.3))(yaml@2.8.0): dependencies: '@nuxt/cli': 3.25.1(magicast@0.3.5) '@nuxt/devalue': 2.0.2 @@ -14935,7 +15072,7 @@ snapshots: unctx: 2.4.1 unimport: 5.1.0 unplugin: 2.3.5 - unplugin-vue-router: 0.14.0(@vue/compiler-sfc@3.5.17)(vue-router@4.5.1(vue@3.5.17(typescript@5.8.3)))(vue@3.5.17(typescript@5.8.3)) + unplugin-vue-router: 0.14.0(@vue/compiler-sfc@3.6.0-alpha.1)(vue-router@4.5.1(vue@3.5.17(typescript@5.8.3)))(vue@3.5.17(typescript@5.8.3)) unstorage: 1.16.0(@azure/identity@4.10.2)(db0@0.3.2)(ioredis@5.6.1) untyped: 2.0.0 vue: 3.5.17(typescript@5.8.3) @@ -15273,10 +15410,10 @@ snapshots: pify@4.0.1: {} - pinia@3.0.3(typescript@5.8.3)(vue@3.5.17(typescript@5.8.3)): + pinia@3.0.3(typescript@5.8.3)(vue@3.6.0-alpha.1(typescript@5.8.3)): dependencies: '@vue/devtools-api': 7.7.7 - vue: 3.5.17(typescript@5.8.3) + vue: 3.6.0-alpha.1(typescript@5.8.3) optionalDependencies: typescript: 5.8.3 @@ -16492,7 +16629,7 @@ snapshots: ultrahtml@1.6.0: {} - unbuild@3.5.0(sass@1.89.2)(typescript@5.8.3)(vue-sfc-transformer@0.1.16(@vue/compiler-core@3.5.17)(esbuild@0.25.5)(vue@3.5.17(typescript@5.8.3)))(vue-tsc@3.0.1(typescript@5.8.3))(vue@3.5.17(typescript@5.8.3)): + unbuild@3.5.0(sass@1.89.2)(typescript@5.8.3)(vue-sfc-transformer@0.1.16(@vue/compiler-core@3.6.0-alpha.1)(esbuild@0.25.5)(vue@3.5.17(typescript@5.8.3)))(vue-tsc@3.0.1(typescript@5.8.3))(vue@3.5.17(typescript@5.8.3)): dependencies: '@rollup/plugin-alias': 5.1.1(rollup@4.44.2) '@rollup/plugin-commonjs': 28.0.6(rollup@4.44.2) @@ -16508,7 +16645,7 @@ snapshots: hookable: 5.5.3 jiti: 2.4.2 magic-string: 0.30.17 - mkdist: 2.3.0(sass@1.89.2)(typescript@5.8.3)(vue-sfc-transformer@0.1.16(@vue/compiler-core@3.5.17)(esbuild@0.25.5)(vue@3.5.17(typescript@5.8.3)))(vue-tsc@3.0.1(typescript@5.8.3))(vue@3.5.17(typescript@5.8.3)) + mkdist: 2.3.0(sass@1.89.2)(typescript@5.8.3)(vue-sfc-transformer@0.1.16(@vue/compiler-core@3.6.0-alpha.1)(esbuild@0.25.5)(vue@3.5.17(typescript@5.8.3)))(vue-tsc@3.0.1(typescript@5.8.3))(vue@3.5.17(typescript@5.8.3)) mlly: 1.7.4 pathe: 2.0.3 pkg-types: 2.2.0 @@ -16659,9 +16796,9 @@ snapshots: - supports-color - vue - unocss@66.3.3(postcss@8.5.6)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3)): + unocss@66.3.3(postcss@8.5.6)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.6.0-alpha.1(typescript@5.8.3)): dependencies: - '@unocss/astro': 66.3.3(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3)) + '@unocss/astro': 66.3.3(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.6.0-alpha.1(typescript@5.8.3)) '@unocss/cli': 66.3.3 '@unocss/core': 66.3.3 '@unocss/postcss': 66.3.3(postcss@8.5.6) @@ -16679,7 +16816,7 @@ snapshots: '@unocss/transformer-compile-class': 66.3.3 '@unocss/transformer-directives': 66.3.3 '@unocss/transformer-variant-group': 66.3.3 - '@unocss/vite': 66.3.3(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3)) + '@unocss/vite': 66.3.3(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.6.0-alpha.1(typescript@5.8.3)) optionalDependencies: vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0) transitivePeerDependencies: @@ -16687,7 +16824,7 @@ snapshots: - supports-color - vue - unplugin-auto-import@19.3.0(@nuxt/kit@3.17.6(magicast@0.3.5))(@vueuse/core@13.5.0(vue@3.5.17(typescript@5.8.3))): + unplugin-auto-import@19.3.0(@nuxt/kit@3.17.6(magicast@0.3.5))(@vueuse/core@13.5.0(vue@3.6.0-alpha.1(typescript@5.8.3))): dependencies: local-pkg: 1.1.1 magic-string: 0.30.17 @@ -16697,17 +16834,17 @@ snapshots: unplugin-utils: 0.2.4 optionalDependencies: '@nuxt/kit': 3.17.6(magicast@0.3.5) - '@vueuse/core': 13.5.0(vue@3.5.17(typescript@5.8.3)) + '@vueuse/core': 13.5.0(vue@3.6.0-alpha.1(typescript@5.8.3)) unplugin-utils@0.2.4: dependencies: pathe: 2.0.3 picomatch: 4.0.2 - unplugin-vue-router@0.14.0(@vue/compiler-sfc@3.5.17)(vue-router@4.5.1(vue@3.5.17(typescript@5.8.3)))(vue@3.5.17(typescript@5.8.3)): + unplugin-vue-router@0.14.0(@vue/compiler-sfc@3.6.0-alpha.1)(vue-router@4.5.1(vue@3.5.17(typescript@5.8.3)))(vue@3.5.17(typescript@5.8.3)): dependencies: '@vue-macros/common': 3.0.0-beta.15(vue@3.5.17(typescript@5.8.3)) - '@vue/compiler-sfc': 3.5.17 + '@vue/compiler-sfc': 3.6.0-alpha.1 ast-walker-scope: 0.8.1 chokidar: 4.0.3 fast-glob: 3.3.3 @@ -17286,9 +17423,9 @@ snapshots: vue-component-type-helpers@2.2.12: {} - vue-demi@0.14.10(vue@3.5.17(typescript@5.8.3)): + vue-demi@0.14.10(vue@3.6.0-alpha.1(typescript@5.8.3)): dependencies: - vue: 3.5.17(typescript@5.8.3) + vue: 3.6.0-alpha.1(typescript@5.8.3) vue-devtools-stub@0.1.0: {} @@ -17308,15 +17445,24 @@ snapshots: dependencies: vue: 3.5.17(typescript@5.8.3) + vue-flow-layout@0.1.1(vue@3.6.0-alpha.1(typescript@5.8.3)): + dependencies: + vue: 3.6.0-alpha.1(typescript@5.8.3) + vue-router@4.5.1(vue@3.5.17(typescript@5.8.3)): dependencies: '@vue/devtools-api': 6.6.4 vue: 3.5.17(typescript@5.8.3) - vue-sfc-transformer@0.1.16(@vue/compiler-core@3.5.17)(esbuild@0.25.5)(vue@3.5.17(typescript@5.8.3)): + vue-router@4.5.1(vue@3.6.0-alpha.1(typescript@5.8.3)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.6.0-alpha.1(typescript@5.8.3) + + vue-sfc-transformer@0.1.16(@vue/compiler-core@3.6.0-alpha.1)(esbuild@0.25.5)(vue@3.5.17(typescript@5.8.3)): dependencies: '@babel/parser': 7.28.0 - '@vue/compiler-core': 3.5.17 + '@vue/compiler-core': 3.6.0-alpha.1 esbuild: 0.25.5 vue: 3.5.17(typescript@5.8.3) @@ -17336,6 +17482,17 @@ snapshots: optionalDependencies: typescript: 5.8.3 + vue@3.6.0-alpha.1(typescript@5.8.3): + dependencies: + '@vue/compiler-dom': 3.6.0-alpha.1 + '@vue/compiler-sfc': 3.6.0-alpha.1 + '@vue/runtime-dom': 3.6.0-alpha.1 + '@vue/runtime-vapor': 3.6.0-alpha.1(@vue/runtime-dom@3.6.0-alpha.1) + '@vue/server-renderer': 3.6.0-alpha.1(vue@3.6.0-alpha.1(typescript@5.8.3)) + '@vue/shared': 3.6.0-alpha.1 + optionalDependencies: + typescript: 5.8.3 + w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 4e75ff0e..5123d95a 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,7 +3,7 @@ packages: - packages/* defines: - - &vue ^3.5.17 + - &vue ^3.6.0-alpha.1 - &vue-lang-tools ~3.0.1 - &volar ~2.4.17 - &volar-service ~0.0.64 @@ -138,8 +138,10 @@ catalogs: vscode-languageserver-textdocument: ^1.0.12 vscode-uri: ^3.1.0 vue-libs: + '@vue/compiler-core': *vue '@vue/compiler-dom': *vue '@vue/compiler-ssr': *vue + '@vue/compiler-vapor': *vue '@vue/language-core': *vue-lang-tools '@vue/language-service': *vue-lang-tools '@vue/shared': *vue From f5c290e587c900348f137f59ecda3a0339ee596e Mon Sep 17 00:00:00 2001 From: ShenQingchuan Date: Mon, 14 Jul 2025 10:58:39 +0800 Subject: [PATCH 02/35] wip: support vapor highlight and add demo --- packages/compiler/src/template/compose.ts | 13 ++++-- packages/e2e-test/src/app.vine.ts | 1 + .../src/fixtures/vapor-interop.vine.ts | 42 +++++++++++++++++++ packages/e2e-test/src/main.ts | 4 +- packages/e2e-test/src/router.ts | 2 + .../utils/process-vine-template-node.ts | 25 ++++++++--- packages/language-service/src/virtual-code.ts | 4 +- packages/vscode-ext/syntaxes/vine-inject.json | 2 +- packages/vue-vine/types/macros.d.ts | 5 ++- 9 files changed, 85 insertions(+), 13 deletions(-) create mode 100644 packages/e2e-test/src/fixtures/vapor-interop.vine.ts diff --git a/packages/compiler/src/template/compose.ts b/packages/compiler/src/template/compose.ts index 14b74c06..a80126b0 100644 --- a/packages/compiler/src/template/compose.ts +++ b/packages/compiler/src/template/compose.ts @@ -1,11 +1,12 @@ import type { SourceLocation as BabelSourceLocation, ExportNamedDeclaration, ImportDeclaration, Node } from '@babel/types' +import type { RootNode } from '@vue/compiler-core' import type { AttributeNode, BindingTypes, CompilerOptions, NodeTransform, CodegenResult as VDOMCodegenResult, SourceLocation as VueSourceLocation } from '@vue/compiler-dom' import type { CompilerOptions as CompilerOptionsVapor, VaporCodegenResult } from '@vue/compiler-vapor' import type { VineCompFnCtx, VineCompilerHooks, VineCompilerOptions, VineFileCtx } from '../types' import { isExportNamedDeclaration, isFunctionDeclaration, isIdentifier, isImportDeclaration, isImportDefaultSpecifier, isImportSpecifier } from '@babel/types' -import { compile as compileVDOM, ElementTypes, NodeTypes, parse } from '@vue/compiler-dom' +import { compile as compileVDOM, ElementTypes, NodeTypes, parse as vdomParse } from '@vue/compiler-dom' import { compile as ssrCompile } from '@vue/compiler-ssr' -import { compile as compileVapor } from '@vue/compiler-vapor' +import { compile as compileVapor, parse as vaporParse } from '@vue/compiler-vapor' import lineColumn from 'line-column' import { babelParse } from '../babel-helpers/parse' import { VineBindingTypes } from '../constants' @@ -60,8 +61,12 @@ function getTemplateParsedAst( return } + const _parse = vineCompFnCtx.isVapor + ? vaporParse + : vdomParse + return { - templateParsedAst: parse(vineCompFnCtx.templateSource, { + templateParsedAst: _parse(vineCompFnCtx.templateSource, { parseMode: 'base', prefixIdentifiers: true, expressionPlugins: ['typescript'], @@ -132,7 +137,7 @@ export function compileVineTemplate( }, ): ( (VDOMCodegenResult | VaporCodegenResult) - & { templateParsedAst?: ReturnType } + & { templateParsedAst?: RootNode } ) | null { const { __enableTransformAssetsURL = true, diff --git a/packages/e2e-test/src/app.vine.ts b/packages/e2e-test/src/app.vine.ts index bf15f506..f57f1a49 100644 --- a/packages/e2e-test/src/app.vine.ts +++ b/packages/e2e-test/src/app.vine.ts @@ -16,6 +16,7 @@ const routes = [ { path: '/vine-prop', label: 'vineProp macro' }, { path: '/vine-slots', label: 'vineSlots macro' }, { path: '/custom-elements', label: 'Custom Elements' }, + { path: '/vapor-interop', label: 'Vapor Interop' }, ] export function NavList() { diff --git a/packages/e2e-test/src/fixtures/vapor-interop.vine.ts b/packages/e2e-test/src/fixtures/vapor-interop.vine.ts new file mode 100644 index 00000000..51869a92 --- /dev/null +++ b/packages/e2e-test/src/fixtures/vapor-interop.vine.ts @@ -0,0 +1,42 @@ +import { ref } from 'vue' + +function VirtualDOMComp() { + const msg = ref('') + + return vine` +
+

Virtual DOM Component in Vapor slot

+ +

{{ msg }}

+
+ ` +} + +function TestVaporComp() { + const count = ref(0) + const add = () => count.value++ + const sub = () => count.value-- + + return vine.vapor` +
+

Vapor Component in Virtual DOM component

+
+ + +
+

Count: {{ count }}

+ + +
+ ` +} + +export function VaporTestContainer() { + return vine` +
+ + + +
+ ` +} diff --git a/packages/e2e-test/src/main.ts b/packages/e2e-test/src/main.ts index 857ee7f6..b09cf9e9 100644 --- a/packages/e2e-test/src/main.ts +++ b/packages/e2e-test/src/main.ts @@ -1,5 +1,5 @@ import { createPinia } from 'pinia' -import { createApp } from 'vue' +import { createApp, vaporInteropPlugin } from 'vue' import { App } from './app.vine' import router from './router' @@ -11,4 +11,6 @@ const app = createApp(App) app.use(router) app.use(pinia) +app.use(vaporInteropPlugin) + app.mount('#app') diff --git a/packages/e2e-test/src/router.ts b/packages/e2e-test/src/router.ts index 97ad37a7..face270e 100644 --- a/packages/e2e-test/src/router.ts +++ b/packages/e2e-test/src/router.ts @@ -9,6 +9,7 @@ import { TestStyleOrder } from './fixtures/style-order.vine' import { TodoList } from './fixtures/todo-list.vine' import { TestTransformAssetUrl } from './fixtures/transform-asset-url.vine' import { TestUseDefaults } from './fixtures/use-defaults.vine' +import { VaporTestContainer } from './fixtures/vapor-interop.vine' import { TestVibe } from './fixtures/vibe.vine' import { TestVineModel } from './fixtures/vine-model.vine' import { TestVinePropPage } from './fixtures/vine-prop.vine' @@ -33,6 +34,7 @@ const routes = [ { path: '/vine-prop', component: TestVinePropPage }, { path: '/vine-slots', component: TestVineSlots }, { path: '/custom-elements', component: TestCustomElement }, + { path: '/vapor-interop', component: VaporTestContainer }, ] const router = createRouter({ diff --git a/packages/eslint-parser/src/template/utils/process-vine-template-node.ts b/packages/eslint-parser/src/template/utils/process-vine-template-node.ts index dcf446ce..9eb576eb 100644 --- a/packages/eslint-parser/src/template/utils/process-vine-template-node.ts +++ b/packages/eslint-parser/src/template/utils/process-vine-template-node.ts @@ -91,6 +91,25 @@ export type ExtractVineTemplateResult = Array<{ bindVineTemplateESTree: (vineESTree: FinalProcessTemplateInfo) => void }> +function isVineTemplateNode(node: TSESTree.Node): node is TSESTree.TaggedTemplateExpression { + const isVine = ( + node.type === 'TaggedTemplateExpression' + && node.tag.type === 'Identifier' + && node.tag.name === 'vine' + ) + + const isVineVapor = ( + node.type === 'TaggedTemplateExpression' + && node.tag.type === 'MemberExpression' + && node.tag.object.type === 'Identifier' + && node.tag.object.name === 'vine' + && node.tag.property.type === 'Identifier' + && node.tag.property.name === 'vapor' + ) + + return isVine || isVineVapor +} + export function extractForVineTemplate( ast: TsESLintParseForESLint['ast'], ): ExtractVineTemplateResult { @@ -101,11 +120,7 @@ export function extractForVineTemplate( tsESLintTravese(ast, { enter(node, parent) { // Find all tagged template expressions which are tagged with 'vine'. - if ( - node.type === 'TaggedTemplateExpression' - && node.tag.type === 'Identifier' - && node.tag.name === 'vine' - ) { + if (isVineTemplateNode(node)) { const templateNode = node if (extractedTemplateNodes.has(templateNode)) { return diff --git a/packages/language-service/src/virtual-code.ts b/packages/language-service/src/virtual-code.ts index 527bd9f1..3ca80c16 100644 --- a/packages/language-service/src/virtual-code.ts +++ b/packages/language-service/src/virtual-code.ts @@ -252,7 +252,9 @@ export function createVueVineVirtualCode( compilerOptions, vueCompilerOptions, template: { - ast: vineCompFn.templateAst, + // @ts-expect-error - Todo: Vue language tool's dependency "@vue/compiler-core" + // is not upgraded in Vapor alpha stage + ast: vineCompFn.isVapor ? vineCompFn.templateAst : void 0, errors: [], warnings: [], name: 'template', diff --git a/packages/vscode-ext/syntaxes/vine-inject.json b/packages/vscode-ext/syntaxes/vine-inject.json index 9427acd3..557c6ea2 100644 --- a/packages/vscode-ext/syntaxes/vine-inject.json +++ b/packages/vscode-ext/syntaxes/vine-inject.json @@ -5,7 +5,7 @@ "patterns": [ { "name": "source.vine-vue-template.embedded.ts", - "begin": "vine(`)", + "begin": "(?:vine|vine\\.vapor)(`)", "beginCaptures": { "0": { "name": "entity.name.function.macro.vine-template.ts" }, "1": { "name": "punctuation.definition.string.begin.vine-template.ts" } diff --git a/packages/vue-vine/types/macros.d.ts b/packages/vue-vine/types/macros.d.ts index 4c9da490..efc64a58 100644 --- a/packages/vue-vine/types/macros.d.ts +++ b/packages/vue-vine/types/macros.d.ts @@ -74,7 +74,10 @@ declare global { const vineStyle: VineStyleMacro - const vine: (template: TemplateStringsArray) => VueVineComponent + const vine: { + (template: TemplateStringsArray): VueVineComponent + vapor: (template: TemplateStringsArray) => VueVineComponent + } // CSS lang types helpers const css: (style: TemplateStringsArray) => VineStyle From 03e0324087b0df68fa7cb2d7b5afb87c14b37363 Mon Sep 17 00:00:00 2001 From: ShenQingchuan Date: Mon, 14 Jul 2025 11:42:18 +0800 Subject: [PATCH 03/35] wip: language service changes for vapor --- packages/compiler/src/template/compose.ts | 3 ++- packages/compiler/src/types.ts | 1 + packages/language-service/src/vine-ctx.ts | 2 +- packages/language-service/src/virtual-code.ts | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/compiler/src/template/compose.ts b/packages/compiler/src/template/compose.ts index a80126b0..51bbdb88 100644 --- a/packages/compiler/src/template/compose.ts +++ b/packages/compiler/src/template/compose.ts @@ -139,6 +139,7 @@ export function compileVineTemplate( (VDOMCodegenResult | VaporCodegenResult) & { templateParsedAst?: RootNode } ) | null { + const { volar = false } = compilerHooks.getCompilerCtx()?.options ?? {} const { __enableTransformAssetsURL = true, __transformNegativeBool, @@ -177,7 +178,7 @@ export function compileVineTemplate( ) } - if (vineCompFnCtx.isVapor) { + if (vineCompFnCtx.isVapor && !volar) { return compileForVapor( vineCompFnCtx, { diff --git a/packages/compiler/src/types.ts b/packages/compiler/src/types.ts index 704559c0..a6f6e98a 100644 --- a/packages/compiler/src/types.ts +++ b/packages/compiler/src/types.ts @@ -79,6 +79,7 @@ export interface VineCompilerHooks { } export interface VineCompilerOptions { + volar?: boolean envMode?: string // 'development' | 'production' inlineTemplate?: boolean vueCompilerOptions?: CompilerOptions & { diff --git a/packages/language-service/src/vine-ctx.ts b/packages/language-service/src/vine-ctx.ts index 5e39d919..19a35c15 100644 --- a/packages/language-service/src/vine-ctx.ts +++ b/packages/language-service/src/vine-ctx.ts @@ -10,7 +10,7 @@ export function compileVineForVirtualCode(fileId: string, source: string): { vineCompileWarns: VineDiagnostic[] } { const compilerCtx = createCompilerCtx({ - envMode: 'module', + volar: true, vueCompilerOptions: { // 'module' will break Volar virtual code's mapping mode: 'function', diff --git a/packages/language-service/src/virtual-code.ts b/packages/language-service/src/virtual-code.ts index 3ca80c16..62461e46 100644 --- a/packages/language-service/src/virtual-code.ts +++ b/packages/language-service/src/virtual-code.ts @@ -254,7 +254,7 @@ export function createVueVineVirtualCode( template: { // @ts-expect-error - Todo: Vue language tool's dependency "@vue/compiler-core" // is not upgraded in Vapor alpha stage - ast: vineCompFn.isVapor ? vineCompFn.templateAst : void 0, + ast: vineCompFn.templateAst, errors: [], warnings: [], name: 'template', From 5da89b0682bfbff79a75ea6403cc01f22d19bfac Mon Sep 17 00:00:00 2001 From: ShenQingchuan Date: Mon, 14 Jul 2025 11:44:28 +0800 Subject: [PATCH 04/35] wip: add vapor interop e2e test case --- packages/e2e-test/tests/basic.spec.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/e2e-test/tests/basic.spec.ts b/packages/e2e-test/tests/basic.spec.ts index 2ed3ec5b..7c481bb5 100644 --- a/packages/e2e-test/tests/basic.spec.ts +++ b/packages/e2e-test/tests/basic.spec.ts @@ -223,4 +223,20 @@ describe('test basic functionality', async () => { expect(await sampleCustomElement?.locator('.text-content').textContent()).toMatchInlineSnapshot(`"Count: 1"`) }, )) + + it('should work in vapor interop mode', runTestAtPage( + '/vapor-interop', + browserCtx, + async () => { + expect(await evaluator.getTextContent('.test-vapor-comp h3')).toBe('Vapor Component in Virtual DOM component') + expect(await evaluator.getTextContent('.test-vdom-comp h3')).toBe('Virtual DOM Component in Vapor slot') + + await browserCtx.page?.fill('.test-vdom-comp input', 'hello') + expect(await evaluator.getTextContent('.test-vdom-comp p')).toBe('hello') + + expect(await evaluator.getTextContent('.test-vapor-comp p')).toBe('Count: 0') + await browserCtx.page?.click('.test-vapor-comp button') + expect(await evaluator.getTextContent('.test-vapor-comp p')).toBe('Count: 1') + }, + )) }) From 813eb16d1d49b9f776b7b5ce086e9a7917d5081b Mon Sep 17 00:00:00 2001 From: ShenQingchuan Date: Mon, 14 Jul 2025 11:52:07 +0800 Subject: [PATCH 05/35] wip: add guide for how to enable vapor in docs --- packages/docs/src/specification/overview.md | 18 ++++++++++++++++++ packages/docs/src/zh/specification/overview.md | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/packages/docs/src/specification/overview.md b/packages/docs/src/specification/overview.md index 40a8c84c..3b60a5e6 100644 --- a/packages/docs/src/specification/overview.md +++ b/packages/docs/src/specification/overview.md @@ -76,6 +76,24 @@ function MyComponent() { } ``` +### Vapor mode + +Since Vue 3.6, Vue provides a non-virtual DOM based rendering mechanism. + +You can turn on this mode in Vue SFC by appending `vapor` like this: + +```diff +-