UNPKG

ajs

Version:

Asynchronous templating in Node.js

78 lines (68 loc) 1.95 kB
"use strict"; var path = require('path'); var filenameCache = {}, dirnameCache = {}; module.exports = { /** * resolveFilename * Resolves and caches filename paths. * * @name resolveFilename * @function * @param {String} filename The filename to resolve. * @returns {String} The resolved filename. */ resolveFilename: function resolveFilename(filename) { var cached = filenameCache[filename]; if (cached) { return cached; } return filenameCache[filename] = path.resolve(process.cwd(), filename); } /** * resolveDirname * Resolves and caches folder paths. * * @name resolveDirname * @function * @param {} filename * @returns {String} The resolved dirname path. */ , resolveDirname: function resolveDirname(filename) { var cached = dirnameCache[filename]; if (cached) { return cached; } return dirnameCache[filename] = path.dirname(filename); } /** * escape * Escapes the HTML entities. * * @name escape * @function * @param {String} expr The input HTML code. * @returns {String} The escaped result. */ , escape: function escape(expr) { return String(expr).replace(/&(?!\w+;)/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;'); } /** * extend * Merges two objects. * * @name extend * @function * @param {Object} target The first object. * @param {Object} source The second object. * @returns {Object} The merged objects. */ , extend: function extend(target, source, clone) { var _target = clone ? {} : target; var props = Object.getOwnPropertyNames(source); props.forEach(function (name) { _target[name] = (clone ? target[name] : null) || source[name]; }); return _target; } };