@reactive-js/ix
Advanced tools
Comparing version 0.0.11 to 0.0.12
import { MulticastObservableLike, MulticastObservableResourceLike } from "@reactive-js/rx"; | ||
import { SchedulerLike } from "@reactive-js/scheduler"; | ||
import { DisposableLike } from "@reactive-js/disposable"; | ||
export interface AsyncIteratorLike<TReq, T> extends MulticastObservableLike<T> { | ||
@@ -17,2 +18,3 @@ dispatch(request: TReq): void; | ||
} | ||
export declare const createAsyncIteratorResource: <TReq, T>(dispatch: (req: TReq) => void, observable: MulticastObservableLike<T>, disposable: DisposableLike) => AsyncIteratorResourceLike<TReq, T>; | ||
export declare const createEventEmitter: <T>() => EventEmitterResourceLike<T>; | ||
@@ -19,0 +21,0 @@ export declare const createReducerStore: <TAction, T>(initialState: T, reducer: (state: T, action: TAction) => T, scheduler: SchedulerLike, equals?: ((a: T, b: T) => boolean) | undefined) => AsyncIteratorResourceLike<TAction, T>; |
@@ -7,8 +7,9 @@ "use strict"; | ||
class AsyncIteratorResourceImpl { | ||
constructor(subject, observable) { | ||
this.subject = subject; | ||
constructor(dispatch, observable, disposable) { | ||
this.dispatch = dispatch; | ||
this.observable = observable; | ||
this.disposable = disposable; | ||
} | ||
get isDisposed() { | ||
return this.subject.isDisposed; | ||
return this.disposable.isDisposed; | ||
} | ||
@@ -19,12 +20,11 @@ get subscriberCount() { | ||
add(disposable, ...disposables) { | ||
this.subject.add(disposable, ...disposables); | ||
this.disposable.add(disposable, ...disposables); | ||
return this; | ||
} | ||
dispatch(req) { | ||
this.subject.next(req); | ||
} | ||
dispose() { | ||
this.subject.dispose(); | ||
this.disposable.dispose(); | ||
} | ||
remove(disposable, ...disposables) { | ||
this.subject.remove(disposable, ...disposables); | ||
this.disposable.remove(disposable, ...disposables); | ||
return this; | ||
} | ||
@@ -35,13 +35,12 @@ subscribe(subscriber) { | ||
} | ||
const createAsyncIteratorResource = (operator) => { | ||
const subject = rx_1.createSubject(); | ||
const observable = operator(subject); | ||
return new AsyncIteratorResourceImpl(subject, observable); | ||
exports.createAsyncIteratorResource = (dispatch, observable, disposable) => new AsyncIteratorResourceImpl(dispatch, observable, disposable); | ||
exports.createEventEmitter = () => { | ||
const dispatcher = rx_1.createSubject(); | ||
return exports.createAsyncIteratorResource(dispatcher.next.bind(dispatcher), dispatcher, dispatcher); | ||
}; | ||
exports.createEventEmitter = () => createAsyncIteratorResource(x => x); | ||
exports.createReducerStore = (initialState, reducer, scheduler, equals) => { | ||
const operator = obs => pipe_1.pipe(obs, observable_1.scan(reducer, () => initialState), observable_1.startWith(initialState), observable_1.distinctUntilChanged(equals), observable_1.share(scheduler, 1)); | ||
const store = createAsyncIteratorResource(operator); | ||
pipe_1.pipe(store, rx_1.subscribe(scheduler), d => store.add(d)); | ||
return store; | ||
const dispatcher = rx_1.createSubject(); | ||
const observable = pipe_1.pipe(dispatcher, observable_1.scan(reducer, () => initialState), observable_1.startWith(initialState), observable_1.distinctUntilChanged(equals), observable_1.share(scheduler, 1)); | ||
const store = exports.createAsyncIteratorResource(dispatcher.next.bind(dispatcher), observable, dispatcher); | ||
return store.add(pipe_1.pipe(store, rx_1.subscribe(scheduler))); | ||
}; | ||
@@ -51,11 +50,8 @@ const stateStoreReducer = (state, action) => action(state); | ||
exports.createPersistentStateStore = (persistentStore, initialState, scheduler, equals) => { | ||
const dispatch = (req) => store.dispatch(req); | ||
const operator = obs => { | ||
const onPersistentStoreChangedStream = pipe_1.pipe(persistentStore, observable_1.onNext(v => dispatch(_ => v)), observable_1.ignoreElements()); | ||
const stateObs = pipe_1.pipe(obs, observable_1.scan((acc, next) => next(acc), () => initialState), observable_1.distinctUntilChanged(equals), observable_1.onNext(next => persistentStore.dispatch(next))); | ||
return pipe_1.pipe(observable_1.merge(onPersistentStoreChangedStream, stateObs), observable_1.share(scheduler, 1)); | ||
}; | ||
const store = createAsyncIteratorResource(operator); | ||
return store; | ||
const dispatcher = rx_1.createSubject(); | ||
const onPersistentStoreChangedStream = pipe_1.pipe(persistentStore, observable_1.onNext(v => dispatcher.next(_ => v)), observable_1.ignoreElements()); | ||
const stateObs = pipe_1.pipe(dispatcher, observable_1.scan((acc, next) => next(acc), () => initialState), observable_1.distinctUntilChanged(equals), observable_1.onNext(next => persistentStore.dispatch(next))); | ||
const observable = pipe_1.pipe(observable_1.merge(onPersistentStoreChangedStream, stateObs), observable_1.share(scheduler, 1)); | ||
return exports.createAsyncIteratorResource(dispatcher.next.bind(dispatcher), observable, dispatcher); | ||
}; | ||
//# sourceMappingURL=index.js.map |
import { MulticastObservableLike, MulticastObservableResourceLike } from "@reactive-js/rx"; | ||
import { SchedulerLike } from "@reactive-js/scheduler"; | ||
import { DisposableLike } from "@reactive-js/disposable"; | ||
export interface AsyncIteratorLike<TReq, T> extends MulticastObservableLike<T> { | ||
@@ -17,2 +18,3 @@ dispatch(request: TReq): void; | ||
} | ||
export declare const createAsyncIteratorResource: <TReq, T>(dispatch: (req: TReq) => void, observable: MulticastObservableLike<T>, disposable: DisposableLike) => AsyncIteratorResourceLike<TReq, T>; | ||
export declare const createEventEmitter: <T>() => EventEmitterResourceLike<T>; | ||
@@ -19,0 +21,0 @@ export declare const createReducerStore: <TAction, T>(initialState: T, reducer: (state: T, action: TAction) => T, scheduler: SchedulerLike, equals?: ((a: T, b: T) => boolean) | undefined) => AsyncIteratorResourceLike<TAction, T>; |
@@ -5,8 +5,9 @@ import { subscribe, createSubject, } from "@reactive-js/rx"; | ||
class AsyncIteratorResourceImpl { | ||
constructor(subject, observable) { | ||
this.subject = subject; | ||
constructor(dispatch, observable, disposable) { | ||
this.dispatch = dispatch; | ||
this.observable = observable; | ||
this.disposable = disposable; | ||
} | ||
get isDisposed() { | ||
return this.subject.isDisposed; | ||
return this.disposable.isDisposed; | ||
} | ||
@@ -17,12 +18,11 @@ get subscriberCount() { | ||
add(disposable, ...disposables) { | ||
this.subject.add(disposable, ...disposables); | ||
this.disposable.add(disposable, ...disposables); | ||
return this; | ||
} | ||
dispatch(req) { | ||
this.subject.next(req); | ||
} | ||
dispose() { | ||
this.subject.dispose(); | ||
this.disposable.dispose(); | ||
} | ||
remove(disposable, ...disposables) { | ||
this.subject.remove(disposable, ...disposables); | ||
this.disposable.remove(disposable, ...disposables); | ||
return this; | ||
} | ||
@@ -33,13 +33,12 @@ subscribe(subscriber) { | ||
} | ||
const createAsyncIteratorResource = (operator) => { | ||
const subject = createSubject(); | ||
const observable = operator(subject); | ||
return new AsyncIteratorResourceImpl(subject, observable); | ||
export const createAsyncIteratorResource = (dispatch, observable, disposable) => new AsyncIteratorResourceImpl(dispatch, observable, disposable); | ||
export const createEventEmitter = () => { | ||
const dispatcher = createSubject(); | ||
return createAsyncIteratorResource(dispatcher.next.bind(dispatcher), dispatcher, dispatcher); | ||
}; | ||
export const createEventEmitter = () => createAsyncIteratorResource(x => x); | ||
export const createReducerStore = (initialState, reducer, scheduler, equals) => { | ||
const operator = obs => pipe(obs, scan(reducer, () => initialState), startWith(initialState), distinctUntilChanged(equals), share(scheduler, 1)); | ||
const store = createAsyncIteratorResource(operator); | ||
pipe(store, subscribe(scheduler), d => store.add(d)); | ||
return store; | ||
const dispatcher = createSubject(); | ||
const observable = pipe(dispatcher, scan(reducer, () => initialState), startWith(initialState), distinctUntilChanged(equals), share(scheduler, 1)); | ||
const store = createAsyncIteratorResource(dispatcher.next.bind(dispatcher), observable, dispatcher); | ||
return store.add(pipe(store, subscribe(scheduler))); | ||
}; | ||
@@ -49,11 +48,8 @@ const stateStoreReducer = (state, action) => action(state); | ||
export const createPersistentStateStore = (persistentStore, initialState, scheduler, equals) => { | ||
const dispatch = (req) => store.dispatch(req); | ||
const operator = obs => { | ||
const onPersistentStoreChangedStream = pipe(persistentStore, onNext(v => dispatch(_ => v)), ignoreElements()); | ||
const stateObs = pipe(obs, scan((acc, next) => next(acc), () => initialState), distinctUntilChanged(equals), onNext(next => persistentStore.dispatch(next))); | ||
return pipe(merge(onPersistentStoreChangedStream, stateObs), share(scheduler, 1)); | ||
}; | ||
const store = createAsyncIteratorResource(operator); | ||
return store; | ||
const dispatcher = createSubject(); | ||
const onPersistentStoreChangedStream = pipe(persistentStore, onNext(v => dispatcher.next(_ => v)), ignoreElements()); | ||
const stateObs = pipe(dispatcher, scan((acc, next) => next(acc), () => initialState), distinctUntilChanged(equals), onNext(next => persistentStore.dispatch(next))); | ||
const observable = pipe(merge(onPersistentStoreChangedStream, stateObs), share(scheduler, 1)); | ||
return createAsyncIteratorResource(dispatcher.next.bind(dispatcher), observable, dispatcher); | ||
}; | ||
//# sourceMappingURL=index.js.map |
import { MulticastObservableLike, MulticastObservableResourceLike } from "@reactive-js/rx"; | ||
import { SchedulerLike } from "@reactive-js/scheduler"; | ||
import { DisposableLike } from "@reactive-js/disposable"; | ||
export interface AsyncIteratorLike<TReq, T> extends MulticastObservableLike<T> { | ||
@@ -17,2 +18,3 @@ dispatch(request: TReq): void; | ||
} | ||
export declare const createAsyncIteratorResource: <TReq, T>(dispatch: (req: TReq) => void, observable: MulticastObservableLike<T>, disposable: DisposableLike) => AsyncIteratorResourceLike<TReq, T>; | ||
export declare const createEventEmitter: <T>() => EventEmitterResourceLike<T>; | ||
@@ -19,0 +21,0 @@ export declare const createReducerStore: <TAction, T>(initialState: T, reducer: (state: T, action: TAction) => T, scheduler: SchedulerLike, equals?: ((a: T, b: T) => boolean) | undefined) => AsyncIteratorResourceLike<TAction, T>; |
@@ -22,2 +22,3 @@ [@reactive-js/ix](README.md) | ||
* [createAsyncIteratorResource](README.md#const-createasynciteratorresource) | ||
* [createEventEmitter](README.md#const-createeventemitter) | ||
@@ -46,2 +47,32 @@ * [createPersistentStateStore](README.md#const-createpersistentstatestore) | ||
### `Const` createAsyncIteratorResource | ||
▸ **createAsyncIteratorResource**<**TReq**, **T**>(`dispatch`: function, `observable`: MulticastObservableLike‹T›, `disposable`: DisposableLike): *[AsyncIteratorResourceLike](interfaces/asynciteratorresourcelike.md)‹TReq, T›* | ||
**Type parameters:** | ||
▪ **TReq** | ||
▪ **T** | ||
**Parameters:** | ||
▪ **dispatch**: *function* | ||
▸ (`req`: TReq): *void* | ||
**Parameters:** | ||
Name | Type | | ||
------ | ------ | | ||
`req` | TReq | | ||
▪ **observable**: *MulticastObservableLike‹T›* | ||
▪ **disposable**: *DisposableLike* | ||
**Returns:** *[AsyncIteratorResourceLike](interfaces/asynciteratorresourcelike.md)‹TReq, T›* | ||
___ | ||
### `Const` createEventEmitter | ||
@@ -48,0 +79,0 @@ |
{ | ||
"name": "@reactive-js/ix", | ||
"version": "0.0.11", | ||
"version": "0.0.12", | ||
"main": "dist/cjs/index.js", | ||
@@ -41,7 +41,7 @@ "module": "dist/esm5/index.js", | ||
"dependencies": { | ||
"@reactive-js/disposable": "^0.0.11", | ||
"@reactive-js/observable": "^0.0.11", | ||
"@reactive-js/pipe": "^0.0.11", | ||
"@reactive-js/rx": "^0.0.11", | ||
"@reactive-js/scheduler": "^0.0.11" | ||
"@reactive-js/disposable": "^0.0.12", | ||
"@reactive-js/observable": "^0.0.12", | ||
"@reactive-js/pipe": "^0.0.12", | ||
"@reactive-js/rx": "^0.0.12", | ||
"@reactive-js/scheduler": "^0.0.12" | ||
}, | ||
@@ -58,3 +58,3 @@ "scripts": { | ||
}, | ||
"gitHead": "894e4863ea037c317967555ebc27ab66167cfc59" | ||
"gitHead": "66ee9bfeeb79e01c9770dc09829bedf292674ff0" | ||
} |
134
src/index.ts
@@ -20,7 +20,7 @@ import { | ||
import { pipe, OperatorLike } from "@reactive-js/pipe"; | ||
import { pipe } from "@reactive-js/pipe"; | ||
import { SchedulerLike } from "@reactive-js/scheduler"; | ||
import { DisposableOrTeardown } from "@reactive-js/disposable"; | ||
import { DisposableOrTeardown, DisposableLike } from "@reactive-js/disposable"; | ||
@@ -59,15 +59,18 @@ /** @noInheritDoc */ | ||
implements AsyncIteratorResourceLike<TReq, T> { | ||
readonly subject: SubjectResourceLike<TReq>; | ||
readonly observable: MulticastObservableLike<T>; | ||
readonly dispatch: (req: TReq) => void; | ||
private readonly observable: MulticastObservableLike<T>; | ||
private readonly disposable: DisposableLike; | ||
constructor( | ||
subject: SubjectResourceLike<TReq>, | ||
dispatch: (req: TReq) => void, | ||
observable: MulticastObservableLike<T>, | ||
disposable: DisposableLike, | ||
) { | ||
this.subject = subject; | ||
this.dispatch = dispatch; | ||
this.observable = observable; | ||
this.disposable = disposable; | ||
} | ||
get isDisposed(): boolean { | ||
return this.subject.isDisposed; | ||
return this.disposable.isDisposed; | ||
} | ||
@@ -83,11 +86,8 @@ | ||
) { | ||
this.subject.add(disposable, ...disposables); | ||
this.disposable.add(disposable, ...disposables); | ||
return this; | ||
} | ||
dispatch(req: TReq) { | ||
this.subject.next(req); | ||
} | ||
dispose() { | ||
this.subject.dispose(); | ||
this.disposable.dispose(); | ||
} | ||
@@ -99,3 +99,4 @@ | ||
) { | ||
this.subject.remove(disposable, ...disposables); | ||
this.disposable.remove(disposable, ...disposables); | ||
return this; | ||
} | ||
@@ -108,16 +109,18 @@ | ||
const createAsyncIteratorResource = <TReq, T>( | ||
operator: OperatorLike< | ||
MulticastObservableLike<TReq>, | ||
MulticastObservableLike<T> | ||
>, | ||
) => { | ||
const subject = createSubject(); | ||
const observable = operator(subject); | ||
return new AsyncIteratorResourceImpl(subject, observable); | ||
export const createAsyncIteratorResource = <TReq, T>( | ||
dispatch: (req: TReq) => void, | ||
observable: MulticastObservableLike<T>, | ||
disposable: DisposableLike, | ||
): AsyncIteratorResourceLike<TReq, T> => | ||
new AsyncIteratorResourceImpl(dispatch, observable, disposable); | ||
export const createEventEmitter = <T>(): EventEmitterResourceLike<T> => { | ||
const dispatcher = createSubject(); | ||
return createAsyncIteratorResource( | ||
dispatcher.next.bind(dispatcher), | ||
dispatcher, | ||
dispatcher, | ||
); | ||
}; | ||
export const createEventEmitter = <T>(): EventEmitterResourceLike<T> => | ||
createAsyncIteratorResource(x => x); | ||
export const createReducerStore = <TAction, T>( | ||
@@ -129,16 +132,17 @@ initialState: T, | ||
): AsyncIteratorResourceLike<TAction, T> => { | ||
const operator: OperatorLike< | ||
MulticastObservableLike<TAction>, | ||
MulticastObservableLike<T> | ||
> = obs => | ||
pipe( | ||
obs, | ||
scan(reducer, () => initialState), | ||
startWith(initialState), | ||
distinctUntilChanged(equals), | ||
share(scheduler, 1), | ||
); | ||
const store = createAsyncIteratorResource(operator); | ||
pipe(store, subscribe(scheduler), d => store.add(d)); | ||
return store; | ||
const dispatcher = createSubject(); | ||
const observable = pipe( | ||
dispatcher, | ||
scan(reducer, () => initialState), | ||
startWith(initialState), | ||
distinctUntilChanged(equals), | ||
share(scheduler, 1), | ||
); | ||
const store = createAsyncIteratorResource( | ||
dispatcher.next.bind(dispatcher), | ||
observable, | ||
dispatcher, | ||
); | ||
return store.add(pipe(store, subscribe(scheduler))); | ||
}; | ||
@@ -161,32 +165,30 @@ | ||
): StateStoreResourceLike<T> => { | ||
const dispatch = (req: StateUpdaterLike<T>) => store.dispatch(req); | ||
const dispatcher: SubjectResourceLike<StateUpdaterLike<T>> = createSubject(); | ||
const operator: OperatorLike< | ||
MulticastObservableLike<StateUpdaterLike<T>>, | ||
MulticastObservableLike<T> | ||
> = obs => { | ||
const onPersistentStoreChangedStream = pipe( | ||
persistentStore, | ||
onNext(v => dispatch(_ => v)), | ||
ignoreElements(), | ||
); | ||
const onPersistentStoreChangedStream = pipe( | ||
persistentStore, | ||
onNext(v => dispatcher.next(_ => v)), | ||
ignoreElements(), | ||
); | ||
const stateObs = pipe( | ||
obs, | ||
scan( | ||
(acc: T, next: StateUpdaterLike<T>) => next(acc), | ||
() => initialState, | ||
), | ||
distinctUntilChanged(equals), | ||
onNext(next => persistentStore.dispatch(next)), | ||
); | ||
const stateObs = pipe( | ||
dispatcher, | ||
scan( | ||
(acc: T, next: StateUpdaterLike<T>) => next(acc), | ||
() => initialState, | ||
), | ||
distinctUntilChanged(equals), | ||
onNext(next => persistentStore.dispatch(next)), | ||
); | ||
return pipe( | ||
merge(onPersistentStoreChangedStream, stateObs), | ||
share(scheduler, 1), | ||
); | ||
}; | ||
const observable = pipe( | ||
merge(onPersistentStoreChangedStream, stateObs), | ||
share(scheduler, 1), | ||
); | ||
const store = createAsyncIteratorResource(operator); | ||
return store; | ||
return createAsyncIteratorResource( | ||
dispatcher.next.bind(dispatcher), | ||
observable, | ||
dispatcher, | ||
); | ||
}; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
516945
+ Added@reactive-js/disposable@0.0.12(transitive)
+ Added@reactive-js/observable@0.0.12(transitive)
+ Added@reactive-js/pipe@0.0.12(transitive)
+ Added@reactive-js/rx@0.0.12(transitive)
+ Added@reactive-js/scheduler@0.0.12(transitive)
+ Added@reactive-js/schedulers@0.0.12(transitive)
- Removed@reactive-js/disposable@0.0.11(transitive)
- Removed@reactive-js/observable@0.0.11(transitive)
- Removed@reactive-js/pipe@0.0.11(transitive)
- Removed@reactive-js/rx@0.0.11(transitive)
- Removed@reactive-js/scheduler@0.0.11(transitive)
- Removed@reactive-js/schedulers@0.0.11(transitive)
Updated@reactive-js/pipe@^0.0.12
Updated@reactive-js/rx@^0.0.12