evg_observable 1.0.7 → 1.0.11

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 CHANGED
@@ -1 +1,145 @@
1
- light-observable-ts
1
+ <h1 align=center style="color: saddlebrown">
2
+ EVG Observable
3
+ </h1>
4
+ <p align=center>
5
+ EVG Observable - is a light library for simple use.
6
+ </p>
7
+
8
+ ## What is EVG Observable?
9
+
10
+ EVG Observable - is a small library for serving asynchronous events.
11
+
12
+ ## Installation
13
+
14
+ ### Node.js
15
+
16
+ `EVG Observable` is available on [npm](http://npmjs.org). To install it, type:
17
+
18
+ $ npm install evg_observable
19
+
20
+ # Usage
21
+ (tsconfig.json {"strict": false})
22
+
23
+ ## Observable simple usage
24
+
25
+ ```ts
26
+ import {Observable} from "evg_observable/src/outLib/Observables/Observable";
27
+
28
+ const observable$ = new Observable('Some typed data (not only string)');
29
+ const listener1 = (value: string) => console.log('listener1:',value);
30
+ const listener2 = (value: string) => console.log('listener2:',value);
31
+ const subscriber1 = observable$.subscribe(listener1);
32
+ const subscriber2 = observable$.subscribe(listener2);
33
+
34
+ console.log(observable$.getValue());
35
+ // Print to console - Some typed data (not only string)
36
+
37
+ observable$.next('Next typed data')
38
+ // Print to console - listener1: Next typed data
39
+ // Print to console - listener2: Next typed data
40
+
41
+ // if subscribers are not needed
42
+ subscriber1.unsubscribe();
43
+ subscriber2.unsubscribe();
44
+
45
+ // if a observable$ is not needed
46
+ observable$.destroy(); // all subscribers have automatically unsubscribed
47
+ ```
48
+
49
+ ## Observable pipe usage
50
+ ### pipe().setOnce()
51
+
52
+ Observable will send a value to the subscriber only once, and the subscriber will unsubscribe.
53
+
54
+ ```ts
55
+ import {Observable} from "evg_observable/src/outLib/Observables/Observable";
56
+
57
+ const observable$ = new Observable('Some typed data (not only string)');
58
+ const listener1 = (value: string) => console.log('listener1:',value);
59
+ const listener2 = (value: string) => console.log('listener2:',value);
60
+
61
+ const subscriber1 = observable$
62
+ .pipe()
63
+ .setOnce()
64
+ .subscribe(listener1);
65
+ const subscriber2 = observable$.subscribe(listener2);
66
+
67
+ console.log(observable$.getValue());
68
+ // Print to console - Some typed data (not only string)
69
+
70
+ observable$.next('Next1 typed data')
71
+ // Print to console - listener1: Next1 typed data
72
+ // Print to console - listener2: Next1 typed data
73
+
74
+ observable$.next('Next2 typed data')
75
+ // Print to console - listener2: Next2 typed data
76
+
77
+ // subscriber1 is automatically unsubscribed after first usage
78
+ ```
79
+ ### pipe().unsubscribeByNegative(condition)
80
+
81
+ Observable will send a value to the subscriber as long as the condition is positive, on the first negative result, the subscriber will unsubscribe.
82
+ ```ts
83
+ import {Observable} from "evg_observable/src/outLib/Observables/Observable";
84
+
85
+ const observable$ = new Observable('Some typed data (not only string)');
86
+ const listener1 = (value: string) => console.log('listener1:', value);
87
+ const listener2 = (value: string) => console.log('listener2:', value);
88
+ let isPositive = true;
89
+
90
+ const subscriber1 = observable$
91
+ .pipe()
92
+ .unsubscribeByNegative(() => isPositive)
93
+ .subscribe(listener1);
94
+ const subscriber2 = observable$.subscribe(listener2);
95
+
96
+ console.log(observable$.getValue());
97
+ // Print to console - Some typed data (not only string)
98
+
99
+ observable$.next('Next1 typed data')
100
+ // Print to console - listener1: Next1 typed data
101
+ // Print to console - listener2: Next1 typed data
102
+
103
+ observable$.next('Next2 typed data')
104
+ // Print to console - listener1: Next2 typed data
105
+ // Print to console - listener2: Next2 typed data
106
+
107
+ isPositive = false;
108
+ observable$.next('Next3 typed data')
109
+ // Print to console - listener2: Next3 typed data
110
+
111
+ // subscriber1 is automatically unsubscribed when negative condition
112
+ ```
113
+ ### pipe().unsubscribeByPositive(condition)
114
+ Observable will send a value to the subscriber as long as the condition is negative, on the first positive result, the subscriber will unsubscribe.
115
+ ```ts
116
+ import {Observable} from "evg_observable/src/outLib/Observables/Observable";
117
+
118
+ const observable$ = new Observable('Some typed data (not only string)');
119
+ const listener1 = (value: string) => console.log('listener1:', value);
120
+ const listener2 = (value: string) => console.log('listener2:', value);
121
+ let isPositive = false;
122
+
123
+ const subscriber1 = observable$
124
+ .pipe()
125
+ .unsubscribeByPositive(() => isPositive)
126
+ .subscribe(listener1);
127
+ const subscriber2 = observable$.subscribe(listener2);
128
+
129
+ console.log(observable$.getValue());
130
+ // Print to console - Some typed data (not only string)
131
+
132
+ observable$.next('Next1 typed data')
133
+ // Print to console - listener1: Next1 typed data
134
+ // Print to console - listener2: Next1 typed data
135
+
136
+ observable$.next('Next2 typed data')
137
+ // Print to console - listener1: Next2 typed data
138
+ // Print to console - listener2: Next2 typed data
139
+
140
+ isPositive = true;
141
+ observable$.next('Next3 typed data')
142
+ // Print to console - listener2: Next3 typed data
143
+
144
+ // subscriber1 is automatically unsubscribed when positive condition
145
+ ```
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "evg_observable",
3
- "version": "1.0.7",
4
- "description": "light observable for ts",
3
+ "version": "1.0.11",
4
+ "description": "Light observable",
5
5
  "main": "index.js",
6
6
  "directories": {
7
7
  "test": "test"
@@ -28,5 +28,15 @@
28
28
  "mocha": "^9.1.1",
29
29
  "nyc": "^15.1.0",
30
30
  "ts-node": "^10.2.1"
31
- }
31
+ },
32
+ "keywords": [
33
+ "Observable",
34
+ "Light observable",
35
+ "Type script",
36
+ "TypeScript",
37
+ "TS",
38
+ "Java script",
39
+ "JavaScript",
40
+ "JS"
41
+ ]
32
42
  }
@@ -30,11 +30,14 @@ export declare class Observable<T> implements IObserver<T> {
30
30
  protected listeners: ISubscribeObject<T>[];
31
31
  private _isEnable;
32
32
  protected _isDestroyed: boolean;
33
+ private isNextProcess;
34
+ private listenersForUnsubscribe;
33
35
  constructor(value: T);
34
36
  disable(): void;
35
37
  enable(): void;
36
38
  get isEnable(): boolean;
37
39
  next(value: T): void;
40
+ private handleListenersForUnsubscribe;
38
41
  unSubscribe(listener: ISubscriptionLike<T>): void;
39
42
  destroy(): void;
40
43
  unsubscribeAll(): void;
@@ -117,6 +117,8 @@ var Observable = /** @class */ (function () {
117
117
  this.listeners = [];
118
118
  this._isEnable = true;
119
119
  this._isDestroyed = false;
120
+ this.isNextProcess = false;
121
+ this.listenersForUnsubscribe = [];
120
122
  }
121
123
  Observable.prototype.disable = function () {
122
124
  this._isEnable = false;
@@ -137,12 +139,26 @@ var Observable = /** @class */ (function () {
137
139
  if (!this._isEnable)
138
140
  return;
139
141
  this.value = value;
142
+ this.isNextProcess = true;
140
143
  for (var i = 0; i < this.listeners.length; i++)
141
144
  this.listeners[i].send(value);
145
+ this.isNextProcess = false;
146
+ this.handleListenersForUnsubscribe();
147
+ };
148
+ Observable.prototype.handleListenersForUnsubscribe = function () {
149
+ for (var _i = 0, _a = this.listenersForUnsubscribe; _i < _a.length; _i++) {
150
+ var listener = _a[_i];
151
+ this.unSubscribe(listener);
152
+ }
153
+ this.listenersForUnsubscribe.length = 0;
142
154
  };
143
155
  Observable.prototype.unSubscribe = function (listener) {
144
156
  if (this._isDestroyed)
145
157
  return;
158
+ if (this.isNextProcess) {
159
+ this.listenersForUnsubscribe.push(listener);
160
+ return;
161
+ }
146
162
  this.listeners &&
147
163
  !(0, FunctionLibs_1.deleteFromArray)(this.listeners, listener);
148
164
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Observable.js","sourceRoot":"","sources":["../../Libraries/Observables/Observable.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Observable.js","sourceRoot":"","sources":["../../Libraries/Observables/Observable.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- export function deleteFromArray<T>(arr: T[], component: T): boolean {
2
- const index = arr.indexOf(component);
3
- if (index === -1) return false;
4
- const length = arr.length - 1;
5
- for (let i = index; i < length;) arr[i++] = arr[i];
6
- arr.length--;
7
- return true;
8
- }
9
-
@@ -1,44 +0,0 @@
1
- import {ICollector, ISubscriptionLike} from "./Types";
2
- import {deleteFromArray} from "../FunctionLibs";
3
-
4
- export class Collector implements ICollector {
5
- private list: ISubscriptionLike<any>[] = [];
6
- private _isDestroyed = false;
7
-
8
- collect(...subscriptionLikeList: ISubscriptionLike<any>[]): void {
9
- if(this._isDestroyed) return null;
10
- for (let i = 0; i < subscriptionLikeList.length; i++) {
11
- this.list.push(subscriptionLikeList[i]);
12
- }
13
- }
14
-
15
- unsubscribe(subscriptionLike: ISubscriptionLike<any>): void {
16
- if(this._isDestroyed) return null;
17
- subscriptionLike && subscriptionLike.unsubscribe();
18
- deleteFromArray(this.list, subscriptionLike);
19
- }
20
-
21
- unsubscribeAll(): void {
22
- if(this._isDestroyed) return null;
23
- const length = this.list.length;
24
- for (let i = 0; i < length; i++) {
25
- this.unsubscribe(this.list.pop());
26
- }
27
- }
28
-
29
- size(): number {
30
- if(this._isDestroyed) return 0;
31
- return this.list.length;
32
- }
33
-
34
- destroy(): void {
35
- this.unsubscribeAll();
36
- this.list.length = 0;
37
- this.list = <any>0;
38
- this._isDestroyed = true;
39
- }
40
-
41
- get isDestroyed(): boolean {
42
- return this._isDestroyed;
43
- }
44
- }
@@ -1,206 +0,0 @@
1
- import {
2
- ICallback,
3
- IListener,
4
- IObserver,
5
- IOnceMarker,
6
- ISetup,
7
- ISubscribe,
8
- ISubscribeObject,
9
- ISubscriptionLike
10
- } from "./Types";
11
- import {deleteFromArray} from "../FunctionLibs";
12
-
13
- export class SubscribeObject<T> implements ISubscribeObject<T> {
14
- protected observable: IObserver<T>;
15
- protected listener: IListener<T>;
16
- private isListenPaused = false;
17
- private once: IOnceMarker = {isOnce: false, isFinished: false};
18
- private unsubscribeByNegativeCondition: ICallback<any> = null;
19
- private unsubscribeByPositiveCondition: ICallback<any> = null;
20
- private emitByNegativeCondition: ICallback<any> = null;
21
- private emitByPositiveCondition: ICallback<any> = null;
22
- private emitMatchCondition: ICallback<any> = null;
23
- protected _order = 0;
24
-
25
- constructor(observable?: IObserver<T>, listener?: IListener<T>) {
26
- this.observable = observable;
27
- this.listener = listener;
28
- }
29
-
30
- subscribe(listener: IListener<T>): ISubscriptionLike<T> {
31
- this.listener = listener;
32
- return this;
33
- }
34
-
35
- public unsubscribe(): void {
36
- if (!!this.observable) {
37
- this.observable.unSubscribe(this);
38
- this.observable = <any>0;
39
- this.listener = <any>0;
40
- }
41
- }
42
-
43
- send(value: T): void {
44
- switch (true) {
45
- case !this.observable:
46
- case !this.listener:
47
- this.unsubscribe();
48
- return;
49
- case this.isListenPaused:
50
- return;
51
- case this.once.isOnce:
52
- this.once.isFinished = true;
53
- this.listener(value);
54
- this.unsubscribe();
55
- break;
56
- case !!this.unsubscribeByNegativeCondition:
57
- if (!this.unsubscribeByNegativeCondition()) {
58
- this.unsubscribeByNegativeCondition = null;
59
- this.unsubscribe();
60
- return;
61
- }
62
- this.listener(value);
63
- break;
64
- case !!this.unsubscribeByPositiveCondition:
65
- if (this.unsubscribeByPositiveCondition()) {
66
- this.unsubscribeByPositiveCondition = null;
67
- this.unsubscribe();
68
- return;
69
- }
70
- this.listener(value);
71
- break;
72
- case !!this.emitByNegativeCondition:
73
- !this.emitByNegativeCondition() && this.listener(value);
74
- break;
75
- case !!this.emitByPositiveCondition:
76
- this.emitByPositiveCondition() && this.listener(value);
77
- break;
78
- case !!this.emitMatchCondition:
79
- (this.emitMatchCondition() === value) && this.listener(value);
80
- break;
81
- default:
82
- this.listener(value);
83
- }
84
- }
85
-
86
- setOnce(): ISubscribe<T> {
87
- this.once.isOnce = true;
88
- return this;
89
- }
90
-
91
- unsubscribeByNegative(condition: ICallback<any>): ISubscribe<T> {
92
- this.unsubscribeByNegativeCondition = condition;
93
- return this
94
- }
95
-
96
- unsubscribeByPositive(condition: ICallback<any>): ISubscribe<T> {
97
- this.unsubscribeByPositiveCondition = condition;
98
- return this;
99
- }
100
-
101
- emitByNegative(condition: ICallback<any>): ISubscribe<T> {
102
- this.emitByNegativeCondition = condition;
103
- return this;
104
- }
105
-
106
- emitByPositive(condition: ICallback<any>): ISubscribe<T> {
107
- this.emitByPositiveCondition = condition;
108
- return this;
109
- }
110
-
111
- emitMatch(condition: ICallback<any>): ISubscribe<T> {
112
- this.emitMatchCondition = condition;
113
- return this;
114
- }
115
-
116
- resume(): void {
117
- this.isListenPaused = false;
118
- }
119
-
120
- pause(): void {
121
- this.isListenPaused = true;
122
- }
123
-
124
- get order(): number {
125
- return this._order;
126
- }
127
-
128
- set order(value: number) {
129
- this._order = value;
130
- }
131
- }
132
-
133
- export class Observable<T> implements IObserver<T> {
134
- protected listeners: ISubscribeObject<T>[] = [];
135
- private _isEnable: boolean = true;
136
- protected _isDestroyed = false;
137
-
138
- constructor(private value: T) {
139
- }
140
-
141
- disable(): void {
142
- this._isEnable = false;
143
- }
144
-
145
- enable(): void {
146
- this._isEnable = true;
147
- }
148
-
149
- get isEnable(): boolean {
150
- return this._isEnable;
151
- }
152
-
153
- public next(value: T): void {
154
- if (this._isDestroyed) return;
155
- if (!this._isEnable) return;
156
- this.value = value;
157
- for (let i = 0; i < this.listeners.length; i++) this.listeners[i].send(value);
158
- }
159
-
160
- public unSubscribe(listener: ISubscriptionLike<T>): void {
161
- if (this._isDestroyed) return;
162
- this.listeners &&
163
- !deleteFromArray(this.listeners, listener);
164
- }
165
-
166
- public destroy(): void {
167
- this.value = <any>0;
168
- this.unsubscribeAll();
169
- this.listeners = <any>0;
170
- this._isDestroyed = true;
171
- }
172
-
173
- public unsubscribeAll(): void {
174
- if (this._isDestroyed) return;
175
- const length = this.listeners.length;
176
- for (let i = 0; i < length; i++) (this.listeners.pop()).unsubscribe();
177
- }
178
-
179
- public getValue(): T {
180
- if (this._isDestroyed) return undefined;
181
- return this.value;
182
- }
183
-
184
- public size(): number {
185
- if (this._isDestroyed) return 0;
186
- return this.listeners.length;
187
- }
188
-
189
- public subscribe(listener: IListener<T>): ISubscriptionLike<T> {
190
- if (this._isDestroyed) return undefined;
191
- const subscribeObject = new SubscribeObject(this, listener);
192
- this.listeners.push(subscribeObject);
193
- return subscribeObject;
194
- }
195
-
196
- pipe(): ISetup<T> {
197
- if (this._isDestroyed) return undefined;
198
- const subscribeObject = new SubscribeObject(this);
199
- this.listeners.push(subscribeObject);
200
- return subscribeObject;
201
- }
202
-
203
- get isDestroyed(): boolean {
204
- return this._isDestroyed;
205
- }
206
- }
@@ -1,86 +0,0 @@
1
- import {Observable, SubscribeObject} from "./Observable";
2
- import {
3
- ICallback,
4
- IListener,
5
- IObserver,
6
- IOrdered,
7
- IOrderedObservable,
8
- IOrderedSetup,
9
- IOrderedSubscribe,
10
- IOrderedSubscriptionLike
11
- } from "./Types";
12
-
13
- export class OrderedSubscribeObject<T> extends SubscribeObject<T> {
14
- constructor(observable: OrderedObservable<T> | IOrdered<T>, listener?: IListener<T>) {
15
- super(<IObserver<T>>observable, listener);
16
- }
17
-
18
- get order(): number {
19
- return this._order;
20
- }
21
-
22
- set order(value: number) {
23
- if (!this.observable ||
24
- (this.observable && this.observable.isDestroyed)) {
25
- this._order = undefined;
26
- return
27
- }
28
- this._order = value;
29
- (<IOrderedObservable><any>this.observable).sortByOrder();
30
- }
31
-
32
- subscribe(listener: IListener<T>): IOrderedSubscriptionLike<T> {
33
- this.listener = listener;
34
- return this;
35
- }
36
-
37
- setOnce(): IOrderedSubscribe<T> {
38
- return <any>super.setOnce();
39
- }
40
-
41
- unsubscribeByNegative(condition: ICallback<any>): IOrderedSubscribe<T> {
42
- return <any>super.unsubscribeByNegative(condition);
43
- }
44
-
45
- unsubscribeByPositive(condition: ICallback<any>): IOrderedSubscribe<T> {
46
- return <any>super.unsubscribeByPositive(condition);
47
- }
48
-
49
- emitByNegative(condition: ICallback<any>): IOrderedSubscribe<T> {
50
- return <any>super.emitByNegative(condition);
51
- }
52
-
53
- emitByPositive(condition: ICallback<any>): IOrderedSubscribe<T> {
54
- return <any>super.emitByPositive(condition);
55
- }
56
-
57
- emitMatch(condition: ICallback<any>): IOrderedSubscribe<T> {
58
- return <any>super.emitMatch(condition);
59
- }
60
- }
61
-
62
- export class OrderedObservable<T>
63
- extends Observable<T> implements IOrdered<T> {
64
- sortByOrder(): void {
65
- if (this._isDestroyed) return undefined;
66
- this.listeners.sort((a, b) => {
67
- if (a.order > b.order) return 1;
68
- if (a.order < b.order) return -1;
69
- return 0;
70
- });
71
- }
72
-
73
- subscribe(listener: IListener<T>): IOrderedSubscriptionLike<T> {
74
- if (this._isDestroyed) return undefined;
75
- const subscribeObject = new OrderedSubscribeObject(this, listener);
76
- this.listeners.push(subscribeObject);
77
- return subscribeObject;
78
- }
79
-
80
- pipe(): IOrderedSetup<T> {
81
- if (this._isDestroyed) return undefined;
82
- const subscribeObject = new OrderedSubscribeObject(this);
83
- this.listeners.push(subscribeObject);
84
- return subscribeObject;
85
- }
86
- }