var fs = require("fs"), extended = require("../extended"), escape = extended.escape, stream = require("stream"), LINE_BREAK = extended.LINE_BREAK, CsvTransformStream = require("./formatter_stream"); function createWriteStream(options) { return new CsvTransformStream(options); } function write(arr, options, ws) { var csvStream = createWriteStream(options), i = -1, l = arr.length; extended.asyncEach(arr, function (item, cb) { csvStream.write(item, null, cb); }, function (err) { if (err) { csvStream.emit("error", err); } else { csvStream.end(); } }); return csvStream; } function writeToStream(ws, arr, options) { return write(arr, options).pipe(ws); } function writeToString(arr, options, cb) { if (extended.isFunction(options)) { cb = options; options = {}; } var ws = new stream.Writable(), written = []; ws._write = function (data, enc, cb) { written.push(data + ""); cb(); }; ws .on("error", cb) .on("finish", function () { cb(null, written.join("")); }); write(arr, options).pipe(ws); } function writeToBuffer(arr, options, cb) { if (extended.isFunction(options)) { cb = options; options = {}; } var ws = new stream.Writable(), buffers = [], l = 0; ws._write = function (data, enc, cb) { buffers.push(data); l++; cb(); }; ws .on("error", cb) .on("finish", function () { cb(null, Buffer.concat(buffers)); }); write(arr, options).pipe(ws); } function writeToPath(path, arr, options) { var stream = fs.createWriteStream(path, {encoding: "utf8"}); return write(arr, options).pipe(stream); } createWriteStream.writeToBuffer = writeToBuffer; createWriteStream.write = write; createWriteStream.createWriteStream = createWriteStream; createWriteStream.writeToString = writeToString; createWriteStream.writeToPath = writeToPath; createWriteStream.writeToStream = writeToStream; module.exports = createWriteStream;