export function createLinks( urlResolver: UrlResolver, html: string, baseUrl: ResolvedUrl, deps: Set<ResolvedUrl>, absolute: boolean = false): string { const ast = parse5.parse(html, {locationInfo: true}); const baseTag = dom5.query(ast, dom5.predicates.hasTagName('base')); const baseTagHref = baseTag ? dom5.getAttribute(baseTag, 'href') : ''; // parse5 always produces a <head> element. const head = dom5.query(ast, dom5.predicates.hasTagName('head'))!; for (const dep of deps) { let href; if (absolute && !baseTagHref) { href = absUrl(urlResolver.relative(dep)); } else { href = urlResolver.relative(baseUrl, dep); } const link = dom5.constructors.element('link'); dom5.setAttribute(link, 'rel', 'prefetch'); dom5.setAttribute(link, 'href', href); dom5.append(head, link); } dom5.removeFakeRootElements(ast); return parse5.serialize(ast); }
getAnalyzerUrl(document: {uri: string}): ResolvedUrl|undefined { return this.urlResolver.resolve(document.uri as PackageRelativeUrl); }