deepify
Version:
DEEP Development Tools
125 lines (95 loc) • 3.09 kB
JavaScript
/**
* Created by CCristi on 6/28/16.
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.IndexListener = undefined;
var _AbstractListener = require('./AbstractListener');
var _deepPackageManager = require('deep-package-manager');
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class IndexListener extends _AbstractListener.AbstractListener {
constructor(...args) {
super(...args);
this._workingMicroservice = this.rootMicroservice;
}
/**
* @param {ResponseEvent} event
*/
handler(event) {
let request = event.request;
let uri = this.getUri(request.url);
if (['/', `/${IndexListener.INDEX_FILE}`].indexOf(uri) !== -1) {
let htmlContent = _fs2.default.readFileSync(this._findSuitableIndexFile()).toString();
htmlContent = this._injectTags(htmlContent);
event.stopPropagation().send(htmlContent, 200, 'text/html');
}
}
/**
* @returns {String}
* @private
*/
_findSuitableIndexFile() {
let microservices = this.microservices;
for (let identifier in microservices) {
if (!microservices.hasOwnProperty(identifier)) {
continue;
}
let microservice = microservices[identifier];
let indexFile = _path2.default.join(microservice.frontend, IndexListener.INDEX_FILE);
if (_fs2.default.existsSync(indexFile)) {
this._workingMicroservice = microservice;
return indexFile;
}
}
return _path2.default.join(this.rootMicroservice.frontend, IndexListener.INDEX_FILE);
}
/**
* @param {String} content
* @returns {String}
* @private
*/
_injectTags(content) {
let config = this.server.property.config;
let globalConfig = config.globals;
let drivers = [];
drivers.push(new _deepPackageManager.Tags_Driver_RootAssetsDriver(config.microservices));
drivers.push(new _deepPackageManager.Tags_Driver_DeepEnvPlaceholderDriver(this._workingMicroservice));
if (globalConfig.pageLoader && globalConfig.pageLoader.src) {
drivers.push(new _deepPackageManager.Tags_Driver_PageLoaderDriver(globalConfig.pageLoader, config.microservices));
}
if (globalConfig.favicon) {
drivers.push(new _deepPackageManager.Tags_Driver_FaviconDriver(globalConfig.favicon, config.microservices));
}
if (globalConfig.version) {
drivers.push(new _deepPackageManager.Tags_Driver_VersionDriver(globalConfig.version));
}
return drivers.reduce((content, driver) => {
return driver.inject(content);
}, content);
}
/**
* @returns {Object}
*/
get microservices() {
return this.server.microservices;
}
/**
* @returns {Object}
*/
get rootMicroservice() {
return this.server.rootMicroservice;
}
/**
* @returns {String}
*/
static get INDEX_FILE() {
return 'index.html';
}
}
exports.IndexListener = IndexListener;