UNPKG

@sentre/craco-plugins

Version:
44 lines (42 loc) 1.44 kB
"use strict"; /** * WebAssembly loader for Webpack 5 */ var overrideWebpackConfig = function overrideWebpackConfig(_ref) { var context = _ref.context, webpackConfig = _ref.webpackConfig, pluginOptions = _ref.pluginOptions; var wasmExtensionRegExp = /\.wasm$/; // Add additional extension for WASM and enable WASM webpackConfig.resolve.extensions.push('.wasm'); webpackConfig.experiments = { asyncWebAssembly: true }; // Exclude the extension from asset/resource var oneOfRule = webpackConfig.module.rules.find(function (rule) { return rule.oneOf; }); if (!oneOfRule) { throw new Error("Can't find a 'oneOf' rule under module.rules in the ".concat(context.env, " webpack config!"), 'webpack+rules+oneOf'); } var assetResourceIndex = oneOfRule.oneOf.findIndex(function (rule) { return rule.type === 'asset/resource'; }); if (!oneOfRule.oneOf[assetResourceIndex].exclude) oneOfRule.oneOf[assetResourceIndex].exclude = []; oneOfRule.oneOf[assetResourceIndex].exclude.push(wasmExtensionRegExp); // Add the wasm loader var wasmLoader = { test: wasmExtensionRegExp, exclude: /node_modules/, use: [{ loader: 'wasm-loader' }], // Webpack 5 natively supports wasm-loader type: 'webassembly/async' }; oneOfRule.oneOf.splice(assetResourceIndex, 0, wasmLoader); return webpackConfig; }; module.exports = { overrideWebpackConfig: overrideWebpackConfig };