mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-01 15:57:48 +00:00
96 lines
2.3 KiB
JavaScript
96 lines
2.3 KiB
JavaScript
var path = require('path');
|
|
var Module = require('module');
|
|
var _ = require('lodash/fp');
|
|
var mutatingAssign = require('lodash').assign;
|
|
var fs = require('fs');
|
|
|
|
var collectionModules = [
|
|
'array.js',
|
|
'collection.js',
|
|
'date.js',
|
|
'function.js',
|
|
'lang.js',
|
|
'math.js',
|
|
'number.js',
|
|
'object.js',
|
|
'string.js',
|
|
'util.js'
|
|
];
|
|
|
|
var utilityModules = [
|
|
'util.js', // XXX: Remove! Not actually an utility but a collection module but it interferes testing with the current releases...
|
|
'lodash.js',
|
|
'fp.js',
|
|
'chain.js'
|
|
];
|
|
|
|
var lodashPath = path.dirname(Module._resolveFilename('lodash', mutatingAssign(new Module, {
|
|
'paths': Module._nodeModulePaths(process.cwd())
|
|
})));
|
|
|
|
var mapping = require(lodashPath + '/fp/mapping');
|
|
var singleArgFns = mapping.aryMethod[1];
|
|
|
|
var extPattern = /\.js$/;
|
|
var isJSfile = extPattern.test.bind(extPattern);
|
|
|
|
var removeJSExt = function(filename) {
|
|
return filename.replace(extPattern, '');
|
|
};
|
|
|
|
var isCollectionModule = _.includes(_, collectionModules);
|
|
var isNotUtilityModule = _.negate(_.includes(_, utilityModules));
|
|
var isSingleArgFn = _.includes(_, singleArgFns);
|
|
|
|
var lodashModules = fs.readdirSync(lodashPath)
|
|
.filter(isJSfile)
|
|
.filter(isNotUtilityModule)
|
|
.map(removeJSExt);
|
|
|
|
var convertTemplate = _.template(
|
|
"var convert = require('./convert');\n" +
|
|
"module.exports = convert('<%= name %>', require('../<%= name %>'));\n"
|
|
);
|
|
|
|
var collectionTemplate = _.template(
|
|
"var convert = require('./convert');\n" +
|
|
"module.exports = convert(require('../<%= name %>'));\n"
|
|
);
|
|
|
|
var passThroughTemplate = _.template(
|
|
"module.exports = require('../<%= name %>');\n"
|
|
);
|
|
|
|
var moduleTemplate = function(name) {
|
|
var context = {name: name};
|
|
|
|
if (isCollectionModule(name + '.js')) {
|
|
return collectionTemplate(context);
|
|
}
|
|
if (isSingleArgFn(name)) {
|
|
return passThroughTemplate(context);
|
|
}
|
|
|
|
return convertTemplate(context);
|
|
};
|
|
|
|
function precompileFpWrappers(target) {
|
|
_.forEach(function(moduleName) {
|
|
fs.writeFileSync(
|
|
path.join(target, moduleName + '.js'),
|
|
moduleTemplate(moduleName)
|
|
);
|
|
}, lodashModules);
|
|
|
|
_.forEach(function(aliases, origName) {
|
|
_.forEach(function aliasName() {
|
|
fs.writeFileSync(
|
|
path.join(target, aliasName + '.js'),
|
|
moduleTemplate(origName)
|
|
);
|
|
}, aliases);
|
|
}, mapping.alias);
|
|
}
|
|
|
|
module.exports = precompileFpWrappers;
|