From 9cf6d323db00dccd5104f8dcb5ac35cf7015ccc9 Mon Sep 17 00:00:00 2001 From: pimlie Date: Mon, 15 Jul 2019 19:50:57 +0200 Subject: [PATCH] feat: auto add ssrAttribute to htmlAttrs --- src/server/generators/attribute.js | 13 ++++++++++--- test/unit/generators.test.js | 15 ++++++++++++++- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/server/generators/attribute.js b/src/server/generators/attribute.js index 25147e3..ebfc6aa 100644 --- a/src/server/generators/attribute.js +++ b/src/server/generators/attribute.js @@ -8,9 +8,9 @@ import { isUndefined, isArray } from '../../utils/is-type' * @param {Object} data - the attributes to generate * @return {Object} - the attribute generator */ -export default function attributeGenerator ({ attribute } = {}, type, data) { +export default function attributeGenerator ({ attribute, ssrAttribute } = {}, type, data) { return { - text () { + text (addSrrAttribute) { let attributeStr = '' const watchedAttrs = [] @@ -26,7 +26,14 @@ export default function attributeGenerator ({ attribute } = {}, type, data) { } } - attributeStr += `${attribute}="${(watchedAttrs.sort()).join(',')}"` + if (attributeStr) { + attributeStr += `${attribute}="${(watchedAttrs.sort()).join(',')}"` + } + + if (type === 'htmlAttrs' && addSrrAttribute) { + return `${ssrAttribute}${attributeStr ? ' ' : ''}${attributeStr}` + } + return attributeStr } } diff --git a/test/unit/generators.test.js b/test/unit/generators.test.js index a078f6b..c88096b 100644 --- a/test/unit/generators.test.js +++ b/test/unit/generators.test.js @@ -6,7 +6,7 @@ import { titleGenerator } from '../../src/server/generators' const generateServerInjector = (type, data) => _generateServerInjector('test', defaultOptions, type, data) describe('generators', () => { - Object.keys(metaInfoData).forEach((type) => { + for (const type in metaInfoData) { const typeTests = metaInfoData[type] const testCases = { @@ -58,6 +58,19 @@ describe('generators', () => { } }) }) + } +}) + +describe('extra tests', () => { + test('auto add ssrAttribute', () => { + const htmlAttrs = generateServerInjector('htmlAttrs', {}) + expect(htmlAttrs.text(true)).toBe('data-vue-meta-server-rendered') + + const headAttrs = generateServerInjector('headAttrs', {}) + expect(headAttrs.text(true)).toBe('') + + const bodyAttrs = generateServerInjector('bodyAttrs', {}) + expect(bodyAttrs.text(true)).toBe('') }) })