@@ -230,4 +230,55 @@ describe("externalDependencies", () => {
230230 ) . not . toThrow ( ) ;
231231 } ) ;
232232 } ) ;
233+
234+ describe ( "regressions" , ( ) => {
235+ describe ( "#14233" , ( ) => {
236+ it ( "no external dependencies" , ( ) => {
237+ const code = `let a = 1` ;
238+
239+ function pluginA ( api ) {
240+ api . cache . never ( ) ;
241+ return { name : "plugin-a" } ;
242+ }
243+ function pluginB ( ) {
244+ return { name : "plugin-b" , inherits : pluginA } ;
245+ }
246+
247+ expect ( ( ) => {
248+ transform ( code , { plugins : [ pluginB ] } ) ;
249+
250+ transform ( code , { plugins : [ pluginB ] } ) ;
251+ } ) . not . toThrow ( ) ;
252+ } ) ;
253+
254+ it ( "with external dependencies" , ( ) => {
255+ const code = `let a = 1` ;
256+
257+ let pluginAdep = "./a-foo" ;
258+
259+ function pluginA ( api ) {
260+ api . cache . never ( ) ;
261+ api . addExternalDependency ( pluginAdep ) ;
262+ return { name : "plugin-a" } ;
263+ }
264+ const pluginB = jest . fn ( function pluginB ( api ) {
265+ api . cache . using ( ( ) => 0 ) ;
266+ api . addExternalDependency ( "./b-foo" ) ;
267+ return { name : "plugin-b" , inherits : pluginA } ;
268+ } ) ;
269+
270+ const result1 = transform ( code , { plugins : [ pluginB ] } ) ;
271+ pluginAdep = "./a-bar" ;
272+ const result2 = transform ( code , { plugins : [ pluginB ] } ) ;
273+
274+ expect ( pluginB ) . toHaveBeenCalledTimes ( 1 ) ;
275+ expect ( new Set ( result1 . externalDependencies ) ) . toEqual (
276+ new Set ( [ "./a-foo" , "./b-foo" ] ) ,
277+ ) ;
278+ expect ( new Set ( result2 . externalDependencies ) ) . toEqual (
279+ new Set ( [ "./a-bar" , "./b-foo" ] ) ,
280+ ) ;
281+ } ) ;
282+ } ) ;
283+ } ) ;
233284} ) ;
0 commit comments