docs: function runWithAfter (ret, runWith) {
      // after original promise resolves then run after methods
      return ret.then(res => {
          // wait for all extension methods to complete
          return Promise.all(runWith)
          // merge returned data into original
          .then(function (results) {
              // either merge or replace result
              _.each(results, result => {
                  // both original res and after result are objects
                  if (typeof res === 'object' && res !== null && typeof result === 'object' && result !== null) {
                      // merge after into original
                      _.merge(res, result)
                  }
                  // one is not an object
                  else if (result !== undefined) {
                      // replace original with after
                      res = result
                  }
              })
              // return final result
              return res
          })
      })
  }