From 2e3fe5932c962d447a4faa4b0ce996ead70c7d34 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Sun, 26 Dec 2021 13:13:24 +0800 Subject: [PATCH] fix(ssr): transform class props (#6261) --- .../node/ssr/__tests__/ssrTransform.spec.ts | 31 +++++++++++++++++++ packages/vite/src/node/ssr/ssrTransform.ts | 6 ++-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/packages/vite/src/node/ssr/__tests__/ssrTransform.spec.ts b/packages/vite/src/node/ssr/__tests__/ssrTransform.spec.ts index d8a325dafe5579..f788ef14274ff0 100644 --- a/packages/vite/src/node/ssr/__tests__/ssrTransform.spec.ts +++ b/packages/vite/src/node/ssr/__tests__/ssrTransform.spec.ts @@ -498,3 +498,34 @@ objRest() " `) }) + +test('class props', async () => { + expect( + ( + await ssrTransform( + ` +import { remove, add } from 'vue' + +class A { + remove = 1 + add = null +} +`, + null, + null + ) + ).code + ).toMatchInlineSnapshot(` + " + const __vite_ssr_import_0__ = await __vite_ssr_import__(\\"vue\\"); + + + const add = __vite_ssr_import_0__.add; + const remove = __vite_ssr_import_0__.remove; + class A { + remove = 1 + add = null + } + " + `) +}) diff --git a/packages/vite/src/node/ssr/ssrTransform.ts b/packages/vite/src/node/ssr/ssrTransform.ts index ba1dc418c15b87..ebbd92f8d09df8 100644 --- a/packages/vite/src/node/ssr/ssrTransform.ts +++ b/packages/vite/src/node/ssr/ssrTransform.ts @@ -180,6 +180,7 @@ export async function ssrTransform( // 3. convert references to import bindings & import.meta references walk(ast, { onIdentifier(id, parent, parentStack) { + const grandparent = parentStack[parentStack.length - 2] const binding = idToImportMap.get(id.name) if (!binding) { return @@ -195,8 +196,9 @@ export async function ssrTransform( s.appendLeft(id.end, `: ${binding}`) } } else if ( - parent.type === 'ClassDeclaration' && - id === parent.superClass + (parent.type === 'PropertyDefinition' && + grandparent?.type === 'ClassBody') || + (parent.type === 'ClassDeclaration' && id === parent.superClass) ) { if (!declaredConst.has(id.name)) { declaredConst.add(id.name)