beth-parser
Version:
Parser library for Bethesda's Creation Engine data files
67 lines • 2.28 kB
JavaScript
;
exports.__esModule = true;
/**
* Render context.
*/
var RenderContext;
(function (RenderContext) {
RenderContext[RenderContext["NONE"] = 0] = "NONE";
RenderContext[RenderContext["OBJECT"] = 1] = "OBJECT";
RenderContext[RenderContext["SEQUENCE"] = 2] = "SEQUENCE";
})(RenderContext || (RenderContext = {}));
/**
* Render array-like structure.
*/
function renderArray(subject, prefix, indent, context) {
// Ignore empty array
if (!subject.length) {
return "";
}
// Render every element on it's own line
return (context !== RenderContext.NONE ? "\n" + indent : "") + subject
.map(function (value) { return "-" + renderValue(value, " ", indent + " ", RenderContext.SEQUENCE); })
.join("\n" + indent);
}
/**
* Render object-like structure.
*/
function renderObject(subject, prefix, indent, context) {
// Remove NULL values
var props = Object.entries(subject).filter(function (prop) { return prop[1] !== null; });
// Render every property on it's own line
return (context === RenderContext.OBJECT ? "\n" + indent : prefix) + props
.map(function (_a) {
var name = _a[0], value = _a[1];
return name + ":" + renderValue(value, " ", indent, RenderContext.OBJECT);
})
.join("\n" + indent);
}
/**
* Render generic value.
*/
function renderValue(subject, prefix, indent, context) {
if (context === void 0) { context = RenderContext.NONE; }
if (Buffer.isBuffer(subject)) {
return prefix + "[" + subject.toString("hex") + "]";
}
else if (Array.isArray(subject)) {
return renderArray(subject, prefix, indent, context);
}
else if (subject.toJSON) {
return renderValue(subject.toJSON(), prefix, indent, context);
}
else if (typeof subject === "object") {
return renderObject(subject, prefix, context === RenderContext.OBJECT ? indent + " " : indent, context);
}
else {
return prefix + subject.toString();
}
}
/**
* Render value in a YAML-like structure.
*/
function renderYamlLike(subject) {
return renderValue(subject, "", "");
}
exports["default"] = renderYamlLike;
//# sourceMappingURL=renderYamlLike.js.map