const fs = require("fs"), utils = require("./utils"), caching = require("./caching"), // pp (preprocessors) pp_html = require("./pp_html"), pp_sass = require("node-sass"), pp_config = { ".sass": "sass", ".html": "html", ".htm": "hmtl" }; let logger = require("winston"); /** * Sets the logger for logging * @param {Object} newLogger */ exports.setLogger = function (newLogger) { logger = newLogger; caching.setLogger(logger); }; /** * Returns the data for the file. In some cases the data is processed or loaded from cache. * @param {String} filename The file containing the data * @return {String} The data that should be send */ exports.getProcessed = function (filename) { logger.debug("Processing File %s", filename); let extension = utils.getExtension(filename); // use the utils function to get the files extension let data = null; if (caching.isCached(filename)) return caching.getCached(filename) // return the cached file if it exists logger.debug("File is not cached. Processing..."); switch (pp_config[extension]) { case "sass": logger.debug("Processing sass %s", filename); data = Buffer.from(pp_sass.renderSync({ // use the sass preprocessor file: filename }).css).toString("utf-8"); break; case "html": logger.debug("Processing html %s", filename); data = pp_html.formatHtml(filename); // use the html-preprocessor break; default: logger.debug("No processor found for %s. Returning data.", filename); return fs.readFileSync(filename); // just read the data from the file } caching.cache(filename, data); // cache the file for faster access next time logger.debug("Cached file %s", filename); return data; // return the data }; /** * Cleanup function that calls the cleanup for the caching module */ exports.cleanup = function() { caching.cleanup(); };