diff options
Diffstat (limited to 'gulpfile.js')
-rw-r--r-- | gulpfile.js | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000..fbc58a1 --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,89 @@ +'use strict'; +// This is used to generate individual packages for each async method + +var gulp = require('gulp'); +var path = require('path'); +var fs = require('fs-extra'); +var pkg = require('./package.json'); +var jsonFuture = require('json-future'); +var template = require('lodash.template'); + +var moduleDeps = JSON.parse(template(fs.readFileSync('./support/dependencies.json').toString())({ + version: pkg.version} + )); + +var MODULES_PATH = './lib/'; + +function getFolders(dir) { + return fs.readdirSync(dir) + .filter(function(file) { + return fs.statSync(path.join(dir, file)).isDirectory(); + }); +} + +function generatePackage(name) { + function generateKeywords(name) { + var keywords = [ + 'async', + 'async-modularized' + ]; + + keywords.push(name); + return keywords; + } + + function generateDefaultFields(name) { + var ORIGINAL_FIELDS = [ + 'author', + 'version', + 'repository', + 'license' + ]; + + var structure = { + name: 'async.' + name, + description: 'async ' + name + 'method as module.', + main: './index.js', + repository: "async-js/async." + name + }; + + ORIGINAL_FIELDS.forEach(function(field) { + structure[field] = pkg[field]; + }); + + if (Object.keys(moduleDeps[name]).length > 0) + structure.dependencies = moduleDeps[name]; + + return structure; + } + + var modulePackage = generateDefaultFields(name); + modulePackage.keywords = generateKeywords(name); + return modulePackage; +} + +function generateReadme(name, dist) { + var filepath = path.resolve('support/module_template.md'); + var tpl = fs.readFileSync(filepath).toString(); + tpl = template(tpl)({name: name}); + fs.writeFileSync(dist, tpl); +} + +function copyMetaFiles(dist) { + var files = ['.editorconfig', '.jscsrc', '.jshintrc', '.gitignore']; + + files.forEach(function(file) { + var metafile = path.resolve(file); + var distFile = path.resolve(dist, file); + fs.copySync(metafile, distFile); + }); +} + +gulp.task('package', function() { + return getFolders(MODULES_PATH).map(function(module) { + var dist = path.resolve(MODULES_PATH, module); + jsonFuture.save(path.resolve(dist, 'package.json'), generatePackage(module)); + generateReadme(module, path.resolve(dist, 'README.md')); + copyMetaFiles(dist); + }); +}); |