Novelty Polygonal Mathematics

    @insulo/media-optimizer

    0.1.6 • Public • Published

    Insulo: Media Optimizer

    Optimize your media assets before publishing - save storage, speed up performance, make your customers happier!

    Including a file watcher for local development, only re-optimizes changed files, currently doesn't delete files when source files are deleted.

    Handler

    For different file type support install and register needed handler.

    • dynamic: generic copy of files

      npm i --save @insulo/media-optimizer-handler-dynamic

      const handlerConfig = {
          dynamic: {
              files: ['**/*.{pdf,gif}']
          }
      };
    • gif: optimize animated and non-animated gif with gifsicle future, not implemented

    • handbrake: optimize video files with Handbrake

      npm i --save @insulo/media-optimizer-handler-handbrake

      const handlerConfig = {
          handbrake: {
              // uses handbrake, must be installed as peer dep. on linux
              optimize: true,
              // framerate, 15 for most web
              rate: 15,
              // high no. = low quality
              quality: 24.0,
              // mp4, avi and more https://handbrake.fr
              files: ['**/*.mp4']
          }
      };
    • image-transform: rotate, resize, transform different image types with sharp future, not implemented

      npm i --save @insulo/media-optimizer-handler-image-transform

      const handlerConfig = {
          task1: {handler:()=>{}},
          task2: {handler:()=>{}}
      };
    • jpg: optimize jpg images with mozjpeg

      npm i --save @insulo/media-optimizer-handler-jpg

      const handlerConfig = {
          jpg: {
              quality: 80,
              progressive: true,
              files: ['**/*.{jpg,jpeg}']
          }
      };
    • png: optimize png images with pngquant

      npm i --save @insulo/media-optimizer-handler-png

      const handlerConfig = {
          png: {
              quality: 80,
              files: ['**/*.png']
          }
      };
    • svg: optimize svg files with svgo

      npm i --save @insulo/media-optimizer-handler-dynamic

      const handlerConfig = {
          svg: {
              removeViewBox: false,
              files: ['**/*.svg']
          }
      };

    Example

    const {MediaOptimizer} = require('@insulo/media-optimizer');
    
    // add default handler functions, must be activated through a config for loading during runtime
    MediaOptimizer.constructor.handler_default = {
        png: () => require('@insulo/media-optimizer-handler-png'),
        jpg: () => require('@insulo/media-optimizer-handler-jpg'),
        svg: () => require('@insulo/media-optimizer-handler-svg'),
        handbrake: () => require('@insulo/media-optimizer-handler-handbrake'),
        dynamic: () => require('@insulo/media-optimizer-handler-dynamic'),
        customType: () => require('your-package/customType'),
    };
    
    const handlerConfig = {
        png: { /* include config */ },
        jpg: {
            /* include config */ 
            // overwrite default handler
            handler: require('your-package/customJpg')
        },
        svg: { /* include config */ },
        handbrake: { /* include config */ },
        dynamic: { /* include config */ },
        customType: { /* include config */ },
    };
    
    let watch = true;
    
    const src = __dirname + '/src';
    const build = __dirname + '/build';
    
    let optimizer = new MediaOptimizer(watch);
    
    // activate handlers with handlerConfig
    for(let type in handlerConfig) {
        if(option.hasOwnProperty(type)) {
            optimizer.addHandler(type, option[type]);
        }
    }
    
    // trigger execution
    optimizer.run(src, build).then(res => {
        
    });

    Example Custom Handler

    this.option contains the used handlerConfig

    /**
     * @type {HandlerBase}
     */
    const HandlerBase = require('@insulo/media-optimizer/lib/HandlerBase');
    
    class HandlerCustom extends HandlerBase {
        run() {
            // inline handle dependency load for using `option` provided by handler for setup
            const executionHandler = new SomePlugin(this.option);
           
            // run the actual thing wrapped in logger, registers it on watcher and everything needed
            return super.run_internal((on_finish => {
                // your actual async thing
                executionHandler.doingStuff((err, data) => {
                    if(err) {
                        throw err;
                    }
                    // important to call with existing errors
                    on_finish(err);
                });
            }));
        }
    }
    
    // Existing variables, from HandlerBase filled on construct
    /**
     * Root of `src` folder, will be used to get the pure name from an full src path
     * @type string
     */
    HandlerCustom.root
    /**
     * Full path to one file
     * @type string
     */
    HandlerCustom.src
    /**
     * Path to build directory
     * @type string
     */
    HandlerCustom.build
    /**
     * Options pushed in for the specific handler type
     * @type {Object}
     */
    HandlerCustom.option
    /**
     * Relative path to an file, added to `build` is absolute path to `dist` and added to `root` is absolute path to `src`
     * @type {string}
     */
    HandlerCustom.name
    /**
     * Absolute path to the distribution target
     * @type string
     */
    HandlerCustom.dist
    
    /**
     *
     * @type {HandlerCustom}
     */
    module.exports = HandlerCustom;

    Licence

    This project is free software distributed under the terms of two licences, the CeCILL-C and the GNU Lesser General Public License. You can use, modify and/ or redistribute the software under the terms of CeCILL-C (v1) for Europe or GNU LGPL (v3) for the rest of the world.

    This file and the LICENCE.* files need to be distributed and not changed when distributing. For more informations on the licences which are applied read: LICENCE.md

    Copyright

    2018 | bemit UG (haftungsbeschränkt) - project@bemit.codes
    Author: Michael Becker - michael@bemit.codes
    

    Keywords

    none

    Install

    npm i @insulo/media-optimizer

    DownloadsWeekly Downloads

    1

    Version

    0.1.6

    License

    MIT

    Unpacked Size

    381 kB

    Total Files

    13

    Last publish

    Collaborators

    • elbakerino