UNPKG

rollup-plugin-real-babili

Version:
80 lines (61 loc) 1.99 kB
'use strict'; 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;