@ai-sdk-tool/rxml 0.1.1 → 0.1.2-canary.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 +1829 -1482
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +112 -52
- package/dist/index.d.ts +112 -52
- package/dist/index.js +1827 -1480
- package/dist/index.js.map +1 -1
- package/package.json +18 -18
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Transform, TransformCallback, Readable } from 'stream';
|
|
1
|
+
import { Transform, TransformCallback, Readable } from 'node:stream';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Core types for the robust-xml parser
|
|
@@ -66,6 +66,28 @@ interface StringifyOptions {
|
|
|
66
66
|
strictBooleanAttributes?: boolean;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
+
/**
|
|
70
|
+
* XML stringification based on TXML's stringify approach
|
|
71
|
+
* Replaces the fast-xml-parser XMLBuilder with a native implementation
|
|
72
|
+
*/
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Stringify an object to XML
|
|
76
|
+
*/
|
|
77
|
+
declare function stringify(rootTag: string, obj: unknown, options?: StringifyOptions): string;
|
|
78
|
+
/**
|
|
79
|
+
* Stringify parsed XML nodes back to XML string
|
|
80
|
+
*/
|
|
81
|
+
declare function stringifyNodes(nodes: (RXMLNode | string)[], format?: boolean, options?: Pick<StringifyOptions, "strictBooleanAttributes" | "minimalEscaping">): string;
|
|
82
|
+
/**
|
|
83
|
+
* Stringify a single XML node
|
|
84
|
+
*/
|
|
85
|
+
declare function stringifyNode(node: RXMLNode, depth?: number, format?: boolean, options?: Pick<StringifyOptions, "strictBooleanAttributes" | "minimalEscaping">): string;
|
|
86
|
+
/**
|
|
87
|
+
* Convert content to a string representation (similar to TXML's toContentString)
|
|
88
|
+
*/
|
|
89
|
+
declare function toContentString(nodes: (RXMLNode | string)[]): string;
|
|
90
|
+
|
|
69
91
|
/**
|
|
70
92
|
* Main XML parser that integrates tokenization, schema awareness, and error tolerance
|
|
71
93
|
* This replaces the fast-xml-parser dependency with a TXML-based implementation
|
|
@@ -90,7 +112,7 @@ declare function simplify(children: (RXMLNode | string)[]): unknown;
|
|
|
90
112
|
/**
|
|
91
113
|
* Filter XML nodes (similar to TXML's filter)
|
|
92
114
|
*/
|
|
93
|
-
declare function filter(children: (RXMLNode | string)[], filterFn: (node: RXMLNode, index: number,
|
|
115
|
+
declare function filter(children: (RXMLNode | string)[], filterFn: (node: RXMLNode, index: number, currentDepth: number, currentPath: string) => boolean, depth?: number, path?: string): RXMLNode[];
|
|
94
116
|
|
|
95
117
|
/**
|
|
96
118
|
* Streaming XML parser based on TXML's transformStream approach
|
|
@@ -102,14 +124,22 @@ declare function filter(children: (RXMLNode | string)[], filterFn: (node: RXMLNo
|
|
|
102
124
|
*/
|
|
103
125
|
declare class XMLTransformStream extends Transform {
|
|
104
126
|
private buffer;
|
|
105
|
-
private position;
|
|
106
127
|
private readonly parseOptions;
|
|
107
128
|
private emittedCount;
|
|
108
129
|
private sawTagChar;
|
|
109
|
-
constructor(
|
|
110
|
-
_transform(chunk: Buffer,
|
|
130
|
+
constructor(_offset?: number | string, parseOptions?: ParseOptions);
|
|
131
|
+
_transform(chunk: Buffer, _encoding: BufferEncoding, callback: TransformCallback): void;
|
|
111
132
|
_flush(callback: TransformCallback): void;
|
|
112
133
|
private processBuffer;
|
|
134
|
+
private trimToNextTag;
|
|
135
|
+
private tryProcessSpecialNode;
|
|
136
|
+
private trySkipStrayClosingTag;
|
|
137
|
+
private extractTagInfo;
|
|
138
|
+
private tryProcessSelfClosingTag;
|
|
139
|
+
private tryProcessRegularElement;
|
|
140
|
+
private findMatchingClosingTag;
|
|
141
|
+
private findNextOpeningTag;
|
|
142
|
+
private advancePastClosingTag;
|
|
113
143
|
/**
|
|
114
144
|
* Emit an element and recursively emit its children as separate events
|
|
115
145
|
*/
|
|
@@ -146,10 +176,62 @@ declare class XMLTokenizer {
|
|
|
146
176
|
private readonly xmlString;
|
|
147
177
|
private readonly options;
|
|
148
178
|
constructor(xmlString: string, options?: ParseOptions);
|
|
179
|
+
/**
|
|
180
|
+
* Handle closing tag parsing
|
|
181
|
+
*/
|
|
182
|
+
private handleClosingTag;
|
|
183
|
+
/**
|
|
184
|
+
* Check if we're at end of string and should throw unclosed tag error
|
|
185
|
+
*/
|
|
186
|
+
private checkUnclosedTag;
|
|
187
|
+
/**
|
|
188
|
+
* Process special content (comments, CDATA, DOCTYPE) and track if we consumed to end
|
|
189
|
+
*/
|
|
190
|
+
private processSpecialContent;
|
|
191
|
+
/**
|
|
192
|
+
* Handle text content parsing
|
|
193
|
+
*/
|
|
194
|
+
private handleTextContent;
|
|
195
|
+
/**
|
|
196
|
+
* Handle regular element parsing
|
|
197
|
+
*/
|
|
198
|
+
private handleRegularElement;
|
|
199
|
+
/**
|
|
200
|
+
* Process a single child element based on the current character
|
|
201
|
+
*/
|
|
202
|
+
private processSingleChild;
|
|
149
203
|
/**
|
|
150
204
|
* Parse XML children recursively
|
|
151
205
|
*/
|
|
152
206
|
parseChildren(tagName?: string): (RXMLNode | string)[];
|
|
207
|
+
/**
|
|
208
|
+
* Check if character is whitespace
|
|
209
|
+
*/
|
|
210
|
+
private isWhitespace;
|
|
211
|
+
/**
|
|
212
|
+
* Skip whitespace characters
|
|
213
|
+
*/
|
|
214
|
+
private skipWhitespace;
|
|
215
|
+
/**
|
|
216
|
+
* Parse attribute value
|
|
217
|
+
*/
|
|
218
|
+
private parseAttributeValue;
|
|
219
|
+
/**
|
|
220
|
+
* Parse single attribute
|
|
221
|
+
*/
|
|
222
|
+
private parseAttribute;
|
|
223
|
+
/**
|
|
224
|
+
* Parse all attributes
|
|
225
|
+
*/
|
|
226
|
+
private parseAttributes;
|
|
227
|
+
/**
|
|
228
|
+
* Parse special tag content (script, style)
|
|
229
|
+
*/
|
|
230
|
+
private parseSpecialTagContent;
|
|
231
|
+
/**
|
|
232
|
+
* Parse node children based on tag type
|
|
233
|
+
*/
|
|
234
|
+
private parseNodeChildren;
|
|
153
235
|
/**
|
|
154
236
|
* Parse a single XML node
|
|
155
237
|
*/
|
|
@@ -184,6 +266,31 @@ declare class XMLTokenizer {
|
|
|
184
266
|
setPosition(pos: number): void;
|
|
185
267
|
}
|
|
186
268
|
|
|
269
|
+
/**
|
|
270
|
+
* Error classes for robust-xml parser
|
|
271
|
+
*/
|
|
272
|
+
declare class RXMLParseError extends Error {
|
|
273
|
+
cause?: unknown;
|
|
274
|
+
line?: number;
|
|
275
|
+
column?: number;
|
|
276
|
+
constructor(message: string, cause?: unknown, line?: number, column?: number);
|
|
277
|
+
}
|
|
278
|
+
declare class RXMLDuplicateStringTagError extends Error {
|
|
279
|
+
constructor(message: string);
|
|
280
|
+
}
|
|
281
|
+
declare class RXMLCoercionError extends Error {
|
|
282
|
+
cause?: unknown;
|
|
283
|
+
constructor(message: string, cause?: unknown);
|
|
284
|
+
}
|
|
285
|
+
declare class RXMLStringifyError extends Error {
|
|
286
|
+
cause?: unknown;
|
|
287
|
+
constructor(message: string, cause?: unknown);
|
|
288
|
+
}
|
|
289
|
+
declare class RXMLStreamError extends Error {
|
|
290
|
+
cause?: unknown;
|
|
291
|
+
constructor(message: string, cause?: unknown);
|
|
292
|
+
}
|
|
293
|
+
|
|
187
294
|
declare function unwrapJsonSchema(schema: unknown): unknown;
|
|
188
295
|
declare function getSchemaType(schema: unknown): string | undefined;
|
|
189
296
|
declare function coerceBySchema(value: unknown, schema?: unknown): unknown;
|
|
@@ -250,58 +357,11 @@ declare function findAllTopLevelRanges(xmlContent: string, tagName: string): Arr
|
|
|
250
357
|
end: number;
|
|
251
358
|
}>;
|
|
252
359
|
|
|
253
|
-
/**
|
|
254
|
-
* XML stringification based on TXML's stringify approach
|
|
255
|
-
* Replaces the fast-xml-parser XMLBuilder with a native implementation
|
|
256
|
-
*/
|
|
257
|
-
|
|
258
|
-
/**
|
|
259
|
-
* Stringify an object to XML
|
|
260
|
-
*/
|
|
261
|
-
declare function stringify(rootTag: string, obj: unknown, options?: StringifyOptions): string;
|
|
262
|
-
/**
|
|
263
|
-
* Stringify parsed XML nodes back to XML string
|
|
264
|
-
*/
|
|
265
|
-
declare function stringifyNodes(nodes: (RXMLNode | string)[], format?: boolean, options?: Pick<StringifyOptions, "strictBooleanAttributes" | "minimalEscaping">): string;
|
|
266
|
-
/**
|
|
267
|
-
* Stringify a single XML node
|
|
268
|
-
*/
|
|
269
|
-
declare function stringifyNode(node: RXMLNode, depth?: number, format?: boolean, options?: Pick<StringifyOptions, "strictBooleanAttributes" | "minimalEscaping">): string;
|
|
270
|
-
/**
|
|
271
|
-
* Convert content to a string representation (similar to TXML's toContentString)
|
|
272
|
-
*/
|
|
273
|
-
declare function toContentString(nodes: (RXMLNode | string)[]): string;
|
|
274
|
-
|
|
275
360
|
/**
|
|
276
361
|
* Unescape XML entities
|
|
277
362
|
*/
|
|
278
363
|
declare function unescapeXml(text: string): string;
|
|
279
364
|
|
|
280
|
-
/**
|
|
281
|
-
* Error classes for robust-xml parser
|
|
282
|
-
*/
|
|
283
|
-
declare class RXMLParseError extends Error {
|
|
284
|
-
cause?: unknown | undefined;
|
|
285
|
-
line?: number | undefined;
|
|
286
|
-
column?: number | undefined;
|
|
287
|
-
constructor(message: string, cause?: unknown | undefined, line?: number | undefined, column?: number | undefined);
|
|
288
|
-
}
|
|
289
|
-
declare class RXMLDuplicateStringTagError extends Error {
|
|
290
|
-
constructor(message: string);
|
|
291
|
-
}
|
|
292
|
-
declare class RXMLCoercionError extends Error {
|
|
293
|
-
cause?: unknown | undefined;
|
|
294
|
-
constructor(message: string, cause?: unknown | undefined);
|
|
295
|
-
}
|
|
296
|
-
declare class RXMLStringifyError extends Error {
|
|
297
|
-
cause?: unknown | undefined;
|
|
298
|
-
constructor(message: string, cause?: unknown | undefined);
|
|
299
|
-
}
|
|
300
|
-
declare class RXMLStreamError extends Error {
|
|
301
|
-
cause?: unknown | undefined;
|
|
302
|
-
constructor(message: string, cause?: unknown | undefined);
|
|
303
|
-
}
|
|
304
|
-
|
|
305
365
|
interface Options {
|
|
306
366
|
textNodeName?: string;
|
|
307
367
|
throwOnDuplicateStringTags?: boolean;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Transform, TransformCallback, Readable } from 'stream';
|
|
1
|
+
import { Transform, TransformCallback, Readable } from 'node:stream';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Core types for the robust-xml parser
|
|
@@ -66,6 +66,28 @@ interface StringifyOptions {
|
|
|
66
66
|
strictBooleanAttributes?: boolean;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
+
/**
|
|
70
|
+
* XML stringification based on TXML's stringify approach
|
|
71
|
+
* Replaces the fast-xml-parser XMLBuilder with a native implementation
|
|
72
|
+
*/
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Stringify an object to XML
|
|
76
|
+
*/
|
|
77
|
+
declare function stringify(rootTag: string, obj: unknown, options?: StringifyOptions): string;
|
|
78
|
+
/**
|
|
79
|
+
* Stringify parsed XML nodes back to XML string
|
|
80
|
+
*/
|
|
81
|
+
declare function stringifyNodes(nodes: (RXMLNode | string)[], format?: boolean, options?: Pick<StringifyOptions, "strictBooleanAttributes" | "minimalEscaping">): string;
|
|
82
|
+
/**
|
|
83
|
+
* Stringify a single XML node
|
|
84
|
+
*/
|
|
85
|
+
declare function stringifyNode(node: RXMLNode, depth?: number, format?: boolean, options?: Pick<StringifyOptions, "strictBooleanAttributes" | "minimalEscaping">): string;
|
|
86
|
+
/**
|
|
87
|
+
* Convert content to a string representation (similar to TXML's toContentString)
|
|
88
|
+
*/
|
|
89
|
+
declare function toContentString(nodes: (RXMLNode | string)[]): string;
|
|
90
|
+
|
|
69
91
|
/**
|
|
70
92
|
* Main XML parser that integrates tokenization, schema awareness, and error tolerance
|
|
71
93
|
* This replaces the fast-xml-parser dependency with a TXML-based implementation
|
|
@@ -90,7 +112,7 @@ declare function simplify(children: (RXMLNode | string)[]): unknown;
|
|
|
90
112
|
/**
|
|
91
113
|
* Filter XML nodes (similar to TXML's filter)
|
|
92
114
|
*/
|
|
93
|
-
declare function filter(children: (RXMLNode | string)[], filterFn: (node: RXMLNode, index: number,
|
|
115
|
+
declare function filter(children: (RXMLNode | string)[], filterFn: (node: RXMLNode, index: number, currentDepth: number, currentPath: string) => boolean, depth?: number, path?: string): RXMLNode[];
|
|
94
116
|
|
|
95
117
|
/**
|
|
96
118
|
* Streaming XML parser based on TXML's transformStream approach
|
|
@@ -102,14 +124,22 @@ declare function filter(children: (RXMLNode | string)[], filterFn: (node: RXMLNo
|
|
|
102
124
|
*/
|
|
103
125
|
declare class XMLTransformStream extends Transform {
|
|
104
126
|
private buffer;
|
|
105
|
-
private position;
|
|
106
127
|
private readonly parseOptions;
|
|
107
128
|
private emittedCount;
|
|
108
129
|
private sawTagChar;
|
|
109
|
-
constructor(
|
|
110
|
-
_transform(chunk: Buffer,
|
|
130
|
+
constructor(_offset?: number | string, parseOptions?: ParseOptions);
|
|
131
|
+
_transform(chunk: Buffer, _encoding: BufferEncoding, callback: TransformCallback): void;
|
|
111
132
|
_flush(callback: TransformCallback): void;
|
|
112
133
|
private processBuffer;
|
|
134
|
+
private trimToNextTag;
|
|
135
|
+
private tryProcessSpecialNode;
|
|
136
|
+
private trySkipStrayClosingTag;
|
|
137
|
+
private extractTagInfo;
|
|
138
|
+
private tryProcessSelfClosingTag;
|
|
139
|
+
private tryProcessRegularElement;
|
|
140
|
+
private findMatchingClosingTag;
|
|
141
|
+
private findNextOpeningTag;
|
|
142
|
+
private advancePastClosingTag;
|
|
113
143
|
/**
|
|
114
144
|
* Emit an element and recursively emit its children as separate events
|
|
115
145
|
*/
|
|
@@ -146,10 +176,62 @@ declare class XMLTokenizer {
|
|
|
146
176
|
private readonly xmlString;
|
|
147
177
|
private readonly options;
|
|
148
178
|
constructor(xmlString: string, options?: ParseOptions);
|
|
179
|
+
/**
|
|
180
|
+
* Handle closing tag parsing
|
|
181
|
+
*/
|
|
182
|
+
private handleClosingTag;
|
|
183
|
+
/**
|
|
184
|
+
* Check if we're at end of string and should throw unclosed tag error
|
|
185
|
+
*/
|
|
186
|
+
private checkUnclosedTag;
|
|
187
|
+
/**
|
|
188
|
+
* Process special content (comments, CDATA, DOCTYPE) and track if we consumed to end
|
|
189
|
+
*/
|
|
190
|
+
private processSpecialContent;
|
|
191
|
+
/**
|
|
192
|
+
* Handle text content parsing
|
|
193
|
+
*/
|
|
194
|
+
private handleTextContent;
|
|
195
|
+
/**
|
|
196
|
+
* Handle regular element parsing
|
|
197
|
+
*/
|
|
198
|
+
private handleRegularElement;
|
|
199
|
+
/**
|
|
200
|
+
* Process a single child element based on the current character
|
|
201
|
+
*/
|
|
202
|
+
private processSingleChild;
|
|
149
203
|
/**
|
|
150
204
|
* Parse XML children recursively
|
|
151
205
|
*/
|
|
152
206
|
parseChildren(tagName?: string): (RXMLNode | string)[];
|
|
207
|
+
/**
|
|
208
|
+
* Check if character is whitespace
|
|
209
|
+
*/
|
|
210
|
+
private isWhitespace;
|
|
211
|
+
/**
|
|
212
|
+
* Skip whitespace characters
|
|
213
|
+
*/
|
|
214
|
+
private skipWhitespace;
|
|
215
|
+
/**
|
|
216
|
+
* Parse attribute value
|
|
217
|
+
*/
|
|
218
|
+
private parseAttributeValue;
|
|
219
|
+
/**
|
|
220
|
+
* Parse single attribute
|
|
221
|
+
*/
|
|
222
|
+
private parseAttribute;
|
|
223
|
+
/**
|
|
224
|
+
* Parse all attributes
|
|
225
|
+
*/
|
|
226
|
+
private parseAttributes;
|
|
227
|
+
/**
|
|
228
|
+
* Parse special tag content (script, style)
|
|
229
|
+
*/
|
|
230
|
+
private parseSpecialTagContent;
|
|
231
|
+
/**
|
|
232
|
+
* Parse node children based on tag type
|
|
233
|
+
*/
|
|
234
|
+
private parseNodeChildren;
|
|
153
235
|
/**
|
|
154
236
|
* Parse a single XML node
|
|
155
237
|
*/
|
|
@@ -184,6 +266,31 @@ declare class XMLTokenizer {
|
|
|
184
266
|
setPosition(pos: number): void;
|
|
185
267
|
}
|
|
186
268
|
|
|
269
|
+
/**
|
|
270
|
+
* Error classes for robust-xml parser
|
|
271
|
+
*/
|
|
272
|
+
declare class RXMLParseError extends Error {
|
|
273
|
+
cause?: unknown;
|
|
274
|
+
line?: number;
|
|
275
|
+
column?: number;
|
|
276
|
+
constructor(message: string, cause?: unknown, line?: number, column?: number);
|
|
277
|
+
}
|
|
278
|
+
declare class RXMLDuplicateStringTagError extends Error {
|
|
279
|
+
constructor(message: string);
|
|
280
|
+
}
|
|
281
|
+
declare class RXMLCoercionError extends Error {
|
|
282
|
+
cause?: unknown;
|
|
283
|
+
constructor(message: string, cause?: unknown);
|
|
284
|
+
}
|
|
285
|
+
declare class RXMLStringifyError extends Error {
|
|
286
|
+
cause?: unknown;
|
|
287
|
+
constructor(message: string, cause?: unknown);
|
|
288
|
+
}
|
|
289
|
+
declare class RXMLStreamError extends Error {
|
|
290
|
+
cause?: unknown;
|
|
291
|
+
constructor(message: string, cause?: unknown);
|
|
292
|
+
}
|
|
293
|
+
|
|
187
294
|
declare function unwrapJsonSchema(schema: unknown): unknown;
|
|
188
295
|
declare function getSchemaType(schema: unknown): string | undefined;
|
|
189
296
|
declare function coerceBySchema(value: unknown, schema?: unknown): unknown;
|
|
@@ -250,58 +357,11 @@ declare function findAllTopLevelRanges(xmlContent: string, tagName: string): Arr
|
|
|
250
357
|
end: number;
|
|
251
358
|
}>;
|
|
252
359
|
|
|
253
|
-
/**
|
|
254
|
-
* XML stringification based on TXML's stringify approach
|
|
255
|
-
* Replaces the fast-xml-parser XMLBuilder with a native implementation
|
|
256
|
-
*/
|
|
257
|
-
|
|
258
|
-
/**
|
|
259
|
-
* Stringify an object to XML
|
|
260
|
-
*/
|
|
261
|
-
declare function stringify(rootTag: string, obj: unknown, options?: StringifyOptions): string;
|
|
262
|
-
/**
|
|
263
|
-
* Stringify parsed XML nodes back to XML string
|
|
264
|
-
*/
|
|
265
|
-
declare function stringifyNodes(nodes: (RXMLNode | string)[], format?: boolean, options?: Pick<StringifyOptions, "strictBooleanAttributes" | "minimalEscaping">): string;
|
|
266
|
-
/**
|
|
267
|
-
* Stringify a single XML node
|
|
268
|
-
*/
|
|
269
|
-
declare function stringifyNode(node: RXMLNode, depth?: number, format?: boolean, options?: Pick<StringifyOptions, "strictBooleanAttributes" | "minimalEscaping">): string;
|
|
270
|
-
/**
|
|
271
|
-
* Convert content to a string representation (similar to TXML's toContentString)
|
|
272
|
-
*/
|
|
273
|
-
declare function toContentString(nodes: (RXMLNode | string)[]): string;
|
|
274
|
-
|
|
275
360
|
/**
|
|
276
361
|
* Unescape XML entities
|
|
277
362
|
*/
|
|
278
363
|
declare function unescapeXml(text: string): string;
|
|
279
364
|
|
|
280
|
-
/**
|
|
281
|
-
* Error classes for robust-xml parser
|
|
282
|
-
*/
|
|
283
|
-
declare class RXMLParseError extends Error {
|
|
284
|
-
cause?: unknown | undefined;
|
|
285
|
-
line?: number | undefined;
|
|
286
|
-
column?: number | undefined;
|
|
287
|
-
constructor(message: string, cause?: unknown | undefined, line?: number | undefined, column?: number | undefined);
|
|
288
|
-
}
|
|
289
|
-
declare class RXMLDuplicateStringTagError extends Error {
|
|
290
|
-
constructor(message: string);
|
|
291
|
-
}
|
|
292
|
-
declare class RXMLCoercionError extends Error {
|
|
293
|
-
cause?: unknown | undefined;
|
|
294
|
-
constructor(message: string, cause?: unknown | undefined);
|
|
295
|
-
}
|
|
296
|
-
declare class RXMLStringifyError extends Error {
|
|
297
|
-
cause?: unknown | undefined;
|
|
298
|
-
constructor(message: string, cause?: unknown | undefined);
|
|
299
|
-
}
|
|
300
|
-
declare class RXMLStreamError extends Error {
|
|
301
|
-
cause?: unknown | undefined;
|
|
302
|
-
constructor(message: string, cause?: unknown | undefined);
|
|
303
|
-
}
|
|
304
|
-
|
|
305
365
|
interface Options {
|
|
306
366
|
textNodeName?: string;
|
|
307
367
|
throwOnDuplicateStringTags?: boolean;
|