xml-tokenizer 0.0.8 → 0.0.10
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 +51 -7
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/selector/TokenSelector.js +1 -1
- package/dist/cjs/selector/select.js +1 -1
- package/dist/cjs/tokenizer/tokenize.js +1 -1
- package/dist/cjs/xml-to-object.js +1 -1
- package/dist/cjs/xml-to-simplified-object.js +1 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/selector/TokenSelector.js +1 -1
- package/dist/esm/selector/select.js +1 -1
- package/dist/esm/tokenizer/tokenize.js +1 -1
- package/dist/esm/xml-to-object.js +1 -1
- package/dist/esm/xml-to-simplified-object.js +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/selector/TokenSelector.d.ts +2 -3
- package/dist/types/selector/TokenSelector.d.ts.map +1 -1
- package/dist/types/selector/select.d.ts +2 -3
- package/dist/types/selector/select.d.ts.map +1 -1
- package/dist/types/selector/types.d.ts +7 -0
- package/dist/types/selector/types.d.ts.map +1 -1
- package/dist/types/tokenizer/XmlStream.d.ts.map +1 -1
- package/dist/types/tokenizer/tokenize.d.ts.map +1 -1
- package/dist/types/xml-to-object.d.ts +12 -5
- package/dist/types/xml-to-object.d.ts.map +1 -1
- package/dist/types/xml-to-simplified-object.d.ts +13 -0
- package/dist/types/xml-to-simplified-object.d.ts.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -20,10 +20,11 @@
|
|
|
20
20
|
> Status: Experimental
|
|
21
21
|
|
|
22
22
|
`xml-tokenizer` is a straightforward and typesafe XML tokenizer that streams tokens through a callback mechanism.
|
|
23
|
-
The implementation is based on the [roxmltree](https://github.com/RazrFalcon/roxmltree) [`tokenizer.rs`](https://github.com/RazrFalcon/roxmltree/blob/master/src/tokenizer.rs). See the [FAQ](#-faq) why we did not embed the [roxmltree](https://github.com/RazrFalcon/roxmltree) crate
|
|
23
|
+
The implementation is based on the [roxmltree](https://github.com/RazrFalcon/roxmltree) [`tokenizer.rs`](https://github.com/RazrFalcon/roxmltree/blob/master/src/tokenizer.rs). See the [FAQ](#-faq) why we did not embed the [roxmltree](https://github.com/RazrFalcon/roxmltree) crate as WASM.
|
|
24
24
|
|
|
25
|
-
- **
|
|
25
|
+
- **XML Token Stream**: Processes XML documents as a stream, emitting tokens on the fly similar to the [`SAX`](https://www.baeldung.com/java-sax-parser) approach
|
|
26
26
|
- **Wide Range of Tokens**: Handles processing instructions, comments, entity declarations, element starts/ends, attributes, text, and CDATA sections
|
|
27
|
+
- **Validate XML**: Validates XML while processing which makes it slower than [`txml`](https://github.com/TobiasNickel/tXml) but its still twice as fast as [`fast-xml-parser`](https://github.com/NaturalIntelligence/fast-xml-parser)
|
|
27
28
|
- **Typesafe**: Build with TypeScript for strong type safety
|
|
28
29
|
|
|
29
30
|
### 📚 Examples
|
|
@@ -34,7 +35,7 @@ The implementation is based on the [roxmltree](https://github.com/RazrFalcon/rox
|
|
|
34
35
|
|
|
35
36
|
Create a typesafe, straightforward, and lightweight [XML](https://de.wikipedia.org/wiki/Extensible_Markup_Language) parser. Many existing parsers either lack TypeScript support, aren't actively maintained, or exceed 20kB gzipped.
|
|
36
37
|
|
|
37
|
-
My goal was to develop an efficient & flexible alternative by porting [roxmltree](https://github.com/RazrFalcon/roxmltree) to TypeScript or integrating it via WASM. While it functions well and is quite
|
|
38
|
+
My goal was to develop an efficient & flexible alternative by porting [roxmltree](https://github.com/RazrFalcon/roxmltree) to TypeScript or integrating it via WASM. While it functions well and is quite versatile due to its streaming approach, it's not as fast as I hoped.
|
|
38
39
|
|
|
39
40
|
### ⚖️ Alternatives
|
|
40
41
|
|
|
@@ -45,13 +46,16 @@ My goal was to develop an efficient & flexible alternative by porting [roxmltree
|
|
|
45
46
|
## 📖 Usage
|
|
46
47
|
|
|
47
48
|
```ts
|
|
48
|
-
import { xmlToObject,
|
|
49
|
+
import { xmlToObject, xmlToSimplifiedObject, tokenize, select } from 'xml-tokenizer';
|
|
49
50
|
|
|
50
|
-
// Parse XML to Javascript object (uses `
|
|
51
|
+
// Parse XML to Javascript object without information lost (uses `tokenize` under the hood)
|
|
51
52
|
const xmlObject = xmlToObject("<p>Hello World</p>");
|
|
52
53
|
|
|
54
|
+
// Or, parse XML to easy to queryable Javascript object
|
|
55
|
+
const simplifiedXmlObject = xmlToSimplifiedObject("<p>Hello World</p>");
|
|
56
|
+
|
|
53
57
|
// Or, parse XML to a stream of tokens
|
|
54
|
-
|
|
58
|
+
tokenize("<p>Hello World</p>", false, (token) => {
|
|
55
59
|
switch (token.type) {
|
|
56
60
|
case 'ElementStart':
|
|
57
61
|
console.log('Start of element:', token);
|
|
@@ -64,6 +68,16 @@ parseString("<p>Hello World</p>", false, (token) => {
|
|
|
64
68
|
console.log('Token:', token);
|
|
65
69
|
}
|
|
66
70
|
});
|
|
71
|
+
|
|
72
|
+
// Or, stream only a selection of tokens
|
|
73
|
+
select(xml, [
|
|
74
|
+
[
|
|
75
|
+
{ axis: 'child', local: 'bookstore' },
|
|
76
|
+
{ axis: 'child', local: 'book', attributes: [{ local: 'category', value: 'COOKING' }] }
|
|
77
|
+
]
|
|
78
|
+
], (selectedToken) => {
|
|
79
|
+
// Handle selected token
|
|
80
|
+
});
|
|
67
81
|
```
|
|
68
82
|
|
|
69
83
|
### Token Types
|
|
@@ -150,4 +164,34 @@ Decoding `Uint8Array` snippets to JavaScript strings is frequently necessary, ne
|
|
|
150
164
|
| roxmltree:text | 67.12 | 14.33 | 83.29 | 80.08 | ±1.27% |
|
|
151
165
|
| roxmltree:byte | 12.48 | 78.65 | 16.45 | 14.90 | ±1.15% |
|
|
152
166
|
|
|
153
|
-
The `roxmltree` package with the Byte-Based implementation can be found in the `_deprecated` folder ([`packages/_deprecated/roxmltree_byte-only`](https://github.com/builder-group/community/tree/develop/packages/_deprecated/roxmltree_byte-only)).
|
|
167
|
+
The `roxmltree` package with the Byte-Based implementation can be found in the `_deprecated` folder ([`packages/_deprecated/roxmltree_byte-only`](https://github.com/builder-group/community/tree/develop/packages/_deprecated/roxmltree_byte-only)).
|
|
168
|
+
|
|
169
|
+
### Why not use a Generator?
|
|
170
|
+
|
|
171
|
+
While generators can improve developer experience, they introduce significant performance overhead. Our benchmarks show that using a generator dramatically increases the execution time compared to the callback approach. Given our focus on performance, we chose to maintain the callback implementation.
|
|
172
|
+
|
|
173
|
+
See [Generator vs Iterator vs Callback](https://observablehq.com/@domoritz/yield-vs-iterator-vs-callback) for more details.
|
|
174
|
+
|
|
175
|
+
#### Benchmark with Generator
|
|
176
|
+
|
|
177
|
+
```
|
|
178
|
+
[xml-tokenizer] Total Time: 5345.0000 ms | Average Time per Run: 53.4500 ms | Median Time: 53.0000 ms | Runs: 100
|
|
179
|
+
[txml] Total Time: 395.0000 ms | Average Time per Run: 3.9500 ms | Median Time: 4.0000 ms | Runs: 100
|
|
180
|
+
[fast-xml-parser] Total Time: 1290.0000 ms | Average Time per Run: 12.9000 ms | Median Time: 13.0000 ms | Runs: 100
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
#### Benchmark with Callback
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
[xml-tokenizer] Total Time: 662.0000 ms | Average Time per Run: 6.6200 ms | Median Time: 6.0000 ms | Runs: 100
|
|
187
|
+
[txml] Total Time: 394.0000 ms | Average Time per Run: 3.9400 ms | Median Time: 4.0000 ms | Runs: 100
|
|
188
|
+
[fast-xml-parser] Total Time: 1308.0000 ms | Average Time per Run: 13.0800 ms | Median Time: 13.0000 ms | Runs: 100
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
[Benchmark implementation in Vanilla Profiler](https://github.com/builder-group/monorepo/tree/develop/examples/xml-tokenizer/vanilla/profiler)
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
## 💡 Resources
|
|
195
|
+
- [How I developed the fastest XML parser](https://tnickel.de/2020/08/30/2020-08-how-the-fastest-xml-parser-is-build/)
|
|
196
|
+
- [txml](https://github.com/TobiasNickel/tXml)
|
|
197
|
+
- [roxmltree](https://github.com/RazrFalcon/roxmltree)
|
package/dist/cjs/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var A=require("./selector/select.js"),o=require("./selector/TokenSelector.js"),r=require("./selector/TokenSelectState.js"),T=require("./selector/TokenSelectStateMachine.js"),R=require("./token-to-xml.js"),e=require("./tokenizer/ascii-constants.js"),S=require("./tokenizer/tokenize.js"),E=require("./tokenizer/utils.js"),l=require("./tokenizer/XmlError.js"),O=require("./tokenizer/XmlStream.js"),a=require("./tokens-to-xml.js"),t=require("./xml-to-object.js"),i=require("./xml-to-simplified-object.js");exports.select=A.select,exports.TokenSelector=o.TokenSelector,exports.EToCacheNodeProps=r.EToCacheNodeProps,exports.ETokenMatchCriteria=r.ETokenMatchCriteria,exports.TokenSelectState=r.TokenSelectState,exports.TokenSelectStateMachine=T.TokenSelectStateMachine,exports.tokenToXml=R.tokenToXml,exports.AMPERSAND=e.AMPERSAND,exports.CARRIAGE_RETURN=e.CARRIAGE_RETURN,exports.COLON=e.COLON,exports.DOUBLE_QUOTE=e.DOUBLE_QUOTE,exports.EQUALS=e.EQUALS,exports.EXCLAMATION_MARK=e.EXCLAMATION_MARK,exports.GREATER_THAN=e.GREATER_THAN,exports.HASH=e.HASH,exports.HORIZONTAL_TAB=e.HORIZONTAL_TAB,exports.HYPHEN=e.HYPHEN,exports.LESS_THAN=e.LESS_THAN,exports.LINE_FEED=e.LINE_FEED,exports.LOWERCASE_A=e.LOWERCASE_A,exports.LOWERCASE_F=e.LOWERCASE_F,exports.LOWERCASE_X=e.LOWERCASE_X,exports.LOWERCASE_Z=e.LOWERCASE_Z,exports.NINE=e.NINE,exports.OPEN_BRACKET=e.OPEN_BRACKET,exports.PERCENT=e.PERCENT,exports.PERIOD=e.PERIOD,exports.QUESTION_MARK=e.QUESTION_MARK,exports.SEMICOLON=e.SEMICOLON,exports.SINGLE_QUOTE=e.SINGLE_QUOTE,exports.SLASH=e.SLASH,exports.SPACE=e.SPACE,exports.UNDERSCORE=e.UNDERSCORE,exports.UPPERCASE_A=e.UPPERCASE_A,exports.UPPERCASE_F=e.UPPERCASE_F,exports.UPPERCASE_P=e.UPPERCASE_P,exports.UPPERCASE_S=e.UPPERCASE_S,exports.UPPERCASE_Z=e.UPPERCASE_Z,exports.ZERO=e.ZERO,exports.tokenize=S.tokenize,exports.tokenizeXmlStream=S.tokenizeXmlStream,exports.isAsciiDigit=E.isAsciiDigit,exports.isXmlChar=E.isXmlChar,exports.isXmlName=E.isXmlName,exports.isXmlNameByte=E.isXmlNameByte,exports.isXmlNameStart=E.isXmlNameStart,exports.isXmlSpaceByte=E.isXmlSpaceByte,exports.XmlError=l.XmlError,exports.XmlStream=O.XmlStream,exports.tokensToXml=a.tokensToXml,exports.processTokenForObject=t.processTokenForObject,exports.xmlToObject=t.xmlToObject,exports.processTokenForSimplifiedObject=i.processTokenForSimplifiedObject,exports.xmlToSimplifiedObject=i.xmlToSimplifiedObject;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var a=require("./TokenSelectState.js"),l=require("./TokenSelectStateMachine.js"),u=Object.defineProperty,S=(r,t,
|
|
1
|
+
"use strict";var a=require("./TokenSelectState.js"),l=require("./TokenSelectStateMachine.js"),u=Object.defineProperty,S=(r,t,e)=>t in r?u(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e,s=(r,t,e)=>S(r,typeof t!="symbol"?t+"":t,e);class p{constructor(t){s(this,"_currentDepth",0),s(this,"_tspStateMachines"),s(this,"_isRecording",!1),this._tspStateMachines=t.map(e=>new l.TokenSelectStateMachine(e))}pipeToken(t,e){let n=!1,i=!1;switch(t.type){case"ElementStart":n=this.handleElementStart(t);break;case"Attribute":n=this.handleAttribute(t);break;case"Text":n=this.handleText(t);break;case"ElementEnd":{i=this.handleElementEnd(t);break}}n&&!this._isRecording&&(this._isRecording=!0,e({type:"SelectionStart"}));for(const c of this._tspStateMachines){c.record(t);const h=c.takeRecordedTokens();h!=null&&h.forEach(o=>{e(o)})}this._isRecording&&e(t),i&&(e({type:"SelectionEnd"}),this._isRecording=!1)}handleElementStart(t){this._currentDepth+=1;let e=!1;for(const n of this._tspStateMachines){if(n.resetCurrentStateCache(),n.isFinalState())continue;const i=n.getNextState();i==null||!(i.matchCriteria&a.ETokenMatchCriteria.Name)||n.transitionIfNameMatch(t.local,t.prefix,this._currentDepth)&&n.isFinalState()&&(e=!0)}return e}handleAttribute(t){let e=!1;for(const n of this._tspStateMachines){if(n.isFinalState())continue;const i=n.getNextState();i==null||!(i.matchCriteria&a.ETokenMatchCriteria.Attributes)||n.transitionIfAttributesMatch(t.local,t.prefix,t.value,this._currentDepth)&&n.isFinalState()&&(e=!0)}return e}handleText(t){let e=!1;for(const n of this._tspStateMachines){if(n.isFinalState())continue;const i=n.getNextState();i==null||!(i.matchCriteria&a.ETokenMatchCriteria.Text)||n.transitionIfTextMatch(t.text,this._currentDepth)&&n.isFinalState()&&(e=!0)}return e}handleElementEnd(t){if(t.end.type==="Close"||t.end.type==="Empty"){this._currentDepth-=1;let e=!1;for(const n of this._tspStateMachines){const i=n.getCurrentState();i!=null&&(i.enteredDepth!=null&&this._currentDepth<i.enteredDepth&&n.transitionBack(this._currentDepth),e=e||n.isFinalState())}return!e}return!1}}exports.TokenSelector=p;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var i=require("../tokenizer/tokenize.js"),k=require("./TokenSelector.js");function
|
|
1
|
+
"use strict";var i=require("../tokenizer/tokenize.js"),k=require("./TokenSelector.js");function l(e,t,n){const o=new k.TokenSelector(t);i.tokenize(e,!1,r=>{o.pipeToken(r,c=>{n(c)})})}exports.select=l;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var r=require("./ascii-constants.js"),i=require("./XmlError.js"),
|
|
1
|
+
"use strict";var r=require("./ascii-constants.js"),i=require("./XmlError.js"),N=require("./XmlStream.js");const R="\uFEFF",g="<?xml ",S="?>",X="<!ENTITY",I="<!ELEMENT",_="<!ATTLIST",F="<!NOTATION",H="<!DOCTYPE",C="<?",k="?>",u="<!--",U="-->",L="<![CDATA[",E="]]>",G="NDATA",w="PUBLIC",Q="SYSTEM",D="version",O="encoding",b="standalone";function B(t,n,s){A(new N.XmlStream(t),n,s)}function A(t,n,s){if(t.startsWith(R)&&t.advance(1),t.startsWith(g)&&M(t),h(t,s),t.skipSpaces(),t.startsWith(H)){if(!n)throw new i.XmlError({type:"DtdDetected"});q(t,s),h(t,s)}if(t.skipSpaces(),!t.atEnd()&&t.currCodeUnit()===r.LESS_THAN&&W(t,s),h(t,s),!t.atEnd())throw new i.XmlError({type:"UnknownToken",message:"Not at end"},t.genTextPos())}function h(t,n){for(;!t.atEnd();)if(t.skipSpaces(),t.startsWith(u))f(t,n);else if(t.startsWith(C))T(t,n);else break}function M(t){function n(s){if(s.startsWithSpace())s.skipSpaces();else if(!s.startsWith(S)&&!s.atEnd())throw new i.XmlError({type:"InvalidChar",expected:"a whitespace",actual:s.currCodeUnitUnchecked()},s.genTextPos())}if(t.advance(5),n(t),!t.startsWith(D))throw new i.XmlError({type:"InvalidString",expected:"version"},t.genTextPos());m(t),n(t),t.startsWith(O)&&(m(t),n(t)),t.startsWith(b)&&m(t),t.skipSpaces(),t.skipString(S)}function f(t,n){const s=t.getPos();t.advance(4);const e=t.consumeCharsWhile((o,a)=>!(a==="-"&&o.startsWith(U)));if(t.skipString(U),e.includes("--")||e.endsWith("-"))throw new i.XmlError({type:"InvalidComment"},t.genTextPosFrom(s));n({type:"Comment",text:e,range:t.rangeFrom(s)})}function T(t,n){if(t.startsWith(g))throw new i.XmlError({type:"UnexpectedDeclaration"},t.genTextPos());const s=t.getPos();t.advance(2);const e=t.consumeName();t.skipSpaces();const o=t.consumeCharsWhile((a,c)=>!(c==="?"&&a.startsWith(k)));t.skipString(k),n({type:"ProcessingInstruction",target:e,content:o.length===0?void 0:o,range:t.rangeFrom(s)})}function q(t,n){const s=t.getPos();if(z(t),t.skipSpaces(),t.currCodeUnit()===r.GREATER_THAN){t.advance(1);return}for(t.advance(1);!t.atEnd();)if(t.skipSpaces(),t.startsWith(X))Y(t,n);else if(t.startsWith(u))f(t,n);else if(t.startsWith(C))T(t,n);else if(t.startsWith("]"))if(t.advance(1),t.skipSpaces(),t.currCodeUnit()===r.GREATER_THAN){t.advance(1);break}else throw new i.XmlError({type:"InvalidChar",expected:"'>'",actual:t.currCodeUnitUnchecked()},t.genTextPos());else if(t.startsWith(I)||t.startsWith(_)||t.startsWith(F))try{j(t)}catch(e){throw new i.XmlError({type:"UnknownToken",message:"Failed to consume declaration"},t.genTextPosFrom(s))}else throw new i.XmlError({type:"UnknownToken",message:"Failed to parse doctype"},t.genTextPos())}function z(t){t.advance(9),t.consumeSpaces(),t.skipName(),t.skipSpaces(),P(t),t.skipSpaces();const n=t.currCodeUnit();if(n!==r.OPEN_BRACKET&&n!==r.GREATER_THAN)throw new i.XmlError({type:"InvalidChar",expected:"'[' or '>'",actual:n},t.genTextPos())}function P(t){if(t.startsWith(Q)||t.startsWith(w)){const n=t.getPos();t.advance(6);const s=t.sliceBack(n);t.consumeSpaces();const e=t.consumeQuote();if(t.consumeCodeUnitsWhile(o=>o!==e),t.consumeCodeUnit(e),s===w){t.consumeSpaces();const o=t.consumeQuote();t.consumeCodeUnitsWhile(a=>a!==o),t.consumeCodeUnit(o)}return!0}return!1}function Y(t,n){t.advance(8),t.consumeSpaces();const s=!t.tryConsumeCodeUnit(r.PERCENT);s||t.consumeSpaces();const e=t.consumeName();t.consumeSpaces();const o=K(t,s);o!==null&&n({type:"EntityDeclaration",name:e,definition:o}),t.skipSpaces(),t.consumeCodeUnit(r.GREATER_THAN)}function K(t,n){const s=t.currCodeUnit();if(s===r.DOUBLE_QUOTE||s===r.SINGLE_QUOTE){const e=t.consumeQuote(),o=t.getPos();t.skipCodeUnitsWhile(c=>c!==e);const a=t.sliceBack(o);return t.consumeCodeUnit(e),a}else if(s===r.UPPERCASE_S||s===r.UPPERCASE_P){if(P(t))return n&&(t.skipSpaces(),t.startsWith(G)&&(t.advance(5),t.consumeSpaces(),t.skipName())),null;throw new i.XmlError({type:"InvalidExternalID"},t.genTextPos())}else throw new i.XmlError({type:"InvalidChar",expected:"a quote, SYSTEM or PUBLIC",actual:s},t.genTextPos())}function j(t){t.skipCodeUnitsWhile(n=>n!==r.GREATER_THAN),t.consumeCodeUnit(r.GREATER_THAN)}function W(t,n){const s=t.getPos();t.advance(1);const[e,o]=t.consumeQName();n({type:"ElementStart",prefix:e,local:o,start:s});let a=!1;for(;!t.atEnd();){const c=t.startsWithSpace();t.skipSpaces();const d=t.getPos(),l=t.currCodeUnit();if(l===r.SLASH){t.advance(1),t.consumeCodeUnit(r.GREATER_THAN);const p=t.rangeFrom(d);n({type:"ElementEnd",end:{type:"Empty"},range:p});break}else if(l===r.GREATER_THAN){t.advance(1);const p=t.rangeFrom(d);n({type:"ElementEnd",end:{type:"Open"},range:p}),a=!0;break}else{if(!c)throw new i.XmlError({type:"InvalidChar",expected:"a whitespace",actual:t.currCodeUnitUnchecked()},t.genTextPos());const[p,y,v]=m(t),x=t.getPos();n({type:"Attribute",range:{start:d,end:x},prefix:p,local:y,value:v})}}a&&J(t,n)}function m(t){const[n,s]=t.consumeQName();let e;const o=t.getPos();if(t.skipSpaces(),t.tryConsumeCodeUnit(r.EQUALS)){t.skipSpaces();const a=t.consumeQuote(),c=String.fromCharCode(a);e=t.consumeCharsWhile((d,l)=>l!==c&&l!=="<"),t.consumeCodeUnit(a)}else t.goTo(o),e="true";return[n,s,e]}function J(t,n){for(;!t.atEnd();)if(t.currCodeUnit()===r.LESS_THAN){const s=t.nextCodeUnit();if(s===r.EXCLAMATION_MARK)if(t.startsWith(u))f(t,n);else if(t.startsWith(L))V(t,n);else throw new i.XmlError({type:"UnknownToken",message:"Failed to parse content"},t.genTextPos());else if(s===r.QUESTION_MARK)T(t,n);else if(s===r.SLASH){Z(t,n);break}else W(t,n)}else $(t,n)}function V(t,n){const s=t.getPos();t.advance(9);const e=t.consumeCharsWhile((a,c)=>!(c==="]"&&a.startsWith(E)));t.skipString(E);const o=t.rangeFrom(s);n({type:"Cdata",text:e,range:o})}function Z(t,n){const s=t.getPos();t.advance(2);const[e,o]=t.consumeQName();t.skipSpaces(),t.consumeCodeUnit(r.GREATER_THAN);const a=t.rangeFrom(s);n({type:"ElementEnd",end:{type:"Close",prefix:e,local:o},range:a})}function $(t,n){const s=t.getPos(),e=t.consumeCharsWhile((o,a)=>a!=="<");if(e.includes(E))throw new i.XmlError({type:"InvalidCharacterData"},t.genTextPos());n({type:"Text",text:e,range:t.rangeFrom(s)})}exports.tokenize=B,exports.tokenizeXmlStream=A;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var r=require("./tokenizer/tokenize.js");function s(t,o=!1){const e={local:"root",attributes:[],content:[]},n=[e];return r.tokenize(t,o,l=>{c(l,n)}),e.content[0]}function c(t,o){switch(t.type){case"ElementStart":{const e={local:t.local,prefix:t.prefix.length>0?t.prefix:void 0,attributes:[],content:[]},n=o[o.length-1];n!=null&&n.content.push(e),o.push(e);break}case"ElementEnd":{(t.end.type==="Close"||t.end.type==="Empty")&&o.pop();break}case"Attribute":{const e=o[o.length-1];e!=null&&e.attributes.push({local:t.local,prefix:t.prefix.length>0?t.prefix:void 0,value:t.value});break}case"Text":case"Cdata":{const e=o[o.length-1];e!=null&&t.text.trim().length>0&&e.content.push(t.text);break}}}exports.processTokenForObject=c,exports.xmlToObject=s;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var o=require("./get-q-name.js"),a=require("./tokenizer/tokenize.js");function s(i,l=!1){const e={},t=[e];return a.tokenize(i,l,c=>{r(c,t)}),e}function r(i,l){switch(i.type){case"ElementStart":{const e=o.getQName(i.local,i.prefix),t=`_${e}`,c={},n=l[l.length-1];n!=null&&(n.content!=null?(c.tag=e,n.content.push(c)):n.text!=null?(c.tag=e,n.content=[n.text,c],delete n.text):n[t]==null?n[t]=c:Array.isArray(n[t])?n[t].push(c):n[t]=[n[t],c]),l.push(c);break}case"ElementEnd":{(i.end.type==="Close"||i.end.type==="Empty")&&l.pop();break}case"Attribute":{const e=l[l.length-1];if(e!=null){const t=o.getQName(i.local,i.prefix);e.attributes!=null?e.attributes[t]=i.value:e.attributes={[t]:i.value}}break}case"Text":case"Cdata":{const e=l[l.length-1];if(e!=null){const t=i.text.trim();t.length>0&&(e.content!=null?e.content.push(t):e.text!=null?(e.content=[e.text,t],delete e.text):e.text=t)}break}}}exports.processTokenForSimplifiedObject=r,exports.xmlToSimplifiedObject=s;
|
package/dist/esm/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{select as
|
|
1
|
+
import{select as E}from"./selector/select.js";import{TokenSelector as t}from"./selector/TokenSelector.js";import{EToCacheNodeProps as m,ETokenMatchCriteria as A,TokenSelectState as R}from"./selector/TokenSelectState.js";import{TokenSelectStateMachine as T}from"./selector/TokenSelectStateMachine.js";import{tokenToXml as N}from"./token-to-xml.js";import{AMPERSAND as p,CARRIAGE_RETURN as _,COLON as l,DOUBLE_QUOTE as P,EQUALS as c,EXCLAMATION_MARK as f,GREATER_THAN as x,HASH as a,HORIZONTAL_TAB as s,HYPHEN as L,LESS_THAN as U,LINE_FEED as X,LOWERCASE_A as n,LOWERCASE_F as k,LOWERCASE_X as I,LOWERCASE_Z as H,NINE as M,OPEN_BRACKET as D,PERCENT as B,PERIOD as F,QUESTION_MARK as b,SEMICOLON as h,SINGLE_QUOTE as j,SLASH as Q,SPACE as W,UNDERSCORE as Z,UPPERCASE_A as d,UPPERCASE_F as G,UPPERCASE_P as K,UPPERCASE_S as y,UPPERCASE_Z as z,ZERO as g}from"./tokenizer/ascii-constants.js";import{tokenize as q,tokenizeXmlStream as u}from"./tokenizer/tokenize.js";import{isAsciiDigit as w,isXmlChar as J,isXmlName as V,isXmlNameByte as $,isXmlNameStart as ee,isXmlSpaceByte as oe}from"./tokenizer/utils.js";import{XmlError as re}from"./tokenizer/XmlError.js";import{XmlStream as Se}from"./tokenizer/XmlStream.js";import{tokensToXml as Ae}from"./tokens-to-xml.js";import{processTokenForObject as Oe,xmlToObject as Te}from"./xml-to-object.js";import{processTokenForSimplifiedObject as Ne,xmlToSimplifiedObject as Ce}from"./xml-to-simplified-object.js";export{p as AMPERSAND,_ as CARRIAGE_RETURN,l as COLON,P as DOUBLE_QUOTE,c as EQUALS,m as EToCacheNodeProps,A as ETokenMatchCriteria,f as EXCLAMATION_MARK,x as GREATER_THAN,a as HASH,s as HORIZONTAL_TAB,L as HYPHEN,U as LESS_THAN,X as LINE_FEED,n as LOWERCASE_A,k as LOWERCASE_F,I as LOWERCASE_X,H as LOWERCASE_Z,M as NINE,D as OPEN_BRACKET,B as PERCENT,F as PERIOD,b as QUESTION_MARK,h as SEMICOLON,j as SINGLE_QUOTE,Q as SLASH,W as SPACE,R as TokenSelectState,T as TokenSelectStateMachine,t as TokenSelector,Z as UNDERSCORE,d as UPPERCASE_A,G as UPPERCASE_F,K as UPPERCASE_P,y as UPPERCASE_S,z as UPPERCASE_Z,re as XmlError,Se as XmlStream,g as ZERO,w as isAsciiDigit,J as isXmlChar,V as isXmlName,$ as isXmlNameByte,ee as isXmlNameStart,oe as isXmlSpaceByte,Oe as processTokenForObject,Ne as processTokenForSimplifiedObject,E as select,N as tokenToXml,q as tokenize,u as tokenizeXmlStream,Ae as tokensToXml,Te as xmlToObject,Ce as xmlToSimplifiedObject};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ETokenMatchCriteria as a}from"./TokenSelectState.js";import{TokenSelectStateMachine as l}from"./TokenSelectStateMachine.js";var u=Object.defineProperty,p=(r,t,
|
|
1
|
+
import{ETokenMatchCriteria as a}from"./TokenSelectState.js";import{TokenSelectStateMachine as l}from"./TokenSelectStateMachine.js";var u=Object.defineProperty,p=(r,t,e)=>t in r?u(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e,s=(r,t,e)=>p(r,typeof t!="symbol"?t+"":t,e);class f{constructor(t){s(this,"_currentDepth",0),s(this,"_tspStateMachines"),s(this,"_isRecording",!1),this._tspStateMachines=t.map(e=>new l(e))}pipeToken(t,e){let n=!1,i=!1;switch(t.type){case"ElementStart":n=this.handleElementStart(t);break;case"Attribute":n=this.handleAttribute(t);break;case"Text":n=this.handleText(t);break;case"ElementEnd":{i=this.handleElementEnd(t);break}}n&&!this._isRecording&&(this._isRecording=!0,e({type:"SelectionStart"}));for(const c of this._tspStateMachines){c.record(t);const h=c.takeRecordedTokens();h!=null&&h.forEach(o=>{e(o)})}this._isRecording&&e(t),i&&(e({type:"SelectionEnd"}),this._isRecording=!1)}handleElementStart(t){this._currentDepth+=1;let e=!1;for(const n of this._tspStateMachines){if(n.resetCurrentStateCache(),n.isFinalState())continue;const i=n.getNextState();i==null||!(i.matchCriteria&a.Name)||n.transitionIfNameMatch(t.local,t.prefix,this._currentDepth)&&n.isFinalState()&&(e=!0)}return e}handleAttribute(t){let e=!1;for(const n of this._tspStateMachines){if(n.isFinalState())continue;const i=n.getNextState();i==null||!(i.matchCriteria&a.Attributes)||n.transitionIfAttributesMatch(t.local,t.prefix,t.value,this._currentDepth)&&n.isFinalState()&&(e=!0)}return e}handleText(t){let e=!1;for(const n of this._tspStateMachines){if(n.isFinalState())continue;const i=n.getNextState();i==null||!(i.matchCriteria&a.Text)||n.transitionIfTextMatch(t.text,this._currentDepth)&&n.isFinalState()&&(e=!0)}return e}handleElementEnd(t){if(t.end.type==="Close"||t.end.type==="Empty"){this._currentDepth-=1;let e=!1;for(const n of this._tspStateMachines){const i=n.getCurrentState();i!=null&&(i.enteredDepth!=null&&this._currentDepth<i.enteredDepth&&n.transitionBack(this._currentDepth),e=e||n.isFinalState())}return!e}return!1}}export{f as TokenSelector};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{tokenize as p}from"../tokenizer/tokenize.js";import{TokenSelector as c}from"./TokenSelector.js";function m(e,o,
|
|
1
|
+
import{tokenize as p}from"../tokenizer/tokenize.js";import{TokenSelector as c}from"./TokenSelector.js";function m(e,o,t){const n=new c(o);p(e,!1,r=>{n.pipeToken(r,i=>{t(i)})})}export{m as select};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{LESS_THAN as
|
|
1
|
+
import{LESS_THAN as S,GREATER_THAN as r,OPEN_BRACKET as F,PERCENT as Q,DOUBLE_QUOTE as D,SINGLE_QUOTE as L,UPPERCASE_S as O,UPPERCASE_P as _,SLASH as k,EQUALS as R,EXCLAMATION_MARK as b,QUESTION_MARK as B}from"./ascii-constants.js";import{XmlError as i}from"./XmlError.js";import{XmlStream as M}from"./XmlStream.js";const Y="\uFEFF",E="<?xml ",T="?>",H="<!ENTITY",K="<!ELEMENT",X="<!ATTLIST",z="<!NOTATION",G="<!DOCTYPE",U="<?",w="?>",l="<!--",P="-->",q="<![CDATA[",h="]]>",j="NDATA",W="PUBLIC",J="SYSTEM",V="version",Z="encoding",$="standalone";function tt(t,n,s){y(new M(t),n,s)}function y(t,n,s){if(t.startsWith(Y)&&t.advance(1),t.startsWith(E)&&nt(t),f(t,s),t.skipSpaces(),t.startsWith(G)){if(!n)throw new i({type:"DtdDetected"});st(t,s),f(t,s)}if(t.skipSpaces(),!t.atEnd()&&t.currCodeUnit()===S&&v(t,s),f(t,s),!t.atEnd())throw new i({type:"UnknownToken",message:"Not at end"},t.genTextPos())}function f(t,n){for(;!t.atEnd();)if(t.skipSpaces(),t.startsWith(l))g(t,n);else if(t.startsWith(U))C(t,n);else break}function nt(t){function n(s){if(s.startsWithSpace())s.skipSpaces();else if(!s.startsWith(T)&&!s.atEnd())throw new i({type:"InvalidChar",expected:"a whitespace",actual:s.currCodeUnitUnchecked()},s.genTextPos())}if(t.advance(5),n(t),!t.startsWith(V))throw new i({type:"InvalidString",expected:"version"},t.genTextPos());m(t),n(t),t.startsWith(Z)&&(m(t),n(t)),t.startsWith($)&&m(t),t.skipSpaces(),t.skipString(T)}function g(t,n){const s=t.getPos();t.advance(4);const e=t.consumeCharsWhile((o,a)=>!(a==="-"&&o.startsWith(P)));if(t.skipString(P),e.includes("--")||e.endsWith("-"))throw new i({type:"InvalidComment"},t.genTextPosFrom(s));n({type:"Comment",text:e,range:t.rangeFrom(s)})}function C(t,n){if(t.startsWith(E))throw new i({type:"UnexpectedDeclaration"},t.genTextPos());const s=t.getPos();t.advance(2);const e=t.consumeName();t.skipSpaces();const o=t.consumeCharsWhile((a,c)=>!(c==="?"&&a.startsWith(w)));t.skipString(w),n({type:"ProcessingInstruction",target:e,content:o.length===0?void 0:o,range:t.rangeFrom(s)})}function st(t,n){const s=t.getPos();if(et(t),t.skipSpaces(),t.currCodeUnit()===r){t.advance(1);return}for(t.advance(1);!t.atEnd();)if(t.skipSpaces(),t.startsWith(H))ot(t,n);else if(t.startsWith(l))g(t,n);else if(t.startsWith(U))C(t,n);else if(t.startsWith("]"))if(t.advance(1),t.skipSpaces(),t.currCodeUnit()===r){t.advance(1);break}else throw new i({type:"InvalidChar",expected:"'>'",actual:t.currCodeUnitUnchecked()},t.genTextPos());else if(t.startsWith(K)||t.startsWith(X)||t.startsWith(z))try{it(t)}catch(e){throw new i({type:"UnknownToken",message:"Failed to consume declaration"},t.genTextPosFrom(s))}else throw new i({type:"UnknownToken",message:"Failed to parse doctype"},t.genTextPos())}function et(t){t.advance(9),t.consumeSpaces(),t.skipName(),t.skipSpaces(),x(t),t.skipSpaces();const n=t.currCodeUnit();if(n!==F&&n!==r)throw new i({type:"InvalidChar",expected:"'[' or '>'",actual:n},t.genTextPos())}function x(t){if(t.startsWith(J)||t.startsWith(W)){const n=t.getPos();t.advance(6);const s=t.sliceBack(n);t.consumeSpaces();const e=t.consumeQuote();if(t.consumeCodeUnitsWhile(o=>o!==e),t.consumeCodeUnit(e),s===W){t.consumeSpaces();const o=t.consumeQuote();t.consumeCodeUnitsWhile(a=>a!==o),t.consumeCodeUnit(o)}return!0}return!1}function ot(t,n){t.advance(8),t.consumeSpaces();const s=!t.tryConsumeCodeUnit(Q);s||t.consumeSpaces();const e=t.consumeName();t.consumeSpaces();const o=at(t,s);o!==null&&n({type:"EntityDeclaration",name:e,definition:o}),t.skipSpaces(),t.consumeCodeUnit(r)}function at(t,n){const s=t.currCodeUnit();if(s===D||s===L){const e=t.consumeQuote(),o=t.getPos();t.skipCodeUnitsWhile(c=>c!==e);const a=t.sliceBack(o);return t.consumeCodeUnit(e),a}else if(s===O||s===_){if(x(t))return n&&(t.skipSpaces(),t.startsWith(j)&&(t.advance(5),t.consumeSpaces(),t.skipName())),null;throw new i({type:"InvalidExternalID"},t.genTextPos())}else throw new i({type:"InvalidChar",expected:"a quote, SYSTEM or PUBLIC",actual:s},t.genTextPos())}function it(t){t.skipCodeUnitsWhile(n=>n!==r),t.consumeCodeUnit(r)}function v(t,n){const s=t.getPos();t.advance(1);const[e,o]=t.consumeQName();n({type:"ElementStart",prefix:e,local:o,start:s});let a=!1;for(;!t.atEnd();){const c=t.startsWithSpace();t.skipSpaces();const u=t.getPos(),p=t.currCodeUnit();if(p===k){t.advance(1),t.consumeCodeUnit(r);const d=t.rangeFrom(u);n({type:"ElementEnd",end:{type:"Empty"},range:d});break}else if(p===r){t.advance(1);const d=t.rangeFrom(u);n({type:"ElementEnd",end:{type:"Open"},range:d}),a=!0;break}else{if(!c)throw new i({type:"InvalidChar",expected:"a whitespace",actual:t.currCodeUnitUnchecked()},t.genTextPos());const[d,N,A]=m(t),I=t.getPos();n({type:"Attribute",range:{start:u,end:I},prefix:d,local:N,value:A})}}a&&ct(t,n)}function m(t){const[n,s]=t.consumeQName();let e;const o=t.getPos();if(t.skipSpaces(),t.tryConsumeCodeUnit(R)){t.skipSpaces();const a=t.consumeQuote(),c=String.fromCharCode(a);e=t.consumeCharsWhile((u,p)=>p!==c&&p!=="<"),t.consumeCodeUnit(a)}else t.goTo(o),e="true";return[n,s,e]}function ct(t,n){for(;!t.atEnd();)if(t.currCodeUnit()===S){const s=t.nextCodeUnit();if(s===b)if(t.startsWith(l))g(t,n);else if(t.startsWith(q))rt(t,n);else throw new i({type:"UnknownToken",message:"Failed to parse content"},t.genTextPos());else if(s===B)C(t,n);else if(s===k){pt(t,n);break}else v(t,n)}else dt(t,n)}function rt(t,n){const s=t.getPos();t.advance(9);const e=t.consumeCharsWhile((a,c)=>!(c==="]"&&a.startsWith(h)));t.skipString(h);const o=t.rangeFrom(s);n({type:"Cdata",text:e,range:o})}function pt(t,n){const s=t.getPos();t.advance(2);const[e,o]=t.consumeQName();t.skipSpaces(),t.consumeCodeUnit(r);const a=t.rangeFrom(s);n({type:"ElementEnd",end:{type:"Close",prefix:e,local:o},range:a})}function dt(t,n){const s=t.getPos(),e=t.consumeCharsWhile((o,a)=>a!=="<");if(e.includes(h))throw new i({type:"InvalidCharacterData"},t.genTextPos());n({type:"Text",text:e,range:t.rangeFrom(s)})}export{tt as tokenize,y as tokenizeXmlStream};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{tokenize as c}from"./tokenizer/tokenize.js";function a(t,o=!1){const e={local:"root",attributes:[],content:[]},l=[e];return c(t,o,r=>{n(r,l)}),e.content[0]}function n(t,o){switch(t.type){case"ElementStart":{const e={local:t.local,prefix:t.prefix.length>0?t.prefix:void 0,attributes:[],content:[]},l=o[o.length-1];l!=null&&l.content.push(e),o.push(e);break}case"ElementEnd":{(t.end.type==="Close"||t.end.type==="Empty")&&o.pop();break}case"Attribute":{const e=o[o.length-1];e!=null&&e.attributes.push({local:t.local,prefix:t.prefix.length>0?t.prefix:void 0,value:t.value});break}case"Text":case"Cdata":{const e=o[o.length-1];e!=null&&t.text.trim().length>0&&e.content.push(t.text);break}}}export{n as processTokenForObject,a as xmlToObject};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{getQName as r}from"./get-q-name.js";import{tokenize as i}from"./tokenizer/tokenize.js";function s(o,l=!1){const t={},e=[t];return i(o,l,c=>{a(c,e)}),t}function a(o,l){switch(o.type){case"ElementStart":{const t=r(o.local,o.prefix),e=`_${t}`,c={},n=l[l.length-1];n!=null&&(n.content!=null?(c.tag=t,n.content.push(c)):n.text!=null?(c.tag=t,n.content=[n.text,c],delete n.text):n[e]==null?n[e]=c:Array.isArray(n[e])?n[e].push(c):n[e]=[n[e],c]),l.push(c);break}case"ElementEnd":{(o.end.type==="Close"||o.end.type==="Empty")&&l.pop();break}case"Attribute":{const t=l[l.length-1];if(t!=null){const e=r(o.local,o.prefix);t.attributes!=null?t.attributes[e]=o.value:t.attributes={[e]:o.value}}break}case"Text":case"Cdata":{const t=l[l.length-1];if(t!=null){const e=o.text.trim();e.length>0&&(t.content!=null?t.content.push(e):t.text!=null?(t.content=[t.text,e],delete t.text):t.text=e)}break}}}export{a as processTokenForSimplifiedObject,s as xmlToSimplifiedObject};
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC"}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import { type TXmlToken } from '../tokenizer';
|
|
2
|
-
import { type TTokenSelectPath } from './types';
|
|
2
|
+
import { type TSelectedXmlToken, type TTokenSelectPath } from './types';
|
|
3
3
|
export declare class TokenSelector {
|
|
4
4
|
private _currentDepth;
|
|
5
5
|
private _tspStateMachines;
|
|
6
6
|
private _isRecording;
|
|
7
7
|
constructor(tokenSelectPaths: TTokenSelectPath[]);
|
|
8
|
-
pipeToken(token: TXmlToken, recorder: (token:
|
|
8
|
+
pipeToken(token: TXmlToken, recorder: (token: TSelectedXmlToken) => void): void;
|
|
9
9
|
private handleElementStart;
|
|
10
10
|
private handleAttribute;
|
|
11
11
|
private handleText;
|
|
12
12
|
private handleElementEnd;
|
|
13
|
-
private record;
|
|
14
13
|
}
|
|
15
14
|
//# sourceMappingURL=TokenSelector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenSelector.d.ts","sourceRoot":"","sources":["../../../src/selector/TokenSelector.ts"],"names":[],"mappings":"AAAA,OAAO,EAKN,KAAK,SAAS,EACd,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"TokenSelector.d.ts","sourceRoot":"","sources":["../../../src/selector/TokenSelector.ts"],"names":[],"mappings":"AAAA,OAAO,EAKN,KAAK,SAAS,EACd,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAExE,qBAAa,aAAa;IACzB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,iBAAiB,CAA4B;IACrD,OAAO,CAAC,YAAY,CAAS;gBAEjB,gBAAgB,EAAE,gBAAgB,EAAE;IAMzC,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,GAAG,IAAI;IA6CtF,OAAO,CAAC,kBAAkB;IA6B1B,OAAO,CAAC,eAAe;IA2BvB,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,gBAAgB;CAuBxB"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
|
|
3
|
-
export declare function select(xml: string, tokenSelectPaths: TTokenSelectPath[], callback: TTokenCallback): void;
|
|
1
|
+
import { type TSelectedTokenCallback, type TTokenSelectPath } from './types';
|
|
2
|
+
export declare function select(xml: string, tokenSelectPaths: TTokenSelectPath[], callback: TSelectedTokenCallback): void;
|
|
4
3
|
//# sourceMappingURL=select.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../src/selector/select.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../src/selector/select.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,sBAAsB,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE7E,wBAAgB,MAAM,CACrB,GAAG,EAAE,MAAM,EACX,gBAAgB,EAAE,gBAAgB,EAAE,EACpC,QAAQ,EAAE,sBAAsB,GAC9B,IAAI,CAON"}
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
import { type TXmlToken } from '../tokenizer';
|
|
2
|
+
export type TSelectedXmlToken = TXmlToken | {
|
|
3
|
+
type: 'SelectionStart';
|
|
4
|
+
} | {
|
|
5
|
+
type: 'SelectionEnd';
|
|
6
|
+
};
|
|
7
|
+
export type TSelectedTokenCallback = (token: TSelectedXmlToken) => void;
|
|
1
8
|
/**
|
|
2
9
|
* A limited segment of an XPath expression in an object-oriented manner.
|
|
3
10
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/selector/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,MAAM,WAAW,uBAAuB;IACvC;;;;;OAKG;IACH,IAAI,EAAE,OAAO,GAAG,oBAAoB,CAAC;IAErC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;IAErB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAElE;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,EAAE,MAAM,CAAC;KACd,KAAK,OAAO,CAAC;CACd;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,uBAAuB,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/selector/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC;AAElG,MAAM,MAAM,sBAAsB,GAAG,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;AAExE;;;;;;;;;;;;;;GAcG;AAGH,MAAM,WAAW,uBAAuB;IACvC;;;;;OAKG;IACH,IAAI,EAAE,OAAO,GAAG,oBAAoB,CAAC;IAErC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;IAErB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAElE;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,EAAE,MAAM,CAAC;KACd,KAAK,OAAO,CAAC;CACd;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,uBAAuB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XmlStream.d.ts","sourceRoot":"","sources":["../../../src/tokenizer/XmlStream.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AAItE;;;;;;GAMG;AACH,qBAAa,SAAS;IACrB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;gBAEF,IAAI,EAAE,MAAM,EAAE,GAAG,SAAI;IAMxC;;;;OAIG;IACI,KAAK,IAAI,SAAS;IAIzB;;;;OAIG;IACI,MAAM,IAAI,MAAM;IAIvB;;;;OAIG;IACI,KAAK,IAAI,OAAO;IAIvB;;;;;OAKG;IACI,YAAY,IAAI,MAAM;IAO7B;;;;OAIG;IACI,qBAAqB,IAAI,MAAM;IAItC;;;;;OAKG;IACI,YAAY,IAAI,MAAM;IAO7B;;;;OAIG;IACI,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAI/B;;;;OAIG;IACI,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI9B;;;;;OAKG;IACI,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIxC;;;;;OAKG;IACI,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAW9C;;;;;;OAMG;IACI,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAQpD;;;;;OAKG;IACI,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOrC;;;;;OAKG;IACI,qBAAqB,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM;IAM9E;;;;OAIG;IACI,kBAAkB,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"XmlStream.d.ts","sourceRoot":"","sources":["../../../src/tokenizer/XmlStream.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AAItE;;;;;;GAMG;AACH,qBAAa,SAAS;IACrB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;gBAEF,IAAI,EAAE,MAAM,EAAE,GAAG,SAAI;IAMxC;;;;OAIG;IACI,KAAK,IAAI,SAAS;IAIzB;;;;OAIG;IACI,MAAM,IAAI,MAAM;IAIvB;;;;OAIG;IACI,KAAK,IAAI,OAAO;IAIvB;;;;;OAKG;IACI,YAAY,IAAI,MAAM;IAO7B;;;;OAIG;IACI,qBAAqB,IAAI,MAAM;IAItC;;;;;OAKG;IACI,YAAY,IAAI,MAAM;IAO7B;;;;OAIG;IACI,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAI/B;;;;OAIG;IACI,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI9B;;;;;OAKG;IACI,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIxC;;;;;OAKG;IACI,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAW9C;;;;;;OAMG;IACI,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAQpD;;;;;OAKG;IACI,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOrC;;;;;OAKG;IACI,qBAAqB,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM;IAM9E;;;;OAIG;IACI,kBAAkB,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI;IA8BzE;;;;;;OAMG;IACI,iBAAiB,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM;IAMzF;;;;;OAKG;IACI,cAAc,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI;IAapF;;;;;OAKG;IACI,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIrC;;;;;OAKG;IACI,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIvC;;OAEG;IACI,UAAU,IAAI,IAAI;IAMzB;;;;OAIG;IACI,eAAe,IAAI,OAAO;IAIjC;;;;;OAKG;IACI,aAAa,IAAI,IAAI;IAe5B;;;;;OAKG;IACI,mBAAmB,IAAI,UAAU,GAAG,IAAI;IAiB/C;;;;OAIG;IACI,gBAAgB,IAAI,UAAU,GAAG,IAAI;IA4D5C;;;;;;OAMG;IACI,WAAW,IAAI,MAAM;IAY5B;;;;OAIG;IACI,QAAQ,IAAI,IAAI;IAgBvB;;;;;;OAMG;IACI,YAAY,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;IAiDvC;;;;;OAKG;IACI,YAAY,IAAI,MAAM;IAY7B;;;;;OAKG;IACI,UAAU,IAAI,QAAQ;IAI7B;;;;;;OAMG;IACI,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ;CAc5C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenize.d.ts","sourceRoot":"","sources":["../../../src/tokenizer/tokenize.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"tokenize.d.ts","sourceRoot":"","sources":["../../../src/tokenizer/tokenize.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAuBxC,wBAAgB,QAAQ,CACvB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,OAAO,EACjB,aAAa,EAAE,cAAc,GAC3B,IAAI,CAEN;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAChC,CAAC,EAAE,SAAS,EACZ,QAAQ,EAAE,OAAO,EACjB,aAAa,EAAE,cAAc,GAC3B,IAAI,CAgCN"}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { type TXmlToken } from './tokenizer';
|
|
2
|
+
export declare function xmlToObject(xmlString: string, allowDtd?: boolean): TXmlNode;
|
|
3
|
+
export declare function processTokenForObject(token: TXmlToken, stack: TXmlNode[]): void;
|
|
4
|
+
export interface TXmlNode {
|
|
5
|
+
local: string;
|
|
6
|
+
prefix?: string;
|
|
7
|
+
attributes: {
|
|
8
|
+
local: string;
|
|
9
|
+
prefix?: string;
|
|
10
|
+
value: string;
|
|
11
|
+
}[];
|
|
12
|
+
content: (TXmlNode | string)[];
|
|
6
13
|
}
|
|
7
14
|
//# sourceMappingURL=xml-to-object.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xml-to-object.d.ts","sourceRoot":"","sources":["../../src/xml-to-object.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"xml-to-object.d.ts","sourceRoot":"","sources":["../../src/xml-to-object.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAEvD,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,UAAQ,GAAG,QAAQ,CAazE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAkD/E;AAED,MAAM,WAAW,QAAQ;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAChE,OAAO,EAAE,CAAC,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;CAC/B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type TXmlToken } from './tokenizer';
|
|
2
|
+
export declare function xmlToSimplifiedObject(xmlString: string, allowDtd?: boolean): TSimplifiedXmlNode;
|
|
3
|
+
export declare function processTokenForSimplifiedObject(token: TXmlToken, stack: TSimplifiedXmlNode[]): void;
|
|
4
|
+
export interface TSimplifiedXmlNode {
|
|
5
|
+
tag?: string;
|
|
6
|
+
attributes?: Record<string, string>;
|
|
7
|
+
text?: string;
|
|
8
|
+
content?: (string | TSimplifiedXmlNode)[];
|
|
9
|
+
[key: TSimplifiedXmlNodeTagName]: TSimplifiedXmlNode | TSimplifiedXmlNode[];
|
|
10
|
+
}
|
|
11
|
+
type TSimplifiedXmlNodeTagName = `_${string}`;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=xml-to-simplified-object.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xml-to-simplified-object.d.ts","sourceRoot":"","sources":["../../src/xml-to-simplified-object.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAEvD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,UAAQ,GAAG,kBAAkB,CAS7F;AAED,wBAAgB,+BAA+B,CAC9C,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,kBAAkB,EAAE,GACzB,IAAI,CAsEN;AAED,MAAM,WAAW,kBAAkB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,CAAC,MAAM,GAAG,kBAAkB,CAAC,EAAE,CAAC;IAE1C,CAAC,GAAG,EAAE,yBAAyB,GAAG,kBAAkB,GAAG,kBAAkB,EAAE,CAAC;CAC5E;AAED,KAAK,yBAAyB,GAAG,IAAI,MAAM,EAAE,CAAC"}
|