src/stringify.js
function stringify (data, options) {
  const json = []
  const Promise = promise(options)
  const stream = streamify(data, options)

  let resolve, reject

  stream.on('data', read)
  stream.on('end', end)
  stream.on('error', error)
  stream.on('dataError', error)

  return new Promise((res, rej) => {
    resolve = res
    reject = rej
  })

  function read (chunk) {
    json.push(chunk)
  }

  function end () {
    resolve(json.join(''))
  }

  function error (e) {
    reject(e)
  }
}
function stringify (data, options) {
  const json = []
  const Promise = promise(options)
  const stream = streamify(data, options)

  let resolve, reject

  stream.on('data', read)
  stream.on('end', end)
  stream.on('error', error)
  stream.on('dataError', error)

  return new Promise((res, rej) => {
    resolve = res
    reject = rej
  })

  function read (chunk) {
    json.push(chunk)
  }

  function end () {
    resolve(json.join(''))
  }

  function error (e) {
    reject(e)
  }
}
function stringify ( data , options ) { const json = [ ] const Promise = promise ( options ) const stream = streamify ( data , options ) let resolve , reject stream . on ( 'data' , read ) stream . on ( 'end' , end ) stream . on ( 'error' , error ) stream . on ( 'dataError' , error ) return new Promise ( ( res , rej ) => { resolve = res reject = rej } ) function read ( chunk ) { json . push ( chunk ) } function end ( ) { resolve ( json . join ( '' ) ) } function error ( e ) { reject ( e ) } }
Public function `stringify`.

Returns a promise and asynchronously serialises a data structure to a
JSON string. Sanely handles promises, buffers, maps and other iterables.

@param data:          The data to transform

@option space:        Indentation string, or the number of spaces
to indent each nested level by.

@option promises:     'resolve' or 'ignore', default is 'resolve'.

@option buffers:      'toString' or 'ignore', default is 'toString'.

@option maps:         'object' or 'ignore', default is 'object'.

@option iterables:    'array' or 'ignore', default is 'array'.

@option circular:     'error' or 'ignore', default is 'error'.

@option yieldRate:     The number of data items to process per timeslice,
default is 16384.

@option bufferLength:  The length of the buffer, default is 1024.

@option highWaterMark: If set, will be passed to the readable stream constructor
as the value for the highWaterMark option.

@option Promise:       The promise constructor to use, defaults to bluebird.
Public function stringify .