UNPKG

tedious

Version:

A TDS driver, for connecting to MS SQLServer databases.

59 lines (54 loc) • 7.03 kB
"use strict"; 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==