@rgrove/parse-xml 4.1.0 → 4.2.1
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/README.md +32 -32
- package/dist/browser.js +217 -237
- package/dist/browser.js.map +3 -3
- package/dist/global.min.js +9 -9
- package/dist/global.min.js.map +3 -3
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/Parser.d.ts +10 -1
- package/dist/lib/Parser.d.ts.map +1 -1
- package/dist/lib/Parser.js +58 -42
- package/dist/lib/Parser.js.map +1 -1
- package/dist/lib/StringScanner.d.ts +10 -16
- package/dist/lib/StringScanner.d.ts.map +1 -1
- package/dist/lib/StringScanner.js +54 -77
- package/dist/lib/StringScanner.js.map +1 -1
- package/dist/lib/XmlDeclaration.js.map +1 -1
- package/dist/lib/XmlDocument.js.map +1 -1
- package/dist/lib/XmlDocumentType.js.map +1 -1
- package/dist/lib/XmlElement.js.map +1 -1
- package/dist/lib/XmlError.js.map +1 -1
- package/dist/lib/XmlNode.js.map +1 -1
- package/dist/lib/syntax.d.ts.map +1 -1
- package/dist/lib/syntax.js +17 -22
- package/dist/lib/syntax.js.map +1 -1
- package/package.json +14 -19
- package/src/lib/Parser.ts +62 -45
- package/src/lib/StringScanner.ts +56 -93
- package/src/lib/syntax.ts +11 -17
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XmlDeclaration.js","sourceRoot":"","sources":["../../src/lib/XmlDeclaration.ts"],"names":[],"mappings":";;;AAAA,6CAAuC;AAEvC;;;;;;;;GAQG;AACH,MAAa,cAAe,SAAQ,oBAAO;IAkBzC,YACE,OAAe,EACf,QAAiB,EACjB,UAAuD;QAEvD,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,IAAI,CAAC;IACvC,CAAC;IAED,IAAa,IAAI;QACf,OAAO,oBAAO,CAAC,oBAAoB,CAAC;IACtC,CAAC;IAEQ,MAAM;QACb,IAAI,IAAI,GAAG,oBAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAE5B,KAAK,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAU,EAAE;
|
|
1
|
+
{"version":3,"file":"XmlDeclaration.js","sourceRoot":"","sources":["../../src/lib/XmlDeclaration.ts"],"names":[],"mappings":";;;AAAA,6CAAuC;AAEvC;;;;;;;;GAQG;AACH,MAAa,cAAe,SAAQ,oBAAO;IAkBzC,YACE,OAAe,EACf,QAAiB,EACjB,UAAuD;QAEvD,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,IAAI,CAAC;IACvC,CAAC;IAED,IAAa,IAAI;QACf,OAAO,oBAAO,CAAC,oBAAoB,CAAC;IACtC,CAAC;IAEQ,MAAM;QACb,IAAI,IAAI,GAAG,oBAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAE5B,KAAK,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAU,EAAE,CAAC;YACpD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA9CD,wCA8CC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XmlDocument.js","sourceRoot":"","sources":["../../src/lib/XmlDocument.ts"],"names":[],"mappings":";;;AAAA,mDAA6C;AAC7C,6CAAuC;AAOvC;;;GAGG;AACH,MAAa,WAAY,SAAQ,oBAAO;IAMtC,YAAY,WAAyG,EAAE;QACrH,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,IAAa,QAAQ;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"XmlDocument.js","sourceRoot":"","sources":["../../src/lib/XmlDocument.ts"],"names":[],"mappings":";;;AAAA,mDAA6C;AAC7C,6CAAuC;AAOvC;;;GAGG;AACH,MAAa,WAAY,SAAQ,oBAAO;IAMtC,YAAY,WAAyG,EAAE;QACrH,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,IAAa,QAAQ;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,IAAI,KAAK,YAAY,0BAAU,EAAE,CAAC;gBAChC,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,QAAQ;aACjB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/C,IAAI,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAED,IAAa,IAAI;QACf,OAAO,oBAAO,CAAC,aAAa,CAAC;IAC/B,CAAC;IAEQ,MAAM;QACb,OAAO,MAAM,CAAC,MAAM,CAAC,oBAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACxD,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;SACrD,CAAC,CAAC;IACL,CAAC;CACF;AA9CD,kCA8CC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XmlDocumentType.js","sourceRoot":"","sources":["../../src/lib/XmlDocumentType.ts"],"names":[],"mappings":";;;AAAA,6CAAuC;AAEvC;;;;;;;;;;GAUG;AACH,MAAa,eAAgB,SAAQ,oBAAO;IAwB1C,YACE,IAAY,EACZ,QAAiB,EACjB,QAAiB,EACjB,cAAuB;QAEvB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC;QACjC,IAAI,CAAC,cAAc,GAAG,cAAc,IAAI,IAAI,CAAC;IAC/C,CAAC;IAED,IAAa,IAAI;QACf,OAAO,oBAAO,CAAC,kBAAkB,CAAC;IACpC,CAAC;IAEQ,MAAM;QACb,IAAI,IAAI,GAAG,oBAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAEtB,KAAK,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,gBAAgB,CAAU,EAAE;
|
|
1
|
+
{"version":3,"file":"XmlDocumentType.js","sourceRoot":"","sources":["../../src/lib/XmlDocumentType.ts"],"names":[],"mappings":";;;AAAA,6CAAuC;AAEvC;;;;;;;;;;GAUG;AACH,MAAa,eAAgB,SAAQ,oBAAO;IAwB1C,YACE,IAAY,EACZ,QAAiB,EACjB,QAAiB,EACjB,cAAuB;QAEvB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC;QACjC,IAAI,CAAC,cAAc,GAAG,cAAc,IAAI,IAAI,CAAC;IAC/C,CAAC;IAED,IAAa,IAAI;QACf,OAAO,oBAAO,CAAC,kBAAkB,CAAC;IACpC,CAAC;IAEQ,MAAM;QACb,IAAI,IAAI,GAAG,oBAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAEtB,KAAK,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,gBAAgB,CAAU,EAAE,CAAC;YACpE,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AArDD,0CAqDC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XmlElement.js","sourceRoot":"","sources":["../../src/lib/XmlElement.ts"],"names":[],"mappings":";;;AAAA,6CAAuC;AAQvC;;GAEG;AACH,MAAa,UAAW,SAAQ,oBAAO;IAgBrC,YACE,IAAY,EACZ,aAA2C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAC9D,WAA2F,EAAE;QAE7F,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,IAAa,kBAAkB;QAC7B,IAAI,IAAI,GAAmB,IAAI,CAAC,CAAC,uDAAuD;QAExF,OAAO,IAAI,YAAY,UAAU,EAAE;
|
|
1
|
+
{"version":3,"file":"XmlElement.js","sourceRoot":"","sources":["../../src/lib/XmlElement.ts"],"names":[],"mappings":";;;AAAA,6CAAuC;AAQvC;;GAEG;AACH,MAAa,UAAW,SAAQ,oBAAO;IAgBrC,YACE,IAAY,EACZ,aAA2C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAC9D,WAA2F,EAAE;QAE7F,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,IAAa,kBAAkB;QAC7B,IAAI,IAAI,GAAmB,IAAI,CAAC,CAAC,uDAAuD;QAExF,OAAO,IAAI,YAAY,UAAU,EAAE,CAAC;YAClC,IAAI,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACnC,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,UAAU,CAAC;YACrD,CAAC;YAED,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,QAAQ;aACjB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/C,IAAI,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAED,IAAa,IAAI;QACf,OAAO,oBAAO,CAAC,YAAY,CAAC;IAC9B,CAAC;IAEQ,MAAM;QACb,OAAO,MAAM,CAAC,MAAM,CAAC,oBAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACxD,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;SACrD,CAAC,CAAC;IACL,CAAC;CACF;AArED,gCAqEC"}
|
package/dist/lib/XmlError.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XmlError.js","sourceRoot":"","sources":["../../src/lib/XmlError.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAa,QAAS,SAAQ,KAAK;IAsBjC,YACE,OAAe,EACf,SAAiB,EACjB,GAAW;QAEX,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,IAAI,GAAG,CAAC,CAAC;QAEb,qDAAqD;QACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,EAAE,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"XmlError.js","sourceRoot":"","sources":["../../src/lib/XmlError.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAa,QAAS,SAAQ,KAAK;IAsBjC,YACE,OAAe,EACf,SAAiB,EACjB,GAAW;QAEX,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,IAAI,GAAG,CAAC,CAAC;QAEb,qDAAqD;QACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC;YACnC,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAElB,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAClB,MAAM,GAAG,CAAC,CAAC;gBACX,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,IAAI,CAAC,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,CAAC;gBACZ,OAAO,IAAI,IAAI,CAAC;YAClB,CAAC;QACH,CAAC;QAED,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAEvC,OAAO,IAAI,GAAG,KAAK,CAAC,CAAC;YACnB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;YACtB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAE9B,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,yEAAyE;QACzE,QAAQ;QACR,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACxB,IAAI,MAAM,GAAG,EAAE,EAAE,CAAC;gBAChB,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,YAAY,GAAG,MAAM,GAAG,EAAE,CAAC;gBAC3B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QAED,KAAK,CACH,GAAG,OAAO,UAAU,IAAI,YAAY,MAAM,KAAK;cAC3C,KAAK,OAAO,IAAI;cAChB,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,YAAY,GAAG,CAAC,CAAC,GAAG,KAAK,CAClD,CAAC;QAEF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;IACvB,CAAC;CACF;AA5ED,4BA4EC"}
|
package/dist/lib/XmlNode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XmlNode.js","sourceRoot":"","sources":["../../src/lib/XmlNode.ts"],"names":[],"mappings":";;;AAIA;;GAEG;AACH,MAAa,OAAO;IAApB;QAyCE;;WAEG;QACH,WAAM,GAAoC,IAAI,CAAC;QAE/C;;;WAGG;QACH,UAAK,GAAG,CAAC,CAAC,CAAC;QAEX;;;WAGG;QACH,QAAG,GAAG,CAAC,CAAC,CAAC;IAyEX,CAAC;IAvEC;;;OAGG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,EAAE,QAAQ,IAAI,IAAI,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI;eACtB,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,QAAQ;eAC7B,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,YAAY,CAAC;IAC1C,CAAC;IAED;;;;;;;;;;OAUG;IACH,IAAI,kBAAkB;QACpB,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAC3C,CAAC;IAED;;;;;;;;;OASG;IACH,IAAI,IAAI;QACN,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;OAGG;IACH,MAAM;QACJ,IAAI,IAAI,GAAe;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;QAEF,IAAI,IAAI,CAAC,UAAU,EAAE;
|
|
1
|
+
{"version":3,"file":"XmlNode.js","sourceRoot":"","sources":["../../src/lib/XmlNode.ts"],"names":[],"mappings":";;;AAIA;;GAEG;AACH,MAAa,OAAO;IAApB;QAyCE;;WAEG;QACH,WAAM,GAAoC,IAAI,CAAC;QAE/C;;;WAGG;QACH,UAAK,GAAG,CAAC,CAAC,CAAC;QAEX;;;WAGG;QACH,QAAG,GAAG,CAAC,CAAC,CAAC;IAyEX,CAAC;IAvEC;;;OAGG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,EAAE,QAAQ,IAAI,IAAI,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI;eACtB,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,QAAQ;eAC7B,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,YAAY,CAAC;IAC1C,CAAC;IAED;;;;;;;;;;OAUG;IACH,IAAI,kBAAkB;QACpB,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAC3C,CAAC;IAED;;;;;;;;;OASG;IACH,IAAI,IAAI;QACN,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;OAGG;IACH,MAAM;QACJ,IAAI,IAAI,GAAe;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;QAEF,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACjC,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACxB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACtB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;;AAhIH,0BAiIC;AAhIC;;GAEG;AACa,kBAAU,GAAG,OAAO,AAAV,CAAW;AAErC;;GAEG;AACa,oBAAY,GAAG,SAAS,AAAZ,CAAa;AAEzC;;GAEG;AACa,qBAAa,GAAG,UAAU,AAAb,CAAc;AAE3C;;GAEG;AACa,0BAAkB,GAAG,SAAS,AAAZ,CAAa;AAE/C;;GAEG;AACa,oBAAY,GAAG,SAAS,AAAZ,CAAa;AAEzC;;GAEG;AACa,mCAA2B,GAAG,IAAI,AAAP,CAAQ;AAEnD;;GAEG;AACa,iBAAS,GAAG,MAAM,AAAT,CAAU;AAEnC;;GAEG;AACa,4BAAoB,GAAG,SAAS,AAAZ,CAAa"}
|
package/dist/lib/syntax.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syntax.d.ts","sourceRoot":"","sources":["../../src/lib/syntax.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"syntax.d.ts","sourceRoot":"","sources":["../../src/lib/syntax.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,QAAU,CAAC;AAE/C;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,QAAU,CAAC;AAE/C;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,QAAmB,CAAC;AAE7D;;;;;GAKG;AACH,eAAO,MAAM,WAAW,QAAY,CAAC;AAErC;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC;IAAC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CAAC,CAMhE,CAAC;AAEJ;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAehD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAA0B,MAAM,GAAG,OAAO,CAkBzF;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOlD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAOlD"}
|
package/dist/lib/syntax.js
CHANGED
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.predefinedEntities = exports.endCharData = exports.attValueNormalizedWhitespace = exports.attValueCharSingleQuote = exports.attValueCharDoubleQuote = void 0;
|
|
4
|
+
exports.isNameChar = isNameChar;
|
|
5
|
+
exports.isNameStartChar = isNameStartChar;
|
|
6
|
+
exports.isReferenceChar = isReferenceChar;
|
|
7
|
+
exports.isWhitespace = isWhitespace;
|
|
8
|
+
exports.isXmlCodePoint = isXmlCodePoint;
|
|
4
9
|
/**
|
|
5
10
|
* Regular expression that matches one or more `AttValue` characters in a
|
|
6
11
|
* double-quoted attribute value.
|
|
7
12
|
*
|
|
8
13
|
* @see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-AttValue
|
|
9
14
|
*/
|
|
10
|
-
exports.attValueCharDoubleQuote = /[
|
|
15
|
+
exports.attValueCharDoubleQuote = /["&<]/;
|
|
11
16
|
/**
|
|
12
17
|
* Regular expression that matches one or more `AttValue` characters in a
|
|
13
18
|
* single-quoted attribute value.
|
|
14
19
|
*
|
|
15
20
|
* @see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-AttValue
|
|
16
21
|
*/
|
|
17
|
-
exports.attValueCharSingleQuote = /[
|
|
22
|
+
exports.attValueCharSingleQuote = /['&<]/;
|
|
18
23
|
/**
|
|
19
24
|
* Regular expression that matches a whitespace character that should be
|
|
20
25
|
* normalized to a space character in an attribute value.
|
|
@@ -47,7 +52,7 @@ exports.predefinedEntities = Object.freeze(Object.assign(Object.create(null), {
|
|
|
47
52
|
* @see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-NameChar
|
|
48
53
|
*/
|
|
49
54
|
function isNameChar(char) {
|
|
50
|
-
let cp =
|
|
55
|
+
let cp = char.codePointAt(0);
|
|
51
56
|
// Including the most common NameStartChars here improves performance
|
|
52
57
|
// slightly.
|
|
53
58
|
return (cp >= 0x61 && cp <= 0x7A) // a-z
|
|
@@ -57,16 +62,16 @@ function isNameChar(char) {
|
|
|
57
62
|
|| cp === 0x2E // .
|
|
58
63
|
|| cp === 0xB7
|
|
59
64
|
|| (cp >= 0x300 && cp <= 0x36F)
|
|
60
|
-
||
|
|
65
|
+
|| cp === 0x203F
|
|
66
|
+
|| cp === 0x2040
|
|
61
67
|
|| isNameStartChar(char, cp);
|
|
62
68
|
}
|
|
63
|
-
exports.isNameChar = isNameChar;
|
|
64
69
|
/**
|
|
65
70
|
* Returns `true` if _char_ is an XML `NameStartChar`, `false` if it isn't.
|
|
66
71
|
*
|
|
67
72
|
* @see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-NameStartChar
|
|
68
73
|
*/
|
|
69
|
-
function isNameStartChar(char, cp =
|
|
74
|
+
function isNameStartChar(char, cp = char.codePointAt(0)) {
|
|
70
75
|
return (cp >= 0x61 && cp <= 0x7A) // a-z
|
|
71
76
|
|| (cp >= 0x41 && cp <= 0x5A) // A-Z
|
|
72
77
|
|| cp === 0x3A // :
|
|
@@ -76,7 +81,8 @@ function isNameStartChar(char, cp = getCodePoint(char)) {
|
|
|
76
81
|
|| (cp >= 0xF8 && cp <= 0x2FF)
|
|
77
82
|
|| (cp >= 0x370 && cp <= 0x37D)
|
|
78
83
|
|| (cp >= 0x37F && cp <= 0x1FFF)
|
|
79
|
-
||
|
|
84
|
+
|| cp === 0x200C
|
|
85
|
+
|| cp === 0x200D
|
|
80
86
|
|| (cp >= 0x2070 && cp <= 0x218F)
|
|
81
87
|
|| (cp >= 0x2C00 && cp <= 0x2FEF)
|
|
82
88
|
|| (cp >= 0x3001 && cp <= 0xD7FF)
|
|
@@ -84,7 +90,6 @@ function isNameStartChar(char, cp = getCodePoint(char)) {
|
|
|
84
90
|
|| (cp >= 0xFDF0 && cp <= 0xFFFD)
|
|
85
91
|
|| (cp >= 0x10000 && cp <= 0xEFFFF);
|
|
86
92
|
}
|
|
87
|
-
exports.isNameStartChar = isNameStartChar;
|
|
88
93
|
/**
|
|
89
94
|
* Returns `true` if _char_ is a valid reference character (which may appear
|
|
90
95
|
* between `&` and `;` in a reference), `false` otherwise.
|
|
@@ -94,20 +99,18 @@ exports.isNameStartChar = isNameStartChar;
|
|
|
94
99
|
function isReferenceChar(char) {
|
|
95
100
|
return char === '#' || isNameChar(char);
|
|
96
101
|
}
|
|
97
|
-
exports.isReferenceChar = isReferenceChar;
|
|
98
102
|
/**
|
|
99
103
|
* Returns `true` if _char_ is an XML whitespace character, `false` otherwise.
|
|
100
104
|
*
|
|
101
105
|
* @see https://www.w3.org/TR/2008/REC-xml-20081126/#white
|
|
102
106
|
*/
|
|
103
107
|
function isWhitespace(char) {
|
|
104
|
-
let cp =
|
|
108
|
+
let cp = char.codePointAt(0);
|
|
105
109
|
return cp === 0x20
|
|
106
110
|
|| cp === 0x9
|
|
107
111
|
|| cp === 0xA
|
|
108
112
|
|| cp === 0xD;
|
|
109
113
|
}
|
|
110
|
-
exports.isWhitespace = isWhitespace;
|
|
111
114
|
/**
|
|
112
115
|
* Returns `true` if _codepoint_ is a valid XML `Char` code point, `false`
|
|
113
116
|
* otherwise.
|
|
@@ -115,19 +118,11 @@ exports.isWhitespace = isWhitespace;
|
|
|
115
118
|
* @see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-Char
|
|
116
119
|
*/
|
|
117
120
|
function isXmlCodePoint(cp) {
|
|
118
|
-
return cp
|
|
121
|
+
return (cp >= 0x20 && cp <= 0xD7FF)
|
|
119
122
|
|| cp === 0xA
|
|
123
|
+
|| cp === 0x9
|
|
120
124
|
|| cp === 0xD
|
|
121
|
-
|| (cp >= 0x20 && cp <= 0xD7FF)
|
|
122
125
|
|| (cp >= 0xE000 && cp <= 0xFFFD)
|
|
123
126
|
|| (cp >= 0x10000 && cp <= 0x10FFFF);
|
|
124
127
|
}
|
|
125
|
-
exports.isXmlCodePoint = isXmlCodePoint;
|
|
126
|
-
/**
|
|
127
|
-
* Returns the Unicode code point value of the given character, or `-1` if
|
|
128
|
-
* _char_ is empty.
|
|
129
|
-
*/
|
|
130
|
-
function getCodePoint(char) {
|
|
131
|
-
return char.codePointAt(0) || -1;
|
|
132
|
-
}
|
|
133
128
|
//# sourceMappingURL=syntax.js.map
|
package/dist/lib/syntax.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syntax.js","sourceRoot":"","sources":["../../src/lib/syntax.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"syntax.js","sourceRoot":"","sources":["../../src/lib/syntax.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rgrove/parse-xml",
|
|
3
|
-
"version": "4.1
|
|
3
|
+
"version": "4.2.1",
|
|
4
4
|
"description": "A fast, safe, compliant XML parser for Node.js and browsers.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"xml",
|
|
@@ -21,7 +21,6 @@
|
|
|
21
21
|
"engines": {
|
|
22
22
|
"node": ">=14.0.0"
|
|
23
23
|
},
|
|
24
|
-
"packageManager": "pnpm@7.26.1",
|
|
25
24
|
"files": [
|
|
26
25
|
"dist",
|
|
27
26
|
"!dist/tsconfig.tsbuildinfo",
|
|
@@ -32,35 +31,31 @@
|
|
|
32
31
|
"main": "./dist/index.js",
|
|
33
32
|
"browser": "./dist/browser.js",
|
|
34
33
|
"devDependencies": {
|
|
35
|
-
"@rgrove/eslint-config": "^5.
|
|
36
|
-
"@types/node": "^
|
|
37
|
-
"assert": "^2.
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"nyc": "^15.1.0",
|
|
34
|
+
"@rgrove/eslint-config": "^5.1.0",
|
|
35
|
+
"@types/node": "^22.7.9",
|
|
36
|
+
"assert": "^2.1.0",
|
|
37
|
+
"concurrently": "^9.0.1",
|
|
38
|
+
"esbuild": "^0.24.0",
|
|
39
|
+
"eslint": "^8.57.1",
|
|
40
|
+
"expect-type": "^1.1.0",
|
|
41
|
+
"mocha": "^10.7.3",
|
|
42
|
+
"nyc": "^17.1.0",
|
|
45
43
|
"path-browserify": "^1.0.1",
|
|
46
44
|
"process": "^0.11.10",
|
|
47
|
-
"typedoc": "^0.
|
|
48
|
-
"typescript": "
|
|
49
|
-
"webpack": "^5.75.0",
|
|
50
|
-
"webpack-cli": "^4.10.0",
|
|
51
|
-
"webpack-dev-server": "^4.11.1"
|
|
45
|
+
"typedoc": "^0.26.10",
|
|
46
|
+
"typescript": "5.6.3"
|
|
52
47
|
},
|
|
53
48
|
"scripts": {
|
|
54
49
|
"build": "pnpm run build:js && pnpm run build:bundle && pnpm run build:docs",
|
|
55
50
|
"build:bundle": "./scripts/esbuild.js",
|
|
56
51
|
"build:docs": "typedoc src/index.ts",
|
|
57
52
|
"build:js": "tsc",
|
|
58
|
-
"clean": "rm -rf .nyc_output coverage dist",
|
|
53
|
+
"clean": "rm -rf .nyc_output coverage dist docs tests/.build",
|
|
59
54
|
"coverage": "nyc --reporter html --report-dir coverage pnpm test && open coverage/index.html",
|
|
60
55
|
"lint": "pnpm run build:js && pnpm run lint:js",
|
|
61
56
|
"lint:js": "eslint .",
|
|
62
57
|
"test": "pnpm run build:js && nyc --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 mocha && pnpm run test:types",
|
|
63
|
-
"test:browser": "pnpm run build:js && pnpm run build:bundle &&
|
|
58
|
+
"test:browser": "pnpm run build:js && pnpm run build:bundle && scripts/test/browser.js",
|
|
64
59
|
"test:types": "pnpm run build:js && tsc --noEmit tests/types.expect.ts",
|
|
65
60
|
"test:watch": "pnpm run build:js && concurrently --kill-others-on-fail --names build,mocha 'pnpm run build:js --watch' 'mocha --watch'"
|
|
66
61
|
}
|
package/src/lib/Parser.ts
CHANGED
|
@@ -31,28 +31,17 @@ export class Parser {
|
|
|
31
31
|
*/
|
|
32
32
|
constructor(xml: string, options: ParserOptions = {}) {
|
|
33
33
|
let doc = this.document = new XmlDocument();
|
|
34
|
-
let scanner = this.scanner = new StringScanner(xml);
|
|
35
34
|
|
|
36
35
|
this.currentNode = doc;
|
|
37
36
|
this.options = options;
|
|
37
|
+
this.scanner = new StringScanner(xml);
|
|
38
38
|
|
|
39
39
|
if (this.options.includeOffsets) {
|
|
40
40
|
doc.start = 0;
|
|
41
41
|
doc.end = xml.length;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
this.consumeProlog();
|
|
46
|
-
|
|
47
|
-
if (!this.consumeElement()) {
|
|
48
|
-
throw this.error('Root element is missing or invalid');
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
while (this.consumeMisc()) {} // eslint-disable-line no-empty
|
|
52
|
-
|
|
53
|
-
if (!scanner.isEnd) {
|
|
54
|
-
throw this.error('Extra content at the end of the document');
|
|
55
|
-
}
|
|
44
|
+
this.parse();
|
|
56
45
|
}
|
|
57
46
|
|
|
58
47
|
/**
|
|
@@ -76,12 +65,19 @@ export class Parser {
|
|
|
76
65
|
/**
|
|
77
66
|
* Adds the given _text_ to the document, either by appending it to a
|
|
78
67
|
* preceding `XmlText` node (if possible) or by creating a new `XmlText` node.
|
|
68
|
+
*
|
|
69
|
+
* When _normalize_ is `true` (the default), line breaks in _text_ are
|
|
70
|
+
* normalized per section 2.11 of the XML spec. This must be `false` for text
|
|
71
|
+
* that comes from a character or entity reference, since references aren't
|
|
72
|
+
* subject to line break normalization.
|
|
79
73
|
*/
|
|
80
|
-
addText(text: string, charIndex: number) {
|
|
74
|
+
addText(text: string, charIndex: number, normalize = true) {
|
|
81
75
|
let { children } = this.currentNode;
|
|
82
76
|
let { length } = children;
|
|
83
77
|
|
|
84
|
-
|
|
78
|
+
if (normalize) {
|
|
79
|
+
text = normalizeLineBreaks(text);
|
|
80
|
+
}
|
|
85
81
|
|
|
86
82
|
if (length > 0) {
|
|
87
83
|
let prevNode = children[length - 1];
|
|
@@ -182,7 +178,7 @@ export class Parser {
|
|
|
182
178
|
: syntax.attValueCharSingleQuote;
|
|
183
179
|
|
|
184
180
|
matchLoop: while (!scanner.isEnd) {
|
|
185
|
-
chars = scanner.
|
|
181
|
+
chars = scanner.consumeUntilMatch(regex);
|
|
186
182
|
|
|
187
183
|
if (chars) {
|
|
188
184
|
this.validateChars(chars);
|
|
@@ -201,7 +197,7 @@ export class Parser {
|
|
|
201
197
|
case '<':
|
|
202
198
|
throw this.error('Unescaped `<` is not allowed in an attribute value');
|
|
203
199
|
|
|
204
|
-
|
|
200
|
+
default:
|
|
205
201
|
break matchLoop;
|
|
206
202
|
}
|
|
207
203
|
}
|
|
@@ -224,14 +220,14 @@ export class Parser {
|
|
|
224
220
|
let { scanner } = this;
|
|
225
221
|
let startIndex = scanner.charIndex;
|
|
226
222
|
|
|
227
|
-
if (!scanner.
|
|
223
|
+
if (!scanner.consumeString('<![CDATA[')) {
|
|
228
224
|
return false;
|
|
229
225
|
}
|
|
230
226
|
|
|
231
227
|
let text = scanner.consumeUntilString(']]>');
|
|
232
228
|
this.validateChars(text);
|
|
233
229
|
|
|
234
|
-
if (!scanner.
|
|
230
|
+
if (!scanner.consumeString(']]>')) {
|
|
235
231
|
throw this.error('Unclosed CDATA section');
|
|
236
232
|
}
|
|
237
233
|
|
|
@@ -274,14 +270,14 @@ export class Parser {
|
|
|
274
270
|
let { scanner } = this;
|
|
275
271
|
let startIndex = scanner.charIndex;
|
|
276
272
|
|
|
277
|
-
if (!scanner.
|
|
273
|
+
if (!scanner.consumeString('<!--')) {
|
|
278
274
|
return false;
|
|
279
275
|
}
|
|
280
276
|
|
|
281
277
|
let content = scanner.consumeUntilString('--');
|
|
282
278
|
this.validateChars(content);
|
|
283
279
|
|
|
284
|
-
if (!scanner.
|
|
280
|
+
if (!scanner.consumeString('-->')) {
|
|
285
281
|
if (scanner.peek(2) === '--') {
|
|
286
282
|
throw this.error("The string `--` isn't allowed inside a comment");
|
|
287
283
|
}
|
|
@@ -308,7 +304,7 @@ export class Parser {
|
|
|
308
304
|
let ref = this.consumeReference();
|
|
309
305
|
|
|
310
306
|
return ref
|
|
311
|
-
? this.addText(ref, startIndex)
|
|
307
|
+
? this.addText(ref, startIndex, false)
|
|
312
308
|
: false;
|
|
313
309
|
}
|
|
314
310
|
|
|
@@ -325,7 +321,7 @@ export class Parser {
|
|
|
325
321
|
let { scanner } = this;
|
|
326
322
|
let startIndex = scanner.charIndex;
|
|
327
323
|
|
|
328
|
-
if (!scanner.
|
|
324
|
+
if (!scanner.consumeString('<!DOCTYPE')) {
|
|
329
325
|
return false;
|
|
330
326
|
}
|
|
331
327
|
|
|
@@ -340,7 +336,7 @@ export class Parser {
|
|
|
340
336
|
let systemId;
|
|
341
337
|
|
|
342
338
|
if (this.consumeWhitespace()) {
|
|
343
|
-
if (scanner.
|
|
339
|
+
if (scanner.consumeString('PUBLIC')) {
|
|
344
340
|
publicId = this.consumeWhitespace()
|
|
345
341
|
&& this.consumePubidLiteral();
|
|
346
342
|
|
|
@@ -351,7 +347,7 @@ export class Parser {
|
|
|
351
347
|
this.consumeWhitespace();
|
|
352
348
|
}
|
|
353
349
|
|
|
354
|
-
if (publicId !== undefined || scanner.
|
|
350
|
+
if (publicId !== undefined || scanner.consumeString('SYSTEM')) {
|
|
355
351
|
this.consumeWhitespace();
|
|
356
352
|
systemId = this.consumeSystemLiteral();
|
|
357
353
|
|
|
@@ -365,19 +361,19 @@ export class Parser {
|
|
|
365
361
|
|
|
366
362
|
let internalSubset;
|
|
367
363
|
|
|
368
|
-
if (scanner.
|
|
364
|
+
if (scanner.consumeString('[')) {
|
|
369
365
|
// The internal subset may contain comments that contain `]` characters,
|
|
370
366
|
// so we can't use `consumeUntilString()` here.
|
|
371
367
|
internalSubset = scanner.consumeUntilMatch(/\][\x20\t\r\n]*>/);
|
|
372
368
|
|
|
373
|
-
if (!scanner.
|
|
369
|
+
if (!scanner.consumeString(']')) {
|
|
374
370
|
throw this.error('Unclosed internal subset');
|
|
375
371
|
}
|
|
376
372
|
|
|
377
373
|
this.consumeWhitespace();
|
|
378
374
|
}
|
|
379
375
|
|
|
380
|
-
if (!scanner.
|
|
376
|
+
if (!scanner.consumeString('>')) {
|
|
381
377
|
throw this.error('Unclosed doctype declaration');
|
|
382
378
|
}
|
|
383
379
|
|
|
@@ -396,7 +392,7 @@ export class Parser {
|
|
|
396
392
|
let { scanner } = this;
|
|
397
393
|
let startIndex = scanner.charIndex;
|
|
398
394
|
|
|
399
|
-
if (!scanner.
|
|
395
|
+
if (!scanner.consumeString('<')) {
|
|
400
396
|
return false;
|
|
401
397
|
}
|
|
402
398
|
|
|
@@ -408,13 +404,13 @@ export class Parser {
|
|
|
408
404
|
}
|
|
409
405
|
|
|
410
406
|
let attributes = this.consumeAttributes();
|
|
411
|
-
let isEmpty = !!scanner.
|
|
407
|
+
let isEmpty = !!scanner.consumeString('/>');
|
|
412
408
|
let element = new XmlElement(name, attributes);
|
|
413
409
|
|
|
414
410
|
element.parent = this.currentNode;
|
|
415
411
|
|
|
416
412
|
if (!isEmpty) {
|
|
417
|
-
if (!scanner.
|
|
413
|
+
if (!scanner.consumeString('>')) {
|
|
418
414
|
throw this.error(`Unclosed start tag for element \`${name}\``);
|
|
419
415
|
}
|
|
420
416
|
|
|
@@ -433,7 +429,7 @@ export class Parser {
|
|
|
433
429
|
let endTagMark = scanner.charIndex;
|
|
434
430
|
let endTagName;
|
|
435
431
|
|
|
436
|
-
if (!scanner.
|
|
432
|
+
if (!scanner.consumeString('</')
|
|
437
433
|
|| !(endTagName = this.consumeName())
|
|
438
434
|
|| endTagName !== name) {
|
|
439
435
|
|
|
@@ -443,7 +439,7 @@ export class Parser {
|
|
|
443
439
|
|
|
444
440
|
this.consumeWhitespace();
|
|
445
441
|
|
|
446
|
-
if (!scanner.
|
|
442
|
+
if (!scanner.consumeString('>')) {
|
|
447
443
|
throw this.error(`Unclosed end tag for element ${name}`);
|
|
448
444
|
}
|
|
449
445
|
|
|
@@ -462,7 +458,7 @@ export class Parser {
|
|
|
462
458
|
consumeEqual(): boolean {
|
|
463
459
|
this.consumeWhitespace();
|
|
464
460
|
|
|
465
|
-
if (this.scanner.
|
|
461
|
+
if (this.scanner.consumeString('=')) {
|
|
466
462
|
this.consumeWhitespace();
|
|
467
463
|
return true;
|
|
468
464
|
}
|
|
@@ -504,7 +500,7 @@ export class Parser {
|
|
|
504
500
|
let { scanner } = this;
|
|
505
501
|
let startIndex = scanner.charIndex;
|
|
506
502
|
|
|
507
|
-
if (!scanner.
|
|
503
|
+
if (!scanner.consumeString('<?')) {
|
|
508
504
|
return false;
|
|
509
505
|
}
|
|
510
506
|
|
|
@@ -520,7 +516,7 @@ export class Parser {
|
|
|
520
516
|
}
|
|
521
517
|
|
|
522
518
|
if (!this.consumeWhitespace()) {
|
|
523
|
-
if (scanner.
|
|
519
|
+
if (scanner.consumeString('?>')) {
|
|
524
520
|
return this.addNode(new XmlProcessingInstruction(name), startIndex);
|
|
525
521
|
}
|
|
526
522
|
|
|
@@ -530,7 +526,7 @@ export class Parser {
|
|
|
530
526
|
let content = scanner.consumeUntilString('?>');
|
|
531
527
|
this.validateChars(content);
|
|
532
528
|
|
|
533
|
-
if (!scanner.
|
|
529
|
+
if (!scanner.consumeString('?>')) {
|
|
534
530
|
throw this.error('Unterminated processing instruction');
|
|
535
531
|
}
|
|
536
532
|
|
|
@@ -595,7 +591,7 @@ export class Parser {
|
|
|
595
591
|
consumeReference(): string | false {
|
|
596
592
|
let { scanner } = this;
|
|
597
593
|
|
|
598
|
-
if (!scanner.
|
|
594
|
+
if (!scanner.consumeString('&')) {
|
|
599
595
|
return false;
|
|
600
596
|
}
|
|
601
597
|
|
|
@@ -675,7 +671,7 @@ export class Parser {
|
|
|
675
671
|
*/
|
|
676
672
|
consumeSystemLiteral(): string | false {
|
|
677
673
|
let { scanner } = this;
|
|
678
|
-
let quote = scanner.
|
|
674
|
+
let quote = scanner.consumeString('"') || scanner.consumeString("'");
|
|
679
675
|
|
|
680
676
|
if (!quote) {
|
|
681
677
|
return false;
|
|
@@ -684,7 +680,7 @@ export class Parser {
|
|
|
684
680
|
let value = scanner.consumeUntilString(quote);
|
|
685
681
|
this.validateChars(value);
|
|
686
682
|
|
|
687
|
-
if (!scanner.
|
|
683
|
+
if (!scanner.consumeString(quote)) {
|
|
688
684
|
throw this.error('Missing end quote');
|
|
689
685
|
}
|
|
690
686
|
|
|
@@ -711,7 +707,7 @@ export class Parser {
|
|
|
711
707
|
let { scanner } = this;
|
|
712
708
|
let startIndex = scanner.charIndex;
|
|
713
709
|
|
|
714
|
-
if (!scanner.
|
|
710
|
+
if (!scanner.consumeString('<?xml')) {
|
|
715
711
|
return false;
|
|
716
712
|
}
|
|
717
713
|
|
|
@@ -719,7 +715,7 @@ export class Parser {
|
|
|
719
715
|
throw this.error('Invalid XML declaration');
|
|
720
716
|
}
|
|
721
717
|
|
|
722
|
-
let version = !!scanner.
|
|
718
|
+
let version = !!scanner.consumeString('version')
|
|
723
719
|
&& this.consumeEqual()
|
|
724
720
|
&& this.consumeSystemLiteral();
|
|
725
721
|
|
|
@@ -733,15 +729,18 @@ export class Parser {
|
|
|
733
729
|
let standalone;
|
|
734
730
|
|
|
735
731
|
if (this.consumeWhitespace()) {
|
|
736
|
-
encoding = !!scanner.
|
|
732
|
+
encoding = !!scanner.consumeString('encoding')
|
|
737
733
|
&& this.consumeEqual()
|
|
738
734
|
&& this.consumeSystemLiteral();
|
|
739
735
|
|
|
740
736
|
if (encoding) {
|
|
737
|
+
if (!/^[A-Za-z][\w.-]*$/.test(encoding)) {
|
|
738
|
+
throw this.error('Invalid character in encoding name');
|
|
739
|
+
}
|
|
741
740
|
this.consumeWhitespace();
|
|
742
741
|
}
|
|
743
742
|
|
|
744
|
-
standalone = !!scanner.
|
|
743
|
+
standalone = !!scanner.consumeString('standalone')
|
|
745
744
|
&& this.consumeEqual()
|
|
746
745
|
&& this.consumeSystemLiteral();
|
|
747
746
|
|
|
@@ -754,7 +753,7 @@ export class Parser {
|
|
|
754
753
|
}
|
|
755
754
|
}
|
|
756
755
|
|
|
757
|
-
if (!scanner.
|
|
756
|
+
if (!scanner.consumeString('?>')) {
|
|
758
757
|
throw this.error('Invalid or unclosed XML declaration');
|
|
759
758
|
}
|
|
760
759
|
|
|
@@ -775,6 +774,24 @@ export class Parser {
|
|
|
775
774
|
return new XmlError(message, scanner.charIndex, scanner.string);
|
|
776
775
|
}
|
|
777
776
|
|
|
777
|
+
/**
|
|
778
|
+
* Parses the XML input.
|
|
779
|
+
*/
|
|
780
|
+
parse() {
|
|
781
|
+
this.scanner.consumeString('\uFEFF'); // byte order mark
|
|
782
|
+
this.consumeProlog();
|
|
783
|
+
|
|
784
|
+
if (!this.consumeElement()) {
|
|
785
|
+
throw this.error('Root element is missing or invalid');
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
while (this.consumeMisc()) {} // eslint-disable-line no-empty
|
|
789
|
+
|
|
790
|
+
if (!this.scanner.isEnd) {
|
|
791
|
+
throw this.error('Extra content at the end of the document');
|
|
792
|
+
}
|
|
793
|
+
}
|
|
794
|
+
|
|
778
795
|
/**
|
|
779
796
|
* Throws an invalid character error if any character in the given _string_
|
|
780
797
|
* isn't a valid XML character.
|