-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.js
158 lines (126 loc) · 2.99 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/**
* Gulp plugin to hash assets and generate asset manifest
*/
var assets = require('asset_hash');
var through = require('through2');
var util = require('gulp-util');
/**
* Create an instance of Gulp Asset Hash
*/
var GulpAssetHasher = function() {
// Plugin name
var PLUGIN_NAME = 'gulp-asset-hash';
// Set default configuration
assets.set({
base: process.cwd(),
hasher: 'sha1',
hashKey: 'aH4uwG',
length: 8,
manifest: 'assets.json',
path: '',
replace: false,
save: false,
template: '<%= name %>-<%= hash %>.<%= ext %>'
});
return {
/**
* Get configuration options or value for specified key
*
* @param {*} key The key to find values for. If key is empty or not present in config an empty string will be returned. If no key is specified/undefined the whole config object will be returned.
* @return {*} Config value for specified key or whole config object
*/
get : function(key) {
return typeof key === 'undefined' ? assets.get() : assets.get(key);
},
/**
* Set configuration
*
* @param {object} options Config options to add or update
*/
set : function(options) {
if (typeof options === 'object') {
options.save = false;
assets.set(options);
}
},
/**
* Hash files from provided stream
*
* @param {object} options The options to customize the hash
* @return {object} Returns stream (through object)
*/
hash : function(options) {
options = options || {};
options.save = false;
return through.obj(function(file, enc, cb) {
// If file is null continue
if (file.isNull()) {
cb(null, file);
return;
}
file.hashed = false;
// Hash file
try {
var result = assets.hashFiles(file.path, options);
if (result.hashed) {
file.originalPath = result.original;
file.path = result.path;
file.hashed = true;
}
}
catch(error) {
cb(util.PluginError(PLUGIN_NAME, error));
return;
}
// Pass updated file and continue
cb(null, file);
}, function(done) {
if (assets.get('manifest') !== false) {
assets.saveManifest(options);
}
done();
});
},
/**
* Save manifest file
*
* @param {object} options The options to configure manifest file
* @return {object} Returns stream (through object)
*/
saveManifest : function(options) {
options = options || {};
return through.obj(function(file, enc, cb) {
assets.saveManifest(options);
cb(null, file);
});
},
/**
* Get asset library for hashed files
*
* @return {object} The asset library
*/
getAssets : function() {
return assets.getAssets();
},
/**
* Reset asset library
*
* @return {object} Asset library
*/
resetAssets : function() {
return assets.resetAssets();
},
/**
* Get a list of supported hash algorithms
*
* @return {array} Array of hashes
*/
getHashers : function() {
return assets.getHashers();
}
};
};
/**
* Export
*/
module.exports = GulpAssetHasher();