123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- import * as pkg from '../package.json'
- import babel from '@rollup/plugin-babel'
- import resolve from '@rollup/plugin-node-resolve'
- import commonjs from '@rollup/plugin-commonjs'
- import filesize from 'rollup-plugin-filesize'
- import { terser } from 'rollup-plugin-terser'
-
- const buildDate = Date()
-
- const headerLong = `/*!
- * ${pkg.name} - ${pkg.description}
- * @version ${pkg.version}
- * ${pkg.homepage}
- *
- * @copyright ${pkg.author}
- * @license ${pkg.license}
- *
- * BUILT: ${buildDate}
- */;`
-
- const headerShort = `/*! ${pkg.name} v${pkg.version} ${pkg.license}*/;`
-
- const getBabelConfig = (node = false) => {
-
- let targets = pkg.browserslist
- const plugins = [
- ['@babel/transform-runtime', {
- version: "^7.14.5",
- regenerator: false,
- useESModules: true
- }],
- ["polyfill-corejs3", {
- "method": "usage-pure"
- }]
- ]
-
- if (node) {
- targets = 'maintained node versions'
- }
-
- return babel({
- include: 'src/**',
- babelHelpers: 'runtime',
- babelrc: false,
- targets: targets,
- presets: [['@babel/preset-env', {
- modules: false,
- // useBuildins and plugin-transform-runtime are mutually exclusive
- // https://github.com/babel/babel/issues/10271#issuecomment-528379505
- // use babel-polyfills when released
- useBuiltIns: false,
- bugfixes: true,
- loose: true
- }]],
- plugins
- })
- }
-
- // When few of these get mangled nothing works anymore
- // We loose literally nothing by let these unmangled
- const classes = [
- 'A',
- 'ClipPath',
- 'Defs',
- 'Element',
- 'G',
- 'Image',
- 'Marker',
- 'Path',
- 'Polygon',
- 'Rect',
- 'Stop',
- 'Svg',
- 'Text',
- 'Tspan',
- 'Circle',
- 'Container',
- 'Dom',
- 'Ellipse',
- 'Gradient',
- 'Line',
- 'Mask',
- 'Pattern',
- 'Polyline',
- 'Shape',
- 'Style',
- 'Symbol',
- 'TextPath',
- 'Use'
- ]
-
- const config = (node, min, esm = false) => ({
- input: (node || esm) ? './src/main.js' : './src/svg.js',
- output: {
- file: esm ? './dist/svg.esm.js'
- : node ? './dist/svg.node.js'
- : min ? './dist/svg.min.js'
- : './dist/svg.js',
- format: esm ? 'esm' : node ? 'cjs' : 'iife',
- name: 'SVG',
- sourcemap: true,
- banner: headerLong,
- // remove Object.freeze
- freeze: false
- },
- treeshake: {
- // property getter have no sideeffects
- propertyReadSideEffects: false
- },
- plugins: [
- resolve({ browser: !node }),
- commonjs(),
- getBabelConfig(node),
- filesize(),
- !min ? {} : terser({
- mangle: {
- reserved: classes
- },
- output: {
- preamble: headerShort
- }
- })
- ]
- })
-
- // [node, minified, esm]
- const modes = [[false], [false, true], [true], [false, false, true]]
-
- export default modes.map(m => config(...m))
|