@vielzeug/flux 2.3.3 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/README.md +1 -1
  2. package/dist/_subscription.cjs +1 -1
  3. package/dist/_subscription.cjs.map +1 -1
  4. package/dist/_subscription.d.ts.map +1 -1
  5. package/dist/_subscription.js +1 -1
  6. package/dist/_subscription.js.map +1 -1
  7. package/dist/adapters/courier.cjs.map +1 -1
  8. package/dist/adapters/courier.d.ts +2 -29
  9. package/dist/adapters/courier.d.ts.map +1 -1
  10. package/dist/adapters/courier.js.map +1 -1
  11. package/dist/adapters/ripple.cjs +1 -1
  12. package/dist/adapters/ripple.cjs.map +1 -1
  13. package/dist/adapters/ripple.js +27 -24
  14. package/dist/adapters/ripple.js.map +1 -1
  15. package/dist/channel.cjs +1 -1
  16. package/dist/channel.cjs.map +1 -1
  17. package/dist/channel.d.ts.map +1 -1
  18. package/dist/channel.js +13 -5
  19. package/dist/channel.js.map +1 -1
  20. package/dist/errors.cjs +1 -1
  21. package/dist/errors.cjs.map +1 -1
  22. package/dist/errors.d.ts +10 -0
  23. package/dist/errors.d.ts.map +1 -1
  24. package/dist/errors.js +10 -1
  25. package/dist/errors.js.map +1 -1
  26. package/dist/flux.cjs +1 -1
  27. package/dist/flux.cjs.map +1 -1
  28. package/dist/flux.iife.js +1 -1
  29. package/dist/flux.iife.js.map +1 -1
  30. package/dist/flux.js +1 -1
  31. package/dist/flux.js.map +1 -1
  32. package/dist/index.cjs +1 -1
  33. package/dist/index.d.ts +3 -4
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +8 -8
  36. package/dist/operators/creation.cjs +1 -1
  37. package/dist/operators/creation.cjs.map +1 -1
  38. package/dist/operators/creation.d.ts +1 -4
  39. package/dist/operators/creation.d.ts.map +1 -1
  40. package/dist/operators/creation.js +2 -2
  41. package/dist/operators/creation.js.map +1 -1
  42. package/dist/operators/filtering.cjs +1 -1
  43. package/dist/operators/filtering.cjs.map +1 -1
  44. package/dist/operators/filtering.d.ts +2 -8
  45. package/dist/operators/filtering.d.ts.map +1 -1
  46. package/dist/operators/filtering.js +4 -4
  47. package/dist/operators/filtering.js.map +1 -1
  48. package/dist/operators/transformation.cjs +1 -1
  49. package/dist/operators/transformation.cjs.map +1 -1
  50. package/dist/operators/transformation.d.ts +6 -3
  51. package/dist/operators/transformation.d.ts.map +1 -1
  52. package/dist/operators/transformation.js +42 -52
  53. package/dist/operators/transformation.js.map +1 -1
  54. package/dist/operators/utility.cjs +1 -1
  55. package/dist/operators/utility.cjs.map +1 -1
  56. package/dist/operators/utility.d.ts +3 -1
  57. package/dist/operators/utility.d.ts.map +1 -1
  58. package/dist/operators/utility.js +44 -37
  59. package/dist/operators/utility.js.map +1 -1
  60. package/package.json +9 -9
  61. package/dist/_dev.cjs +0 -2
  62. package/dist/_dev.cjs.map +0 -1
  63. package/dist/_dev.js +0 -6
  64. package/dist/_dev.js.map +0 -1
package/README.md CHANGED
@@ -14,7 +14,7 @@ pnpm add @vielzeug/flux
14
14
  import { toArray, interval, map, pipe, take } from '@vielzeug/flux';
15
15
 
16
16
  const values = pipe(
17
- interval({ every: 100 }),
17
+ interval(100),
18
18
  map((value) => value * 2),
19
19
  take(3),
20
20
  );
@@ -1,2 +1,2 @@
1
- function e(e){let t=globalThis.reportError;if(t){t(e);return}queueMicrotask(()=>{throw e})}function t(t,n){let r=typeof t==`function`?{next:t}:t,i=new AbortController,a=!1,o,s=()=>{if(!a){a=!0,i.abort(),n?.removeEventListener(`abort`,s);try{o?.()}catch(t){e(t)}}};return n?.aborted?s():n?.addEventListener(`abort`,s,{once:!0}),{add:t=>{if(t){if(a){try{t()}catch(t){e(t)}return}o=t}},signal:i.signal,sink:{complete(){if(!a){try{r.complete?.()}catch(t){e(t)}s()}},error(t){if(!a){if(r.error)try{r.error(t)}catch(t){e(t)}else e(t);s()}},next(t){if(!a)try{r.next(t)}catch(t){s(),e(t)}}},subscription:{get closed(){return a},[Symbol.dispose]:s,unsubscribe:s}}}exports.createSubscription=t;
1
+ function e(e){let t=globalThis.reportError;if(t){t(e);return}queueMicrotask(()=>{throw e})}function t(t,n){let r=typeof t==`function`?{next:t}:t,i=new AbortController,a=!1,o,s=()=>{if(!a){a=!0,i.abort(),n?.removeEventListener(`abort`,s);try{o?.()}catch(t){e(t)}}};return n?.aborted?s():n?.addEventListener(`abort`,s,{once:!0}),{add:t=>{if(t){if(a){try{t()}catch(t){e(t)}return}o=t}},signal:i.signal,sink:{complete(){if(!a){try{r.complete?.()}catch(t){e(t)}s()}},error(t){if(!a){if(r.error)try{r.error(t)}catch(t){e(t)}else e(t);s()}},next(t){if(!a)try{r.next(t)}catch(t){s(),e(t)}}},subscription:{get closed(){return a},[Symbol.dispose]:s,unsubscribe:s}}}exports.createSubscription=t,exports.reportUnhandledError=e;
2
2
  //# sourceMappingURL=_subscription.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"_subscription.cjs","names":[],"sources":["../src/_subscription.ts"],"sourcesContent":["import type { Observer, Sink, Subscription, Teardown } from './types';\n\nfunction reportUnhandledError(reason: unknown): void {\n const reportError = (globalThis as { reportError?: (value: unknown) => void }).reportError;\n\n if (reportError) {\n reportError(reason);\n\n return;\n }\n\n queueMicrotask(() => {\n throw reason;\n });\n}\n\nexport function createSubscription<T>(\n observerOrNext: Observer<T> | ((value: T) => void),\n signal?: AbortSignal,\n): { add(teardown: Teardown | undefined): void; signal: AbortSignal; sink: Sink<T>; subscription: Subscription } {\n const observer: Observer<T> = typeof observerOrNext === 'function' ? { next: observerOrNext } : observerOrNext;\n const controller = new AbortController();\n let closed = false;\n let teardown: Teardown | undefined;\n\n const unsubscribe = (): void => {\n if (closed) return;\n\n closed = true;\n controller.abort();\n signal?.removeEventListener('abort', unsubscribe);\n\n try {\n teardown?.();\n } catch (reason) {\n reportUnhandledError(reason);\n }\n };\n\n const sink: Sink<T> = {\n complete(): void {\n if (closed) return;\n\n try {\n observer.complete?.();\n } catch (reason) {\n reportUnhandledError(reason);\n }\n\n unsubscribe();\n },\n\n error(reason: unknown): void {\n if (closed) return;\n\n if (observer.error) {\n try {\n observer.error(reason);\n } catch (callbackError) {\n reportUnhandledError(callbackError);\n }\n } else {\n reportUnhandledError(reason);\n }\n\n unsubscribe();\n },\n\n next(value: T): void {\n if (closed) return;\n\n try {\n observer.next(value);\n } catch (reason) {\n unsubscribe();\n reportUnhandledError(reason);\n }\n },\n };\n\n const add = (nextTeardown: Teardown | undefined): void => {\n if (!nextTeardown) return;\n\n if (closed) {\n try {\n nextTeardown();\n } catch (reason) {\n reportUnhandledError(reason);\n }\n\n return;\n }\n\n teardown = nextTeardown;\n };\n\n if (signal?.aborted) {\n unsubscribe();\n } else {\n signal?.addEventListener('abort', unsubscribe, { once: true });\n }\n\n return {\n add,\n signal: controller.signal,\n sink,\n subscription: {\n get closed(): boolean {\n return closed;\n },\n [Symbol.dispose]: unsubscribe,\n unsubscribe,\n },\n };\n}\n"],"mappings":"AAEA,SAAS,EAAqB,EAAuB,CACnD,IAAM,EAAe,WAA0D,YAE/E,GAAI,EAAa,CACf,EAAY,CAAM,EAElB,MACF,CAEA,mBAAqB,CACnB,MAAM,CACR,CAAC,CACH,CAEA,SAAgB,EACd,EACA,EAC+G,CAC/G,IAAM,EAAwB,OAAO,GAAmB,WAAa,CAAE,KAAM,CAAe,EAAI,EAC1F,EAAa,IAAI,gBACnB,EAAS,GACT,EAEE,MAA0B,CAC1B,MAIJ,CAFA,EAAS,GACT,EAAW,MAAM,EACjB,GAAQ,oBAAoB,QAAS,CAAW,EAEhD,GAAI,CACF,IAAW,CACb,OAAS,EAAQ,CACf,EAAqB,CAAM,CAC7B,CANgD,CAOlD,EAiEA,OANI,GAAQ,QACV,EAAY,EAEZ,GAAQ,iBAAiB,QAAS,EAAa,CAAE,KAAM,EAAK,CAAC,EAGxD,CACL,IAvBW,GAA6C,CACnD,KAEL,IAAI,EAAQ,CACV,GAAI,CACF,EAAa,CACf,OAAS,EAAQ,CACf,EAAqB,CAAM,CAC7B,CAEA,MACF,CAEA,EAAW,CAFX,CAGF,EAUE,OAAQ,EAAW,OACnB,MAjEA,UAAiB,CACX,MAEJ,IAAI,CACF,EAAS,WAAW,CACtB,OAAS,EAAQ,CACf,EAAqB,CAAM,CAC7B,CAEA,EAAY,CAFZ,CAGF,EAEA,MAAM,EAAuB,CACvB,MAEJ,IAAI,EAAS,MACX,GAAI,CACF,EAAS,MAAM,CAAM,CACvB,OAAS,EAAe,CACtB,EAAqB,CAAa,CACpC,MAEA,EAAqB,CAAM,EAG7B,EAAY,CAHiB,CAI/B,EAEA,KAAK,EAAgB,CACf,MAEJ,GAAI,CACF,EAAS,KAAK,CAAK,CACrB,OAAS,EAAQ,CACf,EAAY,EACZ,EAAqB,CAAM,CAC7B,CACF,CA4BA,EACA,aAAc,CACZ,IAAI,QAAkB,CACpB,OAAO,CACT,GACC,OAAO,SAAU,EAClB,aACF,CACF,CACF"}
1
+ {"version":3,"file":"_subscription.cjs","names":[],"sources":["../src/_subscription.ts"],"sourcesContent":["import type { Observer, Sink, Subscription, Teardown } from './types';\n\n/** @internal Reports an unhandled stream error through the platform's error reporting channel. */\nexport function reportUnhandledError(reason: unknown): void {\n const reportError = (globalThis as { reportError?: (value: unknown) => void }).reportError;\n\n if (reportError) {\n reportError(reason);\n\n return;\n }\n\n queueMicrotask(() => {\n throw reason;\n });\n}\n\nexport function createSubscription<T>(\n observerOrNext: Observer<T> | ((value: T) => void),\n signal?: AbortSignal,\n): { add(teardown: Teardown | undefined): void; signal: AbortSignal; sink: Sink<T>; subscription: Subscription } {\n const observer: Observer<T> = typeof observerOrNext === 'function' ? { next: observerOrNext } : observerOrNext;\n const controller = new AbortController();\n let closed = false;\n let teardown: Teardown | undefined;\n\n const unsubscribe = (): void => {\n if (closed) return;\n\n closed = true;\n controller.abort();\n signal?.removeEventListener('abort', unsubscribe);\n\n try {\n teardown?.();\n } catch (reason) {\n reportUnhandledError(reason);\n }\n };\n\n const sink: Sink<T> = {\n complete(): void {\n if (closed) return;\n\n try {\n observer.complete?.();\n } catch (reason) {\n reportUnhandledError(reason);\n }\n\n unsubscribe();\n },\n\n error(reason: unknown): void {\n if (closed) return;\n\n if (observer.error) {\n try {\n observer.error(reason);\n } catch (callbackError) {\n reportUnhandledError(callbackError);\n }\n } else {\n reportUnhandledError(reason);\n }\n\n unsubscribe();\n },\n\n next(value: T): void {\n if (closed) return;\n\n try {\n observer.next(value);\n } catch (reason) {\n unsubscribe();\n reportUnhandledError(reason);\n }\n },\n };\n\n const add = (nextTeardown: Teardown | undefined): void => {\n if (!nextTeardown) return;\n\n if (closed) {\n try {\n nextTeardown();\n } catch (reason) {\n reportUnhandledError(reason);\n }\n\n return;\n }\n\n teardown = nextTeardown;\n };\n\n if (signal?.aborted) {\n unsubscribe();\n } else {\n signal?.addEventListener('abort', unsubscribe, { once: true });\n }\n\n return {\n add,\n signal: controller.signal,\n sink,\n subscription: {\n get closed(): boolean {\n return closed;\n },\n [Symbol.dispose]: unsubscribe,\n unsubscribe,\n },\n };\n}\n"],"mappings":"AAGA,SAAgB,EAAqB,EAAuB,CAC1D,IAAM,EAAe,WAA0D,YAE/E,GAAI,EAAa,CACf,EAAY,CAAM,EAElB,MACF,CAEA,mBAAqB,CACnB,MAAM,CACR,CAAC,CACH,CAEA,SAAgB,EACd,EACA,EAC+G,CAC/G,IAAM,EAAwB,OAAO,GAAmB,WAAa,CAAE,KAAM,CAAe,EAAI,EAC1F,EAAa,IAAI,gBACnB,EAAS,GACT,EAEE,MAA0B,CAC1B,MAIJ,CAFA,EAAS,GACT,EAAW,MAAM,EACjB,GAAQ,oBAAoB,QAAS,CAAW,EAEhD,GAAI,CACF,IAAW,CACb,OAAS,EAAQ,CACf,EAAqB,CAAM,CAC7B,CANgD,CAOlD,EAiEA,OANI,GAAQ,QACV,EAAY,EAEZ,GAAQ,iBAAiB,QAAS,EAAa,CAAE,KAAM,EAAK,CAAC,EAGxD,CACL,IAvBW,GAA6C,CACnD,KAEL,IAAI,EAAQ,CACV,GAAI,CACF,EAAa,CACf,OAAS,EAAQ,CACf,EAAqB,CAAM,CAC7B,CAEA,MACF,CAEA,EAAW,CAFX,CAGF,EAUE,OAAQ,EAAW,OACnB,MAjEA,UAAiB,CACX,MAEJ,IAAI,CACF,EAAS,WAAW,CACtB,OAAS,EAAQ,CACf,EAAqB,CAAM,CAC7B,CAEA,EAAY,CAFZ,CAGF,EAEA,MAAM,EAAuB,CACvB,MAEJ,IAAI,EAAS,MACX,GAAI,CACF,EAAS,MAAM,CAAM,CACvB,OAAS,EAAe,CACtB,EAAqB,CAAa,CACpC,MAEA,EAAqB,CAAM,EAG7B,EAAY,CAHiB,CAI/B,EAEA,KAAK,EAAgB,CACf,MAEJ,GAAI,CACF,EAAS,KAAK,CAAK,CACrB,OAAS,EAAQ,CACf,EAAY,EACZ,EAAqB,CAAM,CAC7B,CACF,CA4BA,EACA,aAAc,CACZ,IAAI,QAAkB,CACpB,OAAO,CACT,GACC,OAAO,SAAU,EAClB,aACF,CACF,CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"_subscription.d.ts","sourceRoot":"","sources":["../src/_subscription.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAgBtE,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,EAClD,MAAM,CAAC,EAAE,WAAW,GACnB;IAAE,GAAG,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,YAAY,EAAE,YAAY,CAAA;CAAE,CA+F/G"}
1
+ {"version":3,"file":"_subscription.d.ts","sourceRoot":"","sources":["../src/_subscription.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAiBtE,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,EAClD,MAAM,CAAC,EAAE,WAAW,GACnB;IAAE,GAAG,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,YAAY,EAAE,YAAY,CAAA;CAAE,CA+F/G"}
@@ -75,6 +75,6 @@ function t(t, n) {
75
75
  };
76
76
  }
77
77
  //#endregion
78
- export { t as createSubscription };
78
+ export { t as createSubscription, e as reportUnhandledError };
79
79
 
80
80
  //# sourceMappingURL=_subscription.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_subscription.js","names":[],"sources":["../src/_subscription.ts"],"sourcesContent":["import type { Observer, Sink, Subscription, Teardown } from './types';\n\nfunction reportUnhandledError(reason: unknown): void {\n const reportError = (globalThis as { reportError?: (value: unknown) => void }).reportError;\n\n if (reportError) {\n reportError(reason);\n\n return;\n }\n\n queueMicrotask(() => {\n throw reason;\n });\n}\n\nexport function createSubscription<T>(\n observerOrNext: Observer<T> | ((value: T) => void),\n signal?: AbortSignal,\n): { add(teardown: Teardown | undefined): void; signal: AbortSignal; sink: Sink<T>; subscription: Subscription } {\n const observer: Observer<T> = typeof observerOrNext === 'function' ? { next: observerOrNext } : observerOrNext;\n const controller = new AbortController();\n let closed = false;\n let teardown: Teardown | undefined;\n\n const unsubscribe = (): void => {\n if (closed) return;\n\n closed = true;\n controller.abort();\n signal?.removeEventListener('abort', unsubscribe);\n\n try {\n teardown?.();\n } catch (reason) {\n reportUnhandledError(reason);\n }\n };\n\n const sink: Sink<T> = {\n complete(): void {\n if (closed) return;\n\n try {\n observer.complete?.();\n } catch (reason) {\n reportUnhandledError(reason);\n }\n\n unsubscribe();\n },\n\n error(reason: unknown): void {\n if (closed) return;\n\n if (observer.error) {\n try {\n observer.error(reason);\n } catch (callbackError) {\n reportUnhandledError(callbackError);\n }\n } else {\n reportUnhandledError(reason);\n }\n\n unsubscribe();\n },\n\n next(value: T): void {\n if (closed) return;\n\n try {\n observer.next(value);\n } catch (reason) {\n unsubscribe();\n reportUnhandledError(reason);\n }\n },\n };\n\n const add = (nextTeardown: Teardown | undefined): void => {\n if (!nextTeardown) return;\n\n if (closed) {\n try {\n nextTeardown();\n } catch (reason) {\n reportUnhandledError(reason);\n }\n\n return;\n }\n\n teardown = nextTeardown;\n };\n\n if (signal?.aborted) {\n unsubscribe();\n } else {\n signal?.addEventListener('abort', unsubscribe, { once: true });\n }\n\n return {\n add,\n signal: controller.signal,\n sink,\n subscription: {\n get closed(): boolean {\n return closed;\n },\n [Symbol.dispose]: unsubscribe,\n unsubscribe,\n },\n };\n}\n"],"mappings":";AAEA,SAAS,EAAqB,GAAuB;CACnD,IAAM,IAAe,WAA0D;CAE/E,IAAI,GAAa;EACf,EAAY,CAAM;EAElB;CACF;CAEA,qBAAqB;EACnB,MAAM;CACR,CAAC;AACH;AAEA,SAAgB,EACd,GACA,GAC+G;CAC/G,IAAM,IAAwB,OAAO,KAAmB,aAAa,EAAE,MAAM,EAAe,IAAI,GAC1F,IAAa,IAAI,gBAAgB,GACnC,IAAS,IACT,GAEE,UAA0B;EAC1B,QAIJ;GAFA,IAAS,IACT,EAAW,MAAM,GACjB,GAAQ,oBAAoB,SAAS,CAAW;GAEhD,IAAI;IACF,IAAW;GACb,SAAS,GAAQ;IACf,EAAqB,CAAM;GAC7B;EANgD;CAOlD;CAiEA,OANI,GAAQ,UACV,EAAY,IAEZ,GAAQ,iBAAiB,SAAS,GAAa,EAAE,MAAM,GAAK,CAAC,GAGxD;EACL,MAvBW,MAA6C;GACnD,OAEL;QAAI,GAAQ;KACV,IAAI;MACF,EAAa;KACf,SAAS,GAAQ;MACf,EAAqB,CAAM;KAC7B;KAEA;IACF;IAEA,IAAW;GAFX;EAGF;EAUE,QAAQ,EAAW;EACnB;GAjEA,WAAiB;IACX,QAEJ;SAAI;MACF,EAAS,WAAW;KACtB,SAAS,GAAQ;MACf,EAAqB,CAAM;KAC7B;KAEA,EAAY;IAFZ;GAGF;GAEA,MAAM,GAAuB;IACvB,QAEJ;SAAI,EAAS,OACX,IAAI;MACF,EAAS,MAAM,CAAM;KACvB,SAAS,GAAe;MACtB,EAAqB,CAAa;KACpC;UAEA,EAAqB,CAAM;KAG7B,EAAY;IAHiB;GAI/B;GAEA,KAAK,GAAgB;IACf,QAEJ,IAAI;KACF,EAAS,KAAK,CAAK;IACrB,SAAS,GAAQ;KAEf,AADA,EAAY,GACZ,EAAqB,CAAM;IAC7B;GACF;EA4BA;EACA,cAAc;GACZ,IAAI,SAAkB;IACpB,OAAO;GACT;IACC,OAAO,UAAU;GAClB;EACF;CACF;AACF"}
1
+ {"version":3,"file":"_subscription.js","names":[],"sources":["../src/_subscription.ts"],"sourcesContent":["import type { Observer, Sink, Subscription, Teardown } from './types';\n\n/** @internal Reports an unhandled stream error through the platform's error reporting channel. */\nexport function reportUnhandledError(reason: unknown): void {\n const reportError = (globalThis as { reportError?: (value: unknown) => void }).reportError;\n\n if (reportError) {\n reportError(reason);\n\n return;\n }\n\n queueMicrotask(() => {\n throw reason;\n });\n}\n\nexport function createSubscription<T>(\n observerOrNext: Observer<T> | ((value: T) => void),\n signal?: AbortSignal,\n): { add(teardown: Teardown | undefined): void; signal: AbortSignal; sink: Sink<T>; subscription: Subscription } {\n const observer: Observer<T> = typeof observerOrNext === 'function' ? { next: observerOrNext } : observerOrNext;\n const controller = new AbortController();\n let closed = false;\n let teardown: Teardown | undefined;\n\n const unsubscribe = (): void => {\n if (closed) return;\n\n closed = true;\n controller.abort();\n signal?.removeEventListener('abort', unsubscribe);\n\n try {\n teardown?.();\n } catch (reason) {\n reportUnhandledError(reason);\n }\n };\n\n const sink: Sink<T> = {\n complete(): void {\n if (closed) return;\n\n try {\n observer.complete?.();\n } catch (reason) {\n reportUnhandledError(reason);\n }\n\n unsubscribe();\n },\n\n error(reason: unknown): void {\n if (closed) return;\n\n if (observer.error) {\n try {\n observer.error(reason);\n } catch (callbackError) {\n reportUnhandledError(callbackError);\n }\n } else {\n reportUnhandledError(reason);\n }\n\n unsubscribe();\n },\n\n next(value: T): void {\n if (closed) return;\n\n try {\n observer.next(value);\n } catch (reason) {\n unsubscribe();\n reportUnhandledError(reason);\n }\n },\n };\n\n const add = (nextTeardown: Teardown | undefined): void => {\n if (!nextTeardown) return;\n\n if (closed) {\n try {\n nextTeardown();\n } catch (reason) {\n reportUnhandledError(reason);\n }\n\n return;\n }\n\n teardown = nextTeardown;\n };\n\n if (signal?.aborted) {\n unsubscribe();\n } else {\n signal?.addEventListener('abort', unsubscribe, { once: true });\n }\n\n return {\n add,\n signal: controller.signal,\n sink,\n subscription: {\n get closed(): boolean {\n return closed;\n },\n [Symbol.dispose]: unsubscribe,\n unsubscribe,\n },\n };\n}\n"],"mappings":";AAGA,SAAgB,EAAqB,GAAuB;CAC1D,IAAM,IAAe,WAA0D;CAE/E,IAAI,GAAa;EACf,EAAY,CAAM;EAElB;CACF;CAEA,qBAAqB;EACnB,MAAM;CACR,CAAC;AACH;AAEA,SAAgB,EACd,GACA,GAC+G;CAC/G,IAAM,IAAwB,OAAO,KAAmB,aAAa,EAAE,MAAM,EAAe,IAAI,GAC1F,IAAa,IAAI,gBAAgB,GACnC,IAAS,IACT,GAEE,UAA0B;EAC1B,QAIJ;GAFA,IAAS,IACT,EAAW,MAAM,GACjB,GAAQ,oBAAoB,SAAS,CAAW;GAEhD,IAAI;IACF,IAAW;GACb,SAAS,GAAQ;IACf,EAAqB,CAAM;GAC7B;EANgD;CAOlD;CAiEA,OANI,GAAQ,UACV,EAAY,IAEZ,GAAQ,iBAAiB,SAAS,GAAa,EAAE,MAAM,GAAK,CAAC,GAGxD;EACL,MAvBW,MAA6C;GACnD,OAEL;QAAI,GAAQ;KACV,IAAI;MACF,EAAa;KACf,SAAS,GAAQ;MACf,EAAqB,CAAM;KAC7B;KAEA;IACF;IAEA,IAAW;GAFX;EAGF;EAUE,QAAQ,EAAW;EACnB;GAjEA,WAAiB;IACX,QAEJ;SAAI;MACF,EAAS,WAAW;KACtB,SAAS,GAAQ;MACf,EAAqB,CAAM;KAC7B;KAEA,EAAY;IAFZ;GAGF;GAEA,MAAM,GAAuB;IACvB,QAEJ;SAAI,EAAS,OACX,IAAI;MACF,EAAS,MAAM,CAAM;KACvB,SAAS,GAAe;MACtB,EAAqB,CAAa;KACpC;UAEA,EAAqB,CAAM;KAG7B,EAAY;IAHiB;GAI/B;GAEA,KAAK,GAAgB;IACf,QAEJ,IAAI;KACF,EAAS,KAAK,CAAK;IACrB,SAAS,GAAQ;KAEf,AADA,EAAY,GACZ,EAAqB,CAAM;IAC7B;GACF;EA4BA;EACA,cAAc;GACZ,IAAI,SAAkB;IACpB,OAAO;GACT;IACC,OAAO,UAAU;GAClB;EACF;CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"courier.cjs","names":[],"sources":["../../src/adapters/courier.ts"],"sourcesContent":["import { stream } from '../core';\nimport type { Stream } from '../types';\n\ntype QueryCache = {\n getSnapshot<T>(key: readonly unknown[]): T | null;\n subscribe(key: readonly unknown[], onStoreChange: () => void): () => void;\n};\n\ntype QueryDefinition = {\n fetch: (...args: never[]) => Promise<unknown>;\n key: readonly unknown[];\n};\n\ntype QuerySnapshot<T> =\n | {\n readonly data: undefined;\n readonly error: null;\n readonly isFetching: boolean;\n readonly status: 'loading';\n readonly updatedAt: undefined;\n }\n | {\n readonly data: T;\n readonly error: null;\n readonly isFetching: boolean;\n readonly status: 'success';\n readonly updatedAt: number;\n }\n | {\n readonly data: T | undefined;\n readonly error: Error;\n readonly isFetching: false;\n readonly status: 'error';\n readonly updatedAt: number;\n };\n\nexport function fromQuery<T extends QueryDefinition>(\n cache: QueryCache,\n definition: T,\n): Stream<QuerySnapshot<Awaited<ReturnType<T['fetch']>>> | null> {\n return stream((sink) => {\n const snapshot = () => cache.getSnapshot<QuerySnapshot<Awaited<ReturnType<T['fetch']>>>>(definition.key);\n\n sink.next(snapshot());\n\n return cache.subscribe(definition.key, () => sink.next(snapshot()));\n });\n}\n"],"mappings":"+BAoCA,SAAgB,EACd,EACA,EAC+D,CAC/D,OAAO,EAAA,OAAQ,GAAS,CACtB,IAAM,MAAiB,EAAM,YAA4D,EAAW,GAAG,EAIvG,OAFA,EAAK,KAAK,EAAS,CAAC,EAEb,EAAM,UAAU,EAAW,QAAW,EAAK,KAAK,EAAS,CAAC,CAAC,CACpE,CAAC,CACH"}
1
+ {"version":3,"file":"courier.cjs","names":[],"sources":["../../src/adapters/courier.ts"],"sourcesContent":["import type { AsyncState, QueryCache, QueryDefinition } from '@vielzeug/courier';\nimport { stream } from '../core';\nimport type { Stream } from '../types';\n\nexport function fromQuery<T>(cache: QueryCache, definition: QueryDefinition<T>): Stream<AsyncState<T> | null> {\n return stream((sink) => {\n const snapshot = () => cache.getSnapshot<T>(definition.key);\n\n sink.next(snapshot());\n\n return cache.subscribe(definition.key, () => sink.next(snapshot()));\n });\n}\n"],"mappings":"+BAIA,SAAgB,EAAa,EAAmB,EAA8D,CAC5G,OAAO,EAAA,OAAQ,GAAS,CACtB,IAAM,MAAiB,EAAM,YAAe,EAAW,GAAG,EAI1D,OAFA,EAAK,KAAK,EAAS,CAAC,EAEb,EAAM,UAAU,EAAW,QAAW,EAAK,KAAK,EAAS,CAAC,CAAC,CACpE,CAAC,CACH"}
@@ -1,31 +1,4 @@
1
+ import type { AsyncState, QueryCache, QueryDefinition } from '@vielzeug/courier';
1
2
  import type { Stream } from '../types';
2
- type QueryCache = {
3
- getSnapshot<T>(key: readonly unknown[]): T | null;
4
- subscribe(key: readonly unknown[], onStoreChange: () => void): () => void;
5
- };
6
- type QueryDefinition = {
7
- fetch: (...args: never[]) => Promise<unknown>;
8
- key: readonly unknown[];
9
- };
10
- type QuerySnapshot<T> = {
11
- readonly data: undefined;
12
- readonly error: null;
13
- readonly isFetching: boolean;
14
- readonly status: 'loading';
15
- readonly updatedAt: undefined;
16
- } | {
17
- readonly data: T;
18
- readonly error: null;
19
- readonly isFetching: boolean;
20
- readonly status: 'success';
21
- readonly updatedAt: number;
22
- } | {
23
- readonly data: T | undefined;
24
- readonly error: Error;
25
- readonly isFetching: false;
26
- readonly status: 'error';
27
- readonly updatedAt: number;
28
- };
29
- export declare function fromQuery<T extends QueryDefinition>(cache: QueryCache, definition: T): Stream<QuerySnapshot<Awaited<ReturnType<T['fetch']>>> | null>;
30
- export {};
3
+ export declare function fromQuery<T>(cache: QueryCache, definition: QueryDefinition<T>): Stream<AsyncState<T> | null>;
31
4
  //# sourceMappingURL=courier.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"courier.d.ts","sourceRoot":"","sources":["../../src/adapters/courier.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,KAAK,UAAU,GAAG;IAChB,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,OAAO,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IAClD,SAAS,CAAC,GAAG,EAAE,SAAS,OAAO,EAAE,EAAE,aAAa,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CAC3E,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,GAAG,EAAE,SAAS,OAAO,EAAE,CAAC;CACzB,CAAC;AAEF,KAAK,aAAa,CAAC,CAAC,IAChB;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEN,wBAAgB,SAAS,CAAC,CAAC,SAAS,eAAe,EACjD,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,CAAC,GACZ,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAQ/D"}
1
+ {"version":3,"file":"courier.d.ts","sourceRoot":"","sources":["../../src/adapters/courier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEjF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAQ5G"}
@@ -1 +1 @@
1
- {"version":3,"file":"courier.js","names":[],"sources":["../../src/adapters/courier.ts"],"sourcesContent":["import { stream } from '../core';\nimport type { Stream } from '../types';\n\ntype QueryCache = {\n getSnapshot<T>(key: readonly unknown[]): T | null;\n subscribe(key: readonly unknown[], onStoreChange: () => void): () => void;\n};\n\ntype QueryDefinition = {\n fetch: (...args: never[]) => Promise<unknown>;\n key: readonly unknown[];\n};\n\ntype QuerySnapshot<T> =\n | {\n readonly data: undefined;\n readonly error: null;\n readonly isFetching: boolean;\n readonly status: 'loading';\n readonly updatedAt: undefined;\n }\n | {\n readonly data: T;\n readonly error: null;\n readonly isFetching: boolean;\n readonly status: 'success';\n readonly updatedAt: number;\n }\n | {\n readonly data: T | undefined;\n readonly error: Error;\n readonly isFetching: false;\n readonly status: 'error';\n readonly updatedAt: number;\n };\n\nexport function fromQuery<T extends QueryDefinition>(\n cache: QueryCache,\n definition: T,\n): Stream<QuerySnapshot<Awaited<ReturnType<T['fetch']>>> | null> {\n return stream((sink) => {\n const snapshot = () => cache.getSnapshot<QuerySnapshot<Awaited<ReturnType<T['fetch']>>>>(definition.key);\n\n sink.next(snapshot());\n\n return cache.subscribe(definition.key, () => sink.next(snapshot()));\n });\n}\n"],"mappings":";;AAoCA,SAAgB,EACd,GACA,GAC+D;CAC/D,OAAO,GAAQ,MAAS;EACtB,IAAM,UAAiB,EAAM,YAA4D,EAAW,GAAG;EAIvG,OAFA,EAAK,KAAK,EAAS,CAAC,GAEb,EAAM,UAAU,EAAW,WAAW,EAAK,KAAK,EAAS,CAAC,CAAC;CACpE,CAAC;AACH"}
1
+ {"version":3,"file":"courier.js","names":[],"sources":["../../src/adapters/courier.ts"],"sourcesContent":["import type { AsyncState, QueryCache, QueryDefinition } from '@vielzeug/courier';\nimport { stream } from '../core';\nimport type { Stream } from '../types';\n\nexport function fromQuery<T>(cache: QueryCache, definition: QueryDefinition<T>): Stream<AsyncState<T> | null> {\n return stream((sink) => {\n const snapshot = () => cache.getSnapshot<T>(definition.key);\n\n sink.next(snapshot());\n\n return cache.subscribe(definition.key, () => sink.next(snapshot()));\n });\n}\n"],"mappings":";;AAIA,SAAgB,EAAa,GAAmB,GAA8D;CAC5G,OAAO,GAAQ,MAAS;EACtB,IAAM,UAAiB,EAAM,YAAe,EAAW,GAAG;EAI1D,OAFA,EAAK,KAAK,EAAS,CAAC,GAEb,EAAM,UAAU,EAAW,WAAW,EAAK,KAAK,EAAS,CAAC,CAAC;CACpE,CAAC;AACH"}
@@ -1,2 +1,2 @@
1
- const e=require("../core.cjs");require("../_dev.cjs");let t=require("@vielzeug/ripple");function n(t){return e.stream(e=>(e.next(t.value),t.subscribe(()=>e.next(t.value))))}function r(e,n){let r=(0,t.signal)(n.initial),i=new AbortController,a={},o=()=>{i.signal.aborted||(i.abort(),n.signal?.removeEventListener(`abort`,o),a.current?.unsubscribe())};return n.signal?.aborted&&i.abort(),a.current=e.subscribe({complete:o,error(e){if(n.onError)try{n.onError(e)}catch{}o()},next(e){r.value=e}},{signal:i.signal}),i.signal.aborted||n.signal?.addEventListener(`abort`,o,{once:!0}),{get disposalSignal(){return i.signal},dispose:o,get disposed(){return i.signal.aborted},get signal(){return r},[Symbol.dispose]:o,get value(){return r.value}}}exports.fromSignal=n,exports.toSignal=r;
1
+ const e=require("../_subscription.cjs"),t=require("../core.cjs");let n=require("@vielzeug/ripple");function r(e){return t.stream(t=>(t.next(e.value),e.subscribe(()=>t.next(e.value))))}function i(t,r){let i=(0,n.signal)(r.initial),a=new AbortController,o={},s=()=>{a.signal.aborted||(a.abort(),r.signal?.removeEventListener(`abort`,s),o.current?.unsubscribe())};return r.signal?.aborted&&a.abort(),o.current=t.subscribe({complete:s,error(t){if(r.onError)try{r.onError(t)}catch(t){e.reportUnhandledError(t)}else e.reportUnhandledError(t);s()},next(e){i.value=e}},{signal:a.signal}),a.signal.aborted||r.signal?.addEventListener(`abort`,s,{once:!0}),{get disposalSignal(){return a.signal},dispose:s,get disposed(){return a.signal.aborted},get signal(){return i},[Symbol.dispose]:s,get value(){return i.value}}}exports.fromSignal=r,exports.toSignal=i;
2
2
  //# sourceMappingURL=ripple.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ripple.cjs","names":[],"sources":["../../src/adapters/ripple.ts"],"sourcesContent":["import type { Readable } from '@vielzeug/ripple';\n\nimport { signal } from '@vielzeug/ripple';\nimport { error } from '../_dev';\nimport { stream } from '../core';\nimport type { Stream, Subscription } from '../types';\n\nexport type ToSignalOptions<T> = {\n initial: T;\n /** Called when the source stream errors. If omitted, the error is logged via `console.error` (dev-only) and the binding disposes — the signal freezes at its last value. */\n onError?: (reason: unknown) => void;\n signal?: AbortSignal;\n};\n\nexport type SignalBinding<T> = {\n [Symbol.dispose](): void;\n readonly disposalSignal: AbortSignal;\n dispose(): void;\n readonly disposed: boolean;\n readonly signal: Readable<T>;\n readonly value: T;\n};\n\nexport function fromSignal<T>(source: Readable<T>): Stream<T> {\n return stream((sink) => {\n sink.next(source.value);\n\n return source.subscribe(() => sink.next(source.value));\n });\n}\n\nexport function toSignal<T>(source: Stream<T>, options: ToSignalOptions<T>): SignalBinding<T> {\n const target = signal(options.initial);\n const controller = new AbortController();\n const subscriptionRef: { current?: Subscription } = {};\n\n const dispose = (): void => {\n if (controller.signal.aborted) return;\n\n controller.abort();\n options.signal?.removeEventListener('abort', dispose);\n subscriptionRef.current?.unsubscribe();\n };\n\n if (options.signal?.aborted) controller.abort();\n\n subscriptionRef.current = source.subscribe(\n {\n complete: dispose,\n error(reason) {\n if (options.onError) {\n try {\n options.onError(reason);\n } catch (callbackError) {\n error('toSignal onError callback threw', callbackError);\n }\n } else {\n error('toSignal source error', reason);\n }\n dispose();\n },\n next(value) {\n target.value = value;\n },\n },\n { signal: controller.signal },\n );\n\n if (!controller.signal.aborted) options.signal?.addEventListener('abort', dispose, { once: true });\n\n return {\n get disposalSignal(): AbortSignal {\n return controller.signal;\n },\n dispose,\n get disposed(): boolean {\n return controller.signal.aborted;\n },\n get signal(): Readable<T> {\n return target;\n },\n [Symbol.dispose]: dispose,\n get value(): T {\n return target.value;\n },\n };\n}\n"],"mappings":"wFAuBA,SAAgB,EAAc,EAAgC,CAC5D,OAAO,EAAA,OAAQ,IACb,EAAK,KAAK,EAAO,KAAK,EAEf,EAAO,cAAgB,EAAK,KAAK,EAAO,KAAK,CAAC,EACtD,CACH,CAEA,SAAgB,EAAY,EAAmB,EAA+C,CAC5F,IAAM,GAAA,EAAS,EAAA,OAAA,CAAO,EAAQ,OAAO,EAC/B,EAAa,IAAI,gBACjB,EAA8C,CAAC,EAE/C,MAAsB,CACtB,EAAW,OAAO,UAEtB,EAAW,MAAM,EACjB,EAAQ,QAAQ,oBAAoB,QAAS,CAAO,EACpD,EAAgB,SAAS,YAAY,EACvC,EA4BA,OA1BI,EAAQ,QAAQ,SAAS,EAAW,MAAM,EAE9C,EAAgB,QAAU,EAAO,UAC/B,CACE,SAAU,EACV,MAAM,EAAQ,CACZ,GAAI,EAAQ,QACV,GAAI,CACF,EAAQ,QAAQ,CAAM,CACxB,MAAwB,CAExB,CAIF,EAAQ,CACV,EACA,KAAK,EAAO,CACV,EAAO,MAAQ,CACjB,CACF,EACA,CAAE,OAAQ,EAAW,MAAO,CAC9B,EAEK,EAAW,OAAO,SAAS,EAAQ,QAAQ,iBAAiB,QAAS,EAAS,CAAE,KAAM,EAAK,CAAC,EAE1F,CACL,IAAI,gBAA8B,CAChC,OAAO,EAAW,MACpB,EACA,UACA,IAAI,UAAoB,CACtB,OAAO,EAAW,OAAO,OAC3B,EACA,IAAI,QAAsB,CACxB,OAAO,CACT,GACC,OAAO,SAAU,EAClB,IAAI,OAAW,CACb,OAAO,EAAO,KAChB,CACF,CACF"}
1
+ {"version":3,"file":"ripple.cjs","names":[],"sources":["../../src/adapters/ripple.ts"],"sourcesContent":["import type { Readable } from '@vielzeug/ripple';\n\nimport { signal } from '@vielzeug/ripple';\nimport { reportUnhandledError } from '../_subscription';\nimport { stream } from '../core';\nimport type { Stream, Subscription } from '../types';\n\nexport type ToSignalOptions<T> = {\n initial: T;\n /** Called when the source stream errors. If omitted, the error is logged via `console.error` (dev-only) and the binding disposes — the signal freezes at its last value. */\n onError?: (reason: unknown) => void;\n signal?: AbortSignal;\n};\n\nexport type SignalBinding<T> = {\n [Symbol.dispose](): void;\n readonly disposalSignal: AbortSignal;\n dispose(): void;\n readonly disposed: boolean;\n readonly signal: Readable<T>;\n readonly value: T;\n};\n\nexport function fromSignal<T>(source: Readable<T>): Stream<T> {\n return stream((sink) => {\n sink.next(source.value);\n\n return source.subscribe(() => sink.next(source.value));\n });\n}\n\nexport function toSignal<T>(source: Stream<T>, options: ToSignalOptions<T>): SignalBinding<T> {\n const target = signal(options.initial);\n const controller = new AbortController();\n const subscriptionRef: { current?: Subscription } = {};\n\n const dispose = (): void => {\n if (controller.signal.aborted) return;\n\n controller.abort();\n options.signal?.removeEventListener('abort', dispose);\n subscriptionRef.current?.unsubscribe();\n };\n\n if (options.signal?.aborted) controller.abort();\n\n subscriptionRef.current = source.subscribe(\n {\n complete: dispose,\n error(reason) {\n if (options.onError) {\n try {\n options.onError(reason);\n } catch (callbackError) {\n reportUnhandledError(callbackError);\n }\n } else {\n reportUnhandledError(reason);\n }\n dispose();\n },\n next(value) {\n target.value = value;\n },\n },\n { signal: controller.signal },\n );\n\n if (!controller.signal.aborted) options.signal?.addEventListener('abort', dispose, { once: true });\n\n return {\n get disposalSignal(): AbortSignal {\n return controller.signal;\n },\n dispose,\n get disposed(): boolean {\n return controller.signal.aborted;\n },\n get signal(): Readable<T> {\n return target;\n },\n [Symbol.dispose]: dispose,\n get value(): T {\n return target.value;\n },\n };\n}\n"],"mappings":"mGAuBA,SAAgB,EAAc,EAAgC,CAC5D,OAAO,EAAA,OAAQ,IACb,EAAK,KAAK,EAAO,KAAK,EAEf,EAAO,cAAgB,EAAK,KAAK,EAAO,KAAK,CAAC,EACtD,CACH,CAEA,SAAgB,EAAY,EAAmB,EAA+C,CAC5F,IAAM,GAAA,EAAS,EAAA,OAAA,CAAO,EAAQ,OAAO,EAC/B,EAAa,IAAI,gBACjB,EAA8C,CAAC,EAE/C,MAAsB,CACtB,EAAW,OAAO,UAEtB,EAAW,MAAM,EACjB,EAAQ,QAAQ,oBAAoB,QAAS,CAAO,EACpD,EAAgB,SAAS,YAAY,EACvC,EA4BA,OA1BI,EAAQ,QAAQ,SAAS,EAAW,MAAM,EAE9C,EAAgB,QAAU,EAAO,UAC/B,CACE,SAAU,EACV,MAAM,EAAQ,CACZ,GAAI,EAAQ,QACV,GAAI,CACF,EAAQ,QAAQ,CAAM,CACxB,OAAS,EAAe,CACtB,EAAA,qBAAqB,CAAa,CACpC,MAEA,EAAA,qBAAqB,CAAM,EAE7B,EAAQ,CACV,EACA,KAAK,EAAO,CACV,EAAO,MAAQ,CACjB,CACF,EACA,CAAE,OAAQ,EAAW,MAAO,CAC9B,EAEK,EAAW,OAAO,SAAS,EAAQ,QAAQ,iBAAiB,QAAS,EAAS,CAAE,KAAM,EAAK,CAAC,EAE1F,CACL,IAAI,gBAA8B,CAChC,OAAO,EAAW,MACpB,EACA,UACA,IAAI,UAAoB,CACtB,OAAO,EAAW,OAAO,OAC3B,EACA,IAAI,QAAsB,CACxB,OAAO,CACT,GACC,OAAO,SAAU,EAClB,IAAI,OAAW,CACb,OAAO,EAAO,KAChB,CACF,CACF"}
@@ -1,43 +1,46 @@
1
- import { stream as e } from "../core.js";
2
- import "../_dev.js";
3
- import { signal as t } from "@vielzeug/ripple";
1
+ import { reportUnhandledError as e } from "../_subscription.js";
2
+ import { stream as t } from "../core.js";
3
+ import { signal as n } from "@vielzeug/ripple";
4
4
  //#region src/adapters/ripple.ts
5
- function n(t) {
6
- return e((e) => (e.next(t.value), t.subscribe(() => e.next(t.value))));
5
+ function r(e) {
6
+ return t((t) => (t.next(e.value), e.subscribe(() => t.next(e.value))));
7
7
  }
8
- function r(e, n) {
9
- let r = t(n.initial), i = new AbortController(), a = {}, o = () => {
10
- i.signal.aborted || (i.abort(), n.signal?.removeEventListener("abort", o), a.current?.unsubscribe());
8
+ function i(t, r) {
9
+ let i = n(r.initial), a = new AbortController(), o = {}, s = () => {
10
+ a.signal.aborted || (a.abort(), r.signal?.removeEventListener("abort", s), o.current?.unsubscribe());
11
11
  };
12
- return n.signal?.aborted && i.abort(), a.current = e.subscribe({
13
- complete: o,
14
- error(e) {
15
- if (n.onError) try {
16
- n.onError(e);
17
- } catch {}
18
- o();
12
+ return r.signal?.aborted && a.abort(), o.current = t.subscribe({
13
+ complete: s,
14
+ error(t) {
15
+ if (r.onError) try {
16
+ r.onError(t);
17
+ } catch (t) {
18
+ e(t);
19
+ }
20
+ else e(t);
21
+ s();
19
22
  },
20
23
  next(e) {
21
- r.value = e;
24
+ i.value = e;
22
25
  }
23
- }, { signal: i.signal }), i.signal.aborted || n.signal?.addEventListener("abort", o, { once: !0 }), {
26
+ }, { signal: a.signal }), a.signal.aborted || r.signal?.addEventListener("abort", s, { once: !0 }), {
24
27
  get disposalSignal() {
25
- return i.signal;
28
+ return a.signal;
26
29
  },
27
- dispose: o,
30
+ dispose: s,
28
31
  get disposed() {
29
- return i.signal.aborted;
32
+ return a.signal.aborted;
30
33
  },
31
34
  get signal() {
32
- return r;
35
+ return i;
33
36
  },
34
- [Symbol.dispose]: o,
37
+ [Symbol.dispose]: s,
35
38
  get value() {
36
- return r.value;
39
+ return i.value;
37
40
  }
38
41
  };
39
42
  }
40
43
  //#endregion
41
- export { n as fromSignal, r as toSignal };
44
+ export { r as fromSignal, i as toSignal };
42
45
 
43
46
  //# sourceMappingURL=ripple.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ripple.js","names":[],"sources":["../../src/adapters/ripple.ts"],"sourcesContent":["import type { Readable } from '@vielzeug/ripple';\n\nimport { signal } from '@vielzeug/ripple';\nimport { error } from '../_dev';\nimport { stream } from '../core';\nimport type { Stream, Subscription } from '../types';\n\nexport type ToSignalOptions<T> = {\n initial: T;\n /** Called when the source stream errors. If omitted, the error is logged via `console.error` (dev-only) and the binding disposes — the signal freezes at its last value. */\n onError?: (reason: unknown) => void;\n signal?: AbortSignal;\n};\n\nexport type SignalBinding<T> = {\n [Symbol.dispose](): void;\n readonly disposalSignal: AbortSignal;\n dispose(): void;\n readonly disposed: boolean;\n readonly signal: Readable<T>;\n readonly value: T;\n};\n\nexport function fromSignal<T>(source: Readable<T>): Stream<T> {\n return stream((sink) => {\n sink.next(source.value);\n\n return source.subscribe(() => sink.next(source.value));\n });\n}\n\nexport function toSignal<T>(source: Stream<T>, options: ToSignalOptions<T>): SignalBinding<T> {\n const target = signal(options.initial);\n const controller = new AbortController();\n const subscriptionRef: { current?: Subscription } = {};\n\n const dispose = (): void => {\n if (controller.signal.aborted) return;\n\n controller.abort();\n options.signal?.removeEventListener('abort', dispose);\n subscriptionRef.current?.unsubscribe();\n };\n\n if (options.signal?.aborted) controller.abort();\n\n subscriptionRef.current = source.subscribe(\n {\n complete: dispose,\n error(reason) {\n if (options.onError) {\n try {\n options.onError(reason);\n } catch (callbackError) {\n error('toSignal onError callback threw', callbackError);\n }\n } else {\n error('toSignal source error', reason);\n }\n dispose();\n },\n next(value) {\n target.value = value;\n },\n },\n { signal: controller.signal },\n );\n\n if (!controller.signal.aborted) options.signal?.addEventListener('abort', dispose, { once: true });\n\n return {\n get disposalSignal(): AbortSignal {\n return controller.signal;\n },\n dispose,\n get disposed(): boolean {\n return controller.signal.aborted;\n },\n get signal(): Readable<T> {\n return target;\n },\n [Symbol.dispose]: dispose,\n get value(): T {\n return target.value;\n },\n };\n}\n"],"mappings":";;;;AAuBA,SAAgB,EAAc,GAAgC;CAC5D,OAAO,GAAQ,OACb,EAAK,KAAK,EAAO,KAAK,GAEf,EAAO,gBAAgB,EAAK,KAAK,EAAO,KAAK,CAAC,EACtD;AACH;AAEA,SAAgB,EAAY,GAAmB,GAA+C;CAC5F,IAAM,IAAS,EAAO,EAAQ,OAAO,GAC/B,IAAa,IAAI,gBAAgB,GACjC,IAA8C,CAAC,GAE/C,UAAsB;EACtB,EAAW,OAAO,YAEtB,EAAW,MAAM,GACjB,EAAQ,QAAQ,oBAAoB,SAAS,CAAO,GACpD,EAAgB,SAAS,YAAY;CACvC;CA4BA,OA1BI,EAAQ,QAAQ,WAAS,EAAW,MAAM,GAE9C,EAAgB,UAAU,EAAO,UAC/B;EACE,UAAU;EACV,MAAM,GAAQ;GACZ,IAAI,EAAQ,SACV,IAAI;IACF,EAAQ,QAAQ,CAAM;GACxB,QAAwB,CAExB;GAIF,EAAQ;EACV;EACA,KAAK,GAAO;GACV,EAAO,QAAQ;EACjB;CACF,GACA,EAAE,QAAQ,EAAW,OAAO,CAC9B,GAEK,EAAW,OAAO,WAAS,EAAQ,QAAQ,iBAAiB,SAAS,GAAS,EAAE,MAAM,GAAK,CAAC,GAE1F;EACL,IAAI,iBAA8B;GAChC,OAAO,EAAW;EACpB;EACA;EACA,IAAI,WAAoB;GACtB,OAAO,EAAW,OAAO;EAC3B;EACA,IAAI,SAAsB;GACxB,OAAO;EACT;GACC,OAAO,UAAU;EAClB,IAAI,QAAW;GACb,OAAO,EAAO;EAChB;CACF;AACF"}
1
+ {"version":3,"file":"ripple.js","names":[],"sources":["../../src/adapters/ripple.ts"],"sourcesContent":["import type { Readable } from '@vielzeug/ripple';\n\nimport { signal } from '@vielzeug/ripple';\nimport { reportUnhandledError } from '../_subscription';\nimport { stream } from '../core';\nimport type { Stream, Subscription } from '../types';\n\nexport type ToSignalOptions<T> = {\n initial: T;\n /** Called when the source stream errors. If omitted, the error is logged via `console.error` (dev-only) and the binding disposes — the signal freezes at its last value. */\n onError?: (reason: unknown) => void;\n signal?: AbortSignal;\n};\n\nexport type SignalBinding<T> = {\n [Symbol.dispose](): void;\n readonly disposalSignal: AbortSignal;\n dispose(): void;\n readonly disposed: boolean;\n readonly signal: Readable<T>;\n readonly value: T;\n};\n\nexport function fromSignal<T>(source: Readable<T>): Stream<T> {\n return stream((sink) => {\n sink.next(source.value);\n\n return source.subscribe(() => sink.next(source.value));\n });\n}\n\nexport function toSignal<T>(source: Stream<T>, options: ToSignalOptions<T>): SignalBinding<T> {\n const target = signal(options.initial);\n const controller = new AbortController();\n const subscriptionRef: { current?: Subscription } = {};\n\n const dispose = (): void => {\n if (controller.signal.aborted) return;\n\n controller.abort();\n options.signal?.removeEventListener('abort', dispose);\n subscriptionRef.current?.unsubscribe();\n };\n\n if (options.signal?.aborted) controller.abort();\n\n subscriptionRef.current = source.subscribe(\n {\n complete: dispose,\n error(reason) {\n if (options.onError) {\n try {\n options.onError(reason);\n } catch (callbackError) {\n reportUnhandledError(callbackError);\n }\n } else {\n reportUnhandledError(reason);\n }\n dispose();\n },\n next(value) {\n target.value = value;\n },\n },\n { signal: controller.signal },\n );\n\n if (!controller.signal.aborted) options.signal?.addEventListener('abort', dispose, { once: true });\n\n return {\n get disposalSignal(): AbortSignal {\n return controller.signal;\n },\n dispose,\n get disposed(): boolean {\n return controller.signal.aborted;\n },\n get signal(): Readable<T> {\n return target;\n },\n [Symbol.dispose]: dispose,\n get value(): T {\n return target.value;\n },\n };\n}\n"],"mappings":";;;;AAuBA,SAAgB,EAAc,GAAgC;CAC5D,OAAO,GAAQ,OACb,EAAK,KAAK,EAAO,KAAK,GAEf,EAAO,gBAAgB,EAAK,KAAK,EAAO,KAAK,CAAC,EACtD;AACH;AAEA,SAAgB,EAAY,GAAmB,GAA+C;CAC5F,IAAM,IAAS,EAAO,EAAQ,OAAO,GAC/B,IAAa,IAAI,gBAAgB,GACjC,IAA8C,CAAC,GAE/C,UAAsB;EACtB,EAAW,OAAO,YAEtB,EAAW,MAAM,GACjB,EAAQ,QAAQ,oBAAoB,SAAS,CAAO,GACpD,EAAgB,SAAS,YAAY;CACvC;CA4BA,OA1BI,EAAQ,QAAQ,WAAS,EAAW,MAAM,GAE9C,EAAgB,UAAU,EAAO,UAC/B;EACE,UAAU;EACV,MAAM,GAAQ;GACZ,IAAI,EAAQ,SACV,IAAI;IACF,EAAQ,QAAQ,CAAM;GACxB,SAAS,GAAe;IACtB,EAAqB,CAAa;GACpC;QAEA,EAAqB,CAAM;GAE7B,EAAQ;EACV;EACA,KAAK,GAAO;GACV,EAAO,QAAQ;EACjB;CACF,GACA,EAAE,QAAQ,EAAW,OAAO,CAC9B,GAEK,EAAW,OAAO,WAAS,EAAQ,QAAQ,iBAAiB,SAAS,GAAS,EAAE,MAAM,GAAK,CAAC,GAE1F;EACL,IAAI,iBAA8B;GAChC,OAAO,EAAW;EACpB;EACA;EACA,IAAI,WAAoB;GACtB,OAAO,EAAW,OAAO;EAC3B;EACA,IAAI,SAAsB;GACxB,OAAO;EACT;GACC,OAAO,UAAU;EAClB,IAAI,QAAW;GACb,OAAO,EAAO;EAChB;CACF;AACF"}
package/dist/channel.cjs CHANGED
@@ -1,2 +1,2 @@
1
- const e=require("./_numeric.cjs"),t=require("./core.cjs");function n(t){let n=`initial`in t,r=t.replay??+!!n;if(e.assertNonNegativeInteger(r,`Channel replay`),n&&r===0)throw RangeError(`Channel replay cannot be 0 when initial is provided — the initial value would be immediately dropped`);return r}function r(e={}){let r=n(e),i=new AbortController,a=new Set,o=[];`initial`in e&&r>0&&o.push(e.initial);let s=t.stream(e=>{for(let t of o)e.next(t);if(i.signal.aborted){e.complete();return}return a.add(e),()=>a.delete(e)}),c=()=>{if(!i.signal.aborted){i.abort();for(let e of[...a])e.complete();a.clear()}};return{get disposalSignal(){return i.signal},dispose:c,get disposed(){return i.signal.aborted},send(e){if(!i.signal.aborted){r>0&&(o.length===r&&o.shift(),o.push(e));for(let t of[...a])t.next(e)}},stream:s,[Symbol.dispose]:c}}exports.createChannel=r;
1
+ const e=require("./_numeric.cjs"),t=require("./core.cjs");function n(t){let n=`initial`in t,r=t.replay??+!!n;if(e.assertNonNegativeInteger(r,`Channel replay`),n&&r===0)throw RangeError(`Channel replay cannot be 0 when initial is provided — the initial value would be immediately dropped`);return r}function r(e={}){let r=n(e),i=new AbortController,a=new Set,o=[];`initial`in e&&r>0&&o.push(e.initial);let s=t.stream(e=>{if(i.signal.aborted){e.complete();return}for(let t of o)e.next(t);return a.add(e),()=>a.delete(e)}),c=()=>{if(!i.signal.aborted){i.abort();for(let e of[...a])e.complete();a.clear()}},l=!1,u=[],d=()=>{l=!0;try{for(;u.length>0;){let e=u.shift();r>0&&(o.length===r&&o.shift(),o.push(e));for(let t of[...a])t.next(e)}}finally{l=!1}};return{get disposalSignal(){return i.signal},dispose:c,get disposed(){return i.signal.aborted},send(e){i.signal.aborted||(u.push(e),l||d())},stream:s,[Symbol.dispose]:c}}exports.createChannel=r;
2
2
  //# sourceMappingURL=channel.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"channel.cjs","names":[],"sources":["../src/channel.ts"],"sourcesContent":["import { assertNonNegativeInteger } from './_numeric';\nimport { stream } from './core';\nimport type { Sink, Stream } from './types';\n\nexport type ChannelOptions<T> = {\n initial?: T;\n replay?: number;\n};\n\nexport type Channel<T> = {\n [Symbol.dispose](): void;\n readonly disposalSignal: AbortSignal;\n dispose(): void;\n readonly disposed: boolean;\n send(value: T): void;\n readonly stream: Stream<T>;\n};\n\nfunction replayCapacity<T>(options: ChannelOptions<T>): number {\n const hasInitial = 'initial' in options;\n const capacity = options.replay ?? (hasInitial ? 1 : 0);\n\n assertNonNegativeInteger(capacity, 'Channel replay');\n\n if (hasInitial && capacity === 0) {\n throw new RangeError(\n 'Channel replay cannot be 0 when initial is provided — the initial value would be immediately dropped',\n );\n }\n\n return capacity;\n}\n\n/** Channels own mutable multicast state; disposal is their only terminal event. */\nexport function createChannel<T>(options: ChannelOptions<T> = {}): Channel<T> {\n const capacity = replayCapacity(options);\n const controller = new AbortController();\n const listeners = new Set<Sink<T>>();\n const replay: T[] = [];\n\n if ('initial' in options && capacity > 0) replay.push(options.initial as T);\n\n const source = stream<T>((sink) => {\n for (const value of replay) sink.next(value);\n\n if (controller.signal.aborted) {\n sink.complete();\n\n return;\n }\n\n listeners.add(sink);\n\n return () => listeners.delete(sink);\n });\n\n const dispose = (): void => {\n if (controller.signal.aborted) return;\n\n controller.abort();\n\n for (const listener of [...listeners]) listener.complete();\n\n listeners.clear();\n };\n\n return {\n get disposalSignal(): AbortSignal {\n return controller.signal;\n },\n dispose,\n get disposed(): boolean {\n return controller.signal.aborted;\n },\n send(value: T): void {\n if (controller.signal.aborted) return;\n\n if (capacity > 0) {\n if (replay.length === capacity) replay.shift();\n\n replay.push(value);\n }\n\n for (const listener of [...listeners]) listener.next(value);\n },\n stream: source,\n [Symbol.dispose]: dispose,\n };\n}\n"],"mappings":"0DAkBA,SAAS,EAAkB,EAAoC,CAC7D,IAAM,EAAa,YAAa,EAC1B,EAAW,EAAQ,QAAW,KAIpC,GAFA,EAAA,yBAAyB,EAAU,gBAAgB,EAE/C,GAAc,IAAa,EAC7B,MAAU,WACR,sGACF,EAGF,OAAO,CACT,CAGA,SAAgB,EAAiB,EAA6B,CAAC,EAAe,CAC5E,IAAM,EAAW,EAAe,CAAO,EACjC,EAAa,IAAI,gBACjB,EAAY,IAAI,IAChB,EAAc,CAAC,EAEjB,YAAa,GAAW,EAAW,GAAG,EAAO,KAAK,EAAQ,OAAY,EAE1E,IAAM,EAAS,EAAA,OAAW,GAAS,CACjC,IAAK,IAAM,KAAS,EAAQ,EAAK,KAAK,CAAK,EAE3C,GAAI,EAAW,OAAO,QAAS,CAC7B,EAAK,SAAS,EAEd,MACF,CAIA,OAFA,EAAU,IAAI,CAAI,MAEL,EAAU,OAAO,CAAI,CACpC,CAAC,EAEK,MAAsB,CACtB,MAAW,OAAO,QAEtB,GAAW,MAAM,EAEjB,IAAK,IAAM,IAAY,CAAC,GAAG,CAAS,EAAG,EAAS,SAAS,EAEzD,EAAU,MAAM,CAJC,CAKnB,EAEA,MAAO,CACL,IAAI,gBAA8B,CAChC,OAAO,EAAW,MACpB,EACA,UACA,IAAI,UAAoB,CACtB,OAAO,EAAW,OAAO,OAC3B,EACA,KAAK,EAAgB,CACf,MAAW,OAAO,QAEtB,CAAI,EAAW,IACT,EAAO,SAAW,GAAU,EAAO,MAAM,EAE7C,EAAO,KAAK,CAAK,GAGnB,IAAK,IAAM,IAAY,CAAC,GAAG,CAAS,EAAG,EAAS,KAAK,CAAK,CAF1D,CAGF,EACA,OAAQ,GACP,OAAO,SAAU,CACpB,CACF"}
1
+ {"version":3,"file":"channel.cjs","names":[],"sources":["../src/channel.ts"],"sourcesContent":["import { assertNonNegativeInteger } from './_numeric';\nimport { stream } from './core';\nimport type { Sink, Stream } from './types';\n\nexport type ChannelOptions<T> = {\n initial?: T;\n replay?: number;\n};\n\nexport type Channel<T> = {\n [Symbol.dispose](): void;\n readonly disposalSignal: AbortSignal;\n dispose(): void;\n readonly disposed: boolean;\n send(value: T): void;\n readonly stream: Stream<T>;\n};\n\nfunction replayCapacity<T>(options: ChannelOptions<T>): number {\n const hasInitial = 'initial' in options;\n const capacity = options.replay ?? (hasInitial ? 1 : 0);\n\n assertNonNegativeInteger(capacity, 'Channel replay');\n\n if (hasInitial && capacity === 0) {\n throw new RangeError(\n 'Channel replay cannot be 0 when initial is provided — the initial value would be immediately dropped',\n );\n }\n\n return capacity;\n}\n\n/** Channels own mutable multicast state; disposal is their only terminal event. */\nexport function createChannel<T>(options: ChannelOptions<T> = {}): Channel<T> {\n const capacity = replayCapacity(options);\n const controller = new AbortController();\n const listeners = new Set<Sink<T>>();\n const replay: T[] = [];\n\n if ('initial' in options && capacity > 0) replay.push(options.initial as T);\n\n const source = stream<T>((sink) => {\n // Disposed channels complete new subscribers immediately without replaying\n // retained values — a late subscriber never observes stale state.\n if (controller.signal.aborted) {\n sink.complete();\n\n return;\n }\n\n for (const value of replay) sink.next(value);\n\n listeners.add(sink);\n\n return () => listeners.delete(sink);\n });\n\n const dispose = (): void => {\n if (controller.signal.aborted) return;\n\n controller.abort();\n\n for (const listener of [...listeners]) listener.complete();\n\n listeners.clear();\n };\n\n let dispatching = false;\n const pending: T[] = [];\n\n const flush = (): void => {\n dispatching = true;\n\n try {\n while (pending.length > 0) {\n const value = pending.shift()!;\n\n if (capacity > 0) {\n if (replay.length === capacity) replay.shift();\n\n replay.push(value);\n }\n\n for (const listener of [...listeners]) listener.next(value);\n }\n } finally {\n dispatching = false;\n }\n };\n\n return {\n get disposalSignal(): AbortSignal {\n return controller.signal;\n },\n dispose,\n get disposed(): boolean {\n return controller.signal.aborted;\n },\n send(value: T): void {\n if (controller.signal.aborted) return;\n\n pending.push(value);\n\n // Reentrant sends (a listener calling `send` while receiving a previous\n // value) are queued so every listener observes one global FIFO order.\n if (!dispatching) flush();\n },\n stream: source,\n [Symbol.dispose]: dispose,\n };\n}\n"],"mappings":"0DAkBA,SAAS,EAAkB,EAAoC,CAC7D,IAAM,EAAa,YAAa,EAC1B,EAAW,EAAQ,QAAW,KAIpC,GAFA,EAAA,yBAAyB,EAAU,gBAAgB,EAE/C,GAAc,IAAa,EAC7B,MAAU,WACR,sGACF,EAGF,OAAO,CACT,CAGA,SAAgB,EAAiB,EAA6B,CAAC,EAAe,CAC5E,IAAM,EAAW,EAAe,CAAO,EACjC,EAAa,IAAI,gBACjB,EAAY,IAAI,IAChB,EAAc,CAAC,EAEjB,YAAa,GAAW,EAAW,GAAG,EAAO,KAAK,EAAQ,OAAY,EAE1E,IAAM,EAAS,EAAA,OAAW,GAAS,CAGjC,GAAI,EAAW,OAAO,QAAS,CAC7B,EAAK,SAAS,EAEd,MACF,CAEA,IAAK,IAAM,KAAS,EAAQ,EAAK,KAAK,CAAK,EAI3C,OAFA,EAAU,IAAI,CAAI,MAEL,EAAU,OAAO,CAAI,CACpC,CAAC,EAEK,MAAsB,CACtB,MAAW,OAAO,QAEtB,GAAW,MAAM,EAEjB,IAAK,IAAM,IAAY,CAAC,GAAG,CAAS,EAAG,EAAS,SAAS,EAEzD,EAAU,MAAM,CAJC,CAKnB,EAEI,EAAc,GACZ,EAAe,CAAC,EAEhB,MAAoB,CACxB,EAAc,GAEd,GAAI,CACF,KAAO,EAAQ,OAAS,GAAG,CACzB,IAAM,EAAQ,EAAQ,MAAM,EAExB,EAAW,IACT,EAAO,SAAW,GAAU,EAAO,MAAM,EAE7C,EAAO,KAAK,CAAK,GAGnB,IAAK,IAAM,IAAY,CAAC,GAAG,CAAS,EAAG,EAAS,KAAK,CAAK,CAC5D,CACF,QAAU,CACR,EAAc,EAChB,CACF,EAEA,MAAO,CACL,IAAI,gBAA8B,CAChC,OAAO,EAAW,MACpB,EACA,UACA,IAAI,UAAoB,CACtB,OAAO,EAAW,OAAO,OAC3B,EACA,KAAK,EAAgB,CACf,EAAW,OAAO,UAEtB,EAAQ,KAAK,CAAK,EAIb,GAAa,EAAM,EAC1B,EACA,OAAQ,GACP,OAAO,SAAU,CACpB,CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAQ,MAAM,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;IAC9B,OAAO,CAAC,EAAE,CAAC,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI;IACvB,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC;IACrC,OAAO,IAAI,IAAI,CAAC;IAChB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;CAC5B,CAAC;AAiBF,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAE,cAAc,CAAC,CAAC,CAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAsD5E"}
1
+ {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAQ,MAAM,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;IAC9B,OAAO,CAAC,EAAE,CAAC,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI;IACvB,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC;IACrC,OAAO,IAAI,IAAI,CAAC;IAChB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;CAC5B,CAAC;AAiBF,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAE,cAAc,CAAC,CAAC,CAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CA6E5E"}
package/dist/channel.js CHANGED
@@ -10,11 +10,11 @@ function r(e = {}) {
10
10
  let r = n(e), i = new AbortController(), a = /* @__PURE__ */ new Set(), o = [];
11
11
  "initial" in e && r > 0 && o.push(e.initial);
12
12
  let s = t((e) => {
13
- for (let t of o) e.next(t);
14
13
  if (i.signal.aborted) {
15
14
  e.complete();
16
15
  return;
17
16
  }
17
+ for (let t of o) e.next(t);
18
18
  return a.add(e), () => a.delete(e);
19
19
  }), c = () => {
20
20
  if (!i.signal.aborted) {
@@ -22,6 +22,17 @@ function r(e = {}) {
22
22
  for (let e of [...a]) e.complete();
23
23
  a.clear();
24
24
  }
25
+ }, l = !1, u = [], d = () => {
26
+ l = !0;
27
+ try {
28
+ for (; u.length > 0;) {
29
+ let e = u.shift();
30
+ r > 0 && (o.length === r && o.shift(), o.push(e));
31
+ for (let t of [...a]) t.next(e);
32
+ }
33
+ } finally {
34
+ l = !1;
35
+ }
25
36
  };
26
37
  return {
27
38
  get disposalSignal() {
@@ -32,10 +43,7 @@ function r(e = {}) {
32
43
  return i.signal.aborted;
33
44
  },
34
45
  send(e) {
35
- if (!i.signal.aborted) {
36
- r > 0 && (o.length === r && o.shift(), o.push(e));
37
- for (let t of [...a]) t.next(e);
38
- }
46
+ i.signal.aborted || (u.push(e), l || d());
39
47
  },
40
48
  stream: s,
41
49
  [Symbol.dispose]: c
@@ -1 +1 @@
1
- {"version":3,"file":"channel.js","names":[],"sources":["../src/channel.ts"],"sourcesContent":["import { assertNonNegativeInteger } from './_numeric';\nimport { stream } from './core';\nimport type { Sink, Stream } from './types';\n\nexport type ChannelOptions<T> = {\n initial?: T;\n replay?: number;\n};\n\nexport type Channel<T> = {\n [Symbol.dispose](): void;\n readonly disposalSignal: AbortSignal;\n dispose(): void;\n readonly disposed: boolean;\n send(value: T): void;\n readonly stream: Stream<T>;\n};\n\nfunction replayCapacity<T>(options: ChannelOptions<T>): number {\n const hasInitial = 'initial' in options;\n const capacity = options.replay ?? (hasInitial ? 1 : 0);\n\n assertNonNegativeInteger(capacity, 'Channel replay');\n\n if (hasInitial && capacity === 0) {\n throw new RangeError(\n 'Channel replay cannot be 0 when initial is provided — the initial value would be immediately dropped',\n );\n }\n\n return capacity;\n}\n\n/** Channels own mutable multicast state; disposal is their only terminal event. */\nexport function createChannel<T>(options: ChannelOptions<T> = {}): Channel<T> {\n const capacity = replayCapacity(options);\n const controller = new AbortController();\n const listeners = new Set<Sink<T>>();\n const replay: T[] = [];\n\n if ('initial' in options && capacity > 0) replay.push(options.initial as T);\n\n const source = stream<T>((sink) => {\n for (const value of replay) sink.next(value);\n\n if (controller.signal.aborted) {\n sink.complete();\n\n return;\n }\n\n listeners.add(sink);\n\n return () => listeners.delete(sink);\n });\n\n const dispose = (): void => {\n if (controller.signal.aborted) return;\n\n controller.abort();\n\n for (const listener of [...listeners]) listener.complete();\n\n listeners.clear();\n };\n\n return {\n get disposalSignal(): AbortSignal {\n return controller.signal;\n },\n dispose,\n get disposed(): boolean {\n return controller.signal.aborted;\n },\n send(value: T): void {\n if (controller.signal.aborted) return;\n\n if (capacity > 0) {\n if (replay.length === capacity) replay.shift();\n\n replay.push(value);\n }\n\n for (const listener of [...listeners]) listener.next(value);\n },\n stream: source,\n [Symbol.dispose]: dispose,\n };\n}\n"],"mappings":";;;AAkBA,SAAS,EAAkB,GAAoC;CAC7D,IAAM,IAAa,aAAa,GAC1B,IAAW,EAAQ,UAAW;CAIpC,IAFA,EAAyB,GAAU,gBAAgB,GAE/C,KAAc,MAAa,GAC7B,MAAU,WACR,sGACF;CAGF,OAAO;AACT;AAGA,SAAgB,EAAiB,IAA6B,CAAC,GAAe;CAC5E,IAAM,IAAW,EAAe,CAAO,GACjC,IAAa,IAAI,gBAAgB,GACjC,oBAAY,IAAI,IAAa,GAC7B,IAAc,CAAC;CAErB,AAAI,aAAa,KAAW,IAAW,KAAG,EAAO,KAAK,EAAQ,OAAY;CAE1E,IAAM,IAAS,GAAW,MAAS;EACjC,KAAK,IAAM,KAAS,GAAQ,EAAK,KAAK,CAAK;EAE3C,IAAI,EAAW,OAAO,SAAS;GAC7B,EAAK,SAAS;GAEd;EACF;EAIA,OAFA,EAAU,IAAI,CAAI,SAEL,EAAU,OAAO,CAAI;CACpC,CAAC,GAEK,UAAsB;EACtB,OAAW,OAAO,SAEtB;KAAW,MAAM;GAEjB,KAAK,IAAM,KAAY,CAAC,GAAG,CAAS,GAAG,EAAS,SAAS;GAEzD,EAAU,MAAM;EAJC;CAKnB;CAEA,OAAO;EACL,IAAI,iBAA8B;GAChC,OAAO,EAAW;EACpB;EACA;EACA,IAAI,WAAoB;GACtB,OAAO,EAAW,OAAO;EAC3B;EACA,KAAK,GAAgB;GACf,OAAW,OAAO,SAEtB;IAAI,IAAW,MACT,EAAO,WAAW,KAAU,EAAO,MAAM,GAE7C,EAAO,KAAK,CAAK;IAGnB,KAAK,IAAM,KAAY,CAAC,GAAG,CAAS,GAAG,EAAS,KAAK,CAAK;GAF1D;EAGF;EACA,QAAQ;GACP,OAAO,UAAU;CACpB;AACF"}
1
+ {"version":3,"file":"channel.js","names":[],"sources":["../src/channel.ts"],"sourcesContent":["import { assertNonNegativeInteger } from './_numeric';\nimport { stream } from './core';\nimport type { Sink, Stream } from './types';\n\nexport type ChannelOptions<T> = {\n initial?: T;\n replay?: number;\n};\n\nexport type Channel<T> = {\n [Symbol.dispose](): void;\n readonly disposalSignal: AbortSignal;\n dispose(): void;\n readonly disposed: boolean;\n send(value: T): void;\n readonly stream: Stream<T>;\n};\n\nfunction replayCapacity<T>(options: ChannelOptions<T>): number {\n const hasInitial = 'initial' in options;\n const capacity = options.replay ?? (hasInitial ? 1 : 0);\n\n assertNonNegativeInteger(capacity, 'Channel replay');\n\n if (hasInitial && capacity === 0) {\n throw new RangeError(\n 'Channel replay cannot be 0 when initial is provided — the initial value would be immediately dropped',\n );\n }\n\n return capacity;\n}\n\n/** Channels own mutable multicast state; disposal is their only terminal event. */\nexport function createChannel<T>(options: ChannelOptions<T> = {}): Channel<T> {\n const capacity = replayCapacity(options);\n const controller = new AbortController();\n const listeners = new Set<Sink<T>>();\n const replay: T[] = [];\n\n if ('initial' in options && capacity > 0) replay.push(options.initial as T);\n\n const source = stream<T>((sink) => {\n // Disposed channels complete new subscribers immediately without replaying\n // retained values — a late subscriber never observes stale state.\n if (controller.signal.aborted) {\n sink.complete();\n\n return;\n }\n\n for (const value of replay) sink.next(value);\n\n listeners.add(sink);\n\n return () => listeners.delete(sink);\n });\n\n const dispose = (): void => {\n if (controller.signal.aborted) return;\n\n controller.abort();\n\n for (const listener of [...listeners]) listener.complete();\n\n listeners.clear();\n };\n\n let dispatching = false;\n const pending: T[] = [];\n\n const flush = (): void => {\n dispatching = true;\n\n try {\n while (pending.length > 0) {\n const value = pending.shift()!;\n\n if (capacity > 0) {\n if (replay.length === capacity) replay.shift();\n\n replay.push(value);\n }\n\n for (const listener of [...listeners]) listener.next(value);\n }\n } finally {\n dispatching = false;\n }\n };\n\n return {\n get disposalSignal(): AbortSignal {\n return controller.signal;\n },\n dispose,\n get disposed(): boolean {\n return controller.signal.aborted;\n },\n send(value: T): void {\n if (controller.signal.aborted) return;\n\n pending.push(value);\n\n // Reentrant sends (a listener calling `send` while receiving a previous\n // value) are queued so every listener observes one global FIFO order.\n if (!dispatching) flush();\n },\n stream: source,\n [Symbol.dispose]: dispose,\n };\n}\n"],"mappings":";;;AAkBA,SAAS,EAAkB,GAAoC;CAC7D,IAAM,IAAa,aAAa,GAC1B,IAAW,EAAQ,UAAW;CAIpC,IAFA,EAAyB,GAAU,gBAAgB,GAE/C,KAAc,MAAa,GAC7B,MAAU,WACR,sGACF;CAGF,OAAO;AACT;AAGA,SAAgB,EAAiB,IAA6B,CAAC,GAAe;CAC5E,IAAM,IAAW,EAAe,CAAO,GACjC,IAAa,IAAI,gBAAgB,GACjC,oBAAY,IAAI,IAAa,GAC7B,IAAc,CAAC;CAErB,AAAI,aAAa,KAAW,IAAW,KAAG,EAAO,KAAK,EAAQ,OAAY;CAE1E,IAAM,IAAS,GAAW,MAAS;EAGjC,IAAI,EAAW,OAAO,SAAS;GAC7B,EAAK,SAAS;GAEd;EACF;EAEA,KAAK,IAAM,KAAS,GAAQ,EAAK,KAAK,CAAK;EAI3C,OAFA,EAAU,IAAI,CAAI,SAEL,EAAU,OAAO,CAAI;CACpC,CAAC,GAEK,UAAsB;EACtB,OAAW,OAAO,SAEtB;KAAW,MAAM;GAEjB,KAAK,IAAM,KAAY,CAAC,GAAG,CAAS,GAAG,EAAS,SAAS;GAEzD,EAAU,MAAM;EAJC;CAKnB,GAEI,IAAc,IACZ,IAAe,CAAC,GAEhB,UAAoB;EACxB,IAAc;EAEd,IAAI;GACF,OAAO,EAAQ,SAAS,IAAG;IACzB,IAAM,IAAQ,EAAQ,MAAM;IAE5B,AAAI,IAAW,MACT,EAAO,WAAW,KAAU,EAAO,MAAM,GAE7C,EAAO,KAAK,CAAK;IAGnB,KAAK,IAAM,KAAY,CAAC,GAAG,CAAS,GAAG,EAAS,KAAK,CAAK;GAC5D;EACF,UAAU;GACR,IAAc;EAChB;CACF;CAEA,OAAO;EACL,IAAI,iBAA8B;GAChC,OAAO,EAAW;EACpB;EACA;EACA,IAAI,WAAoB;GACtB,OAAO,EAAW,OAAO;EAC3B;EACA,KAAK,GAAgB;GACf,EAAW,OAAO,YAEtB,EAAQ,KAAK,CAAK,GAIb,KAAa,EAAM;EAC1B;EACA,QAAQ;GACP,OAAO,UAAU;CACpB;AACF"}
package/dist/errors.cjs CHANGED
@@ -1,2 +1,2 @@
1
- var e=class extends Error{constructor(e,t){super(e,t),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}},t=class extends e{ms;constructor(e){super(`Timeout after ${e}ms`),this.ms=e}};exports.FluxError=e,exports.FluxTimeoutError=t;
1
+ var e=class extends Error{constructor(e,t){super(e,t),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}},t=class extends e{ms;constructor(e){super(`Timeout after ${e}ms`),this.ms=e}},n=class extends e{constructor(e=`Stream completed without emitting any value`){super(e)}},r=class extends e{capacity;constructor(e,t){super(t),this.capacity=e}};exports.FluxCapacityError=r,exports.FluxEmptyError=n,exports.FluxError=e,exports.FluxTimeoutError=t;
2
2
  //# sourceMappingURL=errors.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.cjs","names":[],"sources":["../src/errors.ts"],"sourcesContent":["export class FluxError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class FluxTimeoutError extends FluxError {\n /** The timeout duration in milliseconds that was exceeded. */\n readonly ms: number;\n\n constructor(ms: number) {\n super(`Timeout after ${ms}ms`);\n this.ms = ms;\n }\n}\n"],"mappings":"AAAA,IAAa,EAAb,cAA+B,KAAM,CACnC,YAAY,EAAiB,EAAwB,CACnD,MAAM,EAAS,CAAO,EACtB,KAAK,KAAO,WAAW,KACvB,OAAO,eAAe,KAAM,WAAW,SAAS,CAClD,CACF,EAEa,EAAb,cAAsC,CAAU,CAE9C,GAEA,YAAY,EAAY,CACtB,MAAM,iBAAiB,EAAG,GAAG,EAC7B,KAAK,GAAK,CACZ,CACF"}
1
+ {"version":3,"file":"errors.cjs","names":[],"sources":["../src/errors.ts"],"sourcesContent":["export class FluxError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class FluxTimeoutError extends FluxError {\n /** The timeout duration in milliseconds that was exceeded. */\n readonly ms: number;\n\n constructor(ms: number) {\n super(`Timeout after ${ms}ms`);\n this.ms = ms;\n }\n}\n\n/** Thrown by `first()` and `last()` when the source completes without emitting any value. */\nexport class FluxEmptyError extends FluxError {\n constructor(message = 'Stream completed without emitting any value') {\n super(message);\n }\n}\n\n/** Thrown when a bounded buffer (`mergeMap`, `concatMap`, `toArray`, async iteration) overflows. */\nexport class FluxCapacityError extends FluxError {\n /** The configured capacity that was exceeded. */\n readonly capacity: number;\n\n constructor(capacity: number, message: string) {\n super(message);\n this.capacity = capacity;\n }\n}\n"],"mappings":"AAAA,IAAa,EAAb,cAA+B,KAAM,CACnC,YAAY,EAAiB,EAAwB,CACnD,MAAM,EAAS,CAAO,EACtB,KAAK,KAAO,WAAW,KACvB,OAAO,eAAe,KAAM,WAAW,SAAS,CAClD,CACF,EAEa,EAAb,cAAsC,CAAU,CAE9C,GAEA,YAAY,EAAY,CACtB,MAAM,iBAAiB,EAAG,GAAG,EAC7B,KAAK,GAAK,CACZ,CACF,EAGa,EAAb,cAAoC,CAAU,CAC5C,YAAY,EAAU,8CAA+C,CACnE,MAAM,CAAO,CACf,CACF,EAGa,EAAb,cAAuC,CAAU,CAE/C,SAEA,YAAY,EAAkB,EAAiB,CAC7C,MAAM,CAAO,EACb,KAAK,SAAW,CAClB,CACF"}
package/dist/errors.d.ts CHANGED
@@ -6,4 +6,14 @@ export declare class FluxTimeoutError extends FluxError {
6
6
  readonly ms: number;
7
7
  constructor(ms: number);
8
8
  }
9
+ /** Thrown by `first()` and `last()` when the source completes without emitting any value. */
10
+ export declare class FluxEmptyError extends FluxError {
11
+ constructor(message?: string);
12
+ }
13
+ /** Thrown when a bounded buffer (`mergeMap`, `concatMap`, `toArray`, async iteration) overflows. */
14
+ export declare class FluxCapacityError extends FluxError {
15
+ /** The configured capacity that was exceeded. */
16
+ readonly capacity: number;
17
+ constructor(capacity: number, message: string);
18
+ }
9
19
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAKpD;AAED,qBAAa,gBAAiB,SAAQ,SAAS;IAC7C,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;gBAER,EAAE,EAAE,MAAM;CAIvB"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAKpD;AAED,qBAAa,gBAAiB,SAAQ,SAAS;IAC7C,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;gBAER,EAAE,EAAE,MAAM;CAIvB;AAED,6FAA6F;AAC7F,qBAAa,cAAe,SAAQ,SAAS;gBAC/B,OAAO,SAAgD;CAGpE;AAED,oGAAoG;AACpG,qBAAa,iBAAkB,SAAQ,SAAS;IAC9C,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI9C"}
package/dist/errors.js CHANGED
@@ -8,8 +8,17 @@ var e = class extends Error {
8
8
  constructor(e) {
9
9
  super(`Timeout after ${e}ms`), this.ms = e;
10
10
  }
11
+ }, n = class extends e {
12
+ constructor(e = "Stream completed without emitting any value") {
13
+ super(e);
14
+ }
15
+ }, r = class extends e {
16
+ capacity;
17
+ constructor(e, t) {
18
+ super(t), this.capacity = e;
19
+ }
11
20
  };
12
21
  //#endregion
13
- export { e as FluxError, t as FluxTimeoutError };
22
+ export { r as FluxCapacityError, n as FluxEmptyError, e as FluxError, t as FluxTimeoutError };
14
23
 
15
24
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","names":[],"sources":["../src/errors.ts"],"sourcesContent":["export class FluxError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class FluxTimeoutError extends FluxError {\n /** The timeout duration in milliseconds that was exceeded. */\n readonly ms: number;\n\n constructor(ms: number) {\n super(`Timeout after ${ms}ms`);\n this.ms = ms;\n }\n}\n"],"mappings":";AAAA,IAAa,IAAb,cAA+B,MAAM;CACnC,YAAY,GAAiB,GAAwB;EAGnD,AAFA,MAAM,GAAS,CAAO,GACtB,KAAK,OAAO,WAAW,MACvB,OAAO,eAAe,MAAM,WAAW,SAAS;CAClD;AACF,GAEa,IAAb,cAAsC,EAAU;CAE9C;CAEA,YAAY,GAAY;EAEtB,AADA,MAAM,iBAAiB,EAAG,GAAG,GAC7B,KAAK,KAAK;CACZ;AACF"}
1
+ {"version":3,"file":"errors.js","names":[],"sources":["../src/errors.ts"],"sourcesContent":["export class FluxError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class FluxTimeoutError extends FluxError {\n /** The timeout duration in milliseconds that was exceeded. */\n readonly ms: number;\n\n constructor(ms: number) {\n super(`Timeout after ${ms}ms`);\n this.ms = ms;\n }\n}\n\n/** Thrown by `first()` and `last()` when the source completes without emitting any value. */\nexport class FluxEmptyError extends FluxError {\n constructor(message = 'Stream completed without emitting any value') {\n super(message);\n }\n}\n\n/** Thrown when a bounded buffer (`mergeMap`, `concatMap`, `toArray`, async iteration) overflows. */\nexport class FluxCapacityError extends FluxError {\n /** The configured capacity that was exceeded. */\n readonly capacity: number;\n\n constructor(capacity: number, message: string) {\n super(message);\n this.capacity = capacity;\n }\n}\n"],"mappings":";AAAA,IAAa,IAAb,cAA+B,MAAM;CACnC,YAAY,GAAiB,GAAwB;EAGnD,AAFA,MAAM,GAAS,CAAO,GACtB,KAAK,OAAO,WAAW,MACvB,OAAO,eAAe,MAAM,WAAW,SAAS;CAClD;AACF,GAEa,IAAb,cAAsC,EAAU;CAE9C;CAEA,YAAY,GAAY;EAEtB,AADA,MAAM,iBAAiB,EAAG,GAAG,GAC7B,KAAK,KAAK;CACZ;AACF,GAGa,IAAb,cAAoC,EAAU;CAC5C,YAAY,IAAU,+CAA+C;EACnE,MAAM,CAAO;CACf;AACF,GAGa,IAAb,cAAuC,EAAU;CAE/C;CAEA,YAAY,GAAkB,GAAiB;EAE7C,AADA,MAAM,CAAO,GACb,KAAK,WAAW;CAClB;AACF"}
package/dist/flux.cjs CHANGED
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});function e(e,t){if(!Number.isInteger(e)||e<0)throw RangeError(`${t} must be a non-negative integer`)}function t(e,t){if(!Number.isInteger(e)||e<1)throw RangeError(`${t} must be a positive integer`)}function n(e,t){if(!Number.isFinite(e)||e<0)throw RangeError(`${t} must be a finite number greater than or equal to zero`)}function r(e,n){t(n.capacity,`Async iterable capacity`);let r=new AbortController,i=[],a={kind:`open`,queue:[]},o=()=>n.signal?.removeEventListener(`abort`,u),s=()=>{for(;i.length>0;)i.shift()?.resolve({done:!0,value:void 0})},c=()=>{a.kind===`open`&&(a.kind=`complete`,o(),s())},l=e=>{if(a.kind===`open`)for(a={kind:`error`,queue:a.queue,reason:e},r.abort(),o();i.length>0;)i.shift()?.reject(e)},u=()=>{r.abort(),o(),a={kind:`returned`},s()},d={complete:c,error:l,next(e){if(a.kind!==`open`)return;let t=i.shift();if(t){t.resolve({done:!1,value:e});return}if(a.queue.length<n.capacity){a.queue.push(e);return}n.overflow===`drop-oldest`?(a.queue.shift(),a.queue.push(e)):n.overflow===`error`&&l(RangeError(`Async iterable buffer capacity exceeded`))}};return n.signal?.aborted?u():n.signal?.addEventListener(`abort`,u,{once:!0}),e.subscribe(d,{signal:r.signal}),{next(){return a.kind===`returned`?Promise.resolve({done:!0,value:void 0}):a.queue.length>0?Promise.resolve({done:!1,value:a.queue.shift()}):a.kind===`error`?Promise.reject(a.reason):a.kind===`complete`?Promise.resolve({done:!0,value:void 0}):new Promise((e,t)=>i.push({reject:t,resolve:e}))},return(){return u(),Promise.resolve({done:!0,value:void 0})},[Symbol.asyncIterator](){return this}}}function i(e,t){return{[Symbol.asyncIterator](){return r(e,t)}}}function a(e){let t=globalThis.reportError;if(t){t(e);return}queueMicrotask(()=>{throw e})}function o(e,t){let n=typeof e==`function`?{next:e}:e,r=new AbortController,i=!1,o,s=()=>{if(!i){i=!0,r.abort(),t?.removeEventListener(`abort`,s);try{o?.()}catch(e){a(e)}}};return t?.aborted?s():t?.addEventListener(`abort`,s,{once:!0}),{add:e=>{if(e){if(i){try{e()}catch(e){a(e)}return}o=e}},signal:r.signal,sink:{complete(){if(!i){try{n.complete?.()}catch(e){a(e)}s()}},error(e){if(!i){if(n.error)try{n.error(e)}catch(e){a(e)}else a(e);s()}},next(e){if(!i)try{n.next(e)}catch(e){s(),a(e)}}},subscription:{get closed(){return i},[Symbol.dispose]:s,unsubscribe:s}}}function s(e){return{subscribe(t,n){let r=o(t,n?.signal);if(r.subscription.closed)return r.subscription;try{r.add(e(r.sink,r.signal))}catch(e){r.sink.error(e)}return r.subscription}}}var c=class extends Error{constructor(e,t){super(e,t),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}},l=class extends c{ms;constructor(e){super(`Timeout after ${e}ms`),this.ms=e}};function u(e,t,n){return e.subscribe(t,{signal:n})}function d(...e){return s((t,n)=>{if(e.length===0){t.complete();return}let r=0,i=[];for(let a of e){let o=u(a,{complete(){r++,r===e.length&&t.complete()},error:t.error,next:t.next},n);if(i.push(o),n.aborted)break}return()=>i.forEach(e=>{e.unsubscribe()})})}function f(...e){return s((t,n)=>{let r=0,i,a=()=>{if(n.aborted)return;let o=e[r++];if(!o){t.complete();return}let s=u(o,{complete:a,error:t.error,next:t.next},n);i=s.closed?void 0:s};return a(),()=>i?.unsubscribe()})}function p(...e){return s((t,n)=>{if(e.length===0){t.complete();return}let r=Array(e.length),i=Array(e.length).fill(!1),a=[],o=0;for(let[s,c]of e.entries()){if(n.aborted)break;let l=u(c,{complete(){if(!i[s]){t.complete();return}o++,o===e.length&&t.complete()},error:t.error,next(e){r[s]=e,i[s]=!0,i.every(Boolean)&&t.next([...r])}},n);a.push(l)}return()=>a.forEach(e=>{e.unsubscribe()})})}var m={delay(e,t){let n=setTimeout(e,t);return()=>clearTimeout(n)},repeat(e,t){let n=setInterval(e,t);return()=>clearInterval(n)}};function h(...e){return s(t=>{for(let n of e)t.next(n);t.complete()})}function g(e){return Symbol.asyncIterator in Object(e)?s((t,n)=>{let r=e[Symbol.asyncIterator]();return(async()=>{try{for(;!n.aborted;){let e=await r.next();if(e.done){t.complete();return}t.next(e.value)}}catch(e){n.aborted||t.error(e)}})(),()=>{r.return?.()}}):typeof e.then==`function`?s((t,n)=>{e.then(e=>{n.aborted||(t.next(e),t.complete())},e=>{n.aborted||t.error(e)})}):s((t,n)=>{let r=e[Symbol.iterator]();try{for(;!n.aborted;){let e=r.next();if(e.done){t.complete();return}t.next(e.value)}}catch(e){t.error(e)}return()=>{r.return?.()}})}function _(e,t){return s(n=>{let r=e=>n.next(e);return e.addEventListener(t,r),()=>e.removeEventListener(t,r)})}function v(e){return n(e.every,`Interval duration`),s(t=>{let n=0;return m.repeat(()=>t.next(n++),e.every)})}function y(e){return n(e.delay,`Timer delay`),e.interval!==void 0&&n(e.interval,`Timer interval`),s(t=>{let n=0,r,i=m.delay(()=>{if(t.next(n++),e.interval===void 0){t.complete();return}r=m.repeat(()=>t.next(n++),e.interval)},e.delay);return()=>{i(),r?.()}})}function b(t){return e(t,`take count`),e=>s((n,r)=>{if(t===0){n.complete();return}let i=0,a={};return a.current=u(e,{complete:n.complete,error:n.error,next(e){n.next(e),i++,i===t&&(n.complete(),a.current?.unsubscribe())}},r),()=>a.current?.unsubscribe()})}function x(e){return t=>s((n,r)=>{let i,a,o=()=>{},s=()=>{i?.unsubscribe(),a?.unsubscribe(),n.complete()};if(e instanceof AbortSignal){if(e.aborted){n.complete();return}e.addEventListener(`abort`,s,{once:!0}),o=()=>e.removeEventListener(`abort`,s)}else a=u(e,{error:n.error,next:s},r);return r.aborted||(i=u(t,{complete:n.complete,error:n.error,next:n.next},r)),()=>{o(),i?.unsubscribe(),a?.unsubscribe()}})}function S(e){return n(e.for,`Debounce duration`),t=>s((n,r)=>{let i,a,o=!1,s=()=>{i=void 0,o&&(o=!1,n.next(a))},c=u(t,{complete(){i?.(),s(),n.complete()},error:n.error,next(t){a=t,o=!0,i?.(),i=m.delay(s,e.for)}},r);return()=>{i?.(),c.unsubscribe()}})}function C(e){return n(e.after,`Timeout duration`),t=>s((n,r)=>{let i,a=()=>{i=m.delay(()=>n.error(new l(e.after)),e.after)};a();let o=u(t,{complete(){i(),n.complete()},error(e){i(),n.error(e)},next(e){i(),a(),n.next(e)}},r);return()=>{i(),o.unsubscribe()}})}function w(e,t){try{e()}catch(e){t(e)}}function T(e){return t=>s((n,r)=>u(t,{complete:n.complete,error:n.error,next(t){w(()=>n.next(e(t)),n.error)}},r).unsubscribe)}function E(e){return t=>s((n,r)=>u(t,{complete:n.complete,error:n.error,next(t){w(()=>{e(t)&&n.next(t)},n.error)}},r).unsubscribe)}function D(e,t){return n=>s((r,i)=>{let a=t;return u(n,{complete:r.complete,error:r.error,next(t){w(()=>{a=e(a,t),r.next(a)},r.error)}},i).unsubscribe})}function O(e){return t=>s((n,r)=>{let i=!1,a,o=()=>{i&&!a&&n.complete()},s=u(t,{complete(){i=!0,o()},error:n.error,next(t){a?.unsubscribe(),a=void 0,w(()=>{let i=u(e(t),{complete(){a=void 0,o()},error:n.error,next:n.next},r);a=i.closed?void 0:i},n.error)}},r);return()=>{s.unsubscribe(),a?.unsubscribe()}})}function k(e){return t=>s((n,r)=>{let i=!1,a=new Set,o=()=>{i&&a.size===0&&n.complete()},s=u(t,{complete(){i=!0,o()},error:n.error,next(t){w(()=>{let i={};i.current=u(e(t),{complete(){i.current&&a.delete(i.current),o()},error:n.error,next:n.next},r),i.current.closed||a.add(i.current)},n.error)}},r);return()=>{s.unsubscribe();for(let e of a)e.unsubscribe()}})}function A(e,n){return t(n.capacity,`concatMap capacity`),t=>s((r,i)=>{let a=[],o=!1,s,c={},l=()=>{if(s||a.length===0){o&&!s&&a.length===0&&r.complete();return}let t=a.shift();w(()=>{let n=u(e(t),{complete(){s=void 0,l()},error:r.error,next:r.next},i);s=n.closed?void 0:n,s||l()},r.error)};return c.current=u(t,{complete(){o=!0,l()},error:r.error,next(e){if(a.length===n.capacity){c.current?.unsubscribe(),r.error(RangeError(`concatMap buffer capacity exceeded`));return}a.push(e),l()}},i),()=>{c.current?.unsubscribe(),s?.unsubscribe(),a.length=0}})}function j(){return new DOMException(`Stream consumption aborted`,`AbortError`)}function M(t){return e(t.attempts,`retry attempts`),e=>s((n,r)=>{let i=0,a,o,s=()=>{if(r.aborted)return;let c=u(e,{complete:n.complete,error(e){if(i===t.attempts){n.error(e);return}let a=i++,c;if(w(()=>{c=typeof t.delay==`function`?t.delay(a):t.delay},n.error),!r.aborted){if(c!==void 0&&(!Number.isFinite(c)||c<0)){n.error(RangeError(`retry delay must be a finite number greater than or equal to zero`));return}c===void 0||c===0?queueMicrotask(s):o=m.delay(s,c)}},next:n.next},r);c.closed||(a=c)};return s(),()=>{o?.(),a?.unsubscribe()}})}function N(e,t){return new Promise((n,r)=>{let i=new AbortController,a=()=>{i.abort(),r(j())};if(t?.signal?.aborted){a();return}t?.signal?.addEventListener(`abort`,a,{once:!0}),u(e,{error(e){t?.signal?.removeEventListener(`abort`,a),r(e)},next(e){t?.signal?.removeEventListener(`abort`,a),i.abort(),n(e)}},i.signal)})}function P(e,t){return new Promise((n,r)=>{let i=()=>r(j()),a;if(t?.signal?.aborted){i();return}t?.signal?.addEventListener(`abort`,i,{once:!0}),u(e,{complete(){t?.signal?.removeEventListener(`abort`,i),n(a)},error(e){t?.signal?.removeEventListener(`abort`,i),r(e)},next(e){a=e}},t?.signal??new AbortController().signal)})}function F(t,n){return e(n.maxItems,`toArray maxItems`),new Promise((e,r)=>{let i=new AbortController,a=[],o=()=>{i.abort(),r(j())};if(n.signal?.aborted){o();return}n.signal?.addEventListener(`abort`,o,{once:!0}),u(t,{complete(){n.signal?.removeEventListener(`abort`,o),e(a)},error(e){n.signal?.removeEventListener(`abort`,o),r(e)},next(e){if(a.length===n.maxItems){n.signal?.removeEventListener(`abort`,o),i.abort(),r(RangeError(`toArray maxItems exceeded`));return}a.push(e)}},i.signal)})}function I(e,...t){return t.reduce((e,t)=>t(e),e)}exports.FluxError=c,exports.FluxTimeoutError=l,exports.combineLatest=p,exports.concat=f,exports.concatMap=A,exports.debounce=S,exports.filter=E,exports.first=N,exports.from=g,exports.fromEvent=_,exports.interval=v,exports.last=P,exports.map=T,exports.merge=d,exports.mergeMap=k,exports.of=h,exports.pipe=I,exports.retry=M,exports.scan=D,exports.stream=s,exports.switchMap=O,exports.take=b,exports.takeUntil=x,exports.timeout=C,exports.timer=y,exports.toArray=F,exports.toAsyncIterable=i;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});function e(e,t){if(!Number.isInteger(e)||e<0)throw RangeError(`${t} must be a non-negative integer`)}function t(e,t){if(!Number.isInteger(e)||e<1)throw RangeError(`${t} must be a positive integer`)}function n(e,t){if(!Number.isFinite(e)||e<0)throw RangeError(`${t} must be a finite number greater than or equal to zero`)}function r(e,n){t(n.capacity,`Async iterable capacity`);let r=new AbortController,i=[],a={kind:`open`,queue:[]},o=()=>n.signal?.removeEventListener(`abort`,u),s=()=>{for(;i.length>0;)i.shift()?.resolve({done:!0,value:void 0})},c=()=>{a.kind===`open`&&(a.kind=`complete`,o(),s())},l=e=>{if(a.kind===`open`)for(a={kind:`error`,queue:a.queue,reason:e},r.abort(),o();i.length>0;)i.shift()?.reject(e)},u=()=>{r.abort(),o(),a={kind:`returned`},s()},d={complete:c,error:l,next(e){if(a.kind!==`open`)return;let t=i.shift();if(t){t.resolve({done:!1,value:e});return}if(a.queue.length<n.capacity){a.queue.push(e);return}n.overflow===`drop-oldest`?(a.queue.shift(),a.queue.push(e)):n.overflow===`error`&&l(RangeError(`Async iterable buffer capacity exceeded`))}};return n.signal?.aborted?u():n.signal?.addEventListener(`abort`,u,{once:!0}),e.subscribe(d,{signal:r.signal}),{next(){return a.kind===`returned`?Promise.resolve({done:!0,value:void 0}):a.queue.length>0?Promise.resolve({done:!1,value:a.queue.shift()}):a.kind===`error`?Promise.reject(a.reason):a.kind===`complete`?Promise.resolve({done:!0,value:void 0}):new Promise((e,t)=>i.push({reject:t,resolve:e}))},return(){return u(),Promise.resolve({done:!0,value:void 0})},[Symbol.asyncIterator](){return this}}}function i(e,t){return{[Symbol.asyncIterator](){return r(e,t)}}}function a(e){let t=globalThis.reportError;if(t){t(e);return}queueMicrotask(()=>{throw e})}function o(e,t){let n=typeof e==`function`?{next:e}:e,r=new AbortController,i=!1,o,s=()=>{if(!i){i=!0,r.abort(),t?.removeEventListener(`abort`,s);try{o?.()}catch(e){a(e)}}};return t?.aborted?s():t?.addEventListener(`abort`,s,{once:!0}),{add:e=>{if(e){if(i){try{e()}catch(e){a(e)}return}o=e}},signal:r.signal,sink:{complete(){if(!i){try{n.complete?.()}catch(e){a(e)}s()}},error(e){if(!i){if(n.error)try{n.error(e)}catch(e){a(e)}else a(e);s()}},next(e){if(!i)try{n.next(e)}catch(e){s(),a(e)}}},subscription:{get closed(){return i},[Symbol.dispose]:s,unsubscribe:s}}}function s(e){return{subscribe(t,n){let r=o(t,n?.signal);if(r.subscription.closed)return r.subscription;try{r.add(e(r.sink,r.signal))}catch(e){r.sink.error(e)}return r.subscription}}}var c=class extends Error{constructor(e,t){super(e,t),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}},l=class extends c{ms;constructor(e){super(`Timeout after ${e}ms`),this.ms=e}},u=class extends c{constructor(e=`Stream completed without emitting any value`){super(e)}},d=class extends c{capacity;constructor(e,t){super(t),this.capacity=e}};function f(e,t,n){return e.subscribe(t,{signal:n})}function p(...e){return s((t,n)=>{if(e.length===0){t.complete();return}let r=0,i=[];for(let a of e){let o=f(a,{complete(){r++,r===e.length&&t.complete()},error:t.error,next:t.next},n);if(i.push(o),n.aborted)break}return()=>i.forEach(e=>{e.unsubscribe()})})}function m(...e){return s((t,n)=>{let r=0,i,a=()=>{if(n.aborted)return;let o=e[r++];if(!o){t.complete();return}let s=f(o,{complete:a,error:t.error,next:t.next},n);i=s.closed?void 0:s};return a(),()=>i?.unsubscribe()})}function h(...e){return s((t,n)=>{if(e.length===0){t.complete();return}let r=Array(e.length),i=Array(e.length).fill(!1),a=[],o=0;for(let[s,c]of e.entries()){if(n.aborted)break;let l=f(c,{complete(){if(!i[s]){t.complete();return}o++,o===e.length&&t.complete()},error:t.error,next(e){r[s]=e,i[s]=!0,i.every(Boolean)&&t.next([...r])}},n);a.push(l)}return()=>a.forEach(e=>{e.unsubscribe()})})}var g={delay(e,t){let n=setTimeout(e,t);return()=>clearTimeout(n)},repeat(e,t){let n=setInterval(e,t);return()=>clearInterval(n)}};function _(...e){return s(t=>{for(let n of e)t.next(n);t.complete()})}function v(e){return Symbol.asyncIterator in Object(e)?s((t,n)=>{let r=e[Symbol.asyncIterator]();return(async()=>{try{for(;!n.aborted;){let e=await r.next();if(e.done){t.complete();return}t.next(e.value)}}catch(e){n.aborted||t.error(e)}})(),()=>{r.return?.()}}):typeof e.then==`function`?s((t,n)=>{e.then(e=>{n.aborted||(t.next(e),t.complete())},e=>{n.aborted||t.error(e)})}):s((t,n)=>{let r=e[Symbol.iterator]();try{for(;!n.aborted;){let e=r.next();if(e.done){t.complete();return}t.next(e.value)}}catch(e){t.error(e)}return()=>{r.return?.()}})}function y(e,t){return s(n=>{let r=e=>n.next(e);return e.addEventListener(t,r),()=>e.removeEventListener(t,r)})}function b(e){return n(e,`Interval duration`),s(t=>{let n=0;return g.repeat(()=>t.next(n++),e)})}function x(e){return n(e.delay,`Timer delay`),e.interval!==void 0&&n(e.interval,`Timer interval`),s(t=>{let n=0,r,i=g.delay(()=>{if(t.next(n++),e.interval===void 0){t.complete();return}r=g.repeat(()=>t.next(n++),e.interval)},e.delay);return()=>{i(),r?.()}})}function S(t){return e(t,`take count`),e=>s((n,r)=>{if(t===0){n.complete();return}let i=0,a={};return a.current=f(e,{complete:n.complete,error:n.error,next(e){n.next(e),i++,i===t&&(n.complete(),a.current?.unsubscribe())}},r),()=>a.current?.unsubscribe()})}function C(e){return t=>s((n,r)=>{let i,a,o=()=>{},s=()=>{i?.unsubscribe(),a?.unsubscribe(),n.complete()};if(e instanceof AbortSignal){if(e.aborted){n.complete();return}e.addEventListener(`abort`,s,{once:!0}),o=()=>e.removeEventListener(`abort`,s)}else a=f(e,{error:n.error,next:s},r);return r.aborted||(i=f(t,{complete:n.complete,error:n.error,next:n.next},r)),()=>{o(),i?.unsubscribe(),a?.unsubscribe()}})}function w(e){return n(e,`Debounce duration`),t=>s((n,r)=>{let i,a,o=!1,s=()=>{i=void 0,o&&(o=!1,n.next(a))},c=f(t,{complete(){i?.(),s(),n.complete()},error:n.error,next(t){a=t,o=!0,i?.(),i=g.delay(s,e)}},r);return()=>{i?.(),c.unsubscribe()}})}function T(e){return n(e,`Timeout duration`),t=>s((n,r)=>{let i,a=()=>{i=g.delay(()=>n.error(new l(e)),e)};a();let o=f(t,{complete(){i(),n.complete()},error(e){i(),n.error(e)},next(e){i(),a(),n.next(e)}},r);return()=>{i(),o.unsubscribe()}})}function E(e,t){try{e()}catch(e){t(e)}}function D(e){return t=>s((n,r)=>f(t,{complete:n.complete,error:n.error,next(t){E(()=>n.next(e(t)),n.error)}},r).unsubscribe)}function O(e){return t=>s((n,r)=>f(t,{complete:n.complete,error:n.error,next(t){E(()=>{e(t)&&n.next(t)},n.error)}},r).unsubscribe)}function k(e,t){return n=>s((r,i)=>{let a=t;return f(n,{complete:r.complete,error:r.error,next(t){E(()=>{a=e(a,t),r.next(a)},r.error)}},i).unsubscribe})}function A(e){return t=>s((n,r)=>{let i=!1,a,o=()=>{i&&!a&&n.complete()},s=f(t,{complete(){i=!0,o()},error:n.error,next(t){a?.unsubscribe(),a=void 0,E(()=>{let i=f(e(t),{complete(){a=void 0,o()},error:n.error,next:n.next},r);a=i.closed?void 0:i},n.error)}},r);return()=>{s.unsubscribe(),a?.unsubscribe()}})}function j(e,n){let r=n.concurrency===1/0;return r||(t(n.concurrency,`mergeMap concurrency`),t(n.capacity,`mergeMap capacity`)),t=>s((i,a)=>{let o=[],s=new Set,c=!1,l={},u=()=>{c&&s.size===0&&o.length===0&&i.complete()},p=t=>{E(()=>{let n={};n.current=f(e(t),{complete(){n.current&&s.delete(n.current),m()},error:i.error,next:i.next},a),n.current.closed?m():s.add(n.current)},i.error)},m=()=>{if(!a.aborted){for(;o.length>0&&(r||s.size<n.concurrency);){let e=o.shift();p(e)}u()}};return l.current=f(t,{complete(){c=!0,u()},error:i.error,next(e){if(!r&&o.length>=n.capacity){l.current?.unsubscribe(),i.error(new d(n.capacity,`mergeMap buffer capacity exceeded`));return}o.push(e),m()}},a),()=>{l.current?.unsubscribe();for(let e of s)e.unsubscribe();o.length=0}})}function M(e,t){return j(e,t)}function N(e,t){return j(e,{capacity:t.capacity,concurrency:1})}function P(){return new DOMException(`Stream consumption aborted`,`AbortError`)}function F(t){return e(t.attempts,`retry attempts`),e=>s((n,r)=>{let i=0,a,o,s=()=>{if(r.aborted)return;let c=f(e,{complete:n.complete,error(e){if(i===t.attempts){n.error(e);return}let a=i++,c;if(E(()=>{c=typeof t.delay==`function`?t.delay(a):t.delay},n.error),!r.aborted){if(c!==void 0&&(!Number.isFinite(c)||c<0)){n.error(RangeError(`retry delay must be a finite number greater than or equal to zero`));return}c===void 0||c===0?queueMicrotask(s):o=g.delay(s,c)}},next:n.next},r);c.closed||(a=c)};return s(),()=>{o?.(),a?.unsubscribe()}})}function I(e,t){return new Promise((n,r)=>{let i=new AbortController,a=()=>{i.abort(),r(P())};if(t?.signal?.aborted){a();return}t?.signal?.addEventListener(`abort`,a,{once:!0}),f(e,{complete(){t?.signal?.removeEventListener(`abort`,a),`defaultValue`in(t??{})?n(t.defaultValue):r(new u)},error(e){t?.signal?.removeEventListener(`abort`,a),r(e)},next(e){t?.signal?.removeEventListener(`abort`,a),i.abort(),n(e)}},i.signal)})}function L(e,t){return new Promise((n,r)=>{let i=new AbortController,a=()=>{i.abort(),r(P())};if(t?.signal?.aborted){a();return}let o=!1,s;t?.signal?.addEventListener(`abort`,a,{once:!0}),f(e,{complete(){t?.signal?.removeEventListener(`abort`,a),o?n(s):`defaultValue`in(t??{})?n(t.defaultValue):r(new u)},error(e){t?.signal?.removeEventListener(`abort`,a),r(e)},next(e){o=!0,s=e}},i.signal)})}function R(t,n){return e(n.maxItems,`toArray maxItems`),new Promise((e,r)=>{let i=new AbortController,a=[],o=()=>{i.abort(),r(P())};if(n.signal?.aborted){o();return}n.signal?.addEventListener(`abort`,o,{once:!0}),f(t,{complete(){n.signal?.removeEventListener(`abort`,o),e(a)},error(e){n.signal?.removeEventListener(`abort`,o),r(e)},next(e){if(a.length===n.maxItems){n.signal?.removeEventListener(`abort`,o),i.abort(),r(new d(n.maxItems,`toArray maxItems exceeded`));return}a.push(e)}},i.signal)})}function z(e,...t){return t.reduce((e,t)=>t(e),e)}exports.FluxCapacityError=d,exports.FluxEmptyError=u,exports.FluxError=c,exports.FluxTimeoutError=l,exports.combineLatest=h,exports.concat=m,exports.concatMap=N,exports.debounce=w,exports.filter=O,exports.first=I,exports.from=v,exports.fromEvent=y,exports.interval=b,exports.last=L,exports.map=D,exports.merge=p,exports.mergeMap=M,exports.of=_,exports.pipe=z,exports.retry=F,exports.scan=k,exports.stream=s,exports.switchMap=A,exports.take=S,exports.takeUntil=C,exports.timeout=T,exports.timer=x,exports.toArray=R,exports.toAsyncIterable=i;
2
2
  //# sourceMappingURL=flux.cjs.map