furnace-module-interface
Version:
An interface for loading, processing and saving furnace modules in an object-oriented manner. Fully typed via TypeScript.
75 lines (74 loc) • 2.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FurnaceMeta = void 0;
const defaults_1 = require("./defaults");
class FurnaceMeta {
constructor() {
this.version = defaults_1.defaults.version;
this.toolName = defaults_1.defaults.toolName;
this.toolVersion = defaults_1.defaults.toolVersion;
this.comment = "";
this.backupFile = "";
this.extraStrings = [];
this.extraInts = [];
this.date = new Date();
}
static create() {
return new FurnaceMeta();
}
static checkFromHelper(helper) {
const pos = helper.getPosition(0);
if (pos < helper.buffer.byteLength + 4 && helper.getASCII(4, pos) === FurnaceMeta.magic) {
return FurnaceMeta.fromHelper(helper);
}
return FurnaceMeta.create();
}
static fromHelper(helper) {
const meta = FurnaceMeta.create();
if (FurnaceMeta.magic !== helper.getASCII(4)) {
throw new Error("Expected format magic string \"" + FurnaceMeta.magic + "\" when loading a subsong block.");
}
meta.version = helper.readUInt16LE();
helper.skipBytes(2);
helper.skipBytes(24);
for (let i = 0; i < helper.readUInt16LE(); i++) {
meta.extraInts.push(helper.readUInt32LE());
}
for (let i = 0; i < helper.readUInt16LE(); i++) {
meta.extraStrings.push(helper.readString("utf-8"));
}
meta.toolName = helper.readString("utf-8");
meta.toolVersion = helper.readString("utf-8");
try {
const date = helper.readString("utf-8");
meta.date = new Date(date);
}
catch (ex) {
meta.date = new Date(0);
}
meta.comment = helper.readString("utf-8");
meta.backupFile = helper.readString("utf-8");
return meta;
}
writeToBuffer(helper) {
helper.writeString(FurnaceMeta.magic, "ascii", false);
helper.writeUInt16LE(this.version);
helper.skipBytes(2);
helper.skipBytes(24);
helper.writeUInt16LE(this.extraInts.length);
for (let i = 0; i < this.extraInts.length; i++) {
helper.writeUInt32LE(this.extraInts[i]);
}
helper.writeUInt16LE(this.extraStrings.length);
for (let i = 0; i < this.extraStrings.length; i++) {
helper.writeString(this.extraStrings[i], "utf8", true);
}
helper.writeString(this.toolName, "utf8", true);
helper.writeString(this.toolVersion, "utf8", true);
helper.writeString(this.date.toISOString(), "utf8", true);
helper.writeString(this.comment, "utf8", true);
helper.writeString(this.backupFile, "utf8", true);
}
}
exports.FurnaceMeta = FurnaceMeta;
FurnaceMeta.magic = "META";