UNPKG

@sendgrid/helpers

Version:

Twilio SendGrid NodeJS internal helpers

122 lines (99 loc) 2.08 kB
'use strict'; /** * Dependencies */ const splitNameEmail = require('../helpers/split-name-email'); /** * Email address class */ class EmailAddress { /** * Constructor */ constructor(data) { //Construct from data if (data) { this.fromData(data); } } /** * From data */ fromData(data) { //String given if (typeof data === 'string') { const [name, email] = splitNameEmail(data); data = {name, email}; } //Expecting object if (typeof data !== 'object') { throw new Error('Expecting object or string for EmailAddress data'); } //Extract name and email const {name, email} = data; //Set this.setEmail(email); this.setName(name); } /** * Set name */ setName(name) { if (typeof name === 'undefined') { return; } if (typeof name !== 'string') { throw new Error('String expected for `name`'); } this.name = name; } /** * Set email (mandatory) */ setEmail(email) { if (typeof email === 'undefined') { throw new Error('Must provide `email`'); } if (typeof email !== 'string') { throw new Error('String expected for `email`'); } this.email = email; } /** * To JSON */ toJSON() { //Get properties const {email, name} = this; //Initialize with mandatory properties const json = {email}; //Add name if present if (name !== '') { json.name = name; } //Return return json; } /************************************************************************** * Static helpers ***/ /** * Create an EmailAddress instance from given data */ static create(data) { //Array? if (Array.isArray(data)) { return data .filter(item => !!item) .map(item => this.create(item)); } //Already instance of EmailAddress class? if (data instanceof EmailAddress) { return data; } //Create instance return new EmailAddress(data); } } //Export class module.exports = EmailAddress;