Permalink
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
codeql-action/node_modules/iconv-lite/lib/streams.js
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

121 lines (100 sloc)
3.31 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"use strict"; | |
var Buffer = require("buffer").Buffer, | |
Transform = require("stream").Transform; | |
// == Exports ================================================================== | |
module.exports = function(iconv) { | |
// Additional Public API. | |
iconv.encodeStream = function encodeStream(encoding, options) { | |
return new IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options); | |
} | |
iconv.decodeStream = function decodeStream(encoding, options) { | |
return new IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options); | |
} | |
iconv.supportsStreams = true; | |
// Not published yet. | |
iconv.IconvLiteEncoderStream = IconvLiteEncoderStream; | |
iconv.IconvLiteDecoderStream = IconvLiteDecoderStream; | |
iconv._collect = IconvLiteDecoderStream.prototype.collect; | |
}; | |
// == Encoder stream ======================================================= | |
function IconvLiteEncoderStream(conv, options) { | |
this.conv = conv; | |
options = options || {}; | |
options.decodeStrings = false; // We accept only strings, so we don't need to decode them. | |
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; | |
} | |
// == Decoder stream ======================================================= | |
function IconvLiteDecoderStream(conv, options) { | |
this.conv = conv; | |
options = options || {}; | |
options.encoding = this.encoding = 'utf8'; // We output strings. | |
Transform.call(this, options); | |
} | |
IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, { | |
constructor: { value: IconvLiteDecoderStream } | |
}); | |
IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) { | |
if (!Buffer.isBuffer(chunk)) | |
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; | |
} |