@@ -52,7 +52,7 @@ describe('default export wrapping', () => {
5252 const result = transform ( code , ctx ) ! ;
5353 expect ( result ) . toBeDefined ( ) ;
5454 expect ( result . code ) . toContain ( "import * as __SENTRY__ from '@sentry/cloudflare'" ) ;
55- expect ( result . code ) . toContain ( 'const __SENTRY_DEFAULT_EXPORT__ = handler' ) ;
55+ expect ( result . code ) . toContain ( 'var __SENTRY_DEFAULT_EXPORT__ = handler' ) ;
5656 expect ( result . code ) . toContain ( '__SENTRY__.withSentry((env) => ({}), __SENTRY_DEFAULT_EXPORT__)' ) ;
5757 expect ( result . code ) . not . toContain ( 'export default handler' ) ;
5858 expect ( result . map ) . toBeDefined ( ) ;
@@ -62,7 +62,7 @@ describe('default export wrapping', () => {
6262 const code = 'export default { fetch() { return new Response("ok"); } };' ;
6363 const result = transform ( code , ctx ) ! ;
6464 expect ( result ) . toBeDefined ( ) ;
65- expect ( result . code ) . toContain ( 'const __SENTRY_DEFAULT_EXPORT__ =' ) ;
65+ expect ( result . code ) . toContain ( 'var __SENTRY_DEFAULT_EXPORT__ =' ) ;
6666 expect ( result . code ) . toContain ( '__SENTRY__.withSentry(' ) ;
6767 } ) ;
6868
@@ -287,8 +287,8 @@ describe('default export wrapping', () => {
287287 } ) ;
288288
289289 /**
290- * Writes `files` to a temp dir, with `a.mjs` transformed and `withSentry` stubbed to return the
291- * handler as-is , and returns what `node <entry>` prints.
290+ * Writes `files` to a temp dir, with `a.mjs` transformed and `withSentry` stubbed to mark each
291+ * method it finds as instrumented , and returns what `node <entry>` prints.
292292 */
293293 function runWithEntry ( files : Record < string , string > , entry : string , transformEntry = true ) : string {
294294 const dir = mkdtempSync ( join ( tmpdir ( ) , 'sentry-cf-default-' ) ) ;
@@ -298,7 +298,7 @@ describe('default export wrapping', () => {
298298 name === 'a.mjs' && transformEntry
299299 ? transform ( code , ctx ) ! . code . replace (
300300 "import * as __SENTRY__ from '@sentry/cloudflare';" ,
301- 'const __SENTRY__ = { withSentry: (_options, handler) => handler };' ,
301+ 'const __SENTRY__ = { withSentry: (_options, handler) => { for (const key of Object.keys( handler)) handler[key].instrumented = true; return handler; } };' ,
302302 )
303303 : code ;
304304 writeFileSync ( join ( dir , name ) , out ) ;
@@ -328,8 +328,9 @@ describe('default export wrapping', () => {
328328 [
329329 "import * as __SENTRY__ from '@sentry/cloudflare';" ,
330330 'const handler = { fetch() {} };' ,
331- 'const __SENTRY_DEFAULT_EXPORT__ = (handler);' ,
332- 'export default __SENTRY__.withSentry((env) => ({}), __SENTRY_DEFAULT_EXPORT__);' ,
331+ 'var __SENTRY_DEFAULT_EXPORT__ = (handler);' ,
332+ 'export { __SENTRY_DEFAULT_EXPORT__ as default };' ,
333+ '__SENTRY_DEFAULT_EXPORT__ = __SENTRY__.withSentry((env) => ({}), __SENTRY_DEFAULT_EXPORT__);' ,
333334 ] . join ( '\n' ) ,
334335 ) ;
335336 } ) ;
@@ -341,12 +342,23 @@ describe('default export wrapping', () => {
341342 [
342343 "import * as __SENTRY__ from '@sentry/cloudflare';" ,
343344 'class Handler { fetch() {} }' ,
344- 'export default __SENTRY__.withSentry((env) => ({}), Handler);' ,
345+ 'var __SENTRY_DEFAULT_EXPORT__ = Handler;' ,
346+ 'export { __SENTRY_DEFAULT_EXPORT__ as default };' ,
345347 'Handler.ready = true;' ,
348+ '__SENTRY_DEFAULT_EXPORT__ = __SENTRY__.withSentry((env) => ({}), Handler);' ,
346349 ] . join ( '\n' ) ,
347350 ) ;
348351 } ) ;
349352
353+ it ( 'wraps a method added to the default export after `export default`' , ( ) => {
354+ const files = {
355+ 'a.mjs' : [ 'const handler = {};' , 'export default handler;' , 'handler.fetch = function () {};' ] . join ( '\n' ) ,
356+ 'main.mjs' : "import handler from './a.mjs';\nconsole.log(String(handler.fetch.instrumented));" ,
357+ } ;
358+
359+ expect ( runWithEntry ( files , 'main.mjs' ) ) . toBe ( 'true' ) ;
360+ } ) ;
361+
350362 it ( 'sets the default export where the original statement set it' , ( ) => {
351363 // `b` reads the default export of `a` while `a` is still evaluating, after its `export default`.
352364 const files = {
@@ -1008,8 +1020,9 @@ describe('agent class wrapping', () => {
10081020 'const __SENTRY_WRAPPED_MyDO__ = __SENTRY__.instrumentDurableObjectWithSentry((env) => ({ dsn: env.SENTRY_DSN }), MyDO);' ,
10091021 'export { __SENTRY_WRAPPED_MyDO__ as MyDO };' ,
10101022 '' ,
1011- 'const __SENTRY_DEFAULT_EXPORT__ = { fetch() {} };' ,
1012- 'export default __SENTRY__.withSentry((env) => ({ dsn: env.SENTRY_DSN }), __SENTRY_DEFAULT_EXPORT__);' ,
1023+ 'var __SENTRY_DEFAULT_EXPORT__ = { fetch() {} };' ,
1024+ 'export { __SENTRY_DEFAULT_EXPORT__ as default };' ,
1025+ '__SENTRY_DEFAULT_EXPORT__ = __SENTRY__.withSentry((env) => ({ dsn: env.SENTRY_DSN }), __SENTRY_DEFAULT_EXPORT__);' ,
10131026 ] . join ( '\n' ) ,
10141027 ) ;
10151028 } ) ;
@@ -1119,8 +1132,8 @@ describe('combined transforms', () => {
11191132 expect ( result . code ) . toContain ( 'export { __SENTRY_WRAPPED_MyDO__ as MyDO };' ) ;
11201133
11211134 // Default export wrapped
1122- expect ( result . code ) . toContain ( 'const __SENTRY_DEFAULT_EXPORT__ =' ) ;
1123- expect ( result . code ) . toContain ( 'export default __SENTRY__.withSentry(' ) ;
1135+ expect ( result . code ) . toContain ( 'var __SENTRY_DEFAULT_EXPORT__ =' ) ;
1136+ expect ( result . code ) . toContain ( '__SENTRY_DEFAULT_EXPORT__ = __SENTRY__.withSentry(' ) ;
11241137
11251138 // Single import
11261139 const importCount = ( result . code . match ( / i m p o r t \* a s _ _ S E N T R Y _ _ / g) ?? [ ] ) . length ;
0 commit comments