tedious 20.3.2 → 20.3.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"stream-parser.js","names":["_token","require","_colinfoTokenParser","_interopRequireDefault","_colmetadataTokenParser","_doneTokenParser","_envChangeTokenParser","_infoerrorTokenParser","_fedauthInfoParser","_featureExtAckParser","_loginackTokenParser","_orderTokenParser","_returnstatusTokenParser","_returnvalueTokenParser","_rowTokenParser","_nbcrowTokenParser","_sspiTokenParser","_tabnameTokenParser","_helpers","e","__esModule","default","Parser","debug","colMetadata","options","iterator","buffer","position","parseTokens","iterable","parser","waitForChunk","err","length","type","readUInt8","token","readToken","undefined","TYPE","DONE","readDoneToken","DONEPROC","readDoneProcToken","DONEINPROC","readDoneInProcToken","ERROR","readErrorToken","INFO","readInfoToken","ENVCHANGE","readEnvChangeToken","LOGINACK","readLoginAckToken","RETURNSTATUS","readReturnStatusToken","ORDER","readOrderToken","FEDAUTHINFO","readFedAuthInfoToken","SSPI","readSSPIToken","COLMETADATA","readColMetadataToken","RETURNVALUE","readReturnValueToken","ROW","readRowToken","NBCROW","readNbcRowToken","FEATUREEXTACK","readFeatureExtAckToken","TABNAME","readTabNameToken","COLINFO","readColInfoToken","Error","result","featureExtAckParser","NotEnoughDataError","then","offset","value","tabNameParser","colInfoParser","nbcRowParser","returnValueParser","colMetadataParser","columns","sspiParser","fedAuthInfoParser","orderParser","returnStatusParser","loginAckParser","envChangeParser","rowParser","infoParser","errorParser","doneInProcParser","doneProcParser","doneParser","constructor","Symbol","asyncIterator","call","Buffer","alloc","next","done","concat","slice","_default","exports","module"],"sources":["../../src/token/stream-parser.ts"],"sourcesContent":["import Debug from '../debug';\nimport { type InternalConnectionOptions } from '../connection';\n\nimport { TYPE, ColInfoToken, ColMetadataToken, DoneProcToken, DoneToken, DoneInProcToken, ErrorMessageToken, InfoMessageToken, RowToken, type EnvChangeToken, LoginAckToken, ReturnStatusToken, OrderToken, FedAuthInfoToken, SSPIToken, ReturnValueToken, NBCRowToken, FeatureExtAckToken, TabNameToken, Token } from './token';\n\nimport colInfoParser from './colinfo-token-parser';\nimport colMetadataParser, { type ColumnMetadata } from './colmetadata-token-parser';\nimport { doneParser, doneInProcParser, doneProcParser } from './done-token-parser';\nimport envChangeParser from './env-change-token-parser';\nimport { errorParser, infoParser } from './infoerror-token-parser';\nimport fedAuthInfoParser from './fedauth-info-parser';\nimport featureExtAckParser from './feature-ext-ack-parser';\nimport loginAckParser from './loginack-token-parser';\nimport orderParser from './order-token-parser';\nimport returnStatusParser from './returnstatus-token-parser';\nimport returnValueParser from './returnvalue-token-parser';\nimport rowParser from './row-token-parser';\nimport nbcRowParser from './nbcrow-token-parser';\nimport sspiParser from './sspi-token-parser';\nimport tabNameParser from './tabname-token-parser';\nimport { NotEnoughDataError } from './helpers';\n\nexport type ParserOptions = Pick<InternalConnectionOptions, 'useUTC' | 'lowerCaseGuids' | 'tdsVersion' | 'useColumnNames' | 'columnNameReplacer' | 'camelCaseColumns'>;\n\nclass Parser {\n debug: Debug;\n colMetadata: ColumnMetadata[];\n options: ParserOptions;\n\n iterator: AsyncIterator<Buffer, any, undefined> | Iterator<Buffer, any, undefined>;\n buffer: Buffer;\n position: number;\n\n static async *parseTokens(iterable: AsyncIterable<Buffer> | Iterable<Buffer>, debug: Debug, options: ParserOptions, colMetadata: ColumnMetadata[] = []) {\n const parser = new Parser(iterable, debug, options);\n parser.colMetadata = colMetadata;\n\n while (true) {\n try {\n await parser.waitForChunk();\n } catch (err: unknown) {\n if (parser.position === parser.buffer.length) {\n return;\n }\n\n throw err;\n }\n\n while (parser.buffer.length >= parser.position + 1) {\n const type = parser.buffer.readUInt8(parser.position);\n parser.position += 1;\n\n const token = parser.readToken(type);\n if (token !== undefined) {\n yield token;\n }\n }\n }\n }\n\n readToken(type: number): Token | undefined | Promise<Token | undefined> {\n switch (type) {\n case TYPE.DONE: {\n return this.readDoneToken();\n }\n\n case TYPE.DONEPROC: {\n return this.readDoneProcToken();\n }\n\n case TYPE.DONEINPROC: {\n return this.readDoneInProcToken();\n }\n\n case TYPE.ERROR: {\n return this.readErrorToken();\n }\n\n case TYPE.INFO: {\n return this.readInfoToken();\n }\n\n case TYPE.ENVCHANGE: {\n return this.readEnvChangeToken();\n }\n\n case TYPE.LOGINACK: {\n return this.readLoginAckToken();\n }\n\n case TYPE.RETURNSTATUS: {\n return this.readReturnStatusToken();\n }\n\n case TYPE.ORDER: {\n return this.readOrderToken();\n }\n\n case TYPE.FEDAUTHINFO: {\n return this.readFedAuthInfoToken();\n }\n\n case TYPE.SSPI: {\n return this.readSSPIToken();\n }\n\n case TYPE.COLMETADATA: {\n return this.readColMetadataToken();\n }\n\n case TYPE.RETURNVALUE: {\n return this.readReturnValueToken();\n }\n\n case TYPE.ROW: {\n return this.readRowToken();\n }\n\n case TYPE.NBCROW: {\n return this.readNbcRowToken();\n }\n\n case TYPE.FEATUREEXTACK: {\n return this.readFeatureExtAckToken();\n }\n\n case TYPE.TABNAME: {\n return this.readTabNameToken();\n }\n\n case TYPE.COLINFO: {\n return this.readColInfoToken();\n }\n\n default: {\n throw new Error('Unknown type: ' + type);\n }\n }\n }\n\n readFeatureExtAckToken(): FeatureExtAckToken | Promise<FeatureExtAckToken> {\n let result;\n\n try {\n result = featureExtAckParser(this.buffer, this.position, this.options);\n } catch (err: any) {\n if (err instanceof NotEnoughDataError) {\n return this.waitForChunk().then(() => {\n return this.readFeatureExtAckToken();\n });\n }\n\n throw err;\n }\n\n this.position = result.offset;\n return result.value;\n }\n\n readTabNameToken(): TabNameToken | Promise<TabNameToken> {\n let result;\n\n try {\n result = tabNameParser(this.buffer, this.position, this.options);\n } catch (err: any) {\n if (err instanceof NotEnoughDataError) {\n return this.waitForChunk().then(() => {\n return this.readTabNameToken();\n });\n }\n\n throw err;\n }\n\n this.position = result.offset;\n return result.value;\n }\n\n readColInfoToken(): ColInfoToken | Promise<ColInfoToken> {\n let result;\n\n try {\n result = colInfoParser(this.buffer, this.position, this.options);\n } catch (err: any) {\n if (err instanceof NotEnoughDataError) {\n return this.waitForChunk().then(() => {\n return this.readColInfoToken();\n });\n }\n\n throw err;\n }\n\n this.position = result.offset;\n return result.value;\n }\n\n async readNbcRowToken(): Promise<NBCRowToken> {\n return await nbcRowParser(this);\n }\n\n async readReturnValueToken(): Promise<ReturnValueToken> {\n return await returnValueParser(this);\n }\n\n async readColMetadataToken(): Promise<ColMetadataToken> {\n const token = await colMetadataParser(this);\n this.colMetadata = token.columns;\n return token;\n }\n\n readSSPIToken(): SSPIToken | Promise<SSPIToken> {\n let result;\n\n try {\n result = sspiParser(this.buffer, this.position, this.options);\n } catch (err: any) {\n if (err instanceof NotEnoughDataError) {\n return this.waitForChunk().then(() => {\n return this.readSSPIToken();\n });\n }\n\n throw err;\n }\n\n this.position = result.offset;\n return result.value;\n }\n\n readFedAuthInfoToken(): FedAuthInfoToken | Promise<FedAuthInfoToken> {\n let result;\n\n try {\n result = fedAuthInfoParser(this.buffer, this.position, this.options);\n } catch (err: any) {\n if (err instanceof NotEnoughDataError) {\n return this.waitForChunk().then(() => {\n return this.readFedAuthInfoToken();\n });\n }\n\n throw err;\n }\n\n this.position = result.offset;\n return result.value;\n }\n\n readOrderToken(): OrderToken | Promise<OrderToken> {\n let result;\n\n try {\n result = orderParser(this.buffer, this.position, this.options);\n } catch (err: any) {\n if (err instanceof NotEnoughDataError) {\n return this.waitForChunk().then(() => {\n return this.readOrderToken();\n });\n }\n\n throw err;\n }\n\n this.position = result.offset;\n return result.value;\n }\n\n readReturnStatusToken(): ReturnStatusToken | Promise<ReturnStatusToken> {\n let result;\n\n try {\n result = returnStatusParser(this.buffer, this.position, this.options);\n } catch (err: any) {\n if (err instanceof NotEnoughDataError) {\n return this.waitForChunk().then(() => {\n return this.readReturnStatusToken();\n });\n }\n\n throw err;\n }\n\n this.position = result.offset;\n return result.value;\n }\n\n readLoginAckToken(): LoginAckToken | Promise<LoginAckToken> {\n let result;\n\n try {\n result = loginAckParser(this.buffer, this.position, this.options);\n } catch (err: any) {\n if (err instanceof NotEnoughDataError) {\n return this.waitForChunk().then(() => {\n return this.readLoginAckToken();\n });\n }\n\n throw err;\n }\n\n this.position = result.offset;\n return result.value;\n }\n\n readEnvChangeToken(): EnvChangeToken | undefined | Promise<EnvChangeToken | undefined> {\n let result;\n\n try {\n result = envChangeParser(this.buffer, this.position, this.options);\n } catch (err: any) {\n if (err instanceof NotEnoughDataError) {\n return this.waitForChunk().then(() => {\n return this.readEnvChangeToken();\n });\n }\n\n throw err;\n }\n\n this.position = result.offset;\n return result.value;\n }\n\n readRowToken(): RowToken | Promise<RowToken> {\n return rowParser(this);\n }\n\n readInfoToken(): InfoMessageToken | Promise<InfoMessageToken> {\n let result;\n\n try {\n result = infoParser(this.buffer, this.position, this.options);\n } catch (err: any) {\n if (err instanceof NotEnoughDataError) {\n return this.waitForChunk().then(() => {\n return this.readInfoToken();\n });\n }\n\n throw err;\n }\n\n this.position = result.offset;\n return result.value;\n }\n\n readErrorToken(): ErrorMessageToken | Promise<ErrorMessageToken> {\n let result;\n\n try {\n result = errorParser(this.buffer, this.position, this.options);\n } catch (err: any) {\n if (err instanceof NotEnoughDataError) {\n return this.waitForChunk().then(() => {\n return this.readErrorToken();\n });\n }\n\n throw err;\n }\n\n this.position = result.offset;\n return result.value;\n }\n\n readDoneInProcToken(): DoneInProcToken | Promise<DoneInProcToken> {\n let result;\n\n try {\n result = doneInProcParser(this.buffer, this.position, this.options);\n } catch (err: any) {\n if (err instanceof NotEnoughDataError) {\n return this.waitForChunk().then(() => {\n return this.readDoneInProcToken();\n });\n }\n\n throw err;\n }\n\n this.position = result.offset;\n return result.value;\n }\n\n readDoneProcToken(): DoneProcToken | Promise<DoneProcToken> {\n let result;\n\n try {\n result = doneProcParser(this.buffer, this.position, this.options);\n } catch (err: any) {\n if (err instanceof NotEnoughDataError) {\n return this.waitForChunk().then(() => {\n return this.readDoneProcToken();\n });\n }\n\n throw err;\n }\n\n this.position = result.offset;\n return result.value;\n }\n\n readDoneToken(): DoneToken | Promise<DoneToken> {\n let result;\n\n try {\n result = doneParser(this.buffer, this.position, this.options);\n } catch (err: any) {\n if (err instanceof NotEnoughDataError) {\n return this.waitForChunk().then(() => {\n return this.readDoneToken();\n });\n }\n\n throw err;\n }\n\n this.position = result.offset;\n return result.value;\n }\n\n constructor(iterable: AsyncIterable<Buffer> | Iterable<Buffer>, debug: Debug, options: ParserOptions) {\n this.debug = debug;\n this.colMetadata = [];\n this.options = options;\n\n this.iterator = ((iterable as AsyncIterable<Buffer>)[Symbol.asyncIterator] || (iterable as Iterable<Buffer>)[Symbol.iterator]).call(iterable);\n\n this.buffer = Buffer.alloc(0);\n this.position = 0;\n }\n\n async waitForChunk() {\n const result = await this.iterator.next();\n if (result.done) {\n throw new Error('unexpected end of data');\n }\n\n if (this.position === this.buffer.length) {\n this.buffer = result.value;\n } else {\n this.buffer = Buffer.concat([this.buffer.slice(this.position), result.value]);\n }\n\n this.position = 0;\n }\n}\n\nexport default Parser;\nmodule.exports = Parser;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"stream-parser.js","names":["_token","require","_colinfoTokenParser","_interopRequireDefault","_colmetadataTokenParser","_doneTokenParser","_envChangeTokenParser","_infoerrorTokenParser","_fedauthInfoParser","_featureExtAckParser","_loginackTokenParser","_orderTokenParser","_returnstatusTokenParser","_returnvalueTokenParser","_rowTokenParser","_nbcrowTokenParser","_sspiTokenParser","_tabnameTokenParser","_helpers","e","__esModule","default","Parser","constructor","options","colMetadata","buffer","Buffer","alloc","position","pending","pendingLength","bytesNeeded","tokenReader","undefined","parseTokens","iterable","parser","chunk","write","token","read","end","push","length","appendPending","readToken","err","NotEnoughDataError","Math","max","byteCount","Error","remaining","unshift","subarray","concat","type","TYPE","DONE","parseToken","doneParser","DONEPROC","doneProcParser","DONEINPROC","doneInProcParser","ERROR","errorParser","INFO","infoParser","ENVCHANGE","envChangeParser","LOGINACK","loginAckParser","RETURNSTATUS","returnStatusParser","ORDER","orderParser","FEDAUTHINFO","fedAuthInfoParser","SSPI","sspiParser","FEATUREEXTACK","featureExtAckParser","TABNAME","tabNameParser","COLINFO","colInfoParser","COLMETADATA","startTokenReader","ColMetadataTokenReader","RETURNVALUE","ReturnValueTokenReader","ROW","RowTokenReader","NBCROW","NBCRowTokenReader","result","offset","value","reader","_default","exports","module"],"sources":["../../src/token/stream-parser.ts"],"sourcesContent":["import { type InternalConnectionOptions } from '../connection';\n\nimport { TYPE, type Token } from './token';\n\nimport colInfoParser from './colinfo-token-parser';\nimport { ColMetadataTokenReader, type ColumnMetadata } from './colmetadata-token-parser';\nimport { doneParser, doneInProcParser, doneProcParser } from './done-token-parser';\nimport envChangeParser from './env-change-token-parser';\nimport { errorParser, infoParser } from './infoerror-token-parser';\nimport fedAuthInfoParser from './fedauth-info-parser';\nimport featureExtAckParser from './feature-ext-ack-parser';\nimport loginAckParser from './loginack-token-parser';\nimport orderParser from './order-token-parser';\nimport returnStatusParser from './returnstatus-token-parser';\nimport { ReturnValueTokenReader } from './returnvalue-token-parser';\nimport { RowTokenReader } from './row-token-parser';\nimport { NBCRowTokenReader } from './nbcrow-token-parser';\nimport sspiParser from './sspi-token-parser';\nimport tabNameParser from './tabname-token-parser';\nimport { NotEnoughDataError, type Result } from './helpers';\n\nexport type ParserOptions = Pick<InternalConnectionOptions, 'useUTC' | 'lowerCaseGuids' | 'tdsVersion' | 'useColumnNames' | 'columnNameReplacer' | 'camelCaseColumns'>;\n\n/**\n * Parses a token that is short enough to simply be parsed again from its\n * start if it is not fully available yet.\n */\ntype TokenParser = (buf: Buffer, offset: number, options: ParserOptions) => Result<Token | undefined>;\n\n/**\n * Parses a token that can grow arbitrarily large, and thus needs to be parsed\n * incrementally.\n *\n * The reader starts parsing right after the token's type byte and keeps its\n * progress across calls: if `read` throws a `NotEnoughDataError`, it is\n * called again once more data has arrived.\n */\nexport interface TokenReader {\n read(parser: Parser): Token;\n}\n\n/**\n * A push-based parser for the tokens contained in a TDS token stream.\n *\n * Data is pushed into the parser as it arrives via `write`, and parsed tokens\n * are pulled out via `read`. Tokens are parsed lazily, one at a time, so any\n * effects of handling a token (e.g. the TDS version negotiated via the\n * `LOGINACK` token) apply to the parsing of all tokens that follow it.\n */\nclass Parser {\n declare options: ParserOptions;\n declare colMetadata: ColumnMetadata[];\n\n // The data that is currently being parsed, and the position of the first\n // byte in it that has not been consumed yet.\n declare buffer: Buffer;\n declare position: number;\n\n // Chunks that were written, but not yet appended to `buffer`.\n declare pending: Buffer[];\n declare pendingLength: number;\n\n // The number of unconsumed bytes required for parsing to make progress.\n //\n // Incomplete data is not appended to `buffer` until at least this many\n // bytes are available, so that a large token arriving across many chunks is\n // not parsed again (and copied again) for every chunk.\n declare bytesNeeded: number;\n\n // The reader of an incrementally parsed token that is not complete yet.\n declare tokenReader: TokenReader | undefined;\n\n constructor(options: ParserOptions, colMetadata: ColumnMetadata[] = []) {\n this.options = options;\n this.colMetadata = colMetadata;\n\n this.buffer = Buffer.alloc(0);\n this.position = 0;\n\n this.pending = [];\n this.pendingLength = 0;\n\n this.bytesNeeded = 1;\n this.tokenReader = undefined;\n }\n\n /**\n * Parse all tokens from the given chunks of data.\n */\n static async *parseTokens(iterable: AsyncIterable<Buffer> | Iterable<Buffer>, options: ParserOptions, colMetadata?: ColumnMetadata[]): AsyncGenerator<Token, void, undefined> {\n const parser = new Parser(options, colMetadata);\n\n for await (const chunk of iterable) {\n parser.write(chunk);\n\n let token;\n while ((token = parser.read()) !== undefined) {\n yield token;\n }\n }\n\n parser.end();\n }\n\n /**\n * Add a chunk of data to be parsed.\n */\n write(chunk: Buffer) {\n this.pending.push(chunk);\n this.pendingLength += chunk.length;\n }\n\n /**\n * Parse the next token, or return `undefined` if more data needs to be\n * written first.\n */\n read(): Token | undefined {\n while (true) {\n if (this.buffer.length - this.position < this.bytesNeeded && !this.appendPending()) {\n return undefined;\n }\n\n let token;\n try {\n token = this.tokenReader !== undefined ? this.tokenReader.read(this) : this.readToken();\n } catch (err) {\n if (err instanceof NotEnoughDataError) {\n // Always wait for at least one more byte, so parsing never retries\n // without new data.\n this.bytesNeeded = Math.max(err.byteCount, this.buffer.length + 1) - this.position;\n continue;\n }\n\n throw err;\n }\n\n this.tokenReader = undefined;\n this.bytesNeeded = 1;\n\n // Some tokens (e.g. unknown `ENVCHANGE` types) are skipped.\n if (token !== undefined) {\n return token;\n }\n }\n }\n\n /**\n * Signal that all data was written.\n *\n * Throws if the data ended in the middle of a token.\n */\n end() {\n if (this.tokenReader !== undefined || this.position < this.buffer.length || this.pendingLength > 0) {\n throw new Error('unexpected end of data');\n }\n }\n\n /**\n * Append the pending chunks to the unconsumed data, if that makes enough\n * data available for parsing to make progress.\n */\n appendPending(): boolean {\n const remaining = this.buffer.length - this.position;\n if (remaining + this.pendingLength < this.bytesNeeded) {\n return false;\n }\n\n if (remaining === 0 && this.pending.length === 1) {\n this.buffer = this.pending[0];\n } else {\n this.pending.unshift(this.buffer.subarray(this.position));\n this.buffer = Buffer.concat(this.pending, remaining + this.pendingLength);\n }\n\n this.position = 0;\n this.pending = [];\n this.pendingLength = 0;\n\n return true;\n }\n\n readToken(): Token | undefined {\n const type = this.buffer[this.position];\n\n switch (type) {\n case TYPE.DONE:\n return this.parseToken(doneParser);\n\n case TYPE.DONEPROC:\n return this.parseToken(doneProcParser);\n\n case TYPE.DONEINPROC:\n return this.parseToken(doneInProcParser);\n\n case TYPE.ERROR:\n return this.parseToken(errorParser);\n\n case TYPE.INFO:\n return this.parseToken(infoParser);\n\n case TYPE.ENVCHANGE:\n return this.parseToken(envChangeParser);\n\n case TYPE.LOGINACK:\n return this.parseToken(loginAckParser);\n\n case TYPE.RETURNSTATUS:\n return this.parseToken(returnStatusParser);\n\n case TYPE.ORDER:\n return this.parseToken(orderParser);\n\n case TYPE.FEDAUTHINFO:\n return this.parseToken(fedAuthInfoParser);\n\n case TYPE.SSPI:\n return this.parseToken(sspiParser);\n\n case TYPE.FEATUREEXTACK:\n return this.parseToken(featureExtAckParser);\n\n case TYPE.TABNAME:\n return this.parseToken(tabNameParser);\n\n case TYPE.COLINFO:\n return this.parseToken(colInfoParser);\n\n case TYPE.COLMETADATA:\n return this.startTokenReader(new ColMetadataTokenReader());\n\n case TYPE.RETURNVALUE:\n return this.startTokenReader(new ReturnValueTokenReader());\n\n case TYPE.ROW:\n return this.startTokenReader(new RowTokenReader());\n\n case TYPE.NBCROW:\n return this.startTokenReader(new NBCRowTokenReader());\n\n default:\n throw new Error('Unknown type: ' + type);\n }\n }\n\n parseToken(parser: TokenParser): Token | undefined {\n const result = parser(this.buffer, this.position + 1, this.options);\n this.position = result.offset;\n return result.value;\n }\n\n startTokenReader(reader: TokenReader): Token {\n this.position += 1;\n this.tokenReader = reader;\n return reader.read(this);\n }\n}\n\nexport default Parser;\nmodule.exports = Parser;\n"],"mappings":"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","ignoreList":[]}
@@ -1,15 +1,22 @@
1
1
  import { EventEmitter } from 'events';
2
2
  import { type ParserOptions } from './stream-parser';
3
3
  import Debug from '../debug';
4
- import { Readable } from 'stream';
5
4
  import Message from '../message';
6
5
  import { TokenHandler } from './handler';
6
+ /**
7
+ * Parses the tokens of a message and dispatches them to a `TokenHandler`.
8
+ *
9
+ * Emits `'end'` once all tokens were handled, or `'error'` if parsing or
10
+ * handling a token failed.
11
+ */
7
12
  export declare class Parser extends EventEmitter {
8
13
  debug: Debug;
9
14
  options: ParserOptions;
10
- parser: Readable;
11
- constructor(message: Message, debug: Debug, handler: TokenHandler, options: ParserOptions);
15
+ paused: boolean;
16
+ onResume: (() => void) | undefined;
17
+ constructor(message: Message | Iterable<Buffer>, debug: Debug, handler: TokenHandler, options: ParserOptions);
18
+ run(message: Message | Iterable<Buffer>, handler: TokenHandler): Promise<void>;
12
19
  on: (((event: 'end', listener: () => void) => this) & ((event: string | symbol, listener: (...args: any[]) => void) => this));
13
- pause(): Readable;
14
- resume(): Readable;
20
+ pause(): void;
21
+ resume(): void;
15
22
  }
@@ -6,34 +6,63 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.Parser = void 0;
7
7
  var _events = require("events");
8
8
  var _streamParser = _interopRequireDefault(require("./stream-parser"));
9
- var _stream = require("stream");
10
9
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ /**
11
+ * Parses the tokens of a message and dispatches them to a `TokenHandler`.
12
+ *
13
+ * Emits `'end'` once all tokens were handled, or `'error'` if parsing or
14
+ * handling a token failed.
15
+ */
11
16
  class Parser extends _events.EventEmitter {
12
17
  constructor(message, debug, handler, options) {
13
18
  super();
14
19
  this.debug = debug;
15
20
  this.options = options;
16
- this.parser = _stream.Readable.from(_streamParser.default.parseTokens(message, this.debug, this.options));
17
- this.parser.on('data', token => {
18
- debug.token(token);
19
- handler[token.handlerName](token);
20
- });
21
- this.parser.on('drain', () => {
22
- this.emit('drain');
23
- });
24
- this.parser.on('end', () => {
25
- this.emit('end');
26
- });
27
- this.parser.on('error', error => {
28
- this.emit('error', error);
21
+ this.paused = false;
22
+ this.onResume = undefined;
23
+
24
+ // Emit outside of the promise chain, so an exception thrown by a listener
25
+ // is an uncaught exception (like on master), not an unhandled rejection.
26
+ this.run(message, handler).then(() => {
27
+ process.nextTick(() => this.emit('end'));
28
+ }, error => {
29
+ process.nextTick(() => this.emit('error', error));
29
30
  });
30
31
  }
32
+ async run(message, handler) {
33
+ const parser = new _streamParser.default(this.options);
34
+
35
+ // Iterate manually - unlike `for await`, this does not destroy the message
36
+ // if parsing fails.
37
+ const iterator = Symbol.asyncIterator in message ? message[Symbol.asyncIterator]() : message[Symbol.iterator]();
38
+ let result;
39
+ while (!(result = await iterator.next()).done) {
40
+ parser.write(result.value);
41
+ while (true) {
42
+ while (this.paused) {
43
+ await new Promise(resolve => {
44
+ this.onResume = resolve;
45
+ });
46
+ }
47
+ const token = parser.read();
48
+ if (token === undefined) {
49
+ break;
50
+ }
51
+ this.debug.token(token);
52
+ handler[token.handlerName](token);
53
+ }
54
+ }
55
+ parser.end();
56
+ }
31
57
  pause() {
32
- return this.parser.pause();
58
+ this.paused = true;
33
59
  }
34
60
  resume() {
35
- return this.parser.resume();
61
+ this.paused = false;
62
+ const onResume = this.onResume;
63
+ this.onResume = undefined;
64
+ onResume?.();
36
65
  }
37
66
  }
38
67
  exports.Parser = Parser;
39
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwicmVxdWlyZSIsIl9zdHJlYW1QYXJzZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3N0cmVhbSIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIlBhcnNlciIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwibWVzc2FnZSIsImRlYnVnIiwiaGFuZGxlciIsIm9wdGlvbnMiLCJwYXJzZXIiLCJSZWFkYWJsZSIsImZyb20iLCJTdHJlYW1QYXJzZXIiLCJwYXJzZVRva2VucyIsIm9uIiwidG9rZW4iLCJoYW5kbGVyTmFtZSIsImVtaXQiLCJlcnJvciIsInBhdXNlIiwicmVzdW1lIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b2tlbi90b2tlbi1zdHJlYW0tcGFyc2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgU3RyZWFtUGFyc2VyLCB7IHR5cGUgUGFyc2VyT3B0aW9ucyB9IGZyb20gJy4vc3RyZWFtLXBhcnNlcic7XG5pbXBvcnQgRGVidWcgZnJvbSAnLi4vZGVidWcnO1xuaW1wb3J0IHsgVG9rZW4gfSBmcm9tICcuL3Rva2VuJztcbmltcG9ydCB7IFJlYWRhYmxlIH0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCBNZXNzYWdlIGZyb20gJy4uL21lc3NhZ2UnO1xuaW1wb3J0IHsgVG9rZW5IYW5kbGVyIH0gZnJvbSAnLi9oYW5kbGVyJztcblxuZXhwb3J0IGNsYXNzIFBhcnNlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGRlY2xhcmUgZGVidWc6IERlYnVnO1xuICBkZWNsYXJlIG9wdGlvbnM6IFBhcnNlck9wdGlvbnM7XG4gIGRlY2xhcmUgcGFyc2VyOiBSZWFkYWJsZTtcblxuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBNZXNzYWdlLCBkZWJ1ZzogRGVidWcsIGhhbmRsZXI6IFRva2VuSGFuZGxlciwgb3B0aW9uczogUGFyc2VyT3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmRlYnVnID0gZGVidWc7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIHRoaXMucGFyc2VyID0gUmVhZGFibGUuZnJvbShTdHJlYW1QYXJzZXIucGFyc2VUb2tlbnMobWVzc2FnZSwgdGhpcy5kZWJ1ZywgdGhpcy5vcHRpb25zKSk7XG4gICAgdGhpcy5wYXJzZXIub24oJ2RhdGEnLCAodG9rZW46IFRva2VuKSA9PiB7XG4gICAgICBkZWJ1Zy50b2tlbih0b2tlbik7XG4gICAgICBoYW5kbGVyW3Rva2VuLmhhbmRsZXJOYW1lIGFzIGtleW9mIFRva2VuSGFuZGxlcl0odG9rZW4gYXMgYW55KTtcbiAgICB9KTtcblxuICAgIHRoaXMucGFyc2VyLm9uKCdkcmFpbicsICgpID0+IHtcbiAgICAgIHRoaXMuZW1pdCgnZHJhaW4nKTtcbiAgICB9KTtcblxuICAgIHRoaXMucGFyc2VyLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICB0aGlzLmVtaXQoJ2VuZCcpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5wYXJzZXIub24oJ2Vycm9yJywgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRlY2xhcmUgb246IChcbiAgICAoKGV2ZW50OiAnZW5kJywgbGlzdGVuZXI6ICgpID0+IHZvaWQpID0+IHRoaXMpICZcbiAgICAoKGV2ZW50OiBzdHJpbmcgfCBzeW1ib2wsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpID0+IHRoaXMpXG4gICk7XG5cbiAgcGF1c2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VyLnBhdXNlKCk7XG4gIH1cblxuICByZXN1bWUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VyLnJlc3VtZSgpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLGFBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUdBLElBQUFHLE9BQUEsR0FBQUgsT0FBQTtBQUFrQyxTQUFBRSx1QkFBQUUsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUkzQixNQUFNRyxNQUFNLFNBQVNDLG9CQUFZLENBQUM7RUFLdkNDLFdBQVdBLENBQUNDLE9BQWdCLEVBQUVDLEtBQVksRUFBRUMsT0FBcUIsRUFBRUMsT0FBc0IsRUFBRTtJQUN6RixLQUFLLENBQUMsQ0FBQztJQUVQLElBQUksQ0FBQ0YsS0FBSyxHQUFHQSxLQUFLO0lBQ2xCLElBQUksQ0FBQ0UsT0FBTyxHQUFHQSxPQUFPO0lBRXRCLElBQUksQ0FBQ0MsTUFBTSxHQUFHQyxnQkFBUSxDQUFDQyxJQUFJLENBQUNDLHFCQUFZLENBQUNDLFdBQVcsQ0FBQ1IsT0FBTyxFQUFFLElBQUksQ0FBQ0MsS0FBSyxFQUFFLElBQUksQ0FBQ0UsT0FBTyxDQUFDLENBQUM7SUFDeEYsSUFBSSxDQUFDQyxNQUFNLENBQUNLLEVBQUUsQ0FBQyxNQUFNLEVBQUdDLEtBQVksSUFBSztNQUN2Q1QsS0FBSyxDQUFDUyxLQUFLLENBQUNBLEtBQUssQ0FBQztNQUNsQlIsT0FBTyxDQUFDUSxLQUFLLENBQUNDLFdBQVcsQ0FBdUIsQ0FBQ0QsS0FBWSxDQUFDO0lBQ2hFLENBQUMsQ0FBQztJQUVGLElBQUksQ0FBQ04sTUFBTSxDQUFDSyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU07TUFDNUIsSUFBSSxDQUFDRyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3BCLENBQUMsQ0FBQztJQUVGLElBQUksQ0FBQ1IsTUFBTSxDQUFDSyxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU07TUFDMUIsSUFBSSxDQUFDRyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ2xCLENBQUMsQ0FBQztJQUVGLElBQUksQ0FBQ1IsTUFBTSxDQUFDSyxFQUFFLENBQUMsT0FBTyxFQUFHSSxLQUFZLElBQUs7TUFDeEMsSUFBSSxDQUFDRCxJQUFJLENBQUMsT0FBTyxFQUFFQyxLQUFLLENBQUM7SUFDM0IsQ0FBQyxDQUFDO0VBQ0o7RUFPQUMsS0FBS0EsQ0FBQSxFQUFHO0lBQ04sT0FBTyxJQUFJLENBQUNWLE1BQU0sQ0FBQ1UsS0FBSyxDQUFDLENBQUM7RUFDNUI7RUFFQUMsTUFBTUEsQ0FBQSxFQUFHO0lBQ1AsT0FBTyxJQUFJLENBQUNYLE1BQU0sQ0FBQ1csTUFBTSxDQUFDLENBQUM7RUFDN0I7QUFDRjtBQUFDQyxPQUFBLENBQUFuQixNQUFBLEdBQUFBLE1BQUEiLCJpZ25vcmVMaXN0IjpbXX0=
68
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwicmVxdWlyZSIsIl9zdHJlYW1QYXJzZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiUGFyc2VyIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJtZXNzYWdlIiwiZGVidWciLCJoYW5kbGVyIiwib3B0aW9ucyIsInBhdXNlZCIsIm9uUmVzdW1lIiwidW5kZWZpbmVkIiwicnVuIiwidGhlbiIsInByb2Nlc3MiLCJuZXh0VGljayIsImVtaXQiLCJlcnJvciIsInBhcnNlciIsIlN0cmVhbVBhcnNlciIsIml0ZXJhdG9yIiwiU3ltYm9sIiwiYXN5bmNJdGVyYXRvciIsInJlc3VsdCIsIm5leHQiLCJkb25lIiwid3JpdGUiLCJ2YWx1ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwidG9rZW4iLCJyZWFkIiwiaGFuZGxlck5hbWUiLCJlbmQiLCJwYXVzZSIsInJlc3VtZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW4vdG9rZW4tc3RyZWFtLXBhcnNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IFN0cmVhbVBhcnNlciwgeyB0eXBlIFBhcnNlck9wdGlvbnMgfSBmcm9tICcuL3N0cmVhbS1wYXJzZXInO1xuaW1wb3J0IERlYnVnIGZyb20gJy4uL2RlYnVnJztcbmltcG9ydCBNZXNzYWdlIGZyb20gJy4uL21lc3NhZ2UnO1xuaW1wb3J0IHsgVG9rZW5IYW5kbGVyIH0gZnJvbSAnLi9oYW5kbGVyJztcblxuLyoqXG4gKiBQYXJzZXMgdGhlIHRva2VucyBvZiBhIG1lc3NhZ2UgYW5kIGRpc3BhdGNoZXMgdGhlbSB0byBhIGBUb2tlbkhhbmRsZXJgLlxuICpcbiAqIEVtaXRzIGAnZW5kJ2Agb25jZSBhbGwgdG9rZW5zIHdlcmUgaGFuZGxlZCwgb3IgYCdlcnJvcidgIGlmIHBhcnNpbmcgb3JcbiAqIGhhbmRsaW5nIGEgdG9rZW4gZmFpbGVkLlxuICovXG5leHBvcnQgY2xhc3MgUGFyc2VyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgZGVjbGFyZSBkZWJ1ZzogRGVidWc7XG4gIGRlY2xhcmUgb3B0aW9uczogUGFyc2VyT3B0aW9ucztcblxuICBkZWNsYXJlIHBhdXNlZDogYm9vbGVhbjtcbiAgZGVjbGFyZSBvblJlc3VtZTogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IE1lc3NhZ2UgfCBJdGVyYWJsZTxCdWZmZXI+LCBkZWJ1ZzogRGVidWcsIGhhbmRsZXI6IFRva2VuSGFuZGxlciwgb3B0aW9uczogUGFyc2VyT3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmRlYnVnID0gZGVidWc7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5vblJlc3VtZSA9IHVuZGVmaW5lZDtcblxuICAgIC8vIEVtaXQgb3V0c2lkZSBvZiB0aGUgcHJvbWlzZSBjaGFpbiwgc28gYW4gZXhjZXB0aW9uIHRocm93biBieSBhIGxpc3RlbmVyXG4gICAgLy8gaXMgYW4gdW5jYXVnaHQgZXhjZXB0aW9uIChsaWtlIG9uIG1hc3RlciksIG5vdCBhbiB1bmhhbmRsZWQgcmVqZWN0aW9uLlxuICAgIHRoaXMucnVuKG1lc3NhZ2UsIGhhbmRsZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB0aGlzLmVtaXQoJ2VuZCcpKTtcbiAgICB9LCAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHRoaXMuZW1pdCgnZXJyb3InLCBlcnJvcikpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcnVuKG1lc3NhZ2U6IE1lc3NhZ2UgfCBJdGVyYWJsZTxCdWZmZXI+LCBoYW5kbGVyOiBUb2tlbkhhbmRsZXIpIHtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgU3RyZWFtUGFyc2VyKHRoaXMub3B0aW9ucyk7XG5cbiAgICAvLyBJdGVyYXRlIG1hbnVhbGx5IC0gdW5saWtlIGBmb3IgYXdhaXRgLCB0aGlzIGRvZXMgbm90IGRlc3Ryb3kgdGhlIG1lc3NhZ2VcbiAgICAvLyBpZiBwYXJzaW5nIGZhaWxzLlxuICAgIGNvbnN0IGl0ZXJhdG9yOiBBc3luY0l0ZXJhdG9yPEJ1ZmZlcj4gfCBJdGVyYXRvcjxCdWZmZXI+ID0gU3ltYm9sLmFzeW5jSXRlcmF0b3IgaW4gbWVzc2FnZSA/IG1lc3NhZ2VbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkgOiBtZXNzYWdlW1N5bWJvbC5pdGVyYXRvcl0oKTtcblxuICAgIGxldCByZXN1bHQ7XG4gICAgd2hpbGUgKCEocmVzdWx0ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICBwYXJzZXIud3JpdGUocmVzdWx0LnZhbHVlKTtcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMucGF1c2VkKSB7XG4gICAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25SZXN1bWUgPSByZXNvbHZlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdG9rZW4gPSBwYXJzZXIucmVhZCgpO1xuICAgICAgICBpZiAodG9rZW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kZWJ1Zy50b2tlbih0b2tlbik7XG4gICAgICAgIGhhbmRsZXJbdG9rZW4uaGFuZGxlck5hbWVdKHRva2VuIGFzIGFueSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VyLmVuZCgpO1xuICB9XG5cbiAgZGVjbGFyZSBvbjogKFxuICAgICgoZXZlbnQ6ICdlbmQnLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCkgPT4gdGhpcykgJlxuICAgICgoZXZlbnQ6IHN0cmluZyB8IHN5bWJvbCwgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCkgPT4gdGhpcylcbiAgKTtcblxuICBwYXVzZSgpIHtcbiAgICB0aGlzLnBhdXNlZCA9IHRydWU7XG4gIH1cblxuICByZXN1bWUoKSB7XG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IG9uUmVzdW1lID0gdGhpcy5vblJlc3VtZTtcbiAgICB0aGlzLm9uUmVzdW1lID0gdW5kZWZpbmVkO1xuICAgIG9uUmVzdW1lPy4oKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxhQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFBbUUsU0FBQUUsdUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFLbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTUcsTUFBTSxTQUFTQyxvQkFBWSxDQUFDO0VBT3ZDQyxXQUFXQSxDQUFDQyxPQUFtQyxFQUFFQyxLQUFZLEVBQUVDLE9BQXFCLEVBQUVDLE9BQXNCLEVBQUU7SUFDNUcsS0FBSyxDQUFDLENBQUM7SUFFUCxJQUFJLENBQUNGLEtBQUssR0FBR0EsS0FBSztJQUNsQixJQUFJLENBQUNFLE9BQU8sR0FBR0EsT0FBTztJQUV0QixJQUFJLENBQUNDLE1BQU0sR0FBRyxLQUFLO0lBQ25CLElBQUksQ0FBQ0MsUUFBUSxHQUFHQyxTQUFTOztJQUV6QjtJQUNBO0lBQ0EsSUFBSSxDQUFDQyxHQUFHLENBQUNQLE9BQU8sRUFBRUUsT0FBTyxDQUFDLENBQUNNLElBQUksQ0FBQyxNQUFNO01BQ3BDQyxPQUFPLENBQUNDLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQ0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUMsRUFBR0MsS0FBWSxJQUFLO01BQ25CSCxPQUFPLENBQUNDLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQ0MsSUFBSSxDQUFDLE9BQU8sRUFBRUMsS0FBSyxDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFDO0VBQ0o7RUFFQSxNQUFNTCxHQUFHQSxDQUFDUCxPQUFtQyxFQUFFRSxPQUFxQixFQUFFO0lBQ3BFLE1BQU1XLE1BQU0sR0FBRyxJQUFJQyxxQkFBWSxDQUFDLElBQUksQ0FBQ1gsT0FBTyxDQUFDOztJQUU3QztJQUNBO0lBQ0EsTUFBTVksUUFBa0QsR0FBR0MsTUFBTSxDQUFDQyxhQUFhLElBQUlqQixPQUFPLEdBQUdBLE9BQU8sQ0FBQ2dCLE1BQU0sQ0FBQ0MsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHakIsT0FBTyxDQUFDZ0IsTUFBTSxDQUFDRCxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBRXpKLElBQUlHLE1BQU07SUFDVixPQUFPLENBQUMsQ0FBQ0EsTUFBTSxHQUFHLE1BQU1ILFFBQVEsQ0FBQ0ksSUFBSSxDQUFDLENBQUMsRUFBRUMsSUFBSSxFQUFFO01BQzdDUCxNQUFNLENBQUNRLEtBQUssQ0FBQ0gsTUFBTSxDQUFDSSxLQUFLLENBQUM7TUFFMUIsT0FBTyxJQUFJLEVBQUU7UUFDWCxPQUFPLElBQUksQ0FBQ2xCLE1BQU0sRUFBRTtVQUNsQixNQUFNLElBQUltQixPQUFPLENBQVFDLE9BQU8sSUFBSztZQUNuQyxJQUFJLENBQUNuQixRQUFRLEdBQUdtQixPQUFPO1VBQ3pCLENBQUMsQ0FBQztRQUNKO1FBRUEsTUFBTUMsS0FBSyxHQUFHWixNQUFNLENBQUNhLElBQUksQ0FBQyxDQUFDO1FBQzNCLElBQUlELEtBQUssS0FBS25CLFNBQVMsRUFBRTtVQUN2QjtRQUNGO1FBRUEsSUFBSSxDQUFDTCxLQUFLLENBQUN3QixLQUFLLENBQUNBLEtBQUssQ0FBQztRQUN2QnZCLE9BQU8sQ0FBQ3VCLEtBQUssQ0FBQ0UsV0FBVyxDQUFDLENBQUNGLEtBQVksQ0FBQztNQUMxQztJQUNGO0lBRUFaLE1BQU0sQ0FBQ2UsR0FBRyxDQUFDLENBQUM7RUFDZDtFQU9BQyxLQUFLQSxDQUFBLEVBQUc7SUFDTixJQUFJLENBQUN6QixNQUFNLEdBQUcsSUFBSTtFQUNwQjtFQUVBMEIsTUFBTUEsQ0FBQSxFQUFHO0lBQ1AsSUFBSSxDQUFDMUIsTUFBTSxHQUFHLEtBQUs7SUFFbkIsTUFBTUMsUUFBUSxHQUFHLElBQUksQ0FBQ0EsUUFBUTtJQUM5QixJQUFJLENBQUNBLFFBQVEsR0FBR0MsU0FBUztJQUN6QkQsUUFBUSxHQUFHLENBQUM7RUFDZDtBQUNGO0FBQUMwQixPQUFBLENBQUFsQyxNQUFBLEdBQUFBLE1BQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"token-stream-parser.js","names":["_events","require","_streamParser","_interopRequireDefault","_stream","e","__esModule","default","Parser","EventEmitter","constructor","message","debug","handler","options","parser","Readable","from","StreamParser","parseTokens","on","token","handlerName","emit","error","pause","resume","exports"],"sources":["../../src/token/token-stream-parser.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport StreamParser, { type ParserOptions } from './stream-parser';\nimport Debug from '../debug';\nimport { Token } from './token';\nimport { Readable } from 'stream';\nimport Message from '../message';\nimport { TokenHandler } from './handler';\n\nexport class Parser extends EventEmitter {\n declare debug: Debug;\n declare options: ParserOptions;\n declare parser: Readable;\n\n constructor(message: Message, debug: Debug, handler: TokenHandler, options: ParserOptions) {\n super();\n\n this.debug = debug;\n this.options = options;\n\n this.parser = Readable.from(StreamParser.parseTokens(message, this.debug, this.options));\n this.parser.on('data', (token: Token) => {\n debug.token(token);\n handler[token.handlerName as keyof TokenHandler](token as any);\n });\n\n this.parser.on('drain', () => {\n this.emit('drain');\n });\n\n this.parser.on('end', () => {\n this.emit('end');\n });\n\n this.parser.on('error', (error: Error) => {\n this.emit('error', error);\n });\n }\n\n declare on: (\n ((event: 'end', listener: () => void) => this) &\n ((event: string | symbol, listener: (...args: any[]) => void) => this)\n );\n\n pause() {\n return this.parser.pause();\n }\n\n resume() {\n return this.parser.resume();\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAC,sBAAA,CAAAF,OAAA;AAGA,IAAAG,OAAA,GAAAH,OAAA;AAAkC,SAAAE,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAI3B,MAAMG,MAAM,SAASC,oBAAY,CAAC;EAKvCC,WAAWA,CAACC,OAAgB,EAAEC,KAAY,EAAEC,OAAqB,EAAEC,OAAsB,EAAE;IACzF,KAAK,CAAC,CAAC;IAEP,IAAI,CAACF,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACE,OAAO,GAAGA,OAAO;IAEtB,IAAI,CAACC,MAAM,GAAGC,gBAAQ,CAACC,IAAI,CAACC,qBAAY,CAACC,WAAW,CAACR,OAAO,EAAE,IAAI,CAACC,KAAK,EAAE,IAAI,CAACE,OAAO,CAAC,CAAC;IACxF,IAAI,CAACC,MAAM,CAACK,EAAE,CAAC,MAAM,EAAGC,KAAY,IAAK;MACvCT,KAAK,CAACS,KAAK,CAACA,KAAK,CAAC;MAClBR,OAAO,CAACQ,KAAK,CAACC,WAAW,CAAuB,CAACD,KAAY,CAAC;IAChE,CAAC,CAAC;IAEF,IAAI,CAACN,MAAM,CAACK,EAAE,CAAC,OAAO,EAAE,MAAM;MAC5B,IAAI,CAACG,IAAI,CAAC,OAAO,CAAC;IACpB,CAAC,CAAC;IAEF,IAAI,CAACR,MAAM,CAACK,EAAE,CAAC,KAAK,EAAE,MAAM;MAC1B,IAAI,CAACG,IAAI,CAAC,KAAK,CAAC;IAClB,CAAC,CAAC;IAEF,IAAI,CAACR,MAAM,CAACK,EAAE,CAAC,OAAO,EAAGI,KAAY,IAAK;MACxC,IAAI,CAACD,IAAI,CAAC,OAAO,EAAEC,KAAK,CAAC;IAC3B,CAAC,CAAC;EACJ;EAOAC,KAAKA,CAAA,EAAG;IACN,OAAO,IAAI,CAACV,MAAM,CAACU,KAAK,CAAC,CAAC;EAC5B;EAEAC,MAAMA,CAAA,EAAG;IACP,OAAO,IAAI,CAACX,MAAM,CAACW,MAAM,CAAC,CAAC;EAC7B;AACF;AAACC,OAAA,CAAAnB,MAAA,GAAAA,MAAA","ignoreList":[]}
1
+ {"version":3,"file":"token-stream-parser.js","names":["_events","require","_streamParser","_interopRequireDefault","e","__esModule","default","Parser","EventEmitter","constructor","message","debug","handler","options","paused","onResume","undefined","run","then","process","nextTick","emit","error","parser","StreamParser","iterator","Symbol","asyncIterator","result","next","done","write","value","Promise","resolve","token","read","handlerName","end","pause","resume","exports"],"sources":["../../src/token/token-stream-parser.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport StreamParser, { type ParserOptions } from './stream-parser';\nimport Debug from '../debug';\nimport Message from '../message';\nimport { TokenHandler } from './handler';\n\n/**\n * Parses the tokens of a message and dispatches them to a `TokenHandler`.\n *\n * Emits `'end'` once all tokens were handled, or `'error'` if parsing or\n * handling a token failed.\n */\nexport class Parser extends EventEmitter {\n declare debug: Debug;\n declare options: ParserOptions;\n\n declare paused: boolean;\n declare onResume: (() => void) | undefined;\n\n constructor(message: Message | Iterable<Buffer>, debug: Debug, handler: TokenHandler, options: ParserOptions) {\n super();\n\n this.debug = debug;\n this.options = options;\n\n this.paused = false;\n this.onResume = undefined;\n\n // Emit outside of the promise chain, so an exception thrown by a listener\n // is an uncaught exception (like on master), not an unhandled rejection.\n this.run(message, handler).then(() => {\n process.nextTick(() => this.emit('end'));\n }, (error: Error) => {\n process.nextTick(() => this.emit('error', error));\n });\n }\n\n async run(message: Message | Iterable<Buffer>, handler: TokenHandler) {\n const parser = new StreamParser(this.options);\n\n // Iterate manually - unlike `for await`, this does not destroy the message\n // if parsing fails.\n const iterator: AsyncIterator<Buffer> | Iterator<Buffer> = Symbol.asyncIterator in message ? message[Symbol.asyncIterator]() : message[Symbol.iterator]();\n\n let result;\n while (!(result = await iterator.next()).done) {\n parser.write(result.value);\n\n while (true) {\n while (this.paused) {\n await new Promise<void>((resolve) => {\n this.onResume = resolve;\n });\n }\n\n const token = parser.read();\n if (token === undefined) {\n break;\n }\n\n this.debug.token(token);\n handler[token.handlerName](token as any);\n }\n }\n\n parser.end();\n }\n\n declare on: (\n ((event: 'end', listener: () => void) => this) &\n ((event: string | symbol, listener: (...args: any[]) => void) => this)\n );\n\n pause() {\n this.paused = true;\n }\n\n resume() {\n this.paused = false;\n\n const onResume = this.onResume;\n this.onResume = undefined;\n onResume?.();\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAC,sBAAA,CAAAF,OAAA;AAAmE,SAAAE,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAKnE;AACA;AACA;AACA;AACA;AACA;AACO,MAAMG,MAAM,SAASC,oBAAY,CAAC;EAOvCC,WAAWA,CAACC,OAAmC,EAAEC,KAAY,EAAEC,OAAqB,EAAEC,OAAsB,EAAE;IAC5G,KAAK,CAAC,CAAC;IAEP,IAAI,CAACF,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACE,OAAO,GAAGA,OAAO;IAEtB,IAAI,CAACC,MAAM,GAAG,KAAK;IACnB,IAAI,CAACC,QAAQ,GAAGC,SAAS;;IAEzB;IACA;IACA,IAAI,CAACC,GAAG,CAACP,OAAO,EAAEE,OAAO,CAAC,CAACM,IAAI,CAAC,MAAM;MACpCC,OAAO,CAACC,QAAQ,CAAC,MAAM,IAAI,CAACC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC,EAAGC,KAAY,IAAK;MACnBH,OAAO,CAACC,QAAQ,CAAC,MAAM,IAAI,CAACC,IAAI,CAAC,OAAO,EAAEC,KAAK,CAAC,CAAC;IACnD,CAAC,CAAC;EACJ;EAEA,MAAML,GAAGA,CAACP,OAAmC,EAAEE,OAAqB,EAAE;IACpE,MAAMW,MAAM,GAAG,IAAIC,qBAAY,CAAC,IAAI,CAACX,OAAO,CAAC;;IAE7C;IACA;IACA,MAAMY,QAAkD,GAAGC,MAAM,CAACC,aAAa,IAAIjB,OAAO,GAAGA,OAAO,CAACgB,MAAM,CAACC,aAAa,CAAC,CAAC,CAAC,GAAGjB,OAAO,CAACgB,MAAM,CAACD,QAAQ,CAAC,CAAC,CAAC;IAEzJ,IAAIG,MAAM;IACV,OAAO,CAAC,CAACA,MAAM,GAAG,MAAMH,QAAQ,CAACI,IAAI,CAAC,CAAC,EAAEC,IAAI,EAAE;MAC7CP,MAAM,CAACQ,KAAK,CAACH,MAAM,CAACI,KAAK,CAAC;MAE1B,OAAO,IAAI,EAAE;QACX,OAAO,IAAI,CAAClB,MAAM,EAAE;UAClB,MAAM,IAAImB,OAAO,CAAQC,OAAO,IAAK;YACnC,IAAI,CAACnB,QAAQ,GAAGmB,OAAO;UACzB,CAAC,CAAC;QACJ;QAEA,MAAMC,KAAK,GAAGZ,MAAM,CAACa,IAAI,CAAC,CAAC;QAC3B,IAAID,KAAK,KAAKnB,SAAS,EAAE;UACvB;QACF;QAEA,IAAI,CAACL,KAAK,CAACwB,KAAK,CAACA,KAAK,CAAC;QACvBvB,OAAO,CAACuB,KAAK,CAACE,WAAW,CAAC,CAACF,KAAY,CAAC;MAC1C;IACF;IAEAZ,MAAM,CAACe,GAAG,CAAC,CAAC;EACd;EAOAC,KAAKA,CAAA,EAAG;IACN,IAAI,CAACzB,MAAM,GAAG,IAAI;EACpB;EAEA0B,MAAMA,CAAA,EAAG;IACP,IAAI,CAAC1B,MAAM,GAAG,KAAK;IAEnB,MAAMC,QAAQ,GAAG,IAAI,CAACA,QAAQ;IAC9B,IAAI,CAACA,QAAQ,GAAGC,SAAS;IACzBD,QAAQ,GAAG,CAAC;EACd;AACF;AAAC0B,OAAA,CAAAlC,MAAA,GAAAA,MAAA","ignoreList":[]}
@@ -3,5 +3,22 @@ import { type Metadata } from './metadata-parser';
3
3
  import { Result } from './token/helpers';
4
4
  declare function readValue(buf: Buffer, offset: number, metadata: Metadata, options: ParserOptions): Result<unknown>;
5
5
  declare function isPLPStream(metadata: Metadata): boolean | undefined;
6
- declare function readPLPStream(parser: Parser): Promise<null | Buffer[]>;
7
- export { readValue, isPLPStream, readPLPStream };
6
+ /**
7
+ * Reads a PLP (partially length-prefixed) value.
8
+ *
9
+ * PLP values can be arbitrarily large and span many chunks of incoming data,
10
+ * so they are read incrementally: whatever part of the value is available is
11
+ * consumed right away, and the reader's progress is kept across calls. If the
12
+ * available data runs out, `NotEnoughDataError` is thrown and `read` can be
13
+ * called again once more data has arrived.
14
+ */
15
+ declare class PLPReader {
16
+ metadata: Metadata;
17
+ expectedLength: bigint | undefined;
18
+ chunks: Buffer[];
19
+ length: number;
20
+ chunkRemaining: number;
21
+ constructor(metadata: Metadata);
22
+ read(parser: Parser): unknown;
23
+ }
24
+ export { readValue, isPLPStream, PLPReader };