Lee Thanh
Upload 3012 files
5641073
raw
history blame
2.09 kB
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/**
* The maximum number of bytes that can be read from the hash.
*
* Calculated out 2^64-1, since `Xn` syntax (for `Xn ** Yn`) requires TS
* targeting esnext/es2020 which includes features that Node 10 doesn't
* yet supported.
*/
exports.maxHashBytes = BigInt('18446744073709551615');
/**
* Base hash reader implementation.
*/
class BaseHashReader {
constructor(reader) {
this.pos = BigInt(0);
this.reader = reader;
}
get position() {
return this.pos;
}
set position(value) {
var _a;
// to avoid footguns of people using numbers:
if (typeof value !== 'bigint') {
throw new Error(`Got a ${typeof value} set in to reader.position, expected a bigint`);
}
this.boundsCheck(value);
this.pos = value;
(_a = this.reader) === null || _a === void 0 ? void 0 : _a.set_position(value);
}
/**
* @inheritdoc
*/
readInto(target) {
if (!this.reader) {
throw new Error(`Cannot read from a hash after it was disposed`);
}
const next = this.pos + BigInt(target.length);
this.boundsCheck(next);
this.reader.fill(target);
this.position = next;
}
/**
* @inheritdoc
*/
read(bytes) {
const data = this.alloc(bytes);
this.readInto(data);
return data;
}
/**
* @inheritdoc
*/
dispose() {
var _a, _b;
(_b = (_a = this.reader) === null || _a === void 0 ? void 0 : _a.free) === null || _b === void 0 ? void 0 : _b.call(_a);
this.reader = undefined;
}
boundsCheck(position) {
if (position > exports.maxHashBytes) {
throw new RangeError(`Cannot read past ${exports.maxHashBytes} bytes in BLAKE3 hashes`);
}
if (position < BigInt(0)) {
throw new RangeError(`Cannot read to a negative position`);
}
}
}
exports.BaseHashReader = BaseHashReader;
//# sourceMappingURL=hash-reader.js.map