@oscarpalmer/mora 0.16.0 → 0.17.0

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.
@@ -8,15 +8,15 @@ declare class Effect {
8
8
  }
9
9
  declare class Computed<Value> extends Reactive<Value> {
10
10
  private readonly effect;
11
- constructor(callback: () => Value);
11
+ constructor(callback: () => Value, options?: ReactiveOptions<Value>);
12
12
  /**
13
13
  * @inheritdoc
14
14
  */
15
15
  get(): Value;
16
16
  }
17
- export declare abstract class Reactive<Value> {
18
- protected readonly state: ReactiveState<Value>;
19
- constructor(name: string, value: Value);
17
+ export declare abstract class Reactive<Value, Equal = Value> {
18
+ protected readonly state: ReactiveState<Value, Equal>;
19
+ constructor(name: string, value: Value, options?: ReactiveOptions<Equal>);
20
20
  /**
21
21
  * Get the value
22
22
  */
@@ -42,16 +42,23 @@ export declare abstract class Reactive<Value> {
42
42
  */
43
43
  unsubscribe(callback: (value: Value) => void): void;
44
44
  }
45
- export type ReactiveState<Value> = {
45
+ export type ReactiveOptions<Value> = {
46
+ /**
47
+ * Method to compare values for equality
48
+ */
49
+ equal?: (first: Value, second: Value) => boolean;
50
+ };
51
+ export type ReactiveState<Value, Equal> = {
46
52
  computeds: Set<Computed<unknown>>;
47
53
  effects: Set<Effect>;
54
+ equal: (first: Equal, second: Equal) => boolean;
48
55
  subscriptions: Map<(value: Value) => void, Subscription<Value>>;
49
56
  value: Value;
50
57
  };
51
58
  declare class Subscription<Value> {
52
- state: ReactiveState<Value>;
59
+ state: ReactiveState<Value, never>;
53
60
  callback: GenericCallback;
54
- constructor(state: ReactiveState<Value>, callback: GenericCallback);
61
+ constructor(state: ReactiveState<Value, never>, callback: GenericCallback);
55
62
  }
56
63
  /**
57
64
  * Unsubscribe from changes
@@ -1,9 +1,9 @@
1
1
  import type { Effect } from '../effect';
2
2
  import { type Subscription, type Unsubscribe } from '../subscription';
3
3
  import type { Computed } from './computed';
4
- export declare abstract class Reactive<Value> {
5
- protected readonly state: ReactiveState<Value>;
6
- constructor(name: string, value: Value);
4
+ export declare abstract class Reactive<Value, Equal = Value> {
5
+ protected readonly state: ReactiveState<Value, Equal>;
6
+ constructor(name: string, value: Value, options?: ReactiveOptions<Equal>);
7
7
  /**
8
8
  * Get the value
9
9
  */
@@ -29,9 +29,16 @@ export declare abstract class Reactive<Value> {
29
29
  */
30
30
  unsubscribe(callback: (value: Value) => void): void;
31
31
  }
32
- export type ReactiveState<Value> = {
32
+ export type ReactiveOptions<Value> = {
33
+ /**
34
+ * Method to compare values for equality
35
+ */
36
+ equal?: (first: Value, second: Value) => boolean;
37
+ };
38
+ export type ReactiveState<Value, Equal> = {
33
39
  computeds: Set<Computed<unknown>>;
34
40
  effects: Set<Effect>;
41
+ equal: (first: Equal, second: Equal) => boolean;
35
42
  subscriptions: Map<(value: Value) => void, Subscription<Value>>;
36
43
  value: Value;
37
44
  };
@@ -8,15 +8,15 @@ declare class Effect {
8
8
  }
9
9
  declare class Computed<Value> extends Reactive<Value> {
10
10
  private readonly effect;
11
- constructor(callback: () => Value);
11
+ constructor(callback: () => Value, options?: ReactiveOptions<Value>);
12
12
  /**
13
13
  * @inheritdoc
14
14
  */
15
15
  get(): Value;
16
16
  }
17
- declare abstract class Reactive<Value> {
18
- protected readonly state: ReactiveState<Value>;
19
- constructor(name: string, value: Value);
17
+ declare abstract class Reactive<Value, Equal = Value> {
18
+ protected readonly state: ReactiveState<Value, Equal>;
19
+ constructor(name: string, value: Value, options?: ReactiveOptions<Equal>);
20
20
  /**
21
21
  * Get the value
22
22
  */
@@ -42,23 +42,30 @@ declare abstract class Reactive<Value> {
42
42
  */
43
43
  unsubscribe(callback: (value: Value) => void): void;
44
44
  }
45
- export type ReactiveState<Value> = {
45
+ export type ReactiveOptions<Value> = {
46
+ /**
47
+ * Method to compare values for equality
48
+ */
49
+ equal?: (first: Value, second: Value) => boolean;
50
+ };
51
+ export type ReactiveState<Value, Equal> = {
46
52
  computeds: Set<Computed<unknown>>;
47
53
  effects: Set<Effect>;
54
+ equal: (first: Equal, second: Equal) => boolean;
48
55
  subscriptions: Map<(value: Value) => void, Subscription<Value>>;
49
56
  value: Value;
50
57
  };
51
58
  declare class Subscription<Value> {
52
- state: ReactiveState<Value>;
59
+ state: ReactiveState<Value, never>;
53
60
  callback: GenericCallback;
54
- constructor(state: ReactiveState<Value>, callback: GenericCallback);
61
+ constructor(state: ReactiveState<Value, never>, callback: GenericCallback);
55
62
  }
56
63
  /**
57
64
  * Unsubscribe from changes
58
65
  */
59
66
  export type Unsubscribe = () => void;
60
67
  export declare class Signal<Value> extends Reactive<Value> {
61
- constructor(value: Value);
68
+ constructor(value: Value, options?: ReactiveOptions<Value>);
62
69
  /**
63
70
  * @inheritdoc
64
71
  */
@@ -75,6 +82,6 @@ export declare class Signal<Value> extends Reactive<Value> {
75
82
  /**
76
83
  * Create a reactive value
77
84
  */
78
- export declare function signal<Value>(value: Value): Signal<Value>;
85
+ export declare function signal<Value>(value: Value, options?: ReactiveOptions<Value>): Signal<Value>;
79
86
 
80
87
  export {};
@@ -1,6 +1,6 @@
1
- import { Reactive } from './reactive';
1
+ import { Reactive, type ReactiveOptions } from './reactive';
2
2
  export declare class Signal<Value> extends Reactive<Value> {
3
- constructor(value: Value);
3
+ constructor(value: Value, options?: ReactiveOptions<Value>);
4
4
  /**
5
5
  * @inheritdoc
6
6
  */
@@ -17,4 +17,4 @@ export declare class Signal<Value> extends Reactive<Value> {
17
17
  /**
18
18
  * Create a reactive value
19
19
  */
20
- export declare function signal<Value>(value: Value): Signal<Value>;
20
+ export declare function signal<Value>(value: Value, options?: ReactiveOptions<Value>): Signal<Value>;