Comparing version 0.1.2 to 0.1.3
{ | ||
"name": "bilder-aws", | ||
"version": "0.1.2", | ||
"version": "0.1.3", | ||
"description": "aws tasks for bilder", | ||
@@ -19,3 +19,2 @@ "scripts": { | ||
"knox": "^0.8.9", | ||
"debounce": "0.0.3", | ||
"mime": "^1.2.11", | ||
@@ -22,0 +21,0 @@ "tmp": "0.0.23", |
@@ -1,10 +0,37 @@ | ||
module.exports = function(grunt, options) { | ||
module.exports = function (grunt) { | ||
'use strict'; | ||
var async = require('async'); | ||
var download = require('../lib/downloadFile'); | ||
var defaults = { | ||
'destDir': 'build' | ||
}; | ||
function S3DownloadTask () { | ||
var that = this; | ||
var options = that.options(defaults); | ||
var done = that.async(); | ||
// init the downloader | ||
download.init({ | ||
'key': options.key, | ||
'secret': options.secret, | ||
'bucket': options.bucket | ||
}); | ||
var files = that.data.src; | ||
var fn = function (file, callback) { | ||
download(options, file, function () { | ||
grunt.log.ok('\u2713'.green, file); | ||
process.nextTick(callback); | ||
}); | ||
}; | ||
async.forEachLimit(files, 4, fn, done); | ||
} | ||
grunt.registerTask('bilder/download', 'Get objects from a s3 bucket', S3DownloadTask); | ||
grunt.registerMultiTask('bilder/download', | ||
'Get objects from a s3 bucket', S3DownloadTask); | ||
}; |
@@ -7,91 +7,12 @@ module.exports = function (grunt) { | ||
var path = require('path'); | ||
var crypto = require('crypto'); | ||
var zlib = require('zlib'); | ||
var async = require('async'); | ||
var mime = require('mime'); | ||
var knox = require('knox'); | ||
var debounce = require('debounce'); | ||
var tmp = require('tmp'); | ||
tmp.setGracefulCleanup(); | ||
var defaults = require('../lib/defaults'); | ||
var hashFile = require('../lib/hashFile'); | ||
var gzipFile = require('../lib/gzipFile'); | ||
var upload = require('../lib/uploadFile'); | ||
var cache; | ||
var cacheFile = path.resolve(process.env.HOME, '.s3.cache.json'); | ||
try { | ||
cache = require(cacheFile); | ||
} catch (e) { | ||
cache = {}; | ||
} | ||
var defaults = { | ||
'throttle': 10, | ||
'hash': true, | ||
'gzip': false, | ||
'baseDir': 'public', | ||
'buildDir': 'build', | ||
'prefix': '' | ||
}; | ||
var encodingOptions = { 'encoding': 'utf8' }; | ||
var updateCache = debounce(function (key) { | ||
if (key) { | ||
cache[key] = true; | ||
} | ||
var data = JSON.stringify(cache, null, 2); | ||
fs.writeFileSync(cacheFile, data, encodingOptions); | ||
}, 50, true); | ||
function hashFile (local, callback) { | ||
var shasum = crypto.createHash('sha1'); | ||
var stream = fs.ReadStream(local); | ||
stream.on('data', shasum.update.bind(shasum)); | ||
stream.on('end', function() { | ||
callback(null, shasum.digest('hex')); | ||
}); | ||
} | ||
function gzipFile (local, callback) { | ||
tmp.file(function (err, gzipped) { | ||
var gzip = zlib.createGzip(); | ||
var inStream = fs.ReadStream(local); | ||
var outStream = fs.WriteStream(gzipped); | ||
inStream.pipe(gzip).pipe(outStream); | ||
inStream.on('end', function() { | ||
setTimeout(function () { | ||
callback(null, gzipped); | ||
}, 100); | ||
}); | ||
}); | ||
} | ||
var uploader; | ||
function upload (name, local, remote, isGzip, callback) { | ||
var headers = { | ||
'Content-Type': mime.lookup(name), | ||
'Content-Length': fs.statSync(local).size, | ||
'x-amz-acl': 'public-read', | ||
'Access-Control-Allow-Origin': '*' | ||
}; | ||
if (isGzip) { | ||
headers['Content-Encoding'] = 'gzip'; | ||
} | ||
var stream = fs.ReadStream(local); | ||
uploader.putStream(stream, remote, headers, function (err, response) { | ||
if (err || response.statusCode !== 200) { | ||
// TODO: add re-trial | ||
grunt.log.error('\u2717'.red, name); | ||
} else { | ||
grunt.log.ok('\u2713'.green, name); | ||
updateCache(remote); | ||
process.nextTick(function () { | ||
callback(null, remote); | ||
}); | ||
} | ||
}); | ||
} | ||
function processFile (options, file, callback) { | ||
@@ -110,2 +31,11 @@ // get the absolute path | ||
function done (err, remote) { | ||
if (err) { | ||
grunt.log.error('\u2717'.red, name); | ||
} else { | ||
grunt.log.ok('\u2713'.green, name); | ||
} | ||
callback(null, remote); | ||
} | ||
var prefix = options.prefix; | ||
@@ -117,3 +47,3 @@ var args = [ | ||
!!options.gzip, | ||
callback | ||
done | ||
]; | ||
@@ -128,3 +58,3 @@ | ||
// skip upload, if already uploaded | ||
if (options.hash && cache[remote]) { | ||
if (options.hash && upload.cache[remote]) { | ||
grunt.log.debug('\u25C8'.yellow, name); | ||
@@ -159,6 +89,4 @@ return callback(null, remote); | ||
var fn = processFile.bind(null, options); | ||
// init the uploader | ||
uploader = knox.createClient({ | ||
upload.init({ | ||
'key': options.key, | ||
@@ -170,10 +98,16 @@ 'secret': options.secret, | ||
var max = options.throttle; | ||
var fn = processFile.bind(null, options); | ||
async.mapLimit(files, max, fn, function (err, remotes) { | ||
var map = {}; | ||
remotes.forEach(function (remote, index) { | ||
map[files[index]] = remote; | ||
}); | ||
var mapFile = path.resolve(options.buildDir, that.target + '.json'); | ||
fs.writeFileSync(mapFile, JSON.stringify(map, null, 2), encodingOptions); | ||
// save the hashes | ||
if (options.hash) { | ||
var map = {}; | ||
remotes.forEach(function (remote, index) { | ||
map[files[index]] = remote; | ||
}); | ||
var mapFile = path.resolve(options.buildDir, that.target + '.json'); | ||
var data = JSON.stringify(map, null, 2); | ||
fs.writeFileSync(mapFile, data, encodingOptions); | ||
} | ||
setTimeout(done, 200); | ||
@@ -183,3 +117,4 @@ }); | ||
grunt.registerMultiTask('bilder/upload', 'Upload to a S3 bucket', S3UploadTask); | ||
grunt.registerMultiTask('bilder/upload', | ||
'Upload to a S3 bucket', S3UploadTask); | ||
}; |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
8038
5
12
242
7
1
- Removeddebounce@0.0.3
- Removeddebounce@0.0.3(transitive)