From 5608bc8f04fe21616999ae7a68b1a8b6953d320f Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Sun, 26 Dec 2021 12:34:59 +0800 Subject: [PATCH 1/2] fix(ssr): transform class props --- .../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..78df802a3b5ac5 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.only('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) From f3cea2f10042ed68830b482cce02052e6692a4ef Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Sun, 26 Dec 2021 12:51:37 +0800 Subject: [PATCH 2/2] chore: fix --- packages/vite/src/node/ssr/__tests__/ssrTransform.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vite/src/node/ssr/__tests__/ssrTransform.spec.ts b/packages/vite/src/node/ssr/__tests__/ssrTransform.spec.ts index 78df802a3b5ac5..f788ef14274ff0 100644 --- a/packages/vite/src/node/ssr/__tests__/ssrTransform.spec.ts +++ b/packages/vite/src/node/ssr/__tests__/ssrTransform.spec.ts @@ -499,7 +499,7 @@ objRest() `) }) -test.only('class props', async () => { +test('class props', async () => { expect( ( await ssrTransform(