Guest User

Untitled

a guest
Oct 20th, 2018
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.17 KB | None | 0 0
  1. var _ = require('underscore');
  2. var fs = require('fs');
  3. var path = require('path');
  4. var debug = require('debug')('asset-embed');
  5.  
  6. module.exports = function() {
  7. var self = {
  8. loaders: {
  9. less: function(a, callback) {
  10. self.loaders.plain(a, function(err, res) {
  11. if (err) return callback(err);
  12.  
  13. var less = require('less');
  14. var parser = new less.Parser(self.loaders.less.options);
  15. parser.parse(res, function(err, tree) {
  16. if (err) return callback(err);
  17. callback(null, '<style>' + tree.toCSS(self.loaders.less.options) + '</style>');
  18. });
  19. });
  20. },
  21.  
  22. css: function(a, callback) {
  23. self.loaders.plain(a, function(err, res) {
  24. if (err) return callback(err);
  25. callback(null, '<style>' + res + '</style>');
  26. });
  27. },
  28.  
  29. js: function(a, callback) {
  30. self.loaders.plain(a, function(err, res) {
  31. if (err) return callback(err);
  32. var uglify = require('uglify-js');
  33. res = uglify.parser.parse(res);
  34. res = uglify.uglify.ast_squeeze(res);
  35. res = uglify.uglify.gen_code(res);
  36. res = '<script>' + res + '</script>';
  37. callback(null, res);
  38. });
  39. },
  40.  
  41. plain: function(a, callback) {
  42. debug('loading asset file', a);
  43. fs.readFile(a, 'utf8', callback);
  44. }
  45. },
  46.  
  47. assets: {},
  48.  
  49. load: function(names, callback) {
  50. if (!_.isArray(names)) names = [names];
  51. var left = names.length, panic = false;
  52. _.each(names, function(names) {
  53. var loader = path.extname(names);
  54. if (loader) loader = loader.substr(1);
  55.  
  56. if (!loader || !_.has(self.loaders, loader)) {
  57. loader = 'plain';
  58. }
  59.  
  60. self.loaders[loader](names, function(err, res) {
  61. if (panic) return;
  62.  
  63. if (err) {
  64. panic = true;
  65. if (_.isFunction(callback)) {
  66. return callback(err);
  67. }
  68. throw err;
  69. }
  70.  
  71. self.assets[names] = res;
  72.  
  73. if (!--left && _.isFunction(callback)) {
  74. return callback();
  75. }
  76. });
  77. });
  78. },
  79.  
  80. embed: function(name) {
  81. if (!_.has(self.assets, name)) {
  82. throw new Error(name + ' not loaded');
  83. }
  84.  
  85. return self.assets[name];
  86. }
  87. };
  88.  
  89. self.loaders.less.options = { compress: true };
  90.  
  91. return _.extend(self.embed, self);
  92. };
Add Comment
Please, Sign In to add comment