Initial OpenECOMP Portal commit
[portal.git] / ecomp-portal-FE / client / bower_components / lodash / lib / fp / build-modules.js
diff --git a/ecomp-portal-FE/client/bower_components/lodash/lib/fp/build-modules.js b/ecomp-portal-FE/client/bower_components/lodash/lib/fp/build-modules.js
new file mode 100644 (file)
index 0000000..43902e0
--- /dev/null
@@ -0,0 +1,120 @@
+'use strict';
+
+var _ = require('lodash'),
+    async = require('async'),
+    glob = require('glob'),
+    path = require('path');
+
+var file = require('../common/file'),
+    mapping = require('../common/mapping');
+
+var templatePath = path.join(__dirname, 'template/modules'),
+    template = file.globTemplate(path.join(templatePath, '*.jst'));
+
+var aryMethods = _.union(
+  mapping.aryMethod[1],
+  mapping.aryMethod[2],
+  mapping.aryMethod[3],
+  mapping.aryMethod[4]
+);
+
+var categories = [
+  'array',
+  'collection',
+  'date',
+  'function',
+  'lang',
+  'math',
+  'number',
+  'object',
+  'seq',
+  'string',
+  'util'
+];
+
+var ignored = [
+  '_*.js',
+  'core.js',
+  'core.min.js',
+  'fp.js',
+  'index.js',
+  'lodash.js',
+  'lodash.min.js'
+];
+
+function isAlias(funcName) {
+  return _.has(mapping.aliasToReal, funcName);
+}
+
+function isCategory(funcName) {
+  return _.includes(categories, funcName);
+}
+
+function isThru(funcName) {
+  return !_.includes(aryMethods, funcName);
+}
+
+function getTemplate(moduleName) {
+  var data = {
+    'name': _.result(mapping.aliasToReal, moduleName, moduleName),
+    'mapping': mapping
+  };
+
+  if (isAlias(moduleName)) {
+    return template.alias(data);
+  }
+  if (isCategory(moduleName)) {
+    return template.category(data);
+  }
+  if (isThru(moduleName)) {
+    return template.thru(data);
+  }
+  return template.module(data);
+}
+
+/*----------------------------------------------------------------------------*/
+
+function onComplete(error) {
+  if (error) {
+    throw error;
+  }
+}
+
+function build(target) {
+  target = path.resolve(target);
+
+  var fpPath = path.join(target, 'fp');
+
+  // Glob existing lodash module paths.
+  var modulePaths = glob.sync(path.join(target, '*.js'), {
+    'nodir': true,
+    'ignore': ignored.map(function(filename) {
+      return path.join(target, filename);
+    })
+  });
+
+  // Add FP alias and remapped module paths.
+  _.each([mapping.aliasToReal, mapping.remap], function(data) {
+    _.forOwn(data, function(realName, alias) {
+      var modulePath = path.join(target, alias + '.js');
+      if (!_.includes(modulePaths, modulePath)) {
+        modulePaths.push(modulePath);
+      }
+    });
+  });
+
+  var actions = modulePaths.map(function(modulePath) {
+    var moduleName = path.basename(modulePath, '.js');
+    return file.write(path.join(fpPath, moduleName + '.js'), getTemplate(moduleName));
+  });
+
+  actions.unshift(file.copy(path.join(__dirname, '../../fp'), fpPath));
+  actions.push(file.write(path.join(fpPath, '_falseOptions.js'), template._falseOptions()));
+  actions.push(file.write(path.join(fpPath, '_util.js'), template._util()));
+  actions.push(file.write(path.join(target, 'fp.js'), template.fp()));
+  actions.push(file.write(path.join(fpPath, 'convert.js'), template.convert()));
+
+  async.series(actions, onComplete);
+}
+
+build(_.last(process.argv));