| 'use strict' | 
|   | 
| const fs = require('fs') | 
| const promise = require('./promise') | 
| const streamify = require('./streamify') | 
|   | 
| module.exports = write | 
|   | 
| /** | 
|  * Public function `write`. | 
|  * | 
|  * Returns a promise and asynchronously serialises a data structure to a | 
|  * JSON file on disk. Sanely handles promises, buffers, maps and other | 
|  * iterables. | 
|  * | 
|  * @param path:           Path to the JSON file. | 
|  * | 
|  * @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 write (path, data, options) { | 
|   const Promise = promise(options) | 
|   | 
|   return new Promise((resolve, reject) => { | 
|     streamify(data, options) | 
|       .pipe(fs.createWriteStream(path, options)) | 
|       .on('finish', () => { | 
|         resolve() | 
|       }) | 
|       .on('error', reject) | 
|       .on('dataError', reject) | 
|   }) | 
| } |