@joist/observable 4.0.0-next.10 → 4.0.0-next.11

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/README.md CHANGED
@@ -12,10 +12,14 @@ npm i @joist/observable@next
12
12
  import { observe, effect } from '@joist/observable';
13
13
 
14
14
  class AppState {
15
- @observe accessor todos: string[] = [];
16
- @observe accessor userName?: string;
15
+ @observe()
16
+ accessor todos: string[] = [];
17
17
 
18
- @effect onChange(changes: Set<string | symbol>) {
18
+ @observe()
19
+ accessor userName?: string;
20
+
21
+ @effect()
22
+ onChange(changes: Changes<this>) {
19
23
  console.log(changes);
20
24
  }
21
25
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joist/observable",
3
- "version": "4.0.0-next.10",
3
+ "version": "4.0.0-next.11",
4
4
  "type": "module",
5
5
  "main": "./target/lib.js",
6
6
  "module": "./target/lib.js",
@@ -5,7 +5,7 @@ it('should return default metadata', () => {
5
5
  const key = {};
6
6
  const data = new ObservableInstanceMetaDataStore().read(key);
7
7
 
8
- assert.deepEqual(data, { changes: new Set<string | symbol>(), scheduler: null });
8
+ assert.deepEqual(data, { changes: {}, scheduler: null });
9
9
  });
10
10
 
11
11
  it('should return the same metadata object after init', () => {
@@ -1,41 +1,51 @@
1
1
  (Symbol as any).metadata ??= Symbol('Symbol.metadata');
2
2
 
3
- export type EffectFn = (changes: Set<string | symbol>) => void;
3
+ export type EffectFn<T> = (changes: Changes<T>) => void;
4
4
 
5
- export abstract class MetadataStore<Metadata> extends WeakMap<object, Metadata> {
6
- read(key: object): Metadata {
5
+ export type Changes<T> = {
6
+ [P in keyof T]?: {
7
+ oldValue: T[P];
8
+ newValue: T[P];
9
+ };
10
+ };
11
+
12
+ export class ObservableInstanceMetadata<T> {
13
+ scheduler: Promise<void> | null = null;
14
+ changes: Changes<T> = {};
15
+ }
16
+
17
+ export class ObservableInstanceMetaDataStore extends WeakMap<
18
+ object,
19
+ ObservableInstanceMetadata<unknown>
20
+ > {
21
+ read<T extends object>(key: T): ObservableInstanceMetadata<T> {
7
22
  let data = this.get(key);
8
23
 
9
24
  if (!data) {
10
- data = this.init();
25
+ data = new ObservableInstanceMetadata();
11
26
 
12
27
  this.set(key, data);
13
28
  }
14
29
 
15
30
  return data;
16
31
  }
17
-
18
- abstract init(): Metadata;
19
32
  }
20
33
 
21
- export class ObservableInstanceMetadata {
22
- scheduler: Promise<void> | null = null;
23
- changes = new Set<string | symbol>();
34
+ export class ObservableMetadata<T> {
35
+ effects: Set<EffectFn<T>> = new Set();
24
36
  }
25
37
 
26
- export class ObservableInstanceMetaDataStore extends MetadataStore<ObservableInstanceMetadata> {
27
- init() {
28
- return new ObservableInstanceMetadata();
29
- }
30
- }
38
+ export class ObservableMetadataStore extends WeakMap<object, ObservableMetadata<unknown>> {
39
+ read<T extends object>(key: T): ObservableMetadata<T> {
40
+ let data = this.get(key);
31
41
 
32
- export class ObservableMetadata {
33
- effects: Set<EffectFn> = new Set();
34
- }
42
+ if (!data) {
43
+ data = new ObservableMetadata();
35
44
 
36
- export class ObservableMetadataStore extends MetadataStore<ObservableMetadata> {
37
- init() {
38
- return new ObservableMetadata();
45
+ this.set(key, data);
46
+ }
47
+
48
+ return data;
39
49
  }
40
50
  }
41
51
 
@@ -1,6 +1,7 @@
1
1
  import { assert } from 'chai';
2
2
 
3
3
  import { effect, observe } from './observe.js';
4
+ import { Changes } from './metadata.js';
4
5
 
5
6
  it('should work with static accessors', () => {
6
7
  return new Promise<void>((resolve) => {
@@ -53,8 +54,11 @@ it('should return a set of changed props', () => {
53
54
  class Counter {
54
55
  @observe() accessor value = 0;
55
56
 
56
- @effect() onChange(changes: Set<symbol | string>) {
57
- assert.ok(changes.has('value'));
57
+ @effect() onChange(changes: Changes<this>) {
58
+ assert.deepEqual(changes.value, {
59
+ oldValue: 0,
60
+ newValue: 1
61
+ });
58
62
 
59
63
  resolve();
60
64
  }
@@ -1,10 +1,12 @@
1
1
  import { EffectFn, instanceMetadataStore, observableMetadataStore } from './metadata.js';
2
2
 
3
3
  export function observe() {
4
- return function observeDecorator<This extends object, Value>(
4
+ return function observeDecorator<This extends object, Value extends This[keyof This]>(
5
5
  base: ClassAccessorDecoratorTarget<This, Value>,
6
6
  ctx: ClassAccessorDecoratorContext<This, Value>
7
7
  ): ClassAccessorDecoratorResult<This, Value> {
8
+ const observableMeta = observableMetadataStore.read(ctx.metadata);
9
+
8
10
  return {
9
11
  init(value) {
10
12
  let val: Value | null = null;
@@ -25,7 +27,6 @@ export function observe() {
25
27
  },
26
28
  set(value) {
27
29
  const instanceMeta = instanceMetadataStore.read(this);
28
- const observableMeta = observableMetadataStore.read(ctx.metadata);
29
30
 
30
31
  if (instanceMeta.scheduler === null) {
31
32
  instanceMeta.scheduler = Promise.resolve().then(() => {
@@ -34,11 +35,16 @@ export function observe() {
34
35
  }
35
36
 
36
37
  instanceMeta.scheduler = null;
37
- instanceMeta.changes.clear();
38
+ instanceMeta.changes = {};
38
39
  });
39
40
  }
40
41
 
41
- instanceMeta.changes.add(ctx.name);
42
+ const name = ctx.name as keyof This;
43
+
44
+ instanceMeta.changes[name] = {
45
+ oldValue: base.get.call(this),
46
+ newValue: value
47
+ };
42
48
 
43
49
  base.set.call(this, value);
44
50
  }
@@ -48,7 +54,7 @@ export function observe() {
48
54
 
49
55
  export function effect() {
50
56
  return function effectDecorator<T extends object>(
51
- value: EffectFn,
57
+ value: EffectFn<unknown>,
52
58
  ctx: ClassMethodDecoratorContext<T>
53
59
  ) {
54
60
  const data = observableMetadataStore.read(ctx.metadata);
@@ -1,20 +1,22 @@
1
- export type EffectFn = (changes: Set<string | symbol>) => void;
2
- export declare abstract class MetadataStore<Metadata> extends WeakMap<object, Metadata> {
3
- read(key: object): Metadata;
4
- abstract init(): Metadata;
5
- }
6
- export declare class ObservableInstanceMetadata {
1
+ export type EffectFn<T> = (changes: Changes<T>) => void;
2
+ export type Changes<T> = {
3
+ [P in keyof T]?: {
4
+ oldValue: T[P];
5
+ newValue: T[P];
6
+ };
7
+ };
8
+ export declare class ObservableInstanceMetadata<T> {
7
9
  scheduler: Promise<void> | null;
8
- changes: Set<string | symbol>;
10
+ changes: Changes<T>;
9
11
  }
10
- export declare class ObservableInstanceMetaDataStore extends MetadataStore<ObservableInstanceMetadata> {
11
- init(): ObservableInstanceMetadata;
12
+ export declare class ObservableInstanceMetaDataStore extends WeakMap<object, ObservableInstanceMetadata<unknown>> {
13
+ read<T extends object>(key: T): ObservableInstanceMetadata<T>;
12
14
  }
13
- export declare class ObservableMetadata {
14
- effects: Set<EffectFn>;
15
+ export declare class ObservableMetadata<T> {
16
+ effects: Set<EffectFn<T>>;
15
17
  }
16
- export declare class ObservableMetadataStore extends MetadataStore<ObservableMetadata> {
17
- init(): ObservableMetadata;
18
+ export declare class ObservableMetadataStore extends WeakMap<object, ObservableMetadata<unknown>> {
19
+ read<T extends object>(key: T): ObservableMetadata<T>;
18
20
  }
19
21
  export declare const instanceMetadataStore: ObservableInstanceMetaDataStore;
20
22
  export declare const observableMetadataStore: ObservableMetadataStore;
@@ -1,29 +1,29 @@
1
1
  Symbol.metadata ??= Symbol('Symbol.metadata');
2
- export class MetadataStore extends WeakMap {
2
+ export class ObservableInstanceMetadata {
3
+ scheduler = null;
4
+ changes = {};
5
+ }
6
+ export class ObservableInstanceMetaDataStore extends WeakMap {
3
7
  read(key) {
4
8
  let data = this.get(key);
5
9
  if (!data) {
6
- data = this.init();
10
+ data = new ObservableInstanceMetadata();
7
11
  this.set(key, data);
8
12
  }
9
13
  return data;
10
14
  }
11
15
  }
12
- export class ObservableInstanceMetadata {
13
- scheduler = null;
14
- changes = new Set();
15
- }
16
- export class ObservableInstanceMetaDataStore extends MetadataStore {
17
- init() {
18
- return new ObservableInstanceMetadata();
19
- }
20
- }
21
16
  export class ObservableMetadata {
22
17
  effects = new Set();
23
18
  }
24
- export class ObservableMetadataStore extends MetadataStore {
25
- init() {
26
- return new ObservableMetadata();
19
+ export class ObservableMetadataStore extends WeakMap {
20
+ read(key) {
21
+ let data = this.get(key);
22
+ if (!data) {
23
+ data = new ObservableMetadata();
24
+ this.set(key, data);
25
+ }
26
+ return data;
27
27
  }
28
28
  }
29
29
  export const instanceMetadataStore = new ObservableInstanceMetaDataStore();
@@ -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;AAIvD,MAAM,OAAgB,aAAwB,SAAQ,OAAyB;IAC7E,IAAI,CAAC,GAAW;QACd,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEzB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAEnB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACtB,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
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/lib/metadata.ts"],"names":[],"mappings":"AAAC,MAAc,CAAC,QAAQ,KAAK,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAWvD,MAAM,OAAO,0BAA0B;IACrC,SAAS,GAAyB,IAAI,CAAC;IACvC,OAAO,GAAe,EAAE,CAAC;CAC1B;AAED,MAAM,OAAO,+BAAgC,SAAQ,OAGpD;IACC,IAAI,CAAmB,GAAM;QAC3B,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEzB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,IAAI,0BAA0B,EAAE,CAAC;YAExC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACtB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,MAAM,OAAO,kBAAkB;IAC7B,OAAO,GAAqB,IAAI,GAAG,EAAE,CAAC;CACvC;AAED,MAAM,OAAO,uBAAwB,SAAQ,OAA4C;IACvF,IAAI,CAAmB,GAAM;QAC3B,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEzB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,IAAI,kBAAkB,EAAE,CAAC;YAEhC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACtB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,+BAA+B,EAAE,CAAC;AAC3E,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,uBAAuB,EAAE,CAAC"}
@@ -3,7 +3,7 @@ import { ObservableInstanceMetaDataStore } from './metadata.js';
3
3
  it('should return default metadata', () => {
4
4
  const key = {};
5
5
  const data = new ObservableInstanceMetaDataStore().read(key);
6
- assert.deepEqual(data, { changes: new Set(), scheduler: null });
6
+ assert.deepEqual(data, { changes: {}, scheduler: null });
7
7
  });
8
8
  it('should return the same metadata object after init', () => {
9
9
  const key = {};
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.test.js","sourceRoot":"","sources":["../../src/lib/metadata.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAC;AAEhE,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;IACxC,MAAM,GAAG,GAAG,EAAE,CAAC;IACf,MAAM,IAAI,GAAG,IAAI,+BAA+B,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE7D,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,GAAG,EAAmB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACnF,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;IAC3D,MAAM,GAAG,GAAG,EAAE,CAAC;IACf,MAAM,IAAI,GAAG,IAAI,+BAA+B,EAAE,CAAC;IAEnD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"metadata.test.js","sourceRoot":"","sources":["../../src/lib/metadata.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAC;AAEhE,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;IACxC,MAAM,GAAG,GAAG,EAAE,CAAC;IACf,MAAM,IAAI,GAAG,IAAI,+BAA+B,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE7D,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3D,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;IAC3D,MAAM,GAAG,GAAG,EAAE,CAAC;IACf,MAAM,IAAI,GAAG,IAAI,+BAA+B,EAAE,CAAC;IAEnD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC"}
@@ -1,3 +1,3 @@
1
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;
2
+ export declare function observe(): <This extends object, Value extends This[keyof This]>(base: ClassAccessorDecoratorTarget<This, Value>, ctx: ClassAccessorDecoratorContext<This, Value>) => ClassAccessorDecoratorResult<This, Value>;
3
+ export declare function effect(): <T extends object>(value: EffectFn<unknown>, ctx: ClassMethodDecoratorContext<T>) => void;
@@ -1,6 +1,7 @@
1
1
  import { instanceMetadataStore, observableMetadataStore } from './metadata.js';
2
2
  export function observe() {
3
3
  return function observeDecorator(base, ctx) {
4
+ const observableMeta = observableMetadataStore.read(ctx.metadata);
4
5
  return {
5
6
  init(value) {
6
7
  let val = null;
@@ -16,17 +17,20 @@ export function observe() {
16
17
  },
17
18
  set(value) {
18
19
  const instanceMeta = instanceMetadataStore.read(this);
19
- const observableMeta = observableMetadataStore.read(ctx.metadata);
20
20
  if (instanceMeta.scheduler === null) {
21
21
  instanceMeta.scheduler = Promise.resolve().then(() => {
22
22
  for (let effect of observableMeta.effects) {
23
23
  effect.call(this, instanceMeta.changes);
24
24
  }
25
25
  instanceMeta.scheduler = null;
26
- instanceMeta.changes.clear();
26
+ instanceMeta.changes = {};
27
27
  });
28
28
  }
29
- instanceMeta.changes.add(ctx.name);
29
+ const name = ctx.name;
30
+ instanceMeta.changes[name] = {
31
+ oldValue: base.get.call(this),
32
+ newValue: value
33
+ };
30
34
  base.set.call(this, value);
31
35
  }
32
36
  };
@@ -1 +1 @@
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;IACrB,OAAO,SAAS,gBAAgB,CAC9B,IAA+C,EAC/C,GAA+C;QAE/C,OAAO;YACL,IAAI,CAAC,KAAK;gBACR,IAAI,GAAG,GAAiB,IAAI,CAAC;gBAG7B,IAAI,CAAC;oBACH,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC7B,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;gBAEV,IAAI,GAAG,EAAE,CAAC;oBACR,OAAa,IAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAE7B,OAAO,GAAG,CAAC;gBACb,CAAC;gBAGD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,GAAG,CAAC,KAAK;gBACP,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtD,MAAM,cAAc,GAAG,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAElE,IAAI,YAAY,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;oBACpC,YAAY,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;wBACnD,KAAK,IAAI,MAAM,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;4BAC1C,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;wBAC1C,CAAC;wBAED,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC;wBAC9B,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBAC/B,CAAC,CAAC,CAAC;gBACL,CAAC;gBAED,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAEnC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC7B,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,MAAM;IACpB,OAAO,SAAS,eAAe,CAC7B,KAAe,EACf,GAAmC;QAEnC,MAAM,IAAI,GAAG,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAExD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC,CAAC;AACJ,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;IACrB,OAAO,SAAS,gBAAgB,CAC9B,IAA+C,EAC/C,GAA+C;QAE/C,MAAM,cAAc,GAAG,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAElE,OAAO;YACL,IAAI,CAAC,KAAK;gBACR,IAAI,GAAG,GAAiB,IAAI,CAAC;gBAG7B,IAAI,CAAC;oBACH,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC7B,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;gBAEV,IAAI,GAAG,EAAE,CAAC;oBACR,OAAa,IAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAE7B,OAAO,GAAG,CAAC;gBACb,CAAC;gBAGD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,GAAG,CAAC,KAAK;gBACP,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEtD,IAAI,YAAY,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;oBACpC,YAAY,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;wBACnD,KAAK,IAAI,MAAM,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;4BAC1C,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;wBAC1C,CAAC;wBAED,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC;wBAC9B,YAAY,CAAC,OAAO,GAAG,EAAE,CAAC;oBAC5B,CAAC,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,IAAI,GAAG,GAAG,CAAC,IAAkB,CAAC;gBAEpC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG;oBAC3B,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC7B,QAAQ,EAAE,KAAK;iBAChB,CAAC;gBAEF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC7B,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,MAAM;IACpB,OAAO,SAAS,eAAe,CAC7B,KAAwB,EACxB,GAAmC;QAEnC,MAAM,IAAI,GAAG,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAExD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC,CAAC;AACJ,CAAC"}
@@ -92,7 +92,10 @@ it('should return a set of changed props', () => {
92
92
  get value() { return this.#value_accessor_storage; }
93
93
  set value(value) { this.#value_accessor_storage = value; }
94
94
  onChange(changes) {
95
- assert.ok(changes.has('value'));
95
+ assert.deepEqual(changes.value, {
96
+ oldValue: 0,
97
+ newValue: 1
98
+ });
96
99
  resolve();
97
100
  }
98
101
  constructor() {
@@ -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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"}