@bitgo/utxo-ord
Version:
Utilities for building ordinals with BitGo utxo-lib
53 lines • 5.61 kB
JavaScript
export class InvalidSatRange extends Error {
constructor(message, start, end) {
super(message);
this.start = start;
this.end = end;
}
}
function toRange(v) {
return typeof v === 'bigint' ? new SatRange(v, v) : v;
}
/**
* Range of satoshi, inclusive.
* Inscriptions have start === end.
*/
export class SatRange {
constructor(start, end) {
this.start = start;
this.end = end;
if (start < 0 || end < 0 || end < start) {
throw new InvalidSatRange(`Invalid SatRange [${start}, ${end}]`, start, end);
}
}
/**
* @param offset
* @return SatRange with start and end shifted by offset
*/
shiftedBy(offset) {
return new SatRange(this.start + offset, this.end + offset);
}
/** @return true iff this intersects with _other_ */
intersectsWith(other) {
other = toRange(other);
if (this.start <= other.start) {
return other.start <= this.end;
}
return other.intersectsWith(this);
}
/** @return true iff this is superset of _other_. */
isSupersetOf(other) {
other = toRange(other);
return this.start <= other.start && other.end <= this.end;
}
toString() {
if (this.start === this.end) {
return `[${this.start}]`;
}
return `[${this.start}..${this.end}]`;
}
size() {
return this.end - this.start + BigInt(1);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2F0UmFuZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvU2F0UmFuZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLGVBQWdCLFNBQVEsS0FBSztJQUN4QyxZQUFZLE9BQWUsRUFBUyxLQUFhLEVBQVMsR0FBVztRQUNuRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFEbUIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUFTLFFBQUcsR0FBSCxHQUFHLENBQVE7SUFFckUsQ0FBQztDQUNGO0FBRUQsU0FBUyxPQUFPLENBQUMsQ0FBb0I7SUFDbkMsT0FBTyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQUNuQixZQUFtQixLQUFhLEVBQVMsR0FBVztRQUFqQyxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQVMsUUFBRyxHQUFILEdBQUcsQ0FBUTtRQUNsRCxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7WUFDeEMsTUFBTSxJQUFJLGVBQWUsQ0FBQyxxQkFBcUIsS0FBSyxLQUFLLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvRSxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVMsQ0FBQyxNQUFjO1FBQ3RCLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsb0RBQW9EO0lBQ3BELGNBQWMsQ0FBQyxLQUF3QjtRQUNyQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUIsT0FBTyxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDakMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsb0RBQW9EO0lBQ3BELFlBQVksQ0FBQyxLQUF3QjtRQUNuQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUM1RCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDNUIsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQztRQUMzQixDQUFDO1FBQ0QsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxJQUFJO1FBQ0YsT0FBTyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBJbnZhbGlkU2F0UmFuZ2UgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcHVibGljIHN0YXJ0OiBiaWdpbnQsIHB1YmxpYyBlbmQ6IGJpZ2ludCkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvUmFuZ2UodjogYmlnaW50IHwgU2F0UmFuZ2UpOiBTYXRSYW5nZSB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gJ2JpZ2ludCcgPyBuZXcgU2F0UmFuZ2UodiwgdikgOiB2O1xufVxuXG4vKipcbiAqIFJhbmdlIG9mIHNhdG9zaGksIGluY2x1c2l2ZS5cbiAqIEluc2NyaXB0aW9ucyBoYXZlIHN0YXJ0ID09PSBlbmQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTYXRSYW5nZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBzdGFydDogYmlnaW50LCBwdWJsaWMgZW5kOiBiaWdpbnQpIHtcbiAgICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA8IDAgfHwgZW5kIDwgc3RhcnQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkU2F0UmFuZ2UoYEludmFsaWQgU2F0UmFuZ2UgWyR7c3RhcnR9LCAke2VuZH1dYCwgc3RhcnQsIGVuZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBvZmZzZXRcbiAgICogQHJldHVybiBTYXRSYW5nZSB3aXRoIHN0YXJ0IGFuZCBlbmQgc2hpZnRlZCBieSBvZmZzZXRcbiAgICovXG4gIHNoaWZ0ZWRCeShvZmZzZXQ6IGJpZ2ludCk6IFNhdFJhbmdlIHtcbiAgICByZXR1cm4gbmV3IFNhdFJhbmdlKHRoaXMuc3RhcnQgKyBvZmZzZXQsIHRoaXMuZW5kICsgb2Zmc2V0KTtcbiAgfVxuXG4gIC8qKiBAcmV0dXJuIHRydWUgaWZmIHRoaXMgaW50ZXJzZWN0cyB3aXRoIF9vdGhlcl8gKi9cbiAgaW50ZXJzZWN0c1dpdGgob3RoZXI6IGJpZ2ludCB8IFNhdFJhbmdlKTogYm9vbGVhbiB7XG4gICAgb3RoZXIgPSB0b1JhbmdlKG90aGVyKTtcbiAgICBpZiAodGhpcy5zdGFydCA8PSBvdGhlci5zdGFydCkge1xuICAgICAgcmV0dXJuIG90aGVyLnN0YXJ0IDw9IHRoaXMuZW5kO1xuICAgIH1cbiAgICByZXR1cm4gb3RoZXIuaW50ZXJzZWN0c1dpdGgodGhpcyk7XG4gIH1cblxuICAvKiogQHJldHVybiB0cnVlIGlmZiB0aGlzIGlzIHN1cGVyc2V0IG9mIF9vdGhlcl8uICovXG4gIGlzU3VwZXJzZXRPZihvdGhlcjogYmlnaW50IHwgU2F0UmFuZ2UpOiBib29sZWFuIHtcbiAgICBvdGhlciA9IHRvUmFuZ2Uob3RoZXIpO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0IDw9IG90aGVyLnN0YXJ0ICYmIG90aGVyLmVuZCA8PSB0aGlzLmVuZDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuc3RhcnQgPT09IHRoaXMuZW5kKSB7XG4gICAgICByZXR1cm4gYFske3RoaXMuc3RhcnR9XWA7XG4gICAgfVxuICAgIHJldHVybiBgWyR7dGhpcy5zdGFydH0uLiR7dGhpcy5lbmR9XWA7XG4gIH1cblxuICBzaXplKCk6IGJpZ2ludCB7XG4gICAgcmV0dXJuIHRoaXMuZW5kIC0gdGhpcy5zdGFydCArIEJpZ0ludCgxKTtcbiAgfVxufVxuIl19