|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635 |
- /**
- * 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<O> = (tag: StartTagForOptions<O>) => void;
- export declare type AttributeEventForOptions<O extends SaxesOptions> = O extends {
- xmlns: true;
- } ? SaxesAttributeNSIncomplete : O extends {
- xmlns?: false | undefined;
- } ? SaxesAttributePlain : SaxesAttribute;
- /**
- * Event handler for attributes.
- */
- export declare type AttributeHandler<O> = (attribute: AttributeEventForOptions<O>) => 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<O> = (tag: TagForOptions<O>) => 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<O> = (tag: TagForOptions<O>) => 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<O, N extends EventName> = {
- "xmldecl": XMLDeclHandler;
- "text": TextHandler;
- "processinginstruction": PIHandler;
- "doctype": DoctypeHandler;
- "comment": CommentHandler;
- "opentagstart": OpenTagStartHandler<O>;
- "attribute": AttributeHandler<O>;
- "opentag": OpenTagHandler<O>;
- "closetag": CloseTagHandler<O>;
- "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<SaxesAttributeNS, "uri">;
- /**
- * 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 ``<a:b>`` 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<string, SaxesAttributeNS> | Record<string, string>;
- /**
- * The namespace bindings in effect.
- */
- ns?: Record<string, string>;
- /**
- * The tag's prefix. For instance ``<a:b>`` would have ``"a"`` for
- * ``prefix``. Undefined if we do not track namespaces.
- */
- prefix?: string;
- /**
- * The tag's local name. For instance ``<a:b>`` 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. ``<foo/>``). */
- 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<SaxesTag, "name" | "attributes" | "ns">;
- /**
- * 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<SaxesStartTag, "name" | "attributes">;
- /**
- * 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<SaxesStartTag>;
- /**
- * This are the fields that are present on a complete tag produced by a parser
- * that does process namespaces.
- */
- export declare type SaxesTagNS = Required<SaxesTag> & {
- attributes: Record<string, SaxesAttributeNS>;
- };
- /**
- * 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<SaxesTag, "name" | "attributes" | "isSelfClosing"> & {
- attributes: Record<string, string>;
- };
- /**
- * 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<string, string>;
- /**
- * 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<XMLVersionOptions["defaultXMLVersion"], undefined>;
- }
- /**
- * The entire set of options supported by saxes.
- */
- export declare type SaxesOptions = CommonOptions & NSOptions & XMLVersionOptions;
- export declare type TagForOptions<O extends SaxesOptions> = O extends {
- xmlns: true;
- } ? SaxesTagNS : O extends {
- xmlns?: false | undefined;
- } ? SaxesTagPlain : SaxesTag;
- export declare type StartTagForOptions<O extends SaxesOptions> = O extends {
- xmlns: true;
- } ? SaxesStartTagNS : O extends {
- xmlns?: false | undefined;
- } ? SaxesStartTagPlain : SaxesStartTag;
- export declare class SaxesParser<O extends SaxesOptions = {}> {
- 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<string, string>;
- /**
- * @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<N extends EventName>(name: N, handler: EventNameToHandler<O, N>): 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 | {} | 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;
- }
|