Files
klz-cables.com/.pnpm-store/v10/files/e8/1ac579faf8731dcdeacf1d779e67257973f2ce99ea19c330c406a52cef08a5ada07335d2989e25837587a2625c2f220887e0d1d14e0e0f8acc3c8fc62a03fe
Marc Mintel 5397309103
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
fix(products): fix breadcrumbs and product filtering (backport from main)
2026-02-24 16:04:21 +01:00

152 lines
4.2 KiB
Plaintext

/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
"use strict";
const Generator = require("../Generator");
const {
JAVASCRIPT_TYPE,
WEBASSEMBLY_TYPE
} = require("../ModuleSourceTypeConstants");
const { WEBASSEMBLY_MODULE_TYPE_SYNC } = require("../ModuleTypeConstants");
const WebAssemblyExportImportedDependency = require("../dependencies/WebAssemblyExportImportedDependency");
const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
const { compareModulesByFullName } = require("../util/comparators");
const memoize = require("../util/memoize");
const WebAssemblyInInitialChunkError = require("./WebAssemblyInInitialChunkError");
/** @typedef {import("../Compiler")} Compiler */
/** @typedef {import("../Module")} Module */
const getWebAssemblyGenerator = memoize(() =>
require("./WebAssemblyGenerator")
);
const getWebAssemblyJavascriptGenerator = memoize(() =>
require("./WebAssemblyJavascriptGenerator")
);
const getWebAssemblyParser = memoize(() => require("./WebAssemblyParser"));
const PLUGIN_NAME = "WebAssemblyModulesPlugin";
/**
* @typedef {object} WebAssemblyModulesPluginOptions
* @property {boolean=} mangleImports mangle imports
*/
class WebAssemblyModulesPlugin {
/**
* @param {WebAssemblyModulesPluginOptions} options options
*/
constructor(options) {
this.options = options;
}
/**
* Apply the plugin
* @param {Compiler} compiler the compiler instance
* @returns {void}
*/
apply(compiler) {
compiler.hooks.compilation.tap(
PLUGIN_NAME,
(compilation, { normalModuleFactory }) => {
compilation.dependencyFactories.set(
WebAssemblyImportDependency,
normalModuleFactory
);
compilation.dependencyFactories.set(
WebAssemblyExportImportedDependency,
normalModuleFactory
);
normalModuleFactory.hooks.createParser
.for(WEBASSEMBLY_MODULE_TYPE_SYNC)
.tap(PLUGIN_NAME, () => {
const WebAssemblyParser = getWebAssemblyParser();
return new WebAssemblyParser();
});
normalModuleFactory.hooks.createGenerator
.for(WEBASSEMBLY_MODULE_TYPE_SYNC)
.tap(PLUGIN_NAME, () => {
const WebAssemblyJavascriptGenerator =
getWebAssemblyJavascriptGenerator();
const WebAssemblyGenerator = getWebAssemblyGenerator();
return Generator.byType({
[JAVASCRIPT_TYPE]: new WebAssemblyJavascriptGenerator(),
[WEBASSEMBLY_TYPE]: new WebAssemblyGenerator(this.options)
});
});
compilation.hooks.renderManifest.tap(PLUGIN_NAME, (result, options) => {
const { chunkGraph } = compilation;
const { chunk, outputOptions, codeGenerationResults } = options;
for (const module of chunkGraph.getOrderedChunkModulesIterable(
chunk,
compareModulesByFullName(compiler)
)) {
if (module.type === WEBASSEMBLY_MODULE_TYPE_SYNC) {
const filenameTemplate = outputOptions.webassemblyModuleFilename;
result.push({
render: () =>
codeGenerationResults.getSource(
module,
chunk.runtime,
"webassembly"
),
filenameTemplate,
pathOptions: {
module,
runtime: chunk.runtime,
chunkGraph
},
auxiliary: true,
identifier: `webassemblyModule${chunkGraph.getModuleId(
module
)}`,
hash: chunkGraph.getModuleHash(module, chunk.runtime)
});
}
}
return result;
});
compilation.hooks.afterChunks.tap(PLUGIN_NAME, () => {
const chunkGraph = compilation.chunkGraph;
/** @type {Set<Module>} */
const initialWasmModules = new Set();
for (const chunk of compilation.chunks) {
if (chunk.canBeInitial()) {
for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
if (module.type === WEBASSEMBLY_MODULE_TYPE_SYNC) {
initialWasmModules.add(module);
}
}
}
}
for (const module of initialWasmModules) {
compilation.errors.push(
new WebAssemblyInInitialChunkError(
module,
compilation.moduleGraph,
compilation.chunkGraph,
compilation.requestShortener
)
);
}
});
}
);
}
}
module.exports = WebAssemblyModulesPlugin;