From 17ff8a4151d1fb9c783be14bb1448ca382f11da4 Mon Sep 17 00:00:00 2001
From: Peter Jaszkowiak
Date: Sat, 8 Apr 2017 17:33:50 -0600
Subject: [PATCH] Enable passing paths as module sources
---
src/meta/js.js | 77 +++++++++++++++++++++++++++++++++++---------------
1 file changed, 54 insertions(+), 23 deletions(-)
diff --git a/src/meta/js.js b/src/meta/js.js
index 72e41c578f..b353e8decc 100644
--- a/src/meta/js.js
+++ b/src/meta/js.js
@@ -86,16 +86,16 @@ module.exports = function (Meta) {
modules: {
'Chart.js': './node_modules/chart.js/dist/Chart.min.js',
'mousetrap.js': './node_modules/mousetrap/mousetrap.min.js',
+ 'cropper.js': './node_modules/cropperjs/dist/cropper.min.js',
'jqueryui.js': 'public/vendor/jquery/js/jquery-ui.js',
'buzz.js': 'public/vendor/buzz/buzz.js',
- 'cropper.js': './node_modules/cropperjs/dist/cropper.min.js',
},
},
};
function minifyModules(modules, callback) {
async.eachLimit(modules, 500, function (mod, next) {
- var filePath = mod.filePath;
+ var srcPath = mod.srcPath;
var destPath = mod.destPath;
var minified;
@@ -104,12 +104,12 @@ module.exports = function (Meta) {
mkdirp(path.dirname(destPath), cb);
},
function (cb) {
- fs.readFile(filePath, function (err, buffer) {
+ fs.readFile(srcPath, function (err, buffer) {
if (err) {
return cb(err);
}
- if (filePath.endsWith('.min.js')) {
+ if (srcPath.endsWith('.min.js') || path.dirname(srcPath).endsWith('min')) {
minified = { code: buffer.toString() };
return cb();
}
@@ -140,15 +140,27 @@ module.exports = function (Meta) {
var modules = Meta.js.scripts.modules;
async.eachLimit(Object.keys(modules), 1000, function (relPath, next) {
- var filePath = path.join(__dirname, '../../', modules[relPath]);
+ var srcPath = path.join(__dirname, '../../', modules[relPath]);
var destPath = path.join(__dirname, '../../build/public/src/modules', relPath);
- mkdirp(path.dirname(destPath), function (err) {
+ async.parallel({
+ dir: function (cb) {
+ mkdirp(path.dirname(destPath), function (err) {
+ cb(err);
+ });
+ },
+ stats: function (cb) {
+ fs.stat(srcPath, cb);
+ },
+ }, function (err, res) {
if (err) {
return next(err);
}
+ if (res.stats.isDirectory()) {
+ return file.linkDirs(srcPath, destPath, next);
+ }
- file.link(filePath, destPath, next);
+ file.link(srcPath, destPath, next);
});
}, callback);
}
@@ -158,36 +170,55 @@ module.exports = function (Meta) {
function getModuleList(callback) {
var modules = Object.keys(Meta.js.scripts.modules).map(function (relPath) {
return {
- filePath: path.join(__dirname, '../../', Meta.js.scripts.modules[relPath]),
+ srcPath: path.join(__dirname, '../../', Meta.js.scripts.modules[relPath]),
destPath: path.join(__dirname, '../../build/public/src/modules', relPath),
};
});
- var dirs = moduleDirs.map(function (dir) {
- return path.join(__dirname, '../../public/src', dir);
+ var coreDirs = moduleDirs.map(function (dir) {
+ return {
+ srcPath: path.join(__dirname, '../../public/src', dir),
+ destPath: path.join(__dirname, '../../build/public/src', dir),
+ };
});
- async.each(dirs, function (dir, next) {
- utils.walk(dir, function (err, files) {
+ modules = modules.concat(coreDirs);
+
+ var moduleFiles = [];
+ async.eachLimit(modules, 1000, function (module, next) {
+ var srcPath = module.srcPath;
+ var destPath = module.destPath;
+
+ fs.stat(srcPath, function (err, stats) {
if (err) {
return next(err);
}
+ if (!stats.isDirectory()) {
+ moduleFiles.push(module);
+ return next();
+ }
- var mods = files.filter(function (filePath) {
- return path.extname(filePath) === '.js';
- }).map(function (filePath) {
- return {
- filePath: filePath,
- destPath: path.join(__dirname, '../../build/public/src', path.relative(path.dirname(dir), filePath)),
- };
- });
+ utils.walk(srcPath, function (err, files) {
+ if (err) {
+ return next(err);
+ }
+
+ var mods = files.filter(function (filePath) {
+ return path.extname(filePath) === '.js';
+ }).map(function (filePath) {
+ return {
+ srcPath: path.normalize(filePath),
+ destPath: path.join(destPath, path.relative(srcPath, filePath)),
+ };
+ });
- modules = modules.concat(mods);
+ moduleFiles = moduleFiles.concat(mods);
- next();
+ next();
+ });
});
}, function (err) {
- callback(err, modules);
+ callback(err, moduleFiles);
});
}