| import { nodeResolve } from '@rollup/plugin-node-resolve'; |
| import { terser } from 'rollup-plugin-terser'; |
| import babel from '@rollup/plugin-babel'; |
| import {version} from './package.json' |
| |
| const injectVersion = (options = {}) => { |
| return { |
| name: 'inject-version', |
| renderChunk: (code) => { |
| return code.replace('[[BM_VERSION]]', version) |
| }, |
| } |
| } |
| |
| const addNavigatorValidation = (options = {}) => { |
| return { |
| name: 'inject-version', |
| renderChunk: (code) => { |
| return '(typeof navigator !== "undefined") && ' + code |
| }, |
| } |
| } |
| |
| const noTreeShakingForStandalonePlugin = () => { |
| return { |
| name: 'no-treeshaking-for-standalone', |
| transform(code) { |
| // This is very fast but can produce lots of false positives. |
| // Use a good regular expression or parse an AST and analyze scoping to improve as needed. |
| if (code.indexOf('__[STANDALONE]__') >= 0) return {moduleSideEffects: 'no-treeshake'}; |
| } |
| } |
| } |
| |
| const destinationBuildFolder = 'build/player/'; |
| |
| const builds = [ |
| { |
| input: 'player/js/modules/full.js', |
| dest: `${destinationBuildFolder}`, |
| file: 'lottie.min.js', |
| esm: true, |
| }, |
| { |
| input: 'player/js/modules/full.js', |
| dest: `${destinationBuildFolder}`, |
| file: 'lottie.js', |
| esm: false, |
| skipTerser: true, |
| }, |
| { |
| input: 'player/js/modules/svg_light.js', |
| dest: `${destinationBuildFolder}`, |
| file: 'lottie_light.min.js', |
| esm: true, |
| }, |
| { |
| input: 'player/js/modules/svg_light.js', |
| dest: `${destinationBuildFolder}`, |
| file: 'lottie_light.js', |
| esm: false, |
| skipTerser: true, |
| }, |
| { |
| input: 'player/js/modules/svg.js', |
| dest: `${destinationBuildFolder}`, |
| file: 'lottie_svg.min.js', |
| esm: true, |
| }, |
| { |
| input: 'player/js/modules/svg.js', |
| dest: `${destinationBuildFolder}`, |
| file: 'lottie_svg.js', |
| esm: false, |
| skipTerser: true, |
| }, |
| { |
| input: 'player/js/modules/canvas.js', |
| dest: `${destinationBuildFolder}`, |
| file: 'lottie_canvas.min.js', |
| esm: true, |
| }, |
| { |
| input: 'player/js/modules/canvas_light.js', |
| dest: `${destinationBuildFolder}`, |
| file: 'lottie_light_canvas.js', |
| esm: false, |
| skipTerser: true, |
| }, |
| { |
| input: 'player/js/modules/canvas_light.js', |
| dest: `${destinationBuildFolder}`, |
| file: 'lottie_light_canvas.min.js', |
| esm: true, |
| }, |
| { |
| input: 'player/js/modules/canvas.js', |
| dest: `${destinationBuildFolder}`, |
| file: 'lottie_canvas.js', |
| esm: false, |
| skipTerser: true, |
| }, |
| { |
| input: 'player/js/modules/html_light.js', |
| dest: `${destinationBuildFolder}`, |
| file: 'lottie_light_html.min.js', |
| esm: true, |
| }, |
| { |
| input: 'player/js/modules/html_light.js', |
| dest: `${destinationBuildFolder}`, |
| file: 'lottie_light_html.js', |
| esm: false, |
| skipTerser: true, |
| }, |
| { |
| input: 'player/js/modules/html.js', |
| dest: `${destinationBuildFolder}`, |
| file: 'lottie_html.min.js', |
| esm: true, |
| }, |
| { |
| input: 'player/js/modules/html.js', |
| dest: `${destinationBuildFolder}`, |
| file: 'lottie_html.js', |
| esm: false, |
| skipTerser: true, |
| }, |
| ]; |
| |
| const plugins = [ |
| nodeResolve(), |
| babel({ |
| babelHelpers: 'runtime', |
| skipPreflightCheck: true, |
| }), |
| // noTreeShakingForStandalonePlugin(), |
| injectVersion(), |
| addNavigatorValidation(), |
| ] |
| const pluginsWithTerser = [ |
| ...plugins, |
| terser(), |
| ] |
| |
| const UMDModule = { |
| output: { |
| format: 'umd', |
| name: 'lottie', // this is the name of the global object |
| esModule: false, |
| exports: 'default', |
| sourcemap: false, |
| compact: false, |
| }, |
| treeshake: false, |
| }; |
| |
| const ESMModule = { |
| plugins: [nodeResolve()], |
| treeshake: false, |
| output: [ |
| { |
| format: 'esm', |
| exports: 'named', |
| }, |
| { |
| format: 'cjs', |
| exports: 'named', |
| }, |
| ], |
| }; |
| |
| const exports = builds.reduce((acc, build) => { |
| const builds = []; |
| builds.push({ |
| ...UMDModule, |
| plugins: !build.skipTerser ? pluginsWithTerser : plugins, |
| input: build.input, |
| output: { |
| ...UMDModule.output, |
| file: `${build.dest}${build.file}`, |
| } |
| }); |
| if (build.esm) { |
| builds.push({ |
| ...ESMModule, |
| input: build.input, |
| output: [ |
| { |
| ...ESMModule.output[0], |
| file: 'dist/esm/' + build.file, |
| file: `${destinationBuildFolder}esm/${build.file}`, |
| }, |
| { |
| ...ESMModule.output[1], |
| file: `${destinationBuildFolder}cjs/${build.file}`, |
| } |
| ] |
| }); |
| } |
| |
| acc = acc.concat(builds); |
| return acc; |
| }, []); |
| export default exports; |