fd-gulp-convert-encoding
Version:
convert file to assigned charset
56 lines (37 loc) • 1.45 kB
JavaScript
;
var through = require('through2');
var gutil = require('gulp-util');
var PluginError = gutil.PluginError;
var jschardet = require('jschardet');
var iconv = require('iconv-lite');
var FLAG = 'STYLE_BUILD_ERR ';
module.exports = function (encoding) {
var pluginName = 'fd-gulp-convert-encoding';
if( typeof encoding !== 'string' || !encoding.trim().length ) {
throw new PluginError(pluginName, 'encoding is empty');
}
function convert (file, env, callback) {
if (file.isNull()) {
return callback(null, file);
}
if (file.isStream()) {
return callback(new PluginError(pluginName, 'Streaming not supported'));
}
var filePath = file.path;
var filebuffer = file.contents;
var fileEncoding = jschardet.detect(filebuffer).encoding;
var convertEncoding = encoding.trim();
if( !fileEncoding ) {
return callback(null, file);
}
if( !iconv.encodingExists(convertEncoding) ) {
gutil.log(gutil.colors.yellow('[WARN]'), 'you want convert file:', filePath, 'encoding is', gutil.colors.red(fileEncoding), 'to', gutil.colors.yellow(convertEncoding) ,'but iconv-lite not support it!');
return callback(null, file);
}
var fileStr = iconv.decode(filebuffer, fileEncoding);
var decodeBuffer = iconv.encode(fileStr, convertEncoding);
file.contents = decodeBuffer;
return callback(null, file);
}
return through.obj(convert);
};