@reidelsaltres/pureper 0.2.12 → 0.2.13

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.
@@ -43,8 +43,8 @@ export declare function isObservable<T = any>(value: any): value is Observable<T
43
43
  */
44
44
  export default class Observable<T> {
45
45
  protected object?: T;
46
- protected observer: Observer<T>;
47
- protected mutationObserver: MutationObserver<T>;
46
+ protected _mutationObserver: MutationObserver<T>;
47
+ protected _wraps: Map<Function, (oldValue: T, newValue: T) => void>;
48
48
  readonly [OBSERVABLE_SYMBOL] = true;
49
49
  constructor(object?: T);
50
50
  createDependent<U>(mapper: () => U): Observable<U>;
@@ -52,12 +52,11 @@ export default class Observable<T> {
52
52
  static createDependent<U>(mapper: () => U, source: Observable<any>): Observable<U>;
53
53
  static createDependent<T, U>(mapper: (obj: T) => U, source: Observable<T>): Observable<U>;
54
54
  getObject(): T | null;
55
- getObserver(): Observer<T>;
56
- getMutationObserver(): MutationObserver<T>;
57
55
  subscribe(listener: (data: T) => void): void;
58
56
  unsubscribe(listener: (data: T) => void): void;
59
57
  subscribeMutation(listener: (oldValue: T, newValue: T) => void): void;
60
58
  unsubscribeMutation(listener: (oldValue: T, newValue: T) => void): void;
59
+ protected notifyAll(oldValue: T, newValue: T): void;
61
60
  setObject(object: T, silent?: boolean): void;
62
61
  updateObject(updater: (obj: T) => T, silent?: boolean): void;
63
62
  transaction(): Transaction<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"Observer.d.ts","sourceRoot":"","sources":["../../../src/foundation/api/Observer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Observer.d.ts","sourceRoot":"","sources":["../../../src/foundation/api/Observer.ts"],"names":[],"mappings":"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"}
@@ -43,8 +43,8 @@ export function isObservable(value) {
43
43
  */
44
44
  export default class Observable {
45
45
  object;
46
- observer = new Observer();
47
- mutationObserver = new MutationObserver();
46
+ _mutationObserver = new MutationObserver();
47
+ _wraps = new Map();
48
48
  // Mark as Observable
49
49
  [OBSERVABLE_SYMBOL] = true;
50
50
  constructor(object) {
@@ -67,38 +67,39 @@ export default class Observable {
67
67
  getObject() {
68
68
  return this.object ?? null;
69
69
  }
70
- getObserver() {
71
- return this.observer;
72
- }
73
- getMutationObserver() {
74
- return this.mutationObserver;
75
- }
76
70
  subscribe(listener) {
77
- this.observer.subscribe(listener);
71
+ const w = (_o, n) => listener(n);
72
+ this._wraps.set(listener, w);
73
+ this._mutationObserver.subscribe(w);
78
74
  }
79
75
  unsubscribe(listener) {
80
- this.observer.unsubscribe(listener);
76
+ const w = this._wraps.get(listener);
77
+ if (w) {
78
+ this._mutationObserver.unsubscribe(w);
79
+ this._wraps.delete(listener);
80
+ }
81
81
  }
82
82
  subscribeMutation(listener) {
83
- this.mutationObserver.subscribe(listener);
83
+ this._mutationObserver.subscribe(listener);
84
84
  }
85
85
  unsubscribeMutation(listener) {
86
- this.mutationObserver.unsubscribe(listener);
86
+ this._mutationObserver.unsubscribe(listener);
87
+ }
88
+ notifyAll(oldValue, newValue) {
89
+ this._mutationObserver.notify(oldValue, newValue);
87
90
  }
88
91
  setObject(object, silent = false) {
89
92
  const oldObject = this.object;
90
93
  this.object = object;
91
94
  if (!silent) {
92
- this.observer.notify(this.object);
93
- this.mutationObserver.notify(oldObject, this.object);
95
+ this.notifyAll(oldObject, this.object);
94
96
  }
95
97
  }
96
98
  updateObject(updater, silent = false) {
97
99
  const oldObject = this.object;
98
100
  this.object = updater(this.object);
99
101
  if (!silent) {
100
- this.observer.notify(this.object);
101
- this.mutationObserver.notify(oldObject, this.object);
102
+ this.notifyAll(oldObject, this.object);
102
103
  }
103
104
  }
104
105
  transaction() {
@@ -1 +1 @@
1
- {"version":3,"file":"Observer.js","sourceRoot":"","sources":["../../../src/foundation/api/Observer.ts"],"names":[],"mappings":"AAgBA,MAAM,OAAO,QAAQ;IACT,SAAS,GAA6B,EAAE,CAAC;IAE1C,SAAS,CAAC,QAA2B;QACxC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IACM,WAAW,CAAC,QAA2B;QAC1C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;IAChE,CAAC;IAEM,MAAM,CAAC,IAAO;QACjB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;CACJ;AAED,MAAM,OAAO,gBAAgB;IACjB,SAAS,GAA8C,EAAE,CAAC;IAE3D,SAAS,CAAC,QAA4C;QACzD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IACM,WAAW,CAAC,QAA4C;QAC3D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;IAChE,CAAC;IAEM,MAAM,CAAC,QAAW,EAAE,QAAW;QAClC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IACrE,CAAC;CACJ;AAED,0CAA0C;AAC1C,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAE1D;;GAEG;AACH,MAAM,UAAU,YAAY,CAAU,KAAU;IAC5C,OAAO,KAAK,IAAI,KAAK,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;AACtD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IACjB,MAAM,CAAK;IACX,QAAQ,GAAgB,IAAI,QAAQ,EAAK,CAAC;IAC1C,gBAAgB,GAAwB,IAAI,gBAAgB,EAAK,CAAC;IAE5E,qBAAqB;IACL,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;IAE3C,YAAY,MAAU;QAClB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAGM,eAAe,CAAI,MAAsB;QAC5C,MAAM,SAAS,GAAG,IAAI,UAAU,CAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,EAAE;YACxB,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACrB,CAAC;IAIM,MAAM,CAAC,eAAe,CAAO,MAAsB,EAAE,MAAqB;QAC7E,MAAM,SAAS,GAAG,IAAI,UAAU,CAAI,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC1B,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACrB,CAAC;IAGM,SAAS;QACZ,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;IAC/B,CAAC;IAEM,WAAW;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAEM,mBAAmB;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAEM,SAAS,CAAC,QAA2B;QACxC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAEM,WAAW,CAAC,QAA2B;QAC1C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAEM,iBAAiB,CAAC,QAA4C;QACjE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAEM,mBAAmB,CAAC,QAA4C;QACnE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IAEM,SAAS,CAAC,MAAS,EAAE,SAAkB,KAAK;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACzD,CAAC;IACL,CAAC;IACM,YAAY,CAAC,OAAsB,EAAE,SAAkB,KAAK;QAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACzD,CAAC;IACL,CAAC;IAEM,WAAW;QACd,OAAO,IAAI,WAAW,CAAI,IAAI,CAAC,CAAC;IACpC,CAAC;CACJ;AACD,MAAM,OAAO,WAAW;IACZ,UAAU,CAAgB;IAC1B,aAAa,CAAI;IACjB,gBAAgB,CAAI;IACpB,UAAU,GAAyB,EAAE,CAAC;IAC9C,YAAY,UAAyB;QACjC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;QAC5C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC;IAC/C,CAAC;IACM,SAAS,CAAC,MAAS,EAAE,UAAmB,KAAK;QAChD,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC;QAE/B,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;IACM,YAAY,CAAC,OAAsB,EAAE,UAAmB,KAAK;QAChE,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IACM,MAAM;QACT,IAAI,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAA;QACpC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACzB,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEpC,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IAEzB,CAAC;CACJ"}
1
+ {"version":3,"file":"Observer.js","sourceRoot":"","sources":["../../../src/foundation/api/Observer.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,7 @@
1
- import Observable from "../api/Observer.js";
1
+ import Observable, { IKeyMutationObserver } from "../api/Observer.js";
2
2
  import Component from "./Component.js";
3
- export default class Attribute<T = any> extends Observable<T | string> {
3
+ export default class Attribute<T = any> extends Observable<T | string> implements IKeyMutationObserver<string, T | string> {
4
4
  private component;
5
- private listeners;
6
5
  private _name;
7
6
  private _defaultValue;
8
7
  constructor(component: Component, name: string, value?: T);
@@ -16,7 +15,9 @@ export default class Attribute<T = any> extends Observable<T | string> {
16
15
  updateObject(updater: (obj: string | T) => string | T, silent?: boolean): void;
17
16
  isDefault(): boolean;
18
17
  isExist(): boolean;
18
+ subscribe(listener: (key: string, oldValue: string | T, newValue: string | T) => void): void;
19
19
  subscribe(listener: (newValue: string | T) => void): void;
20
+ unsubscribe(listener: (key: string, oldValue: string | T, newValue: string | T) => void): void;
20
21
  unsubscribe(listener: (newValue: string | T) => void): void;
21
22
  }
22
23
  //# sourceMappingURL=Attribute.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Attribute.d.ts","sourceRoot":"","sources":["../../../src/foundation/component_api/Attribute.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAC5C,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAEvC,MAAM,CAAC,OAAO,OAAO,SAAS,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC;IAClE,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,SAAS,CAAmE;IAEpF,OAAO,CAAC,KAAK,CAAS;IAEtB,OAAO,CAAC,aAAa,CAAc;gBAEvB,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;IAWlD,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAI/D,OAAO,CAAC,UAAU;IAYlB,IAAW,IAAI,WAEd;IAED,IAAW,KAAK,IAAI,CAAC,GAAG,MAAM,CAE7B;IAED,IAAW,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,EAE/B;IAEM,SAAS,IAAI,MAAM,GAAG,CAAC;IAIvB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,GAAE,OAAe,GAAG,IAAI;IAkBzD,YAAY,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,KAAK,MAAM,GAAG,CAAC,EAAE,MAAM,GAAE,OAAe,GAAG,IAAI;IAIrF,SAAS,IAAI,OAAO;IAGpB,OAAO,IAAI,OAAO;IAIlB,SAAS,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,KAAK,IAAI,GAAG,IAAI;IAGzD,WAAW,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,KAAK,IAAI,GAAG,IAAI;CAGrE"}
1
+ {"version":3,"file":"Attribute.d.ts","sourceRoot":"","sources":["../../../src/foundation/component_api/Attribute.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,EAAE,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAEvC,MAAM,CAAC,OAAO,OAAO,SAAS,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,UAAU,CAAC,CAAC,GAAG,MAAM,CAAE,YAAW,oBAAoB,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC;IACtH,OAAO,CAAC,SAAS,CAAa;IAE9B,OAAO,CAAC,KAAK,CAAS;IAEtB,OAAO,CAAC,aAAa,CAAc;gBAEvB,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;IAWlD,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAI/D,OAAO,CAAC,UAAU;IAYlB,IAAW,IAAI,WAEd;IAED,IAAW,KAAK,IAAI,CAAC,GAAG,MAAM,CAE7B;IAED,IAAW,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,EAE/B;IAEM,SAAS,IAAI,MAAM,GAAG,CAAC;IAIvB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,GAAE,OAAe,GAAG,IAAI;IAqBzD,YAAY,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,KAAK,MAAM,GAAG,CAAC,EAAE,MAAM,GAAE,OAAe,GAAG,IAAI;IAIrF,SAAS,IAAI,OAAO;IAGpB,OAAO,IAAI,OAAO;IAIlB,SAAS,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,KAAK,IAAI,GAAG,IAAI;IAC5F,SAAS,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,KAAK,IAAI,GAAG,IAAI;IAYzD,WAAW,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,KAAK,IAAI,GAAG,IAAI;IAC9F,WAAW,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,KAAK,IAAI,GAAG,IAAI;CAQrE"}
@@ -1,7 +1,6 @@
1
1
  import Observable from "../api/Observer.js";
2
2
  export default class Attribute extends Observable {
3
3
  component;
4
- listeners = [];
5
4
  _name;
6
5
  _defaultValue;
7
6
  constructor(component, name, value) {
@@ -12,7 +11,7 @@ export default class Attribute extends Observable {
12
11
  this._defaultValue = value;
13
12
  }
14
13
  notify(oldValue, newValue) {
15
- this.listeners.forEach(listener => listener(oldValue, newValue));
14
+ this.notifyAll(oldValue, newValue);
16
15
  }
17
16
  initialize(initValue) {
18
17
  this.value = initValue ?? this._defaultValue;
@@ -38,26 +37,31 @@ export default class Attribute extends Observable {
38
37
  setObject(val, silent = false) {
39
38
  if (val === this.object)
40
39
  return;
41
- if (!silent)
42
- this.notify(this.value, val);
40
+ const oldObject = this.object;
43
41
  this.object = val;
44
42
  if (typeof val === "boolean") {
45
43
  if (val)
46
44
  this.component.setAttribute(this._name, "");
47
45
  else
48
46
  this.component.removeAttribute(this._name);
49
- return;
50
47
  }
51
- if (typeof val === "string") {
52
- if (this._defaultValue === this.value)
48
+ else if (typeof val === "string") {
49
+ if (this._defaultValue === this.object)
53
50
  this.component.removeAttribute(this._name);
54
51
  else
55
52
  this.component.setAttribute(this._name, val);
56
53
  }
57
- if (this._defaultValue === this.value)
58
- this.component.removeAttribute(this._name);
59
- else
60
- this.component.setAttribute(this._name, val.toString());
54
+ else {
55
+ if (this._defaultValue === this.object)
56
+ this.component.removeAttribute(this._name);
57
+ else if (this.object != null)
58
+ this.component.setAttribute(this._name, this.object.toString());
59
+ else
60
+ this.component.removeAttribute(this._name);
61
+ }
62
+ if (!silent) {
63
+ this.notifyAll(oldObject, this.object);
64
+ }
61
65
  }
62
66
  updateObject(updater, silent = false) {
63
67
  this.setObject(updater(this.value), silent);
@@ -69,10 +73,23 @@ export default class Attribute extends Observable {
69
73
  return this.value !== undefined && this.value !== null && this.value !== "";
70
74
  }
71
75
  subscribe(listener) {
72
- this.listeners.push((_o, n) => listener(n));
76
+ if (listener.length <= 1) {
77
+ const w = (_o, n) => listener(n);
78
+ this._wraps.set(listener, w);
79
+ this._mutationObserver.subscribe(w);
80
+ }
81
+ else {
82
+ const w = (o, n) => listener(this._name, o, n);
83
+ this._wraps.set(listener, w);
84
+ this._mutationObserver.subscribe(w);
85
+ }
73
86
  }
74
87
  unsubscribe(listener) {
75
- this.listeners = this.listeners.filter(l => l !== listener);
88
+ const w = this._wraps.get(listener);
89
+ if (w) {
90
+ this._mutationObserver.unsubscribe(w);
91
+ this._wraps.delete(listener);
92
+ }
76
93
  }
77
94
  }
78
95
  //# sourceMappingURL=Attribute.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Attribute.js","sourceRoot":"","sources":["../../../src/foundation/component_api/Attribute.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Attribute.js","sourceRoot":"","sources":["../../../src/foundation/component_api/Attribute.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reidelsaltres/pureper",
3
- "version": "0.2.12",
3
+ "version": "0.2.13",
4
4
  "description": "Minimal library extracted from the Pureper SPA foundation — utilities and base classes for components/pages.",
5
5
  "type": "module",
6
6
  "main": "out/src/index.js",
@@ -67,8 +67,8 @@ export function isObservable<T = any>(value: any): value is Observable<T> {
67
67
  */
68
68
  export default class Observable<T> {
69
69
  protected object?: T;
70
- protected observer: Observer<T> = new Observer<T>();
71
- protected mutationObserver: MutationObserver<T> = new MutationObserver<T>();
70
+ protected _mutationObserver: MutationObserver<T> = new MutationObserver<T>();
71
+ protected _wraps = new Map<Function, (oldValue: T, newValue: T) => void>();
72
72
 
73
73
  // Mark as Observable
74
74
  public readonly [OBSERVABLE_SYMBOL] = true;
@@ -101,44 +101,44 @@ export default class Observable<T> {
101
101
  return this.object ?? null;
102
102
  }
103
103
 
104
- public getObserver(): Observer<T> {
105
- return this.observer;
106
- }
107
-
108
- public getMutationObserver(): MutationObserver<T> {
109
- return this.mutationObserver;
110
- }
111
-
112
104
  public subscribe(listener: (data: T) => void): void {
113
- this.observer.subscribe(listener);
105
+ const w = (_o: T, n: T) => listener(n);
106
+ this._wraps.set(listener, w);
107
+ this._mutationObserver.subscribe(w);
114
108
  }
115
109
 
116
110
  public unsubscribe(listener: (data: T) => void): void {
117
- this.observer.unsubscribe(listener);
111
+ const w = this._wraps.get(listener);
112
+ if (w) {
113
+ this._mutationObserver.unsubscribe(w);
114
+ this._wraps.delete(listener);
115
+ }
118
116
  }
119
117
 
120
118
  public subscribeMutation(listener: (oldValue: T, newValue: T) => void): void {
121
- this.mutationObserver.subscribe(listener);
119
+ this._mutationObserver.subscribe(listener);
122
120
  }
123
121
 
124
122
  public unsubscribeMutation(listener: (oldValue: T, newValue: T) => void): void {
125
- this.mutationObserver.unsubscribe(listener);
123
+ this._mutationObserver.unsubscribe(listener);
124
+ }
125
+
126
+ protected notifyAll(oldValue: T, newValue: T): void {
127
+ this._mutationObserver.notify(oldValue, newValue);
126
128
  }
127
129
 
128
130
  public setObject(object: T, silent: boolean = false): void {
129
131
  const oldObject = this.object;
130
132
  this.object = object;
131
133
  if (!silent) {
132
- this.observer.notify(this.object);
133
- this.mutationObserver.notify(oldObject, this.object);
134
+ this.notifyAll(oldObject, this.object);
134
135
  }
135
136
  }
136
137
  public updateObject(updater: (obj: T) => T, silent: boolean = false): void {
137
138
  const oldObject = this.object;
138
139
  this.object = updater(this.object);
139
140
  if (!silent) {
140
- this.observer.notify(this.object);
141
- this.mutationObserver.notify(oldObject, this.object);
141
+ this.notifyAll(oldObject, this.object);
142
142
  }
143
143
  }
144
144
 
@@ -1,9 +1,8 @@
1
- import Observable from "../api/Observer.js";
1
+ import Observable, { IKeyMutationObserver } from "../api/Observer.js";
2
2
  import Component from "./Component.js";
3
3
 
4
- export default class Attribute<T = any> extends Observable<T | string> {
4
+ export default class Attribute<T = any> extends Observable<T | string> implements IKeyMutationObserver<string, T | string> {
5
5
  private component!: Component;
6
- private listeners: Array<(oldValue: string | T, newValue: string | T) => void> = [];
7
6
 
8
7
  private _name: string;
9
8
 
@@ -21,7 +20,7 @@ export default class Attribute<T = any> extends Observable<T | string> {
21
20
 
22
21
 
23
22
  public notify(oldValue: string | T, newValue: string | T): void {
24
- this.listeners.forEach(listener => listener(oldValue, newValue));
23
+ this.notifyAll(oldValue, newValue);
25
24
  }
26
25
 
27
26
  private initialize(initValue: T | string) {
@@ -54,21 +53,24 @@ export default class Attribute<T = any> extends Observable<T | string> {
54
53
 
55
54
  public setObject(val: string | T, silent: boolean = false): void {
56
55
  if (val === this.object) return;
57
- if (!silent) this.notify(this.value, val);
56
+ const oldObject = this.object;
58
57
  this.object = val;
59
58
 
60
59
  if (typeof val === "boolean") {
61
60
  if (val) this.component.setAttribute(this._name, "");
62
61
  else this.component.removeAttribute(this._name);
63
- return;
64
- }
65
- if (typeof val === "string") {
66
- if (this._defaultValue === this.value) this.component.removeAttribute(this._name);
62
+ } else if (typeof val === "string") {
63
+ if (this._defaultValue === this.object) this.component.removeAttribute(this._name);
67
64
  else this.component.setAttribute(this._name, val);
65
+ } else {
66
+ if (this._defaultValue === this.object) this.component.removeAttribute(this._name);
67
+ else if (this.object != null) this.component.setAttribute(this._name, (this.object as any).toString());
68
+ else this.component.removeAttribute(this._name);
68
69
  }
69
70
 
70
- if (this._defaultValue === this.value) this.component.removeAttribute(this._name);
71
- else this.component.setAttribute(this._name, val.toString());
71
+ if (!silent) {
72
+ this.notifyAll(oldObject, this.object);
73
+ }
72
74
  }
73
75
  public updateObject(updater: (obj: string | T) => string | T, silent: boolean = false): void {
74
76
  this.setObject(updater(this.value), silent);
@@ -81,10 +83,26 @@ export default class Attribute<T = any> extends Observable<T | string> {
81
83
  return this.value !== undefined && this.value !== null && this.value !== "";
82
84
  }
83
85
 
84
- public subscribe(listener: (newValue: string | T) => void): void {
85
- this.listeners.push((_o, n) => listener(n));
86
+ public subscribe(listener: (key: string, oldValue: string | T, newValue: string | T) => void): void;
87
+ public subscribe(listener: (newValue: string | T) => void): void;
88
+ public subscribe(listener: Function): void {
89
+ if (listener.length <= 1) {
90
+ const w = (_o: string | T, n: string | T) => (listener as any)(n);
91
+ this._wraps.set(listener, w as any);
92
+ this._mutationObserver.subscribe(w as any);
93
+ } else {
94
+ const w = (o: string | T, n: string | T) => (listener as any)(this._name, o, n);
95
+ this._wraps.set(listener, w as any);
96
+ this._mutationObserver.subscribe(w as any);
97
+ }
86
98
  }
87
- public unsubscribe(listener: (newValue: string | T) => void): void {
88
- this.listeners = this.listeners.filter(l => l !== listener);
99
+ public unsubscribe(listener: (key: string, oldValue: string | T, newValue: string | T) => void): void;
100
+ public unsubscribe(listener: (newValue: string | T) => void): void;
101
+ public unsubscribe(listener: Function): void {
102
+ const w = this._wraps.get(listener);
103
+ if (w) {
104
+ this._mutationObserver.unsubscribe(w as any);
105
+ this._wraps.delete(listener);
106
+ }
89
107
  }
90
108
  }