├── .env-default ├── .gitignore ├── .nvmrc ├── README.md ├── example.js ├── package-lock.json ├── package.json └── views └── example.hbs /.env-default: -------------------------------------------------------------------------------- 1 | SENDGRID_API_KEY=XXX 2 | RECIPENT_EMAIL=navila@alemana.cl 3 | FROM_EMAIL=no@tengo.cl 4 | FROM_EMAIL_NAME=My Super Mail App 5 | FROM_EMAIL_SUBJECT=Example contact mail -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | tmp/logs/ 2 | tmp/sessions/ 3 | node_modules/ 4 | .env 5 | .DS_Store 6 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | v14 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MJML + Template System + Twillio Sendgrid Example 2 | > An example of putting together [MJML](https://mjml.io/), [Handlebars](https://handlebarsjs.com/) & [Twillio Sendgrid](https://www.twilio.com/sendgrid) for building responsive mails 3 | 4 | ## Installation 5 | 1. Clone the repository 6 | 2. Run `npm install` 7 | 3. Add your **Sendgrid API Key** in `.env` file (refer to `.env.default` file for ) 8 | 3. Add your **Recipent Email** `.env` file (refer to `.env.default` file) 9 | 4. Run `node example.js` 10 | 11 | ## How it works 12 | 1. The app loads `.env` environment configuration. 13 | 2. The view in `views/example.hbs` is loaded. 14 | 3. The loaded view (now as a string) is converted to an **Handlebars Template**. 15 | 4. Then the template replaces the variables with the values in the `userInfo` object. 16 | 5. The Handlebar Template is converted to **HTML**. 17 | 6. The HTML is passed to Sendgrid to generate the email. 18 | 19 | ## Environment variables in .env file 20 | 21 | | Variable | Description | 22 | |--------------------|--------------------------------------------------------------------------------------------------------------------| 23 | | SENDGRID_API_KEY | API Key from Twillio Sendgrid. You can get one [here](https://sendgrid.com/docs/ui/account-and-settings/api-keys/) | 24 | | RECIPENT_EMAIL | Recipent user email | 25 | | FROM_EMAIL | Email used for sending email | 26 | | FROM_EMAIL_NAME | Name used for sending email | 27 | | FROM_EMAIL_SUBJECT | Subject in the email | 28 | -------------------------------------------------------------------------------- /example.js: -------------------------------------------------------------------------------- 1 | const mjml = require('mjml'); 2 | const sendgrid = require('@sendgrid/mail'); 3 | const handlebars = require('handlebars'); 4 | const chalk = require('chalk'); 5 | const fs = require('fs'); 6 | require('dotenv').config(); 7 | 8 | // Sedgrid initialization 9 | sendgrid.setApiKey(process.env.SENDGRID_API_KEY); 10 | 11 | // Información utilizada como "variables" en el correo 12 | const userInfo = { 13 | name: 'Pepe', 14 | lastname: 'Avila', 15 | email: process.env.RECIPENT_EMAIL, 16 | patients: [ 17 | { id: 24654, name: 'Matias Erazo' }, 18 | { id: 24655, name: 'Rodrigo Gutierrez' }, 19 | { id: 25655, name: 'Maria Paz Bustos' }, 20 | ] 21 | } 22 | 23 | 24 | console.log(chalk.green('Reading content from example.hbs template...')); 25 | const mjmlTemplateFile = fs.readFileSync(`${__dirname}/views/example.hbs`, 'utf8'); 26 | const template = handlebars.compile(mjmlTemplateFile); 27 | const hbsHtml = template(userInfo); 28 | 29 | const templateMarkup = mjml(hbsHtml); 30 | if ( templateMarkup.errors.length === 0 ){ 31 | const msg = { 32 | to: userInfo.email, 33 | from: { 34 | email: process.env.FROM_EMAIL, 35 | name: process.env.FROM_EMAIL_NAME 36 | }, 37 | subject: process.env.FROM_EMAIL_SUBJECT, 38 | html: templateMarkup.html 39 | } 40 | 41 | sendgrid.send(msg).then(() => { 42 | console.log(chalk.green('Mail sent!')); 43 | }, (error) => { 44 | console.log(chalk.red(error.message)); 45 | }); 46 | } else { 47 | console.log(chalk.red('There are errors in your MJML markup')); 48 | } -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mjml-sendgrid-tutorial", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@sendgrid/client": { 8 | "version": "6.3.0", 9 | "resolved": "https://registry.npmjs.org/@sendgrid/client/-/client-6.3.0.tgz", 10 | "integrity": "sha512-fTy8vRpA9Whtf8ULQr/0vkSZaQvGQ97rY5N5PrevKRtugJMsJqFMKO0pwzEWeqITSg71aMMTj57QTgw3SjZvnQ==", 11 | "requires": { 12 | "@sendgrid/helpers": "^6.3.0", 13 | "@types/request": "^2.0.3", 14 | "request": "^2.81.0" 15 | } 16 | }, 17 | "@sendgrid/helpers": { 18 | "version": "6.3.0", 19 | "resolved": "https://registry.npmjs.org/@sendgrid/helpers/-/helpers-6.3.0.tgz", 20 | "integrity": "sha512-uTFcmhCDFg/2Uhz+z/cLwyLHH0UsblG49hKwdR7nKbWsGKWv4js7W32FlPdXqy2C/plTJ20vcPLgKM1m3F/MjQ==", 21 | "requires": { 22 | "chalk": "^2.0.1", 23 | "deepmerge": "^2.1.1" 24 | }, 25 | "dependencies": { 26 | "ansi-styles": { 27 | "version": "3.2.1", 28 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 29 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 30 | "requires": { 31 | "color-convert": "^1.9.0" 32 | } 33 | }, 34 | "chalk": { 35 | "version": "2.4.2", 36 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 37 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 38 | "requires": { 39 | "ansi-styles": "^3.2.1", 40 | "escape-string-regexp": "^1.0.5", 41 | "supports-color": "^5.3.0" 42 | } 43 | }, 44 | "supports-color": { 45 | "version": "5.5.0", 46 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 47 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 48 | "requires": { 49 | "has-flag": "^3.0.0" 50 | } 51 | } 52 | } 53 | }, 54 | "@sendgrid/mail": { 55 | "version": "6.3.1", 56 | "resolved": "https://registry.npmjs.org/@sendgrid/mail/-/mail-6.3.1.tgz", 57 | "integrity": "sha512-5zIeAV9iU+0hQkrOQ/D4RB2MfpK+lNbOortIfQdCh95aMDF/TRc9WB8FGNhmQrx9YMuJTms5eiBklF0Fi/dbVg==", 58 | "requires": { 59 | "@sendgrid/client": "^6.3.0", 60 | "@sendgrid/helpers": "^6.3.0" 61 | } 62 | }, 63 | "@types/caseless": { 64 | "version": "0.12.2", 65 | "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", 66 | "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==" 67 | }, 68 | "@types/form-data": { 69 | "version": "2.2.1", 70 | "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-2.2.1.tgz", 71 | "integrity": "sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ==", 72 | "requires": { 73 | "@types/node": "*" 74 | } 75 | }, 76 | "@types/node": { 77 | "version": "11.13.8", 78 | "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.8.tgz", 79 | "integrity": "sha512-szA3x/3miL90ZJxUCzx9haNbK5/zmPieGraZEe4WI+3srN0eGLiT22NXeMHmyhNEopn+IrxqMc7wdVwvPl8meg==" 80 | }, 81 | "@types/request": { 82 | "version": "2.48.1", 83 | "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.1.tgz", 84 | "integrity": "sha512-ZgEZ1TiD+KGA9LiAAPPJL68Id2UWfeSO62ijSXZjFJArVV+2pKcsVHmrcu+1oiE3q6eDGiFiSolRc4JHoerBBg==", 85 | "requires": { 86 | "@types/caseless": "*", 87 | "@types/form-data": "*", 88 | "@types/node": "*", 89 | "@types/tough-cookie": "*" 90 | } 91 | }, 92 | "@types/tough-cookie": { 93 | "version": "2.3.5", 94 | "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.5.tgz", 95 | "integrity": "sha512-SCcK7mvGi3+ZNz833RRjFIxrn4gI1PPR3NtuIS+6vMkvmsGjosqTJwRt5bAEFLRz+wtJMWv8+uOnZf2hi2QXTg==" 96 | }, 97 | "abbrev": { 98 | "version": "1.1.1", 99 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 100 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 101 | }, 102 | "ajv": { 103 | "version": "6.10.0", 104 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", 105 | "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", 106 | "requires": { 107 | "fast-deep-equal": "^2.0.1", 108 | "fast-json-stable-stringify": "^2.0.0", 109 | "json-schema-traverse": "^0.4.1", 110 | "uri-js": "^4.2.2" 111 | } 112 | }, 113 | "ansi-regex": { 114 | "version": "4.1.0", 115 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 116 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" 117 | }, 118 | "ansi-styles": { 119 | "version": "3.2.1", 120 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 121 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 122 | "requires": { 123 | "color-convert": "^1.9.0" 124 | } 125 | }, 126 | "anymatch": { 127 | "version": "3.1.1", 128 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", 129 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", 130 | "requires": { 131 | "normalize-path": "^3.0.0", 132 | "picomatch": "^2.0.4" 133 | } 134 | }, 135 | "asn1": { 136 | "version": "0.2.4", 137 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 138 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 139 | "requires": { 140 | "safer-buffer": "~2.1.0" 141 | } 142 | }, 143 | "assert-plus": { 144 | "version": "1.0.0", 145 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 146 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 147 | }, 148 | "async": { 149 | "version": "3.1.0", 150 | "resolved": "https://registry.npmjs.org/async/-/async-3.1.0.tgz", 151 | "integrity": "sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ==" 152 | }, 153 | "asynckit": { 154 | "version": "0.4.0", 155 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 156 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 157 | }, 158 | "aws-sign2": { 159 | "version": "0.7.0", 160 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 161 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 162 | }, 163 | "aws4": { 164 | "version": "1.8.0", 165 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", 166 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" 167 | }, 168 | "babel-runtime": { 169 | "version": "6.26.0", 170 | "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 171 | "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", 172 | "requires": { 173 | "core-js": "^2.4.0", 174 | "regenerator-runtime": "^0.11.0" 175 | } 176 | }, 177 | "balanced-match": { 178 | "version": "1.0.0", 179 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 180 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 181 | }, 182 | "bcrypt-pbkdf": { 183 | "version": "1.0.2", 184 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 185 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 186 | "requires": { 187 | "tweetnacl": "^0.14.3" 188 | } 189 | }, 190 | "binary-extensions": { 191 | "version": "2.0.0", 192 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", 193 | "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==" 194 | }, 195 | "boolbase": { 196 | "version": "1.0.0", 197 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 198 | "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" 199 | }, 200 | "brace-expansion": { 201 | "version": "1.1.11", 202 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 203 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 204 | "requires": { 205 | "balanced-match": "^1.0.0", 206 | "concat-map": "0.0.1" 207 | } 208 | }, 209 | "braces": { 210 | "version": "3.0.2", 211 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 212 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 213 | "requires": { 214 | "fill-range": "^7.0.1" 215 | } 216 | }, 217 | "camel-case": { 218 | "version": "3.0.0", 219 | "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", 220 | "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", 221 | "requires": { 222 | "no-case": "^2.2.0", 223 | "upper-case": "^1.1.1" 224 | } 225 | }, 226 | "camelcase": { 227 | "version": "5.3.1", 228 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 229 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" 230 | }, 231 | "caseless": { 232 | "version": "0.12.0", 233 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 234 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 235 | }, 236 | "chalk": { 237 | "version": "2.4.2", 238 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 239 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 240 | "requires": { 241 | "ansi-styles": "^3.2.1", 242 | "escape-string-regexp": "^1.0.5", 243 | "supports-color": "^5.3.0" 244 | } 245 | }, 246 | "cheerio": { 247 | "version": "0.22.0", 248 | "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", 249 | "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", 250 | "requires": { 251 | "css-select": "~1.2.0", 252 | "dom-serializer": "~0.1.0", 253 | "entities": "~1.1.1", 254 | "htmlparser2": "^3.9.1", 255 | "lodash.assignin": "^4.0.9", 256 | "lodash.bind": "^4.1.4", 257 | "lodash.defaults": "^4.0.1", 258 | "lodash.filter": "^4.4.0", 259 | "lodash.flatten": "^4.2.0", 260 | "lodash.foreach": "^4.3.0", 261 | "lodash.map": "^4.4.0", 262 | "lodash.merge": "^4.4.0", 263 | "lodash.pick": "^4.2.1", 264 | "lodash.reduce": "^4.4.0", 265 | "lodash.reject": "^4.4.0", 266 | "lodash.some": "^4.4.0" 267 | } 268 | }, 269 | "chokidar": { 270 | "version": "3.3.0", 271 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", 272 | "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", 273 | "requires": { 274 | "anymatch": "~3.1.1", 275 | "braces": "~3.0.2", 276 | "fsevents": "~2.1.1", 277 | "glob-parent": "~5.1.0", 278 | "is-binary-path": "~2.1.0", 279 | "is-glob": "~4.0.1", 280 | "normalize-path": "~3.0.0", 281 | "readdirp": "~3.2.0" 282 | } 283 | }, 284 | "clean-css": { 285 | "version": "4.2.1", 286 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", 287 | "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", 288 | "requires": { 289 | "source-map": "~0.6.0" 290 | } 291 | }, 292 | "cliui": { 293 | "version": "5.0.0", 294 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", 295 | "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", 296 | "requires": { 297 | "string-width": "^3.1.0", 298 | "strip-ansi": "^5.2.0", 299 | "wrap-ansi": "^5.1.0" 300 | } 301 | }, 302 | "color-convert": { 303 | "version": "1.9.3", 304 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 305 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 306 | "requires": { 307 | "color-name": "1.1.3" 308 | } 309 | }, 310 | "color-name": { 311 | "version": "1.1.3", 312 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 313 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 314 | }, 315 | "combined-stream": { 316 | "version": "1.0.7", 317 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", 318 | "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", 319 | "requires": { 320 | "delayed-stream": "~1.0.0" 321 | } 322 | }, 323 | "commander": { 324 | "version": "2.20.3", 325 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 326 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" 327 | }, 328 | "concat-map": { 329 | "version": "0.0.1", 330 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 331 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 332 | }, 333 | "config-chain": { 334 | "version": "1.1.12", 335 | "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", 336 | "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", 337 | "requires": { 338 | "ini": "^1.3.4", 339 | "proto-list": "~1.2.1" 340 | } 341 | }, 342 | "core-js": { 343 | "version": "2.6.10", 344 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.10.tgz", 345 | "integrity": "sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA==" 346 | }, 347 | "core-util-is": { 348 | "version": "1.0.2", 349 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 350 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 351 | }, 352 | "cross-spawn": { 353 | "version": "6.0.5", 354 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", 355 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", 356 | "requires": { 357 | "nice-try": "^1.0.4", 358 | "path-key": "^2.0.1", 359 | "semver": "^5.5.0", 360 | "shebang-command": "^1.2.0", 361 | "which": "^1.2.9" 362 | } 363 | }, 364 | "css-select": { 365 | "version": "1.2.0", 366 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", 367 | "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", 368 | "requires": { 369 | "boolbase": "~1.0.0", 370 | "css-what": "2.1", 371 | "domutils": "1.5.1", 372 | "nth-check": "~1.0.1" 373 | } 374 | }, 375 | "css-what": { 376 | "version": "2.1.3", 377 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", 378 | "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" 379 | }, 380 | "dashdash": { 381 | "version": "1.14.1", 382 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 383 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 384 | "requires": { 385 | "assert-plus": "^1.0.0" 386 | } 387 | }, 388 | "datauri": { 389 | "version": "2.0.0", 390 | "resolved": "https://registry.npmjs.org/datauri/-/datauri-2.0.0.tgz", 391 | "integrity": "sha512-zS2HSf9pI5XPlNZgIqJg/wCJpecgU/HA6E/uv2EfaWnW1EiTGLfy/EexTIsC9c99yoCOTXlqeeWk4FkCSuO3/g==", 392 | "requires": { 393 | "image-size": "^0.7.3", 394 | "mimer": "^1.0.0" 395 | } 396 | }, 397 | "decamelize": { 398 | "version": "1.2.0", 399 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 400 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" 401 | }, 402 | "deep-extend": { 403 | "version": "0.6.0", 404 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 405 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" 406 | }, 407 | "deepmerge": { 408 | "version": "2.2.1", 409 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", 410 | "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==" 411 | }, 412 | "delayed-stream": { 413 | "version": "1.0.0", 414 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 415 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 416 | }, 417 | "dom-serializer": { 418 | "version": "0.1.1", 419 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", 420 | "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", 421 | "requires": { 422 | "domelementtype": "^1.3.0", 423 | "entities": "^1.1.1" 424 | } 425 | }, 426 | "domelementtype": { 427 | "version": "1.3.1", 428 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", 429 | "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" 430 | }, 431 | "domhandler": { 432 | "version": "2.4.2", 433 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", 434 | "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", 435 | "requires": { 436 | "domelementtype": "1" 437 | } 438 | }, 439 | "domutils": { 440 | "version": "1.5.1", 441 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", 442 | "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", 443 | "requires": { 444 | "dom-serializer": "0", 445 | "domelementtype": "1" 446 | } 447 | }, 448 | "dotenv": { 449 | "version": "7.0.0", 450 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", 451 | "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==" 452 | }, 453 | "ecc-jsbn": { 454 | "version": "0.1.2", 455 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 456 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 457 | "requires": { 458 | "jsbn": "~0.1.0", 459 | "safer-buffer": "^2.1.0" 460 | } 461 | }, 462 | "editorconfig": { 463 | "version": "0.15.3", 464 | "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", 465 | "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", 466 | "requires": { 467 | "commander": "^2.19.0", 468 | "lru-cache": "^4.1.5", 469 | "semver": "^5.6.0", 470 | "sigmund": "^1.0.1" 471 | } 472 | }, 473 | "emoji-regex": { 474 | "version": "7.0.3", 475 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 476 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" 477 | }, 478 | "entities": { 479 | "version": "1.1.2", 480 | "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", 481 | "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" 482 | }, 483 | "escape-string-regexp": { 484 | "version": "1.0.5", 485 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 486 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 487 | }, 488 | "extend": { 489 | "version": "3.0.2", 490 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 491 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 492 | }, 493 | "extsprintf": { 494 | "version": "1.3.0", 495 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 496 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 497 | }, 498 | "fast-deep-equal": { 499 | "version": "2.0.1", 500 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", 501 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" 502 | }, 503 | "fast-json-stable-stringify": { 504 | "version": "2.0.0", 505 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 506 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" 507 | }, 508 | "fill-range": { 509 | "version": "7.0.1", 510 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 511 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 512 | "requires": { 513 | "to-regex-range": "^5.0.1" 514 | } 515 | }, 516 | "find-up": { 517 | "version": "3.0.0", 518 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", 519 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", 520 | "requires": { 521 | "locate-path": "^3.0.0" 522 | } 523 | }, 524 | "forever-agent": { 525 | "version": "0.6.1", 526 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 527 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 528 | }, 529 | "form-data": { 530 | "version": "2.3.3", 531 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 532 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 533 | "requires": { 534 | "asynckit": "^0.4.0", 535 | "combined-stream": "^1.0.6", 536 | "mime-types": "^2.1.12" 537 | } 538 | }, 539 | "fs.realpath": { 540 | "version": "1.0.0", 541 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 542 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 543 | }, 544 | "fsevents": { 545 | "version": "2.1.2", 546 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", 547 | "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", 548 | "optional": true 549 | }, 550 | "get-caller-file": { 551 | "version": "2.0.5", 552 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 553 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" 554 | }, 555 | "getpass": { 556 | "version": "0.1.7", 557 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 558 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 559 | "requires": { 560 | "assert-plus": "^1.0.0" 561 | } 562 | }, 563 | "glob": { 564 | "version": "7.1.6", 565 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 566 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 567 | "requires": { 568 | "fs.realpath": "^1.0.0", 569 | "inflight": "^1.0.4", 570 | "inherits": "2", 571 | "minimatch": "^3.0.4", 572 | "once": "^1.3.0", 573 | "path-is-absolute": "^1.0.0" 574 | } 575 | }, 576 | "glob-parent": { 577 | "version": "5.1.2", 578 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 579 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 580 | "requires": { 581 | "is-glob": "^4.0.1" 582 | } 583 | }, 584 | "handlebars": { 585 | "version": "4.7.7", 586 | "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", 587 | "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", 588 | "requires": { 589 | "minimist": "^1.2.5", 590 | "neo-async": "^2.6.0", 591 | "source-map": "^0.6.1", 592 | "uglify-js": "^3.1.4", 593 | "wordwrap": "^1.0.0" 594 | } 595 | }, 596 | "har-schema": { 597 | "version": "2.0.0", 598 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 599 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 600 | }, 601 | "har-validator": { 602 | "version": "5.1.3", 603 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", 604 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", 605 | "requires": { 606 | "ajv": "^6.5.5", 607 | "har-schema": "^2.0.0" 608 | } 609 | }, 610 | "has-flag": { 611 | "version": "3.0.0", 612 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 613 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 614 | }, 615 | "he": { 616 | "version": "1.2.0", 617 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 618 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" 619 | }, 620 | "html-minifier": { 621 | "version": "3.5.21", 622 | "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", 623 | "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", 624 | "requires": { 625 | "camel-case": "3.0.x", 626 | "clean-css": "4.2.x", 627 | "commander": "2.17.x", 628 | "he": "1.2.x", 629 | "param-case": "2.1.x", 630 | "relateurl": "0.2.x", 631 | "uglify-js": "3.4.x" 632 | }, 633 | "dependencies": { 634 | "commander": { 635 | "version": "2.17.1", 636 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", 637 | "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" 638 | }, 639 | "uglify-js": { 640 | "version": "3.4.10", 641 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", 642 | "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", 643 | "requires": { 644 | "commander": "~2.19.0", 645 | "source-map": "~0.6.1" 646 | }, 647 | "dependencies": { 648 | "commander": { 649 | "version": "2.19.0", 650 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", 651 | "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" 652 | } 653 | } 654 | } 655 | } 656 | }, 657 | "htmlparser2": { 658 | "version": "3.10.1", 659 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", 660 | "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", 661 | "requires": { 662 | "domelementtype": "^1.3.1", 663 | "domhandler": "^2.3.0", 664 | "domutils": "^1.5.1", 665 | "entities": "^1.1.1", 666 | "inherits": "^2.0.1", 667 | "readable-stream": "^3.1.1" 668 | } 669 | }, 670 | "http-signature": { 671 | "version": "1.2.0", 672 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 673 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 674 | "requires": { 675 | "assert-plus": "^1.0.0", 676 | "jsprim": "^1.2.2", 677 | "sshpk": "^1.7.0" 678 | } 679 | }, 680 | "image-size": { 681 | "version": "0.7.5", 682 | "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.7.5.tgz", 683 | "integrity": "sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==" 684 | }, 685 | "inflight": { 686 | "version": "1.0.6", 687 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 688 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 689 | "requires": { 690 | "once": "^1.3.0", 691 | "wrappy": "1" 692 | } 693 | }, 694 | "inherits": { 695 | "version": "2.0.4", 696 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 697 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 698 | }, 699 | "ini": { 700 | "version": "1.3.8", 701 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 702 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" 703 | }, 704 | "is-binary-path": { 705 | "version": "2.1.0", 706 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 707 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 708 | "requires": { 709 | "binary-extensions": "^2.0.0" 710 | } 711 | }, 712 | "is-extglob": { 713 | "version": "2.1.1", 714 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 715 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" 716 | }, 717 | "is-fullwidth-code-point": { 718 | "version": "2.0.0", 719 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 720 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" 721 | }, 722 | "is-glob": { 723 | "version": "4.0.1", 724 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 725 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 726 | "requires": { 727 | "is-extglob": "^2.1.1" 728 | } 729 | }, 730 | "is-number": { 731 | "version": "7.0.0", 732 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 733 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" 734 | }, 735 | "is-typedarray": { 736 | "version": "1.0.0", 737 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 738 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 739 | }, 740 | "isexe": { 741 | "version": "2.0.0", 742 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 743 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 744 | }, 745 | "isstream": { 746 | "version": "0.1.2", 747 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 748 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 749 | }, 750 | "js-beautify": { 751 | "version": "1.11.0", 752 | "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.11.0.tgz", 753 | "integrity": "sha512-a26B+Cx7USQGSWnz9YxgJNMmML/QG2nqIaL7VVYPCXbqiKz8PN0waSNvroMtvAK6tY7g/wPdNWGEP+JTNIBr6A==", 754 | "requires": { 755 | "config-chain": "^1.1.12", 756 | "editorconfig": "^0.15.3", 757 | "glob": "^7.1.3", 758 | "mkdirp": "~1.0.3", 759 | "nopt": "^4.0.3" 760 | }, 761 | "dependencies": { 762 | "mkdirp": { 763 | "version": "1.0.4", 764 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", 765 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" 766 | }, 767 | "nopt": { 768 | "version": "4.0.3", 769 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", 770 | "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", 771 | "requires": { 772 | "abbrev": "1", 773 | "osenv": "^0.1.4" 774 | } 775 | } 776 | } 777 | }, 778 | "js-tokens": { 779 | "version": "4.0.0", 780 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 781 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 782 | }, 783 | "jsbn": { 784 | "version": "0.1.1", 785 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 786 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" 787 | }, 788 | "json-schema": { 789 | "version": "0.2.3", 790 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 791 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 792 | }, 793 | "json-schema-traverse": { 794 | "version": "0.4.1", 795 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 796 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 797 | }, 798 | "json-stringify-safe": { 799 | "version": "5.0.1", 800 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 801 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 802 | }, 803 | "jsprim": { 804 | "version": "1.4.1", 805 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 806 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 807 | "requires": { 808 | "assert-plus": "1.0.0", 809 | "extsprintf": "1.3.0", 810 | "json-schema": "0.2.3", 811 | "verror": "1.10.0" 812 | } 813 | }, 814 | "juice": { 815 | "version": "5.2.0", 816 | "resolved": "https://registry.npmjs.org/juice/-/juice-5.2.0.tgz", 817 | "integrity": "sha512-0l6GZmT3efexyaaay3SchKT5kG311N59TEFP5lfvEy0nz9SNqjx311plJ3b4jze7arsmDsiHQLh/xnAuk0HFTQ==", 818 | "requires": { 819 | "cheerio": "^0.22.0", 820 | "commander": "^2.15.1", 821 | "cross-spawn": "^6.0.5", 822 | "deep-extend": "^0.6.0", 823 | "mensch": "^0.3.3", 824 | "slick": "^1.12.2", 825 | "web-resource-inliner": "^4.3.1" 826 | } 827 | }, 828 | "locate-path": { 829 | "version": "3.0.0", 830 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", 831 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", 832 | "requires": { 833 | "p-locate": "^3.0.0", 834 | "path-exists": "^3.0.0" 835 | } 836 | }, 837 | "lodash": { 838 | "version": "4.17.21", 839 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 840 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 841 | }, 842 | "lodash.assignin": { 843 | "version": "4.2.0", 844 | "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", 845 | "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" 846 | }, 847 | "lodash.bind": { 848 | "version": "4.2.1", 849 | "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", 850 | "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" 851 | }, 852 | "lodash.defaults": { 853 | "version": "4.2.0", 854 | "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", 855 | "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" 856 | }, 857 | "lodash.filter": { 858 | "version": "4.6.0", 859 | "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", 860 | "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" 861 | }, 862 | "lodash.flatten": { 863 | "version": "4.4.0", 864 | "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", 865 | "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" 866 | }, 867 | "lodash.foreach": { 868 | "version": "4.5.0", 869 | "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", 870 | "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" 871 | }, 872 | "lodash.map": { 873 | "version": "4.6.0", 874 | "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", 875 | "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" 876 | }, 877 | "lodash.merge": { 878 | "version": "4.6.2", 879 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 880 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" 881 | }, 882 | "lodash.pick": { 883 | "version": "4.4.0", 884 | "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", 885 | "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" 886 | }, 887 | "lodash.reduce": { 888 | "version": "4.6.0", 889 | "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", 890 | "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" 891 | }, 892 | "lodash.reject": { 893 | "version": "4.6.0", 894 | "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", 895 | "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" 896 | }, 897 | "lodash.some": { 898 | "version": "4.6.0", 899 | "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", 900 | "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" 901 | }, 902 | "lodash.unescape": { 903 | "version": "4.0.1", 904 | "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", 905 | "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=" 906 | }, 907 | "loose-envify": { 908 | "version": "1.4.0", 909 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 910 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 911 | "requires": { 912 | "js-tokens": "^3.0.0 || ^4.0.0" 913 | } 914 | }, 915 | "lower-case": { 916 | "version": "1.1.4", 917 | "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", 918 | "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" 919 | }, 920 | "lru-cache": { 921 | "version": "4.1.5", 922 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", 923 | "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", 924 | "requires": { 925 | "pseudomap": "^1.0.2", 926 | "yallist": "^2.1.2" 927 | } 928 | }, 929 | "mensch": { 930 | "version": "0.3.4", 931 | "resolved": "https://registry.npmjs.org/mensch/-/mensch-0.3.4.tgz", 932 | "integrity": "sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==" 933 | }, 934 | "mime-db": { 935 | "version": "1.40.0", 936 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", 937 | "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" 938 | }, 939 | "mime-types": { 940 | "version": "2.1.24", 941 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", 942 | "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", 943 | "requires": { 944 | "mime-db": "1.40.0" 945 | } 946 | }, 947 | "mimer": { 948 | "version": "1.0.0", 949 | "resolved": "https://registry.npmjs.org/mimer/-/mimer-1.0.0.tgz", 950 | "integrity": "sha512-4ZJvCzfcwsBgPbkKXUzGoVZMWjv8IDIygkGzVc7uUYhgnK0t2LmGxxjdgH1i+pn0/KQfB5F/VKUJlfyTSOFQjg==" 951 | }, 952 | "minimatch": { 953 | "version": "3.0.4", 954 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 955 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 956 | "requires": { 957 | "brace-expansion": "^1.1.7" 958 | } 959 | }, 960 | "minimist": { 961 | "version": "1.2.5", 962 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 963 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 964 | }, 965 | "mjml": { 966 | "version": "4.5.1", 967 | "resolved": "https://registry.npmjs.org/mjml/-/mjml-4.5.1.tgz", 968 | "integrity": "sha512-sQVbQ30UwxMpjzkTPdU9RD5OC9ikEjtZEY+zqAioHXAtEmiO0L0eUdfpcb0ni1pu09hMWU4iqRtOyxLgZIOThg==", 969 | "requires": { 970 | "mjml-accordion": "4.5.1", 971 | "mjml-body": "4.5.1", 972 | "mjml-button": "4.5.1", 973 | "mjml-carousel": "4.5.1", 974 | "mjml-cli": "4.5.1", 975 | "mjml-column": "4.5.1", 976 | "mjml-core": "4.5.1", 977 | "mjml-divider": "4.5.1", 978 | "mjml-group": "4.5.1", 979 | "mjml-head": "4.5.1", 980 | "mjml-head-attributes": "4.5.1", 981 | "mjml-head-breakpoint": "4.5.1", 982 | "mjml-head-font": "4.5.1", 983 | "mjml-head-preview": "4.5.1", 984 | "mjml-head-style": "4.5.1", 985 | "mjml-head-title": "4.5.1", 986 | "mjml-hero": "4.5.1", 987 | "mjml-image": "4.5.1", 988 | "mjml-migrate": "4.5.0", 989 | "mjml-navbar": "4.5.1", 990 | "mjml-raw": "4.5.1", 991 | "mjml-section": "4.5.1", 992 | "mjml-social": "4.5.1", 993 | "mjml-spacer": "4.5.1", 994 | "mjml-table": "4.5.1", 995 | "mjml-text": "4.5.1", 996 | "mjml-validator": "4.5.0", 997 | "mjml-wrapper": "4.5.1" 998 | } 999 | }, 1000 | "mjml-accordion": { 1001 | "version": "4.5.1", 1002 | "resolved": "https://registry.npmjs.org/mjml-accordion/-/mjml-accordion-4.5.1.tgz", 1003 | "integrity": "sha512-iFhBIRga6O0HNgqgtMUEqPP9Dv1Ga4LlXo7U4UT3L7My4yCl+uddR67nol0TXTNGvlzwVvOQ1peYMXSLFpfOgA==", 1004 | "requires": { 1005 | "babel-runtime": "^6.26.0", 1006 | "lodash": "^4.17.15", 1007 | "mjml-core": "4.5.1" 1008 | } 1009 | }, 1010 | "mjml-body": { 1011 | "version": "4.5.1", 1012 | "resolved": "https://registry.npmjs.org/mjml-body/-/mjml-body-4.5.1.tgz", 1013 | "integrity": "sha512-cBxcprVgsQVICT/Z4Kot6Aqa4iKUzH4Nt1JF02qtbCZqvNoezXSSnef3Q9B6V9zvj25vVbJ/lXFaszI2vIa6Cg==", 1014 | "requires": { 1015 | "babel-runtime": "^6.26.0", 1016 | "lodash": "^4.17.15", 1017 | "mjml-core": "4.5.1" 1018 | } 1019 | }, 1020 | "mjml-button": { 1021 | "version": "4.5.1", 1022 | "resolved": "https://registry.npmjs.org/mjml-button/-/mjml-button-4.5.1.tgz", 1023 | "integrity": "sha512-nUpgRPEbhOGmcX+a3tRgv7jA9Spml0G9EA0wuW9Qhf2eaXJ+8z3qC67vPJzcTHw3OKaXlFWUk3RWmmXIJzmlQw==", 1024 | "requires": { 1025 | "babel-runtime": "^6.26.0", 1026 | "lodash": "^4.17.15", 1027 | "mjml-core": "4.5.1" 1028 | } 1029 | }, 1030 | "mjml-carousel": { 1031 | "version": "4.5.1", 1032 | "resolved": "https://registry.npmjs.org/mjml-carousel/-/mjml-carousel-4.5.1.tgz", 1033 | "integrity": "sha512-c8purnvgW/t/lC9hxfPEkFwAgX/e1cAMIjPav3Ti/x2Ukuek9aHmQS5lW8j/3jmH4Egj2y8d05brRMgOB4cBAA==", 1034 | "requires": { 1035 | "babel-runtime": "^6.26.0", 1036 | "lodash": "^4.17.15", 1037 | "mjml-core": "4.5.1" 1038 | } 1039 | }, 1040 | "mjml-cli": { 1041 | "version": "4.5.1", 1042 | "resolved": "https://registry.npmjs.org/mjml-cli/-/mjml-cli-4.5.1.tgz", 1043 | "integrity": "sha512-By7bI157vVJSOZ8EpRw7molctCVMcp3EIGcS1s6cQxgIZ7jmIBHvlWBD8ix8o/+gFqtbTnqB6Rh4d2DoEYHwfQ==", 1044 | "requires": { 1045 | "babel-runtime": "^6.26.0", 1046 | "chokidar": "^3.0.0", 1047 | "glob": "^7.1.1", 1048 | "lodash": "^4.17.15", 1049 | "mjml-core": "4.5.1", 1050 | "mjml-migrate": "4.5.0", 1051 | "mjml-parser-xml": "4.5.1", 1052 | "mjml-validator": "4.5.0", 1053 | "yargs": "^13.3.0" 1054 | } 1055 | }, 1056 | "mjml-column": { 1057 | "version": "4.5.1", 1058 | "resolved": "https://registry.npmjs.org/mjml-column/-/mjml-column-4.5.1.tgz", 1059 | "integrity": "sha512-DG8/QnMNsWrc/i9zuOKx+S8gT7b8Ih6PJIH9NRK82afOyqu7sZW8duZVC1BrKd61Qr4J+Jhc9eAMbsrtv5JYNw==", 1060 | "requires": { 1061 | "babel-runtime": "^6.26.0", 1062 | "lodash": "^4.17.15", 1063 | "mjml-core": "4.5.1" 1064 | } 1065 | }, 1066 | "mjml-core": { 1067 | "version": "4.5.1", 1068 | "resolved": "https://registry.npmjs.org/mjml-core/-/mjml-core-4.5.1.tgz", 1069 | "integrity": "sha512-reP5CtEARaB65n1DN8YEtkTB0wAr0jndEXUWtbbQoLJ1aqNKRV/tu/kqqEIjh5jDFydxqqDVuDKv7fXqdzqvzw==", 1070 | "requires": { 1071 | "babel-runtime": "^6.26.0", 1072 | "html-minifier": "^3.5.3", 1073 | "js-beautify": "^1.6.14", 1074 | "juice": "^5.2.0", 1075 | "lodash": "^4.17.15", 1076 | "mjml-migrate": "4.5.0", 1077 | "mjml-parser-xml": "4.5.1", 1078 | "mjml-validator": "4.5.0" 1079 | } 1080 | }, 1081 | "mjml-divider": { 1082 | "version": "4.5.1", 1083 | "resolved": "https://registry.npmjs.org/mjml-divider/-/mjml-divider-4.5.1.tgz", 1084 | "integrity": "sha512-wFOzFrm3ZJwxXN2/fGZzPBgEAY5DCS4clDPRJJjz/Ee4z71wkXvEUXDs/EMAOG4SRq+MZTuze4eZwcEgiEeaBA==", 1085 | "requires": { 1086 | "babel-runtime": "^6.26.0", 1087 | "lodash": "^4.17.15", 1088 | "mjml-core": "4.5.1" 1089 | } 1090 | }, 1091 | "mjml-group": { 1092 | "version": "4.5.1", 1093 | "resolved": "https://registry.npmjs.org/mjml-group/-/mjml-group-4.5.1.tgz", 1094 | "integrity": "sha512-xqYKM18gdqM7PBWI1plxPYHHpZfx09woCsFyKO+KjkC0qf4PmldQpk8M/234G2lWEYhiO/KeWymQ050MdXyZbQ==", 1095 | "requires": { 1096 | "babel-runtime": "^6.26.0", 1097 | "lodash": "^4.17.15", 1098 | "mjml-core": "4.5.1" 1099 | } 1100 | }, 1101 | "mjml-head": { 1102 | "version": "4.5.1", 1103 | "resolved": "https://registry.npmjs.org/mjml-head/-/mjml-head-4.5.1.tgz", 1104 | "integrity": "sha512-VMwvhnUe1kIR78jctRqQtfWye/Evh1J8+eMx3ZAqdEBefDQB+3KZ++EhEyQyt0gLTVRiKQbi95z+M/seEPGbuQ==", 1105 | "requires": { 1106 | "babel-runtime": "^6.26.0", 1107 | "lodash": "^4.17.15", 1108 | "mjml-core": "4.5.1" 1109 | } 1110 | }, 1111 | "mjml-head-attributes": { 1112 | "version": "4.5.1", 1113 | "resolved": "https://registry.npmjs.org/mjml-head-attributes/-/mjml-head-attributes-4.5.1.tgz", 1114 | "integrity": "sha512-miYQ01KTXMBzbP3Gm0uk3d/8Vs2Ux8VE8WR3uDtpcc8tmvJxKMlwa53EKVTeIHOPCUvGmoCHbC42run8Rt6W5w==", 1115 | "requires": { 1116 | "babel-runtime": "^6.26.0", 1117 | "lodash": "^4.17.15", 1118 | "mjml-core": "4.5.1" 1119 | } 1120 | }, 1121 | "mjml-head-breakpoint": { 1122 | "version": "4.5.1", 1123 | "resolved": "https://registry.npmjs.org/mjml-head-breakpoint/-/mjml-head-breakpoint-4.5.1.tgz", 1124 | "integrity": "sha512-Crnf7aUwSC/7Y7aJdGIgrlrfgfegHaFiG5efCR9dkL2XFyhpz43wqMEvhOacWmOfQNdpRQtvp0CKpaLTuQ/HRg==", 1125 | "requires": { 1126 | "babel-runtime": "^6.26.0", 1127 | "lodash": "^4.17.15", 1128 | "mjml-core": "4.5.1" 1129 | } 1130 | }, 1131 | "mjml-head-font": { 1132 | "version": "4.5.1", 1133 | "resolved": "https://registry.npmjs.org/mjml-head-font/-/mjml-head-font-4.5.1.tgz", 1134 | "integrity": "sha512-6yRHQZlgugyt0rGx35xrr9vsCT8HhxyZd+xgnDQuMtTWDYq/zVeROfPJqKl3d4uQin5mMfV71L9fBmvj4hld0A==", 1135 | "requires": { 1136 | "babel-runtime": "^6.26.0", 1137 | "lodash": "^4.17.15", 1138 | "mjml-core": "4.5.1" 1139 | } 1140 | }, 1141 | "mjml-head-preview": { 1142 | "version": "4.5.1", 1143 | "resolved": "https://registry.npmjs.org/mjml-head-preview/-/mjml-head-preview-4.5.1.tgz", 1144 | "integrity": "sha512-BVA92S3zqcTh/jyZ06MUWxQ2/5hjPl+q61hwBZpbhD/ythGLXiZhO2mCdCICKyrkG+8o+aCW9WcPv43nDBKfTA==", 1145 | "requires": { 1146 | "babel-runtime": "^6.26.0", 1147 | "lodash": "^4.17.15", 1148 | "mjml-core": "4.5.1" 1149 | } 1150 | }, 1151 | "mjml-head-style": { 1152 | "version": "4.5.1", 1153 | "resolved": "https://registry.npmjs.org/mjml-head-style/-/mjml-head-style-4.5.1.tgz", 1154 | "integrity": "sha512-WoH+UpIew9XIfejfRO9HZz729TvwexHze1ivXtbX38vgCiHIqL2ROWSS3nC96i69ikrkdQwv5Os5DpD61Axu8w==", 1155 | "requires": { 1156 | "babel-runtime": "^6.26.0", 1157 | "lodash": "^4.17.15", 1158 | "mjml-core": "4.5.1" 1159 | } 1160 | }, 1161 | "mjml-head-title": { 1162 | "version": "4.5.1", 1163 | "resolved": "https://registry.npmjs.org/mjml-head-title/-/mjml-head-title-4.5.1.tgz", 1164 | "integrity": "sha512-YhEhHVzxQ/aLJzc4dd/TzGtGs/ahq9SqHnmlpjbzVZL9rr/BGU6vjTShTMhPyPYLS8Hn7bTHrQQ7p6zvIBU14Q==", 1165 | "requires": { 1166 | "babel-runtime": "^6.26.0", 1167 | "lodash": "^4.17.15", 1168 | "mjml-core": "4.5.1" 1169 | } 1170 | }, 1171 | "mjml-hero": { 1172 | "version": "4.5.1", 1173 | "resolved": "https://registry.npmjs.org/mjml-hero/-/mjml-hero-4.5.1.tgz", 1174 | "integrity": "sha512-NFdLkpqRxnWzD6s4Cci3qzQcj2SbJVaXE1pKG7mJEWRJWnRXTcvl2i9Ykm2tdECHkQfTgT9uhb9yZfCgSeIlQQ==", 1175 | "requires": { 1176 | "babel-runtime": "^6.26.0", 1177 | "lodash": "^4.17.15", 1178 | "mjml-core": "4.5.1" 1179 | } 1180 | }, 1181 | "mjml-image": { 1182 | "version": "4.5.1", 1183 | "resolved": "https://registry.npmjs.org/mjml-image/-/mjml-image-4.5.1.tgz", 1184 | "integrity": "sha512-nJ5JDv4mS3JxYt24prgns+At5VA8iCM72cxRRjgNt67kfJgHPeApO/I+ibei4PqE5JUBJcvajMwGxw0V7LQ5TA==", 1185 | "requires": { 1186 | "babel-runtime": "^6.26.0", 1187 | "lodash": "^4.17.15", 1188 | "mjml-core": "4.5.1" 1189 | } 1190 | }, 1191 | "mjml-migrate": { 1192 | "version": "4.5.0", 1193 | "resolved": "https://registry.npmjs.org/mjml-migrate/-/mjml-migrate-4.5.0.tgz", 1194 | "integrity": "sha512-zzAKSrGpF+OVoa3GHVS7O2A4WZPLBV/Nrc80MGaLS4hhBbuj2WeUdaugVlIMXRRuhQ+nP+k0fZSM8tonDDjd2w==", 1195 | "requires": { 1196 | "babel-runtime": "^6.26.0", 1197 | "commander": "^2.11.0", 1198 | "js-beautify": "^1.6.14", 1199 | "lodash": "^4.17.15", 1200 | "mjml-core": "4.5.0", 1201 | "mjml-parser-xml": "4.5.0" 1202 | }, 1203 | "dependencies": { 1204 | "mjml-core": { 1205 | "version": "4.5.0", 1206 | "resolved": "https://registry.npmjs.org/mjml-core/-/mjml-core-4.5.0.tgz", 1207 | "integrity": "sha512-/9M4Dt0f7zaVzP7OJZlqaVWS1ijkoEoF6dKKeiXqRQ3oTvyiTEATHGA5xeifsU4dOzDFhdfFbu54LJOmHdPlVw==", 1208 | "requires": { 1209 | "babel-runtime": "^6.26.0", 1210 | "html-minifier": "^3.5.3", 1211 | "js-beautify": "^1.6.14", 1212 | "juice": "^5.2.0", 1213 | "lodash": "^4.17.15", 1214 | "mjml-migrate": "4.5.0", 1215 | "mjml-parser-xml": "4.5.0", 1216 | "mjml-validator": "4.5.0" 1217 | } 1218 | }, 1219 | "mjml-parser-xml": { 1220 | "version": "4.5.0", 1221 | "resolved": "https://registry.npmjs.org/mjml-parser-xml/-/mjml-parser-xml-4.5.0.tgz", 1222 | "integrity": "sha512-9NK9TnkDSJ0M7lMv1vuGjZumi1rqdv4Iwr9rBDpBPUvfv9ay7MoJrQjK28cu6PKcamOK6CHAFXihlV9Q6fbYaA==", 1223 | "requires": { 1224 | "babel-runtime": "^6.26.0", 1225 | "htmlparser2": "^3.9.2", 1226 | "lodash": "^4.17.15" 1227 | } 1228 | } 1229 | } 1230 | }, 1231 | "mjml-navbar": { 1232 | "version": "4.5.1", 1233 | "resolved": "https://registry.npmjs.org/mjml-navbar/-/mjml-navbar-4.5.1.tgz", 1234 | "integrity": "sha512-kMMI6NFPG/vS9s0JDqgLiEw1oaeVzbfIZEDT8vlvkL2AszzzC0E0YiZaQBmC/ML156b/mRBpOqygk5h/VXNkMg==", 1235 | "requires": { 1236 | "babel-runtime": "^6.26.0", 1237 | "lodash": "^4.17.15", 1238 | "mjml-core": "4.5.1" 1239 | } 1240 | }, 1241 | "mjml-parser-xml": { 1242 | "version": "4.5.1", 1243 | "resolved": "https://registry.npmjs.org/mjml-parser-xml/-/mjml-parser-xml-4.5.1.tgz", 1244 | "integrity": "sha512-s7YlTH9AQWtj94IgwiOgRrP6pQv4SxToHnLY2hgeX0IOu0DtbxqMpCDMfoe9FNBiWZ/j7QT6nXBOqFI/Xwr6YQ==", 1245 | "requires": { 1246 | "babel-runtime": "^6.26.0", 1247 | "htmlparser2": "^3.9.2", 1248 | "lodash": "^4.17.15" 1249 | } 1250 | }, 1251 | "mjml-raw": { 1252 | "version": "4.5.1", 1253 | "resolved": "https://registry.npmjs.org/mjml-raw/-/mjml-raw-4.5.1.tgz", 1254 | "integrity": "sha512-TtXMr2k0TP92vKzPJSXSXbCPpm8Ry/FM+8l7k0c/NHvUIrgSg7vHuxX9ZVKfaeBaSQQBJsuoPROFWTYaFkIR4A==", 1255 | "requires": { 1256 | "babel-runtime": "^6.26.0", 1257 | "lodash": "^4.17.15", 1258 | "mjml-core": "4.5.1" 1259 | } 1260 | }, 1261 | "mjml-section": { 1262 | "version": "4.5.1", 1263 | "resolved": "https://registry.npmjs.org/mjml-section/-/mjml-section-4.5.1.tgz", 1264 | "integrity": "sha512-olwyzL/4Ei8CaoGeSI3bJZ9OnPOLTTVMlumJ5vDRtAVyNu7wAOw8KNk8+P/0ktW2/OKXBYCmo0Iw16euoOPB8A==", 1265 | "requires": { 1266 | "babel-runtime": "^6.26.0", 1267 | "lodash": "^4.17.15", 1268 | "mjml-core": "4.5.1" 1269 | } 1270 | }, 1271 | "mjml-social": { 1272 | "version": "4.5.1", 1273 | "resolved": "https://registry.npmjs.org/mjml-social/-/mjml-social-4.5.1.tgz", 1274 | "integrity": "sha512-hdM8clBOchQRlBV8j88odyu6DA7qtuhrTEgzDpPOOWDSPX8TJXsIDAIIWIF3G7X156u+ZS0THp/HJetnXGFwcg==", 1275 | "requires": { 1276 | "babel-runtime": "^6.26.0", 1277 | "lodash": "^4.17.15", 1278 | "mjml-core": "4.5.1" 1279 | } 1280 | }, 1281 | "mjml-spacer": { 1282 | "version": "4.5.1", 1283 | "resolved": "https://registry.npmjs.org/mjml-spacer/-/mjml-spacer-4.5.1.tgz", 1284 | "integrity": "sha512-hdoyAMzm1Z0NYrC+yFHgmuLN/ffFSy8OtXMrWfsXbihgf1BDZARtSd9zsJiTq+XlRX2k4V3gozGCRjsmDtVOFg==", 1285 | "requires": { 1286 | "babel-runtime": "^6.26.0", 1287 | "lodash": "^4.17.15", 1288 | "mjml-core": "4.5.1" 1289 | } 1290 | }, 1291 | "mjml-table": { 1292 | "version": "4.5.1", 1293 | "resolved": "https://registry.npmjs.org/mjml-table/-/mjml-table-4.5.1.tgz", 1294 | "integrity": "sha512-6mQ3VI0VWuB/g/95LYHJiyLSsO4E4CLJZaeNWksUe1b8BXcb67lo66dtYwsgFsaBLkor6J1rIHnP7/bB26AZwg==", 1295 | "requires": { 1296 | "babel-runtime": "^6.26.0", 1297 | "lodash": "^4.17.15", 1298 | "mjml-core": "4.5.1" 1299 | } 1300 | }, 1301 | "mjml-text": { 1302 | "version": "4.5.1", 1303 | "resolved": "https://registry.npmjs.org/mjml-text/-/mjml-text-4.5.1.tgz", 1304 | "integrity": "sha512-kTaHthGQYeeN0IubAiKEgAck5y2k7wS0m99NK8RCcG0E1rEmr97Or7KhxM5ZJg8mhPsC3+eni5GXUZw7fDnanA==", 1305 | "requires": { 1306 | "babel-runtime": "^6.26.0", 1307 | "lodash": "^4.17.15", 1308 | "mjml-core": "4.5.1" 1309 | } 1310 | }, 1311 | "mjml-validator": { 1312 | "version": "4.5.0", 1313 | "resolved": "https://registry.npmjs.org/mjml-validator/-/mjml-validator-4.5.0.tgz", 1314 | "integrity": "sha512-Qbyf/VCk3U8ViLCu+VCwGYZVQaJAw5brKW/aXeRRHb10LdhaCF1S0JNIiNyutfnqn92QWdzYt6W+cbcEZIKa9A==", 1315 | "requires": { 1316 | "babel-runtime": "^6.26.0", 1317 | "lodash": "^4.17.15", 1318 | "warning": "^3.0.0" 1319 | } 1320 | }, 1321 | "mjml-wrapper": { 1322 | "version": "4.5.1", 1323 | "resolved": "https://registry.npmjs.org/mjml-wrapper/-/mjml-wrapper-4.5.1.tgz", 1324 | "integrity": "sha512-q1yovtvws5kvo99N3JftpzUoefYLqNJAR+u5MNUZUix2a6vv9QVuwTDYmiNKQTBJPALKcjlGIULP4YHw2Q1L9A==", 1325 | "requires": { 1326 | "babel-runtime": "^6.26.0", 1327 | "lodash": "^4.17.15", 1328 | "mjml-core": "4.5.1", 1329 | "mjml-section": "4.5.1" 1330 | } 1331 | }, 1332 | "neo-async": { 1333 | "version": "2.6.2", 1334 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", 1335 | "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" 1336 | }, 1337 | "nice-try": { 1338 | "version": "1.0.5", 1339 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 1340 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" 1341 | }, 1342 | "no-case": { 1343 | "version": "2.3.2", 1344 | "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", 1345 | "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", 1346 | "requires": { 1347 | "lower-case": "^1.1.1" 1348 | } 1349 | }, 1350 | "normalize-path": { 1351 | "version": "3.0.0", 1352 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1353 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" 1354 | }, 1355 | "nth-check": { 1356 | "version": "1.0.2", 1357 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", 1358 | "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", 1359 | "requires": { 1360 | "boolbase": "~1.0.0" 1361 | } 1362 | }, 1363 | "oauth-sign": { 1364 | "version": "0.9.0", 1365 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 1366 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" 1367 | }, 1368 | "once": { 1369 | "version": "1.4.0", 1370 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1371 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1372 | "requires": { 1373 | "wrappy": "1" 1374 | } 1375 | }, 1376 | "os-homedir": { 1377 | "version": "1.0.2", 1378 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 1379 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" 1380 | }, 1381 | "os-tmpdir": { 1382 | "version": "1.0.2", 1383 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1384 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" 1385 | }, 1386 | "osenv": { 1387 | "version": "0.1.5", 1388 | "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", 1389 | "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", 1390 | "requires": { 1391 | "os-homedir": "^1.0.0", 1392 | "os-tmpdir": "^1.0.0" 1393 | } 1394 | }, 1395 | "p-limit": { 1396 | "version": "2.2.1", 1397 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", 1398 | "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", 1399 | "requires": { 1400 | "p-try": "^2.0.0" 1401 | } 1402 | }, 1403 | "p-locate": { 1404 | "version": "3.0.0", 1405 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", 1406 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", 1407 | "requires": { 1408 | "p-limit": "^2.0.0" 1409 | } 1410 | }, 1411 | "p-try": { 1412 | "version": "2.2.0", 1413 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1414 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" 1415 | }, 1416 | "param-case": { 1417 | "version": "2.1.1", 1418 | "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", 1419 | "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", 1420 | "requires": { 1421 | "no-case": "^2.2.0" 1422 | } 1423 | }, 1424 | "path-exists": { 1425 | "version": "3.0.0", 1426 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 1427 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" 1428 | }, 1429 | "path-is-absolute": { 1430 | "version": "1.0.1", 1431 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1432 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 1433 | }, 1434 | "path-key": { 1435 | "version": "2.0.1", 1436 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 1437 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" 1438 | }, 1439 | "performance-now": { 1440 | "version": "2.1.0", 1441 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 1442 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 1443 | }, 1444 | "picomatch": { 1445 | "version": "2.1.1", 1446 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz", 1447 | "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==" 1448 | }, 1449 | "proto-list": { 1450 | "version": "1.2.4", 1451 | "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", 1452 | "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" 1453 | }, 1454 | "pseudomap": { 1455 | "version": "1.0.2", 1456 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 1457 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" 1458 | }, 1459 | "psl": { 1460 | "version": "1.1.31", 1461 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", 1462 | "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" 1463 | }, 1464 | "punycode": { 1465 | "version": "2.1.1", 1466 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1467 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 1468 | }, 1469 | "qs": { 1470 | "version": "6.5.2", 1471 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 1472 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 1473 | }, 1474 | "readable-stream": { 1475 | "version": "3.4.0", 1476 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", 1477 | "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", 1478 | "requires": { 1479 | "inherits": "^2.0.3", 1480 | "string_decoder": "^1.1.1", 1481 | "util-deprecate": "^1.0.1" 1482 | } 1483 | }, 1484 | "readdirp": { 1485 | "version": "3.2.0", 1486 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", 1487 | "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", 1488 | "requires": { 1489 | "picomatch": "^2.0.4" 1490 | } 1491 | }, 1492 | "regenerator-runtime": { 1493 | "version": "0.11.1", 1494 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", 1495 | "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" 1496 | }, 1497 | "relateurl": { 1498 | "version": "0.2.7", 1499 | "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", 1500 | "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" 1501 | }, 1502 | "request": { 1503 | "version": "2.88.0", 1504 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", 1505 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", 1506 | "requires": { 1507 | "aws-sign2": "~0.7.0", 1508 | "aws4": "^1.8.0", 1509 | "caseless": "~0.12.0", 1510 | "combined-stream": "~1.0.6", 1511 | "extend": "~3.0.2", 1512 | "forever-agent": "~0.6.1", 1513 | "form-data": "~2.3.2", 1514 | "har-validator": "~5.1.0", 1515 | "http-signature": "~1.2.0", 1516 | "is-typedarray": "~1.0.0", 1517 | "isstream": "~0.1.2", 1518 | "json-stringify-safe": "~5.0.1", 1519 | "mime-types": "~2.1.19", 1520 | "oauth-sign": "~0.9.0", 1521 | "performance-now": "^2.1.0", 1522 | "qs": "~6.5.2", 1523 | "safe-buffer": "^5.1.2", 1524 | "tough-cookie": "~2.4.3", 1525 | "tunnel-agent": "^0.6.0", 1526 | "uuid": "^3.3.2" 1527 | } 1528 | }, 1529 | "require-directory": { 1530 | "version": "2.1.1", 1531 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1532 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" 1533 | }, 1534 | "require-main-filename": { 1535 | "version": "2.0.0", 1536 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", 1537 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" 1538 | }, 1539 | "safe-buffer": { 1540 | "version": "5.1.2", 1541 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1542 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1543 | }, 1544 | "safer-buffer": { 1545 | "version": "2.1.2", 1546 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1547 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1548 | }, 1549 | "semver": { 1550 | "version": "5.7.1", 1551 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1552 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 1553 | }, 1554 | "set-blocking": { 1555 | "version": "2.0.0", 1556 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 1557 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" 1558 | }, 1559 | "shebang-command": { 1560 | "version": "1.2.0", 1561 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 1562 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 1563 | "requires": { 1564 | "shebang-regex": "^1.0.0" 1565 | } 1566 | }, 1567 | "shebang-regex": { 1568 | "version": "1.0.0", 1569 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 1570 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" 1571 | }, 1572 | "sigmund": { 1573 | "version": "1.0.1", 1574 | "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", 1575 | "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" 1576 | }, 1577 | "slick": { 1578 | "version": "1.12.2", 1579 | "resolved": "https://registry.npmjs.org/slick/-/slick-1.12.2.tgz", 1580 | "integrity": "sha1-vQSN23TefRymkV+qSldXCzVQwtc=" 1581 | }, 1582 | "source-map": { 1583 | "version": "0.6.1", 1584 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1585 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 1586 | }, 1587 | "sshpk": { 1588 | "version": "1.16.1", 1589 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 1590 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 1591 | "requires": { 1592 | "asn1": "~0.2.3", 1593 | "assert-plus": "^1.0.0", 1594 | "bcrypt-pbkdf": "^1.0.0", 1595 | "dashdash": "^1.12.0", 1596 | "ecc-jsbn": "~0.1.1", 1597 | "getpass": "^0.1.1", 1598 | "jsbn": "~0.1.0", 1599 | "safer-buffer": "^2.0.2", 1600 | "tweetnacl": "~0.14.0" 1601 | } 1602 | }, 1603 | "string-width": { 1604 | "version": "3.1.0", 1605 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 1606 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 1607 | "requires": { 1608 | "emoji-regex": "^7.0.1", 1609 | "is-fullwidth-code-point": "^2.0.0", 1610 | "strip-ansi": "^5.1.0" 1611 | } 1612 | }, 1613 | "string_decoder": { 1614 | "version": "1.3.0", 1615 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1616 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1617 | "requires": { 1618 | "safe-buffer": "~5.2.0" 1619 | }, 1620 | "dependencies": { 1621 | "safe-buffer": { 1622 | "version": "5.2.0", 1623 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 1624 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" 1625 | } 1626 | } 1627 | }, 1628 | "strip-ansi": { 1629 | "version": "5.2.0", 1630 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 1631 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 1632 | "requires": { 1633 | "ansi-regex": "^4.1.0" 1634 | } 1635 | }, 1636 | "supports-color": { 1637 | "version": "5.5.0", 1638 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1639 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1640 | "requires": { 1641 | "has-flag": "^3.0.0" 1642 | } 1643 | }, 1644 | "to-regex-range": { 1645 | "version": "5.0.1", 1646 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1647 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1648 | "requires": { 1649 | "is-number": "^7.0.0" 1650 | } 1651 | }, 1652 | "tough-cookie": { 1653 | "version": "2.4.3", 1654 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", 1655 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", 1656 | "requires": { 1657 | "psl": "^1.1.24", 1658 | "punycode": "^1.4.1" 1659 | }, 1660 | "dependencies": { 1661 | "punycode": { 1662 | "version": "1.4.1", 1663 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 1664 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 1665 | } 1666 | } 1667 | }, 1668 | "tunnel-agent": { 1669 | "version": "0.6.0", 1670 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1671 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 1672 | "requires": { 1673 | "safe-buffer": "^5.0.1" 1674 | } 1675 | }, 1676 | "tweetnacl": { 1677 | "version": "0.14.5", 1678 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1679 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 1680 | }, 1681 | "uglify-js": { 1682 | "version": "3.14.1", 1683 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.1.tgz", 1684 | "integrity": "sha512-JhS3hmcVaXlp/xSo3PKY5R0JqKs5M3IV+exdLHW99qKvKivPO4Z8qbej6mte17SOPqAOVMjt/XGgWacnFSzM3g==", 1685 | "optional": true 1686 | }, 1687 | "upper-case": { 1688 | "version": "1.1.3", 1689 | "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", 1690 | "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" 1691 | }, 1692 | "uri-js": { 1693 | "version": "4.2.2", 1694 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 1695 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 1696 | "requires": { 1697 | "punycode": "^2.1.0" 1698 | } 1699 | }, 1700 | "util-deprecate": { 1701 | "version": "1.0.2", 1702 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1703 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1704 | }, 1705 | "uuid": { 1706 | "version": "3.3.2", 1707 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", 1708 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" 1709 | }, 1710 | "valid-data-url": { 1711 | "version": "2.0.0", 1712 | "resolved": "https://registry.npmjs.org/valid-data-url/-/valid-data-url-2.0.0.tgz", 1713 | "integrity": "sha512-dyCZnv3aCey7yfTgIqdZanKl7xWAEEKCbgmR7SKqyK6QT/Z07ROactrgD1eA37C69ODRj7rNOjzKWVPh0EUjBA==" 1714 | }, 1715 | "verror": { 1716 | "version": "1.10.0", 1717 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 1718 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 1719 | "requires": { 1720 | "assert-plus": "^1.0.0", 1721 | "core-util-is": "1.0.2", 1722 | "extsprintf": "^1.2.0" 1723 | } 1724 | }, 1725 | "warning": { 1726 | "version": "3.0.0", 1727 | "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", 1728 | "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", 1729 | "requires": { 1730 | "loose-envify": "^1.0.0" 1731 | } 1732 | }, 1733 | "web-resource-inliner": { 1734 | "version": "4.3.3", 1735 | "resolved": "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-4.3.3.tgz", 1736 | "integrity": "sha512-Qk19pohqZs3SoFUW4ZlOHlM8hsOnXhTpCrQ16b1qtJtKzJgO7NZLGP+/lcb2g3hWDQD39/LE/JYOn1Sjy7tn1A==", 1737 | "requires": { 1738 | "async": "^3.1.0", 1739 | "chalk": "^2.4.2", 1740 | "datauri": "^2.0.0", 1741 | "htmlparser2": "^3.9.2", 1742 | "lodash.unescape": "^4.0.1", 1743 | "request": "^2.78.0", 1744 | "safer-buffer": "^2.1.2", 1745 | "valid-data-url": "^2.0.0", 1746 | "xtend": "^4.0.2" 1747 | } 1748 | }, 1749 | "which": { 1750 | "version": "1.3.1", 1751 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 1752 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 1753 | "requires": { 1754 | "isexe": "^2.0.0" 1755 | } 1756 | }, 1757 | "which-module": { 1758 | "version": "2.0.0", 1759 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 1760 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" 1761 | }, 1762 | "wordwrap": { 1763 | "version": "1.0.0", 1764 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 1765 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" 1766 | }, 1767 | "wrap-ansi": { 1768 | "version": "5.1.0", 1769 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", 1770 | "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", 1771 | "requires": { 1772 | "ansi-styles": "^3.2.0", 1773 | "string-width": "^3.0.0", 1774 | "strip-ansi": "^5.0.0" 1775 | } 1776 | }, 1777 | "wrappy": { 1778 | "version": "1.0.2", 1779 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1780 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1781 | }, 1782 | "xtend": { 1783 | "version": "4.0.2", 1784 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1785 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" 1786 | }, 1787 | "y18n": { 1788 | "version": "4.0.3", 1789 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", 1790 | "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" 1791 | }, 1792 | "yallist": { 1793 | "version": "2.1.2", 1794 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 1795 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" 1796 | }, 1797 | "yargs": { 1798 | "version": "13.3.0", 1799 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", 1800 | "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", 1801 | "requires": { 1802 | "cliui": "^5.0.0", 1803 | "find-up": "^3.0.0", 1804 | "get-caller-file": "^2.0.1", 1805 | "require-directory": "^2.1.1", 1806 | "require-main-filename": "^2.0.0", 1807 | "set-blocking": "^2.0.0", 1808 | "string-width": "^3.0.0", 1809 | "which-module": "^2.0.0", 1810 | "y18n": "^4.0.0", 1811 | "yargs-parser": "^13.1.1" 1812 | } 1813 | }, 1814 | "yargs-parser": { 1815 | "version": "13.1.2", 1816 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", 1817 | "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", 1818 | "requires": { 1819 | "camelcase": "^5.0.0", 1820 | "decamelize": "^1.2.0" 1821 | } 1822 | } 1823 | } 1824 | } 1825 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mjml-sendgrid-tutorial", 3 | "version": "1.0.0", 4 | "description": "An example of putting together MJML, Handlebars & Twillio Sendgrid for building responsive mails", 5 | "main": "example.js", 6 | "repository": { 7 | "type": "git", 8 | "url": "https://github.com/nicoavila/mjml-sendgrid-tutorial" 9 | }, 10 | "scripts": { 11 | "start": "node example.js" 12 | }, 13 | "keywords": [ 14 | "mjml", 15 | "handlebars", 16 | "sendgrid" 17 | ], 18 | "author": "", 19 | "license": "ISC", 20 | "dependencies": { 21 | "@sendgrid/mail": "^6.3.1", 22 | "chalk": "^2.4.2", 23 | "dotenv": "^7.0.0", 24 | "handlebars": "^4.7.7", 25 | "mjml": "^4.5.1" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /views/example.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Dear {{name}} {{lastname}} 11 | This is your patient list: 12 | 13 | 14 | 15 | ID 16 | Name 17 | 18 | {{#each patients}} 19 | 20 | {{this.id}} 21 | {{this.name}} 22 | 23 | {{else}} 24 | 25 | NO DATA 26 | 27 | {{/each}} 28 | 29 | 30 | 31 | 32 | 33 | --------------------------------------------------------------------------------