123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773 |
- const fs = require('fs');
- const UglifyJS = require("uglify-js");
- const rootFolder = 'player/';
- const bm_version = '5.8.1';
- const buildReducedVersion = process.argv[2] === 'reduced'
- const defaultBuilds = ['full','svg_light','svg','canvas','html', 'canvas_light', 'html_light', 'canvas_worker', 'lottie_worker']
- const scripts = [
- {
- src: 'js/main.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/common.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/BaseEvent.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/helpers/arrays.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/helpers/svg_elements.js',
- builds: ['full','svg','svg_light','html','html_light','lottie_worker']
- },
- {
- src: 'js/utils/helpers/html_elements.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/helpers/dynamicProperties.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/helpers/blendModes.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/helpers/shapeEnums.js',
- builds: defaultBuilds
- },
- {
- src: 'js/3rd_party/transformation-matrix.js',
- builds: defaultBuilds
- },
- {
- src: 'js/3rd_party/seedrandom.js',
- builds: defaultBuilds
- },
- {
- src: 'js/3rd_party/BezierEaser.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/animationFramePolyFill.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/functionExtensions.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/bez.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/DataManager.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/getFontProperties.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/FontManager.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/PropertyFactory.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/TransformProperty.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/shapes/ShapePath.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/shapes/ShapeProperty.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/shapes/ShapeModifiers.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/shapes/TrimModifier.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/shapes/RoundCornersModifier.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/shapes/PuckerAndBloatModifier.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/shapes/RepeaterModifier.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/shapes/ShapeCollection.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/shapes/DashProperty.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/shapes/GradientProperty.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/shapes/shapePathBuilder.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/audio/AudioController.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/imagePreloader.js',
- builds: ['full','canvas','canvas_light','html','html_light','svg','svg_light','lottie_worker', 'canvas_worker']
- },
- {
- src: 'js/utils/featureSupport.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/filters.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/text/TextAnimatorProperty.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/text/TextAnimatorDataProperty.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/text/LetterProps.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/text/TextProperty.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/text/TextSelectorProperty.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/pooling/pool_factory.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/pooling/pooling.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/pooling/point_pool.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/pooling/shape_pool.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/pooling/shapeCollection_pool.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/pooling/segments_length_pool.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/pooling/bezier_length_pool.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/markers/markerParser.js',
- builds: defaultBuilds
- },
- {
- src: 'js/renderers/BaseRenderer.js',
- builds: defaultBuilds
- },
- {
- src: 'js/renderers/SVGRenderer.js',
- builds: defaultBuilds
- },
- {
- src: 'js/renderers/CanvasRenderer.js',
- builds: ['full','canvas','canvas_light','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/renderers/HybridRenderer.js',
- builds: ['full','html','html_light']
- },
- {
- src: 'js/mask.js',
- builds: defaultBuilds
- },
- {
- src: 'js/elements/helpers/HierarchyElement.js',
- builds: defaultBuilds
- },
- {
- src: 'js/elements/helpers/FrameElement.js',
- builds: defaultBuilds
- },
- {
- src: 'js/elements/helpers/TransformElement.js',
- builds: defaultBuilds
- },
- {
- src: 'js/elements/helpers/RenderableElement.js',
- builds: defaultBuilds
- },
- {
- src: 'js/elements/helpers/RenderableDOMElement.js',
- builds: defaultBuilds
- },
- {
- src: 'js/elements/helpers/shapes/ProcessedElement.js',
- builds: defaultBuilds
- },
- {
- src: 'js/elements/helpers/shapes/SVGStyleData.js',
- builds: ['full','svg','svg_light','html','html_light', 'lottie_worker']
- },
- {
- src: 'js/elements/helpers/shapes/SVGShapeData.js',
- builds: defaultBuilds
- },
- {
- src: 'js/elements/helpers/shapes/SVGTransformData.js',
- builds: ['full','svg','svg_light','html','html_light', 'lottie_worker']
- },
- {
- src: 'js/elements/helpers/shapes/SVGStrokeStyleData.js',
- builds: ['full','svg','svg_light','html','html_light', 'lottie_worker']
- },
- {
- src: 'js/elements/helpers/shapes/SVGFillStyleData.js',
- builds: ['full','svg','svg_light','html','html_light', 'lottie_worker']
- },
- {
- src: 'js/elements/helpers/shapes/SVGGradientFillStyleData.js',
- builds: ['full','svg','svg_light','html','html_light', 'lottie_worker']
- },
- {
- src: 'js/elements/helpers/shapes/SVGGradientStrokeStyleData.js',
- builds: ['full','svg','svg_light','html','html_light', 'lottie_worker']
- },
- {
- src: 'js/elements/helpers/shapes/ShapeGroupData.js',
- builds: defaultBuilds
- },
- {
- src: 'js/elements/helpers/shapes/SVGElementsRenderer.js',
- builds: ['full','svg','svg_light','html','html_light', 'lottie_worker']
- },
- {
- src: 'js/elements/helpers/shapes/ShapeTransformManager.js',
- builds: defaultBuilds
- },
- {
- src: 'js/elements/helpers/shapes/CVShapeData.js',
- builds: ['full','canvas','canvas_light','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/elements/BaseElement.js',
- builds: defaultBuilds
- },
- {
- src: 'js/elements/NullElement.js',
- builds: defaultBuilds
- },
- {
- src: 'js/elements/svgElements/SVGBaseElement.js',
- builds: defaultBuilds
- },
- {
- src: 'js/elements/ShapeElement.js',
- builds: defaultBuilds
- },
- {
- src: 'js/elements/TextElement.js',
- builds: defaultBuilds
- },
- {
- src: 'js/elements/CompElement.js',
- builds: defaultBuilds
- },
- {
- src: 'js/elements/ImageElement.js',
- builds: defaultBuilds
- },
- {
- src: 'js/elements/SolidElement.js',
- builds: defaultBuilds
- },
- {
- src: 'js/elements/AudioElement.js',
- builds: defaultBuilds
- },
- {
- src: 'js/elements/FootageElement.js',
- builds: ['full','svg','canvas','html','canvas_worker', 'lottie_worker'],
- },
- {
- src: 'js/elements/svgElements/SVGCompElement.js',
- builds: ['full','svg','svg_light','html','html_light', 'lottie_worker']
- },
- {
- src: 'js/elements/svgElements/SVGTextElement.js',
- builds: ['full','svg','svg_light','html','html_light', 'lottie_worker']
- },
- {
- src: 'js/elements/svgElements/SVGShapeElement.js',
- builds: defaultBuilds
- },
- {
- src: 'js/elements/svgElements/effects/SVGTintEffect.js',
- builds: ['full','svg','svg_light','html','html_light', 'lottie_worker']
- },
- {
- src: 'js/elements/svgElements/effects/SVGFillFilter.js',
- builds: ['full','svg','svg_light','html','html_light', 'lottie_worker']
- },
- {
- src: 'js/elements/svgElements/effects/SVGGaussianBlurEffect.js',
- builds: ['full','svg','svg_light','html','html_light', 'lottie_worker']
- },
- {
- src: 'js/elements/svgElements/effects/SVGStrokeEffect.js',
- builds: ['full','svg','svg_light','html','html_light', 'lottie_worker']
- },
- {
- src: 'js/elements/svgElements/effects/SVGTritoneFilter.js',
- builds: ['full','svg','svg_light','html','html_light', 'lottie_worker']
- },
- {
- src: 'js/elements/svgElements/effects/SVGProLevelsFilter.js',
- builds: ['full','svg','svg_light','html','html_light', 'lottie_worker']
- },
- {
- src: 'js/elements/svgElements/effects/SVGDropShadowEffect.js',
- builds: ['full','svg','svg_light','html','html_light', 'lottie_worker']
- },
- {
- src: 'js/elements/svgElements/effects/SVGMatte3Effect.js',
- builds: ['full','svg','svg_light','html','html_light', 'lottie_worker']
- },
- {
- src: 'js/elements/svgElements/SVGEffects.js',
- builds: ['full','svg','html', 'lottie_worker']
- },
- {
- src: 'js/elements/svgElements/SVGEffectsPlaceholder.js',
- builds: ['svg_light','html_light']
- },
- {
- src: 'js/elements/canvasElements/CVContextData.js',
- builds: ['full','canvas','canvas_light','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/elements/canvasElements/CVBaseElement.js',
- builds: ['full','canvas','canvas_light','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/elements/canvasElements/CVImageElement.js',
- builds: ['full','canvas','canvas_light']
- },
- {
- src: 'js/elements/canvasElements/CVCompElement.js',
- builds: ['full','canvas','canvas_light','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/elements/canvasElements/CVMaskElement.js',
- builds: ['full','canvas','canvas_light','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/elements/canvasElements/CVShapeElement.js',
- builds: ['full','canvas','canvas_light','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/elements/canvasElements/CVSolidElement.js',
- builds: ['full','canvas','canvas_light','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/elements/canvasElements/CVTextElement.js',
- builds: ['full','canvas','canvas_light']
- },
- {
- src: 'js/elements/canvasElements/CVEffects.js',
- builds: ['full','canvas','canvas_light','html','html_light','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/elements/htmlElements/HBaseElement.js',
- builds: ['full','html','html_light']
- },
- {
- src: 'js/elements/htmlElements/HSolidElement.js',
- builds: ['full','html','html_light']
- },
- {
- src: 'js/elements/htmlElements/HCompElement.js',
- builds: ['full','html','html_light']
- },
- {
- src: 'js/elements/htmlElements/HShapeElement.js',
- builds: ['full','html','html_light']
- },
- {
- src: 'js/elements/htmlElements/HTextElement.js',
- builds: ['full','html','html_light']
- },
- {
- src: 'js/elements/htmlElements/HImageElement.js',
- builds: ['full','html','html_light']
- },
- {
- src: 'js/elements/htmlElements/HCameraElement.js',
- builds: ['full','html','html_light']
- },
- {
- src: 'js/elements/htmlElements/HEffects.js',
- builds: ['full','html','html_light']
- },
- {
- src: 'js/animation/AnimationManager.js',
- builds: defaultBuilds
- },
- {
- src: 'js/animation/AnimationItem.js',
- builds: defaultBuilds
- },
- {
- src: 'js/utils/expressions/Expressions.js',
- builds: ['full','svg','canvas','html','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/utils/expressions/ExpressionManager.js',
- builds: ['full','svg','canvas','html','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/utils/expressions/expressionHelpers.js',
- builds: ['full','svg','canvas','html','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/utils/expressions/ExpressionPropertyDecorator.js',
- builds: ['full','svg','canvas','html','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/utils/expressions/ExpressionTextPropertyDecorator.js',
- builds: ['full','svg','canvas','html','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/utils/expressions/shapes/ShapePathInterface.js',
- builds: ['full','svg','canvas','html','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/utils/expressions/PropertyGroupFactory.js',
- builds: ['full','svg','canvas','html','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/utils/expressions/PropertyInterface.js',
- builds: ['full','svg','canvas','html','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/utils/expressions/ShapeInterface.js',
- builds: ['full','svg','canvas','html','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/utils/expressions/TextInterface.js',
- builds: ['full','svg','canvas','html','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/utils/expressions/LayerInterface.js',
- builds: ['full','svg','canvas','html','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/utils/expressions/FootageInterface.js',
- builds: ['full','svg','canvas','html','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/utils/expressions/CompInterface.js',
- builds: ['full','svg','canvas','html','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/utils/expressions/TransformInterface.js',
- builds: ['full','svg','canvas','html','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/utils/expressions/ProjectInterface.js',
- builds: ['full','svg','canvas','html','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/utils/expressions/EffectInterface.js',
- builds: ['full','svg','canvas','html','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/utils/expressions/MaskInterface.js',
- builds: ['full','svg','canvas','html','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/utils/expressions/ExpressionValueFactory.js',
- builds: ['full','svg','canvas','html','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/utils/expressions/TextSelectorPropertyDecorator.js',
- builds: ['full','svg','canvas','html','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/effects/SliderEffect.js',
- builds: ['full','svg','canvas','html','canvas_worker', 'lottie_worker']
- },
- {
- src: 'js/effects/EffectsManagerPlaceholder.js',
- builds: ['svg_light','html_light']
- },
- {
- src: 'js/EffectsManager.js',
- builds: ['full','svg','canvas','html','canvas_worker', 'lottie_worker']
- }
- ]
- function concatScripts(scripts, build) {
- return new Promise((resolve, reject)=>{
- // Concatenating scripts
- try {
- let scriptsString = ''
- scripts.forEach((script)=> {
- if(script.builds.indexOf(build) !== -1) {
- scriptsString += fs.readFileSync(`${rootFolder}${script.src}`, {encoding: 'utf8'});
- scriptsString += '\r\n';
- }
- })
- resolve(scriptsString);
- } catch(err) {
- reject(err);
- }
- });
- }
- function wrapScriptWithModule(code, build) {
- return new Promise((resolve, reject)=>{
- try {
- // Wrapping with module
- let moduleFileName = (build =='canvas_worker' || build =='lottie_worker') ? 'module_worker' : 'module';
- let wrappedCode = fs.readFileSync(`${rootFolder}js/${moduleFileName}.js`, "utf8");
- wrappedCode = wrappedCode.replace('/* <%= contents %> */',code);
- wrappedCode = wrappedCode.replace('[[BM_VERSION]]',bm_version);
- resolve(wrappedCode);
- } catch(err) {
- reject(err);
- }
- });
- }
- function uglifyCode(code) {
- return new Promise((resolve, reject)=>{
- try {
- const result = UglifyJS.minify(code, {
- output:
- {
- ascii_only:true
- },
- toplevel:true,
- mangle: {
- reserved: ['lottie']
- }
- });
- if (result.error) {
- reject(result.error)
- } else {
- resolve(result.code)
- }
- } catch(err) {
- reject(err)
- }
- })
- }
- async function modularizeCode(code, build) {
- const globalScope = (build =='canvas_worker' || build =='lottie_worker') ? 'self' : 'window'
- return `(typeof navigator !== "undefined") && (function(root, factory) {
- if (typeof define === "function" && define.amd) {
- define(function() {
- return factory(root);
- });
- } else if (typeof module === "object" && module.exports) {
- module.exports = factory(root);
- } else {
- root.lottie = factory(root);
- root.bodymovin = root.lottie;
- }
- }((${globalScope} || {}), function(window) {
- ${code}
- return lottie;
- }));`
- }
- async function buildVersion(scripts, version) {
- const code = await concatScripts(scripts, version.build)
- const wrappedCode = await wrapScriptWithModule(code, version.build)
- const processedCode = await version.process(wrappedCode)
- const modularizedCode = await modularizeCode(processedCode, version.build)
- const saved = await save(modularizedCode, version.fileName)
- return saved
- }
- function save(code, fileName) {
- return new Promise((resolve, reject)=> {
- fs.writeFile(`build/player/${fileName}`, code, (err) => {
- if (err) {
- reject(err)
- } else {
- resolve(true)
- }
- });
- })
- }
- function noop(code) {
- return Promise.resolve(code)
- }
- function buildVersions(scripts) {
- return new Promise((resolve, reject) => {
- let versions = [
- {
- fileName: 'lottie.js',
- build: 'full',
- process: noop
- },
- {
- fileName: 'lottie.min.js',
- build: 'full',
- process: uglifyCode
- },
- {
- fileName: 'lottie_light.js',
- build: 'svg_light',
- process: noop
- },
- {
- fileName: 'lottie_light.min.js',
- build: 'svg_light',
- process: uglifyCode
- },
- {
- fileName: 'lottie_svg.js',
- build: 'svg',
- process: noop
- },
- {
- fileName: 'lottie_svg.min.js',
- build: 'svg',
- process: uglifyCode
- },
- {
- fileName: 'lottie_light_canvas.js',
- build: 'canvas_light',
- process: noop
- },
- {
- fileName: 'lottie_light_canvas.min.js',
- build: 'canvas_light',
- process: uglifyCode
- },
- {
- fileName: 'lottie_canvas.js',
- build: 'canvas',
- process: noop
- },
- {
- fileName: 'lottie_canvas.min.js',
- build: 'canvas',
- process: uglifyCode
- },
- {
- fileName: 'lottie_canvas_worker.js',
- build: 'canvas_worker',
- process: noop
- },
- {
- fileName: 'lottie_canvas_worker.min.js',
- build: 'canvas_worker',
- process: uglifyCode
- },
- {
- fileName: 'lottie_worker.js',
- build: 'lottie_worker',
- process: noop
- },
- {
- fileName: 'lottie_worker.min.js',
- build: 'lottie_worker',
- process: uglifyCode
- },
- {
- fileName: 'lottie_html.js',
- build: 'html',
- process: noop
- },
- {
- fileName: 'lottie_html.min.js',
- build: 'html',
- process: uglifyCode
- },
- {
- fileName: 'lottie_light_html.js',
- build: 'html_light',
- process: noop
- },
- {
- fileName: 'lottie_light_html.min.js',
- build: 'html_light',
- process: uglifyCode
- }];
- if (buildReducedVersion) {
- versions = versions.splice(0,1);
- }
- const buildProcesses = versions.map((version)=>{
- return buildVersion(scripts, version)
- })
- Promise.all(buildProcesses)
- .then(() => {
- resolve('Build Process Ended')
- })
- .catch((err)=>{
- reject(err)
- })
- })
- }
- function handleError(err) {
- console.log(err);
- }
- async function build() {
- try {
- const result = await buildVersions(scripts);
- } catch(err) {
- handleError(err);
- }
- }
- build()
|