@@ -171,6 +171,42 @@ test("loadModuleProvider succeeds for a well-formed module", async () => {
171171 }
172172} ) ;
173173
174+ test ( "loadModuleProvider removes abort listener after successful fetch" , async ( ) => {
175+ const dir = fs . mkdtempSync ( path . join ( os . tmpdir ( ) , "deepcode-statusline-" ) ) ;
176+ const modPath = path . join ( dir , "cleanup.mjs" ) ;
177+ fs . writeFileSync ( modPath , "export default () => 'ok';" , "utf8" ) ;
178+ try {
179+ const provider = await loadModuleProvider ( modPath , undefined , "cleanup" , 10_000 ) ;
180+ assert . ok ( provider ) ;
181+
182+ const ac = new AbortController ( ) ;
183+ const signal = ac . signal ;
184+ const originalAdd = signal . addEventListener ;
185+ const originalRemove = signal . removeEventListener ;
186+ let abortListenerAdds = 0 ;
187+ let abortListenerRemoves = 0 ;
188+ signal . addEventListener = function ( this : AbortSignal , ...args : Parameters < AbortSignal [ "addEventListener" ] > ) {
189+ if ( args [ 0 ] === "abort" ) {
190+ abortListenerAdds += 1 ;
191+ }
192+ return originalAdd . apply ( this , args ) ;
193+ } as AbortSignal [ "addEventListener" ] ;
194+ signal . removeEventListener = function ( this : AbortSignal , ...args : Parameters < AbortSignal [ "removeEventListener" ] > ) {
195+ if ( args [ 0 ] === "abort" ) {
196+ abortListenerRemoves += 1 ;
197+ }
198+ return originalRemove . apply ( this , args ) ;
199+ } as AbortSignal [ "removeEventListener" ] ;
200+
201+ const result = await provider ! . fetch ( { projectRoot : dir , signal } ) ;
202+ assert . equal ( result , "ok" ) ;
203+ assert . equal ( abortListenerAdds , 1 ) ;
204+ assert . equal ( abortListenerRemoves , 1 ) ;
205+ } finally {
206+ fs . rmSync ( dir , { recursive : true , force : true } ) ;
207+ }
208+ } ) ;
209+
174210test ( "resolveSettingsSources lets project-level providers override user-level by id" , ( ) => {
175211 const resolved = resolveSettingsSources (
176212 {
0 commit comments