Skip to content

Commit 47001cb

Browse files
committed
fix: module compat for remix esm
1 parent be3464b commit 47001cb

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

packages/remix/package.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,11 @@
2929
"require": "./build/cjs/index.client.js",
3030
"default": "./build/cjs/index.client.js"
3131
},
32-
"node": "./build/cjs/index.server.js",
32+
"node": {
33+
"import": "./build/esm/index.server.js",
34+
"require": "./build/cjs/index.server.js",
35+
"default": "./build/cjs/index.server.js"
36+
},
3337
"worker": {
3438
"import": "./build/esm/cloudflare/index.js",
3539
"require": "./build/cjs/cloudflare/index.js",

packages/remix/src/server/instrumentServer.ts

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import {
3535
winterCGRequestToRequestData,
3636
withIsolationScope,
3737
} from '@sentry/core';
38+
import { createRequire } from 'module';
3839
import { DEBUG_BUILD } from '../utils/debug-build';
3940
import { createRoutes, getTransactionName } from '../utils/utils';
4041
import { extractData, isResponse, json } from '../utils/vendor/response';
@@ -477,14 +478,37 @@ export const makeWrappedCreateRequestHandler = (options?: { instrumentTracing?:
477478
};
478479
};
479480

481+
/**
482+
* Helper to load a module in both CJS and ESM contexts.
483+
* In ESM, we use createRequire to create a require function.
484+
* In CJS, we use the standard loadModule.
485+
*/
486+
function loadModuleCompat<T>(moduleName: string): T | undefined {
487+
// Check if we're in ESM context (module doesn't exist)
488+
if (typeof module === 'undefined') {
489+
// ESM context - use createRequire to get a require function
490+
try {
491+
// eslint-disable-next-line @typescript-eslint/no-var-requires
492+
const require = createRequire(import.meta.url);
493+
return require(moduleName) as T;
494+
} catch {
495+
return undefined;
496+
}
497+
} else {
498+
// CJS context - use loadModule with module reference
499+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
500+
return loadModule<T>(moduleName, module as any);
501+
}
502+
}
503+
480504
/**
481505
* Monkey-patch Remix's `createRequestHandler` from `@remix-run/server-runtime`
482506
* which Remix Adapters (https://remix.run/docs/en/v1/api/remix) use underneath.
483507
*/
484508
export function instrumentServer(options?: { instrumentTracing?: boolean }): void {
485-
const pkg = loadModule<{
509+
const pkg = loadModuleCompat<{
486510
createRequestHandler: CreateRequestHandlerFunction;
487-
}>('@remix-run/server-runtime', module);
511+
}>('@remix-run/server-runtime');
488512

489513
if (!pkg) {
490514
DEBUG_BUILD && debug.warn('Remix SDK was unable to require `@remix-run/server-runtime` package.');

0 commit comments

Comments
 (0)