UNPKG

1.74 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.element = exports.ctag = exports.otag = exports.text = void 0;
4// eslint-disable-next-line no-control-regex
5const invalidXMLUnicodeRegex = /[\u0001-\u0008\u000B\u000C\u000E-\u001F\u007F-\u0084\u0086-\u009F\uD800-\uDFFF\uFDD0-\uFDDF\u{1FFFE}-\u{1FFFF}\u{2FFFE}-\u{2FFFF}\u{3FFFE}-\u{3FFFF}\u{4FFFE}-\u{4FFFF}\u{5FFFE}-\u{5FFFF}\u{6FFFE}-\u{6FFFF}\u{7FFFE}-\u{7FFFF}\u{8FFFE}-\u{8FFFF}\u{9FFFE}-\u{9FFFF}\u{AFFFE}-\u{AFFFF}\u{BFFFE}-\u{BFFFF}\u{CFFFE}-\u{CFFFF}\u{DFFFE}-\u{DFFFF}\u{EFFFE}-\u{EFFFF}\u{FFFFE}-\u{FFFFF}\u{10FFFE}-\u{10FFFF}]/gu;
6const amp = /&/g;
7const lt = /</g;
8const apos = /'/g;
9const quot = /"/g;
10function text(txt) {
11 return txt
12 .replace(amp, '&amp;')
13 .replace(lt, '&lt;')
14 .replace(invalidXMLUnicodeRegex, '');
15}
16exports.text = text;
17function otag(nodeName, attrs, selfClose = false) {
18 let attrstr = '';
19 for (const k in attrs) {
20 const val = attrs[k]
21 .replace(amp, '&amp;')
22 .replace(lt, '&lt;')
23 .replace(apos, '&apos;')
24 .replace(quot, '&quot;')
25 .replace(invalidXMLUnicodeRegex, '');
26 attrstr += ` ${k}="${val}"`;
27 }
28 return `<${nodeName}${attrstr}${selfClose ? '/' : ''}>`;
29}
30exports.otag = otag;
31function ctag(nodeName) {
32 return `</${nodeName}>`;
33}
34exports.ctag = ctag;
35function element(nodeName, attrs, innerText) {
36 if (typeof attrs === 'string') {
37 return otag(nodeName) + text(attrs) + ctag(nodeName);
38 }
39 else if (innerText) {
40 return otag(nodeName, attrs) + text(innerText) + ctag(nodeName);
41 }
42 else {
43 return otag(nodeName, attrs, true);
44 }
45}
46exports.element = element;