@vielzeug/flux 26.11.12 → 26.11.14

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 (49) hide show
  1. package/dist/_iterator.cjs +1 -1
  2. package/dist/_iterator.cjs.map +1 -1
  3. package/dist/_iterator.d.ts.map +1 -1
  4. package/dist/_iterator.js +4 -1
  5. package/dist/_iterator.js.map +1 -1
  6. package/dist/async.cjs +1 -1
  7. package/dist/async.cjs.map +1 -1
  8. package/dist/channel.cjs +1 -1
  9. package/dist/channel.cjs.map +1 -1
  10. package/dist/channel.js +9 -9
  11. package/dist/channel.js.map +1 -1
  12. package/dist/flux.cjs +1 -1
  13. package/dist/flux.cjs.map +1 -1
  14. package/dist/flux.iife.js +1 -1
  15. package/dist/flux.iife.js.map +1 -1
  16. package/dist/flux.js +121 -123
  17. package/dist/flux.js.map +1 -1
  18. package/dist/operators/creation.cjs +1 -1
  19. package/dist/operators/creation.cjs.map +1 -1
  20. package/dist/operators/creation.d.ts.map +1 -1
  21. package/dist/operators/creation.js +22 -23
  22. package/dist/operators/creation.js.map +1 -1
  23. package/dist/operators/filtering.cjs +1 -1
  24. package/dist/operators/filtering.cjs.map +1 -1
  25. package/dist/operators/filtering.d.ts.map +1 -1
  26. package/dist/operators/filtering.js +25 -23
  27. package/dist/operators/filtering.js.map +1 -1
  28. package/dist/operators/transformation.cjs +1 -1
  29. package/dist/operators/transformation.cjs.map +1 -1
  30. package/dist/operators/transformation.d.ts +8 -2
  31. package/dist/operators/transformation.d.ts.map +1 -1
  32. package/dist/operators/transformation.js +24 -19
  33. package/dist/operators/transformation.js.map +1 -1
  34. package/dist/operators/utility.cjs +1 -1
  35. package/dist/operators/utility.cjs.map +1 -1
  36. package/dist/operators/utility.d.ts.map +1 -1
  37. package/dist/operators/utility.js +48 -51
  38. package/dist/operators/utility.js.map +1 -1
  39. package/package.json +2 -14
  40. package/dist/_dev.d.ts +0 -2
  41. package/dist/_dev.d.ts.map +0 -1
  42. package/dist/_scheduler.cjs +0 -2
  43. package/dist/_scheduler.cjs.map +0 -1
  44. package/dist/_scheduler.d.ts +0 -6
  45. package/dist/_scheduler.d.ts.map +0 -1
  46. package/dist/_scheduler.js +0 -14
  47. package/dist/_scheduler.js.map +0 -1
  48. package/dist/subjects.d.ts +0 -2
  49. package/dist/subjects.d.ts.map +0 -1
@@ -1,2 +1,2 @@
1
- const e=require("./_numeric.cjs"),t=require("./errors.cjs");let n=require("@vielzeug/arsenal");function toIterator(r,i){if(e.assertPositiveInteger(i.capacity,`Async iterable capacity`),i.overflow!==`drop-newest`&&i.overflow!==`drop-oldest`&&i.overflow!==`error`)throw RangeError(`Async iterable overflow must be "drop-newest", "drop-oldest", or "error"`);let a=new AbortController,o=[],s={kind:`open`,queue:[]},detach=()=>i.signal?.removeEventListener(`abort`,abort),resolveDone=()=>{for(;o.length>0;)o.shift()?.resolve({done:!0,value:void 0})},complete=()=>{s.kind===`open`&&(s.kind=`complete`,detach(),resolveDone())},fail=e=>{if(s.kind===`open`)for(s={kind:`error`,queue:s.queue,reason:e},a.abort(),detach();o.length>0;)o.shift()?.reject(e)},abort=()=>{fail((0,n.abortError)(i.signal,`Async iteration aborted`))},stop=()=>{a.abort(),detach(),s={kind:`returned`},resolveDone()},c={complete,error:fail,next(e){if(s.kind!==`open`)return;let n=o.shift();n?n.resolve({done:!1,value:e}):s.queue.length<i.capacity?s.queue.push(e):i.overflow===`drop-oldest`?(s.queue.shift(),s.queue.push(e)):i.overflow===`error`&&fail(new t.FluxCapacityError(i.capacity,`Async iterable buffer capacity exceeded`))}};return i.signal?.aborted?abort():i.signal?.addEventListener(`abort`,abort,{once:!0}),r.subscribe(c,{signal:a.signal}),{next(){return s.kind===`returned`?Promise.resolve({done:!0,value:void 0}):s.queue.length>0?Promise.resolve({done:!1,value:s.queue.shift()}):s.kind===`error`?Promise.reject(s.reason):s.kind===`complete`?Promise.resolve({done:!0,value:void 0}):new Promise((e,t)=>o.push({reject:t,resolve:e}))},return(){return stop(),Promise.resolve({done:!0,value:void 0})},[Symbol.asyncIterator](){return this}}}exports.toIterator=toIterator;
1
+ const e=require("./_numeric.cjs"),t=require("./errors.cjs");let n=require("@vielzeug/arsenal");function toIterator(r,i){if(e.assertPositiveInteger(i.capacity,`Async iterable capacity`),i.overflow!==`drop-newest`&&i.overflow!==`drop-oldest`&&i.overflow!==`error`)throw RangeError(`Async iterable overflow must be "drop-newest", "drop-oldest", or "error"`);let a=new AbortController,o=[],s={kind:`open`,queue:[]},detach=()=>i.signal?.removeEventListener(`abort`,abort),resolveDone=()=>{for(;o.length>0;)o.shift()?.resolve({done:!0,value:void 0})},complete=()=>{s.kind===`open`&&(s={kind:`complete`,queue:s.queue},detach(),resolveDone())},fail=e=>{if(s.kind===`open`)for(s={kind:`error`,queue:s.queue,reason:e},a.abort(),detach();o.length>0;)o.shift()?.reject(e)},abort=()=>{fail((0,n.abortError)(i.signal,`Async iteration aborted`))},stop=()=>{a.abort(),detach(),s={kind:`returned`},resolveDone()},c={complete,error:fail,next(e){if(s.kind!==`open`)return;let n=o.shift();n?n.resolve({done:!1,value:e}):s.queue.length<i.capacity?s.queue.push(e):i.overflow===`drop-oldest`?(s.queue.shift(),s.queue.push(e)):i.overflow===`error`&&fail(new t.FluxCapacityError(i.capacity,`Async iterable buffer capacity exceeded`))}};return i.signal?.aborted?abort():i.signal?.addEventListener(`abort`,abort,{once:!0}),r.subscribe(c,{signal:a.signal}),{next(){return s.kind===`returned`?Promise.resolve({done:!0,value:void 0}):s.queue.length>0?Promise.resolve({done:!1,value:s.queue.shift()}):s.kind===`error`?Promise.reject(s.reason):s.kind===`complete`?Promise.resolve({done:!0,value:void 0}):new Promise((e,t)=>o.push({reject:t,resolve:e}))},return(){return stop(),Promise.resolve({done:!0,value:void 0})},[Symbol.asyncIterator](){return this}}}exports.toIterator=toIterator;
2
2
  //# sourceMappingURL=_iterator.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"_iterator.cjs","names":["abortError","FluxCapacityError","require__numeric","require_errors","_vielzeug_arsenal","options","controller","pending","state","reason","observer","waiter","value","source"],"sources":["../src/_iterator.ts"],"sourcesContent":["import { abortError } from '@vielzeug/arsenal';\nimport { assertPositiveInteger } from './_numeric.js';\n\nimport { FluxCapacityError } from './errors.js';\nimport type { AsyncIterableOptions, Observer, Stream } from './types.js';\n\ntype Pending<T> = {\n reject(reason: unknown): void;\n resolve(result: IteratorResult<T>): void;\n};\n\ntype IteratorState<T> =\n | { kind: 'complete' | 'open'; queue: T[] }\n | { kind: 'error'; queue: T[]; reason: unknown }\n | { kind: 'returned' };\n\n/** Async iteration requires explicit queue policy because streams are push based. */\nexport function toIterator<T>(source: Stream<T>, options: AsyncIterableOptions): AsyncIterableIterator<T> {\n assertPositiveInteger(options.capacity, 'Async iterable capacity');\n if (options.overflow !== 'drop-newest' && options.overflow !== 'drop-oldest' && options.overflow !== 'error') {\n throw new RangeError('Async iterable overflow must be \"drop-newest\", \"drop-oldest\", or \"error\"');\n }\n\n const controller = new AbortController();\n const pending: Pending<T>[] = [];\n let state: IteratorState<T> = { kind: 'open', queue: [] };\n\n const detach = (): void => options.signal?.removeEventListener('abort', abort);\n\n const resolveDone = (): void => {\n while (pending.length > 0) pending.shift()?.resolve({ done: true, value: undefined as T });\n };\n\n const complete = (): void => {\n if (state.kind !== 'open') return;\n\n state.kind = 'complete';\n detach();\n resolveDone();\n };\n\n const fail = (reason: unknown): void => {\n if (state.kind !== 'open') return;\n\n state = { kind: 'error', queue: state.queue, reason };\n controller.abort();\n detach();\n\n while (pending.length > 0) pending.shift()?.reject(reason);\n };\n\n const abort = (): void => {\n fail(abortError(options.signal, 'Async iteration aborted'));\n };\n\n const stop = (): void => {\n controller.abort();\n detach();\n state = { kind: 'returned' };\n resolveDone();\n };\n\n const observer: Observer<T> = {\n complete,\n error: fail,\n next(value) {\n if (state.kind !== 'open') return;\n\n const waiter = pending.shift();\n\n if (waiter) {\n waiter.resolve({ done: false, value });\n\n return;\n }\n\n if (state.queue.length < options.capacity) {\n state.queue.push(value);\n\n return;\n }\n\n if (options.overflow === 'drop-oldest') {\n state.queue.shift();\n state.queue.push(value);\n } else if (options.overflow === 'error') {\n fail(new FluxCapacityError(options.capacity, 'Async iterable buffer capacity exceeded'));\n }\n },\n };\n\n if (options.signal?.aborted) abort();\n else options.signal?.addEventListener('abort', abort, { once: true });\n\n source.subscribe(observer, { signal: controller.signal });\n\n return {\n next(): Promise<IteratorResult<T>> {\n if (state.kind === 'returned') return Promise.resolve({ done: true, value: undefined as T });\n\n if (state.queue.length > 0) return Promise.resolve({ done: false, value: state.queue.shift()! });\n\n if (state.kind === 'error') return Promise.reject(state.reason);\n\n if (state.kind === 'complete') return Promise.resolve({ done: true, value: undefined as T });\n\n return new Promise<IteratorResult<T>>((resolve, reject) => pending.push({ reject, resolve }));\n },\n return(): Promise<IteratorResult<T>> {\n stop();\n\n return Promise.resolve({ done: true, value: undefined as T });\n },\n [Symbol.asyncIterator](): AsyncIterableIterator<T> {\n return this;\n },\n };\n}\n"],"mappings":"A,+FAiBA,SAAgB,WAAc,EAAmB,EAAyD,CAExG,GADAE,EAAA,sBAAsBG,EAAQ,SAAU,yBAAyB,EAC7DA,EAAQ,WAAa,eAAiBA,EAAQ,WAAa,eAAiBA,EAAQ,WAAa,QACnG,MAAU,WAAW,0EAA0E,EAGjG,IAAMC,EAAa,IAAI,gBACjBC,EAAwB,CAAC,EAC3BC,EAA0B,CAAE,KAAM,OAAQ,MAAO,CAAC,CAAE,EAElD,WAAqBH,EAAQ,QAAQ,oBAAoB,QAAS,KAAK,EAEvE,gBAA0B,CAC9B,KAAOE,EAAQ,OAAS,GAAGA,EAAQ,MAAM,CAAC,EAAE,QAAQ,CAAE,KAAM,GAAM,MAAO,IAAA,EAAe,CAAC,CAC3F,EAEM,aAAuB,CACvBC,EAAM,OAAS,SAEnB,EAAM,KAAO,WACb,OAAO,EACP,YAAY,EACd,EAEM,KAAQ,GAA0B,CACtC,GAAIA,EAAM,OAAS,OAMnB,IAJA,EAAQ,CAAE,KAAM,QAAS,MAAOA,EAAM,MAAO,QAAO,EACpDF,EAAW,MAAM,EACjB,OAAO,EAEAC,EAAQ,OAAS,GAAGA,EAAQ,MAAM,CAAC,EAAE,OAAOE,CAAM,CAC3D,EAEM,UAAoB,CACxB,MAAA,EAAKT,EAAAA,WAAAA,CAAWK,EAAQ,OAAQ,yBAAyB,CAAC,CAC5D,EAEM,SAAmB,CACvBC,EAAW,MAAM,EACjB,OAAO,EACP,EAAQ,CAAE,KAAM,UAAW,EAC3B,YAAY,CACd,EAEMI,EAAwB,CAC5B,SACA,MAAO,KACP,KAAK,EAAO,CACV,GAAIF,EAAM,OAAS,OAAQ,OAE3B,IAAMG,EAASJ,EAAQ,MAAM,EAEzBI,EACFA,EAAO,QAAQ,CAAE,KAAM,GAAO,OAAM,CAAC,EAKnCH,EAAM,MAAM,OAASH,EAAQ,SAC/BG,EAAM,MAAM,KAAKI,CAAK,EAKpBP,EAAQ,WAAa,eACvBG,EAAM,MAAM,MAAM,EAClBA,EAAM,MAAM,KAAKI,CAAK,GACbP,EAAQ,WAAa,SAC9B,KAAK,IAAIJ,EAAAA,kBAAkBI,EAAQ,SAAU,yCAAyC,CAAC,CAE3F,CACF,EAOA,OALIA,EAAQ,QAAQ,QAAS,MAAM,EAC9BA,EAAQ,QAAQ,iBAAiB,QAAS,MAAO,CAAE,KAAM,EAAK,CAAC,EAEpEQ,EAAO,UAAUH,EAAU,CAAE,OAAQJ,EAAW,MAAO,CAAC,EAEjD,CACL,MAAmC,CASjC,OARIE,EAAM,OAAS,WAAmB,QAAQ,QAAQ,CAAE,KAAM,GAAM,MAAO,IAAA,EAAe,CAAC,EAEvFA,EAAM,MAAM,OAAS,EAAU,QAAQ,QAAQ,CAAE,KAAM,GAAO,MAAOA,EAAM,MAAM,MAAM,CAAG,CAAC,EAE3FA,EAAM,OAAS,QAAgB,QAAQ,OAAOA,EAAM,MAAM,EAE1DA,EAAM,OAAS,WAAmB,QAAQ,QAAQ,CAAE,KAAM,GAAM,MAAO,IAAA,EAAe,CAAC,EAEpF,IAAI,SAA4B,EAAS,IAAWD,EAAQ,KAAK,CAAE,SAAQ,SAAQ,CAAC,CAAC,CAC9F,EACA,QAAqC,CAGnC,OAFA,KAAK,EAEE,QAAQ,QAAQ,CAAE,KAAM,GAAM,MAAO,IAAA,EAAe,CAAC,CAC9D,EACA,CAAC,OAAO,gBAA2C,CACjD,OAAO,IACT,CACF,CACF,C"}
1
+ {"version":3,"file":"_iterator.cjs","names":["abortError","FluxCapacityError","require__numeric","require_errors","_vielzeug_arsenal","options","controller","pending","state","reason","observer","waiter","value","source"],"sources":["../src/_iterator.ts"],"sourcesContent":["import { abortError } from '@vielzeug/arsenal';\nimport { assertPositiveInteger } from './_numeric.js';\n\nimport { FluxCapacityError } from './errors.js';\nimport type { AsyncIterableOptions, Observer, Stream } from './types.js';\n\ntype Pending<T> = {\n reject(reason: unknown): void;\n resolve(result: IteratorResult<T>): void;\n};\n\ntype IteratorState<T> =\n | { kind: 'complete'; queue: T[] }\n | { kind: 'error'; queue: T[]; reason: unknown }\n | { kind: 'open'; queue: T[] }\n | { kind: 'returned' };\n\n/** Async iteration requires explicit queue policy because streams are push based. */\nexport function toIterator<T>(source: Stream<T>, options: AsyncIterableOptions): AsyncIterableIterator<T> {\n assertPositiveInteger(options.capacity, 'Async iterable capacity');\n if (options.overflow !== 'drop-newest' && options.overflow !== 'drop-oldest' && options.overflow !== 'error') {\n throw new RangeError('Async iterable overflow must be \"drop-newest\", \"drop-oldest\", or \"error\"');\n }\n\n const controller = new AbortController();\n const pending: Pending<T>[] = [];\n let state: IteratorState<T> = { kind: 'open', queue: [] };\n\n const detach = (): void => options.signal?.removeEventListener('abort', abort);\n\n const resolveDone = (): void => {\n while (pending.length > 0) pending.shift()?.resolve({ done: true, value: undefined as T });\n };\n\n const complete = (): void => {\n if (state.kind !== 'open') return;\n\n state = { kind: 'complete', queue: state.queue };\n detach();\n resolveDone();\n };\n\n const fail = (reason: unknown): void => {\n if (state.kind !== 'open') return;\n\n state = { kind: 'error', queue: state.queue, reason };\n controller.abort();\n detach();\n\n while (pending.length > 0) pending.shift()?.reject(reason);\n };\n\n const abort = (): void => {\n fail(abortError(options.signal, 'Async iteration aborted'));\n };\n\n const stop = (): void => {\n controller.abort();\n detach();\n state = { kind: 'returned' };\n resolveDone();\n };\n\n const observer: Observer<T> = {\n complete,\n error: fail,\n next(value) {\n if (state.kind !== 'open') return;\n\n const waiter = pending.shift();\n\n if (waiter) {\n waiter.resolve({ done: false, value });\n\n return;\n }\n\n if (state.queue.length < options.capacity) {\n state.queue.push(value);\n\n return;\n }\n\n if (options.overflow === 'drop-oldest') {\n state.queue.shift();\n state.queue.push(value);\n } else if (options.overflow === 'error') {\n fail(new FluxCapacityError(options.capacity, 'Async iterable buffer capacity exceeded'));\n }\n },\n };\n\n if (options.signal?.aborted) abort();\n else options.signal?.addEventListener('abort', abort, { once: true });\n\n source.subscribe(observer, { signal: controller.signal });\n\n return {\n next(): Promise<IteratorResult<T>> {\n if (state.kind === 'returned') return Promise.resolve({ done: true, value: undefined as T });\n\n if (state.queue.length > 0) return Promise.resolve({ done: false, value: state.queue.shift()! });\n\n if (state.kind === 'error') return Promise.reject(state.reason);\n\n if (state.kind === 'complete') return Promise.resolve({ done: true, value: undefined as T });\n\n return new Promise<IteratorResult<T>>((resolve, reject) => pending.push({ reject, resolve }));\n },\n return(): Promise<IteratorResult<T>> {\n stop();\n\n return Promise.resolve({ done: true, value: undefined as T });\n },\n [Symbol.asyncIterator](): AsyncIterableIterator<T> {\n return this;\n },\n };\n}\n"],"mappings":"A,+FAkBA,SAAgB,WAAc,EAAmB,EAAyD,CAExG,GADAE,EAAA,sBAAsBG,EAAQ,SAAU,yBAAyB,EAC7DA,EAAQ,WAAa,eAAiBA,EAAQ,WAAa,eAAiBA,EAAQ,WAAa,QACnG,MAAU,WAAW,0EAA0E,EAGjG,IAAMC,EAAa,IAAI,gBACjBC,EAAwB,CAAC,EAC3BC,EAA0B,CAAE,KAAM,OAAQ,MAAO,CAAC,CAAE,EAElD,WAAqBH,EAAQ,QAAQ,oBAAoB,QAAS,KAAK,EAEvE,gBAA0B,CAC9B,KAAOE,EAAQ,OAAS,GAAGA,EAAQ,MAAM,CAAC,EAAE,QAAQ,CAAE,KAAM,GAAM,MAAO,IAAA,EAAe,CAAC,CAC3F,EAEM,aAAuB,CACvBC,EAAM,OAAS,SAEnB,EAAQ,CAAE,KAAM,WAAY,MAAOA,EAAM,KAAM,EAC/C,OAAO,EACP,YAAY,EACd,EAEM,KAAQ,GAA0B,CACtC,GAAIA,EAAM,OAAS,OAMnB,IAJA,EAAQ,CAAE,KAAM,QAAS,MAAOA,EAAM,MAAO,QAAO,EACpDF,EAAW,MAAM,EACjB,OAAO,EAEAC,EAAQ,OAAS,GAAGA,EAAQ,MAAM,CAAC,EAAE,OAAOE,CAAM,CAC3D,EAEM,UAAoB,CACxB,MAAA,EAAKT,EAAAA,WAAAA,CAAWK,EAAQ,OAAQ,yBAAyB,CAAC,CAC5D,EAEM,SAAmB,CACvBC,EAAW,MAAM,EACjB,OAAO,EACP,EAAQ,CAAE,KAAM,UAAW,EAC3B,YAAY,CACd,EAEMI,EAAwB,CAC5B,SACA,MAAO,KACP,KAAK,EAAO,CACV,GAAIF,EAAM,OAAS,OAAQ,OAE3B,IAAMG,EAASJ,EAAQ,MAAM,EAEzBI,EACFA,EAAO,QAAQ,CAAE,KAAM,GAAO,OAAM,CAAC,EAKnCH,EAAM,MAAM,OAASH,EAAQ,SAC/BG,EAAM,MAAM,KAAKI,CAAK,EAKpBP,EAAQ,WAAa,eACvBG,EAAM,MAAM,MAAM,EAClBA,EAAM,MAAM,KAAKI,CAAK,GACbP,EAAQ,WAAa,SAC9B,KAAK,IAAIJ,EAAAA,kBAAkBI,EAAQ,SAAU,yCAAyC,CAAC,CAE3F,CACF,EAOA,OALIA,EAAQ,QAAQ,QAAS,MAAM,EAC9BA,EAAQ,QAAQ,iBAAiB,QAAS,MAAO,CAAE,KAAM,EAAK,CAAC,EAEpEQ,EAAO,UAAUH,EAAU,CAAE,OAAQJ,EAAW,MAAO,CAAC,EAEjD,CACL,MAAmC,CASjC,OARIE,EAAM,OAAS,WAAmB,QAAQ,QAAQ,CAAE,KAAM,GAAM,MAAO,IAAA,EAAe,CAAC,EAEvFA,EAAM,MAAM,OAAS,EAAU,QAAQ,QAAQ,CAAE,KAAM,GAAO,MAAOA,EAAM,MAAM,MAAM,CAAG,CAAC,EAE3FA,EAAM,OAAS,QAAgB,QAAQ,OAAOA,EAAM,MAAM,EAE1DA,EAAM,OAAS,WAAmB,QAAQ,QAAQ,CAAE,KAAM,GAAM,MAAO,IAAA,EAAe,CAAC,EAEpF,IAAI,SAA4B,EAAS,IAAWD,EAAQ,KAAK,CAAE,SAAQ,SAAQ,CAAC,CAAC,CAC9F,EACA,QAAqC,CAGnC,OAFA,KAAK,EAEE,QAAQ,QAAQ,CAAE,KAAM,GAAM,MAAO,IAAA,EAAe,CAAC,CAC9D,EACA,CAAC,OAAO,gBAA2C,CACjD,OAAO,IACT,CACF,CACF,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"_iterator.d.ts","sourceRoot":"","sources":["../src/_iterator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAY,MAAM,EAAE,MAAM,YAAY,CAAC;AAYzE,qFAAqF;AACrF,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,oBAAoB,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAoGxG"}
1
+ {"version":3,"file":"_iterator.d.ts","sourceRoot":"","sources":["../src/_iterator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAY,MAAM,EAAE,MAAM,YAAY,CAAC;AAazE,qFAAqF;AACrF,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,oBAAoB,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAoGxG"}
package/dist/_iterator.js CHANGED
@@ -13,7 +13,10 @@ function toIterator(r, i) {
13
13
  value: void 0
14
14
  });
15
15
  }, complete = () => {
16
- s.kind === "open" && (s.kind = "complete", detach(), resolveDone());
16
+ s.kind === "open" && (s = {
17
+ kind: "complete",
18
+ queue: s.queue
19
+ }, detach(), resolveDone());
17
20
  }, fail = (e) => {
18
21
  if (s.kind === "open") for (s = {
19
22
  kind: "error",
@@ -1 +1 @@
1
- {"version":3,"file":"_iterator.js","names":["assertPositiveInteger","options","controller","pending","state","reason","abortError","observer","waiter","value","FluxCapacityError","source"],"sources":["../src/_iterator.ts"],"sourcesContent":["import { abortError } from '@vielzeug/arsenal';\nimport { assertPositiveInteger } from './_numeric.js';\n\nimport { FluxCapacityError } from './errors.js';\nimport type { AsyncIterableOptions, Observer, Stream } from './types.js';\n\ntype Pending<T> = {\n reject(reason: unknown): void;\n resolve(result: IteratorResult<T>): void;\n};\n\ntype IteratorState<T> =\n | { kind: 'complete' | 'open'; queue: T[] }\n | { kind: 'error'; queue: T[]; reason: unknown }\n | { kind: 'returned' };\n\n/** Async iteration requires explicit queue policy because streams are push based. */\nexport function toIterator<T>(source: Stream<T>, options: AsyncIterableOptions): AsyncIterableIterator<T> {\n assertPositiveInteger(options.capacity, 'Async iterable capacity');\n if (options.overflow !== 'drop-newest' && options.overflow !== 'drop-oldest' && options.overflow !== 'error') {\n throw new RangeError('Async iterable overflow must be \"drop-newest\", \"drop-oldest\", or \"error\"');\n }\n\n const controller = new AbortController();\n const pending: Pending<T>[] = [];\n let state: IteratorState<T> = { kind: 'open', queue: [] };\n\n const detach = (): void => options.signal?.removeEventListener('abort', abort);\n\n const resolveDone = (): void => {\n while (pending.length > 0) pending.shift()?.resolve({ done: true, value: undefined as T });\n };\n\n const complete = (): void => {\n if (state.kind !== 'open') return;\n\n state.kind = 'complete';\n detach();\n resolveDone();\n };\n\n const fail = (reason: unknown): void => {\n if (state.kind !== 'open') return;\n\n state = { kind: 'error', queue: state.queue, reason };\n controller.abort();\n detach();\n\n while (pending.length > 0) pending.shift()?.reject(reason);\n };\n\n const abort = (): void => {\n fail(abortError(options.signal, 'Async iteration aborted'));\n };\n\n const stop = (): void => {\n controller.abort();\n detach();\n state = { kind: 'returned' };\n resolveDone();\n };\n\n const observer: Observer<T> = {\n complete,\n error: fail,\n next(value) {\n if (state.kind !== 'open') return;\n\n const waiter = pending.shift();\n\n if (waiter) {\n waiter.resolve({ done: false, value });\n\n return;\n }\n\n if (state.queue.length < options.capacity) {\n state.queue.push(value);\n\n return;\n }\n\n if (options.overflow === 'drop-oldest') {\n state.queue.shift();\n state.queue.push(value);\n } else if (options.overflow === 'error') {\n fail(new FluxCapacityError(options.capacity, 'Async iterable buffer capacity exceeded'));\n }\n },\n };\n\n if (options.signal?.aborted) abort();\n else options.signal?.addEventListener('abort', abort, { once: true });\n\n source.subscribe(observer, { signal: controller.signal });\n\n return {\n next(): Promise<IteratorResult<T>> {\n if (state.kind === 'returned') return Promise.resolve({ done: true, value: undefined as T });\n\n if (state.queue.length > 0) return Promise.resolve({ done: false, value: state.queue.shift()! });\n\n if (state.kind === 'error') return Promise.reject(state.reason);\n\n if (state.kind === 'complete') return Promise.resolve({ done: true, value: undefined as T });\n\n return new Promise<IteratorResult<T>>((resolve, reject) => pending.push({ reject, resolve }));\n },\n return(): Promise<IteratorResult<T>> {\n stop();\n\n return Promise.resolve({ done: true, value: undefined as T });\n },\n [Symbol.asyncIterator](): AsyncIterableIterator<T> {\n return this;\n },\n };\n}\n"],"mappings":";;;;AAiBA,SAAgB,WAAc,GAAmB,GAAyD;CAExG,IADAA,EAAsBC,EAAQ,UAAU,yBAAyB,GAC7DA,EAAQ,aAAa,iBAAiBA,EAAQ,aAAa,iBAAiBA,EAAQ,aAAa,SACnG,MAAU,WAAW,gFAA0E;CAGjG,IAAMC,IAAa,IAAI,gBAAgB,GACjCC,IAAwB,CAAC,GAC3BC,IAA0B;EAAE,MAAM;EAAQ,OAAO,CAAC;CAAE,GAElD,eAAqBH,EAAQ,QAAQ,oBAAoB,SAAS,KAAK,GAEvE,oBAA0B;EAC9B,OAAOE,EAAQ,SAAS,IAAG,EAAQ,MAAM,CAAC,EAAE,QAAQ;GAAE,MAAM;GAAM,OAAO,KAAA;EAAe,CAAC;CAC3F,GAEM,iBAAuB;EAC3B,AAAIC,EAAM,SAAS,WAEnB,EAAM,OAAO,YACb,OAAO,GACP,YAAY;CACd,GAEM,QAAQ,MAA0B;EACtC,IAAIA,EAAM,SAAS,QAMnB,KAJA,IAAQ;GAAE,MAAM;GAAS,OAAOA,EAAM;GAAO;EAAO,GACpDF,EAAW,MAAM,GACjB,OAAO,GAEAC,EAAQ,SAAS,IAAG,EAAQ,MAAM,CAAC,EAAE,OAAOE,CAAM;CAC3D,GAEM,cAAoB;EACxB,KAAKC,EAAWL,EAAQ,QAAQ,yBAAyB,CAAC;CAC5D,GAEM,aAAmB;EAIvB,AAHAC,EAAW,MAAM,GACjB,OAAO,GACP,IAAQ,EAAE,MAAM,WAAW,GAC3B,YAAY;CACd,GAEMK,IAAwB;EAC5B;EACA,OAAO;EACP,KAAK,GAAO;GACV,IAAIH,EAAM,SAAS,QAAQ;GAE3B,IAAMI,IAASL,EAAQ,MAAM;GAE7B,AAAIK,IACFA,EAAO,QAAQ;IAAE,MAAM;IAAO;GAAM,CAAC,IAKnCJ,EAAM,MAAM,SAASH,EAAQ,WAC/BG,EAAM,MAAM,KAAKK,CAAK,IAKpBR,EAAQ,aAAa,iBACvBG,EAAM,MAAM,MAAM,GAClBA,EAAM,MAAM,KAAKK,CAAK,KACbR,EAAQ,aAAa,WAC9B,KAAK,IAAIS,EAAkBT,EAAQ,UAAU,yCAAyC,CAAC;EAE3F;CACF;CAOA,OALIA,EAAQ,QAAQ,UAAS,MAAM,IAC9BA,EAAQ,QAAQ,iBAAiB,SAAS,OAAO,EAAE,MAAM,GAAK,CAAC,GAEpEU,EAAO,UAAUJ,GAAU,EAAE,QAAQL,EAAW,OAAO,CAAC,GAEjD;EACL,OAAmC;GASjC,OARIE,EAAM,SAAS,aAAmB,QAAQ,QAAQ;IAAE,MAAM;IAAM,OAAO,KAAA;GAAe,CAAC,IAEvFA,EAAM,MAAM,SAAS,IAAU,QAAQ,QAAQ;IAAE,MAAM;IAAO,OAAOA,EAAM,MAAM,MAAM;GAAG,CAAC,IAE3FA,EAAM,SAAS,UAAgB,QAAQ,OAAOA,EAAM,MAAM,IAE1DA,EAAM,SAAS,aAAmB,QAAQ,QAAQ;IAAE,MAAM;IAAM,OAAO,KAAA;GAAe,CAAC,IAEpF,IAAI,SAA4B,GAAS,MAAWD,EAAQ,KAAK;IAAE;IAAQ;GAAQ,CAAC,CAAC;EAC9F;EACA,SAAqC;GAGnC,OAFA,KAAK,GAEE,QAAQ,QAAQ;IAAE,MAAM;IAAM,OAAO,KAAA;GAAe,CAAC;EAC9D;EACA,CAAC,OAAO,iBAA2C;GACjD,OAAO;EACT;CACF;AACF"}
1
+ {"version":3,"file":"_iterator.js","names":["assertPositiveInteger","options","controller","pending","state","reason","abortError","observer","waiter","value","FluxCapacityError","source"],"sources":["../src/_iterator.ts"],"sourcesContent":["import { abortError } from '@vielzeug/arsenal';\nimport { assertPositiveInteger } from './_numeric.js';\n\nimport { FluxCapacityError } from './errors.js';\nimport type { AsyncIterableOptions, Observer, Stream } from './types.js';\n\ntype Pending<T> = {\n reject(reason: unknown): void;\n resolve(result: IteratorResult<T>): void;\n};\n\ntype IteratorState<T> =\n | { kind: 'complete'; queue: T[] }\n | { kind: 'error'; queue: T[]; reason: unknown }\n | { kind: 'open'; queue: T[] }\n | { kind: 'returned' };\n\n/** Async iteration requires explicit queue policy because streams are push based. */\nexport function toIterator<T>(source: Stream<T>, options: AsyncIterableOptions): AsyncIterableIterator<T> {\n assertPositiveInteger(options.capacity, 'Async iterable capacity');\n if (options.overflow !== 'drop-newest' && options.overflow !== 'drop-oldest' && options.overflow !== 'error') {\n throw new RangeError('Async iterable overflow must be \"drop-newest\", \"drop-oldest\", or \"error\"');\n }\n\n const controller = new AbortController();\n const pending: Pending<T>[] = [];\n let state: IteratorState<T> = { kind: 'open', queue: [] };\n\n const detach = (): void => options.signal?.removeEventListener('abort', abort);\n\n const resolveDone = (): void => {\n while (pending.length > 0) pending.shift()?.resolve({ done: true, value: undefined as T });\n };\n\n const complete = (): void => {\n if (state.kind !== 'open') return;\n\n state = { kind: 'complete', queue: state.queue };\n detach();\n resolveDone();\n };\n\n const fail = (reason: unknown): void => {\n if (state.kind !== 'open') return;\n\n state = { kind: 'error', queue: state.queue, reason };\n controller.abort();\n detach();\n\n while (pending.length > 0) pending.shift()?.reject(reason);\n };\n\n const abort = (): void => {\n fail(abortError(options.signal, 'Async iteration aborted'));\n };\n\n const stop = (): void => {\n controller.abort();\n detach();\n state = { kind: 'returned' };\n resolveDone();\n };\n\n const observer: Observer<T> = {\n complete,\n error: fail,\n next(value) {\n if (state.kind !== 'open') return;\n\n const waiter = pending.shift();\n\n if (waiter) {\n waiter.resolve({ done: false, value });\n\n return;\n }\n\n if (state.queue.length < options.capacity) {\n state.queue.push(value);\n\n return;\n }\n\n if (options.overflow === 'drop-oldest') {\n state.queue.shift();\n state.queue.push(value);\n } else if (options.overflow === 'error') {\n fail(new FluxCapacityError(options.capacity, 'Async iterable buffer capacity exceeded'));\n }\n },\n };\n\n if (options.signal?.aborted) abort();\n else options.signal?.addEventListener('abort', abort, { once: true });\n\n source.subscribe(observer, { signal: controller.signal });\n\n return {\n next(): Promise<IteratorResult<T>> {\n if (state.kind === 'returned') return Promise.resolve({ done: true, value: undefined as T });\n\n if (state.queue.length > 0) return Promise.resolve({ done: false, value: state.queue.shift()! });\n\n if (state.kind === 'error') return Promise.reject(state.reason);\n\n if (state.kind === 'complete') return Promise.resolve({ done: true, value: undefined as T });\n\n return new Promise<IteratorResult<T>>((resolve, reject) => pending.push({ reject, resolve }));\n },\n return(): Promise<IteratorResult<T>> {\n stop();\n\n return Promise.resolve({ done: true, value: undefined as T });\n },\n [Symbol.asyncIterator](): AsyncIterableIterator<T> {\n return this;\n },\n };\n}\n"],"mappings":";;;;AAkBA,SAAgB,WAAc,GAAmB,GAAyD;CAExG,IADAA,EAAsBC,EAAQ,UAAU,yBAAyB,GAC7DA,EAAQ,aAAa,iBAAiBA,EAAQ,aAAa,iBAAiBA,EAAQ,aAAa,SACnG,MAAU,WAAW,gFAA0E;CAGjG,IAAMC,IAAa,IAAI,gBAAgB,GACjCC,IAAwB,CAAC,GAC3BC,IAA0B;EAAE,MAAM;EAAQ,OAAO,CAAC;CAAE,GAElD,eAAqBH,EAAQ,QAAQ,oBAAoB,SAAS,KAAK,GAEvE,oBAA0B;EAC9B,OAAOE,EAAQ,SAAS,IAAG,EAAQ,MAAM,CAAC,EAAE,QAAQ;GAAE,MAAM;GAAM,OAAO,KAAA;EAAe,CAAC;CAC3F,GAEM,iBAAuB;EAC3B,AAAIC,EAAM,SAAS,WAEnB,IAAQ;GAAE,MAAM;GAAY,OAAOA,EAAM;EAAM,GAC/C,OAAO,GACP,YAAY;CACd,GAEM,QAAQ,MAA0B;EACtC,IAAIA,EAAM,SAAS,QAMnB,KAJA,IAAQ;GAAE,MAAM;GAAS,OAAOA,EAAM;GAAO;EAAO,GACpDF,EAAW,MAAM,GACjB,OAAO,GAEAC,EAAQ,SAAS,IAAG,EAAQ,MAAM,CAAC,EAAE,OAAOE,CAAM;CAC3D,GAEM,cAAoB;EACxB,KAAKC,EAAWL,EAAQ,QAAQ,yBAAyB,CAAC;CAC5D,GAEM,aAAmB;EAIvB,AAHAC,EAAW,MAAM,GACjB,OAAO,GACP,IAAQ,EAAE,MAAM,WAAW,GAC3B,YAAY;CACd,GAEMK,IAAwB;EAC5B;EACA,OAAO;EACP,KAAK,GAAO;GACV,IAAIH,EAAM,SAAS,QAAQ;GAE3B,IAAMI,IAASL,EAAQ,MAAM;GAE7B,AAAIK,IACFA,EAAO,QAAQ;IAAE,MAAM;IAAO;GAAM,CAAC,IAKnCJ,EAAM,MAAM,SAASH,EAAQ,WAC/BG,EAAM,MAAM,KAAKK,CAAK,IAKpBR,EAAQ,aAAa,iBACvBG,EAAM,MAAM,MAAM,GAClBA,EAAM,MAAM,KAAKK,CAAK,KACbR,EAAQ,aAAa,WAC9B,KAAK,IAAIS,EAAkBT,EAAQ,UAAU,yCAAyC,CAAC;EAE3F;CACF;CAOA,OALIA,EAAQ,QAAQ,UAAS,MAAM,IAC9BA,EAAQ,QAAQ,iBAAiB,SAAS,OAAO,EAAE,MAAM,GAAK,CAAC,GAEpEU,EAAO,UAAUJ,GAAU,EAAE,QAAQL,EAAW,OAAO,CAAC,GAEjD;EACL,OAAmC;GASjC,OARIE,EAAM,SAAS,aAAmB,QAAQ,QAAQ;IAAE,MAAM;IAAM,OAAO,KAAA;GAAe,CAAC,IAEvFA,EAAM,MAAM,SAAS,IAAU,QAAQ,QAAQ;IAAE,MAAM;IAAO,OAAOA,EAAM,MAAM,MAAM;GAAG,CAAC,IAE3FA,EAAM,SAAS,UAAgB,QAAQ,OAAOA,EAAM,MAAM,IAE1DA,EAAM,SAAS,aAAmB,QAAQ,QAAQ;IAAE,MAAM;IAAM,OAAO,KAAA;GAAe,CAAC,IAEpF,IAAI,SAA4B,GAAS,MAAWD,EAAQ,KAAK;IAAE;IAAQ;GAAQ,CAAC,CAAC;EAC9F;EACA,SAAqC;GAGnC,OAFA,KAAK,GAEE,QAAQ,QAAQ;IAAE,MAAM;IAAM,OAAO,KAAA;GAAe,CAAC;EAC9D;EACA,CAAC,OAAO,iBAA2C;GACjD,OAAO;EACT;CACF;AACF"}
package/dist/async.cjs CHANGED
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./_iterator.cjs");function toAsyncIterable(t,n){return{[Symbol.asyncIterator](){return e.toIterator(t,n)}}}exports.toAsyncIterable=toAsyncIterable;
1
+ const e=require("./_iterator.cjs");function toAsyncIterable(t,n){return{[Symbol.asyncIterator](){return e.toIterator(t,n)}}}exports.toAsyncIterable=toAsyncIterable;
2
2
  //# sourceMappingURL=async.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"async.cjs","names":["toIterator","require__iterator","source","options"],"sources":["../src/async.ts"],"sourcesContent":["import { toIterator } from './_iterator.js';\nimport type { AsyncIterableOptions, Stream } from './types.js';\n\n/** Converts a push stream into an async iterable with an explicit overflow policy. */\nexport function toAsyncIterable<T>(source: Stream<T>, options: AsyncIterableOptions): AsyncIterable<T> {\n return {\n [Symbol.asyncIterator](): AsyncIterableIterator<T> {\n return toIterator(source, options);\n },\n };\n}\n"],"mappings":"A,sGAIA,SAAgB,gBAAmB,EAAmB,EAAiD,CACrG,MAAO,CACL,CAAC,OAAO,gBAA2C,CACjD,OAAOA,EAAAA,WAAWE,EAAQC,CAAO,CACnC,CACF,CACF,C"}
1
+ {"version":3,"file":"async.cjs","names":["toIterator","require__iterator","source","options"],"sources":["../src/async.ts"],"sourcesContent":["import { toIterator } from './_iterator.js';\nimport type { AsyncIterableOptions, Stream } from './types.js';\n\n/** Converts a push stream into an async iterable with an explicit overflow policy. */\nexport function toAsyncIterable<T>(source: Stream<T>, options: AsyncIterableOptions): AsyncIterable<T> {\n return {\n [Symbol.asyncIterator](): AsyncIterableIterator<T> {\n return toIterator(source, options);\n },\n };\n}\n"],"mappings":"A,mCAIA,SAAgB,gBAAmB,EAAmB,EAAiD,CACrG,MAAO,CACL,CAAC,OAAO,gBAA2C,CACjD,OAAOA,EAAAA,WAAWE,EAAQC,CAAO,CACnC,CACF,CACF,C"}
package/dist/channel.cjs CHANGED
@@ -1,2 +1,2 @@
1
- const e=require("./_numeric.cjs"),t=require("./core.cjs");function replayCapacity(t){let n=`initial`in t,r=t.replay??+!!n;if(e.assertNonNegativeInteger(r,`Channel replay`),n&&r===0)throw RangeError(`Channel replay cannot be 0 when initial is provided: the initial value would be immediately dropped`);return r}function createChannel(e={}){let n=replayCapacity(e),r=new AbortController,i=new Set,a=[];`initial`in e&&n>0&&a.push(e.initial);let o=t.stream(e=>{if(r.signal.aborted)e.complete();else{for(let t of a)e.next(t);return i.add(e),()=>i.delete(e)}}),dispose=()=>{if(!r.signal.aborted){r.abort();for(let e of[...i])e.complete();i.clear(),a.length=0,c.length=0}},s=!1,c=[],flush=()=>{s=!0;try{for(;c.length>0;){let e=c.shift();n>0&&(a.length===n&&a.shift(),a.push(e));for(let t of[...i])t.next(e)}}finally{s=!1}};return{get disposalSignal(){return r.signal},dispose,get disposed(){return r.signal.aborted},send(e){r.signal.aborted||(c.push(e),s||flush())},stream:o,[Symbol.dispose]:dispose}}exports.createChannel=createChannel;
1
+ const e=require("./_numeric.cjs"),t=require("./core.cjs");function replayCapacity(t){let n=`initial`in t,r=t.replay??+!!n;if(e.assertNonNegativeInteger(r,`Channel replay`),n&&r===0)throw RangeError(`Channel replay cannot be 0 when initial is provided: the initial value would be immediately dropped`);return r}function createChannel(e={}){let n=replayCapacity(e),r=new AbortController,i=new Set,a=[];`initial`in e&&n>0&&a.push(e.initial);let o=!1,s=[],c=t.stream(e=>{if(r.signal.aborted)e.complete();else{for(let t of a)e.next(t);return i.add(e),()=>i.delete(e)}}),dispose=()=>{if(!r.signal.aborted){r.abort();for(let e of[...i])e.complete();i.clear(),a.length=0,s.length=0}},flush=()=>{o=!0;try{for(;s.length>0;){let e=s.shift();n>0&&(a.length===n&&a.shift(),a.push(e));for(let t of[...i])t.next(e)}}finally{o=!1}};return{get disposalSignal(){return r.signal},dispose,get disposed(){return r.signal.aborted},send(e){r.signal.aborted||(s.push(e),o||flush())},stream:c,[Symbol.dispose]:dispose}}exports.createChannel=createChannel;
2
2
  //# sourceMappingURL=channel.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"channel.cjs","names":["stream","require__numeric","require_core","hasInitial","options","capacity","controller","listeners","replay","source","sink","value","listener","dispatching","pending"],"sources":["../src/channel.ts"],"sourcesContent":["import { assertNonNegativeInteger } from './_numeric.js';\nimport { stream } from './core.js';\nimport type { Sink, Stream } from './types.js';\n\nexport type ChannelOptions<T> = {\n initial?: T;\n replay?: number;\n};\n\nexport type Channel<T> = {\n [Symbol.dispose](): void;\n readonly disposalSignal: AbortSignal;\n dispose(): void;\n readonly disposed: boolean;\n send(value: T): void;\n readonly stream: Stream<T>;\n};\n\nfunction replayCapacity<T>(options: ChannelOptions<T>): number {\n const hasInitial = 'initial' in options;\n const capacity = options.replay ?? (hasInitial ? 1 : 0);\n\n assertNonNegativeInteger(capacity, 'Channel replay');\n\n if (hasInitial && capacity === 0) {\n throw new RangeError(\n 'Channel replay cannot be 0 when initial is provided: the initial value would be immediately dropped',\n );\n }\n\n return capacity;\n}\n\n/** Channels own mutable multicast state; disposal is their only terminal event. */\nexport function createChannel<T>(options: ChannelOptions<T> = {}): Channel<T> {\n const capacity = replayCapacity(options);\n const controller = new AbortController();\n const listeners = new Set<Sink<T>>();\n const replay: T[] = [];\n\n if ('initial' in options && capacity > 0) replay.push(options.initial as T);\n\n const source = stream<T>((sink) => {\n // Disposed channels complete new subscribers immediately without replaying\n // retained values: a late subscriber never observes stale state.\n if (controller.signal.aborted) {\n sink.complete();\n\n return;\n }\n\n for (const value of replay) sink.next(value);\n\n listeners.add(sink);\n\n return () => listeners.delete(sink);\n });\n\n const dispose = (): void => {\n if (controller.signal.aborted) return;\n\n controller.abort();\n\n for (const listener of [...listeners]) listener.complete();\n\n listeners.clear();\n replay.length = 0;\n pending.length = 0;\n };\n\n let dispatching = false;\n const pending: T[] = [];\n\n const flush = (): void => {\n dispatching = true;\n\n try {\n while (pending.length > 0) {\n const value = pending.shift()!;\n\n if (capacity > 0) {\n if (replay.length === capacity) replay.shift();\n\n replay.push(value);\n }\n\n for (const listener of [...listeners]) listener.next(value);\n }\n } finally {\n dispatching = false;\n }\n };\n\n return {\n get disposalSignal(): AbortSignal {\n return controller.signal;\n },\n dispose,\n get disposed(): boolean {\n return controller.signal.aborted;\n },\n send(value: T): void {\n if (controller.signal.aborted) return;\n\n pending.push(value);\n\n // Reentrant sends (a listener calling `send` while receiving a previous\n // value) are queued so every listener observes one global FIFO order.\n if (!dispatching) flush();\n },\n stream: source,\n [Symbol.dispose]: dispose,\n };\n}\n"],"mappings":"A,0DAkBA,SAAS,eAAkB,EAAoC,CAC7D,IAAMG,EAAa,YAAaC,EAC1BC,EAAWD,EAAQ,QAAW,KAIpC,GAFAH,EAAA,yBAAyBI,EAAU,gBAAgB,EAE/CF,GAAcE,IAAa,EAC7B,MAAU,WACR,qGACF,EAGF,OAAOA,CACT,CAGA,SAAgB,cAAiB,EAA6B,CAAC,EAAe,CAC5E,IAAMA,EAAW,eAAeD,CAAO,EACjCE,EAAa,IAAI,gBACjBC,EAAY,IAAI,IAChBC,EAAc,CAAC,EAEjB,YAAaJ,GAAWC,EAAW,GAAGG,EAAO,KAAKJ,EAAQ,OAAY,EAE1E,IAAMK,EAAST,EAAAA,OAAW,GAAS,CAGjC,GAAIM,EAAW,OAAO,QACpBI,EAAK,SAAS,MAKhB,KAAK,IAAMC,KAASH,EAAQE,EAAK,KAAKC,CAAK,EAI3C,OAFAJ,EAAU,IAAIG,CAAI,MAELH,EAAU,OAAOG,CAAI,CAJS,CAK7C,CAAC,EAEK,YAAsB,CAC1B,GAAI,GAAW,OAAO,QAEtB,GAAW,MAAM,EAEjB,IAAK,IAAME,IAAY,CAAC,GAAGL,CAAS,EAAGK,EAAS,SAAS,EAEzDL,EAAU,MAAM,EAChB,EAAO,OAAS,EAChB,EAAQ,OAAS,CANA,CAOnB,EAEIM,EAAc,GACZC,EAAe,CAAC,EAEhB,UAAoB,CACxB,EAAc,GAEd,GAAI,CACF,KAAOA,EAAQ,OAAS,GAAG,CACzB,IAAMH,EAAQG,EAAQ,MAAM,EAExBT,EAAW,IACTG,EAAO,SAAWH,GAAUG,EAAO,MAAM,EAE7CA,EAAO,KAAKG,CAAK,GAGnB,IAAK,IAAMC,IAAY,CAAC,GAAGL,CAAS,EAAGK,EAAS,KAAKD,CAAK,CAC5D,CACF,QAAU,CACR,EAAc,EAChB,CACF,EAEA,MAAO,CACL,IAAI,gBAA8B,CAChC,OAAOL,EAAW,MACpB,EACA,QACA,IAAI,UAAoB,CACtB,OAAOA,EAAW,OAAO,OAC3B,EACA,KAAK,EAAgB,CACfA,EAAW,OAAO,UAEtBQ,EAAQ,KAAKH,CAAK,EAIbE,GAAa,MAAM,EAC1B,EACA,OAAQJ,GACP,OAAO,SAAU,OACpB,CACF,C"}
1
+ {"version":3,"file":"channel.cjs","names":["stream","require__numeric","require_core","hasInitial","options","capacity","controller","listeners","replay","dispatching","pending","source","sink","value","listener"],"sources":["../src/channel.ts"],"sourcesContent":["import { assertNonNegativeInteger } from './_numeric.js';\nimport { stream } from './core.js';\nimport type { Sink, Stream } from './types.js';\n\nexport type ChannelOptions<T> = {\n initial?: T;\n replay?: number;\n};\n\nexport type Channel<T> = {\n [Symbol.dispose](): void;\n readonly disposalSignal: AbortSignal;\n dispose(): void;\n readonly disposed: boolean;\n send(value: T): void;\n readonly stream: Stream<T>;\n};\n\nfunction replayCapacity<T>(options: ChannelOptions<T>): number {\n const hasInitial = 'initial' in options;\n const capacity = options.replay ?? (hasInitial ? 1 : 0);\n\n assertNonNegativeInteger(capacity, 'Channel replay');\n\n if (hasInitial && capacity === 0) {\n throw new RangeError(\n 'Channel replay cannot be 0 when initial is provided: the initial value would be immediately dropped',\n );\n }\n\n return capacity;\n}\n\n/** Channels own mutable multicast state; disposal is their only terminal event. */\nexport function createChannel<T>(options: ChannelOptions<T> = {}): Channel<T> {\n const capacity = replayCapacity(options);\n const controller = new AbortController();\n const listeners = new Set<Sink<T>>();\n const replay: T[] = [];\n\n if ('initial' in options && capacity > 0) replay.push(options.initial as T);\n\n // Reentrant sends (a listener calling `send` while receiving a previous\n // value) are queued so every listener observes one global FIFO order.\n let dispatching = false;\n const pending: T[] = [];\n\n const source = stream<T>((sink) => {\n // Disposed channels complete new subscribers immediately without replaying\n // retained values: a late subscriber never observes stale state.\n if (controller.signal.aborted) {\n sink.complete();\n\n return;\n }\n\n for (const value of replay) sink.next(value);\n\n listeners.add(sink);\n\n return () => listeners.delete(sink);\n });\n\n const dispose = (): void => {\n if (controller.signal.aborted) return;\n\n controller.abort();\n\n for (const listener of [...listeners]) listener.complete();\n\n listeners.clear();\n replay.length = 0;\n pending.length = 0;\n };\n\n const flush = (): void => {\n dispatching = true;\n\n try {\n while (pending.length > 0) {\n const value = pending.shift()!;\n\n if (capacity > 0) {\n if (replay.length === capacity) replay.shift();\n\n replay.push(value);\n }\n\n for (const listener of [...listeners]) listener.next(value);\n }\n } finally {\n dispatching = false;\n }\n };\n\n return {\n get disposalSignal(): AbortSignal {\n return controller.signal;\n },\n dispose,\n get disposed(): boolean {\n return controller.signal.aborted;\n },\n send(value: T): void {\n if (controller.signal.aborted) return;\n\n pending.push(value);\n\n if (!dispatching) flush();\n },\n stream: source,\n [Symbol.dispose]: dispose,\n };\n}\n"],"mappings":"A,0DAkBA,SAAS,eAAkB,EAAoC,CAC7D,IAAMG,EAAa,YAAaC,EAC1BC,EAAWD,EAAQ,QAAW,KAIpC,GAFAH,EAAA,yBAAyBI,EAAU,gBAAgB,EAE/CF,GAAcE,IAAa,EAC7B,MAAU,WACR,qGACF,EAGF,OAAOA,CACT,CAGA,SAAgB,cAAiB,EAA6B,CAAC,EAAe,CAC5E,IAAMA,EAAW,eAAeD,CAAO,EACjCE,EAAa,IAAI,gBACjBC,EAAY,IAAI,IAChBC,EAAc,CAAC,EAEjB,YAAaJ,GAAWC,EAAW,GAAGG,EAAO,KAAKJ,EAAQ,OAAY,EAI1E,IAAIK,EAAc,GACZC,EAAe,CAAC,EAEhBC,EAASX,EAAAA,OAAW,GAAS,CAGjC,GAAIM,EAAW,OAAO,QACpBM,EAAK,SAAS,MAKhB,KAAK,IAAMC,KAASL,EAAQI,EAAK,KAAKC,CAAK,EAI3C,OAFAN,EAAU,IAAIK,CAAI,MAELL,EAAU,OAAOK,CAAI,CAJS,CAK7C,CAAC,EAEK,YAAsB,CAC1B,GAAI,GAAW,OAAO,QAEtB,GAAW,MAAM,EAEjB,IAAK,IAAME,IAAY,CAAC,GAAGP,CAAS,EAAGO,EAAS,SAAS,EAEzDP,EAAU,MAAM,EAChB,EAAO,OAAS,EAChB,EAAQ,OAAS,CANA,CAOnB,EAEM,UAAoB,CACxB,EAAc,GAEd,GAAI,CACF,KAAOG,EAAQ,OAAS,GAAG,CACzB,IAAMG,EAAQH,EAAQ,MAAM,EAExBL,EAAW,IACTG,EAAO,SAAWH,GAAUG,EAAO,MAAM,EAE7CA,EAAO,KAAKK,CAAK,GAGnB,IAAK,IAAMC,IAAY,CAAC,GAAGP,CAAS,EAAGO,EAAS,KAAKD,CAAK,CAC5D,CACF,QAAU,CACR,EAAc,EAChB,CACF,EAEA,MAAO,CACL,IAAI,gBAA8B,CAChC,OAAOP,EAAW,MACpB,EACA,QACA,IAAI,UAAoB,CACtB,OAAOA,EAAW,OAAO,OAC3B,EACA,KAAK,EAAgB,CACfA,EAAW,OAAO,UAEtBI,EAAQ,KAAKG,CAAK,EAEbJ,GAAa,MAAM,EAC1B,EACA,OAAQE,GACP,OAAO,SAAU,OACpB,CACF,C"}
package/dist/channel.js CHANGED
@@ -9,7 +9,7 @@ function replayCapacity(t) {
9
9
  function createChannel(e = {}) {
10
10
  let n = replayCapacity(e), r = new AbortController(), i = /* @__PURE__ */ new Set(), a = [];
11
11
  "initial" in e && n > 0 && a.push(e.initial);
12
- let o = t((e) => {
12
+ let o = !1, s = [], c = t((e) => {
13
13
  if (r.signal.aborted) e.complete();
14
14
  else {
15
15
  for (let t of a) e.next(t);
@@ -19,18 +19,18 @@ function createChannel(e = {}) {
19
19
  if (!r.signal.aborted) {
20
20
  r.abort();
21
21
  for (let e of [...i]) e.complete();
22
- i.clear(), a.length = 0, c.length = 0;
22
+ i.clear(), a.length = 0, s.length = 0;
23
23
  }
24
- }, s = !1, c = [], flush = () => {
25
- s = !0;
24
+ }, flush = () => {
25
+ o = !0;
26
26
  try {
27
- for (; c.length > 0;) {
28
- let e = c.shift();
27
+ for (; s.length > 0;) {
28
+ let e = s.shift();
29
29
  n > 0 && (a.length === n && a.shift(), a.push(e));
30
30
  for (let t of [...i]) t.next(e);
31
31
  }
32
32
  } finally {
33
- s = !1;
33
+ o = !1;
34
34
  }
35
35
  };
36
36
  return {
@@ -42,9 +42,9 @@ function createChannel(e = {}) {
42
42
  return r.signal.aborted;
43
43
  },
44
44
  send(e) {
45
- r.signal.aborted || (c.push(e), s || flush());
45
+ r.signal.aborted || (s.push(e), o || flush());
46
46
  },
47
- stream: o,
47
+ stream: c,
48
48
  [Symbol.dispose]: dispose
49
49
  };
50
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"channel.js","names":["hasInitial","options","capacity","assertNonNegativeInteger","controller","listeners","replay","source","stream","value","sink","listener","dispatching","pending"],"sources":["../src/channel.ts"],"sourcesContent":["import { assertNonNegativeInteger } from './_numeric.js';\nimport { stream } from './core.js';\nimport type { Sink, Stream } from './types.js';\n\nexport type ChannelOptions<T> = {\n initial?: T;\n replay?: number;\n};\n\nexport type Channel<T> = {\n [Symbol.dispose](): void;\n readonly disposalSignal: AbortSignal;\n dispose(): void;\n readonly disposed: boolean;\n send(value: T): void;\n readonly stream: Stream<T>;\n};\n\nfunction replayCapacity<T>(options: ChannelOptions<T>): number {\n const hasInitial = 'initial' in options;\n const capacity = options.replay ?? (hasInitial ? 1 : 0);\n\n assertNonNegativeInteger(capacity, 'Channel replay');\n\n if (hasInitial && capacity === 0) {\n throw new RangeError(\n 'Channel replay cannot be 0 when initial is provided: the initial value would be immediately dropped',\n );\n }\n\n return capacity;\n}\n\n/** Channels own mutable multicast state; disposal is their only terminal event. */\nexport function createChannel<T>(options: ChannelOptions<T> = {}): Channel<T> {\n const capacity = replayCapacity(options);\n const controller = new AbortController();\n const listeners = new Set<Sink<T>>();\n const replay: T[] = [];\n\n if ('initial' in options && capacity > 0) replay.push(options.initial as T);\n\n const source = stream<T>((sink) => {\n // Disposed channels complete new subscribers immediately without replaying\n // retained values: a late subscriber never observes stale state.\n if (controller.signal.aborted) {\n sink.complete();\n\n return;\n }\n\n for (const value of replay) sink.next(value);\n\n listeners.add(sink);\n\n return () => listeners.delete(sink);\n });\n\n const dispose = (): void => {\n if (controller.signal.aborted) return;\n\n controller.abort();\n\n for (const listener of [...listeners]) listener.complete();\n\n listeners.clear();\n replay.length = 0;\n pending.length = 0;\n };\n\n let dispatching = false;\n const pending: T[] = [];\n\n const flush = (): void => {\n dispatching = true;\n\n try {\n while (pending.length > 0) {\n const value = pending.shift()!;\n\n if (capacity > 0) {\n if (replay.length === capacity) replay.shift();\n\n replay.push(value);\n }\n\n for (const listener of [...listeners]) listener.next(value);\n }\n } finally {\n dispatching = false;\n }\n };\n\n return {\n get disposalSignal(): AbortSignal {\n return controller.signal;\n },\n dispose,\n get disposed(): boolean {\n return controller.signal.aborted;\n },\n send(value: T): void {\n if (controller.signal.aborted) return;\n\n pending.push(value);\n\n // Reentrant sends (a listener calling `send` while receiving a previous\n // value) are queued so every listener observes one global FIFO order.\n if (!dispatching) flush();\n },\n stream: source,\n [Symbol.dispose]: dispose,\n };\n}\n"],"mappings":";;;AAkBA,SAAS,eAAkB,GAAoC;CAC7D,IAAMA,IAAa,aAAaC,GAC1BC,IAAWD,EAAQ,UAAW;CAIpC,IAFAE,EAAyBD,GAAU,gBAAgB,GAE/CF,KAAcE,MAAa,GAC7B,MAAU,WACR,qGACF;CAGF,OAAOA;AACT;AAGA,SAAgB,cAAiB,IAA6B,CAAC,GAAe;CAC5E,IAAMA,IAAW,eAAeD,CAAO,GACjCG,IAAa,IAAI,gBAAgB,GACjCC,oBAAY,IAAI,IAAa,GAC7BC,IAAc,CAAC;CAErB,AAAI,aAAaL,KAAWC,IAAW,KAAGI,EAAO,KAAKL,EAAQ,OAAY;CAE1E,IAAMM,IAASC,GAAW,MAAS;EAGjC,IAAIJ,EAAW,OAAO,SACpB,EAAK,SAAS;OAKhB;QAAK,IAAMK,KAASH,GAAQ,EAAK,KAAKG,CAAK;GAI3C,OAFAJ,EAAU,IAAIK,CAAI,SAELL,EAAU,OAAOK,CAAI;EAJS;CAK7C,CAAC,GAEK,gBAAsB;EAC1B,IAAI,GAAW,OAAO,SAEtB;KAAW,MAAM;GAEjB,KAAK,IAAMC,KAAY,CAAC,GAAGN,CAAS,GAAG,EAAS,SAAS;GAIzD,AAFAA,EAAU,MAAM,GAChB,EAAO,SAAS,GAChB,EAAQ,SAAS;EANA;CAOnB,GAEIO,IAAc,IACZC,IAAe,CAAC,GAEhB,cAAoB;EACxB,IAAc;EAEd,IAAI;GACF,OAAOA,EAAQ,SAAS,IAAG;IACzB,IAAMJ,IAAQI,EAAQ,MAAM;IAE5B,AAAIX,IAAW,MACTI,EAAO,WAAWJ,KAAUI,EAAO,MAAM,GAE7CA,EAAO,KAAKG,CAAK;IAGnB,KAAK,IAAME,KAAY,CAAC,GAAGN,CAAS,GAAG,EAAS,KAAKI,CAAK;GAC5D;EACF,UAAU;GACR,IAAc;EAChB;CACF;CAEA,OAAO;EACL,IAAI,iBAA8B;GAChC,OAAOL,EAAW;EACpB;EACA;EACA,IAAI,WAAoB;GACtB,OAAOA,EAAW,OAAO;EAC3B;EACA,KAAK,GAAgB;GACnB,AAAIA,EAAW,OAAO,YAEtBS,EAAQ,KAAKJ,CAAK,GAIbG,KAAa,MAAM;EAC1B;EACA,QAAQL;GACP,OAAO,UAAU;CACpB;AACF"}
1
+ {"version":3,"file":"channel.js","names":["hasInitial","options","capacity","assertNonNegativeInteger","controller","listeners","replay","dispatching","pending","source","stream","value","sink","listener"],"sources":["../src/channel.ts"],"sourcesContent":["import { assertNonNegativeInteger } from './_numeric.js';\nimport { stream } from './core.js';\nimport type { Sink, Stream } from './types.js';\n\nexport type ChannelOptions<T> = {\n initial?: T;\n replay?: number;\n};\n\nexport type Channel<T> = {\n [Symbol.dispose](): void;\n readonly disposalSignal: AbortSignal;\n dispose(): void;\n readonly disposed: boolean;\n send(value: T): void;\n readonly stream: Stream<T>;\n};\n\nfunction replayCapacity<T>(options: ChannelOptions<T>): number {\n const hasInitial = 'initial' in options;\n const capacity = options.replay ?? (hasInitial ? 1 : 0);\n\n assertNonNegativeInteger(capacity, 'Channel replay');\n\n if (hasInitial && capacity === 0) {\n throw new RangeError(\n 'Channel replay cannot be 0 when initial is provided: the initial value would be immediately dropped',\n );\n }\n\n return capacity;\n}\n\n/** Channels own mutable multicast state; disposal is their only terminal event. */\nexport function createChannel<T>(options: ChannelOptions<T> = {}): Channel<T> {\n const capacity = replayCapacity(options);\n const controller = new AbortController();\n const listeners = new Set<Sink<T>>();\n const replay: T[] = [];\n\n if ('initial' in options && capacity > 0) replay.push(options.initial as T);\n\n // Reentrant sends (a listener calling `send` while receiving a previous\n // value) are queued so every listener observes one global FIFO order.\n let dispatching = false;\n const pending: T[] = [];\n\n const source = stream<T>((sink) => {\n // Disposed channels complete new subscribers immediately without replaying\n // retained values: a late subscriber never observes stale state.\n if (controller.signal.aborted) {\n sink.complete();\n\n return;\n }\n\n for (const value of replay) sink.next(value);\n\n listeners.add(sink);\n\n return () => listeners.delete(sink);\n });\n\n const dispose = (): void => {\n if (controller.signal.aborted) return;\n\n controller.abort();\n\n for (const listener of [...listeners]) listener.complete();\n\n listeners.clear();\n replay.length = 0;\n pending.length = 0;\n };\n\n const flush = (): void => {\n dispatching = true;\n\n try {\n while (pending.length > 0) {\n const value = pending.shift()!;\n\n if (capacity > 0) {\n if (replay.length === capacity) replay.shift();\n\n replay.push(value);\n }\n\n for (const listener of [...listeners]) listener.next(value);\n }\n } finally {\n dispatching = false;\n }\n };\n\n return {\n get disposalSignal(): AbortSignal {\n return controller.signal;\n },\n dispose,\n get disposed(): boolean {\n return controller.signal.aborted;\n },\n send(value: T): void {\n if (controller.signal.aborted) return;\n\n pending.push(value);\n\n if (!dispatching) flush();\n },\n stream: source,\n [Symbol.dispose]: dispose,\n };\n}\n"],"mappings":";;;AAkBA,SAAS,eAAkB,GAAoC;CAC7D,IAAMA,IAAa,aAAaC,GAC1BC,IAAWD,EAAQ,UAAW;CAIpC,IAFAE,EAAyBD,GAAU,gBAAgB,GAE/CF,KAAcE,MAAa,GAC7B,MAAU,WACR,qGACF;CAGF,OAAOA;AACT;AAGA,SAAgB,cAAiB,IAA6B,CAAC,GAAe;CAC5E,IAAMA,IAAW,eAAeD,CAAO,GACjCG,IAAa,IAAI,gBAAgB,GACjCC,oBAAY,IAAI,IAAa,GAC7BC,IAAc,CAAC;CAErB,AAAI,aAAaL,KAAWC,IAAW,KAAGI,EAAO,KAAKL,EAAQ,OAAY;CAI1E,IAAIM,IAAc,IACZC,IAAe,CAAC,GAEhBC,IAASC,GAAW,MAAS;EAGjC,IAAIN,EAAW,OAAO,SACpB,EAAK,SAAS;OAKhB;QAAK,IAAMO,KAASL,GAAQ,EAAK,KAAKK,CAAK;GAI3C,OAFAN,EAAU,IAAIO,CAAI,SAELP,EAAU,OAAOO,CAAI;EAJS;CAK7C,CAAC,GAEK,gBAAsB;EAC1B,IAAI,GAAW,OAAO,SAEtB;KAAW,MAAM;GAEjB,KAAK,IAAMC,KAAY,CAAC,GAAGR,CAAS,GAAG,EAAS,SAAS;GAIzD,AAFAA,EAAU,MAAM,GAChB,EAAO,SAAS,GAChB,EAAQ,SAAS;EANA;CAOnB,GAEM,cAAoB;EACxB,IAAc;EAEd,IAAI;GACF,OAAOG,EAAQ,SAAS,IAAG;IACzB,IAAMG,IAAQH,EAAQ,MAAM;IAE5B,AAAIN,IAAW,MACTI,EAAO,WAAWJ,KAAUI,EAAO,MAAM,GAE7CA,EAAO,KAAKK,CAAK;IAGnB,KAAK,IAAME,KAAY,CAAC,GAAGR,CAAS,GAAG,EAAS,KAAKM,CAAK;GAC5D;EACF,UAAU;GACR,IAAc;EAChB;CACF;CAEA,OAAO;EACL,IAAI,iBAA8B;GAChC,OAAOP,EAAW;EACpB;EACA;EACA,IAAI,WAAoB;GACtB,OAAOA,EAAW,OAAO;EAC3B;EACA,KAAK,GAAgB;GACnB,AAAIA,EAAW,OAAO,YAEtBI,EAAQ,KAAKG,CAAK,GAEbJ,KAAa,MAAM;EAC1B;EACA,QAAQE;GACP,OAAO,UAAU;CACpB;AACF"}
package/dist/flux.cjs CHANGED
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});function abortError(e,t=`Aborted`){return e?.reason??new DOMException(t,`AbortError`)}function assertNonNegativeInteger(e,t){if(!Number.isInteger(e)||e<0)throw RangeError(`${t} must be a non-negative integer`)}function assertPositiveInteger(e,t){if(!Number.isInteger(e)||e<1)throw RangeError(`${t} must be a positive integer`)}function assertDuration(e,t){if(!Number.isFinite(e)||e<0||e>2147483647)throw RangeError(`${t} must be between 0 and 2147483647 milliseconds`)}var FluxError=class extends Error{constructor(e,t){super(e,t),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}},FluxTimeoutError=class extends FluxError{ms;constructor(e){super(`Timeout after ${e}ms`),this.ms=e}},FluxEmptyError=class extends FluxError{constructor(e=`Stream completed without emitting any value`){super(e)}},FluxCapacityError=class extends FluxError{capacity;constructor(e,t){super(t),this.capacity=e}};function toIterator(e,t){if(assertPositiveInteger(t.capacity,`Async iterable capacity`),t.overflow!==`drop-newest`&&t.overflow!==`drop-oldest`&&t.overflow!==`error`)throw RangeError(`Async iterable overflow must be "drop-newest", "drop-oldest", or "error"`);let n=new AbortController,r=[],i={kind:`open`,queue:[]},detach=()=>t.signal?.removeEventListener(`abort`,abort),resolveDone=()=>{for(;r.length>0;)r.shift()?.resolve({done:!0,value:void 0})},complete=()=>{i.kind===`open`&&(i.kind=`complete`,detach(),resolveDone())},fail=e=>{if(i.kind===`open`)for(i={kind:`error`,queue:i.queue,reason:e},n.abort(),detach();r.length>0;)r.shift()?.reject(e)},abort=()=>{fail(abortError(t.signal,`Async iteration aborted`))},stop=()=>{n.abort(),detach(),i={kind:`returned`},resolveDone()},a={complete,error:fail,next(e){if(i.kind!==`open`)return;let n=r.shift();n?n.resolve({done:!1,value:e}):i.queue.length<t.capacity?i.queue.push(e):t.overflow===`drop-oldest`?(i.queue.shift(),i.queue.push(e)):t.overflow===`error`&&fail(new FluxCapacityError(t.capacity,`Async iterable buffer capacity exceeded`))}};return t.signal?.aborted?abort():t.signal?.addEventListener(`abort`,abort,{once:!0}),e.subscribe(a,{signal:n.signal}),{next(){return i.kind===`returned`?Promise.resolve({done:!0,value:void 0}):i.queue.length>0?Promise.resolve({done:!1,value:i.queue.shift()}):i.kind===`error`?Promise.reject(i.reason):i.kind===`complete`?Promise.resolve({done:!0,value:void 0}):new Promise((e,t)=>r.push({reject:t,resolve:e}))},return(){return stop(),Promise.resolve({done:!0,value:void 0})},[Symbol.asyncIterator](){return this}}}function toAsyncIterable(e,t){return{[Symbol.asyncIterator](){return toIterator(e,t)}}}function reportUnhandledError(e){let t=globalThis.reportError;t?t(e):queueMicrotask(()=>{throw e})}function createSubscription(e,t){let n=typeof e==`function`?{next:e}:e,r=new AbortController,i=!1,a,unsubscribe=()=>{if(!i){i=!0,r.abort(),t?.removeEventListener(`abort`,unsubscribe);try{a?.()}catch(e){reportUnhandledError(e)}}},o={complete(){if(!i){try{n.complete?.()}catch(e){reportUnhandledError(e)}unsubscribe()}},error(e){if(!i){if(n.error)try{n.error(e)}catch(e){reportUnhandledError(e)}else reportUnhandledError(e);unsubscribe()}},next(e){if(!i)try{n.next(e)}catch(e){unsubscribe(),reportUnhandledError(e)}}},add=e=>{if(e){if(i)try{e()}catch(e){reportUnhandledError(e)}else a=e}};return t?.aborted?unsubscribe():t?.addEventListener(`abort`,unsubscribe,{once:!0}),{add,signal:r.signal,sink:o,subscription:{get closed(){return i},[Symbol.dispose]:unsubscribe,unsubscribe}}}function stream(e){return{subscribe(t,n){let r=createSubscription(t,n?.signal);if(r.subscription.closed)return r.subscription;try{r.add(e(r.sink,r.signal))}catch(e){r.sink.error(e)}return r.subscription}}}function fromSubscribe(e){return stream(t=>e(t.next))}function fromStore(e){return stream((t,n)=>{let r;try{if(r=e.getSnapshot(),t.next(r),n.aborted)return}catch(e){t.error(e);return}let i=e.subscribe(()=>{try{r=e.getSnapshot(),t.next(r)}catch(e){t.error(e)}});if(n.aborted)return i;try{let n=e.getSnapshot();Object.is(r,n)||t.next(n)}catch(e){t.error(e)}return i})}function replayCapacity(e){let t=`initial`in e,n=e.replay??+!!t;if(assertNonNegativeInteger(n,`Channel replay`),t&&n===0)throw RangeError(`Channel replay cannot be 0 when initial is provided: the initial value would be immediately dropped`);return n}function createChannel(e={}){let t=replayCapacity(e),n=new AbortController,r=new Set,i=[];`initial`in e&&t>0&&i.push(e.initial);let a=stream(e=>{if(n.signal.aborted)e.complete();else{for(let t of i)e.next(t);return r.add(e),()=>r.delete(e)}}),dispose=()=>{if(!n.signal.aborted){n.abort();for(let e of[...r])e.complete();r.clear(),i.length=0,s.length=0}},o=!1,s=[],flush=()=>{o=!0;try{for(;s.length>0;){let e=s.shift();t>0&&(i.length===t&&i.shift(),i.push(e));for(let t of[...r])t.next(e)}}finally{o=!1}};return{get disposalSignal(){return n.signal},dispose,get disposed(){return n.signal.aborted},send(e){n.signal.aborted||(s.push(e),o||flush())},stream:a,[Symbol.dispose]:dispose}}function link(e,t,n){return e.subscribe(t,{signal:n})}function merge(...e){return stream((t,n)=>{if(e.length===0){t.complete();return}let r=0,i=[];for(let a of e){let o=link(a,{complete(){r++,r===e.length&&t.complete()},error:t.error,next:t.next},n);if(i.push(o),n.aborted)break}return()=>i.forEach(e=>{e.unsubscribe()})})}function concat(...e){return stream((t,n)=>{let r=!1,i,a=0,o=!1,subscribeNext=()=>{if(!n.aborted){if(r)o=!0;else{r=!0;try{do{o=!1;let r=e[a++];if(!r){t.complete();return}let s=link(r,{complete(){i=void 0,subscribeNext()},error:t.error,next:t.next},n);i=s.closed?void 0:s}while(o&&!n.aborted)}finally{r=!1}}}};return subscribeNext(),()=>i?.unsubscribe()})}function combineLatest(...e){return stream((t,n)=>{if(e.length===0){t.complete();return}let r=Array(e.length),i=Array(e.length).fill(!1),a=[],o=0;for(let[s,c]of e.entries()){if(n.aborted)break;let l=link(c,{complete(){i[s]?(o++,o===e.length&&t.complete()):t.complete()},error:t.error,next(e){r[s]=e,i[s]=!0,i.every(Boolean)&&t.next([...r])}},n);a.push(l)}return()=>a.forEach(e=>{e.unsubscribe()})})}var e={delay(e,t){let n=setTimeout(e,t);return()=>clearTimeout(n)},repeat(e,t){let n=setInterval(e,t);return()=>clearInterval(n)}};function of(...e){return stream(t=>{for(let n of e)t.next(n);t.complete()})}function from(e){return Symbol.asyncIterator in Object(e)?stream((t,n)=>{let r=e[Symbol.asyncIterator]();return(async()=>{try{for(;!n.aborted;){let e=await r.next();if(e.done){t.complete();return}t.next(e.value)}}catch(e){n.aborted||t.error(e)}})(),()=>{try{let e=r.return?.();e&&e.catch(reportUnhandledError)}catch(e){reportUnhandledError(e)}}}):typeof e.then==`function`?stream((t,n)=>{e.then(e=>{n.aborted||(t.next(e),t.complete())},e=>{n.aborted||t.error(e)})}):stream((t,n)=>{let r=e[Symbol.iterator]();try{for(;!n.aborted;){let e=r.next();if(e.done){t.complete();return}t.next(e.value)}}catch(e){t.error(e)}return()=>{r.return?.()}})}function fromEvent(e,t){return stream(n=>{let listener=e=>n.next(e);return e.addEventListener(t,listener),()=>e.removeEventListener(t,listener)})}function interval(t){return assertDuration(t,`Interval duration`),stream(n=>{let r=0;return e.repeat(()=>n.next(r++),t)})}function timer(t){return assertDuration(t.delay,`Timer delay`),t.interval!==void 0&&assertDuration(t.interval,`Timer interval`),stream(n=>{let r=0,i,a=e.delay(()=>{n.next(r++),t.interval===void 0?n.complete():i=e.repeat(()=>n.next(r++),t.interval)},t.delay);return()=>{a(),i?.()}})}function take(e){return assertNonNegativeInteger(e,`take count`),t=>stream((n,r)=>{if(e===0){n.complete();return}let i=0,a={};return a.current=link(t,{complete:n.complete,error:n.error,next(t){n.next(t),i++,i===e&&(n.complete(),a.current?.unsubscribe())}},r),()=>a.current?.unsubscribe()})}function isAbortSignal(e){return typeof e.aborted==`boolean`&&typeof e.addEventListener==`function`&&typeof e.removeEventListener==`function`}function takeUntil(e){return t=>stream((n,r)=>{let i,a,removeNotifier=()=>{},complete=()=>{i?.unsubscribe(),a?.unsubscribe(),n.complete()};if(isAbortSignal(e)){if(e.aborted){n.complete();return}e.addEventListener(`abort`,complete,{once:!0}),removeNotifier=()=>e.removeEventListener(`abort`,complete)}else a=link(e,{error:n.error,next:complete},r);return r.aborted||(i=link(t,{complete:n.complete,error:n.error,next:n.next},r)),()=>{removeNotifier(),i?.unsubscribe(),a?.unsubscribe()}})}function debounce(t){return assertDuration(t,`Debounce duration`),n=>stream((r,i)=>{let a,o,s=!1,flush=()=>{a=void 0,s&&(s=!1,r.next(o))},c=link(n,{complete(){a?.(),flush(),r.complete()},error:r.error,next(n){o=n,s=!0,a?.(),a=e.delay(flush,t)}},i);return()=>{a?.(),c.unsubscribe()}})}function timeout(t){return assertDuration(t,`Timeout duration`),n=>stream((r,i)=>{let a,start=()=>{a=e.delay(()=>r.error(new FluxTimeoutError(t)),t)};start();let o=link(n,{complete(){a(),r.complete()},error(e){a(),r.error(e)},next(e){a(),start(),r.next(e)}},i);return()=>{a(),o.unsubscribe()}})}function tryCall(e,t){try{e()}catch(e){t(e)}}function map(e){return t=>stream((n,r)=>link(t,{complete:n.complete,error:n.error,next(t){tryCall(()=>n.next(e(t)),n.error)}},r).unsubscribe)}function filter(e){return t=>stream((n,r)=>link(t,{complete:n.complete,error:n.error,next(t){tryCall(()=>{e(t)&&n.next(t)},n.error)}},r).unsubscribe)}function scan(e,t){return n=>stream((r,i)=>{let a=t;return link(n,{complete:r.complete,error:r.error,next(t){tryCall(()=>{a=e(a,t),r.next(a)},r.error)}},i).unsubscribe})}function switchMap(e){return t=>stream((n,r)=>{let i=!1,a,finish=()=>{i&&!a&&n.complete()},o=link(t,{complete(){i=!0,finish()},error:n.error,next(t){a?.unsubscribe(),a=void 0,tryCall(()=>{let i=link(e(t),{complete(){a=void 0,finish()},error:n.error,next:n.next},r);a=i.closed?void 0:i},n.error)}},r);return()=>{o.unsubscribe(),a?.unsubscribe()}})}function flatten(e,t){let n=t.concurrency===1/0;return n||(assertPositiveInteger(t.concurrency,`mergeMap concurrency`),assertPositiveInteger(t.capacity,`mergeMap capacity`)),r=>stream((i,a)=>{let o=[],s=new Set,c=!1,l={},finish=()=>{c&&s.size===0&&o.length===0&&i.complete()},startInner=t=>{tryCall(()=>{let n={};n.current=link(e(t),{complete(){n.current&&s.delete(n.current),drain()},error:i.error,next:i.next},a),n.current.closed?drain():s.add(n.current)},i.error)},drain=()=>{if(!a.aborted){for(;o.length>0&&(n||s.size<t.concurrency);){let e=o.shift();startInner(e)}finish()}};return l.current=link(r,{complete(){c=!0,finish()},error:i.error,next(e){!n&&o.length>=t.capacity?(l.current?.unsubscribe(),i.error(new FluxCapacityError(t.capacity,`mergeMap buffer capacity exceeded`))):(o.push(e),drain())}},a),()=>{l.current?.unsubscribe();for(let e of s)e.unsubscribe();o.length=0}})}function mergeMap(e,t){return flatten(e,t)}function concatMap(e,t){return flatten(e,{capacity:t.capacity,concurrency:1})}function retry(t){return assertNonNegativeInteger(t.times,`retry times`),n=>stream((r,i)=>{let a=0,o,s,start=()=>{if(i.aborted)return;let c=link(n,{complete:r.complete,error(n){if(a===t.times){r.error(n);return}let o=a++,c;if(tryCall(()=>{c=typeof t.delay==`function`?t.delay(o):t.delay},r.error),!i.aborted){if(c!==void 0)try{assertDuration(c,`Retry delay`)}catch(e){r.error(e);return}c===void 0||c===0?queueMicrotask(start):s=e.delay(start,c)}},next:r.next},i);c.closed||(o=c)};return start(),()=>{s?.(),o?.unsubscribe()}})}function first(e,t){return new Promise((n,r)=>{let i=new AbortController,abort=()=>{i.abort(),r(abortError(t?.signal,`Stream consumption aborted`))};t?.signal?.aborted?abort():(t?.signal?.addEventListener(`abort`,abort,{once:!0}),link(e,{complete(){t?.signal?.removeEventListener(`abort`,abort),`defaultValue`in(t??{})?n(t.defaultValue):r(new FluxEmptyError)},error(e){t?.signal?.removeEventListener(`abort`,abort),r(e)},next(e){t?.signal?.removeEventListener(`abort`,abort),i.abort(),n(e)}},i.signal))})}function last(e,t){return new Promise((n,r)=>{let i=new AbortController,abort=()=>{i.abort(),r(abortError(t?.signal,`Stream consumption aborted`))};if(t?.signal?.aborted){abort();return}let a=!1,o;t?.signal?.addEventListener(`abort`,abort,{once:!0}),link(e,{complete(){t?.signal?.removeEventListener(`abort`,abort),a?n(o):`defaultValue`in(t??{})?n(t.defaultValue):r(new FluxEmptyError)},error(e){t?.signal?.removeEventListener(`abort`,abort),r(e)},next(e){a=!0,o=e}},i.signal)})}function toArray(e,t){return assertNonNegativeInteger(t.maxItems,`toArray maxItems`),new Promise((n,r)=>{let i=new AbortController,a=[],abort=()=>{i.abort(),r(abortError(t?.signal,`Stream consumption aborted`))};t.signal?.aborted?abort():(t.signal?.addEventListener(`abort`,abort,{once:!0}),link(e,{complete(){t.signal?.removeEventListener(`abort`,abort),n(a)},error(e){t.signal?.removeEventListener(`abort`,abort),r(e)},next(e){a.length===t.maxItems?(t.signal?.removeEventListener(`abort`,abort),i.abort(),r(new FluxCapacityError(t.maxItems,`toArray maxItems exceeded`))):a.push(e)}},i.signal))})}function pipe(e,...t){return t.reduce((e,t)=>t(e),e)}exports.FluxCapacityError=FluxCapacityError,exports.FluxEmptyError=FluxEmptyError,exports.FluxError=FluxError,exports.FluxTimeoutError=FluxTimeoutError,exports.combineLatest=combineLatest,exports.concat=concat,exports.concatMap=concatMap,exports.createChannel=createChannel,exports.debounce=debounce,exports.filter=filter,exports.first=first,exports.from=from,exports.fromEvent=fromEvent,exports.fromStore=fromStore,exports.fromSubscribe=fromSubscribe,exports.interval=interval,exports.last=last,exports.map=map,exports.merge=merge,exports.mergeMap=mergeMap,exports.of=of,exports.pipe=pipe,exports.retry=retry,exports.scan=scan,exports.stream=stream,exports.switchMap=switchMap,exports.take=take,exports.takeUntil=takeUntil,exports.timeout=timeout,exports.timer=timer,exports.toArray=toArray,exports.toAsyncIterable=toAsyncIterable;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});function abortError(e,t=`Aborted`){return e?.reason??new DOMException(t,`AbortError`)}function assertNonNegativeInteger(e,t){if(!Number.isInteger(e)||e<0)throw RangeError(`${t} must be a non-negative integer`)}function assertPositiveInteger(e,t){if(!Number.isInteger(e)||e<1)throw RangeError(`${t} must be a positive integer`)}function assertDuration(e,t){if(!Number.isFinite(e)||e<0||e>2147483647)throw RangeError(`${t} must be between 0 and 2147483647 milliseconds`)}var FluxError=class extends Error{constructor(e,t){super(e,t),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}},FluxTimeoutError=class extends FluxError{ms;constructor(e){super(`Timeout after ${e}ms`),this.ms=e}},FluxEmptyError=class extends FluxError{constructor(e=`Stream completed without emitting any value`){super(e)}},FluxCapacityError=class extends FluxError{capacity;constructor(e,t){super(t),this.capacity=e}};function toIterator(e,t){if(assertPositiveInteger(t.capacity,`Async iterable capacity`),t.overflow!==`drop-newest`&&t.overflow!==`drop-oldest`&&t.overflow!==`error`)throw RangeError(`Async iterable overflow must be "drop-newest", "drop-oldest", or "error"`);let n=new AbortController,r=[],i={kind:`open`,queue:[]},detach=()=>t.signal?.removeEventListener(`abort`,abort),resolveDone=()=>{for(;r.length>0;)r.shift()?.resolve({done:!0,value:void 0})},complete=()=>{i.kind===`open`&&(i={kind:`complete`,queue:i.queue},detach(),resolveDone())},fail=e=>{if(i.kind===`open`)for(i={kind:`error`,queue:i.queue,reason:e},n.abort(),detach();r.length>0;)r.shift()?.reject(e)},abort=()=>{fail(abortError(t.signal,`Async iteration aborted`))},stop=()=>{n.abort(),detach(),i={kind:`returned`},resolveDone()},a={complete,error:fail,next(e){if(i.kind!==`open`)return;let n=r.shift();n?n.resolve({done:!1,value:e}):i.queue.length<t.capacity?i.queue.push(e):t.overflow===`drop-oldest`?(i.queue.shift(),i.queue.push(e)):t.overflow===`error`&&fail(new FluxCapacityError(t.capacity,`Async iterable buffer capacity exceeded`))}};return t.signal?.aborted?abort():t.signal?.addEventListener(`abort`,abort,{once:!0}),e.subscribe(a,{signal:n.signal}),{next(){return i.kind===`returned`?Promise.resolve({done:!0,value:void 0}):i.queue.length>0?Promise.resolve({done:!1,value:i.queue.shift()}):i.kind===`error`?Promise.reject(i.reason):i.kind===`complete`?Promise.resolve({done:!0,value:void 0}):new Promise((e,t)=>r.push({reject:t,resolve:e}))},return(){return stop(),Promise.resolve({done:!0,value:void 0})},[Symbol.asyncIterator](){return this}}}function toAsyncIterable(e,t){return{[Symbol.asyncIterator](){return toIterator(e,t)}}}function reportUnhandledError(e){let t=globalThis.reportError;t?t(e):queueMicrotask(()=>{throw e})}function createSubscription(e,t){let n=typeof e==`function`?{next:e}:e,r=new AbortController,i=!1,a,unsubscribe=()=>{if(!i){i=!0,r.abort(),t?.removeEventListener(`abort`,unsubscribe);try{a?.()}catch(e){reportUnhandledError(e)}}},o={complete(){if(!i){try{n.complete?.()}catch(e){reportUnhandledError(e)}unsubscribe()}},error(e){if(!i){if(n.error)try{n.error(e)}catch(e){reportUnhandledError(e)}else reportUnhandledError(e);unsubscribe()}},next(e){if(!i)try{n.next(e)}catch(e){unsubscribe(),reportUnhandledError(e)}}},add=e=>{if(e){if(i)try{e()}catch(e){reportUnhandledError(e)}else a=e}};return t?.aborted?unsubscribe():t?.addEventListener(`abort`,unsubscribe,{once:!0}),{add,signal:r.signal,sink:o,subscription:{get closed(){return i},[Symbol.dispose]:unsubscribe,unsubscribe}}}function stream(e){return{subscribe(t,n){let r=createSubscription(t,n?.signal);if(r.subscription.closed)return r.subscription;try{r.add(e(r.sink,r.signal))}catch(e){r.sink.error(e)}return r.subscription}}}function fromSubscribe(e){return stream(t=>e(t.next))}function fromStore(e){return stream((t,n)=>{let r;try{if(r=e.getSnapshot(),t.next(r),n.aborted)return}catch(e){t.error(e);return}let i=e.subscribe(()=>{try{r=e.getSnapshot(),t.next(r)}catch(e){t.error(e)}});if(n.aborted)return i;try{let n=e.getSnapshot();Object.is(r,n)||t.next(n)}catch(e){t.error(e)}return i})}function replayCapacity(e){let t=`initial`in e,n=e.replay??+!!t;if(assertNonNegativeInteger(n,`Channel replay`),t&&n===0)throw RangeError(`Channel replay cannot be 0 when initial is provided: the initial value would be immediately dropped`);return n}function createChannel(e={}){let t=replayCapacity(e),n=new AbortController,r=new Set,i=[];`initial`in e&&t>0&&i.push(e.initial);let a=!1,o=[],s=stream(e=>{if(n.signal.aborted)e.complete();else{for(let t of i)e.next(t);return r.add(e),()=>r.delete(e)}}),dispose=()=>{if(!n.signal.aborted){n.abort();for(let e of[...r])e.complete();r.clear(),i.length=0,o.length=0}},flush=()=>{a=!0;try{for(;o.length>0;){let e=o.shift();t>0&&(i.length===t&&i.shift(),i.push(e));for(let t of[...r])t.next(e)}}finally{a=!1}};return{get disposalSignal(){return n.signal},dispose,get disposed(){return n.signal.aborted},send(e){n.signal.aborted||(o.push(e),a||flush())},stream:s,[Symbol.dispose]:dispose}}function link(e,t,n){return e.subscribe(t,{signal:n})}function merge(...e){return stream((t,n)=>{if(e.length===0){t.complete();return}let r=0,i=[];for(let a of e){let o=link(a,{complete(){r++,r===e.length&&t.complete()},error:t.error,next:t.next},n);if(i.push(o),n.aborted)break}return()=>i.forEach(e=>{e.unsubscribe()})})}function concat(...e){return stream((t,n)=>{let r=!1,i,a=0,o=!1,subscribeNext=()=>{if(!n.aborted){if(r)o=!0;else{r=!0;try{do{o=!1;let r=e[a++];if(!r){t.complete();return}let s=link(r,{complete(){i=void 0,subscribeNext()},error:t.error,next:t.next},n);i=s.closed?void 0:s}while(o&&!n.aborted)}finally{r=!1}}}};return subscribeNext(),()=>i?.unsubscribe()})}function combineLatest(...e){return stream((t,n)=>{if(e.length===0){t.complete();return}let r=Array(e.length),i=Array(e.length).fill(!1),a=[],o=0;for(let[s,c]of e.entries()){if(n.aborted)break;let l=link(c,{complete(){i[s]?(o++,o===e.length&&t.complete()):t.complete()},error:t.error,next(e){r[s]=e,i[s]=!0,i.every(Boolean)&&t.next([...r])}},n);a.push(l)}return()=>a.forEach(e=>{e.unsubscribe()})})}function of(...e){return stream(t=>{for(let n of e)t.next(n);t.complete()})}function from(e){return Symbol.asyncIterator in Object(e)?stream((t,n)=>{let r=e[Symbol.asyncIterator]();return(async()=>{try{for(;!n.aborted;){let e=await r.next();if(e.done){t.complete();return}t.next(e.value)}}catch(e){n.aborted||t.error(e)}})(),()=>{try{let e=r.return?.();e&&e.catch(reportUnhandledError)}catch(e){reportUnhandledError(e)}}}):typeof e.then==`function`?stream((t,n)=>{e.then(e=>{n.aborted||(t.next(e),t.complete())},e=>{n.aborted||t.error(e)})}):stream((t,n)=>{let r=e[Symbol.iterator]();try{for(;!n.aborted;){let e=r.next();if(e.done){t.complete();return}t.next(e.value)}}catch(e){t.error(e)}return()=>{r.return?.()}})}function fromEvent(e,t){return stream(n=>{let listener=e=>n.next(e);return e.addEventListener(t,listener),()=>e.removeEventListener(t,listener)})}function interval(e){return assertDuration(e,`Interval duration`),stream(t=>{let n=0,r=setInterval(()=>t.next(n++),e);return()=>clearInterval(r)})}function timer(e){return assertDuration(e.delay,`Timer delay`),e.interval!==void 0&&assertDuration(e.interval,`Timer interval`),stream(t=>{let n=0,r,i=setTimeout(()=>{t.next(n++),e.interval===void 0?t.complete():r=setInterval(()=>t.next(n++),e.interval)},e.delay);return()=>{clearTimeout(i),r!==void 0&&clearInterval(r)}})}function take(e){return assertNonNegativeInteger(e,`take count`),t=>stream((n,r)=>{if(e===0){n.complete();return}let i=0,a={};return a.current=link(t,{complete:n.complete,error:n.error,next(t){n.next(t),i++,i===e&&(n.complete(),a.current?.unsubscribe())}},r),()=>a.current?.unsubscribe()})}function isAbortSignal(e){return typeof e.aborted==`boolean`&&typeof e.addEventListener==`function`&&typeof e.removeEventListener==`function`}function takeUntil(e){return t=>stream((n,r)=>{let i,a,removeNotifier=()=>{},complete=()=>{i?.unsubscribe(),a?.unsubscribe(),n.complete()};if(isAbortSignal(e)){if(e.aborted){n.complete();return}e.addEventListener(`abort`,complete,{once:!0}),removeNotifier=()=>e.removeEventListener(`abort`,complete)}else a=link(e,{error:n.error,next:complete},r);return r.aborted||(i=link(t,{complete:n.complete,error:n.error,next:n.next},r)),()=>{removeNotifier(),i?.unsubscribe(),a?.unsubscribe()}})}function debounce(e){return assertDuration(e,`Debounce duration`),t=>stream((n,r)=>{let cancel,i,a=!1,flush=()=>{cancel=void 0,a&&(a=!1,n.next(i))},o=link(t,{complete(){cancel?.(),flush(),n.complete()},error:n.error,next(t){i=t,a=!0,cancel?.();let n=setTimeout(flush,e);cancel=()=>clearTimeout(n)}},r);return()=>{cancel?.(),o.unsubscribe()}})}function timeout(e){return assertDuration(e,`Timeout duration`),t=>stream((n,r)=>{let cancel,start=()=>{let t=setTimeout(()=>n.error(new FluxTimeoutError(e)),e);cancel=()=>clearTimeout(t)};start();let i=link(t,{complete(){cancel(),n.complete()},error(e){cancel(),n.error(e)},next(e){cancel(),start(),n.next(e)}},r);return()=>{cancel(),i.unsubscribe()}})}function tryCall(e,t){try{e()}catch(e){t(e)}}function map(e){return t=>stream((n,r)=>link(t,{complete:n.complete,error:n.error,next(t){tryCall(()=>n.next(e(t)),n.error)}},r).unsubscribe)}function filter(e){return t=>stream((n,r)=>link(t,{complete:n.complete,error:n.error,next(t){tryCall(()=>{e(t)&&n.next(t)},n.error)}},r).unsubscribe)}function scan(e,t){return n=>stream((r,i)=>{let a=t;return link(n,{complete:r.complete,error:r.error,next(t){tryCall(()=>{a=e(a,t),r.next(a)},r.error)}},i).unsubscribe})}function switchMap(e){return t=>stream((n,r)=>{let i=!1,a,finish=()=>{i&&!a&&n.complete()},o=link(t,{complete(){i=!0,finish()},error:n.error,next(t){a?.unsubscribe(),a=void 0,tryCall(()=>{let i=link(e(t),{complete(){a=void 0,finish()},error:n.error,next:n.next},r);a=i.closed?void 0:i},n.error)}},r);return()=>{o.unsubscribe(),a?.unsubscribe()}})}function flatten(e,t,n){let{capacity:r,concurrency:i}=t,a=i===`unbounded`;if(!a){if(assertPositiveInteger(i,`${n} concurrency`),r===void 0)throw RangeError(`${n} requires capacity when concurrency is finite; use { concurrency: "unbounded" } to start every value immediately`);assertPositiveInteger(r,`${n} capacity`)}let o=a?1/0:i,s=a?1/0:r;return t=>stream((r,i)=>{let a=[],c=new Set,l=!1,u={},finish=()=>{l&&c.size===0&&a.length===0&&r.complete()},startInner=t=>{tryCall(()=>{let n={};n.current=link(e(t),{complete(){n.current&&c.delete(n.current),drain()},error:r.error,next:r.next},i),n.current.closed?drain():c.add(n.current)},r.error)},drain=()=>{if(!i.aborted){for(;a.length>0&&c.size<o;){let e=a.shift();startInner(e)}finish()}};return u.current=link(t,{complete(){l=!0,finish()},error:r.error,next(e){a.length>=s?(u.current?.unsubscribe(),r.error(new FluxCapacityError(s,`${n} buffer capacity exceeded`))):(a.push(e),drain())}},i),()=>{u.current?.unsubscribe();for(let e of c)e.unsubscribe();a.length=0}})}function mergeMap(e,t){return flatten(e,t,`mergeMap`)}function concatMap(e,t){return flatten(e,{capacity:t.capacity,concurrency:1},`concatMap`)}function retry(e){return assertNonNegativeInteger(e.times,`retry times`),t=>stream((n,r)=>{let i=0,a,o,start=()=>{if(r.aborted)return;let s=link(t,{complete:n.complete,error(t){if(i===e.times){n.error(t);return}let a=i++,s;if(tryCall(()=>{s=typeof e.delay==`function`?e.delay(a):e.delay},n.error),!r.aborted){if(s!==void 0)try{assertDuration(s,`Retry delay`)}catch(e){n.error(e);return}s===void 0||s===0?queueMicrotask(start):o=setTimeout(start,s)}},next:n.next},r);s.closed||(a=s)};return start(),()=>{o!==void 0&&clearTimeout(o),a?.unsubscribe()}})}function watchSignal(e,t,n){if(!e)return()=>{};let abort=()=>{t.abort(),n(abortError(e,`Stream consumption aborted`))};return e.aborted?(abort(),null):(e.addEventListener(`abort`,abort,{once:!0}),()=>e.removeEventListener(`abort`,abort))}function first(e,t){return new Promise((n,r)=>{let i=new AbortController,a=watchSignal(t?.signal,i,r);a&&link(e,{complete(){a(),`defaultValue`in(t??{})?n(t.defaultValue):r(new FluxEmptyError)},error(e){a(),r(e)},next(e){a(),i.abort(),n(e)}},i.signal)})}function last(e,t){return new Promise((n,r)=>{let i=new AbortController,a=watchSignal(t?.signal,i,r);if(!a)return;let o=!1,s;link(e,{complete(){a(),o?n(s):`defaultValue`in(t??{})?n(t.defaultValue):r(new FluxEmptyError)},error(e){a(),r(e)},next(e){o=!0,s=e}},i.signal)})}function toArray(e,t){return assertNonNegativeInteger(t.maxItems,`toArray maxItems`),new Promise((n,r)=>{let i=new AbortController,a=[],o=watchSignal(t.signal,i,r);o&&link(e,{complete(){o(),n(a)},error(e){o(),r(e)},next(e){a.length===t.maxItems?(o(),i.abort(),r(new FluxCapacityError(t.maxItems,`toArray maxItems exceeded`))):a.push(e)}},i.signal)})}function pipe(e,...t){return t.reduce((e,t)=>t(e),e)}exports.FluxCapacityError=FluxCapacityError,exports.FluxEmptyError=FluxEmptyError,exports.FluxError=FluxError,exports.FluxTimeoutError=FluxTimeoutError,exports.combineLatest=combineLatest,exports.concat=concat,exports.concatMap=concatMap,exports.createChannel=createChannel,exports.debounce=debounce,exports.filter=filter,exports.first=first,exports.from=from,exports.fromEvent=fromEvent,exports.fromStore=fromStore,exports.fromSubscribe=fromSubscribe,exports.interval=interval,exports.last=last,exports.map=map,exports.merge=merge,exports.mergeMap=mergeMap,exports.of=of,exports.pipe=pipe,exports.retry=retry,exports.scan=scan,exports.stream=stream,exports.switchMap=switchMap,exports.take=take,exports.takeUntil=takeUntil,exports.timeout=timeout,exports.timer=timer,exports.toArray=toArray,exports.toAsyncIterable=toAsyncIterable;
2
2
  //# sourceMappingURL=flux.cjs.map
package/dist/flux.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"flux.cjs","names":["value","name","milliseconds","message","options","ms","capacity","controller","pending","state","reason","observer","waiter","source","reportError","observerOrNext","closed","teardown","signal","sink","callbackError","nextTeardown","subscription","producer","subscribe","current","latest","hasInitial","listeners","replay","listener","dispatching","sources","completed","subscriptions","advancing","index","requested","values","ready","defaultScheduler","id","callback","iterator","result","returned","event","target","type","every","cancelInterval","cancelDelay","count","seen","subscriptionRef","sourceSubscription","notifierSubscription","notifier","duration","cancel","hasPending","onError","project","predicate","initial","reducer","outerComplete","inner","outer","unbounded","queue","inners","outerRef","innerRef","attempts","attempt","delay","reject","resolve","emitted","operators","operator"],"sources":["../../arsenal/dist/async/abortError.js","../src/_numeric.ts","../src/errors.ts","../src/_iterator.ts","../src/async.ts","../src/_subscription.ts","../src/core.ts","../src/channel.ts","../src/_link.ts","../src/operators/combination.ts","../src/_scheduler.ts","../src/operators/creation.ts","../src/operators/filtering.ts","../src/_safe.ts","../src/operators/transformation.ts","../src/operators/utility.ts","../src/pipe.ts"],"sourcesContent":["// src/async/abortError.ts\nfunction abortError(e, t = \"Aborted\") {\n\treturn e?.reason ?? new DOMException(t, \"AbortError\");\n}\nexport { abortError };\n\n//# sourceMappingURL=abortError.js.map","export function assertNonNegativeInteger(value: number, name: string): void {\n if (!Number.isInteger(value) || value < 0) {\n throw new RangeError(`${name} must be a non-negative integer`);\n }\n}\n\nexport function assertPositiveInteger(value: number, name: string): void {\n if (!Number.isInteger(value) || value < 1) {\n throw new RangeError(`${name} must be a positive integer`);\n }\n}\n\nexport function assertDuration(milliseconds: number, name: string): void {\n if (!Number.isFinite(milliseconds) || milliseconds < 0 || milliseconds > 2_147_483_647) {\n throw new RangeError(`${name} must be between 0 and 2147483647 milliseconds`);\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\nexport class FluxTimeoutError extends FluxError {\n /** The timeout duration in milliseconds that was exceeded. */\n readonly ms: number;\n\n constructor(ms: number) {\n super(`Timeout after ${ms}ms`);\n this.ms = ms;\n }\n}\n\n/** Thrown by `first()` and `last()` when the source completes without emitting any value. */\nexport class FluxEmptyError extends FluxError {\n constructor(message = 'Stream completed without emitting any value') {\n super(message);\n }\n}\n\n/** Thrown when a bounded buffer (`mergeMap`, `concatMap`, `toArray`, async iteration) overflows. */\nexport class FluxCapacityError extends FluxError {\n /** The configured capacity that was exceeded. */\n readonly capacity: number;\n\n constructor(capacity: number, message: string) {\n super(message);\n this.capacity = capacity;\n }\n}\n","import { abortError } from '@vielzeug/arsenal';\nimport { assertPositiveInteger } from './_numeric.js';\n\nimport { FluxCapacityError } from './errors.js';\nimport type { AsyncIterableOptions, Observer, Stream } from './types.js';\n\ntype Pending<T> = {\n reject(reason: unknown): void;\n resolve(result: IteratorResult<T>): void;\n};\n\ntype IteratorState<T> =\n | { kind: 'complete' | 'open'; queue: T[] }\n | { kind: 'error'; queue: T[]; reason: unknown }\n | { kind: 'returned' };\n\n/** Async iteration requires explicit queue policy because streams are push based. */\nexport function toIterator<T>(source: Stream<T>, options: AsyncIterableOptions): AsyncIterableIterator<T> {\n assertPositiveInteger(options.capacity, 'Async iterable capacity');\n if (options.overflow !== 'drop-newest' && options.overflow !== 'drop-oldest' && options.overflow !== 'error') {\n throw new RangeError('Async iterable overflow must be \"drop-newest\", \"drop-oldest\", or \"error\"');\n }\n\n const controller = new AbortController();\n const pending: Pending<T>[] = [];\n let state: IteratorState<T> = { kind: 'open', queue: [] };\n\n const detach = (): void => options.signal?.removeEventListener('abort', abort);\n\n const resolveDone = (): void => {\n while (pending.length > 0) pending.shift()?.resolve({ done: true, value: undefined as T });\n };\n\n const complete = (): void => {\n if (state.kind !== 'open') return;\n\n state.kind = 'complete';\n detach();\n resolveDone();\n };\n\n const fail = (reason: unknown): void => {\n if (state.kind !== 'open') return;\n\n state = { kind: 'error', queue: state.queue, reason };\n controller.abort();\n detach();\n\n while (pending.length > 0) pending.shift()?.reject(reason);\n };\n\n const abort = (): void => {\n fail(abortError(options.signal, 'Async iteration aborted'));\n };\n\n const stop = (): void => {\n controller.abort();\n detach();\n state = { kind: 'returned' };\n resolveDone();\n };\n\n const observer: Observer<T> = {\n complete,\n error: fail,\n next(value) {\n if (state.kind !== 'open') return;\n\n const waiter = pending.shift();\n\n if (waiter) {\n waiter.resolve({ done: false, value });\n\n return;\n }\n\n if (state.queue.length < options.capacity) {\n state.queue.push(value);\n\n return;\n }\n\n if (options.overflow === 'drop-oldest') {\n state.queue.shift();\n state.queue.push(value);\n } else if (options.overflow === 'error') {\n fail(new FluxCapacityError(options.capacity, 'Async iterable buffer capacity exceeded'));\n }\n },\n };\n\n if (options.signal?.aborted) abort();\n else options.signal?.addEventListener('abort', abort, { once: true });\n\n source.subscribe(observer, { signal: controller.signal });\n\n return {\n next(): Promise<IteratorResult<T>> {\n if (state.kind === 'returned') return Promise.resolve({ done: true, value: undefined as T });\n\n if (state.queue.length > 0) return Promise.resolve({ done: false, value: state.queue.shift()! });\n\n if (state.kind === 'error') return Promise.reject(state.reason);\n\n if (state.kind === 'complete') return Promise.resolve({ done: true, value: undefined as T });\n\n return new Promise<IteratorResult<T>>((resolve, reject) => pending.push({ reject, resolve }));\n },\n return(): Promise<IteratorResult<T>> {\n stop();\n\n return Promise.resolve({ done: true, value: undefined as T });\n },\n [Symbol.asyncIterator](): AsyncIterableIterator<T> {\n return this;\n },\n };\n}\n","import { toIterator } from './_iterator.js';\nimport type { AsyncIterableOptions, Stream } from './types.js';\n\n/** Converts a push stream into an async iterable with an explicit overflow policy. */\nexport function toAsyncIterable<T>(source: Stream<T>, options: AsyncIterableOptions): AsyncIterable<T> {\n return {\n [Symbol.asyncIterator](): AsyncIterableIterator<T> {\n return toIterator(source, options);\n },\n };\n}\n","import type { Observer, Sink, Subscription, Teardown } from './types.js';\n\n/** @internal Reports an unhandled stream error through the platform's error reporting channel. */\nexport function reportUnhandledError(reason: unknown): void {\n const reportError = (globalThis as { reportError?: (value: unknown) => void }).reportError;\n\n if (reportError) {\n reportError(reason);\n\n return;\n }\n\n queueMicrotask(() => {\n throw reason;\n });\n}\n\nexport function createSubscription<T>(\n observerOrNext: Observer<T> | ((value: T) => void),\n signal?: AbortSignal,\n): { add(teardown: Teardown | undefined): void; signal: AbortSignal; sink: Sink<T>; subscription: Subscription } {\n const observer: Observer<T> = typeof observerOrNext === 'function' ? { next: observerOrNext } : observerOrNext;\n const controller = new AbortController();\n let closed = false;\n let teardown: Teardown | undefined;\n\n const unsubscribe = (): void => {\n if (closed) return;\n\n closed = true;\n controller.abort();\n signal?.removeEventListener('abort', unsubscribe);\n\n try {\n teardown?.();\n } catch (reason) {\n reportUnhandledError(reason);\n }\n };\n\n const sink: Sink<T> = {\n complete(): void {\n if (closed) return;\n\n try {\n observer.complete?.();\n } catch (reason) {\n reportUnhandledError(reason);\n }\n\n unsubscribe();\n },\n\n error(reason: unknown): void {\n if (closed) return;\n\n if (observer.error) {\n try {\n observer.error(reason);\n } catch (callbackError) {\n reportUnhandledError(callbackError);\n }\n } else {\n reportUnhandledError(reason);\n }\n\n unsubscribe();\n },\n\n next(value: T): void {\n if (closed) return;\n\n try {\n observer.next(value);\n } catch (reason) {\n unsubscribe();\n reportUnhandledError(reason);\n }\n },\n };\n\n const add = (nextTeardown: Teardown | undefined): void => {\n if (!nextTeardown) return;\n\n if (closed) {\n try {\n nextTeardown();\n } catch (reason) {\n reportUnhandledError(reason);\n }\n\n return;\n }\n\n teardown = nextTeardown;\n };\n\n if (signal?.aborted) {\n unsubscribe();\n } else {\n signal?.addEventListener('abort', unsubscribe, { once: true });\n }\n\n return {\n add,\n signal: controller.signal,\n sink,\n subscription: {\n get closed(): boolean {\n return closed;\n },\n [Symbol.dispose]: unsubscribe,\n unsubscribe,\n },\n };\n}\n","import { createSubscription } from './_subscription.js';\nimport type { Observer, Producer, Stream, SubscribeOptions, Subscription, Teardown } from './types.js';\n\n/** Creates lazy work. Producer cleanup belongs to each individual subscription. */\nexport function stream<T>(producer: Producer<T>): Stream<T> {\n return {\n subscribe(observer: Observer<T> | ((value: T) => void), options?: SubscribeOptions): Subscription {\n const subscription = createSubscription(observer, options?.signal);\n\n if (subscription.subscription.closed) return subscription.subscription;\n\n try {\n subscription.add(producer(subscription.sink, subscription.signal));\n } catch (reason) {\n subscription.sink.error(reason);\n }\n\n return subscription.subscription;\n },\n };\n}\n\n/** Bridge a callback-based value subscription into a Flux stream. */\nexport function fromSubscribe<T>(subscribe: (listener: (value: T) => void) => Teardown): Stream<T> {\n return stream((sink) => subscribe(sink.next));\n}\n\n/** Bridge a snapshot/subscription state source into a Flux stream. */\nexport function fromStore<T>(source: { getSnapshot(): T; subscribe(listener: () => void): Teardown }): Stream<T> {\n return stream((sink, signal) => {\n let current: T;\n\n try {\n current = source.getSnapshot();\n sink.next(current);\n if (signal.aborted) return;\n } catch (reason) {\n sink.error(reason);\n return;\n }\n\n const teardown = source.subscribe(() => {\n try {\n current = source.getSnapshot();\n sink.next(current);\n } catch (reason) {\n sink.error(reason);\n }\n });\n\n if (signal.aborted) return teardown;\n\n try {\n const latest = source.getSnapshot();\n if (!Object.is(current, latest)) sink.next(latest);\n } catch (reason) {\n sink.error(reason);\n }\n\n return teardown;\n });\n}\n","import { assertNonNegativeInteger } from './_numeric.js';\nimport { stream } from './core.js';\nimport type { Sink, Stream } from './types.js';\n\nexport type ChannelOptions<T> = {\n initial?: T;\n replay?: number;\n};\n\nexport type Channel<T> = {\n [Symbol.dispose](): void;\n readonly disposalSignal: AbortSignal;\n dispose(): void;\n readonly disposed: boolean;\n send(value: T): void;\n readonly stream: Stream<T>;\n};\n\nfunction replayCapacity<T>(options: ChannelOptions<T>): number {\n const hasInitial = 'initial' in options;\n const capacity = options.replay ?? (hasInitial ? 1 : 0);\n\n assertNonNegativeInteger(capacity, 'Channel replay');\n\n if (hasInitial && capacity === 0) {\n throw new RangeError(\n 'Channel replay cannot be 0 when initial is provided: the initial value would be immediately dropped',\n );\n }\n\n return capacity;\n}\n\n/** Channels own mutable multicast state; disposal is their only terminal event. */\nexport function createChannel<T>(options: ChannelOptions<T> = {}): Channel<T> {\n const capacity = replayCapacity(options);\n const controller = new AbortController();\n const listeners = new Set<Sink<T>>();\n const replay: T[] = [];\n\n if ('initial' in options && capacity > 0) replay.push(options.initial as T);\n\n const source = stream<T>((sink) => {\n // Disposed channels complete new subscribers immediately without replaying\n // retained values: a late subscriber never observes stale state.\n if (controller.signal.aborted) {\n sink.complete();\n\n return;\n }\n\n for (const value of replay) sink.next(value);\n\n listeners.add(sink);\n\n return () => listeners.delete(sink);\n });\n\n const dispose = (): void => {\n if (controller.signal.aborted) return;\n\n controller.abort();\n\n for (const listener of [...listeners]) listener.complete();\n\n listeners.clear();\n replay.length = 0;\n pending.length = 0;\n };\n\n let dispatching = false;\n const pending: T[] = [];\n\n const flush = (): void => {\n dispatching = true;\n\n try {\n while (pending.length > 0) {\n const value = pending.shift()!;\n\n if (capacity > 0) {\n if (replay.length === capacity) replay.shift();\n\n replay.push(value);\n }\n\n for (const listener of [...listeners]) listener.next(value);\n }\n } finally {\n dispatching = false;\n }\n };\n\n return {\n get disposalSignal(): AbortSignal {\n return controller.signal;\n },\n dispose,\n get disposed(): boolean {\n return controller.signal.aborted;\n },\n send(value: T): void {\n if (controller.signal.aborted) return;\n\n pending.push(value);\n\n // Reentrant sends (a listener calling `send` while receiving a previous\n // value) are queued so every listener observes one global FIFO order.\n if (!dispatching) flush();\n },\n stream: source,\n [Symbol.dispose]: dispose,\n };\n}\n","import type { Observer, Stream, Subscription } from './types.js';\n\n/** Every operator forwards its own lifetime to every upstream subscription. */\nexport function link<T>(source: Stream<T>, observer: Observer<T>, signal: AbortSignal): Subscription {\n return source.subscribe(observer, { signal });\n}\n","import { link } from '../_link.js';\nimport { stream } from '../core.js';\nimport type { Stream, Subscription } from '../types.js';\n\ntype StreamValue<T> = T extends Stream<infer Value> ? Value : never;\ntype StreamValues<T extends readonly Stream<unknown>[]> = { [Key in keyof T]: StreamValue<T[Key]> };\n\nexport function merge<T>(...sources: Stream<T>[]): Stream<T> {\n return stream((sink, signal) => {\n if (sources.length === 0) {\n sink.complete();\n\n return;\n }\n\n let completed = 0;\n const subscriptions: Subscription[] = [];\n\n for (const source of sources) {\n const subscription = link(\n source,\n {\n complete() {\n completed++;\n\n if (completed === sources.length) sink.complete();\n },\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n\n subscriptions.push(subscription);\n\n if (signal.aborted) break;\n }\n\n return () =>\n subscriptions.forEach((subscription) => {\n subscription.unsubscribe();\n });\n });\n}\n\nexport function concat<T>(...sources: Stream<T>[]): Stream<T> {\n return stream((sink, signal) => {\n let advancing = false;\n let current: Subscription | undefined;\n let index = 0;\n let requested = false;\n\n const subscribeNext = (): void => {\n if (signal.aborted) return;\n if (advancing) {\n requested = true;\n return;\n }\n\n advancing = true;\n try {\n do {\n requested = false;\n const source = sources[index++];\n\n if (!source) {\n sink.complete();\n return;\n }\n\n const subscription = link(\n source,\n {\n complete() {\n current = undefined;\n subscribeNext();\n },\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n\n current = subscription.closed ? undefined : subscription;\n } while (requested && !signal.aborted);\n } finally {\n advancing = false;\n }\n };\n\n subscribeNext();\n\n return () => current?.unsubscribe();\n });\n}\n\nexport function combineLatest<T extends readonly Stream<unknown>[]>(...sources: T): Stream<StreamValues<T>> {\n return stream((sink, signal) => {\n if (sources.length === 0) {\n sink.complete();\n\n return;\n }\n\n const values = new Array<unknown>(sources.length);\n const ready = new Array<boolean>(sources.length).fill(false);\n const subscriptions: Subscription[] = [];\n let completed = 0;\n\n for (const [index, source] of sources.entries()) {\n if (signal.aborted) break;\n\n const subscription = link(\n source,\n {\n complete() {\n if (!ready[index]) {\n sink.complete();\n\n return;\n }\n\n completed++;\n\n if (completed === sources.length) sink.complete();\n },\n error: sink.error,\n next(value) {\n values[index] = value;\n ready[index] = true;\n\n if (ready.every(Boolean)) sink.next([...values] as StreamValues<T>);\n },\n },\n signal,\n );\n\n subscriptions.push(subscription);\n }\n\n return () =>\n subscriptions.forEach((subscription) => {\n subscription.unsubscribe();\n });\n });\n}\n","export type Scheduler = {\n delay(callback: () => void, milliseconds: number): () => void;\n repeat(callback: () => void, milliseconds: number): () => void;\n};\n\nexport const defaultScheduler: Scheduler = {\n delay(callback, milliseconds) {\n const id = setTimeout(callback, milliseconds);\n\n return () => clearTimeout(id);\n },\n repeat(callback, milliseconds) {\n const id = setInterval(callback, milliseconds);\n\n return () => clearInterval(id);\n },\n};\n","import { assertDuration } from '../_numeric.js';\nimport { defaultScheduler } from '../_scheduler.js';\nimport { reportUnhandledError } from '../_subscription.js';\nimport { stream } from '../core.js';\nimport type { Stream } from '../types.js';\n\nexport type TimerOptions = {\n delay: number;\n interval?: number;\n};\n\nexport function of<T>(...values: T[]): Stream<T> {\n return stream((sink) => {\n for (const value of values) sink.next(value);\n sink.complete();\n });\n}\n\nexport function from<T>(source: AsyncIterable<T> | Iterable<T> | Promise<T>): Stream<T> {\n if (Symbol.asyncIterator in Object(source)) {\n return stream((sink, signal) => {\n const iterator = (source as AsyncIterable<T>)[Symbol.asyncIterator]();\n\n void (async () => {\n try {\n while (!signal.aborted) {\n const result = await iterator.next();\n\n if (result.done) {\n sink.complete();\n\n return;\n }\n\n sink.next(result.value);\n }\n } catch (reason) {\n if (!signal.aborted) sink.error(reason);\n }\n })();\n\n return () => {\n try {\n const returned = iterator.return?.();\n if (returned) void returned.catch(reportUnhandledError);\n } catch (reason) {\n reportUnhandledError(reason);\n }\n };\n });\n }\n\n if (typeof (source as Promise<T>).then === 'function') {\n return stream((sink, signal) => {\n void (source as Promise<T>).then(\n (value) => {\n if (!signal.aborted) {\n sink.next(value);\n sink.complete();\n }\n },\n (reason: unknown) => {\n if (!signal.aborted) sink.error(reason);\n },\n );\n });\n }\n\n return stream((sink, signal) => {\n const iterator = (source as Iterable<T>)[Symbol.iterator]();\n\n try {\n while (!signal.aborted) {\n const result = iterator.next();\n\n if (result.done) {\n sink.complete();\n\n return;\n }\n\n sink.next(result.value);\n }\n } catch (reason) {\n sink.error(reason);\n }\n\n return () => {\n iterator.return?.();\n };\n });\n}\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 type: string,\n): Stream<T> {\n return stream((sink) => {\n const listener = (event: T): void => sink.next(event);\n\n target.addEventListener(type, listener);\n\n return () => target.removeEventListener(type, listener);\n });\n}\n\nexport function interval(every: number): Stream<number> {\n assertDuration(every, 'Interval duration');\n\n return stream((sink) => {\n let index = 0;\n\n return defaultScheduler.repeat(() => sink.next(index++), every);\n });\n}\n\nexport function timer(options: TimerOptions): Stream<number> {\n assertDuration(options.delay, 'Timer delay');\n\n if (options.interval !== undefined) assertDuration(options.interval, 'Timer interval');\n\n return stream((sink) => {\n let index = 0;\n let cancelInterval: (() => void) | undefined;\n const cancelDelay = defaultScheduler.delay(() => {\n sink.next(index++);\n\n if (options.interval === undefined) {\n sink.complete();\n\n return;\n }\n\n cancelInterval = defaultScheduler.repeat(() => sink.next(index++), options.interval);\n }, options.delay);\n\n return () => {\n cancelDelay();\n cancelInterval?.();\n };\n });\n}\n","import { link } from '../_link.js';\nimport { assertDuration, assertNonNegativeInteger } from '../_numeric.js';\nimport { defaultScheduler } from '../_scheduler.js';\nimport { stream } from '../core.js';\nimport { FluxTimeoutError } from '../errors.js';\nimport type { Operator, Stream, Subscription } from '../types.js';\n\nexport function take<T>(count: number): Operator<T, T> {\n assertNonNegativeInteger(count, 'take count');\n\n return (source) =>\n stream((sink, signal) => {\n if (count === 0) {\n sink.complete();\n\n return;\n }\n\n let seen = 0;\n const subscriptionRef: { current?: Subscription } = {};\n\n subscriptionRef.current = link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next(value) {\n sink.next(value);\n seen++;\n\n if (seen === count) {\n sink.complete();\n subscriptionRef.current?.unsubscribe();\n }\n },\n },\n signal,\n );\n\n return () => subscriptionRef.current?.unsubscribe();\n });\n}\n\nfunction isAbortSignal(value: AbortSignal | Stream<unknown>): value is AbortSignal {\n return (\n typeof (value as AbortSignal).aborted === 'boolean' &&\n typeof (value as AbortSignal).addEventListener === 'function' &&\n typeof (value as AbortSignal).removeEventListener === 'function'\n );\n}\n\nexport function takeUntil<T>(notifier: AbortSignal | Stream<unknown>): Operator<T, T> {\n return (source) =>\n stream((sink, signal) => {\n let sourceSubscription: Subscription | undefined;\n let notifierSubscription: Subscription | undefined;\n let removeNotifier = (): void => {};\n\n const complete = (): void => {\n sourceSubscription?.unsubscribe();\n notifierSubscription?.unsubscribe();\n sink.complete();\n };\n\n if (isAbortSignal(notifier)) {\n if (notifier.aborted) {\n sink.complete();\n\n return;\n }\n\n notifier.addEventListener('abort', complete, { once: true });\n removeNotifier = (): void => notifier.removeEventListener('abort', complete);\n } else {\n notifierSubscription = link(notifier, { error: sink.error, next: complete }, signal);\n }\n\n if (!signal.aborted) {\n sourceSubscription = link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n }\n\n return () => {\n removeNotifier();\n sourceSubscription?.unsubscribe();\n notifierSubscription?.unsubscribe();\n };\n });\n}\n\nexport function debounce<T>(duration: number): Operator<T, T> {\n assertDuration(duration, 'Debounce duration');\n\n return (source) =>\n stream((sink, signal) => {\n let cancel: (() => void) | undefined;\n let pending: T | undefined;\n let hasPending = false;\n\n const flush = (): void => {\n cancel = undefined;\n\n if (!hasPending) return;\n\n hasPending = false;\n sink.next(pending as T);\n };\n\n const subscription = link(\n source,\n {\n complete() {\n cancel?.();\n flush();\n sink.complete();\n },\n error: sink.error,\n next(value) {\n pending = value;\n hasPending = true;\n cancel?.();\n cancel = defaultScheduler.delay(flush, duration);\n },\n },\n signal,\n );\n\n return () => {\n cancel?.();\n subscription.unsubscribe();\n };\n });\n}\n\nexport function timeout<T>(duration: number): Operator<T, T> {\n assertDuration(duration, 'Timeout duration');\n\n return (source) =>\n stream((sink, signal) => {\n let cancel: () => void;\n\n const start = (): void => {\n cancel = defaultScheduler.delay(() => sink.error(new FluxTimeoutError(duration)), duration);\n };\n\n start();\n\n const subscription = link(\n source,\n {\n complete() {\n cancel();\n sink.complete();\n },\n error(reason) {\n cancel();\n sink.error(reason);\n },\n next(value) {\n cancel();\n start();\n sink.next(value);\n },\n },\n signal,\n );\n\n return () => {\n cancel();\n subscription.unsubscribe();\n };\n });\n}\n","export function tryCall(callback: () => void, onError: (reason: unknown) => void): void {\n try {\n callback();\n } catch (reason) {\n onError(reason);\n }\n}\n","import { link } from '../_link.js';\nimport { assertPositiveInteger } from '../_numeric.js';\nimport { tryCall } from '../_safe.js';\nimport { stream } from '../core.js';\nimport { FluxCapacityError } from '../errors.js';\nimport type { Operator, Stream, Subscription } from '../types.js';\n\nexport type FlattenOptions = {\n /** Maximum concurrently active inner subscriptions. Use `Infinity` for unbounded concurrency. */\n concurrency: number;\n /** Maximum queued outer values waiting for an inner subscription slot. Required when `concurrency` is finite. */\n capacity: number;\n};\n\nexport function map<A, B>(project: (value: A) => B): Operator<A, B> {\n return (source) =>\n stream(\n (sink, signal) =>\n link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next(value) {\n tryCall(() => sink.next(project(value)), sink.error);\n },\n },\n signal,\n ).unsubscribe,\n );\n}\n\nexport function filter<T>(predicate: (value: T) => boolean): Operator<T, T> {\n return (source) =>\n stream(\n (sink, signal) =>\n link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next(value) {\n tryCall(() => {\n if (predicate(value)) sink.next(value);\n }, sink.error);\n },\n },\n signal,\n ).unsubscribe,\n );\n}\n\nexport function scan<T, A>(reducer: (state: A, value: T) => A, initial: A): Operator<T, A> {\n return (source) =>\n stream((sink, signal) => {\n let state = initial;\n\n return link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next(value) {\n tryCall(() => {\n state = reducer(state, value);\n sink.next(state);\n }, sink.error);\n },\n },\n signal,\n ).unsubscribe;\n });\n}\n\nexport function switchMap<A, B>(project: (value: A) => Stream<B>): Operator<A, B> {\n return (source) =>\n stream((sink, signal) => {\n let outerComplete = false;\n let inner: Subscription | undefined;\n\n const finish = (): void => {\n if (outerComplete && !inner) sink.complete();\n };\n\n const outer = link(\n source,\n {\n complete() {\n outerComplete = true;\n finish();\n },\n error: sink.error,\n next(value) {\n inner?.unsubscribe();\n inner = undefined;\n\n tryCall(() => {\n const subscription = link(\n project(value),\n {\n complete() {\n inner = undefined;\n finish();\n },\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n\n inner = subscription.closed ? undefined : subscription;\n }, sink.error);\n },\n },\n signal,\n );\n\n return () => {\n outer.unsubscribe();\n inner?.unsubscribe();\n };\n });\n}\n\nfunction flatten<A, B>(project: (value: A) => Stream<B>, options: FlattenOptions): Operator<A, B> {\n const unbounded = options.concurrency === Infinity;\n\n if (!unbounded) {\n assertPositiveInteger(options.concurrency, 'mergeMap concurrency');\n assertPositiveInteger(options.capacity, 'mergeMap capacity');\n }\n\n return (source) =>\n stream((sink, signal) => {\n const queue: A[] = [];\n const inners = new Set<Subscription>();\n let outerComplete = false;\n const outerRef: { current?: Subscription } = {};\n\n const finish = (): void => {\n if (outerComplete && inners.size === 0 && queue.length === 0) sink.complete();\n };\n\n const startInner = (value: A): void => {\n tryCall(() => {\n const innerRef: { current?: Subscription } = {};\n\n innerRef.current = link(\n project(value),\n {\n complete() {\n if (innerRef.current) inners.delete(innerRef.current);\n\n drain();\n },\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n\n if (!innerRef.current.closed) inners.add(innerRef.current);\n else drain();\n }, sink.error);\n };\n\n const drain = (): void => {\n if (signal.aborted) return;\n\n while (queue.length > 0 && (unbounded || inners.size < options.concurrency)) {\n const value = queue.shift()!;\n\n startInner(value);\n }\n\n finish();\n };\n\n outerRef.current = link(\n source,\n {\n complete() {\n outerComplete = true;\n finish();\n },\n error: sink.error,\n next(value) {\n if (!unbounded && queue.length >= options.capacity) {\n outerRef.current?.unsubscribe();\n sink.error(new FluxCapacityError(options.capacity, 'mergeMap buffer capacity exceeded'));\n\n return;\n }\n\n queue.push(value);\n drain();\n },\n },\n signal,\n );\n\n return () => {\n outerRef.current?.unsubscribe();\n for (const inner of inners) inner.unsubscribe();\n queue.length = 0;\n };\n });\n}\n\nexport function mergeMap<A, B>(project: (value: A) => Stream<B>, options: FlattenOptions): Operator<A, B> {\n return flatten(project, options);\n}\n\nexport function concatMap<A, B>(\n project: (value: A) => Stream<B>,\n options: Omit<FlattenOptions, 'concurrency'>,\n): Operator<A, B> {\n return flatten(project, { capacity: options.capacity, concurrency: 1 });\n}\n","import { abortError } from '@vielzeug/arsenal';\n\nimport { link } from '../_link.js';\nimport { assertDuration, assertNonNegativeInteger } from '../_numeric.js';\nimport { tryCall } from '../_safe.js';\nimport { defaultScheduler } from '../_scheduler.js';\nimport { stream } from '../core.js';\nimport { FluxCapacityError, FluxEmptyError } from '../errors.js';\nimport type { Operator, Stream, Subscription } from '../types.js';\n\nexport type RetryOptions = {\n times: number;\n delay?: number | ((attempt: number) => number);\n};\n\nexport type ToArrayOptions = {\n maxItems: number;\n signal?: AbortSignal;\n};\n\nexport type ValueOptions<T> = {\n signal?: AbortSignal;\n /** Resolved when the source completes empty instead of rejecting with `FluxEmptyError`. */\n defaultValue?: T;\n};\n\nexport function retry<T>(options: RetryOptions): Operator<T, T> {\n assertNonNegativeInteger(options.times, 'retry times');\n\n return (source) =>\n stream((sink, signal) => {\n let attempts = 0;\n let current: Subscription | undefined;\n let cancelDelay: (() => void) | undefined;\n\n const start = (): void => {\n if (signal.aborted) return;\n\n const subscription = link(\n source,\n {\n complete: sink.complete,\n error(reason) {\n if (attempts === options.times) {\n sink.error(reason);\n\n return;\n }\n\n const attempt = attempts++;\n let delay: number | undefined;\n\n tryCall(() => {\n delay = typeof options.delay === 'function' ? options.delay(attempt) : options.delay;\n }, sink.error);\n\n if (signal.aborted) return;\n\n if (delay !== undefined) {\n try {\n assertDuration(delay, 'Retry delay');\n } catch (reason) {\n sink.error(reason);\n return;\n }\n }\n\n if (delay === undefined || delay === 0) {\n queueMicrotask(start);\n } else {\n cancelDelay = defaultScheduler.delay(start, delay);\n }\n },\n next: sink.next,\n },\n signal,\n );\n\n if (!subscription.closed) current = subscription;\n };\n\n start();\n\n return () => {\n cancelDelay?.();\n current?.unsubscribe();\n };\n });\n}\n\nexport function first<T>(source: Stream<T>, options?: ValueOptions<T>): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const controller = new AbortController();\n const abort = (): void => {\n controller.abort();\n reject(abortError(options?.signal, 'Stream consumption aborted'));\n };\n\n if (options?.signal?.aborted) {\n abort();\n\n return;\n }\n\n options?.signal?.addEventListener('abort', abort, { once: true });\n link(\n source,\n {\n complete() {\n options?.signal?.removeEventListener('abort', abort);\n\n if ('defaultValue' in (options ?? {})) resolve(options!.defaultValue as T);\n else reject(new FluxEmptyError());\n },\n error(reason) {\n options?.signal?.removeEventListener('abort', abort);\n reject(reason);\n },\n next(value) {\n options?.signal?.removeEventListener('abort', abort);\n controller.abort();\n resolve(value);\n },\n },\n controller.signal,\n );\n });\n}\n\nexport function last<T>(source: Stream<T>, options?: ValueOptions<T>): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const controller = new AbortController();\n const abort = (): void => {\n controller.abort();\n reject(abortError(options?.signal, 'Stream consumption aborted'));\n };\n\n if (options?.signal?.aborted) {\n abort();\n\n return;\n }\n\n let emitted = false;\n let latest: T | undefined;\n\n options?.signal?.addEventListener('abort', abort, { once: true });\n link(\n source,\n {\n complete() {\n options?.signal?.removeEventListener('abort', abort);\n\n if (emitted) resolve(latest as T);\n else if ('defaultValue' in (options ?? {})) resolve(options!.defaultValue as T);\n else reject(new FluxEmptyError());\n },\n error(reason) {\n options?.signal?.removeEventListener('abort', abort);\n reject(reason);\n },\n next(value) {\n emitted = true;\n latest = value;\n },\n },\n controller.signal,\n );\n });\n}\n\nexport function toArray<T>(source: Stream<T>, options: ToArrayOptions): Promise<T[]> {\n assertNonNegativeInteger(options.maxItems, 'toArray maxItems');\n\n return new Promise<T[]>((resolve, reject) => {\n const controller = new AbortController();\n const values: T[] = [];\n const abort = (): void => {\n controller.abort();\n reject(abortError(options?.signal, 'Stream consumption aborted'));\n };\n\n if (options.signal?.aborted) {\n abort();\n\n return;\n }\n\n options.signal?.addEventListener('abort', abort, { once: true });\n link(\n source,\n {\n complete() {\n options.signal?.removeEventListener('abort', abort);\n resolve(values);\n },\n error(reason) {\n options.signal?.removeEventListener('abort', abort);\n reject(reason);\n },\n next(value) {\n if (values.length === options.maxItems) {\n options.signal?.removeEventListener('abort', abort);\n controller.abort();\n reject(new FluxCapacityError(options.maxItems, 'toArray maxItems exceeded'));\n\n return;\n }\n\n values.push(value);\n },\n },\n controller.signal,\n );\n });\n}\n","import type { Operator, PipedStream, Stream, ValidPipe } from './types.js';\n\n/** Standalone composition preserves contextual types for inline generic operators. */\nexport function pipe<Input>(source: Stream<Input>): Stream<Input>;\nexport function pipe<Input, A>(source: Stream<Input>, operator1: Operator<Input, A>): Stream<A>;\nexport function pipe<Input, A, B>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n): Stream<B>;\nexport function pipe<Input, A, B, C>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n): Stream<C>;\nexport function pipe<Input, A, B, C, D>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n): Stream<D>;\nexport function pipe<Input, A, B, C, D, E>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n operator5: Operator<D, E>,\n): Stream<E>;\nexport function pipe<Input, A, B, C, D, E, F>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n operator5: Operator<D, E>,\n operator6: Operator<E, F>,\n): Stream<F>;\nexport function pipe<Input, A, B, C, D, E, F, G>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n operator5: Operator<D, E>,\n operator6: Operator<E, F>,\n operator7: Operator<F, G>,\n): Stream<G>;\nexport function pipe<Input, A, B, C, D, E, F, G, H>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n operator5: Operator<D, E>,\n operator6: Operator<E, F>,\n operator7: Operator<F, G>,\n operator8: Operator<G, H>,\n): Stream<H>;\nexport function pipe<Input, A, B, C, D, E, F, G, H, I>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n operator5: Operator<D, E>,\n operator6: Operator<E, F>,\n operator7: Operator<F, G>,\n operator8: Operator<G, H>,\n operator9: Operator<H, I>,\n): Stream<I>;\nexport function pipe<Input, A, B, C, D, E, F, G, H, I, J>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n operator5: Operator<D, E>,\n operator6: Operator<E, F>,\n operator7: Operator<F, G>,\n operator8: Operator<G, H>,\n operator9: Operator<H, I>,\n operator10: Operator<I, J>,\n): Stream<J>;\nexport function pipe<Input, const Operators extends readonly unknown[]>(\n source: Stream<Input>,\n ...operators: Operators & ValidPipe<Input, Operators>\n): PipedStream<Input, Operators>;\nexport function pipe<Input, const Operators extends readonly unknown[]>(\n source: Stream<Input>,\n ...operators: Operators & ValidPipe<Input, Operators>\n): PipedStream<Input, Operators> {\n return operators.reduce(\n (current: Stream<unknown>, operator: Operator) => operator(current),\n source as Stream<unknown>,\n ) as PipedStream<Input, Operators>;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"flux.cjs","names":["value","name","milliseconds","message","options","ms","capacity","controller","pending","state","reason","observer","waiter","source","reportError","observerOrNext","closed","teardown","signal","sink","callbackError","nextTeardown","subscription","producer","subscribe","current","latest","hasInitial","listeners","replay","dispatching","listener","sources","completed","subscriptions","advancing","index","requested","values","ready","iterator","result","returned","event","target","type","every","id","intervalId","delayId","count","seen","subscriptionRef","sourceSubscription","notifierSubscription","notifier","duration","hasPending","callback","onError","project","predicate","initial","reducer","outerComplete","inner","outer","unbounded","concurrency","label","concurrencyLimit","capacityLimit","queue","inners","outerRef","innerRef","attempts","attempt","delay","reject","detach","resolve","emitted","operators","operator"],"sources":["../../arsenal/dist/async/abortError.js","../src/_numeric.ts","../src/errors.ts","../src/_iterator.ts","../src/async.ts","../src/_subscription.ts","../src/core.ts","../src/channel.ts","../src/_link.ts","../src/operators/combination.ts","../src/operators/creation.ts","../src/operators/filtering.ts","../src/_safe.ts","../src/operators/transformation.ts","../src/operators/utility.ts","../src/pipe.ts"],"sourcesContent":["// src/async/abortError.ts\nfunction abortError(e, t = \"Aborted\") {\n\treturn e?.reason ?? new DOMException(t, \"AbortError\");\n}\nexport { abortError };\n\n//# sourceMappingURL=abortError.js.map","export function assertNonNegativeInteger(value: number, name: string): void {\n if (!Number.isInteger(value) || value < 0) {\n throw new RangeError(`${name} must be a non-negative integer`);\n }\n}\n\nexport function assertPositiveInteger(value: number, name: string): void {\n if (!Number.isInteger(value) || value < 1) {\n throw new RangeError(`${name} must be a positive integer`);\n }\n}\n\nexport function assertDuration(milliseconds: number, name: string): void {\n if (!Number.isFinite(milliseconds) || milliseconds < 0 || milliseconds > 2_147_483_647) {\n throw new RangeError(`${name} must be between 0 and 2147483647 milliseconds`);\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\nexport class FluxTimeoutError extends FluxError {\n /** The timeout duration in milliseconds that was exceeded. */\n readonly ms: number;\n\n constructor(ms: number) {\n super(`Timeout after ${ms}ms`);\n this.ms = ms;\n }\n}\n\n/** Thrown by `first()` and `last()` when the source completes without emitting any value. */\nexport class FluxEmptyError extends FluxError {\n constructor(message = 'Stream completed without emitting any value') {\n super(message);\n }\n}\n\n/** Thrown when a bounded buffer (`mergeMap`, `concatMap`, `toArray`, async iteration) overflows. */\nexport class FluxCapacityError extends FluxError {\n /** The configured capacity that was exceeded. */\n readonly capacity: number;\n\n constructor(capacity: number, message: string) {\n super(message);\n this.capacity = capacity;\n }\n}\n","import { abortError } from '@vielzeug/arsenal';\nimport { assertPositiveInteger } from './_numeric.js';\n\nimport { FluxCapacityError } from './errors.js';\nimport type { AsyncIterableOptions, Observer, Stream } from './types.js';\n\ntype Pending<T> = {\n reject(reason: unknown): void;\n resolve(result: IteratorResult<T>): void;\n};\n\ntype IteratorState<T> =\n | { kind: 'complete'; queue: T[] }\n | { kind: 'error'; queue: T[]; reason: unknown }\n | { kind: 'open'; queue: T[] }\n | { kind: 'returned' };\n\n/** Async iteration requires explicit queue policy because streams are push based. */\nexport function toIterator<T>(source: Stream<T>, options: AsyncIterableOptions): AsyncIterableIterator<T> {\n assertPositiveInteger(options.capacity, 'Async iterable capacity');\n if (options.overflow !== 'drop-newest' && options.overflow !== 'drop-oldest' && options.overflow !== 'error') {\n throw new RangeError('Async iterable overflow must be \"drop-newest\", \"drop-oldest\", or \"error\"');\n }\n\n const controller = new AbortController();\n const pending: Pending<T>[] = [];\n let state: IteratorState<T> = { kind: 'open', queue: [] };\n\n const detach = (): void => options.signal?.removeEventListener('abort', abort);\n\n const resolveDone = (): void => {\n while (pending.length > 0) pending.shift()?.resolve({ done: true, value: undefined as T });\n };\n\n const complete = (): void => {\n if (state.kind !== 'open') return;\n\n state = { kind: 'complete', queue: state.queue };\n detach();\n resolveDone();\n };\n\n const fail = (reason: unknown): void => {\n if (state.kind !== 'open') return;\n\n state = { kind: 'error', queue: state.queue, reason };\n controller.abort();\n detach();\n\n while (pending.length > 0) pending.shift()?.reject(reason);\n };\n\n const abort = (): void => {\n fail(abortError(options.signal, 'Async iteration aborted'));\n };\n\n const stop = (): void => {\n controller.abort();\n detach();\n state = { kind: 'returned' };\n resolveDone();\n };\n\n const observer: Observer<T> = {\n complete,\n error: fail,\n next(value) {\n if (state.kind !== 'open') return;\n\n const waiter = pending.shift();\n\n if (waiter) {\n waiter.resolve({ done: false, value });\n\n return;\n }\n\n if (state.queue.length < options.capacity) {\n state.queue.push(value);\n\n return;\n }\n\n if (options.overflow === 'drop-oldest') {\n state.queue.shift();\n state.queue.push(value);\n } else if (options.overflow === 'error') {\n fail(new FluxCapacityError(options.capacity, 'Async iterable buffer capacity exceeded'));\n }\n },\n };\n\n if (options.signal?.aborted) abort();\n else options.signal?.addEventListener('abort', abort, { once: true });\n\n source.subscribe(observer, { signal: controller.signal });\n\n return {\n next(): Promise<IteratorResult<T>> {\n if (state.kind === 'returned') return Promise.resolve({ done: true, value: undefined as T });\n\n if (state.queue.length > 0) return Promise.resolve({ done: false, value: state.queue.shift()! });\n\n if (state.kind === 'error') return Promise.reject(state.reason);\n\n if (state.kind === 'complete') return Promise.resolve({ done: true, value: undefined as T });\n\n return new Promise<IteratorResult<T>>((resolve, reject) => pending.push({ reject, resolve }));\n },\n return(): Promise<IteratorResult<T>> {\n stop();\n\n return Promise.resolve({ done: true, value: undefined as T });\n },\n [Symbol.asyncIterator](): AsyncIterableIterator<T> {\n return this;\n },\n };\n}\n","import { toIterator } from './_iterator.js';\nimport type { AsyncIterableOptions, Stream } from './types.js';\n\n/** Converts a push stream into an async iterable with an explicit overflow policy. */\nexport function toAsyncIterable<T>(source: Stream<T>, options: AsyncIterableOptions): AsyncIterable<T> {\n return {\n [Symbol.asyncIterator](): AsyncIterableIterator<T> {\n return toIterator(source, options);\n },\n };\n}\n","import type { Observer, Sink, Subscription, Teardown } from './types.js';\n\n/** @internal Reports an unhandled stream error through the platform's error reporting channel. */\nexport function reportUnhandledError(reason: unknown): void {\n const reportError = (globalThis as { reportError?: (value: unknown) => void }).reportError;\n\n if (reportError) {\n reportError(reason);\n\n return;\n }\n\n queueMicrotask(() => {\n throw reason;\n });\n}\n\nexport function createSubscription<T>(\n observerOrNext: Observer<T> | ((value: T) => void),\n signal?: AbortSignal,\n): { add(teardown: Teardown | undefined): void; signal: AbortSignal; sink: Sink<T>; subscription: Subscription } {\n const observer: Observer<T> = typeof observerOrNext === 'function' ? { next: observerOrNext } : observerOrNext;\n const controller = new AbortController();\n let closed = false;\n let teardown: Teardown | undefined;\n\n const unsubscribe = (): void => {\n if (closed) return;\n\n closed = true;\n controller.abort();\n signal?.removeEventListener('abort', unsubscribe);\n\n try {\n teardown?.();\n } catch (reason) {\n reportUnhandledError(reason);\n }\n };\n\n const sink: Sink<T> = {\n complete(): void {\n if (closed) return;\n\n try {\n observer.complete?.();\n } catch (reason) {\n reportUnhandledError(reason);\n }\n\n unsubscribe();\n },\n\n error(reason: unknown): void {\n if (closed) return;\n\n if (observer.error) {\n try {\n observer.error(reason);\n } catch (callbackError) {\n reportUnhandledError(callbackError);\n }\n } else {\n reportUnhandledError(reason);\n }\n\n unsubscribe();\n },\n\n next(value: T): void {\n if (closed) return;\n\n try {\n observer.next(value);\n } catch (reason) {\n unsubscribe();\n reportUnhandledError(reason);\n }\n },\n };\n\n const add = (nextTeardown: Teardown | undefined): void => {\n if (!nextTeardown) return;\n\n if (closed) {\n try {\n nextTeardown();\n } catch (reason) {\n reportUnhandledError(reason);\n }\n\n return;\n }\n\n teardown = nextTeardown;\n };\n\n if (signal?.aborted) {\n unsubscribe();\n } else {\n signal?.addEventListener('abort', unsubscribe, { once: true });\n }\n\n return {\n add,\n signal: controller.signal,\n sink,\n subscription: {\n get closed(): boolean {\n return closed;\n },\n [Symbol.dispose]: unsubscribe,\n unsubscribe,\n },\n };\n}\n","import { createSubscription } from './_subscription.js';\nimport type { Observer, Producer, Stream, SubscribeOptions, Subscription, Teardown } from './types.js';\n\n/** Creates lazy work. Producer cleanup belongs to each individual subscription. */\nexport function stream<T>(producer: Producer<T>): Stream<T> {\n return {\n subscribe(observer: Observer<T> | ((value: T) => void), options?: SubscribeOptions): Subscription {\n const subscription = createSubscription(observer, options?.signal);\n\n if (subscription.subscription.closed) return subscription.subscription;\n\n try {\n subscription.add(producer(subscription.sink, subscription.signal));\n } catch (reason) {\n subscription.sink.error(reason);\n }\n\n return subscription.subscription;\n },\n };\n}\n\n/** Bridge a callback-based value subscription into a Flux stream. */\nexport function fromSubscribe<T>(subscribe: (listener: (value: T) => void) => Teardown): Stream<T> {\n return stream((sink) => subscribe(sink.next));\n}\n\n/** Bridge a snapshot/subscription state source into a Flux stream. */\nexport function fromStore<T>(source: { getSnapshot(): T; subscribe(listener: () => void): Teardown }): Stream<T> {\n return stream((sink, signal) => {\n let current: T;\n\n try {\n current = source.getSnapshot();\n sink.next(current);\n if (signal.aborted) return;\n } catch (reason) {\n sink.error(reason);\n return;\n }\n\n const teardown = source.subscribe(() => {\n try {\n current = source.getSnapshot();\n sink.next(current);\n } catch (reason) {\n sink.error(reason);\n }\n });\n\n if (signal.aborted) return teardown;\n\n try {\n const latest = source.getSnapshot();\n if (!Object.is(current, latest)) sink.next(latest);\n } catch (reason) {\n sink.error(reason);\n }\n\n return teardown;\n });\n}\n","import { assertNonNegativeInteger } from './_numeric.js';\nimport { stream } from './core.js';\nimport type { Sink, Stream } from './types.js';\n\nexport type ChannelOptions<T> = {\n initial?: T;\n replay?: number;\n};\n\nexport type Channel<T> = {\n [Symbol.dispose](): void;\n readonly disposalSignal: AbortSignal;\n dispose(): void;\n readonly disposed: boolean;\n send(value: T): void;\n readonly stream: Stream<T>;\n};\n\nfunction replayCapacity<T>(options: ChannelOptions<T>): number {\n const hasInitial = 'initial' in options;\n const capacity = options.replay ?? (hasInitial ? 1 : 0);\n\n assertNonNegativeInteger(capacity, 'Channel replay');\n\n if (hasInitial && capacity === 0) {\n throw new RangeError(\n 'Channel replay cannot be 0 when initial is provided: the initial value would be immediately dropped',\n );\n }\n\n return capacity;\n}\n\n/** Channels own mutable multicast state; disposal is their only terminal event. */\nexport function createChannel<T>(options: ChannelOptions<T> = {}): Channel<T> {\n const capacity = replayCapacity(options);\n const controller = new AbortController();\n const listeners = new Set<Sink<T>>();\n const replay: T[] = [];\n\n if ('initial' in options && capacity > 0) replay.push(options.initial as T);\n\n // Reentrant sends (a listener calling `send` while receiving a previous\n // value) are queued so every listener observes one global FIFO order.\n let dispatching = false;\n const pending: T[] = [];\n\n const source = stream<T>((sink) => {\n // Disposed channels complete new subscribers immediately without replaying\n // retained values: a late subscriber never observes stale state.\n if (controller.signal.aborted) {\n sink.complete();\n\n return;\n }\n\n for (const value of replay) sink.next(value);\n\n listeners.add(sink);\n\n return () => listeners.delete(sink);\n });\n\n const dispose = (): void => {\n if (controller.signal.aborted) return;\n\n controller.abort();\n\n for (const listener of [...listeners]) listener.complete();\n\n listeners.clear();\n replay.length = 0;\n pending.length = 0;\n };\n\n const flush = (): void => {\n dispatching = true;\n\n try {\n while (pending.length > 0) {\n const value = pending.shift()!;\n\n if (capacity > 0) {\n if (replay.length === capacity) replay.shift();\n\n replay.push(value);\n }\n\n for (const listener of [...listeners]) listener.next(value);\n }\n } finally {\n dispatching = false;\n }\n };\n\n return {\n get disposalSignal(): AbortSignal {\n return controller.signal;\n },\n dispose,\n get disposed(): boolean {\n return controller.signal.aborted;\n },\n send(value: T): void {\n if (controller.signal.aborted) return;\n\n pending.push(value);\n\n if (!dispatching) flush();\n },\n stream: source,\n [Symbol.dispose]: dispose,\n };\n}\n","import type { Observer, Stream, Subscription } from './types.js';\n\n/** Every operator forwards its own lifetime to every upstream subscription. */\nexport function link<T>(source: Stream<T>, observer: Observer<T>, signal: AbortSignal): Subscription {\n return source.subscribe(observer, { signal });\n}\n","import { link } from '../_link.js';\nimport { stream } from '../core.js';\nimport type { Stream, Subscription } from '../types.js';\n\ntype StreamValue<T> = T extends Stream<infer Value> ? Value : never;\ntype StreamValues<T extends readonly Stream<unknown>[]> = { [Key in keyof T]: StreamValue<T[Key]> };\n\nexport function merge<T>(...sources: Stream<T>[]): Stream<T> {\n return stream((sink, signal) => {\n if (sources.length === 0) {\n sink.complete();\n\n return;\n }\n\n let completed = 0;\n const subscriptions: Subscription[] = [];\n\n for (const source of sources) {\n const subscription = link(\n source,\n {\n complete() {\n completed++;\n\n if (completed === sources.length) sink.complete();\n },\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n\n subscriptions.push(subscription);\n\n if (signal.aborted) break;\n }\n\n return () =>\n subscriptions.forEach((subscription) => {\n subscription.unsubscribe();\n });\n });\n}\n\nexport function concat<T>(...sources: Stream<T>[]): Stream<T> {\n return stream((sink, signal) => {\n let advancing = false;\n let current: Subscription | undefined;\n let index = 0;\n let requested = false;\n\n const subscribeNext = (): void => {\n if (signal.aborted) return;\n if (advancing) {\n requested = true;\n return;\n }\n\n advancing = true;\n try {\n do {\n requested = false;\n const source = sources[index++];\n\n if (!source) {\n sink.complete();\n return;\n }\n\n const subscription = link(\n source,\n {\n complete() {\n current = undefined;\n subscribeNext();\n },\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n\n current = subscription.closed ? undefined : subscription;\n } while (requested && !signal.aborted);\n } finally {\n advancing = false;\n }\n };\n\n subscribeNext();\n\n return () => current?.unsubscribe();\n });\n}\n\nexport function combineLatest<T extends readonly Stream<unknown>[]>(...sources: T): Stream<StreamValues<T>> {\n return stream((sink, signal) => {\n if (sources.length === 0) {\n sink.complete();\n\n return;\n }\n\n const values = new Array<unknown>(sources.length);\n const ready = new Array<boolean>(sources.length).fill(false);\n const subscriptions: Subscription[] = [];\n let completed = 0;\n\n for (const [index, source] of sources.entries()) {\n if (signal.aborted) break;\n\n const subscription = link(\n source,\n {\n complete() {\n if (!ready[index]) {\n sink.complete();\n\n return;\n }\n\n completed++;\n\n if (completed === sources.length) sink.complete();\n },\n error: sink.error,\n next(value) {\n values[index] = value;\n ready[index] = true;\n\n if (ready.every(Boolean)) sink.next([...values] as StreamValues<T>);\n },\n },\n signal,\n );\n\n subscriptions.push(subscription);\n }\n\n return () =>\n subscriptions.forEach((subscription) => {\n subscription.unsubscribe();\n });\n });\n}\n","import { assertDuration } from '../_numeric.js';\nimport { reportUnhandledError } from '../_subscription.js';\nimport { stream } from '../core.js';\nimport type { Stream } from '../types.js';\n\nexport type TimerOptions = {\n delay: number;\n interval?: number;\n};\n\nexport function of<T>(...values: T[]): Stream<T> {\n return stream((sink) => {\n for (const value of values) sink.next(value);\n sink.complete();\n });\n}\n\nexport function from<T>(source: AsyncIterable<T> | Iterable<T> | Promise<T>): Stream<T> {\n if (Symbol.asyncIterator in Object(source)) {\n return stream((sink, signal) => {\n const iterator = (source as AsyncIterable<T>)[Symbol.asyncIterator]();\n\n void (async () => {\n try {\n while (!signal.aborted) {\n const result = await iterator.next();\n\n if (result.done) {\n sink.complete();\n\n return;\n }\n\n sink.next(result.value);\n }\n } catch (reason) {\n if (!signal.aborted) sink.error(reason);\n }\n })();\n\n return () => {\n try {\n const returned = iterator.return?.();\n if (returned) void returned.catch(reportUnhandledError);\n } catch (reason) {\n reportUnhandledError(reason);\n }\n };\n });\n }\n\n if (typeof (source as Promise<T>).then === 'function') {\n return stream((sink, signal) => {\n void (source as Promise<T>).then(\n (value) => {\n if (!signal.aborted) {\n sink.next(value);\n sink.complete();\n }\n },\n (reason: unknown) => {\n if (!signal.aborted) sink.error(reason);\n },\n );\n });\n }\n\n return stream((sink, signal) => {\n const iterator = (source as Iterable<T>)[Symbol.iterator]();\n\n try {\n while (!signal.aborted) {\n const result = iterator.next();\n\n if (result.done) {\n sink.complete();\n\n return;\n }\n\n sink.next(result.value);\n }\n } catch (reason) {\n sink.error(reason);\n }\n\n return () => {\n iterator.return?.();\n };\n });\n}\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 type: string,\n): Stream<T> {\n return stream((sink) => {\n const listener = (event: T): void => sink.next(event);\n\n target.addEventListener(type, listener);\n\n return () => target.removeEventListener(type, listener);\n });\n}\n\nexport function interval(every: number): Stream<number> {\n assertDuration(every, 'Interval duration');\n\n return stream((sink) => {\n let index = 0;\n const id = setInterval(() => sink.next(index++), every);\n\n return () => clearInterval(id);\n });\n}\n\nexport function timer(options: TimerOptions): Stream<number> {\n assertDuration(options.delay, 'Timer delay');\n\n if (options.interval !== undefined) assertDuration(options.interval, 'Timer interval');\n\n return stream((sink) => {\n let index = 0;\n let intervalId: ReturnType<typeof setInterval> | undefined;\n const delayId = setTimeout(() => {\n sink.next(index++);\n\n if (options.interval === undefined) {\n sink.complete();\n\n return;\n }\n\n intervalId = setInterval(() => sink.next(index++), options.interval);\n }, options.delay);\n\n return () => {\n clearTimeout(delayId);\n if (intervalId !== undefined) clearInterval(intervalId);\n };\n });\n}\n","import { link } from '../_link.js';\nimport { assertDuration, assertNonNegativeInteger } from '../_numeric.js';\nimport { stream } from '../core.js';\nimport { FluxTimeoutError } from '../errors.js';\nimport type { Operator, Stream, Subscription } from '../types.js';\n\nexport function take<T>(count: number): Operator<T, T> {\n assertNonNegativeInteger(count, 'take count');\n\n return (source) =>\n stream((sink, signal) => {\n if (count === 0) {\n sink.complete();\n\n return;\n }\n\n let seen = 0;\n const subscriptionRef: { current?: Subscription } = {};\n\n subscriptionRef.current = link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next(value) {\n sink.next(value);\n seen++;\n\n if (seen === count) {\n sink.complete();\n subscriptionRef.current?.unsubscribe();\n }\n },\n },\n signal,\n );\n\n return () => subscriptionRef.current?.unsubscribe();\n });\n}\n\nfunction isAbortSignal(value: AbortSignal | Stream<unknown>): value is AbortSignal {\n return (\n typeof (value as AbortSignal).aborted === 'boolean' &&\n typeof (value as AbortSignal).addEventListener === 'function' &&\n typeof (value as AbortSignal).removeEventListener === 'function'\n );\n}\n\nexport function takeUntil<T>(notifier: AbortSignal | Stream<unknown>): Operator<T, T> {\n return (source) =>\n stream((sink, signal) => {\n let sourceSubscription: Subscription | undefined;\n let notifierSubscription: Subscription | undefined;\n let removeNotifier = (): void => {};\n\n const complete = (): void => {\n sourceSubscription?.unsubscribe();\n notifierSubscription?.unsubscribe();\n sink.complete();\n };\n\n if (isAbortSignal(notifier)) {\n if (notifier.aborted) {\n sink.complete();\n\n return;\n }\n\n notifier.addEventListener('abort', complete, { once: true });\n removeNotifier = (): void => notifier.removeEventListener('abort', complete);\n } else {\n notifierSubscription = link(notifier, { error: sink.error, next: complete }, signal);\n }\n\n if (!signal.aborted) {\n sourceSubscription = link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n }\n\n return () => {\n removeNotifier();\n sourceSubscription?.unsubscribe();\n notifierSubscription?.unsubscribe();\n };\n });\n}\n\nexport function debounce<T>(duration: number): Operator<T, T> {\n assertDuration(duration, 'Debounce duration');\n\n return (source) =>\n stream((sink, signal) => {\n let cancel: (() => void) | undefined;\n let pending: T | undefined;\n let hasPending = false;\n\n const flush = (): void => {\n cancel = undefined;\n\n if (!hasPending) return;\n\n hasPending = false;\n sink.next(pending as T);\n };\n\n const subscription = link(\n source,\n {\n complete() {\n cancel?.();\n flush();\n sink.complete();\n },\n error: sink.error,\n next(value) {\n pending = value;\n hasPending = true;\n cancel?.();\n const id = setTimeout(flush, duration);\n cancel = () => clearTimeout(id);\n },\n },\n signal,\n );\n\n return () => {\n cancel?.();\n subscription.unsubscribe();\n };\n });\n}\n\nexport function timeout<T>(duration: number): Operator<T, T> {\n assertDuration(duration, 'Timeout duration');\n\n return (source) =>\n stream((sink, signal) => {\n let cancel: () => void;\n\n const start = (): void => {\n const id = setTimeout(() => sink.error(new FluxTimeoutError(duration)), duration);\n cancel = () => clearTimeout(id);\n };\n\n start();\n\n const subscription = link(\n source,\n {\n complete() {\n cancel();\n sink.complete();\n },\n error(reason) {\n cancel();\n sink.error(reason);\n },\n next(value) {\n cancel();\n start();\n sink.next(value);\n },\n },\n signal,\n );\n\n return () => {\n cancel();\n subscription.unsubscribe();\n };\n });\n}\n","export function tryCall(callback: () => void, onError: (reason: unknown) => void): void {\n try {\n callback();\n } catch (reason) {\n onError(reason);\n }\n}\n","import { link } from '../_link.js';\nimport { assertPositiveInteger } from '../_numeric.js';\nimport { tryCall } from '../_safe.js';\nimport { stream } from '../core.js';\nimport { FluxCapacityError } from '../errors.js';\nimport type { Operator, Stream, Subscription } from '../types.js';\n\nexport type FlattenOptions =\n | {\n /** Maximum concurrently active inner subscriptions (positive integer). */\n concurrency: number;\n /** Maximum queued outer values waiting for an inner subscription slot. Required when `concurrency` is finite. */\n capacity: number;\n }\n | {\n /** Start every outer value immediately: the queue never grows, so no `capacity` applies. */\n concurrency: 'unbounded';\n capacity?: undefined;\n };\n\nexport function map<A, B>(project: (value: A) => B): Operator<A, B> {\n return (source) =>\n stream(\n (sink, signal) =>\n link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next(value) {\n tryCall(() => sink.next(project(value)), sink.error);\n },\n },\n signal,\n ).unsubscribe,\n );\n}\n\nexport function filter<T>(predicate: (value: T) => boolean): Operator<T, T> {\n return (source) =>\n stream(\n (sink, signal) =>\n link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next(value) {\n tryCall(() => {\n if (predicate(value)) sink.next(value);\n }, sink.error);\n },\n },\n signal,\n ).unsubscribe,\n );\n}\n\nexport function scan<T, A>(reducer: (state: A, value: T) => A, initial: A): Operator<T, A> {\n return (source) =>\n stream((sink, signal) => {\n let state = initial;\n\n return link(\n source,\n {\n complete: sink.complete,\n error: sink.error,\n next(value) {\n tryCall(() => {\n state = reducer(state, value);\n sink.next(state);\n }, sink.error);\n },\n },\n signal,\n ).unsubscribe;\n });\n}\n\nexport function switchMap<A, B>(project: (value: A) => Stream<B>): Operator<A, B> {\n return (source) =>\n stream((sink, signal) => {\n let outerComplete = false;\n let inner: Subscription | undefined;\n\n const finish = (): void => {\n if (outerComplete && !inner) sink.complete();\n };\n\n const outer = link(\n source,\n {\n complete() {\n outerComplete = true;\n finish();\n },\n error: sink.error,\n next(value) {\n inner?.unsubscribe();\n inner = undefined;\n\n tryCall(() => {\n const subscription = link(\n project(value),\n {\n complete() {\n inner = undefined;\n finish();\n },\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n\n inner = subscription.closed ? undefined : subscription;\n }, sink.error);\n },\n },\n signal,\n );\n\n return () => {\n outer.unsubscribe();\n inner?.unsubscribe();\n };\n });\n}\n\nfunction flatten<A, B>(project: (value: A) => Stream<B>, options: FlattenOptions, label: string): Operator<A, B> {\n // Read through the union once; the finite branch's `capacity` is runtime-validated for JS callers.\n const { capacity, concurrency } = options as { capacity?: number; concurrency: number | 'unbounded' };\n const unbounded = concurrency === 'unbounded';\n\n if (!unbounded) {\n assertPositiveInteger(concurrency, `${label} concurrency`);\n\n if (capacity === undefined) {\n throw new RangeError(\n `${label} requires capacity when concurrency is finite; use { concurrency: \"unbounded\" } to start every value immediately`,\n );\n }\n\n assertPositiveInteger(capacity, `${label} capacity`);\n }\n\n // Post-guard numeric views: the unbounded branch never enqueues, so it needs no limits.\n const concurrencyLimit = unbounded ? Number.POSITIVE_INFINITY : (concurrency as number);\n const capacityLimit = unbounded ? Number.POSITIVE_INFINITY : (capacity as number);\n\n return (source) =>\n stream((sink, signal) => {\n const queue: A[] = [];\n const inners = new Set<Subscription>();\n let outerComplete = false;\n const outerRef: { current?: Subscription } = {};\n\n const finish = (): void => {\n if (outerComplete && inners.size === 0 && queue.length === 0) sink.complete();\n };\n\n const startInner = (value: A): void => {\n tryCall(() => {\n const innerRef: { current?: Subscription } = {};\n\n innerRef.current = link(\n project(value),\n {\n complete() {\n if (innerRef.current) inners.delete(innerRef.current);\n\n drain();\n },\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n\n if (!innerRef.current.closed) inners.add(innerRef.current);\n else drain();\n }, sink.error);\n };\n\n const drain = (): void => {\n if (signal.aborted) return;\n\n while (queue.length > 0 && inners.size < concurrencyLimit) {\n const value = queue.shift()!;\n\n startInner(value);\n }\n\n finish();\n };\n\n outerRef.current = link(\n source,\n {\n complete() {\n outerComplete = true;\n finish();\n },\n error: sink.error,\n next(value) {\n if (queue.length >= capacityLimit) {\n outerRef.current?.unsubscribe();\n sink.error(new FluxCapacityError(capacityLimit, `${label} buffer capacity exceeded`));\n\n return;\n }\n\n queue.push(value);\n drain();\n },\n },\n signal,\n );\n\n return () => {\n outerRef.current?.unsubscribe();\n for (const inner of inners) inner.unsubscribe();\n queue.length = 0;\n };\n });\n}\n\nexport function mergeMap<A, B>(project: (value: A) => Stream<B>, options: FlattenOptions): Operator<A, B> {\n return flatten(project, options, 'mergeMap');\n}\n\nexport function concatMap<A, B>(project: (value: A) => Stream<B>, options: { capacity: number }): Operator<A, B> {\n return flatten(project, { capacity: options.capacity, concurrency: 1 }, 'concatMap');\n}\n","import { abortError } from '@vielzeug/arsenal';\n\nimport { link } from '../_link.js';\nimport { assertDuration, assertNonNegativeInteger } from '../_numeric.js';\nimport { tryCall } from '../_safe.js';\nimport { stream } from '../core.js';\nimport { FluxCapacityError, FluxEmptyError } from '../errors.js';\nimport type { Operator, Stream, Subscription } from '../types.js';\n\nexport type RetryOptions = {\n times: number;\n delay?: number | ((attempt: number) => number);\n};\n\nexport type ToArrayOptions = {\n maxItems: number;\n signal?: AbortSignal;\n};\n\nexport type ValueOptions<T> = {\n signal?: AbortSignal;\n /** Resolved when the source completes empty instead of rejecting with `FluxEmptyError`. */\n defaultValue?: T;\n};\n\nexport function retry<T>(options: RetryOptions): Operator<T, T> {\n assertNonNegativeInteger(options.times, 'retry times');\n\n return (source) =>\n stream((sink, signal) => {\n let attempts = 0;\n let current: Subscription | undefined;\n let delayId: ReturnType<typeof setTimeout> | undefined;\n\n const start = (): void => {\n if (signal.aborted) return;\n\n const subscription = link(\n source,\n {\n complete: sink.complete,\n error(reason) {\n if (attempts === options.times) {\n sink.error(reason);\n\n return;\n }\n\n const attempt = attempts++;\n let delay: number | undefined;\n\n tryCall(() => {\n delay = typeof options.delay === 'function' ? options.delay(attempt) : options.delay;\n }, sink.error);\n\n if (signal.aborted) return;\n\n if (delay !== undefined) {\n try {\n assertDuration(delay, 'Retry delay');\n } catch (reason) {\n sink.error(reason);\n return;\n }\n }\n\n if (delay === undefined || delay === 0) {\n queueMicrotask(start);\n } else {\n delayId = setTimeout(start, delay);\n }\n },\n next: sink.next,\n },\n signal,\n );\n\n if (!subscription.closed) current = subscription;\n };\n\n start();\n\n return () => {\n if (delayId !== undefined) clearTimeout(delayId);\n current?.unsubscribe();\n };\n });\n}\n\n/**\n * Wire an external AbortSignal into a terminal consumer promise. Returns the\n * detach function every terminal callback must call, or `null` when the signal\n * was already aborted (the promise has rejected by then).\n */\nfunction watchSignal(\n signal: AbortSignal | undefined,\n controller: AbortController,\n reject: (reason: unknown) => void,\n): (() => void) | null {\n if (!signal) return () => {};\n\n const abort = (): void => {\n controller.abort();\n reject(abortError(signal, 'Stream consumption aborted'));\n };\n\n if (signal.aborted) {\n abort();\n\n return null;\n }\n\n signal.addEventListener('abort', abort, { once: true });\n\n return () => signal.removeEventListener('abort', abort);\n}\n\nexport function first<T>(source: Stream<T>, options?: ValueOptions<T>): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const controller = new AbortController();\n const detach = watchSignal(options?.signal, controller, reject);\n if (!detach) return;\n\n link(\n source,\n {\n complete() {\n detach();\n\n if ('defaultValue' in (options ?? {})) resolve(options!.defaultValue as T);\n else reject(new FluxEmptyError());\n },\n error(reason) {\n detach();\n reject(reason);\n },\n next(value) {\n detach();\n controller.abort();\n resolve(value);\n },\n },\n controller.signal,\n );\n });\n}\n\nexport function last<T>(source: Stream<T>, options?: ValueOptions<T>): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const controller = new AbortController();\n const detach = watchSignal(options?.signal, controller, reject);\n if (!detach) return;\n\n let emitted = false;\n let latest: T | undefined;\n\n link(\n source,\n {\n complete() {\n detach();\n\n if (emitted) resolve(latest as T);\n else if ('defaultValue' in (options ?? {})) resolve(options!.defaultValue as T);\n else reject(new FluxEmptyError());\n },\n error(reason) {\n detach();\n reject(reason);\n },\n next(value) {\n emitted = true;\n latest = value;\n },\n },\n controller.signal,\n );\n });\n}\n\nexport function toArray<T>(source: Stream<T>, options: ToArrayOptions): Promise<T[]> {\n assertNonNegativeInteger(options.maxItems, 'toArray maxItems');\n\n return new Promise<T[]>((resolve, reject) => {\n const controller = new AbortController();\n const values: T[] = [];\n const detach = watchSignal(options.signal, controller, reject);\n if (!detach) return;\n\n link(\n source,\n {\n complete() {\n detach();\n resolve(values);\n },\n error(reason) {\n detach();\n reject(reason);\n },\n next(value) {\n if (values.length === options.maxItems) {\n detach();\n controller.abort();\n reject(new FluxCapacityError(options.maxItems, 'toArray maxItems exceeded'));\n\n return;\n }\n\n values.push(value);\n },\n },\n controller.signal,\n );\n });\n}\n","import type { Operator, PipedStream, Stream, ValidPipe } from './types.js';\n\n/** Standalone composition preserves contextual types for inline generic operators. */\nexport function pipe<Input>(source: Stream<Input>): Stream<Input>;\nexport function pipe<Input, A>(source: Stream<Input>, operator1: Operator<Input, A>): Stream<A>;\nexport function pipe<Input, A, B>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n): Stream<B>;\nexport function pipe<Input, A, B, C>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n): Stream<C>;\nexport function pipe<Input, A, B, C, D>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n): Stream<D>;\nexport function pipe<Input, A, B, C, D, E>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n operator5: Operator<D, E>,\n): Stream<E>;\nexport function pipe<Input, A, B, C, D, E, F>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n operator5: Operator<D, E>,\n operator6: Operator<E, F>,\n): Stream<F>;\nexport function pipe<Input, A, B, C, D, E, F, G>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n operator5: Operator<D, E>,\n operator6: Operator<E, F>,\n operator7: Operator<F, G>,\n): Stream<G>;\nexport function pipe<Input, A, B, C, D, E, F, G, H>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n operator5: Operator<D, E>,\n operator6: Operator<E, F>,\n operator7: Operator<F, G>,\n operator8: Operator<G, H>,\n): Stream<H>;\nexport function pipe<Input, A, B, C, D, E, F, G, H, I>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n operator5: Operator<D, E>,\n operator6: Operator<E, F>,\n operator7: Operator<F, G>,\n operator8: Operator<G, H>,\n operator9: Operator<H, I>,\n): Stream<I>;\nexport function pipe<Input, A, B, C, D, E, F, G, H, I, J>(\n source: Stream<Input>,\n operator1: Operator<Input, A>,\n operator2: Operator<A, B>,\n operator3: Operator<B, C>,\n operator4: Operator<C, D>,\n operator5: Operator<D, E>,\n operator6: Operator<E, F>,\n operator7: Operator<F, G>,\n operator8: Operator<G, H>,\n operator9: Operator<H, I>,\n operator10: Operator<I, J>,\n): Stream<J>;\nexport function pipe<Input, const Operators extends readonly unknown[]>(\n source: Stream<Input>,\n ...operators: Operators & ValidPipe<Input, Operators>\n): PipedStream<Input, Operators>;\nexport function pipe<Input, const Operators extends readonly unknown[]>(\n source: Stream<Input>,\n ...operators: Operators & ValidPipe<Input, Operators>\n): PipedStream<Input, Operators> {\n return operators.reduce(\n (current: Stream<unknown>, operator: Operator) => operator(current),\n source as Stream<unknown>,\n ) as PipedStream<Input, Operators>;\n}\n"],"mappings":"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"}