@vielzeug/flux 3.0.0 → 26.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/_iterator.cjs +1 -1
  2. package/dist/_iterator.cjs.map +1 -1
  3. package/dist/_iterator.js +1 -76
  4. package/dist/_iterator.js.map +1 -1
  5. package/dist/_link.cjs +1 -1
  6. package/dist/_link.cjs.map +1 -1
  7. package/dist/_link.js +1 -7
  8. package/dist/_link.js.map +1 -1
  9. package/dist/_numeric.cjs +1 -1
  10. package/dist/_numeric.cjs.map +1 -1
  11. package/dist/_numeric.js +1 -13
  12. package/dist/_numeric.js.map +1 -1
  13. package/dist/_safe.cjs +1 -1
  14. package/dist/_safe.cjs.map +1 -1
  15. package/dist/_safe.js +1 -11
  16. package/dist/_safe.js.map +1 -1
  17. package/dist/_scheduler.js +1 -14
  18. package/dist/_scheduler.js.map +1 -1
  19. package/dist/_subscription.cjs +1 -1
  20. package/dist/_subscription.cjs.map +1 -1
  21. package/dist/_subscription.js +1 -79
  22. package/dist/_subscription.js.map +1 -1
  23. package/dist/async.cjs +1 -1
  24. package/dist/async.cjs.map +1 -1
  25. package/dist/async.js +1 -10
  26. package/dist/async.js.map +1 -1
  27. package/dist/channel.cjs +1 -1
  28. package/dist/channel.cjs.map +1 -1
  29. package/dist/channel.js +1 -54
  30. package/dist/channel.js.map +1 -1
  31. package/dist/core.cjs +1 -1
  32. package/dist/core.cjs.map +1 -1
  33. package/dist/core.js +1 -46
  34. package/dist/core.js.map +1 -1
  35. package/dist/errors.cjs +1 -1
  36. package/dist/errors.cjs.map +1 -1
  37. package/dist/errors.d.ts +0 -4
  38. package/dist/errors.d.ts.map +1 -1
  39. package/dist/errors.js +1 -27
  40. package/dist/errors.js.map +1 -1
  41. package/dist/flux.cjs +1 -1
  42. package/dist/flux.cjs.map +1 -1
  43. package/dist/flux.iife.js +1 -1
  44. package/dist/flux.iife.js.map +1 -1
  45. package/dist/flux.js +1 -1
  46. package/dist/flux.js.map +1 -1
  47. package/dist/index.cjs +1 -1
  48. package/dist/index.d.ts +2 -0
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +1 -10
  51. package/dist/operators/combination.cjs +1 -1
  52. package/dist/operators/combination.cjs.map +1 -1
  53. package/dist/operators/combination.js +1 -91
  54. package/dist/operators/combination.js.map +1 -1
  55. package/dist/operators/creation.cjs +1 -1
  56. package/dist/operators/creation.cjs.map +1 -1
  57. package/dist/operators/creation.js +1 -89
  58. package/dist/operators/creation.js.map +1 -1
  59. package/dist/operators/filtering.cjs +1 -1
  60. package/dist/operators/filtering.cjs.map +1 -1
  61. package/dist/operators/filtering.js +1 -92
  62. package/dist/operators/filtering.js.map +1 -1
  63. package/dist/operators/transformation.cjs +1 -1
  64. package/dist/operators/transformation.cjs.map +1 -1
  65. package/dist/operators/transformation.js +1 -123
  66. package/dist/operators/transformation.js.map +1 -1
  67. package/dist/operators/utility.cjs +1 -1
  68. package/dist/operators/utility.cjs.map +1 -1
  69. package/dist/operators/utility.d.ts +1 -1
  70. package/dist/operators/utility.d.ts.map +1 -1
  71. package/dist/operators/utility.js +1 -115
  72. package/dist/operators/utility.js.map +1 -1
  73. package/dist/pipe.cjs +1 -1
  74. package/dist/pipe.cjs.map +1 -1
  75. package/dist/pipe.js +1 -7
  76. package/dist/pipe.js.map +1 -1
  77. package/dist/subjects.d.ts +1 -2
  78. package/dist/subjects.d.ts.map +1 -1
  79. package/package.json +5 -13
  80. package/dist/subjects.cjs +0 -1
  81. package/dist/subjects.js +0 -2
@@ -1,2 +1,2 @@
1
- const e=require("./_numeric.cjs"),t=require("./errors.cjs");let n=require("@vielzeug/arsenal");function r(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:[]},c=()=>i.signal?.removeEventListener(`abort`,f),l=()=>{for(;o.length>0;)o.shift()?.resolve({done:!0,value:void 0})},u=()=>{s.kind===`open`&&(s.kind=`complete`,c(),l())},d=e=>{if(s.kind===`open`)for(s={kind:`error`,queue:s.queue,reason:e},a.abort(),c();o.length>0;)o.shift()?.reject(e)},f=()=>{d((0,n.abortError)(i.signal,`Async iteration aborted`))},p=()=>{a.abort(),c(),s={kind:`returned`},l()},m={complete:u,error:d,next(e){if(s.kind!==`open`)return;let n=o.shift();if(n){n.resolve({done:!1,value:e});return}if(s.queue.length<i.capacity){s.queue.push(e);return}i.overflow===`drop-oldest`?(s.queue.shift(),s.queue.push(e)):i.overflow===`error`&&d(new t.FluxCapacityError(i.capacity,`Async iterable buffer capacity exceeded`))}};return i.signal?.aborted?f():i.signal?.addEventListener(`abort`,f,{once:!0}),r.subscribe(m,{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 p(),Promise.resolve({done:!0,value:void 0})},[Symbol.asyncIterator](){return this}}}exports.toIterator=r;
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();if(n){n.resolve({done:!1,value:e});return}if(s.queue.length<i.capacity){s.queue.push(e);return}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":[],"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":"+FAiBA,SAAgB,EAAc,EAAmB,EAAyD,CAExG,GADA,EAAA,sBAAsB,EAAQ,SAAU,yBAAyB,EAC7D,EAAQ,WAAa,eAAiB,EAAQ,WAAa,eAAiB,EAAQ,WAAa,QACnG,MAAU,WAAW,0EAA0E,EAGjG,IAAM,EAAa,IAAI,gBACjB,EAAwB,CAAC,EAC3B,EAA0B,CAAE,KAAM,OAAQ,MAAO,CAAC,CAAE,EAElD,MAAqB,EAAQ,QAAQ,oBAAoB,QAAS,CAAK,EAEvE,MAA0B,CAC9B,KAAO,EAAQ,OAAS,GAAG,EAAQ,MAAM,CAAC,EAAE,QAAQ,CAAE,KAAM,GAAM,MAAO,IAAA,EAAe,CAAC,CAC3F,EAEM,MAAuB,CACvB,EAAM,OAAS,SAEnB,EAAM,KAAO,WACb,EAAO,EACP,EAAY,EACd,EAEM,EAAQ,GAA0B,CAClC,KAAM,OAAS,OAMnB,IAJA,EAAQ,CAAE,KAAM,QAAS,MAAO,EAAM,MAAO,QAAO,EACpD,EAAW,MAAM,EACjB,EAAO,EAEA,EAAQ,OAAS,GAAG,EAAQ,MAAM,CAAC,EAAE,OAAO,CAAM,CAC3D,EAEM,MAAoB,CACxB,GAAA,EAAK,EAAA,WAAA,CAAW,EAAQ,OAAQ,yBAAyB,CAAC,CAC5D,EAEM,MAAmB,CACvB,EAAW,MAAM,EACjB,EAAO,EACP,EAAQ,CAAE,KAAM,UAAW,EAC3B,EAAY,CACd,EAEM,EAAwB,CAC5B,WACA,MAAO,EACP,KAAK,EAAO,CACV,GAAI,EAAM,OAAS,OAAQ,OAE3B,IAAM,EAAS,EAAQ,MAAM,EAE7B,GAAI,EAAQ,CACV,EAAO,QAAQ,CAAE,KAAM,GAAO,OAAM,CAAC,EAErC,MACF,CAEA,GAAI,EAAM,MAAM,OAAS,EAAQ,SAAU,CACzC,EAAM,MAAM,KAAK,CAAK,EAEtB,MACF,CAEI,EAAQ,WAAa,eACvB,EAAM,MAAM,MAAM,EAClB,EAAM,MAAM,KAAK,CAAK,GACb,EAAQ,WAAa,SAC9B,EAAK,IAAI,EAAA,kBAAkB,EAAQ,SAAU,yCAAyC,CAAC,CAE3F,CACF,EAOA,OALI,EAAQ,QAAQ,QAAS,EAAM,EAC9B,EAAQ,QAAQ,iBAAiB,QAAS,EAAO,CAAE,KAAM,EAAK,CAAC,EAEpE,EAAO,UAAU,EAAU,CAAE,OAAQ,EAAW,MAAO,CAAC,EAEjD,CACL,MAAmC,CASjC,OARI,EAAM,OAAS,WAAmB,QAAQ,QAAQ,CAAE,KAAM,GAAM,MAAO,IAAA,EAAe,CAAC,EAEvF,EAAM,MAAM,OAAS,EAAU,QAAQ,QAAQ,CAAE,KAAM,GAAO,MAAO,EAAM,MAAM,MAAM,CAAG,CAAC,EAE3F,EAAM,OAAS,QAAgB,QAAQ,OAAO,EAAM,MAAM,EAE1D,EAAM,OAAS,WAAmB,QAAQ,QAAQ,CAAE,KAAM,GAAM,MAAO,IAAA,EAAe,CAAC,EAEpF,IAAI,SAA4B,EAAS,IAAW,EAAQ,KAAK,CAAE,SAAQ,SAAQ,CAAC,CAAC,CAC9F,EACA,QAAqC,CAGnC,OAFA,EAAK,EAEE,QAAQ,QAAQ,CAAE,KAAM,GAAM,MAAO,IAAA,EAAe,CAAC,CAC9D,EACA,CAAC,OAAO,gBAA2C,CACjD,OAAO,IACT,CACF,CACF"}
1
+ {"version":3,"file":"_iterator.cjs","names":[],"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":"+FAiBA,SAAgB,WAAc,EAAmB,EAAyD,CAExG,GADA,EAAA,sBAAsB,EAAQ,SAAU,yBAAyB,EAC7D,EAAQ,WAAa,eAAiB,EAAQ,WAAa,eAAiB,EAAQ,WAAa,QACnG,MAAU,WAAW,0EAA0E,EAGjG,IAAM,EAAa,IAAI,gBACjB,EAAwB,CAAC,EAC3B,EAA0B,CAAE,KAAM,OAAQ,MAAO,CAAC,CAAE,EAElD,WAAqB,EAAQ,QAAQ,oBAAoB,QAAS,KAAK,EAEvE,gBAA0B,CAC9B,KAAO,EAAQ,OAAS,GAAG,EAAQ,MAAM,CAAC,EAAE,QAAQ,CAAE,KAAM,GAAM,MAAO,IAAA,EAAe,CAAC,CAC3F,EAEM,aAAuB,CACvB,EAAM,OAAS,SAEnB,EAAM,KAAO,WACb,OAAO,EACP,YAAY,EACd,EAEM,KAAQ,GAA0B,CAClC,KAAM,OAAS,OAMnB,IAJA,EAAQ,CAAE,KAAM,QAAS,MAAO,EAAM,MAAO,QAAO,EACpD,EAAW,MAAM,EACjB,OAAO,EAEA,EAAQ,OAAS,GAAG,EAAQ,MAAM,CAAC,EAAE,OAAO,CAAM,CAC3D,EAEM,UAAoB,CACxB,MAAA,EAAK,EAAA,WAAA,CAAW,EAAQ,OAAQ,yBAAyB,CAAC,CAC5D,EAEM,SAAmB,CACvB,EAAW,MAAM,EACjB,OAAO,EACP,EAAQ,CAAE,KAAM,UAAW,EAC3B,YAAY,CACd,EAEM,EAAwB,CAC5B,SACA,MAAO,KACP,KAAK,EAAO,CACV,GAAI,EAAM,OAAS,OAAQ,OAE3B,IAAM,EAAS,EAAQ,MAAM,EAE7B,GAAI,EAAQ,CACV,EAAO,QAAQ,CAAE,KAAM,GAAO,OAAM,CAAC,EAErC,MACF,CAEA,GAAI,EAAM,MAAM,OAAS,EAAQ,SAAU,CACzC,EAAM,MAAM,KAAK,CAAK,EAEtB,MACF,CAEI,EAAQ,WAAa,eACvB,EAAM,MAAM,MAAM,EAClB,EAAM,MAAM,KAAK,CAAK,GACb,EAAQ,WAAa,SAC9B,KAAK,IAAI,EAAA,kBAAkB,EAAQ,SAAU,yCAAyC,CAAC,CAE3F,CACF,EAOA,OALI,EAAQ,QAAQ,QAAS,MAAM,EAC9B,EAAQ,QAAQ,iBAAiB,QAAS,MAAO,CAAE,KAAM,EAAK,CAAC,EAEpE,EAAO,UAAU,EAAU,CAAE,OAAQ,EAAW,MAAO,CAAC,EAEjD,CACL,MAAmC,CASjC,OARI,EAAM,OAAS,WAAmB,QAAQ,QAAQ,CAAE,KAAM,GAAM,MAAO,IAAA,EAAe,CAAC,EAEvF,EAAM,MAAM,OAAS,EAAU,QAAQ,QAAQ,CAAE,KAAM,GAAO,MAAO,EAAM,MAAM,MAAM,CAAG,CAAC,EAE3F,EAAM,OAAS,QAAgB,QAAQ,OAAO,EAAM,MAAM,EAE1D,EAAM,OAAS,WAAmB,QAAQ,QAAQ,CAAE,KAAM,GAAM,MAAO,IAAA,EAAe,CAAC,EAEpF,IAAI,SAA4B,EAAS,IAAW,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"}
package/dist/_iterator.js CHANGED
@@ -1,77 +1,2 @@
1
- import { assertPositiveInteger as e } from "./_numeric.js";
2
- import { FluxCapacityError as t } from "./errors.js";
3
- import { abortError as n } from "@vielzeug/arsenal";
4
- //#region src/_iterator.ts
5
- function r(r, i) {
6
- if (e(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\"");
7
- let a = new AbortController(), o = [], s = {
8
- kind: "open",
9
- queue: []
10
- }, c = () => i.signal?.removeEventListener("abort", f), l = () => {
11
- for (; o.length > 0;) o.shift()?.resolve({
12
- done: !0,
13
- value: void 0
14
- });
15
- }, u = () => {
16
- s.kind === "open" && (s.kind = "complete", c(), l());
17
- }, d = (e) => {
18
- if (s.kind === "open") for (s = {
19
- kind: "error",
20
- queue: s.queue,
21
- reason: e
22
- }, a.abort(), c(); o.length > 0;) o.shift()?.reject(e);
23
- }, f = () => {
24
- d(n(i.signal, "Async iteration aborted"));
25
- }, p = () => {
26
- a.abort(), c(), s = { kind: "returned" }, l();
27
- }, m = {
28
- complete: u,
29
- error: d,
30
- next(e) {
31
- if (s.kind !== "open") return;
32
- let n = o.shift();
33
- if (n) {
34
- n.resolve({
35
- done: !1,
36
- value: e
37
- });
38
- return;
39
- }
40
- if (s.queue.length < i.capacity) {
41
- s.queue.push(e);
42
- return;
43
- }
44
- i.overflow === "drop-oldest" ? (s.queue.shift(), s.queue.push(e)) : i.overflow === "error" && d(new t(i.capacity, "Async iterable buffer capacity exceeded"));
45
- }
46
- };
47
- return i.signal?.aborted ? f() : i.signal?.addEventListener("abort", f, { once: !0 }), r.subscribe(m, { signal: a.signal }), {
48
- next() {
49
- return s.kind === "returned" ? Promise.resolve({
50
- done: !0,
51
- value: void 0
52
- }) : s.queue.length > 0 ? Promise.resolve({
53
- done: !1,
54
- value: s.queue.shift()
55
- }) : s.kind === "error" ? Promise.reject(s.reason) : s.kind === "complete" ? Promise.resolve({
56
- done: !0,
57
- value: void 0
58
- }) : new Promise((e, t) => o.push({
59
- reject: t,
60
- resolve: e
61
- }));
62
- },
63
- return() {
64
- return p(), Promise.resolve({
65
- done: !0,
66
- value: void 0
67
- });
68
- },
69
- [Symbol.asyncIterator]() {
70
- return this;
71
- }
72
- };
73
- }
74
- //#endregion
75
- export { r as toIterator };
76
-
1
+ import{assertPositiveInteger as e}from"./_numeric.js";import{FluxCapacityError as t}from"./errors.js";import{abortError as n}from"@vielzeug/arsenal";function toIterator(r,i){if(e(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(n(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();if(n){n.resolve({done:!1,value:e});return}if(s.queue.length<i.capacity){s.queue.push(e);return}i.overflow===`drop-oldest`?(s.queue.shift(),s.queue.push(e)):i.overflow===`error`&&fail(new t(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}}}export{toIterator};
77
2
  //# sourceMappingURL=_iterator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_iterator.js","names":[],"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,EAAc,GAAmB,GAAyD;CAExG,IADA,EAAsB,EAAQ,UAAU,yBAAyB,GAC7D,EAAQ,aAAa,iBAAiB,EAAQ,aAAa,iBAAiB,EAAQ,aAAa,SACnG,MAAU,WAAW,gFAA0E;CAGjG,IAAM,IAAa,IAAI,gBAAgB,GACjC,IAAwB,CAAC,GAC3B,IAA0B;EAAE,MAAM;EAAQ,OAAO,CAAC;CAAE,GAElD,UAAqB,EAAQ,QAAQ,oBAAoB,SAAS,CAAK,GAEvE,UAA0B;EAC9B,OAAO,EAAQ,SAAS,IAAG,EAAQ,MAAM,CAAC,EAAE,QAAQ;GAAE,MAAM;GAAM,OAAO,KAAA;EAAe,CAAC;CAC3F,GAEM,UAAuB;EACvB,EAAM,SAAS,WAEnB,EAAM,OAAO,YACb,EAAO,GACP,EAAY;CACd,GAEM,KAAQ,MAA0B;EAClC,MAAM,SAAS,QAMnB,KAJA,IAAQ;GAAE,MAAM;GAAS,OAAO,EAAM;GAAO;EAAO,GACpD,EAAW,MAAM,GACjB,EAAO,GAEA,EAAQ,SAAS,IAAG,EAAQ,MAAM,CAAC,EAAE,OAAO,CAAM;CAC3D,GAEM,UAAoB;EACxB,EAAK,EAAW,EAAQ,QAAQ,yBAAyB,CAAC;CAC5D,GAEM,UAAmB;EAIvB,AAHA,EAAW,MAAM,GACjB,EAAO,GACP,IAAQ,EAAE,MAAM,WAAW,GAC3B,EAAY;CACd,GAEM,IAAwB;EAC5B;EACA,OAAO;EACP,KAAK,GAAO;GACV,IAAI,EAAM,SAAS,QAAQ;GAE3B,IAAM,IAAS,EAAQ,MAAM;GAE7B,IAAI,GAAQ;IACV,EAAO,QAAQ;KAAE,MAAM;KAAO;IAAM,CAAC;IAErC;GACF;GAEA,IAAI,EAAM,MAAM,SAAS,EAAQ,UAAU;IACzC,EAAM,MAAM,KAAK,CAAK;IAEtB;GACF;GAEA,AAAI,EAAQ,aAAa,iBACvB,EAAM,MAAM,MAAM,GAClB,EAAM,MAAM,KAAK,CAAK,KACb,EAAQ,aAAa,WAC9B,EAAK,IAAI,EAAkB,EAAQ,UAAU,yCAAyC,CAAC;EAE3F;CACF;CAOA,OALI,EAAQ,QAAQ,UAAS,EAAM,IAC9B,EAAQ,QAAQ,iBAAiB,SAAS,GAAO,EAAE,MAAM,GAAK,CAAC,GAEpE,EAAO,UAAU,GAAU,EAAE,QAAQ,EAAW,OAAO,CAAC,GAEjD;EACL,OAAmC;GASjC,OARI,EAAM,SAAS,aAAmB,QAAQ,QAAQ;IAAE,MAAM;IAAM,OAAO,KAAA;GAAe,CAAC,IAEvF,EAAM,MAAM,SAAS,IAAU,QAAQ,QAAQ;IAAE,MAAM;IAAO,OAAO,EAAM,MAAM,MAAM;GAAG,CAAC,IAE3F,EAAM,SAAS,UAAgB,QAAQ,OAAO,EAAM,MAAM,IAE1D,EAAM,SAAS,aAAmB,QAAQ,QAAQ;IAAE,MAAM;IAAM,OAAO,KAAA;GAAe,CAAC,IAEpF,IAAI,SAA4B,GAAS,MAAW,EAAQ,KAAK;IAAE;IAAQ;GAAQ,CAAC,CAAC;EAC9F;EACA,SAAqC;GAGnC,OAFA,EAAK,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":[],"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":"qJAiBA,SAAgB,WAAc,EAAmB,EAAyD,CAExG,GADA,EAAsB,EAAQ,SAAU,yBAAyB,EAC7D,EAAQ,WAAa,eAAiB,EAAQ,WAAa,eAAiB,EAAQ,WAAa,QACnG,MAAU,WAAW,0EAA0E,EAGjG,IAAM,EAAa,IAAI,gBACjB,EAAwB,CAAC,EAC3B,EAA0B,CAAE,KAAM,OAAQ,MAAO,CAAC,CAAE,EAElD,WAAqB,EAAQ,QAAQ,oBAAoB,QAAS,KAAK,EAEvE,gBAA0B,CAC9B,KAAO,EAAQ,OAAS,GAAG,EAAQ,MAAM,CAAC,EAAE,QAAQ,CAAE,KAAM,GAAM,MAAO,IAAA,EAAe,CAAC,CAC3F,EAEM,aAAuB,CACvB,EAAM,OAAS,SAEnB,EAAM,KAAO,WACb,OAAO,EACP,YAAY,EACd,EAEM,KAAQ,GAA0B,CAClC,KAAM,OAAS,OAMnB,IAJA,EAAQ,CAAE,KAAM,QAAS,MAAO,EAAM,MAAO,QAAO,EACpD,EAAW,MAAM,EACjB,OAAO,EAEA,EAAQ,OAAS,GAAG,EAAQ,MAAM,CAAC,EAAE,OAAO,CAAM,CAC3D,EAEM,UAAoB,CACxB,KAAK,EAAW,EAAQ,OAAQ,yBAAyB,CAAC,CAC5D,EAEM,SAAmB,CACvB,EAAW,MAAM,EACjB,OAAO,EACP,EAAQ,CAAE,KAAM,UAAW,EAC3B,YAAY,CACd,EAEM,EAAwB,CAC5B,SACA,MAAO,KACP,KAAK,EAAO,CACV,GAAI,EAAM,OAAS,OAAQ,OAE3B,IAAM,EAAS,EAAQ,MAAM,EAE7B,GAAI,EAAQ,CACV,EAAO,QAAQ,CAAE,KAAM,GAAO,OAAM,CAAC,EAErC,MACF,CAEA,GAAI,EAAM,MAAM,OAAS,EAAQ,SAAU,CACzC,EAAM,MAAM,KAAK,CAAK,EAEtB,MACF,CAEI,EAAQ,WAAa,eACvB,EAAM,MAAM,MAAM,EAClB,EAAM,MAAM,KAAK,CAAK,GACb,EAAQ,WAAa,SAC9B,KAAK,IAAI,EAAkB,EAAQ,SAAU,yCAAyC,CAAC,CAE3F,CACF,EAOA,OALI,EAAQ,QAAQ,QAAS,MAAM,EAC9B,EAAQ,QAAQ,iBAAiB,QAAS,MAAO,CAAE,KAAM,EAAK,CAAC,EAEpE,EAAO,UAAU,EAAU,CAAE,OAAQ,EAAW,MAAO,CAAC,EAEjD,CACL,MAAmC,CASjC,OARI,EAAM,OAAS,WAAmB,QAAQ,QAAQ,CAAE,KAAM,GAAM,MAAO,IAAA,EAAe,CAAC,EAEvF,EAAM,MAAM,OAAS,EAAU,QAAQ,QAAQ,CAAE,KAAM,GAAO,MAAO,EAAM,MAAM,MAAM,CAAG,CAAC,EAE3F,EAAM,OAAS,QAAgB,QAAQ,OAAO,EAAM,MAAM,EAE1D,EAAM,OAAS,WAAmB,QAAQ,QAAQ,CAAE,KAAM,GAAM,MAAO,IAAA,EAAe,CAAC,EAEpF,IAAI,SAA4B,EAAS,IAAW,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"}
package/dist/_link.cjs CHANGED
@@ -1,2 +1,2 @@
1
- function e(e,t,n){return e.subscribe(t,{signal:n})}exports.link=e;
1
+ function link(e,t,n){return e.subscribe(t,{signal:n})}exports.link=link;
2
2
  //# sourceMappingURL=_link.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"_link.cjs","names":[],"sources":["../src/_link.ts"],"sourcesContent":["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"],"mappings":"AAGA,SAAgB,EAAQ,EAAmB,EAAuB,EAAmC,CACnG,OAAO,EAAO,UAAU,EAAU,CAAE,QAAO,CAAC,CAC9C"}
1
+ {"version":3,"file":"_link.cjs","names":[],"sources":["../src/_link.ts"],"sourcesContent":["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"],"mappings":"AAGA,SAAgB,KAAQ,EAAmB,EAAuB,EAAmC,CACnG,OAAO,EAAO,UAAU,EAAU,CAAE,QAAO,CAAC,CAC9C"}
package/dist/_link.js CHANGED
@@ -1,8 +1,2 @@
1
- //#region src/_link.ts
2
- function e(e, t, n) {
3
- return e.subscribe(t, { signal: n });
4
- }
5
- //#endregion
6
- export { e as link };
7
-
1
+ function link(e,t,n){return e.subscribe(t,{signal:n})}export{link};
8
2
  //# sourceMappingURL=_link.js.map
package/dist/_link.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"_link.js","names":[],"sources":["../src/_link.ts"],"sourcesContent":["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"],"mappings":";AAGA,SAAgB,EAAQ,GAAmB,GAAuB,GAAmC;CACnG,OAAO,EAAO,UAAU,GAAU,EAAE,UAAO,CAAC;AAC9C"}
1
+ {"version":3,"file":"_link.js","names":[],"sources":["../src/_link.ts"],"sourcesContent":["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"],"mappings":"AAGA,SAAgB,KAAQ,EAAmB,EAAuB,EAAmC,CACnG,OAAO,EAAO,UAAU,EAAU,CAAE,QAAO,CAAC,CAC9C"}
package/dist/_numeric.cjs CHANGED
@@ -1,2 +1,2 @@
1
- function e(e,t){if(!Number.isInteger(e)||e<0)throw RangeError(`${t} must be a non-negative integer`)}function t(e,t){if(!Number.isInteger(e)||e<1)throw RangeError(`${t} must be a positive integer`)}function n(e,t){if(!Number.isFinite(e)||e<0||e>2147483647)throw RangeError(`${t} must be between 0 and 2147483647 milliseconds`)}exports.assertDuration=n,exports.assertNonNegativeInteger=e,exports.assertPositiveInteger=t;
1
+ 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`)}exports.assertDuration=assertDuration,exports.assertNonNegativeInteger=assertNonNegativeInteger,exports.assertPositiveInteger=assertPositiveInteger;
2
2
  //# sourceMappingURL=_numeric.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"_numeric.cjs","names":[],"sources":["../src/_numeric.ts"],"sourcesContent":["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"],"mappings":"AAAA,SAAgB,EAAyB,EAAe,EAAoB,CAC1E,GAAI,CAAC,OAAO,UAAU,CAAK,GAAK,EAAQ,EACtC,MAAU,WAAW,GAAG,EAAK,gCAAgC,CAEjE,CAEA,SAAgB,EAAsB,EAAe,EAAoB,CACvE,GAAI,CAAC,OAAO,UAAU,CAAK,GAAK,EAAQ,EACtC,MAAU,WAAW,GAAG,EAAK,4BAA4B,CAE7D,CAEA,SAAgB,EAAe,EAAsB,EAAoB,CACvE,GAAI,CAAC,OAAO,SAAS,CAAY,GAAK,EAAe,GAAK,EAAe,WACvE,MAAU,WAAW,GAAG,EAAK,+CAA+C,CAEhF"}
1
+ {"version":3,"file":"_numeric.cjs","names":[],"sources":["../src/_numeric.ts"],"sourcesContent":["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"],"mappings":"AAAA,SAAgB,yBAAyB,EAAe,EAAoB,CAC1E,GAAI,CAAC,OAAO,UAAU,CAAK,GAAK,EAAQ,EACtC,MAAU,WAAW,GAAG,EAAK,gCAAgC,CAEjE,CAEA,SAAgB,sBAAsB,EAAe,EAAoB,CACvE,GAAI,CAAC,OAAO,UAAU,CAAK,GAAK,EAAQ,EACtC,MAAU,WAAW,GAAG,EAAK,4BAA4B,CAE7D,CAEA,SAAgB,eAAe,EAAsB,EAAoB,CACvE,GAAI,CAAC,OAAO,SAAS,CAAY,GAAK,EAAe,GAAK,EAAe,WACvE,MAAU,WAAW,GAAG,EAAK,+CAA+C,CAEhF"}
package/dist/_numeric.js CHANGED
@@ -1,14 +1,2 @@
1
- //#region src/_numeric.ts
2
- function e(e, t) {
3
- if (!Number.isInteger(e) || e < 0) throw RangeError(`${t} must be a non-negative integer`);
4
- }
5
- function t(e, t) {
6
- if (!Number.isInteger(e) || e < 1) throw RangeError(`${t} must be a positive integer`);
7
- }
8
- function n(e, t) {
9
- if (!Number.isFinite(e) || e < 0 || e > 2147483647) throw RangeError(`${t} must be between 0 and 2147483647 milliseconds`);
10
- }
11
- //#endregion
12
- export { n as assertDuration, e as assertNonNegativeInteger, t as assertPositiveInteger };
13
-
1
+ 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`)}export{assertDuration,assertNonNegativeInteger,assertPositiveInteger};
14
2
  //# sourceMappingURL=_numeric.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_numeric.js","names":[],"sources":["../src/_numeric.ts"],"sourcesContent":["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"],"mappings":";AAAA,SAAgB,EAAyB,GAAe,GAAoB;CAC1E,IAAI,CAAC,OAAO,UAAU,CAAK,KAAK,IAAQ,GACtC,MAAU,WAAW,GAAG,EAAK,gCAAgC;AAEjE;AAEA,SAAgB,EAAsB,GAAe,GAAoB;CACvE,IAAI,CAAC,OAAO,UAAU,CAAK,KAAK,IAAQ,GACtC,MAAU,WAAW,GAAG,EAAK,4BAA4B;AAE7D;AAEA,SAAgB,EAAe,GAAsB,GAAoB;CACvE,IAAI,CAAC,OAAO,SAAS,CAAY,KAAK,IAAe,KAAK,IAAe,YACvE,MAAU,WAAW,GAAG,EAAK,+CAA+C;AAEhF"}
1
+ {"version":3,"file":"_numeric.js","names":[],"sources":["../src/_numeric.ts"],"sourcesContent":["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"],"mappings":"AAAA,SAAgB,yBAAyB,EAAe,EAAoB,CAC1E,GAAI,CAAC,OAAO,UAAU,CAAK,GAAK,EAAQ,EACtC,MAAU,WAAW,GAAG,EAAK,gCAAgC,CAEjE,CAEA,SAAgB,sBAAsB,EAAe,EAAoB,CACvE,GAAI,CAAC,OAAO,UAAU,CAAK,GAAK,EAAQ,EACtC,MAAU,WAAW,GAAG,EAAK,4BAA4B,CAE7D,CAEA,SAAgB,eAAe,EAAsB,EAAoB,CACvE,GAAI,CAAC,OAAO,SAAS,CAAY,GAAK,EAAe,GAAK,EAAe,WACvE,MAAU,WAAW,GAAG,EAAK,+CAA+C,CAEhF"}
package/dist/_safe.cjs CHANGED
@@ -1,2 +1,2 @@
1
- function e(e,t){try{e()}catch(e){t(e)}}exports.tryCall=e;
1
+ function tryCall(e,t){try{e()}catch(e){t(e)}}exports.tryCall=tryCall;
2
2
  //# sourceMappingURL=_safe.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"_safe.cjs","names":[],"sources":["../src/_safe.ts"],"sourcesContent":["export function tryCall(callback: () => void, onError: (reason: unknown) => void): void {\n try {\n callback();\n } catch (reason) {\n onError(reason);\n }\n}\n"],"mappings":"AAAA,SAAgB,EAAQ,EAAsB,EAA0C,CACtF,GAAI,CACF,EAAS,CACX,OAAS,EAAQ,CACf,EAAQ,CAAM,CAChB,CACF"}
1
+ {"version":3,"file":"_safe.cjs","names":[],"sources":["../src/_safe.ts"],"sourcesContent":["export function tryCall(callback: () => void, onError: (reason: unknown) => void): void {\n try {\n callback();\n } catch (reason) {\n onError(reason);\n }\n}\n"],"mappings":"AAAA,SAAgB,QAAQ,EAAsB,EAA0C,CACtF,GAAI,CACF,EAAS,CACX,OAAS,EAAQ,CACf,EAAQ,CAAM,CAChB,CACF"}
package/dist/_safe.js CHANGED
@@ -1,12 +1,2 @@
1
- //#region src/_safe.ts
2
- function e(e, t) {
3
- try {
4
- e();
5
- } catch (e) {
6
- t(e);
7
- }
8
- }
9
- //#endregion
10
- export { e as tryCall };
11
-
1
+ function tryCall(e,t){try{e()}catch(e){t(e)}}export{tryCall};
12
2
  //# sourceMappingURL=_safe.js.map
package/dist/_safe.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"_safe.js","names":[],"sources":["../src/_safe.ts"],"sourcesContent":["export function tryCall(callback: () => void, onError: (reason: unknown) => void): void {\n try {\n callback();\n } catch (reason) {\n onError(reason);\n }\n}\n"],"mappings":";AAAA,SAAgB,EAAQ,GAAsB,GAA0C;CACtF,IAAI;EACF,EAAS;CACX,SAAS,GAAQ;EACf,EAAQ,CAAM;CAChB;AACF"}
1
+ {"version":3,"file":"_safe.js","names":[],"sources":["../src/_safe.ts"],"sourcesContent":["export function tryCall(callback: () => void, onError: (reason: unknown) => void): void {\n try {\n callback();\n } catch (reason) {\n onError(reason);\n }\n}\n"],"mappings":"AAAA,SAAgB,QAAQ,EAAsB,EAA0C,CACtF,GAAI,CACF,EAAS,CACX,OAAS,EAAQ,CACf,EAAQ,CAAM,CAChB,CACF"}
@@ -1,15 +1,2 @@
1
- //#region src/_scheduler.ts
2
- var e = {
3
- delay(e, t) {
4
- let n = setTimeout(e, t);
5
- return () => clearTimeout(n);
6
- },
7
- repeat(e, t) {
8
- let n = setInterval(e, t);
9
- return () => clearInterval(n);
10
- }
11
- };
12
- //#endregion
13
- export { e as defaultScheduler };
14
-
1
+ var e={delay(e,t){let n=setTimeout(e,t);return()=>clearTimeout(n)},repeat(e,t){let n=setInterval(e,t);return()=>clearInterval(n)}};export{e as defaultScheduler};
15
2
  //# sourceMappingURL=_scheduler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_scheduler.js","names":[],"sources":["../src/_scheduler.ts"],"sourcesContent":["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"],"mappings":";AAKA,IAAa,IAA8B;CACzC,MAAM,GAAU,GAAc;EAC5B,IAAM,IAAK,WAAW,GAAU,CAAY;EAE5C,aAAa,aAAa,CAAE;CAC9B;CACA,OAAO,GAAU,GAAc;EAC7B,IAAM,IAAK,YAAY,GAAU,CAAY;EAE7C,aAAa,cAAc,CAAE;CAC/B;AACF"}
1
+ {"version":3,"file":"_scheduler.js","names":[],"sources":["../src/_scheduler.ts"],"sourcesContent":["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"],"mappings":"AAKA,IAAa,EAA8B,CACzC,MAAM,EAAU,EAAc,CAC5B,IAAM,EAAK,WAAW,EAAU,CAAY,EAE5C,UAAa,aAAa,CAAE,CAC9B,EACA,OAAO,EAAU,EAAc,CAC7B,IAAM,EAAK,YAAY,EAAU,CAAY,EAE7C,UAAa,cAAc,CAAE,CAC/B,CACF"}
@@ -1,2 +1,2 @@
1
- function e(e){let t=globalThis.reportError;if(t){t(e);return}queueMicrotask(()=>{throw e})}function t(t,n){let r=typeof t==`function`?{next:t}:t,i=new AbortController,a=!1,o,s=()=>{if(!a){a=!0,i.abort(),n?.removeEventListener(`abort`,s);try{o?.()}catch(t){e(t)}}};return n?.aborted?s():n?.addEventListener(`abort`,s,{once:!0}),{add:t=>{if(t){if(a){try{t()}catch(t){e(t)}return}o=t}},signal:i.signal,sink:{complete(){if(!a){try{r.complete?.()}catch(t){e(t)}s()}},error(t){if(!a){if(r.error)try{r.error(t)}catch(t){e(t)}else e(t);s()}},next(t){if(!a)try{r.next(t)}catch(t){s(),e(t)}}},subscription:{get closed(){return a},[Symbol.dispose]:s,unsubscribe:s}}}exports.createSubscription=t,exports.reportUnhandledError=e;
1
+ function reportUnhandledError(e){let t=globalThis.reportError;if(t){t(e);return}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)}return}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}}}exports.createSubscription=createSubscription,exports.reportUnhandledError=reportUnhandledError;
2
2
  //# sourceMappingURL=_subscription.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"_subscription.cjs","names":[],"sources":["../src/_subscription.ts"],"sourcesContent":["import type { Observer, Sink, Subscription, Teardown } from './types.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"],"mappings":"AAGA,SAAgB,EAAqB,EAAuB,CAC1D,IAAM,EAAe,WAA0D,YAE/E,GAAI,EAAa,CACf,EAAY,CAAM,EAElB,MACF,CAEA,mBAAqB,CACnB,MAAM,CACR,CAAC,CACH,CAEA,SAAgB,EACd,EACA,EAC+G,CAC/G,IAAM,EAAwB,OAAO,GAAmB,WAAa,CAAE,KAAM,CAAe,EAAI,EAC1F,EAAa,IAAI,gBACnB,EAAS,GACT,EAEE,MAA0B,CAC1B,MAIJ,CAFA,EAAS,GACT,EAAW,MAAM,EACjB,GAAQ,oBAAoB,QAAS,CAAW,EAEhD,GAAI,CACF,IAAW,CACb,OAAS,EAAQ,CACf,EAAqB,CAAM,CAC7B,CANgD,CAOlD,EAiEA,OANI,GAAQ,QACV,EAAY,EAEZ,GAAQ,iBAAiB,QAAS,EAAa,CAAE,KAAM,EAAK,CAAC,EAGxD,CACL,IAvBW,GAA6C,CACnD,KAEL,IAAI,EAAQ,CACV,GAAI,CACF,EAAa,CACf,OAAS,EAAQ,CACf,EAAqB,CAAM,CAC7B,CAEA,MACF,CAEA,EAAW,CAFX,CAGF,EAUE,OAAQ,EAAW,OACnB,MAjEA,UAAiB,CACX,MAEJ,IAAI,CACF,EAAS,WAAW,CACtB,OAAS,EAAQ,CACf,EAAqB,CAAM,CAC7B,CAEA,EAAY,CAFZ,CAGF,EAEA,MAAM,EAAuB,CACvB,MAEJ,IAAI,EAAS,MACX,GAAI,CACF,EAAS,MAAM,CAAM,CACvB,OAAS,EAAe,CACtB,EAAqB,CAAa,CACpC,MAEA,EAAqB,CAAM,EAG7B,EAAY,CAHiB,CAI/B,EAEA,KAAK,EAAgB,CACf,MAEJ,GAAI,CACF,EAAS,KAAK,CAAK,CACrB,OAAS,EAAQ,CACf,EAAY,EACZ,EAAqB,CAAM,CAC7B,CACF,CA4BA,EACA,aAAc,CACZ,IAAI,QAAkB,CACpB,OAAO,CACT,GACC,OAAO,SAAU,EAClB,aACF,CACF,CACF"}
1
+ {"version":3,"file":"_subscription.cjs","names":[],"sources":["../src/_subscription.ts"],"sourcesContent":["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"],"mappings":"AAGA,SAAgB,qBAAqB,EAAuB,CAC1D,IAAM,EAAe,WAA0D,YAE/E,GAAI,EAAa,CACf,EAAY,CAAM,EAElB,MACF,CAEA,mBAAqB,CACnB,MAAM,CACR,CAAC,CACH,CAEA,SAAgB,mBACd,EACA,EAC+G,CAC/G,IAAM,EAAwB,OAAO,GAAmB,WAAa,CAAE,KAAM,CAAe,EAAI,EAC1F,EAAa,IAAI,gBACnB,EAAS,GACT,EAEE,gBAA0B,CAC1B,MAIJ,CAFA,EAAS,GACT,EAAW,MAAM,EACjB,GAAQ,oBAAoB,QAAS,WAAW,EAEhD,GAAI,CACF,IAAW,CACb,OAAS,EAAQ,CACf,qBAAqB,CAAM,CAC7B,CANgD,CAOlD,EAEM,EAAgB,CACpB,UAAiB,CACX,MAEJ,IAAI,CACF,EAAS,WAAW,CACtB,OAAS,EAAQ,CACf,qBAAqB,CAAM,CAC7B,CAEA,YAAY,CAFZ,CAGF,EAEA,MAAM,EAAuB,CACvB,MAEJ,IAAI,EAAS,MACX,GAAI,CACF,EAAS,MAAM,CAAM,CACvB,OAAS,EAAe,CACtB,qBAAqB,CAAa,CACpC,MAEA,qBAAqB,CAAM,EAG7B,YAAY,CAHiB,CAI/B,EAEA,KAAK,EAAgB,CACf,MAEJ,GAAI,CACF,EAAS,KAAK,CAAK,CACrB,OAAS,EAAQ,CACf,YAAY,EACZ,qBAAqB,CAAM,CAC7B,CACF,CACF,EAEM,IAAO,GAA6C,CACnD,KAEL,IAAI,EAAQ,CACV,GAAI,CACF,EAAa,CACf,OAAS,EAAQ,CACf,qBAAqB,CAAM,CAC7B,CAEA,MACF,CAEA,EAAW,CAFX,CAGF,EAQA,OANI,GAAQ,QACV,YAAY,EAEZ,GAAQ,iBAAiB,QAAS,YAAa,CAAE,KAAM,EAAK,CAAC,EAGxD,CACL,IACA,OAAQ,EAAW,OACnB,OACA,aAAc,CACZ,IAAI,QAAkB,CACpB,OAAO,CACT,GACC,OAAO,SAAU,YAClB,WACF,CACF,CACF"}
@@ -1,80 +1,2 @@
1
- //#region src/_subscription.ts
2
- function e(e) {
3
- let t = globalThis.reportError;
4
- if (t) {
5
- t(e);
6
- return;
7
- }
8
- queueMicrotask(() => {
9
- throw e;
10
- });
11
- }
12
- function t(t, n) {
13
- let r = typeof t == "function" ? { next: t } : t, i = new AbortController(), a = !1, o, s = () => {
14
- if (!a) {
15
- a = !0, i.abort(), n?.removeEventListener("abort", s);
16
- try {
17
- o?.();
18
- } catch (t) {
19
- e(t);
20
- }
21
- }
22
- };
23
- return n?.aborted ? s() : n?.addEventListener("abort", s, { once: !0 }), {
24
- add: (t) => {
25
- if (t) {
26
- if (a) {
27
- try {
28
- t();
29
- } catch (t) {
30
- e(t);
31
- }
32
- return;
33
- }
34
- o = t;
35
- }
36
- },
37
- signal: i.signal,
38
- sink: {
39
- complete() {
40
- if (!a) {
41
- try {
42
- r.complete?.();
43
- } catch (t) {
44
- e(t);
45
- }
46
- s();
47
- }
48
- },
49
- error(t) {
50
- if (!a) {
51
- if (r.error) try {
52
- r.error(t);
53
- } catch (t) {
54
- e(t);
55
- }
56
- else e(t);
57
- s();
58
- }
59
- },
60
- next(t) {
61
- if (!a) try {
62
- r.next(t);
63
- } catch (t) {
64
- s(), e(t);
65
- }
66
- }
67
- },
68
- subscription: {
69
- get closed() {
70
- return a;
71
- },
72
- [Symbol.dispose]: s,
73
- unsubscribe: s
74
- }
75
- };
76
- }
77
- //#endregion
78
- export { t as createSubscription, e as reportUnhandledError };
79
-
1
+ function reportUnhandledError(e){let t=globalThis.reportError;if(t){t(e);return}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)}return}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}}}export{createSubscription,reportUnhandledError};
80
2
  //# sourceMappingURL=_subscription.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_subscription.js","names":[],"sources":["../src/_subscription.ts"],"sourcesContent":["import type { Observer, Sink, Subscription, Teardown } from './types.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"],"mappings":";AAGA,SAAgB,EAAqB,GAAuB;CAC1D,IAAM,IAAe,WAA0D;CAE/E,IAAI,GAAa;EACf,EAAY,CAAM;EAElB;CACF;CAEA,qBAAqB;EACnB,MAAM;CACR,CAAC;AACH;AAEA,SAAgB,EACd,GACA,GAC+G;CAC/G,IAAM,IAAwB,OAAO,KAAmB,aAAa,EAAE,MAAM,EAAe,IAAI,GAC1F,IAAa,IAAI,gBAAgB,GACnC,IAAS,IACT,GAEE,UAA0B;EAC1B,QAIJ;GAFA,IAAS,IACT,EAAW,MAAM,GACjB,GAAQ,oBAAoB,SAAS,CAAW;GAEhD,IAAI;IACF,IAAW;GACb,SAAS,GAAQ;IACf,EAAqB,CAAM;GAC7B;EANgD;CAOlD;CAiEA,OANI,GAAQ,UACV,EAAY,IAEZ,GAAQ,iBAAiB,SAAS,GAAa,EAAE,MAAM,GAAK,CAAC,GAGxD;EACL,MAvBW,MAA6C;GACnD,OAEL;QAAI,GAAQ;KACV,IAAI;MACF,EAAa;KACf,SAAS,GAAQ;MACf,EAAqB,CAAM;KAC7B;KAEA;IACF;IAEA,IAAW;GAFX;EAGF;EAUE,QAAQ,EAAW;EACnB;GAjEA,WAAiB;IACX,QAEJ;SAAI;MACF,EAAS,WAAW;KACtB,SAAS,GAAQ;MACf,EAAqB,CAAM;KAC7B;KAEA,EAAY;IAFZ;GAGF;GAEA,MAAM,GAAuB;IACvB,QAEJ;SAAI,EAAS,OACX,IAAI;MACF,EAAS,MAAM,CAAM;KACvB,SAAS,GAAe;MACtB,EAAqB,CAAa;KACpC;UAEA,EAAqB,CAAM;KAG7B,EAAY;IAHiB;GAI/B;GAEA,KAAK,GAAgB;IACf,QAEJ,IAAI;KACF,EAAS,KAAK,CAAK;IACrB,SAAS,GAAQ;KAEf,AADA,EAAY,GACZ,EAAqB,CAAM;IAC7B;GACF;EA4BA;EACA,cAAc;GACZ,IAAI,SAAkB;IACpB,OAAO;GACT;IACC,OAAO,UAAU;GAClB;EACF;CACF;AACF"}
1
+ {"version":3,"file":"_subscription.js","names":[],"sources":["../src/_subscription.ts"],"sourcesContent":["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"],"mappings":"AAGA,SAAgB,qBAAqB,EAAuB,CAC1D,IAAM,EAAe,WAA0D,YAE/E,GAAI,EAAa,CACf,EAAY,CAAM,EAElB,MACF,CAEA,mBAAqB,CACnB,MAAM,CACR,CAAC,CACH,CAEA,SAAgB,mBACd,EACA,EAC+G,CAC/G,IAAM,EAAwB,OAAO,GAAmB,WAAa,CAAE,KAAM,CAAe,EAAI,EAC1F,EAAa,IAAI,gBACnB,EAAS,GACT,EAEE,gBAA0B,CAC1B,MAIJ,CAFA,EAAS,GACT,EAAW,MAAM,EACjB,GAAQ,oBAAoB,QAAS,WAAW,EAEhD,GAAI,CACF,IAAW,CACb,OAAS,EAAQ,CACf,qBAAqB,CAAM,CAC7B,CANgD,CAOlD,EAEM,EAAgB,CACpB,UAAiB,CACX,MAEJ,IAAI,CACF,EAAS,WAAW,CACtB,OAAS,EAAQ,CACf,qBAAqB,CAAM,CAC7B,CAEA,YAAY,CAFZ,CAGF,EAEA,MAAM,EAAuB,CACvB,MAEJ,IAAI,EAAS,MACX,GAAI,CACF,EAAS,MAAM,CAAM,CACvB,OAAS,EAAe,CACtB,qBAAqB,CAAa,CACpC,MAEA,qBAAqB,CAAM,EAG7B,YAAY,CAHiB,CAI/B,EAEA,KAAK,EAAgB,CACf,MAEJ,GAAI,CACF,EAAS,KAAK,CAAK,CACrB,OAAS,EAAQ,CACf,YAAY,EACZ,qBAAqB,CAAM,CAC7B,CACF,CACF,EAEM,IAAO,GAA6C,CACnD,KAEL,IAAI,EAAQ,CACV,GAAI,CACF,EAAa,CACf,OAAS,EAAQ,CACf,qBAAqB,CAAM,CAC7B,CAEA,MACF,CAEA,EAAW,CAFX,CAGF,EAQA,OANI,GAAQ,QACV,YAAY,EAEZ,GAAQ,iBAAiB,QAAS,YAAa,CAAE,KAAM,EAAK,CAAC,EAGxD,CACL,IACA,OAAQ,EAAW,OACnB,OACA,aAAc,CACZ,IAAI,QAAkB,CACpB,OAAO,CACT,GACC,OAAO,SAAU,YAClB,WACF,CACF,CACF"}
package/dist/async.cjs CHANGED
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./_iterator.cjs");function t(t,n){return{[Symbol.asyncIterator](){return e.toIterator(t,n)}}}exports.toAsyncIterable=t;
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;
2
2
  //# sourceMappingURL=async.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"async.cjs","names":[],"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":"sGAIA,SAAgB,EAAmB,EAAmB,EAAiD,CACrG,MAAO,CACL,CAAC,OAAO,gBAA2C,CACjD,OAAO,EAAA,WAAW,EAAQ,CAAO,CACnC,CACF,CACF"}
1
+ {"version":3,"file":"async.cjs","names":[],"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":"sGAIA,SAAgB,gBAAmB,EAAmB,EAAiD,CACrG,MAAO,CACL,CAAC,OAAO,gBAA2C,CACjD,OAAO,EAAA,WAAW,EAAQ,CAAO,CACnC,CACF,CACF"}
package/dist/async.js CHANGED
@@ -1,11 +1,2 @@
1
- import { toIterator as e } from "./_iterator.js";
2
- //#region src/async.ts
3
- function t(t, n) {
4
- return { [Symbol.asyncIterator]() {
5
- return e(t, n);
6
- } };
7
- }
8
- //#endregion
9
- export { t as toAsyncIterable };
10
-
1
+ import{toIterator as e}from"./_iterator.js";function toAsyncIterable(t,n){return{[Symbol.asyncIterator](){return e(t,n)}}}export{toAsyncIterable};
11
2
  //# sourceMappingURL=async.js.map
package/dist/async.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"async.js","names":[],"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":";;AAIA,SAAgB,EAAmB,GAAmB,GAAiD;CACrG,OAAO,EACL,CAAC,OAAO,iBAA2C;EACjD,OAAO,EAAW,GAAQ,CAAO;CACnC,EACF;AACF"}
1
+ {"version":3,"file":"async.js","names":[],"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":"4CAIA,SAAgB,gBAAmB,EAAmB,EAAiD,CACrG,MAAO,CACL,CAAC,OAAO,gBAA2C,CACjD,OAAO,EAAW,EAAQ,CAAO,CACnC,CACF,CACF"}
package/dist/channel.cjs CHANGED
@@ -1,2 +1,2 @@
1
- const e=require("./_numeric.cjs"),t=require("./core.cjs");function n(t){let n=`initial`in t,r=t.replay??+!!n;if(e.assertNonNegativeInteger(r,`Channel replay`),n&&r===0)throw RangeError(`Channel replay cannot be 0 when initial is provided — the initial value would be immediately dropped`);return r}function r(e={}){let r=n(e),i=new AbortController,a=new Set,o=[];`initial`in e&&r>0&&o.push(e.initial);let s=t.stream(e=>{if(i.signal.aborted){e.complete();return}for(let t of o)e.next(t);return a.add(e),()=>a.delete(e)}),c=()=>{if(!i.signal.aborted){i.abort();for(let e of[...a])e.complete();a.clear(),o.length=0,u.length=0}},l=!1,u=[],d=()=>{l=!0;try{for(;u.length>0;){let e=u.shift();r>0&&(o.length===r&&o.shift(),o.push(e));for(let t of[...a])t.next(e)}}finally{l=!1}};return{get disposalSignal(){return i.signal},dispose:c,get disposed(){return i.signal.aborted},send(e){i.signal.aborted||(u.push(e),l||d())},stream:s,[Symbol.dispose]:c}}exports.createChannel=r;
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();return}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;
2
2
  //# sourceMappingURL=channel.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"channel.cjs","names":[],"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":"0DAkBA,SAAS,EAAkB,EAAoC,CAC7D,IAAM,EAAa,YAAa,EAC1B,EAAW,EAAQ,QAAW,KAIpC,GAFA,EAAA,yBAAyB,EAAU,gBAAgB,EAE/C,GAAc,IAAa,EAC7B,MAAU,WACR,sGACF,EAGF,OAAO,CACT,CAGA,SAAgB,EAAiB,EAA6B,CAAC,EAAe,CAC5E,IAAM,EAAW,EAAe,CAAO,EACjC,EAAa,IAAI,gBACjB,EAAY,IAAI,IAChB,EAAc,CAAC,EAEjB,YAAa,GAAW,EAAW,GAAG,EAAO,KAAK,EAAQ,OAAY,EAE1E,IAAM,EAAS,EAAA,OAAW,GAAS,CAGjC,GAAI,EAAW,OAAO,QAAS,CAC7B,EAAK,SAAS,EAEd,MACF,CAEA,IAAK,IAAM,KAAS,EAAQ,EAAK,KAAK,CAAK,EAI3C,OAFA,EAAU,IAAI,CAAI,MAEL,EAAU,OAAO,CAAI,CACpC,CAAC,EAEK,MAAsB,CACtB,MAAW,OAAO,QAEtB,GAAW,MAAM,EAEjB,IAAK,IAAM,IAAY,CAAC,GAAG,CAAS,EAAG,EAAS,SAAS,EAEzD,EAAU,MAAM,EAChB,EAAO,OAAS,EAChB,EAAQ,OAAS,CANA,CAOnB,EAEI,EAAc,GACZ,EAAe,CAAC,EAEhB,MAAoB,CACxB,EAAc,GAEd,GAAI,CACF,KAAO,EAAQ,OAAS,GAAG,CACzB,IAAM,EAAQ,EAAQ,MAAM,EAExB,EAAW,IACT,EAAO,SAAW,GAAU,EAAO,MAAM,EAE7C,EAAO,KAAK,CAAK,GAGnB,IAAK,IAAM,IAAY,CAAC,GAAG,CAAS,EAAG,EAAS,KAAK,CAAK,CAC5D,CACF,QAAU,CACR,EAAc,EAChB,CACF,EAEA,MAAO,CACL,IAAI,gBAA8B,CAChC,OAAO,EAAW,MACpB,EACA,UACA,IAAI,UAAoB,CACtB,OAAO,EAAW,OAAO,OAC3B,EACA,KAAK,EAAgB,CACf,EAAW,OAAO,UAEtB,EAAQ,KAAK,CAAK,EAIb,GAAa,EAAM,EAC1B,EACA,OAAQ,GACP,OAAO,SAAU,CACpB,CACF"}
1
+ {"version":3,"file":"channel.cjs","names":[],"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":"0DAkBA,SAAS,eAAkB,EAAoC,CAC7D,IAAM,EAAa,YAAa,EAC1B,EAAW,EAAQ,QAAW,KAIpC,GAFA,EAAA,yBAAyB,EAAU,gBAAgB,EAE/C,GAAc,IAAa,EAC7B,MAAU,WACR,sGACF,EAGF,OAAO,CACT,CAGA,SAAgB,cAAiB,EAA6B,CAAC,EAAe,CAC5E,IAAM,EAAW,eAAe,CAAO,EACjC,EAAa,IAAI,gBACjB,EAAY,IAAI,IAChB,EAAc,CAAC,EAEjB,YAAa,GAAW,EAAW,GAAG,EAAO,KAAK,EAAQ,OAAY,EAE1E,IAAM,EAAS,EAAA,OAAW,GAAS,CAGjC,GAAI,EAAW,OAAO,QAAS,CAC7B,EAAK,SAAS,EAEd,MACF,CAEA,IAAK,IAAM,KAAS,EAAQ,EAAK,KAAK,CAAK,EAI3C,OAFA,EAAU,IAAI,CAAI,MAEL,EAAU,OAAO,CAAI,CACpC,CAAC,EAEK,YAAsB,CACtB,MAAW,OAAO,QAEtB,GAAW,MAAM,EAEjB,IAAK,IAAM,IAAY,CAAC,GAAG,CAAS,EAAG,EAAS,SAAS,EAEzD,EAAU,MAAM,EAChB,EAAO,OAAS,EAChB,EAAQ,OAAS,CANA,CAOnB,EAEI,EAAc,GACZ,EAAe,CAAC,EAEhB,UAAoB,CACxB,EAAc,GAEd,GAAI,CACF,KAAO,EAAQ,OAAS,GAAG,CACzB,IAAM,EAAQ,EAAQ,MAAM,EAExB,EAAW,IACT,EAAO,SAAW,GAAU,EAAO,MAAM,EAE7C,EAAO,KAAK,CAAK,GAGnB,IAAK,IAAM,IAAY,CAAC,GAAG,CAAS,EAAG,EAAS,KAAK,CAAK,CAC5D,CACF,QAAU,CACR,EAAc,EAChB,CACF,EAEA,MAAO,CACL,IAAI,gBAA8B,CAChC,OAAO,EAAW,MACpB,EACA,QACA,IAAI,UAAoB,CACtB,OAAO,EAAW,OAAO,OAC3B,EACA,KAAK,EAAgB,CACf,EAAW,OAAO,UAEtB,EAAQ,KAAK,CAAK,EAIb,GAAa,MAAM,EAC1B,EACA,OAAQ,GACP,OAAO,SAAU,OACpB,CACF"}
package/dist/channel.js CHANGED
@@ -1,55 +1,2 @@
1
- import { assertNonNegativeInteger as e } from "./_numeric.js";
2
- import { stream as t } from "./core.js";
3
- //#region src/channel.ts
4
- function n(t) {
5
- let n = "initial" in t, r = t.replay ?? +!!n;
6
- if (e(r, "Channel replay"), n && r === 0) throw RangeError("Channel replay cannot be 0 when initial is provided — the initial value would be immediately dropped");
7
- return r;
8
- }
9
- function r(e = {}) {
10
- let r = n(e), i = new AbortController(), a = /* @__PURE__ */ new Set(), o = [];
11
- "initial" in e && r > 0 && o.push(e.initial);
12
- let s = t((e) => {
13
- if (i.signal.aborted) {
14
- e.complete();
15
- return;
16
- }
17
- for (let t of o) e.next(t);
18
- return a.add(e), () => a.delete(e);
19
- }), c = () => {
20
- if (!i.signal.aborted) {
21
- i.abort();
22
- for (let e of [...a]) e.complete();
23
- a.clear(), o.length = 0, u.length = 0;
24
- }
25
- }, l = !1, u = [], d = () => {
26
- l = !0;
27
- try {
28
- for (; u.length > 0;) {
29
- let e = u.shift();
30
- r > 0 && (o.length === r && o.shift(), o.push(e));
31
- for (let t of [...a]) t.next(e);
32
- }
33
- } finally {
34
- l = !1;
35
- }
36
- };
37
- return {
38
- get disposalSignal() {
39
- return i.signal;
40
- },
41
- dispose: c,
42
- get disposed() {
43
- return i.signal.aborted;
44
- },
45
- send(e) {
46
- i.signal.aborted || (u.push(e), l || d());
47
- },
48
- stream: s,
49
- [Symbol.dispose]: c
50
- };
51
- }
52
- //#endregion
53
- export { r as createChannel };
54
-
1
+ import{assertNonNegativeInteger as e}from"./_numeric.js";import{stream as t}from"./core.js";function replayCapacity(t){let n=`initial`in t,r=t.replay??+!!n;if(e(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(e=>{if(r.signal.aborted){e.complete();return}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}}export{createChannel};
55
2
  //# sourceMappingURL=channel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"channel.js","names":[],"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,IAAM,IAAa,aAAa,GAC1B,IAAW,EAAQ,UAAW;CAIpC,IAFA,EAAyB,GAAU,gBAAgB,GAE/C,KAAc,MAAa,GAC7B,MAAU,WACR,sGACF;CAGF,OAAO;AACT;AAGA,SAAgB,EAAiB,IAA6B,CAAC,GAAe;CAC5E,IAAM,IAAW,EAAe,CAAO,GACjC,IAAa,IAAI,gBAAgB,GACjC,oBAAY,IAAI,IAAa,GAC7B,IAAc,CAAC;CAErB,AAAI,aAAa,KAAW,IAAW,KAAG,EAAO,KAAK,EAAQ,OAAY;CAE1E,IAAM,IAAS,GAAW,MAAS;EAGjC,IAAI,EAAW,OAAO,SAAS;GAC7B,EAAK,SAAS;GAEd;EACF;EAEA,KAAK,IAAM,KAAS,GAAQ,EAAK,KAAK,CAAK;EAI3C,OAFA,EAAU,IAAI,CAAI,SAEL,EAAU,OAAO,CAAI;CACpC,CAAC,GAEK,UAAsB;EACtB,OAAW,OAAO,SAEtB;KAAW,MAAM;GAEjB,KAAK,IAAM,KAAY,CAAC,GAAG,CAAS,GAAG,EAAS,SAAS;GAIzD,AAFA,EAAU,MAAM,GAChB,EAAO,SAAS,GAChB,EAAQ,SAAS;EANA;CAOnB,GAEI,IAAc,IACZ,IAAe,CAAC,GAEhB,UAAoB;EACxB,IAAc;EAEd,IAAI;GACF,OAAO,EAAQ,SAAS,IAAG;IACzB,IAAM,IAAQ,EAAQ,MAAM;IAE5B,AAAI,IAAW,MACT,EAAO,WAAW,KAAU,EAAO,MAAM,GAE7C,EAAO,KAAK,CAAK;IAGnB,KAAK,IAAM,KAAY,CAAC,GAAG,CAAS,GAAG,EAAS,KAAK,CAAK;GAC5D;EACF,UAAU;GACR,IAAc;EAChB;CACF;CAEA,OAAO;EACL,IAAI,iBAA8B;GAChC,OAAO,EAAW;EACpB;EACA;EACA,IAAI,WAAoB;GACtB,OAAO,EAAW,OAAO;EAC3B;EACA,KAAK,GAAgB;GACf,EAAW,OAAO,YAEtB,EAAQ,KAAK,CAAK,GAIb,KAAa,EAAM;EAC1B;EACA,QAAQ;GACP,OAAO,UAAU;CACpB;AACF"}
1
+ {"version":3,"file":"channel.js","names":[],"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":"4FAkBA,SAAS,eAAkB,EAAoC,CAC7D,IAAM,EAAa,YAAa,EAC1B,EAAW,EAAQ,QAAW,KAIpC,GAFA,EAAyB,EAAU,gBAAgB,EAE/C,GAAc,IAAa,EAC7B,MAAU,WACR,sGACF,EAGF,OAAO,CACT,CAGA,SAAgB,cAAiB,EAA6B,CAAC,EAAe,CAC5E,IAAM,EAAW,eAAe,CAAO,EACjC,EAAa,IAAI,gBACjB,EAAY,IAAI,IAChB,EAAc,CAAC,EAEjB,YAAa,GAAW,EAAW,GAAG,EAAO,KAAK,EAAQ,OAAY,EAE1E,IAAM,EAAS,EAAW,GAAS,CAGjC,GAAI,EAAW,OAAO,QAAS,CAC7B,EAAK,SAAS,EAEd,MACF,CAEA,IAAK,IAAM,KAAS,EAAQ,EAAK,KAAK,CAAK,EAI3C,OAFA,EAAU,IAAI,CAAI,MAEL,EAAU,OAAO,CAAI,CACpC,CAAC,EAEK,YAAsB,CACtB,MAAW,OAAO,QAEtB,GAAW,MAAM,EAEjB,IAAK,IAAM,IAAY,CAAC,GAAG,CAAS,EAAG,EAAS,SAAS,EAEzD,EAAU,MAAM,EAChB,EAAO,OAAS,EAChB,EAAQ,OAAS,CANA,CAOnB,EAEI,EAAc,GACZ,EAAe,CAAC,EAEhB,UAAoB,CACxB,EAAc,GAEd,GAAI,CACF,KAAO,EAAQ,OAAS,GAAG,CACzB,IAAM,EAAQ,EAAQ,MAAM,EAExB,EAAW,IACT,EAAO,SAAW,GAAU,EAAO,MAAM,EAE7C,EAAO,KAAK,CAAK,GAGnB,IAAK,IAAM,IAAY,CAAC,GAAG,CAAS,EAAG,EAAS,KAAK,CAAK,CAC5D,CACF,QAAU,CACR,EAAc,EAChB,CACF,EAEA,MAAO,CACL,IAAI,gBAA8B,CAChC,OAAO,EAAW,MACpB,EACA,QACA,IAAI,UAAoB,CACtB,OAAO,EAAW,OAAO,OAC3B,EACA,KAAK,EAAgB,CACf,EAAW,OAAO,UAEtB,EAAQ,KAAK,CAAK,EAIb,GAAa,MAAM,EAC1B,EACA,OAAQ,GACP,OAAO,SAAU,OACpB,CACF"}
package/dist/core.cjs CHANGED
@@ -1,2 +1,2 @@
1
- const e=require("./_subscription.cjs");function t(t){return{subscribe(n,r){let i=e.createSubscription(n,r?.signal);if(i.subscription.closed)return i.subscription;try{i.add(t(i.sink,i.signal))}catch(e){i.sink.error(e)}return i.subscription}}}function n(e){return t(t=>e(t.next))}function r(e){return t((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})}exports.fromStore=r,exports.fromSubscribe=n,exports.stream=t;
1
+ const e=require("./_subscription.cjs");function stream(t){return{subscribe(n,r){let i=e.createSubscription(n,r?.signal);if(i.subscription.closed)return i.subscription;try{i.add(t(i.sink,i.signal))}catch(e){i.sink.error(e)}return i.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})}exports.fromStore=fromStore,exports.fromSubscribe=fromSubscribe,exports.stream=stream;
2
2
  //# sourceMappingURL=core.cjs.map