UNPKG

webpack-assets-manifest

Version:

This Webpack plugin will generate a JSON file that matches the original filename with the hashed version.

69 lines (68 loc) 2.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.asArray = asArray; exports.getSRIHash = getSRIHash; exports.getSortedObject = getSortedObject; exports.findMapKeysByValue = findMapKeysByValue; exports.group = group; exports.getLockFilename = getLockFilename; exports.lock = lock; exports.unlock = unlock; const node_crypto_1 = require("node:crypto"); const node_os_1 = require("node:os"); const node_path_1 = require("node:path"); const lockfile_1 = require("lockfile"); const type_predicate_js_1 = require("./type-predicate.js"); function asArray(data) { return Array.isArray(data) ? data : [data]; } function getSRIHash(algorithm, content) { return `${algorithm}-${(0, node_crypto_1.createHash)(algorithm).update(content, 'utf8').digest('base64')}`; } function getSortedObject(object, compareFunction) { return Object.fromEntries(Object.entries(object).sort(compareFunction ? (left, right) => compareFunction(left[0], right[0]) : undefined)); } function findMapKeysByValue(map) { const entries = [...map.entries()]; return (searchValue) => entries.filter(([, value]) => value === searchValue).map(([name]) => name); } function group(data, getGroup, mapper) { return data.reduce((obj, item) => { const group = getGroup(item); if ((0, type_predicate_js_1.isPropertyKey)(group)) { (obj[group] ??= []).push(mapper ? mapper(item, group) : item); } return obj; }, Object.create(null)); } function getLockFilename(filename) { const name = filename.replace(/[^\w]+/g, '-'); return (0, node_path_1.join)((0, node_os_1.tmpdir)(), `${name}.lock`); } function lock(filename) { return new Promise((resolve, reject) => { (0, lockfile_1.lock)(getLockFilename(filename), { wait: 10000, stale: 20000, retries: 100, retryWait: 100, }, (error) => { if (error) { reject(error); return; } resolve(); }); }); } function unlock(filename) { return new Promise((resolve, reject) => { (0, lockfile_1.unlock)(getLockFilename(filename), (error) => { if (error) { reject(error); return; } resolve(); }); }); }