UNPKG

postmailer

Version:

HTTP POST -> SMTP proxy, as Express middleware

69 lines (64 loc) 1.97 kB
var UriTemplate = require('uri-templates'); function Transform(obj) { var emailTemplate = UriTemplate(obj.email); var urlTemplates = [].concat(obj.urls || obj.url || []).map(UriTemplate); var name = obj.name; var restricted = obj.restricted; this.emailForUrl = function (url, includeRestricted) { if (!includeRestricted && restricted) return null; var urls = [].concat(url); for (var i = 0; i < urlTemplates.length; i++) { for (var j = 0; j < urls.length; j++) { var params = urlTemplates[i].fromUri(urls[j]); if (params) return emailTemplate.fill(params); } } return null; }; this.urlsForEmail = function (email, includeRestricted) { if (!includeRestricted && restricted) return []; var params = emailTemplate.fromUri(email); if (params) return urlTemplates.map(function (template) { return template.fill(params); }); return []; }; this.nameForUrl = function (url, includeRestricted) { var email = this.emailForUrl(url, includeRestricted); if (!email) return null; if (typeof name === 'function') { return name(url, email); } else { return name || (url + ""); } }; } Transform.prototype = {}; function Mapping(transforms) { var transforms = [].concat(transforms).map(function (transform) { return new Transform(transform); }); this.emailForUrl = function (url, mustBeOpen) { for (var i = 0; i < transforms.length; i++) { var email = transforms[i].emailForUrl(url, mustBeOpen); if (email) return email; } return null; }; this.urlsForEmail = function (email, mustBeOpen) { var urls = []; for (var i = 0; i < transforms.length; i++) { urls = urls.concat(transforms[i].urlsForEmail(email, mustBeOpen)); } return urls; }; this.nameForUrl = function (url, mustBeOpen) { for (var i = 0; i < transforms.length; i++) { var name = transforms[i].nameForUrl(url, mustBeOpen); if (name) return name; } return null; }; } Mapping.prototype = {}; module.exports = Mapping;