diff --git a/lib/common/file.js b/lib/common/file.js new file mode 100644 index 000000000..783a194ba --- /dev/null +++ b/lib/common/file.js @@ -0,0 +1,36 @@ +'use strict'; + +var _ = require('lodash'), + fs = require('fs-extra'), + glob = require('glob'), + path = require('path'); + +var minify = require('../common/minify.js'); + +/*----------------------------------------------------------------------------*/ + +function copy(srcPath, destPath) { + return _.partial(fs.copy, srcPath, destPath); +} + +function globTemplate(pattern) { + return _.transform(glob.sync(pattern), function(result, filePath) { + var key = path.basename(filePath, path.extname(filePath)); + result[key] = _.template(fs.readFileSync(filePath, 'utf8')); + }, {}); +} + +function min(srcPath, destPath) { + return _.partial(minify, srcPath, destPath); +} + +function write(filePath, data) { + return _.partial(fs.writeFile, filePath, data); +} + +module.exports = { + 'copy': copy, + 'globTemplate': globTemplate, + 'min': min, + 'write': write +}; diff --git a/lib/common/mapping.js b/lib/common/mapping.js new file mode 100644 index 000000000..332f5afd4 --- /dev/null +++ b/lib/common/mapping.js @@ -0,0 +1,9 @@ +'use strict'; + +var _mapping = require('../../fp/_mapping'), + util = require('./util'), + Hash = util.Hash; + +/*----------------------------------------------------------------------------*/ + +module.exports = new Hash(_mapping); diff --git a/lib/common/uglify.options.js b/lib/common/uglify.options.js index d79d4757f..469207fc5 100644 --- a/lib/common/uglify.options.js +++ b/lib/common/uglify.options.js @@ -1,4 +1,11 @@ -module.exports = { +'use strict'; + +var util = require('./util'), + Hash = util.Hash; + +/*----------------------------------------------------------------------------*/ + +module.exports = new Hash({ 'compress': { 'pure_getters': true, 'unsafe': true, @@ -13,4 +20,4 @@ module.exports = { 'comments': /^!|@cc_on|@license|@preserve/i, 'max_line_len': 500 } -}; +}); diff --git a/lib/common/util.js b/lib/common/util.js index a0a13558e..64451862d 100644 --- a/lib/common/util.js +++ b/lib/common/util.js @@ -1,36 +1,27 @@ 'use strict'; -var _ = require('lodash'), - fs = require('fs-extra'), - glob = require('glob'), - path = require('path'); - -var minify = require('../common/minify.js'); +var _ = require('lodash'); /*----------------------------------------------------------------------------*/ -function copyFile(srcPath, destPath) { - return _.partial(fs.copy, srcPath, destPath); +/** + * Creates a hash object. If a `properties` object is provided, its own + * enumerable properties are assigned to the created object. + * + * @memberOf util + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new hash object. + */ +function Hash(properties) { + return _.transform(properties, function(result, value, key) { + result[key] = (_.isPlainObject(value) && !(value instanceof Hash)) + ? new Hash(value) + : value; + }, this); } -function globTemplate(pattern) { - return _.transform(glob.sync(pattern), function(result, filePath) { - var key = path.basename(filePath, path.extname(filePath)); - result[key] = _.template(fs.readFileSync(filePath, 'utf8')); - }, {}); -} - -function minFile(srcPath, destPath) { - return _.partial(minify, srcPath, destPath); -} - -function writeFile(filePath, data) { - return _.partial(fs.writeFile, filePath, data); -} +Hash.prototype = Object.create(null); module.exports = { - 'copyFile': copyFile, - 'globTemplate': globTemplate, - 'minFile': minFile, - 'writeFile': writeFile + 'Hash': Hash }; diff --git a/lib/fp/build-dist.js b/lib/fp/build-dist.js index 3506409fe..bad62d2eb 100644 --- a/lib/fp/build-dist.js +++ b/lib/fp/build-dist.js @@ -5,7 +5,7 @@ var _ = require('lodash'), path = require('path'), webpack = require('webpack'); -var util = require('../common/util'); +var file = require('../common/file'); var basePath = path.join(__dirname, '..', '..'), distPath = path.join(basePath, 'dist'), @@ -48,7 +48,7 @@ function build() { async.series([ _.partial(webpack, mappingConfig), _.partial(webpack, fpConfig), - util.minFile(path.join(distPath, filename)) + file.min(path.join(distPath, filename)) ], onComplete); } diff --git a/lib/fp/build-doc.js b/lib/fp/build-doc.js index 350b9a7e4..02800bcfd 100644 --- a/lib/fp/build-doc.js +++ b/lib/fp/build-doc.js @@ -2,12 +2,13 @@ var _ = require('lodash'), fs = require('fs-extra'), - path = require('path'), - util = require('../common/util'); + path = require('path'); -var mapping = require('../../fp/_mapping'), - templatePath = path.join(__dirname, 'template/doc'), - template = util.globTemplate(path.join(templatePath, '*.jst')); +var file = require('../common/file'), + mapping = require('../common/mapping'); + +var templatePath = path.join(__dirname, 'template/doc'), + template = file.globTemplate(path.join(templatePath, '*.jst')); var argNames = ['a', 'b', 'c', 'd']; diff --git a/lib/fp/build-modules.js b/lib/fp/build-modules.js index 5479c9a1c..43902e01c 100644 --- a/lib/fp/build-modules.js +++ b/lib/fp/build-modules.js @@ -5,11 +5,11 @@ var _ = require('lodash'), glob = require('glob'), path = require('path'); -var util = require('../common/util'); +var file = require('../common/file'), + mapping = require('../common/mapping'); -var mapping = require('../../fp/_mapping'), - templatePath = path.join(__dirname, 'template/modules'), - template = util.globTemplate(path.join(templatePath, '*.jst')); +var templatePath = path.join(__dirname, 'template/modules'), + template = file.globTemplate(path.join(templatePath, '*.jst')); var aryMethods = _.union( mapping.aryMethod[1], @@ -105,14 +105,14 @@ function build(target) { var actions = modulePaths.map(function(modulePath) { var moduleName = path.basename(modulePath, '.js'); - return util.writeFile(path.join(fpPath, moduleName + '.js'), getTemplate(moduleName)); + return file.write(path.join(fpPath, moduleName + '.js'), getTemplate(moduleName)); }); - actions.unshift(util.copyFile(path.join(__dirname, '../../fp'), fpPath)); - actions.push(util.writeFile(path.join(fpPath, '_falseOptions.js'), template._falseOptions())); - actions.push(util.writeFile(path.join(fpPath, '_util.js'), template._util())); - actions.push(util.writeFile(path.join(target, 'fp.js'), template.fp())); - actions.push(util.writeFile(path.join(fpPath, 'convert.js'), template.convert())); + 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); } diff --git a/lib/main/build-dist.js b/lib/main/build-dist.js index b61741911..b43d86d3b 100644 --- a/lib/main/build-dist.js +++ b/lib/main/build-dist.js @@ -4,7 +4,7 @@ var _ = require('lodash'), async = require('async'), path = require('path'); -var util = require('../common/util'); +var file = require('../common/file'); var basePath = path.join(__dirname, '..', '..'), distPath = path.join(basePath, 'dist'), @@ -23,8 +23,8 @@ function onComplete(error) { function build() { async.series([ - util.copyFile(baseLodash, distLodash), - util.minFile(distLodash) + file.copy(baseLodash, distLodash), + file.min(distLodash) ], onComplete); } diff --git a/lib/main/build-modules.js b/lib/main/build-modules.js index 5d038c2f6..5d89e0dc2 100644 --- a/lib/main/build-modules.js +++ b/lib/main/build-modules.js @@ -4,7 +4,7 @@ var _ = require('lodash'), async = require('async'), path = require('path'); -var util = require('../common/util'); +var file = require('../common/file'); var basePath = path.join(__dirname, '..', '..'), distPath = path.join(basePath, 'dist'); @@ -25,7 +25,7 @@ function onComplete(error) { function build(target) { var actions = _.map(filePairs, function(pair) { - return util.copyFile(pair[0], path.join(target, pair[1])); + return file.copy(pair[0], path.join(target, pair[1])); }); async.series(actions, onComplete);