/** * The list of supported events. */ export declare const EVENTS: readonly ["xmldecl", "text", "processinginstruction", "doctype", "comment", "opentagstart", "attribute", "opentag", "closetag", "cdata", "error", "end", "ready"]; /** * Event handler for the * * @param text The text data encountered by the parser. * */ export declare type XMLDeclHandler = (decl: XMLDecl) => void; /** * Event handler for text data. * * @param text The text data encountered by the parser. * */ export declare type TextHandler = (text: string) => void; /** * Event handler for processing instructions. * * @param data The target and body of the processing instruction. */ export declare type PIHandler = (data: { target: string; body: string; }) => void; /** * Event handler for doctype. * * @param doctype The doctype contents. */ export declare type DoctypeHandler = (doctype: string) => void; /** * Event handler for comments. * * @param comment The comment contents. */ export declare type CommentHandler = (comment: string) => void; /** * Event handler for the start of an open tag. This is called as soon as we * have a tag name. * * @param tag The tag. */ export declare type OpenTagStartHandler = (tag: StartTagForOptions) => void; export declare type AttributeEventForOptions = O extends { xmlns: true; } ? SaxesAttributeNSIncomplete : O extends { xmlns?: false | undefined; } ? SaxesAttributePlain : SaxesAttribute; /** * Event handler for attributes. */ export declare type AttributeHandler = (attribute: AttributeEventForOptions) => void; /** * Event handler for an open tag. This is called when the open tag is * complete. (We've encountered the ">" that ends the open tag.) * * @param tag The tag. */ export declare type OpenTagHandler = (tag: TagForOptions) => void; /** * Event handler for a close tag. Note that for self-closing tags, this is * called right after ``opentag``. * * @param tag The tag. */ export declare type CloseTagHandler = (tag: TagForOptions) => void; /** * Event handler for a CDATA section. This is called when ending the * CDATA section. * * @param cdata The contents of the CDATA section. */ export declare type CDataHandler = (cdata: string) => void; /** * Event handler for the stream end. This is called when the stream has been * closed with ``close`` or by passing ``null`` to ``write``. */ export declare type EndHandler = () => void; /** * Event handler indicating parser readiness . This is called when the parser * is ready to parse a new document. */ export declare type ReadyHandler = () => void; /** * Event handler indicating an error. * * @param err The error that occurred. */ export declare type ErrorHandler = (err: Error) => void; export declare type EventName = (typeof EVENTS)[number]; export declare type EventNameToHandler = { "xmldecl": XMLDeclHandler; "text": TextHandler; "processinginstruction": PIHandler; "doctype": DoctypeHandler; "comment": CommentHandler; "opentagstart": OpenTagStartHandler; "attribute": AttributeHandler; "opentag": OpenTagHandler; "closetag": CloseTagHandler; "cdata": CDataHandler; "error": ErrorHandler; "end": EndHandler; "ready": ReadyHandler; }[N]; /** * This interface defines the structure of attributes when the parser is * processing namespaces (created with ``xmlns: true``). */ export interface SaxesAttributeNS { /** * The attribute's name. This is the combination of prefix and local name. * For instance ``a:b="c"`` would have ``a:b`` for name. */ name: string; /** * The attribute's prefix. For instance ``a:b="c"`` would have ``"a"`` for * ``prefix``. */ prefix: string; /** * The attribute's local name. For instance ``a:b="c"`` would have ``"b"`` for * ``local``. */ local: string; /** The namespace URI of this attribute. */ uri: string; /** The attribute's value. */ value: string; } /** * This is an attribute, as recorded by a parser which parses namespaces but * prior to the URI being resolvable. This is what is passed to the attribute * event handler. */ export declare type SaxesAttributeNSIncomplete = Exclude; /** * This interface defines the structure of attributes when the parser is * NOT processing namespaces (created with ``xmlns: false``). */ export interface SaxesAttributePlain { /** * The attribute's name. */ name: string; /** The attribute's value. */ value: string; } /** * A saxes attribute, with or without namespace information. */ export declare type SaxesAttribute = SaxesAttributeNS | SaxesAttributePlain; /** * This are the fields that MAY be present on a complete tag. */ export interface SaxesTag { /** * The tag's name. This is the combination of prefix and global name. For * instance ```` would have ``"a:b"`` for ``name``. */ name: string; /** * A map of attribute name to attributes. If namespaces are tracked, the * values in the map are attribute objects. Otherwise, they are strings. */ attributes: Record | Record; /** * The namespace bindings in effect. */ ns?: Record; /** * The tag's prefix. For instance ```` would have ``"a"`` for * ``prefix``. Undefined if we do not track namespaces. */ prefix?: string; /** * The tag's local name. For instance ```` would * have ``"b"`` for ``local``. Undefined if we do not track namespaces. */ local?: string; /** * The namespace URI of this tag. Undefined if we do not track namespaces. */ uri?: string; /** Whether the tag is self-closing (e.g. ````). */ isSelfClosing: boolean; } /** * This type defines the fields that are present on a tag object when * ``onopentagstart`` is called. This interface is namespace-agnostic. */ export declare type SaxesStartTag = Pick; /** * This type defines the fields that are present on a tag object when * ``onopentagstart`` is called on a parser that does not processes namespaces. */ export declare type SaxesStartTagPlain = Pick; /** * This type defines the fields that are present on a tag object when * ``onopentagstart`` is called on a parser that does process namespaces. */ export declare type SaxesStartTagNS = Required; /** * This are the fields that are present on a complete tag produced by a parser * that does process namespaces. */ export declare type SaxesTagNS = Required & { attributes: Record; }; /** * This are the fields that are present on a complete tag produced by a parser * that does not process namespaces. */ export declare type SaxesTagPlain = Pick & { attributes: Record; }; /** * An XML declaration. */ export interface XMLDecl { /** The version specified by the XML declaration. */ version?: string; /** The encoding specified by the XML declaration. */ encoding?: string; /** The value of the standalone parameter */ standalone?: string; } /** * A callback for resolving name prefixes. * * @param prefix The prefix to check. * * @returns The URI corresponding to the prefix, if any. */ export declare type ResolvePrefix = (prefix: string) => string | undefined; export interface CommonOptions { /** Whether to accept XML fragments. Unset means ``false``. */ fragment?: boolean; /** Whether to track positions. Unset means ``true``. */ position?: boolean; /** * A file name to use for error reporting. "File name" is a loose concept. You * could use a URL to some resource, or any descriptive name you like. */ fileName?: string; } export interface NSOptions { /** Whether to track namespaces. Unset means ``false``. */ xmlns?: boolean; /** * A plain object whose key, value pairs define namespaces known before * parsing the XML file. It is not legal to pass bindings for the namespaces * ``"xml"`` or ``"xmlns"``. */ additionalNamespaces?: Record; /** * A function that will be used if the parser cannot resolve a namespace * prefix on its own. */ resolvePrefix?: ResolvePrefix; } export interface NSOptionsWithoutNamespaces extends NSOptions { xmlns?: false; additionalNamespaces?: undefined; resolvePrefix?: undefined; } export interface NSOptionsWithNamespaces extends NSOptions { xmlns: true; } export interface XMLVersionOptions { /** * The default XML version to use. If unspecified, and there is no XML * encoding declaration, the default version is "1.0". */ defaultXMLVersion?: "1.0" | "1.1"; /** * A flag indicating whether to force the XML version used for parsing to the * value of ``defaultXMLVersion``. When this flag is ``true``, * ``defaultXMLVersion`` must be specified. If unspecified, the default value * of this flag is ``false``. */ forceXMLVersion?: boolean; } export interface NoForcedXMLVersion extends XMLVersionOptions { forceXMLVersion?: false; } export interface ForcedXMLVersion extends XMLVersionOptions { forceXMLVersion: true; defaultXMLVersion: Exclude; } /** * The entire set of options supported by saxes. */ export declare type SaxesOptions = CommonOptions & NSOptions & XMLVersionOptions; export declare type TagForOptions = O extends { xmlns: true; } ? SaxesTagNS : O extends { xmlns?: false | undefined; } ? SaxesTagPlain : SaxesTag; export declare type StartTagForOptions = O extends { xmlns: true; } ? SaxesStartTagNS : O extends { xmlns?: false | undefined; } ? SaxesStartTagPlain : SaxesStartTag; export declare class SaxesParser { private readonly fragmentOpt; private readonly xmlnsOpt; private readonly trackPosition; private readonly fileName?; private readonly nameStartCheck; private readonly nameCheck; private readonly isName; private readonly ns; private openWakaBang; private text; private name; private piTarget; private entity; private q; private tags; private tag; private topNS; private chunk; private chunkPosition; private i; private prevI; private carriedFromPrevious?; private forbiddenState; private attribList; private state; private reportedTextBeforeRoot; private reportedTextAfterRoot; private closedRoot; private sawRoot; private xmlDeclPossible; private xmlDeclExpects; private entityReturnState?; private processAttribs; private positionAtNewLine; private doctype; private getCode; private isChar; private pushAttrib; private _closed; private currentXMLVersion; private readonly stateTable; private xmldeclHandler?; private textHandler?; private piHandler?; private doctypeHandler?; private commentHandler?; private openTagStartHandler?; private openTagHandler?; private closeTagHandler?; private cdataHandler?; private errorHandler?; private endHandler?; private readyHandler?; private attributeHandler?; /** * Indicates whether or not the parser is closed. If ``true``, wait for * the ``ready`` event to write again. */ get closed(): boolean; readonly opt: SaxesOptions; /** * The XML declaration for this document. */ xmlDecl: XMLDecl; /** * The line number of the next character to be read by the parser. This field * is one-based. (The first line is numbered 1.) */ line: number; /** * The column number of the next character to be read by the parser. * * This field is zero-based. (The first column is 0.) * * This field counts columns by *Unicode character*. Note that this *can* * be different from the index of the character in a JavaScript string due * to how JavaScript handles astral plane characters. * * See [[columnIndex]] for a number that corresponds to the JavaScript index. */ column: number; /** * A map of entity name to expansion. */ ENTITIES: Record; /** * @param opt The parser options. */ constructor(opt?: O); _init(): void; /** * The stream position the parser is currently looking at. This field is * zero-based. * * This field is not based on counting Unicode characters but is to be * interpreted as a plain index into a JavaScript string. */ get position(): number; /** * The column number of the next character to be read by the parser. * * This field is zero-based. (The first column in a line is 0.) * * This field reports the index at which the next character would be in the * line if the line were represented as a JavaScript string. Note that this * *can* be different to a count based on the number of *Unicode characters* * due to how JavaScript handles astral plane characters. * * See [[column]] for a number that corresponds to a count of Unicode * characters. */ get columnIndex(): number; /** * Set an event listener on an event. The parser supports one handler per * event type. If you try to set an event handler over an existing handler, * the old handler is silently overwritten. * * @param name The event to listen to. * * @param handler The handler to set. */ on(name: N, handler: EventNameToHandler): void; /** * Unset an event handler. * * @parma name The event to stop listening to. */ off(name: EventName): void; /** * Make an error object. The error object will have a message that contains * the ``fileName`` option passed at the creation of the parser. If position * tracking was turned on, it will also have line and column number * information. * * @param message The message describing the error to report. * * @returns An error object with a properly formatted message. */ makeError(message: string): Error; /** * Report a parsing error. This method is made public so that client code may * check for issues that are outside the scope of this project and can report * errors. * * @param message The error to report. * * @returns this */ fail(message: string): this; /** * Write a XML data to the parser. * * @param chunk The XML data to write. * * @returns this */ write(chunk: string | object | null): this; /** * Close the current stream. Perform final well-formedness checks and reset * the parser tstate. * * @returns this */ close(): this; /** * Get a single code point out of the current chunk. This updates the current * position if we do position tracking. * * This is the algorithm to use for XML 1.0. * * @returns The character read. */ private getCode10; /** * Get a single code point out of the current chunk. This updates the current * position if we do position tracking. * * This is the algorithm to use for XML 1.1. * * @returns {number} The character read. */ private getCode11; /** * Like ``getCode`` but with the return value normalized so that ``NL`` is * returned for ``NL_LIKE``. */ private getCodeNorm; private unget; /** * Capture characters into a buffer until encountering one of a set of * characters. * * @param chars An array of codepoints. Encountering a character in the array * ends the capture. (``chars`` may safely contain ``NL``.) * * @return The character code that made the capture end, or ``EOC`` if we hit * the end of the chunk. The return value cannot be NL_LIKE: NL is returned * instead. */ private captureTo; /** * Capture characters into a buffer until encountering a character. * * @param char The codepoint that ends the capture. **NOTE ``char`` MAY NOT * CONTAIN ``NL``.** Passing ``NL`` will result in buggy behavior. * * @return ``true`` if we ran into the character. Otherwise, we ran into the * end of the current chunk. */ private captureToChar; /** * Capture characters that satisfy ``isNameChar`` into the ``name`` field of * this parser. * * @return The character code that made the test fail, or ``EOC`` if we hit * the end of the chunk. The return value cannot be NL_LIKE: NL is returned * instead. */ private captureNameChars; /** * Skip white spaces. * * @return The character that ended the skip, or ``EOC`` if we hit * the end of the chunk. The return value cannot be NL_LIKE: NL is returned * instead. */ private skipSpaces; private setXMLVersion; private sBegin; private sBeginWhitespace; private sDoctype; private sDoctypeQuote; private sDTD; private sDTDQuoted; private sDTDOpenWaka; private sDTDOpenWakaBang; private sDTDComment; private sDTDCommentEnding; private sDTDCommentEnded; private sDTDPI; private sDTDPIEnding; private sText; private sEntity; private sOpenWaka; private sOpenWakaBang; private sComment; private sCommentEnding; private sCommentEnded; private sCData; private sCDataEnding; private sCDataEnding2; private sPIFirstChar; private sPIRest; private sPIBody; private sPIEnding; private sXMLDeclNameStart; private sXMLDeclName; private sXMLDeclEq; private sXMLDeclValueStart; private sXMLDeclValue; private sXMLDeclSeparator; private sXMLDeclEnding; private sOpenTag; private sOpenTagSlash; private sAttrib; private sAttribName; private sAttribNameSawWhite; private sAttribValue; private sAttribValueQuoted; private sAttribValueClosed; private sAttribValueUnquoted; private sCloseTag; private sCloseTagSawWhite; private handleTextInRoot; private handleTextOutsideRoot; private pushAttribNS; private pushAttribPlain; /** * End parsing. This performs final well-formedness checks and resets the * parser to a clean state. * * @returns this */ private end; /** * Resolve a namespace prefix. * * @param prefix The prefix to resolve. * * @returns The namespace URI or ``undefined`` if the prefix is not defined. */ resolve(prefix: string): string | undefined; /** * Parse a qname into its prefix and local name parts. * * @param name The name to parse * * @returns */ private qname; private processAttribsNS; private processAttribsPlain; /** * Handle a complete open tag. This parser code calls this once it has seen * the whole tag. This method checks for well-formeness and then emits * ``onopentag``. */ private openTag; /** * Handle a complete self-closing tag. This parser code calls this once it has * seen the whole tag. This method checks for well-formeness and then emits * ``onopentag`` and ``onclosetag``. */ private openSelfClosingTag; /** * Handle a complete close tag. This parser code calls this once it has seen * the whole tag. This method checks for well-formeness and then emits * ``onclosetag``. */ private closeTag; /** * Resolves an entity. Makes any necessary well-formedness checks. * * @param entity The entity to resolve. * * @returns The parsed entity. */ private parseEntity; }