3 var _ = require('lodash'),
4 async = require('async'),
5 glob = require('glob'),
6 path = require('path');
8 var util = require('../common/util');
10 var mapping = require('../../fp/_mapping'),
11 templatePath = path.join(__dirname, 'template/modules'),
12 template = util.globTemplate(path.join(templatePath, '*.jst'));
14 var aryMethods = _.union(
43 function isAlias(funcName) {
44 return _.has(mapping.aliasToReal, funcName);
47 function isCategory(funcName) {
48 return _.includes(categories, funcName);
51 function isThru(funcName) {
52 return !_.includes(aryMethods, funcName);
55 function getTemplate(moduleName) {
57 'name': _.result(mapping.aliasToReal, moduleName, moduleName),
61 if (isAlias(moduleName)) {
62 return template.alias(data);
64 if (isCategory(moduleName)) {
65 return template.category(data);
67 if (isThru(moduleName)) {
68 return template.thru(data);
70 return template.module(data);
73 /*----------------------------------------------------------------------------*/
75 function onComplete(error) {
81 function build(target) {
82 target = path.resolve(target);
84 var fpPath = path.join(target, 'fp');
86 // Glob existing lodash module paths.
87 var modulePaths = glob.sync(path.join(target, '*.js'), {
89 'ignore': ignored.map(function(filename) {
90 return path.join(target, filename);
94 // Add FP alias and remapped module paths.
95 _.each([mapping.aliasToReal, mapping.remap], function(data) {
96 _.forOwn(data, function(realName, alias) {
97 var modulePath = path.join(target, alias + '.js');
98 if (!_.startsWith(alias, '_') &&
99 !_.includes(modulePaths, modulePath)) {
100 modulePaths.push(modulePath);
105 var actions = modulePaths.map(function(modulePath) {
106 var moduleName = path.basename(modulePath, '.js');
107 return util.writeFile(path.join(fpPath, moduleName + '.js'), getTemplate(moduleName));
110 actions.unshift(util.copyFile(path.join(__dirname, '../../fp'), fpPath));
111 actions.push(util.writeFile(path.join(target, 'fp.js'), template.fp()));
112 actions.push(util.writeFile(path.join(fpPath, 'convert.js'), template.convert()));
113 actions.push(util.writeFile(path.join(fpPath, '_util.js'), template._util()));
115 async.series(actions, onComplete);
118 build(_.last(process.argv));