tedious
Version:
A TDS driver, for connecting to MS SQLServer databases.
62 lines (58 loc) • 7.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.isAsyncIterable = isAsyncIterable;
exports.writePlpStream = writePlpStream;
exports.writePlpValue = writePlpValue;
var _writableTrackingBuffer = _interopRequireDefault(require("../tracking-buffer/writable-tracking-buffer"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const UNKNOWN_PLP_LEN = Buffer.from([0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]);
const PLP_TERMINATOR = Buffer.from([0x00, 0x00, 0x00, 0x00]);
/**
* A value that is read while the request is written, rather than being fully
* in memory: the `max` text and binary types accept an async iterable of
* chunks (strings or buffers) here.
*/
function isAsyncIterable(value) {
return value != null && typeof value[Symbol.asyncIterator] === 'function';
}
/**
* Writes an in-memory PLP value into `buffer`: the unknown-length marker,
* the bytes as one chunk if there are any, then the terminator.
*/
function writePlpValue(buffer, bytes) {
buffer.writeBuffer(UNKNOWN_PLP_LEN);
if (bytes.length > 0) {
buffer.writeUInt32LE(bytes.length);
buffer.writeBuffer(bytes);
}
buffer.writeBuffer(PLP_TERMINATOR);
}
/**
* Writes a PLP value read from `source` into `buffer`: the unknown-length
* marker, then one length-prefixed chunk per non-empty encoded piece, then
* the terminator. Yields whenever the buffer holds a chunk's worth, as the
* rest of a `DataType.writeValue` promises.
*/
async function* writePlpStream(buffer, source, encode, flush) {
buffer.writeBuffer(UNKNOWN_PLP_LEN);
const writeChunk = bytes => {
if (!bytes || bytes.length === 0) {
return false;
}
buffer.writeUInt32LE(bytes.length);
buffer.writeBuffer(bytes);
return buffer.length >= _writableTrackingBuffer.default.CHUNK_SIZE;
};
for await (const chunk of source) {
if (writeChunk(encode(chunk))) {
yield;
}
}
if (writeChunk(flush?.())) {
yield;
}
buffer.writeBuffer(PLP_TERMINATOR);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd3JpdGFibGVUcmFja2luZ0J1ZmZlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiVU5LTk9XTl9QTFBfTEVOIiwiQnVmZmVyIiwiZnJvbSIsIlBMUF9URVJNSU5BVE9SIiwiaXNBc3luY0l0ZXJhYmxlIiwidmFsdWUiLCJTeW1ib2wiLCJhc3luY0l0ZXJhdG9yIiwid3JpdGVQbHBWYWx1ZSIsImJ1ZmZlciIsImJ5dGVzIiwid3JpdGVCdWZmZXIiLCJsZW5ndGgiLCJ3cml0ZVVJbnQzMkxFIiwid3JpdGVQbHBTdHJlYW0iLCJzb3VyY2UiLCJlbmNvZGUiLCJmbHVzaCIsIndyaXRlQ2h1bmsiLCJXcml0YWJsZVRyYWNraW5nQnVmZmVyIiwiQ0hVTktfU0laRSIsImNodW5rIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGEtdHlwZXMvcGxwLXN0cmVhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgV3JpdGFibGVUcmFja2luZ0J1ZmZlciBmcm9tICcuLi90cmFja2luZy1idWZmZXIvd3JpdGFibGUtdHJhY2tpbmctYnVmZmVyJztcblxuY29uc3QgVU5LTk9XTl9QTFBfTEVOID0gQnVmZmVyLmZyb20oWzB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZdKTtcbmNvbnN0IFBMUF9URVJNSU5BVE9SID0gQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKTtcblxuLyoqXG4gKiBBIHZhbHVlIHRoYXQgaXMgcmVhZCB3aGlsZSB0aGUgcmVxdWVzdCBpcyB3cml0dGVuLCByYXRoZXIgdGhhbiBiZWluZyBmdWxseVxuICogaW4gbWVtb3J5OiB0aGUgYG1heGAgdGV4dCBhbmQgYmluYXJ5IHR5cGVzIGFjY2VwdCBhbiBhc3luYyBpdGVyYWJsZSBvZlxuICogY2h1bmtzIChzdHJpbmdzIG9yIGJ1ZmZlcnMpIGhlcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBBc3luY0l0ZXJhYmxlPHVua25vd24+IHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mICh2YWx1ZSBhcyB7IFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0/OiB1bmtub3duIH0pW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiBXcml0ZXMgYW4gaW4tbWVtb3J5IFBMUCB2YWx1ZSBpbnRvIGBidWZmZXJgOiB0aGUgdW5rbm93bi1sZW5ndGggbWFya2VyLFxuICogdGhlIGJ5dGVzIGFzIG9uZSBjaHVuayBpZiB0aGVyZSBhcmUgYW55LCB0aGVuIHRoZSB0ZXJtaW5hdG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVQbHBWYWx1ZShidWZmZXI6IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIsIGJ5dGVzOiBCdWZmZXIpIHtcbiAgYnVmZmVyLndyaXRlQnVmZmVyKFVOS05PV05fUExQX0xFTik7XG4gIGlmIChieXRlcy5sZW5ndGggPiAwKSB7XG4gICAgYnVmZmVyLndyaXRlVUludDMyTEUoYnl0ZXMubGVuZ3RoKTtcbiAgICBidWZmZXIud3JpdGVCdWZmZXIoYnl0ZXMpO1xuICB9XG4gIGJ1ZmZlci53cml0ZUJ1ZmZlcihQTFBfVEVSTUlOQVRPUik7XG59XG5cbi8qKlxuICogV3JpdGVzIGEgUExQIHZhbHVlIHJlYWQgZnJvbSBgc291cmNlYCBpbnRvIGBidWZmZXJgOiB0aGUgdW5rbm93bi1sZW5ndGhcbiAqIG1hcmtlciwgdGhlbiBvbmUgbGVuZ3RoLXByZWZpeGVkIGNodW5rIHBlciBub24tZW1wdHkgZW5jb2RlZCBwaWVjZSwgdGhlblxuICogdGhlIHRlcm1pbmF0b3IuIFlpZWxkcyB3aGVuZXZlciB0aGUgYnVmZmVyIGhvbGRzIGEgY2h1bmsncyB3b3J0aCwgYXMgdGhlXG4gKiByZXN0IG9mIGEgYERhdGFUeXBlLndyaXRlVmFsdWVgIHByb21pc2VzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gKiB3cml0ZVBscFN0cmVhbTxUPihcbiAgYnVmZmVyOiBXcml0YWJsZVRyYWNraW5nQnVmZmVyLFxuICBzb3VyY2U6IEFzeW5jSXRlcmFibGU8VD4sXG4gIGVuY29kZTogKGNodW5rOiBUKSA9PiBCdWZmZXIsXG4gIGZsdXNoPzogKCkgPT4gQnVmZmVyIHwgdW5kZWZpbmVkXG4pOiBBc3luY0dlbmVyYXRvcjx2b2lkLCB2b2lkPiB7XG4gIGJ1ZmZlci53cml0ZUJ1ZmZlcihVTktOT1dOX1BMUF9MRU4pO1xuXG4gIGNvbnN0IHdyaXRlQ2h1bmsgPSAoYnl0ZXM6IEJ1ZmZlciB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIGlmICghYnl0ZXMgfHwgYnl0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgYnVmZmVyLndyaXRlVUludDMyTEUoYnl0ZXMubGVuZ3RoKTtcbiAgICBidWZmZXIud3JpdGVCdWZmZXIoYnl0ZXMpO1xuICAgIHJldHVybiBidWZmZXIubGVuZ3RoID49IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIuQ0hVTktfU0laRTtcbiAgfTtcblxuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHNvdXJjZSkge1xuICAgIGlmICh3cml0ZUNodW5rKGVuY29kZShjaHVuaykpKSB7XG4gICAgICB5aWVsZDtcbiAgICB9XG4gIH1cblxuICBpZiAod3JpdGVDaHVuayhmbHVzaD8uKCkpKSB7XG4gICAgeWllbGQ7XG4gIH1cblxuICBidWZmZXIud3JpdGVCdWZmZXIoUExQX1RFUk1JTkFUT1IpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLHVCQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFBaUYsU0FBQUQsdUJBQUFFLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFakYsTUFBTUcsZUFBZSxHQUFHQyxNQUFNLENBQUNDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNyRixNQUFNQyxjQUFjLEdBQUdGLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTRSxlQUFlQSxDQUFDQyxLQUFjLEVBQW1DO0VBQy9FLE9BQU9BLEtBQUssSUFBSSxJQUFJLElBQUksT0FBUUEsS0FBSyxDQUEwQ0MsTUFBTSxDQUFDQyxhQUFhLENBQUMsS0FBSyxVQUFVO0FBQ3JIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsYUFBYUEsQ0FBQ0MsTUFBOEIsRUFBRUMsS0FBYSxFQUFFO0VBQzNFRCxNQUFNLENBQUNFLFdBQVcsQ0FBQ1gsZUFBZSxDQUFDO0VBQ25DLElBQUlVLEtBQUssQ0FBQ0UsTUFBTSxHQUFHLENBQUMsRUFBRTtJQUNwQkgsTUFBTSxDQUFDSSxhQUFhLENBQUNILEtBQUssQ0FBQ0UsTUFBTSxDQUFDO0lBQ2xDSCxNQUFNLENBQUNFLFdBQVcsQ0FBQ0QsS0FBSyxDQUFDO0VBQzNCO0VBQ0FELE1BQU0sQ0FBQ0UsV0FBVyxDQUFDUixjQUFjLENBQUM7QUFDcEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sZ0JBQWlCVyxjQUFjQSxDQUNwQ0wsTUFBOEIsRUFDOUJNLE1BQXdCLEVBQ3hCQyxNQUE0QixFQUM1QkMsS0FBZ0MsRUFDSjtFQUM1QlIsTUFBTSxDQUFDRSxXQUFXLENBQUNYLGVBQWUsQ0FBQztFQUVuQyxNQUFNa0IsVUFBVSxHQUFJUixLQUF5QixJQUFLO0lBQ2hELElBQUksQ0FBQ0EsS0FBSyxJQUFJQSxLQUFLLENBQUNFLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDaEMsT0FBTyxLQUFLO0lBQ2Q7SUFFQUgsTUFBTSxDQUFDSSxhQUFhLENBQUNILEtBQUssQ0FBQ0UsTUFBTSxDQUFDO0lBQ2xDSCxNQUFNLENBQUNFLFdBQVcsQ0FBQ0QsS0FBSyxDQUFDO0lBQ3pCLE9BQU9ELE1BQU0sQ0FBQ0csTUFBTSxJQUFJTywrQkFBc0IsQ0FBQ0MsVUFBVTtFQUMzRCxDQUFDO0VBRUQsV0FBVyxNQUFNQyxLQUFLLElBQUlOLE1BQU0sRUFBRTtJQUNoQyxJQUFJRyxVQUFVLENBQUNGLE1BQU0sQ0FBQ0ssS0FBSyxDQUFDLENBQUMsRUFBRTtNQUM3QixLQUFLO0lBQ1A7RUFDRjtFQUVBLElBQUlILFVBQVUsQ0FBQ0QsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ3pCLEtBQUs7RUFDUDtFQUVBUixNQUFNLENBQUNFLFdBQVcsQ0FBQ1IsY0FBYyxDQUFDO0FBQ3BDIiwiaWdub3JlTGlzdCI6W119