tedious
Version:
A TDS driver, for connecting to MS SQLServer databases.
59 lines (54 loc) • 7.03 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) {
buffer.writeBuffer(UNKNOWN_PLP_LEN);
for await (const chunk of source) {
const bytes = encode(chunk);
// A zero-length PLP chunk would be read as the terminator.
if (bytes.length === 0) {
continue;
}
buffer.writeUInt32LE(bytes.length);
buffer.writeBuffer(bytes);
if (buffer.length >= _writableTrackingBuffer.default.CHUNK_SIZE) {
yield;
}
}
buffer.writeBuffer(PLP_TERMINATOR);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd3JpdGFibGVUcmFja2luZ0J1ZmZlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiVU5LTk9XTl9QTFBfTEVOIiwiQnVmZmVyIiwiZnJvbSIsIlBMUF9URVJNSU5BVE9SIiwiaXNBc3luY0l0ZXJhYmxlIiwidmFsdWUiLCJTeW1ib2wiLCJhc3luY0l0ZXJhdG9yIiwid3JpdGVQbHBWYWx1ZSIsImJ1ZmZlciIsImJ5dGVzIiwid3JpdGVCdWZmZXIiLCJsZW5ndGgiLCJ3cml0ZVVJbnQzMkxFIiwid3JpdGVQbHBTdHJlYW0iLCJzb3VyY2UiLCJlbmNvZGUiLCJjaHVuayIsIldyaXRhYmxlVHJhY2tpbmdCdWZmZXIiLCJDSFVOS19TSVpFIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGEtdHlwZXMvcGxwLXN0cmVhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgV3JpdGFibGVUcmFja2luZ0J1ZmZlciBmcm9tICcuLi90cmFja2luZy1idWZmZXIvd3JpdGFibGUtdHJhY2tpbmctYnVmZmVyJztcblxuY29uc3QgVU5LTk9XTl9QTFBfTEVOID0gQnVmZmVyLmZyb20oWzB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZdKTtcbmNvbnN0IFBMUF9URVJNSU5BVE9SID0gQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKTtcblxuLyoqXG4gKiBBIHZhbHVlIHRoYXQgaXMgcmVhZCB3aGlsZSB0aGUgcmVxdWVzdCBpcyB3cml0dGVuLCByYXRoZXIgdGhhbiBiZWluZyBmdWxseVxuICogaW4gbWVtb3J5OiB0aGUgYG1heGAgdGV4dCBhbmQgYmluYXJ5IHR5cGVzIGFjY2VwdCBhbiBhc3luYyBpdGVyYWJsZSBvZlxuICogY2h1bmtzIChzdHJpbmdzIG9yIGJ1ZmZlcnMpIGhlcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBBc3luY0l0ZXJhYmxlPHVua25vd24+IHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mICh2YWx1ZSBhcyB7IFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0/OiB1bmtub3duIH0pW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiBXcml0ZXMgYW4gaW4tbWVtb3J5IFBMUCB2YWx1ZSBpbnRvIGBidWZmZXJgOiB0aGUgdW5rbm93bi1sZW5ndGggbWFya2VyLFxuICogdGhlIGJ5dGVzIGFzIG9uZSBjaHVuayBpZiB0aGVyZSBhcmUgYW55LCB0aGVuIHRoZSB0ZXJtaW5hdG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVQbHBWYWx1ZShidWZmZXI6IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIsIGJ5dGVzOiBCdWZmZXIpIHtcbiAgYnVmZmVyLndyaXRlQnVmZmVyKFVOS05PV05fUExQX0xFTik7XG4gIGlmIChieXRlcy5sZW5ndGggPiAwKSB7XG4gICAgYnVmZmVyLndyaXRlVUludDMyTEUoYnl0ZXMubGVuZ3RoKTtcbiAgICBidWZmZXIud3JpdGVCdWZmZXIoYnl0ZXMpO1xuICB9XG4gIGJ1ZmZlci53cml0ZUJ1ZmZlcihQTFBfVEVSTUlOQVRPUik7XG59XG5cbi8qKlxuICogV3JpdGVzIGEgUExQIHZhbHVlIHJlYWQgZnJvbSBgc291cmNlYCBpbnRvIGBidWZmZXJgOiB0aGUgdW5rbm93bi1sZW5ndGhcbiAqIG1hcmtlciwgdGhlbiBvbmUgbGVuZ3RoLXByZWZpeGVkIGNodW5rIHBlciBub24tZW1wdHkgZW5jb2RlZCBwaWVjZSwgdGhlblxuICogdGhlIHRlcm1pbmF0b3IuIFlpZWxkcyB3aGVuZXZlciB0aGUgYnVmZmVyIGhvbGRzIGEgY2h1bmsncyB3b3J0aCwgYXMgdGhlXG4gKiByZXN0IG9mIGEgYERhdGFUeXBlLndyaXRlVmFsdWVgIHByb21pc2VzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gKiB3cml0ZVBscFN0cmVhbShidWZmZXI6IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIsIHNvdXJjZTogQXN5bmNJdGVyYWJsZTx1bmtub3duPiwgZW5jb2RlOiAoY2h1bms6IHVua25vd24pID0+IEJ1ZmZlcik6IEFzeW5jR2VuZXJhdG9yPHZvaWQsIHZvaWQ+IHtcbiAgYnVmZmVyLndyaXRlQnVmZmVyKFVOS05PV05fUExQX0xFTik7XG5cbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzb3VyY2UpIHtcbiAgICBjb25zdCBieXRlcyA9IGVuY29kZShjaHVuayk7XG5cbiAgICAvLyBBIHplcm8tbGVuZ3RoIFBMUCBjaHVuayB3b3VsZCBiZSByZWFkIGFzIHRoZSB0ZXJtaW5hdG9yLlxuICAgIGlmIChieXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGJ1ZmZlci53cml0ZVVJbnQzMkxFKGJ5dGVzLmxlbmd0aCk7XG4gICAgYnVmZmVyLndyaXRlQnVmZmVyKGJ5dGVzKTtcblxuICAgIGlmIChidWZmZXIubGVuZ3RoID49IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIuQ0hVTktfU0laRSkge1xuICAgICAgeWllbGQ7XG4gICAgfVxuICB9XG5cbiAgYnVmZmVyLndyaXRlQnVmZmVyKFBMUF9URVJNSU5BVE9SKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSx1QkFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQWlGLFNBQUFELHVCQUFBRSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRWpGLE1BQU1HLGVBQWUsR0FBR0MsTUFBTSxDQUFDQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDckYsTUFBTUMsY0FBYyxHQUFHRixNQUFNLENBQUNDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDOztBQUU1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0UsZUFBZUEsQ0FBQ0MsS0FBYyxFQUFtQztFQUMvRSxPQUFPQSxLQUFLLElBQUksSUFBSSxJQUFJLE9BQVFBLEtBQUssQ0FBMENDLE1BQU0sQ0FBQ0MsYUFBYSxDQUFDLEtBQUssVUFBVTtBQUNySDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLGFBQWFBLENBQUNDLE1BQThCLEVBQUVDLEtBQWEsRUFBRTtFQUMzRUQsTUFBTSxDQUFDRSxXQUFXLENBQUNYLGVBQWUsQ0FBQztFQUNuQyxJQUFJVSxLQUFLLENBQUNFLE1BQU0sR0FBRyxDQUFDLEVBQUU7SUFDcEJILE1BQU0sQ0FBQ0ksYUFBYSxDQUFDSCxLQUFLLENBQUNFLE1BQU0sQ0FBQztJQUNsQ0gsTUFBTSxDQUFDRSxXQUFXLENBQUNELEtBQUssQ0FBQztFQUMzQjtFQUNBRCxNQUFNLENBQUNFLFdBQVcsQ0FBQ1IsY0FBYyxDQUFDO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLGdCQUFpQlcsY0FBY0EsQ0FBQ0wsTUFBOEIsRUFBRU0sTUFBOEIsRUFBRUMsTUFBa0MsRUFBOEI7RUFDcktQLE1BQU0sQ0FBQ0UsV0FBVyxDQUFDWCxlQUFlLENBQUM7RUFFbkMsV0FBVyxNQUFNaUIsS0FBSyxJQUFJRixNQUFNLEVBQUU7SUFDaEMsTUFBTUwsS0FBSyxHQUFHTSxNQUFNLENBQUNDLEtBQUssQ0FBQzs7SUFFM0I7SUFDQSxJQUFJUCxLQUFLLENBQUNFLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDdEI7SUFDRjtJQUVBSCxNQUFNLENBQUNJLGFBQWEsQ0FBQ0gsS0FBSyxDQUFDRSxNQUFNLENBQUM7SUFDbENILE1BQU0sQ0FBQ0UsV0FBVyxDQUFDRCxLQUFLLENBQUM7SUFFekIsSUFBSUQsTUFBTSxDQUFDRyxNQUFNLElBQUlNLCtCQUFzQixDQUFDQyxVQUFVLEVBQUU7TUFDdEQsS0FBSztJQUNQO0VBQ0Y7RUFFQVYsTUFBTSxDQUFDRSxXQUFXLENBQUNSLGNBQWMsQ0FBQztBQUNwQyIsImlnbm9yZUxpc3QiOltdfQ==