@@ -224,6 +224,7 @@ export const build = async (...files) => {
224224 await importSource ( './modules/globals.cjs' )
225225 }
226226
227+ const haveJestAPIs = { expect : false , exodus : false }
227228 if ( options . jest ) {
228229 const { jestConfig } = options
229230 const preload = [ ...( jestConfig . setupFiles || [ ] ) , ...( jestConfig . setupFilesAfterEnv || [ ] ) ]
@@ -244,6 +245,14 @@ export const build = async (...files) => {
244245
245246 // copy of loader/jest
246247 input . push ( `await (await import(${ stringify ( resolveSrc ( 'jest.setup.js' ) ) } )).setupJest();` )
248+
249+ const ignoreFrom = / \/ t e s t \/ s r c \/ ( j e s t ( \. ( m o c k | s n a p s h o t ) ) ? \. j s | e n g i n e \. p u r e \. c j s | e x p e c t \. c j s ) $ / u // rechecked to not use those apis if no outside usage
250+ specificLoadPipeline . push ( async ( source , filepath ) => {
251+ if ( ignoreFrom . test ( filepath . replaceAll ( '\\' , '/' ) ) ) return source
252+ haveJestAPIs . expect ||= / ( ^ | [ ^ # ] ) \b e x p e c t ( [ ( . ] | $ ) / mu. test ( source )
253+ haveJestAPIs . exodus ||= / j e s t \. e x o d u s / u. test ( source )
254+ return source
255+ } )
247256 }
248257
249258 for ( const file of files ) importFile ( file )
@@ -421,6 +430,8 @@ export const build = async (...files) => {
421430 EXODUS_TEST_FSFILES : stringify ( emptyToUndefined ( fsfiles ) ) , // TODO: can we safely use relative paths?
422431 EXODUS_TEST_FSFILES_CONTENTS : stringify ( emptyToUndefined ( [ ...fsFilesContents . entries ( ) ] ) ) ,
423432 EXODUS_TEST_FSDIRS : stringify ( emptyToUndefined ( [ ...fsFilesDirs . entries ( ) ] ) ) ,
433+ EXODUS_TEST_LOAD_EXPECT : stringify ( haveJestAPIs . expect ) ,
434+ EXODUS_TEST_LOAD_JESTEXODUS : stringify ( haveJestAPIs . exodus ) ,
424435 } ,
425436 alias : {
426437 // Jest, tape and node:test
@@ -552,10 +563,22 @@ export const build = async (...files) => {
552563 let res = await buildWrap ( config )
553564 assert . equal ( res instanceof Error , res . errors . length > 0 )
554565
566+ let needRerun = false
555567 if ( fsFilesContents . size > 0 || fsFilesDirs . size > 0 ) {
556568 // re-run as we detected that tests depend on fsReadFileSync contents
557569 config . define . EXODUS_TEST_FSFILES_CONTENTS = stringify ( [ ...fsFilesContents . entries ( ) ] )
558570 config . define . EXODUS_TEST_FSDIRS = stringify ( [ ...fsFilesDirs . entries ( ) ] )
571+ needRerun = true
572+ }
573+
574+ if ( haveJestAPIs . expect || haveJestAPIs . exodus ) {
575+ // re-run as we detected expect or jest.exodus usage and need to bundle those
576+ config . define . EXODUS_TEST_LOAD_EXPECT = stringify ( haveJestAPIs . expect )
577+ config . define . EXODUS_TEST_LOAD_JESTEXODUS = stringify ( haveJestAPIs . exodus )
578+ needRerun = true
579+ }
580+
581+ if ( needRerun ) {
559582 res = await buildWrap ( config )
560583 assert . equal ( res instanceof Error , res . errors . length > 0 )
561584 }
0 commit comments