easy-signal 4.1.3 → 4.1.4

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.
@@ -0,0 +1,6 @@
1
+ {
2
+ "editor.codeActionsOnSave": {
3
+ "source.organizeImports": "explicit"
4
+ },
5
+ "editor.formatOnSave": true
6
+ }
package/README.md CHANGED
@@ -141,6 +141,7 @@ subscribes to know when they are changed so that the function may be rerun.
141
141
 
142
142
  Note that easy-signal provides 3 simple debounce functions to make it easy to have effects happen less often while still
143
143
  allowing the stores to always be accurate:
144
+
144
145
  - `onAnimationFrame`
145
146
  - `onTick`
146
147
  - `onTimeout`
package/dist/debounce.js CHANGED
@@ -12,9 +12,9 @@ function debounce(scheduler, fn, ...args) {
12
12
  nextArgs = args;
13
13
  });
14
14
  }
15
- const tick = (callback) => Promise.resolve().then(callback);
16
- const timeout = (callback) => setTimeout(callback);
17
- const frame = (callback) => requestAnimationFrame(callback);
15
+ const tick = callback => Promise.resolve().then(callback);
16
+ const timeout = callback => setTimeout(callback);
17
+ const frame = callback => requestAnimationFrame(callback);
18
18
  /**
19
19
  * A function to debounce the execution of a function until the next microtask.
20
20
  */
@@ -1 +1 @@
1
- {"version":3,"file":"debounce.js","sourceRoot":"","sources":["../src/debounce.ts"],"names":[],"mappings":"AAEA,SAAS,QAAQ,CAAqC,SAAoB,EAAE,EAAK,EAAE,GAAG,IAAW;IAC/F,IAAI,QAAe,CAAC;IAEpB,OAAO,CAAC,CAAC,GAAG,IAAW,EAAE,EAAE;QACzB,QAAQ,GAAG,IAAI,CAAC;QAChB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,SAAS,CAAC,GAAG,EAAE;gBACb,MAAM,IAAI,GAAG,QAAQ,CAAC;gBACtB,QAAQ,GAAG,IAAI,CAAC;gBAChB,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;YACd,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QACd,CAAC;QACD,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC,CAAM,CAAC;AACV,CAAC;AAED,MAAM,IAAI,GAAc,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACvE,MAAM,OAAO,GAAc,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC9D,MAAM,KAAK,GAAc,CAAC,QAAQ,EAAE,EAAE,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AAEvE;;GAEG;AACH,MAAM,UAAU,MAAM,CAAqC,EAAK;IAC9D,OAAO,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAqC,EAAK,EAAE,KAAc;IAC/E,OAAO,QAAQ,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAqC,EAAK;IACxE,OAAO,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"debounce.js","sourceRoot":"","sources":["../src/debounce.ts"],"names":[],"mappings":"AAEA,SAAS,QAAQ,CAAqC,SAAoB,EAAE,EAAK,EAAE,GAAG,IAAW;IAC/F,IAAI,QAAe,CAAC;IAEpB,OAAO,CAAC,CAAC,GAAG,IAAW,EAAE,EAAE;QACzB,QAAQ,GAAG,IAAI,CAAC;QAChB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,SAAS,CAAC,GAAG,EAAE;gBACb,MAAM,IAAI,GAAG,QAAQ,CAAC;gBACtB,QAAQ,GAAG,IAAI,CAAC;gBAChB,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;YACd,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QACd,CAAC;QACD,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC,CAAM,CAAC;AACV,CAAC;AAED,MAAM,IAAI,GAAc,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACrE,MAAM,OAAO,GAAc,QAAQ,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC5D,MAAM,KAAK,GAAc,QAAQ,CAAC,EAAE,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AAErE;;GAEG;AACH,MAAM,UAAU,MAAM,CAAqC,EAAK;IAC9D,OAAO,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAqC,EAAK,EAAE,KAAc;IACjF,OAAO,QAAQ,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAqC,EAAK;IACxE,OAAO,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC"}
package/dist/store.js CHANGED
@@ -88,11 +88,7 @@ export function writable(value, start = noop) {
88
88
  */
89
89
  export function observe(fn) {
90
90
  const store = derived(fn);
91
- const unsubscribe = store.subscribe(noop);
92
- if (store.get() instanceof Promise) {
93
- throw new Error('observe() should not be used with async methods (it won’t update when dependant stores change).');
94
- }
95
- return unsubscribe;
91
+ return store.subscribe(noop);
96
92
  }
97
93
  /**
98
94
  * Create a `Readable` store that derives its value from other stores and updates when those stores change.
@@ -106,9 +102,9 @@ export function derived(fn, value) {
106
102
  const invalidate = () => {
107
103
  pending++;
108
104
  // Ensure derived stores that have multiple overlapping dependencies only trigger once after others
109
- forExistsInBoth(subscribers, root.subscriberQueue, subscriber => {
105
+ forExistsInBoth(subscribers, new Map(root.subscriberQueue), subscriber => {
110
106
  // move to the end of the queue
111
- const value = root.subscriberQueue.has(subscriber);
107
+ const value = root.subscriberQueue.get(subscriber);
112
108
  root.subscriberQueue.delete(subscriber);
113
109
  root.subscriberQueue.set(subscriber, value);
114
110
  });
@@ -120,6 +116,9 @@ export function derived(fn, value) {
120
116
  try {
121
117
  // Run the effect collecting all the unsubscribes from the signals that are called when it is run
122
118
  value = fn(value);
119
+ if (value instanceof Promise) {
120
+ throw new Error('derived() should not be used with async methods (it won’t update when dependant stores change).');
121
+ }
123
122
  }
124
123
  finally {
125
124
  // Filter out unchanged unsubscribes, leaving only those which no longer apply
@@ -157,7 +156,7 @@ export function whenReadable(store) {
157
156
  */
158
157
  export function whenMatches(store, matches) {
159
158
  return {
160
- then: ((resolve) => {
159
+ then: (resolve) => {
161
160
  const value = store.get();
162
161
  if (matches(value))
163
162
  return resolve(value);
@@ -167,7 +166,7 @@ export function whenMatches(store, matches) {
167
166
  unsubscribe();
168
167
  resolve(value);
169
168
  });
170
- }),
169
+ },
171
170
  catch() { },
172
171
  finally() { },
173
172
  };
@@ -180,7 +179,7 @@ export function afterChange(store) {
180
179
  let init = true;
181
180
  const unsubscribe = store.subscribe(value => {
182
181
  if (init)
183
- return init = false;
182
+ return (init = false);
184
183
  unsubscribe();
185
184
  resolve(value);
186
185
  });
@@ -203,8 +202,7 @@ function queue(fn, batch) {
203
202
  }
204
203
  }
205
204
  function forExistsInBoth(a, b, fn) {
206
- const smallest = a.size <= b.size ? a : b;
207
- const other = a.size <= b.size ? b : a;
208
- smallest.forEach((_, key) => other.has(key) && fn(key));
205
+ const [smaller, larger] = a.size <= b.size ? [a, b] : [b, a];
206
+ smaller.forEach((_, key) => larger.has(key) && fn(key));
209
207
  }
210
208
  //# sourceMappingURL=store.js.map
package/dist/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,2 +1,4 @@
1
+ /** Unsubscribes from value updates. */
1
2
  export type Unsubscriber = () => void;
3
+ /** Callback to inform of a value updates. */
2
4
  export type Subscriber<T> = (value: T) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "easy-signal",
3
- "version": "4.1.3",
3
+ "version": "4.1.4",
4
4
  "description": "A package with 2 types of signals, an small and simple event signal, and a reactive value-based signal called stores.",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
package/src/debounce.ts CHANGED
@@ -16,9 +16,9 @@ function debounce<T extends (...args: any[]) => void>(scheduler: Scheduler, fn:
16
16
  }) as T;
17
17
  }
18
18
 
19
- const tick: Scheduler = (callback) => Promise.resolve().then(callback);
20
- const timeout: Scheduler = (callback) => setTimeout(callback);
21
- const frame: Scheduler = (callback) => requestAnimationFrame(callback);
19
+ const tick: Scheduler = callback => Promise.resolve().then(callback);
20
+ const timeout: Scheduler = callback => setTimeout(callback);
21
+ const frame: Scheduler = callback => requestAnimationFrame(callback);
22
22
 
23
23
  /**
24
24
  * A function to debounce the execution of a function until the next microtask.
@@ -31,7 +31,7 @@ export function onTick<T extends (...args: any[]) => void>(fn: T): T {
31
31
  * A function to debounce the execution of a function until the next setTimeout(..., 0).
32
32
  */
33
33
  export function onTimeout<T extends (...args: any[]) => void>(fn: T, delay?: number): T {
34
- return debounce(timeout, fn, delay);
34
+ return debounce(timeout, fn, delay);
35
35
  }
36
36
 
37
37
  /**
package/src/index.ts CHANGED
@@ -1,4 +1,3 @@
1
1
  export * from './debounce';
2
2
  export * from './signal';
3
3
  export * from './store';
4
-
package/src/store.ts CHANGED
@@ -143,11 +143,7 @@ export function writable<T>(value: T, start: StartStopNotifier<T> = noop): Writa
143
143
  */
144
144
  export function observe<T>(fn: () => T): Unsubscriber {
145
145
  const store = derived(fn);
146
- const unsubscribe = store.subscribe(noop);
147
- if (store.get() instanceof Promise) {
148
- throw new Error('observe() should not be used with async methods (it won’t update when dependant stores change).');
149
- }
150
- return unsubscribe;
146
+ return store.subscribe(noop);
151
147
  }
152
148
 
153
149
  /**
@@ -163,9 +159,9 @@ export function derived<T>(fn: (priorValue: T) => T, value?: T): Readable<T> {
163
159
  const invalidate = () => {
164
160
  pending++;
165
161
  // Ensure derived stores that have multiple overlapping dependencies only trigger once after others
166
- forExistsInBoth(subscribers, root.subscriberQueue, subscriber => {
162
+ forExistsInBoth(subscribers, new Map(root.subscriberQueue), subscriber => {
167
163
  // move to the end of the queue
168
- const value = root.subscriberQueue.has(subscriber);
164
+ const value = root.subscriberQueue.get(subscriber);
169
165
  root.subscriberQueue.delete(subscriber);
170
166
  root.subscriberQueue.set(subscriber, value);
171
167
  });
@@ -180,6 +176,11 @@ export function derived<T>(fn: (priorValue: T) => T, value?: T): Readable<T> {
180
176
  try {
181
177
  // Run the effect collecting all the unsubscribes from the signals that are called when it is run
182
178
  value = fn(value);
179
+ if (value instanceof Promise) {
180
+ throw new Error(
181
+ 'derived() should not be used with async methods (it won’t update when dependant stores change).'
182
+ );
183
+ }
183
184
  } finally {
184
185
  // Filter out unchanged unsubscribes, leaving only those which no longer apply
185
186
  root.context.unsubscribes.forEach(u => unsubscribes.delete(u));
@@ -224,7 +225,7 @@ export function whenReadable<T>(store: Readable<T>): Promise<T> {
224
225
  */
225
226
  export function whenMatches<T>(store: Readable<T>, matches: (value: T) => boolean): Promise<T> {
226
227
  return {
227
- then: ((resolve: (value: T) => any) => {
228
+ then: (resolve: (value: T) => any) => {
228
229
  const value = store.get();
229
230
  if (matches(value)) return resolve(value);
230
231
  const unsubscribe = store.subscribe(value => {
@@ -232,9 +233,9 @@ export function whenMatches<T>(store: Readable<T>, matches: (value: T) => boolea
232
233
  unsubscribe();
233
234
  resolve(value);
234
235
  });
235
- }),
236
- catch(){},
237
- finally(){},
236
+ },
237
+ catch() {},
238
+ finally() {},
238
239
  } as Promise<T>;
239
240
  }
240
241
 
@@ -245,7 +246,7 @@ export function afterChange<T>(store: Readable<T>): Promise<T> {
245
246
  return new Promise(resolve => {
246
247
  let init = true;
247
248
  const unsubscribe = store.subscribe(value => {
248
- if (init) return init = false;
249
+ if (init) return (init = false);
249
250
  unsubscribe();
250
251
  resolve(value);
251
252
  });
@@ -272,7 +273,6 @@ function queue(fn: () => void, batch?: boolean) {
272
273
  }
273
274
 
274
275
  function forExistsInBoth<T>(a: Map<T, any>, b: Map<T, any>, fn: (value: T) => void) {
275
- const smallest = a.size <= b.size ? a : b;
276
- const other = a.size <= b.size ? b : a;
277
- smallest.forEach((_, key) => other.has(key) && fn(key));
276
+ const [smaller, larger] = a.size <= b.size ? [a, b] : [b, a];
277
+ smaller.forEach((_, key) => larger.has(key) && fn(key));
278
278
  }
package/src/types.ts CHANGED
@@ -1,3 +1,5 @@
1
-
1
+ /** Unsubscribes from value updates. */
2
2
  export type Unsubscriber = () => void;
3
- export type Subscriber<T> = (value: T) => void;
3
+
4
+ /** Callback to inform of a value updates. */
5
+ export type Subscriber<T> = (value: T) => void;
package/dist/atom.d.ts DELETED
@@ -1,40 +0,0 @@
1
- import type { Subscriber, Unsubscriber } from './types';
2
- export type Invalidator = () => void;
3
- export type StartStopNotifier<T> = (set: Atom<T>) => Unsubscriber | void;
4
- export type { Subscriber, Unsubscriber };
5
- export interface Derived<T> {
6
- /**
7
- * Return the current value.
8
- */
9
- (): T;
10
- /**
11
- * Subscribe to changes with a callback. Returns an unsubscribe function.
12
- */
13
- subscribe(callback: Subscriber<T>): Unsubscriber;
14
- }
15
- export interface Atom<T> extends Derived<T> {
16
- /**
17
- * Set the value and inform subscribers.
18
- */
19
- (value: T): void;
20
- /**
21
- * @deprecated use atom(value) instead, kept for Svelte 3 compatibility (e.g. $store = value)
22
- */
23
- set(value: T): void;
24
- }
25
- /**
26
- * Creates a `Readable` atom that allows reading by subscription.
27
- */
28
- export declare function readable<T>(value?: T, start?: StartStopNotifier<T>): Derived<T>;
29
- /**
30
- * Create a `Writable` atom that allows both updating and reading by subscription.
31
- */
32
- export declare function atom<T>(value: T, start?: StartStopNotifier<T>): Atom<T>;
33
- /**
34
- * Observe atoms and derived values by synchronizing one or more readable atoms within an aggregation function.
35
- */
36
- export declare function observe<T>(fn: () => T): Unsubscriber;
37
- /**
38
- * Create a `Readable` atom that derives its value from other atoms and updates when those atoms change.
39
- */
40
- export declare function derived<T>(fn: (priorValue: T) => T, value?: T): Derived<T>;
package/dist/atom.js DELETED
@@ -1,132 +0,0 @@
1
- const noop = () => { };
2
- // Ensure 2 versions of the signal library can work together
3
- const symbol = Symbol.for('reactiveAtoms');
4
- const root = globalThis[symbol] ||
5
- (globalThis[symbol] = {
6
- context: null,
7
- subscriberQueue: new Map(),
8
- });
9
- /**
10
- * Creates a `Readable` atom that allows reading by subscription.
11
- */
12
- export function readable(value, start) {
13
- const core = atom(value, start);
14
- const readable = () => core();
15
- return Object.assign(readable, { subscribe: core.subscribe });
16
- }
17
- /**
18
- * Create a `Writable` atom that allows both updating and reading by subscription.
19
- */
20
- export function atom(value, start = noop) {
21
- let stop;
22
- let started = false;
23
- const subscribers = new Map();
24
- function atom(newValue) {
25
- if (newValue === undefined) {
26
- if (root.context) {
27
- const { subscriber, unsubscribes, invalidate } = root.context;
28
- const unsubscribe = subscribe(subscriber, invalidate);
29
- unsubscribes.add(unsubscribe);
30
- }
31
- if (!subscribers.size && !started) {
32
- started = true;
33
- try {
34
- (start(atom) || noop)();
35
- }
36
- finally {
37
- started = false;
38
- }
39
- }
40
- return value;
41
- }
42
- else if (value !== newValue) {
43
- value = newValue;
44
- if (stop) {
45
- // atom is ready
46
- const runQueue = !root.subscriberQueue.size;
47
- subscribers.forEach(([, invalidate], subscriber) => {
48
- if (!root.subscriberQueue.has(subscriber)) {
49
- if (invalidate)
50
- invalidate();
51
- }
52
- else {
53
- // move to the end of the queue
54
- root.subscriberQueue.delete(subscriber);
55
- }
56
- root.subscriberQueue.set(subscriber, value);
57
- });
58
- if (runQueue) {
59
- const iter = root.subscriberQueue.entries();
60
- while (root.subscriberQueue.size > 0) {
61
- const [subscriber, value] = iter.next().value;
62
- root.subscriberQueue.delete(subscriber);
63
- subscriber(value);
64
- }
65
- }
66
- }
67
- }
68
- }
69
- function subscribe(subscriber, invalidate) {
70
- let unsubscribe = subscribers.get(subscriber)?.[0];
71
- // If already subscribed, return the existing unsubscribe function
72
- if (unsubscribe)
73
- return unsubscribe;
74
- unsubscribe = () => {
75
- subscribers.delete(subscriber);
76
- if (subscribers.size === 0) {
77
- stop();
78
- stop = null;
79
- }
80
- };
81
- subscribers.set(subscriber, [unsubscribe, invalidate]);
82
- if (subscribers.size === 1) {
83
- stop = start(atom) || noop;
84
- }
85
- // If invalidate is provided, this comes from a derived atom and we should not call the subscriber immediately
86
- if (!invalidate) {
87
- subscriber(value);
88
- }
89
- return unsubscribe;
90
- }
91
- return Object.assign(atom, { subscribe, set: (value) => atom(value) });
92
- }
93
- /**
94
- * Observe atoms and derived values by synchronizing one or more readable atoms within an aggregation function.
95
- */
96
- export function observe(fn) {
97
- return derived(fn).subscribe(noop);
98
- }
99
- /**
100
- * Create a `Readable` atom that derives its value from other atoms and updates when those atoms change.
101
- */
102
- export function derived(fn, value) {
103
- let unsubscribes = new Set();
104
- return readable(value, set => {
105
- let pending = 0;
106
- const subscriber = () => --pending === 0 && sync();
107
- const invalidate = () => pending++;
108
- const sync = () => {
109
- const prior = root.context;
110
- // Set the context for the derived function
111
- root.context = { subscriber, invalidate, unsubscribes: new Set() };
112
- try {
113
- // Run the effect collecting all the unsubscribes from the signals that are called when it is run
114
- value = fn(value);
115
- }
116
- finally {
117
- // Filter out unchanged unsubscribes, leaving only those which no longer apply
118
- root.context.unsubscribes.forEach(u => unsubscribes.delete(u));
119
- // Unsubscribe from all the signals that are no longer needed
120
- unsubscribes.forEach(u => u());
121
- // Set the new unsubscribes
122
- unsubscribes = root.context.unsubscribes;
123
- // Clear the context
124
- root.context = prior;
125
- }
126
- set(value);
127
- };
128
- sync();
129
- return () => unsubscribes.forEach(u => u());
130
- });
131
- }
132
- //# sourceMappingURL=atom.js.map
package/dist/atom.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"atom.js","sourceRoot":"","sources":["../src/atom.ts"],"names":[],"mappings":"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"}