lib/chain/src/ObjectId.js
import {Long} from "bytebuffer";
import v from "../../serializer/src/SerializerValidation";
var DB_MAX_INSTANCE_ID = Long.fromNumber(Math.pow(2, 48) - 1);
class ObjectId {
constructor(space, type, instance) {
this.space = space;
this.type = type;
this.instance = instance;
var instance_string = this.instance.toString();
var ObjectId = `${this.space}.${this.type}.${instance_string}`;
if (!v.is_digits(instance_string)) {
throw new `Invalid object id ${ObjectId}`();
}
}
static fromString(value) {
if (
value.space !== undefined &&
value.type !== undefined &&
value.instance !== undefined
) {
return value;
}
var params = v.require_match(
/^([0-9]+)\.([0-9]+)\.([0-9]+)$/,
v.required(value, "ObjectId"),
"ObjectId"
);
return new ObjectId(
parseInt(params[1]),
parseInt(params[2]),
Long.fromString(params[3])
);
}
static fromLong(long) {
var space = long.shiftRight(56).toInt();
var type = long.shiftRight(48).toInt() & 0x00ff;
var instance = long.and(DB_MAX_INSTANCE_ID);
return new ObjectId(space, type, instance);
}
static fromByteBuffer(b) {
return ObjectId.fromLong(b.readUint64());
}
toLong() {
return Long.fromNumber(this.space)
.shiftLeft(56)
.or(
Long.fromNumber(this.type)
.shiftLeft(48)
.or(this.instance)
);
}
appendByteBuffer(b) {
return b.writeUint64(this.toLong());
}
toString() {
return `${this.space}.${this.type}.${this.instance.toString()}`;
}
}
export default ObjectId;