all files / es6/ render.js

96.43% Statements 27/28
92.86% Branches 13/14
100% Functions 3/3
96.43% Lines 27/28
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44      5595× 5595× 27577× 27577× 27577× 72×     5523×     244× 244× 244× 132×   244× 5595× 5595× 72×   5523× 253× 252× 17×   252×   5270× 5270×            
"use strict";
 
const ScopeManager = require("./scope-manager");
const DocUtils = require("./doc-utils");
 
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) {
	options.render = render;
	options.modules = options.modules;
	if (!options.scopeManager) {
		options.scopeManager = ScopeManager.createBaseScopeManager(options);
	}
	return options.compiled.map(function (part) {
		const moduleRendered = moduleRender(part, options);
		if (moduleRendered) {
			return moduleRendered.value;
		}
		if (part.type === "placeholder") {
			let value = options.scopeManager.getValue(part.value);
			if (value == null) {
				value = options.nullGetter(part);
			}
			return DocUtils.utf8ToWord(value);
		}
		Eif (part.type === "content" || part.type === "tag") {
			return part.value;
		}
		throw new Error(`Unimplemented tag type "${part.type}"`);
	}).join("");
}
 
module.exports = render;