From: Evan You Date: Fri, 13 Mar 2020 15:55:04 +0000 (-0400) Subject: refactor(ssr): adjust ssr fragment anchor content X-Git-Tag: v3.0.0-alpha.9~28 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a05d41c9401f556109e80756acba7b380e25edb2;p=thirdparty%2Fvuejs%2Fcore.git refactor(ssr): adjust ssr fragment anchor content --- diff --git a/packages/compiler-core/__tests__/hydration.spec.ts b/packages/compiler-core/__tests__/hydration.spec.ts index fc020a4570..af332cd1eb 100644 --- a/packages/compiler-core/__tests__/hydration.spec.ts +++ b/packages/compiler-core/__tests__/hydration.spec.ts @@ -98,7 +98,7 @@ describe('SSR hydration', () => { const msg = ref('foo') const fn = jest.fn() const { vnode, container } = mountWithHydration( - '
foo
', + '
foo
', () => h('div', [ [h('span', msg.value), [h('span', { class: msg.value, onClick: fn })]] @@ -106,6 +106,9 @@ describe('SSR hydration', () => { ) expect(vnode.el).toBe(container.firstChild) + // should remove anchors in dev mode + expect(vnode.el.innerHTML).toBe(`foo`) + // start fragment 1 const fragment1 = (vnode.children as VNode[])[0] expect(fragment1.el).toBe(vnode.el.childNodes[0]) @@ -136,9 +139,7 @@ describe('SSR hydration', () => { msg.value = 'bar' await nextTick() - expect(vnode.el.innerHTML).toBe( - `bar` - ) + expect(vnode.el.innerHTML).toBe(`bar`) }) test('portal', async () => { diff --git a/packages/compiler-ssr/__tests__/ssrComponent.spec.ts b/packages/compiler-ssr/__tests__/ssrComponent.spec.ts index 9872b22d79..d4df853846 100644 --- a/packages/compiler-ssr/__tests__/ssrComponent.spec.ts +++ b/packages/compiler-ssr/__tests__/ssrComponent.spec.ts @@ -219,11 +219,11 @@ describe('ssr: components', () => { foo: ({ list }, _push, _parent, _scopeId) => { if (_push) { if (_ctx.ok) { - _push(\`\`) + _push(\`\`) _ssrRenderList(list, (i) => { _push(\`\`) }) - _push(\`\`) + _push(\`\`) } else { _push(\`\`) } @@ -242,11 +242,11 @@ describe('ssr: components', () => { bar: ({ ok }, _push, _parent, _scopeId) => { if (_push) { if (ok) { - _push(\`\`) + _push(\`\`) _ssrRenderList(_ctx.list, (i) => { _push(\`\`) }) - _push(\`\`) + _push(\`\`) } else { _push(\`\`) } @@ -281,7 +281,7 @@ describe('ssr: components', () => { .toMatchInlineSnapshot(` " return function ssrRender(_ctx, _push, _parent) { - _push(\`
\`) + _push(\`
\`) }" `) diff --git a/packages/compiler-ssr/__tests__/ssrVFor.spec.ts b/packages/compiler-ssr/__tests__/ssrVFor.spec.ts index 62697ffa23..d599bc1ae4 100644 --- a/packages/compiler-ssr/__tests__/ssrVFor.spec.ts +++ b/packages/compiler-ssr/__tests__/ssrVFor.spec.ts @@ -6,11 +6,11 @@ describe('ssr: v-for', () => { "const { ssrRenderList: _ssrRenderList } = require(\\"@vue/server-renderer\\") return function ssrRender(_ctx, _push, _parent) { - _push(\`\`) + _push(\`\`) _ssrRenderList(_ctx.list, (i) => { _push(\`
\`) }) - _push(\`\`) + _push(\`\`) }" `) }) @@ -21,11 +21,11 @@ describe('ssr: v-for', () => { "const { ssrRenderList: _ssrRenderList } = require(\\"@vue/server-renderer\\") return function ssrRender(_ctx, _push, _parent) { - _push(\`\`) + _push(\`\`) _ssrRenderList(_ctx.list, (i) => { _push(\`
foobar
\`) }) - _push(\`\`) + _push(\`\`) }" `) }) @@ -41,9 +41,9 @@ describe('ssr: v-for', () => { "const { ssrInterpolate: _ssrInterpolate, ssrRenderList: _ssrRenderList } = require(\\"@vue/server-renderer\\") return function ssrRender(_ctx, _push, _parent) { - _push(\`\`) + _push(\`\`) _ssrRenderList(_ctx.list, (row, i) => { - _push(\`
\`) + _push(\`
\`) _ssrRenderList(row, (j) => { _push(\`
\${ _ssrInterpolate(i) @@ -51,9 +51,9 @@ describe('ssr: v-for', () => { _ssrInterpolate(j) }
\`) }) - _push(\`
\`) + _push(\`
\`) }) - _push(\`\`) + _push(\`\`) }" `) }) @@ -64,11 +64,11 @@ describe('ssr: v-for', () => { "const { ssrInterpolate: _ssrInterpolate, ssrRenderList: _ssrRenderList } = require(\\"@vue/server-renderer\\") return function ssrRender(_ctx, _push, _parent) { - _push(\`\`) + _push(\`\`) _ssrRenderList(_ctx.list, (i) => { - _push(\`\${_ssrInterpolate(i)}\`) + _push(\`\${_ssrInterpolate(i)}\`) }) - _push(\`\`) + _push(\`\`) }" `) }) @@ -81,11 +81,11 @@ describe('ssr: v-for', () => { "const { ssrInterpolate: _ssrInterpolate, ssrRenderList: _ssrRenderList } = require(\\"@vue/server-renderer\\") return function ssrRender(_ctx, _push, _parent) { - _push(\`\`) + _push(\`\`) _ssrRenderList(_ctx.list, (i) => { _push(\`\${_ssrInterpolate(i)}\`) }) - _push(\`\`) + _push(\`\`) }" `) }) @@ -99,15 +99,15 @@ describe('ssr: v-for', () => { "const { ssrInterpolate: _ssrInterpolate, ssrRenderList: _ssrRenderList } = require(\\"@vue/server-renderer\\") return function ssrRender(_ctx, _push, _parent) { - _push(\`\`) + _push(\`\`) _ssrRenderList(_ctx.list, (i) => { - _push(\`\${ + _push(\`\${ _ssrInterpolate(i) }\${ _ssrInterpolate(i + 1) - }\`) + }\`) }) - _push(\`\`) + _push(\`\`) }" `) }) @@ -123,11 +123,11 @@ describe('ssr: v-for', () => { "const { ssrInterpolate: _ssrInterpolate, ssrRenderList: _ssrRenderList } = require(\\"@vue/server-renderer\\") return function ssrRender(_ctx, _push, _parent) { - _push(\`\`) + _push(\`\`) _ssrRenderList(_ctx.list, ({ foo }, index) => { _push(\`
\${_ssrInterpolate(foo + _ctx.bar + index)}
\`) }) - _push(\`\`) + _push(\`\`) }" `) }) diff --git a/packages/compiler-ssr/__tests__/ssrVIf.spec.ts b/packages/compiler-ssr/__tests__/ssrVIf.spec.ts index 0e887c1210..51a3d78fe6 100644 --- a/packages/compiler-ssr/__tests__/ssrVIf.spec.ts +++ b/packages/compiler-ssr/__tests__/ssrVIf.spec.ts @@ -80,7 +80,7 @@ describe('ssr: v-if', () => { " return function ssrRender(_ctx, _push, _parent) { if (_ctx.foo) { - _push(\`hello\`) + _push(\`hello\`) } else { _push(\`\`) } @@ -110,7 +110,7 @@ describe('ssr: v-if', () => { " return function ssrRender(_ctx, _push, _parent) { if (_ctx.foo) { - _push(\`
hi
ho
\`) + _push(\`
hi
ho
\`) } else { _push(\`\`) } @@ -126,11 +126,11 @@ describe('ssr: v-if', () => { return function ssrRender(_ctx, _push, _parent) { if (_ctx.foo) { - _push(\`\`) + _push(\`\`) _ssrRenderList(_ctx.list, (i) => { _push(\`
\`) }) - _push(\`\`) + _push(\`\`) } else { _push(\`\`) } @@ -147,7 +147,7 @@ describe('ssr: v-if', () => { " return function ssrRender(_ctx, _push, _parent) { if (_ctx.foo) { - _push(\`
hi
ho
\`) + _push(\`
hi
ho
\`) } else { _push(\`
\`) } diff --git a/packages/compiler-ssr/src/ssrCodegenTransform.ts b/packages/compiler-ssr/src/ssrCodegenTransform.ts index c82c828080..2d68800f1d 100644 --- a/packages/compiler-ssr/src/ssrCodegenTransform.ts +++ b/packages/compiler-ssr/src/ssrCodegenTransform.ts @@ -111,7 +111,7 @@ export function processChildren( asFragment = false ) { if (asFragment) { - context.pushStringPart(``) + context.pushStringPart(``) } for (let i = 0; i < children.length; i++) { const child = children[i] @@ -136,7 +136,7 @@ export function processChildren( } } if (asFragment) { - context.pushStringPart(``) + context.pushStringPart(``) } } diff --git a/packages/compiler-ssr/src/transforms/ssrVFor.ts b/packages/compiler-ssr/src/transforms/ssrVFor.ts index a4a78a8db1..9a87ca86b7 100644 --- a/packages/compiler-ssr/src/transforms/ssrVFor.ts +++ b/packages/compiler-ssr/src/transforms/ssrVFor.ts @@ -33,12 +33,12 @@ export function ssrProcessFor(node: ForNode, context: SSRTransformContext) { needFragmentWrapper ) // v-for always renders a fragment - context.pushStringPart(``) + context.pushStringPart(``) context.pushStatement( createCallExpression(context.helper(SSR_RENDER_LIST), [ node.source, renderLoop ]) ) - context.pushStringPart(``) + context.pushStringPart(``) } diff --git a/packages/runtime-core/src/hydration.ts b/packages/runtime-core/src/hydration.ts index cee0ca6eb4..5caa282b40 100644 --- a/packages/runtime-core/src/hydration.ts +++ b/packages/runtime-core/src/hydration.ts @@ -76,7 +76,7 @@ export function createHydrationFunctions( parentSuspense: SuspenseBoundary | null, optimized = false ): Node | null => { - const isFragmentStart = isComment(node) && node.data === '1' + const isFragmentStart = isComment(node) && node.data === '[' if (__DEV__ && isFragmentStart) { // in dev mode, replace comment anchors with invisible text nodes // for easier debugging @@ -403,8 +403,8 @@ export function createHydrationFunctions( while (node) { node = nextSibling(node) if (node && isComment(node)) { - if (node.data === '1') match++ - if (node.data === '0') { + if (node.data === '[') match++ + if (node.data === ']') { if (match === 0) { return nextSibling(node) } else { diff --git a/packages/server-renderer/__tests__/renderToString.spec.ts b/packages/server-renderer/__tests__/renderToString.spec.ts index 710dbc9f4a..7a0de6fe97 100644 --- a/packages/server-renderer/__tests__/renderToString.spec.ts +++ b/packages/server-renderer/__tests__/renderToString.spec.ts @@ -257,7 +257,7 @@ describe('ssr: renderToString', () => { ) ).toBe( `
parent
` + - `from slot` + + `from slot` + `
` ) @@ -273,7 +273,7 @@ describe('ssr: renderToString', () => { }) ) ).toBe( - `
parent
fallback
` + `
parent
fallback
` ) }) @@ -318,7 +318,7 @@ describe('ssr: renderToString', () => { ) ).toBe( `
parent
` + - `from slot` + + `from slot` + `
` ) }) @@ -336,7 +336,7 @@ describe('ssr: renderToString', () => { expect(await renderToString(app)).toBe( `
parent
` + - `from slot` + + `from slot` + `
` ) }) @@ -460,7 +460,7 @@ describe('ssr: renderToString', () => { ]) ) ).toBe( - `
foobarbaz
` + `
foobarbaz
` ) }) diff --git a/packages/server-renderer/__tests__/ssrSuspense.spec.ts b/packages/server-renderer/__tests__/ssrSuspense.spec.ts index 02a50fa165..e7bd3b5baa 100644 --- a/packages/server-renderer/__tests__/ssrSuspense.spec.ts +++ b/packages/server-renderer/__tests__/ssrSuspense.spec.ts @@ -33,7 +33,7 @@ describe('SSR Suspense', () => { } }) - expect(await renderToString(app)).toBe(`
async
`) + expect(await renderToString(app)).toBe(`
async
`) }) test('with async component', async () => { @@ -49,7 +49,7 @@ describe('SSR Suspense', () => { } }) - expect(await renderToString(app)).toBe(`
async
`) + expect(await renderToString(app)).toBe(`
async
`) }) test('fallback', async () => { @@ -69,7 +69,7 @@ describe('SSR Suspense', () => { }) expect(await renderToString(app)).toBe( - `
fallback
` + `
fallback
` ) expect('Uncaught error in async setup').toHaveBeenWarned() }) diff --git a/packages/server-renderer/src/helpers/ssrRenderSlot.ts b/packages/server-renderer/src/helpers/ssrRenderSlot.ts index bfdf137f00..64d321827c 100644 --- a/packages/server-renderer/src/helpers/ssrRenderSlot.ts +++ b/packages/server-renderer/src/helpers/ssrRenderSlot.ts @@ -19,7 +19,7 @@ export function ssrRenderSlot( parentComponent: ComponentInternalInstance ) { // template-compiled slots are always rendered as fragments - push(``) + push(``) const slotFn = slots[slotName] if (slotFn) { if (slotFn.length > 1) { @@ -33,5 +33,5 @@ export function ssrRenderSlot( } else if (fallbackRenderFn) { fallbackRenderFn() } - push(``) + push(``) } diff --git a/packages/server-renderer/src/helpers/ssrRenderSuspense.ts b/packages/server-renderer/src/helpers/ssrRenderSuspense.ts index 3f1f66d3e2..00546a687d 100644 --- a/packages/server-renderer/src/helpers/ssrRenderSuspense.ts +++ b/packages/server-renderer/src/helpers/ssrRenderSuspense.ts @@ -9,9 +9,9 @@ export async function ssrRenderSuspense({ try { if (renderContent) { const { push, getBuffer } = createBuffer() - push(``) + push(``) renderContent(push) - push(``) + push(``) return await getBuffer() } else { return [] @@ -19,9 +19,9 @@ export async function ssrRenderSuspense({ } catch { if (renderFallback) { const { push, getBuffer } = createBuffer() - push(``) + push(``) renderFallback(push) - push(``) + push(``) return getBuffer() } else { return [] diff --git a/packages/server-renderer/src/renderToString.ts b/packages/server-renderer/src/renderToString.ts index 524c19c5eb..09a5ad3b0f 100644 --- a/packages/server-renderer/src/renderToString.ts +++ b/packages/server-renderer/src/renderToString.ts @@ -256,9 +256,9 @@ function renderVNode( push(children ? `` : ``) break case Fragment: - push(``) // open + push(``) // open renderVNodeChildren(push, children as VNodeArrayChildren, parentComponent) - push(``) // close + push(``) // close break default: if (shapeFlag & ShapeFlags.ELEMENT) {