diff --git a/.npmignore b/.npmignore index 8f30275..349c4ff 100644 --- a/.npmignore +++ b/.npmignore @@ -1,7 +1,7 @@ .vscode .npmignore .editorconfig -.eslintrc.js +.eslint.config.js .prettierrc .github/ build/ diff --git a/src/server/workbench.ts b/src/server/workbench.ts index e33e1f3..b30f105 100644 --- a/src/server/workbench.ts +++ b/src/server/workbench.ts @@ -137,8 +137,10 @@ export default function (config: IConfig): Router.Middleware { if (config.build.type === 'sources') { const builtInExtensions = await getScannedBuiltinExtensions(config.build.location); const productOverrides = await getProductOverrides(config.build.location); + const esm = config.esm || await isESM(config.build.location); + console.log('Using ESM loader:', esm); const devCSSModules = config.esm ? await getDevCssModules(config.build.location) : []; - ctx.state.workbench = new Workbench(`${ctx.protocol}://${ctx.host}/static/sources`, true, config.esm, devCSSModules, builtInExtensions, { + ctx.state.workbench = new Workbench(`${ctx.protocol}://${ctx.host}/static/sources`, true, esm, devCSSModules, builtInExtensions, { ...productOverrides, webEndpointUrlTemplate: `${ctx.protocol}://{{uuid}}.${ctx.host}/static/sources`, webviewContentExternalBaseUrlTemplate: `${ctx.protocol}://{{uuid}}.${ctx.host}/static/sources/out/vs/workbench/contrib/webview/browser/pre/` @@ -183,3 +185,12 @@ async function getDevCssModules(vsCodeDevLocation: string): Promise { const glob = await import('glob') return glob.glob('**/*.css', { cwd: path.join(vsCodeDevLocation, 'out') }); } + +async function isESM(vsCodeDevLocation: string): Promise { + try { + const packageJSON = await fs.readFile(path.join(vsCodeDevLocation, 'out', 'package.json')); + return JSON.parse(packageJSON.toString()).type === 'module'; + } catch (e) { + return false; + } +}