From 81992b0f8e9c11a89796572e45fa4aee06cb9de5 Mon Sep 17 00:00:00 2001 From: daiwei Date: Wed, 22 Jan 2025 12:05:53 +0800 Subject: [PATCH 01/38] wip: v-skip --- packages/compiler-core/src/ast.ts | 1 + packages/compiler-core/src/compile.ts | 2 + packages/compiler-core/src/errors.ts | 4 ++ packages/compiler-core/src/transforms/vIf.ts | 2 +- .../compiler-core/src/transforms/vSkip.ts | 70 +++++++++++++++++++ packages/shared/src/general.ts | 2 +- 6 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 packages/compiler-core/src/transforms/vSkip.ts diff --git a/packages/compiler-core/src/ast.ts b/packages/compiler-core/src/ast.ts index 2d6df9d9010..2956a4b3dc3 100644 --- a/packages/compiler-core/src/ast.ts +++ b/packages/compiler-core/src/ast.ts @@ -144,6 +144,7 @@ export interface PlainElementNode extends BaseElementNode { | SimpleExpressionNode // when hoisted | CacheExpression // when cached by v-once | MemoExpression // when cached by v-memo + | ConditionalExpression | undefined ssrCodegenNode?: TemplateLiteral } diff --git a/packages/compiler-core/src/compile.ts b/packages/compiler-core/src/compile.ts index a697c9d22e6..637d31c5191 100644 --- a/packages/compiler-core/src/compile.ts +++ b/packages/compiler-core/src/compile.ts @@ -22,6 +22,7 @@ import { transformModel } from './transforms/vModel' import { transformFilter } from './compat/transformFilter' import { ErrorCodes, createCompilerError, defaultOnError } from './errors' import { transformMemo } from './transforms/vMemo' +import { transformSkip } from './transforms/vSkip' export type TransformPreset = [ NodeTransform[], @@ -35,6 +36,7 @@ export function getBaseTransformPreset( [ transformOnce, transformIf, + transformSkip, transformMemo, transformFor, ...(__COMPAT__ ? [transformFilter] : []), diff --git a/packages/compiler-core/src/errors.ts b/packages/compiler-core/src/errors.ts index 58e113ab19e..42466168e98 100644 --- a/packages/compiler-core/src/errors.ts +++ b/packages/compiler-core/src/errors.ts @@ -90,6 +90,8 @@ export enum ErrorCodes { X_V_MODEL_ON_PROPS, X_INVALID_EXPRESSION, X_KEEP_ALIVE_INVALID_CHILDREN, + X_V_SKIP_NO_EXPRESSION, + X_V_SKIP_ON_TEMPLATE, // generic errors X_PREFIX_ID_NOT_SUPPORTED, @@ -179,6 +181,8 @@ export const errorMessages: Record = { [ErrorCodes.X_INVALID_EXPRESSION]: `Error parsing JavaScript expression: `, [ErrorCodes.X_KEEP_ALIVE_INVALID_CHILDREN]: ` expects exactly one child component.`, [ErrorCodes.X_VNODE_HOOKS]: `@vnode-* hooks in templates are no longer supported. Use the vue: prefix instead. For example, @vnode-mounted should be changed to @vue:mounted. @vnode-* hooks support has been removed in 3.4.`, + [ErrorCodes.X_V_SKIP_NO_EXPRESSION]: `v-skip is missing expression.`, + [ErrorCodes.X_V_SKIP_ON_TEMPLATE]: `v-skip cannot be used on