@symbiotejs/symbiote 2.2.0 → 2.2.2

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/core/PubSub.js CHANGED
@@ -52,19 +52,23 @@ export class PubSub {
52
52
  if (typeof prop === 'string' && prop.startsWith(DICT.COMPUTED_PX)) {
53
53
  /** @type {Function} */
54
54
  let compFn = this.store[prop];
55
- if (!this.__computedSet) {
55
+ if (compFn?.constructor !== Function) {
56
+ PubSub.#warn('compute', prop);
57
+ return;
58
+ }
59
+ if (!this.__computedMap) {
56
60
  /**
57
61
  * @private
58
- * @type {Set<String>}
62
+ * @type {Object<string, *>}
59
63
  */
60
- this.__computedSet = new Set();
64
+ this.__computedMap = {};
61
65
  }
62
- this.__computedSet.add(prop);
63
- if (compFn?.constructor !== Function) {
64
- PubSub.#warn('compute', prop);
65
- } else {
66
- return compFn();
66
+ let currentVal = compFn();
67
+ if (!Object.keys(this.__computedMap).includes(prop)) {
68
+ this.__computedMap[prop] = currentVal;
69
+ this.notify(prop);
67
70
  }
71
+ return currentVal;
68
72
  } else {
69
73
  return this.store[prop];
70
74
  }
@@ -136,14 +140,18 @@ export class PubSub {
136
140
 
137
141
  static #processComputed() {
138
142
  this.globalStore.forEach((inst) => {
139
- if (inst.__computedSet) {
140
- inst.__computedSet.forEach((prop) => {
143
+ if (inst.__computedMap) {
144
+ Object.keys(inst.__computedMap).forEach((prop) => {
141
145
  let tName = `__${prop}_timeout`;
142
146
  if (inst[tName]) {
143
147
  window.clearTimeout(inst[tName]);
144
148
  }
145
149
  inst[tName] = window.setTimeout(() => {
146
- inst.notify(prop);
150
+ let currentVal = inst.read(prop);
151
+ if (currentVal !== inst.__computedMap[prop]) {
152
+ inst.__computedMap[prop] = currentVal;
153
+ inst.notify(prop);
154
+ }
147
155
  });
148
156
  });
149
157
  }
@@ -152,13 +160,16 @@ export class PubSub {
152
160
 
153
161
  /** @param {keyof T} prop */
154
162
  notify(prop) {
163
+ // @ts-expect-error
164
+ let isComputed = prop?.startsWith(DICT.COMPUTED_PX);
155
165
  if (this.callbackMap[prop]) {
166
+ // @ts-expect-error
167
+ let val = isComputed ? this.__computedMap[prop] : this.read(prop);
156
168
  this.callbackMap[prop].forEach((callback) => {
157
- callback(this.read(prop));
169
+ callback(val);
158
170
  });
159
171
  }
160
- // @ts-expect-error
161
- !prop?.startsWith(DICT.COMPUTED_PX) && PubSub.#processComputed();
172
+ !isComputed && PubSub.#processComputed();
162
173
  }
163
174
 
164
175
  /**
package/core/Symbiote.js CHANGED
@@ -517,7 +517,10 @@ export class Symbiote extends HTMLElement {
517
517
 
518
518
  /** @param {Object<string, string>} desc */
519
519
  static bindAttributes(desc) {
520
- this.observedAttributes = [...(this.observedAttributes || []), Object.keys(desc)];
520
+ /** @type {String[]} */
521
+ this.observedAttributes = [
522
+ ...new Set((this.observedAttributes || []).concat(Object.keys(desc)))
523
+ ];
521
524
  /** @private */
522
525
  this.__attrDesc = desc;
523
526
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@symbiotejs/symbiote",
4
- "version": "2.2.0",
4
+ "version": "2.2.2",
5
5
  "description": "Symbiote.js - close-to-platform frontend library for building super-powered web components",
6
6
  "author": "symbiote.js@gmail.com",
7
7
  "license": "MIT",
@@ -63,6 +63,6 @@
63
63
  "MIT"
64
64
  ],
65
65
  "devDependencies": {
66
- "typescript": "^5.2.2"
66
+ "typescript": "^5.3.3"
67
67
  }
68
68
  }
@@ -14,7 +14,7 @@ export class AppRouter {
14
14
  static setRoutingMap(map: {
15
15
  [x: string]: {};
16
16
  }): void;
17
- static set routingEventName(arg: string);
17
+ static set routingEventName(name: string);
18
18
  static get routingEventName(): string;
19
19
  static readAddressBar(): {
20
20
  route: any;
@@ -1 +1 @@
1
- {"version":3,"file":"AppRouter.d.ts","sourceRoot":"","sources":["../../core/AppRouter.js"],"names":[],"mappings":"AAEA;IAOE,2BADW,MAAM,IAAI,CACF;IAEnB,iCAAkB;IAElB,wCAAyB;IAEzB;;;;;;MAAoC;IAEpC,qCAEC;IAGD,4CAEC;IAGD;YADmB,MAAM,GAAE,EAAE;aAU5B;IAGD,yCAGC;IAGD,sCAEC;IAED;;;MAiBC;IAED,sBA0BC;IAMD;YAFkB,MAAM,GAAE,GAAG;aAuB5B;IAMD;YAFkB,MAAM,GAAE,GAAG;aAK5B;IAGD,wCAGC;IAGD,+BAEC;IAOD;;;;;;oBAoBC;IAED,4CASC;IAED,sCAGC;CACF;;mBAzLkB,aAAa"}
1
+ {"version":3,"file":"AppRouter.d.ts","sourceRoot":"","sources":["../../core/AppRouter.js"],"names":[],"mappings":"AAEA;IAOE,2BADW,MAAM,IAAI,CACF;IAEnB,iCAAkB;IAElB,wCAAyB;IAEzB;;;;;;MAAoC;IAEpC,qCAEC;IAGD,4CAEC;IAGD;YADmB,MAAM,GAAE,EAAE;aAU5B;IAGD,0CAGC;IAGD,sCAEC;IAED;;;MAiBC;IAED,sBA0BC;IAMD;YAFkB,MAAM,GAAE,GAAG;aAuB5B;IAMD;YAFkB,MAAM,GAAE,GAAG;aAK5B;IAGD,wCAGC;IAGD,+BAEC;IAOD;;;;;;oBAoBC;IAED,4CASC;IAED,sCAGC;CACF;;mBAzLkB,aAAa"}
@@ -8,7 +8,7 @@ export class PubSub<T extends Record<string, unknown>> {
8
8
  store: any;
9
9
  callbackMap: Record<keyof T, Set<(val: unknown) => void>>;
10
10
  read(prop: keyof T): any;
11
- private __computedSet;
11
+ private __computedMap;
12
12
  has(prop: string): any;
13
13
  add(prop: string, val: unknown, rewrite?: boolean): void;
14
14
  pub(prop: keyof T, val: unknown): void;
@@ -19,12 +19,12 @@ export class PubSub<T extends Record<string, unknown>> {
19
19
  remove: () => void;
20
20
  callback: (val: unknown) => void;
21
21
  };
22
- set uid(arg: string | Symbol);
22
+ set uid(uid: string | Symbol);
23
23
  get uid(): string | Symbol;
24
24
  #private;
25
25
  }
26
26
  export namespace PubSub {
27
- const globalStore: Map<string | Symbol, PubSub<any>>;
27
+ let globalStore: Map<string | Symbol, PubSub<any>>;
28
28
  }
29
29
  export default PubSub;
30
30
  //# sourceMappingURL=PubSub.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PubSub.d.ts","sourceRoot":"","sources":["../../core/PubSub.js"],"names":[],"mappings":"AAgBA;IAyBE,yDAEC;IA6FD,uCAcC;IA0DD,uEAHW,SAAS,MAAM,aAczB;IAGD,sBADY,SAAS,MAAM,QAG1B;IAOD,mBAJW,SAAS,MAAM,iCAMzB;IAhND,oBADY,CAAC,EAWZ;IARG,WAA6B;IAO/B,uCADoC,OAAO,KAAK,IAAI,GACd;IAYxC,WADY,MAAM,CAAC,OAyBlB;IAXK,sBAA8B;IAcpC,uBAEC;IAOD,uBAHW,OAAO,2BASjB;IAMD,UAHW,MAAM,CAAC,OACP,OAAO,QAkBjB;IAGD,eAcC;IAGD,iBADY,CAAC,QAKZ;IAmBD,aADY,MAAM,CAAC,QASlB;IAOD,UAJW,MAAM,CAAC,kBACD,OAAO,KAAK,IAAI;;wBAAhB,OAAO,KAAK,IAAI;MAwBhC;IAKD,8BAEC;IAED,2BAEC;;CAkCF;;uBAEU,IAAI,SAAS,MAAM,cAAS"}
1
+ {"version":3,"file":"PubSub.d.ts","sourceRoot":"","sources":["../../core/PubSub.js"],"names":[],"mappings":"AAgBA;IAyBE,yDAEC;IAiGD,uCAkBC;IA6DD,uEAHW,SAAS,MAAM,aAczB;IAGD,sBADY,SAAS,MAAM,QAG1B;IAOD,mBAJW,SAAS,MAAM,iCAMzB;IA3ND,oBADY,CAAC,EAWZ;IARG,WAA6B;IAO/B,uCADoC,OAAO,KAAK,IAAI,GACd;IAYxC,WADY,MAAM,CAAC,OA6BlB;IAXK,sBAAuB;IAc7B,uBAEC;IAOD,uBAHW,OAAO,2BASjB;IAMD,UAHW,MAAM,CAAC,OACP,OAAO,QAkBjB;IAGD,eAcC;IAGD,iBADY,CAAC,QAKZ;IAuBD,aADY,MAAM,CAAC,QAYlB;IAOD,UAJW,MAAM,CAAC,kBACD,OAAO,KAAK,IAAI;;wBAAhB,OAAO,KAAK,IAAI;MAwBhC;IAKD,8BAEC;IAED,2BAEC;;CAkCF;;qBAEU,IAAI,SAAS,MAAM,cAAS"}
@@ -14,8 +14,8 @@ export class Symbiote<S> extends HTMLElement {
14
14
  }): void;
15
15
  static addRootStyles(styles: string | CSSStyleSheet): void;
16
16
  static addShadowStyles(styles: string | CSSStyleSheet): void;
17
- static set rootStyles(arg: string | CSSStyleSheet);
18
- static set shadowStyles(arg: string | CSSStyleSheet);
17
+ static set rootStyles(styles: string | CSSStyleSheet);
18
+ static set shadowStyles(styles: string | CSSStyleSheet);
19
19
  constructor();
20
20
  get Symbiote(): typeof Symbiote;
21
21
  initCallback(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"Symbiote.d.ts","sourceRoot":"","sources":["../../core/Symbiote.js"],"names":[],"mappings":";;AAgBA;IAsBE,cADW,mBAAmB,CACjB;IAkBb,wBAAgB;IA4JhB;;;MAkCC;IAgPD,sDAsBC;IAED,wBAKC;IAGD;YADmB,MAAM,GAAE,MAAM;aAKhC;IA6GD,6BADY,SAAS,aAAa,QAOjC;IAGD,+BADY,SAAS,aAAa,QAOjC;IAGD,mDAGC;IAGD,qDAGC;IAzgBD,cA6BC;IA9HD,gCAEC;IAED,qBAAiB;IACjB,uBAAmB;IAiBnB,kBAHW,SAAS,gBAAgB,0BAoEnC;IAMD,mGAFmD,IAAI,QAItD;IAKC,OADW,CAAC,CACoB;IAEhC;YADkB,MAAM;MACW;IAEnC,wBADoB,gBAAgB,gBAAW,SAAS,OAAO,KAAK,IAAI,EAC1C;IAE9B;YADkB,MAAM,GAAE,GAAG;MACC;IAC9B,kBAAwB;IAExB,qBAAwB;IAExB,sBAAyB;IAEzB,wBAA0B;IAE1B,0BAA6B;IAE7B,iBAAoB;IAEpB,6BAAgC;IAEhC,kBAAqB;IAErB,mBAAsB;IAEtB,4BAA8B;IAIhC,0BAMC;IAGD,yBAEC;IAGD,sBASC;IAGD,4BAKC;IAGD,6BAEC;IAiDD,gEAH4B,IAAI,wBAmB/B;IAGD,2BAGC;IAGD,uBAGC;IAQD,6EAGC;IAMD,UAHW,QAAQ,CAAC,CAAC,2BAOpB;IAGD,WAgBC;IAMD,YAHW,QAAQ,CAAC,CAAC,mCAcpB;IAMD,8BAgBC;IAdG,4CASE;IAqEF,0BAAwC;IAoB1C,uBAAyB;IAG3B,0BAEC;IAED,wBAAoB;IAEpB,6BA0BC;IA4CD,oEAeC;IAMD,yDAiBC;IAYD,0BAME;IAMF,0CAFW,GAAG,QAab;IAED,yBAGC;IAOD,8EAmBC;;CA+BF;;oBAjpBmB,iBAAiB;mBAFlB,aAAa"}
1
+ {"version":3,"file":"Symbiote.d.ts","sourceRoot":"","sources":["../../core/Symbiote.js"],"names":[],"mappings":";;AAgBA;IAsBE,cADW,mBAAmB,CACjB;IAkBb,wBAAgB;IA4JhB;;;MAkCC;IAgPD,sDAsBC;IAED,wBAKC;IAGD;YADmB,MAAM,GAAE,MAAM;aAQhC;IA6GD,6BADY,SAAS,aAAa,QAOjC;IAGD,+BADY,SAAS,aAAa,QAOjC;IAGD,sDAGC;IAGD,wDAGC;IA5gBD,cA6BC;IA9HD,gCAEC;IAED,qBAAiB;IACjB,uBAAmB;IAiBnB,kBAHW,SAAS,gBAAgB,0BAoEnC;IAMD,mGAFmD,IAAI,QAItD;IAKC,OADW,CAAC,CACoB;IAEhC;YADkB,MAAM;MACW;IAEnC,wBADoB,gBAAgB,gBAAW,SAAS,OAAO,KAAK,IAAI,EAC1C;IAE9B;YADkB,MAAM,GAAE,GAAG;MACC;IAC9B,kBAAwB;IAExB,qBAAwB;IAExB,sBAAyB;IAEzB,wBAA0B;IAE1B,0BAA6B;IAE7B,iBAAoB;IAEpB,6BAAgC;IAEhC,kBAAqB;IAErB,mBAAsB;IAEtB,4BAA8B;IAIhC,0BAMC;IAGD,yBAEC;IAGD,sBASC;IAGD,4BAKC;IAGD,6BAEC;IAiDD,gEAH4B,IAAI,wBAmB/B;IAGD,2BAGC;IAGD,uBAGC;IAQD,6EAGC;IAMD,UAHW,QAAQ,CAAC,CAAC,2BAOpB;IAGD,WAgBC;IAMD,YAHW,QAAQ,CAAC,CAAC,mCAcpB;IAMD,8BAgBC;IAdG,4CASE;IAqEF,0BAAwC;IAoB1C,uBAAyB;IAG3B,0BAEC;IAED,wBAAoB;IAEpB,6BA0BC;IA+CD,oEAeC;IAMD,yDAiBC;IAYD,0BAME;IAMF,0CAFW,GAAG,QAab;IAED,yBAGC;IAOD,8EAmBC;;CA+BF;;oBAppBmB,iBAAiB;mBAFlB,aAAa"}
@@ -1,6 +1,6 @@
1
1
  export function css(parts: TemplateStringsArray, ...props: any[]): CSSStyleSheet;
2
2
  export namespace css {
3
- const processors: ((cssTxt: string) => string)[];
3
+ let processors: ((cssTxt: string) => string)[];
4
4
  function clearProcessors(): void;
5
5
  function useProcessor(...args: ((cssTxt: string) => string)[]): typeof css;
6
6
  }