| "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
|
| }
|
| }
|
|
|