UNPKG

fd-gulp-convert-encoding

Version:

convert file to assigned charset

56 lines (37 loc) 1.45 kB
'use strict'; 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); };