@vielzeug/flux 1.0.8 → 2.0.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.
- package/README.md +22 -25
- package/dist/_dev.cjs +1 -1
- package/dist/_dev.cjs.map +1 -1
- package/dist/_dev.js +2 -8
- package/dist/_dev.js.map +1 -1
- package/dist/_iterator.cjs +1 -1
- package/dist/_iterator.cjs.map +1 -1
- package/dist/_iterator.d.ts +3 -1
- package/dist/_iterator.d.ts.map +1 -1
- package/dist/_iterator.js +57 -35
- package/dist/_iterator.js.map +1 -1
- package/dist/_link.cjs +2 -0
- package/dist/_link.cjs.map +1 -0
- package/dist/_link.d.ts +4 -0
- package/dist/_link.d.ts.map +1 -0
- package/dist/_link.js +8 -0
- package/dist/_link.js.map +1 -0
- package/dist/_numeric.cjs +1 -1
- package/dist/_numeric.cjs.map +1 -1
- package/dist/_numeric.d.ts +2 -1
- package/dist/_numeric.d.ts.map +1 -1
- package/dist/_numeric.js +3 -7
- package/dist/_numeric.js.map +1 -1
- package/dist/_pipe.cjs +1 -1
- package/dist/_pipe.cjs.map +1 -1
- package/dist/_pipe.d.ts +2 -1
- package/dist/_pipe.d.ts.map +1 -1
- package/dist/_pipe.js +3 -3
- package/dist/_pipe.js.map +1 -1
- package/dist/_safe.cjs +1 -1
- package/dist/_safe.cjs.map +1 -1
- package/dist/_safe.d.ts +1 -1
- package/dist/_safe.d.ts.map +1 -1
- package/dist/_safe.js +2 -2
- package/dist/_safe.js.map +1 -1
- package/dist/_scheduler.cjs +1 -1
- package/dist/_scheduler.cjs.map +1 -1
- package/dist/_scheduler.d.ts +5 -2
- package/dist/_scheduler.d.ts.map +1 -1
- package/dist/_scheduler.js +1 -1
- package/dist/_scheduler.js.map +1 -1
- package/dist/_subscription.cjs +2 -0
- package/dist/_subscription.cjs.map +1 -0
- package/dist/_subscription.d.ts +8 -0
- package/dist/_subscription.d.ts.map +1 -0
- package/dist/_subscription.js +80 -0
- package/dist/_subscription.js.map +1 -0
- package/dist/adapters/courier.cjs +1 -1
- package/dist/adapters/courier.cjs.map +1 -1
- package/dist/adapters/courier.d.ts +35 -21
- package/dist/adapters/courier.d.ts.map +1 -1
- package/dist/adapters/courier.js +25 -6
- package/dist/adapters/courier.js.map +1 -1
- package/dist/adapters/herald.cjs +1 -1
- package/dist/adapters/herald.cjs.map +1 -1
- package/dist/adapters/herald.d.ts +2 -16
- package/dist/adapters/herald.d.ts.map +1 -1
- package/dist/adapters/herald.js +12 -8
- package/dist/adapters/herald.js.map +1 -1
- package/dist/adapters/pulse.cjs +1 -1
- package/dist/adapters/pulse.cjs.map +1 -1
- package/dist/adapters/pulse.d.ts +3 -20
- package/dist/adapters/pulse.d.ts.map +1 -1
- package/dist/adapters/pulse.js +2 -6
- package/dist/adapters/pulse.js.map +1 -1
- package/dist/adapters/ripple.cjs +1 -1
- package/dist/adapters/ripple.cjs.map +1 -1
- package/dist/adapters/ripple.d.ts +3 -39
- package/dist/adapters/ripple.d.ts.map +1 -1
- package/dist/adapters/ripple.js +22 -29
- package/dist/adapters/ripple.js.map +1 -1
- package/dist/async.cjs +2 -0
- package/dist/async.cjs.map +1 -0
- package/dist/async.d.ts +4 -0
- package/dist/async.d.ts.map +1 -0
- package/dist/async.js +11 -0
- package/dist/async.js.map +1 -0
- package/dist/core.cjs +1 -1
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.ts +3 -16
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +12 -81
- package/dist/core.js.map +1 -1
- package/dist/courier.cjs +1 -0
- package/dist/courier.d.ts +2 -0
- package/dist/courier.d.ts.map +1 -0
- package/dist/courier.js +2 -0
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/flux.cjs +1 -1
- package/dist/flux.cjs.map +1 -1
- package/dist/flux.iife.js +1 -1
- package/dist/flux.iife.js.map +1 -1
- package/dist/flux.js +1 -1
- package/dist/flux.js.map +1 -1
- package/dist/herald.cjs +1 -0
- package/dist/herald.d.ts +2 -0
- package/dist/herald.d.ts.map +1 -0
- package/dist/herald.js +2 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +13 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -14
- package/dist/operators/combination.cjs +1 -1
- package/dist/operators/combination.cjs.map +1 -1
- package/dist/operators/combination.d.ts +9 -64
- package/dist/operators/combination.d.ts.map +1 -1
- package/dist/operators/combination.js +46 -160
- package/dist/operators/combination.js.map +1 -1
- package/dist/operators/creation.cjs +1 -1
- package/dist/operators/creation.cjs.map +1 -1
- package/dist/operators/creation.d.ts +13 -46
- package/dist/operators/creation.d.ts.map +1 -1
- package/dist/operators/creation.js +61 -65
- package/dist/operators/creation.js.map +1 -1
- package/dist/operators/filtering.cjs +1 -1
- package/dist/operators/filtering.cjs.map +1 -1
- package/dist/operators/filtering.d.ts +10 -60
- package/dist/operators/filtering.d.ts.map +1 -1
- package/dist/operators/filtering.js +62 -109
- package/dist/operators/filtering.js.map +1 -1
- package/dist/operators/transformation.cjs +1 -1
- package/dist/operators/transformation.cjs.map +1 -1
- package/dist/operators/transformation.d.ts +9 -62
- package/dist/operators/transformation.d.ts.map +1 -1
- package/dist/operators/transformation.js +91 -142
- package/dist/operators/transformation.js.map +1 -1
- package/dist/operators/utility.cjs +1 -1
- package/dist/operators/utility.cjs.map +1 -1
- package/dist/operators/utility.d.ts +16 -97
- package/dist/operators/utility.d.ts.map +1 -1
- package/dist/operators/utility.js +75 -191
- package/dist/operators/utility.js.map +1 -1
- package/dist/pipe.cjs +2 -0
- package/dist/pipe.cjs.map +1 -0
- package/dist/pipe.d.ts +15 -0
- package/dist/pipe.d.ts.map +1 -0
- package/dist/pipe.js +9 -0
- package/dist/pipe.js.map +1 -0
- package/dist/pulse.cjs +1 -0
- package/dist/pulse.d.ts +2 -0
- package/dist/pulse.d.ts.map +1 -0
- package/dist/pulse.js +2 -0
- package/dist/ripple.cjs +1 -0
- package/dist/ripple.d.ts +3 -0
- package/dist/ripple.d.ts.map +1 -0
- package/dist/ripple.js +2 -0
- package/dist/subject.cjs +1 -1
- package/dist/subject.cjs.map +1 -1
- package/dist/subject.d.ts +14 -65
- package/dist/subject.d.ts.map +1 -1
- package/dist/subject.js +31 -166
- package/dist/subject.js.map +1 -1
- package/dist/subjects.cjs +1 -0
- package/dist/subjects.d.ts +3 -0
- package/dist/subjects.d.ts.map +1 -0
- package/dist/subjects.js +2 -0
- package/dist/types.d.ts +32 -79
- package/dist/types.d.ts.map +1 -1
- package/package.json +52 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filtering.js","names":[],"sources":["../../src/operators/filtering.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"file":"filtering.js","names":[],"sources":["../../src/operators/filtering.ts"],"sourcesContent":["import type { Operator, Stream, Subscription } from '../types';\n\nimport { link } from '../_link';\nimport { defaultScheduler } from '../_scheduler';\nimport { stream } from '../core';\nimport { FluxTimeoutError } from '../errors';\n\nexport type DebounceOptions = {\n for: number;\n};\n\nexport type TimeoutOptions = {\n after: number;\n};\n\nfunction assertDuration(milliseconds: number, name: string): void {\n if (!Number.isFinite(milliseconds) || milliseconds < 0) {\n throw new RangeError(`${name} must be a finite number greater than or equal to zero`);\n }\n}\n\nexport function take<T>(count: number): Operator<T, T> {\n if (!Number.isInteger(count) || count < 0) {\n throw new RangeError('take count must be a non-negative integer');\n }\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\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 (notifier instanceof AbortSignal) {\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>(options: DebounceOptions): Operator<T, T> {\n assertDuration(options.for, '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, options.for);\n },\n },\n signal,\n );\n\n return () => {\n cancel?.();\n subscription.unsubscribe();\n };\n });\n}\n\nexport function timeout<T>(options: TimeoutOptions): Operator<T, T> {\n assertDuration(options.after, '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(options.after)), options.after);\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"],"mappings":";;;;;AAeA,SAAS,EAAe,GAAsB,GAAoB;CAChE,IAAI,CAAC,OAAO,SAAS,CAAY,KAAK,IAAe,GACnD,MAAU,WAAW,GAAG,EAAK,uDAAuD;AAExF;AAEA,SAAgB,EAAQ,GAA+B;CACrD,IAAI,CAAC,OAAO,UAAU,CAAK,KAAK,IAAQ,GACtC,MAAU,WAAW,2CAA2C;CAGlE,QAAQ,MACN,GAAQ,GAAM,MAAW;EACvB,IAAI,MAAU,GAAG;GACf,EAAK,SAAS;GAEd;EACF;EAEA,IAAI,IAAO,GACL,IAA8C,CAAC;EAoBrD,OAlBA,EAAgB,UAAU,EACxB,GACA;GACE,UAAU,EAAK;GACf,OAAO,EAAK;GACZ,KAAK,GAAO;IAIV,AAHA,EAAK,KAAK,CAAK,GACf,KAEI,MAAS,MACX,EAAK,SAAS,GACd,EAAgB,SAAS,YAAY;GAEzC;EACF,GACA,CACF,SAEa,EAAgB,SAAS,YAAY;CACpD,CAAC;AACL;AAEA,SAAgB,EAAa,GAAyD;CACpF,QAAQ,MACN,GAAQ,GAAM,MAAW;EACvB,IAAI,GACA,GACA,UAA6B,CAAC,GAE5B,UAAuB;GAG3B,AAFA,GAAoB,YAAY,GAChC,GAAsB,YAAY,GAClC,EAAK,SAAS;EAChB;EAEA,IAAI,aAAoB,aAAa;GACnC,IAAI,EAAS,SAAS;IACpB,EAAK,SAAS;IAEd;GACF;GAGA,AADA,EAAS,iBAAiB,SAAS,GAAU,EAAE,MAAM,GAAK,CAAC,GAC3D,UAA6B,EAAS,oBAAoB,SAAS,CAAQ;EAC7E,OACE,IAAuB,EAAK,GAAU;GAAE,OAAO,EAAK;GAAO,MAAM;EAAS,GAAG,CAAM;EAerF,OAZK,EAAO,YACV,IAAqB,EACnB,GACA;GACE,UAAU,EAAK;GACf,OAAO,EAAK;GACZ,MAAM,EAAK;EACb,GACA,CACF,UAGW;GAGX,AAFA,EAAe,GACf,GAAoB,YAAY,GAChC,GAAsB,YAAY;EACpC;CACF,CAAC;AACL;AAEA,SAAgB,EAAY,GAA0C;CAGpE,OAFA,EAAe,EAAQ,KAAK,mBAAmB,IAEvC,MACN,GAAQ,GAAM,MAAW;EACvB,IAAI,GACA,GACA,IAAa,IAEX,UAAoB;GACxB,IAAS,KAAA,GAEJ,MAEL,IAAa,IACb,EAAK,KAAK,CAAY;EACxB,GAEM,IAAe,EACnB,GACA;GACE,WAAW;IAGT,AAFA,IAAS,GACT,EAAM,GACN,EAAK,SAAS;GAChB;GACA,OAAO,EAAK;GACZ,KAAK,GAAO;IAIV,AAHA,IAAU,GACV,IAAa,IACb,IAAS,GACT,IAAS,EAAiB,MAAM,GAAO,EAAQ,GAAG;GACpD;EACF,GACA,CACF;EAEA,aAAa;GAEX,AADA,IAAS,GACT,EAAa,YAAY;EAC3B;CACF,CAAC;AACL;AAEA,SAAgB,EAAW,GAAyC;CAGlE,OAFA,EAAe,EAAQ,OAAO,kBAAkB,IAExC,MACN,GAAQ,GAAM,MAAW;EACvB,IAAI,GAEE,UAAoB;GACxB,IAAS,EAAiB,YAAY,EAAK,MAAM,IAAI,EAAiB,EAAQ,KAAK,CAAC,GAAG,EAAQ,KAAK;EACtG;EAEA,EAAM;EAEN,IAAM,IAAe,EACnB,GACA;GACE,WAAW;IAET,AADA,EAAO,GACP,EAAK,SAAS;GAChB;GACA,MAAM,GAAQ;IAEZ,AADA,EAAO,GACP,EAAK,MAAM,CAAM;GACnB;GACA,KAAK,GAAO;IAGV,AAFA,EAAO,GACP,EAAM,GACN,EAAK,KAAK,CAAK;GACjB;EACF,GACA,CACF;EAEA,aAAa;GAEX,AADA,EAAO,GACP,EAAa,YAAY;EAC3B;CACF,CAAC;AACL"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("../
|
|
1
|
+
const e=require("../core.cjs"),t=require("../_link.cjs"),n=require("../_safe.cjs");function r(r){return i=>e.stream((e,a)=>t.link(i,{complete:e.complete,error:e.error,next(t){n.tryCall(()=>e.next(r(t)),e.error)}},a).unsubscribe)}function i(r){return i=>e.stream((e,a)=>t.link(i,{complete:e.complete,error:e.error,next(t){n.tryCall(()=>{r(t)&&e.next(t)},e.error)}},a).unsubscribe)}function a(r,i){return a=>e.stream((e,o)=>{let s=i;return t.link(a,{complete:e.complete,error:e.error,next(t){n.tryCall(()=>{s=r(s,t),e.next(s)},e.error)}},o).unsubscribe})}function o(r){return i=>e.stream((e,a)=>{let o=!1,s,c=()=>{o&&!s&&e.complete()},l=t.link(i,{complete(){o=!0,c()},error:e.error,next(i){s?.unsubscribe(),s=void 0,n.tryCall(()=>{let n=t.link(r(i),{complete(){s=void 0,c()},error:e.error,next:e.next},a);s=n.closed?void 0:n},e.error)}},a);return()=>{l.unsubscribe(),s?.unsubscribe()}})}function s(r){return i=>e.stream((e,a)=>{let o=!1,s=new Set,c=()=>{o&&s.size===0&&e.complete()},l=t.link(i,{complete(){o=!0,c()},error:e.error,next(i){n.tryCall(()=>{let n={};n.current=t.link(r(i),{complete(){n.current&&s.delete(n.current),c()},error:e.error,next:e.next},a),n.current.closed||s.add(n.current)},e.error)}},a);return()=>{l.unsubscribe();for(let e of s)e.unsubscribe()}})}function c(r,i){if(!Number.isInteger(i.capacity)||i.capacity<1)throw RangeError(`concatMap capacity must be a positive integer`);return a=>e.stream((e,o)=>{let s=[],c=!1,l,u={},d=()=>{if(l||s.length===0){c&&!l&&s.length===0&&e.complete();return}let i=s.shift();n.tryCall(()=>{let n=t.link(r(i),{complete(){l=void 0,d()},error:e.error,next:e.next},o);l=n.closed?void 0:n,l||d()},e.error)};return u.current=t.link(a,{complete(){c=!0,d()},error:e.error,next(t){if(s.length===i.capacity){u.current?.unsubscribe(),e.error(RangeError(`concatMap buffer capacity exceeded`));return}s.push(t),d()}},o),()=>{u.current?.unsubscribe(),l?.unsubscribe(),s.length=0}})}exports.concatMap=c,exports.filter=i,exports.map=r,exports.mergeMap=s,exports.scan=a,exports.switchMap=o;
|
|
2
2
|
//# sourceMappingURL=transformation.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformation.cjs","names":[],"sources":["../../src/operators/transformation.ts"],"sourcesContent":["import type { Flux, Operator, Unsubscribe } from '../types';\n\nimport { warn } from '../_dev';\nimport { clampPositiveInt } from '../_numeric';\nimport { guard } from '../_safe';\nimport { flux } from '../core';\n\n/** Transform each emitted value through `fn`. */\nexport function map<A, B>(fn: (value: A) => B): Operator<A, B> {\n return (source) =>\n flux<B>((observer) =>\n source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n guard(() => observer.next(fn(v)), observer.error);\n },\n }),\n );\n}\n\n/** Emit only values for which `predicate` returns `true`. */\nexport function filter<T>(predicate: (value: T) => boolean): Operator<T, T> {\n return (source) =>\n flux<T>((observer) =>\n source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n guard(() => {\n if (predicate(v)) observer.next(v);\n }, observer.error);\n },\n }),\n );\n}\n\n/**\n * Accumulate state with a reducer. Emits the accumulated value after each source emission.\n *\n * @example\n * of(1, 2, 3).pipe(scan((acc, n) => acc + n, 0)); // emits 1, 3, 6\n */\nexport function scan<T, A>(reducer: (acc: A, value: T) => A, seed: A): Operator<T, A> {\n return (source) =>\n flux<A>((observer) => {\n let acc = seed;\n\n return source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n guard(() => {\n acc = reducer(acc, v);\n observer.next(acc);\n }, observer.error);\n },\n });\n });\n}\n\n/**\n * Map each source value to an inner `Flux`, cancelling the previous inner on each new emission.\n * Useful for search-as-you-type, navigation, etc.\n */\nexport function switchMap<A, B>(fn: (value: A) => Flux<B>): Operator<A, B> {\n return (source) =>\n flux<B>((observer) => {\n let innerUnsub: Unsubscribe | undefined;\n let outerDone = false;\n\n const checkDone = (): void => {\n if (outerDone && !innerUnsub) observer.complete?.();\n };\n\n const outerUnsub = source.subscribe({\n complete() {\n outerDone = true;\n checkDone();\n },\n error: observer.error,\n next(v) {\n guard(() => {\n innerUnsub?.();\n innerUnsub = fn(v).subscribe({\n complete() {\n innerUnsub = undefined;\n checkDone();\n },\n error: observer.error,\n next: observer.next,\n });\n }, observer.error);\n },\n });\n\n return () => {\n outerUnsub();\n innerUnsub?.();\n };\n });\n}\n\n/**\n * Map each source value to an inner `Flux`, merging all inner streams concurrently.\n * All inner subscriptions run simultaneously.\n */\nexport function flatMap<A, B>(fn: (value: A) => Flux<B>): Operator<A, B> {\n return (source) =>\n flux<B>((observer) => {\n let outerDone = false;\n let activeInner = 0;\n const innerUnsubs = new Set<Unsubscribe>();\n\n const checkDone = (): void => {\n if (outerDone && activeInner === 0) observer.complete?.();\n };\n\n const outerUnsub = source.subscribe({\n complete() {\n outerDone = true;\n checkDone();\n },\n error: observer.error,\n next(v) {\n guard(() => {\n activeInner++;\n\n let syncDone = false;\n // Init to NOOP to avoid TDZ if complete fires synchronously during subscribe().\n let unsub: Unsubscribe = () => {};\n\n const sub = fn(v).subscribe({\n complete() {\n syncDone = true;\n activeInner--;\n innerUnsubs.delete(unsub);\n checkDone();\n },\n error: observer.error,\n next: observer.next,\n });\n\n unsub = sub;\n\n if (!syncDone) innerUnsubs.add(unsub);\n }, observer.error);\n },\n });\n\n return () => {\n outerUnsub();\n for (const u of innerUnsubs) u();\n };\n });\n}\n\n/**\n * Map each source value to an inner `Flux`, subscribing to each one only after\n * the previous inner completes (sequential, queued).\n * Pass `maxBuffer` to cap queued items; excess items are dropped silently.\n */\nexport function concatMap<A, B>(fn: (value: A) => Flux<B>, maxBuffer = Infinity): Operator<A, B> {\n return (source) =>\n flux<B>((observer) => {\n let outerDone = false;\n const queue: A[] = [];\n let processing = false;\n let currentUnsub: Unsubscribe | undefined;\n\n function processNext(): void {\n if (queue.length === 0) {\n processing = false;\n\n if (outerDone) observer.complete?.();\n\n return;\n }\n\n processing = true;\n\n const item = queue.shift()!;\n\n guard(() => {\n currentUnsub = fn(item).subscribe({\n complete() {\n currentUnsub = undefined;\n\n processNext();\n },\n error: observer.error,\n next: observer.next,\n });\n }, observer.error);\n }\n\n const outerUnsub = source.subscribe({\n complete() {\n outerDone = true;\n\n if (!processing) observer.complete?.();\n },\n error: observer.error,\n next(v) {\n if (queue.length < maxBuffer) {\n queue.push(v);\n\n if (!processing) processNext();\n }\n },\n });\n\n return () => {\n outerUnsub();\n currentUnsub?.();\n queue.length = 0;\n };\n });\n}\n\n/**\n * Suppress consecutive duplicate values.\n * Uses `Object.is` by default; provide a custom `comparator` for deep equality.\n *\n * @example\n * of(1, 1, 2, 2, 3).pipe(distinctUntilChanged()); // emits 1, 2, 3\n */\nexport function distinctUntilChanged<T>(comparator?: (a: T, b: T) => boolean): Operator<T, T> {\n const eq = comparator ?? Object.is;\n\n return (source) =>\n flux<T>((observer) => {\n let hasPrev = false;\n let prev: T;\n\n return source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n guard(() => {\n if (!hasPrev || !eq(prev, v)) {\n hasPrev = true;\n prev = v;\n observer.next(v);\n }\n }, observer.error);\n },\n });\n });\n}\n\n/**\n * Prepend one or more static values before the source's first emission.\n *\n * @example\n * of(2, 3).pipe(startWith(0, 1)).subscribe(console.log); // 0, 1, 2, 3\n */\nexport function startWith<T>(...values: T[]): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n for (const v of values) observer.next(v);\n\n return source.subscribe(observer);\n });\n}\n\n/**\n * Collect source emissions into fixed-size arrays, emitting each batch when full.\n * A partial batch at the end of the source is flushed on completion.\n *\n * @param size - Number of emissions per batch.\n * @param every - Start a new batch every `every` emissions (default: `size`, non-overlapping).\n *\n * @example\n * of(1, 2, 3, 4, 5, 6).pipe(bufferCount(2)).subscribe(console.log);\n * // [1, 2], [3, 4], [5, 6]\n */\nexport function bufferCount<T>(size: number, every?: number): Operator<T, T[]> {\n const { clamped: sizeClamped, value: safeSize } = clampPositiveInt(size);\n const { clamped: everyClamped, value: step } = clampPositiveInt(every ?? safeSize);\n\n if (sizeClamped) {\n warn(`bufferCount: size must be a finite integer >= 1, got ${size} — clamped to ${safeSize}`);\n }\n\n if (every !== undefined && everyClamped) {\n warn(`bufferCount: every must be a finite integer >= 1, got ${every} — clamped to ${step}`);\n }\n\n return (source) =>\n flux<T[]>((observer) => {\n const buffers: T[][] = [];\n let count = 0;\n\n return source.subscribe({\n complete() {\n for (const buf of buffers) {\n if (buf.length > 0) observer.next(buf);\n }\n\n observer.complete?.();\n },\n error: observer.error,\n next(v) {\n if (count % step === 0) buffers.push([]);\n\n for (const buf of buffers) buf.push(v);\n\n let i = 0;\n\n while (i < buffers.length) {\n if (buffers[i]!.length >= safeSize) {\n observer.next(buffers[i]!);\n buffers.splice(i, 1);\n } else {\n i++;\n }\n }\n\n count++;\n },\n });\n });\n}\n\n/**\n * Emit the previous and current value as a `[prev, curr]` tuple.\n * No emission occurs until the second source value arrives.\n *\n * @example\n * of(1, 2, 3).pipe(pairwise()).subscribe(console.log); // [1, 2], [2, 3]\n */\nexport function pairwise<T>(): Operator<T, [T, T]> {\n return (source) =>\n flux<[T, T]>((observer) => {\n let hasPrev = false;\n let prev: T;\n\n return source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n if (hasPrev) observer.next([prev, v]);\n\n hasPrev = true;\n prev = v;\n },\n });\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transformation.cjs","names":[],"sources":["../../src/operators/transformation.ts"],"sourcesContent":["import type { Operator, Stream, Subscription } from '../types';\n\nimport { link } from '../_link';\nimport { tryCall } from '../_safe';\nimport { stream } from '../core';\n\nexport type ConcatMapOptions = {\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\nexport function mergeMap<A, B>(project: (value: A) => Stream<B>): Operator<A, B> {\n return (source) =>\n stream((sink, signal) => {\n let outerComplete = false;\n const inners = new Set<Subscription>();\n\n const finish = (): void => {\n if (outerComplete && inners.size === 0) 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 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 finish();\n },\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n\n if (!innerRef.current.closed) inners.add(innerRef.current);\n }, sink.error);\n },\n },\n signal,\n );\n\n return () => {\n outer.unsubscribe();\n for (const inner of inners) inner.unsubscribe();\n };\n });\n}\n\nexport function concatMap<A, B>(project: (value: A) => Stream<B>, options: ConcatMapOptions): Operator<A, B> {\n if (!Number.isInteger(options.capacity) || options.capacity < 1) {\n throw new RangeError('concatMap capacity must be a positive integer');\n }\n\n return (source) =>\n stream((sink, signal) => {\n const queue: A[] = [];\n let outerComplete = false;\n let inner: Subscription | undefined;\n const outerRef: { current?: Subscription } = {};\n\n const next = (): void => {\n if (inner || queue.length === 0) {\n if (outerComplete && !inner && queue.length === 0) sink.complete();\n\n return;\n }\n\n const value = queue.shift()!;\n\n tryCall(() => {\n const subscription = link(\n project(value),\n {\n complete() {\n inner = undefined;\n next();\n },\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n\n inner = subscription.closed ? undefined : subscription;\n\n if (!inner) next();\n }, sink.error);\n };\n\n outerRef.current = link(\n source,\n {\n complete() {\n outerComplete = true;\n next();\n },\n error: sink.error,\n next(value) {\n if (queue.length === options.capacity) {\n outerRef.current?.unsubscribe();\n sink.error(new RangeError('concatMap buffer capacity exceeded'));\n\n return;\n }\n\n queue.push(value);\n next();\n },\n },\n signal,\n );\n\n return () => {\n outerRef.current?.unsubscribe();\n inner?.unsubscribe();\n queue.length = 0;\n };\n });\n}\n"],"mappings":"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"}
|
|
@@ -1,64 +1,11 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import type { Operator, Stream } from '../types';
|
|
2
|
+
export type ConcatMapOptions = {
|
|
3
|
+
capacity: number;
|
|
4
|
+
};
|
|
5
|
+
export declare function map<A, B>(project: (value: A) => B): Operator<A, B>;
|
|
5
6
|
export declare function filter<T>(predicate: (value: T) => boolean): Operator<T, T>;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
* of(1, 2, 3).pipe(scan((acc, n) => acc + n, 0)); // emits 1, 3, 6
|
|
11
|
-
*/
|
|
12
|
-
export declare function scan<T, A>(reducer: (acc: A, value: T) => A, seed: A): Operator<T, A>;
|
|
13
|
-
/**
|
|
14
|
-
* Map each source value to an inner `Flux`, cancelling the previous inner on each new emission.
|
|
15
|
-
* Useful for search-as-you-type, navigation, etc.
|
|
16
|
-
*/
|
|
17
|
-
export declare function switchMap<A, B>(fn: (value: A) => Flux<B>): Operator<A, B>;
|
|
18
|
-
/**
|
|
19
|
-
* Map each source value to an inner `Flux`, merging all inner streams concurrently.
|
|
20
|
-
* All inner subscriptions run simultaneously.
|
|
21
|
-
*/
|
|
22
|
-
export declare function flatMap<A, B>(fn: (value: A) => Flux<B>): Operator<A, B>;
|
|
23
|
-
/**
|
|
24
|
-
* Map each source value to an inner `Flux`, subscribing to each one only after
|
|
25
|
-
* the previous inner completes (sequential, queued).
|
|
26
|
-
* Pass `maxBuffer` to cap queued items; excess items are dropped silently.
|
|
27
|
-
*/
|
|
28
|
-
export declare function concatMap<A, B>(fn: (value: A) => Flux<B>, maxBuffer?: number): Operator<A, B>;
|
|
29
|
-
/**
|
|
30
|
-
* Suppress consecutive duplicate values.
|
|
31
|
-
* Uses `Object.is` by default; provide a custom `comparator` for deep equality.
|
|
32
|
-
*
|
|
33
|
-
* @example
|
|
34
|
-
* of(1, 1, 2, 2, 3).pipe(distinctUntilChanged()); // emits 1, 2, 3
|
|
35
|
-
*/
|
|
36
|
-
export declare function distinctUntilChanged<T>(comparator?: (a: T, b: T) => boolean): Operator<T, T>;
|
|
37
|
-
/**
|
|
38
|
-
* Prepend one or more static values before the source's first emission.
|
|
39
|
-
*
|
|
40
|
-
* @example
|
|
41
|
-
* of(2, 3).pipe(startWith(0, 1)).subscribe(console.log); // 0, 1, 2, 3
|
|
42
|
-
*/
|
|
43
|
-
export declare function startWith<T>(...values: T[]): Operator<T, T>;
|
|
44
|
-
/**
|
|
45
|
-
* Collect source emissions into fixed-size arrays, emitting each batch when full.
|
|
46
|
-
* A partial batch at the end of the source is flushed on completion.
|
|
47
|
-
*
|
|
48
|
-
* @param size - Number of emissions per batch.
|
|
49
|
-
* @param every - Start a new batch every `every` emissions (default: `size`, non-overlapping).
|
|
50
|
-
*
|
|
51
|
-
* @example
|
|
52
|
-
* of(1, 2, 3, 4, 5, 6).pipe(bufferCount(2)).subscribe(console.log);
|
|
53
|
-
* // [1, 2], [3, 4], [5, 6]
|
|
54
|
-
*/
|
|
55
|
-
export declare function bufferCount<T>(size: number, every?: number): Operator<T, T[]>;
|
|
56
|
-
/**
|
|
57
|
-
* Emit the previous and current value as a `[prev, curr]` tuple.
|
|
58
|
-
* No emission occurs until the second source value arrives.
|
|
59
|
-
*
|
|
60
|
-
* @example
|
|
61
|
-
* of(1, 2, 3).pipe(pairwise()).subscribe(console.log); // [1, 2], [2, 3]
|
|
62
|
-
*/
|
|
63
|
-
export declare function pairwise<T>(): Operator<T, [T, T]>;
|
|
7
|
+
export declare function scan<T, A>(reducer: (state: A, value: T) => A, initial: A): Operator<T, A>;
|
|
8
|
+
export declare function switchMap<A, B>(project: (value: A) => Stream<B>): Operator<A, B>;
|
|
9
|
+
export declare function mergeMap<A, B>(project: (value: A) => Stream<B>): Operator<A, B>;
|
|
10
|
+
export declare function concatMap<A, B>(project: (value: A) => Stream<B>, options: ConcatMapOptions): Operator<A, B>;
|
|
64
11
|
//# sourceMappingURL=transformation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformation.d.ts","sourceRoot":"","sources":["../../src/operators/transformation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"transformation.d.ts","sourceRoot":"","sources":["../../src/operators/transformation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAgB,MAAM,UAAU,CAAC;AAM/D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAgB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAgBlE;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAkB1E;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAoBzF;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAgDhF;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAgD/E;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,gBAAgB,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAsE3G"}
|
|
@@ -1,185 +1,134 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { clampPositiveInt as r } from "../_numeric.js";
|
|
1
|
+
import { stream as e } from "../core.js";
|
|
2
|
+
import { link as t } from "../_link.js";
|
|
3
|
+
import { tryCall as n } from "../_safe.js";
|
|
5
4
|
//#region src/operators/transformation.ts
|
|
6
|
-
function
|
|
7
|
-
return (
|
|
8
|
-
complete:
|
|
9
|
-
error:
|
|
10
|
-
next(
|
|
11
|
-
n(() =>
|
|
5
|
+
function r(r) {
|
|
6
|
+
return (i) => e((e, a) => t(i, {
|
|
7
|
+
complete: e.complete,
|
|
8
|
+
error: e.error,
|
|
9
|
+
next(t) {
|
|
10
|
+
n(() => e.next(r(t)), e.error);
|
|
12
11
|
}
|
|
13
|
-
}));
|
|
12
|
+
}, a).unsubscribe);
|
|
14
13
|
}
|
|
15
|
-
function
|
|
16
|
-
return (
|
|
17
|
-
complete:
|
|
18
|
-
error:
|
|
19
|
-
next(
|
|
14
|
+
function i(r) {
|
|
15
|
+
return (i) => e((e, a) => t(i, {
|
|
16
|
+
complete: e.complete,
|
|
17
|
+
error: e.error,
|
|
18
|
+
next(t) {
|
|
20
19
|
n(() => {
|
|
21
|
-
|
|
22
|
-
},
|
|
20
|
+
r(t) && e.next(t);
|
|
21
|
+
}, e.error);
|
|
23
22
|
}
|
|
24
|
-
}));
|
|
23
|
+
}, a).unsubscribe);
|
|
25
24
|
}
|
|
26
|
-
function
|
|
27
|
-
return (
|
|
28
|
-
let
|
|
29
|
-
return
|
|
30
|
-
complete:
|
|
31
|
-
error:
|
|
32
|
-
next(
|
|
25
|
+
function a(r, i) {
|
|
26
|
+
return (a) => e((e, o) => {
|
|
27
|
+
let s = i;
|
|
28
|
+
return t(a, {
|
|
29
|
+
complete: e.complete,
|
|
30
|
+
error: e.error,
|
|
31
|
+
next(t) {
|
|
33
32
|
n(() => {
|
|
34
|
-
|
|
35
|
-
},
|
|
33
|
+
s = r(s, t), e.next(s);
|
|
34
|
+
}, e.error);
|
|
36
35
|
}
|
|
37
|
-
});
|
|
36
|
+
}, o).unsubscribe;
|
|
38
37
|
});
|
|
39
38
|
}
|
|
40
|
-
function
|
|
41
|
-
return (
|
|
42
|
-
let
|
|
43
|
-
|
|
44
|
-
},
|
|
39
|
+
function o(r) {
|
|
40
|
+
return (i) => e((e, a) => {
|
|
41
|
+
let o = !1, s, c = () => {
|
|
42
|
+
o && !s && e.complete();
|
|
43
|
+
}, l = t(i, {
|
|
45
44
|
complete() {
|
|
46
|
-
|
|
45
|
+
o = !0, c();
|
|
47
46
|
},
|
|
48
|
-
error:
|
|
49
|
-
next(
|
|
50
|
-
n(() => {
|
|
51
|
-
|
|
47
|
+
error: e.error,
|
|
48
|
+
next(i) {
|
|
49
|
+
s?.unsubscribe(), s = void 0, n(() => {
|
|
50
|
+
let n = t(r(i), {
|
|
52
51
|
complete() {
|
|
53
|
-
|
|
52
|
+
s = void 0, c();
|
|
54
53
|
},
|
|
55
|
-
error:
|
|
56
|
-
next:
|
|
57
|
-
});
|
|
58
|
-
|
|
54
|
+
error: e.error,
|
|
55
|
+
next: e.next
|
|
56
|
+
}, a);
|
|
57
|
+
s = n.closed ? void 0 : n;
|
|
58
|
+
}, e.error);
|
|
59
59
|
}
|
|
60
|
-
});
|
|
60
|
+
}, a);
|
|
61
61
|
return () => {
|
|
62
|
-
|
|
62
|
+
l.unsubscribe(), s?.unsubscribe();
|
|
63
63
|
};
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
|
-
function
|
|
67
|
-
return (
|
|
68
|
-
let
|
|
69
|
-
|
|
70
|
-
},
|
|
66
|
+
function s(r) {
|
|
67
|
+
return (i) => e((e, a) => {
|
|
68
|
+
let o = !1, s = /* @__PURE__ */ new Set(), c = () => {
|
|
69
|
+
o && s.size === 0 && e.complete();
|
|
70
|
+
}, l = t(i, {
|
|
71
71
|
complete() {
|
|
72
|
-
|
|
72
|
+
o = !0, c();
|
|
73
73
|
},
|
|
74
|
-
error:
|
|
75
|
-
next(
|
|
74
|
+
error: e.error,
|
|
75
|
+
next(i) {
|
|
76
76
|
n(() => {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
i = e(r).subscribe({
|
|
77
|
+
let n = {};
|
|
78
|
+
n.current = t(r(i), {
|
|
80
79
|
complete() {
|
|
81
|
-
n
|
|
80
|
+
n.current && s.delete(n.current), c();
|
|
82
81
|
},
|
|
83
|
-
error:
|
|
84
|
-
next:
|
|
85
|
-
}), n ||
|
|
86
|
-
},
|
|
82
|
+
error: e.error,
|
|
83
|
+
next: e.next
|
|
84
|
+
}, a), n.current.closed || s.add(n.current);
|
|
85
|
+
}, e.error);
|
|
87
86
|
}
|
|
88
|
-
});
|
|
87
|
+
}, a);
|
|
89
88
|
return () => {
|
|
90
|
-
|
|
91
|
-
for (let e of
|
|
89
|
+
l.unsubscribe();
|
|
90
|
+
for (let e of s) e.unsubscribe();
|
|
92
91
|
};
|
|
93
92
|
});
|
|
94
93
|
}
|
|
95
|
-
function
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
if (
|
|
100
|
-
|
|
94
|
+
function c(r, i) {
|
|
95
|
+
if (!Number.isInteger(i.capacity) || i.capacity < 1) throw RangeError("concatMap capacity must be a positive integer");
|
|
96
|
+
return (a) => e((e, o) => {
|
|
97
|
+
let s = [], c = !1, l, u = {}, d = () => {
|
|
98
|
+
if (l || s.length === 0) {
|
|
99
|
+
c && !l && s.length === 0 && e.complete();
|
|
101
100
|
return;
|
|
102
101
|
}
|
|
103
|
-
|
|
104
|
-
let r = o.shift();
|
|
102
|
+
let i = s.shift();
|
|
105
103
|
n(() => {
|
|
106
|
-
|
|
104
|
+
let n = t(r(i), {
|
|
107
105
|
complete() {
|
|
108
|
-
|
|
106
|
+
l = void 0, d();
|
|
109
107
|
},
|
|
110
|
-
error:
|
|
111
|
-
next:
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
let u = i.subscribe({
|
|
116
|
-
complete() {
|
|
117
|
-
a = !0, s || t.complete?.();
|
|
118
|
-
},
|
|
119
|
-
error: t.error,
|
|
120
|
-
next(e) {
|
|
121
|
-
o.length < r && (o.push(e), s || l());
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
return () => {
|
|
125
|
-
u(), c?.(), o.length = 0;
|
|
108
|
+
error: e.error,
|
|
109
|
+
next: e.next
|
|
110
|
+
}, o);
|
|
111
|
+
l = n.closed ? void 0 : n, l || d();
|
|
112
|
+
}, e.error);
|
|
126
113
|
};
|
|
127
|
-
|
|
128
|
-
}
|
|
129
|
-
function u(e) {
|
|
130
|
-
let r = e ?? Object.is;
|
|
131
|
-
return (e) => t((t) => {
|
|
132
|
-
let i = !1, a;
|
|
133
|
-
return e.subscribe({
|
|
134
|
-
complete: t.complete,
|
|
135
|
-
error: t.error,
|
|
136
|
-
next(e) {
|
|
137
|
-
n(() => {
|
|
138
|
-
(!i || !r(a, e)) && (i = !0, a = e, t.next(e));
|
|
139
|
-
}, t.error);
|
|
140
|
-
}
|
|
141
|
-
});
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
function d(...e) {
|
|
145
|
-
return (n) => t((t) => {
|
|
146
|
-
for (let n of e) t.next(n);
|
|
147
|
-
return n.subscribe(t);
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
function f(n, i) {
|
|
151
|
-
let { clamped: a, value: o } = r(n), { clamped: s, value: c } = r(i ?? o);
|
|
152
|
-
return a && e(`bufferCount: size must be a finite integer >= 1, got ${n} — clamped to ${o}`), i !== void 0 && s && e(`bufferCount: every must be a finite integer >= 1, got ${i} — clamped to ${c}`), (e) => t((t) => {
|
|
153
|
-
let n = [], r = 0;
|
|
154
|
-
return e.subscribe({
|
|
114
|
+
return u.current = t(a, {
|
|
155
115
|
complete() {
|
|
156
|
-
|
|
157
|
-
t.complete?.();
|
|
116
|
+
c = !0, d();
|
|
158
117
|
},
|
|
159
|
-
error:
|
|
160
|
-
next(
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
118
|
+
error: e.error,
|
|
119
|
+
next(t) {
|
|
120
|
+
if (s.length === i.capacity) {
|
|
121
|
+
u.current?.unsubscribe(), e.error(/* @__PURE__ */ RangeError("concatMap buffer capacity exceeded"));
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
s.push(t), d();
|
|
166
125
|
}
|
|
167
|
-
})
|
|
168
|
-
|
|
169
|
-
}
|
|
170
|
-
function p() {
|
|
171
|
-
return (e) => t((t) => {
|
|
172
|
-
let n = !1, r;
|
|
173
|
-
return e.subscribe({
|
|
174
|
-
complete: t.complete,
|
|
175
|
-
error: t.error,
|
|
176
|
-
next(e) {
|
|
177
|
-
n && t.next([r, e]), n = !0, r = e;
|
|
178
|
-
}
|
|
179
|
-
});
|
|
126
|
+
}, o), () => {
|
|
127
|
+
u.current?.unsubscribe(), l?.unsubscribe(), s.length = 0;
|
|
128
|
+
};
|
|
180
129
|
});
|
|
181
130
|
}
|
|
182
131
|
//#endregion
|
|
183
|
-
export {
|
|
132
|
+
export { c as concatMap, i as filter, r as map, s as mergeMap, a as scan, o as switchMap };
|
|
184
133
|
|
|
185
134
|
//# sourceMappingURL=transformation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformation.js","names":[],"sources":["../../src/operators/transformation.ts"],"sourcesContent":["import type { Flux, Operator, Unsubscribe } from '../types';\n\nimport { warn } from '../_dev';\nimport { clampPositiveInt } from '../_numeric';\nimport { guard } from '../_safe';\nimport { flux } from '../core';\n\n/** Transform each emitted value through `fn`. */\nexport function map<A, B>(fn: (value: A) => B): Operator<A, B> {\n return (source) =>\n flux<B>((observer) =>\n source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n guard(() => observer.next(fn(v)), observer.error);\n },\n }),\n );\n}\n\n/** Emit only values for which `predicate` returns `true`. */\nexport function filter<T>(predicate: (value: T) => boolean): Operator<T, T> {\n return (source) =>\n flux<T>((observer) =>\n source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n guard(() => {\n if (predicate(v)) observer.next(v);\n }, observer.error);\n },\n }),\n );\n}\n\n/**\n * Accumulate state with a reducer. Emits the accumulated value after each source emission.\n *\n * @example\n * of(1, 2, 3).pipe(scan((acc, n) => acc + n, 0)); // emits 1, 3, 6\n */\nexport function scan<T, A>(reducer: (acc: A, value: T) => A, seed: A): Operator<T, A> {\n return (source) =>\n flux<A>((observer) => {\n let acc = seed;\n\n return source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n guard(() => {\n acc = reducer(acc, v);\n observer.next(acc);\n }, observer.error);\n },\n });\n });\n}\n\n/**\n * Map each source value to an inner `Flux`, cancelling the previous inner on each new emission.\n * Useful for search-as-you-type, navigation, etc.\n */\nexport function switchMap<A, B>(fn: (value: A) => Flux<B>): Operator<A, B> {\n return (source) =>\n flux<B>((observer) => {\n let innerUnsub: Unsubscribe | undefined;\n let outerDone = false;\n\n const checkDone = (): void => {\n if (outerDone && !innerUnsub) observer.complete?.();\n };\n\n const outerUnsub = source.subscribe({\n complete() {\n outerDone = true;\n checkDone();\n },\n error: observer.error,\n next(v) {\n guard(() => {\n innerUnsub?.();\n innerUnsub = fn(v).subscribe({\n complete() {\n innerUnsub = undefined;\n checkDone();\n },\n error: observer.error,\n next: observer.next,\n });\n }, observer.error);\n },\n });\n\n return () => {\n outerUnsub();\n innerUnsub?.();\n };\n });\n}\n\n/**\n * Map each source value to an inner `Flux`, merging all inner streams concurrently.\n * All inner subscriptions run simultaneously.\n */\nexport function flatMap<A, B>(fn: (value: A) => Flux<B>): Operator<A, B> {\n return (source) =>\n flux<B>((observer) => {\n let outerDone = false;\n let activeInner = 0;\n const innerUnsubs = new Set<Unsubscribe>();\n\n const checkDone = (): void => {\n if (outerDone && activeInner === 0) observer.complete?.();\n };\n\n const outerUnsub = source.subscribe({\n complete() {\n outerDone = true;\n checkDone();\n },\n error: observer.error,\n next(v) {\n guard(() => {\n activeInner++;\n\n let syncDone = false;\n // Init to NOOP to avoid TDZ if complete fires synchronously during subscribe().\n let unsub: Unsubscribe = () => {};\n\n const sub = fn(v).subscribe({\n complete() {\n syncDone = true;\n activeInner--;\n innerUnsubs.delete(unsub);\n checkDone();\n },\n error: observer.error,\n next: observer.next,\n });\n\n unsub = sub;\n\n if (!syncDone) innerUnsubs.add(unsub);\n }, observer.error);\n },\n });\n\n return () => {\n outerUnsub();\n for (const u of innerUnsubs) u();\n };\n });\n}\n\n/**\n * Map each source value to an inner `Flux`, subscribing to each one only after\n * the previous inner completes (sequential, queued).\n * Pass `maxBuffer` to cap queued items; excess items are dropped silently.\n */\nexport function concatMap<A, B>(fn: (value: A) => Flux<B>, maxBuffer = Infinity): Operator<A, B> {\n return (source) =>\n flux<B>((observer) => {\n let outerDone = false;\n const queue: A[] = [];\n let processing = false;\n let currentUnsub: Unsubscribe | undefined;\n\n function processNext(): void {\n if (queue.length === 0) {\n processing = false;\n\n if (outerDone) observer.complete?.();\n\n return;\n }\n\n processing = true;\n\n const item = queue.shift()!;\n\n guard(() => {\n currentUnsub = fn(item).subscribe({\n complete() {\n currentUnsub = undefined;\n\n processNext();\n },\n error: observer.error,\n next: observer.next,\n });\n }, observer.error);\n }\n\n const outerUnsub = source.subscribe({\n complete() {\n outerDone = true;\n\n if (!processing) observer.complete?.();\n },\n error: observer.error,\n next(v) {\n if (queue.length < maxBuffer) {\n queue.push(v);\n\n if (!processing) processNext();\n }\n },\n });\n\n return () => {\n outerUnsub();\n currentUnsub?.();\n queue.length = 0;\n };\n });\n}\n\n/**\n * Suppress consecutive duplicate values.\n * Uses `Object.is` by default; provide a custom `comparator` for deep equality.\n *\n * @example\n * of(1, 1, 2, 2, 3).pipe(distinctUntilChanged()); // emits 1, 2, 3\n */\nexport function distinctUntilChanged<T>(comparator?: (a: T, b: T) => boolean): Operator<T, T> {\n const eq = comparator ?? Object.is;\n\n return (source) =>\n flux<T>((observer) => {\n let hasPrev = false;\n let prev: T;\n\n return source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n guard(() => {\n if (!hasPrev || !eq(prev, v)) {\n hasPrev = true;\n prev = v;\n observer.next(v);\n }\n }, observer.error);\n },\n });\n });\n}\n\n/**\n * Prepend one or more static values before the source's first emission.\n *\n * @example\n * of(2, 3).pipe(startWith(0, 1)).subscribe(console.log); // 0, 1, 2, 3\n */\nexport function startWith<T>(...values: T[]): Operator<T, T> {\n return (source) =>\n flux<T>((observer) => {\n for (const v of values) observer.next(v);\n\n return source.subscribe(observer);\n });\n}\n\n/**\n * Collect source emissions into fixed-size arrays, emitting each batch when full.\n * A partial batch at the end of the source is flushed on completion.\n *\n * @param size - Number of emissions per batch.\n * @param every - Start a new batch every `every` emissions (default: `size`, non-overlapping).\n *\n * @example\n * of(1, 2, 3, 4, 5, 6).pipe(bufferCount(2)).subscribe(console.log);\n * // [1, 2], [3, 4], [5, 6]\n */\nexport function bufferCount<T>(size: number, every?: number): Operator<T, T[]> {\n const { clamped: sizeClamped, value: safeSize } = clampPositiveInt(size);\n const { clamped: everyClamped, value: step } = clampPositiveInt(every ?? safeSize);\n\n if (sizeClamped) {\n warn(`bufferCount: size must be a finite integer >= 1, got ${size} — clamped to ${safeSize}`);\n }\n\n if (every !== undefined && everyClamped) {\n warn(`bufferCount: every must be a finite integer >= 1, got ${every} — clamped to ${step}`);\n }\n\n return (source) =>\n flux<T[]>((observer) => {\n const buffers: T[][] = [];\n let count = 0;\n\n return source.subscribe({\n complete() {\n for (const buf of buffers) {\n if (buf.length > 0) observer.next(buf);\n }\n\n observer.complete?.();\n },\n error: observer.error,\n next(v) {\n if (count % step === 0) buffers.push([]);\n\n for (const buf of buffers) buf.push(v);\n\n let i = 0;\n\n while (i < buffers.length) {\n if (buffers[i]!.length >= safeSize) {\n observer.next(buffers[i]!);\n buffers.splice(i, 1);\n } else {\n i++;\n }\n }\n\n count++;\n },\n });\n });\n}\n\n/**\n * Emit the previous and current value as a `[prev, curr]` tuple.\n * No emission occurs until the second source value arrives.\n *\n * @example\n * of(1, 2, 3).pipe(pairwise()).subscribe(console.log); // [1, 2], [2, 3]\n */\nexport function pairwise<T>(): Operator<T, [T, T]> {\n return (source) =>\n flux<[T, T]>((observer) => {\n let hasPrev = false;\n let prev: T;\n\n return source.subscribe({\n complete: observer.complete,\n error: observer.error,\n next(v) {\n if (hasPrev) observer.next([prev, v]);\n\n hasPrev = true;\n prev = v;\n },\n });\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transformation.js","names":[],"sources":["../../src/operators/transformation.ts"],"sourcesContent":["import type { Operator, Stream, Subscription } from '../types';\n\nimport { link } from '../_link';\nimport { tryCall } from '../_safe';\nimport { stream } from '../core';\n\nexport type ConcatMapOptions = {\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\nexport function mergeMap<A, B>(project: (value: A) => Stream<B>): Operator<A, B> {\n return (source) =>\n stream((sink, signal) => {\n let outerComplete = false;\n const inners = new Set<Subscription>();\n\n const finish = (): void => {\n if (outerComplete && inners.size === 0) 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 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 finish();\n },\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n\n if (!innerRef.current.closed) inners.add(innerRef.current);\n }, sink.error);\n },\n },\n signal,\n );\n\n return () => {\n outer.unsubscribe();\n for (const inner of inners) inner.unsubscribe();\n };\n });\n}\n\nexport function concatMap<A, B>(project: (value: A) => Stream<B>, options: ConcatMapOptions): Operator<A, B> {\n if (!Number.isInteger(options.capacity) || options.capacity < 1) {\n throw new RangeError('concatMap capacity must be a positive integer');\n }\n\n return (source) =>\n stream((sink, signal) => {\n const queue: A[] = [];\n let outerComplete = false;\n let inner: Subscription | undefined;\n const outerRef: { current?: Subscription } = {};\n\n const next = (): void => {\n if (inner || queue.length === 0) {\n if (outerComplete && !inner && queue.length === 0) sink.complete();\n\n return;\n }\n\n const value = queue.shift()!;\n\n tryCall(() => {\n const subscription = link(\n project(value),\n {\n complete() {\n inner = undefined;\n next();\n },\n error: sink.error,\n next: sink.next,\n },\n signal,\n );\n\n inner = subscription.closed ? undefined : subscription;\n\n if (!inner) next();\n }, sink.error);\n };\n\n outerRef.current = link(\n source,\n {\n complete() {\n outerComplete = true;\n next();\n },\n error: sink.error,\n next(value) {\n if (queue.length === options.capacity) {\n outerRef.current?.unsubscribe();\n sink.error(new RangeError('concatMap buffer capacity exceeded'));\n\n return;\n }\n\n queue.push(value);\n next();\n },\n },\n signal,\n );\n\n return () => {\n outerRef.current?.unsubscribe();\n inner?.unsubscribe();\n queue.length = 0;\n };\n });\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("../
|
|
1
|
+
const e=require("../core.cjs"),t=require("../_link.cjs"),n=require("../_safe.cjs"),r=require("../_scheduler.cjs");function i(){return new DOMException(`Stream consumption aborted`,`AbortError`)}function a(i){if(!Number.isInteger(i.attempts)||i.attempts<0)throw RangeError(`retry attempts must be a non-negative integer`);return a=>e.stream((e,o)=>{let s=0,c,l,u=()=>{if(o.aborted)return;let d=t.link(a,{complete:e.complete,error(t){if(s===i.attempts){e.error(t);return}let a=s++,c;if(n.tryCall(()=>{c=typeof i.delay==`function`?i.delay(a):i.delay},e.error),!o.aborted){if(c!==void 0&&(!Number.isFinite(c)||c<0)){e.error(RangeError(`retry delay must be a finite number greater than or equal to zero`));return}c===void 0||c===0?queueMicrotask(u):l=r.defaultScheduler.delay(u,c)}},next:e.next},o);d.closed||(c=d)};return u(),()=>{l?.(),c?.unsubscribe()}})}function o(e,n){return new Promise((r,a)=>{let o=new AbortController,s=()=>{o.abort(),a(i())};if(n?.signal?.aborted){s();return}n?.signal?.addEventListener(`abort`,s,{once:!0}),t.link(e,{error(e){n?.signal?.removeEventListener(`abort`,s),a(e)},next(e){n?.signal?.removeEventListener(`abort`,s),o.abort(),r(e)}},o.signal)})}function s(e,n){return new Promise((r,a)=>{let o=()=>a(i()),s;if(n?.signal?.aborted){o();return}n?.signal?.addEventListener(`abort`,o,{once:!0}),t.link(e,{complete(){n?.signal?.removeEventListener(`abort`,o),r(s)},error(e){n?.signal?.removeEventListener(`abort`,o),a(e)},next(e){s=e}},n?.signal??new AbortController().signal)})}function c(e,n){if(!Number.isInteger(n.maxItems)||n.maxItems<0)throw RangeError(`toArray maxItems must be a non-negative integer`);return new Promise((r,a)=>{let o=new AbortController,s=[],c=()=>{o.abort(),a(i())};if(n.signal?.aborted){c();return}n.signal?.addEventListener(`abort`,c,{once:!0}),t.link(e,{complete(){n.signal?.removeEventListener(`abort`,c),r(s)},error(e){n.signal?.removeEventListener(`abort`,c),a(e)},next(e){if(s.length===n.maxItems){n.signal?.removeEventListener(`abort`,c),o.abort(),a(RangeError(`toArray maxItems exceeded`));return}s.push(e)}},o.signal)})}exports.first=o,exports.last=s,exports.retry=a,exports.toArray=c;
|
|
2
2
|
//# sourceMappingURL=utility.cjs.map
|