{
  "version": 3,
  "sources": ["../../src/lib/MicrotaskNotifier.ts"],
  "sourcesContent": ["/**\n * A notifier that queues its notifications to the microtask queue.\n * This is useful for avoiding race conditions where callbacks are triggered prematurely.\n */\nexport class MicrotaskNotifier<T extends unknown[]> {\n\tprivate listeners = new Set<(...props: T) => void>()\n\n\tnotify(...props: T) {\n\t\tqueueMicrotask(() => {\n\t\t\tfor (const listener of this.listeners) {\n\t\t\t\ttry {\n\t\t\t\t\tlistener(...props)\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error('Error in MicrotaskNotifier listener', error)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\tregister(_listener: (...props: T) => void) {\n\t\t// Track if unsubscribe was called before the add microtask ran\n\t\tlet didDelete = false\n\n\t\t// We defer the add to the microtask queue to ensure the callback isn't invoked\n\t\t// for changes that happened before this registration\n\t\tqueueMicrotask(() => {\n\t\t\tif (didDelete) return\n\t\t\tthis.listeners.add(_listener)\n\t\t})\n\n\t\treturn () => {\n\t\t\tif (didDelete) return\n\t\t\tdidDelete = true\n\t\t\t// Synchronous delete ensures immediate unsubscription\n\t\t\tthis.listeners.delete(_listener)\n\t\t}\n\t}\n}\n"],
  "mappings": "AAIO,MAAM,kBAAuC;AAAA,EAC3C,YAAY,oBAAI,IAA2B;AAAA,EAEnD,UAAU,OAAU;AACnB,mBAAe,MAAM;AACpB,iBAAW,YAAY,KAAK,WAAW;AACtC,YAAI;AACH,mBAAS,GAAG,KAAK;AAAA,QAClB,SAAS,OAAO;AACf,kBAAQ,MAAM,uCAAuC,KAAK;AAAA,QAC3D;AAAA,MACD;AAAA,IACD,CAAC;AAAA,EACF;AAAA,EAEA,SAAS,WAAkC;AAE1C,QAAI,YAAY;AAIhB,mBAAe,MAAM;AACpB,UAAI,UAAW;AACf,WAAK,UAAU,IAAI,SAAS;AAAA,IAC7B,CAAC;AAED,WAAO,MAAM;AACZ,UAAI,UAAW;AACf,kBAAY;AAEZ,WAAK,UAAU,OAAO,SAAS;AAAA,IAChC;AAAA,EACD;AACD;",
  "names": []
}
