diff --git a/scripts/build/bundler.mjs b/scripts/build/bundler.mjs index 548191a88143..9968226f1a19 100644 --- a/scripts/build/bundler.mjs +++ b/scripts/build/bundler.mjs @@ -12,6 +12,7 @@ import esbuildPluginReplaceText from "./esbuild-plugins/replace-text.mjs"; import esbuildPluginLicense from "./esbuild-plugins/license.mjs"; import esbuildPluginUmd from "./esbuild-plugins/umd.mjs"; import esbuildPluginVisualizer from "./esbuild-plugins/visualizer.mjs"; +import esbuildPluginThrowWarnings from "./esbuild-plugins/throw-warnings.mjs"; import bundles from "./config.mjs"; const { __dirname, readJsonSync, require } = createEsmUtils(import.meta); @@ -170,6 +171,7 @@ function* getEsbuildOptions(bundle, buildOptions) { }), buildOptions.reports && esbuildPluginVisualizer({ formats: buildOptions.reports }), + esbuildPluginThrowWarnings(), ].filter(Boolean), minify: shouldMinify, legalComments: "none", @@ -242,7 +244,9 @@ async function runBuild(bundle, esbuildOptions, buildOptions) { await esbuild.build({ ...esbuildOptions, define: {}, - plugins: plugins.filter(({ name }) => name === "umd"), + plugins: plugins.filter( + ({ name }) => name === "umd" || name === "throw-warnings" + ), entryPoints: [outfile], allowOverwrite: true, }); diff --git a/scripts/build/esbuild-plugins/throw-warnings.mjs b/scripts/build/esbuild-plugins/throw-warnings.mjs new file mode 100644 index 000000000000..62492e63bb9b --- /dev/null +++ b/scripts/build/esbuild-plugins/throw-warnings.mjs @@ -0,0 +1,22 @@ +const ignoredWarnings = new Set([ + // Duplicated case clause + "This case clause will never be evaluated because it duplicates an earlier case clause", +]); + +export default function esbuildPluginThrowWarnings() { + return { + name: "throw-warnings", + setup(build) { + build.onEnd(({ warnings }) => { + for (const warning of warnings) { + if (ignoredWarnings.has(warning.text)) { + continue; + } + + console.log(warning); + throw new Error(warning.text); + } + }); + }, + }; +}