rokot-notification
Version:
Rokot - [Rocketmakers](http://www.rocketmakers.com/) TypeScript NodeJs Platform
83 lines (82 loc) • 4.11 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const _ = require("underscore");
const path = require("path");
const nestedTemplateProcessor_1 = require("./nestedTemplateProcessor");
const fileSystemContent_1 = require("./fileSystemContent");
const asyncFs_1 = require("./asyncFs");
class UnderscoreTemplateProcessorFactory {
constructor(contentProvider, fragmentProvider) {
this.contentProvider = contentProvider;
this.fragmentProvider = fragmentProvider;
}
create(templateKey) {
return __awaiter(this, void 0, void 0, function* () {
if (this.fragmentProvider) {
return this.createWithFragment(templateKey);
}
return this.createWithoutFragment(templateKey);
});
}
createWithFragment(templateKey) {
return __awaiter(this, void 0, void 0, function* () {
const c = yield this.contentProvider.get(templateKey);
const fragments = yield this.fragmentProvider();
return (m) => _.template(c)({ model: m, fragments });
});
}
createWithoutFragment(templateKey) {
return __awaiter(this, void 0, void 0, function* () {
const c = yield this.contentProvider.get(templateKey);
return this.createTemplateProcessorWithoutFragment(c);
});
}
createTemplateProcessorWithoutFragment(content) {
return __awaiter(this, void 0, void 0, function* () {
return _.template(content, { variable: "model" });
});
}
}
exports.UnderscoreTemplateProcessorFactory = UnderscoreTemplateProcessorFactory;
class UnderscoreFileSystemNestedTemplateProcessor extends nestedTemplateProcessor_1.NestedTemplateProcessor {
constructor(basePath, logger, fragmentsRelativeFolder) {
super(new UnderscoreFileSystemTemplateProcessorFactory(basePath, logger, fragmentsRelativeFolder));
this.basePath = basePath;
}
}
exports.UnderscoreFileSystemNestedTemplateProcessor = UnderscoreFileSystemNestedTemplateProcessor;
class UnderscoreFileSystemTemplateProcessorFactory extends UnderscoreTemplateProcessorFactory {
constructor(basePath, logger, fragmentsRelativeFolder) {
super(new fileSystemContent_1.FileSystemContent(basePath, logger), fragmentsRelativeFolder && (() => this.fragmentProviderFactory(fragmentsRelativeFolder)));
this.basePath = basePath;
this.logger = logger;
}
fragmentProviderFactory(fragmentsRelativeFolder) {
return __awaiter(this, void 0, void 0, function* () {
if (!_.isUndefined(this.cachedFragments)) {
return this.cachedFragments;
}
const fragmentsPath = path.join(this.basePath, fragmentsRelativeFolder);
if (!(yield asyncFs_1.AsyncFs.existsAsync(fragmentsPath))) {
this.logger.error(`Unable to read template fragment path '${fragmentsPath}'`);
return this.cachedFragments = null;
}
const fragmentFiles = yield asyncFs_1.AsyncFs.readdirAsync(fragmentsPath);
const fragments = {};
for (const file of fragmentFiles) {
const template = yield this.createWithoutFragment(fragmentsRelativeFolder + "/" + file);
fragments[file] = template;
}
return this.cachedFragments = fragments;
});
}
}
exports.UnderscoreFileSystemTemplateProcessorFactory = UnderscoreFileSystemTemplateProcessorFactory;