summaryrefslogtreecommitdiff
path: root/gulpfile.js
diff options
context:
space:
mode:
authorAlex Early <alexander.early@gmail.com>2016-02-23 16:19:38 -0800
committerAlex Early <alexander.early@gmail.com>2016-02-23 16:19:38 -0800
commit3d1781cbb9a215b30fc03c2135309fe3579e5689 (patch)
treee26f489e37ae3a227867b3d1dfe6c04afa361c23 /gulpfile.js
parent01205e053b16c7843a3d4d3c9075b33de5adb2d0 (diff)
parent070ed49496d5cf0b3c31a8091608610961191238 (diff)
downloadasync-3d1781cbb9a215b30fc03c2135309fe3579e5689.tar.gz
Merge pull request #996 from caolan/modularization
Modularization
Diffstat (limited to 'gulpfile.js')
-rw-r--r--gulpfile.js89
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);
+ });
+});