rollup-plugin-real-babili
Version:
Simple rollup plugin for minifying code using Babili.
78 lines (60 loc) • 1.88 kB
JavaScript
import { getCommentContent } from '@comandeer/babel-plugin-banner/utils';
import { decode, encode } from 'sourcemap-codec';
import { transform } from 'babel-core';
function fixMappings(mappings) {
if (typeof mappings !== 'string') {
return '';
}
mappings = 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 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 = 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 = transform(bundle, babelConf),
code = _transform.code,
map = _transform.map;
if (map) {
map.mappings = fixMappings(map.mappings);
}
return {
code: code,
map: map
};
}
};
}
babili.fixMappings = fixMappings;
export default babili;