UNPKG

@incdevco/framework

Version:
274 lines (152 loc) 6.53 kB
var crypto = require('crypto'); var del = require('del'); var es = require('event-stream'); var exec = require('child_process').exec; var fs = require('fs'); var gulp = require('gulp'); var mkdirp = require('mkdirp'); var Promise = require('bluebird'); var spawn = require('child_process').spawn; var zip = require('gulp-vinyl-zip'); var StreamPromise = require('../../stream-promise'); // lambda/*/index.js module.exports = function (config) { 'use strict'; var promise = Promise.resolve(true); config = config || {}; config.dest = config.dest || 'dist/lambda'; config.packages = config.packages || {}; return es.map(function (lambda, done) { var name = lambda.path.split('/').reverse()[1]; var dest = config.dest + '/' + name; var src = lambda.path.replace('/index.js', ''); promise = promise.then(function () { mkdirp.sync(dest); return del(dest) .then(function () { return new Promise(function (resolve, reject) { exec('cp -Lr ' + src + ' ' + config.dest, function(exception) { if (exception) { reject(exception); } else { resolve(true); } }); }); }) .then(function () { var dependencies, promise = Promise.resolve(true); if (fs.existsSync(src + '/deps.json')) { dependencies = fs.readFileSync(src + '/deps.json', 'utf8'); if (dependencies) { dependencies = JSON.parse(dependencies); } } else if (fs.existsSync(src + '/dependencies.json')) { dependencies = fs.readFileSync(src + '/dependencies.json', 'utf8'); if (dependencies) { dependencies = JSON.parse(dependencies); } } if (dependencies) { dependencies.forEach(function (dep) { promise = promise.then(function () { return StreamPromise(gulp.src([ './node_modules/' + dep + '/**/*' ]) .pipe(gulp.dest(dest + '/node_modules/' + dep))); }); }); } else { var deps = [ './node_modules/**/*' ]; if (fs.existsSync(src + '/ignore-dependencies.json')) { var ignoreDeps = fs.readFileSync(src + '/ignore-dependencies.json', 'utf8'); if (ignoreDeps) { ignoreDeps = JSON.parse(ignoreDeps); } } promise = new Promise(function (resolve, reject) { exec('cp -r ./node_modules ' + dest, function (exception, stdout, stderr) { if (exception) { reject(exception); } else { resolve(true); } }); }) .then(function () { if (ignoreDeps && ignoreDeps.length) { return new Promise(function (resolve, reject) { var command = 'rm -rf'; ignoreDeps.forEach(function(dep) { command += ' ' + dest + '/node_modules/' + dep; }); //console.log('command', command); /* exec('pwd', function(exception, stdout, stderr) { console.log('pwd', stdout); resolve(true); }); */ exec(command, function(exception, stdout, stderr) { if (exception) { reject(exception); } else { resolve(true); } }); }); } return true; }); } return promise; }) .then(function () { var includes, promise = Promise.resolve(true); if (fs.existsSync(src + '/includes.json')) { includes = fs.readFileSync(src + '/includes.json', 'utf8'); if (includes) { includes = JSON.parse(includes); } } if (includes) { includes.forEach(function (inc) { promise = promise.then(function () { return StreamPromise(gulp.src([ inc + '/**/*' ]) .pipe(gulp.dest(dest + '/' + inc))); }); }); } return promise; }) .then(function () { return new Promise(function (resolve, reject) { var command = 'cd ' + dest; var options = { maxBuffer: 1025 * 500 }; command += ' && zip -J -q -r -u ../' + name + '.zip *'; exec(command, options, function(exception, stdout, stderr) { if (exception) { reject(exception); } else { resolve(true); } }); }); }) .then(function () { config.packages[name] = config.packages[name] || {}; config.packages[name].sha256 = crypto.createHash('sha256') .update(fs.readFileSync(dest + '.zip')) .digest('hex'); done(); }) .catch(done); }); }); };