UNPKG

rollup-plugin-real-babili

Version:
78 lines (60 loc) 1.88 kB
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;