@keiii/k-stream
Advanced tools
Comparing version 0.0.16 to 0.0.17
export * from './core'; | ||
export * from './factories'; | ||
export * from './behaviourSubject'; | ||
export * from './subject'; | ||
export * from './emitter'; | ||
export * from './transformers'; | ||
export * from './ts-option'; | ||
export * from './ts-result'; |
export * from './core'; | ||
export * from './factories'; | ||
export * from './behaviourSubject'; | ||
export * from './subject'; | ||
export * from './emitter'; | ||
export * from './transformers'; | ||
@@ -6,0 +6,0 @@ export * from './ts-option'; |
import { CompleteFn, Stream } from './core'; | ||
export declare type Subject<T> = Stream<T> & { | ||
value: T; | ||
readonly next: (value: T) => void; | ||
readonly complete: CompleteFn; | ||
}; | ||
export declare const ksSubject: <T>(initValue: T, behaviour?: import("./core").KsBehaviour) => Subject<T>; | ||
export declare const ksSubject: <T>(behaviour?: import("./core").KsBehaviour) => Subject<T>; |
@@ -1,16 +0,23 @@ | ||
import { ksCreateStream, ksShareReplay, noop, } from './core'; | ||
export const ksSubject = (initValue, behaviour = ksShareReplay) => { | ||
const state = { isCompleted: false, current: initValue }; | ||
import { ksCreateStream, noop, ksShare, } from './core'; | ||
export const ksSubject = (behaviour = ksShare) => { | ||
let isCompleted = false; | ||
let subjectObserver = null; | ||
const stream = ksCreateStream(behaviour, observer => { | ||
subjectObserver = observer; | ||
subjectObserver.next(state.current); | ||
return { unsubscribe: () => (subjectObserver = null) }; | ||
const next = (value) => { | ||
if (!isCompleted) { | ||
subjectObserver === null || subjectObserver === void 0 ? void 0 : subjectObserver.next(value); | ||
} | ||
}; | ||
const complete = () => { | ||
isCompleted = true; | ||
subjectObserver === null || subjectObserver === void 0 ? void 0 : subjectObserver.complete(); | ||
}; | ||
const stream = ksCreateStream(behaviour, o => { | ||
subjectObserver = o; | ||
return { unsubscribe: noop }; | ||
}); | ||
return { | ||
subscribe: observer => { | ||
var _a, _b; | ||
if (state.isCompleted) { | ||
(_a = observer.next) === null || _a === void 0 ? void 0 : _a.call(observer, state.current); | ||
(_b = observer.complete) === null || _b === void 0 ? void 0 : _b.call(observer); | ||
var _a; | ||
if (isCompleted) { | ||
(_a = observer.complete) === null || _a === void 0 ? void 0 : _a.call(observer); | ||
return { unsubscribe: noop }; | ||
@@ -24,24 +31,6 @@ } | ||
behaviour: stream.behaviour, | ||
complete: () => { | ||
state.isCompleted = true; | ||
if (subjectObserver !== null) { | ||
subjectObserver.complete(); | ||
} | ||
}, | ||
set value(value) { | ||
if (state.isCompleted) { | ||
console.warn('Logic error: Ignore call next on completed stream.'); | ||
} | ||
else { | ||
state.current = value; | ||
if (subjectObserver !== null) { | ||
subjectObserver.next(value); | ||
} | ||
} | ||
}, | ||
get value() { | ||
return state.current; | ||
}, | ||
next, | ||
complete, | ||
}; | ||
}; | ||
//# sourceMappingURL=subject.js.map |
{ | ||
"name": "@keiii/k-stream", | ||
"version": "0.0.16", | ||
"version": "0.0.17", | ||
"description": "K-Stream is a functional reactive stream library for TypeScript", | ||
@@ -5,0 +5,0 @@ "main": "./dist/index.js", |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
60760
1016