UNPKG

webpack-chunk-report-plugin

Version:

Webpack Chunk Report Plugin

96 lines (95 loc) 4.29 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.METADATA_KEY = void 0; exports.createWebpackConfig = createWebpackConfig; exports.withChunkReportPlugin = withChunkReportPlugin; // libs const path_1 = __importDefault(require("path")); const webpack_merge_1 = require("webpack-merge"); // plugins const webpack_bundle_analyzer_1 = require("webpack-bundle-analyzer"); const ChunkReportPlugin_1 = require("./ChunkReportPlugin"); // rules const transformReactComponentSource_1 = require("./rules/transformReactComponentSource"); /** * Creates a higher-order function for Webpack configuration * @param baseConfig - The base Webpack configuration * @param hocs - Array of configuration higher-order functions * @returns Merged Webpack configuration */ function createWebpackConfig(baseConfig, ...hocs) { return hocs.reduce((config, hoc) => hoc(config), baseConfig); } function withChunkReportPlugin(options = {}) { return (config, context) => { const { enabled, outputDirectory, emitChunkIdVsModuleData, disableTreeShaking, useBabel = true, ...restOptions } = options; if (!enabled) { return config; } const runtime = context?.nextRuntime || "client"; const reportFilename = options.reportFilename ?? `./analyze/${runtime}.json`; const analyzerMode = "json"; const openAnalyzer = options.openAnalyzer !== undefined ? options.openAnalyzer : false; const newConfig = { module: { rules: [ useBabel ? { test: /\.(js|jsx|ts|tsx)$/, exclude: /node_modules/, use: { loader: "babel-loader", options: { presets: [ "@babel/preset-env", "@babel/preset-react", "@babel/preset-typescript", // if using TypeScript ], plugins: [ // Add your plugin here (assuming it's in src/babel/transform-react-component-source.js) [ path_1.default.resolve(__dirname, "rules/babel/transformReactComponentSource.js"), ], ], }, }, } : { test: /\.[jt]sx?$/, // Matches .js, .jsx, .ts, .tsx exclude: /node_modules/, use: { loader: "ts-loader", options: { getCustomTransformers: () => ({ before: [(0, transformReactComponentSource_1.transformReactComponentSource)()], }), transpileOnly: true, }, }, }, ], }, plugins: [ new webpack_bundle_analyzer_1.BundleAnalyzerPlugin({ ...restOptions, analyzerMode, openAnalyzer, reportFilename, }), new ChunkReportPlugin_1.ChunkReportPlugin({ runtime, reportFilename, outputDirectory, emitChunkIdVsModuleData, disableTreeShaking, }), ], }; return (0, webpack_merge_1.merge)(config, newConfig); }; } var constants_1 = require("./rules/constants"); Object.defineProperty(exports, "METADATA_KEY", { enumerable: true, get: function () { return constants_1.METADATA_KEY; } });