@vielzeug/flux 1.0.3

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 (122) hide show
  1. package/README.md +50 -0
  2. package/dist/_dev.cjs +2 -0
  3. package/dist/_dev.cjs.map +1 -0
  4. package/dist/_dev.d.ts +2 -0
  5. package/dist/_dev.d.ts.map +1 -0
  6. package/dist/_dev.js +12 -0
  7. package/dist/_dev.js.map +1 -0
  8. package/dist/_iterator.cjs +2 -0
  9. package/dist/_iterator.cjs.map +1 -0
  10. package/dist/_iterator.d.ts +2 -0
  11. package/dist/_iterator.d.ts.map +1 -0
  12. package/dist/_iterator.js +53 -0
  13. package/dist/_iterator.js.map +1 -0
  14. package/dist/_numeric.cjs +2 -0
  15. package/dist/_numeric.cjs.map +1 -0
  16. package/dist/_numeric.d.ts +2 -0
  17. package/dist/_numeric.d.ts.map +1 -0
  18. package/dist/_numeric.js +12 -0
  19. package/dist/_numeric.js.map +1 -0
  20. package/dist/_pipe.cjs +2 -0
  21. package/dist/_pipe.cjs.map +1 -0
  22. package/dist/_pipe.d.ts +2 -0
  23. package/dist/_pipe.d.ts.map +1 -0
  24. package/dist/_pipe.js +8 -0
  25. package/dist/_pipe.js.map +1 -0
  26. package/dist/_safe.cjs +2 -0
  27. package/dist/_safe.cjs.map +1 -0
  28. package/dist/_safe.d.ts +2 -0
  29. package/dist/_safe.d.ts.map +1 -0
  30. package/dist/_safe.js +12 -0
  31. package/dist/_safe.js.map +1 -0
  32. package/dist/_scheduler.cjs +2 -0
  33. package/dist/_scheduler.cjs.map +1 -0
  34. package/dist/_scheduler.d.ts +3 -0
  35. package/dist/_scheduler.d.ts.map +1 -0
  36. package/dist/_scheduler.js +15 -0
  37. package/dist/_scheduler.js.map +1 -0
  38. package/dist/adapters/courier.cjs +2 -0
  39. package/dist/adapters/courier.cjs.map +1 -0
  40. package/dist/adapters/courier.d.ts +22 -0
  41. package/dist/adapters/courier.d.ts.map +1 -0
  42. package/dist/adapters/courier.js +14 -0
  43. package/dist/adapters/courier.js.map +1 -0
  44. package/dist/adapters/herald.cjs +2 -0
  45. package/dist/adapters/herald.cjs.map +1 -0
  46. package/dist/adapters/herald.d.ts +19 -0
  47. package/dist/adapters/herald.d.ts.map +1 -0
  48. package/dist/adapters/herald.js +18 -0
  49. package/dist/adapters/herald.js.map +1 -0
  50. package/dist/adapters/pulse.cjs +2 -0
  51. package/dist/adapters/pulse.cjs.map +1 -0
  52. package/dist/adapters/pulse.d.ts +22 -0
  53. package/dist/adapters/pulse.d.ts.map +1 -0
  54. package/dist/adapters/pulse.js +22 -0
  55. package/dist/adapters/pulse.js.map +1 -0
  56. package/dist/adapters/ripple.cjs +2 -0
  57. package/dist/adapters/ripple.cjs.map +1 -0
  58. package/dist/adapters/ripple.d.ts +53 -0
  59. package/dist/adapters/ripple.d.ts.map +1 -0
  60. package/dist/adapters/ripple.js +47 -0
  61. package/dist/adapters/ripple.js.map +1 -0
  62. package/dist/core.cjs +2 -0
  63. package/dist/core.cjs.map +1 -0
  64. package/dist/core.d.ts +17 -0
  65. package/dist/core.d.ts.map +1 -0
  66. package/dist/core.js +87 -0
  67. package/dist/core.js.map +1 -0
  68. package/dist/errors.cjs +2 -0
  69. package/dist/errors.cjs.map +1 -0
  70. package/dist/errors.d.ts +10 -0
  71. package/dist/errors.d.ts.map +1 -0
  72. package/dist/errors.js +18 -0
  73. package/dist/errors.js.map +1 -0
  74. package/dist/flux.cjs +2 -0
  75. package/dist/flux.cjs.map +1 -0
  76. package/dist/flux.iife.js +2 -0
  77. package/dist/flux.iife.js.map +1 -0
  78. package/dist/flux.js +2 -0
  79. package/dist/flux.js.map +1 -0
  80. package/dist/index.cjs +1 -0
  81. package/dist/index.d.ts +17 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +14 -0
  84. package/dist/operators/combination.cjs +2 -0
  85. package/dist/operators/combination.cjs.map +1 -0
  86. package/dist/operators/combination.d.ts +65 -0
  87. package/dist/operators/combination.d.ts.map +1 -0
  88. package/dist/operators/combination.js +187 -0
  89. package/dist/operators/combination.js.map +1 -0
  90. package/dist/operators/creation.cjs +2 -0
  91. package/dist/operators/creation.cjs.map +1 -0
  92. package/dist/operators/creation.d.ts +50 -0
  93. package/dist/operators/creation.d.ts.map +1 -0
  94. package/dist/operators/creation.js +90 -0
  95. package/dist/operators/creation.js.map +1 -0
  96. package/dist/operators/filtering.cjs +2 -0
  97. package/dist/operators/filtering.cjs.map +1 -0
  98. package/dist/operators/filtering.d.ts +62 -0
  99. package/dist/operators/filtering.d.ts.map +1 -0
  100. package/dist/operators/filtering.js +140 -0
  101. package/dist/operators/filtering.js.map +1 -0
  102. package/dist/operators/transformation.cjs +2 -0
  103. package/dist/operators/transformation.cjs.map +1 -0
  104. package/dist/operators/transformation.d.ts +64 -0
  105. package/dist/operators/transformation.d.ts.map +1 -0
  106. package/dist/operators/transformation.js +185 -0
  107. package/dist/operators/transformation.js.map +1 -0
  108. package/dist/operators/utility.cjs +2 -0
  109. package/dist/operators/utility.cjs.map +1 -0
  110. package/dist/operators/utility.d.ts +98 -0
  111. package/dist/operators/utility.d.ts.map +1 -0
  112. package/dist/operators/utility.js +226 -0
  113. package/dist/operators/utility.js.map +1 -0
  114. package/dist/subject.cjs +2 -0
  115. package/dist/subject.cjs.map +1 -0
  116. package/dist/subject.d.ts +67 -0
  117. package/dist/subject.d.ts.map +1 -0
  118. package/dist/subject.js +181 -0
  119. package/dist/subject.js.map +1 -0
  120. package/dist/types.d.ts +86 -0
  121. package/dist/types.d.ts.map +1 -0
  122. package/package.json +61 -0
@@ -0,0 +1,47 @@
1
+ import { error as e } from "../_dev.js";
2
+ import { flux as t } from "../core.js";
3
+ import { signal as n } from "@vielzeug/ripple";
4
+ //#region src/adapters/ripple.ts
5
+ function r(e) {
6
+ return t((t) => {
7
+ t.next(e.value);
8
+ let n = e.subscribe(() => {
9
+ t.next(e.value);
10
+ });
11
+ return () => n.dispose();
12
+ });
13
+ }
14
+ function i(t, r) {
15
+ let i = n(r.initial), a = new AbortController(), o = t.subscribe({
16
+ error(t) {
17
+ e("toSignal: source errored — signal value may be stale", t);
18
+ },
19
+ next(e) {
20
+ i.value = e;
21
+ }
22
+ }, r.signal), s = () => {
23
+ a.signal.aborted || (a.abort(), o());
24
+ };
25
+ return {
26
+ get disposalSignal() {
27
+ return a.signal;
28
+ },
29
+ dispose: s,
30
+ get disposed() {
31
+ return a.signal.aborted;
32
+ },
33
+ get signal() {
34
+ return i;
35
+ },
36
+ [Symbol.dispose]() {
37
+ s();
38
+ },
39
+ get value() {
40
+ return i.value;
41
+ }
42
+ };
43
+ }
44
+ //#endregion
45
+ export { r as fromSignal, i as toSignal };
46
+
47
+ //# sourceMappingURL=ripple.js.map
@@ -0,0 +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';\n\nimport type { Flux } from '../types';\n\nimport { error } from '../_dev';\nimport { flux } from '../core';\n\n/**\n * Create a `Flux` that emits a new value every time a ripple `Reactive` changes.\n * The current value is emitted immediately on subscribe.\n *\n * @example\n * const count = signal(0);\n * const count$ = fromSignal(count);\n * count$.subscribe((n) => console.log(n)); // logs 0 immediately, then on every change\n */\nexport function fromSignal<T>(source: Readable<T>): Flux<T> {\n return flux<T>((observer) => {\n observer.next(source.value);\n\n const subscription = source.subscribe(() => {\n observer.next(source.value);\n });\n\n return () => subscription.dispose();\n });\n}\n\nexport type ToSignalOptions<T> = {\n /** Initial value before the first emission. */\n initial: T;\n /**\n * Optional `AbortSignal` that stops tracking independently of disposal.\n * Useful when the caller does not own the flux's lifetime.\n */\n signal?: AbortSignal;\n};\n\n/**\n * A handle returned by `toSignal()` that wraps a ripple signal updated by a `Flux`.\n * Exposes `value` (reactive — usable in ripple `effect()` calls) and `dispose()` to\n * stop tracking. The underlying signal retains its last value after disposal.\n */\nexport type SignalBinding<T> = {\n /** ES2026 `using` compatible disposal. */\n [Symbol.dispose](): void;\n /** AbortSignal that aborts when `dispose()` is called. */\n readonly disposalSignal: AbortSignal;\n /** Stop tracking the source `Flux` and freeze the signal value. */\n dispose(): void;\n /** `true` after `dispose()` is called. */\n readonly disposed: boolean;\n /** The underlying ripple `Readable<T>` for use with ripple operators. */\n readonly signal: Readable<T>;\n /** The current tracked value (reactive — reads track in ripple effects). */\n readonly value: T;\n};\n\n/**\n * Create a `SignalBinding<T>` whose value is updated by each emission from a `Flux`.\n * The binding starts with `opts.initial` and updates reactively as the flux emits.\n *\n * Call `dispose()` to stop tracking; the last value remains readable after disposal.\n *\n * @example\n * const latest = toSignal(count$, { initial: 0 });\n * effect(() => console.log(latest.value)); // reactive — re-runs on flux emissions\n * latest.dispose(); // stop tracking\n */\nexport function toSignal<T>(source: Flux<T>, opts: ToSignalOptions<T>): SignalBinding<T> {\n const sig = signal<T>(opts.initial);\n const ac = new AbortController();\n\n const unsub = source.subscribe(\n {\n error(err) {\n error('toSignal: source errored — signal value may be stale', err);\n },\n next(v) {\n sig.value = v;\n },\n },\n opts.signal,\n );\n\n const dispose = (): void => {\n if (ac.signal.aborted) return;\n\n ac.abort();\n unsub();\n };\n\n return {\n get disposalSignal(): AbortSignal {\n return ac.signal;\n },\n dispose,\n get disposed(): boolean {\n return ac.signal.aborted;\n },\n get signal(): Readable<T> {\n return sig;\n },\n [Symbol.dispose](): void {\n dispose();\n },\n get value(): T {\n return sig.value;\n },\n };\n}\n"],"mappings":";;;;AAkBA,SAAgB,EAAc,GAA8B;CAC1D,OAAO,GAAS,MAAa;EAC3B,EAAS,KAAK,EAAO,KAAK;EAE1B,IAAM,IAAe,EAAO,gBAAgB;GAC1C,EAAS,KAAK,EAAO,KAAK;EAC5B,CAAC;EAED,aAAa,EAAa,QAAQ;CACpC,CAAC;AACH;AA2CA,SAAgB,EAAY,GAAiB,GAA4C;CACvF,IAAM,IAAM,EAAU,EAAK,OAAO,GAC5B,IAAK,IAAI,gBAAgB,GAEzB,IAAQ,EAAO,UACnB;EACE,MAAM,GAAK;GACT,EAAM,wDAAwD,CAAG;EACnE;EACA,KAAK,GAAG;GACN,EAAI,QAAQ;EACd;CACF,GACA,EAAK,MACP,GAEM,UAAsB;EACtB,EAAG,OAAO,YAEd,EAAG,MAAM,GACT,EAAM;CACR;CAEA,OAAO;EACL,IAAI,iBAA8B;GAChC,OAAO,EAAG;EACZ;EACA;EACA,IAAI,WAAoB;GACtB,OAAO,EAAG,OAAO;EACnB;EACA,IAAI,SAAsB;GACxB,OAAO;EACT;EACA,CAAC,OAAO,WAAiB;GACvB,EAAQ;EACV;EACA,IAAI,QAAW;GACb,OAAO,EAAI;EACb;CACF;AACF"}
package/dist/core.cjs ADDED
@@ -0,0 +1,2 @@
1
+ const e=require("./_iterator.cjs"),t=require("./_pipe.cjs");var n=()=>{};function r(r){let i=new AbortController,a={get disposalSignal(){return i.signal},dispose(){i.abort()},get disposed(){return i.signal.aborted},pipe:t.makePipe(()=>a),subscribe(e,t){let a=typeof e==`function`?{next:e}:e;if(i.signal.aborted||t?.aborted){try{a.complete?.()}catch{}return n}let o=!0,s,c=()=>{i.signal.removeEventListener(`abort`,l),t&&t.removeEventListener(`abort`,d)},l=()=>{if(o){o=!1,c();try{a.complete?.()}catch{}try{s?.()}catch{}}},u={complete(){if(o){o=!1,c();try{a.complete?.()}finally{s?.()}}},error(e){if(o){o=!1,c();try{a.error?.(e)}finally{s?.()}}},next(e){o&&a.next(e)}};try{s=r(u)}catch(e){return o=!1,a.error?.(e),n}if(!o)return s?.(),n;function d(){o&&(o=!1,c(),s?.())}return i.signal.addEventListener(`abort`,l,{once:!0}),t&&t.addEventListener(`abort`,d,{once:!0}),()=>{d()}},[Symbol.asyncIterator](){return e.makeAsyncIterator(e=>a.subscribe(e))},[Symbol.dispose](){a.dispose()}};return a}exports.flux=r;
2
+ //# sourceMappingURL=core.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.cjs","names":[],"sources":["../src/core.ts"],"sourcesContent":["import type { Flux, Observer, Producer, Unsubscribe } from './types';\n\nimport { makeAsyncIterator } from './_iterator';\nimport { makePipe } from './_pipe';\n\nconst NOOP: Unsubscribe = () => {};\n\n/**\n * Creates a cold `Flux<T>` stream from a producer function.\n *\n * The producer is called once per `subscribe()` invocation (cold by default).\n * Return a cleanup function from the producer to run when the subscriber\n * unsubscribes, errors, or the stream is disposed.\n *\n * @example\n * const ticker = flux<number>((observer) => {\n * let i = 0;\n * const id = setInterval(() => observer.next(i++), 1000);\n * return () => clearInterval(id);\n * });\n */\nexport function flux<T>(producer: Producer<T>): Flux<T> {\n const ac = new AbortController();\n\n const instance: Flux<T> = {\n get disposalSignal(): AbortSignal {\n return ac.signal;\n },\n\n dispose(): void {\n ac.abort();\n },\n\n get disposed(): boolean {\n return ac.signal.aborted;\n },\n\n pipe: makePipe(() => instance),\n\n subscribe(observerOrNext: Observer<T> | ((value: T) => void), signal?: AbortSignal): Unsubscribe {\n const observer: Observer<T> = typeof observerOrNext === 'function' ? { next: observerOrNext } : observerOrNext;\n\n if (ac.signal.aborted || signal?.aborted) {\n try {\n observer.complete?.();\n } catch {\n /* empty */\n }\n\n return NOOP;\n }\n\n let active = true;\n let producerCleanup: Unsubscribe | void;\n\n const deregister = (): void => {\n ac.signal.removeEventListener('abort', notifyComplete);\n\n if (signal) signal.removeEventListener('abort', unsubscribe);\n };\n\n const notifyComplete = (): void => {\n if (!active) return;\n\n active = false;\n deregister();\n\n try {\n observer.complete?.();\n } catch {\n /* empty */\n }\n\n try {\n producerCleanup?.();\n } catch {\n /* empty */\n }\n };\n\n const safeObserver: Observer<T> = {\n complete(): void {\n if (!active) return;\n\n active = false;\n deregister();\n\n try {\n observer.complete?.();\n } finally {\n producerCleanup?.();\n }\n },\n\n error(err: unknown): void {\n if (!active) return;\n\n active = false;\n deregister();\n\n try {\n observer.error?.(err);\n } finally {\n producerCleanup?.();\n }\n },\n\n next(value: T): void {\n if (active) observer.next(value);\n },\n };\n\n try {\n producerCleanup = producer(safeObserver);\n } catch (err) {\n active = false;\n observer.error?.(err);\n\n return NOOP;\n }\n\n if (!active) {\n producerCleanup?.();\n\n return NOOP;\n }\n\n function unsubscribe(): void {\n if (!active) return;\n\n active = false;\n deregister();\n producerCleanup?.();\n }\n\n ac.signal.addEventListener('abort', notifyComplete, { once: true });\n\n if (signal) {\n signal.addEventListener('abort', unsubscribe, { once: true });\n }\n\n return (): void => {\n unsubscribe();\n };\n },\n\n [Symbol.asyncIterator](): AsyncIterableIterator<T> {\n return makeAsyncIterator<T>((obs) => instance.subscribe(obs));\n },\n\n [Symbol.dispose](): void {\n instance.dispose();\n },\n };\n\n return instance;\n}\n"],"mappings":"4DAKA,IAAM,MAA0B,CAAC,EAgBjC,SAAgB,EAAQ,EAAgC,CACtD,IAAM,EAAK,IAAI,gBAET,EAAoB,CACxB,IAAI,gBAA8B,CAChC,OAAO,EAAG,MACZ,EAEA,SAAgB,CACd,EAAG,MAAM,CACX,EAEA,IAAI,UAAoB,CACtB,OAAO,EAAG,OAAO,OACnB,EAEA,KAAM,EAAA,aAAe,CAAQ,EAE7B,UAAU,EAAoD,EAAmC,CAC/F,IAAM,EAAwB,OAAO,GAAmB,WAAa,CAAE,KAAM,CAAe,EAAI,EAEhG,GAAI,EAAG,OAAO,SAAW,GAAQ,QAAS,CACxC,GAAI,CACF,EAAS,WAAW,CACtB,MAAQ,CAER,CAEA,OAAO,CACT,CAEA,IAAI,EAAS,GACT,EAEE,MAAyB,CAC7B,EAAG,OAAO,oBAAoB,QAAS,CAAc,EAEjD,GAAQ,EAAO,oBAAoB,QAAS,CAAW,CAC7D,EAEM,MAA6B,CAC5B,KAGL,CADA,EAAS,GACT,EAAW,EAEX,GAAI,CACF,EAAS,WAAW,CACtB,MAAQ,CAER,CAEA,GAAI,CACF,IAAkB,CACpB,MAAQ,CAER,CAZW,CAab,EAEM,EAA4B,CAChC,UAAiB,CACV,KAGL,CADA,EAAS,GACT,EAAW,EAEX,GAAI,CACF,EAAS,WAAW,CACtB,QAAU,CACR,IAAkB,CACpB,CANW,CAOb,EAEA,MAAM,EAAoB,CACnB,KAGL,CADA,EAAS,GACT,EAAW,EAEX,GAAI,CACF,EAAS,QAAQ,CAAG,CACtB,QAAU,CACR,IAAkB,CACpB,CANW,CAOb,EAEA,KAAK,EAAgB,CACf,GAAQ,EAAS,KAAK,CAAK,CACjC,CACF,EAEA,GAAI,CACF,EAAkB,EAAS,CAAY,CACzC,OAAS,EAAK,CAIZ,MAHA,GAAS,GACT,EAAS,QAAQ,CAAG,EAEb,CACT,CAEA,GAAI,CAAC,EAGH,OAFA,IAAkB,EAEX,EAGT,SAAS,GAAoB,CACtB,IAEL,EAAS,GACT,EAAW,EACX,IAAkB,EACpB,CAQA,OANA,EAAG,OAAO,iBAAiB,QAAS,EAAgB,CAAE,KAAM,EAAK,CAAC,EAE9D,GACF,EAAO,iBAAiB,QAAS,EAAa,CAAE,KAAM,EAAK,CAAC,MAG3C,CACjB,EAAY,CACd,CACF,EAEA,CAAC,OAAO,gBAA2C,CACjD,OAAO,EAAA,kBAAsB,GAAQ,EAAS,UAAU,CAAG,CAAC,CAC9D,EAEA,CAAC,OAAO,UAAiB,CACvB,EAAS,QAAQ,CACnB,CACF,EAEA,OAAO,CACT"}
package/dist/core.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ import type { Flux, Producer } from './types';
2
+ /**
3
+ * Creates a cold `Flux<T>` stream from a producer function.
4
+ *
5
+ * The producer is called once per `subscribe()` invocation (cold by default).
6
+ * Return a cleanup function from the producer to run when the subscriber
7
+ * unsubscribes, errors, or the stream is disposed.
8
+ *
9
+ * @example
10
+ * const ticker = flux<number>((observer) => {
11
+ * let i = 0;
12
+ * const id = setInterval(() => observer.next(i++), 1000);
13
+ * return () => clearInterval(id);
14
+ * });
15
+ */
16
+ export declare function flux<T>(producer: Producer<T>): Flux<T>;
17
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAY,QAAQ,EAAe,MAAM,SAAS,CAAC;AAOrE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAuItD"}
package/dist/core.js ADDED
@@ -0,0 +1,87 @@
1
+ import { makeAsyncIterator as e } from "./_iterator.js";
2
+ import { makePipe as t } from "./_pipe.js";
3
+ //#region src/core.ts
4
+ var n = () => {};
5
+ function r(r) {
6
+ let i = new AbortController(), a = {
7
+ get disposalSignal() {
8
+ return i.signal;
9
+ },
10
+ dispose() {
11
+ i.abort();
12
+ },
13
+ get disposed() {
14
+ return i.signal.aborted;
15
+ },
16
+ pipe: t(() => a),
17
+ subscribe(e, t) {
18
+ let a = typeof e == "function" ? { next: e } : e;
19
+ if (i.signal.aborted || t?.aborted) {
20
+ try {
21
+ a.complete?.();
22
+ } catch {}
23
+ return n;
24
+ }
25
+ let o = !0, s, c = () => {
26
+ i.signal.removeEventListener("abort", l), t && t.removeEventListener("abort", d);
27
+ }, l = () => {
28
+ if (o) {
29
+ o = !1, c();
30
+ try {
31
+ a.complete?.();
32
+ } catch {}
33
+ try {
34
+ s?.();
35
+ } catch {}
36
+ }
37
+ }, u = {
38
+ complete() {
39
+ if (o) {
40
+ o = !1, c();
41
+ try {
42
+ a.complete?.();
43
+ } finally {
44
+ s?.();
45
+ }
46
+ }
47
+ },
48
+ error(e) {
49
+ if (o) {
50
+ o = !1, c();
51
+ try {
52
+ a.error?.(e);
53
+ } finally {
54
+ s?.();
55
+ }
56
+ }
57
+ },
58
+ next(e) {
59
+ o && a.next(e);
60
+ }
61
+ };
62
+ try {
63
+ s = r(u);
64
+ } catch (e) {
65
+ return o = !1, a.error?.(e), n;
66
+ }
67
+ if (!o) return s?.(), n;
68
+ function d() {
69
+ o && (o = !1, c(), s?.());
70
+ }
71
+ return i.signal.addEventListener("abort", l, { once: !0 }), t && t.addEventListener("abort", d, { once: !0 }), () => {
72
+ d();
73
+ };
74
+ },
75
+ [Symbol.asyncIterator]() {
76
+ return e((e) => a.subscribe(e));
77
+ },
78
+ [Symbol.dispose]() {
79
+ a.dispose();
80
+ }
81
+ };
82
+ return a;
83
+ }
84
+ //#endregion
85
+ export { r as flux };
86
+
87
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","names":[],"sources":["../src/core.ts"],"sourcesContent":["import type { Flux, Observer, Producer, Unsubscribe } from './types';\n\nimport { makeAsyncIterator } from './_iterator';\nimport { makePipe } from './_pipe';\n\nconst NOOP: Unsubscribe = () => {};\n\n/**\n * Creates a cold `Flux<T>` stream from a producer function.\n *\n * The producer is called once per `subscribe()` invocation (cold by default).\n * Return a cleanup function from the producer to run when the subscriber\n * unsubscribes, errors, or the stream is disposed.\n *\n * @example\n * const ticker = flux<number>((observer) => {\n * let i = 0;\n * const id = setInterval(() => observer.next(i++), 1000);\n * return () => clearInterval(id);\n * });\n */\nexport function flux<T>(producer: Producer<T>): Flux<T> {\n const ac = new AbortController();\n\n const instance: Flux<T> = {\n get disposalSignal(): AbortSignal {\n return ac.signal;\n },\n\n dispose(): void {\n ac.abort();\n },\n\n get disposed(): boolean {\n return ac.signal.aborted;\n },\n\n pipe: makePipe(() => instance),\n\n subscribe(observerOrNext: Observer<T> | ((value: T) => void), signal?: AbortSignal): Unsubscribe {\n const observer: Observer<T> = typeof observerOrNext === 'function' ? { next: observerOrNext } : observerOrNext;\n\n if (ac.signal.aborted || signal?.aborted) {\n try {\n observer.complete?.();\n } catch {\n /* empty */\n }\n\n return NOOP;\n }\n\n let active = true;\n let producerCleanup: Unsubscribe | void;\n\n const deregister = (): void => {\n ac.signal.removeEventListener('abort', notifyComplete);\n\n if (signal) signal.removeEventListener('abort', unsubscribe);\n };\n\n const notifyComplete = (): void => {\n if (!active) return;\n\n active = false;\n deregister();\n\n try {\n observer.complete?.();\n } catch {\n /* empty */\n }\n\n try {\n producerCleanup?.();\n } catch {\n /* empty */\n }\n };\n\n const safeObserver: Observer<T> = {\n complete(): void {\n if (!active) return;\n\n active = false;\n deregister();\n\n try {\n observer.complete?.();\n } finally {\n producerCleanup?.();\n }\n },\n\n error(err: unknown): void {\n if (!active) return;\n\n active = false;\n deregister();\n\n try {\n observer.error?.(err);\n } finally {\n producerCleanup?.();\n }\n },\n\n next(value: T): void {\n if (active) observer.next(value);\n },\n };\n\n try {\n producerCleanup = producer(safeObserver);\n } catch (err) {\n active = false;\n observer.error?.(err);\n\n return NOOP;\n }\n\n if (!active) {\n producerCleanup?.();\n\n return NOOP;\n }\n\n function unsubscribe(): void {\n if (!active) return;\n\n active = false;\n deregister();\n producerCleanup?.();\n }\n\n ac.signal.addEventListener('abort', notifyComplete, { once: true });\n\n if (signal) {\n signal.addEventListener('abort', unsubscribe, { once: true });\n }\n\n return (): void => {\n unsubscribe();\n };\n },\n\n [Symbol.asyncIterator](): AsyncIterableIterator<T> {\n return makeAsyncIterator<T>((obs) => instance.subscribe(obs));\n },\n\n [Symbol.dispose](): void {\n instance.dispose();\n },\n };\n\n return instance;\n}\n"],"mappings":";;;AAKA,IAAM,UAA0B,CAAC;AAgBjC,SAAgB,EAAQ,GAAgC;CACtD,IAAM,IAAK,IAAI,gBAAgB,GAEzB,IAAoB;EACxB,IAAI,iBAA8B;GAChC,OAAO,EAAG;EACZ;EAEA,UAAgB;GACd,EAAG,MAAM;EACX;EAEA,IAAI,WAAoB;GACtB,OAAO,EAAG,OAAO;EACnB;EAEA,MAAM,QAAe,CAAQ;EAE7B,UAAU,GAAoD,GAAmC;GAC/F,IAAM,IAAwB,OAAO,KAAmB,aAAa,EAAE,MAAM,EAAe,IAAI;GAEhG,IAAI,EAAG,OAAO,WAAW,GAAQ,SAAS;IACxC,IAAI;KACF,EAAS,WAAW;IACtB,QAAQ,CAER;IAEA,OAAO;GACT;GAEA,IAAI,IAAS,IACT,GAEE,UAAyB;IAG7B,AAFA,EAAG,OAAO,oBAAoB,SAAS,CAAc,GAEjD,KAAQ,EAAO,oBAAoB,SAAS,CAAW;GAC7D,GAEM,UAA6B;IAC5B,OAGL;KADA,IAAS,IACT,EAAW;KAEX,IAAI;MACF,EAAS,WAAW;KACtB,QAAQ,CAER;KAEA,IAAI;MACF,IAAkB;KACpB,QAAQ,CAER;IAZW;GAab,GAEM,IAA4B;IAChC,WAAiB;KACV,OAGL;MADA,IAAS,IACT,EAAW;MAEX,IAAI;OACF,EAAS,WAAW;MACtB,UAAU;OACR,IAAkB;MACpB;KANW;IAOb;IAEA,MAAM,GAAoB;KACnB,OAGL;MADA,IAAS,IACT,EAAW;MAEX,IAAI;OACF,EAAS,QAAQ,CAAG;MACtB,UAAU;OACR,IAAkB;MACpB;KANW;IAOb;IAEA,KAAK,GAAgB;KACnB,AAAI,KAAQ,EAAS,KAAK,CAAK;IACjC;GACF;GAEA,IAAI;IACF,IAAkB,EAAS,CAAY;GACzC,SAAS,GAAK;IAIZ,OAHA,IAAS,IACT,EAAS,QAAQ,CAAG,GAEb;GACT;GAEA,IAAI,CAAC,GAGH,OAFA,IAAkB,GAEX;GAGT,SAAS,IAAoB;IACtB,MAEL,IAAS,IACT,EAAW,GACX,IAAkB;GACpB;GAQA,OANA,EAAG,OAAO,iBAAiB,SAAS,GAAgB,EAAE,MAAM,GAAK,CAAC,GAE9D,KACF,EAAO,iBAAiB,SAAS,GAAa,EAAE,MAAM,GAAK,CAAC,SAG3C;IACjB,EAAY;GACd;EACF;EAEA,CAAC,OAAO,iBAA2C;GACjD,OAAO,GAAsB,MAAQ,EAAS,UAAU,CAAG,CAAC;EAC9D;EAEA,CAAC,OAAO,WAAiB;GACvB,EAAS,QAAQ;EACnB;CACF;CAEA,OAAO;AACT"}
@@ -0,0 +1,2 @@
1
+ var e=class e extends Error{constructor(e,t){super(e,t),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}static is(t){return t instanceof e}},t=class extends e{ms;constructor(e){super(`Timeout after ${e}ms`),this.ms=e}};exports.FluxError=e,exports.FluxTimeoutError=t;
2
+ //# sourceMappingURL=errors.cjs.map
@@ -0,0 +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 static is(err: unknown): err is FluxError {\n return err instanceof FluxError;\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,MAAa,UAAkB,KAAM,CACnC,YAAY,EAAiB,EAAwB,CACnD,MAAM,EAAS,CAAO,EACtB,KAAK,KAAO,IAAI,OAAO,KACvB,OAAO,eAAe,KAAM,IAAI,OAAO,SAAS,CAClD,CAEA,OAAO,GAAG,EAAgC,CACxC,OAAO,aAAe,CACxB,CACF,EAEa,EAAb,cAAsC,CAAU,CAE9C,GAEA,YAAY,EAAY,CACtB,MAAM,iBAAiB,EAAG,GAAG,EAC7B,KAAK,GAAK,CACZ,CACF"}
@@ -0,0 +1,10 @@
1
+ export declare class FluxError extends Error {
2
+ constructor(message: string, options?: ErrorOptions);
3
+ static is(err: unknown): err is FluxError;
4
+ }
5
+ export declare class FluxTimeoutError extends FluxError {
6
+ /** The timeout duration in milliseconds that was exceeded. */
7
+ readonly ms: number;
8
+ constructor(ms: number);
9
+ }
10
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +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;IAMnD,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,SAAS;CAG1C;AAED,qBAAa,gBAAiB,SAAQ,SAAS;IAC7C,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;gBAER,EAAE,EAAE,MAAM;CAIvB"}
package/dist/errors.js ADDED
@@ -0,0 +1,18 @@
1
+ //#region src/errors.ts
2
+ var e = class e extends Error {
3
+ constructor(e, t) {
4
+ super(e, t), this.name = new.target.name, Object.setPrototypeOf(this, new.target.prototype);
5
+ }
6
+ static is(t) {
7
+ return t instanceof e;
8
+ }
9
+ }, t = class extends e {
10
+ ms;
11
+ constructor(e) {
12
+ super(`Timeout after ${e}ms`), this.ms = e;
13
+ }
14
+ };
15
+ //#endregion
16
+ export { e as FluxError, t as FluxTimeoutError };
17
+
18
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +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 static is(err: unknown): err is FluxError {\n return err instanceof FluxError;\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,MAAa,UAAkB,MAAM;CACnC,YAAY,GAAiB,GAAwB;EAGnD,AAFA,MAAM,GAAS,CAAO,GACtB,KAAK,OAAO,IAAI,OAAO,MACvB,OAAO,eAAe,MAAM,IAAI,OAAO,SAAS;CAClD;CAEA,OAAO,GAAG,GAAgC;EACxC,OAAO,aAAe;CACxB;AACF,GAEa,IAAb,cAAsC,EAAU;CAE9C;CAEA,YAAY,GAAY;EAEtB,AADA,MAAM,iBAAiB,EAAG,GAAG,GAC7B,KAAK,KAAK;CACZ;AACF"}
package/dist/flux.cjs ADDED
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@vielzeug/ripple");var t=!globalThis.__FLUX_PROD__;function n(e){t&&console.warn(`[@vielzeug/flux] ${e}`)}function r(e,...n){t&&console.error(`[@vielzeug/flux] ${e}`,...n)}var i=1e4;function a(e){let t=[],r=[],a=!1,o=!1,s={done:!0,value:void 0},c=e({complete(){a=!0,l()},error(e){a=!0,r.length>0?(r.shift().reject(e),l()):t.push({__err:e})},next(e){let a={done:!1,value:e};if(r.length>0){r.shift().resolve(a);return}t.length>=i&&(t.shift(),o||(o=!0,n(`async iterator buffer exceeded ${i} queued values — dropping the oldest. The consumer is falling behind the producer; throttle the source or drain the iterator faster.`))),t.push(a)}});function l(){for(;r.length>0;)r.shift().resolve(s)}let u={next(){if(t.length>0){let e=t.shift();return`__err`in e?Promise.reject(e.__err):Promise.resolve(e)}return a?Promise.resolve(s):new Promise((e,t)=>r.push({reject:t,resolve:e}))},return(){return a||(c(),a=!0,l()),Promise.resolve(s)},[Symbol.asyncIterator](){return u}};return u}function o(e){return((...t)=>t.reduce((e,t)=>t(e),e()))}var s=()=>{};function c(e){let t=new AbortController,n={get disposalSignal(){return t.signal},dispose(){t.abort()},get disposed(){return t.signal.aborted},pipe:o(()=>n),subscribe(n,r){let i=typeof n==`function`?{next:n}:n;if(t.signal.aborted||r?.aborted){try{i.complete?.()}catch{}return s}let a=!0,o,c=()=>{t.signal.removeEventListener(`abort`,l),r&&r.removeEventListener(`abort`,d)},l=()=>{if(a){a=!1,c();try{i.complete?.()}catch{}try{o?.()}catch{}}},u={complete(){if(a){a=!1,c();try{i.complete?.()}finally{o?.()}}},error(e){if(a){a=!1,c();try{i.error?.(e)}finally{o?.()}}},next(e){a&&i.next(e)}};try{o=e(u)}catch(e){return a=!1,i.error?.(e),s}if(!a)return o?.(),s;function d(){a&&(a=!1,c(),o?.())}return t.signal.addEventListener(`abort`,l,{once:!0}),r&&r.addEventListener(`abort`,d,{once:!0}),()=>{d()}},[Symbol.asyncIterator](){return a(e=>n.subscribe(e))},[Symbol.dispose](){n.dispose()}};return n}function l(e,t){return c(n=>e.on(t,e=>n.next(e)))}function u(e){return c(t=>(t.next(e.peek()),e.subscribe(()=>{t.next(e.peek())})))}function d(e,t){return c(n=>e.on(t,e=>n.next(e)))}function f(e,t){return n=>c(r=>n.subscribe({complete:r.complete,error:r.error,next(n){e.emit(t,...n===void 0?[]:[n]),r.next(n)}}))}function ee(e,t){return c(n=>e.on(t,e=>n.next(e)))}function te(e){return c(t=>{t.next(e.state.value);let n=e.onJoin(()=>{t.next(e.state.value)}),r=e.onLeave(()=>{t.next(e.state.value)});return()=>{n(),r()}})}function p(e){return c(t=>{t.next(e.value);let n=e.subscribe(()=>{t.next(e.value)});return()=>n.dispose()})}function m(t,n){let i=(0,e.signal)(n.initial),a=new AbortController,o=t.subscribe({error(e){r(`toSignal: source errored — signal value may be stale`,e)},next(e){i.value=e}},n.signal),s=()=>{a.signal.aborted||(a.abort(),o())};return{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}}}var h={delay(e,t){let n=setTimeout(e,t);return()=>clearTimeout(n)},repeat(e,t){let n=setInterval(e,t);return()=>clearInterval(n)}},g=class e extends Error{constructor(e,t){super(e,t),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}static is(t){return t instanceof e}},_=class extends g{ms;constructor(e){super(`Timeout after ${e}ms`),this.ms=e}};function ne(...e){return c(t=>{if(e.length===0){t.complete?.();return}let n=0,r=[];for(let i of e)r.push(i.subscribe({complete(){n++,n===e.length&&t.complete?.()},error:t.error,next:t.next}));return()=>{for(let e of r)e()}})}function re(...e){return c(t=>{let n=0,r;function i(){if(n>=e.length){t.complete?.();return}r=e[n++].subscribe({complete(){r=void 0,i()},error:t.error,next:t.next})}return i(),()=>r?.()})}function ie(...e){return c(t=>{if(e.length===0){t.complete?.();return}let n=Array(e.length),r=Array(e.length).fill(!1),i=0,a=[];return e.forEach((o,s)=>{a.push(o.subscribe({complete(){i++,i===e.length&&t.complete?.()},error:t.error,next(e){n[s]=e,r[s]=!0,r.every(Boolean)&&t.next([...n])}}))}),()=>{for(let e of a)e()}})}function ae(...e){return t=>c(n=>{let r=Array(e.length),i=Array(e.length).fill(!1),a=[];e.forEach((e,t)=>{a.push(e.subscribe({error:n.error,next(e){r[t]=e,i[t]=!0}}))});let o=t.subscribe({complete:n.complete,error:n.error,next(e){i.every(Boolean)&&n.next([e,...r])}});return()=>{o();for(let e of a)e()}})}function oe(...e){return c(t=>{if(e.length===0){t.complete?.();return}let n=!1,r=[];for(let i of e)r.push(i.subscribe({complete(){if(!n){n=!0,t.complete?.();for(let e of r)e()}},error(e){if(!n){n=!0,t.error?.(e);for(let e of r)e()}},next(e){if(!n){n=!0,t.next(e);for(let e of r)e()}}}));return()=>{for(let e of r)e()}})}function se(...e){return c(t=>{if(e.length===0){t.complete?.();return}let n=e.map(()=>[]),r=Array(e.length).fill(!1),i=[],a=!1;function o(){if(!a){for(;n.every(e=>e.length>0);){let e=n.map(e=>e.shift());t.next(e)}if(n.some((e,t)=>r[t]&&e.length===0)){a=!0,t.complete?.();for(let e of i)e()}}}return e.forEach((e,s)=>{i.push(e.subscribe({complete(){r[s]=!0,o()},error(e){a=!0,t.error?.(e);for(let e of i)e()},next(e){n[s].push(e),o()}}))}),()=>{for(let e of i)e()}})}function v(...e){return c(t=>{if(e.length===0){t.complete?.();return}let n=Array(e.length),r=Array(e.length).fill(!1),i=[];return e.forEach((e,a)=>{let o,s=!1;i.push(e.subscribe({complete(){if(r[a]=!0,!s){t.complete?.();for(let e of i)e();return}n[a]=o,r.every(Boolean)&&(t.next([...n]),t.complete?.())},error:t.error,next(e){o=e,s=!0}}))}),()=>{for(let e of i)e()}})}function y(...e){return c(t=>{for(let n of e)t.next(n);t.complete?.()})}function b(e){if(e instanceof Promise)return c(t=>{let n=!1;return e.then(e=>{n||(t.next(e),t.complete?.())}).catch(e=>{n||t.error?.(e)}),()=>{n=!0}});if(Symbol.asyncIterator in e){let t=e;return c(e=>{let n=!1,r=t[Symbol.asyncIterator]();return(async()=>{try{for(;;){let{done:t,value:i}=await r.next();if(n||t)break;e.next(i)}n||e.complete?.()}catch(t){n||e.error?.(t)}})(),()=>{n=!0,r.return?.()}})}let t=e;return c(e=>{try{for(let n of t)e.next(n);e.complete?.()}catch(t){e.error?.(t)}})}function x(e,t=h){return c(n=>{let r=0;return t.repeat(()=>n.next(r++),e)})}function S(e,t,n=h){return c(r=>{let i=0,a,o=n.delay(()=>{r.next(i++),t===void 0?r.complete?.():a=n.repeat(()=>r.next(i++),t)},e);return()=>{o(),a?.()}})}function C(){return c(e=>{e.complete?.()})}function w(){return c(()=>{})}function T(e){return c(t=>{let n=typeof e==`function`?e():e;t.error?.(n)})}function E(e,t){return c(n=>{let r=e=>n.next(e);return e.addEventListener(t,r),()=>e.removeEventListener(t,r)})}function D(e,t){try{e()}catch(e){t?.(e)}}function O(e){return t=>c(n=>{if(e<=0){n.complete?.();return}let r=0,i=()=>{};return i=t.subscribe({complete:n.complete,error:n.error,next(t){n.next(t),r++,r>=e&&(n.complete?.(),i())}}),i})}function k(e){return t=>c(n=>{let r=0;return t.subscribe({complete:n.complete,error:n.error,next(t){r<e?r++:n.next(t)}})})}function A(e){return t=>c(n=>{let r=!1,i=()=>{r||(r=!0,n.complete?.(),a(),o?.())},a;if(e instanceof AbortSignal){if(e.aborted){n.complete?.();return}e.addEventListener(`abort`,i,{once:!0}),a=()=>e.removeEventListener(`abort`,i)}else a=e.subscribe({next:i});let o=t.subscribe({complete(){r=!0,a(),n.complete?.()},error(e){r=!0,a(),n.error?.(e)},next:n.next});return()=>{a(),o()}})}function j(e){return t=>c(n=>{let r=()=>{};return r=t.subscribe({complete:n.complete,error:n.error,next(t){D(()=>{e(t)?n.next(t):(n.complete?.(),r())},n.error)}}),r})}function M(e,t=h){return n=>c(r=>{let i,a=n.subscribe({complete(){i?.(),r.complete?.()},error(e){i?.(),r.error?.(e)},next(n){i?.(),i=t.delay(()=>r.next(n),e)}});return()=>{i?.(),a()}})}function N(e,t=Date.now){return n=>c(r=>{let i=-1/0;return n.subscribe({complete:r.complete,error:r.error,next(n){let a=t();a-i>=e&&(i=a,r.next(n))}})})}function P(e){return t=>c(n=>{let r,i=!1,a=t.subscribe({complete:n.complete,error:n.error,next(e){r=e,i=!0}}),o=e.subscribe({next(){i&&n.next(r)}});return()=>{a(),o()}})}function F(){return O(1)}function I(){return e=>c(t=>{let n,r=!1;return e.subscribe({complete(){r&&t.next(n),t.complete?.()},error:t.error,next(e){n=e,r=!0}})})}function L(e){let t=Number.isFinite(e)?Math.max(1,Math.floor(e)):1;return{clamped:t!==e,value:t}}function R(e){return t=>c(n=>t.subscribe({complete:n.complete,error:n.error,next(t){D(()=>n.next(e(t)),n.error)}}))}function z(e){return t=>c(n=>t.subscribe({complete:n.complete,error:n.error,next(t){D(()=>{e(t)&&n.next(t)},n.error)}}))}function B(e,t){return n=>c(r=>{let i=t;return n.subscribe({complete:r.complete,error:r.error,next(t){D(()=>{i=e(i,t),r.next(i)},r.error)}})})}function V(e){return t=>c(n=>{let r,i=!1,a=()=>{i&&!r&&n.complete?.()},o=t.subscribe({complete(){i=!0,a()},error:n.error,next(t){D(()=>{r?.(),r=e(t).subscribe({complete(){r=void 0,a()},error:n.error,next:n.next})},n.error)}});return()=>{o(),r?.()}})}function ce(e){return t=>c(n=>{let r=!1,i=0,a=new Set,o=()=>{r&&i===0&&n.complete?.()},s=t.subscribe({complete(){r=!0,o()},error:n.error,next(t){D(()=>{i++;let r=!1,s=()=>{};s=e(t).subscribe({complete(){r=!0,i--,a.delete(s),o()},error:n.error,next:n.next}),r||a.add(s)},n.error)}});return()=>{s();for(let e of a)e()}})}function H(e,t=1/0){return n=>c(r=>{let i=!1,a=[],o=!1,s;function c(){if(a.length===0){o=!1,i&&r.complete?.();return}o=!0;let t=a.shift();D(()=>{s=e(t).subscribe({complete(){s=void 0,c()},error:r.error,next:r.next})},r.error)}let l=n.subscribe({complete(){i=!0,o||r.complete?.()},error:r.error,next(e){a.length<t&&(a.push(e),o||c())}});return()=>{l(),s?.(),a.length=0}})}function U(e){let t=e??Object.is;return e=>c(n=>{let r=!1,i;return e.subscribe({complete:n.complete,error:n.error,next(e){D(()=>{(!r||!t(i,e))&&(r=!0,i=e,n.next(e))},n.error)}})})}function W(...e){return t=>c(n=>{for(let t of e)n.next(t);return t.subscribe(n)})}function G(e,t){let{clamped:r,value:i}=L(e),{clamped:a,value:o}=L(t??i);return r&&n(`bufferCount: size must be a finite integer >= 1, got ${e} — clamped to ${i}`),t!==void 0&&a&&n(`bufferCount: every must be a finite integer >= 1, got ${t} — clamped to ${o}`),e=>c(t=>{let n=[],r=0;return e.subscribe({complete(){for(let e of n)e.length>0&&t.next(e);t.complete?.()},error:t.error,next(e){r%o===0&&n.push([]);for(let t of n)t.push(e);let a=0;for(;a<n.length;)n[a].length>=i?(t.next(n[a]),n.splice(a,1)):a++;r++}})})}function le(){return e=>c(t=>{let n=!1,r;return e.subscribe({complete:t.complete,error:t.error,next(e){n&&t.next([r,e]),n=!0,r=e}})})}function K(e,t){let n=new Set,r=[],i,a=!1,o,s=!1;return c(c=>{if(s){c.error?.(o);return}for(let e of r)c.next(e);if(a){c.complete?.();return}let l={complete:c.complete,error:c.error,next:c.next};return n.add(l),n.size===1&&(i=e.subscribe({complete(){a=!0;for(let e of[...n])e.complete?.();n.clear()},error(e){s=!0,o=e;for(let t of[...n])t.error?.(e);n.clear()},next(e){t>0&&(r.length>=t&&r.shift(),r.push(e));for(let t of[...n])t.next(e)}})),()=>{n.delete(l),n.size===0&&(i?.(),i=void 0)}})}function ue(){return e=>K(e,0)}function de(e=1){let{clamped:t,value:r}=L(e);return t&&n(`shareReplay: bufferSize must be a finite integer >= 1, got ${e} — clamped to ${r}`),e=>K(e,r)}function fe(e){return t=>c(n=>t.subscribe({complete:n.complete,error:n.error,next(t){D(()=>{e(t),n.next(t)},n.error)}}))}function pe(e,t=h){return n=>c(r=>{let i=[],a=n.subscribe({complete(){i.push(t.delay(()=>r.complete?.(),e))},error:r.error,next(n){i.push(t.delay(()=>r.next(n),e))}});return()=>{a();for(let e of i)e()}})}function me(e,t=h){return n=>c(r=>{let i,a=()=>{i=t.delay(()=>{r.error?.(new _(e))},e)};a();let o=n.subscribe({complete(){i(),r.complete?.()},error(e){i(),r.error?.(e)},next(e){i(),a(),r.next(e)}});return()=>{i(),o()}})}function he(e){return t=>c(n=>{let r,i=t.subscribe({complete:n.complete,error(t){D(()=>{r=e(t).subscribe({complete:n.complete,error:n.error,next:n.next})},n.error)},next:n.next});return()=>{i(),r?.()}})}function ge(e,t,n=h){return r=>c(i=>{let a=0,o,s;function c(){o=r.subscribe({complete:i.complete,error(r){if(a<e){let e=a++;t===void 0?c():D(()=>{let r=typeof t==`function`?t(e):t;s=n.delay(c,Math.max(0,r))},i.error)}else i.error?.(r)},next:i.next})}return c(),()=>{s?.(),o?.()}})}function _e(e){return t=>c(n=>{let i=!1,a=()=>{if(!i){i=!0;try{e()}catch(e){r(`finalize: cleanup callback threw`,e)}}},o=t.subscribe({complete(){a(),n.complete?.()},error(e){a(),n.error?.(e)},next:n.next});return()=>{a(),o()}})}function q(e){return e.reason??new DOMException(`Aborted`,`AbortError`)}function ve(e,t){return new Promise((n,r)=>{if(t?.aborted){r(q(t));return}let i,a=()=>{},o=()=>{a(),r(q(t))};t?.addEventListener(`abort`,o,{once:!0}),a=e.subscribe({complete(){t?.removeEventListener(`abort`,o),n(i)},error(e){t?.removeEventListener(`abort`,o),r(e)},next(e){i=e}})})}function J(e,t){return new Promise((n,r)=>{let i=[];if(t?.aborted){n(i);return}let a=()=>{},o=()=>{a(),n(i)};t?.addEventListener(`abort`,o,{once:!0}),a=e.subscribe({complete(){t?.removeEventListener(`abort`,o),n(i)},error(e){t?.removeEventListener(`abort`,o),r(e)},next(e){i.push(e)}})})}function ye(...e){return t=>e.reduce((e,t)=>t(e),t)}var Y=()=>{};function X(){let e=new AbortController,t=new Set;function n(e){for(let n of[...t])try{e(n)}catch(e){r(`Subscriber threw during broadcast`,e)}}function i(n,r){let i=typeof n==`function`?{next:n}:n;if(e.signal.aborted||r?.aborted){try{i.complete?.()}catch{}return Y}t.add(i);let a=()=>{t.delete(i),r&&r.removeEventListener(`abort`,a)};return r&&r.addEventListener(`abort`,a,{once:!0}),a}return{ac:e,broadcast:n,doSubscribe:i,subscribers:t}}function Z(e,t,n,r){let i=typeof n==`function`?{next:n}:n;if(e.ac.signal.aborted||r?.aborted){try{i.complete?.()}catch{}return Y}if(t(),e.ac.signal.aborted){try{i.complete?.()}catch{}return Y}return e.doSubscribe(i,r)}function Q(e){return()=>{e.ac.signal.aborted||(e.ac.abort(),e.broadcast(e=>e.complete?.()),e.subscribers.clear())}}function $(e){return t=>{e.ac.signal.aborted||(e.ac.abort(),e.broadcast(e=>e.error?.(t)),e.subscribers.clear())}}function be(){let e=X(),t=Q(e),n={complete:t,get disposalSignal(){return e.ac.signal},dispose:t,get disposed(){return e.ac.signal.aborted},emit(t){e.ac.signal.aborted||e.broadcast(e=>e.next(t))},fail:$(e),pipe:o(()=>n),subscribe(t,n){return e.doSubscribe(t,n)},[Symbol.asyncIterator](){return a(t=>e.doSubscribe(t))},[Symbol.dispose](){t()}};return n}function xe(e){let t=X(),n=Q(t),i=$(t),s=e,c={complete:n,get disposalSignal(){return t.ac.signal},dispose:n,get disposed(){return t.ac.signal.aborted},emit(e){t.ac.signal.aborted||(s=e,t.broadcast(t=>t.next(e)))},fail:i,pipe:o(()=>c),subscribe(e,n){return Z(t,()=>{let t=typeof e==`function`?{next:e}:e;try{t.next(s)}catch(e){r(`BehaviorSubject: subscriber threw during initial replay`,e)}},e,n)},[Symbol.asyncIterator](){return a(e=>Z(t,()=>{try{e.next(s)}catch(e){r(`BehaviorSubject: subscriber threw during initial replay`,e)}},e))},[Symbol.dispose](){n()},get value(){return s}};return c}function Se(e){let t=X(),i=Q(t),s=$(t),{clamped:c,value:l}=L(e),u=[];c&&n(`createReplaySubject: bufferSize must be a finite integer >= 1, got ${e} — clamped to ${l}`);let d={get buffer(){return u},complete:i,get disposalSignal(){return t.ac.signal},dispose:i,get disposed(){return t.ac.signal.aborted},emit(e){t.ac.signal.aborted||(u.length>=l&&u.shift(),u.push(e),t.broadcast(t=>t.next(e)))},fail:s,pipe:o(()=>d),subscribe(e,n){return Z(t,()=>{let t=typeof e==`function`?{next:e}:e;for(let e of u)try{t.next(e)}catch(e){r(`ReplaySubject: subscriber threw during replay`,e)}},e,n)},[Symbol.asyncIterator](){return a(e=>Z(t,()=>{for(let t of u)try{e.next(t)}catch(e){r(`ReplaySubject: subscriber threw during replay`,e)}},e))},[Symbol.dispose](){i()}};return d}exports.DEFAULT_SCHEDULER=h,exports.FluxError=g,exports.FluxTimeoutError=_,exports.bufferCount=G,exports.catchError=he,exports.combineLatest=ie,exports.concat=re,exports.concatMap=H,exports.createBehaviorSubject=xe,exports.createReplaySubject=Se,exports.createSubject=be,exports.debounce=M,exports.delay=pe,exports.distinctUntilChanged=U,exports.empty=C,exports.filter=z,exports.finalize=_e,exports.first=F,exports.flatMap=ce,exports.flow=ye,exports.flux=c,exports.forkJoin=v,exports.from=b,exports.fromBus=d,exports.fromEvent=E,exports.fromPresence=te,exports.fromPulse=ee,exports.fromQuery=u,exports.fromSignal=p,exports.fromSse=l,exports.interval=x,exports.last=I,exports.map=R,exports.merge=ne,exports.never=w,exports.of=y,exports.pairwise=le,exports.race=oe,exports.retry=ge,exports.sample=P,exports.scan=B,exports.share=ue,exports.shareReplay=de,exports.skip=k,exports.startWith=W,exports.switchMap=V,exports.take=O,exports.takeUntil=A,exports.takeWhile=j,exports.tap=fe,exports.throttle=N,exports.throwError=T,exports.timeout=me,exports.timer=S,exports.toArray=J,exports.toBus=f,exports.toPromise=ve,exports.toSignal=m,exports.withLatestFrom=ae,exports.zip=se;
2
+ //# sourceMappingURL=flux.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flux.cjs","names":[],"sources":["../src/_dev.ts","../src/_iterator.ts","../src/_pipe.ts","../src/core.ts","../src/adapters/courier.ts","../src/adapters/herald.ts","../src/adapters/pulse.ts","../src/adapters/ripple.ts","../src/_scheduler.ts","../src/errors.ts","../src/operators/combination.ts","../src/operators/creation.ts","../src/_safe.ts","../src/operators/filtering.ts","../src/_numeric.ts","../src/operators/transformation.ts","../src/operators/utility.ts","../src/subject.ts"],"sourcesContent":["/**\n * Set to `true` by the Vite `define` config in production builds so that all\n * dev-only `warn()` / `error()` calls are eliminated by the bundler.\n * When running tests or without a bundler the flag is absent and warnings fire.\n */\nconst isDev = !(globalThis as { __FLUX_PROD__?: boolean }).__FLUX_PROD__;\n\n/** @internal @security Messages may include user data. */\nexport function warn(msg: string): void {\n if (isDev) console.warn(`[@vielzeug/flux] ${msg}`);\n}\n\n/** @internal @security Messages and args may include user data. */\nexport function error(msg: string, ...args: unknown[]): void {\n if (isDev) console.error(`[@vielzeug/flux] ${msg}`, ...args);\n}\n","import type { Observer, Unsubscribe } from './types';\n\nimport { warn } from './_dev';\n\ntype QueueItem<T> = IteratorResult<T> | { readonly __err: unknown };\n\n/**\n * Upper bound on the internal buffer before values are dropped (oldest first).\n * Protects against unbounded memory growth when a producer emits faster than the\n * `for await` consumer drains the iterator.\n */\nconst MAX_QUEUE_SIZE = 10_000;\n\n/**\n * Creates an `AsyncIterator<T>` backed by a subscribe function.\n * Buffers incoming values until consumed; cancels the subscription on `return()`.\n * Drops the oldest buffered value (with a one-time dev warning) if the buffer exceeds\n * `MAX_QUEUE_SIZE` — see `MAX_QUEUE_SIZE`.\n * @internal\n */\nexport function makeAsyncIterator<T>(subscribe: (observer: Observer<T>) => Unsubscribe): AsyncIterableIterator<T> {\n const queue: QueueItem<T>[] = [];\n const pending: Array<{\n reject: (e: unknown) => void;\n resolve: (r: IteratorResult<T>) => void;\n }> = [];\n let done = false;\n let warnedOverflow = false;\n\n const DONE_RESULT: IteratorResult<T> = { done: true, value: undefined as T };\n\n const unsub = subscribe({\n complete() {\n done = true;\n drainPending();\n },\n error(err) {\n done = true;\n\n if (pending.length > 0) {\n pending.shift()!.reject(err);\n drainPending();\n } else {\n queue.push({ __err: err });\n }\n },\n next(v) {\n const item: IteratorResult<T> = { done: false, value: v };\n\n if (pending.length > 0) {\n pending.shift()!.resolve(item);\n\n return;\n }\n\n if (queue.length >= MAX_QUEUE_SIZE) {\n queue.shift();\n\n if (!warnedOverflow) {\n warnedOverflow = true;\n warn(\n `async iterator buffer exceeded ${MAX_QUEUE_SIZE} queued values — dropping the oldest. ` +\n 'The consumer is falling behind the producer; throttle the source or drain the iterator faster.',\n );\n }\n }\n\n queue.push(item);\n },\n });\n\n function drainPending(): void {\n while (pending.length > 0) {\n pending.shift()!.resolve(DONE_RESULT);\n }\n }\n\n const iterator = {\n next(): Promise<IteratorResult<T>> {\n if (queue.length > 0) {\n const item = queue.shift()!;\n\n if ('__err' in item) return Promise.reject((item as { __err: unknown }).__err);\n\n return Promise.resolve(item as IteratorResult<T>);\n }\n\n if (done) return Promise.resolve(DONE_RESULT);\n\n return new Promise<IteratorResult<T>>((resolve, reject) => pending.push({ reject, resolve }));\n },\n return(): Promise<IteratorResult<T>> {\n if (!done) {\n unsub();\n done = true;\n drainPending();\n }\n\n return Promise.resolve(DONE_RESULT);\n },\n [Symbol.asyncIterator](): AsyncIterableIterator<T> {\n return iterator;\n },\n };\n\n return iterator;\n}\n","import type { Flux, Operator } from './types';\n\n/**\n * Builds the shared `pipe()` implementation used by `flux()` and every `Subject` variant —\n * previously copy-pasted once per factory. `getInstance` is called lazily so the returned\n * function can be assigned into an object literal that self-references its own binding\n * (`instance`/`subject`) before that binding is initialised.\n * @internal\n */\nexport function makePipe<T>(getInstance: () => Flux<T>): Flux<T>['pipe'] {\n return ((...operators: Operator[]) =>\n operators.reduce((f: Flux<unknown>, op) => op(f), getInstance() as Flux<unknown>)) as Flux<T>['pipe'];\n}\n","import type { Flux, Observer, Producer, Unsubscribe } from './types';\n\nimport { makeAsyncIterator } from './_iterator';\nimport { makePipe } from './_pipe';\n\nconst NOOP: Unsubscribe = () => {};\n\n/**\n * Creates a cold `Flux<T>` stream from a producer function.\n *\n * The producer is called once per `subscribe()` invocation (cold by default).\n * Return a cleanup function from the producer to run when the subscriber\n * unsubscribes, errors, or the stream is disposed.\n *\n * @example\n * const ticker = flux<number>((observer) => {\n * let i = 0;\n * const id = setInterval(() => observer.next(i++), 1000);\n * return () => clearInterval(id);\n * });\n */\nexport function flux<T>(producer: Producer<T>): Flux<T> {\n const ac = new AbortController();\n\n const instance: Flux<T> = {\n get disposalSignal(): AbortSignal {\n return ac.signal;\n },\n\n dispose(): void {\n ac.abort();\n },\n\n get disposed(): boolean {\n return ac.signal.aborted;\n },\n\n pipe: makePipe(() => instance),\n\n subscribe(observerOrNext: Observer<T> | ((value: T) => void), signal?: AbortSignal): Unsubscribe {\n const observer: Observer<T> = typeof observerOrNext === 'function' ? { next: observerOrNext } : observerOrNext;\n\n if (ac.signal.aborted || signal?.aborted) {\n try {\n observer.complete?.();\n } catch {\n /* empty */\n }\n\n return NOOP;\n }\n\n let active = true;\n let producerCleanup: Unsubscribe | void;\n\n const deregister = (): void => {\n ac.signal.removeEventListener('abort', notifyComplete);\n\n if (signal) signal.removeEventListener('abort', unsubscribe);\n };\n\n const notifyComplete = (): void => {\n if (!active) return;\n\n active = false;\n deregister();\n\n try {\n observer.complete?.();\n } catch {\n /* empty */\n }\n\n try {\n producerCleanup?.();\n } catch {\n /* empty */\n }\n };\n\n const safeObserver: Observer<T> = {\n complete(): void {\n if (!active) return;\n\n active = false;\n deregister();\n\n try {\n observer.complete?.();\n } finally {\n producerCleanup?.();\n }\n },\n\n error(err: unknown): void {\n if (!active) return;\n\n active = false;\n deregister();\n\n try {\n observer.error?.(err);\n } finally {\n producerCleanup?.();\n }\n },\n\n next(value: T): void {\n if (active) observer.next(value);\n },\n };\n\n try {\n producerCleanup = producer(safeObserver);\n } catch (err) {\n active = false;\n observer.error?.(err);\n\n return NOOP;\n }\n\n if (!active) {\n producerCleanup?.();\n\n return NOOP;\n }\n\n function unsubscribe(): void {\n if (!active) return;\n\n active = false;\n deregister();\n producerCleanup?.();\n }\n\n ac.signal.addEventListener('abort', notifyComplete, { once: true });\n\n if (signal) {\n signal.addEventListener('abort', unsubscribe, { once: true });\n }\n\n return (): void => {\n unsubscribe();\n };\n },\n\n [Symbol.asyncIterator](): AsyncIterableIterator<T> {\n return makeAsyncIterator<T>((obs) => instance.subscribe(obs));\n },\n\n [Symbol.dispose](): void {\n instance.dispose();\n },\n };\n\n return instance;\n}\n","import type { SseSource } from '@vielzeug/courier';\n\nimport type { Flux } from '../types';\n\nimport { flux } from '../core';\n\n/**\n * Minimal shape of a courier `SyncStore` needed to subscribe to query state changes.\n * Avoids a hard import of `@vielzeug/courier` types that are not in the peer dep.\n *\n * @internal\n */\ntype SyncStore<T> = {\n peek(): T;\n subscribe(onStoreChange: () => void): () => void;\n};\n\n/**\n * Create a `Flux` from an SSE source returned by `streamClient.sse()`.\n * Emits typed SSE events under `event`. The current SSE status is NOT emitted —\n * only data messages are forwarded.\n *\n * @example\n * const events$ = fromSse(stream.sse('/events'), 'message');\n * events$.subscribe((data) => console.log(data));\n */\nexport function fromSse<TEvents extends Record<string, unknown>, K extends keyof TEvents & string>(\n source: SseSource<TEvents>,\n event: K,\n): Flux<TEvents[K]> {\n return flux<TEvents[K]>((observer) => {\n const unsub = source.on(event, (data) => observer.next(data));\n\n return unsub;\n });\n}\n\n/**\n * Create a `Flux` from a courier `SyncStore` (returned by `qc.observe()`).\n * Emits the current state immediately, then on every state change.\n *\n * @example\n * const data$ = fromQuery(qc.observe({ key: ['users'], fn: fetchUsers }));\n * data$.subscribe((state) => console.log(state.status, state.data));\n */\nexport function fromQuery<T>(store: SyncStore<T>): Flux<T> {\n return flux<T>((observer) => {\n observer.next(store.peek());\n\n const unsub = store.subscribe(() => {\n observer.next(store.peek());\n });\n\n return unsub;\n });\n}\n","import type { Bus, EventKey, EventMap } from '@vielzeug/herald';\n\nimport type { Flux, Operator } from '../types';\n\nimport { flux } from '../core';\n\n/**\n * Create a `Flux` that emits whenever `bus` fires `event`.\n *\n * @example\n * const clicks$ = fromBus(appBus, 'button:click');\n * clicks$.subscribe((payload) => console.log(payload));\n */\nexport function fromBus<T extends EventMap, K extends EventKey<T>>(bus: Bus<T>, event: K): Flux<T[K]> {\n return flux<T[K]>((observer) => {\n const unsub = bus.on(event, (payload) => observer.next(payload));\n\n return unsub;\n });\n}\n\n/**\n * Operator that pipes each emission to `bus` under `event`.\n * Returns the source unchanged (pass-through for side effects).\n *\n * @example\n * clicks$.pipe(toBus(appBus, 'forwarded:click'));\n */\nexport function toBus<T extends EventMap, K extends EventKey<T>>(bus: Bus<T>, event: K): Operator<T[K], T[K]> {\n return (source) =>\n flux<T[K]>((observer) =>\n source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n bus.emit(event, ...((v === undefined ? [] : [v]) as T[K] extends void ? [] : [T[K]]));\n observer.next(v);\n },\n }),\n );\n}\n","import type { EventKey, MessageMap, PresenceChannel, Pulse } from '@vielzeug/pulse';\n\nimport type { Flux } from '../types';\n\nimport { flux } from '../core';\n\n/**\n * Create a `Flux` that emits whenever a Pulse connection fires `event`.\n *\n * @example\n * const messages$ = fromPulse(pulse, 'chat:message');\n * messages$.subscribe((msg) => console.log(msg));\n */\nexport function fromPulse<T extends MessageMap, K extends EventKey<T>>(pulse: Pulse<T>, event: K): Flux<T[K]> {\n return flux<T[K]>((observer) => {\n const unsub = pulse.on(event, (payload) => observer.next(payload));\n\n return unsub;\n });\n}\n\n/**\n * Create a `Flux` from a `PresenceChannel`. Emits the full member map whenever\n * any member joins or leaves.\n *\n * The current state is emitted immediately on subscribe.\n *\n * @example\n * const members$ = fromPresence(pulse.presence('lobby'));\n * members$.subscribe((map) => console.log([...map.keys()]));\n */\nexport function fromPresence<T>(presence: PresenceChannel<T>): Flux<ReadonlyMap<string, T>> {\n return flux<ReadonlyMap<string, T>>((observer) => {\n observer.next(presence.state.value);\n\n const unsubJoin = presence.onJoin(() => {\n observer.next(presence.state.value);\n });\n\n const unsubLeave = presence.onLeave(() => {\n observer.next(presence.state.value);\n });\n\n return () => {\n unsubJoin();\n unsubLeave();\n };\n });\n}\n","import type { Readable } from '@vielzeug/ripple';\n\nimport { signal } from '@vielzeug/ripple';\n\nimport type { Flux } from '../types';\n\nimport { error } from '../_dev';\nimport { flux } from '../core';\n\n/**\n * Create a `Flux` that emits a new value every time a ripple `Reactive` changes.\n * The current value is emitted immediately on subscribe.\n *\n * @example\n * const count = signal(0);\n * const count$ = fromSignal(count);\n * count$.subscribe((n) => console.log(n)); // logs 0 immediately, then on every change\n */\nexport function fromSignal<T>(source: Readable<T>): Flux<T> {\n return flux<T>((observer) => {\n observer.next(source.value);\n\n const subscription = source.subscribe(() => {\n observer.next(source.value);\n });\n\n return () => subscription.dispose();\n });\n}\n\nexport type ToSignalOptions<T> = {\n /** Initial value before the first emission. */\n initial: T;\n /**\n * Optional `AbortSignal` that stops tracking independently of disposal.\n * Useful when the caller does not own the flux's lifetime.\n */\n signal?: AbortSignal;\n};\n\n/**\n * A handle returned by `toSignal()` that wraps a ripple signal updated by a `Flux`.\n * Exposes `value` (reactive — usable in ripple `effect()` calls) and `dispose()` to\n * stop tracking. The underlying signal retains its last value after disposal.\n */\nexport type SignalBinding<T> = {\n /** ES2026 `using` compatible disposal. */\n [Symbol.dispose](): void;\n /** AbortSignal that aborts when `dispose()` is called. */\n readonly disposalSignal: AbortSignal;\n /** Stop tracking the source `Flux` and freeze the signal value. */\n dispose(): void;\n /** `true` after `dispose()` is called. */\n readonly disposed: boolean;\n /** The underlying ripple `Readable<T>` for use with ripple operators. */\n readonly signal: Readable<T>;\n /** The current tracked value (reactive — reads track in ripple effects). */\n readonly value: T;\n};\n\n/**\n * Create a `SignalBinding<T>` whose value is updated by each emission from a `Flux`.\n * The binding starts with `opts.initial` and updates reactively as the flux emits.\n *\n * Call `dispose()` to stop tracking; the last value remains readable after disposal.\n *\n * @example\n * const latest = toSignal(count$, { initial: 0 });\n * effect(() => console.log(latest.value)); // reactive — re-runs on flux emissions\n * latest.dispose(); // stop tracking\n */\nexport function toSignal<T>(source: Flux<T>, opts: ToSignalOptions<T>): SignalBinding<T> {\n const sig = signal<T>(opts.initial);\n const ac = new AbortController();\n\n const unsub = source.subscribe(\n {\n error(err) {\n error('toSignal: source errored — signal value may be stale', err);\n },\n next(v) {\n sig.value = v;\n },\n },\n opts.signal,\n );\n\n const dispose = (): void => {\n if (ac.signal.aborted) return;\n\n ac.abort();\n unsub();\n };\n\n return {\n get disposalSignal(): AbortSignal {\n return ac.signal;\n },\n dispose,\n get disposed(): boolean {\n return ac.signal.aborted;\n },\n get signal(): Readable<T> {\n return sig;\n },\n [Symbol.dispose](): void {\n dispose();\n },\n get value(): T {\n return sig.value;\n },\n };\n}\n","import type { Scheduler } from './types';\n\nexport const DEFAULT_SCHEDULER: Scheduler = {\n delay(fn, ms) {\n const id = setTimeout(fn, ms);\n\n return () => clearTimeout(id);\n },\n repeat(fn, ms) {\n const id = setInterval(fn, ms);\n\n return () => clearInterval(id);\n },\n};\n","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 static is(err: unknown): err is FluxError {\n return err instanceof FluxError;\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","import type { Flux, Operator, Unsubscribe } from '../types';\n\nimport { flux } from '../core';\n\n/**\n * Merge multiple `Flux` streams into one, emitting values as they arrive.\n *\n * @example\n * merge(clicks$, keydowns$).subscribe(console.log);\n */\nexport function merge<T>(...sources: Flux<T>[]): Flux<T> {\n return flux<T>((observer) => {\n if (sources.length === 0) {\n observer.complete?.();\n\n return;\n }\n\n let completedCount = 0;\n const unsubs: Unsubscribe[] = [];\n\n for (const source of sources) {\n unsubs.push(\n source.subscribe({\n complete() {\n completedCount++;\n\n if (completedCount === sources.length) observer.complete?.();\n },\n error: observer.error,\n next: observer.next,\n }),\n );\n }\n\n return () => {\n for (const u of unsubs) u();\n };\n });\n}\n\n/**\n * Subscribe to each source sequentially — the next source only starts after\n * the previous one completes.\n *\n * @example\n * concat(of(1, 2), of(3, 4)); // emits 1, 2, 3, 4\n */\nexport function concat<T>(...sources: Flux<T>[]): Flux<T> {\n return flux<T>((observer) => {\n let index = 0;\n let currentUnsub: Unsubscribe | undefined;\n\n function subscribeNext(): void {\n if (index >= sources.length) {\n observer.complete?.();\n\n return;\n }\n\n currentUnsub = sources[index++]!.subscribe({\n complete() {\n currentUnsub = undefined;\n subscribeNext();\n },\n error: observer.error,\n next: observer.next,\n });\n }\n\n subscribeNext();\n\n return () => currentUnsub?.();\n });\n}\n\n/**\n * Combine the latest values from all sources into a tuple whenever any source emits.\n * Waits until all sources have emitted at least once before emitting.\n *\n * @example\n * combineLatest(a$, b$).subscribe(([a, b]) => console.log(a, b));\n */\nexport function combineLatest<T extends Flux<unknown>[]>(\n ...sources: T\n): Flux<{ [K in keyof T]: T[K] extends Flux<infer V> ? V : never }> {\n type Out = { [K in keyof T]: T[K] extends Flux<infer V> ? V : never };\n\n return flux<Out>((observer) => {\n if (sources.length === 0) {\n observer.complete?.();\n\n return;\n }\n\n const latests = new Array(sources.length) as Out;\n const hasValue = new Array<boolean>(sources.length).fill(false);\n let completedCount = 0;\n const unsubs: Unsubscribe[] = [];\n\n sources.forEach((source, i) => {\n unsubs.push(\n source.subscribe({\n complete() {\n completedCount++;\n\n if (completedCount === sources.length) observer.complete?.();\n },\n error: observer.error,\n next(v) {\n latests[i] = v as Out[typeof i];\n hasValue[i] = true;\n\n if (hasValue.every(Boolean)) observer.next([...latests] as Out);\n },\n }),\n );\n });\n\n return () => {\n for (const u of unsubs) u();\n };\n });\n}\n\n/**\n * Emit from `source` combined with the latest values from `others` as a tuple.\n * Does not wait for others to emit — emits whenever `source` emits (if others have a value).\n *\n * @example\n * a$.pipe(withLatestFrom(b$)).subscribe(([a, b]) => console.log(a, b));\n */\nexport function withLatestFrom<T, U extends Flux<unknown>[]>(\n ...others: U\n): Operator<T, [T, ...{ [K in keyof U]: U[K] extends Flux<infer V> ? V : never }]> {\n type Rest = { [K in keyof U]: U[K] extends Flux<infer V> ? V : never };\n type Out = [T, ...Rest];\n\n return (source) =>\n flux<Out>((observer) => {\n const latests = new Array(others.length) as Rest;\n const hasValue = new Array<boolean>(others.length).fill(false);\n const otherUnsubs: Unsubscribe[] = [];\n\n others.forEach((other, i) => {\n otherUnsubs.push(\n other.subscribe({\n error: observer.error,\n next(v) {\n latests[i] = v as Rest[typeof i];\n hasValue[i] = true;\n },\n }),\n );\n });\n\n const sourceUnsub = source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n if (hasValue.every(Boolean)) {\n observer.next([v, ...latests] as Out);\n }\n },\n });\n\n return () => {\n sourceUnsub();\n\n for (const u of otherUnsubs) u();\n };\n });\n}\n\n/**\n * Subscribe to all sources; emit the first value from whichever source emits first,\n * then unsubscribe from all others.\n *\n * @example\n * race(timedOut$, userClicked$).subscribe(console.log);\n */\nexport function race<T>(...sources: Flux<T>[]): Flux<T> {\n return flux<T>((observer) => {\n if (sources.length === 0) {\n observer.complete?.();\n\n return;\n }\n\n let winner = false;\n const unsubs: Unsubscribe[] = [];\n\n for (const source of sources) {\n unsubs.push(\n source.subscribe({\n complete() {\n if (!winner) {\n winner = true;\n observer.complete?.();\n\n for (const u of unsubs) u();\n }\n },\n error(err) {\n if (!winner) {\n winner = true;\n observer.error?.(err);\n\n for (const u of unsubs) u();\n }\n },\n next(v) {\n if (!winner) {\n winner = true;\n observer.next(v);\n\n for (const u of unsubs) u();\n }\n },\n }),\n );\n }\n\n return () => {\n for (const u of unsubs) u();\n };\n });\n}\n\n/**\n * Pair emissions by index across all sources. Emits a tuple when all sources\n * have each emitted their N-th value. Completes when any source completes.\n *\n * @example\n * zip(of(1, 2), of('a', 'b')); // emits [1,'a'], [2,'b']\n */\nexport function zip<T extends Flux<unknown>[]>(\n ...sources: T\n): Flux<{ [K in keyof T]: T[K] extends Flux<infer V> ? V : never }> {\n type Out = { [K in keyof T]: T[K] extends Flux<infer V> ? V : never };\n\n return flux<Out>((observer) => {\n if (sources.length === 0) {\n observer.complete?.();\n\n return;\n }\n\n const buffers = sources.map(() => [] as unknown[]);\n const completed = new Array<boolean>(sources.length).fill(false);\n const unsubs: Unsubscribe[] = [];\n let done = false;\n\n function checkAndEmit(): void {\n if (done) return;\n\n while (buffers.every((b) => b.length > 0)) {\n const tuple = buffers.map((b) => b.shift()) as Out;\n\n observer.next(tuple);\n }\n\n if (buffers.some((b, i) => completed[i] && b.length === 0)) {\n done = true;\n observer.complete?.();\n\n for (const u of unsubs) u();\n }\n }\n\n sources.forEach((source, i) => {\n unsubs.push(\n source.subscribe({\n complete() {\n completed[i] = true;\n checkAndEmit();\n },\n error(err) {\n done = true;\n observer.error?.(err);\n\n for (const u of unsubs) u();\n },\n next(v) {\n buffers[i]!.push(v);\n checkAndEmit();\n },\n }),\n );\n });\n\n return () => {\n for (const u of unsubs) u();\n };\n });\n}\n\n/**\n * Wait for all sources to complete, then emit a single tuple of last values.\n * Similar to `Promise.all`.\n *\n * @example\n * forkJoin(fetch1$, fetch2$).subscribe(([r1, r2]) => console.log(r1, r2));\n */\nexport function forkJoin<T extends Flux<unknown>[]>(\n ...sources: T\n): Flux<{ [K in keyof T]: T[K] extends Flux<infer V> ? V : never }> {\n type Out = { [K in keyof T]: T[K] extends Flux<infer V> ? V : never };\n\n return flux<Out>((observer) => {\n if (sources.length === 0) {\n observer.complete?.();\n\n return;\n }\n\n const results = new Array(sources.length) as Out;\n const completed = new Array<boolean>(sources.length).fill(false);\n const unsubs: Unsubscribe[] = [];\n\n sources.forEach((source, i) => {\n let lastValue: unknown;\n let hasValue = false;\n\n unsubs.push(\n source.subscribe({\n complete() {\n completed[i] = true;\n\n if (!hasValue) {\n observer.complete?.();\n\n for (const u of unsubs) u();\n\n return;\n }\n\n results[i] = lastValue as Out[typeof i];\n\n if (completed.every(Boolean)) {\n observer.next([...results] as Out);\n observer.complete?.();\n }\n },\n error: observer.error,\n next(v) {\n lastValue = v;\n hasValue = true;\n },\n }),\n );\n });\n\n return () => {\n for (const u of unsubs) u();\n };\n });\n}\n","import type { Flux, Scheduler } from '../types';\n\nimport { DEFAULT_SCHEDULER } from '../_scheduler';\nimport { flux } from '../core';\n\n/**\n * Creates a `Flux` that emits each argument in order, then completes.\n *\n * @example\n * of(1, 2, 3).subscribe(console.log); // 1, 2, 3\n */\nexport function of<T>(...values: T[]): Flux<T> {\n return flux<T>((observer) => {\n for (const v of values) {\n observer.next(v);\n }\n\n observer.complete?.();\n });\n}\n\n/**\n * Converts an `Iterable`, `AsyncIterable`, or `Promise` into a `Flux`.\n *\n * @example\n * from([1, 2, 3]).subscribe(console.log);\n * from(fetch('/api/data').then((r) => r.json())).subscribe(console.log);\n */\nexport function from<T>(source: AsyncIterable<T> | Iterable<T> | Promise<T>): Flux<T> {\n if (source instanceof Promise) {\n return flux<T>((observer) => {\n let cancelled = false;\n\n source\n .then((v) => {\n if (!cancelled) {\n observer.next(v);\n observer.complete?.();\n }\n })\n .catch((err) => {\n if (!cancelled) observer.error?.(err);\n });\n\n return () => {\n cancelled = true;\n };\n });\n }\n\n if (Symbol.asyncIterator in source) {\n const asyncSrc = source as AsyncIterable<T>;\n\n return flux<T>((observer) => {\n let cancelled = false;\n const iter = asyncSrc[Symbol.asyncIterator]();\n\n (async () => {\n try {\n while (true) {\n const { done, value } = await iter.next();\n\n if (cancelled || done) break;\n\n observer.next(value);\n }\n\n if (!cancelled) observer.complete?.();\n } catch (err) {\n if (!cancelled) observer.error?.(err);\n }\n })();\n\n return () => {\n cancelled = true;\n iter.return?.();\n };\n });\n }\n\n const iterSrc = source as Iterable<T>;\n\n return flux<T>((observer) => {\n try {\n for (const v of iterSrc) {\n observer.next(v);\n }\n\n observer.complete?.();\n } catch (err) {\n observer.error?.(err);\n }\n });\n}\n\n/**\n * Emits an incrementing integer (starting at 0) every `ms` milliseconds.\n *\n * @example\n * const ticks = interval(1000); // 0, 1, 2, ... every second\n */\nexport function interval(ms: number, scheduler: Scheduler = DEFAULT_SCHEDULER): Flux<number> {\n return flux<number>((observer) => {\n let i = 0;\n\n return scheduler.repeat(() => observer.next(i++), ms);\n });\n}\n\n/**\n * After an initial `delay` ms, emits `0`, then (if `intervalMs` is provided)\n * emits incrementing values every `intervalMs` ms.\n *\n * @example\n * timer(1000).subscribe(console.log); // emits 0 after 1s, then completes\n * timer(1000, 500).subscribe(console.log); // emits 0 after 1s, then 1, 2, 3... every 500ms\n */\nexport function timer(delay: number, intervalMs?: number, scheduler: Scheduler = DEFAULT_SCHEDULER): Flux<number> {\n return flux<number>((observer) => {\n let count = 0;\n let cancelRepeat: (() => void) | undefined;\n\n const cancelDelay = scheduler.delay(() => {\n observer.next(count++);\n\n if (intervalMs !== undefined) {\n cancelRepeat = scheduler.repeat(() => observer.next(count++), intervalMs);\n } else {\n observer.complete?.();\n }\n }, delay);\n\n return () => {\n cancelDelay();\n cancelRepeat?.();\n };\n });\n}\n\n/** A `Flux` that completes immediately without emitting any values. */\nexport function empty<T = never>(): Flux<T> {\n return flux<T>((observer) => {\n observer.complete?.();\n });\n}\n\n/** A `Flux` that never emits, errors, or completes. */\nexport function never<T = never>(): Flux<T> {\n return flux<T>(() => {});\n}\n\n/** A `Flux` that immediately errors with the given value. */\nexport function throwError<T = never>(errorFactory: (() => unknown) | unknown): Flux<T> {\n return flux<T>((observer) => {\n const err = typeof errorFactory === 'function' ? (errorFactory as () => unknown)() : errorFactory;\n\n observer.error?.(err);\n });\n}\n\n/**\n * Creates a `Flux` from a DOM `EventTarget` or Node.js `EventEmitter`-like\n * object, emitting each time the named event fires.\n *\n * @example\n * fromEvent(document, 'click').subscribe((e) => console.log(e));\n */\nexport function fromEvent<T = Event>(\n target: {\n addEventListener(type: string, listener: (event: T) => void): void;\n removeEventListener(type: string, listener: (event: T) => void): void;\n },\n eventName: string,\n): Flux<T> {\n return flux<T>((observer) => {\n const handler = (event: T): void => observer.next(event);\n\n target.addEventListener(eventName, handler);\n\n return () => target.removeEventListener(eventName, handler);\n });\n}\n","/**\n * Run `fn`; if it throws synchronously, route the error to `onError` instead of letting\n * it escape uncaught. Used by operators to guard user-supplied callbacks (`map`'s `fn`,\n * `filter`'s `predicate`, etc.) so a throw becomes a normal `observer.error()` call\n * instead of an unhandled exception.\n * @internal\n */\nexport function guard(fn: () => void, onError?: (err: unknown) => void): void {\n try {\n fn();\n } catch (err) {\n onError?.(err);\n }\n}\n","import type { Flux, Operator, Scheduler, Unsubscribe } from '../types';\n\nimport { guard } from '../_safe';\nimport { DEFAULT_SCHEDULER } from '../_scheduler';\nimport { flux } from '../core';\n\n/**\n * Emit only the first `count` values, then complete.\n *\n * @example\n * interval(100).pipe(take(3)); // emits 0, 1, 2 then completes\n */\nexport function take<T>(count: number): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n if (count <= 0) {\n observer.complete?.();\n\n return;\n }\n\n let seen = 0;\n let unsub: Unsubscribe = () => {};\n\n unsub = source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n observer.next(v);\n seen++;\n\n if (seen >= count) {\n observer.complete?.();\n unsub();\n }\n },\n });\n\n return unsub;\n });\n}\n\n/** Skip the first `count` values, then emit the rest. */\nexport function skip<T>(count: number): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let skipped = 0;\n\n return source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n if (skipped < count) {\n skipped++;\n } else {\n observer.next(v);\n }\n },\n });\n });\n}\n\n/**\n * Complete when either `notifier` emits its first value or an `AbortSignal` aborts.\n *\n * @example\n * source$.pipe(takeUntil(stop$));\n * source$.pipe(takeUntil(abortController.signal));\n */\nexport function takeUntil<T>(notifier: AbortSignal | Flux<unknown>): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let done = false;\n\n const finish = (): void => {\n if (done) return;\n\n done = true;\n observer.complete?.();\n notifierUnsub();\n sourceUnsub?.();\n };\n\n let notifierUnsub: () => void;\n\n if (notifier instanceof AbortSignal) {\n if (notifier.aborted) {\n observer.complete?.();\n\n return;\n }\n\n notifier.addEventListener('abort', finish, { once: true });\n notifierUnsub = () => notifier.removeEventListener('abort', finish);\n } else {\n notifierUnsub = notifier.subscribe({ next: finish });\n }\n\n const sourceUnsub = source.subscribe({\n complete() {\n done = true;\n notifierUnsub();\n observer.complete?.();\n },\n error(err) {\n done = true;\n notifierUnsub();\n observer.error?.(err);\n },\n next: observer.next,\n });\n\n return () => {\n notifierUnsub();\n sourceUnsub();\n };\n });\n}\n\n/**\n * Emit values while `predicate` is truthy. Complete when it returns `false`.\n *\n * @example\n * of(1, 2, 3, 4).pipe(takeWhile((n) => n < 3)); // emits 1, 2\n */\nexport function takeWhile<T>(predicate: (value: T) => boolean): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let unsub: Unsubscribe = () => {};\n\n unsub = source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n guard(() => {\n if (predicate(v)) {\n observer.next(v);\n } else {\n observer.complete?.();\n unsub();\n }\n }, observer.error);\n },\n });\n\n return unsub;\n });\n}\n\n/**\n * Emit the last value after `ms` milliseconds of silence.\n * Resets the timer on every source emission.\n *\n * **Note:** if the source completes while a value is pending (timer not yet fired),\n * the pending value is dropped. Only the completion signal is forwarded.\n *\n * @example\n * fromEvent(input, 'input').pipe(debounce(300)); // wait 300ms after last keystroke\n */\nexport function debounce<T>(ms: number, scheduler: Scheduler = DEFAULT_SCHEDULER): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let cancelTimer: (() => void) | undefined;\n\n const unsub = source.subscribe({\n complete() {\n cancelTimer?.();\n observer.complete?.();\n },\n error(err) {\n cancelTimer?.();\n observer.error?.(err);\n },\n next(v) {\n cancelTimer?.();\n cancelTimer = scheduler.delay(() => observer.next(v), ms);\n },\n });\n\n return () => {\n cancelTimer?.();\n unsub();\n };\n });\n}\n\n/**\n * Emit at most once per `ms` milliseconds. Leading edge by default.\n * Pass a custom `clock` function (default: `Date.now`) to control time in tests.\n *\n * @example\n * fromEvent(window, 'scroll').pipe(throttle(100));\n */\nexport function throttle<T>(ms: number, clock: () => number = Date.now): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let lastEmit = -Infinity;\n\n return source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n const now = clock();\n\n if (now - lastEmit >= ms) {\n lastEmit = now;\n observer.next(v);\n }\n },\n });\n });\n}\n\n/**\n * When `notifier` emits, emit the latest value from `source` (if any).\n * Useful for polling-like patterns.\n *\n * @example\n * source$.pipe(sample(interval(1000))); // emit latest value every 1s\n */\nexport function sample<T>(notifier: Flux<unknown>): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let latest: T;\n let hasValue = false;\n\n const sourceUnsub = source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n latest = v;\n hasValue = true;\n },\n });\n\n const notifierUnsub = notifier.subscribe({\n next() {\n if (hasValue) observer.next(latest);\n },\n });\n\n return () => {\n sourceUnsub();\n notifierUnsub();\n };\n });\n}\n\n/** Emit only the first value, then complete. Equivalent to `take(1)`. */\nexport function first<T>(): Operator<T, T> {\n return take(1);\n}\n\n/**\n * Emit only the last value, collected when source completes.\n *\n * @example\n * of(1, 2, 3).pipe(last()); // emits 3\n */\nexport function last<T>(): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let latest: T;\n let hasValue = false;\n\n return source.subscribe({\n complete() {\n if (hasValue) observer.next(latest);\n\n observer.complete?.();\n },\n error: observer.error,\n next(v) {\n latest = v;\n hasValue = true;\n },\n });\n });\n}\n","/**\n * Coerces `n` to a positive integer >= 1. Non-finite values (`NaN`, `Infinity`,\n * `-Infinity`) are treated as invalid input — same as any other out-of-range\n * number — and fall back to `1` rather than silently propagating a value that\n * would defeat every downstream bounds check (`length >= NaN` and `length >= Infinity`\n * are never true, which would otherwise make a \"capped\" buffer grow unbounded).\n * @internal\n */\nexport function clampPositiveInt(n: number): { clamped: boolean; value: number } {\n const value = Number.isFinite(n) ? Math.max(1, Math.floor(n)) : 1;\n\n return { clamped: value !== n, value };\n}\n","import type { Flux, Operator, Unsubscribe } from '../types';\n\nimport { warn } from '../_dev';\nimport { clampPositiveInt } from '../_numeric';\nimport { guard } from '../_safe';\nimport { flux } from '../core';\n\n/** Transform each emitted value through `fn`. */\nexport function map<A, B>(fn: (value: A) => B): Operator<A, B> {\n return (source) =>\n flux<B>((observer) =>\n source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n guard(() => observer.next(fn(v)), observer.error);\n },\n }),\n );\n}\n\n/** Emit only values for which `predicate` returns `true`. */\nexport function filter<T>(predicate: (value: T) => boolean): Operator<T, T> {\n return (source) =>\n flux<T>((observer) =>\n source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n guard(() => {\n if (predicate(v)) observer.next(v);\n }, observer.error);\n },\n }),\n );\n}\n\n/**\n * Accumulate state with a reducer. Emits the accumulated value after each source emission.\n *\n * @example\n * of(1, 2, 3).pipe(scan((acc, n) => acc + n, 0)); // emits 1, 3, 6\n */\nexport function scan<T, A>(reducer: (acc: A, value: T) => A, seed: A): Operator<T, A> {\n return (source) =>\n flux<A>((observer) => {\n let acc = seed;\n\n return source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n guard(() => {\n acc = reducer(acc, v);\n observer.next(acc);\n }, observer.error);\n },\n });\n });\n}\n\n/**\n * Map each source value to an inner `Flux`, cancelling the previous inner on each new emission.\n * Useful for search-as-you-type, navigation, etc.\n */\nexport function switchMap<A, B>(fn: (value: A) => Flux<B>): Operator<A, B> {\n return (source) =>\n flux<B>((observer) => {\n let innerUnsub: Unsubscribe | undefined;\n let outerDone = false;\n\n const checkDone = (): void => {\n if (outerDone && !innerUnsub) observer.complete?.();\n };\n\n const outerUnsub = source.subscribe({\n complete() {\n outerDone = true;\n checkDone();\n },\n error: observer.error,\n next(v) {\n guard(() => {\n innerUnsub?.();\n innerUnsub = fn(v).subscribe({\n complete() {\n innerUnsub = undefined;\n checkDone();\n },\n error: observer.error,\n next: observer.next,\n });\n }, observer.error);\n },\n });\n\n return () => {\n outerUnsub();\n innerUnsub?.();\n };\n });\n}\n\n/**\n * Map each source value to an inner `Flux`, merging all inner streams concurrently.\n * All inner subscriptions run simultaneously.\n */\nexport function flatMap<A, B>(fn: (value: A) => Flux<B>): Operator<A, B> {\n return (source) =>\n flux<B>((observer) => {\n let outerDone = false;\n let activeInner = 0;\n const innerUnsubs = new Set<Unsubscribe>();\n\n const checkDone = (): void => {\n if (outerDone && activeInner === 0) observer.complete?.();\n };\n\n const outerUnsub = source.subscribe({\n complete() {\n outerDone = true;\n checkDone();\n },\n error: observer.error,\n next(v) {\n guard(() => {\n activeInner++;\n\n let syncDone = false;\n // Init to NOOP to avoid TDZ if complete fires synchronously during subscribe().\n let unsub: Unsubscribe = () => {};\n\n const sub = fn(v).subscribe({\n complete() {\n syncDone = true;\n activeInner--;\n innerUnsubs.delete(unsub);\n checkDone();\n },\n error: observer.error,\n next: observer.next,\n });\n\n unsub = sub;\n\n if (!syncDone) innerUnsubs.add(unsub);\n }, observer.error);\n },\n });\n\n return () => {\n outerUnsub();\n for (const u of innerUnsubs) u();\n };\n });\n}\n\n/**\n * Map each source value to an inner `Flux`, subscribing to each one only after\n * the previous inner completes (sequential, queued).\n * Pass `maxBuffer` to cap queued items; excess items are dropped silently.\n */\nexport function concatMap<A, B>(fn: (value: A) => Flux<B>, maxBuffer = Infinity): Operator<A, B> {\n return (source) =>\n flux<B>((observer) => {\n let outerDone = false;\n const queue: A[] = [];\n let processing = false;\n let currentUnsub: Unsubscribe | undefined;\n\n function processNext(): void {\n if (queue.length === 0) {\n processing = false;\n\n if (outerDone) observer.complete?.();\n\n return;\n }\n\n processing = true;\n\n const item = queue.shift()!;\n\n guard(() => {\n currentUnsub = fn(item).subscribe({\n complete() {\n currentUnsub = undefined;\n\n processNext();\n },\n error: observer.error,\n next: observer.next,\n });\n }, observer.error);\n }\n\n const outerUnsub = source.subscribe({\n complete() {\n outerDone = true;\n\n if (!processing) observer.complete?.();\n },\n error: observer.error,\n next(v) {\n if (queue.length < maxBuffer) {\n queue.push(v);\n\n if (!processing) processNext();\n }\n },\n });\n\n return () => {\n outerUnsub();\n currentUnsub?.();\n queue.length = 0;\n };\n });\n}\n\n/**\n * Suppress consecutive duplicate values.\n * Uses `Object.is` by default; provide a custom `comparator` for deep equality.\n *\n * @example\n * of(1, 1, 2, 2, 3).pipe(distinctUntilChanged()); // emits 1, 2, 3\n */\nexport function distinctUntilChanged<T>(comparator?: (a: T, b: T) => boolean): Operator<T, T> {\n const eq = comparator ?? Object.is;\n\n return (source) =>\n flux<T>((observer) => {\n let hasPrev = false;\n let prev: T;\n\n return source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n guard(() => {\n if (!hasPrev || !eq(prev, v)) {\n hasPrev = true;\n prev = v;\n observer.next(v);\n }\n }, observer.error);\n },\n });\n });\n}\n\n/**\n * Prepend one or more static values before the source's first emission.\n *\n * @example\n * of(2, 3).pipe(startWith(0, 1)).subscribe(console.log); // 0, 1, 2, 3\n */\nexport function startWith<T>(...values: T[]): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n for (const v of values) observer.next(v);\n\n return source.subscribe(observer);\n });\n}\n\n/**\n * Collect source emissions into fixed-size arrays, emitting each batch when full.\n * A partial batch at the end of the source is flushed on completion.\n *\n * @param size - Number of emissions per batch.\n * @param every - Start a new batch every `every` emissions (default: `size`, non-overlapping).\n *\n * @example\n * of(1, 2, 3, 4, 5, 6).pipe(bufferCount(2)).subscribe(console.log);\n * // [1, 2], [3, 4], [5, 6]\n */\nexport function bufferCount<T>(size: number, every?: number): Operator<T, T[]> {\n const { clamped: sizeClamped, value: safeSize } = clampPositiveInt(size);\n const { clamped: everyClamped, value: step } = clampPositiveInt(every ?? safeSize);\n\n if (sizeClamped) {\n warn(`bufferCount: size must be a finite integer >= 1, got ${size} — clamped to ${safeSize}`);\n }\n\n if (every !== undefined && everyClamped) {\n warn(`bufferCount: every must be a finite integer >= 1, got ${every} — clamped to ${step}`);\n }\n\n return (source) =>\n flux<T[]>((observer) => {\n const buffers: T[][] = [];\n let count = 0;\n\n return source.subscribe({\n complete() {\n for (const buf of buffers) {\n if (buf.length > 0) observer.next(buf);\n }\n\n observer.complete?.();\n },\n error: observer.error,\n next(v) {\n if (count % step === 0) buffers.push([]);\n\n for (const buf of buffers) buf.push(v);\n\n let i = 0;\n\n while (i < buffers.length) {\n if (buffers[i]!.length >= safeSize) {\n observer.next(buffers[i]!);\n buffers.splice(i, 1);\n } else {\n i++;\n }\n }\n\n count++;\n },\n });\n });\n}\n\n/**\n * Emit the previous and current value as a `[prev, curr]` tuple.\n * No emission occurs until the second source value arrives.\n *\n * @example\n * of(1, 2, 3).pipe(pairwise()).subscribe(console.log); // [1, 2], [2, 3]\n */\nexport function pairwise<T>(): Operator<T, [T, T]> {\n return (source) =>\n flux<[T, T]>((observer) => {\n let hasPrev = false;\n let prev: T;\n\n return source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n if (hasPrev) observer.next([prev, v]);\n\n hasPrev = true;\n prev = v;\n },\n });\n });\n}\n","import type { Flux, Operator, Scheduler, Unsubscribe } from '../types';\n\nimport { error, warn } from '../_dev';\nimport { clampPositiveInt } from '../_numeric';\nimport { guard } from '../_safe';\nimport { DEFAULT_SCHEDULER } from '../_scheduler';\nimport { flux } from '../core';\nimport { FluxTimeoutError } from '../errors';\n\ntype SharedEntry<T> = { complete?: () => void; error?: (e: unknown) => void; next: (v: T) => void };\n\nfunction makeMulticast<T>(source: Flux<T>, maxBuffer: number): Flux<T> {\n const subscribers = new Set<SharedEntry<T>>();\n const buffer: T[] = [];\n let sourceUnsub: Unsubscribe | undefined;\n let sourceDone = false;\n let sourceError: unknown;\n let hasError = false;\n\n return flux<T>((observer) => {\n if (hasError) {\n observer.error?.(sourceError);\n\n return;\n }\n\n for (const v of buffer) observer.next(v);\n\n if (sourceDone) {\n observer.complete?.();\n\n return;\n }\n\n const entry: SharedEntry<T> = {\n complete: observer.complete,\n error: observer.error,\n next: observer.next,\n };\n\n subscribers.add(entry);\n\n if (subscribers.size === 1) {\n sourceUnsub = source.subscribe({\n complete() {\n sourceDone = true;\n for (const s of [...subscribers]) s.complete?.();\n subscribers.clear();\n },\n error(err) {\n hasError = true;\n sourceError = err;\n for (const s of [...subscribers]) s.error?.(err);\n subscribers.clear();\n },\n next(v) {\n if (maxBuffer > 0) {\n if (buffer.length >= maxBuffer) buffer.shift();\n\n buffer.push(v);\n }\n\n for (const s of [...subscribers]) s.next(v);\n },\n });\n }\n\n return () => {\n subscribers.delete(entry);\n\n if (subscribers.size === 0) {\n sourceUnsub?.();\n sourceUnsub = undefined;\n }\n };\n });\n}\n\n/**\n * Multicast a cold `Flux` to multiple subscribers. The first subscriber starts\n * the source; the last to unsubscribe stops it.\n *\n * @example\n * const hot$ = cold$.pipe(share()); // one source, many subscribers\n */\nexport function share<T>(): Operator<T, T> {\n return (source) => makeMulticast(source, 0);\n}\n\n/**\n * Multicast a cold `Flux` and replay the last `bufferSize` values (default: 1)\n * to any new subscriber.\n *\n * @example\n * const hot$ = cold$.pipe(shareReplay(1)); // last value replayed to late subs\n */\nexport function shareReplay<T>(bufferSize = 1): Operator<T, T> {\n const { clamped, value: safeSize } = clampPositiveInt(bufferSize);\n\n if (clamped) {\n warn(`shareReplay: bufferSize must be a finite integer >= 1, got ${bufferSize} — clamped to ${safeSize}`);\n }\n\n return (source) => makeMulticast(source, safeSize);\n}\n\n/** Run a side effect on each emission without modifying the value. */\nexport function tap<T>(fn: (value: T) => void): Operator<T, T> {\n return (source) =>\n flux<T>((observer) =>\n source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n guard(() => {\n fn(v);\n observer.next(v);\n }, observer.error);\n },\n }),\n );\n}\n\n/** Delay each emission by `ms` milliseconds. Pass a custom `scheduler` to control time in tests. */\nexport function delay<T>(ms: number, scheduler: Scheduler = DEFAULT_SCHEDULER): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n const cancels: Array<() => void> = [];\n\n const unsub = source.subscribe({\n complete() {\n cancels.push(scheduler.delay(() => observer.complete?.(), ms));\n },\n error: observer.error,\n next(v) {\n cancels.push(scheduler.delay(() => observer.next(v), ms));\n },\n });\n\n return () => {\n unsub();\n for (const cancel of cancels) cancel();\n };\n });\n}\n\n/**\n * Error if no value is emitted within `ms` milliseconds since the last emission\n * (or since subscription, for the first value). The timer resets on each emission —\n * this is an inactivity timeout, not a time-to-first-value or total-duration timeout.\n * Pass a custom `scheduler` to control time in tests.\n *\n * @example\n * source$.pipe(timeout(5000)); // throws FluxTimeoutError after 5s of silence\n */\nexport function timeout<T>(ms: number, scheduler: Scheduler = DEFAULT_SCHEDULER): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let cancelTimer!: () => void;\n\n const startTimer = (): void => {\n cancelTimer = scheduler.delay(() => {\n observer.error?.(new FluxTimeoutError(ms));\n }, ms);\n };\n\n startTimer();\n\n const unsub = source.subscribe({\n complete() {\n cancelTimer();\n observer.complete?.();\n },\n error(err) {\n cancelTimer();\n observer.error?.(err);\n },\n next(v) {\n cancelTimer();\n startTimer();\n observer.next(v);\n },\n });\n\n return () => {\n cancelTimer();\n unsub();\n };\n });\n}\n\n/**\n * Recover from an error by returning a new `Flux` to continue with.\n *\n * @example\n * source$.pipe(catchError((err) => of('fallback')));\n */\nexport function catchError<T>(handler: (err: unknown) => Flux<T>): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let fallbackUnsub: Unsubscribe | undefined;\n\n const sourceUnsub = source.subscribe({\n complete: observer.complete,\n error(err) {\n guard(() => {\n fallbackUnsub = handler(err).subscribe({\n complete: observer.complete,\n error: observer.error,\n next: observer.next,\n });\n }, observer.error);\n },\n next: observer.next,\n });\n\n return () => {\n sourceUnsub();\n fallbackUnsub?.();\n };\n });\n}\n\n/**\n * Re-subscribe to the source up to `count` times on error.\n * Pass `delayMs` as a fixed number or `(attempt) => number` function for backoff.\n * Pass a custom `scheduler` to control time in tests.\n *\n * @example\n * fetchStream$.pipe(retry(3));\n * fetchStream$.pipe(retry(3, (n) => Math.min(1000 * 2 ** n, 30_000))); // exponential backoff\n */\nexport function retry<T>(\n count: number,\n delayMs?: number | ((attempt: number) => number),\n scheduler: Scheduler = DEFAULT_SCHEDULER,\n): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let attempts = 0;\n let currentUnsub: Unsubscribe | undefined;\n let cancelDelay: (() => void) | undefined;\n\n function attempt(): void {\n currentUnsub = source.subscribe({\n complete: observer.complete,\n error(err) {\n if (attempts < count) {\n const n = attempts++;\n\n if (delayMs !== undefined) {\n guard(() => {\n const ms = typeof delayMs === 'function' ? delayMs(n) : delayMs;\n\n cancelDelay = scheduler.delay(attempt, Math.max(0, ms));\n }, observer.error);\n } else {\n attempt();\n }\n } else {\n observer.error?.(err);\n }\n },\n next: observer.next,\n });\n }\n\n attempt();\n\n return () => {\n cancelDelay?.();\n currentUnsub?.();\n };\n });\n}\n\n/**\n * Run `fn` when the stream ends — whether by completion, error, or unsubscription.\n *\n * @example\n * source$.pipe(finalize(() => console.log('stream ended')));\n */\nexport function finalize<T>(fn: () => void): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n let called = false;\n\n const call = (): void => {\n if (called) return;\n\n called = true;\n\n try {\n fn();\n } catch (err) {\n error('finalize: cleanup callback threw', err);\n }\n };\n\n const unsub = source.subscribe({\n complete() {\n call();\n observer.complete?.();\n },\n error(err) {\n call();\n observer.error?.(err);\n },\n next: observer.next,\n });\n\n return () => {\n call();\n unsub();\n };\n });\n}\n\n/** Reject value used when `signal` aborts a pending `toPromise()`/`toArray()`. */\nfunction abortError(signal: AbortSignal): unknown {\n return signal.reason ?? new DOMException('Aborted', 'AbortError');\n}\n\n/**\n * Convert a `Flux` to a `Promise` that resolves with the last emitted value\n * when the source completes, or rejects on error.\n * Pass `signal` to unsubscribe and reject early if the caller loses interest\n * before the source completes (e.g. a component unmounting).\n *\n * @example\n * const result = await toPromise(source$);\n * const cancellable = await toPromise(source$, controller.signal);\n */\nexport function toPromise<T>(source: Flux<T>, signal?: AbortSignal): Promise<T | undefined> {\n return new Promise<T | undefined>((resolve, reject) => {\n if (signal?.aborted) {\n reject(abortError(signal));\n\n return;\n }\n\n let last: T | undefined;\n let unsub: Unsubscribe = () => {};\n\n const onAbort = (): void => {\n unsub();\n reject(abortError(signal!));\n };\n\n // Add the listener before subscribing — the source may complete/error synchronously\n // during subscribe(), and the complete/error handlers below need it already registered\n // to remove it (otherwise it leaks on `signal` until the signal itself is GC'd).\n signal?.addEventListener('abort', onAbort, { once: true });\n\n unsub = source.subscribe({\n complete() {\n signal?.removeEventListener('abort', onAbort);\n resolve(last);\n },\n error(err) {\n signal?.removeEventListener('abort', onAbort);\n reject(err);\n },\n next(v) {\n last = v;\n },\n });\n });\n}\n\n/**\n * Collect all emitted values into an array resolved when the source completes.\n * Pass `signal` to stop early and resolve with the values collected so far\n * (rather than reject) if the caller loses interest before completion.\n *\n * @example\n * const all = await toArray(of(1, 2, 3));\n * const partial = await toArray(source$, controller.signal);\n */\nexport function toArray<T>(source: Flux<T>, signal?: AbortSignal): Promise<T[]> {\n return new Promise<T[]>((resolve, reject) => {\n const results: T[] = [];\n\n if (signal?.aborted) {\n resolve(results);\n\n return;\n }\n\n let unsub: Unsubscribe = () => {};\n\n const onAbort = (): void => {\n unsub();\n resolve(results);\n };\n\n // See toPromise() above for why the listener is added before subscribing.\n signal?.addEventListener('abort', onAbort, { once: true });\n\n unsub = source.subscribe({\n complete() {\n signal?.removeEventListener('abort', onAbort);\n resolve(results);\n },\n error(err) {\n signal?.removeEventListener('abort', onAbort);\n reject(err);\n },\n next(v) {\n results.push(v);\n },\n });\n });\n}\n\n/**\n * Compose multiple operators into a single reusable operator.\n * Provides full type safety at any pipeline depth — use instead of\n * `pipe()` overloads when chaining more than 4 operators.\n *\n * @example\n * const pipeline = flow(\n * filter((n) => n % 2 === 0),\n * map((n) => n * 10),\n * take(5),\n * );\n * source$.pipe(pipeline).subscribe(console.log);\n */\nexport function flow<A, B>(op1: Operator<A, B>): Operator<A, B>;\nexport function flow<A, B, C>(op1: Operator<A, B>, op2: Operator<B, C>): Operator<A, C>;\nexport function flow<A, B, C, D>(op1: Operator<A, B>, op2: Operator<B, C>, op3: Operator<C, D>): Operator<A, D>;\nexport function flow<A, B, C, D, E>(\n op1: Operator<A, B>,\n op2: Operator<B, C>,\n op3: Operator<C, D>,\n op4: Operator<D, E>,\n): Operator<A, E>;\nexport function flow<A, B, C, D, E, F>(\n op1: Operator<A, B>,\n op2: Operator<B, C>,\n op3: Operator<C, D>,\n op4: Operator<D, E>,\n op5: Operator<E, F>,\n): Operator<A, F>;\nexport function flow<A, B, C, D, E, F, G>(\n op1: Operator<A, B>,\n op2: Operator<B, C>,\n op3: Operator<C, D>,\n op4: Operator<D, E>,\n op5: Operator<E, F>,\n op6: Operator<F, G>,\n): Operator<A, G>;\nexport function flow<A, B, C, D, E, F, G, H>(\n op1: Operator<A, B>,\n op2: Operator<B, C>,\n op3: Operator<C, D>,\n op4: Operator<D, E>,\n op5: Operator<E, F>,\n op6: Operator<F, G>,\n op7: Operator<G, H>,\n): Operator<A, H>;\nexport function flow<A, B, C, D, E, F, G, H, I>(\n op1: Operator<A, B>,\n op2: Operator<B, C>,\n op3: Operator<C, D>,\n op4: Operator<D, E>,\n op5: Operator<E, F>,\n op6: Operator<F, G>,\n op7: Operator<G, H>,\n op8: Operator<H, I>,\n): Operator<A, I>;\nexport function flow(...ops: Operator[]): Operator {\n return (source: Flux<unknown>) => ops.reduce((f: Flux<unknown>, op) => op(f), source);\n}\n","import type { Flux, Observer, Unsubscribe } from './types';\n\nimport { error, warn } from './_dev';\nimport { makeAsyncIterator } from './_iterator';\nimport { clampPositiveInt } from './_numeric';\nimport { makePipe } from './_pipe';\n\nconst NOOP: Unsubscribe = () => {};\n\n/**\n * A `Subject` is both a `Flux` and a manual emission handle.\n * Calling `emit()` pushes a value to all active subscribers.\n *\n * A Subject is hot — all subscribers share the same emission sequence.\n * Subscribers that subscribe after an emission will NOT receive past values.\n * Use `BehaviorSubject` to replay the latest value to late subscribers.\n */\nexport interface Subject<T> extends Flux<T> {\n /** `true` after `dispose()` or `complete()` is called. */\n readonly disposed: boolean;\n /** Emit a complete signal to all subscribers and dispose the subject. */\n complete(): void;\n /** Push a value to all active subscribers. */\n emit(value: T): void;\n /** Push an error to all active subscribers and dispose the subject. */\n fail(err: unknown): void;\n}\n\n/**\n * A `BehaviorSubject` is a `Subject` that replays the latest value to\n * any new subscriber immediately on subscription.\n */\nexport interface BehaviorSubject<T> extends Subject<T> {\n /** The current (latest emitted) value. */\n readonly value: T;\n}\n\n/**\n * A `ReplaySubject` is a `Subject` that replays the last N emitted values\n * to any new subscriber immediately on subscription.\n */\nexport interface ReplaySubject<T> extends Subject<T> {\n /** Snapshot of the current replay buffer (up to `bufferSize` entries). */\n readonly buffer: readonly T[];\n}\n\n// ── Shared internals ──────────────────────────────────────────────────────────\n\ninterface SubjectCore<T> {\n ac: AbortController;\n broadcast(fn: (obs: Observer<T>) => void): void;\n doSubscribe(observerOrNext: Observer<T> | ((value: T) => void), signal?: AbortSignal): Unsubscribe;\n subscribers: Set<Observer<T>>;\n}\n\nfunction makeCore<T>(): SubjectCore<T> {\n const ac = new AbortController();\n const subscribers = new Set<Observer<T>>();\n\n function broadcast(fn: (obs: Observer<T>) => void): void {\n for (const obs of [...subscribers]) {\n try {\n fn(obs);\n } catch (err) {\n error('Subscriber threw during broadcast', err);\n }\n }\n }\n\n function doSubscribe(observerOrNext: Observer<T> | ((value: T) => void), signal?: AbortSignal): Unsubscribe {\n const observer: Observer<T> = typeof observerOrNext === 'function' ? { next: observerOrNext } : observerOrNext;\n\n if (ac.signal.aborted || signal?.aborted) {\n try {\n observer.complete?.();\n } catch {\n /* empty */\n }\n\n return NOOP;\n }\n\n subscribers.add(observer);\n\n const unsub = (): void => {\n subscribers.delete(observer);\n\n if (signal) signal.removeEventListener('abort', unsub);\n };\n\n if (signal) signal.addEventListener('abort', unsub, { once: true });\n\n return unsub;\n }\n\n return { ac, broadcast, doSubscribe, subscribers };\n}\n\n// Safely emit initial replay values; re-check disposed after sync replay.\nfunction replaySubscribe<T>(\n core: SubjectCore<T>,\n replay: () => void,\n observerOrNext: Observer<T> | ((value: T) => void),\n signal?: AbortSignal,\n): Unsubscribe {\n const observer: Observer<T> = typeof observerOrNext === 'function' ? { next: observerOrNext } : observerOrNext;\n\n if (core.ac.signal.aborted || signal?.aborted) {\n try {\n observer.complete?.();\n } catch {\n /* empty */\n }\n\n return NOOP;\n }\n\n replay();\n\n // Re-check: the synchronous replay may have triggered a dispose.\n if (core.ac.signal.aborted) {\n try {\n observer.complete?.();\n } catch {\n /* empty */\n }\n\n return NOOP;\n }\n\n return core.doSubscribe(observer, signal);\n}\n\n/**\n * Shared `dispose()` implementation for every `Subject` variant: aborts the core,\n * notifies all active subscribers with `complete()`, and clears the subscriber set.\n * Reused instead of being copy-pasted per factory.\n * @internal\n */\nfunction makeDispose<T>(core: SubjectCore<T>): () => void {\n return () => {\n if (core.ac.signal.aborted) return;\n\n core.ac.abort();\n core.broadcast((obs) => obs.complete?.());\n core.subscribers.clear();\n };\n}\n\n/**\n * Shared `fail()` implementation for every `Subject` variant: aborts the core,\n * notifies all active subscribers with `error()`, and clears the subscriber set.\n * Reused instead of being copy-pasted per factory.\n * @internal\n */\nfunction makeFail<T>(core: SubjectCore<T>): (err: unknown) => void {\n return (err) => {\n if (core.ac.signal.aborted) return;\n\n core.ac.abort();\n core.broadcast((obs) => obs.error?.(err));\n core.subscribers.clear();\n };\n}\n\n// ── createSubject ─────────────────────────────────────────────────────────────\n\n/**\n * Creates a new `Subject<T>`.\n *\n * @example\n * const events = createSubject<string>();\n * events.subscribe((s) => console.log(s));\n * events.emit('hello');\n * events.dispose();\n */\nexport function createSubject<T>(): Subject<T> {\n const core = makeCore<T>();\n const dispose = makeDispose(core);\n const fail = makeFail(core);\n\n const subject: Subject<T> = {\n complete: dispose,\n\n get disposalSignal(): AbortSignal {\n return core.ac.signal;\n },\n\n dispose,\n\n get disposed(): boolean {\n return core.ac.signal.aborted;\n },\n\n emit(value: T): void {\n if (core.ac.signal.aborted) return;\n\n core.broadcast((obs) => obs.next(value));\n },\n\n fail,\n\n pipe: makePipe(() => subject),\n\n subscribe(observerOrNext, signal) {\n return core.doSubscribe(observerOrNext, signal);\n },\n\n [Symbol.asyncIterator](): AsyncIterableIterator<T> {\n return makeAsyncIterator<T>((obs) => core.doSubscribe(obs));\n },\n\n [Symbol.dispose](): void {\n dispose();\n },\n };\n\n return subject;\n}\n\n// ── createBehaviorSubject ─────────────────────────────────────────────────────\n\n/**\n * Creates a new `BehaviorSubject<T>` with an initial value.\n * Late subscribers immediately receive the current value on subscribe.\n *\n * @example\n * const count = createBehaviorSubject(0);\n * count.subscribe((n) => console.log(n)); // logs 0 immediately\n * count.emit(1); // logs 1\n */\nexport function createBehaviorSubject<T>(initial: T): BehaviorSubject<T> {\n const core = makeCore<T>();\n const dispose = makeDispose(core);\n const fail = makeFail(core);\n let current = initial;\n\n const subject: BehaviorSubject<T> = {\n complete: dispose,\n\n get disposalSignal(): AbortSignal {\n return core.ac.signal;\n },\n\n dispose,\n\n get disposed(): boolean {\n return core.ac.signal.aborted;\n },\n\n emit(value: T): void {\n if (core.ac.signal.aborted) return;\n\n current = value;\n core.broadcast((obs) => obs.next(value));\n },\n\n fail,\n\n pipe: makePipe(() => subject),\n\n subscribe(observerOrNext, signal) {\n return replaySubscribe(\n core,\n () => {\n const observer: Observer<T> =\n typeof observerOrNext === 'function' ? { next: observerOrNext } : observerOrNext;\n\n try {\n observer.next(current);\n } catch (err) {\n error('BehaviorSubject: subscriber threw during initial replay', err);\n }\n },\n observerOrNext,\n signal,\n );\n },\n\n [Symbol.asyncIterator](): AsyncIterableIterator<T> {\n return makeAsyncIterator<T>((obs) =>\n replaySubscribe(\n core,\n () => {\n try {\n obs.next(current);\n } catch (err) {\n error('BehaviorSubject: subscriber threw during initial replay', err);\n }\n },\n obs,\n ),\n );\n },\n\n [Symbol.dispose](): void {\n dispose();\n },\n\n get value(): T {\n return current;\n },\n };\n\n return subject;\n}\n\n// ── createReplaySubject ───────────────────────────────────────────────────────\n\n/**\n * Creates a `ReplaySubject<T>` that buffers up to `bufferSize` values and\n * replays them in order to any new subscriber immediately on subscription.\n *\n * @example\n * const history = createReplaySubject<string>(3);\n * history.emit('a');\n * history.emit('b');\n * history.subscribe(console.log); // logs 'a', 'b' immediately\n */\nexport function createReplaySubject<T>(bufferSize: number): ReplaySubject<T> {\n const core = makeCore<T>();\n const dispose = makeDispose(core);\n const fail = makeFail(core);\n const { clamped, value: max } = clampPositiveInt(bufferSize);\n const buf: T[] = [];\n\n if (clamped) {\n warn(`createReplaySubject: bufferSize must be a finite integer >= 1, got ${bufferSize} — clamped to ${max}`);\n }\n\n const subject: ReplaySubject<T> = {\n get buffer(): readonly T[] {\n return buf;\n },\n\n complete: dispose,\n\n get disposalSignal(): AbortSignal {\n return core.ac.signal;\n },\n\n dispose,\n\n get disposed(): boolean {\n return core.ac.signal.aborted;\n },\n\n emit(value: T): void {\n if (core.ac.signal.aborted) return;\n\n if (buf.length >= max) buf.shift();\n\n buf.push(value);\n core.broadcast((obs) => obs.next(value));\n },\n\n fail,\n\n pipe: makePipe(() => subject),\n\n subscribe(observerOrNext, signal) {\n return replaySubscribe(\n core,\n () => {\n const observer: Observer<T> =\n typeof observerOrNext === 'function' ? { next: observerOrNext } : observerOrNext;\n\n for (const v of buf) {\n try {\n observer.next(v);\n } catch (err) {\n error('ReplaySubject: subscriber threw during replay', err);\n }\n }\n },\n observerOrNext,\n signal,\n );\n },\n\n [Symbol.asyncIterator](): AsyncIterableIterator<T> {\n return makeAsyncIterator<T>((obs) =>\n replaySubscribe(\n core,\n () => {\n for (const v of buf) {\n try {\n obs.next(v);\n } catch (err) {\n error('ReplaySubject: subscriber threw during replay', err);\n }\n }\n },\n obs,\n ),\n );\n },\n\n [Symbol.dispose](): void {\n dispose();\n },\n };\n\n return subject;\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ var Flux=(function(e,t){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var n=!globalThis.__FLUX_PROD__;function r(e){n&&console.warn(`[@vielzeug/flux] ${e}`)}function i(e,...t){n&&console.error(`[@vielzeug/flux] ${e}`,...t)}var a=1e4;function o(e){let t=[],n=[],i=!1,o=!1,s={done:!0,value:void 0},c=e({complete(){i=!0,l()},error(e){i=!0,n.length>0?(n.shift().reject(e),l()):t.push({__err:e})},next(e){let i={done:!1,value:e};if(n.length>0){n.shift().resolve(i);return}t.length>=a&&(t.shift(),o||(o=!0,r(`async iterator buffer exceeded ${a} queued values — dropping the oldest. The consumer is falling behind the producer; throttle the source or drain the iterator faster.`))),t.push(i)}});function l(){for(;n.length>0;)n.shift().resolve(s)}let u={next(){if(t.length>0){let e=t.shift();return`__err`in e?Promise.reject(e.__err):Promise.resolve(e)}return i?Promise.resolve(s):new Promise((e,t)=>n.push({reject:t,resolve:e}))},return(){return i||(c(),i=!0,l()),Promise.resolve(s)},[Symbol.asyncIterator](){return u}};return u}function s(e){return((...t)=>t.reduce((e,t)=>t(e),e()))}var c=()=>{};function l(e){let t=new AbortController,n={get disposalSignal(){return t.signal},dispose(){t.abort()},get disposed(){return t.signal.aborted},pipe:s(()=>n),subscribe(n,r){let i=typeof n==`function`?{next:n}:n;if(t.signal.aborted||r?.aborted){try{i.complete?.()}catch{}return c}let a=!0,o,s=()=>{t.signal.removeEventListener(`abort`,l),r&&r.removeEventListener(`abort`,d)},l=()=>{if(a){a=!1,s();try{i.complete?.()}catch{}try{o?.()}catch{}}},u={complete(){if(a){a=!1,s();try{i.complete?.()}finally{o?.()}}},error(e){if(a){a=!1,s();try{i.error?.(e)}finally{o?.()}}},next(e){a&&i.next(e)}};try{o=e(u)}catch(e){return a=!1,i.error?.(e),c}if(!a)return o?.(),c;function d(){a&&(a=!1,s(),o?.())}return t.signal.addEventListener(`abort`,l,{once:!0}),r&&r.addEventListener(`abort`,d,{once:!0}),()=>{d()}},[Symbol.asyncIterator](){return o(e=>n.subscribe(e))},[Symbol.dispose](){n.dispose()}};return n}function u(e,t){return l(n=>e.on(t,e=>n.next(e)))}function d(e){return l(t=>(t.next(e.peek()),e.subscribe(()=>{t.next(e.peek())})))}function ee(e,t){return l(n=>e.on(t,e=>n.next(e)))}function te(e,t){return n=>l(r=>n.subscribe({complete:r.complete,error:r.error,next(n){e.emit(t,...n===void 0?[]:[n]),r.next(n)}}))}function ne(e,t){return l(n=>e.on(t,e=>n.next(e)))}function f(e){return l(t=>{t.next(e.state.value);let n=e.onJoin(()=>{t.next(e.state.value)}),r=e.onLeave(()=>{t.next(e.state.value)});return()=>{n(),r()}})}function p(e){return l(t=>{t.next(e.value);let n=e.subscribe(()=>{t.next(e.value)});return()=>n.dispose()})}function m(e,n){let r=(0,t.signal)(n.initial),a=new AbortController,o=e.subscribe({error(e){i(`toSignal: source errored — signal value may be stale`,e)},next(e){r.value=e}},n.signal),s=()=>{a.signal.aborted||(a.abort(),o())};return{get disposalSignal(){return a.signal},dispose:s,get disposed(){return a.signal.aborted},get signal(){return r},[Symbol.dispose](){s()},get value(){return r.value}}}var h={delay(e,t){let n=setTimeout(e,t);return()=>clearTimeout(n)},repeat(e,t){let n=setInterval(e,t);return()=>clearInterval(n)}},g=class e extends Error{constructor(e,t){super(e,t),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}static is(t){return t instanceof e}},_=class extends g{ms;constructor(e){super(`Timeout after ${e}ms`),this.ms=e}};function re(...e){return l(t=>{if(e.length===0){t.complete?.();return}let n=0,r=[];for(let i of e)r.push(i.subscribe({complete(){n++,n===e.length&&t.complete?.()},error:t.error,next:t.next}));return()=>{for(let e of r)e()}})}function ie(...e){return l(t=>{let n=0,r;function i(){if(n>=e.length){t.complete?.();return}r=e[n++].subscribe({complete(){r=void 0,i()},error:t.error,next:t.next})}return i(),()=>r?.()})}function ae(...e){return l(t=>{if(e.length===0){t.complete?.();return}let n=Array(e.length),r=Array(e.length).fill(!1),i=0,a=[];return e.forEach((o,s)=>{a.push(o.subscribe({complete(){i++,i===e.length&&t.complete?.()},error:t.error,next(e){n[s]=e,r[s]=!0,r.every(Boolean)&&t.next([...n])}}))}),()=>{for(let e of a)e()}})}function oe(...e){return t=>l(n=>{let r=Array(e.length),i=Array(e.length).fill(!1),a=[];e.forEach((e,t)=>{a.push(e.subscribe({error:n.error,next(e){r[t]=e,i[t]=!0}}))});let o=t.subscribe({complete:n.complete,error:n.error,next(e){i.every(Boolean)&&n.next([e,...r])}});return()=>{o();for(let e of a)e()}})}function se(...e){return l(t=>{if(e.length===0){t.complete?.();return}let n=!1,r=[];for(let i of e)r.push(i.subscribe({complete(){if(!n){n=!0,t.complete?.();for(let e of r)e()}},error(e){if(!n){n=!0,t.error?.(e);for(let e of r)e()}},next(e){if(!n){n=!0,t.next(e);for(let e of r)e()}}}));return()=>{for(let e of r)e()}})}function v(...e){return l(t=>{if(e.length===0){t.complete?.();return}let n=e.map(()=>[]),r=Array(e.length).fill(!1),i=[],a=!1;function o(){if(!a){for(;n.every(e=>e.length>0);){let e=n.map(e=>e.shift());t.next(e)}if(n.some((e,t)=>r[t]&&e.length===0)){a=!0,t.complete?.();for(let e of i)e()}}}return e.forEach((e,s)=>{i.push(e.subscribe({complete(){r[s]=!0,o()},error(e){a=!0,t.error?.(e);for(let e of i)e()},next(e){n[s].push(e),o()}}))}),()=>{for(let e of i)e()}})}function y(...e){return l(t=>{if(e.length===0){t.complete?.();return}let n=Array(e.length),r=Array(e.length).fill(!1),i=[];return e.forEach((e,a)=>{let o,s=!1;i.push(e.subscribe({complete(){if(r[a]=!0,!s){t.complete?.();for(let e of i)e();return}n[a]=o,r.every(Boolean)&&(t.next([...n]),t.complete?.())},error:t.error,next(e){o=e,s=!0}}))}),()=>{for(let e of i)e()}})}function b(...e){return l(t=>{for(let n of e)t.next(n);t.complete?.()})}function x(e){if(e instanceof Promise)return l(t=>{let n=!1;return e.then(e=>{n||(t.next(e),t.complete?.())}).catch(e=>{n||t.error?.(e)}),()=>{n=!0}});if(Symbol.asyncIterator in e){let t=e;return l(e=>{let n=!1,r=t[Symbol.asyncIterator]();return(async()=>{try{for(;;){let{done:t,value:i}=await r.next();if(n||t)break;e.next(i)}n||e.complete?.()}catch(t){n||e.error?.(t)}})(),()=>{n=!0,r.return?.()}})}let t=e;return l(e=>{try{for(let n of t)e.next(n);e.complete?.()}catch(t){e.error?.(t)}})}function S(e,t=h){return l(n=>{let r=0;return t.repeat(()=>n.next(r++),e)})}function C(e,t,n=h){return l(r=>{let i=0,a,o=n.delay(()=>{r.next(i++),t===void 0?r.complete?.():a=n.repeat(()=>r.next(i++),t)},e);return()=>{o(),a?.()}})}function w(){return l(e=>{e.complete?.()})}function T(){return l(()=>{})}function E(e){return l(t=>{let n=typeof e==`function`?e():e;t.error?.(n)})}function D(e,t){return l(n=>{let r=e=>n.next(e);return e.addEventListener(t,r),()=>e.removeEventListener(t,r)})}function O(e,t){try{e()}catch(e){t?.(e)}}function k(e){return t=>l(n=>{if(e<=0){n.complete?.();return}let r=0,i=()=>{};return i=t.subscribe({complete:n.complete,error:n.error,next(t){n.next(t),r++,r>=e&&(n.complete?.(),i())}}),i})}function A(e){return t=>l(n=>{let r=0;return t.subscribe({complete:n.complete,error:n.error,next(t){r<e?r++:n.next(t)}})})}function j(e){return t=>l(n=>{let r=!1,i=()=>{r||(r=!0,n.complete?.(),a(),o?.())},a;if(e instanceof AbortSignal){if(e.aborted){n.complete?.();return}e.addEventListener(`abort`,i,{once:!0}),a=()=>e.removeEventListener(`abort`,i)}else a=e.subscribe({next:i});let o=t.subscribe({complete(){r=!0,a(),n.complete?.()},error(e){r=!0,a(),n.error?.(e)},next:n.next});return()=>{a(),o()}})}function M(e){return t=>l(n=>{let r=()=>{};return r=t.subscribe({complete:n.complete,error:n.error,next(t){O(()=>{e(t)?n.next(t):(n.complete?.(),r())},n.error)}}),r})}function N(e,t=h){return n=>l(r=>{let i,a=n.subscribe({complete(){i?.(),r.complete?.()},error(e){i?.(),r.error?.(e)},next(n){i?.(),i=t.delay(()=>r.next(n),e)}});return()=>{i?.(),a()}})}function P(e,t=Date.now){return n=>l(r=>{let i=-1/0;return n.subscribe({complete:r.complete,error:r.error,next(n){let a=t();a-i>=e&&(i=a,r.next(n))}})})}function F(e){return t=>l(n=>{let r,i=!1,a=t.subscribe({complete:n.complete,error:n.error,next(e){r=e,i=!0}}),o=e.subscribe({next(){i&&n.next(r)}});return()=>{a(),o()}})}function I(){return k(1)}function L(){return e=>l(t=>{let n,r=!1;return e.subscribe({complete(){r&&t.next(n),t.complete?.()},error:t.error,next(e){n=e,r=!0}})})}function R(e){let t=Number.isFinite(e)?Math.max(1,Math.floor(e)):1;return{clamped:t!==e,value:t}}function z(e){return t=>l(n=>t.subscribe({complete:n.complete,error:n.error,next(t){O(()=>n.next(e(t)),n.error)}}))}function B(e){return t=>l(n=>t.subscribe({complete:n.complete,error:n.error,next(t){O(()=>{e(t)&&n.next(t)},n.error)}}))}function V(e,t){return n=>l(r=>{let i=t;return n.subscribe({complete:r.complete,error:r.error,next(t){O(()=>{i=e(i,t),r.next(i)},r.error)}})})}function ce(e){return t=>l(n=>{let r,i=!1,a=()=>{i&&!r&&n.complete?.()},o=t.subscribe({complete(){i=!0,a()},error:n.error,next(t){O(()=>{r?.(),r=e(t).subscribe({complete(){r=void 0,a()},error:n.error,next:n.next})},n.error)}});return()=>{o(),r?.()}})}function H(e){return t=>l(n=>{let r=!1,i=0,a=new Set,o=()=>{r&&i===0&&n.complete?.()},s=t.subscribe({complete(){r=!0,o()},error:n.error,next(t){O(()=>{i++;let r=!1,s=()=>{};s=e(t).subscribe({complete(){r=!0,i--,a.delete(s),o()},error:n.error,next:n.next}),r||a.add(s)},n.error)}});return()=>{s();for(let e of a)e()}})}function U(e,t=1/0){return n=>l(r=>{let i=!1,a=[],o=!1,s;function c(){if(a.length===0){o=!1,i&&r.complete?.();return}o=!0;let t=a.shift();O(()=>{s=e(t).subscribe({complete(){s=void 0,c()},error:r.error,next:r.next})},r.error)}let l=n.subscribe({complete(){i=!0,o||r.complete?.()},error:r.error,next(e){a.length<t&&(a.push(e),o||c())}});return()=>{l(),s?.(),a.length=0}})}function W(e){let t=e??Object.is;return e=>l(n=>{let r=!1,i;return e.subscribe({complete:n.complete,error:n.error,next(e){O(()=>{(!r||!t(i,e))&&(r=!0,i=e,n.next(e))},n.error)}})})}function G(...e){return t=>l(n=>{for(let t of e)n.next(t);return t.subscribe(n)})}function le(e,t){let{clamped:n,value:i}=R(e),{clamped:a,value:o}=R(t??i);return n&&r(`bufferCount: size must be a finite integer >= 1, got ${e} — clamped to ${i}`),t!==void 0&&a&&r(`bufferCount: every must be a finite integer >= 1, got ${t} — clamped to ${o}`),e=>l(t=>{let n=[],r=0;return e.subscribe({complete(){for(let e of n)e.length>0&&t.next(e);t.complete?.()},error:t.error,next(e){r%o===0&&n.push([]);for(let t of n)t.push(e);let a=0;for(;a<n.length;)n[a].length>=i?(t.next(n[a]),n.splice(a,1)):a++;r++}})})}function ue(){return e=>l(t=>{let n=!1,r;return e.subscribe({complete:t.complete,error:t.error,next(e){n&&t.next([r,e]),n=!0,r=e}})})}function K(e,t){let n=new Set,r=[],i,a=!1,o,s=!1;return l(c=>{if(s){c.error?.(o);return}for(let e of r)c.next(e);if(a){c.complete?.();return}let l={complete:c.complete,error:c.error,next:c.next};return n.add(l),n.size===1&&(i=e.subscribe({complete(){a=!0;for(let e of[...n])e.complete?.();n.clear()},error(e){s=!0,o=e;for(let t of[...n])t.error?.(e);n.clear()},next(e){t>0&&(r.length>=t&&r.shift(),r.push(e));for(let t of[...n])t.next(e)}})),()=>{n.delete(l),n.size===0&&(i?.(),i=void 0)}})}function de(){return e=>K(e,0)}function fe(e=1){let{clamped:t,value:n}=R(e);return t&&r(`shareReplay: bufferSize must be a finite integer >= 1, got ${e} — clamped to ${n}`),e=>K(e,n)}function pe(e){return t=>l(n=>t.subscribe({complete:n.complete,error:n.error,next(t){O(()=>{e(t),n.next(t)},n.error)}}))}function me(e,t=h){return n=>l(r=>{let i=[],a=n.subscribe({complete(){i.push(t.delay(()=>r.complete?.(),e))},error:r.error,next(n){i.push(t.delay(()=>r.next(n),e))}});return()=>{a();for(let e of i)e()}})}function he(e,t=h){return n=>l(r=>{let i,a=()=>{i=t.delay(()=>{r.error?.(new _(e))},e)};a();let o=n.subscribe({complete(){i(),r.complete?.()},error(e){i(),r.error?.(e)},next(e){i(),a(),r.next(e)}});return()=>{i(),o()}})}function ge(e){return t=>l(n=>{let r,i=t.subscribe({complete:n.complete,error(t){O(()=>{r=e(t).subscribe({complete:n.complete,error:n.error,next:n.next})},n.error)},next:n.next});return()=>{i(),r?.()}})}function _e(e,t,n=h){return r=>l(i=>{let a=0,o,s;function c(){o=r.subscribe({complete:i.complete,error(r){if(a<e){let e=a++;t===void 0?c():O(()=>{let r=typeof t==`function`?t(e):t;s=n.delay(c,Math.max(0,r))},i.error)}else i.error?.(r)},next:i.next})}return c(),()=>{s?.(),o?.()}})}function ve(e){return t=>l(n=>{let r=!1,a=()=>{if(!r){r=!0;try{e()}catch(e){i(`finalize: cleanup callback threw`,e)}}},o=t.subscribe({complete(){a(),n.complete?.()},error(e){a(),n.error?.(e)},next:n.next});return()=>{a(),o()}})}function q(e){return e.reason??new DOMException(`Aborted`,`AbortError`)}function J(e,t){return new Promise((n,r)=>{if(t?.aborted){r(q(t));return}let i,a=()=>{},o=()=>{a(),r(q(t))};t?.addEventListener(`abort`,o,{once:!0}),a=e.subscribe({complete(){t?.removeEventListener(`abort`,o),n(i)},error(e){t?.removeEventListener(`abort`,o),r(e)},next(e){i=e}})})}function ye(e,t){return new Promise((n,r)=>{let i=[];if(t?.aborted){n(i);return}let a=()=>{},o=()=>{a(),n(i)};t?.addEventListener(`abort`,o,{once:!0}),a=e.subscribe({complete(){t?.removeEventListener(`abort`,o),n(i)},error(e){t?.removeEventListener(`abort`,o),r(e)},next(e){i.push(e)}})})}function be(...e){return t=>e.reduce((e,t)=>t(e),t)}var Y=()=>{};function X(){let e=new AbortController,t=new Set;function n(e){for(let n of[...t])try{e(n)}catch(e){i(`Subscriber threw during broadcast`,e)}}function r(n,r){let i=typeof n==`function`?{next:n}:n;if(e.signal.aborted||r?.aborted){try{i.complete?.()}catch{}return Y}t.add(i);let a=()=>{t.delete(i),r&&r.removeEventListener(`abort`,a)};return r&&r.addEventListener(`abort`,a,{once:!0}),a}return{ac:e,broadcast:n,doSubscribe:r,subscribers:t}}function Z(e,t,n,r){let i=typeof n==`function`?{next:n}:n;if(e.ac.signal.aborted||r?.aborted){try{i.complete?.()}catch{}return Y}if(t(),e.ac.signal.aborted){try{i.complete?.()}catch{}return Y}return e.doSubscribe(i,r)}function Q(e){return()=>{e.ac.signal.aborted||(e.ac.abort(),e.broadcast(e=>e.complete?.()),e.subscribers.clear())}}function $(e){return t=>{e.ac.signal.aborted||(e.ac.abort(),e.broadcast(e=>e.error?.(t)),e.subscribers.clear())}}function xe(){let e=X(),t=Q(e),n={complete:t,get disposalSignal(){return e.ac.signal},dispose:t,get disposed(){return e.ac.signal.aborted},emit(t){e.ac.signal.aborted||e.broadcast(e=>e.next(t))},fail:$(e),pipe:s(()=>n),subscribe(t,n){return e.doSubscribe(t,n)},[Symbol.asyncIterator](){return o(t=>e.doSubscribe(t))},[Symbol.dispose](){t()}};return n}function Se(e){let t=X(),n=Q(t),r=$(t),a=e,c={complete:n,get disposalSignal(){return t.ac.signal},dispose:n,get disposed(){return t.ac.signal.aborted},emit(e){t.ac.signal.aborted||(a=e,t.broadcast(t=>t.next(e)))},fail:r,pipe:s(()=>c),subscribe(e,n){return Z(t,()=>{let t=typeof e==`function`?{next:e}:e;try{t.next(a)}catch(e){i(`BehaviorSubject: subscriber threw during initial replay`,e)}},e,n)},[Symbol.asyncIterator](){return o(e=>Z(t,()=>{try{e.next(a)}catch(e){i(`BehaviorSubject: subscriber threw during initial replay`,e)}},e))},[Symbol.dispose](){n()},get value(){return a}};return c}function Ce(e){let t=X(),n=Q(t),a=$(t),{clamped:c,value:l}=R(e),u=[];c&&r(`createReplaySubject: bufferSize must be a finite integer >= 1, got ${e} — clamped to ${l}`);let d={get buffer(){return u},complete:n,get disposalSignal(){return t.ac.signal},dispose:n,get disposed(){return t.ac.signal.aborted},emit(e){t.ac.signal.aborted||(u.length>=l&&u.shift(),u.push(e),t.broadcast(t=>t.next(e)))},fail:a,pipe:s(()=>d),subscribe(e,n){return Z(t,()=>{let t=typeof e==`function`?{next:e}:e;for(let e of u)try{t.next(e)}catch(e){i(`ReplaySubject: subscriber threw during replay`,e)}},e,n)},[Symbol.asyncIterator](){return o(e=>Z(t,()=>{for(let t of u)try{e.next(t)}catch(e){i(`ReplaySubject: subscriber threw during replay`,e)}},e))},[Symbol.dispose](){n()}};return d}return e.DEFAULT_SCHEDULER=h,e.FluxError=g,e.FluxTimeoutError=_,e.bufferCount=le,e.catchError=ge,e.combineLatest=ae,e.concat=ie,e.concatMap=U,e.createBehaviorSubject=Se,e.createReplaySubject=Ce,e.createSubject=xe,e.debounce=N,e.delay=me,e.distinctUntilChanged=W,e.empty=w,e.filter=B,e.finalize=ve,e.first=I,e.flatMap=H,e.flow=be,e.flux=l,e.forkJoin=y,e.from=x,e.fromBus=ee,e.fromEvent=D,e.fromPresence=f,e.fromPulse=ne,e.fromQuery=d,e.fromSignal=p,e.fromSse=u,e.interval=S,e.last=L,e.map=z,e.merge=re,e.never=T,e.of=b,e.pairwise=ue,e.race=se,e.retry=_e,e.sample=F,e.scan=V,e.share=de,e.shareReplay=fe,e.skip=A,e.startWith=G,e.switchMap=ce,e.take=k,e.takeUntil=j,e.takeWhile=M,e.tap=pe,e.throttle=P,e.throwError=E,e.timeout=he,e.timer=C,e.toArray=ye,e.toBus=te,e.toPromise=J,e.toSignal=m,e.withLatestFrom=oe,e.zip=v,e})({},Ripple);
2
+ //# sourceMappingURL=flux.iife.js.map