1 | "use strict";
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 | Object.defineProperty(exports, "__esModule", { value: true });
|
16 | const dom5_1 = require("dom5");
|
17 | const dom5 = require("dom5/lib/index-next");
|
18 | const parse5_1 = require("parse5");
|
19 | const html_document_1 = require("./html-document");
|
20 | class HtmlParser {
|
21 | |
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 | parse(contents, url, urlResolver, inlineInfo) {
|
28 | const ast = parse5_1.parse(contents, { locationInfo: true });
|
29 |
|
30 | const baseTag = dom5.query(ast, dom5_1.predicates.AND(dom5_1.predicates.parentMatches(dom5_1.predicates.hasTagName('head')), dom5_1.predicates.hasTagName('base'), dom5_1.predicates.hasAttr('href')));
|
31 | const isInline = !!inlineInfo;
|
32 | inlineInfo = inlineInfo || {};
|
33 | let baseUrl = inlineInfo.baseUrl !== undefined ? inlineInfo.baseUrl : url;
|
34 | if (baseTag) {
|
35 | const baseTagHref = dom5_1.getAttribute(baseTag, 'href');
|
36 | const resolvedBaseTagHref = urlResolver.resolve(url, baseTagHref, undefined);
|
37 | if (resolvedBaseTagHref !== undefined) {
|
38 | baseUrl = resolvedBaseTagHref;
|
39 | }
|
40 | }
|
41 | return new html_document_1.ParsedHtmlDocument({
|
42 | url,
|
43 | baseUrl,
|
44 | contents,
|
45 | ast,
|
46 | locationOffset: inlineInfo.locationOffset,
|
47 | astNode: inlineInfo.astNode,
|
48 | isInline,
|
49 | });
|
50 | }
|
51 | }
|
52 | exports.HtmlParser = HtmlParser;
|
53 |
|
\ | No newline at end of file |