trailsjs / trails

:evergreen_tree: Modern Web Application Framework for Node.js.
http://trailsjs.io
Other
1.67k stars 70 forks source link

V3 configuration trailpack-email #322

Closed jaumard closed 6 years ago

jaumard commented 6 years ago

Issue Description

The trailpack-email contain this configuration:

const smtpTransport = require('nodemailer-smtp-transport')
const nodemailer = require('nodemailer')

const transport = nodemailer.createTransport(smtpTransport({
  service: 'gmail',
  auth: {
    user: 'jimmy.aumard@gmail.com',
    pass: 'blablabla'
  }
}))

/**
 * Email Configuration
 * (app.config.email)
 *
 * Configure email, smtp, auth
 *
 * @see {@link https://github.com/jaumard/trailpack-email}
 */
module.exports = {
  //Custom transporter object to send email
  customTransporter: transport,

  /*
   * Default data use with EmailService.send
   * from, to, css, bcc, subject, text, html, attachments
   */
  defaultData: {
    to: 'jimmy.aumard@gmail.com'
  }
}

The problem is apparently customTransporter: transport when trails is trying to flatten the config object, I get this error:

/usr/local/bin/node /Users/jaumard/TrailsProjects/jaumard.com/server.js
/Users/jaumard/TrailsProjects/jaumard.com/node_modules/trails/lib/Configuration.js:81
    Object.entries(tree).forEach(([k, v]) => {
                         ^

RangeError: Maximum call stack size exceeded
    at Array.forEach (<anonymous>)
    at Function.flattenTree (/Users/jaumard/TrailsProjects/jaumard.com/node_modules/trails/lib/Configuration.js:81:26)
    at Object.entries.forEach (/Users/jaumard/TrailsProjects/jaumard.com/node_modules/trails/lib/Configuration.js:83:42)
    at Array.forEach (<anonymous>)
    at Function.flattenTree (/Users/jaumard/TrailsProjects/jaumard.com/node_modules/trails/lib/Configuration.js:81:26)
    at Object.entries.forEach (/Users/jaumard/TrailsProjects/jaumard.com/node_modules/trails/lib/Configuration.js:83:42)
    at Array.forEach (<anonymous>)
    at Function.flattenTree (/Users/jaumard/TrailsProjects/jaumard.com/node_modules/trails/lib/Configuration.js:81:26)
    at Object.entries.forEach (/Users/jaumard/TrailsProjects/jaumard.com/node_modules/trails/lib/Configuration.js:83:42)
    at Array.forEach (<anonymous>)
    at Function.flattenTree (/Users/jaumard/TrailsProjects/jaumard.com/node_modules/trails/lib/Configuration.js:81:26)
    at Object.entries.forEach (/Users/jaumard/TrailsProjects/jaumard.com/node_modules/trails/lib/Configuration.js:83:42)
    at Array.forEach (<anonymous>)
    at Function.flattenTree (/Users/jaumard/TrailsProjects/jaumard.com/node_modules/trails/lib/Configuration.js:81:26)
    at Object.entries.forEach (/Users/jaumard/TrailsProjects/jaumard.com/node_modules/trails/lib/Configuration.js:83:42)
    at Array.forEach (<anonymous>)

Process finished with exit code 1

Environment

any idea @trailsjs/maintainers ?

scott-wyatt commented 6 years ago

Bummer, this would need to be refactored so that the transport configuration is consumed versus being set. It makes it less flexible, but more testable unfortunately.

jaumard commented 6 years ago

I don't think it's possible to just have the config here as there a lot of plugin for node mailer and I can't manage them all just by config... I didn't try yet to migrate trailpack-passport but maybe I'll have the same problem with strategies set under config :/

jaumard commented 6 years ago

A hack is to use a callback customTransporter: () => transport as it can't be flattened, then no more problems.