UNPKG

@bemedev/rx-add-ons

Version:

A collection of RxJS operators and utilities to enhance reactive programming capabilities.

1 lines 2.81 kB
{"version":3,"file":"pausable.cjs","sources":["../src/pausable.ts"],"sourcesContent":["import { Subject } from 'rxjs/internal/Subject';\nimport { EMPTY } from 'rxjs/internal/observable/empty';\nimport { scan } from 'rxjs/internal/operators/scan';\nimport { startWith } from 'rxjs/internal/operators/startWith';\nimport { switchMap } from 'rxjs/internal/operators/switchMap';\nimport { Observable, type Observer } from 'rxjs';\n\ntype SubArgs<T> = Partial<Observer<T>> | ((value: T) => void);\n\nexport const createPausable = <T>(\n source$: Observable<T>,\n observer?: SubArgs<T>,\n) => {\n // Control Subject for start, stop, pause, and resume\n const control$ = new Subject<'start' | 'stop' | 'pause' | 'resume'>();\n\n // State management for the observable\n const controlled$ = control$.pipe(\n startWith('stop'), // Start in \"stopped\" state\n scan((state, action) => {\n if (action === 'start' && state !== 'running') return 'running';\n if (action === 'stop') return 'stopped';\n if (action === 'pause' && state === 'running') return 'paused';\n if (action === 'resume' && state === 'paused') return 'running';\n return state; // Ignore invalid transitions\n }, 'stopped'),\n switchMap(state => {\n if (state === 'running') return source$; // Emit values when running\n return EMPTY; // Emit nothing when paused or stopped\n }),\n );\n\n // Subscribe to the controlled Observable\n controlled$.subscribe(observer);\n\n return {\n start: () => control$.next('start'),\n stop: () => control$.next('stop'),\n pause: () => control$.next('pause'),\n resume: () => control$.next('resume'),\n command: (action: 'start' | 'stop' | 'pause' | 'resume') =>\n control$.next(action),\n };\n};\n"],"names":["Subject","startWith","scan","switchMap","EMPTY"],"mappings":";;;;;;;;MASa,cAAc,GAAG,CAC5B,OAAsB,EACtB,QAAqB,KACnB;;AAEF,IAAA,MAAM,QAAQ,GAAG,IAAIA,eAAO,EAAyC;;IAGrE,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAC/BC,mBAAS,CAAC,MAAM,CAAC;AACjB,IAAAC,SAAI,CAAC,CAAC,KAAK,EAAE,MAAM,KAAI;AACrB,QAAA,IAAI,MAAM,KAAK,OAAO,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,SAAS;QAC/D,IAAI,MAAM,KAAK,MAAM;AAAE,YAAA,OAAO,SAAS;AACvC,QAAA,IAAI,MAAM,KAAK,OAAO,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,QAAQ;AAC9D,QAAA,IAAI,MAAM,KAAK,QAAQ,IAAI,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,SAAS;QAC/D,OAAO,KAAK,CAAC;IACf,CAAC,EAAE,SAAS,CAAC,EACbC,mBAAS,CAAC,KAAK,IAAG;QAChB,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC;QACxC,OAAOC,WAAK,CAAC;IACf,CAAC,CAAC,CACH;;AAGD,IAAA,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC;IAE/B,OAAO;QACL,KAAK,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QACnC,IAAI,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QACjC,KAAK,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QACnC,MAAM,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;QACrC,OAAO,EAAE,CAAC,MAA6C,KACrD,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;KACxB;AACH;;;;"}