lilacs
Version:
A web frontend building tool for teamwork, with automaticly compiling, merging, minifying, syncing files to server, supporting distributed servers, ensuring css or html files' inline reference with correct absolute path, and more.
103 lines (87 loc) • 2.73 kB
JavaScript
var fs = require('fs');
var path = require('path');
var _ = require('lodash');
var rd = require('rd');
var pathUtil = require('../../util/path');
var fillModuleFields = require('../../util/fill_module_fields');
// comma match
var commaMarkRegExp = /,/;
// asterisk match
var asteriskMarkRegExp = /\*/;
/**
* get modules of a asterisk module
*
* example: getModules('test/*', config) = ['test/index', 'test/index2', 'test/index/index', ...]
*
* @param module
* @param config
* @returns {*}
*/
var getModules = (module, config) => {
if (!asteriskMarkRegExp.test(module)) return [module];
var dir;
var modules = [];
// all module
if (module == '*') dir = config.buildPaths.dev.html;
// test/*
else if (module.slice(-2) == '/*') dir = config.buildPaths.dev.html + '/' + module.slice(0, -2);
// other
else throw new Error('can not resolve module ' + module);
// get all modules
rd.eachFileFilterSync(dir, (file) => {
var index = path.relative(config.buildPaths.dev.html, file);
index.slice(-5) == '.html' && modules.push(pathUtil.replaceBackSlash(index));
});
return modules;
};
module.exports = (config) => {
var module = config.module;
var hasCommaMark = commaMarkRegExp.test(module);
var hasAsteriskMark = asteriskMarkRegExp.test(module);
config.multiModules = !1;
config.processingData.moduleIndex = 0;
config.modules = [];
// single module, no comma, no asterisk
if (!hasCommaMark && !hasAsteriskMark) {
config.modules.push(module);
fillModuleFields(config);
return;
}
/**
* module array
*
* example: ['test/index', 'test2/*']
*
* @type {Array}
*/
var modules = [];
/**
* formatted module array(make all asterisk module to real module)
*
* example: ['test/index', 'test2/index', 'test2/index2', ...]
*
* @type {Array}
*/
var formattedModules = [];
/**
* modules after removing module which be mapped
*
* @type {Array}
*/
var modulesWithoutMappedFile = [];
// handle comma
if (hasCommaMark) modules = module.split(',');
else modules = [module];
modules.forEach((item) => {
formattedModules = _.concat(formattedModules, getModules(item, config));
});
formattedModules.forEach((item) => {
config.processingData.mappedFiles.indexOf(item) === -1 && modulesWithoutMappedFile.push(
item.slice(-5) == '.html' ? item.slice(0, -5) : item
);
});
config.modules = modulesWithoutMappedFile;
config.multiModules = !0;
config.module = config.modules[config.processingData.moduleIndex];
fillModuleFields(config);
};