import flowRemoveTypes from '@mapbox/flow-remove-types'; import buble from 'rollup-plugin-buble'; import resolve from 'rollup-plugin-node-resolve'; import commonjs from 'rollup-plugin-commonjs'; import unassert from 'rollup-plugin-unassert'; import json from 'rollup-plugin-json'; import {terser} from 'rollup-plugin-terser'; import minifyStyleSpec from './rollup_plugin_minify_style_spec'; import {createFilter} from 'rollup-pluginutils'; import strip from '@rollup/plugin-strip'; // Common set of plugins/transformations shared across different rollup // builds (main mapboxgl bundle, style-spec package, benchmarks bundle) export const plugins = (minified, production) => [ flow(), minifyStyleSpec(), json(), production ? strip({ sourceMap: true, functions: ['PerformanceUtils.*', 'Debug.*'] }) : false, glsl('./src/shaders/*.glsl', production), buble({transforms: {dangerousForOf: true}, objectAssign: "Object.assign"}), minified ? terser({ compress: { pure_getters: true, passes: 3 } }) : false, production ? unassert() : false, resolve({ browser: true, preferBuiltins: false }), commonjs({ // global keyword handling causes Webpack compatibility issues, so we disabled it: // https://github.com/mapbox/mapbox-gl-js/pull/6956 ignoreGlobal: true }) ].filter(Boolean); // Using this instead of rollup-plugin-flow due to // https://github.com/leebyron/rollup-plugin-flow/issues/5 export function flow() { return { name: 'flow-remove-types', transform: (code) => ({ code: flowRemoveTypes(code).toString(), map: null }) }; } // Using this instead of rollup-plugin-string to add minification function glsl(include, minify) { const filter = createFilter(include); return { name: 'glsl', transform(code, id) { if (!filter(id)) return; // barebones GLSL minification if (minify) { code = code.trim() // strip whitespace at the start/end .replace(/\s*\/\/[^\n]*\n/g, '\n') // strip double-slash comments .replace(/\n+/g, '\n') // collapse multi line breaks .replace(/\n\s+/g, '\n') // strip identation .replace(/\s?([+-\/*=,])\s?/g, '$1') // strip whitespace around operators .replace(/([;\(\),\{\}])\n(?=[^#])/g, '$1'); // strip more line breaks } return { code: `export default ${JSON.stringify(code)};`, map: {mappings: ''} }; } }; }