initial commit
This commit is contained in:
54
node_modules/postcss-url/src/lib/hash.js
generated
vendored
Normal file
54
node_modules/postcss-url/src/lib/hash.js
generated
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
'use strict';
|
||||
|
||||
const crypto = require('crypto');
|
||||
const xxh = require('xxhashjs');
|
||||
const HEXBASE = 16;
|
||||
|
||||
const defaultHashOptions = {
|
||||
method: 'xxhash32',
|
||||
shrink: 8,
|
||||
append: false
|
||||
};
|
||||
|
||||
const getxxhash = (content, options) => {
|
||||
const hashFunc = options.method === 'xxhash32' ? xxh.h32 : xxh.h64;
|
||||
const seed = 0;
|
||||
|
||||
return hashFunc(seed)
|
||||
.update(content)
|
||||
.digest()
|
||||
.toString(HEXBASE);
|
||||
};
|
||||
|
||||
const getHash = (content, options) => {
|
||||
if (options.method && typeof options.method === 'function') {
|
||||
return options.method(content);
|
||||
}
|
||||
|
||||
if (options.method && options.method.indexOf('xxhash') === 0) {
|
||||
return getxxhash(content, options);
|
||||
}
|
||||
|
||||
try {
|
||||
const hashFunc = crypto.createHash(options.method);
|
||||
|
||||
return hashFunc.update(content)
|
||||
.digest('hex');
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = function(content, options) {
|
||||
options = options || defaultHashOptions;
|
||||
|
||||
let hash = getHash(content, options);
|
||||
|
||||
if (hash == null) {
|
||||
// bad hash method; fallback to defaults
|
||||
// TODO: warning/error reporting?
|
||||
hash = getHash(content, defaultHashOptions);
|
||||
}
|
||||
|
||||
return options.shrink ? hash.substr(0, options.shrink) : hash;
|
||||
};
|
||||
Reference in New Issue
Block a user