rollup-plugin-real-babili
Version:
Simple rollup plugin for minifying code using Babili.
80 lines (61 loc) • 1.99 kB
JavaScript
;
var _comandeer_babelPluginBanner_utils = require('@comandeer/babel-plugin-banner/utils');
var sourcemapCodec = require('sourcemap-codec');
var babelCore = require('babel-core');
function fixMappings(mappings) {
if (typeof mappings !== 'string') {
return '';
}
mappings = sourcemapCodec.decode(mappings);
var lastLine = mappings[0][mappings[0].length - 1];
// If the last line has only one segment with only one item,
// just drop the whole line.
if (lastLine && lastLine.length === 1) {
mappings[0].pop();
}
return sourcemapCodec.encode(mappings);
}
function babili() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
return {
name: 'babili',
transformBundle: function transformBundle(bundle, rollupOptions) {
var babelConf = {
presets: ['babili'],
sourceMaps: typeof options.sourceMap !== 'undefined' ? Boolean(options.sourceMap) : true,
comments: typeof options.comments !== 'undefined' ? Boolean(options.comments) : true
};
if (typeof options.banner === 'string' || typeof rollupOptions.banner === 'string') {
(function () {
var banner = options.banner || rollupOptions.banner;
var bannerContent = _comandeer_babelPluginBanner_utils.getCommentContent(banner);
var isAlreadyInserted = false;
babelConf.plugins = [['@comandeer/babel-plugin-banner', {
banner: banner
}]];
if (!babelConf.comments) {
babelConf.shouldPrintComment = function (comment) {
if (!isAlreadyInserted && comment === bannerContent) {
isAlreadyInserted = true;
return true;
}
return false;
};
}
})();
}
var _transform = babelCore.transform(bundle, babelConf),
code = _transform.code,
map = _transform.map;
if (map) {
map.mappings = fixMappings(map.mappings);
}
return {
code: code,
map: map
};
}
};
}
babili.fixMappings = fixMappings;
module.exports = babili;