1- import type { RollupSucraseOptions } from '@rollup/plugin-sucrase' ;
21import sucrase from '@rollup/plugin-sucrase' ;
2+ import virtual from '@rollup/plugin-virtual' ;
33import { logger } from '@sentry/utils' ;
44import * as path from 'path' ;
55import type { InputOptions as RollupInputOptions , OutputOptions as RollupOutputOptions } from 'rollup' ;
66import { rollup } from 'rollup' ;
77
8- const getRollupInputOptions : ( proxyPath : string , resourcePath : string ) => RollupInputOptions = (
9- proxyPath ,
10- resourcePath ,
11- ) => ( {
12- input : proxyPath ,
8+ const SENTRY_PROXY_MODULE_NAME = 'sentry-proxy-module' ;
9+
10+ const getRollupInputOptions = ( userModulePath : string , proxyTemplateCode : string ) : RollupInputOptions => ( {
11+ input : SENTRY_PROXY_MODULE_NAME ,
12+
1313 plugins : [
14- // For some reason, even though everything in `RollupSucraseOptions` besides `transforms` is supposed to be
15- // optional, TS complains that there are a bunch of missing properties (hence the typecast). Similar to
16- // https://github.com/microsoft/TypeScript/issues/20722, though that's been fixed. (In this case it's an interface
17- // exporting a `Pick` picking optional properties which is turning them required somehow.)'
14+ virtual ( {
15+ [ SENTRY_PROXY_MODULE_NAME ] : proxyTemplateCode ,
16+ } ) ,
1817 sucrase ( {
1918 transforms : [ 'jsx' , 'typescript' ] ,
20- } as unknown as RollupSucraseOptions ) ,
19+ } ) ,
2120 ] ,
2221
2322 // We want to process as few files as possible, so as not to slow down the build any more than we have to. We need the
2423 // proxy module (living in the temporary file we've created) and the file we're wrapping not to be external, because
2524 // otherwise they won't be processed. (We need Rollup to process the former so that we can use the code, and we need
2625 // it to process the latter so it knows what exports to re-export from the proxy module.) Past that, we don't care, so
2726 // don't bother to process anything else.
28- external : importPath => importPath !== proxyPath && importPath !== resourcePath ,
27+ external : importPath => importPath !== SENTRY_PROXY_MODULE_NAME && importPath !== userModulePath ,
2928
3029 // Prevent rollup from stressing out about TS's use of global `this` when polyfilling await. (TS will polyfill if the
3130 // user's tsconfig `target` is set to anything before `es2017`. See https://stackoverflow.com/a/72822340 and
@@ -66,19 +65,19 @@ const rollupOutputOptions: RollupOutputOptions = {
6665 * '<wrapped file>'` call into individual exports (which nextjs seems to need).
6766 *
6867 * @param tempProxyFilePath The path to the temporary file containing the proxy module code
69- * @param resourcePath The path to the file being wrapped
68+ * @param userModulePath The path to the file being wrapped
7069 * @returns The processed proxy module code, or undefined if an error occurs
7170 */
72- export async function rollupize ( tempProxyFilePath : string , resourcePath : string ) : Promise < string | undefined > {
71+ export async function rollupize ( userModulePath : string , templateCode : string ) : Promise < string | undefined > {
7372 let finalBundle ;
7473
7574 try {
76- const intermediateBundle = await rollup ( getRollupInputOptions ( tempProxyFilePath , resourcePath ) ) ;
75+ const intermediateBundle = await rollup ( getRollupInputOptions ( userModulePath , templateCode ) ) ;
7776 finalBundle = await intermediateBundle . generate ( rollupOutputOptions ) ;
7877 } catch ( err ) {
7978 __DEBUG_BUILD__ &&
8079 logger . warn (
81- `Could not wrap ${ resourcePath } . An error occurred while processing the proxy module template:\n${ err } ` ,
80+ `Could not wrap ${ userModulePath } . An error occurred while processing the proxy module template:\n${ err } ` ,
8281 ) ;
8382 return undefined ;
8483 }
@@ -92,7 +91,7 @@ export async function rollupize(tempProxyFilePath: string, resourcePath: string)
9291 // square brackets into underscores. Further, Rollup adds file extensions to bare-path-type import and export sources.
9392 // Because it assumes that everything will have already been processed, it always uses `.js` as the added extension.
9493 // We need to restore the original name and extension so that Webpack will be able to find the wrapped file.
95- const resourceFilename = path . basename ( resourcePath ) ;
94+ const resourceFilename = path . basename ( userModulePath ) ;
9695 const mutatedResourceFilename = resourceFilename
9796 // `[\\[\\]]` is the character class containing `[` and `]`
9897 . replace ( new RegExp ( '[\\[\\]]' , 'g' ) , '_' )
0 commit comments