@mann-conomy/vdf-utils
Version:
A Node.js utility library for parsing and converting objects in Valve's Data File (VDF) format.
55 lines • 2.12 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const builder_1 = __importDefault(require("./builder"));
const stack_1 = require("./stack");
const enums_1 = require("../resources/enums");
const utils_1 = require("../lib/utils");
class VDF {
static parse(file) {
const stack = new stack_1.PopulatedStack();
const result = stack.peek();
for (const line of (0, utils_1.getFileLines)(file)) {
switch (line) {
case enums_1.ObjectNotation.OpeningBrace: {
const current = stack.peek();
const last = (0, utils_1.getLastKey)(current);
const next = stack.new();
stack.update(last, next);
stack.push(next);
break;
}
case enums_1.ObjectNotation.ClosingBrace:
stack.pop();
break;
default: {
const { key, value } = (0, utils_1.getObject)(line);
stack.update(key, value);
break;
}
}
}
if ((0, utils_1.isObjectEmpty)(result, enums_1.ObjectNotation.EmptyObject)) {
throw new RangeError("The parsed VDF object is empty or invalid");
}
return result;
}
static stringify(object, indentation = 0) {
const builder = new builder_1.default(indentation);
for (const [key, value] of Object.entries(object)) {
if (Object.prototype.hasOwnProperty.call(object, key)) {
if ((0, utils_1.isObject)(value)) {
builder.newline(key, this.stringify(value, indentation + 1), true);
}
else {
builder.newline(key, String(value), false);
}
}
}
return builder.toVdf();
}
}
exports.default = VDF;
//# sourceMappingURL=vdf.js.map