gulp-rev-append
Advanced tools
| <!doctype html> | ||
| <html> | ||
| <head></head> | ||
| <body> | ||
| <div><p>hello, world!</p></div> | ||
| <img src="img/file.jpg?rev=@@" class="pull-right company-logo media-object" alt="image"> | ||
| </body> | ||
| </html> |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
| <!doctype html> | ||
| <html> | ||
| <head> | ||
| <link rel="shortcut icon" href="/images/icon.jpg?rev=@@hash" type="image/png"><link rel="stylesheet" href="/style/style-one.css?rev=@@hash"> | ||
| <script src="script/script-one.js?rev=@@hash"></script> | ||
| <script src="script/script-two.js"></script> | ||
| </head> | ||
| <body> | ||
| <div><p>hello, world!</p></div> | ||
| </body> | ||
| </html> |
| var chai = require('chai'); | ||
| var expect = chai.expect; | ||
| var cheerio = require('cheerio'); | ||
| var File = require('gulp-util').File; | ||
@@ -13,3 +14,3 @@ var Buffer = require('buffer').Buffer; | ||
| this.Given(/^I have declared dependencies in an html file with revision tokens$/, function (callback) { | ||
| this.Given(/^I have declared a dependency in an html file with revision tokens$/, function (callback) { | ||
| this.indexFile = new File({ | ||
@@ -24,2 +25,22 @@ cwd: 'test/fixtures/', | ||
| this.Given(/^I have declared dependencies in an html file with revision tokens$/, function (callback) { | ||
| this.indexFile = new File({ | ||
| cwd: 'test/fixtures/', | ||
| base: 'test/fixtures/static', | ||
| path: 'test/fixtures/static/multiple-index.html', | ||
| contents: new Buffer(this.htmlFileContents('multiple-index')) | ||
| }); | ||
| callback(); | ||
| }); | ||
| this.Given(/^I have declared an image dependency in an html file with revision tokens$/, function (callback) { | ||
| this.indexFile = new File({ | ||
| cwd: 'test/fixtures/', | ||
| base: 'test/fixtures/static', | ||
| path: 'test/fixtures/static/image-element-post-class.html', | ||
| contents: new Buffer(this.htmlFileContents('image-element-post-class')) | ||
| }); | ||
| callback(); | ||
| }); | ||
| this.When(/^I invoke the gulp\-rev\-append plugin$/, function (callback) { | ||
@@ -34,3 +55,3 @@ var revver = this.plugin(); | ||
| this.Then(/^The depencies are appended with a hash inline$/, function (callback) { | ||
| this.Then(/^The dependency is appended with a hash inline$/, function (callback) { | ||
| var fileDeclarationRegex = this.FILE_DECL; | ||
@@ -48,2 +69,25 @@ var declarations = result.match(fileDeclarationRegex); | ||
| this.Then(/^The dependencies are appended with a hash inline$/, function (callback) { | ||
| var fileDeclarationRegex = this.FILE_DECL; | ||
| var declarations = result.match(fileDeclarationRegex); | ||
| // defined in test/fixtures/static/index.html | ||
| console.log(result); | ||
| expect(declarations.length).to.equal(3); | ||
| for(var i = 0; i < declarations.length; i++) { | ||
| // plugin should change @@hash to hash based on file contents | ||
| expect(fileDeclarationRegex.exec(declarations[i])[2]).to.not.equal('@@hash'); | ||
| fileDeclarationRegex.lastIndex = 0; | ||
| } | ||
| callback(); | ||
| }); | ||
| this.Then(/^The attributes following the revision tokens are preserved$/, function (callback) { | ||
| var $ = cheerio.load(result); | ||
| var classDeclaration = $('img').attr('class'); | ||
| expect(classDeclaration).to.not.be.undefined; | ||
| expect(classDeclaration).to.equal('pull-right company-logo media-object'); | ||
| callback(); | ||
| }); | ||
| }; |
+26
-20
@@ -20,2 +20,3 @@ var fs = require('fs'); | ||
| var groups; | ||
| var declarations; | ||
| var dependencyPath; | ||
@@ -38,25 +39,30 @@ var data, hash; | ||
| line = lines[i]; | ||
| groups = FILE_DECL.exec(line); | ||
| if(groups && groups.length > 1) { | ||
| // are we an "absoulte path"? (e.g. /js/app.js) | ||
| var normPath = path.normalize(groups[1]); | ||
| if (normPath.indexOf(path.sep) === 0) { | ||
| dependencyPath = path.join(file.base, normPath); | ||
| } | ||
| else { | ||
| dependencyPath = path.resolve(path.dirname(file.path), normPath); | ||
| } | ||
| declarations = line.match(FILE_DECL); | ||
| if (declarations && declarations.length > 0) { | ||
| for(var j = 0; j < declarations.length; j++) { | ||
| groups = FILE_DECL.exec(declarations[j]); | ||
| if(groups && groups.length > 1) { | ||
| // are we an "absoulte path"? (e.g. /js/app.js) | ||
| var normPath = path.normalize(groups[1]); | ||
| if (normPath.indexOf(path.sep) === 0) { | ||
| dependencyPath = path.join(file.base, normPath); | ||
| } | ||
| else { | ||
| dependencyPath = path.resolve(path.dirname(file.path), normPath); | ||
| } | ||
| try { | ||
| data = fs.readFileSync(dependencyPath); | ||
| hash = crypto.createHash('md5'); | ||
| hash.update(data.toString(), 'utf8'); | ||
| line = line.replace(groups[2], hash.digest('hex')); | ||
| try { | ||
| data = fs.readFileSync(dependencyPath); | ||
| hash = crypto.createHash('md5'); | ||
| hash.update(data.toString(), 'utf8'); | ||
| line = line.replace(groups[2], hash.digest('hex')); | ||
| } | ||
| catch(e) { | ||
| // fail silently. | ||
| } | ||
| } | ||
| FILE_DECL.lastIndex = 0; | ||
| } | ||
| catch(e) { | ||
| // fail silently. | ||
| } | ||
| lines[i] = line; | ||
| } | ||
| lines[i] = line; | ||
| FILE_DECL.lastIndex = 0; | ||
| } | ||
@@ -63,0 +69,0 @@ |
+4
-3
| { | ||
| "name": "gulp-rev-append", | ||
| "version": "0.1.6", | ||
| "version": "0.1.7", | ||
| "description": "Cache-busting plugin for gulp.", | ||
@@ -29,4 +29,5 @@ "main": "index.js", | ||
| "devDependencies": { | ||
| "cucumber": "^0.4.0", | ||
| "chai": "^1.9.0" | ||
| "chai": "^1.9.0", | ||
| "cheerio": "^0.19.0", | ||
| "cucumber": "^0.4.0" | ||
| }, | ||
@@ -33,0 +34,0 @@ "dependencies": { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
83596
50%26
8.33%186
31.91%3
50%