rollup-plugin-babel-minify
Version:
Simple rollup plugin for minifying code using babel-minify.
1 lines • 8.23 kB
Source Map (JSON)
{"version":3,"file":"rollup-plugin-babel-minify.js","sources":["../src/utils.js","../src/index.js"],"sourcesContent":["import { encode as encodeSourceMap } from 'sourcemap-codec';\nimport { decode as decodeSourceMap } from 'sourcemap-codec';\n\nfunction addNewLine( code, map, banner ) {\n\tmap = Object.assign( {}, map );\n\n\tcode = code.replace( banner, `${ banner }\\n` );\n\n\tconst mappings = decodeSourceMap( map.mappings );\n\n\tlet codeStart = banner.match( /\\n/g );\n\tcodeStart = codeStart ? codeStart.length + 1 : 1;\n\n\tlet whitespaceAtStart = code.replace( `${ banner }\\n`, '' ).match( /^(\\s)+/g );\n\twhitespaceAtStart = whitespaceAtStart ? whitespaceAtStart.length : 0;\n\n\tmappings.unshift( [] );\n\n\tif ( Array.isArray( mappings[ codeStart ] ) && mappings[ codeStart ].length ) {\n\t\tconst offset = mappings[ codeStart ][ 0 ][ 0 ] - whitespaceAtStart;\n\n\t\tmappings[ codeStart ].forEach( ( segment ) => {\n\t\t\tsegment[ 0 ] -= offset;\n\t\t} );\n\t}\n\n\tmap.mappings = encodeSourceMap( mappings );\n\n\treturn {\n\t\tcode,\n\t\tmap\n\t};\n}\n\nfunction filterMinifyOptions( options ) {\n\tconst disallowedProperties = [\n\t\t'banner',\n\t\t'bannerNewLine',\n\t\t'sourceMap',\n\t\t'comments',\n\t\t'plugins'\n\t];\n\n\treturn Object.keys( options ).reduce( ( newOptions, option ) => {\n\t\tif ( disallowedProperties.indexOf( option ) === -1 ) {\n\t\t\tnewOptions[ option ] = options[ option ];\n\t\t}\n\n\t\treturn newOptions;\n\t}, {} );\n}\n\nfunction isString( v ) {\n\treturn typeof v === 'string';\n}\n\nfunction isFn( v ) {\n\treturn typeof v === 'function';\n}\n\nfunction isFnOrString( v ) {\n\treturn isString( v ) || isFn( v );\n}\n\nexport { addNewLine };\nexport { filterMinifyOptions };\nexport { isString };\nexport { isFn };\nexport { isFnOrString };\n","import minifyPreset from 'babel-preset-minify';\nimport bannerPlugin from '@comandeer/babel-plugin-banner';\nimport importPlugin from '@babel/plugin-syntax-dynamic-import';\nimport { getCommentContent } from '@comandeer/babel-plugin-banner';\nimport { transform } from '@babel/core';\nimport { filterMinifyOptions } from './utils.js';\nimport { addNewLine } from './utils.js';\nimport { isFn } from './utils.js';\nimport { isFnOrString } from './utils.js';\n\n/**\n * Rollup's plugin adding the ability to use babel-minify with Rollup.\n *\n * @module rollup-plugin-babel-minify\n */\n\n/**\n * Function performing the actual minification.\n *\n * @param {module:rollup-plugin-babel-minify.MinifyOptions} [options={}] Plugin's options.\n * @returns {module:rollup-plugin-babel-minify.MinifyPlugin} Rollup plugin.\n */\nfunction minify( options = {} ) {\n\tlet bundleBanner;\n\n\treturn {\n\t\tname: 'babel-minify',\n\n\t\toutputOptions( outputOptions ) {\n\t\t\tconst result = Object.assign( {}, outputOptions );\n\t\t\tbundleBanner = result.banner;\n\n\t\t\tdelete result.banner;\n\n\t\t\treturn result;\n\t\t},\n\n\t\trenderChunk( bundle ) {\n\t\t\tconst minifyOptions = filterMinifyOptions( options );\n\t\t\tconst babelConf = {\n\t\t\t\tpresets: [ [ minifyPreset, minifyOptions ] ],\n\t\t\t\tsourceMaps: typeof options.sourceMap !== 'undefined' ? Boolean( options.sourceMap ) : true,\n\t\t\t\tcomments: typeof options.comments !== 'undefined' ? Boolean( options.comments ) : true,\n\t\t\t\tplugins: Array.isArray( options.plugins ) ? options.plugins.concat( [ importPlugin ] ) : [ importPlugin ]\n\t\t\t};\n\t\t\tlet banner;\n\n\t\t\tif ( isFnOrString( options.banner ) || isFnOrString ( bundleBanner ) ) {\n\t\t\t\tbanner = options.banner || bundleBanner;\n\t\t\t\tbanner = isFn ( banner ) ? banner() : banner;\n\t\t\t\tconst bannerContent = getCommentContent( banner );\n\t\t\t\tlet isAlreadyInserted = false;\n\n\t\t\t\tbabelConf.plugins = babelConf.plugins.concat( [\n\t\t\t\t\t[ bannerPlugin, {\n\t\t\t\t\t\tbanner\n\t\t\t\t\t} ]\n\t\t\t\t] );\n\n\t\t\t\tif ( !babelConf.comments ) {\n\t\t\t\t\tbabelConf.shouldPrintComment = ( comment ) => {\n\t\t\t\t\t\tif ( !isAlreadyInserted && comment === bannerContent ) {\n\t\t\t\t\t\t\tisAlreadyInserted = true;\n\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet { code, map } = transform( bundle, babelConf );\n\n\t\t\tif ( options.bannerNewLine ) {\n\t\t\t\t( { code, map } = addNewLine( code, map, banner ) );\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcode,\n\t\t\t\tmap\n\t\t\t};\n\t\t}\n\t};\n}\n\nexport default minify;\n"],"names":["addNewLine","code","map","banner","Object","assign","replace","mappings","decodeSourceMap","codeStart","match","length","whitespaceAtStart","unshift","Array","isArray","offset","forEach","segment","encodeSourceMap","filterMinifyOptions","options","disallowedProperties","keys","reduce","newOptions","option","indexOf","isString","v","isFn","isFnOrString","minify","bundleBanner","name","outputOptions","result","renderChunk","bundle","minifyOptions","babelConf","presets","minifyPreset","sourceMaps","sourceMap","comments","plugins","concat","importPlugin","bannerContent","getCommentContent","isAlreadyInserted","bannerPlugin","shouldPrintComment","comment","transform","bannerNewLine"],"mappings":"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"}