/* @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) 
 | 
  } 
 | 
} 
 |