Skip to content

Commit 4b00af9

Browse files
committed
fix: module compat for remix esm
1 parent 2c4ccb3 commit 4b00af9

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';
@@ -480,14 +481,37 @@ export const makeWrappedCreateRequestHandler = (options?: { instrumentTracing?:
480481
};
481482
};
482483

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

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

0 commit comments

Comments
 (0)