Compare commits

...

6 Commits

Author SHA1 Message Date
dependabot[bot] b35b6c4e14
Merge 5269619a0d into c7ebdbda63 2025-10-07 16:40:09 +00:00
dependabot[bot] 5269619a0d
chore(deps-dev): bump the dependencies group across 1 directory with 9 updates
Bumps the dependencies group with 9 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) | `9.36.0` | `9.37.0` |
| [@eslint/markdown](https://github.com/eslint/markdown) | `7.3.0` | `7.4.0` |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `24.6.0` | `24.7.0` |
| [eslint](https://github.com/eslint/eslint) | `9.36.0` | `9.37.0` |
| [less](https://github.com/less/less.js) | `4.4.1` | `4.4.2` |
| [lint-staged](https://github.com/lint-staged/lint-staged) | `16.1.6` | `16.2.3` |
| [memfs](https://github.com/streamich/memfs) | `4.39.0` | `4.49.0` |
| [react](https://github.com/facebook/react/tree/HEAD/packages/react) | `19.1.1` | `19.2.0` |
| [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom) | `19.1.1` | `19.2.0` |



Updates `@eslint/js` from 9.36.0 to 9.37.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/commits/v9.37.0/packages/js)

Updates `@eslint/markdown` from 7.3.0 to 7.4.0
- [Release notes](https://github.com/eslint/markdown/releases)
- [Changelog](https://github.com/eslint/markdown/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/markdown/compare/v7.3.0...v7.4.0)

Updates `@types/node` from 24.6.0 to 24.7.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `eslint` from 9.36.0 to 9.37.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v9.36.0...v9.37.0)

Updates `less` from 4.4.1 to 4.4.2
- [Release notes](https://github.com/less/less.js/releases)
- [Changelog](https://github.com/less/less.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/less/less.js/compare/v4.4.1...v4.4.2)

Updates `lint-staged` from 16.1.6 to 16.2.3
- [Release notes](https://github.com/lint-staged/lint-staged/releases)
- [Changelog](https://github.com/lint-staged/lint-staged/blob/main/CHANGELOG.md)
- [Commits](https://github.com/lint-staged/lint-staged/compare/v16.1.6...v16.2.3)

Updates `memfs` from 4.39.0 to 4.49.0
- [Release notes](https://github.com/streamich/memfs/releases)
- [Changelog](https://github.com/streamich/memfs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/streamich/memfs/compare/v4.39.0...v4.49.0)

Updates `react` from 19.1.1 to 19.2.0
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.2.0/packages/react)

Updates `react-dom` from 19.1.1 to 19.2.0
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.2.0/packages/react-dom)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.37.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dependencies
- dependency-name: "@eslint/markdown"
  dependency-version: 7.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dependencies
- dependency-name: "@types/node"
  dependency-version: 24.7.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dependencies
- dependency-name: eslint
  dependency-version: 9.37.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dependencies
- dependency-name: less
  dependency-version: 4.4.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dependencies
- dependency-name: lint-staged
  dependency-version: 16.2.3
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dependencies
- dependency-name: memfs
  dependency-version: 4.49.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dependencies
- dependency-name: react
  dependency-version: 19.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dependencies
- dependency-name: react-dom
  dependency-version: 19.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-07 16:40:06 +00:00
alexander-akait c7ebdbda63 chore(release): 5.102.1
Github Actions / lint (push) Waiting to run Details
Github Actions / validate-legacy-node (push) Waiting to run Details
Github Actions / benchmark (1/4) (push) Waiting to run Details
Github Actions / benchmark (2/4) (push) Waiting to run Details
Github Actions / benchmark (3/4) (push) Waiting to run Details
Github Actions / benchmark (4/4) (push) Waiting to run Details
Github Actions / basic (push) Waiting to run Details
Github Actions / unit (push) Waiting to run Details
Github Actions / integration (10.x, macos-latest, a) (push) Blocked by required conditions Details
Github Actions / integration (10.x, macos-latest, b) (push) Blocked by required conditions Details
Github Actions / integration (10.x, ubuntu-latest, a) (push) Blocked by required conditions Details
Github Actions / integration (10.x, ubuntu-latest, b) (push) Blocked by required conditions Details
Github Actions / integration (10.x, windows-latest, a) (push) Blocked by required conditions Details
Github Actions / integration (10.x, windows-latest, b) (push) Blocked by required conditions Details
Github Actions / integration (12.x, ubuntu-latest, a) (push) Blocked by required conditions Details
Github Actions / integration (14.x, ubuntu-latest, a) (push) Blocked by required conditions Details
Github Actions / integration (16.x, ubuntu-latest, a) (push) Blocked by required conditions Details
Github Actions / integration (18.x, ubuntu-latest, a) (push) Blocked by required conditions Details
Github Actions / integration (20.x, macos-latest, a) (push) Blocked by required conditions Details
Github Actions / integration (20.x, macos-latest, b) (push) Blocked by required conditions Details
Github Actions / integration (20.x, ubuntu-latest, a) (push) Blocked by required conditions Details
Github Actions / integration (20.x, ubuntu-latest, b) (push) Blocked by required conditions Details
Github Actions / integration (20.x, windows-latest, a) (push) Blocked by required conditions Details
Github Actions / integration (20.x, windows-latest, b) (push) Blocked by required conditions Details
Github Actions / integration (22.x, macos-latest, a) (push) Blocked by required conditions Details
Github Actions / integration (22.x, macos-latest, b) (push) Blocked by required conditions Details
Github Actions / integration (22.x, ubuntu-latest, a) (push) Blocked by required conditions Details
Github Actions / integration (22.x, ubuntu-latest, b) (push) Blocked by required conditions Details
Github Actions / integration (22.x, windows-latest, a) (push) Blocked by required conditions Details
Github Actions / integration (22.x, windows-latest, b) (push) Blocked by required conditions Details
Github Actions / integration (24.x, macos-latest, a) (push) Blocked by required conditions Details
Github Actions / integration (24.x, macos-latest, b) (push) Blocked by required conditions Details
Github Actions / integration (24.x, ubuntu-latest, a) (push) Blocked by required conditions Details
Github Actions / integration (24.x, ubuntu-latest, b) (push) Blocked by required conditions Details
Github Actions / integration (24.x, windows-latest, a) (push) Blocked by required conditions Details
Github Actions / integration (24.x, windows-latest, b) (push) Blocked by required conditions Details
Github Actions / integration (lts/*, ubuntu-latest, a, 1) (push) Blocked by required conditions Details
Github Actions / integration (lts/*, ubuntu-latest, b, 1) (push) Blocked by required conditions Details
2025-10-07 19:26:11 +03:00
Xiao b7530c2510
fix(css): correct CC_UPPER_U typo (E -> U) (#19989) 2025-10-07 19:10:42 +03:00
Alexander Akait f3ef1428b3
fix: defer import mangling (#19988) 2025-10-07 19:09:05 +03:00
Alexander Akait d32f1711ac
fix: hash options types (#19987) 2025-10-07 17:40:59 +03:00
44 changed files with 738 additions and 387 deletions

View File

@ -537,9 +537,21 @@ export type Filename = FilenameTemplate;
*/ */
export type GlobalObject = string; export type GlobalObject = string;
/** /**
* Digest type used for the hash. * Digest types used for the hash.
*/ */
export type HashDigest = string; export type HashDigest =
| "base64"
| "base64url"
| "hex"
| "binary"
| "utf8"
| "utf-8"
| "utf16le"
| "utf-16le"
| "latin1"
| "ascii"
| "ucs2"
| "ucs-2";
/** /**
* Number of chars which are used for the hash. * Number of chars which are used for the hash.
*/ */
@ -2157,7 +2169,7 @@ export interface Output {
*/ */
globalObject?: GlobalObject; globalObject?: GlobalObject;
/** /**
* Digest type used for the hash. * Digest types used for the hash.
*/ */
hashDigest?: HashDigest; hashDigest?: HashDigest;
/** /**
@ -3653,7 +3665,7 @@ export interface OutputNormalized {
*/ */
globalObject?: GlobalObject; globalObject?: GlobalObject;
/** /**
* Digest type used for the hash. * Digest types used for the hash.
*/ */
hashDigest?: HashDigest; hashDigest?: HashDigest;
/** /**

View File

@ -7,7 +7,7 @@
/** /**
* Algorithm used for generation the hash (see node.js crypto package). * Algorithm used for generation the hash (see node.js crypto package).
*/ */
export type HashFunction = string | typeof import("../../lib/util/Hash"); export type HashFunction = string | typeof import("../../../lib/util/Hash");
export interface HashedModuleIdsPluginOptions { export interface HashedModuleIdsPluginOptions {
/** /**
@ -17,7 +17,19 @@ export interface HashedModuleIdsPluginOptions {
/** /**
* The encoding to use when generating the hash, defaults to 'base64'. All encodings from Node.JS' hash.digest are supported. * The encoding to use when generating the hash, defaults to 'base64'. All encodings from Node.JS' hash.digest are supported.
*/ */
hashDigest?: "hex" | "latin1" | "base64"; hashDigest?:
| "base64"
| "base64url"
| "hex"
| "binary"
| "utf8"
| "utf-8"
| "utf16le"
| "utf-16le"
| "latin1"
| "ascii"
| "ucs2"
| "ucs-2";
/** /**
* The prefix length of the hash digest to use, defaults to 4. * The prefix length of the hash digest to use, defaults to 4.
*/ */

View File

@ -1670,7 +1670,7 @@ Caller might not support runtime-dependent code generation (opt-out via optimiza
for (const type of sourceTypes) hash.update(type); for (const type of sourceTypes) hash.update(type);
} }
this.moduleGraph.getExportsInfo(module).updateHash(hash, runtime); this.moduleGraph.getExportsInfo(module).updateHash(hash, runtime);
return BigInt(`0x${/** @type {string} */ (hash.digest("hex"))}`); return BigInt(`0x${hash.digest("hex")}`);
}); });
return graphHash; return graphHash;
} }
@ -1808,7 +1808,7 @@ Caller might not support runtime-dependent code generation (opt-out via optimiza
} }
} }
hash.update(graphHash); hash.update(graphHash);
return /** @type {string} */ (hash.digest("hex")); return hash.digest("hex");
}); });
} }

View File

@ -141,7 +141,7 @@ Caller might not support runtime-dependent code generation (opt-out via optimiza
if (info.runtimeRequirements) { if (info.runtimeRequirements) {
for (const rr of info.runtimeRequirements) hash.update(rr); for (const rr of info.runtimeRequirements) hash.update(rr);
} }
return (info.hash = /** @type {string} */ (hash.digest("hex"))); return (info.hash = hash.digest("hex"));
} }
/** /**

View File

@ -4378,7 +4378,7 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
runtime, runtime,
runtimeTemplate runtimeTemplate
}); });
moduleHashDigest = /** @type {string} */ (moduleHash.digest(hashDigest)); moduleHashDigest = moduleHash.digest(hashDigest);
} catch (err) { } catch (err) {
errors.push(new ModuleHashingError(module, /** @type {Error} */ (err))); errors.push(new ModuleHashingError(module, /** @type {Error} */ (err)));
moduleHashDigest = "XXXXXX"; moduleHashDigest = "XXXXXX";
@ -4601,9 +4601,7 @@ This prevents using hashes of each other and should be avoided.`);
moduleGraph: this.moduleGraph, moduleGraph: this.moduleGraph,
runtimeTemplate: this.runtimeTemplate runtimeTemplate: this.runtimeTemplate
}); });
const chunkHashDigest = /** @type {string} */ ( const chunkHashDigest = chunkHash.digest(hashDigest);
chunkHash.digest(hashDigest)
);
hash.update(chunkHashDigest); hash.update(chunkHashDigest);
chunk.hash = chunkHashDigest; chunk.hash = chunkHashDigest;
chunk.renderedHash = chunk.hash.slice(0, hashDigestLength); chunk.renderedHash = chunk.hash.slice(0, hashDigestLength);
@ -4637,7 +4635,7 @@ This prevents using hashes of each other and should be avoided.`);
this.logger.timeAggregateEnd("hashing: hash chunks"); this.logger.timeAggregateEnd("hashing: hash chunks");
this.logger.time("hashing: hash digest"); this.logger.time("hashing: hash digest");
this.hooks.fullHash.call(hash); this.hooks.fullHash.call(hash);
this.fullHash = /** @type {string} */ (hash.digest(hashDigest)); this.fullHash = hash.digest(hashDigest);
this.hash = this.fullHash.slice(0, hashDigestLength); this.hash = this.fullHash.slice(0, hashDigestLength);
this.logger.timeEnd("hashing: hash digest"); this.logger.timeEnd("hashing: hash digest");
@ -4652,9 +4650,7 @@ This prevents using hashes of each other and should be avoided.`);
runtime: chunk.runtime, runtime: chunk.runtime,
runtimeTemplate runtimeTemplate
}); });
const moduleHashDigest = /** @type {string} */ ( const moduleHashDigest = moduleHash.digest(hashDigest);
moduleHash.digest(hashDigest)
);
const oldHash = chunkGraph.getModuleHash(module, chunk.runtime); const oldHash = chunkGraph.getModuleHash(module, chunk.runtime);
chunkGraph.setModuleHashes( chunkGraph.setModuleHashes(
module, module,
@ -4671,9 +4667,7 @@ This prevents using hashes of each other and should be avoided.`);
const chunkHash = createHash(hashFunction); const chunkHash = createHash(hashFunction);
chunkHash.update(chunk.hash); chunkHash.update(chunk.hash);
chunkHash.update(this.hash); chunkHash.update(this.hash);
const chunkHashDigest = const chunkHashDigest = chunkHash.digest(hashDigest);
/** @type {string} */
(chunkHash.digest(hashDigest));
chunk.hash = chunkHashDigest; chunk.hash = chunkHashDigest;
chunk.renderedHash = chunk.hash.slice(0, hashDigestLength); chunk.renderedHash = chunk.hash.slice(0, hashDigestLength);
this.hooks.contentHash.call(chunk); this.hooks.contentHash.call(chunk);

View File

@ -830,7 +830,7 @@ class DefinePlugin {
compilation.valueCacheVersions.set( compilation.valueCacheVersions.set(
VALUE_DEP_MAIN, VALUE_DEP_MAIN,
/** @type {string} */ (mainHash.digest("hex").slice(0, 8)) mainHash.digest("hex").slice(0, 8)
); );
} }
); );

View File

@ -48,7 +48,7 @@ class DependencyTemplates {
updateHash(part) { updateHash(part) {
const hash = createHash(this._hashFunction); const hash = createHash(this._hashFunction);
hash.update(`${this._hash}${part}`); hash.update(`${this._hash}${part}`);
this._hash = /** @type {string} */ (hash.digest("hex")); this._hash = hash.digest("hex");
} }
getHash() { getHash() {

View File

@ -3350,7 +3350,7 @@ class FileSystemInfo {
hash.update(/** @type {string | Buffer} */ (content)); hash.update(/** @type {string | Buffer} */ (content));
const digest = /** @type {string} */ (hash.digest("hex")); const digest = hash.digest("hex");
this._fileHashes.set(path, digest); this._fileHashes.set(path, digest);
@ -3618,7 +3618,7 @@ class FileSystemInfo {
} }
} }
const digest = /** @type {string} */ (hash.digest("hex")); const digest = hash.digest("hex");
/** @type {ContextFileSystemInfoEntry} */ /** @type {ContextFileSystemInfoEntry} */
const result = { const result = {
safeTime, safeTime,
@ -3681,7 +3681,7 @@ class FileSystemInfo {
null, null,
(entry.resolved = { (entry.resolved = {
safeTime, safeTime,
timestampHash: /** @type {string} */ (hash.digest("hex")) timestampHash: hash.digest("hex")
}) })
); );
} }
@ -3743,7 +3743,7 @@ class FileSystemInfo {
/** @type {ContextHash} */ /** @type {ContextHash} */
const result = { const result = {
hash: /** @type {string} */ (hash.digest("hex")) hash: hash.digest("hex")
}; };
if (symlinks) result.symlinks = symlinks; if (symlinks) result.symlinks = symlinks;
return result; return result;
@ -3790,10 +3790,7 @@ class FileSystemInfo {
for (const h of hashes) { for (const h of hashes) {
hash.update(h); hash.update(h);
} }
callback( callback(null, (entry.resolved = hash.digest("hex")));
null,
(entry.resolved = /** @type {string} */ (hash.digest("hex")))
);
} }
); );
} }
@ -3910,8 +3907,8 @@ class FileSystemInfo {
/** @type {ContextTimestampAndHash} */ /** @type {ContextTimestampAndHash} */
const result = { const result = {
safeTime, safeTime,
timestampHash: /** @type {string} */ (tsHash.digest("hex")), timestampHash: tsHash.digest("hex"),
hash: /** @type {string} */ (hash.digest("hex")) hash: hash.digest("hex")
}; };
if (symlinks) result.symlinks = symlinks; if (symlinks) result.symlinks = symlinks;
return result; return result;
@ -3979,8 +3976,8 @@ class FileSystemInfo {
null, null,
(entry.resolved = { (entry.resolved = {
safeTime, safeTime,
timestampHash: /** @type {string} */ (tsHash.digest("hex")), timestampHash: tsHash.digest("hex"),
hash: /** @type {string} */ (hash.digest("hex")) hash: hash.digest("hex")
}) })
); );
} }

View File

@ -84,7 +84,7 @@ const getHash =
() => { () => {
const hash = createHash(hashFunction); const hash = createHash(hashFunction);
hash.update(strFn()); hash.update(strFn());
const digest = /** @type {string} */ (hash.digest("hex")); const digest = hash.digest("hex");
return digest.slice(0, 4); return digest.slice(0, 4);
}; };

View File

@ -1211,7 +1211,7 @@ class NormalModule extends Module {
hash.update("meta"); hash.update("meta");
hash.update(JSON.stringify(this.buildMeta)); hash.update(JSON.stringify(this.buildMeta));
/** @type {BuildInfo} */ /** @type {BuildInfo} */
(this.buildInfo).hash = /** @type {string} */ (hash.digest("hex")); (this.buildInfo).hash = hash.digest("hex");
} }
/** /**

View File

@ -949,7 +949,16 @@ class RuntimeTemplate {
// when the defaultInterop is used (when a ESM imports a CJS module), // when the defaultInterop is used (when a ESM imports a CJS module),
if (exportName.length > 0 && exportName[0] === "default") { if (exportName.length > 0 && exportName[0] === "default") {
if (isDeferred && exportsType !== "namespace") { if (isDeferred && exportsType !== "namespace") {
const access = `${importVar}.a${propertyAccess(exportName, 1)}`; const exportsInfo = moduleGraph.getExportsInfo(module);
const name = exportName.slice(1);
const used = exportsInfo.getUsedName(name, runtime);
if (!used) {
const comment = Template.toNormalComment(
`unused export ${propertyAccess(exportName)}`
);
return `${comment} undefined`;
}
const access = `${importVar}.a${propertyAccess(used)}`;
if (isCall || asiSafe === undefined) { if (isCall || asiSafe === undefined) {
return access; return access;
} }

View File

@ -482,14 +482,12 @@ class SourceMapDevToolPlugin {
const sourceMapString = JSON.stringify(sourceMap); const sourceMapString = JSON.stringify(sourceMap);
if (sourceMapFilename) { if (sourceMapFilename) {
const filename = file; const filename = file;
const sourceMapContentHash = const sourceMapContentHash = usesContentHash
/** @type {string} */ ? createHash(compilation.outputOptions.hashFunction)
(
usesContentHash &&
createHash(compilation.outputOptions.hashFunction)
.update(sourceMapString) .update(sourceMapString)
.digest("hex") .digest("hex")
); : undefined;
const pathParams = { const pathParams = {
chunk, chunk,
filename: options.fileContext filename: options.fileContext

View File

@ -244,11 +244,10 @@ class AssetGenerator extends Generator {
hash.update(module.error.toString()); hash.update(module.error.toString());
} }
const fullContentHash = /** @type {string} */ ( const fullContentHash = hash.digest(
hash.digest(runtimeTemplate.outputOptions.hashDigest) runtimeTemplate.outputOptions.hashDigest
); );
/** @type {string} */
const contentHash = nonNumericOnlyHash( const contentHash = nonNumericOnlyHash(
fullContentHash, fullContentHash,
runtimeTemplate.outputOptions.hashDigestLength runtimeTemplate.outputOptions.hashDigestLength

View File

@ -34,7 +34,7 @@ class LazyHashedEtag {
if (this._hash === undefined) { if (this._hash === undefined) {
const hash = createHash(this._hashFunction); const hash = createHash(this._hashFunction);
this._obj.updateHash(hash); this._obj.updateHash(hash);
this._hash = /** @type {string} */ (hash.digest("base64")); this._hash = hash.digest("base64");
} }
return this._hash; return this._hash;
} }

View File

@ -470,12 +470,8 @@ class CssModulesPlugin {
hash.update(chunkGraph.getModuleHash(module, chunk.runtime)); hash.update(chunkGraph.getModuleHash(module, chunk.runtime));
} }
} }
const digest = /** @type {string} */ (hash.digest(hashDigest)); const digest = hash.digest(hashDigest);
chunk.contentHash.css = nonNumericOnlyHash( chunk.contentHash.css = nonNumericOnlyHash(digest, hashDigestLength);
digest,
/** @type {number} */
(hashDigestLength)
);
}); });
compilation.hooks.renderManifest.tap(PLUGIN_NAME, (result, options) => { compilation.hooks.renderManifest.tap(PLUGIN_NAME, (result, options) => {
const { chunkGraph } = compilation; const { chunkGraph } = compilation;

View File

@ -66,7 +66,7 @@ const CC_LOWER_Z = "z".charCodeAt(0);
const CC_UPPER_A = "A".charCodeAt(0); const CC_UPPER_A = "A".charCodeAt(0);
const CC_UPPER_F = "F".charCodeAt(0); const CC_UPPER_F = "F".charCodeAt(0);
const CC_UPPER_E = "E".charCodeAt(0); const CC_UPPER_E = "E".charCodeAt(0);
const CC_UPPER_U = "E".charCodeAt(0); const CC_UPPER_U = "U".charCodeAt(0);
const CC_UPPER_Z = "Z".charCodeAt(0); const CC_UPPER_Z = "Z".charCodeAt(0);
const CC_0 = "0".charCodeAt(0); const CC_0 = "0".charCodeAt(0);
const CC_9 = "9".charCodeAt(0); const CC_9 = "9".charCodeAt(0);

View File

@ -64,9 +64,7 @@ const getLocalIdent = (local, module, chunkGraph, runtimeTemplate) => {
hash.update(local); hash.update(local);
} }
const localIdentHash = const localIdentHash = hash.digest(hashDigest).slice(0, hashDigestLength);
/** @type {string} */
(hash.digest(hashDigest)).slice(0, hashDigestLength);
return runtimeTemplate.compilation return runtimeTemplate.compilation
.getPath(localIdentName, { .getPath(localIdentName, {

View File

@ -378,9 +378,7 @@ class WorkerPlugin {
)}|${i}`; )}|${i}`;
const hash = createHash(compilation.outputOptions.hashFunction); const hash = createHash(compilation.outputOptions.hashFunction);
hash.update(name); hash.update(name);
const digest = const digest = hash.digest(compilation.outputOptions.hashDigest);
/** @type {string} */
(hash.digest(compilation.outputOptions.hashDigest));
entryOptions.runtime = digest.slice( entryOptions.runtime = digest.slice(
0, 0,
compilation.outputOptions.hashDigestLength compilation.outputOptions.hashDigestLength

View File

@ -16,12 +16,12 @@ const {
getUsedModuleIdsAndModules getUsedModuleIdsAndModules
} = require("./IdHelpers"); } = require("./IdHelpers");
/** @typedef {import("../../declarations/plugins/HashedModuleIdsPlugin").HashedModuleIdsPluginOptions} HashedModuleIdsPluginOptions */ /** @typedef {import("../../declarations/plugins/ids/HashedModuleIdsPlugin").HashedModuleIdsPluginOptions} HashedModuleIdsPluginOptions */
/** @typedef {import("../Compiler")} Compiler */ /** @typedef {import("../Compiler")} Compiler */
const validate = createSchemaValidation( const validate = createSchemaValidation(
require("../../schemas/plugins/HashedModuleIdsPlugin.check"), require("../../schemas/plugins/ids/HashedModuleIdsPlugin.check"),
() => require("../../schemas/plugins/HashedModuleIdsPlugin.json"), () => require("../../schemas/plugins/ids/HashedModuleIdsPlugin.json"),
{ {
name: "Hashed Module Ids Plugin", name: "Hashed Module Ids Plugin",
baseDataPath: "options" baseDataPath: "options"
@ -37,7 +37,7 @@ class HashedModuleIdsPlugin {
constructor(options = {}) { constructor(options = {}) {
validate(options); validate(options);
/** @type {HashedModuleIdsPluginOptions} */ /** @type {Required<Omit<HashedModuleIdsPluginOptions, "context">> & { context?: string | undefined }} */
this.options = { this.options = {
context: undefined, context: undefined,
hashFunction: DEFAULTS.HASH_FUNCTION, hashFunction: DEFAULTS.HASH_FUNCTION,
@ -73,9 +73,7 @@ class HashedModuleIdsPlugin {
) )
); );
hash.update(ident || ""); hash.update(ident || "");
const hashId = /** @type {string} */ ( const hashId = hash.digest(options.hashDigest);
hash.digest(options.hashDigest)
);
let len = options.hashDigestLength; let len = options.hashDigestLength;
while (usedIds.has(hashId.slice(0, len))) { while (usedIds.has(hashId.slice(0, len))) {
/** @type {number} */ (len)++; /** @type {number} */ (len)++;

View File

@ -25,7 +25,7 @@ const numberHash = require("../util/numberHash");
const getHash = (str, len, hashFunction) => { const getHash = (str, len, hashFunction) => {
const hash = createHash(hashFunction); const hash = createHash(hashFunction);
hash.update(str); hash.update(str);
const digest = /** @type {string} */ (hash.digest("hex")); const digest = hash.digest("hex");
return digest.slice(0, len); return digest.slice(0, len);
}; };

View File

@ -503,11 +503,10 @@ class JavascriptModulesPlugin {
} }
xor.updateHash(hash); xor.updateHash(hash);
} }
const digest = /** @type {string} */ (hash.digest(hashDigest)); const digest = hash.digest(hashDigest);
chunk.contentHash.javascript = nonNumericOnlyHash( chunk.contentHash.javascript = nonNumericOnlyHash(
digest, digest,
/** @type {number} */ hashDigestLength
(hashDigestLength)
); );
}); });
compilation.hooks.additionalTreeRuntimeRequirements.tap( compilation.hooks.additionalTreeRuntimeRequirements.tap(

View File

@ -12,6 +12,8 @@ const WebpackError = require("../WebpackError");
const { compareSelect, compareStrings } = require("../util/comparators"); const { compareSelect, compareStrings } = require("../util/comparators");
const createHash = require("../util/createHash"); const createHash = require("../util/createHash");
/** @typedef {import("../../declarations/WebpackOptions").HashFunction} HashFunction */
/** @typedef {import("../../declarations/WebpackOptions").HashDigest} HashDigest */
/** @typedef {import("webpack-sources").Source} Source */ /** @typedef {import("webpack-sources").Source} Source */
/** @typedef {import("../Cache").Etag} Etag */ /** @typedef {import("../Cache").Etag} Etag */
/** @typedef {import("../Compilation").AssetInfo} AssetInfo */ /** @typedef {import("../Compilation").AssetInfo} AssetInfo */
@ -109,8 +111,8 @@ const compilationHooksMap = new WeakMap();
/** /**
* @typedef {object} RealContentHashPluginOptions * @typedef {object} RealContentHashPluginOptions
* @property {string | Hash} hashFunction the hash function to use * @property {HashFunction} hashFunction the hash function to use
* @property {string=} hashDigest the hash digest to use * @property {HashDigest} hashDigest the hash digest to use
*/ */
const PLUGIN_NAME = "RealContentHashPlugin"; const PLUGIN_NAME = "RealContentHashPlugin";
@ -432,7 +434,7 @@ ${referencingAssets
hash.update(content); hash.update(content);
} }
const digest = hash.digest(this._hashDigest); const digest = hash.digest(this._hashDigest);
newHash = /** @type {string} */ (digest.slice(0, oldHash.length)); newHash = digest.slice(0, oldHash.length);
} }
hashToNewHash.set(oldHash, newHash); hashToNewHash.set(oldHash, newHash);
} }

View File

@ -55,7 +55,7 @@ const WRITE_LIMIT_CHUNK = 511 * 1024 * 1024;
const hashForName = (buffers, hashFunction) => { const hashForName = (buffers, hashFunction) => {
const hash = createHash(hashFunction); const hash = createHash(hashFunction);
for (const buf of buffers) hash.update(buf); for (const buf of buffers) hash.update(buf);
return /** @type {string} */ (hash.digest("hex")); return hash.digest("hex");
}; };
const COMPRESSION_CHUNK_SIZE = 100 * 1024 * 1024; const COMPRESSION_CHUNK_SIZE = 100 * 1024 * 1024;

View File

@ -117,7 +117,7 @@ const setMapSize = (map, size) => {
const toHash = (buffer, hashFunction) => { const toHash = (buffer, hashFunction) => {
const hash = createHash(hashFunction); const hash = createHash(hashFunction);
hash.update(buffer); hash.update(buffer);
return /** @type {string} */ (hash.digest("latin1")); return hash.digest("latin1");
}; };
const ESCAPE = null; const ESCAPE = null;

View File

@ -722,7 +722,7 @@ const SIMPLE_EXTRACTORS = {
} }
}, },
hash: (object, compilation) => { hash: (object, compilation) => {
object.hash = /** @type {string} */ (compilation.hash); object.hash = compilation.hash;
}, },
version: (object) => { version: (object) => {
object.version = require("../../package.json").version; object.version = require("../../package.json").version;

View File

@ -5,14 +5,31 @@
"use strict"; "use strict";
/** @typedef {import("../../declarations/WebpackOptions").HashDigest} Encoding */
class Hash { class Hash {
/* istanbul ignore next */ /* istanbul ignore next */
/** /**
* Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding} * Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
* @abstract * @abstract
* @param {string|Buffer} data data * @overload
* @param {string=} inputEncoding data encoding * @param {string | Buffer} data data
* @returns {this} updated hash * @returns {Hash} updated hash
*/
/**
* Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
* @abstract
* @overload
* @param {string} data data
* @param {Encoding} inputEncoding data encoding
* @returns {Hash} updated hash
*/
/**
* Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
* @abstract
* @param {string | Buffer} data data
* @param {Encoding=} inputEncoding data encoding
* @returns {Hash} updated hash
*/ */
update(data, inputEncoding) { update(data, inputEncoding) {
const AbstractMethodError = require("../AbstractMethodError"); const AbstractMethodError = require("../AbstractMethodError");
@ -24,8 +41,21 @@ class Hash {
/** /**
* Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding} * Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
* @abstract * @abstract
* @param {string=} encoding encoding of the return value * @overload
* @returns {string|Buffer} digest * @returns {Buffer} digest
*/
/**
* Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
* @abstract
* @overload
* @param {Encoding} encoding encoding of the return value
* @returns {string} digest
*/
/**
* Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
* @abstract
* @param {Encoding=} encoding encoding of the return value
* @returns {string | Buffer} digest
*/ */
digest(encoding) { digest(encoding) {
const AbstractMethodError = require("../AbstractMethodError"); const AbstractMethodError = require("../AbstractMethodError");

View File

@ -7,9 +7,10 @@
const Hash = require("./Hash"); const Hash = require("./Hash");
/** @typedef {import("../../declarations/WebpackOptions").HashDigest} Encoding */
/** @typedef {import("../../declarations/WebpackOptions").HashFunction} HashFunction */ /** @typedef {import("../../declarations/WebpackOptions").HashFunction} HashFunction */
const BULK_SIZE = 2000; const BULK_SIZE = 3;
// We are using an object instead of a Map as this will stay static during the runtime // We are using an object instead of a Map as this will stay static during the runtime
// so access to it can be optimized by v8 // so access to it can be optimized by v8
@ -38,9 +39,22 @@ class BulkUpdateDecorator extends Hash {
/** /**
* Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding} * Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
* @param {string|Buffer} data data * @overload
* @param {string=} inputEncoding data encoding * @param {string | Buffer} data data
* @returns {this} updated hash * @returns {Hash} updated hash
*/
/**
* Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
* @overload
* @param {string} data data
* @param {Encoding} inputEncoding data encoding
* @returns {Hash} updated hash
*/
/**
* Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
* @param {string | Buffer} data data
* @param {Encoding=} inputEncoding data encoding
* @returns {Hash} updated hash
*/ */
update(data, inputEncoding) { update(data, inputEncoding) {
if ( if (
@ -55,7 +69,11 @@ class BulkUpdateDecorator extends Hash {
this.hash.update(this.buffer); this.hash.update(this.buffer);
this.buffer = ""; this.buffer = "";
} }
if (typeof data === "string" && inputEncoding) {
this.hash.update(data, inputEncoding); this.hash.update(data, inputEncoding);
} else {
this.hash.update(data);
}
} else { } else {
this.buffer += data; this.buffer += data;
if (this.buffer.length > BULK_SIZE) { if (this.buffer.length > BULK_SIZE) {
@ -71,8 +89,19 @@ class BulkUpdateDecorator extends Hash {
/** /**
* Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding} * Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
* @param {string=} encoding encoding of the return value * @overload
* @returns {string|Buffer} digest * @returns {Buffer} digest
*/
/**
* Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
* @overload
* @param {Encoding} encoding encoding of the return value
* @returns {string} digest
*/
/**
* Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
* @param {Encoding=} encoding encoding of the return value
* @returns {string | Buffer} digest
*/ */
digest(encoding) { digest(encoding) {
let digestCache; let digestCache;
@ -91,9 +120,19 @@ class BulkUpdateDecorator extends Hash {
if (buffer.length > 0) { if (buffer.length > 0) {
this.hash.update(buffer); this.hash.update(buffer);
} }
if (!encoding) {
const result = this.hash.digest();
if (digestCache !== undefined) {
digestCache.set(buffer, result);
}
return result;
}
const digestResult = this.hash.digest(encoding); const digestResult = this.hash.digest(encoding);
// Compatibility with the old hash library
const result = const result =
typeof digestResult === "string" ? digestResult : digestResult.toString(); typeof digestResult === "string"
? digestResult
: /** @type {NodeJS.TypedArray} */ (digestResult).toString();
if (digestCache !== undefined) { if (digestCache !== undefined) {
digestCache.set(buffer, result); digestCache.set(buffer, result);
} }
@ -110,9 +149,22 @@ class DebugHash extends Hash {
/** /**
* Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding} * Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
* @param {string|Buffer} data data * @overload
* @param {string=} inputEncoding data encoding * @param {string | Buffer} data data
* @returns {this} updated hash * @returns {Hash} updated hash
*/
/**
* Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
* @overload
* @param {string} data data
* @param {Encoding} inputEncoding data encoding
* @returns {Hash} updated hash
*/
/**
* Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
* @param {string | Buffer} data data
* @param {Encoding=} inputEncoding data encoding
* @returns {Hash} updated hash
*/ */
update(data, inputEncoding) { update(data, inputEncoding) {
if (typeof data !== "string") data = data.toString("utf8"); if (typeof data !== "string") data = data.toString("utf8");
@ -132,8 +184,19 @@ class DebugHash extends Hash {
/** /**
* Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding} * Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
* @param {string=} encoding encoding of the return value * @overload
* @returns {string|Buffer} digest * @returns {Buffer} digest
*/
/**
* Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
* @overload
* @param {Encoding} encoding encoding of the return value
* @returns {string} digest
*/
/**
* Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
* @param {Encoding=} encoding encoding of the return value
* @returns {string | Buffer} digest
*/ */
digest(encoding) { digest(encoding) {
return Buffer.from(`@webpack-debug-digest@${this.string}`).toString("hex"); return Buffer.from(`@webpack-debug-digest@${this.string}`).toString("hex");
@ -186,14 +249,21 @@ module.exports = (algorithm) => {
case "native-md4": case "native-md4":
if (crypto === undefined) crypto = require("crypto"); if (crypto === undefined) crypto = require("crypto");
return new BulkUpdateDecorator( return new BulkUpdateDecorator(
() => /** @type {typeof import("crypto")} */ (crypto).createHash("md4"), () =>
/** @type {Hash} */ (
/** @type {typeof import("crypto")} */
(crypto).createHash("md4")
),
"md4" "md4"
); );
default: default:
if (crypto === undefined) crypto = require("crypto"); if (crypto === undefined) crypto = require("crypto");
return new BulkUpdateDecorator( return new BulkUpdateDecorator(
() => () =>
/** @type {typeof import("crypto")} */ (crypto).createHash(algorithm), /** @type {Hash} */ (
/** @type {typeof import("crypto")} */
(crypto).createHash(algorithm)
),
algorithm algorithm
); );
} }

View File

@ -8,6 +8,8 @@
const Hash = require("../Hash"); const Hash = require("../Hash");
const MAX_SHORT_STRING = require("./wasm-hash").MAX_SHORT_STRING; const MAX_SHORT_STRING = require("./wasm-hash").MAX_SHORT_STRING;
/** @typedef {import("../../../declarations/WebpackOptions").HashDigest} Encoding */
class BatchedHash extends Hash { class BatchedHash extends Hash {
/** /**
* @param {Hash} hash hash * @param {Hash} hash hash
@ -21,9 +23,22 @@ class BatchedHash extends Hash {
/** /**
* Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding} * Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
* @param {string|Buffer} data data * @overload
* @param {string=} inputEncoding data encoding * @param {string | Buffer} data data
* @returns {this} updated hash * @returns {Hash} updated hash
*/
/**
* Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
* @overload
* @param {string} data data
* @param {Encoding} inputEncoding data encoding
* @returns {Hash} updated hash
*/
/**
* Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
* @param {string | Buffer} data data
* @param {Encoding=} inputEncoding data encoding
* @returns {Hash} updated hash
*/ */
update(data, inputEncoding) { update(data, inputEncoding) {
if (this.string !== undefined) { if (this.string !== undefined) {
@ -35,7 +50,11 @@ class BatchedHash extends Hash {
this.string += data; this.string += data;
return this; return this;
} }
if (this.encoding) {
this.hash.update(this.string, this.encoding); this.hash.update(this.string, this.encoding);
} else {
this.hash.update(this.string);
}
this.string = undefined; this.string = undefined;
} }
if (typeof data === "string") { if (typeof data === "string") {
@ -46,8 +65,10 @@ class BatchedHash extends Hash {
) { ) {
this.string = data; this.string = data;
this.encoding = inputEncoding; this.encoding = inputEncoding;
} else { } else if (inputEncoding) {
this.hash.update(data, inputEncoding); this.hash.update(data, inputEncoding);
} else {
this.hash.update(data);
} }
} else { } else {
this.hash.update(data); this.hash.update(data);
@ -57,12 +78,30 @@ class BatchedHash extends Hash {
/** /**
* Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding} * Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
* @param {string=} encoding encoding of the return value * @overload
* @returns {string|Buffer} digest * @returns {Buffer} digest
*/
/**
* Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
* @overload
* @param {Encoding} encoding encoding of the return value
* @returns {string} digest
*/
/**
* Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
* @param {Encoding=} encoding encoding of the return value
* @returns {string | Buffer} digest
*/ */
digest(encoding) { digest(encoding) {
if (this.string !== undefined) { if (this.string !== undefined) {
if (this.encoding) {
this.hash.update(this.string, this.encoding); this.hash.update(this.string, this.encoding);
} else {
this.hash.update(this.string);
}
}
if (!encoding) {
return this.hash.digest();
} }
return this.hash.digest(encoding); return this.hash.digest(encoding);
} }

View File

@ -5,13 +5,15 @@
"use strict"; "use strict";
const Hash = require("../Hash");
// 65536 is the size of a wasm memory page // 65536 is the size of a wasm memory page
// 64 is the maximum chunk size for every possible wasm hash implementation // 64 is the maximum chunk size for every possible wasm hash implementation
// 4 is the maximum number of bytes per char for string encoding (max is utf-8) // 4 is the maximum number of bytes per char for string encoding (max is utf-8)
// ~3 makes sure that it's always a block of 4 chars, so avoid partially encoded bytes for base64 // ~3 makes sure that it's always a block of 4 chars, so avoid partially encoded bytes for base64
const MAX_SHORT_STRING = Math.floor((65536 - 64) / 4) & ~3; const MAX_SHORT_STRING = Math.floor((65536 - 64) / 4) & ~3;
class WasmHash { class WasmHash extends Hash {
/** /**
* @param {WebAssembly.Instance} instance wasm instance * @param {WebAssembly.Instance} instance wasm instance
* @param {WebAssembly.Instance[]} instancesPool pool of instances * @param {WebAssembly.Instance[]} instancesPool pool of instances
@ -19,6 +21,8 @@ class WasmHash {
* @param {number} digestSize size of digest returned by wasm * @param {number} digestSize size of digest returned by wasm
*/ */
constructor(instance, instancesPool, chunkSize, digestSize) { constructor(instance, instancesPool, chunkSize, digestSize) {
super();
const exports = /** @type {EXPECTED_ANY} */ (instance.exports); const exports = /** @type {EXPECTED_ANY} */ (instance.exports);
exports.init(); exports.init();
this.exports = exports; this.exports = exports;
@ -35,17 +39,39 @@ class WasmHash {
} }
/** /**
* @param {Buffer | string} data data * Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
* @param {BufferEncoding=} encoding encoding * @overload
* @returns {this} itself * @param {string | Buffer} data data
* @returns {Hash} updated hash
*/ */
update(data, encoding) { /**
* Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
* @overload
* @param {string} data data
* @param {string=} inputEncoding data encoding
* @returns {this} updated hash
*/
/**
* Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
* @param {string | Buffer} data data
* @param {string=} inputEncoding data encoding
* @returns {this} updated hash
*/
update(data, inputEncoding) {
if (typeof data === "string") { if (typeof data === "string") {
while (data.length > MAX_SHORT_STRING) { while (data.length > MAX_SHORT_STRING) {
this._updateWithShortString(data.slice(0, MAX_SHORT_STRING), encoding); this._updateWithShortString(
data.slice(0, MAX_SHORT_STRING),
/** @type {NodeJS.BufferEncoding} */
(inputEncoding)
);
data = data.slice(MAX_SHORT_STRING); data = data.slice(MAX_SHORT_STRING);
} }
this._updateWithShortString(data, encoding); this._updateWithShortString(
data,
/** @type {NodeJS.BufferEncoding} */
(inputEncoding)
);
return this; return this;
} }
this._updateWithBuffer(data); this._updateWithBuffer(data);
@ -136,17 +162,31 @@ class WasmHash {
} }
/** /**
* @param {BufferEncoding} type type * Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
* @returns {Buffer | string} digest * @overload
* @returns {Buffer} digest
*/ */
digest(type) { /**
* Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
* @overload
* @param {string=} encoding encoding of the return value
* @returns {string} digest
*/
/**
* Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
* @param {string=} encoding encoding of the return value
* @returns {string | Buffer} digest
*/
digest(encoding) {
const { exports, buffered, mem, digestSize } = this; const { exports, buffered, mem, digestSize } = this;
exports.final(buffered); exports.final(buffered);
this.instancesPool.push(this); this.instancesPool.push(this);
const hex = mem.toString("latin1", 0, digestSize); const hex = mem.toString("latin1", 0, digestSize);
if (type === "hex") return hex; if (encoding === "hex") return hex;
if (type === "binary" || !type) return Buffer.from(hex, "hex"); if (encoding === "binary" || !encoding) return Buffer.from(hex, "hex");
return Buffer.from(hex, "hex").toString(type); return Buffer.from(hex, "hex").toString(
/** @type {NodeJS.BufferEncoding} */ (encoding)
);
} }
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "webpack", "name": "webpack",
"version": "5.102.0", "version": "5.102.1",
"description": "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.", "description": "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.",
"homepage": "https://github.com/webpack/webpack", "homepage": "https://github.com/webpack/webpack",
"bugs": "https://github.com/webpack/webpack/issues", "bugs": "https://github.com/webpack/webpack/issues",

File diff suppressed because one or more lines are too long

View File

@ -1568,8 +1568,21 @@
"minLength": 1 "minLength": 1
}, },
"HashDigest": { "HashDigest": {
"description": "Digest type used for the hash.", "description": "Digest types used for the hash.",
"type": "string" "enum": [
"base64",
"base64url",
"hex",
"binary",
"utf8",
"utf-8",
"utf16le",
"utf-16le",
"latin1",
"ascii",
"ucs2",
"ucs-2"
]
}, },
"HashDigestLength": { "HashDigestLength": {
"description": "Number of chars which are used for the hash.", "description": "Number of chars which are used for the hash.",

View File

@ -1,7 +0,0 @@
/*
* This file was automatically generated.
* DO NOT MODIFY BY HAND.
* Run `yarn fix:special` to update
*/
declare const check: (options: import("../../declarations/plugins/HashedModuleIdsPlugin").HashedModuleIdsPluginOptions) => boolean;
export = check;

View File

@ -1,6 +0,0 @@
/*
* This file was automatically generated.
* DO NOT MODIFY BY HAND.
* Run `yarn fix:special` to update
*/
const t=/^(?:[A-Za-z]:[\\/]|\\\\|\/)/;function e(r,{instancePath:s="",parentData:n,parentDataProperty:a,rootData:i=r}={}){let o=null,l=0;if(0===l){if(!r||"object"!=typeof r||Array.isArray(r))return e.errors=[{params:{type:"object"}}],!1;{const s=l;for(const t in r)if("context"!==t&&"hashDigest"!==t&&"hashDigestLength"!==t&&"hashFunction"!==t)return e.errors=[{params:{additionalProperty:t}}],!1;if(s===l){if(void 0!==r.context){let s=r.context;const n=l;if(l===n){if("string"!=typeof s)return e.errors=[{params:{type:"string"}}],!1;if(s.includes("!")||!0!==t.test(s))return e.errors=[{params:{}}],!1}var u=n===l}else u=!0;if(u){if(void 0!==r.hashDigest){let t=r.hashDigest;const s=l;if("hex"!==t&&"latin1"!==t&&"base64"!==t)return e.errors=[{params:{}}],!1;u=s===l}else u=!0;if(u){if(void 0!==r.hashDigestLength){let t=r.hashDigestLength;const s=l;if(l===s){if("number"!=typeof t)return e.errors=[{params:{type:"number"}}],!1;if(t<1||isNaN(t))return e.errors=[{params:{comparison:">=",limit:1}}],!1}u=s===l}else u=!0;if(u)if(void 0!==r.hashFunction){let t=r.hashFunction;const s=l,n=l;let a=!1,i=null;const p=l,h=l;let c=!1;const m=l;if(l===m)if("string"==typeof t){if(t.length<1){const t={params:{}};null===o?o=[t]:o.push(t),l++}}else{const t={params:{type:"string"}};null===o?o=[t]:o.push(t),l++}var f=m===l;if(c=c||f,!c){const e=l;if(!(t instanceof Function)){const t={params:{}};null===o?o=[t]:o.push(t),l++}f=e===l,c=c||f}if(c)l=h,null!==o&&(h?o.length=h:o=null);else{const t={params:{}};null===o?o=[t]:o.push(t),l++}if(p===l&&(a=!0,i=0),!a){const t={params:{passingSchemas:i}};return null===o?o=[t]:o.push(t),l++,e.errors=o,!1}l=n,null!==o&&(n?o.length=n:o=null),u=s===l}else u=!0}}}}}return e.errors=o,0===l}module.exports=e,module.exports.default=e;

View File

@ -0,0 +1,7 @@
/*
* This file was automatically generated.
* DO NOT MODIFY BY HAND.
* Run `yarn fix:special` to update
*/
declare const check: (options: import("../../../declarations/plugins/ids/HashedModuleIdsPlugin").HashedModuleIdsPluginOptions) => boolean;
export = check;

View File

@ -0,0 +1,6 @@
/*
* This file was automatically generated.
* DO NOT MODIFY BY HAND.
* Run `yarn fix:special` to update
*/
const t=/^(?:[A-Za-z]:[\\/]|\\\\|\/)/;function e(s,{instancePath:r="",parentData:n,parentDataProperty:a,rootData:i=s}={}){let o=null,l=0;if(0===l){if(!s||"object"!=typeof s||Array.isArray(s))return e.errors=[{params:{type:"object"}}],!1;{const r=l;for(const t in s)if("context"!==t&&"hashDigest"!==t&&"hashDigestLength"!==t&&"hashFunction"!==t)return e.errors=[{params:{additionalProperty:t}}],!1;if(r===l){if(void 0!==s.context){let r=s.context;const n=l;if(l===n){if("string"!=typeof r)return e.errors=[{params:{type:"string"}}],!1;if(r.includes("!")||!0!==t.test(r))return e.errors=[{params:{}}],!1}var u=n===l}else u=!0;if(u){if(void 0!==s.hashDigest){let t=s.hashDigest;const r=l;if("base64"!==t&&"base64url"!==t&&"hex"!==t&&"binary"!==t&&"utf8"!==t&&"utf-8"!==t&&"utf16le"!==t&&"utf-16le"!==t&&"latin1"!==t&&"ascii"!==t&&"ucs2"!==t&&"ucs-2"!==t)return e.errors=[{params:{}}],!1;u=r===l}else u=!0;if(u){if(void 0!==s.hashDigestLength){let t=s.hashDigestLength;const r=l;if(l===r){if("number"!=typeof t)return e.errors=[{params:{type:"number"}}],!1;if(t<1||isNaN(t))return e.errors=[{params:{comparison:">=",limit:1}}],!1}u=r===l}else u=!0;if(u)if(void 0!==s.hashFunction){let t=s.hashFunction;const r=l,n=l;let a=!1,i=null;const c=l,p=l;let h=!1;const m=l;if(l===m)if("string"==typeof t){if(t.length<1){const t={params:{}};null===o?o=[t]:o.push(t),l++}}else{const t={params:{type:"string"}};null===o?o=[t]:o.push(t),l++}var f=m===l;if(h=h||f,!h){const e=l;if(!(t instanceof Function)){const t={params:{}};null===o?o=[t]:o.push(t),l++}f=e===l,h=h||f}if(h)l=p,null!==o&&(p?o.length=p:o=null);else{const t={params:{}};null===o?o=[t]:o.push(t),l++}if(c===l&&(a=!0,i=0),!a){const t={params:{passingSchemas:i}};return null===o?o=[t]:o.push(t),l++,e.errors=o,!1}l=n,null!==o&&(n?o.length=n:o=null),u=r===l}else u=!0}}}}}return e.errors=o,0===l}module.exports=e,module.exports.default=e;

View File

@ -9,7 +9,7 @@
}, },
{ {
"instanceof": "Function", "instanceof": "Function",
"tsType": "typeof import('../../lib/util/Hash')" "tsType": "typeof import('../../../lib/util/Hash')"
} }
] ]
} }
@ -25,7 +25,20 @@
}, },
"hashDigest": { "hashDigest": {
"description": "The encoding to use when generating the hash, defaults to 'base64'. All encodings from Node.JS' hash.digest are supported.", "description": "The encoding to use when generating the hash, defaults to 'base64'. All encodings from Node.JS' hash.digest are supported.",
"enum": ["hex", "latin1", "base64"] "enum": [
"base64",
"base64url",
"hex",
"binary",
"utf8",
"utf-8",
"utf16le",
"utf-16le",
"latin1",
"ascii",
"ucs2",
"ucs-2"
]
}, },
"hashDigestLength": { "hashDigestLength": {
"description": "The prefix length of the hash digest to use, defaults to 4.", "description": "The prefix length of the hash digest to use, defaults to 4.",

View File

@ -6795,13 +6795,27 @@ Object {
"output-hash-digest": Object { "output-hash-digest": Object {
"configs": Array [ "configs": Array [
Object { Object {
"description": "Digest type used for the hash.", "description": "Digest types used for the hash.",
"multiple": false, "multiple": false,
"path": "output.hashDigest", "path": "output.hashDigest",
"type": "string", "type": "enum",
"values": Array [
"base64",
"base64url",
"hex",
"binary",
"utf8",
"utf-8",
"utf16le",
"utf-16le",
"latin1",
"ascii",
"ucs2",
"ucs-2",
],
}, },
], ],
"description": "Digest type used for the hash.", "description": "Digest types used for the hash.",
"multiple": false, "multiple": false,
"simpleType": "string", "simpleType": "string",
}, },

View File

@ -0,0 +1,4 @@
{
"foo": "bar",
"nested": { "foo": "bar" }
}

View File

@ -0,0 +1,18 @@
import defer * as mod1 from "./file.ext" with { type: "bytes" };
import defer * as mod2 from "./file.ext" with { type: "json" };
import * as mod3 from "./file.ext" with { type: "bytes" };
import * as mod4 from "./file.ext" with { type: "json" };
it("should work with defer and import attributes", () => {
const decoder = new TextDecoder('utf-8');
const mod1Decoded = JSON.parse(decoder.decode(mod1.default));
expect(mod1Decoded.foo).toBe("bar");
expect(mod1Decoded.nested.foo).toBe("bar");
expect(mod2.default.foo).toBe("bar");
expect(mod2.default.nested.foo).toBe("bar");
const mod2Decoded = JSON.parse(decoder.decode(mod3.default));
expect(mod2Decoded.foo).toBe("bar");
expect(mod2Decoded.nested.foo).toBe("bar");
expect(mod4.default.foo).toBe("bar");
expect(mod4.default.nested.foo).toBe("bar");
});

View File

@ -0,0 +1,5 @@
"use strict";
const supportsTextDecoder = require("../../../helpers/supportsTextDecoder");
module.exports = () => supportsTextDecoder();

View File

@ -0,0 +1,9 @@
"use strict";
/** @type {import("../../../../").Configuration} */
module.exports = {
target: [`async-node${process.versions.node.split(".").map(Number)[0]}`],
experiments: {
deferImport: true
}
};

377
types.d.ts vendored
View File

@ -989,18 +989,18 @@ declare interface Bootstrap {
allowInlineStartup: boolean; allowInlineStartup: boolean;
} }
type BufferEncoding = type BufferEncoding =
| "ascii" | "base64"
| "base64url"
| "hex"
| "binary"
| "utf8" | "utf8"
| "utf-8" | "utf-8"
| "utf16le" | "utf16le"
| "utf-16le" | "utf-16le"
| "ucs2"
| "ucs-2"
| "base64"
| "base64url"
| "latin1" | "latin1"
| "binary" | "ascii"
| "hex"; | "ucs2"
| "ucs-2";
type BufferEncodingOption = "buffer" | { encoding: "buffer" }; type BufferEncodingOption = "buffer" | { encoding: "buffer" };
declare interface BufferEntry { declare interface BufferEntry {
map?: null | RawSourceMap; map?: null | RawSourceMap;
@ -4518,18 +4518,18 @@ declare class EnableWasmLoadingPlugin {
type EncodingOption = type EncodingOption =
| undefined | undefined
| null | null
| "ascii" | "base64"
| "base64url"
| "hex"
| "binary"
| "utf8" | "utf8"
| "utf-8" | "utf-8"
| "utf16le" | "utf16le"
| "utf-16le" | "utf-16le"
| "latin1"
| "ascii"
| "ucs2" | "ucs2"
| "ucs-2" | "ucs-2"
| "base64"
| "base64url"
| "latin1"
| "binary"
| "hex"
| ObjectEncodingOptions; | ObjectEncodingOptions;
type Entry = type Entry =
| string | string
@ -6242,13 +6242,36 @@ declare class Hash {
/** /**
* Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding} * Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
*/ */
update(data: string | Buffer, inputEncoding?: string): Hash; update(data: string | Buffer): Hash;
/**
* Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
*/
update(data: string, inputEncoding: HashDigest): Hash;
/** /**
* Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding} * Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
*/ */
digest(encoding?: string): string | Buffer; digest(): Buffer;
/**
* Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
*/
digest(encoding: HashDigest): string;
} }
type HashDigest =
| "base64"
| "base64url"
| "hex"
| "binary"
| "utf8"
| "utf-8"
| "utf16le"
| "utf-16le"
| "latin1"
| "ascii"
| "ucs2"
| "ucs-2";
type HashFunction = string | typeof Hash; type HashFunction = string | typeof Hash;
declare interface HashLike { declare interface HashLike {
/** /**
@ -6266,7 +6289,9 @@ declare interface HashableObject {
} }
declare class HashedModuleIdsPlugin { declare class HashedModuleIdsPlugin {
constructor(options?: HashedModuleIdsPluginOptions); constructor(options?: HashedModuleIdsPluginOptions);
options: HashedModuleIdsPluginOptions; options: Required<Omit<HashedModuleIdsPluginOptions, "context">> & {
context?: string;
};
/** /**
* Apply the plugin * Apply the plugin
@ -6282,7 +6307,19 @@ declare interface HashedModuleIdsPluginOptions {
/** /**
* The encoding to use when generating the hash, defaults to 'base64'. All encodings from Node.JS' hash.digest are supported. * The encoding to use when generating the hash, defaults to 'base64'. All encodings from Node.JS' hash.digest are supported.
*/ */
hashDigest?: "base64" | "latin1" | "hex"; hashDigest?:
| "base64"
| "base64url"
| "hex"
| "binary"
| "utf8"
| "utf-8"
| "utf16le"
| "utf-16le"
| "latin1"
| "ascii"
| "ucs2"
| "ucs-2";
/** /**
* The prefix length of the hash digest to use, defaults to 4. * The prefix length of the hash digest to use, defaults to 4.
@ -6624,18 +6661,18 @@ declare interface IntermediateFileSystemExtras {
createWriteStream: ( createWriteStream: (
pathLike: PathLikeFs, pathLike: PathLikeFs,
result?: result?:
| "ascii" | "base64"
| "base64url"
| "hex"
| "binary"
| "utf8" | "utf8"
| "utf-8" | "utf-8"
| "utf16le" | "utf16le"
| "utf-16le" | "utf-16le"
| "latin1"
| "ascii"
| "ucs2" | "ucs2"
| "ucs-2" | "ucs-2"
| "base64"
| "base64url"
| "latin1"
| "binary"
| "hex"
| WriteStreamOptions | WriteStreamOptions
) => NodeJS.WritableStream; ) => NodeJS.WritableStream;
open: Open; open: Open;
@ -11704,7 +11741,7 @@ declare interface NormalModuleLoaderContext<OptionsType> {
mode: "none" | "development" | "production"; mode: "none" | "development" | "production";
webpack?: boolean; webpack?: boolean;
hashFunction: HashFunction; hashFunction: HashFunction;
hashDigest: string; hashDigest: HashDigest;
hashDigestLength: number; hashDigestLength: number;
hashSalt?: string; hashSalt?: string;
_module?: NormalModule; _module?: NormalModule;
@ -11790,18 +11827,18 @@ declare interface ObjectDeserializerContext {
declare interface ObjectEncodingOptions { declare interface ObjectEncodingOptions {
encoding?: encoding?:
| null | null
| "ascii" | "base64"
| "base64url"
| "hex"
| "binary"
| "utf8" | "utf8"
| "utf-8" | "utf-8"
| "utf16le" | "utf16le"
| "utf-16le" | "utf-16le"
| "ucs2"
| "ucs-2"
| "base64"
| "base64url"
| "latin1" | "latin1"
| "binary" | "ascii"
| "hex"; | "ucs2"
| "ucs-2";
} }
declare interface ObjectSerializer { declare interface ObjectSerializer {
serialize: (value: any, context: ObjectSerializerContext) => void; serialize: (value: any, context: ObjectSerializerContext) => void;
@ -12705,9 +12742,21 @@ declare interface Output {
globalObject?: string; globalObject?: string;
/** /**
* Digest type used for the hash. * Digest types used for the hash.
*/ */
hashDigest?: string; hashDigest?:
| "base64"
| "base64url"
| "hex"
| "binary"
| "utf8"
| "utf-8"
| "utf16le"
| "utf-16le"
| "latin1"
| "ascii"
| "ucs2"
| "ucs-2";
/** /**
* Number of chars which are used for the hash. * Number of chars which are used for the hash.
@ -12874,18 +12923,18 @@ declare interface OutputFileSystem {
createReadStream?: ( createReadStream?: (
path: PathLikeFs, path: PathLikeFs,
options?: options?:
| "ascii" | "base64"
| "base64url"
| "hex"
| "binary"
| "utf8" | "utf8"
| "utf-8" | "utf-8"
| "utf16le" | "utf16le"
| "utf-16le" | "utf-16le"
| "latin1"
| "ascii"
| "ucs2" | "ucs2"
| "ucs-2" | "ucs-2"
| "base64"
| "base64url"
| "latin1"
| "binary"
| "hex"
| ReadStreamOptions | ReadStreamOptions
) => NodeJS.ReadableStream; ) => NodeJS.ReadableStream;
join?: (path1: string, path2: string) => string; join?: (path1: string, path2: string) => string;
@ -13020,9 +13069,21 @@ declare interface OutputNormalized {
globalObject?: string; globalObject?: string;
/** /**
* Digest type used for the hash. * Digest types used for the hash.
*/ */
hashDigest?: string; hashDigest?:
| "base64"
| "base64url"
| "hex"
| "binary"
| "utf8"
| "utf-8"
| "utf16le"
| "utf-16le"
| "latin1"
| "ascii"
| "ucs2"
| "ucs-2";
/** /**
* Number of chars which are used for the hash. * Number of chars which are used for the hash.
@ -13198,7 +13259,21 @@ type OutputNormalizedWithDefaults = OutputNormalized & {
path: string; path: string;
pathinfo: NonNullable<undefined | boolean | "verbose">; pathinfo: NonNullable<undefined | boolean | "verbose">;
hashFunction: NonNullable<undefined | string | typeof Hash>; hashFunction: NonNullable<undefined | string | typeof Hash>;
hashDigest: string; hashDigest: NonNullable<
| undefined
| "base64"
| "base64url"
| "hex"
| "binary"
| "utf8"
| "utf-8"
| "utf16le"
| "utf-16le"
| "latin1"
| "ascii"
| "ucs2"
| "ucs-2"
>;
hashDigestLength: number; hashDigestLength: number;
chunkLoadTimeout: number; chunkLoadTimeout: number;
chunkLoading: NonNullable<undefined | string | false>; chunkLoading: NonNullable<undefined | string | false>;
@ -13890,19 +13965,19 @@ declare interface ReadFileFs {
( (
path: PathOrFileDescriptorFs, path: PathOrFileDescriptorFs,
options: options:
| ({ encoding: BufferEncoding; flag?: string } & Abortable) | "base64"
| "ascii" | "base64url"
| "hex"
| "binary"
| "utf8" | "utf8"
| "utf-8" | "utf-8"
| "utf16le" | "utf16le"
| "utf-16le" | "utf-16le"
| "latin1"
| "ascii"
| "ucs2" | "ucs2"
| "ucs-2" | "ucs-2"
| "base64" | ({ encoding: BufferEncoding; flag?: string } & Abortable),
| "base64url"
| "latin1"
| "binary"
| "hex",
callback: (err: null | NodeJS.ErrnoException, result?: string) => void callback: (err: null | NodeJS.ErrnoException, result?: string) => void
): void; ): void;
( (
@ -13910,18 +13985,18 @@ declare interface ReadFileFs {
options: options:
| undefined | undefined
| null | null
| "ascii" | "base64"
| "base64url"
| "hex"
| "binary"
| "utf8" | "utf8"
| "utf-8" | "utf-8"
| "utf16le" | "utf16le"
| "utf-16le" | "utf-16le"
| "latin1"
| "ascii"
| "ucs2" | "ucs2"
| "ucs-2" | "ucs-2"
| "base64"
| "base64url"
| "latin1"
| "binary"
| "hex"
| (ObjectEncodingOptions & { flag?: string } & Abortable), | (ObjectEncodingOptions & { flag?: string } & Abortable),
callback: ( callback: (
err: null | NodeJS.ErrnoException, err: null | NodeJS.ErrnoException,
@ -13941,36 +14016,36 @@ declare interface ReadFileSync {
( (
path: PathOrFileDescriptorFs, path: PathOrFileDescriptorFs,
options: options:
| "ascii" | "base64"
| "base64url"
| "hex"
| "binary"
| "utf8" | "utf8"
| "utf-8" | "utf-8"
| "utf16le" | "utf16le"
| "utf-16le" | "utf-16le"
| "latin1"
| "ascii"
| "ucs2" | "ucs2"
| "ucs-2" | "ucs-2"
| "base64"
| "base64url"
| "latin1"
| "binary"
| "hex"
| { encoding: BufferEncoding; flag?: string } | { encoding: BufferEncoding; flag?: string }
): string; ): string;
( (
path: PathOrFileDescriptorFs, path: PathOrFileDescriptorFs,
options?: options?:
| null | null
| "ascii" | "base64"
| "base64url"
| "hex"
| "binary"
| "utf8" | "utf8"
| "utf-8" | "utf-8"
| "utf16le" | "utf16le"
| "utf-16le" | "utf-16le"
| "latin1"
| "ascii"
| "ucs2" | "ucs2"
| "ucs-2" | "ucs-2"
| "base64"
| "base64url"
| "latin1"
| "binary"
| "hex"
| (ObjectEncodingOptions & { flag?: string }) | (ObjectEncodingOptions & { flag?: string })
): string | Buffer; ): string | Buffer;
} }
@ -13986,18 +14061,18 @@ declare interface ReadFileTypes {
( (
path: PathOrFileDescriptorTypes, path: PathOrFileDescriptorTypes,
options: options:
| "ascii" | "base64"
| "base64url"
| "hex"
| "binary"
| "utf8" | "utf8"
| "utf-8" | "utf-8"
| "utf16le" | "utf16le"
| "utf-16le" | "utf-16le"
| "latin1"
| "ascii"
| "ucs2" | "ucs2"
| "ucs-2" | "ucs-2"
| "base64"
| "base64url"
| "latin1"
| "binary"
| "hex"
| ({ encoding: BufferEncoding; flag?: string } & Abortable), | ({ encoding: BufferEncoding; flag?: string } & Abortable),
callback: (err: null | NodeJS.ErrnoException, result?: string) => void callback: (err: null | NodeJS.ErrnoException, result?: string) => void
): void; ): void;
@ -14006,18 +14081,18 @@ declare interface ReadFileTypes {
options: options:
| undefined | undefined
| null | null
| "ascii" | "base64"
| "base64url"
| "hex"
| "binary"
| "utf8" | "utf8"
| "utf-8" | "utf-8"
| "utf16le" | "utf16le"
| "utf-16le" | "utf-16le"
| "latin1"
| "ascii"
| "ucs2" | "ucs2"
| "ucs-2" | "ucs-2"
| "base64"
| "base64url"
| "latin1"
| "binary"
| "hex"
| (ObjectEncodingOptions & { flag?: string } & Abortable), | (ObjectEncodingOptions & { flag?: string } & Abortable),
callback: ( callback: (
err: null | NodeJS.ErrnoException, err: null | NodeJS.ErrnoException,
@ -14039,33 +14114,33 @@ declare interface ReaddirFs {
options: options:
| undefined | undefined
| null | null
| "ascii" | "base64"
| "base64url"
| "hex"
| "binary"
| "utf8" | "utf8"
| "utf-8" | "utf-8"
| "utf16le" | "utf16le"
| "utf-16le" | "utf-16le"
| "latin1"
| "ascii"
| "ucs2" | "ucs2"
| "ucs-2" | "ucs-2"
| "base64"
| "base64url"
| "latin1"
| "binary"
| "hex"
| { | {
encoding: encoding:
| null | null
| "ascii" | "base64"
| "base64url"
| "hex"
| "binary"
| "utf8" | "utf8"
| "utf-8" | "utf-8"
| "utf16le" | "utf16le"
| "utf-16le" | "utf-16le"
| "ucs2"
| "ucs-2"
| "base64"
| "base64url"
| "latin1" | "latin1"
| "binary" | "ascii"
| "hex"; | "ucs2"
| "ucs-2";
withFileTypes?: false; withFileTypes?: false;
recursive?: boolean; recursive?: boolean;
}, },
@ -14083,18 +14158,18 @@ declare interface ReaddirFs {
options: options:
| undefined | undefined
| null | null
| "ascii" | "base64"
| "base64url"
| "hex"
| "binary"
| "utf8" | "utf8"
| "utf-8" | "utf-8"
| "utf16le" | "utf16le"
| "utf-16le" | "utf-16le"
| "latin1"
| "ascii"
| "ucs2" | "ucs2"
| "ucs-2" | "ucs-2"
| "base64"
| "base64url"
| "latin1"
| "binary"
| "hex"
| (ObjectEncodingOptions & { | (ObjectEncodingOptions & {
withFileTypes?: false; withFileTypes?: false;
recursive?: boolean; recursive?: boolean;
@ -14133,33 +14208,33 @@ declare interface ReaddirSync {
path: PathLikeFs, path: PathLikeFs,
options?: options?:
| null | null
| "ascii" | "base64"
| "base64url"
| "hex"
| "binary"
| "utf8" | "utf8"
| "utf-8" | "utf-8"
| "utf16le" | "utf16le"
| "utf-16le" | "utf-16le"
| "latin1"
| "ascii"
| "ucs2" | "ucs2"
| "ucs-2" | "ucs-2"
| "base64"
| "base64url"
| "latin1"
| "binary"
| "hex"
| { | {
encoding: encoding:
| null | null
| "ascii" | "base64"
| "base64url"
| "hex"
| "binary"
| "utf8" | "utf8"
| "utf-8" | "utf-8"
| "utf16le" | "utf16le"
| "utf-16le" | "utf-16le"
| "ucs2"
| "ucs-2"
| "base64"
| "base64url"
| "latin1" | "latin1"
| "binary" | "ascii"
| "hex"; | "ucs2"
| "ucs-2";
withFileTypes?: false; withFileTypes?: false;
recursive?: boolean; recursive?: boolean;
} }
@ -14174,18 +14249,18 @@ declare interface ReaddirSync {
path: PathLikeFs, path: PathLikeFs,
options?: options?:
| null | null
| "ascii" | "base64"
| "base64url"
| "hex"
| "binary"
| "utf8" | "utf8"
| "utf-8" | "utf-8"
| "utf16le" | "utf16le"
| "utf-16le" | "utf-16le"
| "latin1"
| "ascii"
| "ucs2" | "ucs2"
| "ucs-2" | "ucs-2"
| "base64"
| "base64url"
| "latin1"
| "binary"
| "hex"
| (ObjectEncodingOptions & { withFileTypes?: false; recursive?: boolean }) | (ObjectEncodingOptions & { withFileTypes?: false; recursive?: boolean })
): string[] | Buffer[]; ): string[] | Buffer[];
( (
@ -14206,33 +14281,33 @@ declare interface ReaddirTypes {
options: options:
| undefined | undefined
| null | null
| "ascii" | "base64"
| "base64url"
| "hex"
| "binary"
| "utf8" | "utf8"
| "utf-8" | "utf-8"
| "utf16le" | "utf16le"
| "utf-16le" | "utf-16le"
| "latin1"
| "ascii"
| "ucs2" | "ucs2"
| "ucs-2" | "ucs-2"
| "base64"
| "base64url"
| "latin1"
| "binary"
| "hex"
| { | {
encoding: encoding:
| null | null
| "ascii" | "base64"
| "base64url"
| "hex"
| "binary"
| "utf8" | "utf8"
| "utf-8" | "utf-8"
| "utf16le" | "utf16le"
| "utf-16le" | "utf-16le"
| "ucs2"
| "ucs-2"
| "base64"
| "base64url"
| "latin1" | "latin1"
| "binary" | "ascii"
| "hex"; | "ucs2"
| "ucs-2";
withFileTypes?: false; withFileTypes?: false;
recursive?: boolean; recursive?: boolean;
}, },
@ -14250,18 +14325,18 @@ declare interface ReaddirTypes {
options: options:
| undefined | undefined
| null | null
| "ascii" | "base64"
| "base64url"
| "hex"
| "binary"
| "utf8" | "utf8"
| "utf-8" | "utf-8"
| "utf16le" | "utf16le"
| "utf-16le" | "utf-16le"
| "latin1"
| "ascii"
| "ucs2" | "ucs2"
| "ucs-2" | "ucs-2"
| "base64"
| "base64url"
| "latin1"
| "binary"
| "hex"
| (ObjectEncodingOptions & { | (ObjectEncodingOptions & {
withFileTypes?: false; withFileTypes?: false;
recursive?: boolean; recursive?: boolean;
@ -14363,12 +14438,12 @@ declare interface RealContentHashPluginOptions {
/** /**
* the hash function to use * the hash function to use
*/ */
hashFunction: string | typeof Hash; hashFunction: HashFunction;
/** /**
* the hash digest to use * the hash digest to use
*/ */
hashDigest?: string; hashDigest: HashDigest;
} }
declare interface RealDependencyLocation { declare interface RealDependencyLocation {
start: SourcePosition; start: SourcePosition;
@ -17758,18 +17833,18 @@ declare interface StreamChunksOptions {
declare interface StreamOptions { declare interface StreamOptions {
flags?: string; flags?: string;
encoding?: encoding?:
| "ascii" | "base64"
| "base64url"
| "hex"
| "binary"
| "utf8" | "utf8"
| "utf-8" | "utf-8"
| "utf16le" | "utf16le"
| "utf-16le" | "utf-16le"
| "ucs2"
| "ucs-2"
| "base64"
| "base64url"
| "latin1" | "latin1"
| "binary" | "ascii"
| "hex"; | "ucs2"
| "ucs-2";
fd?: any; fd?: any;
mode?: number; mode?: number;
autoClose?: boolean; autoClose?: boolean;
@ -18558,18 +18633,18 @@ declare interface WriteFile {
} }
type WriteFileOptions = type WriteFileOptions =
| null | null
| "ascii" | "base64"
| "base64url"
| "hex"
| "binary"
| "utf8" | "utf8"
| "utf-8" | "utf-8"
| "utf16le" | "utf16le"
| "utf-16le" | "utf-16le"
| "latin1"
| "ascii"
| "ucs2" | "ucs2"
| "ucs-2" | "ucs-2"
| "base64"
| "base64url"
| "latin1"
| "binary"
| "hex"
| (ObjectEncodingOptions & | (ObjectEncodingOptions &
Abortable & { mode?: string | number; flag?: string; flush?: boolean }); Abortable & { mode?: string | number; flag?: string; flush?: boolean });
declare interface WriteOnlySet<T> { declare interface WriteOnlySet<T> {

197
yarn.lock
View File

@ -811,10 +811,12 @@
debug "^4.3.1" debug "^4.3.1"
minimatch "^3.1.2" minimatch "^3.1.2"
"@eslint/config-helpers@^0.3.1": "@eslint/config-helpers@^0.4.0":
version "0.3.1" version "0.4.0"
resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.3.1.tgz#d316e47905bd0a1a931fa50e669b9af4104d1617" resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.4.0.tgz#e9f94ba3b5b875e32205cb83fece18e64486e9e6"
integrity sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA== integrity sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==
dependencies:
"@eslint/core" "^0.16.0"
"@eslint/core@^0.15.2": "@eslint/core@^0.15.2":
version "0.15.2" version "0.15.2"
@ -823,6 +825,13 @@
dependencies: dependencies:
"@types/json-schema" "^7.0.15" "@types/json-schema" "^7.0.15"
"@eslint/core@^0.16.0":
version "0.16.0"
resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.16.0.tgz#490254f275ba9667ddbab344f4f0a6b7a7bd7209"
integrity sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==
dependencies:
"@types/json-schema" "^7.0.15"
"@eslint/eslintrc@^3.3.1": "@eslint/eslintrc@^3.3.1":
version "3.3.1" version "3.3.1"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.1.tgz#e55f7f1dd400600dd066dbba349c4c0bac916964" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.1.tgz#e55f7f1dd400600dd066dbba349c4c0bac916964"
@ -838,18 +847,18 @@
minimatch "^3.1.2" minimatch "^3.1.2"
strip-json-comments "^3.1.1" strip-json-comments "^3.1.1"
"@eslint/js@9.36.0", "@eslint/js@^9.36.0": "@eslint/js@9.37.0", "@eslint/js@^9.36.0":
version "9.36.0" version "9.37.0"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.36.0.tgz#b1a3893dd6ce2defed5fd49de805ba40368e8fef" resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.37.0.tgz#0cfd5aa763fe5d1ee60bedf84cd14f54bcf9e21b"
integrity sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw== integrity sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==
"@eslint/markdown@^7.3.0": "@eslint/markdown@^7.3.0":
version "7.3.0" version "7.4.0"
resolved "https://registry.yarnpkg.com/@eslint/markdown/-/markdown-7.3.0.tgz#c92c556c90253c04f6fe4665115502b488cc3662" resolved "https://registry.yarnpkg.com/@eslint/markdown/-/markdown-7.4.0.tgz#61fed37c5199196104b522be4a9f0d42be601b2c"
integrity sha512-v9Cpl9IvzGmWMUwDAwSbf1b2GMwjQJiD0TSHegFrIu23mjqGQOvaCwnetzbG3/fjk8x7baKaIbSTBlpCktZRRg== integrity sha512-VQykmMjBb4tQoJOXVWXa+oQbQeCZlE7W3rAsOpmtpKLvJd75saZZ04PVVs7+zgMDJGghd4/gyFV6YlvdJFaeNQ==
dependencies: dependencies:
"@eslint/core" "^0.15.2" "@eslint/core" "^0.16.0"
"@eslint/plugin-kit" "^0.3.5" "@eslint/plugin-kit" "^0.4.0"
github-slugger "^2.0.0" github-slugger "^2.0.0"
mdast-util-from-markdown "^2.0.2" mdast-util-from-markdown "^2.0.2"
mdast-util-frontmatter "^2.0.1" mdast-util-frontmatter "^2.0.1"
@ -863,7 +872,7 @@
resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.6.tgz#58369ab5b5b3ca117880c0f6c0b0f32f6950f24f" resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.6.tgz#58369ab5b5b3ca117880c0f6c0b0f32f6950f24f"
integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==
"@eslint/plugin-kit@^0.3.3", "@eslint/plugin-kit@^0.3.5": "@eslint/plugin-kit@^0.3.3":
version "0.3.5" version "0.3.5"
resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz#fd8764f0ee79c8ddab4da65460c641cefee017c5" resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz#fd8764f0ee79c8ddab4da65460c641cefee017c5"
integrity sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w== integrity sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==
@ -871,6 +880,14 @@
"@eslint/core" "^0.15.2" "@eslint/core" "^0.15.2"
levn "^0.4.1" levn "^0.4.1"
"@eslint/plugin-kit@^0.4.0":
version "0.4.0"
resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz#f6a245b42886abf6fc9c7ab7744a932250335ab2"
integrity sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==
dependencies:
"@eslint/core" "^0.16.0"
levn "^0.4.1"
"@humanfs/core@^0.19.1": "@humanfs/core@^0.19.1":
version "0.19.1" version "0.19.1"
resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77"
@ -1490,11 +1507,11 @@
integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==
"@types/node@*", "@types/node@^24.5.2": "@types/node@*", "@types/node@^24.5.2":
version "24.6.0" version "24.7.0"
resolved "https://registry.yarnpkg.com/@types/node/-/node-24.6.0.tgz#5dd8d4eca0bba7dd81d853e7fadc96b322ff84f6" resolved "https://registry.yarnpkg.com/@types/node/-/node-24.7.0.tgz#a34c9f0d3401db396782e440317dd5d8373c286f"
integrity sha512-F1CBxgqwOMc4GKJ7eY22hWhBVQuMYTtqI8L0FcszYcpYX0fzfDGpez22Xau8Mgm7O9fI+zA/TYIdq3tGWfweBA== integrity sha512-IbKooQVqUBrlzWTi79E8Fw78l8k1RNtlDDNWsFZs7XonuQSJ8oNYfEeclhprUldXISRMLzBpILuKgPlIxm+/Yw==
dependencies: dependencies:
undici-types "~7.13.0" undici-types "~7.14.0"
"@types/stack-utils@^2.0.3": "@types/stack-utils@^2.0.3":
version "2.0.3" version "2.0.3"
@ -1979,7 +1996,7 @@ ansi-styles@^5.2.0:
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1: ansi-styles@^6.1.0, ansi-styles@^6.2.1:
version "6.2.1" version "6.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
@ -2418,7 +2435,7 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2:
ansi-styles "^4.1.0" ansi-styles "^4.1.0"
supports-color "^7.1.0" supports-color "^7.1.0"
chalk@^5.2.0, chalk@^5.4.1, chalk@^5.6.0: chalk@^5.2.0, chalk@^5.4.1:
version "5.6.0" version "5.6.0"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.0.tgz#a1a8d294ea3526dbb77660f12649a08490e33ab8" resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.0.tgz#a1a8d294ea3526dbb77660f12649a08490e33ab8"
integrity sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ== integrity sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==
@ -2510,13 +2527,13 @@ cli-cursor@^5.0.0:
dependencies: dependencies:
restore-cursor "^5.0.0" restore-cursor "^5.0.0"
cli-truncate@^4.0.0: cli-truncate@^5.0.0:
version "4.0.0" version "5.1.0"
resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-4.0.0.tgz#6cc28a2924fee9e25ce91e973db56c7066e6172a" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-5.1.0.tgz#bb12607a62f0e4bb91a54aa4653b23347900bb55"
integrity sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA== integrity sha512-7JDGG+4Zp0CsknDCedl0DYdaeOhc46QNpXi3NLQblkZpXXgA6LncLDUUyvrjSvZeF3VRQa+KiMGomazQrC1V8g==
dependencies: dependencies:
slice-ansi "^5.0.0" slice-ansi "^7.1.0"
string-width "^7.0.0" string-width "^8.0.0"
cliui@^6.0.0: cliui@^6.0.0:
version "6.0.0" version "6.0.0"
@ -2608,10 +2625,10 @@ commander@^12.1.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3"
integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==
commander@^14.0.0: commander@^14.0.0, commander@^14.0.1:
version "14.0.0" version "14.0.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.0.tgz#f244fc74a92343514e56229f16ef5c5e22ced5e9" resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.1.tgz#2f9225c19e6ebd0dc4404dd45821b2caa17ea09b"
integrity sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA== integrity sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==
commander@^2.20.0: commander@^2.20.0:
version "2.20.3" version "2.20.3"
@ -3479,18 +3496,18 @@ eslint-visitor-keys@^4.2.1:
integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==
eslint@^9.36.0: eslint@^9.36.0:
version "9.36.0" version "9.37.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.36.0.tgz#9cc5cbbfb9c01070425d9bfed81b4e79a1c09088" resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.37.0.tgz#ac0222127f76b09c0db63036f4fe289562072d74"
integrity sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ== integrity sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==
dependencies: dependencies:
"@eslint-community/eslint-utils" "^4.8.0" "@eslint-community/eslint-utils" "^4.8.0"
"@eslint-community/regexpp" "^4.12.1" "@eslint-community/regexpp" "^4.12.1"
"@eslint/config-array" "^0.21.0" "@eslint/config-array" "^0.21.0"
"@eslint/config-helpers" "^0.3.1" "@eslint/config-helpers" "^0.4.0"
"@eslint/core" "^0.15.2" "@eslint/core" "^0.16.0"
"@eslint/eslintrc" "^3.3.1" "@eslint/eslintrc" "^3.3.1"
"@eslint/js" "9.36.0" "@eslint/js" "9.37.0"
"@eslint/plugin-kit" "^0.3.5" "@eslint/plugin-kit" "^0.4.0"
"@humanfs/node" "^0.16.6" "@humanfs/node" "^0.16.6"
"@humanwhocodes/module-importer" "^1.0.1" "@humanwhocodes/module-importer" "^1.0.1"
"@humanwhocodes/retry" "^0.4.2" "@humanwhocodes/retry" "^0.4.2"
@ -3972,6 +3989,11 @@ get-east-asian-width@^1.0.0:
resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz#21b4071ee58ed04ee0db653371b55b4299875389" resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz#21b4071ee58ed04ee0db653371b55b4299875389"
integrity sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ== integrity sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==
get-east-asian-width@^1.3.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz#9bc4caa131702b4b61729cb7e42735bc550c9ee6"
integrity sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==
get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0:
version "1.3.0" version "1.3.0"
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01"
@ -4469,11 +4491,6 @@ is-fullwidth-code-point@^3.0.0:
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
is-fullwidth-code-point@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88"
integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==
is-fullwidth-code-point@^5.0.0: is-fullwidth-code-point@^5.0.0:
version "5.0.0" version "5.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz#9609efced7c2f97da7b60145ef481c787c7ba704" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz#9609efced7c2f97da7b60145ef481c787c7ba704"
@ -5304,9 +5321,9 @@ less-loader@^12.2.0:
integrity sha512-0M6+uYulvYIWs52y0LqN4+QM9TqWAohYSNTo4htE8Z7Cn3G/qQMEmktfHmyJT23k+20kU9zHH2wrfFXkxNLtVw== integrity sha512-0M6+uYulvYIWs52y0LqN4+QM9TqWAohYSNTo4htE8Z7Cn3G/qQMEmktfHmyJT23k+20kU9zHH2wrfFXkxNLtVw==
less@^4.0.0: less@^4.0.0:
version "4.4.1" version "4.4.2"
resolved "https://registry.yarnpkg.com/less/-/less-4.4.1.tgz#2f97168bf887ca6a9957ee69e16cc34f8b007cc7" resolved "https://registry.yarnpkg.com/less/-/less-4.4.2.tgz#fa4291fdb0334de91163622cc038f4bd3eb6b8d7"
integrity sha512-X9HKyiXPi0f/ed0XhgUlBeFfxrlDP3xR4M7768Zl+WXLUViuL9AOPPJP4nCV0tgRWvTYvpNmN0SFhZOQzy16PA== integrity sha512-j1n1IuTX1VQjIy3tT7cyGbX7nvQOsFLoIqobZv4ttI5axP923gA44zUj6miiA6R5Aoms4sEGVIIcucXUbRI14g==
dependencies: dependencies:
copy-anything "^2.0.1" copy-anything "^2.0.1"
parse-node-version "^1.0.1" parse-node-version "^1.0.1"
@ -5341,38 +5358,30 @@ levn@~0.3.0:
prelude-ls "~1.1.2" prelude-ls "~1.1.2"
type-check "~0.3.2" type-check "~0.3.2"
lilconfig@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4"
integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==
lines-and-columns@^1.1.6: lines-and-columns@^1.1.6:
version "1.2.4" version "1.2.4"
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
lint-staged@^16.1.2: lint-staged@^16.1.2:
version "16.1.6" version "16.2.3"
resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-16.1.6.tgz#b0830df339a71f4207979a47c7be8ab0f38543ad" resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-16.2.3.tgz#790866221d75602510507b5be40b2c7963715960"
integrity sha512-U4kuulU3CKIytlkLlaHcGgKscNfJPNTiDF2avIUGFCv7K95/DCYQ7Ra62ydeRWmgQGg9zJYw2dzdbztwJlqrow== integrity sha512-1OnJEESB9zZqsp61XHH2fvpS1es3hRCxMplF/AJUDa8Ho8VrscYDIuxGrj3m8KPXbcWZ8fT9XTMUhEQmOVKpKw==
dependencies: dependencies:
chalk "^5.6.0" commander "^14.0.1"
commander "^14.0.0" listr2 "^9.0.4"
debug "^4.4.1"
lilconfig "^3.1.3"
listr2 "^9.0.3"
micromatch "^4.0.8" micromatch "^4.0.8"
nano-spawn "^1.0.2" nano-spawn "^1.0.3"
pidtree "^0.6.0" pidtree "^0.6.0"
string-argv "^0.3.2" string-argv "^0.3.2"
yaml "^2.8.1" yaml "^2.8.1"
listr2@^9.0.3: listr2@^9.0.4:
version "9.0.3" version "9.0.4"
resolved "https://registry.yarnpkg.com/listr2/-/listr2-9.0.3.tgz#5181284019e1d577dc2d705ca6d3a148cf15adf3" resolved "https://registry.yarnpkg.com/listr2/-/listr2-9.0.4.tgz#2916e633ae6e09d1a3f981172937ac1c5a8fa64f"
integrity sha512-0aeh5HHHgmq1KRdMMDHfhMWQmIT/m7nRDTlxlFqni2Sp0had9baqsjJRvDGdlvgd6NmPE0nPloOipiQJGFtTHQ== integrity sha512-1wd/kpAdKRLwv7/3OKC8zZ5U8e/fajCfWMxacUvB79S5nLrYGPtUI/8chMQhn3LQjsRVErTb9i1ECAwW0ZIHnQ==
dependencies: dependencies:
cli-truncate "^4.0.0" cli-truncate "^5.0.0"
colorette "^2.0.20" colorette "^2.0.20"
eventemitter3 "^5.0.1" eventemitter3 "^5.0.1"
log-update "^6.1.0" log-update "^6.1.0"
@ -5682,9 +5691,9 @@ memfs@^3.4.1:
fs-monkey "^1.0.4" fs-monkey "^1.0.4"
memfs@^4.14.0: memfs@^4.14.0:
version "4.39.0" version "4.49.0"
resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.39.0.tgz#fa3bea08ba4eb736bbb024eced25859cb1d0e13a" resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.49.0.tgz#bc35069570d41a31c62e31f1a6ec6057a8ea82f0"
integrity sha512-tFRr2IkSXl2B6IAJsxjHIMTOsfLt9W+8+t2uNxCeQcz4tFqgQR8DYk8hlLH2HsucTctLuoHq3U0G08atyBE3yw== integrity sha512-L9uC9vGuc4xFybbdOpRLoOAOq1YEBBsocCs5NVW32DfU+CZWWIn3OVF+lB8Gp4ttBVSMazwrTrjv8ussX/e3VQ==
dependencies: dependencies:
"@jsonjoy.com/json-pack" "^1.11.0" "@jsonjoy.com/json-pack" "^1.11.0"
"@jsonjoy.com/util" "^1.9.0" "@jsonjoy.com/util" "^1.9.0"
@ -6166,10 +6175,10 @@ mz@^2.7.0:
object-assign "^4.0.1" object-assign "^4.0.1"
thenify-all "^1.0.0" thenify-all "^1.0.0"
nano-spawn@^1.0.2: nano-spawn@^1.0.3:
version "1.0.2" version "1.0.3"
resolved "https://registry.yarnpkg.com/nano-spawn/-/nano-spawn-1.0.2.tgz#9853795681f0e96ef6f39104c2e4347b6ba79bf6" resolved "https://registry.yarnpkg.com/nano-spawn/-/nano-spawn-1.0.3.tgz#ef8d89a275eebc8657e67b95fc312a6527a05b8d"
integrity sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg== integrity sha512-jtpsQDetTnvS2Ts1fiRdci5rx0VYws5jGyC+4IYOTnIQ/wwdf6JdomlHBwqC3bJYOvaKu0C2GSZ1A60anrYpaA==
nanoid@^3.3.11: nanoid@^3.3.11:
version "3.3.11" version "3.3.11"
@ -6933,11 +6942,11 @@ raw-loader@~0.5.1:
integrity sha512-sf7oGoLuaYAScB4VGr0tzetsYlS8EJH6qnTCfQ/WVEa89hALQ4RQfCKt5xCyPQKPDUbVUAIP1QsxAwfAjlDp7Q== integrity sha512-sf7oGoLuaYAScB4VGr0tzetsYlS8EJH6qnTCfQ/WVEa89hALQ4RQfCKt5xCyPQKPDUbVUAIP1QsxAwfAjlDp7Q==
react-dom@^19.0.0: react-dom@^19.0.0:
version "19.1.1" version "19.2.0"
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.1.1.tgz#2daa9ff7f3ae384aeb30e76d5ee38c046dc89893" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.2.0.tgz#00ed1e959c365e9a9d48f8918377465466ec3af8"
integrity sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw== integrity sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==
dependencies: dependencies:
scheduler "^0.26.0" scheduler "^0.27.0"
react-is@^18.3.1: react-is@^18.3.1:
version "18.3.1" version "18.3.1"
@ -6945,9 +6954,9 @@ react-is@^18.3.1:
integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==
react@^19.0.0: react@^19.0.0:
version "19.1.1" version "19.2.0"
resolved "https://registry.yarnpkg.com/react/-/react-19.1.1.tgz#06d9149ec5e083a67f9a1e39ce97b06a03b644af" resolved "https://registry.yarnpkg.com/react/-/react-19.2.0.tgz#d33dd1721698f4376ae57a54098cb47fc75d93a5"
integrity sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ== integrity sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==
readable-stream@^4.7.0: readable-stream@^4.7.0:
version "4.7.0" version "4.7.0"
@ -7165,10 +7174,10 @@ sax@^1.2.4:
resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f"
integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==
scheduler@^0.26.0: scheduler@^0.27.0:
version "0.26.0" version "0.27.0"
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.26.0.tgz#4ce8a8c2a2095f13ea11bf9a445be50c555d6337" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.27.0.tgz#0c4ef82d67d1e5c1e359e8fc76d3a87f045fe5bd"
integrity sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA== integrity sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==
schema-utils@^3.0.0, schema-utils@^3.1.1: schema-utils@^3.0.0, schema-utils@^3.1.1:
version "3.3.0" version "3.3.0"
@ -7337,14 +7346,6 @@ slash@^3.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
slice-ansi@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a"
integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==
dependencies:
ansi-styles "^6.0.0"
is-fullwidth-code-point "^4.0.0"
slice-ansi@^7.1.0: slice-ansi@^7.1.0:
version "7.1.0" version "7.1.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-7.1.0.tgz#cd6b4655e298a8d1bdeb04250a433094b347b9a9" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-7.1.0.tgz#cd6b4655e298a8d1bdeb04250a433094b347b9a9"
@ -7552,6 +7553,14 @@ string-width@^7.0.0:
get-east-asian-width "^1.0.0" get-east-asian-width "^1.0.0"
strip-ansi "^7.1.0" strip-ansi "^7.1.0"
string-width@^8.0.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-8.1.0.tgz#9e9fb305174947cf45c30529414b5da916e9e8d1"
integrity sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==
dependencies:
get-east-asian-width "^1.3.0"
strip-ansi "^7.1.0"
string.prototype.trim@^1.2.10: string.prototype.trim@^1.2.10:
version "1.2.10" version "1.2.10"
resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81"
@ -7993,10 +8002,10 @@ unbox-primitive@^1.1.0:
has-symbols "^1.1.0" has-symbols "^1.1.0"
which-boxed-primitive "^1.1.1" which-boxed-primitive "^1.1.1"
undici-types@~7.13.0: undici-types@~7.14.0:
version "7.13.0" version "7.14.0"
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.13.0.tgz#a20ba7c0a2be0c97bd55c308069d29d167466bff" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.14.0.tgz#4c037b32ca4d7d62fae042174604341588bc0840"
integrity sha512-Ov2Rr9Sx+fRgagJ5AX0qvItZG/JKKoBRAVITs1zk7IqZGTJUwgUr7qoYBpWwakpWilTZFM98rG/AFRocu10iIQ== integrity sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==
unique-filename@^4.0.0: unique-filename@^4.0.0:
version "4.0.0" version "4.0.0"