blob: 0d7ad02a24b567011d3036875189c9d80f58793f [file] [log] [blame]
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;