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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | 2 1 1 1 1 1 1 1 1 42 42 42 42 42 42 42 34 8 42 42 42 42 1 1 3 3 3 3 3 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | /** * Small utility module for compling HTML templates or pre-processed CSS. * * @author: [@jasonsims]('https://github.com/jasonsims') */ 'use strict'; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _path = require('path'); var _consolidate = require('consolidate'); var _consolidate2 = _interopRequireDefault(_consolidate); var _bluebird = require('bluebird'); var _bluebird2 = _interopRequireDefault(_bluebird); var _lodash = require('lodash'); var engineMap = { // HTML Template engines 'hbs': _consolidate2['default'].handlebars.render, 'emblem': renderEmblem, // CSS pre-processors 'less': renderLess, 'stylus': renderStylus, 'styl': renderStyl, 'sass': renderSass, 'scss': renderSass, // Handle plain CSS also 'css': renderDefault, '': renderDefault }; exports.render = function templateManager(filename, source, locals, callback) { Iif (!source) return null; var engine = (0, _path.extname)(filename).slice(1); locals.filename = filename; locals.engine = '.' + engine; return new _bluebird2['default'](function (resolve, reject) { var fn; if (engine.length && _consolidate2['default'][engine] !== undefined) { fn = _consolidate2['default'][engine].render; } else { fn = engineMap[engine]; } Iif (!(0, _lodash.isFunction)(fn)) return reject('Can\'t render file with extension ' + engine); fn(source, locals, function (err, rendered) { Iif (err) return reject(err); resolve(rendered); }); }).nodeify(callback); }; // Deprecated. This engine is deprecated since v2.0 function renderEmblem(source, locals, cb) { var emblem = require('emblem'); var handlebars = require('handlebars'); var template = emblem.compile(handlebars, source); cb(null, template(locals)); } // CSS pre-processors function renderLess(source, locals, cb) { var less = require('less'); var dir = (0, _path.dirname)(locals.filename); var base = (0, _path.basename)(locals.filename); less.render(source, { paths: [dir], filename: base }, function (err, output) { Iif (err) { return cb(err); } cb(null, output.css || output); }); } function renderStylus(source, locals, cb) { var stylus = require('stylus'); // Render stylus synchronously as it does not appear to handle asynchronous // calls properly when an error is generated. var css = stylus.render(source, locals); cb(null, css); } function renderStyl(source, locals, cb) { var styl = require('styl'); cb(null, styl(source, locals).toString()); } function renderSass(source, locals, cb) { var sass = require('node-sass'); locals.data = source; locals.includePaths = [locals.templatePath]; sass.render(locals, function (err, data) { cb(err, data.css.toString()); }); } // Default wrapper for handling standard CSS and empty source. function renderDefault(source, locals, cb) { cb(null, source); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9qZWR1YW4vQ29kZS9lbWFpbC10ZW1wbGF0ZXMvc3JjL3RlbXBsYXRlLW1hbmFnZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztvQkFNeUMsTUFBTTs7MkJBQzlCLGFBQWE7Ozs7d0JBQ2hCLFVBQVU7Ozs7c0JBQ0MsUUFBUTs7QUFFakMsSUFBSSxTQUFTLEdBQUc7O0FBRWQsT0FBSyxFQUFFLHlCQUFLLFVBQVUsQ0FBQyxNQUFNO0FBQzdCLFVBQVEsRUFBRSxZQUFZOztBQUV0QixRQUFNLEVBQUUsVUFBVTtBQUNsQixVQUFRLEVBQUUsWUFBWTtBQUN0QixRQUFNLEVBQUUsVUFBVTtBQUNsQixRQUFNLEVBQUUsVUFBVTtBQUNsQixRQUFNLEVBQUUsVUFBVTs7QUFFbEIsT0FBSyxFQUFFLGFBQWE7QUFDcEIsSUFBRSxFQUFFLGFBQWE7Q0FDbEIsQ0FBQTs7QUFFRCxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsZUFBZSxDQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTtBQUM3RSxNQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSSxDQUFBOztBQUV4QixNQUFJLE1BQU0sR0FBRyxVQXZCUCxPQUFPLEVBdUJRLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUN2QyxRQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtBQUMxQixRQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUE7O0FBRTVCLFNBQU8sMEJBQU0sVUFBVSxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQ3RDLFFBQUksRUFBRSxDQUFBO0FBQ04sUUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLHlCQUFLLE1BQU0sQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUMvQyxRQUFFLEdBQUcseUJBQUssTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFBO0tBQ3pCLE1BQU07QUFDTCxRQUFFLEdBQUcsU0FBUyxD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QUMsQ0FBQTtDQUNIOzs7QUFHRCxTQUFTLGFBQWEsQ0FBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtBQUMxQyxJQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0NBQ2pCIiwiZmlsZSI6Ii9Vc2Vycy9qZWR1YW4vQ29kZS9lbWFpbC10ZW1wbGF0ZXMvc3JjL3RlbXBsYXRlLW1hbmFnZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNtYWxsIHV0aWxpdHkgbW9kdWxlIGZvciBjb21wbGluZyBIVE1MIHRlbXBsYXRlcyBvciBwcmUtcHJvY2Vzc2VkIENTUy5cbiAqXG4gKiBAYXV0aG9yOiBbQGphc29uc2ltc10oJ2h0dHBzOi8vZ2l0aHViLmNvbS9qYXNvbnNpbXMnKVxuICovXG5cbmltcG9ydCB7ZXh0bmFtZSwgZGlybmFtZSwgYmFzZW5hbWV9IGZyb20gJ3BhdGgnXG5pbXBvcnQgY29ucyBmcm9tICdjb25zb2xpZGF0ZSdcbmltcG9ydCBQIGZyb20gJ2JsdWViaXJkJ1xuaW1wb3J0IHtpc0Z1bmN0aW9ufSBmcm9tICdsb2Rhc2gnXG5cbnZhciBlbmdpbmVNYXAgPSB7XG4gIC8vIEhUTUwgVGVtcGxhdGUgZW5naW5lc1xuICAnaGJzJzogY29ucy5oYW5kbGViYXJzLnJlbmRlcixcbiAgJ2VtYmxlbSc6IHJlbmRlckVtYmxlbSxcbiAgLy8gQ1NTIHByZS1wcm9jZXNzb3JzXG4gICdsZXNzJzogcmVuZGVyTGVzcyxcbiAgJ3N0eWx1cyc6IHJlbmRlclN0eWx1cyxcbiAgJ3N0eWwnOiByZW5kZXJTdHlsLFxuICAnc2Fzcyc6IHJlbmRlclNhc3MsXG4gICdzY3NzJzogcmVuZGVyU2FzcyxcbiAgLy8gSGFuZGxlIHBsYWluIENTUyBhbHNvXG4gICdjc3MnOiByZW5kZXJEZWZhdWx0LFxuICAnJzogcmVuZGVyRGVmYXVsdFxufVxuXG5leHBvcnRzLnJlbmRlciA9IGZ1bmN0aW9uIHRlbXBsYXRlTWFuYWdlciAoZmlsZW5hbWUsIHNvdXJjZSwgbG9jYWxzLCBjYWxsYmFjaykge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIG51bGxcblxuICB2YXIgZW5naW5lID0gZXh0bmFtZShmaWxlbmFtZSkuc2xpY2UoMSlcbiAgbG9jYWxzLmZpbGVuYW1lID0gZmlsZW5hbWVcbiAgbG9jYWxzLmVuZ2luZSA9ICcuJyArIGVuZ2luZVxuXG4gIHJldHVybiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIGZuXG4gICAgaWYgKGVuZ2luZS5sZW5ndGggJiYgY29uc1tlbmdpbmVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZuID0gY29uc1tlbmdpbmVdLnJlbmRlclxuICAgIH0gZWxzZSB7XG4gICAgICBmbiA9IGVuZ2luZU1hcFtlbmdpbmVdXG4gICAgfVxuICAgIGlmICghaXNGdW5jdGlvbihmbikpIHJldHVybiByZWplY3QoYENhbid0IHJlbmRlciBmaWxlIHdpdGggZXh0ZW5zaW9uICR7ZW5naW5lfWApXG4gICAgZm4oc291cmNlLCBsb2NhbHMsIGZ1bmN0aW9uIChlcnIsIHJlbmRlcmVkKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgIHJlc29sdmUocmVuZGVyZWQpXG4gICAgfSlcbiAgfSlcbiAgLm5vZGVpZnkoY2FsbGJhY2spXG59XG5cbi8vIERlcHJlY2F0ZWQuIFRoaXMgZW5naW5lIGlzIGRlcHJlY2F0ZWQgc2luY2UgdjIuMFxuZnVuY3Rpb24gcmVuZGVyRW1ibGVtIChzb3VyY2UsIGxvY2FscywgY2IpIHtcbiAgY29uc3QgZW1ibGVtID0gcmVxdWlyZSgnZW1ibGVtJylcbiAgY29uc3QgaGFuZGxlYmFycyA9IHJlcXVpcmUoJ2hhbmRsZWJhcnMnKVxuXG4gIHZhciB0ZW1wbGF0ZSA9IGVtYmxlbS5jb21waWxlKGhhbmRsZWJhcnMsIHNvdXJjZSlcbiAgY2IobnVsbCwgdGVtcGxhdGUobG9jYWxzKSlcbn1cblxuLy8gQ1NTIHByZS1wcm9jZXNzb3JzXG5mdW5jdGlvbiByZW5kZXJMZXNzIChzb3VyY2UsIGxvY2FscywgY2IpIHtcbiAgY29uc3QgbGVzcyA9IHJlcXVpcmUoJ2xlc3MnKVxuICB2YXIgZGlyID0gZGlybmFtZShsb2NhbHMuZmlsZW5hbWUpXG4gIHZhciBiYXNlID0gYmFzZW5hbWUobG9jYWxzLmZpbGVuYW1lKVxuXG4gIGxlc3MucmVuZGVyKHNvdXJjZSwge1xuICAgIHBhdGhzOiBbZGlyXSxcbiAgICBmaWxlbmFtZTogYmFzZVxuICB9LCBmdW5jdGlvbiAoZXJyLCBvdXRwdXQpIHtcbiAgICBpZiAoZXJyKSB7IHJldHVybiBjYihlcnIpIH1cbiAgICBjYihudWxsLCBvdXRwdXQuY3NzIHx8IG91dHB1dClcbiAgfSlcbn1cblxuZnVuY3Rpb24gcmVuZGVyU3R5bHVzIChzb3VyY2UsIGxvY2FscywgY2IpIHtcbiAgY29uc3Qgc3R5bHVzID0gcmVxdWlyZSgnc3R5bHVzJylcblxuICAvLyBSZW5kZXIgc3R5bHVzIHN5bmNocm9ub3VzbHkgYXMgaXQgZG9lcyBub3QgYXBwZWFyIHRvIGhhbmRsZSBhc3luY2hyb25vdXNcbiAgLy8gY2FsbHMgcHJvcGVybHkgd2hlbiBhbiBlcnJvciBpcyBnZW5lcmF0ZWQuXG4gIHZhciBjc3MgPSBzdHlsdXMucmVuZGVyKHNvdXJjZSwgbG9jYWxzKVxuICBjYihudWxsLCBjc3MpXG59XG5cbmZ1bmN0aW9uIHJlbmRlclN0eWwgKHNvdXJjZSwgbG9jYWxzLCBjYikge1xuICBjb25zdCBzdHlsID0gcmVxdWlyZSgnc3R5bCcpXG5cbiAgY2IobnVsbCwgc3R5bChzb3VyY2UsIGxvY2FscykudG9TdHJpbmcoKSlcbn1cblxuZnVuY3Rpb24gcmVuZGVyU2FzcyAoc291cmNlLCBsb2NhbHMsIGNiKSB7XG4gIGNvbnN0IHNhc3MgPSByZXF1aXJlKCdub2RlLXNhc3MnKVxuXG4gIGxvY2Fscy5kYXRhID0gc291cmNlXG4gIGxvY2Fscy5pbmNsdWRlUGF0aHMgPSBbbG9jYWxzLnRlbXBsYXRlUGF0aF1cblxuICBzYXNzLnJlbmRlcihsb2NhbHMsIGZ1bmN0aW9uIChlcnIsIGRhdGEpIHtcbiAgICBjYihlcnIsIGRhdGEuY3NzLnRvU3RyaW5nKCkpXG4gIH0pXG59XG5cbi8vIERlZmF1bHQgd3JhcHBlciBmb3IgaGFuZGxpbmcgc3RhbmRhcmQgQ1NTIGFuZCBlbXB0eSBzb3VyY2UuXG5mdW5jdGlvbiByZW5kZXJEZWZhdWx0IChzb3VyY2UsIGxvY2FscywgY2IpIHtcbiAgY2IobnVsbCwgc291cmNlKVxufVxuIl19 |