evg_observable 1.1.32 → 1.2.33

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "evg_observable",
3
- "version": "1.1.32",
3
+ "version": "1.2.33",
4
4
  "description": "Light observable",
5
5
  "directories": {
6
6
  "test": "test"
@@ -16,7 +16,8 @@ class Collector {
16
16
  }
17
17
  }
18
18
  unsubscribe(subscriptionLike) {
19
- if (this._isDestroyed) return null;
19
+ if (this._isDestroyed)
20
+ return null;
20
21
  subscriptionLike && subscriptionLike.unsubscribe();
21
22
  FunctionLibs_1.deleteFromArray(this.list, subscriptionLike);
22
23
  }
@@ -1,8 +1,9 @@
1
- import { ICallback, IListener, IMarkedForUnsubscribe, IObserver, ISetup, ISubscribe, ISubscribeObject, ISubscriptionLike } from "./Types";
1
+ import { ICallback, IErrorCallback, IListener, IMarkedForUnsubscribe, IObserver, ISetup, ISubscribe, ISubscribeObject, ISubscriptionLike } from "./Types";
2
2
  export declare class SubscribeObject<T> implements ISubscribeObject<T>, IMarkedForUnsubscribe {
3
3
  isMarkedForUnsubscribe: boolean;
4
4
  protected observable: IObserver<T> | undefined;
5
5
  protected listener: IListener<T> | undefined;
6
+ protected errorHandler: IErrorCallback;
6
7
  protected _order: number;
7
8
  private isListenPaused;
8
9
  private once;
@@ -12,9 +13,9 @@ export declare class SubscribeObject<T> implements ISubscribeObject<T>, IMarkedF
12
13
  private emitByPositiveCondition;
13
14
  private emitMatchCondition;
14
15
  protected isPipe: boolean;
15
- constructor(observable?: IObserver<T>, listener?: IListener<T>, isPipe?: boolean);
16
+ constructor(observable?: IObserver<T>, isPipe?: boolean);
16
17
  private static callbackSend;
17
- subscribe(listener: IListener<T>): ISubscriptionLike<T>;
18
+ subscribe(listener: IListener<T>, errorHandler?: IErrorCallback): ISubscriptionLike<T>;
18
19
  unsubscribe(): void;
19
20
  send(value: T): void;
20
21
  setOnce(): ISubscribe<T>;
@@ -46,7 +47,7 @@ export declare class Observable<T> implements IObserver<T> {
46
47
  unsubscribeAll(): void;
47
48
  getValue(): T | undefined;
48
49
  size(): number;
49
- subscribe(listener: IListener<T>): ISubscriptionLike<T> | undefined;
50
+ subscribe(listener: IListener<T>, errorHandler?: IErrorCallback): ISubscriptionLike<T> | undefined;
50
51
  pipe(): ISetup<T> | undefined;
51
52
  get isDestroyed(): boolean;
52
53
  }
@@ -3,8 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Observable = exports.SubscribeObject = void 0;
4
4
  const FunctionLibs_1 = require("./FunctionLibs");
5
5
  class SubscribeObject {
6
- constructor(observable, listener, isPipe) {
6
+ constructor(observable, isPipe) {
7
7
  this.isMarkedForUnsubscribe = false;
8
+ this.errorHandler = (errorData, errorMessage) => {
9
+ console.log(`(Unit of SubscribeObject).send(${errorData}) ERROR:`, errorMessage);
10
+ };
8
11
  this._order = 0;
9
12
  this.isListenPaused = false;
10
13
  this.once = { isOnce: false, isFinished: false };
@@ -15,7 +18,6 @@ class SubscribeObject {
15
18
  this.emitMatchCondition = null;
16
19
  this.isPipe = false;
17
20
  this.observable = observable;
18
- this.listener = listener;
19
21
  this.isPipe = !!isPipe;
20
22
  }
21
23
  static callbackSend(value, subsObj) {
@@ -62,8 +64,9 @@ class SubscribeObject {
62
64
  break;
63
65
  }
64
66
  }
65
- subscribe(listener) {
67
+ subscribe(listener, errorHandler) {
66
68
  this.listener = listener;
69
+ errorHandler && (this.errorHandler = errorHandler);
67
70
  return this;
68
71
  }
69
72
  unsubscribe() {
@@ -78,7 +81,7 @@ class SubscribeObject {
78
81
  SubscribeObject.callbackSend(value, this);
79
82
  }
80
83
  catch (err) {
81
- console.log('(Unit of SubscribeObject).send(value: T) ERROR:', err);
84
+ this.errorHandler(value, err);
82
85
  }
83
86
  }
84
87
  setOnce() {
@@ -110,9 +113,9 @@ class SubscribeObject {
110
113
  return this;
111
114
  }
112
115
  emitMatch(condition) {
113
- if (typeof condition !== "function")
114
- condition =
115
- () => `ERROR CONDITION TYPE ${typeof condition}, CONTROL STATE ${this.observable && !this.observable.getValue()}`;
116
+ if (typeof condition !== "function") {
117
+ condition = () => `ERROR CONDITION TYPE ${typeof condition}, CONTROL STATE ${this.observable && !this.observable.getValue()}`;
118
+ }
116
119
  this.emitMatchCondition = condition;
117
120
  return this;
118
121
  }
@@ -157,8 +160,7 @@ class Observable {
157
160
  this.isNextProcess = true;
158
161
  const length = this.listeners.length;
159
162
  for (let i = 0; i < length; i++) {
160
- const listener = this.listeners[i];
161
- listener.send(value);
163
+ this.listeners[i].send(value);
162
164
  }
163
165
  this.isNextProcess = false;
164
166
  this.listenersForUnsubscribe.length && this.handleListenersForUnsubscribe();
@@ -174,7 +176,7 @@ class Observable {
174
176
  unSubscribe(listener) {
175
177
  if (this._isDestroyed)
176
178
  return;
177
- if (this.isNextProcess) {
179
+ if (this.isNextProcess && listener) {
178
180
  const marker = listener;
179
181
  !marker.isMarkedForUnsubscribe && this.listenersForUnsubscribe.push(listener);
180
182
  marker.isMarkedForUnsubscribe = true;
@@ -191,12 +193,7 @@ class Observable {
191
193
  unsubscribeAll() {
192
194
  if (this._isDestroyed)
193
195
  return;
194
- const listeners = this.listeners;
195
- const length = listeners.length;
196
- for (let i = 0; i < length; i++) {
197
- const subscriber = listeners.pop();
198
- subscriber && subscriber.unsubscribe();
199
- }
196
+ this.listeners.length = 0;
200
197
  }
201
198
  getValue() {
202
199
  if (this._isDestroyed)
@@ -208,19 +205,20 @@ class Observable {
208
205
  return 0;
209
206
  return this.listeners.length;
210
207
  }
211
- subscribe(listener) {
208
+ subscribe(listener, errorHandler) {
212
209
  if (this._isDestroyed)
213
210
  return undefined;
214
211
  if (!listener)
215
212
  return undefined;
216
- const subscribeObject = new SubscribeObject(this, listener, false);
213
+ const subscribeObject = new SubscribeObject(this, false);
214
+ subscribeObject.subscribe(listener, errorHandler);
217
215
  this.listeners.push(subscribeObject);
218
216
  return subscribeObject;
219
217
  }
220
218
  pipe() {
221
219
  if (this._isDestroyed)
222
220
  return undefined;
223
- const subscribeObject = new SubscribeObject(this, undefined, true);
221
+ const subscribeObject = new SubscribeObject(this, true);
224
222
  this.listeners.push(subscribeObject);
225
223
  return subscribeObject;
226
224
  }
@@ -1,10 +1,10 @@
1
1
  import { Observable, SubscribeObject } from "./Observable";
2
- import { ICallback, IListener, IOrdered, IOrderedSetup, IOrderedSubscribe, IOrderedSubscriptionLike } from "./Types";
2
+ import { ICallback, IErrorCallback, IListener, IOrdered, IOrderedSetup, IOrderedSubscribe, IOrderedSubscriptionLike } from "./Types";
3
3
  export declare class OrderedSubscribeObject<T> extends SubscribeObject<T> {
4
- constructor(observable: OrderedObservable<T> | IOrdered<T>, listener?: IListener<T>, isPipe?: boolean);
4
+ constructor(observable: OrderedObservable<T> | IOrdered<T>, isPipe?: boolean);
5
5
  get order(): number;
6
6
  set order(value: number);
7
- subscribe(listener: IListener<T>): IOrderedSubscriptionLike<T>;
7
+ subscribe(listener: IListener<T>, errorHandler?: IErrorCallback): IOrderedSubscriptionLike<T>;
8
8
  setOnce(): IOrderedSubscribe<T>;
9
9
  unsubscribeByNegative(condition: ICallback<any>): IOrderedSubscribe<T>;
10
10
  unsubscribeByPositive(condition: ICallback<any>): IOrderedSubscribe<T>;
@@ -13,7 +13,7 @@ export declare class OrderedSubscribeObject<T> extends SubscribeObject<T> {
13
13
  emitMatch(condition: ICallback<any>): IOrderedSubscribe<T>;
14
14
  }
15
15
  export declare class OrderedObservable<T> extends Observable<T> implements IOrdered<T> {
16
- sortByOrder(): void;
17
- subscribe(listener: IListener<T>): IOrderedSubscriptionLike<T> | undefined;
16
+ sortByOrder(): boolean;
17
+ subscribe(listener: IListener<T>, errorHandler?: IErrorCallback): IOrderedSubscriptionLike<T> | undefined;
18
18
  pipe(): IOrderedSetup<T> | undefined;
19
19
  }
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OrderedObservable = exports.OrderedSubscribeObject = void 0;
4
4
  const Observable_1 = require("./Observable");
5
5
  class OrderedSubscribeObject extends Observable_1.SubscribeObject {
6
- constructor(observable, listener, isPipe) {
7
- super(observable, listener, isPipe);
6
+ constructor(observable, isPipe) {
7
+ super(observable, isPipe);
8
8
  }
9
9
  get order() {
10
10
  return this._order;
@@ -18,8 +18,9 @@ class OrderedSubscribeObject extends Observable_1.SubscribeObject {
18
18
  this._order = value;
19
19
  this.observable.sortByOrder();
20
20
  }
21
- subscribe(listener) {
21
+ subscribe(listener, errorHandler) {
22
22
  this.listener = listener;
23
+ errorHandler && (this.errorHandler = errorHandler);
23
24
  return this;
24
25
  }
25
26
  setOnce() {
@@ -45,7 +46,7 @@ exports.OrderedSubscribeObject = OrderedSubscribeObject;
45
46
  class OrderedObservable extends Observable_1.Observable {
46
47
  sortByOrder() {
47
48
  if (this._isDestroyed)
48
- return undefined;
49
+ return false;
49
50
  this.listeners.sort((a, b) => {
50
51
  if (a.order > b.order)
51
52
  return 1;
@@ -53,20 +54,22 @@ class OrderedObservable extends Observable_1.Observable {
53
54
  return -1;
54
55
  return 0;
55
56
  });
57
+ return true;
56
58
  }
57
- subscribe(listener) {
59
+ subscribe(listener, errorHandler) {
58
60
  if (this._isDestroyed)
59
61
  return undefined;
60
62
  if (!listener)
61
63
  return undefined;
62
- const subscribeObject = new OrderedSubscribeObject(this, listener, false);
64
+ const subscribeObject = new OrderedSubscribeObject(this, false);
65
+ subscribeObject.subscribe(listener, errorHandler);
63
66
  this.listeners.push(subscribeObject);
64
67
  return subscribeObject;
65
68
  }
66
69
  pipe() {
67
70
  if (this._isDestroyed)
68
71
  return undefined;
69
- const subscribeObject = new OrderedSubscribeObject(this, undefined, true);
72
+ const subscribeObject = new OrderedSubscribeObject(this, true);
70
73
  this.listeners.push(subscribeObject);
71
74
  return subscribeObject;
72
75
  }
@@ -2,8 +2,9 @@ export type ICallback<T> = (value?: T) => any;
2
2
  export type IMarkedForUnsubscribe = {
3
3
  isMarkedForUnsubscribe: boolean;
4
4
  };
5
+ export type IErrorCallback = (errorData: any, errorMessage: any) => void;
5
6
  export type ISubscribe<T> = {
6
- subscribe(listener: IListener<T>): ISubscriptionLike<T> | undefined;
7
+ subscribe(listener: IListener<T>, errorHandler?: IErrorCallback): ISubscriptionLike<T> | undefined;
7
8
  };
8
9
  export type IListener<T> = ICallback<T>;
9
10
  export type IDestroy = {
@@ -91,12 +92,12 @@ export type ICollector = IDestroy & ISubscribeCounter & {
91
92
  unsubscribeAll(): void;
92
93
  };
93
94
  export type IOrderedObservable = {
94
- sortByOrder(): void;
95
+ sortByOrder(): boolean;
95
96
  };
96
97
  export type IOrdered<T> = IObserver<T> & IOrderedObservable;
97
98
  export type IOrderedSubscriptionLike<T> = (ISubscriptionLike<T> & IOrder);
98
99
  export type IOrderedSubscribe<T> = {
99
- subscribe(listener: IListener<T>): IOrderedSubscriptionLike<T>;
100
+ subscribe(listener: IListener<T>, errorHandler?: IErrorCallback): IOrderedSubscriptionLike<T>;
100
101
  };
101
102
  export type IGroup = ICollector & {
102
103
  name: string;