@joist/element 3.1.2 → 3.2.1

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": "@joist/element",
3
- "version": "3.1.2",
3
+ "version": "3.2.1",
4
4
  "type": "module",
5
5
  "main": "./target/lib.js",
6
6
  "module": "./target/lib.js",
package/src/lib/attr.ts CHANGED
@@ -4,49 +4,43 @@ export function attr<This extends HTMLElement>(
4
4
  { get, set }: ClassAccessorDecoratorTarget<This, unknown>,
5
5
  ctx: ClassAccessorDecoratorContext<This>
6
6
  ): ClassAccessorDecoratorResult<This, any> {
7
+ const name = String(ctx.name);
7
8
  const meta = metadataStore.read(ctx.metadata);
8
- meta.attrs.push(String(ctx.name));
9
+ meta.attrs.push(name);
9
10
 
10
11
  return {
11
12
  set(value: unknown) {
12
- if (typeof ctx.name === 'string') {
13
- if (typeof value === 'boolean') {
14
- if (value) {
15
- this.setAttribute(ctx.name, '');
16
- } else {
17
- this.removeAttribute(ctx.name);
18
- }
19
- } else {
20
- this.setAttribute(ctx.name, String(value));
21
- }
13
+ if (value === true) {
14
+ this.setAttribute(name, '');
15
+ } else if (value === false) {
16
+ this.removeAttribute(name);
17
+ } else {
18
+ this.setAttribute(name, String(value));
22
19
  }
23
20
 
24
- return set.call(this, value);
21
+ set.call(this, value);
25
22
  },
26
23
  get() {
27
24
  const ogValue = get.call(this);
25
+ const attr = this.getAttribute(name);
28
26
 
29
- if (typeof ctx.name === 'string') {
30
- const attr = this.getAttribute(ctx.name);
31
-
32
- if (attr !== null) {
33
- // treat as boolean
34
- if (attr === '') {
35
- return true;
36
- }
37
-
38
- // treat as number
39
- if (typeof ogValue === 'number') {
40
- return Number(attr);
41
- }
27
+ if (attr !== null) {
28
+ // treat as boolean
29
+ if (attr === '') {
30
+ return true;
31
+ }
42
32
 
43
- // treat as string
44
- return attr;
33
+ // treat as number
34
+ if (typeof ogValue === 'number') {
35
+ return Number(attr);
45
36
  }
37
+
38
+ // treat as string
39
+ return attr;
46
40
  }
47
41
 
48
42
  // no readable value return original
49
43
  return ogValue;
50
- },
44
+ }
51
45
  };
52
46
  }
@@ -19,6 +19,15 @@ export function element<Target extends CustomElementConstructor>(
19
19
  return class JoistElement extends Base {
20
20
  // make all attrs observable
21
21
  static observedAttributes = [...meta.attrs];
22
+ constructor(...args: any[]) {
23
+ super(...args);
24
+
25
+ const root = this.shadowRoot || this;
26
+
27
+ for (let [event, listener] of meta.listeners) {
28
+ root.addEventListener(event, listener.bind(this));
29
+ }
30
+ }
22
31
 
23
32
  connectedCallback() {
24
33
  for (let attr of meta.attrs) {
package/src/lib/listen.ts CHANGED
@@ -1,14 +1,9 @@
1
- export function listen<This extends HTMLElement>(
2
- event: string,
3
- root: (el: This) => ShadowRoot | This = (el) => el.shadowRoot || el
4
- ) {
1
+ import { metadataStore } from './metadata.js';
2
+
3
+ export function listen<This extends HTMLElement>(event: string) {
5
4
  return (value: (e: Event) => void, ctx: ClassMethodDecoratorContext<This>) => {
6
- ctx.addInitializer(function () {
7
- // method initializers are run before fields and accessors.
8
- // we want to wait till after all have run so we can check if there is a shadowRoot or not.
9
- Promise.resolve().then(() => {
10
- root(this).addEventListener(event, value.bind(this));
11
- });
12
- });
5
+ const metadata = metadataStore.read(ctx.metadata);
6
+
7
+ metadata.listeners.set(event, value);
13
8
  };
14
9
  }
@@ -1,28 +1,19 @@
1
1
  (Symbol as any).metadata ??= Symbol('Symbol.metadata');
2
2
 
3
- export abstract class MetadataStore<T> {
4
- #data = new WeakMap<object, T>();
5
-
6
- read<T extends object>(value: T) {
7
- if (!this.#data.has(value)) {
8
- this.#data.set(value, this.init());
9
- }
10
-
11
- return this.#data.get(value)!;
12
- }
13
-
14
- abstract init(): T;
15
- }
16
-
17
3
  export class ElementMetadata {
18
4
  attrs: string[] = [];
19
5
  tagName?: (val: any) => string;
6
+ listeners = new Map<string, (e: Event) => void>();
20
7
  }
21
8
 
22
- export class ElementMetadataStore extends MetadataStore<ElementMetadata> {
23
- init() {
24
- return new ElementMetadata();
9
+ export class MetadataStore extends WeakMap<object, ElementMetadata> {
10
+ read(value: object) {
11
+ if (!this.has(value)) {
12
+ this.set(value, new ElementMetadata());
13
+ }
14
+
15
+ return this.get(value)!;
25
16
  }
26
17
  }
27
18
 
28
- export const metadataStore = new ElementMetadataStore();
19
+ export const metadataStore = new MetadataStore();
@@ -1,40 +1,35 @@
1
1
  import { metadataStore } from './metadata.js';
2
2
  export function attr({ get, set }, ctx) {
3
+ const name = String(ctx.name);
3
4
  const meta = metadataStore.read(ctx.metadata);
4
- meta.attrs.push(String(ctx.name));
5
+ meta.attrs.push(name);
5
6
  return {
6
7
  set(value) {
7
- if (typeof ctx.name === 'string') {
8
- if (typeof value === 'boolean') {
9
- if (value) {
10
- this.setAttribute(ctx.name, '');
11
- }
12
- else {
13
- this.removeAttribute(ctx.name);
14
- }
15
- }
16
- else {
17
- this.setAttribute(ctx.name, String(value));
18
- }
8
+ if (value === true) {
9
+ this.setAttribute(name, '');
10
+ }
11
+ else if (value === false) {
12
+ this.removeAttribute(name);
19
13
  }
20
- return set.call(this, value);
14
+ else {
15
+ this.setAttribute(name, String(value));
16
+ }
17
+ set.call(this, value);
21
18
  },
22
19
  get() {
23
20
  const ogValue = get.call(this);
24
- if (typeof ctx.name === 'string') {
25
- const attr = this.getAttribute(ctx.name);
26
- if (attr !== null) {
27
- if (attr === '') {
28
- return true;
29
- }
30
- if (typeof ogValue === 'number') {
31
- return Number(attr);
32
- }
33
- return attr;
21
+ const attr = this.getAttribute(name);
22
+ if (attr !== null) {
23
+ if (attr === '') {
24
+ return true;
25
+ }
26
+ if (typeof ogValue === 'number') {
27
+ return Number(attr);
34
28
  }
29
+ return attr;
35
30
  }
36
31
  return ogValue;
37
- },
32
+ }
38
33
  };
39
34
  }
40
35
  //# sourceMappingURL=attr.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"attr.js","sourceRoot":"","sources":["../../src/lib/attr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,UAAU,IAAI,CAClB,EAAE,GAAG,EAAE,GAAG,EAA+C,EACzD,GAAwC;IAExC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAElC,OAAO;QACL,GAAG,CAAC,KAAc;YAChB,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACjC,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC/B,IAAI,KAAK,EAAE,CAAC;wBACV,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAClC,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACjC,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;YAED,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC;QACD,GAAG;YACD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE/B,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAEzC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAElB,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;wBAChB,OAAO,IAAI,CAAC;oBACd,CAAC;oBAGD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;wBAChC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;oBACtB,CAAC;oBAGD,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YAGD,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"attr.js","sourceRoot":"","sources":["../../src/lib/attr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,UAAU,IAAI,CAClB,EAAE,GAAG,EAAE,GAAG,EAA+C,EACzD,GAAwC;IAExC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEtB,OAAO;QACL,GAAG,CAAC,KAAc;YAChB,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC9B,CAAC;iBAAM,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;gBAC3B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACzC,CAAC;YAED,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxB,CAAC;QACD,GAAG;YACD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAErC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAElB,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;oBAChB,OAAO,IAAI,CAAC;gBACd,CAAC;gBAGD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;oBAChC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;gBACtB,CAAC;gBAGD,OAAO,IAAI,CAAC;YACd,CAAC;YAGD,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export declare function element<Target extends CustomElementConstructor>(Base: Target, ctx: ClassDecoratorContext<Target>): {
2
- new (...params: any[]): {
2
+ new (...args: any[]): {
3
3
  connectedCallback(): void;
4
4
  accessKey: string;
5
5
  readonly accessKeyLabel: string;
@@ -191,7 +191,7 @@ export declare function element<Target extends CustomElementConstructor>(Base: T
191
191
  ariaValueNow: string | null;
192
192
  ariaValueText: string | null;
193
193
  role: string | null;
194
- animate(keyframes: Keyframe[] | PropertyIndexedKeyframes | null, options?: number | KeyframeAnimationOptions | undefined): Animation;
194
+ animate(keyframes: PropertyIndexedKeyframes | Keyframe[] | null, options?: number | KeyframeAnimationOptions | undefined): Animation;
195
195
  getAnimations(options?: GetAnimationsOptions | undefined): Animation[];
196
196
  after(...nodes: (string | Node)[]): void;
197
197
  before(...nodes: (string | Node)[]): void;
@@ -11,6 +11,13 @@ export function element(Base, ctx) {
11
11
  });
12
12
  return class JoistElement extends Base {
13
13
  static observedAttributes = [...meta.attrs];
14
+ constructor(...args) {
15
+ super(...args);
16
+ const root = this.shadowRoot || this;
17
+ for (let [event, listener] of meta.listeners) {
18
+ root.addEventListener(event, listener.bind(this));
19
+ }
20
+ }
14
21
  connectedCallback() {
15
22
  for (let attr of meta.attrs) {
16
23
  const value = Reflect.get(this, attr);
@@ -1 +1 @@
1
- {"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/lib/element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,UAAU,OAAO,CACrB,IAAY,EACZ,GAAkC;IAElC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE9C,GAAG,CAAC,cAAc,CAAC;QACjB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE/B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,YAAa,SAAQ,IAAI;QAEpC,MAAM,CAAC,kBAAkB,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAE5C,iBAAiB;YACf,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAGtC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;oBAC1D,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;wBAC/B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;4BAEnB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;wBAC9B,CAAC;oBACH,CAAC;yBAAM,CAAC;wBAEN,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;oBACzC,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/lib/element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,UAAU,OAAO,CACrB,IAAY,EACZ,GAAkC;IAElC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE9C,GAAG,CAAC,cAAc,CAAC;QACjB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE/B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,YAAa,SAAQ,IAAI;QAEpC,MAAM,CAAC,kBAAkB,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YAEf,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;YAErC,KAAK,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC7C,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,iBAAiB;YACf,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAGtC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;oBAC1D,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;wBAC/B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;4BAEnB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;wBAC9B,CAAC;oBACH,CAAC;yBAAM,CAAC;wBAEN,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;oBACzC,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- export declare function listen<This extends HTMLElement>(event: string, root?: (el: This) => ShadowRoot | This): (value: (e: Event) => void, ctx: ClassMethodDecoratorContext<This>) => void;
1
+ export declare function listen<This extends HTMLElement>(event: string): (value: (e: Event) => void, ctx: ClassMethodDecoratorContext<This>) => void;
@@ -1,10 +1,8 @@
1
- export function listen(event, root = (el) => el.shadowRoot || el) {
1
+ import { metadataStore } from './metadata.js';
2
+ export function listen(event) {
2
3
  return (value, ctx) => {
3
- ctx.addInitializer(function () {
4
- Promise.resolve().then(() => {
5
- root(this).addEventListener(event, value.bind(this));
6
- });
7
- });
4
+ const metadata = metadataStore.read(ctx.metadata);
5
+ metadata.listeners.set(event, value);
8
6
  };
9
7
  }
10
8
  //# sourceMappingURL=listen.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"listen.js","sourceRoot":"","sources":["../../src/lib/listen.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,MAAM,CACpB,KAAa,EACb,OAAwC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,IAAI,EAAE;IAEnE,OAAO,CAAC,KAAyB,EAAE,GAAsC,EAAE,EAAE;QAC3E,GAAG,CAAC,cAAc,CAAC;YAGjB,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC1B,IAAI,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"listen.js","sourceRoot":"","sources":["../../src/lib/listen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,UAAU,MAAM,CAA2B,KAAa;IAC5D,OAAO,CAAC,KAAyB,EAAE,GAAsC,EAAE,EAAE;QAC3E,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAElD,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC;AACJ,CAAC"}
@@ -1,13 +1,9 @@
1
- export declare abstract class MetadataStore<T> {
2
- #private;
3
- read<T extends object>(value: T): NonNullable<T_1>;
4
- abstract init(): T;
5
- }
6
1
  export declare class ElementMetadata {
7
2
  attrs: string[];
8
3
  tagName?: (val: any) => string;
4
+ listeners: Map<string, (e: Event) => void>;
9
5
  }
10
- export declare class ElementMetadataStore extends MetadataStore<ElementMetadata> {
11
- init(): ElementMetadata;
6
+ export declare class MetadataStore extends WeakMap<object, ElementMetadata> {
7
+ read(value: object): ElementMetadata;
12
8
  }
13
- export declare const metadataStore: ElementMetadataStore;
9
+ export declare const metadataStore: MetadataStore;
@@ -1,21 +1,16 @@
1
1
  Symbol.metadata ??= Symbol('Symbol.metadata');
2
- export class MetadataStore {
3
- #data = new WeakMap();
4
- read(value) {
5
- if (!this.#data.has(value)) {
6
- this.#data.set(value, this.init());
7
- }
8
- return this.#data.get(value);
9
- }
10
- }
11
2
  export class ElementMetadata {
12
3
  attrs = [];
13
4
  tagName;
5
+ listeners = new Map();
14
6
  }
15
- export class ElementMetadataStore extends MetadataStore {
16
- init() {
17
- return new ElementMetadata();
7
+ export class MetadataStore extends WeakMap {
8
+ read(value) {
9
+ if (!this.has(value)) {
10
+ this.set(value, new ElementMetadata());
11
+ }
12
+ return this.get(value);
18
13
  }
19
14
  }
20
- export const metadataStore = new ElementMetadataStore();
15
+ export const metadataStore = new MetadataStore();
21
16
  //# sourceMappingURL=metadata.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/lib/metadata.ts"],"names":[],"mappings":"AAAC,MAAc,CAAC,QAAQ,KAAK,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAEvD,MAAM,OAAgB,aAAa;IACjC,KAAK,GAAG,IAAI,OAAO,EAAa,CAAC;IAEjC,IAAI,CAAmB,KAAQ;QAC7B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACrC,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;IAChC,CAAC;CAGF;AAED,MAAM,OAAO,eAAe;IAC1B,KAAK,GAAa,EAAE,CAAC;IACrB,OAAO,CAAwB;CAChC;AAED,MAAM,OAAO,oBAAqB,SAAQ,aAA8B;IACtE,IAAI;QACF,OAAO,IAAI,eAAe,EAAE,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/lib/metadata.ts"],"names":[],"mappings":"AAAC,MAAc,CAAC,QAAQ,KAAK,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAEvD,MAAM,OAAO,eAAe;IAC1B,KAAK,GAAa,EAAE,CAAC;IACrB,OAAO,CAAwB;IAC/B,SAAS,GAAG,IAAI,GAAG,EAA8B,CAAC;CACnD;AAED,MAAM,OAAO,aAAc,SAAQ,OAAgC;IACjE,IAAI,CAAC,KAAa;QAChB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,eAAe,EAAE,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC"}