MCPcopy
hub / github.com/webpack/webpack / hashLength

Function hashLength

lib/TemplatedPathPlugin.js:206–258  ·  view source on GitHub ↗
(
	replacer,
	handler,
	assetInfo,
	hashName,
	sourceDigest,
	fullValue,
	recordDigest,
	digestHandler
)

Source from the content-addressed store, hash-verified

204 * @returns {Replacer} hash replacer function
205 */
206const hashLength = (
207 replacer,
208 handler,
209 assetInfo,
210 hashName,
211 sourceDigest,
212 fullValue,
213 recordDigest,
214 digestHandler
215) => {
216 /** @type {Replacer} */
217 const fn = (match, arg, input, digest) => {
218 /** @type {string} */
219 let result;
220 const length = arg && Number.parseInt(arg, 10);
221
222 if (digest && digestHandler) {
223 result = digestHandler(digest, length || undefined);
224 } else if (digest) {
225 const hash = reEncodeDigest(
226 fullValue !== undefined ? fullValue : replacer(match, arg, input),
227 sourceDigest,
228 digest
229 );
230 result = length ? hash.slice(0, length) : hash;
231 } else if (length && handler) {
232 result = handler(length);
233 } else {
234 const hash = replacer(match, arg, input);
235
236 result = length ? hash.slice(0, length) : hash;
237 }
238 if (assetInfo) {
239 assetInfo.immutable = true;
240 if (digest && recordDigest) {
241 // `base64safe` is encoded as `base64url`; record what the value is in.
242 (assetInfo.contenthashDigest || (assetInfo.contenthashDigest = {}))[
243 result
244 ] = digest === "base64safe" ? "base64url" : digest;
245 }
246 if (Array.isArray(assetInfo[hashName])) {
247 assetInfo[hashName] = [...assetInfo[hashName], result];
248 } else if (assetInfo[hashName]) {
249 assetInfo[hashName] = [assetInfo[hashName], result];
250 } else {
251 assetInfo[hashName] = result;
252 }
253 }
254 return result;
255 };
256
257 return fn;
258};
259
260/** @typedef {(match: string, arg: string | undefined, input: string, digest?: string) => string} Replacer */
261

Callers 1

interpolateFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected