40 lines
1.3 KiB
JavaScript
40 lines
1.3 KiB
JavaScript
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const promise_1 = __importDefault(require("../utils/promise"));
|
|
const error_1 = __importDefault(require("../utils/error"));
|
|
const render_1 = __importDefault(require("./render"));
|
|
/**
|
|
* Render a template
|
|
*
|
|
* @param {TemplateEngine} engine
|
|
* @param {string} filePath
|
|
* @param {Object} context
|
|
* @return {Promise<TemplateOutput>}
|
|
*/
|
|
function renderTemplateFile(engine, filePath, context) {
|
|
const loader = engine.getLoader();
|
|
// Resolve the filePath
|
|
const resolvedFilePath = loader.resolve(null, filePath);
|
|
return (0, promise_1.default)()
|
|
.then(() => {
|
|
if (!loader.async) {
|
|
return loader.getSource(resolvedFilePath);
|
|
}
|
|
const deferred = promise_1.default.defer();
|
|
loader.getSource(resolvedFilePath, deferred.makeNodeResolver());
|
|
return deferred.promise;
|
|
})
|
|
.then((result) => {
|
|
if (!result) {
|
|
throw error_1.default.TemplateError(new Error("Not found"), {
|
|
filename: filePath
|
|
});
|
|
}
|
|
return (0, render_1.default)(engine, result.path, result.src, context);
|
|
});
|
|
}
|
|
exports.default = renderTemplateFile;
|