grunt-md5
Advanced tools
Comparing version 0.1.4 to 0.1.5
@@ -27,5 +27,5 @@ module.exports = function(grunt) { | ||
node: true, | ||
es5: true | ||
}, | ||
globals: {} | ||
es5: true, | ||
globals: {} | ||
} | ||
}, | ||
@@ -40,7 +40,35 @@ clean: { | ||
files: { | ||
'test/fixtures/output': 'test/fixtures/js/*' | ||
'test/fixtures/output/main': 'test/fixtures/test.js' | ||
}, | ||
options: { | ||
keepExtension: true | ||
keepExtension: true, | ||
keepBasename: true | ||
} | ||
}, | ||
noExtension: { | ||
files: { | ||
'test/fixtures/output/noExtension': 'test/fixtures/test.js' | ||
}, | ||
options: { | ||
keepExtension: false, | ||
keepBasename: true | ||
} | ||
}, | ||
noBasename: { | ||
files: { | ||
'test/fixtures/output/noBasename': 'test/fixtures/test.js' | ||
}, | ||
options: { | ||
keepExtension: true, | ||
keepBasename: false | ||
} | ||
}, | ||
noBasenameOrExtension: { | ||
files: { | ||
'test/fixtures/output/noBasenameOrExtension': 'test/fixtures/test.js' | ||
}, | ||
options: { | ||
keepExtension: false, | ||
keepBasename: false | ||
} | ||
} | ||
@@ -57,4 +85,4 @@ }, | ||
grunt.loadNpmTasks('grunt-contrib-nodeunit'); | ||
grunt.registerTask('test', ['clean', 'md5', 'nodeunit']); | ||
grunt.registerTask('test', ['clean', 'md5', 'nodeunit', 'clean']); | ||
grunt.registerTask('default', ['jshint', 'test']); | ||
}; |
{ | ||
"name": "grunt-md5", | ||
"description": "generate md5 filename", | ||
"version": "0.1.4", | ||
"version": "0.1.5", | ||
"homepage": "https://github.com/jney/grunt-md5", | ||
@@ -32,6 +32,7 @@ "author": { | ||
"dependencies": { | ||
"grunt": "~0.4.0a" | ||
"grunt-cli": "~0.1.2", | ||
"grunt": "~0.4.0" | ||
}, | ||
"devDependencies": { | ||
"grunt": "~0.4.0a", | ||
"grunt": "~0.4.0", | ||
"grunt-contrib-clean": "~0.4.0a", | ||
@@ -38,0 +39,0 @@ "grunt-contrib-jshint": "*", |
@@ -29,2 +29,3 @@ [![build status](https://secure.travis-ci.org/jney/grunt-md5.png)](http://travis-ci.org/jney/grunt-md5) | ||
}, | ||
keepBasename: true, | ||
keepExtension: true | ||
@@ -41,2 +42,4 @@ } | ||
## Release History | ||
* 0.1.5 Support for keeping the original file's basename | ||
* 0.1.4 Compatibility with grunt 0.4 | ||
* 0.1.1 Fixing many files handling | ||
@@ -46,3 +49,3 @@ * 0.0.1 First Release | ||
## License | ||
Copyright (c) 2012 Jean-Sébastien Ney | ||
Copyright (c) 2012 Jean-Sébastien Ney & contributors | ||
Licensed under the MIT license. |
@@ -17,68 +17,54 @@ /* | ||
var _ = grunt.util._; | ||
var _ = grunt.util._, path = require('path'); | ||
grunt.registerMultiTask('md5', 'Generate a md5 filename', function() { | ||
var options = this.options(); | ||
var srcFiles; | ||
var destDir; | ||
var options = this.options(), | ||
srcFiles = grunt.file.expandFiles(this.file.srcRaw), | ||
destDir = this.file.dest; | ||
grunt.verbose.writeflags(options, 'Options'); | ||
this.files.forEach(function(file) { | ||
grunt.verbose.writeln('Files: ' + srcFiles); | ||
grunt.verbose.writeln('Destination directory:' + destDir); | ||
srcFiles = grunt.file.expandFiles(file.src); | ||
destDir = file.dest; | ||
if (typeof srcFiles === 'undefined') { | ||
grunt.fail.warn("Files object doesn't exist"); | ||
} | ||
if (typeof srcFiles === 'undefined') { | ||
// TODO generate error if file does not exists | ||
return; | ||
} | ||
srcFiles.forEach(function(srcFile) { | ||
if (grunt.file.exists(destDir) === false) { | ||
grunt.verbose.writeln("Creating destination directory as it didn't exist."); | ||
grunt.file.mkdir(destDir); | ||
} | ||
destDir = grunt.file.expandDirs(destDir)[0]; | ||
try { | ||
var srcCode = grunt.file.read(srcFile), ext = '', basename = '', filename, destFile; | ||
// keep extension unless you explicitly tell to not | ||
if (options.keepExtension !== false) { | ||
ext = path.extname(srcFile); | ||
} | ||
// keep basename unless you explicitly tell to not | ||
if (options.keepBasename !== false) { | ||
basename = path.basename(srcFile, ext || path.extname(srcFile)) + '-'; | ||
} | ||
filename = basename + | ||
require('crypto'). | ||
createHash('md5'). | ||
update(srcCode). | ||
digest('hex') + ext; | ||
srcFiles.forEach(function(srcFile) { | ||
destFile = path.join(destDir, filename); | ||
try { | ||
var srcCode = grunt.file.read(srcFile); | ||
var ext = ''; | ||
// keep extension unless you explicitly tell to not | ||
if (options.keepExtension !== false) { | ||
ext = fileExtension(srcFile); | ||
if (ext) { | ||
ext = '.' + ext; | ||
} | ||
} | ||
var filename = require('crypto'). | ||
createHash('md5'). | ||
update(srcCode). | ||
digest('hex') + ext; | ||
grunt.file.copy(srcFile, destFile); | ||
var destFile = require('path').join(destDir, filename); | ||
grunt.file.copy(srcFile, destFile); | ||
if (_.isFunction(options.callback)) { | ||
options.callback(destFile, srcFile, srcCode); | ||
} | ||
grunt.log.writeln('File \'' + destFile + '\' created.'); | ||
} catch(err) { | ||
grunt.log.error(err); | ||
grunt.fail.warn("Fail to generate an MD5 file name"); | ||
if (_.isFunction(options.callback)) { | ||
options.callback(destFile, srcFile, srcCode); | ||
} | ||
}); | ||
grunt.log.writeln("File '" + destFile + "' created."); | ||
} catch(err) { | ||
grunt.log.error(err); | ||
grunt.fail.warn("Fail to generate an MD5 file name"); | ||
} | ||
}); | ||
}); | ||
function fileExtension(filename) { | ||
var array = filename.split('.'); | ||
if (array.length === 1) { | ||
return ''; | ||
} else { | ||
return array.pop(); | ||
} | ||
} | ||
}; |
'use strict'; | ||
var fs = require('fs'); | ||
var grunt = require('grunt'); | ||
@@ -8,20 +7,49 @@ | ||
main: function(test) { | ||
test.expect(2); | ||
test.expect(1); | ||
var filenameA = require('crypto'). | ||
var md5Filename = 'test-' + require('crypto'). | ||
createHash('md5'). | ||
update(fs.readFileSync('test/fixtures/js/test-a.js', 'utf8')). | ||
update(grunt.file.read('test/fixtures/test.js')). | ||
digest('hex') + '.js'; | ||
var resultA = fs.existsSync('test/fixtures/output/'+filenameA); | ||
test.ok(resultA, 'should generate a md5 filename'); | ||
var filenameB = require('crypto'). | ||
test.ok(grunt.file.exists('test/fixtures/output/main/' + md5Filename), | ||
'should generate an MD5 filename keeping its basename and extension'); | ||
test.done(); | ||
}, | ||
noExtension: function(test) { | ||
test.expect(1); | ||
var md5Filename = 'test-' + require('crypto'). | ||
createHash('md5'). | ||
update(fs.readFileSync('test/fixtures/js/test-b.js', 'utf8')). | ||
update(grunt.file.read('test/fixtures/test.js')). | ||
digest('hex'); | ||
test.ok(grunt.file.exists('test/fixtures/output/noExtension/' + md5Filename), | ||
'should generate an MD5 filename keeping only its basename'); | ||
test.done(); | ||
}, | ||
noBasename: function(test) { | ||
test.expect(1); | ||
var md5Filename = require('crypto'). | ||
createHash('md5'). | ||
update(grunt.file.read('test/fixtures/test.js')). | ||
digest('hex') + '.js'; | ||
var resultB = fs.existsSync('test/fixtures/output/'+filenameB); | ||
test.ok(resultB, 'should generate a md5 filename'); | ||
test.ok(grunt.file.exists('test/fixtures/output/noBasename/' + md5Filename), | ||
'should generate an MD5 filename keeping only its extension'); | ||
test.done(); | ||
}, | ||
noBasenameOrExtension: function(test) { | ||
test.expect(1); | ||
var md5Filename = require('crypto'). | ||
createHash('md5'). | ||
update(grunt.file.read('test/fixtures/test.js')). | ||
digest('hex'); | ||
test.ok(grunt.file.exists('test/fixtures/output/noBasenameOrExtension/' + md5Filename), | ||
'should generate an MD5 filename without keeping its basename or extension'); | ||
test.done(); | ||
} | ||
}; |
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
8995
185
49
0
2
10
+ Addedgrunt-cli@~0.1.2
+ Addedgrunt-cli@0.1.13(transitive)
+ Addedresolve@0.3.1(transitive)
Updatedgrunt@~0.4.0