DO NOT USE IN A PRODUCTION ENVIRONMENT. THIS CODE IS FOR MY OWN EDUCATION.
My own TypeScript implementation of the observable pattern following ReactiveX.
import { range } from './reactive/sources';
import { filter, map } from './reactive/operators';
// Caluclate the square of all odd numbers from 1-10 inclusively
range(1, 11).pipe(
filter(x => (x & 1) === 1),
map(x => x * x),
).subscribe(console.log);
/* Outputs:
1
9
25
49
81
*/yarn ts-node main.tsCurrently implemented features
- Observable
- Observer
- Subscriber
- Subscription
- Sink (SubSink)
- Subject / Publish Subject
- Behavior Subject
- Replay Subject
- Async Subject
- Sync Scheduler (
fn();) - Async Scheduler (
setTimeout(fn, delay);) - Interval Scheduler (
setInterval(fn, delay);) - Asap Scheduler (
setTimeout(fn, 0);)
- Defer
- Empty
- Never
- Error (Throw)
- From
- Interval
- Just
- Range
- Repeat
- Start
- Timer
- Combine Latest
- Merge
- Amb
- Concat
- Buffer
- Flat Map
- Group By
- Map
- Scan
- Window
- Debounce
- Distinct
- Element At
- Filter
- First
- Ignore Elements
- Last
- Sample
- Skip
- Skip Last
- Take
- Take Last
- And (TODO)
- Then (TODO)
- When (TODO)
- With Latest From (TODO)
- Join (TODO)
- Merge
- Start With
- Switch (TODO)
- Zip (TODO)
- Catch Error (Catch)
- Retry
- Delay
- Tap
- Materialize
- Dematerialize
- Observe On (TODO)
- Serialize (TODO)
- Subscribe On
- Time Interval
- Timeout
- Timestamp
- Using
- All
- Amb With (Amb)
- Contains
- Default If Empty
- Sequence Equal (TODO)
- Skip Until
- Skip While
- Take Until
- Take While
- Average
- Concat With (Concat)
- Count
- Max
- Min
- Reduce
- Sum
TODO
- Connect (TODO)
- Publish (TODO)
- Ref Count (TODO)
- Replay (TODO)
- To Array
- To Set