From 055ec956fd232ece0b636623c4eb2d4f433baf08 Mon Sep 17 00:00:00 2001 From: Nawaz Dhandala Date: Fri, 24 Oct 2025 17:40:31 +0100 Subject: [PATCH] build(esbuild-config): add refractor compatibility plugin to resolve refractor imports Add createRefractorCompatibilityPlugin that maps imports from refractor/lib and refractor/lang to the local refractor package (searching candidate node_modules paths), and include it in the plugins list so esbuild can correctly resolve refractor modules. --- Common/UI/esbuild-config.js | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/Common/UI/esbuild-config.js b/Common/UI/esbuild-config.js index 3f2cfdc921..54374a45d0 100644 --- a/Common/UI/esbuild-config.js +++ b/Common/UI/esbuild-config.js @@ -8,6 +8,37 @@ const path = require('path'); const fs = require('fs'); const dotenv = require('dotenv'); +function createRefractorCompatibilityPlugin() { + const candidateRoots = [ + path.resolve(__dirname, '../node_modules/refractor'), + path.resolve(__dirname, '../../node_modules/refractor'), + ]; + + const refractorRoot = candidateRoots.find((packagePath) => fs.existsSync(packagePath)); + + if (!refractorRoot) { + throw new Error('Unable to locate refractor package for esbuild compatibility plugin.'); + } + + return { + name: 'refractor-compatibility', + setup(build) { + build.onResolve({ filter: /^refractor\/lib\// }, (args) => { + const relativePath = args.path.replace(/^refractor\/lib\//, ''); + const candidatePath = path.join(refractorRoot, 'lib', `${relativePath}.js`); + return { path: candidatePath }; + }); + + build.onResolve({ filter: /^refractor\/lang\// }, (args) => { + const relativePath = args.path.replace(/^refractor\/lang\//, ''); + const filename = relativePath.endsWith('.js') ? relativePath : `${relativePath}.js`; + const candidatePath = path.join(refractorRoot, 'lang', filename); + return { path: candidatePath }; + }); + }, + }; +} + // CSS Plugin to handle CSS/SCSS files function createCSSPlugin() { return { @@ -146,7 +177,7 @@ function createConfig(options) { 'react': path.resolve('./node_modules/react'), ...additionalAlias, }, - plugins: [createCSSPlugin(), createFileLoaderPlugin()], + plugins: [createRefractorCompatibilityPlugin(), createCSSPlugin(), createFileLoaderPlugin()], loader: { '.tsx': 'tsx', '.ts': 'ts',