vue-runtime-helpers
Version:
Runtime helpers for Vue SFC.
63 lines (49 loc) • 1.81 kB
JavaScript
;
function createInjectorSSR(context) {
if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
context = __VUE_SSR_CONTEXT__;
}
if (!context) return function () {};
if (!('styles' in context)) {
context._styles = context._styles || {};
Object.defineProperty(context, 'styles', {
enumerable: true,
get: function get() {
return context._renderStyles(context._styles);
}
});
context._renderStyles = context._renderStyles || renderStyles;
}
return function (id, style) {
return addStyle(id, style, context);
};
}
function addStyle(id, css, context) {
var group = process.env.NODE_ENV === 'production' ? css.media || 'default' : id;
var style = context._styles[group] || (context._styles[group] = {
ids: [],
css: ''
});
if (!style.ids.includes(id)) {
style.media = css.media;
style.ids.push(id);
var code = css.source;
if (process.env.NODE_ENV !== 'production' && css.map) {
// https://developer.chrome.com/devtools/docs/javascript-debugging
// this makes source maps inside style tags work properly in Chrome
code += '\n/*# sourceURL=' + css.map.sources[0] + ' */'; // http://stackoverflow.com/a/26603875
code += '\n/*# sourceMappingURL=data:application/json;base64,' + Buffer.from(unescape(encodeURIComponent(JSON.stringify(css.map)))).toString('base64') + ' */';
}
style.css += code + '\n';
}
}
function renderStyles(styles) {
var css = '';
for (var key in styles) {
var style = styles[key];
css += '<style data-vue-ssr-id="' + Array.from(style.ids).join(' ') + '"' + (style.media ? ' media="' + style.media + '"' : '') + '>' + style.css + '</style>';
}
return css;
}
module.exports = createInjectorSSR;
//# sourceMappingURL=server.js.map