{"version":3,"file":"config.mjs","sources":["../../../../src/node/webpack/config.ts"],"sourcesContent":["import ReactRefreshWebpackPlugin from '@pmmmwh/react-refresh-webpack-plugin';\nimport { EsbuildPlugin } from 'esbuild-loader';\nimport ForkTsCheckerPlugin from 'fork-ts-checker-webpack-plugin';\nimport HtmlWebpackPlugin from 'html-webpack-plugin';\nimport MiniCssExtractPlugin from 'mini-css-extract-plugin';\nimport crypto from 'node:crypto';\nimport path from 'node:path';\nimport { Configuration, DefinePlugin, HotModuleReplacementPlugin } from 'webpack';\nimport { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';\n\nimport { loadStrapiMonorepo } from '../core/monorepo';\nimport type { BuildContext } from '../create-build-context';\nimport { getUserConfig } from '../core/config';\nimport { getLinkedDesignSystemPath } from '../core/linked-packages';\nimport { getMonorepoAliases } from '../core/aliases';\nimport { getModulePath } from '../core/resolve-module';\nimport { buildSingletonAliasEntries } from '../core/admin-vite-aliases';\n\nconst resolveBaseConfig = async (ctx: BuildContext) => {\n  const { default: browserslistToEsbuild } = await import('browserslist-to-esbuild');\n  const target = browserslistToEsbuild(ctx.target);\n\n  return {\n    experiments: {\n      topLevelAwait: true,\n    },\n    entry: {\n      main: [`./${ctx.entry}`],\n    },\n    resolve: {\n      alias: {\n        react: getModulePath('react'),\n        'react-dom': getModulePath('react-dom'),\n        'styled-components': getModulePath('styled-components'),\n        'react-router-dom': getModulePath('react-router-dom'),\n        // Force single instance so plugin custom field chunks inherit root DesignSystemProvider context\n        '@strapi/design-system': getModulePath('@strapi/design-system'),\n        // Force a single CodeMirror instance (resolved from design-system's closure) so the JSON\n        // custom field does not crash on cross-copy instanceof checks. Tolerant: unresolvable\n        // optional/transitive CodeMirror packages are skipped\n        ...Object.fromEntries(buildSingletonAliasEntries()),\n        '@radix-ui/react-tooltip': getModulePath('@radix-ui/react-tooltip'),\n      },\n      extensions: ['.js', '.jsx', '.react.js', '.ts', '.tsx'],\n    },\n    module: {\n      rules: [\n        {\n          test: /\\.(ts|tsx)$/,\n          loader: require.resolve('esbuild-loader'),\n          options: {\n            loader: 'tsx',\n            target,\n            jsx: 'automatic',\n          },\n        },\n        {\n          test: /\\.(js|jsx|mjs)$/,\n          use: {\n            loader: require.resolve('esbuild-loader'),\n            options: {\n              loader: 'jsx',\n              target,\n              jsx: 'automatic',\n            },\n          },\n        },\n        {\n          test: /\\.m?js/,\n          resolve: {\n            fullySpecified: false,\n          },\n        },\n        {\n          test: /\\.css$/i,\n          use: [require.resolve('style-loader'), require.resolve('css-loader')],\n        },\n        {\n          test: /\\.(svg|eot|otf|ttf|woff|woff2)$/,\n          type: 'asset/resource',\n        },\n        {\n          test: [/\\.bmp$/, /\\.gif$/, /\\.jpe?g$/, /\\.png$/, /\\.ico$/],\n          type: 'asset',\n          parser: {\n            dataUrlCondition: {\n              maxSize: 1000,\n            },\n          },\n        },\n        {\n          test: /\\.(mp4|webm)$/,\n          type: 'asset',\n          parser: {\n            dataUrlCondition: {\n              maxSize: 10000,\n            },\n          },\n        },\n      ],\n    },\n    plugins: [\n      new HtmlWebpackPlugin({\n        inject: true,\n        template: path.resolve(ctx.runtimeDir, 'index.html'),\n      }),\n      new DefinePlugin(\n        Object.entries(ctx.env).reduce<Record<string, string>>((acc, [key, value]) => {\n          acc[`process.env.${key}`] = JSON.stringify(value);\n          return acc;\n        }, {})\n      ),\n      ctx.tsconfig &&\n        new ForkTsCheckerPlugin({\n          typescript: {\n            configFile: ctx.tsconfig.path,\n            configOverwrite: {\n              compilerOptions: {\n                sourceMap: ctx.options.sourcemaps,\n              },\n            },\n          },\n        }),\n    ].filter(Boolean),\n  };\n};\n\nconst resolveDevelopmentConfig = async (ctx: BuildContext): Promise<Configuration> => {\n  const baseConfig = await resolveBaseConfig(ctx);\n  const monorepo = await loadStrapiMonorepo(ctx.cwd);\n  const linkedDesignSystemPath = getLinkedDesignSystemPath();\n\n  return {\n    ...baseConfig,\n    cache: {\n      type: 'filesystem',\n      // version cache when there are changes to aliases\n      buildDependencies: {\n        config: [__filename],\n        // When design-system is linked, invalidate cache when it changes\n        ...(linkedDesignSystemPath && {\n          designSystem: [path.join(linkedDesignSystemPath, 'dist')],\n        }),\n      },\n      version: crypto\n        .createHash('md5')\n        .update(Object.entries(baseConfig.resolve.alias ?? {}).join())\n        .digest('hex'),\n    },\n    resolve: {\n      ...baseConfig.resolve,\n      alias: {\n        ...baseConfig.resolve.alias,\n        ...getMonorepoAliases({ monorepo }),\n      },\n    },\n    entry: {\n      ...baseConfig.entry,\n      main: [\n        `${require.resolve('webpack-hot-middleware/client')}?path=/__webpack_hmr`,\n        ...baseConfig.entry.main,\n      ],\n    },\n    stats: 'errors-warnings',\n    mode: 'development',\n    devtool: 'inline-source-map',\n    output: {\n      filename: '[name].js',\n      path: ctx.distPath,\n      publicPath: `${ctx.basePath.replace(/\\/$/, '')}/`,\n    },\n    infrastructureLogging: {\n      level: 'error',\n    },\n    plugins: [\n      ...baseConfig.plugins,\n      new HotModuleReplacementPlugin(),\n      new ReactRefreshWebpackPlugin(),\n    ],\n  };\n};\n\nconst resolveProductionConfig = async (ctx: BuildContext): Promise<Configuration> => {\n  const { default: browserslistToEsbuild } = await import('browserslist-to-esbuild');\n  const target = browserslistToEsbuild(ctx.target);\n\n  const baseConfig = await resolveBaseConfig(ctx);\n\n  return {\n    ...baseConfig,\n    stats: 'errors-only',\n    mode: 'production',\n    bail: true,\n    devtool: ctx.options.sourcemaps ? 'source-map' : false,\n    output: {\n      path: ctx.distPath,\n      publicPath: `${ctx.basePath.replace(/\\/$/, '')}/`,\n      // Utilize long-term caching by adding content hashes (not compilation hashes)\n      // to compiled assets for production\n      filename: '[name].[contenthash:8].js',\n      chunkFilename: '[name].[contenthash:8].chunk.js',\n    },\n    optimization: {\n      minimize: ctx.options.minify,\n      minimizer: [\n        new EsbuildPlugin({\n          target,\n          css: true, // Apply minification to CSS assets\n        }),\n      ],\n      moduleIds: 'deterministic',\n      runtimeChunk: true,\n    },\n    plugins: [\n      ...baseConfig.plugins,\n      new MiniCssExtractPlugin({\n        filename: '[name].[chunkhash].css',\n        chunkFilename: '[name].[chunkhash].chunkhash.css',\n        ignoreOrder: true,\n      }),\n      ctx.options.stats && new BundleAnalyzerPlugin(),\n    ].filter(Boolean),\n  };\n};\n\nconst USER_CONFIGS = ['webpack.config.js', 'webpack.config.mjs', 'webpack.config.ts'];\n\ntype UserWebpackConfig = (config: Configuration, webpack: unknown) => Configuration;\n\nconst mergeConfigWithUserConfig = async (config: Configuration, ctx: BuildContext) => {\n  const userConfig = await getUserConfig<UserWebpackConfig>(USER_CONFIGS, ctx);\n\n  if (userConfig) {\n    if (typeof userConfig === 'function') {\n      const webpack = await import('webpack');\n      return userConfig(config, webpack);\n    }\n\n    ctx.logger.warn(\n      `You've exported something other than a function from ${path.join(\n        ctx.appDir,\n        'src',\n        'admin',\n        'webpack.config'\n      )}, this will ignored.`\n    );\n  }\n\n  return config;\n};\n\nexport { mergeConfigWithUserConfig, resolveDevelopmentConfig, resolveProductionConfig };\n"],"names":["resolveBaseConfig","ctx","default","browserslistToEsbuild","target","experiments","topLevelAwait","entry","main","resolve","alias","react","getModulePath","Object","fromEntries","buildSingletonAliasEntries","extensions","module","rules","test","loader","require","options","jsx","use","fullySpecified","type","parser","dataUrlCondition","maxSize","plugins","HtmlWebpackPlugin","inject","template","path","runtimeDir","DefinePlugin","entries","env","reduce","acc","key","value","JSON","stringify","tsconfig","ForkTsCheckerPlugin","typescript","configFile","configOverwrite","compilerOptions","sourceMap","sourcemaps","filter","Boolean","resolveDevelopmentConfig","baseConfig","monorepo","loadStrapiMonorepo","cwd","linkedDesignSystemPath","getLinkedDesignSystemPath","cache","buildDependencies","config","__filename","designSystem","join","version","crypto","createHash","update","digest","getMonorepoAliases","stats","mode","devtool","output","filename","distPath","publicPath","basePath","replace","infrastructureLogging","level","HotModuleReplacementPlugin","ReactRefreshWebpackPlugin","resolveProductionConfig","bail","chunkFilename","optimization","minimize","minify","minimizer","EsbuildPlugin","css","moduleIds","runtimeChunk","MiniCssExtractPlugin","ignoreOrder","BundleAnalyzerPlugin","USER_CONFIGS","mergeConfigWithUserConfig","userConfig","getUserConfig","webpack","logger","warn","appDir"],"mappings":"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"}