UNPKG

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
"use strict"; 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";