UNPKG

mincer

Version:

Web assets processor. Native JavaScript port of Sprockets.

320 lines (211 loc) 8.17 kB
/** * Mincer * * This is a main entry point of the module (an object that you get by calling * `require('mincer')`. You can get access to some of the internal classes * using this object. * * var env = new (require('mincer').Environment)(__dirname); * * `Mincer` depends on some 3rd-party modules. Most valueble (for understanding * an API) are: * * - [Hike](http://nodeca.github.com/hike-js/) * - [Mimoza](http://nodeca.github.com/mimoza/) * * * ##### EXTENDED BY * * - [[Engines]] * - [[Mime]] * - [[Processing]] * - [[Paths]] **/ 'use strict'; // Node < 0.8 shims var fs = require('fs'); var path = require('path'); fs.exists = fs.exists || path.exists; fs.existsSync = fs.existsSync || path.existsSync; path.sep = path.sep || (path.resolve('.')[0] === '/' ? '/' : '\\'); // 3rd-party var Mimoza = require('mimoza'); var Hike = require('hike'); // internal var mixin = require('./mincer/common').mixin; var prop = require('./mincer/common').prop; var Hash = require('./mincer/common/hash'); var Mincer = module.exports = {}; // Engines ///////////////////////////////////////////////////////////////////// /** * Mincer.EjsEngine -> EjsEngine **/ Mincer.EjsEngine = require('./mincer/engines/ejs_engine'); /** * Mincer.HandlebarsEngine -> HandlebarsEngine **/ Mincer.HandlebarsEngine = require('./mincer/engines/handlebars_engine'); /** * Mincer.JadeEngine -> JadeEngine **/ Mincer.JadeEngine = require('./mincer/engines/jade_engine'); /** * Mincer.PugEngine -> PugEngine **/ Mincer.PugEngine = require('./mincer/engines/pug_engine'); /** * Mincer.JstEngine -> JstEngine **/ Mincer.JstEngine = require('./mincer/engines/jst_engine'); /** * Mincer.LessEngine -> LessEngine **/ Mincer.LessEngine = require('./mincer/engines/less_engine'); /** * Mincer.StylusEngine -> StylusEngine **/ Mincer.StylusEngine = require('./mincer/engines/stylus_engine'); /** * Mincer.SassEngine -> SassEngine **/ Mincer.SassEngine = require('./mincer/engines/sass_engine'); /** * Mincer.CoffeeEngine -> CoffeeEngine **/ Mincer.CoffeeEngine = require('./mincer/engines/coffee_engine'); // Processors ////////////////////////////////////////////////////////////////// /** * Mincer.DirectiveProcessor -> DirectiveProcessor **/ Mincer.DirectiveProcessor = require('./mincer/processors/directive_processor'); /** * Mincer.CharsetNormalizer -> CharsetNormalizer **/ Mincer.CharsetNormalizer = require('./mincer/processors/charset_normalizer'); /** * Mincer.SafetyColons -> SafetyColons **/ Mincer.SafetyColons = require('./mincer/processors/safety_colons'); /** * Mincer.Autoprefixer -> Autoprefixer **/ Mincer.Autoprefixer = require('./mincer/processors/autoprefixer'); /** * Mincer.MacroProcessor -> MacroProcessor **/ Mincer.MacroProcessor = require('./mincer/processors/macro_processor'); // Compressors ///////////////////////////////////////////////////////////////// /** * Mincer.CssoCompressor -> CssoCompressor **/ Mincer.CssoCompressor = require('./mincer/compressors/csso_compressor'); /** * Mincer.CsswringCompressor -> CsswringCompressor **/ Mincer.CsswringCompressor = require('./mincer/compressors/csswring_compressor'); /** * Mincer.UglifyCompressor -> UglifyCompressor **/ Mincer.UglifyCompressor = require('./mincer/compressors/uglify_compressor'); // Main exported classes /////////////////////////////////////////////////////// /** * Mincer.Environment -> Environment **/ Mincer.Environment = require('./mincer/environment'); /** * Mincer.Manifest -> Manifest **/ Mincer.Manifest = require('./mincer/manifest'); /** * Mincer.Template -> Template **/ Mincer.Template = require('./mincer/template'); /** * Mincer.Server -> Server **/ Mincer.Server = require('./mincer/server'); /** * Mincer.FileStore -> FileStore **/ Mincer.FileStore = require('./mincer/file_store'); // Main exported functions ///////////////////////////////////////////////////// /** alias of: Server.createServer * Mincer.createServer(environment[, manifest]) -> Function **/ Mincer.createServer = Mincer.Server.createServer; // Main exported properties //////////////////////////////////////////////////// /** read-only * Mincer.VERSION -> String **/ prop(Mincer, 'VERSION', require('./mincer/version')); /** read-only * Mincer.logger -> Logger **/ prop(Mincer, 'logger', require('./mincer/logger')); // Spicy Sauce :)) ///////////////////////////////////////////////////////////// // main internal properties. // each new environment clone these properties for initial states, // so they can be used to set 'defaults' for all environment instances. prop(Mincer, '__trail__', new Hike(__dirname)); prop(Mincer, '__engines__', {}); prop(Mincer, '__mimeTypes__', new Mimoza()); prop(Mincer, '__preProcessors__', new Hash(function () { return []; })); prop(Mincer, '__postProcessors__', new Hash(function () { return []; })); prop(Mincer, '__bundleProcessors__', new Hash(function () { return []; })); prop(Mincer, '__compressors__', new Hash(function () { return {}; })); prop(Mincer, '__configurations__', {}); // mixin helpers mixin(Mincer, require('./mincer/helpers/engines')); mixin(Mincer, require('./mincer/helpers/mime')); mixin(Mincer, require('./mincer/helpers/processing')); mixin(Mincer, require('./mincer/helpers/compressing')); mixin(Mincer, require('./mincer/helpers/configuring')); mixin(Mincer, require('./mincer/helpers/paths')); // register basic mimetypes Mincer.registerMimeType('text/css', '.css'); Mincer.registerMimeType('application/javascript', '.js'); // register default pre-processors Mincer.registerPreProcessor('text/css', Mincer.DirectiveProcessor); Mincer.registerPreProcessor('application/javascript', Mincer.DirectiveProcessor); Mincer.registerPreProcessor('text/css', Mincer.MacroProcessor); Mincer.registerPreProcessor('application/javascript', Mincer.MacroProcessor); // register default post-processors Mincer.registerPostProcessor('application/javascript', Mincer.SafetyColons); // register default bundle-processors Mincer.registerBundleProcessor('text/css', Mincer.CharsetNormalizer); // register predefined js compressors Mincer.registerCompressor('application/javascript', 'uglify', Mincer.UglifyCompressor); // register predefined css compressors Mincer.registerCompressor('text/css', 'csso', Mincer.CssoCompressor); Mincer.registerCompressor('text/css', 'csswring', Mincer.CsswringCompressor); // Register JS engines Mincer.registerEngine('.coffee', Mincer.CoffeeEngine); Mincer.registerEngine('.litcoffee', Mincer.CoffeeEngine); // Register CSS engines Mincer.registerEngine('.less', Mincer.LessEngine); Mincer.registerEngine('.styl', Mincer.StylusEngine); Mincer.registerEngine('.sass', Mincer.SassEngine); Mincer.registerEngine('.scss', Mincer.SassEngine); // JST engines Mincer.registerEngine('.jst', Mincer.JstEngine); // Mixed type (JST / processor) engines Mincer.registerEngine('.ejs', Mincer.EjsEngine); Mincer.registerEngine('.hbs', Mincer.HandlebarsEngine); Mincer.registerEngine('.jade', Mincer.JadeEngine); Mincer.registerEngine('.pug', Mincer.PugEngine); // Configurations ////////////////////////////////////////////////////////////// Mincer.registerConfiguration('autoprefixer', { enable: function (self) { self.registerPostProcessor('text/css', Mincer.Autoprefixer); }, disable: function (self) { self.unregisterPostProcessor('text/css', Mincer.Autoprefixer); } }); Mincer.registerConfiguration('source_maps', { state: 'disabled' }); // Alias for `source_maps` Mincer.registerConfiguration('source_map', { state: 'disabled', enable: function (self) { self.enable('source_maps'); }, disable: function (self) { self.disable('source_maps'); } });