@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
95 lines (88 loc) • 11.2 kB
JavaScript
;
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
const BinaryStream = require('@jsprismarine/jsbinaryutils');
const node_crypto = require('node:crypto');
const _interopDefault = e => e && e.__esModule ? e : { default: e };
const BinaryStream__default = /*#__PURE__*/_interopDefault(BinaryStream);
class UUID {
parts = [];
version;
constructor(part1 = 0, part2 = 0, part3 = 0, part4 = 0, version = 4) {
this.parts = [part1, part2, part3, part4];
this.version = version || (this.parts[1] & 61440) >> 12;
}
equals(uuid) {
return this.parts.length === uuid.parts.length && this.parts.every((value, index) => value === uuid.parts[index]);
}
/**
* Creates an UUID from a string hex representation
*/
static fromString(uuid, version = 4) {
if (!uuid) throw new Error("uuid is null or undefined");
return UUID.fromBinary(Buffer.from(uuid.trim().replaceAll("-", ""), "hex"), version);
}
/**
* Creates an UUID from a binary representation
*/
static fromBinary(uuid, version) {
if (uuid.byteLength !== 16) {
throw new Error("UUID must have 16 bytes");
}
const stream = new BinaryStream__default.default(uuid);
return new UUID(stream.readInt(), stream.readInt(), stream.readInt(), stream.readInt(), version);
}
/**
* Generates a random UUIDv4 (string)
*/
static randomString() {
return node_crypto.randomUUID({
disableEntropyCache: true
});
}
/**
* Generates a random UUIDv4
*/
static fromRandom() {
const stringUUID = UUID.randomString();
return UUID.fromString(stringUUID, 4);
}
toBinary() {
const stream = new BinaryStream__default.default();
stream.writeInt(this.parts[0]);
stream.writeInt(this.parts[1]);
stream.writeInt(this.parts[2]);
stream.writeInt(this.parts[3]);
return stream.getBuffer();
}
toString() {
const hex = this.toBinary().toString("hex");
const parts = [];
parts.push(hex.slice(0, 8));
parts.push(hex.slice(8, 8 + 4));
parts.push(hex.slice(12, 12 + 4));
parts.push(hex.slice(16, 16 + 4));
parts.push(hex.slice(20, 20 + 12));
return parts.join("-");
}
getVersion() {
return this.version;
}
getParts() {
return this.parts;
}
networkSerialize(stream) {
stream.writeIntLE(this.parts[1]);
stream.writeIntLE(this.parts[0]);
stream.writeIntLE(this.parts[3]);
stream.writeIntLE(this.parts[2]);
}
static networkDeserialize(stream) {
const part1 = stream.readIntLE();
const part0 = stream.readIntLE();
const part3 = stream.readIntLE();
const part2 = stream.readIntLE();
return new UUID(part0, part1, part2, part3);
}
}
exports.default = UUID;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVVVJRC5janMuY2pzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvVVVJRC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmluYXJ5U3RyZWFtIGZyb20gJ0Bqc3ByaXNtYXJpbmUvanNiaW5hcnl1dGlscyc7XG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVVUlEIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhcnRzOiBudW1iZXJbXSA9IFtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdmVyc2lvbjogbnVtYmVyO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHBhcnQxID0gMCwgcGFydDIgPSAwLCBwYXJ0MyA9IDAsIHBhcnQ0ID0gMCwgdmVyc2lvbiA9IDQpIHtcbiAgICAgICAgdGhpcy5wYXJ0cyA9IFtwYXJ0MSwgcGFydDIsIHBhcnQzLCBwYXJ0NF07XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb24gfHwgKHRoaXMucGFydHNbMV0hICYgMHhmMDAwKSA+PiAxMjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXF1YWxzKHV1aWQ6IFVVSUQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMucGFydHMubGVuZ3RoID09PSB1dWlkLnBhcnRzLmxlbmd0aCAmJiB0aGlzLnBhcnRzLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+IHZhbHVlID09PSB1dWlkLnBhcnRzW2luZGV4XSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIFVVSUQgZnJvbSBhIHN0cmluZyBoZXggcmVwcmVzZW50YXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb21TdHJpbmcodXVpZDogc3RyaW5nLCB2ZXJzaW9uID0gNCk6IFVVSUQge1xuICAgICAgICBpZiAoIXV1aWQpIHRocm93IG5ldyBFcnJvcigndXVpZCBpcyBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXG4gICAgICAgIHJldHVybiBVVUlELmZyb21CaW5hcnkoQnVmZmVyLmZyb20odXVpZC50cmltKCkucmVwbGFjZUFsbCgnLScsICcnKSwgJ2hleCcpLCB2ZXJzaW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIFVVSUQgZnJvbSBhIGJpbmFyeSByZXByZXNlbnRhdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUJpbmFyeSh1dWlkOiBCdWZmZXIsIHZlcnNpb246IG51bWJlcik6IFVVSUQge1xuICAgICAgICBpZiAodXVpZC5ieXRlTGVuZ3RoICE9PSAxNikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVVUlEIG11c3QgaGF2ZSAxNiBieXRlcycpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RyZWFtID0gbmV3IEJpbmFyeVN0cmVhbSh1dWlkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVVUlEKHN0cmVhbS5yZWFkSW50KCksIHN0cmVhbS5yZWFkSW50KCksIHN0cmVhbS5yZWFkSW50KCksIHN0cmVhbS5yZWFkSW50KCksIHZlcnNpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhIHJhbmRvbSBVVUlEdjQgKHN0cmluZylcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHJhbmRvbVN0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gcmFuZG9tVVVJRCh7XG4gICAgICAgICAgICBkaXNhYmxlRW50cm9weUNhY2hlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhIHJhbmRvbSBVVUlEdjRcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb21SYW5kb20oKTogVVVJRCB7XG4gICAgICAgIGNvbnN0IHN0cmluZ1VVSUQgPSBVVUlELnJhbmRvbVN0cmluZygpO1xuICAgICAgICByZXR1cm4gVVVJRC5mcm9tU3RyaW5nKHN0cmluZ1VVSUQsIDQpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b0JpbmFyeSgpOiBCdWZmZXIge1xuICAgICAgICBjb25zdCBzdHJlYW0gPSBuZXcgQmluYXJ5U3RyZWFtKCk7XG4gICAgICAgIHN0cmVhbS53cml0ZUludCh0aGlzLnBhcnRzWzBdISk7XG4gICAgICAgIHN0cmVhbS53cml0ZUludCh0aGlzLnBhcnRzWzFdISk7XG4gICAgICAgIHN0cmVhbS53cml0ZUludCh0aGlzLnBhcnRzWzJdISk7XG4gICAgICAgIHN0cmVhbS53cml0ZUludCh0aGlzLnBhcnRzWzNdISk7XG4gICAgICAgIHJldHVybiBzdHJlYW0uZ2V0QnVmZmVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGhleCA9IHRoaXMudG9CaW5hcnkoKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICAgICAgLy8gWHh4eHh4eHgteHh4eC1NeHh4LU54eHgteHh4eHh4eHh4eHh4IDgtNC00LTQtMTJcbiAgICAgICAgY29uc3QgcGFydHMgPSBbXTtcbiAgICAgICAgcGFydHMucHVzaChoZXguc2xpY2UoMCwgOCkpO1xuICAgICAgICBwYXJ0cy5wdXNoKGhleC5zbGljZSg4LCA4ICsgNCkpO1xuICAgICAgICBwYXJ0cy5wdXNoKGhleC5zbGljZSgxMiwgMTIgKyA0KSk7XG4gICAgICAgIHBhcnRzLnB1c2goaGV4LnNsaWNlKDE2LCAxNiArIDQpKTtcbiAgICAgICAgcGFydHMucHVzaChoZXguc2xpY2UoMjAsIDIwICsgMTIpKTtcbiAgICAgICAgcmV0dXJuIHBhcnRzLmpvaW4oJy0nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VmVyc2lvbigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy52ZXJzaW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQYXJ0cygpOiBudW1iZXJbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZXR3b3JrU2VyaWFsaXplKHN0cmVhbTogYW55KTogdm9pZCB7XG4gICAgICAgIHN0cmVhbS53cml0ZUludExFKHRoaXMucGFydHNbMV0pO1xuICAgICAgICBzdHJlYW0ud3JpdGVJbnRMRSh0aGlzLnBhcnRzWzBdKTtcbiAgICAgICAgc3RyZWFtLndyaXRlSW50TEUodGhpcy5wYXJ0c1szXSk7XG4gICAgICAgIHN0cmVhbS53cml0ZUludExFKHRoaXMucGFydHNbMl0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgbmV0d29ya0Rlc2VyaWFsaXplKHN0cmVhbTogYW55KTogVVVJRCB7XG4gICAgICAgIGNvbnN0IHBhcnQxID0gc3RyZWFtLnJlYWRJbnRMRSgpO1xuICAgICAgICBjb25zdCBwYXJ0MCA9IHN0cmVhbS5yZWFkSW50TEUoKTtcbiAgICAgICAgY29uc3QgcGFydDMgPSBzdHJlYW0ucmVhZEludExFKCk7XG4gICAgICAgIGNvbnN0IHBhcnQyID0gc3RyZWFtLnJlYWRJbnRMRSgpO1xuICAgICAgICByZXR1cm4gbmV3IFVVSUQocGFydDAsIHBhcnQxLCBwYXJ0MiwgcGFydDMpO1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6WyJCaW5hcnlTdHJlYW0iLCJyYW5kb21VVUlEIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUdBLE1BQXFCLElBQUssQ0FBQTtBQUFBLEVBQ0wsUUFBa0IsRUFBQztBQUFBLEVBQ25CLE9BQUE7QUFBQSxFQUVWLFdBQUEsQ0FBWSxLQUFRLEdBQUEsQ0FBQSxFQUFHLEtBQVEsR0FBQSxDQUFBLEVBQUcsUUFBUSxDQUFHLEVBQUEsS0FBQSxHQUFRLENBQUcsRUFBQSxPQUFBLEdBQVUsQ0FBRyxFQUFBO0FBQ3hFLElBQUEsSUFBQSxDQUFLLEtBQVEsR0FBQSxDQUFDLEtBQU8sRUFBQSxLQUFBLEVBQU8sT0FBTyxLQUFLLENBQUE7QUFDeEMsSUFBQSxJQUFBLENBQUssVUFBVSxPQUFZLElBQUEsQ0FBQSxJQUFBLENBQUssS0FBTSxDQUFB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