@joist/observable 3.1.0 → 3.1.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joist/observable",
3
- "version": "3.1.0",
3
+ "version": "3.1.2",
4
4
  "type": "module",
5
5
  "main": "./target/lib.js",
6
6
  "module": "./target/lib.js",
@@ -46,7 +46,8 @@
46
46
  "clean": "if-file-deleted",
47
47
  "files": [
48
48
  "src/**",
49
- "tsconfig.json"
49
+ "tsconfig.json",
50
+ "../../tsconfig.json"
50
51
  ],
51
52
  "output": [
52
53
  "target/**",
@@ -1,21 +1,20 @@
1
1
  import { expect } from '@open-wc/testing';
2
- import { MetaData } from './meta.js';
2
+ import { ObservableInstanceMetaDataStore } from './metadata.js';
3
3
 
4
4
  describe('meta:meta', () => {
5
5
  it('should return default metadata', () => {
6
6
  const key = {};
7
- const data = new MetaData().read(key);
7
+ const data = new ObservableInstanceMetaDataStore().read(key);
8
8
 
9
9
  expect(data).to.deep.equal({
10
10
  changes: new Set(),
11
- upgradable: new Map(),
12
11
  scheduler: null,
13
12
  });
14
13
  });
15
14
 
16
15
  it('should return the same metadata object after init', () => {
17
16
  const key = {};
18
- const data = new MetaData();
17
+ const data = new ObservableInstanceMetaDataStore();
19
18
 
20
19
  expect(data.read(key)).to.equal(data.read(key));
21
20
  });
@@ -0,0 +1,45 @@
1
+ (Symbol as any).metadata ??= Symbol('Symbol.metadata');
2
+
3
+ export type EffectFn = (changes: Set<string | symbol>) => void;
4
+
5
+ export abstract class MetadataStore<Metadata> {
6
+ #data = new WeakMap<object, Metadata>();
7
+
8
+ read<T extends object>(value: T): Metadata {
9
+ let data = this.#data.get(value);
10
+
11
+ if (!data) {
12
+ data = this.init();
13
+
14
+ this.#data.set(value, data);
15
+ }
16
+
17
+ return data;
18
+ }
19
+
20
+ abstract init(): Metadata;
21
+ }
22
+
23
+ export class ObservableInstanceMetadata {
24
+ scheduler: Promise<void> | null = null;
25
+ changes = new Set<string | symbol>();
26
+ }
27
+
28
+ export class ObservableInstanceMetaDataStore extends MetadataStore<ObservableInstanceMetadata> {
29
+ init() {
30
+ return new ObservableInstanceMetadata();
31
+ }
32
+ }
33
+
34
+ export class ObservableMetadata {
35
+ effects: Set<EffectFn> = new Set();
36
+ }
37
+
38
+ export class ObservableMetadataStore extends MetadataStore<ObservableMetadata> {
39
+ init() {
40
+ return new ObservableMetadata();
41
+ }
42
+ }
43
+
44
+ export const instanceMetadataStore = new ObservableInstanceMetaDataStore();
45
+ export const observableMetadataStore = new ObservableMetadataStore();
@@ -98,9 +98,11 @@ describe('observable: observe()', () => {
98
98
  fixture<any>(html`<observable-1></observable-1>`).then((el) => {
99
99
  el.value = 100;
100
100
 
101
- customElements.define('observable-1', Counter);
101
+ customElements.whenDefined('observable-1').then(() => {
102
+ el.value++;
103
+ });
102
104
 
103
- el.value++;
105
+ customElements.define('observable-1', Counter);
104
106
  });
105
107
  });
106
108
  });
@@ -1,76 +1,51 @@
1
- // ensure that the metadata symbol exists
2
- (Symbol as any).metadata ??= Symbol('Symbol.metadata');
3
-
4
- import { EffectFn, MetaData } from './meta.js';
5
-
6
- const metaData = new MetaData();
7
-
8
- export interface ObservableCtx {
9
- metadata: {
10
- effects?: Set<EffectFn>;
11
- };
12
- }
1
+ import { EffectFn, instanceMetadataStore, observableMetadataStore } from './metadata.js';
13
2
 
14
3
  export function observe<This extends object, Value>(
15
4
  base: ClassAccessorDecoratorTarget<This, Value>,
16
- ctx: ClassAccessorDecoratorContext<This, Value> & ObservableCtx
5
+ ctx: ClassAccessorDecoratorContext<This, Value>
17
6
  ): ClassAccessorDecoratorResult<This, Value> {
18
- // handle upgradable values (specifically custom elements)
19
- ctx.addInitializer(function (this: This) {
20
- const meta = metaData.read(this);
21
-
22
- let value: Value | undefined;
23
-
24
- // attempt to read value.
25
- try {
26
- value = ctx.access.get(this);
27
- } catch {}
28
-
29
- if (value) {
30
- // if there is a value, delete it and cache it for init
31
- delete (<any>this)[ctx.name];
32
-
33
- meta.upgradable.set(ctx.name, value);
34
- }
35
- });
36
-
37
7
  return {
38
8
  init(value) {
39
- const meta = metaData.read(this);
9
+ let val: Value | null = null;
40
10
 
41
- if (meta.upgradable.has(ctx.name)) {
42
- return meta.upgradable.get(ctx.name) as Value;
11
+ // START: Make upgradable custom elements work
12
+ try {
13
+ val = ctx.access.get(this);
14
+ } catch {}
15
+
16
+ if (val) {
17
+ delete (<any>this)[ctx.name];
18
+
19
+ return val;
43
20
  }
21
+ // END
44
22
 
45
23
  return value;
46
24
  },
47
25
  set(value) {
48
- const meta = metaData.read(this);
26
+ const instanceMeta = instanceMetadataStore.read(this);
27
+ const observableMeta = observableMetadataStore.read(ctx.metadata);
49
28
 
50
- if (meta.scheduler === null) {
51
- meta.scheduler = Promise.resolve().then(() => {
52
- if (ctx.metadata.effects) {
53
- for (let effect of ctx.metadata.effects) {
54
- effect.call(this, meta.changes);
55
- }
29
+ if (instanceMeta.scheduler === null) {
30
+ instanceMeta.scheduler = Promise.resolve().then(() => {
31
+ for (let effect of observableMeta.effects) {
32
+ effect.call(this, instanceMeta.changes);
56
33
  }
57
34
 
58
- meta.scheduler = null;
59
- meta.changes.clear();
35
+ instanceMeta.scheduler = null;
36
+ instanceMeta.changes.clear();
60
37
  });
61
38
  }
62
39
 
63
- meta.changes.add(ctx.name);
40
+ instanceMeta.changes.add(ctx.name);
64
41
 
65
42
  base.set.call(this, value);
66
43
  },
67
44
  };
68
45
  }
69
46
 
70
- export function effect<T extends object>(
71
- value: EffectFn,
72
- ctx: ClassMethodDecoratorContext<T> & ObservableCtx
73
- ) {
74
- ctx.metadata.effects ??= new Set();
75
- ctx.metadata.effects.add(value);
47
+ export function effect<T extends object>(value: EffectFn, ctx: ClassMethodDecoratorContext<T>) {
48
+ const data = observableMetadataStore.read(ctx.metadata);
49
+
50
+ data.effects.add(value);
76
51
  }
@@ -0,0 +1,24 @@
1
+ import { expect } from '@open-wc/testing';
2
+
3
+ import { observe } from './observe.js';
4
+ import { watch } from './watch.js';
5
+
6
+ describe('observable: observe()', () => {
7
+ it('should watch externally from the class', (done) => {
8
+ class Counter {
9
+ @observe static accessor value = 0;
10
+ }
11
+
12
+ watch(Counter, () => {
13
+ expect(Counter.value).to.equal(1);
14
+
15
+ done();
16
+ });
17
+
18
+ expect(Counter.value).to.equal(0);
19
+
20
+ Counter.value++;
21
+
22
+ expect(Counter.value).to.equal(1);
23
+ });
24
+ });
@@ -0,0 +1,11 @@
1
+ import { EffectFn, observableMetadataStore } from './metadata.js';
2
+
3
+ export function watch(value: new () => object, cb: EffectFn) {
4
+ const key = value[Symbol.metadata];
5
+
6
+ if (key) {
7
+ const meta = observableMetadataStore.read(key);
8
+
9
+ meta.effects.add(cb);
10
+ }
11
+ }
@@ -0,0 +1,21 @@
1
+ export type EffectFn = (changes: Set<string | symbol>) => void;
2
+ export declare abstract class MetadataStore<Metadata> {
3
+ #private;
4
+ read<T extends object>(value: T): Metadata;
5
+ abstract init(): Metadata;
6
+ }
7
+ export declare class ObservableInstanceMetadata {
8
+ scheduler: Promise<void> | null;
9
+ changes: Set<string | symbol>;
10
+ }
11
+ export declare class ObservableInstanceMetaDataStore extends MetadataStore<ObservableInstanceMetadata> {
12
+ init(): ObservableInstanceMetadata;
13
+ }
14
+ export declare class ObservableMetadata {
15
+ effects: Set<EffectFn>;
16
+ }
17
+ export declare class ObservableMetadataStore extends MetadataStore<ObservableMetadata> {
18
+ init(): ObservableMetadata;
19
+ }
20
+ export declare const instanceMetadataStore: ObservableInstanceMetaDataStore;
21
+ export declare const observableMetadataStore: ObservableMetadataStore;
@@ -0,0 +1,32 @@
1
+ Symbol.metadata ??= Symbol('Symbol.metadata');
2
+ export class MetadataStore {
3
+ #data = new WeakMap();
4
+ read(value) {
5
+ let data = this.#data.get(value);
6
+ if (!data) {
7
+ data = this.init();
8
+ this.#data.set(value, data);
9
+ }
10
+ return data;
11
+ }
12
+ }
13
+ export class ObservableInstanceMetadata {
14
+ scheduler = null;
15
+ changes = new Set();
16
+ }
17
+ export class ObservableInstanceMetaDataStore extends MetadataStore {
18
+ init() {
19
+ return new ObservableInstanceMetadata();
20
+ }
21
+ }
22
+ export class ObservableMetadata {
23
+ effects = new Set();
24
+ }
25
+ export class ObservableMetadataStore extends MetadataStore {
26
+ init() {
27
+ return new ObservableMetadata();
28
+ }
29
+ }
30
+ export const instanceMetadataStore = new ObservableInstanceMetaDataStore();
31
+ export const observableMetadataStore = new ObservableMetadataStore();
32
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +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;AAIvD,MAAM,OAAgB,aAAa;IACjC,KAAK,GAAG,IAAI,OAAO,EAAoB,CAAC;IAExC,IAAI,CAAmB,KAAQ;QAC7B,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAEjC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAEnB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CAGF;AAED,MAAM,OAAO,0BAA0B;IACrC,SAAS,GAAyB,IAAI,CAAC;IACvC,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;CACtC;AAED,MAAM,OAAO,+BAAgC,SAAQ,aAAyC;IAC5F,IAAI;QACF,OAAO,IAAI,0BAA0B,EAAE,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,OAAO,kBAAkB;IAC7B,OAAO,GAAkB,IAAI,GAAG,EAAE,CAAC;CACpC;AAED,MAAM,OAAO,uBAAwB,SAAQ,aAAiC;IAC5E,IAAI;QACF,OAAO,IAAI,kBAAkB,EAAE,CAAC;IAClC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,+BAA+B,EAAE,CAAC;AAC3E,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,uBAAuB,EAAE,CAAC"}
@@ -1,19 +1,18 @@
1
1
  import { expect } from '@open-wc/testing';
2
- import { MetaData } from './meta.js';
2
+ import { ObservableInstanceMetaDataStore } from './metadata.js';
3
3
  describe('meta:meta', () => {
4
4
  it('should return default metadata', () => {
5
5
  const key = {};
6
- const data = new MetaData().read(key);
6
+ const data = new ObservableInstanceMetaDataStore().read(key);
7
7
  expect(data).to.deep.equal({
8
8
  changes: new Set(),
9
- upgradable: new Map(),
10
9
  scheduler: null,
11
10
  });
12
11
  });
13
12
  it('should return the same metadata object after init', () => {
14
13
  const key = {};
15
- const data = new MetaData();
14
+ const data = new ObservableInstanceMetaDataStore();
16
15
  expect(data.read(key)).to.equal(data.read(key));
17
16
  });
18
17
  });
19
- //# sourceMappingURL=meta.test.js.map
18
+ //# sourceMappingURL=metadata.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.test.js","sourceRoot":"","sources":["../../src/lib/metadata.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAC;AAEhE,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,IAAI,+BAA+B,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE7D,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YACzB,OAAO,EAAE,IAAI,GAAG,EAAE;YAClB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,IAAI,+BAA+B,EAAE,CAAC;QAEnD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,8 +1,3 @@
1
- import { EffectFn } from './meta.js';
2
- export interface ObservableCtx {
3
- metadata: {
4
- effects?: Set<EffectFn>;
5
- };
6
- }
7
- export declare function observe<This extends object, Value>(base: ClassAccessorDecoratorTarget<This, Value>, ctx: ClassAccessorDecoratorContext<This, Value> & ObservableCtx): ClassAccessorDecoratorResult<This, Value>;
8
- export declare function effect<T extends object>(value: EffectFn, ctx: ClassMethodDecoratorContext<T> & ObservableCtx): void;
1
+ import { EffectFn } from './metadata.js';
2
+ export declare function observe<This extends object, Value>(base: ClassAccessorDecoratorTarget<This, Value>, ctx: ClassAccessorDecoratorContext<This, Value>): ClassAccessorDecoratorResult<This, Value>;
3
+ export declare function effect<T extends object>(value: EffectFn, ctx: ClassMethodDecoratorContext<T>): void;
@@ -1,47 +1,37 @@
1
- Symbol.metadata ??= Symbol('Symbol.metadata');
2
- import { MetaData } from './meta.js';
3
- const metaData = new MetaData();
1
+ import { instanceMetadataStore, observableMetadataStore } from './metadata.js';
4
2
  export function observe(base, ctx) {
5
- ctx.addInitializer(function () {
6
- const meta = metaData.read(this);
7
- let value;
8
- try {
9
- value = ctx.access.get(this);
10
- }
11
- catch { }
12
- if (value) {
13
- delete this[ctx.name];
14
- meta.upgradable.set(ctx.name, value);
15
- }
16
- });
17
3
  return {
18
4
  init(value) {
19
- const meta = metaData.read(this);
20
- if (meta.upgradable.has(ctx.name)) {
21
- return meta.upgradable.get(ctx.name);
5
+ let val = null;
6
+ try {
7
+ val = ctx.access.get(this);
8
+ }
9
+ catch { }
10
+ if (val) {
11
+ delete this[ctx.name];
12
+ return val;
22
13
  }
23
14
  return value;
24
15
  },
25
16
  set(value) {
26
- const meta = metaData.read(this);
27
- if (meta.scheduler === null) {
28
- meta.scheduler = Promise.resolve().then(() => {
29
- if (ctx.metadata.effects) {
30
- for (let effect of ctx.metadata.effects) {
31
- effect.call(this, meta.changes);
32
- }
17
+ const instanceMeta = instanceMetadataStore.read(this);
18
+ const observableMeta = observableMetadataStore.read(ctx.metadata);
19
+ if (instanceMeta.scheduler === null) {
20
+ instanceMeta.scheduler = Promise.resolve().then(() => {
21
+ for (let effect of observableMeta.effects) {
22
+ effect.call(this, instanceMeta.changes);
33
23
  }
34
- meta.scheduler = null;
35
- meta.changes.clear();
24
+ instanceMeta.scheduler = null;
25
+ instanceMeta.changes.clear();
36
26
  });
37
27
  }
38
- meta.changes.add(ctx.name);
28
+ instanceMeta.changes.add(ctx.name);
39
29
  base.set.call(this, value);
40
30
  },
41
31
  };
42
32
  }
43
33
  export function effect(value, ctx) {
44
- ctx.metadata.effects ??= new Set();
45
- ctx.metadata.effects.add(value);
34
+ const data = observableMetadataStore.read(ctx.metadata);
35
+ data.effects.add(value);
46
36
  }
47
37
  //# sourceMappingURL=observe.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"observe.js","sourceRoot":"","sources":["../../src/lib/observe.ts"],"names":[],"mappings":"AACC,MAAc,CAAC,QAAQ,KAAK,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAEvD,OAAO,EAAY,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;AAQhC,MAAM,UAAU,OAAO,CACrB,IAA+C,EAC/C,GAA+D;IAG/D,GAAG,CAAC,cAAc,CAAC;QACjB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjC,IAAI,KAAwB,CAAC;QAG7B,IAAI,CAAC;YACH,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QAEV,IAAI,KAAK,EAAE,CAAC;YAEV,OAAa,IAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAE7B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,CAAC,KAAK;YACR,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEjC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAU,CAAC;YAChD,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QACD,GAAG,CAAC,KAAK;YACP,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEjC,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBAC5B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;oBAC3C,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;wBACzB,KAAK,IAAI,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;4BACxC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;wBAClC,CAAC;oBACH,CAAC;oBAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;oBACtB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACvB,CAAC,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAE3B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,MAAM,CACpB,KAAe,EACf,GAAmD;IAEnD,GAAG,CAAC,QAAQ,CAAC,OAAO,KAAK,IAAI,GAAG,EAAE,CAAC;IACnC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"observe.js","sourceRoot":"","sources":["../../src/lib/observe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAEzF,MAAM,UAAU,OAAO,CACrB,IAA+C,EAC/C,GAA+C;IAE/C,OAAO;QACL,IAAI,CAAC,KAAK;YACR,IAAI,GAAG,GAAiB,IAAI,CAAC;YAG7B,IAAI,CAAC;gBACH,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YAEV,IAAI,GAAG,EAAE,CAAC;gBACR,OAAa,IAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAE7B,OAAO,GAAG,CAAC;YACb,CAAC;YAGD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,GAAG,CAAC,KAAK;YACP,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtD,MAAM,cAAc,GAAG,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAElE,IAAI,YAAY,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBACpC,YAAY,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;oBACnD,KAAK,IAAI,MAAM,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;wBAC1C,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;oBAC1C,CAAC;oBAED,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC;oBAC9B,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC/B,CAAC,CAAC,CAAC;YACL,CAAC;YAED,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAEnC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,MAAM,CAAmB,KAAe,EAAE,GAAmC;IAC3F,MAAM,IAAI,GAAG,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAExD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC"}
@@ -7,24 +7,27 @@ describe('observable: observe()', () => {
7
7
  let _staticExtraInitializers = [];
8
8
  let _static_value_decorators;
9
9
  let _static_value_initializers = [];
10
+ let _static_value_extraInitializers = [];
10
11
  let _static_onPropChanged_decorators;
11
12
  return class Counter {
12
13
  static {
13
14
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
14
15
  _static_value_decorators = [observe];
15
16
  _static_onPropChanged_decorators = [effect];
16
- __esDecorate(this, null, _static_value_decorators, { kind: "accessor", name: "value", static: true, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _static_value_initializers, _staticExtraInitializers);
17
+ __esDecorate(this, null, _static_value_decorators, { kind: "accessor", name: "value", static: true, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _static_value_initializers, _static_value_extraInitializers);
17
18
  __esDecorate(this, null, _static_onPropChanged_decorators, { kind: "method", name: "onPropChanged", static: true, private: false, access: { has: obj => "onPropChanged" in obj, get: obj => obj.onPropChanged }, metadata: _metadata }, null, _staticExtraInitializers);
18
19
  if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
19
- __runInitializers(this, _staticExtraInitializers);
20
20
  }
21
- static #value_accessor_storage = __runInitializers(this, _static_value_initializers, 0);
21
+ static #value_accessor_storage = (__runInitializers(this, _staticExtraInitializers), __runInitializers(this, _static_value_initializers, 0));
22
22
  static get value() { return Counter.#value_accessor_storage; }
23
23
  static set value(value) { Counter.#value_accessor_storage = value; }
24
24
  static onPropChanged() {
25
25
  expect(Counter.value).to.equal(1);
26
26
  done();
27
27
  }
28
+ static {
29
+ __runInitializers(this, _static_value_extraInitializers);
30
+ }
28
31
  };
29
32
  })();
30
33
  expect(Counter.value).to.equal(0);
@@ -36,6 +39,7 @@ describe('observable: observe()', () => {
36
39
  let _instanceExtraInitializers = [];
37
40
  let _value_decorators;
38
41
  let _value_initializers = [];
42
+ let _value_extraInitializers = [];
39
43
  let _private_onChange_decorators;
40
44
  let _private_onChange_descriptor;
41
45
  return class Counter {
@@ -43,7 +47,7 @@ describe('observable: observe()', () => {
43
47
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
44
48
  _value_decorators = [observe];
45
49
  _private_onChange_decorators = [effect];
46
- __esDecorate(this, null, _value_decorators, { kind: "accessor", name: "value", static: false, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _value_initializers, _instanceExtraInitializers);
50
+ __esDecorate(this, null, _value_decorators, { kind: "accessor", name: "value", static: false, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _value_initializers, _value_extraInitializers);
47
51
  __esDecorate(this, _private_onChange_descriptor = { value: __setFunctionName(function () {
48
52
  expect(this.value).to.equal(1);
49
53
  done();
@@ -54,6 +58,9 @@ describe('observable: observe()', () => {
54
58
  get value() { return this.#value_accessor_storage; }
55
59
  set value(value) { this.#value_accessor_storage = value; }
56
60
  get #onChange() { return _private_onChange_descriptor.value; }
61
+ constructor() {
62
+ __runInitializers(this, _value_extraInitializers);
63
+ }
57
64
  };
58
65
  })();
59
66
  const counter = new Counter();
@@ -66,13 +73,14 @@ describe('observable: observe()', () => {
66
73
  let _instanceExtraInitializers = [];
67
74
  let _value_decorators;
68
75
  let _value_initializers = [];
76
+ let _value_extraInitializers = [];
69
77
  let _onChange_decorators;
70
78
  return class Counter {
71
79
  static {
72
80
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
73
81
  _value_decorators = [observe];
74
82
  _onChange_decorators = [effect];
75
- __esDecorate(this, null, _value_decorators, { kind: "accessor", name: "value", static: false, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _value_initializers, _instanceExtraInitializers);
83
+ __esDecorate(this, null, _value_decorators, { kind: "accessor", name: "value", static: false, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _value_initializers, _value_extraInitializers);
76
84
  __esDecorate(this, null, _onChange_decorators, { kind: "method", name: "onChange", static: false, private: false, access: { has: obj => "onChange" in obj, get: obj => obj.onChange }, metadata: _metadata }, null, _instanceExtraInitializers);
77
85
  if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
78
86
  }
@@ -83,6 +91,9 @@ describe('observable: observe()', () => {
83
91
  expect(changes.has('value')).to.be.true;
84
92
  done();
85
93
  }
94
+ constructor() {
95
+ __runInitializers(this, _value_extraInitializers);
96
+ }
86
97
  };
87
98
  })();
88
99
  const counter = new Counter();
@@ -94,13 +105,14 @@ describe('observable: observe()', () => {
94
105
  let _instanceExtraInitializers = [];
95
106
  let _value_decorators;
96
107
  let _value_initializers = [];
108
+ let _value_extraInitializers = [];
97
109
  let _onChange_decorators;
98
110
  return class Counter extends _classSuper {
99
111
  static {
100
112
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
101
113
  _value_decorators = [observe];
102
114
  _onChange_decorators = [effect];
103
- __esDecorate(this, null, _value_decorators, { kind: "accessor", name: "value", static: false, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _value_initializers, _instanceExtraInitializers);
115
+ __esDecorate(this, null, _value_decorators, { kind: "accessor", name: "value", static: false, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _value_initializers, _value_extraInitializers);
104
116
  __esDecorate(this, null, _onChange_decorators, { kind: "method", name: "onChange", static: false, private: false, access: { has: obj => "onChange" in obj, get: obj => obj.onChange }, metadata: _metadata }, null, _instanceExtraInitializers);
105
117
  if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
106
118
  }
@@ -110,6 +122,10 @@ describe('observable: observe()', () => {
110
122
  onChange() {
111
123
  this.dispatchEvent(new Event('changed'));
112
124
  }
125
+ constructor() {
126
+ super(...arguments);
127
+ __runInitializers(this, _value_extraInitializers);
128
+ }
113
129
  };
114
130
  })();
115
131
  const counter = new Counter();
@@ -125,13 +141,14 @@ describe('observable: observe()', () => {
125
141
  let _instanceExtraInitializers = [];
126
142
  let _value_decorators;
127
143
  let _value_initializers = [];
144
+ let _value_extraInitializers = [];
128
145
  let _onChange_decorators;
129
146
  return class Counter extends _classSuper {
130
147
  static {
131
148
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
132
149
  _value_decorators = [observe];
133
150
  _onChange_decorators = [effect];
134
- __esDecorate(this, null, _value_decorators, { kind: "accessor", name: "value", static: false, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _value_initializers, _instanceExtraInitializers);
151
+ __esDecorate(this, null, _value_decorators, { kind: "accessor", name: "value", static: false, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _value_initializers, _value_extraInitializers);
135
152
  __esDecorate(this, null, _onChange_decorators, { kind: "method", name: "onChange", static: false, private: false, access: { has: obj => "onChange" in obj, get: obj => obj.onChange }, metadata: _metadata }, null, _instanceExtraInitializers);
136
153
  if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
137
154
  }
@@ -140,6 +157,7 @@ describe('observable: observe()', () => {
140
157
  set value(value) { this.#value_accessor_storage = value; }
141
158
  constructor() {
142
159
  super();
160
+ __runInitializers(this, _value_extraInitializers);
143
161
  expect(this.value).to.equal(100);
144
162
  }
145
163
  onChange() {
@@ -150,8 +168,10 @@ describe('observable: observe()', () => {
150
168
  })();
151
169
  fixture(html `<observable-1></observable-1>`).then((el) => {
152
170
  el.value = 100;
171
+ customElements.whenDefined('observable-1').then(() => {
172
+ el.value++;
173
+ });
153
174
  customElements.define('observable-1', Counter);
154
- el.value++;
155
175
  });
156
176
  });
157
177
  });
@@ -1 +1 @@
1
- {"version":3,"file":"observe.test.js","sourceRoot":"","sources":["../../src/lib/observe.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"observe.test.js","sourceRoot":"","sources":["../../src/lib/observe.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { EffectFn } from './metadata.js';
2
+ export declare function watch(value: new () => object, cb: EffectFn): void;
@@ -0,0 +1,9 @@
1
+ import { observableMetadataStore } from './metadata.js';
2
+ export function watch(value, cb) {
3
+ const key = value[Symbol.metadata];
4
+ if (key) {
5
+ const meta = observableMetadataStore.read(key);
6
+ meta.effects.add(cb);
7
+ }
8
+ }
9
+ //# sourceMappingURL=watch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/lib/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAElE,MAAM,UAAU,KAAK,CAAC,KAAuB,EAAE,EAAY;IACzD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEnC,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,IAAI,GAAG,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,35 @@
1
+ import { __esDecorate, __runInitializers } from "tslib";
2
+ import { expect } from '@open-wc/testing';
3
+ import { observe } from './observe.js';
4
+ import { watch } from './watch.js';
5
+ describe('observable: observe()', () => {
6
+ it('should watch externally from the class', (done) => {
7
+ let Counter = (() => {
8
+ let _static_value_decorators;
9
+ let _static_value_initializers = [];
10
+ let _static_value_extraInitializers = [];
11
+ return class Counter {
12
+ static {
13
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
14
+ _static_value_decorators = [observe];
15
+ __esDecorate(this, null, _static_value_decorators, { kind: "accessor", name: "value", static: true, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _static_value_initializers, _static_value_extraInitializers);
16
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
17
+ }
18
+ static #value_accessor_storage = __runInitializers(this, _static_value_initializers, 0);
19
+ static get value() { return Counter.#value_accessor_storage; }
20
+ static set value(value) { Counter.#value_accessor_storage = value; }
21
+ static {
22
+ __runInitializers(this, _static_value_extraInitializers);
23
+ }
24
+ };
25
+ })();
26
+ watch(Counter, () => {
27
+ expect(Counter.value).to.equal(1);
28
+ done();
29
+ });
30
+ expect(Counter.value).to.equal(0);
31
+ Counter.value++;
32
+ expect(Counter.value).to.equal(1);
33
+ });
34
+ });
35
+ //# sourceMappingURL=watch.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.test.js","sourceRoot":"","sources":["../../src/lib/watch.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,wCAAwC,EAAE,CAAC,IAAI,EAAE,EAAE;YAC9C,OAAO;;;;yBAAP,OAAO;;;gDACV,OAAO;oBAAC,0KAAgB,KAAK,6BAAL,KAAK,mGAAK;;;gBAA1B,MAAM,+EAAkB,CAAC,EAAC;gBAA1B,MAAM,KAAU,KAAK,YAD1B,OAAO,2BACwB;gBAA1B,WAAgB,KAAK,UAD1B,OAAO,mCACwB;;;;;;QAGrC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE;YAClB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAElC,IAAI,EAAE,CAAC;QACT,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAElC,OAAO,CAAC,KAAK,EAAE,CAAC;QAEhB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/src/lib/meta.ts DELETED
@@ -1,23 +0,0 @@
1
- export type EffectFn = (changes: Set<string | symbol>) => void;
2
-
3
- export class ObservableMetaData {
4
- scheduler: Promise<void> | null = null;
5
- upgradable = new Map<string | symbol, unknown>();
6
- changes = new Set<string | symbol>();
7
- }
8
-
9
- export class MetaData {
10
- #data = new WeakMap<object, ObservableMetaData>();
11
-
12
- read<T extends object>(value: T) {
13
- if (this.#data.has(value)) {
14
- return this.#data.get(value) as ObservableMetaData;
15
- }
16
-
17
- const data = new ObservableMetaData();
18
-
19
- this.#data.set(value, data);
20
-
21
- return data;
22
- }
23
- }
@@ -1,10 +0,0 @@
1
- export type EffectFn = (changes: Set<string | symbol>) => void;
2
- export declare class ObservableMetaData {
3
- scheduler: Promise<void> | null;
4
- upgradable: Map<string | symbol, unknown>;
5
- changes: Set<string | symbol>;
6
- }
7
- export declare class MetaData {
8
- #private;
9
- read<T extends object>(value: T): ObservableMetaData;
10
- }
@@ -1,17 +0,0 @@
1
- export class ObservableMetaData {
2
- scheduler = null;
3
- upgradable = new Map();
4
- changes = new Set();
5
- }
6
- export class MetaData {
7
- #data = new WeakMap();
8
- read(value) {
9
- if (this.#data.has(value)) {
10
- return this.#data.get(value);
11
- }
12
- const data = new ObservableMetaData();
13
- this.#data.set(value, data);
14
- return data;
15
- }
16
- }
17
- //# sourceMappingURL=meta.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/lib/meta.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,kBAAkB;IAC7B,SAAS,GAAyB,IAAI,CAAC;IACvC,UAAU,GAAG,IAAI,GAAG,EAA4B,CAAC;IACjD,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;CACtC;AAED,MAAM,OAAO,QAAQ;IACnB,KAAK,GAAG,IAAI,OAAO,EAA8B,CAAC;IAElD,IAAI,CAAmB,KAAQ;QAC7B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAuB,CAAC;QACrD,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAEtC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAE5B,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"meta.test.js","sourceRoot":"","sources":["../../src/lib/meta.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEtC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YACzB,OAAO,EAAE,IAAI,GAAG,EAAE;YAClB,UAAU,EAAE,IAAI,GAAG,EAAE;YACrB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}