From 359a7c2dc7c19503ec70af6a83f3150fa9a32c48 Mon Sep 17 00:00:00 2001 From: Damian Stasik Date: Sun, 28 Apr 2019 19:35:53 +0200 Subject: [PATCH] feat: add ability to set ssr content placeholder --- src/server/create-renderer.js | 7 +++++-- src/server/template-renderer/index.js | 7 ++++--- test/ssr/ssr-template.spec.js | 20 ++++++++++++++++++++ 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/server/create-renderer.js b/src/server/create-renderer.js index 502b6fa6d1d..fa57f11d221 100644 --- a/src/server/create-renderer.js +++ b/src/server/create-renderer.js @@ -31,6 +31,7 @@ export type RenderOptions = { clientManifest?: ClientManifest; serializer?: Function; runInNewContext?: boolean | 'once'; + contentPlaceholder?: string; }; export function createRenderer ({ @@ -43,7 +44,8 @@ export function createRenderer ({ shouldPreload, shouldPrefetch, clientManifest, - serializer + serializer, + contentPlaceholder }: RenderOptions = {}): Renderer { const render = createRenderFunction(modules, directives, isUnaryTag, cache) const templateRenderer = new TemplateRenderer({ @@ -52,7 +54,8 @@ export function createRenderer ({ shouldPreload, shouldPrefetch, clientManifest, - serializer + serializer, + contentPlaceholder }) return { diff --git a/src/server/template-renderer/index.js b/src/server/template-renderer/index.js index c8927b2de2c..735a86b8422 100644 --- a/src/server/template-renderer/index.js +++ b/src/server/template-renderer/index.js @@ -17,6 +17,7 @@ type TemplateRendererOptions = { shouldPreload?: (file: string, type: string) => boolean; shouldPrefetch?: (file: string, type: string) => boolean; serializer?: Function; + contentPlaceholder?: string; }; export type ClientManifest = { @@ -55,11 +56,11 @@ export default class TemplateRenderer { this.inject = options.inject !== false // if no template option is provided, the renderer is created // as a utility object for rendering assets like preload links and scripts. - - const { template } = options + + const { template, contentPlaceholder } = options this.parsedTemplate = template ? typeof template === 'string' - ? parseTemplate(template) + ? parseTemplate(template, contentPlaceholder) : template : null diff --git a/test/ssr/ssr-template.spec.js b/test/ssr/ssr-template.spec.js index d30f096668a..7ab8535a0f7 100644 --- a/test/ssr/ssr-template.spec.js +++ b/test/ssr/ssr-template.spec.js @@ -5,6 +5,7 @@ import VueSSRClientPlugin from '../../packages/vue-server-renderer/client-plugin import { createRenderer as createBundleRenderer } from './ssr-bundle-render.spec.js' const defaultTemplate = `` +const customContentPlaceholderTemplate = `` const interpolateTemplate = `{{ title }}{{{ snippet }}}` function generateClientManifest (file, cb) { @@ -67,6 +68,25 @@ describe('SSR: template option', () => { }) }) + it('renderToString with custom content placeholder', done => { + const renderer = createRenderer({ + template: customContentPlaceholderTemplate, + contentPlaceholder: '' + }) + + renderer.renderToString(new Vue({ + template: '
hi
' + }), (err, res) => { + expect(err).toBeNull() + expect(res).toContain( + `` + + `
hi
` + + `` + ) + done() + }) + }) + it('renderToString with interpolation', done => { const renderer = createRenderer({ template: interpolateTemplate