/* @flow */
|
|
const compile = require('lodash.template')
|
const compileOptions = {
|
escape: /{{([^{][\s\S]+?[^}])}}/g,
|
interpolate: /{{{([\s\S]+?)}}}/g
|
}
|
|
export type ParsedTemplate = {
|
head: (data: any) => string;
|
neck: (data: any) => string;
|
tail: (data: any) => string;
|
};
|
|
export function parseTemplate (
|
template: string,
|
contentPlaceholder?: string = '<!--vue-ssr-outlet-->'
|
): ParsedTemplate {
|
if (typeof template === 'object') {
|
return template
|
}
|
|
let i = template.indexOf('</head>')
|
const j = template.indexOf(contentPlaceholder)
|
|
if (j < 0) {
|
throw new Error(`Content placeholder not found in template.`)
|
}
|
|
if (i < 0) {
|
i = template.indexOf('<body>')
|
if (i < 0) {
|
i = j
|
}
|
}
|
|
return {
|
head: compile(template.slice(0, i), compileOptions),
|
neck: compile(template.slice(i, j), compileOptions),
|
tail: compile(template.slice(j + contentPlaceholder.length), compileOptions)
|
}
|
}
|