| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 | 
							- const path = require('path');
 
- const gutil = require('gulp-util');
 
- const through = require('through2');
 
- const minify = require('html-minifier').minify;
 
- function replacePlugin(contents, objName) {
 
-   const re = new RegExp(`${objName}\\.get\\('(.*?)'\\)`, 'g');
 
-   return through.obj(function (file, enc, cb) {
 
-     const dirname = path.dirname(file.path);
 
-     file.contents = new Buffer(String(file.contents).replace(re, (m, name) => {
 
-       const filepath = path.resolve(dirname, name);
 
-       const item = contents[filepath];
 
-       if (!item) throw new Error(`\
 
- Cache not found: ${name}
 
- Required by:
 
- - ${file.path}`);
 
-       return `${objName}.get(${item.id})`;
 
-     }));
 
-     cb(null, file);
 
-   });
 
- }
 
- module.exports = function templateCache(objName) {
 
-   const contentTpl = `${objName}.put(<%= name %>, <%= content %>);\n`;
 
-   const header = `\n\n/* Templates cached with love :) */\n`;
 
-   const contents = {};
 
-   function bufferContents(file, enc, cb) {
 
-     if (file.isNull()) return cb();
 
-     if (file.isStream()) return this.emit('error', new gutil.PluginError('VM-cache', 'Stream is not supported.'));
 
-     contents[file.path] = {
 
-       content: minify(String(file.contents), {
 
-         removeComments: true,
 
-         collapseWhitespace: true,
 
-         conservativeCollapse: true,
 
-         removeAttributeQuotes: true,
 
-       }),
 
-     };
 
-     cb();
 
-   }
 
-   function endStream(cb) {
 
-     var keys = Object.keys(contents).sort();
 
-     keys.forEach((key, i) => contents[key].id = i + 1);
 
-     this.replace = () => replacePlugin(contents, objName);
 
-     const templates = keys.map(key => {
 
-       const item = contents[key];
 
-       return `${objName}.put(${item.id}, ${JSON.stringify(item.content)});`;
 
-     }).join('\n');
 
-     this.push(new gutil.File({
 
-       base: '',
 
-       path: 'template.js',
 
-       contents: new Buffer(header + templates),
 
-     }));
 
-     cb();
 
-   }
 
-   return through.obj(bufferContents, endStream);
 
- };
 
 
  |