| 'use strict' | 
|   | 
| const promise = require('./promise') | 
| const streamify = require('./streamify') | 
|   | 
| module.exports = stringify | 
|   | 
| /** | 
|  * 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. | 
|  **/ | 
| 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) | 
|   } | 
| } |