parser.d.ts 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { IRawFrameType } from './types.js';
  2. /**
  3. * This is an evented, rec descent parser.
  4. * A stream of Octets can be passed and whenever it recognizes
  5. * a complete Frame or an incoming ping it will invoke the registered callbacks.
  6. *
  7. * All incoming Octets are fed into _onByte function.
  8. * Depending on current state the _onByte function keeps changing.
  9. * Depending on the state it keeps accumulating into _token and _results.
  10. * State is indicated by current value of _onByte, all states are named as _collect.
  11. *
  12. * STOMP standards https://stomp.github.io/stomp-specification-1.2.html
  13. * imply that all lengths are considered in bytes (instead of string lengths).
  14. * So, before actual parsing, if the incoming data is String it is converted to Octets.
  15. * This allows faithful implementation of the protocol and allows NULL Octets to be present in the body.
  16. *
  17. * There is no peek function on the incoming data.
  18. * When a state change occurs based on an Octet without consuming the Octet,
  19. * the Octet, after state change, is fed again (_reinjectByte).
  20. * This became possible as the state change can be determined by inspecting just one Octet.
  21. *
  22. * There are two modes to collect the body, if content-length header is there then it by counting Octets
  23. * otherwise it is determined by NULL terminator.
  24. *
  25. * Following the standards, the command and headers are converted to Strings
  26. * and the body is returned as Octets.
  27. * Headers are returned as an array and not as Hash - to allow multiple occurrence of an header.
  28. *
  29. * This parser does not use Regular Expressions as that can only operate on Strings.
  30. *
  31. * It handles if multiple STOMP frames are given as one chunk, a frame is split into multiple chunks, or
  32. * any combination there of. The parser remembers its state (any partial frame) and continues when a new chunk
  33. * is pushed.
  34. *
  35. * Typically the higher level function will convert headers to Hash, handle unescaping of header values
  36. * (which is protocol version specific), and convert body to text.
  37. *
  38. * Check the parser.spec.js to understand cases that this parser is supposed to handle.
  39. *
  40. * Part of `@stomp/stompjs`.
  41. *
  42. * @internal
  43. */
  44. export declare class Parser {
  45. onFrame: (rawFrame: IRawFrameType) => void;
  46. onIncomingPing: () => void;
  47. private readonly _encoder;
  48. private readonly _decoder;
  49. private _results;
  50. private _token;
  51. private _headerKey;
  52. private _bodyBytesRemaining;
  53. private _onByte;
  54. constructor(onFrame: (rawFrame: IRawFrameType) => void, onIncomingPing: () => void);
  55. parseChunk(segment: string | ArrayBuffer, appendMissingNULLonIncoming?: boolean): void;
  56. private _collectFrame;
  57. private _collectCommand;
  58. private _collectHeaders;
  59. private _reinjectByte;
  60. private _collectHeaderKey;
  61. private _collectHeaderValue;
  62. private _setupCollectBody;
  63. private _collectBodyNullTerminated;
  64. private _collectBodyFixedSize;
  65. private _retrievedBody;
  66. private _consumeByte;
  67. private _consumeTokenAsUTF8;
  68. private _consumeTokenAsRaw;
  69. private _initState;
  70. }