UNPKG

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.

55 lines (48 loc) 2.1 kB
/* MIT License http://www.opensource.org/licenses/mit-license.php Author sheo13666q @sheo13666q */ "use strict"; const RuntimeGlobals = require("../RuntimeGlobals"); const { getPresentKinds, reEncodeDigest, usesFullHashDigest } = require("../TemplatedPathPlugin"); /** @import Compilation from "../Compilation" */ /** * Whether the runtime needs `getFullHash` to build a binary's name. A `[hash]` next to * a module resolves to that module's hash, not the compilation's, so only the explicit * `[fullhash]` spelling asks for it — and a digest is inlined rather than read. * @param {string} filename `output.webassemblyModuleFilename` * @returns {boolean} true when the runtime reads the compilation hash */ const needsRuntimeFullHash = (filename) => getPresentKinds(filename).has("fullhash") && !usesFullHashDigest(filename); /** * The compilation-hash half of the `getPath` data for interpolating * `output.webassemblyModuleFilename` into runtime code. * @param {Compilation} compilation the compilation * @returns {{ hash: string, hashWithLength: (length: number) => string, hashWithDigest: (digest: string, length?: number) => string }} the fields */ const fullHashPathData = (compilation) => ({ hash: `" + ${RuntimeGlobals.getFullHash}() + "`, hashWithLength: (length) => `" + ${RuntimeGlobals.getFullHash}().slice(0, ${length}) + "`, // A digest re-encodes the hash, which the runtime expression above cannot carry, so // the settled value is inlined instead — byte-identical to the emitted filename. hashWithDigest: (digest, length) => { const { fullHash, outputOptions } = compilation; // Pre-hash pass: a stand-in, replaced on the post-hash re-render that // `needsInlinedFullHash` asks for. Matches `GetFullHashRuntimeModule`. if (!fullHash) return length ? "x".repeat(length) : "x"; const hash = reEncodeDigest( fullHash, outputOptions.hashDigest || "hex", digest ); return length ? hash.slice(0, length) : hash; } }); module.exports.fullHashPathData = fullHashPathData; module.exports.needsRuntimeFullHash = needsRuntimeFullHash;