@nextcloud/files 3.10.1 → 3.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,10 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const dav = require("./chunks/dav-CtqjqS4O.cjs");
3
+ const dav = require("./chunks/dav-5fPdvOgP.cjs");
4
4
  const capabilities = require("@nextcloud/capabilities");
5
5
  const path = require("path");
6
6
  const l10n = require("@nextcloud/l10n");
7
7
  const typescriptEventTarget = require("typescript-event-target");
8
+ const require$$1 = require("string_decoder");
9
+ const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
10
+ const require$$1__default = /* @__PURE__ */ _interopDefault(require$$1);
8
11
  var NewMenuEntryCategory = /* @__PURE__ */ ((NewMenuEntryCategory2) => {
9
12
  NewMenuEntryCategory2[NewMenuEntryCategory2["UploadFromDevice"] = 0] = "UploadFromDevice";
10
13
  NewMenuEntryCategory2[NewMenuEntryCategory2["CreateNew"] = 1] = "CreateNew";
@@ -485,7 +488,7 @@ function sortNodes(nodes, options = {}) {
485
488
  // 3: Use sorting mode if NOT basename (to be able to use display name too)
486
489
  ...sortingOptions.sortingMode !== "basename" ? [(v) => v[sortingOptions.sortingMode]] : [],
487
490
  // 4: Use display name if available, fallback to name
488
- (v) => basename(v.displayname || v.attributes?.displayname || v.basename),
491
+ (v) => basename(v.displayname || v.attributes?.displayname || v.basename || ""),
489
492
  // 5: Finally, use basename if all previous sorting methods failed
490
493
  (v) => v.basename
491
494
  ];
@@ -604,1604 +607,1549 @@ const isValidColumn = function(column) {
604
607
  function getDefaultExportFromCjs(x) {
605
608
  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
606
609
  }
607
- var validator$2 = {};
608
- var util$3 = {};
609
- (function(exports2) {
610
- const 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";
611
- const nameChar = nameStartChar + "\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040";
612
- const nameRegexp = "[" + nameStartChar + "][" + nameChar + "]*";
613
- const regexName = new RegExp("^" + nameRegexp + "$");
614
- const getAllMatches = function(string, regex) {
615
- const matches = [];
616
- let match = regex.exec(string);
617
- while (match) {
618
- const allmatches = [];
619
- allmatches.startIndex = regex.lastIndex - match[0].length;
620
- const len = match.length;
621
- for (let index = 0; index < len; index++) {
622
- allmatches.push(match[index]);
610
+ var sax$1 = {};
611
+ var hasRequiredSax;
612
+ function requireSax() {
613
+ if (hasRequiredSax) return sax$1;
614
+ hasRequiredSax = 1;
615
+ (function(exports2) {
616
+ (function(sax2) {
617
+ sax2.parser = function(strict, opt) {
618
+ return new SAXParser(strict, opt);
619
+ };
620
+ sax2.SAXParser = SAXParser;
621
+ sax2.SAXStream = SAXStream;
622
+ sax2.createStream = createStream;
623
+ sax2.MAX_BUFFER_LENGTH = 64 * 1024;
624
+ var buffers = [
625
+ "comment",
626
+ "sgmlDecl",
627
+ "textNode",
628
+ "tagName",
629
+ "doctype",
630
+ "procInstName",
631
+ "procInstBody",
632
+ "entity",
633
+ "attribName",
634
+ "attribValue",
635
+ "cdata",
636
+ "script"
637
+ ];
638
+ sax2.EVENTS = [
639
+ "text",
640
+ "processinginstruction",
641
+ "sgmldeclaration",
642
+ "doctype",
643
+ "comment",
644
+ "opentagstart",
645
+ "attribute",
646
+ "opentag",
647
+ "closetag",
648
+ "opencdata",
649
+ "cdata",
650
+ "closecdata",
651
+ "error",
652
+ "end",
653
+ "ready",
654
+ "script",
655
+ "opennamespace",
656
+ "closenamespace"
657
+ ];
658
+ function SAXParser(strict, opt) {
659
+ if (!(this instanceof SAXParser)) {
660
+ return new SAXParser(strict, opt);
661
+ }
662
+ var parser = this;
663
+ clearBuffers(parser);
664
+ parser.q = parser.c = "";
665
+ parser.bufferCheckPosition = sax2.MAX_BUFFER_LENGTH;
666
+ parser.opt = opt || {};
667
+ parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags;
668
+ parser.looseCase = parser.opt.lowercase ? "toLowerCase" : "toUpperCase";
669
+ parser.tags = [];
670
+ parser.closed = parser.closedRoot = parser.sawRoot = false;
671
+ parser.tag = parser.error = null;
672
+ parser.strict = !!strict;
673
+ parser.noscript = !!(strict || parser.opt.noscript);
674
+ parser.state = S.BEGIN;
675
+ parser.strictEntities = parser.opt.strictEntities;
676
+ parser.ENTITIES = parser.strictEntities ? Object.create(sax2.XML_ENTITIES) : Object.create(sax2.ENTITIES);
677
+ parser.attribList = [];
678
+ if (parser.opt.xmlns) {
679
+ parser.ns = Object.create(rootNS);
680
+ }
681
+ if (parser.opt.unquotedAttributeValues === void 0) {
682
+ parser.opt.unquotedAttributeValues = !strict;
683
+ }
684
+ parser.trackPosition = parser.opt.position !== false;
685
+ if (parser.trackPosition) {
686
+ parser.position = parser.line = parser.column = 0;
687
+ }
688
+ emit2(parser, "onready");
623
689
  }
624
- matches.push(allmatches);
625
- match = regex.exec(string);
626
- }
627
- return matches;
628
- };
629
- const isName = function(string) {
630
- const match = regexName.exec(string);
631
- return !(match === null || typeof match === "undefined");
632
- };
633
- exports2.isExist = function(v) {
634
- return typeof v !== "undefined";
635
- };
636
- exports2.isEmptyObject = function(obj) {
637
- return Object.keys(obj).length === 0;
638
- };
639
- exports2.merge = function(target, a, arrayMode) {
640
- if (a) {
641
- const keys = Object.keys(a);
642
- const len = keys.length;
643
- for (let i = 0; i < len; i++) {
644
- if (arrayMode === "strict") {
645
- target[keys[i]] = [a[keys[i]]];
646
- } else {
647
- target[keys[i]] = a[keys[i]];
690
+ if (!Object.create) {
691
+ Object.create = function(o) {
692
+ function F() {
693
+ }
694
+ F.prototype = o;
695
+ var newf = new F();
696
+ return newf;
697
+ };
698
+ }
699
+ if (!Object.keys) {
700
+ Object.keys = function(o) {
701
+ var a = [];
702
+ for (var i in o) if (o.hasOwnProperty(i)) a.push(i);
703
+ return a;
704
+ };
705
+ }
706
+ function checkBufferLength(parser) {
707
+ var maxAllowed = Math.max(sax2.MAX_BUFFER_LENGTH, 10);
708
+ var maxActual = 0;
709
+ for (var i = 0, l = buffers.length; i < l; i++) {
710
+ var len = parser[buffers[i]].length;
711
+ if (len > maxAllowed) {
712
+ switch (buffers[i]) {
713
+ case "textNode":
714
+ closeText(parser);
715
+ break;
716
+ case "cdata":
717
+ emitNode(parser, "oncdata", parser.cdata);
718
+ parser.cdata = "";
719
+ break;
720
+ case "script":
721
+ emitNode(parser, "onscript", parser.script);
722
+ parser.script = "";
723
+ break;
724
+ default:
725
+ error(parser, "Max buffer length exceeded: " + buffers[i]);
726
+ }
727
+ }
728
+ maxActual = Math.max(maxActual, len);
648
729
  }
730
+ var m = sax2.MAX_BUFFER_LENGTH - maxActual;
731
+ parser.bufferCheckPosition = m + parser.position;
649
732
  }
650
- }
651
- };
652
- exports2.getValue = function(v) {
653
- if (exports2.isExist(v)) {
654
- return v;
655
- } else {
656
- return "";
657
- }
658
- };
659
- exports2.isName = isName;
660
- exports2.getAllMatches = getAllMatches;
661
- exports2.nameRegexp = nameRegexp;
662
- })(util$3);
663
- const util$2 = util$3;
664
- const defaultOptions$2 = {
665
- allowBooleanAttributes: false,
666
- //A tag can have attributes without any value
667
- unpairedTags: []
668
- };
669
- validator$2.validate = function(xmlData, options) {
670
- options = Object.assign({}, defaultOptions$2, options);
671
- const tags = [];
672
- let tagFound = false;
673
- let reachedRoot = false;
674
- if (xmlData[0] === "\uFEFF") {
675
- xmlData = xmlData.substr(1);
676
- }
677
- for (let i = 0; i < xmlData.length; i++) {
678
- if (xmlData[i] === "<" && xmlData[i + 1] === "?") {
679
- i += 2;
680
- i = readPI(xmlData, i);
681
- if (i.err) return i;
682
- } else if (xmlData[i] === "<") {
683
- let tagStartPos = i;
684
- i++;
685
- if (xmlData[i] === "!") {
686
- i = readCommentAndCDATA(xmlData, i);
687
- continue;
688
- } else {
689
- let closingTag = false;
690
- if (xmlData[i] === "/") {
691
- closingTag = true;
692
- i++;
733
+ function clearBuffers(parser) {
734
+ for (var i = 0, l = buffers.length; i < l; i++) {
735
+ parser[buffers[i]] = "";
693
736
  }
694
- let tagName = "";
695
- for (; i < xmlData.length && xmlData[i] !== ">" && xmlData[i] !== " " && xmlData[i] !== " " && xmlData[i] !== "\n" && xmlData[i] !== "\r"; i++) {
696
- tagName += xmlData[i];
737
+ }
738
+ function flushBuffers(parser) {
739
+ closeText(parser);
740
+ if (parser.cdata !== "") {
741
+ emitNode(parser, "oncdata", parser.cdata);
742
+ parser.cdata = "";
697
743
  }
698
- tagName = tagName.trim();
699
- if (tagName[tagName.length - 1] === "/") {
700
- tagName = tagName.substring(0, tagName.length - 1);
701
- i--;
744
+ if (parser.script !== "") {
745
+ emitNode(parser, "onscript", parser.script);
746
+ parser.script = "";
702
747
  }
703
- if (!validateTagName(tagName)) {
704
- let msg;
705
- if (tagName.trim().length === 0) {
706
- msg = "Invalid space after '<'.";
707
- } else {
708
- msg = "Tag '" + tagName + "' is an invalid name.";
709
- }
710
- return getErrorObject("InvalidTag", msg, getLineNumberForPosition(xmlData, i));
748
+ }
749
+ SAXParser.prototype = {
750
+ end: function() {
751
+ end(this);
752
+ },
753
+ write,
754
+ resume: function() {
755
+ this.error = null;
756
+ return this;
757
+ },
758
+ close: function() {
759
+ return this.write(null);
760
+ },
761
+ flush: function() {
762
+ flushBuffers(this);
763
+ }
764
+ };
765
+ var Stream;
766
+ try {
767
+ Stream = require("stream").Stream;
768
+ } catch (ex) {
769
+ Stream = function() {
770
+ };
771
+ }
772
+ if (!Stream) Stream = function() {
773
+ };
774
+ var streamWraps = sax2.EVENTS.filter(function(ev) {
775
+ return ev !== "error" && ev !== "end";
776
+ });
777
+ function createStream(strict, opt) {
778
+ return new SAXStream(strict, opt);
779
+ }
780
+ function SAXStream(strict, opt) {
781
+ if (!(this instanceof SAXStream)) {
782
+ return new SAXStream(strict, opt);
711
783
  }
712
- const result = readAttributeStr(xmlData, i);
713
- if (result === false) {
714
- return getErrorObject("InvalidAttr", "Attributes for '" + tagName + "' have open quote.", getLineNumberForPosition(xmlData, i));
784
+ Stream.apply(this);
785
+ this._parser = new SAXParser(strict, opt);
786
+ this.writable = true;
787
+ this.readable = true;
788
+ var me = this;
789
+ this._parser.onend = function() {
790
+ me.emit("end");
791
+ };
792
+ this._parser.onerror = function(er) {
793
+ me.emit("error", er);
794
+ me._parser.error = null;
795
+ };
796
+ this._decoder = null;
797
+ streamWraps.forEach(function(ev) {
798
+ Object.defineProperty(me, "on" + ev, {
799
+ get: function() {
800
+ return me._parser["on" + ev];
801
+ },
802
+ set: function(h) {
803
+ if (!h) {
804
+ me.removeAllListeners(ev);
805
+ me._parser["on" + ev] = h;
806
+ return h;
807
+ }
808
+ me.on(ev, h);
809
+ },
810
+ enumerable: true,
811
+ configurable: false
812
+ });
813
+ });
814
+ }
815
+ SAXStream.prototype = Object.create(Stream.prototype, {
816
+ constructor: {
817
+ value: SAXStream
715
818
  }
716
- let attrStr = result.value;
717
- i = result.index;
718
- if (attrStr[attrStr.length - 1] === "/") {
719
- const attrStrStart = i - attrStr.length;
720
- attrStr = attrStr.substring(0, attrStr.length - 1);
721
- const isValid = validateAttributeString(attrStr, options);
722
- if (isValid === true) {
723
- tagFound = true;
724
- } else {
725
- return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, attrStrStart + isValid.err.line));
726
- }
727
- } else if (closingTag) {
728
- if (!result.tagClosed) {
729
- return getErrorObject("InvalidTag", "Closing tag '" + tagName + "' doesn't have proper closing.", getLineNumberForPosition(xmlData, i));
730
- } else if (attrStr.trim().length > 0) {
731
- return getErrorObject("InvalidTag", "Closing tag '" + tagName + "' can't have attributes or invalid starting.", getLineNumberForPosition(xmlData, tagStartPos));
732
- } else if (tags.length === 0) {
733
- return getErrorObject("InvalidTag", "Closing tag '" + tagName + "' has not been opened.", getLineNumberForPosition(xmlData, tagStartPos));
734
- } else {
735
- const otg = tags.pop();
736
- if (tagName !== otg.tagName) {
737
- let openPos = getLineNumberForPosition(xmlData, otg.tagStartPos);
738
- return getErrorObject(
739
- "InvalidTag",
740
- "Expected closing tag '" + otg.tagName + "' (opened in line " + openPos.line + ", col " + openPos.col + ") instead of closing tag '" + tagName + "'.",
741
- getLineNumberForPosition(xmlData, tagStartPos)
742
- );
743
- }
744
- if (tags.length == 0) {
745
- reachedRoot = true;
746
- }
747
- }
748
- } else {
749
- const isValid = validateAttributeString(attrStr, options);
750
- if (isValid !== true) {
751
- return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));
752
- }
753
- if (reachedRoot === true) {
754
- return getErrorObject("InvalidXml", "Multiple possible root nodes found.", getLineNumberForPosition(xmlData, i));
755
- } else if (options.unpairedTags.indexOf(tagName) !== -1) ;
756
- else {
757
- tags.push({ tagName, tagStartPos });
819
+ });
820
+ SAXStream.prototype.write = function(data) {
821
+ if (typeof Buffer === "function" && typeof Buffer.isBuffer === "function" && Buffer.isBuffer(data)) {
822
+ if (!this._decoder) {
823
+ var SD = require$$1__default.default.StringDecoder;
824
+ this._decoder = new SD("utf8");
758
825
  }
759
- tagFound = true;
826
+ data = this._decoder.write(data);
760
827
  }
761
- for (i++; i < xmlData.length; i++) {
762
- if (xmlData[i] === "<") {
763
- if (xmlData[i + 1] === "!") {
764
- i++;
765
- i = readCommentAndCDATA(xmlData, i);
766
- continue;
767
- } else if (xmlData[i + 1] === "?") {
768
- i = readPI(xmlData, ++i);
769
- if (i.err) return i;
770
- } else {
771
- break;
772
- }
773
- } else if (xmlData[i] === "&") {
774
- const afterAmp = validateAmpersand(xmlData, i);
775
- if (afterAmp == -1)
776
- return getErrorObject("InvalidChar", "char '&' is not expected.", getLineNumberForPosition(xmlData, i));
777
- i = afterAmp;
778
- } else {
779
- if (reachedRoot === true && !isWhiteSpace(xmlData[i])) {
780
- return getErrorObject("InvalidXml", "Extra text at the end", getLineNumberForPosition(xmlData, i));
781
- }
782
- }
828
+ this._parser.write(data.toString());
829
+ this.emit("data", data);
830
+ return true;
831
+ };
832
+ SAXStream.prototype.end = function(chunk) {
833
+ if (chunk && chunk.length) {
834
+ this.write(chunk);
783
835
  }
784
- if (xmlData[i] === "<") {
785
- i--;
836
+ this._parser.end();
837
+ return true;
838
+ };
839
+ SAXStream.prototype.on = function(ev, handler) {
840
+ var me = this;
841
+ if (!me._parser["on" + ev] && streamWraps.indexOf(ev) !== -1) {
842
+ me._parser["on" + ev] = function() {
843
+ var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments);
844
+ args.splice(0, 0, ev);
845
+ me.emit.apply(me, args);
846
+ };
786
847
  }
848
+ return Stream.prototype.on.call(me, ev, handler);
849
+ };
850
+ var CDATA = "[CDATA[";
851
+ var DOCTYPE = "DOCTYPE";
852
+ var XML_NAMESPACE = "http://www.w3.org/XML/1998/namespace";
853
+ var XMLNS_NAMESPACE = "http://www.w3.org/2000/xmlns/";
854
+ var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE };
855
+ var nameStart = /[:_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]/;
856
+ var nameBody = /[:_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\u00B7\u0300-\u036F\u203F-\u2040.\d-]/;
857
+ var entityStart = /[#:_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]/;
858
+ var entityBody = /[#:_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\u00B7\u0300-\u036F\u203F-\u2040.\d-]/;
859
+ function isWhitespace(c) {
860
+ return c === " " || c === "\n" || c === "\r" || c === " ";
787
861
  }
788
- } else {
789
- if (isWhiteSpace(xmlData[i])) {
790
- continue;
862
+ function isQuote(c) {
863
+ return c === '"' || c === "'";
791
864
  }
792
- return getErrorObject("InvalidChar", "char '" + xmlData[i] + "' is not expected.", getLineNumberForPosition(xmlData, i));
793
- }
794
- }
795
- if (!tagFound) {
796
- return getErrorObject("InvalidXml", "Start tag expected.", 1);
797
- } else if (tags.length == 1) {
798
- return getErrorObject("InvalidTag", "Unclosed tag '" + tags[0].tagName + "'.", getLineNumberForPosition(xmlData, tags[0].tagStartPos));
799
- } else if (tags.length > 0) {
800
- return getErrorObject("InvalidXml", "Invalid '" + JSON.stringify(tags.map((t2) => t2.tagName), null, 4).replace(/\r?\n/g, "") + "' found.", { line: 1, col: 1 });
801
- }
802
- return true;
803
- };
804
- function isWhiteSpace(char) {
805
- return char === " " || char === " " || char === "\n" || char === "\r";
806
- }
807
- function readPI(xmlData, i) {
808
- const start = i;
809
- for (; i < xmlData.length; i++) {
810
- if (xmlData[i] == "?" || xmlData[i] == " ") {
811
- const tagname = xmlData.substr(start, i - start);
812
- if (i > 5 && tagname === "xml") {
813
- return getErrorObject("InvalidXml", "XML declaration allowed only at the start of the document.", getLineNumberForPosition(xmlData, i));
814
- } else if (xmlData[i] == "?" && xmlData[i + 1] == ">") {
815
- i++;
816
- break;
817
- } else {
818
- continue;
865
+ function isAttribEnd(c) {
866
+ return c === ">" || isWhitespace(c);
819
867
  }
820
- }
821
- }
822
- return i;
823
- }
824
- function readCommentAndCDATA(xmlData, i) {
825
- if (xmlData.length > i + 5 && xmlData[i + 1] === "-" && xmlData[i + 2] === "-") {
826
- for (i += 3; i < xmlData.length; i++) {
827
- if (xmlData[i] === "-" && xmlData[i + 1] === "-" && xmlData[i + 2] === ">") {
828
- i += 2;
829
- break;
868
+ function isMatch(regex, c) {
869
+ return regex.test(c);
830
870
  }
831
- }
832
- } else if (xmlData.length > i + 8 && xmlData[i + 1] === "D" && xmlData[i + 2] === "O" && xmlData[i + 3] === "C" && xmlData[i + 4] === "T" && xmlData[i + 5] === "Y" && xmlData[i + 6] === "P" && xmlData[i + 7] === "E") {
833
- let angleBracketsCount = 1;
834
- for (i += 8; i < xmlData.length; i++) {
835
- if (xmlData[i] === "<") {
836
- angleBracketsCount++;
837
- } else if (xmlData[i] === ">") {
838
- angleBracketsCount--;
839
- if (angleBracketsCount === 0) {
840
- break;
841
- }
871
+ function notMatch(regex, c) {
872
+ return !isMatch(regex, c);
842
873
  }
843
- }
844
- } else if (xmlData.length > i + 9 && xmlData[i + 1] === "[" && xmlData[i + 2] === "C" && xmlData[i + 3] === "D" && xmlData[i + 4] === "A" && xmlData[i + 5] === "T" && xmlData[i + 6] === "A" && xmlData[i + 7] === "[") {
845
- for (i += 8; i < xmlData.length; i++) {
846
- if (xmlData[i] === "]" && xmlData[i + 1] === "]" && xmlData[i + 2] === ">") {
847
- i += 2;
848
- break;
874
+ var S = 0;
875
+ sax2.STATE = {
876
+ BEGIN: S++,
877
+ // leading byte order mark or whitespace
878
+ BEGIN_WHITESPACE: S++,
879
+ // leading whitespace
880
+ TEXT: S++,
881
+ // general stuff
882
+ TEXT_ENTITY: S++,
883
+ // &amp and such.
884
+ OPEN_WAKA: S++,
885
+ // <
886
+ SGML_DECL: S++,
887
+ // <!BLARG
888
+ SGML_DECL_QUOTED: S++,
889
+ // <!BLARG foo "bar
890
+ DOCTYPE: S++,
891
+ // <!DOCTYPE
892
+ DOCTYPE_QUOTED: S++,
893
+ // <!DOCTYPE "//blah
894
+ DOCTYPE_DTD: S++,
895
+ // <!DOCTYPE "//blah" [ ...
896
+ DOCTYPE_DTD_QUOTED: S++,
897
+ // <!DOCTYPE "//blah" [ "foo
898
+ COMMENT_STARTING: S++,
899
+ // <!-
900
+ COMMENT: S++,
901
+ // <!--
902
+ COMMENT_ENDING: S++,
903
+ // <!-- blah -
904
+ COMMENT_ENDED: S++,
905
+ // <!-- blah --
906
+ CDATA: S++,
907
+ // <![CDATA[ something
908
+ CDATA_ENDING: S++,
909
+ // ]
910
+ CDATA_ENDING_2: S++,
911
+ // ]]
912
+ PROC_INST: S++,
913
+ // <?hi
914
+ PROC_INST_BODY: S++,
915
+ // <?hi there
916
+ PROC_INST_ENDING: S++,
917
+ // <?hi "there" ?
918
+ OPEN_TAG: S++,
919
+ // <strong
920
+ OPEN_TAG_SLASH: S++,
921
+ // <strong /
922
+ ATTRIB: S++,
923
+ // <a
924
+ ATTRIB_NAME: S++,
925
+ // <a foo
926
+ ATTRIB_NAME_SAW_WHITE: S++,
927
+ // <a foo _
928
+ ATTRIB_VALUE: S++,
929
+ // <a foo=
930
+ ATTRIB_VALUE_QUOTED: S++,
931
+ // <a foo="bar
932
+ ATTRIB_VALUE_CLOSED: S++,
933
+ // <a foo="bar"
934
+ ATTRIB_VALUE_UNQUOTED: S++,
935
+ // <a foo=bar
936
+ ATTRIB_VALUE_ENTITY_Q: S++,
937
+ // <foo bar="&quot;"
938
+ ATTRIB_VALUE_ENTITY_U: S++,
939
+ // <foo bar=&quot
940
+ CLOSE_TAG: S++,
941
+ // </a
942
+ CLOSE_TAG_SAW_WHITE: S++,
943
+ // </a >
944
+ SCRIPT: S++,
945
+ // <script> ...
946
+ SCRIPT_ENDING: S++
947
+ // <script> ... <
948
+ };
949
+ sax2.XML_ENTITIES = {
950
+ "amp": "&",
951
+ "gt": ">",
952
+ "lt": "<",
953
+ "quot": '"',
954
+ "apos": "'"
955
+ };
956
+ sax2.ENTITIES = {
957
+ "amp": "&",
958
+ "gt": ">",
959
+ "lt": "<",
960
+ "quot": '"',
961
+ "apos": "'",
962
+ "AElig": 198,
963
+ "Aacute": 193,
964
+ "Acirc": 194,
965
+ "Agrave": 192,
966
+ "Aring": 197,
967
+ "Atilde": 195,
968
+ "Auml": 196,
969
+ "Ccedil": 199,
970
+ "ETH": 208,
971
+ "Eacute": 201,
972
+ "Ecirc": 202,
973
+ "Egrave": 200,
974
+ "Euml": 203,
975
+ "Iacute": 205,
976
+ "Icirc": 206,
977
+ "Igrave": 204,
978
+ "Iuml": 207,
979
+ "Ntilde": 209,
980
+ "Oacute": 211,
981
+ "Ocirc": 212,
982
+ "Ograve": 210,
983
+ "Oslash": 216,
984
+ "Otilde": 213,
985
+ "Ouml": 214,
986
+ "THORN": 222,
987
+ "Uacute": 218,
988
+ "Ucirc": 219,
989
+ "Ugrave": 217,
990
+ "Uuml": 220,
991
+ "Yacute": 221,
992
+ "aacute": 225,
993
+ "acirc": 226,
994
+ "aelig": 230,
995
+ "agrave": 224,
996
+ "aring": 229,
997
+ "atilde": 227,
998
+ "auml": 228,
999
+ "ccedil": 231,
1000
+ "eacute": 233,
1001
+ "ecirc": 234,
1002
+ "egrave": 232,
1003
+ "eth": 240,
1004
+ "euml": 235,
1005
+ "iacute": 237,
1006
+ "icirc": 238,
1007
+ "igrave": 236,
1008
+ "iuml": 239,
1009
+ "ntilde": 241,
1010
+ "oacute": 243,
1011
+ "ocirc": 244,
1012
+ "ograve": 242,
1013
+ "oslash": 248,
1014
+ "otilde": 245,
1015
+ "ouml": 246,
1016
+ "szlig": 223,
1017
+ "thorn": 254,
1018
+ "uacute": 250,
1019
+ "ucirc": 251,
1020
+ "ugrave": 249,
1021
+ "uuml": 252,
1022
+ "yacute": 253,
1023
+ "yuml": 255,
1024
+ "copy": 169,
1025
+ "reg": 174,
1026
+ "nbsp": 160,
1027
+ "iexcl": 161,
1028
+ "cent": 162,
1029
+ "pound": 163,
1030
+ "curren": 164,
1031
+ "yen": 165,
1032
+ "brvbar": 166,
1033
+ "sect": 167,
1034
+ "uml": 168,
1035
+ "ordf": 170,
1036
+ "laquo": 171,
1037
+ "not": 172,
1038
+ "shy": 173,
1039
+ "macr": 175,
1040
+ "deg": 176,
1041
+ "plusmn": 177,
1042
+ "sup1": 185,
1043
+ "sup2": 178,
1044
+ "sup3": 179,
1045
+ "acute": 180,
1046
+ "micro": 181,
1047
+ "para": 182,
1048
+ "middot": 183,
1049
+ "cedil": 184,
1050
+ "ordm": 186,
1051
+ "raquo": 187,
1052
+ "frac14": 188,
1053
+ "frac12": 189,
1054
+ "frac34": 190,
1055
+ "iquest": 191,
1056
+ "times": 215,
1057
+ "divide": 247,
1058
+ "OElig": 338,
1059
+ "oelig": 339,
1060
+ "Scaron": 352,
1061
+ "scaron": 353,
1062
+ "Yuml": 376,
1063
+ "fnof": 402,
1064
+ "circ": 710,
1065
+ "tilde": 732,
1066
+ "Alpha": 913,
1067
+ "Beta": 914,
1068
+ "Gamma": 915,
1069
+ "Delta": 916,
1070
+ "Epsilon": 917,
1071
+ "Zeta": 918,
1072
+ "Eta": 919,
1073
+ "Theta": 920,
1074
+ "Iota": 921,
1075
+ "Kappa": 922,
1076
+ "Lambda": 923,
1077
+ "Mu": 924,
1078
+ "Nu": 925,
1079
+ "Xi": 926,
1080
+ "Omicron": 927,
1081
+ "Pi": 928,
1082
+ "Rho": 929,
1083
+ "Sigma": 931,
1084
+ "Tau": 932,
1085
+ "Upsilon": 933,
1086
+ "Phi": 934,
1087
+ "Chi": 935,
1088
+ "Psi": 936,
1089
+ "Omega": 937,
1090
+ "alpha": 945,
1091
+ "beta": 946,
1092
+ "gamma": 947,
1093
+ "delta": 948,
1094
+ "epsilon": 949,
1095
+ "zeta": 950,
1096
+ "eta": 951,
1097
+ "theta": 952,
1098
+ "iota": 953,
1099
+ "kappa": 954,
1100
+ "lambda": 955,
1101
+ "mu": 956,
1102
+ "nu": 957,
1103
+ "xi": 958,
1104
+ "omicron": 959,
1105
+ "pi": 960,
1106
+ "rho": 961,
1107
+ "sigmaf": 962,
1108
+ "sigma": 963,
1109
+ "tau": 964,
1110
+ "upsilon": 965,
1111
+ "phi": 966,
1112
+ "chi": 967,
1113
+ "psi": 968,
1114
+ "omega": 969,
1115
+ "thetasym": 977,
1116
+ "upsih": 978,
1117
+ "piv": 982,
1118
+ "ensp": 8194,
1119
+ "emsp": 8195,
1120
+ "thinsp": 8201,
1121
+ "zwnj": 8204,
1122
+ "zwj": 8205,
1123
+ "lrm": 8206,
1124
+ "rlm": 8207,
1125
+ "ndash": 8211,
1126
+ "mdash": 8212,
1127
+ "lsquo": 8216,
1128
+ "rsquo": 8217,
1129
+ "sbquo": 8218,
1130
+ "ldquo": 8220,
1131
+ "rdquo": 8221,
1132
+ "bdquo": 8222,
1133
+ "dagger": 8224,
1134
+ "Dagger": 8225,
1135
+ "bull": 8226,
1136
+ "hellip": 8230,
1137
+ "permil": 8240,
1138
+ "prime": 8242,
1139
+ "Prime": 8243,
1140
+ "lsaquo": 8249,
1141
+ "rsaquo": 8250,
1142
+ "oline": 8254,
1143
+ "frasl": 8260,
1144
+ "euro": 8364,
1145
+ "image": 8465,
1146
+ "weierp": 8472,
1147
+ "real": 8476,
1148
+ "trade": 8482,
1149
+ "alefsym": 8501,
1150
+ "larr": 8592,
1151
+ "uarr": 8593,
1152
+ "rarr": 8594,
1153
+ "darr": 8595,
1154
+ "harr": 8596,
1155
+ "crarr": 8629,
1156
+ "lArr": 8656,
1157
+ "uArr": 8657,
1158
+ "rArr": 8658,
1159
+ "dArr": 8659,
1160
+ "hArr": 8660,
1161
+ "forall": 8704,
1162
+ "part": 8706,
1163
+ "exist": 8707,
1164
+ "empty": 8709,
1165
+ "nabla": 8711,
1166
+ "isin": 8712,
1167
+ "notin": 8713,
1168
+ "ni": 8715,
1169
+ "prod": 8719,
1170
+ "sum": 8721,
1171
+ "minus": 8722,
1172
+ "lowast": 8727,
1173
+ "radic": 8730,
1174
+ "prop": 8733,
1175
+ "infin": 8734,
1176
+ "ang": 8736,
1177
+ "and": 8743,
1178
+ "or": 8744,
1179
+ "cap": 8745,
1180
+ "cup": 8746,
1181
+ "int": 8747,
1182
+ "there4": 8756,
1183
+ "sim": 8764,
1184
+ "cong": 8773,
1185
+ "asymp": 8776,
1186
+ "ne": 8800,
1187
+ "equiv": 8801,
1188
+ "le": 8804,
1189
+ "ge": 8805,
1190
+ "sub": 8834,
1191
+ "sup": 8835,
1192
+ "nsub": 8836,
1193
+ "sube": 8838,
1194
+ "supe": 8839,
1195
+ "oplus": 8853,
1196
+ "otimes": 8855,
1197
+ "perp": 8869,
1198
+ "sdot": 8901,
1199
+ "lceil": 8968,
1200
+ "rceil": 8969,
1201
+ "lfloor": 8970,
1202
+ "rfloor": 8971,
1203
+ "lang": 9001,
1204
+ "rang": 9002,
1205
+ "loz": 9674,
1206
+ "spades": 9824,
1207
+ "clubs": 9827,
1208
+ "hearts": 9829,
1209
+ "diams": 9830
1210
+ };
1211
+ Object.keys(sax2.ENTITIES).forEach(function(key) {
1212
+ var e = sax2.ENTITIES[key];
1213
+ var s2 = typeof e === "number" ? String.fromCharCode(e) : e;
1214
+ sax2.ENTITIES[key] = s2;
1215
+ });
1216
+ for (var s in sax2.STATE) {
1217
+ sax2.STATE[sax2.STATE[s]] = s;
849
1218
  }
850
- }
851
- }
852
- return i;
853
- }
854
- const doubleQuote = '"';
855
- const singleQuote = "'";
856
- function readAttributeStr(xmlData, i) {
857
- let attrStr = "";
858
- let startChar = "";
859
- let tagClosed = false;
860
- for (; i < xmlData.length; i++) {
861
- if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {
862
- if (startChar === "") {
863
- startChar = xmlData[i];
864
- } else if (startChar !== xmlData[i]) ;
865
- else {
866
- startChar = "";
1219
+ S = sax2.STATE;
1220
+ function emit2(parser, event, data) {
1221
+ parser[event] && parser[event](data);
867
1222
  }
868
- } else if (xmlData[i] === ">") {
869
- if (startChar === "") {
870
- tagClosed = true;
871
- break;
1223
+ function emitNode(parser, nodeType, data) {
1224
+ if (parser.textNode) closeText(parser);
1225
+ emit2(parser, nodeType, data);
872
1226
  }
873
- }
874
- attrStr += xmlData[i];
875
- }
876
- if (startChar !== "") {
877
- return false;
878
- }
879
- return {
880
- value: attrStr,
881
- index: i,
882
- tagClosed
883
- };
884
- }
885
- const validAttrStrRegxp = new RegExp(`(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['"])(([\\s\\S])*?)\\5)?`, "g");
886
- function validateAttributeString(attrStr, options) {
887
- const matches = util$2.getAllMatches(attrStr, validAttrStrRegxp);
888
- const attrNames = {};
889
- for (let i = 0; i < matches.length; i++) {
890
- if (matches[i][1].length === 0) {
891
- return getErrorObject("InvalidAttr", "Attribute '" + matches[i][2] + "' has no space in starting.", getPositionFromMatch(matches[i]));
892
- } else if (matches[i][3] !== void 0 && matches[i][4] === void 0) {
893
- return getErrorObject("InvalidAttr", "Attribute '" + matches[i][2] + "' is without value.", getPositionFromMatch(matches[i]));
894
- } else if (matches[i][3] === void 0 && !options.allowBooleanAttributes) {
895
- return getErrorObject("InvalidAttr", "boolean attribute '" + matches[i][2] + "' is not allowed.", getPositionFromMatch(matches[i]));
896
- }
897
- const attrName = matches[i][2];
898
- if (!validateAttrName(attrName)) {
899
- return getErrorObject("InvalidAttr", "Attribute '" + attrName + "' is an invalid name.", getPositionFromMatch(matches[i]));
900
- }
901
- if (!attrNames.hasOwnProperty(attrName)) {
902
- attrNames[attrName] = 1;
903
- } else {
904
- return getErrorObject("InvalidAttr", "Attribute '" + attrName + "' is repeated.", getPositionFromMatch(matches[i]));
905
- }
906
- }
907
- return true;
908
- }
909
- function validateNumberAmpersand(xmlData, i) {
910
- let re2 = /\d/;
911
- if (xmlData[i] === "x") {
912
- i++;
913
- re2 = /[\da-fA-F]/;
914
- }
915
- for (; i < xmlData.length; i++) {
916
- if (xmlData[i] === ";")
917
- return i;
918
- if (!xmlData[i].match(re2))
919
- break;
920
- }
921
- return -1;
922
- }
923
- function validateAmpersand(xmlData, i) {
924
- i++;
925
- if (xmlData[i] === ";")
926
- return -1;
927
- if (xmlData[i] === "#") {
928
- i++;
929
- return validateNumberAmpersand(xmlData, i);
930
- }
931
- let count = 0;
932
- for (; i < xmlData.length; i++, count++) {
933
- if (xmlData[i].match(/\w/) && count < 20)
934
- continue;
935
- if (xmlData[i] === ";")
936
- break;
937
- return -1;
938
- }
939
- return i;
940
- }
941
- function getErrorObject(code, message, lineNumber) {
942
- return {
943
- err: {
944
- code,
945
- msg: message,
946
- line: lineNumber.line || lineNumber,
947
- col: lineNumber.col
948
- }
949
- };
950
- }
951
- function validateAttrName(attrName) {
952
- return util$2.isName(attrName);
953
- }
954
- function validateTagName(tagname) {
955
- return util$2.isName(tagname);
956
- }
957
- function getLineNumberForPosition(xmlData, index) {
958
- const lines = xmlData.substring(0, index).split(/\r?\n/);
959
- return {
960
- line: lines.length,
961
- // column number is last line's length + 1, because column numbering starts at 1:
962
- col: lines[lines.length - 1].length + 1
963
- };
964
- }
965
- function getPositionFromMatch(match) {
966
- return match.startIndex + match[1].length;
967
- }
968
- var OptionsBuilder = {};
969
- const defaultOptions$1 = {
970
- preserveOrder: false,
971
- attributeNamePrefix: "@_",
972
- attributesGroupName: false,
973
- textNodeName: "#text",
974
- ignoreAttributes: true,
975
- removeNSPrefix: false,
976
- // remove NS from tag name or attribute name if true
977
- allowBooleanAttributes: false,
978
- //a tag can have attributes without any value
979
- //ignoreRootElement : false,
980
- parseTagValue: true,
981
- parseAttributeValue: false,
982
- trimValues: true,
983
- //Trim string values of tag and attributes
984
- cdataPropName: false,
985
- numberParseOptions: {
986
- hex: true,
987
- leadingZeros: true,
988
- eNotation: true
989
- },
990
- tagValueProcessor: function(tagName, val2) {
991
- return val2;
992
- },
993
- attributeValueProcessor: function(attrName, val2) {
994
- return val2;
995
- },
996
- stopNodes: [],
997
- //nested tags will not be parsed even for errors
998
- alwaysCreateTextNode: false,
999
- isArray: () => false,
1000
- commentPropName: false,
1001
- unpairedTags: [],
1002
- processEntities: true,
1003
- htmlEntities: false,
1004
- ignoreDeclaration: false,
1005
- ignorePiTags: false,
1006
- transformTagName: false,
1007
- transformAttributeName: false,
1008
- updateTag: function(tagName, jPath, attrs) {
1009
- return tagName;
1010
- }
1011
- // skipEmptyListItem: false
1012
- };
1013
- const buildOptions$1 = function(options) {
1014
- return Object.assign({}, defaultOptions$1, options);
1015
- };
1016
- OptionsBuilder.buildOptions = buildOptions$1;
1017
- OptionsBuilder.defaultOptions = defaultOptions$1;
1018
- class XmlNode {
1019
- constructor(tagname) {
1020
- this.tagname = tagname;
1021
- this.child = [];
1022
- this[":@"] = {};
1023
- }
1024
- add(key, val2) {
1025
- if (key === "__proto__") key = "#__proto__";
1026
- this.child.push({ [key]: val2 });
1027
- }
1028
- addChild(node) {
1029
- if (node.tagname === "__proto__") node.tagname = "#__proto__";
1030
- if (node[":@"] && Object.keys(node[":@"]).length > 0) {
1031
- this.child.push({ [node.tagname]: node.child, [":@"]: node[":@"] });
1032
- } else {
1033
- this.child.push({ [node.tagname]: node.child });
1034
- }
1035
- }
1036
- }
1037
- var xmlNode$1 = XmlNode;
1038
- const util$1 = util$3;
1039
- function readDocType$1(xmlData, i) {
1040
- const entities = {};
1041
- if (xmlData[i + 3] === "O" && xmlData[i + 4] === "C" && xmlData[i + 5] === "T" && xmlData[i + 6] === "Y" && xmlData[i + 7] === "P" && xmlData[i + 8] === "E") {
1042
- i = i + 9;
1043
- let angleBracketsCount = 1;
1044
- let hasBody = false, comment = false;
1045
- let exp = "";
1046
- for (; i < xmlData.length; i++) {
1047
- if (xmlData[i] === "<" && !comment) {
1048
- if (hasBody && isEntity(xmlData, i)) {
1049
- i += 7;
1050
- [entityName, val, i] = readEntityExp(xmlData, i + 1);
1051
- if (val.indexOf("&") === -1)
1052
- entities[validateEntityName(entityName)] = {
1053
- regx: RegExp(`&${entityName};`, "g"),
1054
- val
1055
- };
1056
- } else if (hasBody && isElement(xmlData, i)) i += 8;
1057
- else if (hasBody && isAttlist(xmlData, i)) i += 8;
1058
- else if (hasBody && isNotation(xmlData, i)) i += 9;
1059
- else if (isComment) comment = true;
1060
- else throw new Error("Invalid DOCTYPE");
1061
- angleBracketsCount++;
1062
- exp = "";
1063
- } else if (xmlData[i] === ">") {
1064
- if (comment) {
1065
- if (xmlData[i - 1] === "-" && xmlData[i - 2] === "-") {
1066
- comment = false;
1067
- angleBracketsCount--;
1068
- }
1069
- } else {
1070
- angleBracketsCount--;
1227
+ function closeText(parser) {
1228
+ parser.textNode = textopts(parser.opt, parser.textNode);
1229
+ if (parser.textNode) emit2(parser, "ontext", parser.textNode);
1230
+ parser.textNode = "";
1231
+ }
1232
+ function textopts(opt, text) {
1233
+ if (opt.trim) text = text.trim();
1234
+ if (opt.normalize) text = text.replace(/\s+/g, " ");
1235
+ return text;
1236
+ }
1237
+ function error(parser, er) {
1238
+ closeText(parser);
1239
+ if (parser.trackPosition) {
1240
+ er += "\nLine: " + parser.line + "\nColumn: " + parser.column + "\nChar: " + parser.c;
1071
1241
  }
1072
- if (angleBracketsCount === 0) {
1073
- break;
1242
+ er = new Error(er);
1243
+ parser.error = er;
1244
+ emit2(parser, "onerror", er);
1245
+ return parser;
1246
+ }
1247
+ function end(parser) {
1248
+ if (parser.sawRoot && !parser.closedRoot) strictFail(parser, "Unclosed root tag");
1249
+ if (parser.state !== S.BEGIN && parser.state !== S.BEGIN_WHITESPACE && parser.state !== S.TEXT) {
1250
+ error(parser, "Unexpected end");
1074
1251
  }
1075
- } else if (xmlData[i] === "[") {
1076
- hasBody = true;
1077
- } else {
1078
- exp += xmlData[i];
1252
+ closeText(parser);
1253
+ parser.c = "";
1254
+ parser.closed = true;
1255
+ emit2(parser, "onend");
1256
+ SAXParser.call(parser, parser.strict, parser.opt);
1257
+ return parser;
1079
1258
  }
1080
- }
1081
- if (angleBracketsCount !== 0) {
1082
- throw new Error(`Unclosed DOCTYPE`);
1083
- }
1084
- } else {
1085
- throw new Error(`Invalid Tag instead of DOCTYPE`);
1086
- }
1087
- return { entities, i };
1088
- }
1089
- function readEntityExp(xmlData, i) {
1090
- let entityName2 = "";
1091
- for (; i < xmlData.length && (xmlData[i] !== "'" && xmlData[i] !== '"'); i++) {
1092
- entityName2 += xmlData[i];
1093
- }
1094
- entityName2 = entityName2.trim();
1095
- if (entityName2.indexOf(" ") !== -1) throw new Error("External entites are not supported");
1096
- const startChar = xmlData[i++];
1097
- let val2 = "";
1098
- for (; i < xmlData.length && xmlData[i] !== startChar; i++) {
1099
- val2 += xmlData[i];
1100
- }
1101
- return [entityName2, val2, i];
1102
- }
1103
- function isComment(xmlData, i) {
1104
- if (xmlData[i + 1] === "!" && xmlData[i + 2] === "-" && xmlData[i + 3] === "-") return true;
1105
- return false;
1106
- }
1107
- function isEntity(xmlData, i) {
1108
- if (xmlData[i + 1] === "!" && xmlData[i + 2] === "E" && xmlData[i + 3] === "N" && xmlData[i + 4] === "T" && xmlData[i + 5] === "I" && xmlData[i + 6] === "T" && xmlData[i + 7] === "Y") return true;
1109
- return false;
1110
- }
1111
- function isElement(xmlData, i) {
1112
- if (xmlData[i + 1] === "!" && xmlData[i + 2] === "E" && xmlData[i + 3] === "L" && xmlData[i + 4] === "E" && xmlData[i + 5] === "M" && xmlData[i + 6] === "E" && xmlData[i + 7] === "N" && xmlData[i + 8] === "T") return true;
1113
- return false;
1114
- }
1115
- function isAttlist(xmlData, i) {
1116
- if (xmlData[i + 1] === "!" && xmlData[i + 2] === "A" && xmlData[i + 3] === "T" && xmlData[i + 4] === "T" && xmlData[i + 5] === "L" && xmlData[i + 6] === "I" && xmlData[i + 7] === "S" && xmlData[i + 8] === "T") return true;
1117
- return false;
1118
- }
1119
- function isNotation(xmlData, i) {
1120
- if (xmlData[i + 1] === "!" && xmlData[i + 2] === "N" && xmlData[i + 3] === "O" && xmlData[i + 4] === "T" && xmlData[i + 5] === "A" && xmlData[i + 6] === "T" && xmlData[i + 7] === "I" && xmlData[i + 8] === "O" && xmlData[i + 9] === "N") return true;
1121
- return false;
1122
- }
1123
- function validateEntityName(name) {
1124
- if (util$1.isName(name))
1125
- return name;
1126
- else
1127
- throw new Error(`Invalid entity name ${name}`);
1128
- }
1129
- var DocTypeReader = readDocType$1;
1130
- const hexRegex = /^[-+]?0x[a-fA-F0-9]+$/;
1131
- const numRegex = /^([\-\+])?(0*)(\.[0-9]+([eE]\-?[0-9]+)?|[0-9]+(\.[0-9]+([eE]\-?[0-9]+)?)?)$/;
1132
- if (!Number.parseInt && window.parseInt) {
1133
- Number.parseInt = window.parseInt;
1134
- }
1135
- if (!Number.parseFloat && window.parseFloat) {
1136
- Number.parseFloat = window.parseFloat;
1137
- }
1138
- const consider = {
1139
- hex: true,
1140
- leadingZeros: true,
1141
- decimalPoint: ".",
1142
- eNotation: true
1143
- //skipLike: /regex/
1144
- };
1145
- function toNumber$1(str, options = {}) {
1146
- options = Object.assign({}, consider, options);
1147
- if (!str || typeof str !== "string") return str;
1148
- let trimmedStr = str.trim();
1149
- if (options.skipLike !== void 0 && options.skipLike.test(trimmedStr)) return str;
1150
- else if (options.hex && hexRegex.test(trimmedStr)) {
1151
- return Number.parseInt(trimmedStr, 16);
1152
- } else {
1153
- const match = numRegex.exec(trimmedStr);
1154
- if (match) {
1155
- const sign = match[1];
1156
- const leadingZeros = match[2];
1157
- let numTrimmedByZeros = trimZeros(match[3]);
1158
- const eNotation = match[4] || match[6];
1159
- if (!options.leadingZeros && leadingZeros.length > 0 && sign && trimmedStr[2] !== ".") return str;
1160
- else if (!options.leadingZeros && leadingZeros.length > 0 && !sign && trimmedStr[1] !== ".") return str;
1161
- else {
1162
- const num = Number(trimmedStr);
1163
- const numStr = "" + num;
1164
- if (numStr.search(/[eE]/) !== -1) {
1165
- if (options.eNotation) return num;
1166
- else return str;
1167
- } else if (eNotation) {
1168
- if (options.eNotation) return num;
1169
- else return str;
1170
- } else if (trimmedStr.indexOf(".") !== -1) {
1171
- if (numStr === "0" && numTrimmedByZeros === "") return num;
1172
- else if (numStr === numTrimmedByZeros) return num;
1173
- else if (sign && numStr === "-" + numTrimmedByZeros) return num;
1174
- else return str;
1259
+ function strictFail(parser, message) {
1260
+ if (typeof parser !== "object" || !(parser instanceof SAXParser)) {
1261
+ throw new Error("bad call to strictFail");
1175
1262
  }
1176
- if (leadingZeros) {
1177
- if (numTrimmedByZeros === numStr) return num;
1178
- else if (sign + numTrimmedByZeros === numStr) return num;
1179
- else return str;
1263
+ if (parser.strict) {
1264
+ error(parser, message);
1180
1265
  }
1181
- if (trimmedStr === numStr) return num;
1182
- else if (trimmedStr === sign + numStr) return num;
1183
- return str;
1184
1266
  }
1185
- } else {
1186
- return str;
1187
- }
1188
- }
1189
- }
1190
- function trimZeros(numStr) {
1191
- if (numStr && numStr.indexOf(".") !== -1) {
1192
- numStr = numStr.replace(/0+$/, "");
1193
- if (numStr === ".") numStr = "0";
1194
- else if (numStr[0] === ".") numStr = "0" + numStr;
1195
- else if (numStr[numStr.length - 1] === ".") numStr = numStr.substr(0, numStr.length - 1);
1196
- return numStr;
1197
- }
1198
- return numStr;
1199
- }
1200
- var strnum = toNumber$1;
1201
- function getIgnoreAttributesFn$2(ignoreAttributes2) {
1202
- if (typeof ignoreAttributes2 === "function") {
1203
- return ignoreAttributes2;
1204
- }
1205
- if (Array.isArray(ignoreAttributes2)) {
1206
- return (attrName) => {
1207
- for (const pattern of ignoreAttributes2) {
1208
- if (typeof pattern === "string" && attrName === pattern) {
1209
- return true;
1267
+ function newTag(parser) {
1268
+ if (!parser.strict) parser.tagName = parser.tagName[parser.looseCase]();
1269
+ var parent = parser.tags[parser.tags.length - 1] || parser;
1270
+ var tag = parser.tag = { name: parser.tagName, attributes: {} };
1271
+ if (parser.opt.xmlns) {
1272
+ tag.ns = parent.ns;
1210
1273
  }
1211
- if (pattern instanceof RegExp && pattern.test(attrName)) {
1212
- return true;
1274
+ parser.attribList.length = 0;
1275
+ emitNode(parser, "onopentagstart", tag);
1276
+ }
1277
+ function qname(name, attribute) {
1278
+ var i = name.indexOf(":");
1279
+ var qualName = i < 0 ? ["", name] : name.split(":");
1280
+ var prefix = qualName[0];
1281
+ var local = qualName[1];
1282
+ if (attribute && name === "xmlns") {
1283
+ prefix = "xmlns";
1284
+ local = "";
1213
1285
  }
1286
+ return { prefix, local };
1214
1287
  }
1215
- };
1216
- }
1217
- return () => false;
1218
- }
1219
- var ignoreAttributes = getIgnoreAttributesFn$2;
1220
- const util = util$3;
1221
- const xmlNode = xmlNode$1;
1222
- const readDocType = DocTypeReader;
1223
- const toNumber = strnum;
1224
- const getIgnoreAttributesFn$1 = ignoreAttributes;
1225
- let OrderedObjParser$1 = class OrderedObjParser {
1226
- constructor(options) {
1227
- this.options = options;
1228
- this.currentNode = null;
1229
- this.tagsNodeStack = [];
1230
- this.docTypeEntities = {};
1231
- this.lastEntities = {
1232
- "apos": { regex: /&(apos|#39|#x27);/g, val: "'" },
1233
- "gt": { regex: /&(gt|#62|#x3E);/g, val: ">" },
1234
- "lt": { regex: /&(lt|#60|#x3C);/g, val: "<" },
1235
- "quot": { regex: /&(quot|#34|#x22);/g, val: '"' }
1236
- };
1237
- this.ampEntity = { regex: /&(amp|#38|#x26);/g, val: "&" };
1238
- this.htmlEntities = {
1239
- "space": { regex: /&(nbsp|#160);/g, val: " " },
1240
- // "lt" : { regex: /&(lt|#60);/g, val: "<" },
1241
- // "gt" : { regex: /&(gt|#62);/g, val: ">" },
1242
- // "amp" : { regex: /&(amp|#38);/g, val: "&" },
1243
- // "quot" : { regex: /&(quot|#34);/g, val: "\"" },
1244
- // "apos" : { regex: /&(apos|#39);/g, val: "'" },
1245
- "cent": { regex: /&(cent|#162);/g, val: "¢" },
1246
- "pound": { regex: /&(pound|#163);/g, val: "£" },
1247
- "yen": { regex: /&(yen|#165);/g, val: "¥" },
1248
- "euro": { regex: /&(euro|#8364);/g, val: "€" },
1249
- "copyright": { regex: /&(copy|#169);/g, val: "©" },
1250
- "reg": { regex: /&(reg|#174);/g, val: "®" },
1251
- "inr": { regex: /&(inr|#8377);/g, val: "₹" },
1252
- "num_dec": { regex: /&#([0-9]{1,7});/g, val: (_, str) => String.fromCharCode(Number.parseInt(str, 10)) },
1253
- "num_hex": { regex: /&#x([0-9a-fA-F]{1,6});/g, val: (_, str) => String.fromCharCode(Number.parseInt(str, 16)) }
1254
- };
1255
- this.addExternalEntities = addExternalEntities;
1256
- this.parseXml = parseXml;
1257
- this.parseTextData = parseTextData;
1258
- this.resolveNameSpace = resolveNameSpace;
1259
- this.buildAttributesMap = buildAttributesMap;
1260
- this.isItStopNode = isItStopNode;
1261
- this.replaceEntitiesValue = replaceEntitiesValue$1;
1262
- this.readStopNodeData = readStopNodeData;
1263
- this.saveTextToParentTag = saveTextToParentTag;
1264
- this.addChild = addChild;
1265
- this.ignoreAttributesFn = getIgnoreAttributesFn$1(this.options.ignoreAttributes);
1266
- }
1267
- };
1268
- function addExternalEntities(externalEntities) {
1269
- const entKeys = Object.keys(externalEntities);
1270
- for (let i = 0; i < entKeys.length; i++) {
1271
- const ent = entKeys[i];
1272
- this.lastEntities[ent] = {
1273
- regex: new RegExp("&" + ent + ";", "g"),
1274
- val: externalEntities[ent]
1275
- };
1276
- }
1277
- }
1278
- function parseTextData(val2, tagName, jPath, dontTrim, hasAttributes, isLeafNode, escapeEntities) {
1279
- if (val2 !== void 0) {
1280
- if (this.options.trimValues && !dontTrim) {
1281
- val2 = val2.trim();
1282
- }
1283
- if (val2.length > 0) {
1284
- if (!escapeEntities) val2 = this.replaceEntitiesValue(val2);
1285
- const newval = this.options.tagValueProcessor(tagName, val2, jPath, hasAttributes, isLeafNode);
1286
- if (newval === null || newval === void 0) {
1287
- return val2;
1288
- } else if (typeof newval !== typeof val2 || newval !== val2) {
1289
- return newval;
1290
- } else if (this.options.trimValues) {
1291
- return parseValue(val2, this.options.parseTagValue, this.options.numberParseOptions);
1292
- } else {
1293
- const trimmedVal = val2.trim();
1294
- if (trimmedVal === val2) {
1295
- return parseValue(val2, this.options.parseTagValue, this.options.numberParseOptions);
1288
+ function attrib(parser) {
1289
+ if (!parser.strict) {
1290
+ parser.attribName = parser.attribName[parser.looseCase]();
1291
+ }
1292
+ if (parser.attribList.indexOf(parser.attribName) !== -1 || parser.tag.attributes.hasOwnProperty(parser.attribName)) {
1293
+ parser.attribName = parser.attribValue = "";
1294
+ return;
1295
+ }
1296
+ if (parser.opt.xmlns) {
1297
+ var qn = qname(parser.attribName, true);
1298
+ var prefix = qn.prefix;
1299
+ var local = qn.local;
1300
+ if (prefix === "xmlns") {
1301
+ if (local === "xml" && parser.attribValue !== XML_NAMESPACE) {
1302
+ strictFail(
1303
+ parser,
1304
+ "xml: prefix must be bound to " + XML_NAMESPACE + "\nActual: " + parser.attribValue
1305
+ );
1306
+ } else if (local === "xmlns" && parser.attribValue !== XMLNS_NAMESPACE) {
1307
+ strictFail(
1308
+ parser,
1309
+ "xmlns: prefix must be bound to " + XMLNS_NAMESPACE + "\nActual: " + parser.attribValue
1310
+ );
1311
+ } else {
1312
+ var tag = parser.tag;
1313
+ var parent = parser.tags[parser.tags.length - 1] || parser;
1314
+ if (tag.ns === parent.ns) {
1315
+ tag.ns = Object.create(parent.ns);
1316
+ }
1317
+ tag.ns[local] = parser.attribValue;
1318
+ }
1319
+ }
1320
+ parser.attribList.push([parser.attribName, parser.attribValue]);
1296
1321
  } else {
1297
- return val2;
1322
+ parser.tag.attributes[parser.attribName] = parser.attribValue;
1323
+ emitNode(parser, "onattribute", {
1324
+ name: parser.attribName,
1325
+ value: parser.attribValue
1326
+ });
1298
1327
  }
1328
+ parser.attribName = parser.attribValue = "";
1299
1329
  }
1300
- }
1301
- }
1302
- }
1303
- function resolveNameSpace(tagname) {
1304
- if (this.options.removeNSPrefix) {
1305
- const tags = tagname.split(":");
1306
- const prefix = tagname.charAt(0) === "/" ? "/" : "";
1307
- if (tags[0] === "xmlns") {
1308
- return "";
1309
- }
1310
- if (tags.length === 2) {
1311
- tagname = prefix + tags[1];
1312
- }
1313
- }
1314
- return tagname;
1315
- }
1316
- const attrsRegx = new RegExp(`([^\\s=]+)\\s*(=\\s*(['"])([\\s\\S]*?)\\3)?`, "gm");
1317
- function buildAttributesMap(attrStr, jPath, tagName) {
1318
- if (this.options.ignoreAttributes !== true && typeof attrStr === "string") {
1319
- const matches = util.getAllMatches(attrStr, attrsRegx);
1320
- const len = matches.length;
1321
- const attrs = {};
1322
- for (let i = 0; i < len; i++) {
1323
- const attrName = this.resolveNameSpace(matches[i][1]);
1324
- if (this.ignoreAttributesFn(attrName, jPath)) {
1325
- continue;
1326
- }
1327
- let oldVal = matches[i][4];
1328
- let aName = this.options.attributeNamePrefix + attrName;
1329
- if (attrName.length) {
1330
- if (this.options.transformAttributeName) {
1331
- aName = this.options.transformAttributeName(aName);
1332
- }
1333
- if (aName === "__proto__") aName = "#__proto__";
1334
- if (oldVal !== void 0) {
1335
- if (this.options.trimValues) {
1336
- oldVal = oldVal.trim();
1330
+ function openTag(parser, selfClosing) {
1331
+ if (parser.opt.xmlns) {
1332
+ var tag = parser.tag;
1333
+ var qn = qname(parser.tagName);
1334
+ tag.prefix = qn.prefix;
1335
+ tag.local = qn.local;
1336
+ tag.uri = tag.ns[qn.prefix] || "";
1337
+ if (tag.prefix && !tag.uri) {
1338
+ strictFail(parser, "Unbound namespace prefix: " + JSON.stringify(parser.tagName));
1339
+ tag.uri = qn.prefix;
1337
1340
  }
1338
- oldVal = this.replaceEntitiesValue(oldVal);
1339
- const newVal = this.options.attributeValueProcessor(attrName, oldVal, jPath);
1340
- if (newVal === null || newVal === void 0) {
1341
- attrs[aName] = oldVal;
1342
- } else if (typeof newVal !== typeof oldVal || newVal !== oldVal) {
1343
- attrs[aName] = newVal;
1341
+ var parent = parser.tags[parser.tags.length - 1] || parser;
1342
+ if (tag.ns && parent.ns !== tag.ns) {
1343
+ Object.keys(tag.ns).forEach(function(p) {
1344
+ emitNode(parser, "onopennamespace", {
1345
+ prefix: p,
1346
+ uri: tag.ns[p]
1347
+ });
1348
+ });
1349
+ }
1350
+ for (var i = 0, l = parser.attribList.length; i < l; i++) {
1351
+ var nv = parser.attribList[i];
1352
+ var name = nv[0];
1353
+ var value = nv[1];
1354
+ var qualName = qname(name, true);
1355
+ var prefix = qualName.prefix;
1356
+ var local = qualName.local;
1357
+ var uri = prefix === "" ? "" : tag.ns[prefix] || "";
1358
+ var a = {
1359
+ name,
1360
+ value,
1361
+ prefix,
1362
+ local,
1363
+ uri
1364
+ };
1365
+ if (prefix && prefix !== "xmlns" && !uri) {
1366
+ strictFail(parser, "Unbound namespace prefix: " + JSON.stringify(prefix));
1367
+ a.uri = prefix;
1368
+ }
1369
+ parser.tag.attributes[name] = a;
1370
+ emitNode(parser, "onattribute", a);
1371
+ }
1372
+ parser.attribList.length = 0;
1373
+ }
1374
+ parser.tag.isSelfClosing = !!selfClosing;
1375
+ parser.sawRoot = true;
1376
+ parser.tags.push(parser.tag);
1377
+ emitNode(parser, "onopentag", parser.tag);
1378
+ if (!selfClosing) {
1379
+ if (!parser.noscript && parser.tagName.toLowerCase() === "script") {
1380
+ parser.state = S.SCRIPT;
1344
1381
  } else {
1345
- attrs[aName] = parseValue(
1346
- oldVal,
1347
- this.options.parseAttributeValue,
1348
- this.options.numberParseOptions
1349
- );
1382
+ parser.state = S.TEXT;
1350
1383
  }
1351
- } else if (this.options.allowBooleanAttributes) {
1352
- attrs[aName] = true;
1384
+ parser.tag = null;
1385
+ parser.tagName = "";
1353
1386
  }
1387
+ parser.attribName = parser.attribValue = "";
1388
+ parser.attribList.length = 0;
1354
1389
  }
1355
- }
1356
- if (!Object.keys(attrs).length) {
1357
- return;
1358
- }
1359
- if (this.options.attributesGroupName) {
1360
- const attrCollection = {};
1361
- attrCollection[this.options.attributesGroupName] = attrs;
1362
- return attrCollection;
1363
- }
1364
- return attrs;
1365
- }
1366
- }
1367
- const parseXml = function(xmlData) {
1368
- xmlData = xmlData.replace(/\r\n?/g, "\n");
1369
- const xmlObj = new xmlNode("!xml");
1370
- let currentNode = xmlObj;
1371
- let textData = "";
1372
- let jPath = "";
1373
- for (let i = 0; i < xmlData.length; i++) {
1374
- const ch = xmlData[i];
1375
- if (ch === "<") {
1376
- if (xmlData[i + 1] === "/") {
1377
- const closeIndex = findClosingIndex(xmlData, ">", i, "Closing Tag is not closed.");
1378
- let tagName = xmlData.substring(i + 2, closeIndex).trim();
1379
- if (this.options.removeNSPrefix) {
1380
- const colonIndex = tagName.indexOf(":");
1381
- if (colonIndex !== -1) {
1382
- tagName = tagName.substr(colonIndex + 1);
1390
+ function closeTag(parser) {
1391
+ if (!parser.tagName) {
1392
+ strictFail(parser, "Weird empty close tag.");
1393
+ parser.textNode += "</>";
1394
+ parser.state = S.TEXT;
1395
+ return;
1396
+ }
1397
+ if (parser.script) {
1398
+ if (parser.tagName !== "script") {
1399
+ parser.script += "</" + parser.tagName + ">";
1400
+ parser.tagName = "";
1401
+ parser.state = S.SCRIPT;
1402
+ return;
1383
1403
  }
1404
+ emitNode(parser, "onscript", parser.script);
1405
+ parser.script = "";
1384
1406
  }
1385
- if (this.options.transformTagName) {
1386
- tagName = this.options.transformTagName(tagName);
1407
+ var t = parser.tags.length;
1408
+ var tagName = parser.tagName;
1409
+ if (!parser.strict) {
1410
+ tagName = tagName[parser.looseCase]();
1387
1411
  }
1388
- if (currentNode) {
1389
- textData = this.saveTextToParentTag(textData, currentNode, jPath);
1412
+ var closeTo = tagName;
1413
+ while (t--) {
1414
+ var close = parser.tags[t];
1415
+ if (close.name !== closeTo) {
1416
+ strictFail(parser, "Unexpected close tag");
1417
+ } else {
1418
+ break;
1419
+ }
1390
1420
  }
1391
- const lastTagName = jPath.substring(jPath.lastIndexOf(".") + 1);
1392
- if (tagName && this.options.unpairedTags.indexOf(tagName) !== -1) {
1393
- throw new Error(`Unpaired tag can not be used as closing tag: </${tagName}>`);
1421
+ if (t < 0) {
1422
+ strictFail(parser, "Unmatched closing tag: " + parser.tagName);
1423
+ parser.textNode += "</" + parser.tagName + ">";
1424
+ parser.state = S.TEXT;
1425
+ return;
1394
1426
  }
1395
- let propIndex = 0;
1396
- if (lastTagName && this.options.unpairedTags.indexOf(lastTagName) !== -1) {
1397
- propIndex = jPath.lastIndexOf(".", jPath.lastIndexOf(".") - 1);
1398
- this.tagsNodeStack.pop();
1399
- } else {
1400
- propIndex = jPath.lastIndexOf(".");
1427
+ parser.tagName = tagName;
1428
+ var s2 = parser.tags.length;
1429
+ while (s2-- > t) {
1430
+ var tag = parser.tag = parser.tags.pop();
1431
+ parser.tagName = parser.tag.name;
1432
+ emitNode(parser, "onclosetag", parser.tagName);
1433
+ var x = {};
1434
+ for (var i in tag.ns) {
1435
+ x[i] = tag.ns[i];
1436
+ }
1437
+ var parent = parser.tags[parser.tags.length - 1] || parser;
1438
+ if (parser.opt.xmlns && tag.ns !== parent.ns) {
1439
+ Object.keys(tag.ns).forEach(function(p) {
1440
+ var n = tag.ns[p];
1441
+ emitNode(parser, "onclosenamespace", { prefix: p, uri: n });
1442
+ });
1443
+ }
1444
+ }
1445
+ if (t === 0) parser.closedRoot = true;
1446
+ parser.tagName = parser.attribValue = parser.attribName = "";
1447
+ parser.attribList.length = 0;
1448
+ parser.state = S.TEXT;
1449
+ }
1450
+ function parseEntity(parser) {
1451
+ var entity = parser.entity;
1452
+ var entityLC = entity.toLowerCase();
1453
+ var num;
1454
+ var numStr = "";
1455
+ if (parser.ENTITIES[entity]) {
1456
+ return parser.ENTITIES[entity];
1457
+ }
1458
+ if (parser.ENTITIES[entityLC]) {
1459
+ return parser.ENTITIES[entityLC];
1401
1460
  }
1402
- jPath = jPath.substring(0, propIndex);
1403
- currentNode = this.tagsNodeStack.pop();
1404
- textData = "";
1405
- i = closeIndex;
1406
- } else if (xmlData[i + 1] === "?") {
1407
- let tagData = readTagExp(xmlData, i, false, "?>");
1408
- if (!tagData) throw new Error("Pi Tag is not closed.");
1409
- textData = this.saveTextToParentTag(textData, currentNode, jPath);
1410
- if (this.options.ignoreDeclaration && tagData.tagName === "?xml" || this.options.ignorePiTags) ;
1411
- else {
1412
- const childNode = new xmlNode(tagData.tagName);
1413
- childNode.add(this.options.textNodeName, "");
1414
- if (tagData.tagName !== tagData.tagExp && tagData.attrExpPresent) {
1415
- childNode[":@"] = this.buildAttributesMap(tagData.tagExp, jPath, tagData.tagName);
1461
+ entity = entityLC;
1462
+ if (entity.charAt(0) === "#") {
1463
+ if (entity.charAt(1) === "x") {
1464
+ entity = entity.slice(2);
1465
+ num = parseInt(entity, 16);
1466
+ numStr = num.toString(16);
1467
+ } else {
1468
+ entity = entity.slice(1);
1469
+ num = parseInt(entity, 10);
1470
+ numStr = num.toString(10);
1416
1471
  }
1417
- this.addChild(currentNode, childNode, jPath);
1418
1472
  }
1419
- i = tagData.closeIndex + 1;
1420
- } else if (xmlData.substr(i + 1, 3) === "!--") {
1421
- const endIndex = findClosingIndex(xmlData, "-->", i + 4, "Comment is not closed.");
1422
- if (this.options.commentPropName) {
1423
- const comment = xmlData.substring(i + 4, endIndex - 2);
1424
- textData = this.saveTextToParentTag(textData, currentNode, jPath);
1425
- currentNode.add(this.options.commentPropName, [{ [this.options.textNodeName]: comment }]);
1473
+ entity = entity.replace(/^0+/, "");
1474
+ if (isNaN(num) || numStr.toLowerCase() !== entity) {
1475
+ strictFail(parser, "Invalid character entity");
1476
+ return "&" + parser.entity + ";";
1426
1477
  }
1427
- i = endIndex;
1428
- } else if (xmlData.substr(i + 1, 2) === "!D") {
1429
- const result = readDocType(xmlData, i);
1430
- this.docTypeEntities = result.entities;
1431
- i = result.i;
1432
- } else if (xmlData.substr(i + 1, 2) === "![") {
1433
- const closeIndex = findClosingIndex(xmlData, "]]>", i, "CDATA is not closed.") - 2;
1434
- const tagExp = xmlData.substring(i + 9, closeIndex);
1435
- textData = this.saveTextToParentTag(textData, currentNode, jPath);
1436
- let val2 = this.parseTextData(tagExp, currentNode.tagname, jPath, true, false, true, true);
1437
- if (val2 == void 0) val2 = "";
1438
- if (this.options.cdataPropName) {
1439
- currentNode.add(this.options.cdataPropName, [{ [this.options.textNodeName]: tagExp }]);
1440
- } else {
1441
- currentNode.add(this.options.textNodeName, val2);
1478
+ return String.fromCodePoint(num);
1479
+ }
1480
+ function beginWhiteSpace(parser, c) {
1481
+ if (c === "<") {
1482
+ parser.state = S.OPEN_WAKA;
1483
+ parser.startTagPosition = parser.position;
1484
+ } else if (!isWhitespace(c)) {
1485
+ strictFail(parser, "Non-whitespace before first tag.");
1486
+ parser.textNode = c;
1487
+ parser.state = S.TEXT;
1442
1488
  }
1443
- i = closeIndex + 2;
1444
- } else {
1445
- let result = readTagExp(xmlData, i, this.options.removeNSPrefix);
1446
- let tagName = result.tagName;
1447
- const rawTagName = result.rawTagName;
1448
- let tagExp = result.tagExp;
1449
- let attrExpPresent = result.attrExpPresent;
1450
- let closeIndex = result.closeIndex;
1451
- if (this.options.transformTagName) {
1452
- tagName = this.options.transformTagName(tagName);
1489
+ }
1490
+ function charAt(chunk, i) {
1491
+ var result = "";
1492
+ if (i < chunk.length) {
1493
+ result = chunk.charAt(i);
1453
1494
  }
1454
- if (currentNode && textData) {
1455
- if (currentNode.tagname !== "!xml") {
1456
- textData = this.saveTextToParentTag(textData, currentNode, jPath, false);
1457
- }
1495
+ return result;
1496
+ }
1497
+ function write(chunk) {
1498
+ var parser = this;
1499
+ if (this.error) {
1500
+ throw this.error;
1458
1501
  }
1459
- const lastTag = currentNode;
1460
- if (lastTag && this.options.unpairedTags.indexOf(lastTag.tagname) !== -1) {
1461
- currentNode = this.tagsNodeStack.pop();
1462
- jPath = jPath.substring(0, jPath.lastIndexOf("."));
1502
+ if (parser.closed) {
1503
+ return error(
1504
+ parser,
1505
+ "Cannot write after close. Assign an onready handler."
1506
+ );
1463
1507
  }
1464
- if (tagName !== xmlObj.tagname) {
1465
- jPath += jPath ? "." + tagName : tagName;
1508
+ if (chunk === null) {
1509
+ return end(parser);
1466
1510
  }
1467
- if (this.isItStopNode(this.options.stopNodes, jPath, tagName)) {
1468
- let tagContent = "";
1469
- if (tagExp.length > 0 && tagExp.lastIndexOf("/") === tagExp.length - 1) {
1470
- if (tagName[tagName.length - 1] === "/") {
1471
- tagName = tagName.substr(0, tagName.length - 1);
1472
- jPath = jPath.substr(0, jPath.length - 1);
1473
- tagExp = tagName;
1474
- } else {
1475
- tagExp = tagExp.substr(0, tagExp.length - 1);
1476
- }
1477
- i = result.closeIndex;
1478
- } else if (this.options.unpairedTags.indexOf(tagName) !== -1) {
1479
- i = result.closeIndex;
1480
- } else {
1481
- const result2 = this.readStopNodeData(xmlData, rawTagName, closeIndex + 1);
1482
- if (!result2) throw new Error(`Unexpected end of ${rawTagName}`);
1483
- i = result2.i;
1484
- tagContent = result2.tagContent;
1485
- }
1486
- const childNode = new xmlNode(tagName);
1487
- if (tagName !== tagExp && attrExpPresent) {
1488
- childNode[":@"] = this.buildAttributesMap(tagExp, jPath, tagName);
1489
- }
1490
- if (tagContent) {
1491
- tagContent = this.parseTextData(tagContent, tagName, jPath, true, attrExpPresent, true, true);
1511
+ if (typeof chunk === "object") {
1512
+ chunk = chunk.toString();
1513
+ }
1514
+ var i = 0;
1515
+ var c = "";
1516
+ while (true) {
1517
+ c = charAt(chunk, i++);
1518
+ parser.c = c;
1519
+ if (!c) {
1520
+ break;
1492
1521
  }
1493
- jPath = jPath.substr(0, jPath.lastIndexOf("."));
1494
- childNode.add(this.options.textNodeName, tagContent);
1495
- this.addChild(currentNode, childNode, jPath);
1496
- } else {
1497
- if (tagExp.length > 0 && tagExp.lastIndexOf("/") === tagExp.length - 1) {
1498
- if (tagName[tagName.length - 1] === "/") {
1499
- tagName = tagName.substr(0, tagName.length - 1);
1500
- jPath = jPath.substr(0, jPath.length - 1);
1501
- tagExp = tagName;
1522
+ if (parser.trackPosition) {
1523
+ parser.position++;
1524
+ if (c === "\n") {
1525
+ parser.line++;
1526
+ parser.column = 0;
1502
1527
  } else {
1503
- tagExp = tagExp.substr(0, tagExp.length - 1);
1504
- }
1505
- if (this.options.transformTagName) {
1506
- tagName = this.options.transformTagName(tagName);
1507
- }
1508
- const childNode = new xmlNode(tagName);
1509
- if (tagName !== tagExp && attrExpPresent) {
1510
- childNode[":@"] = this.buildAttributesMap(tagExp, jPath, tagName);
1528
+ parser.column++;
1511
1529
  }
1512
- this.addChild(currentNode, childNode, jPath);
1513
- jPath = jPath.substr(0, jPath.lastIndexOf("."));
1514
- } else {
1515
- const childNode = new xmlNode(tagName);
1516
- this.tagsNodeStack.push(currentNode);
1517
- if (tagName !== tagExp && attrExpPresent) {
1518
- childNode[":@"] = this.buildAttributesMap(tagExp, jPath, tagName);
1530
+ }
1531
+ switch (parser.state) {
1532
+ case S.BEGIN:
1533
+ parser.state = S.BEGIN_WHITESPACE;
1534
+ if (c === "\uFEFF") {
1535
+ continue;
1536
+ }
1537
+ beginWhiteSpace(parser, c);
1538
+ continue;
1539
+ case S.BEGIN_WHITESPACE:
1540
+ beginWhiteSpace(parser, c);
1541
+ continue;
1542
+ case S.TEXT:
1543
+ if (parser.sawRoot && !parser.closedRoot) {
1544
+ var starti = i - 1;
1545
+ while (c && c !== "<" && c !== "&") {
1546
+ c = charAt(chunk, i++);
1547
+ if (c && parser.trackPosition) {
1548
+ parser.position++;
1549
+ if (c === "\n") {
1550
+ parser.line++;
1551
+ parser.column = 0;
1552
+ } else {
1553
+ parser.column++;
1554
+ }
1555
+ }
1556
+ }
1557
+ parser.textNode += chunk.substring(starti, i - 1);
1558
+ }
1559
+ if (c === "<" && !(parser.sawRoot && parser.closedRoot && !parser.strict)) {
1560
+ parser.state = S.OPEN_WAKA;
1561
+ parser.startTagPosition = parser.position;
1562
+ } else {
1563
+ if (!isWhitespace(c) && (!parser.sawRoot || parser.closedRoot)) {
1564
+ strictFail(parser, "Text data outside of root node.");
1565
+ }
1566
+ if (c === "&") {
1567
+ parser.state = S.TEXT_ENTITY;
1568
+ } else {
1569
+ parser.textNode += c;
1570
+ }
1571
+ }
1572
+ continue;
1573
+ case S.SCRIPT:
1574
+ if (c === "<") {
1575
+ parser.state = S.SCRIPT_ENDING;
1576
+ } else {
1577
+ parser.script += c;
1578
+ }
1579
+ continue;
1580
+ case S.SCRIPT_ENDING:
1581
+ if (c === "/") {
1582
+ parser.state = S.CLOSE_TAG;
1583
+ } else {
1584
+ parser.script += "<" + c;
1585
+ parser.state = S.SCRIPT;
1586
+ }
1587
+ continue;
1588
+ case S.OPEN_WAKA:
1589
+ if (c === "!") {
1590
+ parser.state = S.SGML_DECL;
1591
+ parser.sgmlDecl = "";
1592
+ } else if (isWhitespace(c)) ;
1593
+ else if (isMatch(nameStart, c)) {
1594
+ parser.state = S.OPEN_TAG;
1595
+ parser.tagName = c;
1596
+ } else if (c === "/") {
1597
+ parser.state = S.CLOSE_TAG;
1598
+ parser.tagName = "";
1599
+ } else if (c === "?") {
1600
+ parser.state = S.PROC_INST;
1601
+ parser.procInstName = parser.procInstBody = "";
1602
+ } else {
1603
+ strictFail(parser, "Unencoded <");
1604
+ if (parser.startTagPosition + 1 < parser.position) {
1605
+ var pad = parser.position - parser.startTagPosition;
1606
+ c = new Array(pad).join(" ") + c;
1607
+ }
1608
+ parser.textNode += "<" + c;
1609
+ parser.state = S.TEXT;
1610
+ }
1611
+ continue;
1612
+ case S.SGML_DECL:
1613
+ if (parser.sgmlDecl + c === "--") {
1614
+ parser.state = S.COMMENT;
1615
+ parser.comment = "";
1616
+ parser.sgmlDecl = "";
1617
+ continue;
1618
+ }
1619
+ if (parser.doctype && parser.doctype !== true && parser.sgmlDecl) {
1620
+ parser.state = S.DOCTYPE_DTD;
1621
+ parser.doctype += "<!" + parser.sgmlDecl + c;
1622
+ parser.sgmlDecl = "";
1623
+ } else if ((parser.sgmlDecl + c).toUpperCase() === CDATA) {
1624
+ emitNode(parser, "onopencdata");
1625
+ parser.state = S.CDATA;
1626
+ parser.sgmlDecl = "";
1627
+ parser.cdata = "";
1628
+ } else if ((parser.sgmlDecl + c).toUpperCase() === DOCTYPE) {
1629
+ parser.state = S.DOCTYPE;
1630
+ if (parser.doctype || parser.sawRoot) {
1631
+ strictFail(
1632
+ parser,
1633
+ "Inappropriately located doctype declaration"
1634
+ );
1635
+ }
1636
+ parser.doctype = "";
1637
+ parser.sgmlDecl = "";
1638
+ } else if (c === ">") {
1639
+ emitNode(parser, "onsgmldeclaration", parser.sgmlDecl);
1640
+ parser.sgmlDecl = "";
1641
+ parser.state = S.TEXT;
1642
+ } else if (isQuote(c)) {
1643
+ parser.state = S.SGML_DECL_QUOTED;
1644
+ parser.sgmlDecl += c;
1645
+ } else {
1646
+ parser.sgmlDecl += c;
1647
+ }
1648
+ continue;
1649
+ case S.SGML_DECL_QUOTED:
1650
+ if (c === parser.q) {
1651
+ parser.state = S.SGML_DECL;
1652
+ parser.q = "";
1653
+ }
1654
+ parser.sgmlDecl += c;
1655
+ continue;
1656
+ case S.DOCTYPE:
1657
+ if (c === ">") {
1658
+ parser.state = S.TEXT;
1659
+ emitNode(parser, "ondoctype", parser.doctype);
1660
+ parser.doctype = true;
1661
+ } else {
1662
+ parser.doctype += c;
1663
+ if (c === "[") {
1664
+ parser.state = S.DOCTYPE_DTD;
1665
+ } else if (isQuote(c)) {
1666
+ parser.state = S.DOCTYPE_QUOTED;
1667
+ parser.q = c;
1668
+ }
1669
+ }
1670
+ continue;
1671
+ case S.DOCTYPE_QUOTED:
1672
+ parser.doctype += c;
1673
+ if (c === parser.q) {
1674
+ parser.q = "";
1675
+ parser.state = S.DOCTYPE;
1676
+ }
1677
+ continue;
1678
+ case S.DOCTYPE_DTD:
1679
+ if (c === "]") {
1680
+ parser.doctype += c;
1681
+ parser.state = S.DOCTYPE;
1682
+ } else if (c === "<") {
1683
+ parser.state = S.OPEN_WAKA;
1684
+ parser.startTagPosition = parser.position;
1685
+ } else if (isQuote(c)) {
1686
+ parser.doctype += c;
1687
+ parser.state = S.DOCTYPE_DTD_QUOTED;
1688
+ parser.q = c;
1689
+ } else {
1690
+ parser.doctype += c;
1691
+ }
1692
+ continue;
1693
+ case S.DOCTYPE_DTD_QUOTED:
1694
+ parser.doctype += c;
1695
+ if (c === parser.q) {
1696
+ parser.state = S.DOCTYPE_DTD;
1697
+ parser.q = "";
1698
+ }
1699
+ continue;
1700
+ case S.COMMENT:
1701
+ if (c === "-") {
1702
+ parser.state = S.COMMENT_ENDING;
1703
+ } else {
1704
+ parser.comment += c;
1705
+ }
1706
+ continue;
1707
+ case S.COMMENT_ENDING:
1708
+ if (c === "-") {
1709
+ parser.state = S.COMMENT_ENDED;
1710
+ parser.comment = textopts(parser.opt, parser.comment);
1711
+ if (parser.comment) {
1712
+ emitNode(parser, "oncomment", parser.comment);
1713
+ }
1714
+ parser.comment = "";
1715
+ } else {
1716
+ parser.comment += "-" + c;
1717
+ parser.state = S.COMMENT;
1718
+ }
1719
+ continue;
1720
+ case S.COMMENT_ENDED:
1721
+ if (c !== ">") {
1722
+ strictFail(parser, "Malformed comment");
1723
+ parser.comment += "--" + c;
1724
+ parser.state = S.COMMENT;
1725
+ } else if (parser.doctype && parser.doctype !== true) {
1726
+ parser.state = S.DOCTYPE_DTD;
1727
+ } else {
1728
+ parser.state = S.TEXT;
1729
+ }
1730
+ continue;
1731
+ case S.CDATA:
1732
+ if (c === "]") {
1733
+ parser.state = S.CDATA_ENDING;
1734
+ } else {
1735
+ parser.cdata += c;
1736
+ }
1737
+ continue;
1738
+ case S.CDATA_ENDING:
1739
+ if (c === "]") {
1740
+ parser.state = S.CDATA_ENDING_2;
1741
+ } else {
1742
+ parser.cdata += "]" + c;
1743
+ parser.state = S.CDATA;
1744
+ }
1745
+ continue;
1746
+ case S.CDATA_ENDING_2:
1747
+ if (c === ">") {
1748
+ if (parser.cdata) {
1749
+ emitNode(parser, "oncdata", parser.cdata);
1750
+ }
1751
+ emitNode(parser, "onclosecdata");
1752
+ parser.cdata = "";
1753
+ parser.state = S.TEXT;
1754
+ } else if (c === "]") {
1755
+ parser.cdata += "]";
1756
+ } else {
1757
+ parser.cdata += "]]" + c;
1758
+ parser.state = S.CDATA;
1759
+ }
1760
+ continue;
1761
+ case S.PROC_INST:
1762
+ if (c === "?") {
1763
+ parser.state = S.PROC_INST_ENDING;
1764
+ } else if (isWhitespace(c)) {
1765
+ parser.state = S.PROC_INST_BODY;
1766
+ } else {
1767
+ parser.procInstName += c;
1768
+ }
1769
+ continue;
1770
+ case S.PROC_INST_BODY:
1771
+ if (!parser.procInstBody && isWhitespace(c)) {
1772
+ continue;
1773
+ } else if (c === "?") {
1774
+ parser.state = S.PROC_INST_ENDING;
1775
+ } else {
1776
+ parser.procInstBody += c;
1777
+ }
1778
+ continue;
1779
+ case S.PROC_INST_ENDING:
1780
+ if (c === ">") {
1781
+ emitNode(parser, "onprocessinginstruction", {
1782
+ name: parser.procInstName,
1783
+ body: parser.procInstBody
1784
+ });
1785
+ parser.procInstName = parser.procInstBody = "";
1786
+ parser.state = S.TEXT;
1787
+ } else {
1788
+ parser.procInstBody += "?" + c;
1789
+ parser.state = S.PROC_INST_BODY;
1790
+ }
1791
+ continue;
1792
+ case S.OPEN_TAG:
1793
+ if (isMatch(nameBody, c)) {
1794
+ parser.tagName += c;
1795
+ } else {
1796
+ newTag(parser);
1797
+ if (c === ">") {
1798
+ openTag(parser);
1799
+ } else if (c === "/") {
1800
+ parser.state = S.OPEN_TAG_SLASH;
1801
+ } else {
1802
+ if (!isWhitespace(c)) {
1803
+ strictFail(parser, "Invalid character in tag name");
1804
+ }
1805
+ parser.state = S.ATTRIB;
1806
+ }
1807
+ }
1808
+ continue;
1809
+ case S.OPEN_TAG_SLASH:
1810
+ if (c === ">") {
1811
+ openTag(parser, true);
1812
+ closeTag(parser);
1813
+ } else {
1814
+ strictFail(parser, "Forward-slash in opening tag not followed by >");
1815
+ parser.state = S.ATTRIB;
1816
+ }
1817
+ continue;
1818
+ case S.ATTRIB:
1819
+ if (isWhitespace(c)) {
1820
+ continue;
1821
+ } else if (c === ">") {
1822
+ openTag(parser);
1823
+ } else if (c === "/") {
1824
+ parser.state = S.OPEN_TAG_SLASH;
1825
+ } else if (isMatch(nameStart, c)) {
1826
+ parser.attribName = c;
1827
+ parser.attribValue = "";
1828
+ parser.state = S.ATTRIB_NAME;
1829
+ } else {
1830
+ strictFail(parser, "Invalid attribute name");
1831
+ }
1832
+ continue;
1833
+ case S.ATTRIB_NAME:
1834
+ if (c === "=") {
1835
+ parser.state = S.ATTRIB_VALUE;
1836
+ } else if (c === ">") {
1837
+ strictFail(parser, "Attribute without value");
1838
+ parser.attribValue = parser.attribName;
1839
+ attrib(parser);
1840
+ openTag(parser);
1841
+ } else if (isWhitespace(c)) {
1842
+ parser.state = S.ATTRIB_NAME_SAW_WHITE;
1843
+ } else if (isMatch(nameBody, c)) {
1844
+ parser.attribName += c;
1845
+ } else {
1846
+ strictFail(parser, "Invalid attribute name");
1847
+ }
1848
+ continue;
1849
+ case S.ATTRIB_NAME_SAW_WHITE:
1850
+ if (c === "=") {
1851
+ parser.state = S.ATTRIB_VALUE;
1852
+ } else if (isWhitespace(c)) {
1853
+ continue;
1854
+ } else {
1855
+ strictFail(parser, "Attribute without value");
1856
+ parser.tag.attributes[parser.attribName] = "";
1857
+ parser.attribValue = "";
1858
+ emitNode(parser, "onattribute", {
1859
+ name: parser.attribName,
1860
+ value: ""
1861
+ });
1862
+ parser.attribName = "";
1863
+ if (c === ">") {
1864
+ openTag(parser);
1865
+ } else if (isMatch(nameStart, c)) {
1866
+ parser.attribName = c;
1867
+ parser.state = S.ATTRIB_NAME;
1868
+ } else {
1869
+ strictFail(parser, "Invalid attribute name");
1870
+ parser.state = S.ATTRIB;
1871
+ }
1872
+ }
1873
+ continue;
1874
+ case S.ATTRIB_VALUE:
1875
+ if (isWhitespace(c)) {
1876
+ continue;
1877
+ } else if (isQuote(c)) {
1878
+ parser.q = c;
1879
+ parser.state = S.ATTRIB_VALUE_QUOTED;
1880
+ } else {
1881
+ if (!parser.opt.unquotedAttributeValues) {
1882
+ error(parser, "Unquoted attribute value");
1883
+ }
1884
+ parser.state = S.ATTRIB_VALUE_UNQUOTED;
1885
+ parser.attribValue = c;
1886
+ }
1887
+ continue;
1888
+ case S.ATTRIB_VALUE_QUOTED:
1889
+ if (c !== parser.q) {
1890
+ if (c === "&") {
1891
+ parser.state = S.ATTRIB_VALUE_ENTITY_Q;
1892
+ } else {
1893
+ parser.attribValue += c;
1894
+ }
1895
+ continue;
1896
+ }
1897
+ attrib(parser);
1898
+ parser.q = "";
1899
+ parser.state = S.ATTRIB_VALUE_CLOSED;
1900
+ continue;
1901
+ case S.ATTRIB_VALUE_CLOSED:
1902
+ if (isWhitespace(c)) {
1903
+ parser.state = S.ATTRIB;
1904
+ } else if (c === ">") {
1905
+ openTag(parser);
1906
+ } else if (c === "/") {
1907
+ parser.state = S.OPEN_TAG_SLASH;
1908
+ } else if (isMatch(nameStart, c)) {
1909
+ strictFail(parser, "No whitespace between attributes");
1910
+ parser.attribName = c;
1911
+ parser.attribValue = "";
1912
+ parser.state = S.ATTRIB_NAME;
1913
+ } else {
1914
+ strictFail(parser, "Invalid attribute name");
1915
+ }
1916
+ continue;
1917
+ case S.ATTRIB_VALUE_UNQUOTED:
1918
+ if (!isAttribEnd(c)) {
1919
+ if (c === "&") {
1920
+ parser.state = S.ATTRIB_VALUE_ENTITY_U;
1921
+ } else {
1922
+ parser.attribValue += c;
1923
+ }
1924
+ continue;
1925
+ }
1926
+ attrib(parser);
1927
+ if (c === ">") {
1928
+ openTag(parser);
1929
+ } else {
1930
+ parser.state = S.ATTRIB;
1931
+ }
1932
+ continue;
1933
+ case S.CLOSE_TAG:
1934
+ if (!parser.tagName) {
1935
+ if (isWhitespace(c)) {
1936
+ continue;
1937
+ } else if (notMatch(nameStart, c)) {
1938
+ if (parser.script) {
1939
+ parser.script += "</" + c;
1940
+ parser.state = S.SCRIPT;
1941
+ } else {
1942
+ strictFail(parser, "Invalid tagname in closing tag.");
1943
+ }
1944
+ } else {
1945
+ parser.tagName = c;
1946
+ }
1947
+ } else if (c === ">") {
1948
+ closeTag(parser);
1949
+ } else if (isMatch(nameBody, c)) {
1950
+ parser.tagName += c;
1951
+ } else if (parser.script) {
1952
+ parser.script += "</" + parser.tagName;
1953
+ parser.tagName = "";
1954
+ parser.state = S.SCRIPT;
1955
+ } else {
1956
+ if (!isWhitespace(c)) {
1957
+ strictFail(parser, "Invalid tagname in closing tag");
1958
+ }
1959
+ parser.state = S.CLOSE_TAG_SAW_WHITE;
1960
+ }
1961
+ continue;
1962
+ case S.CLOSE_TAG_SAW_WHITE:
1963
+ if (isWhitespace(c)) {
1964
+ continue;
1965
+ }
1966
+ if (c === ">") {
1967
+ closeTag(parser);
1968
+ } else {
1969
+ strictFail(parser, "Invalid characters in closing tag");
1970
+ }
1971
+ continue;
1972
+ case S.TEXT_ENTITY:
1973
+ case S.ATTRIB_VALUE_ENTITY_Q:
1974
+ case S.ATTRIB_VALUE_ENTITY_U:
1975
+ var returnState;
1976
+ var buffer;
1977
+ switch (parser.state) {
1978
+ case S.TEXT_ENTITY:
1979
+ returnState = S.TEXT;
1980
+ buffer = "textNode";
1981
+ break;
1982
+ case S.ATTRIB_VALUE_ENTITY_Q:
1983
+ returnState = S.ATTRIB_VALUE_QUOTED;
1984
+ buffer = "attribValue";
1985
+ break;
1986
+ case S.ATTRIB_VALUE_ENTITY_U:
1987
+ returnState = S.ATTRIB_VALUE_UNQUOTED;
1988
+ buffer = "attribValue";
1989
+ break;
1990
+ }
1991
+ if (c === ";") {
1992
+ var parsedEntity = parseEntity(parser);
1993
+ if (parser.opt.unparsedEntities && !Object.values(sax2.XML_ENTITIES).includes(parsedEntity)) {
1994
+ parser.entity = "";
1995
+ parser.state = returnState;
1996
+ parser.write(parsedEntity);
1997
+ } else {
1998
+ parser[buffer] += parsedEntity;
1999
+ parser.entity = "";
2000
+ parser.state = returnState;
2001
+ }
2002
+ } else if (isMatch(parser.entity.length ? entityBody : entityStart, c)) {
2003
+ parser.entity += c;
2004
+ } else {
2005
+ strictFail(parser, "Invalid character in entity name");
2006
+ parser[buffer] += "&" + parser.entity + c;
2007
+ parser.entity = "";
2008
+ parser.state = returnState;
2009
+ }
2010
+ continue;
2011
+ default: {
2012
+ throw new Error(parser, "Unknown state: " + parser.state);
1519
2013
  }
1520
- this.addChild(currentNode, childNode, jPath);
1521
- currentNode = childNode;
1522
2014
  }
1523
- textData = "";
1524
- i = closeIndex;
1525
2015
  }
1526
- }
1527
- } else {
1528
- textData += xmlData[i];
1529
- }
1530
- }
1531
- return xmlObj.child;
1532
- };
1533
- function addChild(currentNode, childNode, jPath) {
1534
- const result = this.options.updateTag(childNode.tagname, jPath, childNode[":@"]);
1535
- if (result === false) ;
1536
- else if (typeof result === "string") {
1537
- childNode.tagname = result;
1538
- currentNode.addChild(childNode);
1539
- } else {
1540
- currentNode.addChild(childNode);
1541
- }
1542
- }
1543
- const replaceEntitiesValue$1 = function(val2) {
1544
- if (this.options.processEntities) {
1545
- for (let entityName2 in this.docTypeEntities) {
1546
- const entity = this.docTypeEntities[entityName2];
1547
- val2 = val2.replace(entity.regx, entity.val);
1548
- }
1549
- for (let entityName2 in this.lastEntities) {
1550
- const entity = this.lastEntities[entityName2];
1551
- val2 = val2.replace(entity.regex, entity.val);
1552
- }
1553
- if (this.options.htmlEntities) {
1554
- for (let entityName2 in this.htmlEntities) {
1555
- const entity = this.htmlEntities[entityName2];
1556
- val2 = val2.replace(entity.regex, entity.val);
1557
- }
1558
- }
1559
- val2 = val2.replace(this.ampEntity.regex, this.ampEntity.val);
1560
- }
1561
- return val2;
1562
- };
1563
- function saveTextToParentTag(textData, currentNode, jPath, isLeafNode) {
1564
- if (textData) {
1565
- if (isLeafNode === void 0) isLeafNode = Object.keys(currentNode.child).length === 0;
1566
- textData = this.parseTextData(
1567
- textData,
1568
- currentNode.tagname,
1569
- jPath,
1570
- false,
1571
- currentNode[":@"] ? Object.keys(currentNode[":@"]).length !== 0 : false,
1572
- isLeafNode
1573
- );
1574
- if (textData !== void 0 && textData !== "")
1575
- currentNode.add(this.options.textNodeName, textData);
1576
- textData = "";
1577
- }
1578
- return textData;
1579
- }
1580
- function isItStopNode(stopNodes, jPath, currentTagName) {
1581
- const allNodesExp = "*." + currentTagName;
1582
- for (const stopNodePath in stopNodes) {
1583
- const stopNodeExp = stopNodes[stopNodePath];
1584
- if (allNodesExp === stopNodeExp || jPath === stopNodeExp) return true;
1585
- }
1586
- return false;
1587
- }
1588
- function tagExpWithClosingIndex(xmlData, i, closingChar = ">") {
1589
- let attrBoundary;
1590
- let tagExp = "";
1591
- for (let index = i; index < xmlData.length; index++) {
1592
- let ch = xmlData[index];
1593
- if (attrBoundary) {
1594
- if (ch === attrBoundary) attrBoundary = "";
1595
- } else if (ch === '"' || ch === "'") {
1596
- attrBoundary = ch;
1597
- } else if (ch === closingChar[0]) {
1598
- if (closingChar[1]) {
1599
- if (xmlData[index + 1] === closingChar[1]) {
1600
- return {
1601
- data: tagExp,
1602
- index
1603
- };
2016
+ if (parser.position >= parser.bufferCheckPosition) {
2017
+ checkBufferLength(parser);
1604
2018
  }
1605
- } else {
1606
- return {
1607
- data: tagExp,
1608
- index
1609
- };
2019
+ return parser;
1610
2020
  }
1611
- } else if (ch === " ") {
1612
- ch = " ";
1613
- }
1614
- tagExp += ch;
1615
- }
1616
- }
1617
- function findClosingIndex(xmlData, str, i, errMsg) {
1618
- const closingIndex = xmlData.indexOf(str, i);
1619
- if (closingIndex === -1) {
1620
- throw new Error(errMsg);
1621
- } else {
1622
- return closingIndex + str.length - 1;
1623
- }
1624
- }
1625
- function readTagExp(xmlData, i, removeNSPrefix, closingChar = ">") {
1626
- const result = tagExpWithClosingIndex(xmlData, i + 1, closingChar);
1627
- if (!result) return;
1628
- let tagExp = result.data;
1629
- const closeIndex = result.index;
1630
- const separatorIndex = tagExp.search(/\s/);
1631
- let tagName = tagExp;
1632
- let attrExpPresent = true;
1633
- if (separatorIndex !== -1) {
1634
- tagName = tagExp.substring(0, separatorIndex);
1635
- tagExp = tagExp.substring(separatorIndex + 1).trimStart();
1636
- }
1637
- const rawTagName = tagName;
1638
- if (removeNSPrefix) {
1639
- const colonIndex = tagName.indexOf(":");
1640
- if (colonIndex !== -1) {
1641
- tagName = tagName.substr(colonIndex + 1);
1642
- attrExpPresent = tagName !== result.data.substr(colonIndex + 1);
1643
- }
1644
- }
1645
- return {
1646
- tagName,
1647
- tagExp,
1648
- closeIndex,
1649
- attrExpPresent,
1650
- rawTagName
1651
- };
1652
- }
1653
- function readStopNodeData(xmlData, tagName, i) {
1654
- const startIndex = i;
1655
- let openTagCount = 1;
1656
- for (; i < xmlData.length; i++) {
1657
- if (xmlData[i] === "<") {
1658
- if (xmlData[i + 1] === "/") {
1659
- const closeIndex = findClosingIndex(xmlData, ">", i, `${tagName} is not closed`);
1660
- let closeTagName = xmlData.substring(i + 2, closeIndex).trim();
1661
- if (closeTagName === tagName) {
1662
- openTagCount--;
1663
- if (openTagCount === 0) {
1664
- return {
1665
- tagContent: xmlData.substring(startIndex, i),
1666
- i: closeIndex
1667
- };
1668
- }
1669
- }
1670
- i = closeIndex;
1671
- } else if (xmlData[i + 1] === "?") {
1672
- const closeIndex = findClosingIndex(xmlData, "?>", i + 1, "StopNode is not closed.");
1673
- i = closeIndex;
1674
- } else if (xmlData.substr(i + 1, 3) === "!--") {
1675
- const closeIndex = findClosingIndex(xmlData, "-->", i + 3, "StopNode is not closed.");
1676
- i = closeIndex;
1677
- } else if (xmlData.substr(i + 1, 2) === "![") {
1678
- const closeIndex = findClosingIndex(xmlData, "]]>", i, "StopNode is not closed.") - 2;
1679
- i = closeIndex;
1680
- } else {
1681
- const tagData = readTagExp(xmlData, i, ">");
1682
- if (tagData) {
1683
- const openTagName = tagData && tagData.tagName;
1684
- if (openTagName === tagName && tagData.tagExp[tagData.tagExp.length - 1] !== "/") {
1685
- openTagCount++;
2021
+ /*! http://mths.be/fromcodepoint v0.1.0 by @mathias */
2022
+ if (!String.fromCodePoint) {
2023
+ (function() {
2024
+ var stringFromCharCode = String.fromCharCode;
2025
+ var floor = Math.floor;
2026
+ var fromCodePoint = function() {
2027
+ var MAX_SIZE = 16384;
2028
+ var codeUnits = [];
2029
+ var highSurrogate;
2030
+ var lowSurrogate;
2031
+ var index = -1;
2032
+ var length = arguments.length;
2033
+ if (!length) {
2034
+ return "";
2035
+ }
2036
+ var result = "";
2037
+ while (++index < length) {
2038
+ var codePoint = Number(arguments[index]);
2039
+ if (!isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`
2040
+ codePoint < 0 || // not a valid Unicode code point
2041
+ codePoint > 1114111 || // not a valid Unicode code point
2042
+ floor(codePoint) !== codePoint) {
2043
+ throw RangeError("Invalid code point: " + codePoint);
2044
+ }
2045
+ if (codePoint <= 65535) {
2046
+ codeUnits.push(codePoint);
2047
+ } else {
2048
+ codePoint -= 65536;
2049
+ highSurrogate = (codePoint >> 10) + 55296;
2050
+ lowSurrogate = codePoint % 1024 + 56320;
2051
+ codeUnits.push(highSurrogate, lowSurrogate);
2052
+ }
2053
+ if (index + 1 === length || codeUnits.length > MAX_SIZE) {
2054
+ result += stringFromCharCode.apply(null, codeUnits);
2055
+ codeUnits.length = 0;
2056
+ }
2057
+ }
2058
+ return result;
2059
+ };
2060
+ if (Object.defineProperty) {
2061
+ Object.defineProperty(String, "fromCodePoint", {
2062
+ value: fromCodePoint,
2063
+ configurable: true,
2064
+ writable: true
2065
+ });
2066
+ } else {
2067
+ String.fromCodePoint = fromCodePoint;
1686
2068
  }
1687
- i = tagData.closeIndex;
1688
- }
1689
- }
1690
- }
1691
- }
1692
- }
1693
- function parseValue(val2, shouldParse, options) {
1694
- if (shouldParse && typeof val2 === "string") {
1695
- const newval = val2.trim();
1696
- if (newval === "true") return true;
1697
- else if (newval === "false") return false;
1698
- else return toNumber(val2, options);
1699
- } else {
1700
- if (util.isExist(val2)) {
1701
- return val2;
1702
- } else {
1703
- return "";
1704
- }
1705
- }
1706
- }
1707
- var OrderedObjParser_1 = OrderedObjParser$1;
1708
- var node2json = {};
1709
- function prettify$1(node, options) {
1710
- return compress(node, options);
1711
- }
1712
- function compress(arr, options, jPath) {
1713
- let text;
1714
- const compressedObj = {};
1715
- for (let i = 0; i < arr.length; i++) {
1716
- const tagObj = arr[i];
1717
- const property = propName$1(tagObj);
1718
- let newJpath = "";
1719
- if (jPath === void 0) newJpath = property;
1720
- else newJpath = jPath + "." + property;
1721
- if (property === options.textNodeName) {
1722
- if (text === void 0) text = tagObj[property];
1723
- else text += "" + tagObj[property];
1724
- } else if (property === void 0) {
1725
- continue;
1726
- } else if (tagObj[property]) {
1727
- let val2 = compress(tagObj[property], options, newJpath);
1728
- const isLeaf = isLeafTag(val2, options);
1729
- if (tagObj[":@"]) {
1730
- assignAttributes(val2, tagObj[":@"], newJpath, options);
1731
- } else if (Object.keys(val2).length === 1 && val2[options.textNodeName] !== void 0 && !options.alwaysCreateTextNode) {
1732
- val2 = val2[options.textNodeName];
1733
- } else if (Object.keys(val2).length === 0) {
1734
- if (options.alwaysCreateTextNode) val2[options.textNodeName] = "";
1735
- else val2 = "";
2069
+ })();
1736
2070
  }
1737
- if (compressedObj[property] !== void 0 && compressedObj.hasOwnProperty(property)) {
1738
- if (!Array.isArray(compressedObj[property])) {
1739
- compressedObj[property] = [compressedObj[property]];
1740
- }
1741
- compressedObj[property].push(val2);
1742
- } else {
1743
- if (options.isArray(property, newJpath, isLeaf)) {
1744
- compressedObj[property] = [val2];
1745
- } else {
1746
- compressedObj[property] = val2;
1747
- }
1748
- }
1749
- }
1750
- }
1751
- if (typeof text === "string") {
1752
- if (text.length > 0) compressedObj[options.textNodeName] = text;
1753
- } else if (text !== void 0) compressedObj[options.textNodeName] = text;
1754
- return compressedObj;
1755
- }
1756
- function propName$1(obj) {
1757
- const keys = Object.keys(obj);
1758
- for (let i = 0; i < keys.length; i++) {
1759
- const key = keys[i];
1760
- if (key !== ":@") return key;
1761
- }
1762
- }
1763
- function assignAttributes(obj, attrMap, jpath, options) {
1764
- if (attrMap) {
1765
- const keys = Object.keys(attrMap);
1766
- const len = keys.length;
1767
- for (let i = 0; i < len; i++) {
1768
- const atrrName = keys[i];
1769
- if (options.isArray(atrrName, jpath + "." + atrrName, true, true)) {
1770
- obj[atrrName] = [attrMap[atrrName]];
1771
- } else {
1772
- obj[atrrName] = attrMap[atrrName];
1773
- }
1774
- }
1775
- }
1776
- }
1777
- function isLeafTag(obj, options) {
1778
- const { textNodeName } = options;
1779
- const propCount = Object.keys(obj).length;
1780
- if (propCount === 0) {
1781
- return true;
1782
- }
1783
- if (propCount === 1 && (obj[textNodeName] || typeof obj[textNodeName] === "boolean" || obj[textNodeName] === 0)) {
1784
- return true;
1785
- }
1786
- return false;
1787
- }
1788
- node2json.prettify = prettify$1;
1789
- const { buildOptions } = OptionsBuilder;
1790
- const OrderedObjParser2 = OrderedObjParser_1;
1791
- const { prettify } = node2json;
1792
- const validator$1 = validator$2;
1793
- let XMLParser$1 = class XMLParser {
1794
- constructor(options) {
1795
- this.externalEntities = {};
1796
- this.options = buildOptions(options);
1797
- }
1798
- /**
1799
- * Parse XML dats to JS object
1800
- * @param {string|Buffer} xmlData
1801
- * @param {boolean|Object} validationOption
1802
- */
1803
- parse(xmlData, validationOption) {
1804
- if (typeof xmlData === "string") ;
1805
- else if (xmlData.toString) {
1806
- xmlData = xmlData.toString();
1807
- } else {
1808
- throw new Error("XML data is accepted in String or Bytes[] form.");
1809
- }
1810
- if (validationOption) {
1811
- if (validationOption === true) validationOption = {};
1812
- const result = validator$1.validate(xmlData, validationOption);
1813
- if (result !== true) {
1814
- throw Error(`${result.err.msg}:${result.err.line}:${result.err.col}`);
1815
- }
1816
- }
1817
- const orderedObjParser = new OrderedObjParser2(this.options);
1818
- orderedObjParser.addExternalEntities(this.externalEntities);
1819
- const orderedResult = orderedObjParser.parseXml(xmlData);
1820
- if (this.options.preserveOrder || orderedResult === void 0) return orderedResult;
1821
- else return prettify(orderedResult, this.options);
1822
- }
1823
- /**
1824
- * Add Entity which is not by default supported by this library
1825
- * @param {string} key
1826
- * @param {string} value
1827
- */
1828
- addEntity(key, value) {
1829
- if (value.indexOf("&") !== -1) {
1830
- throw new Error("Entity value can't have '&'");
1831
- } else if (key.indexOf("&") !== -1 || key.indexOf(";") !== -1) {
1832
- throw new Error("An entity must be set without '&' and ';'. Eg. use '#xD' for '&#xD;'");
1833
- } else if (value === "&") {
1834
- throw new Error("An entity with value '&' is not permitted");
1835
- } else {
1836
- this.externalEntities[key] = value;
1837
- }
2071
+ })(exports2);
2072
+ })(sax$1);
2073
+ return sax$1;
2074
+ }
2075
+ var saxExports = requireSax();
2076
+ const sax = /* @__PURE__ */ getDefaultExportFromCjs(saxExports);
2077
+ const namespaceMapping = {
2078
+ "http://www.w3.org/2000/svg": {
2079
+ ext: "svg",
2080
+ mime: "image/svg+xml"
2081
+ },
2082
+ "http://www.w3.org/1999/xhtml": {
2083
+ ext: "xhtml",
2084
+ mime: "application/xhtml+xml"
2085
+ },
2086
+ "http://www.opengis.net/kml/2.2": {
2087
+ ext: "kml",
2088
+ mime: "application/vnd.google-earth.kml+xml"
2089
+ },
2090
+ "http://www.opengis.net/gml": {
2091
+ ext: "gml",
2092
+ mime: "application/gml+xml"
1838
2093
  }
1839
2094
  };
1840
- var XMLParser_1 = XMLParser$1;
1841
- const EOL = "\n";
1842
- function toXml(jArray, options) {
1843
- let indentation = "";
1844
- if (options.format && options.indentBy.length > 0) {
1845
- indentation = EOL;
1846
- }
1847
- return arrToStr(jArray, options, "", indentation);
1848
- }
1849
- function arrToStr(arr, options, jPath, indentation) {
1850
- let xmlStr = "";
1851
- let isPreviousElementTag = false;
1852
- for (let i = 0; i < arr.length; i++) {
1853
- const tagObj = arr[i];
1854
- const tagName = propName(tagObj);
1855
- if (tagName === void 0) continue;
1856
- let newJPath = "";
1857
- if (jPath.length === 0) newJPath = tagName;
1858
- else newJPath = `${jPath}.${tagName}`;
1859
- if (tagName === options.textNodeName) {
1860
- let tagText = tagObj[tagName];
1861
- if (!isStopNode(newJPath, options)) {
1862
- tagText = options.tagValueProcessor(tagName, tagText);
1863
- tagText = replaceEntitiesValue(tagText, options);
1864
- }
1865
- if (isPreviousElementTag) {
1866
- xmlStr += indentation;
1867
- }
1868
- xmlStr += tagText;
1869
- isPreviousElementTag = false;
1870
- continue;
1871
- } else if (tagName === options.cdataPropName) {
1872
- if (isPreviousElementTag) {
1873
- xmlStr += indentation;
1874
- }
1875
- xmlStr += `<![CDATA[${tagObj[tagName][0][options.textNodeName]}]]>`;
1876
- isPreviousElementTag = false;
1877
- continue;
1878
- } else if (tagName === options.commentPropName) {
1879
- xmlStr += indentation + `<!--${tagObj[tagName][0][options.textNodeName]}-->`;
1880
- isPreviousElementTag = true;
1881
- continue;
1882
- } else if (tagName[0] === "?") {
1883
- const attStr2 = attr_to_str(tagObj[":@"], options);
1884
- const tempInd = tagName === "?xml" ? "" : indentation;
1885
- let piTextNodeName = tagObj[tagName][0][options.textNodeName];
1886
- piTextNodeName = piTextNodeName.length !== 0 ? " " + piTextNodeName : "";
1887
- xmlStr += tempInd + `<${tagName}${piTextNodeName}${attStr2}?>`;
1888
- isPreviousElementTag = true;
1889
- continue;
1890
- }
1891
- let newIdentation = indentation;
1892
- if (newIdentation !== "") {
1893
- newIdentation += options.indentBy;
1894
- }
1895
- const attStr = attr_to_str(tagObj[":@"], options);
1896
- const tagStart = indentation + `<${tagName}${attStr}`;
1897
- const tagValue = arrToStr(tagObj[tagName], options, newJPath, newIdentation);
1898
- if (options.unpairedTags.indexOf(tagName) !== -1) {
1899
- if (options.suppressUnpairedNode) xmlStr += tagStart + ">";
1900
- else xmlStr += tagStart + "/>";
1901
- } else if ((!tagValue || tagValue.length === 0) && options.suppressEmptyNode) {
1902
- xmlStr += tagStart + "/>";
1903
- } else if (tagValue && tagValue.endsWith(">")) {
1904
- xmlStr += tagStart + `>${tagValue}${indentation}</${tagName}>`;
1905
- } else {
1906
- xmlStr += tagStart + ">";
1907
- if (tagValue && indentation !== "" && (tagValue.includes("/>") || tagValue.includes("</"))) {
1908
- xmlStr += indentation + options.indentBy + tagValue + indentation;
1909
- } else {
1910
- xmlStr += tagValue;
1911
- }
1912
- xmlStr += `</${tagName}>`;
1913
- }
1914
- isPreviousElementTag = true;
1915
- }
1916
- return xmlStr;
1917
- }
1918
- function propName(obj) {
1919
- const keys = Object.keys(obj);
1920
- for (let i = 0; i < keys.length; i++) {
1921
- const key = keys[i];
1922
- if (!obj.hasOwnProperty(key)) continue;
1923
- if (key !== ":@") return key;
1924
- }
1925
- }
1926
- function attr_to_str(attrMap, options) {
1927
- let attrStr = "";
1928
- if (attrMap && !options.ignoreAttributes) {
1929
- for (let attr in attrMap) {
1930
- if (!attrMap.hasOwnProperty(attr)) continue;
1931
- let attrVal = options.attributeValueProcessor(attr, attrMap[attr]);
1932
- attrVal = replaceEntitiesValue(attrVal, options);
1933
- if (attrVal === true && options.suppressBooleanAttributes) {
1934
- attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}`;
1935
- } else {
1936
- attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}="${attrVal}"`;
1937
- }
1938
- }
1939
- }
1940
- return attrStr;
1941
- }
1942
- function isStopNode(jPath, options) {
1943
- jPath = jPath.substr(0, jPath.length - options.textNodeName.length - 1);
1944
- let tagName = jPath.substr(jPath.lastIndexOf(".") + 1);
1945
- for (let index in options.stopNodes) {
1946
- if (options.stopNodes[index] === jPath || options.stopNodes[index] === "*." + tagName) return true;
1947
- }
1948
- return false;
1949
- }
1950
- function replaceEntitiesValue(textValue, options) {
1951
- if (textValue && textValue.length > 0 && options.processEntities) {
1952
- for (let i = 0; i < options.entities.length; i++) {
1953
- const entity = options.entities[i];
1954
- textValue = textValue.replace(entity.regex, entity.val);
1955
- }
1956
- }
1957
- return textValue;
1958
- }
1959
- var orderedJs2Xml = toXml;
1960
- const buildFromOrderedJs = orderedJs2Xml;
1961
- const getIgnoreAttributesFn = ignoreAttributes;
1962
- const defaultOptions = {
1963
- attributeNamePrefix: "@_",
1964
- attributesGroupName: false,
1965
- textNodeName: "#text",
1966
- ignoreAttributes: true,
1967
- cdataPropName: false,
1968
- format: false,
1969
- indentBy: " ",
1970
- suppressEmptyNode: false,
1971
- suppressUnpairedNode: true,
1972
- suppressBooleanAttributes: true,
1973
- tagValueProcessor: function(key, a) {
1974
- return a;
2095
+ const rootNameMapping = {
2096
+ rss: {
2097
+ ext: "rss",
2098
+ mime: "application/rss+xml"
1975
2099
  },
1976
- attributeValueProcessor: function(attrName, a) {
1977
- return a;
2100
+ "score-partwise": {
2101
+ ext: "musicxml",
2102
+ mime: "application/vnd.recordare.musicxml+xml"
1978
2103
  },
1979
- preserveOrder: false,
1980
- commentPropName: false,
1981
- unpairedTags: [],
1982
- entities: [
1983
- { regex: new RegExp("&", "g"), val: "&amp;" },
1984
- //it must be on top
1985
- { regex: new RegExp(">", "g"), val: "&gt;" },
1986
- { regex: new RegExp("<", "g"), val: "&lt;" },
1987
- { regex: new RegExp("'", "g"), val: "&apos;" },
1988
- { regex: new RegExp('"', "g"), val: "&quot;" }
1989
- ],
1990
- processEntities: true,
1991
- stopNodes: [],
1992
- // transformTagName: false,
1993
- // transformAttributeName: false,
1994
- oneListGroup: false
1995
- };
1996
- function Builder(options) {
1997
- this.options = Object.assign({}, defaultOptions, options);
1998
- if (this.options.ignoreAttributes === true || this.options.attributesGroupName) {
1999
- this.isAttribute = function() {
2000
- return false;
2001
- };
2002
- } else {
2003
- this.ignoreAttributesFn = getIgnoreAttributesFn(this.options.ignoreAttributes);
2004
- this.attrPrefixLen = this.options.attributeNamePrefix.length;
2005
- this.isAttribute = isAttribute;
2006
- }
2007
- this.processTextOrObjNode = processTextOrObjNode;
2008
- if (this.options.format) {
2009
- this.indentate = indentate;
2010
- this.tagEndChar = ">\n";
2011
- this.newLine = "\n";
2012
- } else {
2013
- this.indentate = function() {
2014
- return "";
2015
- };
2016
- this.tagEndChar = ">";
2017
- this.newLine = "";
2018
- }
2019
- }
2020
- Builder.prototype.build = function(jObj) {
2021
- if (this.options.preserveOrder) {
2022
- return buildFromOrderedJs(jObj, this.options);
2023
- } else {
2024
- if (Array.isArray(jObj) && this.options.arrayNodeName && this.options.arrayNodeName.length > 1) {
2025
- jObj = {
2026
- [this.options.arrayNodeName]: jObj
2027
- };
2028
- }
2029
- return this.j2x(jObj, 0, []).val;
2104
+ svg: {
2105
+ ext: "svg",
2106
+ mime: "image/svg+xml"
2030
2107
  }
2031
2108
  };
2032
- Builder.prototype.j2x = function(jObj, level, ajPath) {
2033
- let attrStr = "";
2034
- let val2 = "";
2035
- const jPath = ajPath.join(".");
2036
- for (let key in jObj) {
2037
- if (!Object.prototype.hasOwnProperty.call(jObj, key)) continue;
2038
- if (typeof jObj[key] === "undefined") {
2039
- if (this.isAttribute(key)) {
2040
- val2 += "";
2041
- }
2042
- } else if (jObj[key] === null) {
2043
- if (this.isAttribute(key)) {
2044
- val2 += "";
2045
- } else if (key[0] === "?") {
2046
- val2 += this.indentate(level) + "<" + key + "?" + this.tagEndChar;
2047
- } else {
2048
- val2 += this.indentate(level) + "<" + key + "/" + this.tagEndChar;
2049
- }
2050
- } else if (jObj[key] instanceof Date) {
2051
- val2 += this.buildTextValNode(jObj[key], key, "", level);
2052
- } else if (typeof jObj[key] !== "object") {
2053
- const attr = this.isAttribute(key);
2054
- if (attr && !this.ignoreAttributesFn(attr, jPath)) {
2055
- attrStr += this.buildAttrPairStr(attr, "" + jObj[key]);
2056
- } else if (!attr) {
2057
- if (key === this.options.textNodeName) {
2058
- let newval = this.options.tagValueProcessor(key, "" + jObj[key]);
2059
- val2 += this.replaceEntitiesValue(newval);
2060
- } else {
2061
- val2 += this.buildTextValNode(jObj[key], key, "", level);
2062
- }
2109
+ class XmlTextDetector {
2110
+ constructor(options) {
2111
+ this.options = options ?? {};
2112
+ this.firstTag = true;
2113
+ this.onEnd = false;
2114
+ this.parser = sax.parser(true, { xmlns: true });
2115
+ this.nesting = 0;
2116
+ this.parser.onerror = (e) => {
2117
+ if (e.message.startsWith("Invalid character entity")) {
2118
+ return;
2063
2119
  }
2064
- } else if (Array.isArray(jObj[key])) {
2065
- const arrLen = jObj[key].length;
2066
- let listTagVal = "";
2067
- let listTagAttr = "";
2068
- for (let j = 0; j < arrLen; j++) {
2069
- const item = jObj[key][j];
2070
- if (typeof item === "undefined") ;
2071
- else if (item === null) {
2072
- if (key[0] === "?") val2 += this.indentate(level) + "<" + key + "?" + this.tagEndChar;
2073
- else val2 += this.indentate(level) + "<" + key + "/" + this.tagEndChar;
2074
- } else if (typeof item === "object") {
2075
- if (this.options.oneListGroup) {
2076
- const result = this.j2x(item, level + 1, ajPath.concat(key));
2077
- listTagVal += result.val;
2078
- if (this.options.attributesGroupName && item.hasOwnProperty(this.options.attributesGroupName)) {
2079
- listTagAttr += result.attrStr;
2080
- }
2081
- } else {
2082
- listTagVal += this.processTextOrObjNode(item, key, level, ajPath);
2083
- }
2084
- } else {
2085
- if (this.options.oneListGroup) {
2086
- let textValue = this.options.tagValueProcessor(key, item);
2087
- textValue = this.replaceEntitiesValue(textValue);
2088
- listTagVal += textValue;
2089
- } else {
2090
- listTagVal += this.buildTextValNode(item, key, "", level);
2091
- }
2092
- }
2120
+ this.fileType = void 0;
2121
+ this.onEnd = true;
2122
+ };
2123
+ this.parser.onopentag = (node) => {
2124
+ ++this.nesting;
2125
+ if (!this.firstTag || this.onEnd) {
2126
+ return;
2093
2127
  }
2094
- if (this.options.oneListGroup) {
2095
- listTagVal = this.buildObjectNode(listTagVal, key, listTagAttr, level);
2128
+ this.firstTag = false;
2129
+ if (node.uri) {
2130
+ this.fileType = namespaceMapping[node.uri];
2131
+ } else if (node.name) {
2132
+ this.fileType = rootNameMapping[node.name.toLowerCase()];
2096
2133
  }
2097
- val2 += listTagVal;
2098
- } else {
2099
- if (this.options.attributesGroupName && key === this.options.attributesGroupName) {
2100
- const Ks = Object.keys(jObj[key]);
2101
- const L = Ks.length;
2102
- for (let j = 0; j < L; j++) {
2103
- attrStr += this.buildAttrPairStr(Ks[j], "" + jObj[key][Ks[j]]);
2104
- }
2105
- } else {
2106
- val2 += this.processTextOrObjNode(jObj[key], key, level, ajPath);
2134
+ if (this.fileType && !this.options.fullScan) {
2135
+ this.onEnd = true;
2107
2136
  }
2108
- }
2109
- }
2110
- return { attrStr, val: val2 };
2111
- };
2112
- Builder.prototype.buildAttrPairStr = function(attrName, val2) {
2113
- val2 = this.options.attributeValueProcessor(attrName, "" + val2);
2114
- val2 = this.replaceEntitiesValue(val2);
2115
- if (this.options.suppressBooleanAttributes && val2 === "true") {
2116
- return " " + attrName;
2117
- } else return " " + attrName + '="' + val2 + '"';
2118
- };
2119
- function processTextOrObjNode(object, key, level, ajPath) {
2120
- const result = this.j2x(object, level + 1, ajPath.concat(key));
2121
- if (object[this.options.textNodeName] !== void 0 && Object.keys(object).length === 1) {
2122
- return this.buildTextValNode(object[this.options.textNodeName], key, result.attrStr, level);
2123
- } else {
2124
- return this.buildObjectNode(result.val, key, result.attrStr, level);
2125
- }
2126
- }
2127
- Builder.prototype.buildObjectNode = function(val2, key, attrStr, level) {
2128
- if (val2 === "") {
2129
- if (key[0] === "?") return this.indentate(level) + "<" + key + attrStr + "?" + this.tagEndChar;
2130
- else {
2131
- return this.indentate(level) + "<" + key + attrStr + this.closeTag(key) + this.tagEndChar;
2132
- }
2133
- } else {
2134
- let tagEndExp = "</" + key + this.tagEndChar;
2135
- let piClosingChar = "";
2136
- if (key[0] === "?") {
2137
- piClosingChar = "?";
2138
- tagEndExp = "";
2139
- }
2140
- if ((attrStr || attrStr === "") && val2.indexOf("<") === -1) {
2141
- return this.indentate(level) + "<" + key + attrStr + piClosingChar + ">" + val2 + tagEndExp;
2142
- } else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) {
2143
- return this.indentate(level) + `<!--${val2}-->` + this.newLine;
2144
- } else {
2145
- return this.indentate(level) + "<" + key + attrStr + piClosingChar + this.tagEndChar + val2 + this.indentate(level) + tagEndExp;
2146
- }
2147
- }
2148
- };
2149
- Builder.prototype.closeTag = function(key) {
2150
- let closeTag = "";
2151
- if (this.options.unpairedTags.indexOf(key) !== -1) {
2152
- if (!this.options.suppressUnpairedNode) closeTag = "/";
2153
- } else if (this.options.suppressEmptyNode) {
2154
- closeTag = "/";
2155
- } else {
2156
- closeTag = `></${key}`;
2137
+ };
2138
+ this.parser.onclosetag = () => {
2139
+ --this.nesting;
2140
+ };
2157
2141
  }
2158
- return closeTag;
2159
- };
2160
- Builder.prototype.buildTextValNode = function(val2, key, attrStr, level) {
2161
- if (this.options.cdataPropName !== false && key === this.options.cdataPropName) {
2162
- return this.indentate(level) + `<![CDATA[${val2}]]>` + this.newLine;
2163
- } else if (this.options.commentPropName !== false && key === this.options.commentPropName) {
2164
- return this.indentate(level) + `<!--${val2}-->` + this.newLine;
2165
- } else if (key[0] === "?") {
2166
- return this.indentate(level) + "<" + key + attrStr + "?" + this.tagEndChar;
2167
- } else {
2168
- let textValue = this.options.tagValueProcessor(key, val2);
2169
- textValue = this.replaceEntitiesValue(textValue);
2170
- if (textValue === "") {
2171
- return this.indentate(level) + "<" + key + attrStr + this.closeTag(key) + this.tagEndChar;
2172
- } else {
2173
- return this.indentate(level) + "<" + key + attrStr + ">" + textValue + "</" + key + this.tagEndChar;
2174
- }
2142
+ write(text) {
2143
+ this.parser.write(text);
2175
2144
  }
2176
- };
2177
- Builder.prototype.replaceEntitiesValue = function(textValue) {
2178
- if (textValue && textValue.length > 0 && this.options.processEntities) {
2179
- for (let i = 0; i < this.options.entities.length; i++) {
2180
- const entity = this.options.entities[i];
2181
- textValue = textValue.replace(entity.regex, entity.val);
2182
- }
2145
+ close() {
2146
+ this.parser.close();
2147
+ this.onEnd = true;
2183
2148
  }
2184
- return textValue;
2185
- };
2186
- function indentate(level) {
2187
- return this.options.indentBy.repeat(level);
2188
- }
2189
- function isAttribute(name) {
2190
- if (name.startsWith(this.options.attributeNamePrefix) && name !== this.options.textNodeName) {
2191
- return name.substr(this.attrPrefixLen);
2192
- } else {
2193
- return false;
2149
+ isValid() {
2150
+ return this.nesting === 0;
2194
2151
  }
2195
2152
  }
2196
- var json2xml = Builder;
2197
- const validator = validator$2;
2198
- const XMLParser2 = XMLParser_1;
2199
- const XMLBuilder = json2xml;
2200
- var fxp = {
2201
- XMLParser: XMLParser2,
2202
- XMLValidator: validator,
2203
- XMLBuilder
2204
- };
2205
2153
  function isSvg(string) {
2206
2154
  if (typeof string !== "string") {
2207
2155
  throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);
@@ -2210,23 +2158,9 @@ function isSvg(string) {
2210
2158
  if (string.length === 0) {
2211
2159
  return false;
2212
2160
  }
2213
- if (fxp.XMLValidator.validate(string) !== true) {
2214
- return false;
2215
- }
2216
- let jsonObject;
2217
- const parser = new fxp.XMLParser();
2218
- try {
2219
- jsonObject = parser.parse(string);
2220
- } catch {
2221
- return false;
2222
- }
2223
- if (!jsonObject) {
2224
- return false;
2225
- }
2226
- if (!Object.keys(jsonObject).some((x) => x.toLowerCase() === "svg")) {
2227
- return false;
2228
- }
2229
- return true;
2161
+ const xmlTextDetector = new XmlTextDetector();
2162
+ xmlTextDetector.write(string);
2163
+ return xmlTextDetector.isValid() && xmlTextDetector.fileType?.ext === "svg";
2230
2164
  }
2231
2165
  class View {
2232
2166
  _view;
@@ -2252,6 +2186,9 @@ class View {
2252
2186
  get getContents() {
2253
2187
  return this._view.getContents;
2254
2188
  }
2189
+ get hidden() {
2190
+ return this._view.hidden;
2191
+ }
2255
2192
  get icon() {
2256
2193
  return this._view.icon;
2257
2194
  }
@@ -2308,6 +2245,9 @@ const isValidView = function(view) {
2308
2245
  if (!view.getContents || typeof view.getContents !== "function") {
2309
2246
  throw new Error("View getContents is required and must be a function");
2310
2247
  }
2248
+ if ("hidden" in view && typeof view.hidden !== "boolean") {
2249
+ throw new Error("View hidden must be a boolean");
2250
+ }
2311
2251
  if (!view.icon || typeof view.icon !== "string" || !isSvg(view.icon)) {
2312
2252
  throw new Error("View icon is required and must be a valid svg string");
2313
2253
  }
@@ -2341,412 +2281,479 @@ const isValidView = function(view) {
2341
2281
  }
2342
2282
  return true;
2343
2283
  };
2344
- const debug$1 = typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error("SEMVER", ...args) : () => {
2345
- };
2346
- var debug_1 = debug$1;
2347
- const SEMVER_SPEC_VERSION = "2.0.0";
2348
- const MAX_LENGTH$1 = 256;
2349
- const MAX_SAFE_INTEGER$1 = Number.MAX_SAFE_INTEGER || /* istanbul ignore next */
2350
- 9007199254740991;
2351
- const MAX_SAFE_COMPONENT_LENGTH = 16;
2352
- const MAX_SAFE_BUILD_LENGTH = MAX_LENGTH$1 - 6;
2353
- const RELEASE_TYPES = [
2354
- "major",
2355
- "premajor",
2356
- "minor",
2357
- "preminor",
2358
- "patch",
2359
- "prepatch",
2360
- "prerelease"
2361
- ];
2362
- var constants = {
2363
- MAX_LENGTH: MAX_LENGTH$1,
2364
- MAX_SAFE_COMPONENT_LENGTH,
2365
- MAX_SAFE_BUILD_LENGTH,
2366
- MAX_SAFE_INTEGER: MAX_SAFE_INTEGER$1,
2367
- RELEASE_TYPES,
2368
- SEMVER_SPEC_VERSION,
2369
- FLAG_INCLUDE_PRERELEASE: 1,
2370
- FLAG_LOOSE: 2
2371
- };
2372
- var re$1 = { exports: {} };
2373
- (function(module2, exports2) {
2374
- const {
2375
- MAX_SAFE_COMPONENT_LENGTH: MAX_SAFE_COMPONENT_LENGTH2,
2376
- MAX_SAFE_BUILD_LENGTH: MAX_SAFE_BUILD_LENGTH2,
2377
- MAX_LENGTH: MAX_LENGTH2
2378
- } = constants;
2379
- const debug2 = debug_1;
2380
- exports2 = module2.exports = {};
2381
- const re2 = exports2.re = [];
2382
- const safeRe = exports2.safeRe = [];
2383
- const src = exports2.src = [];
2384
- const t2 = exports2.t = {};
2385
- let R = 0;
2386
- const LETTERDASHNUMBER = "[a-zA-Z0-9-]";
2387
- const safeRegexReplacements = [
2388
- ["\\s", 1],
2389
- ["\\d", MAX_LENGTH2],
2390
- [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH2]
2284
+ var debug_1;
2285
+ var hasRequiredDebug;
2286
+ function requireDebug() {
2287
+ if (hasRequiredDebug) return debug_1;
2288
+ hasRequiredDebug = 1;
2289
+ const debug = typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error("SEMVER", ...args) : () => {
2290
+ };
2291
+ debug_1 = debug;
2292
+ return debug_1;
2293
+ }
2294
+ var constants;
2295
+ var hasRequiredConstants;
2296
+ function requireConstants() {
2297
+ if (hasRequiredConstants) return constants;
2298
+ hasRequiredConstants = 1;
2299
+ const SEMVER_SPEC_VERSION = "2.0.0";
2300
+ const MAX_LENGTH = 256;
2301
+ const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || /* istanbul ignore next */
2302
+ 9007199254740991;
2303
+ const MAX_SAFE_COMPONENT_LENGTH = 16;
2304
+ const MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6;
2305
+ const RELEASE_TYPES = [
2306
+ "major",
2307
+ "premajor",
2308
+ "minor",
2309
+ "preminor",
2310
+ "patch",
2311
+ "prepatch",
2312
+ "prerelease"
2391
2313
  ];
2392
- const makeSafeRegex = (value) => {
2393
- for (const [token, max] of safeRegexReplacements) {
2394
- value = value.split(`${token}*`).join(`${token}{0,${max}}`).split(`${token}+`).join(`${token}{1,${max}}`);
2395
- }
2396
- return value;
2314
+ constants = {
2315
+ MAX_LENGTH,
2316
+ MAX_SAFE_COMPONENT_LENGTH,
2317
+ MAX_SAFE_BUILD_LENGTH,
2318
+ MAX_SAFE_INTEGER,
2319
+ RELEASE_TYPES,
2320
+ SEMVER_SPEC_VERSION,
2321
+ FLAG_INCLUDE_PRERELEASE: 1,
2322
+ FLAG_LOOSE: 2
2323
+ };
2324
+ return constants;
2325
+ }
2326
+ var re = { exports: {} };
2327
+ var hasRequiredRe;
2328
+ function requireRe() {
2329
+ if (hasRequiredRe) return re.exports;
2330
+ hasRequiredRe = 1;
2331
+ (function(module2, exports2) {
2332
+ const {
2333
+ MAX_SAFE_COMPONENT_LENGTH,
2334
+ MAX_SAFE_BUILD_LENGTH,
2335
+ MAX_LENGTH
2336
+ } = requireConstants();
2337
+ const debug = requireDebug();
2338
+ exports2 = module2.exports = {};
2339
+ const re2 = exports2.re = [];
2340
+ const safeRe = exports2.safeRe = [];
2341
+ const src = exports2.src = [];
2342
+ const t = exports2.t = {};
2343
+ let R = 0;
2344
+ const LETTERDASHNUMBER = "[a-zA-Z0-9-]";
2345
+ const safeRegexReplacements = [
2346
+ ["\\s", 1],
2347
+ ["\\d", MAX_LENGTH],
2348
+ [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH]
2349
+ ];
2350
+ const makeSafeRegex = (value) => {
2351
+ for (const [token, max] of safeRegexReplacements) {
2352
+ value = value.split(`${token}*`).join(`${token}{0,${max}}`).split(`${token}+`).join(`${token}{1,${max}}`);
2353
+ }
2354
+ return value;
2355
+ };
2356
+ const createToken = (name, value, isGlobal) => {
2357
+ const safe = makeSafeRegex(value);
2358
+ const index = R++;
2359
+ debug(name, index, value);
2360
+ t[name] = index;
2361
+ src[index] = value;
2362
+ re2[index] = new RegExp(value, isGlobal ? "g" : void 0);
2363
+ safeRe[index] = new RegExp(safe, isGlobal ? "g" : void 0);
2364
+ };
2365
+ createToken("NUMERICIDENTIFIER", "0|[1-9]\\d*");
2366
+ createToken("NUMERICIDENTIFIERLOOSE", "\\d+");
2367
+ createToken("NONNUMERICIDENTIFIER", `\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`);
2368
+ createToken("MAINVERSION", `(${src[t.NUMERICIDENTIFIER]})\\.(${src[t.NUMERICIDENTIFIER]})\\.(${src[t.NUMERICIDENTIFIER]})`);
2369
+ createToken("MAINVERSIONLOOSE", `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.(${src[t.NUMERICIDENTIFIERLOOSE]})\\.(${src[t.NUMERICIDENTIFIERLOOSE]})`);
2370
+ createToken("PRERELEASEIDENTIFIER", `(?:${src[t.NUMERICIDENTIFIER]}|${src[t.NONNUMERICIDENTIFIER]})`);
2371
+ createToken("PRERELEASEIDENTIFIERLOOSE", `(?:${src[t.NUMERICIDENTIFIERLOOSE]}|${src[t.NONNUMERICIDENTIFIER]})`);
2372
+ createToken("PRERELEASE", `(?:-(${src[t.PRERELEASEIDENTIFIER]}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`);
2373
+ createToken("PRERELEASELOOSE", `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`);
2374
+ createToken("BUILDIDENTIFIER", `${LETTERDASHNUMBER}+`);
2375
+ createToken("BUILD", `(?:\\+(${src[t.BUILDIDENTIFIER]}(?:\\.${src[t.BUILDIDENTIFIER]})*))`);
2376
+ createToken("FULLPLAIN", `v?${src[t.MAINVERSION]}${src[t.PRERELEASE]}?${src[t.BUILD]}?`);
2377
+ createToken("FULL", `^${src[t.FULLPLAIN]}$`);
2378
+ createToken("LOOSEPLAIN", `[v=\\s]*${src[t.MAINVERSIONLOOSE]}${src[t.PRERELEASELOOSE]}?${src[t.BUILD]}?`);
2379
+ createToken("LOOSE", `^${src[t.LOOSEPLAIN]}$`);
2380
+ createToken("GTLT", "((?:<|>)?=?)");
2381
+ createToken("XRANGEIDENTIFIERLOOSE", `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);
2382
+ createToken("XRANGEIDENTIFIER", `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`);
2383
+ createToken("XRANGEPLAIN", `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})(?:\\.(${src[t.XRANGEIDENTIFIER]})(?:\\.(${src[t.XRANGEIDENTIFIER]})(?:${src[t.PRERELEASE]})?${src[t.BUILD]}?)?)?`);
2384
+ createToken("XRANGEPLAINLOOSE", `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:${src[t.PRERELEASELOOSE]})?${src[t.BUILD]}?)?)?`);
2385
+ createToken("XRANGE", `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`);
2386
+ createToken("XRANGELOOSE", `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`);
2387
+ createToken("COERCEPLAIN", `${"(^|[^\\d])(\\d{1,"}${MAX_SAFE_COMPONENT_LENGTH}})(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`);
2388
+ createToken("COERCE", `${src[t.COERCEPLAIN]}(?:$|[^\\d])`);
2389
+ createToken("COERCEFULL", src[t.COERCEPLAIN] + `(?:${src[t.PRERELEASE]})?(?:${src[t.BUILD]})?(?:$|[^\\d])`);
2390
+ createToken("COERCERTL", src[t.COERCE], true);
2391
+ createToken("COERCERTLFULL", src[t.COERCEFULL], true);
2392
+ createToken("LONETILDE", "(?:~>?)");
2393
+ createToken("TILDETRIM", `(\\s*)${src[t.LONETILDE]}\\s+`, true);
2394
+ exports2.tildeTrimReplace = "$1~";
2395
+ createToken("TILDE", `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`);
2396
+ createToken("TILDELOOSE", `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`);
2397
+ createToken("LONECARET", "(?:\\^)");
2398
+ createToken("CARETTRIM", `(\\s*)${src[t.LONECARET]}\\s+`, true);
2399
+ exports2.caretTrimReplace = "$1^";
2400
+ createToken("CARET", `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`);
2401
+ createToken("CARETLOOSE", `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`);
2402
+ createToken("COMPARATORLOOSE", `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`);
2403
+ createToken("COMPARATOR", `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`);
2404
+ createToken("COMPARATORTRIM", `(\\s*)${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true);
2405
+ exports2.comparatorTrimReplace = "$1$2$3";
2406
+ createToken("HYPHENRANGE", `^\\s*(${src[t.XRANGEPLAIN]})\\s+-\\s+(${src[t.XRANGEPLAIN]})\\s*$`);
2407
+ createToken("HYPHENRANGELOOSE", `^\\s*(${src[t.XRANGEPLAINLOOSE]})\\s+-\\s+(${src[t.XRANGEPLAINLOOSE]})\\s*$`);
2408
+ createToken("STAR", "(<|>)?=?\\s*\\*");
2409
+ createToken("GTE0", "^\\s*>=\\s*0\\.0\\.0\\s*$");
2410
+ createToken("GTE0PRE", "^\\s*>=\\s*0\\.0\\.0-0\\s*$");
2411
+ })(re, re.exports);
2412
+ return re.exports;
2413
+ }
2414
+ var parseOptions_1;
2415
+ var hasRequiredParseOptions;
2416
+ function requireParseOptions() {
2417
+ if (hasRequiredParseOptions) return parseOptions_1;
2418
+ hasRequiredParseOptions = 1;
2419
+ const looseOption = Object.freeze({ loose: true });
2420
+ const emptyOpts = Object.freeze({});
2421
+ const parseOptions = (options) => {
2422
+ if (!options) {
2423
+ return emptyOpts;
2424
+ }
2425
+ if (typeof options !== "object") {
2426
+ return looseOption;
2427
+ }
2428
+ return options;
2397
2429
  };
2398
- const createToken = (name, value, isGlobal) => {
2399
- const safe = makeSafeRegex(value);
2400
- const index = R++;
2401
- debug2(name, index, value);
2402
- t2[name] = index;
2403
- src[index] = value;
2404
- re2[index] = new RegExp(value, isGlobal ? "g" : void 0);
2405
- safeRe[index] = new RegExp(safe, isGlobal ? "g" : void 0);
2430
+ parseOptions_1 = parseOptions;
2431
+ return parseOptions_1;
2432
+ }
2433
+ var identifiers;
2434
+ var hasRequiredIdentifiers;
2435
+ function requireIdentifiers() {
2436
+ if (hasRequiredIdentifiers) return identifiers;
2437
+ hasRequiredIdentifiers = 1;
2438
+ const numeric = /^[0-9]+$/;
2439
+ const compareIdentifiers = (a, b) => {
2440
+ const anum = numeric.test(a);
2441
+ const bnum = numeric.test(b);
2442
+ if (anum && bnum) {
2443
+ a = +a;
2444
+ b = +b;
2445
+ }
2446
+ return a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1;
2406
2447
  };
2407
- createToken("NUMERICIDENTIFIER", "0|[1-9]\\d*");
2408
- createToken("NUMERICIDENTIFIERLOOSE", "\\d+");
2409
- createToken("NONNUMERICIDENTIFIER", `\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`);
2410
- createToken("MAINVERSION", `(${src[t2.NUMERICIDENTIFIER]})\\.(${src[t2.NUMERICIDENTIFIER]})\\.(${src[t2.NUMERICIDENTIFIER]})`);
2411
- createToken("MAINVERSIONLOOSE", `(${src[t2.NUMERICIDENTIFIERLOOSE]})\\.(${src[t2.NUMERICIDENTIFIERLOOSE]})\\.(${src[t2.NUMERICIDENTIFIERLOOSE]})`);
2412
- createToken("PRERELEASEIDENTIFIER", `(?:${src[t2.NUMERICIDENTIFIER]}|${src[t2.NONNUMERICIDENTIFIER]})`);
2413
- createToken("PRERELEASEIDENTIFIERLOOSE", `(?:${src[t2.NUMERICIDENTIFIERLOOSE]}|${src[t2.NONNUMERICIDENTIFIER]})`);
2414
- createToken("PRERELEASE", `(?:-(${src[t2.PRERELEASEIDENTIFIER]}(?:\\.${src[t2.PRERELEASEIDENTIFIER]})*))`);
2415
- createToken("PRERELEASELOOSE", `(?:-?(${src[t2.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${src[t2.PRERELEASEIDENTIFIERLOOSE]})*))`);
2416
- createToken("BUILDIDENTIFIER", `${LETTERDASHNUMBER}+`);
2417
- createToken("BUILD", `(?:\\+(${src[t2.BUILDIDENTIFIER]}(?:\\.${src[t2.BUILDIDENTIFIER]})*))`);
2418
- createToken("FULLPLAIN", `v?${src[t2.MAINVERSION]}${src[t2.PRERELEASE]}?${src[t2.BUILD]}?`);
2419
- createToken("FULL", `^${src[t2.FULLPLAIN]}$`);
2420
- createToken("LOOSEPLAIN", `[v=\\s]*${src[t2.MAINVERSIONLOOSE]}${src[t2.PRERELEASELOOSE]}?${src[t2.BUILD]}?`);
2421
- createToken("LOOSE", `^${src[t2.LOOSEPLAIN]}$`);
2422
- createToken("GTLT", "((?:<|>)?=?)");
2423
- createToken("XRANGEIDENTIFIERLOOSE", `${src[t2.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);
2424
- createToken("XRANGEIDENTIFIER", `${src[t2.NUMERICIDENTIFIER]}|x|X|\\*`);
2425
- createToken("XRANGEPLAIN", `[v=\\s]*(${src[t2.XRANGEIDENTIFIER]})(?:\\.(${src[t2.XRANGEIDENTIFIER]})(?:\\.(${src[t2.XRANGEIDENTIFIER]})(?:${src[t2.PRERELEASE]})?${src[t2.BUILD]}?)?)?`);
2426
- createToken("XRANGEPLAINLOOSE", `[v=\\s]*(${src[t2.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t2.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t2.XRANGEIDENTIFIERLOOSE]})(?:${src[t2.PRERELEASELOOSE]})?${src[t2.BUILD]}?)?)?`);
2427
- createToken("XRANGE", `^${src[t2.GTLT]}\\s*${src[t2.XRANGEPLAIN]}$`);
2428
- createToken("XRANGELOOSE", `^${src[t2.GTLT]}\\s*${src[t2.XRANGEPLAINLOOSE]}$`);
2429
- createToken("COERCEPLAIN", `${"(^|[^\\d])(\\d{1,"}${MAX_SAFE_COMPONENT_LENGTH2}})(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH2}}))?(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH2}}))?`);
2430
- createToken("COERCE", `${src[t2.COERCEPLAIN]}(?:$|[^\\d])`);
2431
- createToken("COERCEFULL", src[t2.COERCEPLAIN] + `(?:${src[t2.PRERELEASE]})?(?:${src[t2.BUILD]})?(?:$|[^\\d])`);
2432
- createToken("COERCERTL", src[t2.COERCE], true);
2433
- createToken("COERCERTLFULL", src[t2.COERCEFULL], true);
2434
- createToken("LONETILDE", "(?:~>?)");
2435
- createToken("TILDETRIM", `(\\s*)${src[t2.LONETILDE]}\\s+`, true);
2436
- exports2.tildeTrimReplace = "$1~";
2437
- createToken("TILDE", `^${src[t2.LONETILDE]}${src[t2.XRANGEPLAIN]}$`);
2438
- createToken("TILDELOOSE", `^${src[t2.LONETILDE]}${src[t2.XRANGEPLAINLOOSE]}$`);
2439
- createToken("LONECARET", "(?:\\^)");
2440
- createToken("CARETTRIM", `(\\s*)${src[t2.LONECARET]}\\s+`, true);
2441
- exports2.caretTrimReplace = "$1^";
2442
- createToken("CARET", `^${src[t2.LONECARET]}${src[t2.XRANGEPLAIN]}$`);
2443
- createToken("CARETLOOSE", `^${src[t2.LONECARET]}${src[t2.XRANGEPLAINLOOSE]}$`);
2444
- createToken("COMPARATORLOOSE", `^${src[t2.GTLT]}\\s*(${src[t2.LOOSEPLAIN]})$|^$`);
2445
- createToken("COMPARATOR", `^${src[t2.GTLT]}\\s*(${src[t2.FULLPLAIN]})$|^$`);
2446
- createToken("COMPARATORTRIM", `(\\s*)${src[t2.GTLT]}\\s*(${src[t2.LOOSEPLAIN]}|${src[t2.XRANGEPLAIN]})`, true);
2447
- exports2.comparatorTrimReplace = "$1$2$3";
2448
- createToken("HYPHENRANGE", `^\\s*(${src[t2.XRANGEPLAIN]})\\s+-\\s+(${src[t2.XRANGEPLAIN]})\\s*$`);
2449
- createToken("HYPHENRANGELOOSE", `^\\s*(${src[t2.XRANGEPLAINLOOSE]})\\s+-\\s+(${src[t2.XRANGEPLAINLOOSE]})\\s*$`);
2450
- createToken("STAR", "(<|>)?=?\\s*\\*");
2451
- createToken("GTE0", "^\\s*>=\\s*0\\.0\\.0\\s*$");
2452
- createToken("GTE0PRE", "^\\s*>=\\s*0\\.0\\.0-0\\s*$");
2453
- })(re$1, re$1.exports);
2454
- var reExports = re$1.exports;
2455
- const looseOption = Object.freeze({ loose: true });
2456
- const emptyOpts = Object.freeze({});
2457
- const parseOptions$1 = (options) => {
2458
- if (!options) {
2459
- return emptyOpts;
2460
- }
2461
- if (typeof options !== "object") {
2462
- return looseOption;
2463
- }
2464
- return options;
2465
- };
2466
- var parseOptions_1 = parseOptions$1;
2467
- const numeric = /^[0-9]+$/;
2468
- const compareIdentifiers$1 = (a, b) => {
2469
- const anum = numeric.test(a);
2470
- const bnum = numeric.test(b);
2471
- if (anum && bnum) {
2472
- a = +a;
2473
- b = +b;
2474
- }
2475
- return a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1;
2476
- };
2477
- const rcompareIdentifiers = (a, b) => compareIdentifiers$1(b, a);
2478
- var identifiers = {
2479
- compareIdentifiers: compareIdentifiers$1,
2480
- rcompareIdentifiers
2481
- };
2482
- const debug = debug_1;
2483
- const { MAX_LENGTH, MAX_SAFE_INTEGER } = constants;
2484
- const { safeRe: re, t } = reExports;
2485
- const parseOptions = parseOptions_1;
2486
- const { compareIdentifiers } = identifiers;
2487
- let SemVer$2 = class SemVer {
2488
- constructor(version, options) {
2489
- options = parseOptions(options);
2490
- if (version instanceof SemVer) {
2491
- if (version.loose === !!options.loose && version.includePrerelease === !!options.includePrerelease) {
2492
- return version;
2448
+ const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a);
2449
+ identifiers = {
2450
+ compareIdentifiers,
2451
+ rcompareIdentifiers
2452
+ };
2453
+ return identifiers;
2454
+ }
2455
+ var semver;
2456
+ var hasRequiredSemver;
2457
+ function requireSemver() {
2458
+ if (hasRequiredSemver) return semver;
2459
+ hasRequiredSemver = 1;
2460
+ const debug = requireDebug();
2461
+ const { MAX_LENGTH, MAX_SAFE_INTEGER } = requireConstants();
2462
+ const { safeRe: re2, t } = requireRe();
2463
+ const parseOptions = requireParseOptions();
2464
+ const { compareIdentifiers } = requireIdentifiers();
2465
+ class SemVer {
2466
+ constructor(version, options) {
2467
+ options = parseOptions(options);
2468
+ if (version instanceof SemVer) {
2469
+ if (version.loose === !!options.loose && version.includePrerelease === !!options.includePrerelease) {
2470
+ return version;
2471
+ } else {
2472
+ version = version.version;
2473
+ }
2474
+ } else if (typeof version !== "string") {
2475
+ throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version}".`);
2476
+ }
2477
+ if (version.length > MAX_LENGTH) {
2478
+ throw new TypeError(
2479
+ `version is longer than ${MAX_LENGTH} characters`
2480
+ );
2481
+ }
2482
+ debug("SemVer", version, options);
2483
+ this.options = options;
2484
+ this.loose = !!options.loose;
2485
+ this.includePrerelease = !!options.includePrerelease;
2486
+ const m = version.trim().match(options.loose ? re2[t.LOOSE] : re2[t.FULL]);
2487
+ if (!m) {
2488
+ throw new TypeError(`Invalid Version: ${version}`);
2489
+ }
2490
+ this.raw = version;
2491
+ this.major = +m[1];
2492
+ this.minor = +m[2];
2493
+ this.patch = +m[3];
2494
+ if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
2495
+ throw new TypeError("Invalid major version");
2496
+ }
2497
+ if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
2498
+ throw new TypeError("Invalid minor version");
2499
+ }
2500
+ if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
2501
+ throw new TypeError("Invalid patch version");
2502
+ }
2503
+ if (!m[4]) {
2504
+ this.prerelease = [];
2493
2505
  } else {
2494
- version = version.version;
2506
+ this.prerelease = m[4].split(".").map((id) => {
2507
+ if (/^[0-9]+$/.test(id)) {
2508
+ const num = +id;
2509
+ if (num >= 0 && num < MAX_SAFE_INTEGER) {
2510
+ return num;
2511
+ }
2512
+ }
2513
+ return id;
2514
+ });
2495
2515
  }
2496
- } else if (typeof version !== "string") {
2497
- throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version}".`);
2498
- }
2499
- if (version.length > MAX_LENGTH) {
2500
- throw new TypeError(
2501
- `version is longer than ${MAX_LENGTH} characters`
2502
- );
2503
- }
2504
- debug("SemVer", version, options);
2505
- this.options = options;
2506
- this.loose = !!options.loose;
2507
- this.includePrerelease = !!options.includePrerelease;
2508
- const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]);
2509
- if (!m) {
2510
- throw new TypeError(`Invalid Version: ${version}`);
2516
+ this.build = m[5] ? m[5].split(".") : [];
2517
+ this.format();
2511
2518
  }
2512
- this.raw = version;
2513
- this.major = +m[1];
2514
- this.minor = +m[2];
2515
- this.patch = +m[3];
2516
- if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
2517
- throw new TypeError("Invalid major version");
2518
- }
2519
- if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
2520
- throw new TypeError("Invalid minor version");
2519
+ format() {
2520
+ this.version = `${this.major}.${this.minor}.${this.patch}`;
2521
+ if (this.prerelease.length) {
2522
+ this.version += `-${this.prerelease.join(".")}`;
2523
+ }
2524
+ return this.version;
2521
2525
  }
2522
- if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
2523
- throw new TypeError("Invalid patch version");
2526
+ toString() {
2527
+ return this.version;
2524
2528
  }
2525
- if (!m[4]) {
2526
- this.prerelease = [];
2527
- } else {
2528
- this.prerelease = m[4].split(".").map((id) => {
2529
- if (/^[0-9]+$/.test(id)) {
2530
- const num = +id;
2531
- if (num >= 0 && num < MAX_SAFE_INTEGER) {
2532
- return num;
2533
- }
2529
+ compare(other) {
2530
+ debug("SemVer.compare", this.version, this.options, other);
2531
+ if (!(other instanceof SemVer)) {
2532
+ if (typeof other === "string" && other === this.version) {
2533
+ return 0;
2534
2534
  }
2535
- return id;
2536
- });
2537
- }
2538
- this.build = m[5] ? m[5].split(".") : [];
2539
- this.format();
2540
- }
2541
- format() {
2542
- this.version = `${this.major}.${this.minor}.${this.patch}`;
2543
- if (this.prerelease.length) {
2544
- this.version += `-${this.prerelease.join(".")}`;
2545
- }
2546
- return this.version;
2547
- }
2548
- toString() {
2549
- return this.version;
2550
- }
2551
- compare(other) {
2552
- debug("SemVer.compare", this.version, this.options, other);
2553
- if (!(other instanceof SemVer)) {
2554
- if (typeof other === "string" && other === this.version) {
2535
+ other = new SemVer(other, this.options);
2536
+ }
2537
+ if (other.version === this.version) {
2555
2538
  return 0;
2556
2539
  }
2557
- other = new SemVer(other, this.options);
2540
+ return this.compareMain(other) || this.comparePre(other);
2558
2541
  }
2559
- if (other.version === this.version) {
2560
- return 0;
2561
- }
2562
- return this.compareMain(other) || this.comparePre(other);
2563
- }
2564
- compareMain(other) {
2565
- if (!(other instanceof SemVer)) {
2566
- other = new SemVer(other, this.options);
2567
- }
2568
- return compareIdentifiers(this.major, other.major) || compareIdentifiers(this.minor, other.minor) || compareIdentifiers(this.patch, other.patch);
2569
- }
2570
- comparePre(other) {
2571
- if (!(other instanceof SemVer)) {
2572
- other = new SemVer(other, this.options);
2573
- }
2574
- if (this.prerelease.length && !other.prerelease.length) {
2575
- return -1;
2576
- } else if (!this.prerelease.length && other.prerelease.length) {
2577
- return 1;
2578
- } else if (!this.prerelease.length && !other.prerelease.length) {
2579
- return 0;
2542
+ compareMain(other) {
2543
+ if (!(other instanceof SemVer)) {
2544
+ other = new SemVer(other, this.options);
2545
+ }
2546
+ return compareIdentifiers(this.major, other.major) || compareIdentifiers(this.minor, other.minor) || compareIdentifiers(this.patch, other.patch);
2580
2547
  }
2581
- let i = 0;
2582
- do {
2583
- const a = this.prerelease[i];
2584
- const b = other.prerelease[i];
2585
- debug("prerelease compare", i, a, b);
2586
- if (a === void 0 && b === void 0) {
2587
- return 0;
2588
- } else if (b === void 0) {
2589
- return 1;
2590
- } else if (a === void 0) {
2548
+ comparePre(other) {
2549
+ if (!(other instanceof SemVer)) {
2550
+ other = new SemVer(other, this.options);
2551
+ }
2552
+ if (this.prerelease.length && !other.prerelease.length) {
2591
2553
  return -1;
2592
- } else if (a === b) {
2593
- continue;
2594
- } else {
2595
- return compareIdentifiers(a, b);
2554
+ } else if (!this.prerelease.length && other.prerelease.length) {
2555
+ return 1;
2556
+ } else if (!this.prerelease.length && !other.prerelease.length) {
2557
+ return 0;
2596
2558
  }
2597
- } while (++i);
2598
- }
2599
- compareBuild(other) {
2600
- if (!(other instanceof SemVer)) {
2601
- other = new SemVer(other, this.options);
2559
+ let i = 0;
2560
+ do {
2561
+ const a = this.prerelease[i];
2562
+ const b = other.prerelease[i];
2563
+ debug("prerelease compare", i, a, b);
2564
+ if (a === void 0 && b === void 0) {
2565
+ return 0;
2566
+ } else if (b === void 0) {
2567
+ return 1;
2568
+ } else if (a === void 0) {
2569
+ return -1;
2570
+ } else if (a === b) {
2571
+ continue;
2572
+ } else {
2573
+ return compareIdentifiers(a, b);
2574
+ }
2575
+ } while (++i);
2602
2576
  }
2603
- let i = 0;
2604
- do {
2605
- const a = this.build[i];
2606
- const b = other.build[i];
2607
- debug("build compare", i, a, b);
2608
- if (a === void 0 && b === void 0) {
2609
- return 0;
2610
- } else if (b === void 0) {
2611
- return 1;
2612
- } else if (a === void 0) {
2613
- return -1;
2614
- } else if (a === b) {
2615
- continue;
2616
- } else {
2617
- return compareIdentifiers(a, b);
2577
+ compareBuild(other) {
2578
+ if (!(other instanceof SemVer)) {
2579
+ other = new SemVer(other, this.options);
2618
2580
  }
2619
- } while (++i);
2620
- }
2621
- // preminor will bump the version up to the next minor release, and immediately
2622
- // down to pre-release. premajor and prepatch work the same way.
2623
- inc(release, identifier, identifierBase) {
2624
- switch (release) {
2625
- case "premajor":
2626
- this.prerelease.length = 0;
2627
- this.patch = 0;
2628
- this.minor = 0;
2629
- this.major++;
2630
- this.inc("pre", identifier, identifierBase);
2631
- break;
2632
- case "preminor":
2633
- this.prerelease.length = 0;
2634
- this.patch = 0;
2635
- this.minor++;
2636
- this.inc("pre", identifier, identifierBase);
2637
- break;
2638
- case "prepatch":
2639
- this.prerelease.length = 0;
2640
- this.inc("patch", identifier, identifierBase);
2641
- this.inc("pre", identifier, identifierBase);
2642
- break;
2643
- case "prerelease":
2644
- if (this.prerelease.length === 0) {
2645
- this.inc("patch", identifier, identifierBase);
2581
+ let i = 0;
2582
+ do {
2583
+ const a = this.build[i];
2584
+ const b = other.build[i];
2585
+ debug("build compare", i, a, b);
2586
+ if (a === void 0 && b === void 0) {
2587
+ return 0;
2588
+ } else if (b === void 0) {
2589
+ return 1;
2590
+ } else if (a === void 0) {
2591
+ return -1;
2592
+ } else if (a === b) {
2593
+ continue;
2594
+ } else {
2595
+ return compareIdentifiers(a, b);
2646
2596
  }
2647
- this.inc("pre", identifier, identifierBase);
2648
- break;
2649
- case "major":
2650
- if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) {
2597
+ } while (++i);
2598
+ }
2599
+ // preminor will bump the version up to the next minor release, and immediately
2600
+ // down to pre-release. premajor and prepatch work the same way.
2601
+ inc(release, identifier, identifierBase) {
2602
+ switch (release) {
2603
+ case "premajor":
2604
+ this.prerelease.length = 0;
2605
+ this.patch = 0;
2606
+ this.minor = 0;
2651
2607
  this.major++;
2652
- }
2653
- this.minor = 0;
2654
- this.patch = 0;
2655
- this.prerelease = [];
2656
- break;
2657
- case "minor":
2658
- if (this.patch !== 0 || this.prerelease.length === 0) {
2608
+ this.inc("pre", identifier, identifierBase);
2609
+ break;
2610
+ case "preminor":
2611
+ this.prerelease.length = 0;
2612
+ this.patch = 0;
2659
2613
  this.minor++;
2660
- }
2661
- this.patch = 0;
2662
- this.prerelease = [];
2663
- break;
2664
- case "patch":
2665
- if (this.prerelease.length === 0) {
2666
- this.patch++;
2667
- }
2668
- this.prerelease = [];
2669
- break;
2670
- case "pre": {
2671
- const base = Number(identifierBase) ? 1 : 0;
2672
- if (!identifier && identifierBase === false) {
2673
- throw new Error("invalid increment argument: identifier is empty");
2674
- }
2675
- if (this.prerelease.length === 0) {
2676
- this.prerelease = [base];
2677
- } else {
2678
- let i = this.prerelease.length;
2679
- while (--i >= 0) {
2680
- if (typeof this.prerelease[i] === "number") {
2681
- this.prerelease[i]++;
2682
- i = -2;
2683
- }
2614
+ this.inc("pre", identifier, identifierBase);
2615
+ break;
2616
+ case "prepatch":
2617
+ this.prerelease.length = 0;
2618
+ this.inc("patch", identifier, identifierBase);
2619
+ this.inc("pre", identifier, identifierBase);
2620
+ break;
2621
+ // If the input is a non-prerelease version, this acts the same as
2622
+ // prepatch.
2623
+ case "prerelease":
2624
+ if (this.prerelease.length === 0) {
2625
+ this.inc("patch", identifier, identifierBase);
2684
2626
  }
2685
- if (i === -1) {
2686
- if (identifier === this.prerelease.join(".") && identifierBase === false) {
2687
- throw new Error("invalid increment argument: identifier already exists");
2688
- }
2689
- this.prerelease.push(base);
2627
+ this.inc("pre", identifier, identifierBase);
2628
+ break;
2629
+ case "major":
2630
+ if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) {
2631
+ this.major++;
2690
2632
  }
2691
- }
2692
- if (identifier) {
2693
- let prerelease = [identifier, base];
2694
- if (identifierBase === false) {
2695
- prerelease = [identifier];
2633
+ this.minor = 0;
2634
+ this.patch = 0;
2635
+ this.prerelease = [];
2636
+ break;
2637
+ case "minor":
2638
+ if (this.patch !== 0 || this.prerelease.length === 0) {
2639
+ this.minor++;
2640
+ }
2641
+ this.patch = 0;
2642
+ this.prerelease = [];
2643
+ break;
2644
+ case "patch":
2645
+ if (this.prerelease.length === 0) {
2646
+ this.patch++;
2696
2647
  }
2697
- if (compareIdentifiers(this.prerelease[0], identifier) === 0) {
2698
- if (isNaN(this.prerelease[1])) {
2648
+ this.prerelease = [];
2649
+ break;
2650
+ // This probably shouldn't be used publicly.
2651
+ // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.
2652
+ case "pre": {
2653
+ const base = Number(identifierBase) ? 1 : 0;
2654
+ if (!identifier && identifierBase === false) {
2655
+ throw new Error("invalid increment argument: identifier is empty");
2656
+ }
2657
+ if (this.prerelease.length === 0) {
2658
+ this.prerelease = [base];
2659
+ } else {
2660
+ let i = this.prerelease.length;
2661
+ while (--i >= 0) {
2662
+ if (typeof this.prerelease[i] === "number") {
2663
+ this.prerelease[i]++;
2664
+ i = -2;
2665
+ }
2666
+ }
2667
+ if (i === -1) {
2668
+ if (identifier === this.prerelease.join(".") && identifierBase === false) {
2669
+ throw new Error("invalid increment argument: identifier already exists");
2670
+ }
2671
+ this.prerelease.push(base);
2672
+ }
2673
+ }
2674
+ if (identifier) {
2675
+ let prerelease = [identifier, base];
2676
+ if (identifierBase === false) {
2677
+ prerelease = [identifier];
2678
+ }
2679
+ if (compareIdentifiers(this.prerelease[0], identifier) === 0) {
2680
+ if (isNaN(this.prerelease[1])) {
2681
+ this.prerelease = prerelease;
2682
+ }
2683
+ } else {
2699
2684
  this.prerelease = prerelease;
2700
2685
  }
2701
- } else {
2702
- this.prerelease = prerelease;
2703
2686
  }
2687
+ break;
2704
2688
  }
2705
- break;
2689
+ default:
2690
+ throw new Error(`invalid increment argument: ${release}`);
2706
2691
  }
2707
- default:
2708
- throw new Error(`invalid increment argument: ${release}`);
2709
- }
2710
- this.raw = this.format();
2711
- if (this.build.length) {
2712
- this.raw += `+${this.build.join(".")}`;
2692
+ this.raw = this.format();
2693
+ if (this.build.length) {
2694
+ this.raw += `+${this.build.join(".")}`;
2695
+ }
2696
+ return this;
2713
2697
  }
2714
- return this;
2715
2698
  }
2716
- };
2717
- var semver = SemVer$2;
2718
- const SemVer$1 = semver;
2719
- const parse$1 = (version, options, throwErrors = false) => {
2720
- if (version instanceof SemVer$1) {
2721
- return version;
2722
- }
2723
- try {
2724
- return new SemVer$1(version, options);
2725
- } catch (er) {
2726
- if (!throwErrors) {
2727
- return null;
2699
+ semver = SemVer;
2700
+ return semver;
2701
+ }
2702
+ var parse_1;
2703
+ var hasRequiredParse;
2704
+ function requireParse() {
2705
+ if (hasRequiredParse) return parse_1;
2706
+ hasRequiredParse = 1;
2707
+ const SemVer = requireSemver();
2708
+ const parse = (version, options, throwErrors = false) => {
2709
+ if (version instanceof SemVer) {
2710
+ return version;
2728
2711
  }
2729
- throw er;
2730
- }
2731
- };
2732
- var parse_1 = parse$1;
2733
- const parse = parse_1;
2734
- const valid = (version, options) => {
2735
- const v = parse(version, options);
2736
- return v ? v.version : null;
2737
- };
2738
- var valid_1 = valid;
2739
- const valid$1 = /* @__PURE__ */ getDefaultExportFromCjs(valid_1);
2740
- const SemVer2 = semver;
2741
- const major = (a, loose) => new SemVer2(a, loose).major;
2742
- var major_1 = major;
2743
- const major$1 = /* @__PURE__ */ getDefaultExportFromCjs(major_1);
2712
+ try {
2713
+ return new SemVer(version, options);
2714
+ } catch (er) {
2715
+ if (!throwErrors) {
2716
+ return null;
2717
+ }
2718
+ throw er;
2719
+ }
2720
+ };
2721
+ parse_1 = parse;
2722
+ return parse_1;
2723
+ }
2724
+ var valid_1;
2725
+ var hasRequiredValid;
2726
+ function requireValid() {
2727
+ if (hasRequiredValid) return valid_1;
2728
+ hasRequiredValid = 1;
2729
+ const parse = requireParse();
2730
+ const valid2 = (version, options) => {
2731
+ const v = parse(version, options);
2732
+ return v ? v.version : null;
2733
+ };
2734
+ valid_1 = valid2;
2735
+ return valid_1;
2736
+ }
2737
+ var validExports = requireValid();
2738
+ const valid = /* @__PURE__ */ getDefaultExportFromCjs(validExports);
2739
+ var major_1;
2740
+ var hasRequiredMajor;
2741
+ function requireMajor() {
2742
+ if (hasRequiredMajor) return major_1;
2743
+ hasRequiredMajor = 1;
2744
+ const SemVer = requireSemver();
2745
+ const major2 = (a, loose) => new SemVer(a, loose).major;
2746
+ major_1 = major2;
2747
+ return major_1;
2748
+ }
2749
+ var majorExports = requireMajor();
2750
+ const major = /* @__PURE__ */ getDefaultExportFromCjs(majorExports);
2744
2751
  class ProxyBus {
2745
2752
  bus;
2746
2753
  constructor(bus2) {
2747
- if (typeof bus2.getVersion !== "function" || !valid$1(bus2.getVersion())) {
2754
+ if (typeof bus2.getVersion !== "function" || !valid(bus2.getVersion())) {
2748
2755
  console.warn("Proxying an event bus with an unknown or invalid version");
2749
- } else if (major$1(bus2.getVersion()) !== major$1(this.getVersion())) {
2756
+ } else if (major(bus2.getVersion()) !== major(this.getVersion())) {
2750
2757
  console.warn(
2751
2758
  "Proxying an event bus of version " + bus2.getVersion() + " with " + this.getVersion()
2752
2759
  );
@@ -2754,7 +2761,7 @@ class ProxyBus {
2754
2761
  this.bus = bus2;
2755
2762
  }
2756
2763
  getVersion() {
2757
- return "3.3.1";
2764
+ return "3.3.2";
2758
2765
  }
2759
2766
  subscribe(name, handler) {
2760
2767
  this.bus.subscribe(name, handler);
@@ -2762,14 +2769,14 @@ class ProxyBus {
2762
2769
  unsubscribe(name, handler) {
2763
2770
  this.bus.unsubscribe(name, handler);
2764
2771
  }
2765
- emit(name, event) {
2766
- this.bus.emit(name, event);
2772
+ emit(name, ...event) {
2773
+ this.bus.emit(name, ...event);
2767
2774
  }
2768
2775
  }
2769
2776
  class SimpleBus {
2770
2777
  handlers = /* @__PURE__ */ new Map();
2771
2778
  getVersion() {
2772
- return "3.3.1";
2779
+ return "3.3.2";
2773
2780
  }
2774
2781
  subscribe(name, handler) {
2775
2782
  this.handlers.set(
@@ -2785,10 +2792,12 @@ class SimpleBus {
2785
2792
  (this.handlers.get(name) || []).filter((h) => h !== handler)
2786
2793
  );
2787
2794
  }
2788
- emit(name, event) {
2789
- (this.handlers.get(name) || []).forEach((h) => {
2795
+ emit(name, ...event) {
2796
+ const handlers = this.handlers.get(name) || [];
2797
+ handlers.forEach((h) => {
2790
2798
  try {
2791
- h(event);
2799
+ ;
2800
+ h(event[0]);
2792
2801
  } catch (e) {
2793
2802
  console.error("could not invoke event listener", e);
2794
2803
  }
@@ -2822,8 +2831,8 @@ function getBus() {
2822
2831
  }
2823
2832
  return bus;
2824
2833
  }
2825
- function emit(name, event) {
2826
- getBus().emit(name, event);
2834
+ function emit(name, ...event) {
2835
+ getBus().emit(name, ...event);
2827
2836
  }
2828
2837
  /*!
2829
2838
  * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
@@ -2940,3 +2949,4 @@ exports.removeNewFileMenuEntry = removeNewFileMenuEntry;
2940
2949
  exports.sortNodes = sortNodes;
2941
2950
  exports.unregisterFileListFilter = unregisterFileListFilter;
2942
2951
  exports.validateFilename = validateFilename;
2952
+ //# sourceMappingURL=index.cjs.map