{"version":3,"file":"file-coalescer.d.ts","sourceRoot":"","sources":["../../../src/shared/file-coalescer.ts"],"names":[],"mappings":"AAAA,UAAU,QAAQ;IACjB,UAAU,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1D,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;CACpC;AAED,UAAU,aAAa;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAClD,KAAK,IAAI,IAAI,CAAC;CACd;AAOD,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC/B,cAAc,EAAE,MAAM,EACtB,QAAQ,GAAE,QAA0B,GAClC,aAAa,CAoBf","sourcesContent":["interface TimerApi {\n\tsetTimeout(handler: () => void, delayMs: number): unknown;\n\tclearTimeout(handle: unknown): void;\n}\n\ninterface FileCoalescer {\n\tschedule(file: string, delayMs?: number): boolean;\n\tclear(): void;\n}\n\nconst defaultTimerApi: TimerApi = {\n\tsetTimeout: (handler, delayMs) => setTimeout(handler, delayMs),\n\tclearTimeout: (handle) => clearTimeout(handle as ReturnType<typeof setTimeout>),\n};\n\nexport function createFileCoalescer(\n\thandler: (file: string) => void,\n\tdefaultDelayMs: number,\n\ttimerApi: TimerApi = defaultTimerApi,\n): FileCoalescer {\n\tconst pending = new Map<string, unknown>();\n\n\treturn {\n\t\tschedule(file: string, delayMs = defaultDelayMs): boolean {\n\t\t\tif (pending.has(file)) return false;\n\t\t\tconst timer = timerApi.setTimeout(() => {\n\t\t\t\tpending.delete(file);\n\t\t\t\thandler(file);\n\t\t\t}, delayMs);\n\t\t\tpending.set(file, timer);\n\t\t\treturn true;\n\t\t},\n\t\tclear(): void {\n\t\t\tfor (const timer of pending.values()) {\n\t\t\t\ttimerApi.clearTimeout(timer);\n\t\t\t}\n\t\t\tpending.clear();\n\t\t},\n\t};\n}\n"]}