deck.gl
Version:
A suite of 3D-enabled data visualization overlays, suitable for react-map-gl
1,237 lines (1,229 loc) • 3.2 MB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if (typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if (typeof define === 'function' && define.amd) define([], factory);
else if (typeof exports === 'object') exports['deck'] = factory();
else root['deck'] = factory();})(globalThis, function () {
"use strict";
var __exports__ = (() => {
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __require = /* @__PURE__ */ ((x3) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x3, {
get: (a3, b2) => (typeof require !== "undefined" ? require : a3)[b2]
}) : x3)(function(x3) {
if (typeof require !== "undefined")
return require.apply(this, arguments);
throw new Error('Dynamic require of "' + x3 + '" is not supported');
});
var __commonJS = (cb, mod3) => function __require2() {
return mod3 || (0, cb[__getOwnPropNames(cb)[0]])((mod3 = { exports: {} }).exports, mod3), mod3.exports;
};
var __export = (target2, all) => {
for (var name13 in all)
__defProp(target2, name13, { get: all[name13], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod3, isNodeMode, target2) => (target2 = mod3 != null ? __create(__getProtoOf(mod3)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod3 || !mod3.__esModule ? __defProp(target2, "default", { value: mod3, enumerable: true }) : target2,
mod3
));
var __toCommonJS = (mod3) => __copyProps(__defProp({}, "__esModule", { value: true }), mod3);
var __publicField = (obj, key, value) => {
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
return value;
};
// ../../node_modules/earcut/src/earcut.js
var require_earcut = __commonJS({
"../../node_modules/earcut/src/earcut.js"(exports, module) {
"use strict";
module.exports = earcut4;
module.exports.default = earcut4;
function earcut4(data, holeIndices, dim) {
dim = dim || 2;
var hasHoles = holeIndices && holeIndices.length, outerLen = hasHoles ? holeIndices[0] * dim : data.length, outerNode = linkedList2(data, 0, outerLen, dim, true), triangles = [];
if (!outerNode || outerNode.next === outerNode.prev)
return triangles;
var minX, minY, maxX, maxY, x3, y3, invSize;
if (hasHoles)
outerNode = eliminateHoles2(data, holeIndices, outerNode, dim);
if (data.length > 80 * dim) {
minX = maxX = data[0];
minY = maxY = data[1];
for (var i5 = dim; i5 < outerLen; i5 += dim) {
x3 = data[i5];
y3 = data[i5 + 1];
if (x3 < minX)
minX = x3;
if (y3 < minY)
minY = y3;
if (x3 > maxX)
maxX = x3;
if (y3 > maxY)
maxY = y3;
}
invSize = Math.max(maxX - minX, maxY - minY);
invSize = invSize !== 0 ? 32767 / invSize : 0;
}
earcutLinked2(outerNode, triangles, dim, minX, minY, invSize, 0);
return triangles;
}
function linkedList2(data, start, end, dim, clockwise) {
var i5, last;
if (clockwise === signedArea2(data, start, end, dim) > 0) {
for (i5 = start; i5 < end; i5 += dim)
last = insertNode2(i5, data[i5], data[i5 + 1], last);
} else {
for (i5 = end - dim; i5 >= start; i5 -= dim)
last = insertNode2(i5, data[i5], data[i5 + 1], last);
}
if (last && equals16(last, last.next)) {
removeNode2(last);
last = last.next;
}
return last;
}
function filterPoints2(start, end) {
if (!start)
return start;
if (!end)
end = start;
var p3 = start, again;
do {
again = false;
if (!p3.steiner && (equals16(p3, p3.next) || area2(p3.prev, p3, p3.next) === 0)) {
removeNode2(p3);
p3 = end = p3.prev;
if (p3 === p3.next)
break;
again = true;
} else {
p3 = p3.next;
}
} while (again || p3 !== end);
return end;
}
function earcutLinked2(ear, triangles, dim, minX, minY, invSize, pass) {
if (!ear)
return;
if (!pass && invSize)
indexCurve2(ear, minX, minY, invSize);
var stop = ear, prev, next;
while (ear.prev !== ear.next) {
prev = ear.prev;
next = ear.next;
if (invSize ? isEarHashed2(ear, minX, minY, invSize) : isEar2(ear)) {
triangles.push(prev.i / dim | 0);
triangles.push(ear.i / dim | 0);
triangles.push(next.i / dim | 0);
removeNode2(ear);
ear = next.next;
stop = next.next;
continue;
}
ear = next;
if (ear === stop) {
if (!pass) {
earcutLinked2(filterPoints2(ear), triangles, dim, minX, minY, invSize, 1);
} else if (pass === 1) {
ear = cureLocalIntersections2(filterPoints2(ear), triangles, dim);
earcutLinked2(ear, triangles, dim, minX, minY, invSize, 2);
} else if (pass === 2) {
splitEarcut2(ear, triangles, dim, minX, minY, invSize);
}
break;
}
}
}
function isEar2(ear) {
var a3 = ear.prev, b2 = ear, c2 = ear.next;
if (area2(a3, b2, c2) >= 0)
return false;
var ax = a3.x, bx = b2.x, cx = c2.x, ay = a3.y, by = b2.y, cy = c2.y;
var x0 = ax < bx ? ax < cx ? ax : cx : bx < cx ? bx : cx, y0 = ay < by ? ay < cy ? ay : cy : by < cy ? by : cy, x1 = ax > bx ? ax > cx ? ax : cx : bx > cx ? bx : cx, y1 = ay > by ? ay > cy ? ay : cy : by > cy ? by : cy;
var p3 = c2.next;
while (p3 !== a3) {
if (p3.x >= x0 && p3.x <= x1 && p3.y >= y0 && p3.y <= y1 && pointInTriangle2(ax, ay, bx, by, cx, cy, p3.x, p3.y) && area2(p3.prev, p3, p3.next) >= 0)
return false;
p3 = p3.next;
}
return true;
}
function isEarHashed2(ear, minX, minY, invSize) {
var a3 = ear.prev, b2 = ear, c2 = ear.next;
if (area2(a3, b2, c2) >= 0)
return false;
var ax = a3.x, bx = b2.x, cx = c2.x, ay = a3.y, by = b2.y, cy = c2.y;
var x0 = ax < bx ? ax < cx ? ax : cx : bx < cx ? bx : cx, y0 = ay < by ? ay < cy ? ay : cy : by < cy ? by : cy, x1 = ax > bx ? ax > cx ? ax : cx : bx > cx ? bx : cx, y1 = ay > by ? ay > cy ? ay : cy : by > cy ? by : cy;
var minZ = zOrder2(x0, y0, minX, minY, invSize), maxZ = zOrder2(x1, y1, minX, minY, invSize);
var p3 = ear.prevZ, n3 = ear.nextZ;
while (p3 && p3.z >= minZ && n3 && n3.z <= maxZ) {
if (p3.x >= x0 && p3.x <= x1 && p3.y >= y0 && p3.y <= y1 && p3 !== a3 && p3 !== c2 && pointInTriangle2(ax, ay, bx, by, cx, cy, p3.x, p3.y) && area2(p3.prev, p3, p3.next) >= 0)
return false;
p3 = p3.prevZ;
if (n3.x >= x0 && n3.x <= x1 && n3.y >= y0 && n3.y <= y1 && n3 !== a3 && n3 !== c2 && pointInTriangle2(ax, ay, bx, by, cx, cy, n3.x, n3.y) && area2(n3.prev, n3, n3.next) >= 0)
return false;
n3 = n3.nextZ;
}
while (p3 && p3.z >= minZ) {
if (p3.x >= x0 && p3.x <= x1 && p3.y >= y0 && p3.y <= y1 && p3 !== a3 && p3 !== c2 && pointInTriangle2(ax, ay, bx, by, cx, cy, p3.x, p3.y) && area2(p3.prev, p3, p3.next) >= 0)
return false;
p3 = p3.prevZ;
}
while (n3 && n3.z <= maxZ) {
if (n3.x >= x0 && n3.x <= x1 && n3.y >= y0 && n3.y <= y1 && n3 !== a3 && n3 !== c2 && pointInTriangle2(ax, ay, bx, by, cx, cy, n3.x, n3.y) && area2(n3.prev, n3, n3.next) >= 0)
return false;
n3 = n3.nextZ;
}
return true;
}
function cureLocalIntersections2(start, triangles, dim) {
var p3 = start;
do {
var a3 = p3.prev, b2 = p3.next.next;
if (!equals16(a3, b2) && intersects2(a3, p3, p3.next, b2) && locallyInside2(a3, b2) && locallyInside2(b2, a3)) {
triangles.push(a3.i / dim | 0);
triangles.push(p3.i / dim | 0);
triangles.push(b2.i / dim | 0);
removeNode2(p3);
removeNode2(p3.next);
p3 = start = b2;
}
p3 = p3.next;
} while (p3 !== start);
return filterPoints2(p3);
}
function splitEarcut2(start, triangles, dim, minX, minY, invSize) {
var a3 = start;
do {
var b2 = a3.next.next;
while (b2 !== a3.prev) {
if (a3.i !== b2.i && isValidDiagonal2(a3, b2)) {
var c2 = splitPolygon2(a3, b2);
a3 = filterPoints2(a3, a3.next);
c2 = filterPoints2(c2, c2.next);
earcutLinked2(a3, triangles, dim, minX, minY, invSize, 0);
earcutLinked2(c2, triangles, dim, minX, minY, invSize, 0);
return;
}
b2 = b2.next;
}
a3 = a3.next;
} while (a3 !== start);
}
function eliminateHoles2(data, holeIndices, outerNode, dim) {
var queue = [], i5, len8, start, end, list;
for (i5 = 0, len8 = holeIndices.length; i5 < len8; i5++) {
start = holeIndices[i5] * dim;
end = i5 < len8 - 1 ? holeIndices[i5 + 1] * dim : data.length;
list = linkedList2(data, start, end, dim, false);
if (list === list.next)
list.steiner = true;
queue.push(getLeftmost2(list));
}
queue.sort(compareX2);
for (i5 = 0; i5 < queue.length; i5++) {
outerNode = eliminateHole2(queue[i5], outerNode);
}
return outerNode;
}
function compareX2(a3, b2) {
return a3.x - b2.x;
}
function eliminateHole2(hole, outerNode) {
var bridge = findHoleBridge2(hole, outerNode);
if (!bridge) {
return outerNode;
}
var bridgeReverse = splitPolygon2(bridge, hole);
filterPoints2(bridgeReverse, bridgeReverse.next);
return filterPoints2(bridge, bridge.next);
}
function findHoleBridge2(hole, outerNode) {
var p3 = outerNode, hx = hole.x, hy = hole.y, qx = -Infinity, m;
do {
if (hy <= p3.y && hy >= p3.next.y && p3.next.y !== p3.y) {
var x3 = p3.x + (hy - p3.y) * (p3.next.x - p3.x) / (p3.next.y - p3.y);
if (x3 <= hx && x3 > qx) {
qx = x3;
m = p3.x < p3.next.x ? p3 : p3.next;
if (x3 === hx)
return m;
}
}
p3 = p3.next;
} while (p3 !== outerNode);
if (!m)
return null;
var stop = m, mx = m.x, my = m.y, tanMin = Infinity, tan6;
p3 = m;
do {
if (hx >= p3.x && p3.x >= mx && hx !== p3.x && pointInTriangle2(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p3.x, p3.y)) {
tan6 = Math.abs(hy - p3.y) / (hx - p3.x);
if (locallyInside2(p3, hole) && (tan6 < tanMin || tan6 === tanMin && (p3.x > m.x || p3.x === m.x && sectorContainsSector2(m, p3)))) {
m = p3;
tanMin = tan6;
}
}
p3 = p3.next;
} while (p3 !== stop);
return m;
}
function sectorContainsSector2(m, p3) {
return area2(m.prev, m, p3.prev) < 0 && area2(p3.next, m, m.next) < 0;
}
function indexCurve2(start, minX, minY, invSize) {
var p3 = start;
do {
if (p3.z === 0)
p3.z = zOrder2(p3.x, p3.y, minX, minY, invSize);
p3.prevZ = p3.prev;
p3.nextZ = p3.next;
p3 = p3.next;
} while (p3 !== start);
p3.prevZ.nextZ = null;
p3.prevZ = null;
sortLinked2(p3);
}
function sortLinked2(list) {
var i5, p3, q2, e3, tail, numMerges, pSize, qSize, inSize = 1;
do {
p3 = list;
list = null;
tail = null;
numMerges = 0;
while (p3) {
numMerges++;
q2 = p3;
pSize = 0;
for (i5 = 0; i5 < inSize; i5++) {
pSize++;
q2 = q2.nextZ;
if (!q2)
break;
}
qSize = inSize;
while (pSize > 0 || qSize > 0 && q2) {
if (pSize !== 0 && (qSize === 0 || !q2 || p3.z <= q2.z)) {
e3 = p3;
p3 = p3.nextZ;
pSize--;
} else {
e3 = q2;
q2 = q2.nextZ;
qSize--;
}
if (tail)
tail.nextZ = e3;
else
list = e3;
e3.prevZ = tail;
tail = e3;
}
p3 = q2;
}
tail.nextZ = null;
inSize *= 2;
} while (numMerges > 1);
return list;
}
function zOrder2(x3, y3, minX, minY, invSize) {
x3 = (x3 - minX) * invSize | 0;
y3 = (y3 - minY) * invSize | 0;
x3 = (x3 | x3 << 8) & 16711935;
x3 = (x3 | x3 << 4) & 252645135;
x3 = (x3 | x3 << 2) & 858993459;
x3 = (x3 | x3 << 1) & 1431655765;
y3 = (y3 | y3 << 8) & 16711935;
y3 = (y3 | y3 << 4) & 252645135;
y3 = (y3 | y3 << 2) & 858993459;
y3 = (y3 | y3 << 1) & 1431655765;
return x3 | y3 << 1;
}
function getLeftmost2(start) {
var p3 = start, leftmost = start;
do {
if (p3.x < leftmost.x || p3.x === leftmost.x && p3.y < leftmost.y)
leftmost = p3;
p3 = p3.next;
} while (p3 !== start);
return leftmost;
}
function pointInTriangle2(ax, ay, bx, by, cx, cy, px, py) {
return (cx - px) * (ay - py) >= (ax - px) * (cy - py) && (ax - px) * (by - py) >= (bx - px) * (ay - py) && (bx - px) * (cy - py) >= (cx - px) * (by - py);
}
function isValidDiagonal2(a3, b2) {
return a3.next.i !== b2.i && a3.prev.i !== b2.i && !intersectsPolygon2(a3, b2) && // dones't intersect other edges
(locallyInside2(a3, b2) && locallyInside2(b2, a3) && middleInside2(a3, b2) && // locally visible
(area2(a3.prev, a3, b2.prev) || area2(a3, b2.prev, b2)) || // does not create opposite-facing sectors
equals16(a3, b2) && area2(a3.prev, a3, a3.next) > 0 && area2(b2.prev, b2, b2.next) > 0);
}
function area2(p3, q2, r3) {
return (q2.y - p3.y) * (r3.x - q2.x) - (q2.x - p3.x) * (r3.y - q2.y);
}
function equals16(p1, p22) {
return p1.x === p22.x && p1.y === p22.y;
}
function intersects2(p1, q1, p22, q2) {
var o1 = sign2(area2(p1, q1, p22));
var o22 = sign2(area2(p1, q1, q2));
var o3 = sign2(area2(p22, q2, p1));
var o4 = sign2(area2(p22, q2, q1));
if (o1 !== o22 && o3 !== o4)
return true;
if (o1 === 0 && onSegment2(p1, p22, q1))
return true;
if (o22 === 0 && onSegment2(p1, q2, q1))
return true;
if (o3 === 0 && onSegment2(p22, p1, q2))
return true;
if (o4 === 0 && onSegment2(p22, q1, q2))
return true;
return false;
}
function onSegment2(p3, q2, r3) {
return q2.x <= Math.max(p3.x, r3.x) && q2.x >= Math.min(p3.x, r3.x) && q2.y <= Math.max(p3.y, r3.y) && q2.y >= Math.min(p3.y, r3.y);
}
function sign2(num) {
return num > 0 ? 1 : num < 0 ? -1 : 0;
}
function intersectsPolygon2(a3, b2) {
var p3 = a3;
do {
if (p3.i !== a3.i && p3.next.i !== a3.i && p3.i !== b2.i && p3.next.i !== b2.i && intersects2(p3, p3.next, a3, b2))
return true;
p3 = p3.next;
} while (p3 !== a3);
return false;
}
function locallyInside2(a3, b2) {
return area2(a3.prev, a3, a3.next) < 0 ? area2(a3, b2, a3.next) >= 0 && area2(a3, a3.prev, b2) >= 0 : area2(a3, b2, a3.prev) < 0 || area2(a3, a3.next, b2) < 0;
}
function middleInside2(a3, b2) {
var p3 = a3, inside = false, px = (a3.x + b2.x) / 2, py = (a3.y + b2.y) / 2;
do {
if (p3.y > py !== p3.next.y > py && p3.next.y !== p3.y && px < (p3.next.x - p3.x) * (py - p3.y) / (p3.next.y - p3.y) + p3.x)
inside = !inside;
p3 = p3.next;
} while (p3 !== a3);
return inside;
}
function splitPolygon2(a3, b2) {
var a22 = new Node2(a3.i, a3.x, a3.y), b22 = new Node2(b2.i, b2.x, b2.y), an = a3.next, bp = b2.prev;
a3.next = b2;
b2.prev = a3;
a22.next = an;
an.prev = a22;
b22.next = a22;
a22.prev = b22;
bp.next = b22;
b22.prev = bp;
return b22;
}
function insertNode2(i5, x3, y3, last) {
var p3 = new Node2(i5, x3, y3);
if (!last) {
p3.prev = p3;
p3.next = p3;
} else {
p3.next = last.next;
p3.prev = last;
last.next.prev = p3;
last.next = p3;
}
return p3;
}
function removeNode2(p3) {
p3.next.prev = p3.prev;
p3.prev.next = p3.next;
if (p3.prevZ)
p3.prevZ.nextZ = p3.nextZ;
if (p3.nextZ)
p3.nextZ.prevZ = p3.prevZ;
}
function Node2(i5, x3, y3) {
this.i = i5;
this.x = x3;
this.y = y3;
this.prev = null;
this.next = null;
this.z = 0;
this.prevZ = null;
this.nextZ = null;
this.steiner = false;
}
earcut4.deviation = function(data, holeIndices, dim, triangles) {
var hasHoles = holeIndices && holeIndices.length;
var outerLen = hasHoles ? holeIndices[0] * dim : data.length;
var polygonArea = Math.abs(signedArea2(data, 0, outerLen, dim));
if (hasHoles) {
for (var i5 = 0, len8 = holeIndices.length; i5 < len8; i5++) {
var start = holeIndices[i5] * dim;
var end = i5 < len8 - 1 ? holeIndices[i5 + 1] * dim : data.length;
polygonArea -= Math.abs(signedArea2(data, start, end, dim));
}
}
var trianglesArea = 0;
for (i5 = 0; i5 < triangles.length; i5 += 3) {
var a3 = triangles[i5] * dim;
var b2 = triangles[i5 + 1] * dim;
var c2 = triangles[i5 + 2] * dim;
trianglesArea += Math.abs(
(data[a3] - data[c2]) * (data[b2 + 1] - data[a3 + 1]) - (data[a3] - data[b2]) * (data[c2 + 1] - data[a3 + 1])
);
}
return polygonArea === 0 && trianglesArea === 0 ? 0 : Math.abs((trianglesArea - polygonArea) / polygonArea);
};
function signedArea2(data, start, end, dim) {
var sum2 = 0;
for (var i5 = start, j2 = end - dim; i5 < end; i5 += dim) {
sum2 += (data[j2] - data[i5]) * (data[i5 + 1] + data[j2 + 1]);
j2 = i5;
}
return sum2;
}
earcut4.flatten = function(data) {
var dim = data[0][0].length, result = { vertices: [], holes: [], dimensions: dim }, holeIndex = 0;
for (var i5 = 0; i5 < data.length; i5++) {
for (var j2 = 0; j2 < data[i5].length; j2++) {
for (var d2 = 0; d2 < dim; d2++)
result.vertices.push(data[i5][j2][d2]);
}
if (i5 > 0) {
holeIndex += data[i5 - 1].length;
result.holes.push(holeIndex);
}
}
return result;
};
}
});
// ../../node_modules/fast-xml-parser/src/util.js
var require_util = __commonJS({
"../../node_modules/fast-xml-parser/src/util.js"(exports) {
"use strict";
var nameStartChar = ":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD";
var nameChar = nameStartChar + "\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040";
var nameRegexp = "[" + nameStartChar + "][" + nameChar + "]*";
var regexName = new RegExp("^" + nameRegexp + "$");
var getAllMatches = function(string, regex) {
const matches3 = [];
let match = regex.exec(string);
while (match) {
const allmatches = [];
allmatches.startIndex = regex.lastIndex - match[0].length;
const len8 = match.length;
for (let index = 0; index < len8; index++) {
allmatches.push(match[index]);
}
matches3.push(allmatches);
match = regex.exec(string);
}
return matches3;
};
var isName = function(string) {
const match = regexName.exec(string);
return !(match === null || typeof match === "undefined");
};
exports.isExist = function(v2) {
return typeof v2 !== "undefined";
};
exports.isEmptyObject = function(obj) {
return Object.keys(obj).length === 0;
};
exports.merge = function(target2, a3, arrayMode) {
if (a3) {
const keys = Object.keys(a3);
const len8 = keys.length;
for (let i5 = 0; i5 < len8; i5++) {
if (arrayMode === "strict") {
target2[keys[i5]] = [a3[keys[i5]]];
} else {
target2[keys[i5]] = a3[keys[i5]];
}
}
}
};
exports.getValue = function(v2) {
if (exports.isExist(v2)) {
return v2;
} else {
return "";
}
};
exports.isName = isName;
exports.getAllMatches = getAllMatches;
exports.nameRegexp = nameRegexp;
}
});
// ../../node_modules/fast-xml-parser/src/validator.js
var require_validator = __commonJS({
"../../node_modules/fast-xml-parser/src/validator.js"(exports) {
"use strict";
var util = require_util();
var defaultOptions3 = {
allowBooleanAttributes: false,
//A tag can have attributes without any value
unpairedTags: []
};
exports.validate = function(xmlData, options) {
options = Object.assign({}, defaultOptions3, options);
const tags = [];
let tagFound = false;
let reachedRoot = false;
if (xmlData[0] === "\uFEFF") {
xmlData = xmlData.substr(1);
}
for (let i5 = 0; i5 < xmlData.length; i5++) {
if (xmlData[i5] === "<" && xmlData[i5 + 1] === "?") {
i5 += 2;
i5 = readPI(xmlData, i5);
if (i5.err)
return i5;
} else if (xmlData[i5] === "<") {
let tagStartPos = i5;
i5++;
if (xmlData[i5] === "!") {
i5 = readCommentAndCDATA(xmlData, i5);
continue;
} else {
let closingTag = false;
if (xmlData[i5] === "/") {
closingTag = true;
i5++;
}
let tagName = "";
for (; i5 < xmlData.length && xmlData[i5] !== ">" && xmlData[i5] !== " " && xmlData[i5] !== " " && xmlData[i5] !== "\n" && xmlData[i5] !== "\r"; i5++) {
tagName += xmlData[i5];
}
tagName = tagName.trim();
if (tagName[tagName.length - 1] === "/") {
tagName = tagName.substring(0, tagName.length - 1);
i5--;
}
if (!validateTagName(tagName)) {
let msg;
if (tagName.trim().length === 0) {
msg = "Invalid space after '<'.";
} else {
msg = "Tag '" + tagName + "' is an invalid name.";
}
return getErrorObject("InvalidTag", msg, getLineNumberForPosition(xmlData, i5));
}
const result = readAttributeStr(xmlData, i5);
if (result === false) {
return getErrorObject("InvalidAttr", "Attributes for '" + tagName + "' have open quote.", getLineNumberForPosition(xmlData, i5));
}
let attrStr = result.value;
i5 = result.index;
if (attrStr[attrStr.length - 1] === "/") {
const attrStrStart = i5 - attrStr.length;
attrStr = attrStr.substring(0, attrStr.length - 1);
const isValid = validateAttributeString(attrStr, options);
if (isValid === true) {
tagFound = true;
} else {
return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, attrStrStart + isValid.err.line));
}
} else if (closingTag) {
if (!result.tagClosed) {
return getErrorObject("InvalidTag", "Closing tag '" + tagName + "' doesn't have proper closing.", getLineNumberForPosition(xmlData, i5));
} else if (attrStr.trim().length > 0) {
return getErrorObject("InvalidTag", "Closing tag '" + tagName + "' can't have attributes or invalid starting.", getLineNumberForPosition(xmlData, tagStartPos));
} else if (tags.length === 0) {
return getErrorObject("InvalidTag", "Closing tag '" + tagName + "' has not been opened.", getLineNumberForPosition(xmlData, tagStartPos));
} else {
const otg = tags.pop();
if (tagName !== otg.tagName) {
let openPos = getLineNumberForPosition(xmlData, otg.tagStartPos);
return getErrorObject(
"InvalidTag",
"Expected closing tag '" + otg.tagName + "' (opened in line " + openPos.line + ", col " + openPos.col + ") instead of closing tag '" + tagName + "'.",
getLineNumberForPosition(xmlData, tagStartPos)
);
}
if (tags.length == 0) {
reachedRoot = true;
}
}
} else {
const isValid = validateAttributeString(attrStr, options);
if (isValid !== true) {
return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i5 - attrStr.length + isValid.err.line));
}
if (reachedRoot === true) {
return getErrorObject("InvalidXml", "Multiple possible root nodes found.", getLineNumberForPosition(xmlData, i5));
} else if (options.unpairedTags.indexOf(tagName) !== -1) {
} else {
tags.push({ tagName, tagStartPos });
}
tagFound = true;
}
for (i5++; i5 < xmlData.length; i5++) {
if (xmlData[i5] === "<") {
if (xmlData[i5 + 1] === "!") {
i5++;
i5 = readCommentAndCDATA(xmlData, i5);
continue;
} else if (xmlData[i5 + 1] === "?") {
i5 = readPI(xmlData, ++i5);
if (i5.err)
return i5;
} else {
break;
}
} else if (xmlData[i5] === "&") {
const afterAmp = validateAmpersand(xmlData, i5);
if (afterAmp == -1)
return getErrorObject("InvalidChar", "char '&' is not expected.", getLineNumberForPosition(xmlData, i5));
i5 = afterAmp;
} else {
if (reachedRoot === true && !isWhiteSpace(xmlData[i5])) {
return getErrorObject("InvalidXml", "Extra text at the end", getLineNumberForPosition(xmlData, i5));
}
}
}
if (xmlData[i5] === "<") {
i5--;
}
}
} else {
if (isWhiteSpace(xmlData[i5])) {
continue;
}
return getErrorObject("InvalidChar", "char '" + xmlData[i5] + "' is not expected.", getLineNumberForPosition(xmlData, i5));
}
}
if (!tagFound) {
return getErrorObject("InvalidXml", "Start tag expected.", 1);
} else if (tags.length == 1) {
return getErrorObject("InvalidTag", "Unclosed tag '" + tags[0].tagName + "'.", getLineNumberForPosition(xmlData, tags[0].tagStartPos));
} else if (tags.length > 0) {
return getErrorObject("InvalidXml", "Invalid '" + JSON.stringify(tags.map((t3) => t3.tagName), null, 4).replace(/\r?\n/g, "") + "' found.", { line: 1, col: 1 });
}
return true;
};
function isWhiteSpace(char) {
return char === " " || char === " " || char === "\n" || char === "\r";
}
function readPI(xmlData, i5) {
const start = i5;
for (; i5 < xmlData.length; i5++) {
if (xmlData[i5] == "?" || xmlData[i5] == " ") {
const tagname = xmlData.substr(start, i5 - start);
if (i5 > 5 && tagname === "xml") {
return getErrorObject("InvalidXml", "XML declaration allowed only at the start of the document.", getLineNumberForPosition(xmlData, i5));
} else if (xmlData[i5] == "?" && xmlData[i5 + 1] == ">") {
i5++;
break;
} else {
continue;
}
}
}
return i5;
}
function readCommentAndCDATA(xmlData, i5) {
if (xmlData.length > i5 + 5 && xmlData[i5 + 1] === "-" && xmlData[i5 + 2] === "-") {
for (i5 += 3; i5 < xmlData.length; i5++) {
if (xmlData[i5] === "-" && xmlData[i5 + 1] === "-" && xmlData[i5 + 2] === ">") {
i5 += 2;
break;
}
}
} else if (xmlData.length > i5 + 8 && xmlData[i5 + 1] === "D" && xmlData[i5 + 2] === "O" && xmlData[i5 + 3] === "C" && xmlData[i5 + 4] === "T" && xmlData[i5 + 5] === "Y" && xmlData[i5 + 6] === "P" && xmlData[i5 + 7] === "E") {
let angleBracketsCount = 1;
for (i5 += 8; i5 < xmlData.length; i5++) {
if (xmlData[i5] === "<") {
angleBracketsCount++;
} else if (xmlData[i5] === ">") {
angleBracketsCount--;
if (angleBracketsCount === 0) {
break;
}
}
}
} else if (xmlData.length > i5 + 9 && xmlData[i5 + 1] === "[" && xmlData[i5 + 2] === "C" && xmlData[i5 + 3] === "D" && xmlData[i5 + 4] === "A" && xmlData[i5 + 5] === "T" && xmlData[i5 + 6] === "A" && xmlData[i5 + 7] === "[") {
for (i5 += 8; i5 < xmlData.length; i5++) {
if (xmlData[i5] === "]" && xmlData[i5 + 1] === "]" && xmlData[i5 + 2] === ">") {
i5 += 2;
break;
}
}
}
return i5;
}
var doubleQuote = '"';
var singleQuote = "'";
function readAttributeStr(xmlData, i5) {
let attrStr = "";
let startChar = "";
let tagClosed = false;
for (; i5 < xmlData.length; i5++) {
if (xmlData[i5] === doubleQuote || xmlData[i5] === singleQuote) {
if (startChar === "") {
startChar = xmlData[i5];
} else if (startChar !== xmlData[i5]) {
} else {
startChar = "";
}
} else if (xmlData[i5] === ">") {
if (startChar === "") {
tagClosed = true;
break;
}
}
attrStr += xmlData[i5];
}
if (startChar !== "") {
return false;
}
return {
value: attrStr,
index: i5,
tagClosed
};
}
var validAttrStrRegxp = new RegExp(`(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['"])(([\\s\\S])*?)\\5)?`, "g");
function validateAttributeString(attrStr, options) {
const matches3 = util.getAllMatches(attrStr, validAttrStrRegxp);
const attrNames = {};
for (let i5 = 0; i5 < matches3.length; i5++) {
if (matches3[i5][1].length === 0) {
return getErrorObject("InvalidAttr", "Attribute '" + matches3[i5][2] + "' has no space in starting.", getPositionFromMatch(matches3[i5]));
} else if (matches3[i5][3] !== void 0 && matches3[i5][4] === void 0) {
return getErrorObject("InvalidAttr", "Attribute '" + matches3[i5][2] + "' is without value.", getPositionFromMatch(matches3[i5]));
} else if (matches3[i5][3] === void 0 && !options.allowBooleanAttributes) {
return getErrorObject("InvalidAttr", "boolean attribute '" + matches3[i5][2] + "' is not allowed.", getPositionFromMatch(matches3[i5]));
}
const attrName = matches3[i5][2];
if (!validateAttrName(attrName)) {
return getErrorObject("InvalidAttr", "Attribute '" + attrName + "' is an invalid name.", getPositionFromMatch(matches3[i5]));
}
if (!attrNames.hasOwnProperty(attrName)) {
attrNames[attrName] = 1;
} else {
return getErrorObject("InvalidAttr", "Attribute '" + attrName + "' is repeated.", getPositionFromMatch(matches3[i5]));
}
}
return true;
}
function validateNumberAmpersand(xmlData, i5) {
let re = /\d/;
if (xmlData[i5] === "x") {
i5++;
re = /[\da-fA-F]/;
}
for (; i5 < xmlData.length; i5++) {
if (xmlData[i5] === ";")
return i5;
if (!xmlData[i5].match(re))
break;
}
return -1;
}
function validateAmpersand(xmlData, i5) {
i5++;
if (xmlData[i5] === ";")
return -1;
if (xmlData[i5] === "#") {
i5++;
return validateNumberAmpersand(xmlData, i5);
}
let count3 = 0;
for (; i5 < xmlData.length; i5++, count3++) {
if (xmlData[i5].match(/\w/) && count3 < 20)
continue;
if (xmlData[i5] === ";")
break;
return -1;
}
return i5;
}
function getErrorObject(code, message2, lineNumber) {
return {
err: {
code,
msg: message2,
line: lineNumber.line || lineNumber,
col: lineNumber.col
}
};
}
function validateAttrName(attrName) {
return util.isName(attrName);
}
function validateTagName(tagname) {
return util.isName(tagname);
}
function getLineNumberForPosition(xmlData, index) {
const lines = xmlData.substring(0, index).split(/\r?\n/);
return {
line: lines.length,
// column number is last line's length + 1, because column numbering starts at 1:
col: lines[lines.length - 1].length + 1
};
}
function getPositionFromMatch(match) {
return match.startIndex + match[1].length;
}
}
});
// ../../node_modules/fast-xml-parser/src/xmlparser/OptionsBuilder.js
var require_OptionsBuilder = __commonJS({
"../../node_modules/fast-xml-parser/src/xmlparser/OptionsBuilder.js"(exports) {
var defaultOptions3 = {
preserveOrder: false,
attributeNamePrefix: "@_",
attributesGroupName: false,
textNodeName: "#text",
ignoreAttributes: true,
removeNSPrefix: false,
// remove NS from tag name or attribute name if true
allowBooleanAttributes: false,
//a tag can have attributes without any value
//ignoreRootElement : false,
parseTagValue: true,
parseAttributeValue: false,
trimValues: true,
//Trim string values of tag and attributes
cdataPropName: false,
numberParseOptions: {
hex: true,
leadingZeros: true,
eNotation: true
},
tagValueProcessor: function(tagName, val2) {
return val2;
},
attributeValueProcessor: function(attrName, val2) {
return val2;
},
stopNodes: [],
//nested tags will not be parsed even for errors
alwaysCreateTextNode: false,
isArray: () => false,
commentPropName: false,
unpairedTags: [],
processEntities: true,
htmlEntities: false,
ignoreDeclaration: false,
ignorePiTags: false,
transformTagName: false,
transformAttributeName: false,
updateTag: function(tagName, jPath, attrs) {
return tagName;
}
// skipEmptyListItem: false
};
var buildOptions = function(options) {
return Object.assign({}, defaultOptions3, options);
};
exports.buildOptions = buildOptions;
exports.defaultOptions = defaultOptions3;
}
});
// ../../node_modules/fast-xml-parser/src/xmlparser/xmlNode.js
var require_xmlNode = __commonJS({
"../../node_modules/fast-xml-parser/src/xmlparser/xmlNode.js"(exports, module) {
"use strict";
var XmlNode = class {
constructor(tagname) {
this.tagname = tagname;
this.child = [];
this[":@"] = {};
}
add(key, val2) {
if (key === "__proto__")
key = "#__proto__";
this.child.push({ [key]: val2 });
}
addChild(node) {
if (node.tagname === "__proto__")
node.tagname = "#__proto__";
if (node[":@"] && Object.keys(node[":@"]).length > 0) {
this.child.push({ [node.tagname]: node.child, [":@"]: node[":@"] });
} else {
this.child.push({ [node.tagname]: node.child });
}
}
};
module.exports = XmlNode;
}
});
// ../../node_modules/fast-xml-parser/src/xmlparser/DocTypeReader.js
var require_DocTypeReader = __commonJS({
"../../node_modules/fast-xml-parser/src/xmlparser/DocTypeReader.js"(exports, module) {
var util = require_util();
function readDocType(xmlData, i5) {
const entities = {};
if (xmlData[i5 + 3] === "O" && xmlData[i5 + 4] === "C" && xmlData[i5 + 5] === "T" && xmlData[i5 + 6] === "Y" && xmlData[i5 + 7] === "P" && xmlData[i5 + 8] === "E") {
i5 = i5 + 9;
let angleBracketsCount = 1;
let hasBody = false, comment = false;
let exp = "";
for (; i5 < xmlData.length; i5++) {
if (xmlData[i5] === "<" && !comment) {
if (hasBody && isEntity(xmlData, i5)) {
i5 += 7;
[entityName, val, i5] = readEntityExp(xmlData, i5 + 1);
if (val.indexOf("&") === -1)
entities[validateEntityName(entityName)] = {
regx: RegExp(`&${entityName};`, "g"),
val
};
} else if (hasBody && isElement(xmlData, i5))
i5 += 8;
else if (hasBody && isAttlist(xmlData, i5))
i5 += 8;
else if (hasBody && isNotation(xmlData, i5))
i5 += 9;
else if (isComment)
comment = true;
else
throw new Error("Invalid DOCTYPE");
angleBracketsCount++;
exp = "";
} else if (xmlData[i5] === ">") {
if (comment) {
if (xmlData[i5 - 1] === "-" && xmlData[i5 - 2] === "-") {
comment = false;
angleBracketsCount--;
}
} else {
angleBracketsCount--;
}
if (angleBracketsCount === 0) {
break;
}
} else if (xmlData[i5] === "[") {
hasBody = true;
} else {
exp += xmlData[i5];
}
}
if (angleBracketsCount !== 0) {
throw new Error(`Unclosed DOCTYPE`);
}
} else {
throw new Error(`Invalid Tag instead of DOCTYPE`);
}
return { entities, i: i5 };
}
function readEntityExp(xmlData, i5) {
let entityName2 = "";
for (; i5 < xmlData.length && (xmlData[i5] !== "'" && xmlData[i5] !== '"'); i5++) {
entityName2 += xmlData[i5];
}
entityName2 = entityName2.trim();
if (entityName2.indexOf(" ") !== -1)
throw new Error("External entites are not supported");
const startChar = xmlData[i5++];
let val2 = "";
for (; i5 < xmlData.length && xmlData[i5] !== startChar; i5++) {
val2 += xmlData[i5];
}
return [entityName2, val2, i5];
}
function isComment(xmlData, i5) {
if (xmlData[i5 + 1] === "!" && xmlData[i5 + 2] === "-" && xmlData[i5 + 3] === "-")
return true;
return false;
}
function isEntity(xmlData, i5) {
if (xmlData[i5 + 1] === "!" && xmlData[i5 + 2] === "E" && xmlData[i5 + 3] === "N" && xmlData[i5 + 4] === "T" && xmlData[i5 + 5] === "I" && xmlData[i5 + 6] === "T" && xmlData[i5 + 7] === "Y")
return true;
return false;
}
function isElement(xmlData, i5) {
if (xmlData[i5 + 1] === "!" && xmlData[i5 + 2] === "E" && xmlData[i5 + 3] === "L" && xmlData[i5 + 4] === "E" && xmlData[i5 + 5] === "M" && xmlData[i5 + 6] === "E" && xmlData[i5 + 7] === "N" && xmlData[i5 + 8] === "T")
return true;
return false;
}
function isAttlist(xmlData, i5) {
if (xmlData[i5 + 1] === "!" && xmlData[i5 + 2] === "A" && xmlData[i5 + 3] === "T" && xmlData[i5 + 4] === "T" && xmlData[i5 + 5] === "L" && xmlData[i5 + 6] === "I" && xmlData[i5 + 7] === "S" && xmlData[i5 + 8] === "T")
return true;
return false;
}
function isNotation(xmlData, i5) {
if (xmlData[i5 + 1] === "!" && xmlData[i5 + 2] === "N" && xmlData[i5 + 3] === "O" && xmlData[i5 + 4] === "T" && xmlData[i5 + 5] === "A" && xmlData[i5 + 6] === "T" && xmlData[i5 + 7] === "I" && xmlData[i5 + 8] === "O" && xmlData[i5 + 9] === "N")
return true;
return false;
}
function validateEntityName(name13) {
if (util.isName(name13))
return name13;
else
throw new Error(`Invalid entity name ${name13}`);
}
module.exports = readDocType;
}
});
// ../../node_modules/strnum/strnum.js
var require_strnum = __commonJS({
"../../node_modules/strnum/strnum.js"(exports, module) {
var hexRegex = /^[-+]?0x[a-fA-F0-9]+$/;
var numRegex = /^([\-\+])?(0*)(\.[0-9]+([eE]\-?[0-9]+)?|[0-9]+(\.[0-9]+([eE]\-?[0-9]+)?)?)$/;
if (!Number.parseInt && window.parseInt) {
Number.parseInt = window.parseInt;
}
if (!Number.parseFloat && window.parseFloat) {
Number.parseFloat = window.parseFloat;
}
var consider = {
hex: true,
leadingZeros: true,
decimalPoint: ".",
eNotation: true
//skipLike: /regex/
};
function toNumber2(str7, options = {}) {
options = Object.assign({}, consider, options);
if (!str7 || typeof str7 !== "string")
return str7;
let trimmedStr = str7.trim();
if (options.skipLike !== void 0 && options.skipLike.test(trimmedStr))
return str7;
else if (options.hex && hexRegex.test(trimmedStr)) {
return Number.parseInt(trimmedStr, 16);
} else {
const match = numRegex.exec(trimmedStr);
if (match) {
const sign2 = match[1];
const leadingZeros = match[2];
let numTrimmedByZeros = trimZeros(match[3]);
const eNotation = match[4] || match[6];
if (!options.leadingZeros && leadingZeros.length > 0 && sign2 && trimmedStr[2] !== ".")
return str7;
else if (!options.leadingZeros && leadingZeros.length > 0 && !sign2 && trimmedStr[1] !== ".")
return str7;
else {
const num = Number(trimmedStr);
const numStr = "" + num;
if (numStr.search(/[eE]/) !== -1) {
if (options.eNotation)
return num;
else
return str7;
} else if (eNotation) {
if (options.eNotation)
return num;
else
return str7;
} else if (trimmedStr.indexOf(".") !== -1) {
if (numStr === "0" && numTrimmedByZeros === "")
return num;
else if (numStr === numTrimmedByZeros)
return num;
else if (sign2 && numStr === "-" + numTrimmedByZeros)
return num;
else
return str7;
}
if (leadingZeros) {
if (numTrimmedByZeros === numStr)
return num;
else if (sign2 + numTrimmedByZeros === numStr)
return num;
else
return str7;
}
if (trimmedStr === numStr)
return num;
else if (trimmedStr === sign2 + numStr)
return num;
return str7;
}
} else {
return str7;
}
}
}
function trimZeros(numStr) {
if (numStr && numStr.indexOf(".") !== -1) {
numStr = numStr.replace(/0+$/, "");
if (numStr === ".")
numStr = "0";
else if (numStr[0] === ".")
numStr = "0" + numStr;
else if (numStr[numStr.length - 1] === ".")
numStr = numStr.substr(0, numStr.length - 1);
return numStr;
}
return numStr;
}
module.exports = toNumber2;
}
});
// ../../node_modules/fast-xml-parser/src/xmlparser/OrderedObjParser.js
var require_OrderedObjParser = __commonJS({
"../../node_modules/fast-xml-parser/src/xmlparser/OrderedObjParser.js"(exports, module) {
"use strict";
var util = require_util();
var xmlNode = require_xmlNode();
var readDocType = require_DocTypeReader();
var toNumber2 = require_strnum();
var OrderedObjParser = class {
constructor(options) {
this.options = options;
this.currentNode = null;
this.tagsNodeStack = [];
this.docTypeEntities = {};
this.lastEntities = {
"apos": { regex: /&(apos|#39|#x27);/g, val: "'" },
"gt": { regex: /&(gt|#62|#x3E);/g, val: ">" },
"lt": { regex: /&(lt|#60|#x3C);/g, val: "<" },
"quot": { regex: /&(quot|#34|#x22);/g, val: '"' }
};
this.ampEntity = { regex: /&(amp|#38|#x26);/g, val: "&" };
this.htmlEntities = {
"space": { regex: /&(nbsp|#160);/g, val: " " },
// "lt" : { regex: /&(lt|#60);/g, val: "<" },
// "gt" : { regex: /&(gt|#62);/g, val: ">" },
// "amp" : { regex: /&(amp|#38);/g, val: "&" },
// "quot" : { regex: /&(quot|#34);/g, val: "\"" },
// "apos" : { regex: /&(apos|#39);/g, val: "'" },
"cent": { regex: /&(cent|#162);/g, val: "\xA2" },
"pound": { regex: /&(pound|#163);/g, val: "\xA3" },
"yen": { regex: /&(yen|#165);/g, val: "\xA5" },
"euro": { regex: /&(euro|#8364);/g, val: "\u20AC" },
"copyright": { regex: /&(copy|#169);/g, val: "\xA9" },
"reg": { regex: /&(reg|#174);/g, val: "\xAE" },
"inr": { regex: /&(inr|#8377);/g, val: "\u20B9" },
"num_dec": { regex: /&#([0-9]{1,7});/g, val: (_2, str7) => String.fromCharCode(Number.parseInt(str7, 10)) },
"num_hex": { regex: /&#x([0-9a-fA-F]{1,6});/g, val: (_2, str7) => String.fromCharCode(Number.parseInt(str7, 16)) }
};
this.addExternalEntities = addExternalEntities;
this.parseXml = parseXml;
this.parseTextData = parseTextData;
this.resolveNameSpace = resolveNameSpace;
this.buildAttributesMap = buildAttributesMap;
this.isItStopNode = isItStopNode;
this.replaceEntitiesValue = replaceEntitiesValue;
this.readStopNodeData = readStopNodeData;
this.saveTextToParentTag = saveTextToParentTag;
this.addChild = addChild;
}
};
function addExternalEntities(externalEntities) {
const entKeys = Object.keys(externalEntities);
for (let i5 = 0; i5 < entKeys.length; i5++) {
const ent = entKeys[i5];
this.lastEntities[ent] = {
regex: new RegExp("&" + ent + ";", "g"),
val: externalEntities[e