UNPKG

tedious

Version:

A TDS driver, for connecting to MS SQLServer databases.

68 lines (65 loc) • 8.45 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Parser = void 0; var _events = require("events"); var _streamParser = _interopRequireDefault(require("./stream-parser")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } /** * Parses the tokens of a message and dispatches them to a `TokenHandler`. * * Emits `'end'` once all tokens were handled, or `'error'` if parsing or * handling a token failed. */ class Parser extends _events.EventEmitter { constructor(message, debug, handler, options) { super(); this.debug = debug; this.options = options; this.paused = false; this.onResume = undefined; // Emit outside of the promise chain, so an exception thrown by a listener // is an uncaught exception (like on master), not an unhandled rejection. this.run(message, handler).then(() => { process.nextTick(() => this.emit('end')); }, error => { process.nextTick(() => this.emit('error', error)); }); } async run(message, handler) { const parser = new _streamParser.default(this.options); // Iterate manually - unlike `for await`, this does not destroy the message // if parsing fails. const iterator = Symbol.asyncIterator in message ? message[Symbol.asyncIterator]() : message[Symbol.iterator](); let result; while (!(result = await iterator.next()).done) { parser.write(result.value); while (true) { while (this.paused) { await new Promise(resolve => { this.onResume = resolve; }); } const token = parser.read(); if (token === undefined) { break; } this.debug.token(token); handler[token.handlerName](token); } } parser.end(); } pause() { this.paused = true; } resume() { this.paused = false; const onResume = this.onResume; this.onResume = undefined; onResume?.(); } } exports.Parser = Parser; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwicmVxdWlyZSIsIl9zdHJlYW1QYXJzZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiUGFyc2VyIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJtZXNzYWdlIiwiZGVidWciLCJoYW5kbGVyIiwib3B0aW9ucyIsInBhdXNlZCIsIm9uUmVzdW1lIiwidW5kZWZpbmVkIiwicnVuIiwidGhlbiIsInByb2Nlc3MiLCJuZXh0VGljayIsImVtaXQiLCJlcnJvciIsInBhcnNlciIsIlN0cmVhbVBhcnNlciIsIml0ZXJhdG9yIiwiU3ltYm9sIiwiYXN5bmNJdGVyYXRvciIsInJlc3VsdCIsIm5leHQiLCJkb25lIiwid3JpdGUiLCJ2YWx1ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwidG9rZW4iLCJyZWFkIiwiaGFuZGxlck5hbWUiLCJlbmQiLCJwYXVzZSIsInJlc3VtZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW4vdG9rZW4tc3RyZWFtLXBhcnNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IFN0cmVhbVBhcnNlciwgeyB0eXBlIFBhcnNlck9wdGlvbnMgfSBmcm9tICcuL3N0cmVhbS1wYXJzZXInO1xuaW1wb3J0IERlYnVnIGZyb20gJy4uL2RlYnVnJztcbmltcG9ydCBNZXNzYWdlIGZyb20gJy4uL21lc3NhZ2UnO1xuaW1wb3J0IHsgVG9rZW5IYW5kbGVyIH0gZnJvbSAnLi9oYW5kbGVyJztcblxuLyoqXG4gKiBQYXJzZXMgdGhlIHRva2VucyBvZiBhIG1lc3NhZ2UgYW5kIGRpc3BhdGNoZXMgdGhlbSB0byBhIGBUb2tlbkhhbmRsZXJgLlxuICpcbiAqIEVtaXRzIGAnZW5kJ2Agb25jZSBhbGwgdG9rZW5zIHdlcmUgaGFuZGxlZCwgb3IgYCdlcnJvcidgIGlmIHBhcnNpbmcgb3JcbiAqIGhhbmRsaW5nIGEgdG9rZW4gZmFpbGVkLlxuICovXG5leHBvcnQgY2xhc3MgUGFyc2VyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgZGVjbGFyZSBkZWJ1ZzogRGVidWc7XG4gIGRlY2xhcmUgb3B0aW9uczogUGFyc2VyT3B0aW9ucztcblxuICBkZWNsYXJlIHBhdXNlZDogYm9vbGVhbjtcbiAgZGVjbGFyZSBvblJlc3VtZTogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IE1lc3NhZ2UgfCBJdGVyYWJsZTxCdWZmZXI+LCBkZWJ1ZzogRGVidWcsIGhhbmRsZXI6IFRva2VuSGFuZGxlciwgb3B0aW9uczogUGFyc2VyT3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmRlYnVnID0gZGVidWc7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5vblJlc3VtZSA9IHVuZGVmaW5lZDtcblxuICAgIC8vIEVtaXQgb3V0c2lkZSBvZiB0aGUgcHJvbWlzZSBjaGFpbiwgc28gYW4gZXhjZXB0aW9uIHRocm93biBieSBhIGxpc3RlbmVyXG4gICAgLy8gaXMgYW4gdW5jYXVnaHQgZXhjZXB0aW9uIChsaWtlIG9uIG1hc3RlciksIG5vdCBhbiB1bmhhbmRsZWQgcmVqZWN0aW9uLlxuICAgIHRoaXMucnVuKG1lc3NhZ2UsIGhhbmRsZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB0aGlzLmVtaXQoJ2VuZCcpKTtcbiAgICB9LCAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHRoaXMuZW1pdCgnZXJyb3InLCBlcnJvcikpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcnVuKG1lc3NhZ2U6IE1lc3NhZ2UgfCBJdGVyYWJsZTxCdWZmZXI+LCBoYW5kbGVyOiBUb2tlbkhhbmRsZXIpIHtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgU3RyZWFtUGFyc2VyKHRoaXMub3B0aW9ucyk7XG5cbiAgICAvLyBJdGVyYXRlIG1hbnVhbGx5IC0gdW5saWtlIGBmb3IgYXdhaXRgLCB0aGlzIGRvZXMgbm90IGRlc3Ryb3kgdGhlIG1lc3NhZ2VcbiAgICAvLyBpZiBwYXJzaW5nIGZhaWxzLlxuICAgIGNvbnN0IGl0ZXJhdG9yOiBBc3luY0l0ZXJhdG9yPEJ1ZmZlcj4gfCBJdGVyYXRvcjxCdWZmZXI+ID0gU3ltYm9sLmFzeW5jSXRlcmF0b3IgaW4gbWVzc2FnZSA/IG1lc3NhZ2VbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkgOiBtZXNzYWdlW1N5bWJvbC5pdGVyYXRvcl0oKTtcblxuICAgIGxldCByZXN1bHQ7XG4gICAgd2hpbGUgKCEocmVzdWx0ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICBwYXJzZXIud3JpdGUocmVzdWx0LnZhbHVlKTtcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMucGF1c2VkKSB7XG4gICAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25SZXN1bWUgPSByZXNvbHZlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdG9rZW4gPSBwYXJzZXIucmVhZCgpO1xuICAgICAgICBpZiAodG9rZW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kZWJ1Zy50b2tlbih0b2tlbik7XG4gICAgICAgIGhhbmRsZXJbdG9rZW4uaGFuZGxlck5hbWVdKHRva2VuIGFzIGFueSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VyLmVuZCgpO1xuICB9XG5cbiAgZGVjbGFyZSBvbjogKFxuICAgICgoZXZlbnQ6ICdlbmQnLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCkgPT4gdGhpcykgJlxuICAgICgoZXZlbnQ6IHN0cmluZyB8IHN5bWJvbCwgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCkgPT4gdGhpcylcbiAgKTtcblxuICBwYXVzZSgpIHtcbiAgICB0aGlzLnBhdXNlZCA9IHRydWU7XG4gIH1cblxuICByZXN1bWUoKSB7XG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IG9uUmVzdW1lID0gdGhpcy5vblJlc3VtZTtcbiAgICB0aGlzLm9uUmVzdW1lID0gdW5kZWZpbmVkO1xuICAgIG9uUmVzdW1lPy4oKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxhQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFBbUUsU0FBQUUsdUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFLbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTUcsTUFBTSxTQUFTQyxvQkFBWSxDQUFDO0VBT3ZDQyxXQUFXQSxDQUFDQyxPQUFtQyxFQUFFQyxLQUFZLEVBQUVDLE9BQXFCLEVBQUVDLE9BQXNCLEVBQUU7SUFDNUcsS0FBSyxDQUFDLENBQUM7SUFFUCxJQUFJLENBQUNGLEtBQUssR0FBR0EsS0FBSztJQUNsQixJQUFJLENBQUNFLE9BQU8sR0FBR0EsT0FBTztJQUV0QixJQUFJLENBQUNDLE1BQU0sR0FBRyxLQUFLO0lBQ25CLElBQUksQ0FBQ0MsUUFBUSxHQUFHQyxTQUFTOztJQUV6QjtJQUNBO0lBQ0EsSUFBSSxDQUFDQyxHQUFHLENBQUNQLE9BQU8sRUFBRUUsT0FBTyxDQUFDLENBQUNNLElBQUksQ0FBQyxNQUFNO01BQ3BDQyxPQUFPLENBQUNDLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQ0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUMsRUFBR0MsS0FBWSxJQUFLO01BQ25CSCxPQUFPLENBQUNDLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQ0MsSUFBSSxDQUFDLE9BQU8sRUFBRUMsS0FBSyxDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFDO0VBQ0o7RUFFQSxNQUFNTCxHQUFHQSxDQUFDUCxPQUFtQyxFQUFFRSxPQUFxQixFQUFFO0lBQ3BFLE1BQU1XLE1BQU0sR0FBRyxJQUFJQyxxQkFBWSxDQUFDLElBQUksQ0FBQ1gsT0FBTyxDQUFDOztJQUU3QztJQUNBO0lBQ0EsTUFBTVksUUFBa0QsR0FBR0MsTUFBTSxDQUFDQyxhQUFhLElBQUlqQixPQUFPLEdBQUdBLE9BQU8sQ0FBQ2dCLE1BQU0sQ0FBQ0MsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHakIsT0FBTyxDQUFDZ0IsTUFBTSxDQUFDRCxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBRXpKLElBQUlHLE1BQU07SUFDVixPQUFPLENBQUMsQ0FBQ0EsTUFBTSxHQUFHLE1BQU1ILFFBQVEsQ0FBQ0ksSUFBSSxDQUFDLENBQUMsRUFBRUMsSUFBSSxFQUFFO01BQzdDUCxNQUFNLENBQUNRLEtBQUssQ0FBQ0gsTUFBTSxDQUFDSSxLQUFLLENBQUM7TUFFMUIsT0FBTyxJQUFJLEVBQUU7UUFDWCxPQUFPLElBQUksQ0FBQ2xCLE1BQU0sRUFBRTtVQUNsQixNQUFNLElBQUltQixPQUFPLENBQVFDLE9BQU8sSUFBSztZQUNuQyxJQUFJLENBQUNuQixRQUFRLEdBQUdtQixPQUFPO1VBQ3pCLENBQUMsQ0FBQztRQUNKO1FBRUEsTUFBTUMsS0FBSyxHQUFHWixNQUFNLENBQUNhLElBQUksQ0FBQyxDQUFDO1FBQzNCLElBQUlELEtBQUssS0FBS25CLFNBQVMsRUFBRTtVQUN2QjtRQUNGO1FBRUEsSUFBSSxDQUFDTCxLQUFLLENBQUN3QixLQUFLLENBQUNBLEtBQUssQ0FBQztRQUN2QnZCLE9BQU8sQ0FBQ3VCLEtBQUssQ0FBQ0UsV0FBVyxDQUFDLENBQUNGLEtBQVksQ0FBQztNQUMxQztJQUNGO0lBRUFaLE1BQU0sQ0FBQ2UsR0FBRyxDQUFDLENBQUM7RUFDZDtFQU9BQyxLQUFLQSxDQUFBLEVBQUc7SUFDTixJQUFJLENBQUN6QixNQUFNLEdBQUcsSUFBSTtFQUNwQjtFQUVBMEIsTUFBTUEsQ0FBQSxFQUFHO0lBQ1AsSUFBSSxDQUFDMUIsTUFBTSxHQUFHLEtBQUs7SUFFbkIsTUFBTUMsUUFBUSxHQUFHLElBQUksQ0FBQ0EsUUFBUTtJQUM5QixJQUFJLENBQUNBLFFBQVEsR0FBR0MsU0FBUztJQUN6QkQsUUFBUSxHQUFHLENBQUM7RUFDZDtBQUNGO0FBQUMwQixPQUFBLENBQUFsQyxNQUFBLEdBQUFBLE1BQUEiLCJpZ25vcmVMaXN0IjpbXX0=