webpack
Version:
Packs ECMAScript/CommonJs/AMD modules for the browser. Allows you to split your codebase into multiple bundles, which can be loaded on demand. Supports loaders to preprocess files, i.e. json, jsx, es7, css, less, ... and your custom stuff.
34 lines (29 loc) • 922 B
JavaScript
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Alexander Akait @alexander-akait
*/
;
const createHash = require("./createHash");
/**
* @param {string | Buffer} content content
* @param {string} file file
* @returns {string} generated debug id
*/
module.exports = (content, file) => {
// We need a uuid which is 128 bits so we need 2x 64 bit hashes.
// The first 64 bits is a hash of the source.
const sourceHash = createHash("xxhash64").update(content).digest("hex");
// The next 64 bits is a hash of the filename and sourceHash
const hash128 = `${sourceHash}${createHash("xxhash64")
.update(file)
.update(sourceHash)
.digest("hex")}`;
return [
hash128.slice(0, 8),
hash128.slice(8, 12),
`4${hash128.slice(12, 15)}`,
((Number.parseInt(hash128.slice(15, 16), 16) & 3) | 8).toString(16) +
hash128.slice(17, 20),
hash128.slice(20, 32)
].join("-");
};