341 lines
38 KiB
JavaScript
341 lines
38 KiB
JavaScript
|
|
"use strict";
|
||
|
|
|
||
|
|
Object.defineProperty(exports, "__esModule", {
|
||
|
|
value: true
|
||
|
|
});
|
||
|
|
exports.default = void 0;
|
||
|
|
var _token = require("./token");
|
||
|
|
var _colmetadataTokenParser = _interopRequireDefault(require("./colmetadata-token-parser"));
|
||
|
|
var _doneTokenParser = require("./done-token-parser");
|
||
|
|
var _envChangeTokenParser = _interopRequireDefault(require("./env-change-token-parser"));
|
||
|
|
var _infoerrorTokenParser = require("./infoerror-token-parser");
|
||
|
|
var _fedauthInfoParser = _interopRequireDefault(require("./fedauth-info-parser"));
|
||
|
|
var _featureExtAckParser = _interopRequireDefault(require("./feature-ext-ack-parser"));
|
||
|
|
var _loginackTokenParser = _interopRequireDefault(require("./loginack-token-parser"));
|
||
|
|
var _orderTokenParser = _interopRequireDefault(require("./order-token-parser"));
|
||
|
|
var _returnstatusTokenParser = _interopRequireDefault(require("./returnstatus-token-parser"));
|
||
|
|
var _returnvalueTokenParser = _interopRequireDefault(require("./returnvalue-token-parser"));
|
||
|
|
var _rowTokenParser = _interopRequireDefault(require("./row-token-parser"));
|
||
|
|
var _nbcrowTokenParser = _interopRequireDefault(require("./nbcrow-token-parser"));
|
||
|
|
var _sspiTokenParser = _interopRequireDefault(require("./sspi-token-parser"));
|
||
|
|
var _helpers = require("./helpers");
|
||
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
class Parser {
|
||
|
|
debug;
|
||
|
|
colMetadata;
|
||
|
|
options;
|
||
|
|
iterator;
|
||
|
|
buffer;
|
||
|
|
position;
|
||
|
|
static async *parseTokens(iterable, debug, options, colMetadata = []) {
|
||
|
|
const parser = new Parser(iterable, debug, options);
|
||
|
|
parser.colMetadata = colMetadata;
|
||
|
|
while (true) {
|
||
|
|
try {
|
||
|
|
await parser.waitForChunk();
|
||
|
|
} catch (err) {
|
||
|
|
if (parser.position === parser.buffer.length) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
throw err;
|
||
|
|
}
|
||
|
|
while (parser.buffer.length >= parser.position + 1) {
|
||
|
|
const type = parser.buffer.readUInt8(parser.position);
|
||
|
|
parser.position += 1;
|
||
|
|
const token = parser.readToken(type);
|
||
|
|
if (token !== undefined) {
|
||
|
|
yield token;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
readToken(type) {
|
||
|
|
switch (type) {
|
||
|
|
case _token.TYPE.DONE:
|
||
|
|
{
|
||
|
|
return this.readDoneToken();
|
||
|
|
}
|
||
|
|
case _token.TYPE.DONEPROC:
|
||
|
|
{
|
||
|
|
return this.readDoneProcToken();
|
||
|
|
}
|
||
|
|
case _token.TYPE.DONEINPROC:
|
||
|
|
{
|
||
|
|
return this.readDoneInProcToken();
|
||
|
|
}
|
||
|
|
case _token.TYPE.ERROR:
|
||
|
|
{
|
||
|
|
return this.readErrorToken();
|
||
|
|
}
|
||
|
|
case _token.TYPE.INFO:
|
||
|
|
{
|
||
|
|
return this.readInfoToken();
|
||
|
|
}
|
||
|
|
case _token.TYPE.ENVCHANGE:
|
||
|
|
{
|
||
|
|
return this.readEnvChangeToken();
|
||
|
|
}
|
||
|
|
case _token.TYPE.LOGINACK:
|
||
|
|
{
|
||
|
|
return this.readLoginAckToken();
|
||
|
|
}
|
||
|
|
case _token.TYPE.RETURNSTATUS:
|
||
|
|
{
|
||
|
|
return this.readReturnStatusToken();
|
||
|
|
}
|
||
|
|
case _token.TYPE.ORDER:
|
||
|
|
{
|
||
|
|
return this.readOrderToken();
|
||
|
|
}
|
||
|
|
case _token.TYPE.FEDAUTHINFO:
|
||
|
|
{
|
||
|
|
return this.readFedAuthInfoToken();
|
||
|
|
}
|
||
|
|
case _token.TYPE.SSPI:
|
||
|
|
{
|
||
|
|
return this.readSSPIToken();
|
||
|
|
}
|
||
|
|
case _token.TYPE.COLMETADATA:
|
||
|
|
{
|
||
|
|
return this.readColMetadataToken();
|
||
|
|
}
|
||
|
|
case _token.TYPE.RETURNVALUE:
|
||
|
|
{
|
||
|
|
return this.readReturnValueToken();
|
||
|
|
}
|
||
|
|
case _token.TYPE.ROW:
|
||
|
|
{
|
||
|
|
return this.readRowToken();
|
||
|
|
}
|
||
|
|
case _token.TYPE.NBCROW:
|
||
|
|
{
|
||
|
|
return this.readNbcRowToken();
|
||
|
|
}
|
||
|
|
case _token.TYPE.FEATUREEXTACK:
|
||
|
|
{
|
||
|
|
return this.readFeatureExtAckToken();
|
||
|
|
}
|
||
|
|
default:
|
||
|
|
{
|
||
|
|
throw new Error('Unknown type: ' + type);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
readFeatureExtAckToken() {
|
||
|
|
let result;
|
||
|
|
try {
|
||
|
|
result = (0, _featureExtAckParser.default)(this.buffer, this.position, this.options);
|
||
|
|
} catch (err) {
|
||
|
|
if (err instanceof _helpers.NotEnoughDataError) {
|
||
|
|
return this.waitForChunk().then(() => {
|
||
|
|
return this.readFeatureExtAckToken();
|
||
|
|
});
|
||
|
|
}
|
||
|
|
throw err;
|
||
|
|
}
|
||
|
|
this.position = result.offset;
|
||
|
|
return result.value;
|
||
|
|
}
|
||
|
|
async readNbcRowToken() {
|
||
|
|
return await (0, _nbcrowTokenParser.default)(this);
|
||
|
|
}
|
||
|
|
async readReturnValueToken() {
|
||
|
|
return await (0, _returnvalueTokenParser.default)(this);
|
||
|
|
}
|
||
|
|
async readColMetadataToken() {
|
||
|
|
const token = await (0, _colmetadataTokenParser.default)(this);
|
||
|
|
this.colMetadata = token.columns;
|
||
|
|
return token;
|
||
|
|
}
|
||
|
|
readSSPIToken() {
|
||
|
|
let result;
|
||
|
|
try {
|
||
|
|
result = (0, _sspiTokenParser.default)(this.buffer, this.position, this.options);
|
||
|
|
} catch (err) {
|
||
|
|
if (err instanceof _helpers.NotEnoughDataError) {
|
||
|
|
return this.waitForChunk().then(() => {
|
||
|
|
return this.readSSPIToken();
|
||
|
|
});
|
||
|
|
}
|
||
|
|
throw err;
|
||
|
|
}
|
||
|
|
this.position = result.offset;
|
||
|
|
return result.value;
|
||
|
|
}
|
||
|
|
readFedAuthInfoToken() {
|
||
|
|
let result;
|
||
|
|
try {
|
||
|
|
result = (0, _fedauthInfoParser.default)(this.buffer, this.position, this.options);
|
||
|
|
} catch (err) {
|
||
|
|
if (err instanceof _helpers.NotEnoughDataError) {
|
||
|
|
return this.waitForChunk().then(() => {
|
||
|
|
return this.readFedAuthInfoToken();
|
||
|
|
});
|
||
|
|
}
|
||
|
|
throw err;
|
||
|
|
}
|
||
|
|
this.position = result.offset;
|
||
|
|
return result.value;
|
||
|
|
}
|
||
|
|
readOrderToken() {
|
||
|
|
let result;
|
||
|
|
try {
|
||
|
|
result = (0, _orderTokenParser.default)(this.buffer, this.position, this.options);
|
||
|
|
} catch (err) {
|
||
|
|
if (err instanceof _helpers.NotEnoughDataError) {
|
||
|
|
return this.waitForChunk().then(() => {
|
||
|
|
return this.readOrderToken();
|
||
|
|
});
|
||
|
|
}
|
||
|
|
throw err;
|
||
|
|
}
|
||
|
|
this.position = result.offset;
|
||
|
|
return result.value;
|
||
|
|
}
|
||
|
|
readReturnStatusToken() {
|
||
|
|
let result;
|
||
|
|
try {
|
||
|
|
result = (0, _returnstatusTokenParser.default)(this.buffer, this.position, this.options);
|
||
|
|
} catch (err) {
|
||
|
|
if (err instanceof _helpers.NotEnoughDataError) {
|
||
|
|
return this.waitForChunk().then(() => {
|
||
|
|
return this.readReturnStatusToken();
|
||
|
|
});
|
||
|
|
}
|
||
|
|
throw err;
|
||
|
|
}
|
||
|
|
this.position = result.offset;
|
||
|
|
return result.value;
|
||
|
|
}
|
||
|
|
readLoginAckToken() {
|
||
|
|
let result;
|
||
|
|
try {
|
||
|
|
result = (0, _loginackTokenParser.default)(this.buffer, this.position, this.options);
|
||
|
|
} catch (err) {
|
||
|
|
if (err instanceof _helpers.NotEnoughDataError) {
|
||
|
|
return this.waitForChunk().then(() => {
|
||
|
|
return this.readLoginAckToken();
|
||
|
|
});
|
||
|
|
}
|
||
|
|
throw err;
|
||
|
|
}
|
||
|
|
this.position = result.offset;
|
||
|
|
return result.value;
|
||
|
|
}
|
||
|
|
readEnvChangeToken() {
|
||
|
|
let result;
|
||
|
|
try {
|
||
|
|
result = (0, _envChangeTokenParser.default)(this.buffer, this.position, this.options);
|
||
|
|
} catch (err) {
|
||
|
|
if (err instanceof _helpers.NotEnoughDataError) {
|
||
|
|
return this.waitForChunk().then(() => {
|
||
|
|
return this.readEnvChangeToken();
|
||
|
|
});
|
||
|
|
}
|
||
|
|
throw err;
|
||
|
|
}
|
||
|
|
this.position = result.offset;
|
||
|
|
return result.value;
|
||
|
|
}
|
||
|
|
readRowToken() {
|
||
|
|
return (0, _rowTokenParser.default)(this);
|
||
|
|
}
|
||
|
|
readInfoToken() {
|
||
|
|
let result;
|
||
|
|
try {
|
||
|
|
result = (0, _infoerrorTokenParser.infoParser)(this.buffer, this.position, this.options);
|
||
|
|
} catch (err) {
|
||
|
|
if (err instanceof _helpers.NotEnoughDataError) {
|
||
|
|
return this.waitForChunk().then(() => {
|
||
|
|
return this.readInfoToken();
|
||
|
|
});
|
||
|
|
}
|
||
|
|
throw err;
|
||
|
|
}
|
||
|
|
this.position = result.offset;
|
||
|
|
return result.value;
|
||
|
|
}
|
||
|
|
readErrorToken() {
|
||
|
|
let result;
|
||
|
|
try {
|
||
|
|
result = (0, _infoerrorTokenParser.errorParser)(this.buffer, this.position, this.options);
|
||
|
|
} catch (err) {
|
||
|
|
if (err instanceof _helpers.NotEnoughDataError) {
|
||
|
|
return this.waitForChunk().then(() => {
|
||
|
|
return this.readErrorToken();
|
||
|
|
});
|
||
|
|
}
|
||
|
|
throw err;
|
||
|
|
}
|
||
|
|
this.position = result.offset;
|
||
|
|
return result.value;
|
||
|
|
}
|
||
|
|
readDoneInProcToken() {
|
||
|
|
let result;
|
||
|
|
try {
|
||
|
|
result = (0, _doneTokenParser.doneInProcParser)(this.buffer, this.position, this.options);
|
||
|
|
} catch (err) {
|
||
|
|
if (err instanceof _helpers.NotEnoughDataError) {
|
||
|
|
return this.waitForChunk().then(() => {
|
||
|
|
return this.readDoneInProcToken();
|
||
|
|
});
|
||
|
|
}
|
||
|
|
throw err;
|
||
|
|
}
|
||
|
|
this.position = result.offset;
|
||
|
|
return result.value;
|
||
|
|
}
|
||
|
|
readDoneProcToken() {
|
||
|
|
let result;
|
||
|
|
try {
|
||
|
|
result = (0, _doneTokenParser.doneProcParser)(this.buffer, this.position, this.options);
|
||
|
|
} catch (err) {
|
||
|
|
if (err instanceof _helpers.NotEnoughDataError) {
|
||
|
|
return this.waitForChunk().then(() => {
|
||
|
|
return this.readDoneProcToken();
|
||
|
|
});
|
||
|
|
}
|
||
|
|
throw err;
|
||
|
|
}
|
||
|
|
this.position = result.offset;
|
||
|
|
return result.value;
|
||
|
|
}
|
||
|
|
readDoneToken() {
|
||
|
|
let result;
|
||
|
|
try {
|
||
|
|
result = (0, _doneTokenParser.doneParser)(this.buffer, this.position, this.options);
|
||
|
|
} catch (err) {
|
||
|
|
if (err instanceof _helpers.NotEnoughDataError) {
|
||
|
|
return this.waitForChunk().then(() => {
|
||
|
|
return this.readDoneToken();
|
||
|
|
});
|
||
|
|
}
|
||
|
|
throw err;
|
||
|
|
}
|
||
|
|
this.position = result.offset;
|
||
|
|
return result.value;
|
||
|
|
}
|
||
|
|
constructor(iterable, debug, options) {
|
||
|
|
this.debug = debug;
|
||
|
|
this.colMetadata = [];
|
||
|
|
this.options = options;
|
||
|
|
this.iterator = (iterable[Symbol.asyncIterator] || iterable[Symbol.iterator]).call(iterable);
|
||
|
|
this.buffer = Buffer.alloc(0);
|
||
|
|
this.position = 0;
|
||
|
|
}
|
||
|
|
async waitForChunk() {
|
||
|
|
const result = await this.iterator.next();
|
||
|
|
if (result.done) {
|
||
|
|
throw new Error('unexpected end of data');
|
||
|
|
}
|
||
|
|
if (this.position === this.buffer.length) {
|
||
|
|
this.buffer = result.value;
|
||
|
|
} else {
|
||
|
|
this.buffer = Buffer.concat([this.buffer.slice(this.position), result.value]);
|
||
|
|
}
|
||
|
|
this.position = 0;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
var _default = exports.default = Parser;
|
||
|
|
module.exports = Parser;
|
||
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdG9rZW4iLCJyZXF1aXJlIiwiX2NvbG1ldGFkYXRhVG9rZW5QYXJzZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2RvbmVUb2tlblBhcnNlciIsIl9lbnZDaGFuZ2VUb2tlblBhcnNlciIsIl9pbmZvZXJyb3JUb2tlblBhcnNlciIsIl9mZWRhdXRoSW5mb1BhcnNlciIsIl9mZWF0dXJlRXh0QWNrUGFyc2VyIiwiX2xvZ2luYWNrVG9rZW5QYXJzZXIiLCJfb3JkZXJUb2tlblBhcnNlciIsIl9yZXR1cm5zdGF0dXNUb2tlblBhcnNlciIsIl9yZXR1cm52YWx1ZVRva2VuUGFyc2VyIiwiX3Jvd1Rva2VuUGFyc2VyIiwiX25iY3Jvd1Rva2VuUGFyc2VyIiwiX3NzcGlUb2tlblBhcnNlciIsIl9oZWxwZXJzIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJQYXJzZXIiLCJkZWJ1ZyIsImNvbE1ldGFkYXRhIiwib3B0aW9ucyIsIml0ZXJhdG9yIiwiYnVmZmVyIiwicG9zaXRpb24iLCJwYXJzZVRva2VucyIsIml0ZXJhYmxlIiwicGFyc2VyIiwid2FpdEZvckNodW5rIiwiZXJyIiwibGVuZ3RoIiwidHlwZSIsInJlYWRVSW50OCIsInRva2VuIiwicmVhZFRva2VuIiwidW5kZWZpbmVkIiwiVFlQRSIsIkRPTkUiLCJyZWFkRG9uZVRva2VuIiwiRE9ORVBST0MiLCJyZWFkRG9uZVByb2NUb2tlbiIsIkRPTkVJTlBST0MiLCJyZWFkRG9uZUluUHJvY1Rva2VuIiwiRVJST1IiLCJyZWFkRXJyb3JUb2tlbiIsIklORk8iLCJyZWFkSW5mb1Rva2VuIiwiRU5WQ0hBTkdFIiwicmVhZEVudkNoYW5nZVRva2VuIiwiTE9HSU5BQ0siLCJyZWFkTG9naW5BY2tUb2tlbiIsIlJFVFVSTlNUQVRVUyIsInJlYWRSZXR1cm5TdGF0dXNUb2tlbiIsIk9SREVSIiwicmVhZE9yZGVyVG9rZW4iLCJGRURBVVRISU5GTyIsInJlYWRGZWRBdXRoSW5mb1Rva2VuIiwiU1NQSSIsInJlYWRTU1BJVG9rZW4iLCJDT0xNRVRBREFUQSIsInJlYWRDb2xNZXRhZGF0YVRva2VuIiwiUkVUVVJOVkFMVUUiLCJyZWFkUmV0dXJuVmFsdWVUb2tlbiIsIlJPVyIsInJlYWRSb3dUb2tlbiIsIk5CQ1JPVyIsInJlYWROYmNSb3dUb2tlbiIsIkZFQVRVUkVFWFRBQ0siLCJyZWFkRmVhdHVyZUV4dEFja1Rva2VuIiwiRXJyb3IiLCJyZXN1bHQiLCJmZWF0dXJlRXh0QWNrUGFyc2VyIiwiTm90RW5vdWdoRGF0YUVycm9yIiwidGhlbiIsIm9mZnNldCIsInZhbHVlIiwibmJjUm93UGFyc2VyIiwicmV0dXJuVmFsdWVQYXJzZXIiLCJjb2xNZXRhZGF0YVBhcnNlciIsImNvbHVtbnMiLCJzc3BpUGFyc2VyIiwiZmVkQXV0aEluZm9QYXJzZXIiLCJvcmRlclBhcnNlciIsInJldHVyblN0YXR1c1BhcnNlciIsImxvZ2luQWNrUGFyc2VyIiwiZW52Q2hhbmdlUGFyc2VyIiwicm93UGFyc2VyIiwiaW5mb1BhcnNlciIsImVycm9yUGFyc2VyIiwiZG9uZUluUHJvY1BhcnNlciIsImRvbmVQcm9jUGFyc2VyIiwiZG9uZVBhcnNlciIsImNvbnN0cnVjdG9yIiwiU3ltYm9sIiwiYXN5bmNJdGVyYXRvciIsImNhbGwiLCJCdWZmZXIiLCJhbGxvYyIsIm5leHQiLCJkb25lIiwiY29uY2F0Iiwic2xpY2UiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW4vc3RyZWFtLXBhcnNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRGVidWcgZnJvbSAnLi4vZGVidWcnO1xuaW1wb3J0IHsgdHlwZSBJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zIH0gZnJvbSAnLi4vY29ubmVjdGlvbic7XG5cbmltcG9ydCB7IFRZUEUsIENvbE1ldGFkYXRhVG9rZW4sIERvbmVQcm9jVG9rZW4sIERvbmVUb2tlbiwgRG9uZUluUHJvY1Rva2VuLCBFcnJvck1lc3NhZ2VUb2tlbiwgSW5mb01lc3NhZ2VUb2tlbiwgUm93VG9rZW4sIHR5cGUgRW52Q2hhbmdlVG9rZW4sIExvZ2luQWNrVG9rZW4sIFJldHVyblN0YXR1c1Rva2VuLCBPcmRlclRva2VuLCBGZWRBdXRoSW5mb1Rva2VuLCBTU1BJVG9rZW4sIFJldHVyblZhbHVlVG9rZW4sIE5CQ1Jvd1Rva2VuLCBGZWF0dXJlRXh0QWNrVG9rZW4sIFRva2VuIH0gZnJvbSAnLi90b2tlbic7XG5cbmltcG9ydCBjb2xNZXRhZGF0YVBhcnNlciwgeyB0eXBlIENvbHVtbk1ldGFkYXRhIH0gZnJvbSAnLi9jb2xtZXRhZGF0YS10b2tlbi1wYXJzZXInO1xuaW1wb3J0IHsgZG9uZVBhcnNlciwgZG9uZUluUHJvY1BhcnNlciwgZG9uZVByb2NQYXJzZXIgfSBmcm9tICcuL2RvbmUtdG9rZW4tcGFyc2VyJztcbmltcG9ydCBlbnZDaGFuZ2VQYXJzZXIgZnJvbSAnLi9lbnYtY2hhbmdlLXRva2VuLXBhcnNlcic7XG5pbXBvcnQgeyBlcnJvclBhcnNlciwgaW5mb1BhcnNlciB9IGZyb20gJy4vaW5mb2Vycm9yLXRva2VuLXBhcnNlcic7XG5pbXBvcnQgZmVkQXV0aEluZm9QYXJzZXIgZnJvbSAnLi9mZWRhdXRoLWluZm8tcGFyc2VyJztcbmltcG9ydCBmZWF0dXJlRXh0QWNrUGFyc2VyIGZyb20gJy4vZmVhdHVyZS1leHQtYWNrLXBhcnNlcic7XG5pbXBvcnQgbG9naW5BY2tQYXJzZXIgZnJvbSAnLi9sb2dpbmFjay10b2tlbi1wYXJzZXInO1xuaW1wb3J0IG9yZGVyUGFyc2VyIGZyb20gJy4vb3JkZXItdG9rZW4tcGFyc2VyJztcbmltcG9ydCByZXR1cm5TdGF0dXNQYXJzZXIgZnJvbSAnLi9yZXR1cm5zdGF0dXMtdG9rZW4tcGFyc2VyJztcbmltcG9ydCByZXR1cm5WYWx1ZVBhcnNlciBmcm9tICcuL3JldHVybnZhbHVlLXRva2VuLXBhcnNlcic7XG5pbXBvcnQgcm93UGFyc2VyIGZyb20gJy4vcm93LXRva2VuLXBhcnNlcic7XG5pbXBvcnQgbmJjUm93UGFyc2VyIGZyb20gJy4vbmJjcm93LXRva2VuLXBhcnNlcic7XG5pbXBvcnQgc3NwaVBhcnNlciBmcm9tICcuL3NzcGktdG9rZW4tcGFyc2VyJztcbmltcG9ydCB7IE5vdEVub3VnaERhdGFFcnJvciB9IGZyb20gJy4vaGVscGVycyc7XG5cbmV4cG9ydCB0eXBlIFBhcnNlck9wdGlvbnMgPSBQaWNrPEludGVybmFsQ29ubmVjdGlvbk9wdGlvbnMsICd1c2VVVEMnIHwgJ2xvd2VyQ2FzZUd1aWRzJyB8ICd0ZHNWZXJzaW9uJyB8ICd1c2VDb2x1bW5OYW1lcycgfCAnY29sdW1uTmFtZVJlcGxhY2VyJyB8ICdjYW1lbENhc2VDb2x1bW5zJz47XG5cbmNsYXNzIFBhcnN
|