UNPKG

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
(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