Coverage

98%
56
55
1

/Users/tobi/Development/GitHub/node-dactylographsy/src/file-analyzer.js

92%
14
13
1
LineHitsSource
11var
2 fs = require('fs'),
3 path = require('path');
4
51function FileAnalyzer(root) {
68 this.root = root;
7}
8
91FileAnalyzer.prototype.getFiles = function(globbedFiles) {
101 var files = [];
11
121 globbedFiles.forEach(function(file) {
131 files = file.src.filter(function(filepath) {
141 return fs.lstatSync(filepath).isFile();
15 }).map(function(filepath) {
160 return filepath;
17 });
18 });
19
201 return files;
21};
22
231FileAnalyzer.prototype.duplicate = function(file, hash) {
241 var
25 _extension = path.extname(file),
26 _directory = path.dirname(file),
27 _base = path.basename(file, _extension);
28
291 fs.writeFileSync(
30 _directory + '/' +
31 _base + '-' +
32 hash + _extension,
33 fs.readFileSync(file)
34 );
35};
36
371module.exports = FileAnalyzer;
38

/Users/tobi/Development/GitHub/node-dactylographsy/src/fingerprinter.js

100%
20
20
0
LineHitsSource
11var
2 path = require('path'),
3 fs = require('fs'),
4 _ = require('lodash'),
5 crypto = require('crypto'),
6 FileAnalyzer = require('./file-analyzer'),
7 hash = require('string-hash');
8
91function Fingerprinter(root, devPaths) {
107 this.devPaths = devPaths;
117 this.fileAnalyzer = new FileAnalyzer(root);
12};
13
141Fingerprinter.prototype.hashFiles = function(files) {
151 var
16 _that = this,
17 _prints = {};
18
191 files.forEach(function(file) {
201 var
21 _code = fs.readFileSync(file).toString(),
22 _hash = crypto.createHash('sha256'),
23 _digest;
24
251 _hash.setEncoding('hex');
261 _hash.update(fs.readFileSync(file));
27
281 _digest = _hash.digest('hex');
29
301 _prints[_digest] = {
31 id: hash(_code),
32 hash: _digest,
33 file: path.basename(file),
34 path: _.difference(
35 path.dirname(file).split('/'),
36 this.devPaths
37 ).join('/'),
38 extension: path.extname(file)
39 };
40
411 _that.fileAnalyzer.duplicate(file, _digest);
42 }, this);
43
441 return _prints;
45};
46
471Fingerprinter.prototype.hashManifest = function(manifest) {
486 var
49 _hash = crypto.createHash('sha256'),
50 _digest;
51
526 _hash.setEncoding('hex');
536 _hash.update(manifest);
54
556 return _hash.digest('hex');
56};
57
581module.exports = Fingerprinter;
59

/Users/tobi/Development/GitHub/node-dactylographsy/src/persister.js

100%
22
22
0
LineHitsSource
11var
2 fs = require('fs'),
3 Fingerprinter = require('./fingerprinter');
4
51function Persister(packageMeta, root, location, rootUrl, packageUrl) {
65 this._packageMeta = packageMeta;
75 this._root = root;
85 this._location = location;
95 this._rootUrl = rootUrl;
105 this._packageUrl = packageUrl;
11
125 this.fingerprinter = new Fingerprinter(root, []);
13}
14
151Persister.prototype.write = function(hashes) {
165 var manifest = {};
17
185 manifest.package = this._packageMeta;
195 manifest.hashes = hashes;
205 manifest.rootUrl = this._rootUrl;
215 manifest.packageUrl = this._packageUrl;
225 manifest.version = this.fingerprinter.hashManifest(JSON.stringify(manifest));
235 var manifestAsJson = JSON.stringify(manifest, null, 2);
24
255 fs.writeFileSync(this._root + '/' + this._location, manifestAsJson);
26
275 return manifestAsJson;
28};
29
301Persister.prototype.read = function() {
314 var json = fs.readFileSync(this._root + '/' + this._location);
32
334 return JSON.parse(json);
34};
35
361module.exports = Persister;
37