UNPKG

@deno/kv

Version:

A Deno KV client library optimized for Node.js.

103 lines (102 loc) 3.4 kB
"use strict"; // Copyright 2023 the Deno authors. All rights reserved. MIT license. Object.defineProperty(exports, "__esModule", { value: true }); exports.ByteReader = exports.compareBytes = exports.computeBigintMinimumNumberOfBytes = exports.flipBytes = exports.equalBytes = exports.checkEnd = exports.encodeHex = exports.decodeHex = void 0; var hex_js_1 = require("./deps/deno.land/std@0.208.0/encoding/hex.js"); Object.defineProperty(exports, "decodeHex", { enumerable: true, get: function () { return hex_js_1.decodeHex; } }); Object.defineProperty(exports, "encodeHex", { enumerable: true, get: function () { return hex_js_1.encodeHex; } }); const concat_js_1 = require("./deps/deno.land/std@0.208.0/bytes/concat.js"); function checkEnd(bytes, pos) { const extra = bytes.length - pos; if (extra > 0) throw new Error(`Unexpected trailing bytes: ${extra}`); } exports.checkEnd = checkEnd; function equalBytes(lhs, rhs) { if (lhs.length !== rhs.length) return false; for (let i = 0; i < lhs.length; i++) { if (lhs[i] !== rhs[i]) return false; } return true; } exports.equalBytes = equalBytes; function flipBytes(arr, start = 0) { for (let i = start; i < arr.length; i++) { arr[i] = 0xff - arr[i]; } } exports.flipBytes = flipBytes; function computeBigintMinimumNumberOfBytes(val) { let n = 0; while (val !== 0n) { val >>= 8n; n++; } return n; } exports.computeBigintMinimumNumberOfBytes = computeBigintMinimumNumberOfBytes; function compareBytes(lhs, rhs) { if (lhs === rhs) return 0; let x = lhs.length, y = rhs.length; const len = Math.min(x, y); for (let i = 0; i < len; i++) { if (lhs[i] !== rhs[i]) { x = lhs[i]; y = rhs[i]; break; } } return x < y ? -1 : y < x ? 1 : 0; } exports.compareBytes = compareBytes; // const ZERO_BYTES = new Uint8Array(0); class ByteReader { constructor(reader) { Object.defineProperty(this, "reader", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "remaining", { enumerable: true, configurable: true, writable: true, value: ZERO_BYTES }); Object.defineProperty(this, "done", { enumerable: true, configurable: true, writable: true, value: false }); this.reader = reader; } async read(bytes) { if (bytes < 0) throw new Error(`Invalid bytes: ${bytes}`); if (bytes === 0) return { done: false, value: ZERO_BYTES }; while (this.remaining.length < bytes && !this.done) { const { done, value } = await this.reader.read(); if (done) { this.done = true; } else { this.remaining = (0, concat_js_1.concat)([this.remaining, value]); } } const { remaining } = this; if (remaining.length < bytes && this.done) { return { done: true, value: undefined }; } const value = remaining.slice(0, bytes); this.remaining = remaining.slice(bytes); return { done: false, value }; } } exports.ByteReader = ByteReader;