From 09ae7b55de9d00ad98bce3df2b4ce039a2d90b73 Mon Sep 17 00:00:00 2001 From: Mathieu TUDISCO Date: Sun, 11 Oct 2020 11:37:47 +0200 Subject: [PATCH 1/4] fix(server-renderer): reproduce bug with class attributes order in tests. --- .../__tests__/renderToString.spec.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/packages/server-renderer/__tests__/renderToString.spec.ts b/packages/server-renderer/__tests__/renderToString.spec.ts index 25704eeee46..a7756a89e6b 100644 --- a/packages/server-renderer/__tests__/renderToString.spec.ts +++ b/packages/server-renderer/__tests__/renderToString.spec.ts @@ -142,6 +142,24 @@ describe('ssr: renderToString', () => { ) }) + test('template components with dynamic class attribute after static', async () => { + const app = createApp({ + template: `
` + }) + expect(await renderToString(app)).toBe( + `
` + ) + }) + + test('template components with dynamic class attribute before static', async () => { + const app = createApp({ + template: `
` + }) + expect(await renderToString(app)).toBe( + `
` + ) + }) + test('mixing optimized / vnode / template components', async () => { const OptimizedChild = { props: ['msg'], From a38a7b418ca6010fe3391bb134212998e37feb82 Mon Sep 17 00:00:00 2001 From: Mathieu TUDISCO Date: Sun, 11 Oct 2020 13:45:54 +0200 Subject: [PATCH 2/4] fix(compiler-ssr): add more specific tests to reproduce bug with class attributes order. --- packages/compiler-ssr/__tests__/ssrElement.spec.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/compiler-ssr/__tests__/ssrElement.spec.ts b/packages/compiler-ssr/__tests__/ssrElement.spec.ts index 55eaa50647c..30e75e36f2b 100644 --- a/packages/compiler-ssr/__tests__/ssrElement.spec.ts +++ b/packages/compiler-ssr/__tests__/ssrElement.spec.ts @@ -112,6 +112,15 @@ describe('ssr: element', () => { `) }) + test('v-bind:class + static class', () => { + expect(getCompiledString(`
`)) + .toMatchInlineSnapshot(` + "\`
\`" + `) + }) + test('v-bind:style', () => { expect(getCompiledString(`
`)) .toMatchInlineSnapshot(` From 432e5b543b7e8a1b2b746d9250022fd21b15556e Mon Sep 17 00:00:00 2001 From: Mathieu TUDISCO Date: Sun, 11 Oct 2020 13:47:31 +0200 Subject: [PATCH 3/4] fix(compiler-ssr): fix typo. --- packages/compiler-ssr/src/transforms/ssrInjectCssVars.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/compiler-ssr/src/transforms/ssrInjectCssVars.ts b/packages/compiler-ssr/src/transforms/ssrInjectCssVars.ts index 0e6540c3b66..c848598a286 100644 --- a/packages/compiler-ssr/src/transforms/ssrInjectCssVars.ts +++ b/packages/compiler-ssr/src/transforms/ssrInjectCssVars.ts @@ -15,8 +15,8 @@ export const ssrInjectCssVars: NodeTransform = (node, context) => { return } - // _cssVars is initailized once per render function - // the code is injected in ssrCodegenTrasnform when creating the + // _cssVars is initialized once per render function + // the code is injected in ssrCodegenTransform when creating the // ssr transform context if (node.type === NodeTypes.ROOT) { context.identifiers._cssVars = 1 From 16a6fa4afbf9e0259119f56166a00ac04b33482f Mon Sep 17 00:00:00 2001 From: Mathieu TUDISCO Date: Sun, 11 Oct 2020 13:48:13 +0200 Subject: [PATCH 4/4] fix(compiler-ssr): fix bug with class attributes order. --- .../compiler-ssr/src/transforms/ssrTransformElement.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/compiler-ssr/src/transforms/ssrTransformElement.ts b/packages/compiler-ssr/src/transforms/ssrTransformElement.ts index e2f2ed8de84..e036671fcda 100644 --- a/packages/compiler-ssr/src/transforms/ssrTransformElement.ts +++ b/packages/compiler-ssr/src/transforms/ssrTransformElement.ts @@ -324,9 +324,10 @@ function removeStaticBinding( tag: TemplateLiteral['elements'], binding: string ) { - const i = tag.findIndex( - e => typeof e === 'string' && e.startsWith(` ${binding}=`) - ) + const regExp = new RegExp(`^ ${binding}=".+"$`) + + const i = tag.findIndex(e => typeof e === 'string' && regExp.test(e)) + if (i > -1) { tag.splice(i, 1) }