| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769 |
- /**
- * Types copied from path-expression-matcher
- * @version <version>
- * @updated <date>
- *
- * Update this file when path-expression-matcher releases a new version.
- * Source: https://github.com/NaturalIntelligence/path-expression-matcher
- */
- /**
- * Options for creating an Expression
- */
- interface ExpressionOptions {
- /**
- * Path separator character
- * @default '.'
- */
- separator?: string;
- }
- /**
- * Parsed segment from an expression pattern
- */
- interface Segment {
- type: 'tag' | 'deep-wildcard';
- tag?: string;
- namespace?: string;
- attrName?: string;
- attrValue?: string;
- position?: 'first' | 'last' | 'odd' | 'even' | 'nth';
- positionValue?: number;
- }
- /**
- * Expression - Parses and stores a tag pattern expression.
- * Patterns are parsed once and stored in an optimized structure for fast matching.
- *
- * @example
- * ```typescript
- * const expr = new Expression("root.users.user");
- * const expr2 = new Expression("..user[id]:first");
- * const expr3 = new Expression("root/users/user", { separator: '/' });
- * ```
- *
- * Pattern Syntax:
- * - `root.users.user` — Match exact path
- * - `..user` — Match "user" at any depth (deep wildcard)
- * - `user[id]` — Match user tag with "id" attribute
- * - `user[id=123]` — Match user tag where id="123"
- * - `user:first` — Match first occurrence of user tag
- * - `ns::user` — Match user tag with namespace "ns"
- * - `ns::user[id]:first` — Combine namespace, attribute, and position
- */
- declare class Expression {
- readonly pattern: string;
- readonly separator: string;
- readonly segments: Segment[];
- constructor(pattern: string, options?: ExpressionOptions);
- get length(): number;
- hasDeepWildcard(): boolean;
- hasAttributeCondition(): boolean;
- hasPositionSelector(): boolean;
- toString(): string;
- }
- // ---------------------------------------------------------------------------
- // MatcherView
- // ---------------------------------------------------------------------------
- /**
- * A lightweight, live read-only view of a Matcher instance.
- *
- * Returned by `Matcher.readOnly()`. The same instance is reused across every
- * callback invocation — no allocation overhead per call. Reads directly from
- * the parent Matcher's internal state so it always reflects the current parser
- * position with no copying or freezing.
- *
- * Mutation methods (`push`, `pop`, `reset`, `updateCurrent`, `restore`) are
- * simply absent — misuse is caught at compile time by TypeScript.
- *
- * This is the type received by all FXP user callbacks when `jPath: false`.
- */
- interface MatcherView {
- readonly separator: string;
- /** Check if current path matches an Expression. */
- matches(expression: Expression): boolean;
- /** Get current tag name, or `undefined` if path is empty. */
- getCurrentTag(): string | undefined;
- /** Get current namespace, or `undefined` if not present. */
- getCurrentNamespace(): string | undefined;
- /** Get attribute value of the current node. */
- getAttrValue(attrName: string): any;
- /** Check if the current node has a given attribute. */
- hasAttr(attrName: string): boolean;
- /** Sibling position of the current node (child index in parent). */
- getPosition(): number;
- /** Occurrence counter of the current tag name at this level. */
- getCounter(): number;
- /** Number of nodes in the current path. */
- getDepth(): number;
- /** Current path as a string (e.g. `"root.users.user"`). */
- toString(separator?: string, includeNamespace?: boolean): string;
- /** Current path as an array of tag names. */
- toArray(): string[];
- /**
- * Create a snapshot of the current state.
- * The snapshot can be passed to the real Matcher.restore() if needed.
- */
- snapshot(): MatcherSnapshot;
- }
- /**
- * @deprecated Use {@link MatcherView} instead.
- * Alias kept for backward compatibility.
- */
- type ReadonlyMatcher = MatcherView;
- /** Internal node structure — exposed via snapshot only. */
- interface PathNode {
- tag: string;
- namespace?: string;
- position: number;
- counter: number;
- values?: Record<string, any>;
- }
- /** Snapshot of matcher state returned by `snapshot()` and `readOnly().snapshot()`. */
- interface MatcherSnapshot {
- path: PathNode[];
- siblingStacks: Map<string, number>[];
- }
- /**********************************************************************
- *
- * END of path-expression-matcher relevant typings
- *
- **********************************************************************/
- // jPath: true → string
- // jPath: false → MatcherView
- type JPathOrMatcher = string | MatcherView;
- type JPathOrExpression = string | Expression;
- type ProcessEntitiesOptions = {
- /**
- * Whether to enable entity processing
- *
- * Defaults to `true`
- */
- enabled?: boolean;
- /**
- * Maximum size in characters for a single entity definition
- *
- * Defaults to `10000`
- */
- maxEntitySize?: number;
- /**
- * Maximum depth for nested entity references (reserved for future use)
- *
- * Defaults to `10`
- */
- maxExpansionDepth?: number;
- /**
- * Maximum total number of entity expansions allowed
- *
- * Defaults to `1000`
- */
- maxTotalExpansions?: number;
- /**
- * Maximum total expanded content length in characters
- *
- * Defaults to `100000`
- */
- maxExpandedLength?: number;
- /**
- * Maximum number of entities allowed in the XML
- *
- * Defaults to `100`
- */
- maxEntityCount?: number;
- /**
- * Array of tag names where entity replacement is allowed.
- * If null, entities are replaced in all tags.
- *
- * Defaults to `null`
- */
- allowedTags?: string[] | null;
- /**
- * Custom filter function to determine if entities should be replaced in a tag
- *
- * @param tagName - The name of the current tag
- * @param jPathOrMatcher - The jPath string (if jPath: true) or Matcher instance (if jPath: false)
- * @returns `true` to allow entity replacement, `false` to skip
- *
- * Defaults to `null`
- */
- tagFilter?: ((tagName: string, jPathOrMatcher: JPathOrMatcher) => boolean) | null;
- };
- type EntityDecoderOptions = {
- setExternalEntities: (entities: Record<string, string>) => void;
- addInputEntities: (entities: Record<string, string>) => void;
- reset: () => void;
- decode: (text: string) => string;
- setXmlVersion: (version: string) => void;
- }
- type X2jOptions = {
- /**
- * Preserve the order of tags in resulting JS object
- *
- * Defaults to `false`
- */
- preserveOrder?: boolean;
- /**
- * Give a prefix to the attribute name in the resulting JS object
- *
- * Defaults to '@_'
- */
- attributeNamePrefix?: string;
- /**
- * A name to group all attributes of a tag under, or `false` to disable
- *
- * Defaults to `false`
- */
- attributesGroupName?: false | string;
- /**
- * The name of the next node in the resulting JS
- *
- * Defaults to `#text`
- */
- textNodeName?: string;
- /**
- * Whether to ignore attributes when parsing
- *
- * When `true` - ignores all the attributes
- *
- * When `false` - parses all the attributes
- *
- * When `Array<string | RegExp>` - filters out attributes that match provided patterns
- *
- * When `Function` - calls the function for each attribute and filters out those for which the function returned `true`
- *
- * Defaults to `true`
- */
- ignoreAttributes?: boolean | (string | RegExp)[] | ((attrName: string, jPathOrMatcher: JPathOrMatcher) => boolean);
- /**
- * Whether to remove namespace string from tag and attribute names
- *
- * Defaults to `false`
- */
- removeNSPrefix?: boolean;
- /**
- * Whether to allow attributes without value
- *
- * Defaults to `false`
- */
- allowBooleanAttributes?: boolean;
- /**
- * Whether to parse tag value with `strnum` package
- *
- * Defaults to `true`
- */
- parseTagValue?: boolean;
- /**
- * Whether to parse attribute value with `strnum` package
- *
- * Defaults to `false`
- */
- parseAttributeValue?: boolean;
- /**
- * Whether to remove surrounding whitespace from tag or attribute value
- *
- * Defaults to `true`
- */
- trimValues?: boolean;
- /**
- * Give a property name to set CDATA values to instead of merging to tag's text value
- *
- * Defaults to `false`
- */
- cdataPropName?: false | string;
- /**
- * If set, parse comments and set as this property
- *
- * Defaults to `false`
- */
- commentPropName?: false | string;
- /**
- * Control how tag value should be parsed. Called only if tag value is not empty
- *
- * @param tagName - The name of the tag
- * @param tagValue - The value of the tag
- * @param jPathOrMatcher - The jPath string (if jPath: true) or Matcher instance (if jPath: false)
- * @param hasAttributes - Whether the tag has attributes
- * @param isLeafNode - Whether the tag is a leaf node
- * @returns {undefined|null} `undefined` or `null` to set original value.
- * @returns {unknown}
- *
- * 1. Different value or value with different data type to set new value.
- * 2. Same value to set parsed value if `parseTagValue: true`.
- *
- * Defaults to `(tagName, val, jPathOrMatcher, hasAttributes, isLeafNode) => val`
- */
- tagValueProcessor?: (tagName: string, tagValue: string, jPathOrMatcher: JPathOrMatcher, hasAttributes: boolean, isLeafNode: boolean) => unknown;
- /**
- * Control how attribute value should be parsed
- *
- * @param attrName - The name of the attribute
- * @param attrValue - The value of the attribute
- * @param jPathOrMatcher - The jPath string (if jPath: true) or Matcher instance (if jPath: false)
- * @returns {undefined|null} `undefined` or `null` to set original value
- * @returns {unknown}
- *
- * Defaults to `(attrName, val, jPathOrMatcher) => val`
- */
- attributeValueProcessor?: (attrName: string, attrValue: string, jPathOrMatcher: JPathOrMatcher) => unknown;
- /**
- * Options to pass to `strnum` for parsing numbers
- *
- * Defaults to `{ hex: true, leadingZeros: true, eNotation: true }`
- */
- numberParseOptions?: strnumOptions;
- /**
- * Nodes to stop parsing at
- *
- * Accepts string patterns or Expression objects from path-expression-matcher
- *
- * String patterns starting with "*." are automatically converted to ".." for backward compatibility
- *
- * Defaults to `[]`
- */
- stopNodes?: JPathOrExpression[];
- /**
- * List of tags without closing tags
- *
- * Defaults to `[]`
- */
- unpairedTags?: string[];
- /**
- * Whether to always create a text node
- *
- * Defaults to `false`
- */
- alwaysCreateTextNode?: boolean;
- /**
- * Determine whether a tag should be parsed as an array
- *
- * @param tagName - The name of the tag
- * @param jPathOrMatcher - The jPath string (if jPath: true) or Matcher instance (if jPath: false)
- * @param isLeafNode - Whether the tag is a leaf node
- * @param isAttribute - Whether this is an attribute
- * @returns {boolean}
- *
- * Defaults to `() => false`
- */
- isArray?: (tagName: string, jPathOrMatcher: JPathOrMatcher, isLeafNode: boolean, isAttribute: boolean) => boolean;
- /**
- * Whether to process default and DOCTYPE entities
- *
- * When `true` - enables entity processing with default limits
- *
- * When `false` - disables all entity processing
- *
- * When `ProcessEntitiesOptions` - enables entity processing with custom configuration
- *
- * Defaults to `true`
- */
- processEntities?: boolean | ProcessEntitiesOptions;
- /**
- * Whether to process HTML entities
- *
- * Defaults to `false`
- * @deprecated Use `entityDecoder` instead
- */
- htmlEntities?: boolean;
- /**
- * Custom entity decoder
- */
- entityDecoder?: EntityDecoderOptions;
- /**
- * Whether to ignore the declaration tag from output
- *
- * Defaults to `false`
- */
- ignoreDeclaration?: boolean;
- /**
- * Whether to ignore Pi tags
- *
- * Defaults to `false`
- */
- ignorePiTags?: boolean;
- /**
- * Transform tag names
- *
- * Defaults to `false`
- */
- transformTagName?: ((tagName: string) => string) | false;
- /**
- * Transform attribute names
- *
- * Defaults to `false`
- */
- transformAttributeName?: ((attributeName: string) => string) | false;
- /**
- * Change the tag name when a different name is returned. Skip the tag from parsed result when false is returned.
- * Modify `attrs` object to control attributes for the given tag.
- *
- * @param tagName - The name of the tag
- * @param jPathOrMatcher - The jPath string (if jPath: true) or Matcher instance (if jPath: false)
- * @param attrs - The attributes object
- * @returns {string} new tag name.
- * @returns false to skip the tag
- *
- * Defaults to `(tagName, jPathOrMatcher, attrs) => tagName`
- */
- updateTag?: (tagName: string, jPathOrMatcher: JPathOrMatcher, attrs: { [k: string]: string }) => string | boolean;
- /**
- * If true, adds a Symbol to all object nodes, accessible by {@link XMLParser.getMetaDataSymbol} with
- * metadata about each the node in the XML file.
- */
- captureMetaData?: boolean;
- /**
- * Maximum number of nested tags
- *
- * Defaults to `100`
- */
- maxNestedTags?: number;
- /**
- * Whether to strictly validate tag names
- *
- * Defaults to `true`
- */
- strictReservedNames?: boolean;
- /**
- * Controls whether callbacks receive jPath as string or Matcher instance
- *
- * When `true` - callbacks receive jPath as string (backward compatible)
- *
- * When `false` - callbacks receive Matcher instance for advanced pattern matching
- *
- * Defaults to `true`
- */
- jPath?: boolean;
- /**
- * Function to sanitize dangerous property names
- *
- * @param name - The name of the property
- * @returns {string} The sanitized name
- *
- * Defaults to `(name) => __name`
- */
- onDangerousProperty?: (name: string) => string;
- };
- type strnumOptions = {
- hex: boolean;
- leadingZeros: boolean,
- skipLike?: RegExp,
- eNotation?: boolean
- }
- type validationOptions = {
- /**
- * Whether to allow attributes without value
- *
- * Defaults to `false`
- */
- allowBooleanAttributes?: boolean;
- /**
- * List of tags without closing tags
- *
- * Defaults to `[]`
- */
- unpairedTags?: string[];
- };
- type XmlBuilderOptions = {
- /**
- * Give a prefix to the attribute name in the resulting JS object
- *
- * Defaults to '@_'
- */
- attributeNamePrefix?: string;
- /**
- * A name to group all attributes of a tag under, or `false` to disable
- *
- * Defaults to `false`
- */
- attributesGroupName?: false | string;
- /**
- * The name of the next node in the resulting JS
- *
- * Defaults to `#text`
- */
- textNodeName?: string;
- /**
- * Whether to ignore attributes when building
- *
- * When `true` - ignores all the attributes
- *
- * When `false` - builds all the attributes
- *
- * When `Array<string | RegExp>` - filters out attributes that match provided patterns
- *
- * When `Function` - calls the function for each attribute and filters out those for which the function returned `true`
- *
- * Defaults to `true`
- */
- ignoreAttributes?: boolean | (string | RegExp)[] | ((attrName: string, jPath: string) => boolean);
- /**
- * Give a property name to set CDATA values to instead of merging to tag's text value
- *
- * Defaults to `false`
- */
- cdataPropName?: false | string;
- /**
- * If set, parse comments and set as this property
- *
- * Defaults to `false`
- */
- commentPropName?: false | string;
- /**
- * Whether to make output pretty instead of single line
- *
- * Defaults to `false`
- */
- format?: boolean;
- /**
- * If `format` is set to `true`, sets the indent string
- *
- * Defaults to ` `
- */
- indentBy?: string;
- /**
- * Give a name to a top-level array
- *
- * Defaults to `undefined`
- */
- arrayNodeName?: string;
- /**
- * Create empty tags for tags with no text value
- *
- * Defaults to `false`
- */
- suppressEmptyNode?: boolean;
- /**
- * Suppress an unpaired tag
- *
- * Defaults to `true`
- */
- suppressUnpairedNode?: boolean;
- /**
- * Don't put a value for boolean attributes
- *
- * Defaults to `true`
- */
- suppressBooleanAttributes?: boolean;
- /**
- * Preserve the order of tags in resulting JS object
- *
- * Defaults to `false`
- */
- preserveOrder?: boolean;
- /**
- * List of tags without closing tags
- *
- * Defaults to `[]`
- */
- unpairedTags?: string[];
- /**
- * Nodes to stop parsing at
- *
- * Accepts string patterns or Expression objects from path-expression-matcher
- *
- * Defaults to `[]`
- */
- stopNodes?: JPathOrExpression[];
- /**
- * Control how tag value should be parsed. Called only if tag value is not empty
- *
- * @returns {undefined|null} `undefined` or `null` to set original value.
- * @returns {unknown}
- *
- * 1. Different value or value with different data type to set new value.
- * 2. Same value to set parsed value if `parseTagValue: true`.
- *
- * Defaults to `(tagName, val, jPath, hasAttributes, isLeafNode) => val`
- */
- tagValueProcessor?: (name: string, value: unknown) => unknown;
- /**
- * Control how attribute value should be parsed
- *
- * @param attrName
- * @param attrValue
- * @param jPath
- * @returns {undefined|null} `undefined` or `null` to set original value
- * @returns {unknown}
- *
- * Defaults to `(attrName, val, jPath) => val`
- */
- attributeValueProcessor?: (name: string, value: unknown) => unknown;
- /**
- * Whether to process default and DOCTYPE entities
- *
- * Defaults to `true`
- */
- processEntities?: boolean;
- oneListGroup?: boolean;
- /**
- * Maximum number of nested tags
- *
- * Defaults to `100`
- */
- maxNestedTags?: number;
- };
- type ESchema = string | object | Array<string | object>;
- type ValidationError = {
- err: {
- code: string;
- msg: string,
- line: number,
- col: number
- };
- };
- declare class XMLParser {
- constructor(options?: X2jOptions);
- parse(xmlData: string | Uint8Array, validationOptions?: validationOptions | boolean): any;
- /**
- * Add Entity which is not by default supported by this library
- * @param entityIdentifier {string} Eg: 'ent' for &ent;
- * @param entityValue {string} Eg: '\r'
- */
- addEntity(entityIdentifier: string, entityValue: string): void;
- /**
- * Returns a Symbol that can be used to access the {@link XMLMetaData}
- * property on a node.
- *
- * If Symbol is not available in the environment, an ordinary property is used
- * and the name of the property is here returned.
- *
- * The XMLMetaData property is only present when {@link X2jOptions.captureMetaData}
- * is true in the options.
- */
- static getMetaDataSymbol(): Symbol;
- }
- declare class XMLValidator {
- static validate(xmlData: string, options?: validationOptions): true | ValidationError;
- }
- /**
- * @deprecated Use npm package 'fast-xml-builder' instead
- */
- declare class XMLBuilder {
- constructor(options?: XmlBuilderOptions);
- build(jObj: any): string;
- }
- /**
- * This object is available on nodes via the symbol {@link XMLParser.getMetaDataSymbol}
- * when {@link X2jOptions.captureMetaData} is true.
- */
- declare interface XMLMetaData {
- /** The index, if available, of the character where the XML node began in the input stream. */
- startIndex?: number;
- }
- declare namespace fxp {
- export {
- XMLParser,
- XMLValidator,
- XMLBuilder,
- XMLMetaData,
- XmlBuilderOptions,
- X2jOptions,
- ESchema,
- ValidationError,
- strnumOptions,
- validationOptions,
- ProcessEntitiesOptions,
- Expression,
- ReadonlyMatcher,
- MatcherView,
- JPathOrMatcher,
- JPathOrExpression,
- EntityDecoderOptions
- }
- }
- export = fxp;
|