| "use strict" |
|
|
| var Buffer = require("safer-buffer").Buffer |
|
|
| |
| |
| module.exports = function (streamModule) { |
| var Transform = streamModule.Transform |
|
|
| |
|
|
| function IconvLiteEncoderStream (conv, options) { |
| this.conv = conv |
| options = options || {} |
| options.decodeStrings = false |
| Transform.call(this, options) |
| } |
|
|
| IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, { |
| constructor: { value: IconvLiteEncoderStream } |
| }) |
|
|
| IconvLiteEncoderStream.prototype._transform = function (chunk, encoding, done) { |
| if (typeof chunk !== "string") { |
| return done(new Error("Iconv encoding stream needs strings as its input.")) |
| } |
|
|
| try { |
| var res = this.conv.write(chunk) |
| if (res && res.length) this.push(res) |
| done() |
| } catch (e) { |
| done(e) |
| } |
| } |
|
|
| IconvLiteEncoderStream.prototype._flush = function (done) { |
| try { |
| var res = this.conv.end() |
| if (res && res.length) this.push(res) |
| done() |
| } catch (e) { |
| done(e) |
| } |
| } |
|
|
| IconvLiteEncoderStream.prototype.collect = function (cb) { |
| var chunks = [] |
| this.on("error", cb) |
| this.on("data", function (chunk) { chunks.push(chunk) }) |
| this.on("end", function () { |
| cb(null, Buffer.concat(chunks)) |
| }) |
| return this |
| } |
|
|
| |
|
|
| function IconvLiteDecoderStream (conv, options) { |
| this.conv = conv |
| options = options || {} |
| options.encoding = this.encoding = "utf8" |
| Transform.call(this, options) |
| } |
|
|
| IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, { |
| constructor: { value: IconvLiteDecoderStream } |
| }) |
|
|
| IconvLiteDecoderStream.prototype._transform = function (chunk, encoding, done) { |
| if (!Buffer.isBuffer(chunk) && !(chunk instanceof Uint8Array)) { return done(new Error("Iconv decoding stream needs buffers as its input.")) } |
| try { |
| var res = this.conv.write(chunk) |
| if (res && res.length) this.push(res, this.encoding) |
| done() |
| } catch (e) { |
| done(e) |
| } |
| } |
|
|
| IconvLiteDecoderStream.prototype._flush = function (done) { |
| try { |
| var res = this.conv.end() |
| if (res && res.length) this.push(res, this.encoding) |
| done() |
| } catch (e) { |
| done(e) |
| } |
| } |
|
|
| IconvLiteDecoderStream.prototype.collect = function (cb) { |
| var res = "" |
| this.on("error", cb) |
| this.on("data", function (chunk) { res += chunk }) |
| this.on("end", function () { |
| cb(null, res) |
| }) |
| return this |
| } |
|
|
| return { |
| IconvLiteEncoderStream: IconvLiteEncoderStream, |
| IconvLiteDecoderStream: IconvLiteDecoderStream |
| } |
| } |
|
|