49 lines
1.2 KiB
JavaScript
49 lines
1.2 KiB
JavaScript
"use strict";
|
|
|
|
const { concatArrays } = require("./doc-utils");
|
|
const { throwUnimplementedTagType } = require("./errors");
|
|
|
|
function moduleRender(part, options) {
|
|
let moduleRendered;
|
|
for (let i = 0, l = options.modules.length; i < l; i++) {
|
|
const module = options.modules[i];
|
|
moduleRendered = module.render(part, options);
|
|
if (moduleRendered) {
|
|
return moduleRendered;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function render(options) {
|
|
const baseNullGetter = options.baseNullGetter;
|
|
const { compiled, scopeManager } = options;
|
|
options.nullGetter = (part, sm) => {
|
|
return baseNullGetter(part, sm || scopeManager);
|
|
};
|
|
if (!options.prefix) {
|
|
options.prefix = "";
|
|
}
|
|
if (options.index) {
|
|
options.prefix = options.prefix + options.index + "-";
|
|
}
|
|
let errors = [];
|
|
const parts = compiled.map(function (part, i) {
|
|
options.index = i;
|
|
const moduleRendered = moduleRender(part, options);
|
|
if (moduleRendered) {
|
|
if (moduleRendered.errors) {
|
|
errors = concatArrays([errors, moduleRendered.errors]);
|
|
}
|
|
return moduleRendered.value;
|
|
}
|
|
if (part.type === "content" || part.type === "tag") {
|
|
return part.value;
|
|
}
|
|
throwUnimplementedTagType(part, i);
|
|
});
|
|
return { errors, parts };
|
|
}
|
|
|
|
module.exports = render;
|