@flighthq/signals 0.3.0 → 0.3.1-next.1041.35b950c
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/dist/throttle.d.ts.map +1 -1
- package/dist/throttle.js +11 -9
- package/dist/throttle.js.map +1 -1
- package/package.json +2 -2
- package/src/emitter.test.ts +5 -0
- package/src/slot.test.ts +5 -0
- package/src/throttle.test.ts +25 -5
package/dist/throttle.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"throttle.d.ts","sourceRoot":"","sources":["../src/throttle.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAI9E;;GAEG;AACH;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,CAAC,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC,EAC3C,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAChC,MAAM,IAAI,CAYZ;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,EACvE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GACxC,MAAM,IAAI,CAiCZ;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,EACvE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GACxC,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"throttle.d.ts","sourceRoot":"","sources":["../src/throttle.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAI9E;;GAEG;AACH;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,CAAC,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC,EAC3C,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAChC,MAAM,IAAI,CAYZ;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,EACvE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GACxC,MAAM,IAAI,CAiCZ;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,EACvE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GACxC,MAAM,IAAI,CA2CZ"}
|
package/dist/throttle.js
CHANGED
|
@@ -96,6 +96,14 @@ export function connectSignalThrottled(source, intervalMs, slot, options) {
|
|
|
96
96
|
trailingTimer = null;
|
|
97
97
|
}
|
|
98
98
|
};
|
|
99
|
+
const scheduleTrailing = (delay) => {
|
|
100
|
+
trailingTimer = setTimeout(() => {
|
|
101
|
+
lastFiredAt = Date.now();
|
|
102
|
+
trailingTimer = null;
|
|
103
|
+
slot(...lastArgs);
|
|
104
|
+
lastArgs = null;
|
|
105
|
+
}, delay);
|
|
106
|
+
};
|
|
99
107
|
const handler = ((...args) => {
|
|
100
108
|
const now = Date.now();
|
|
101
109
|
const remaining = intervalMs - (now - lastFiredAt);
|
|
@@ -105,21 +113,15 @@ export function connectSignalThrottled(source, intervalMs, slot, options) {
|
|
|
105
113
|
if (leading) {
|
|
106
114
|
slot(...args);
|
|
107
115
|
}
|
|
108
|
-
else {
|
|
116
|
+
else if (trailing) {
|
|
109
117
|
lastArgs = args;
|
|
118
|
+
scheduleTrailing(intervalMs);
|
|
110
119
|
}
|
|
111
120
|
}
|
|
112
121
|
else if (trailing) {
|
|
113
122
|
clearTrailing();
|
|
114
123
|
lastArgs = args;
|
|
115
|
-
|
|
116
|
-
lastFiredAt = Date.now();
|
|
117
|
-
trailingTimer = null;
|
|
118
|
-
if (lastArgs !== null) {
|
|
119
|
-
slot(...lastArgs);
|
|
120
|
-
lastArgs = null;
|
|
121
|
-
}
|
|
122
|
-
}, remaining);
|
|
124
|
+
scheduleTrailing(remaining);
|
|
123
125
|
}
|
|
124
126
|
});
|
|
125
127
|
connectSignal(source, handler);
|
package/dist/throttle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"throttle.js","sourceRoot":"","sources":["../src/throttle.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"throttle.js","sourceRoot":"","sources":["../src/throttle.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flighthq/signals",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.1-next.1041.35b950c",
|
|
4
4
|
"author": "Joshua Granick and other contributors",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"clean:dist": "tsx ../../scripts/clean-package-dist.ts"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@flighthq/types": "0.3.
|
|
41
|
+
"@flighthq/types": "0.3.1-next.1041.35b950c"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"typescript": "^5.3.0"
|
package/src/emitter.test.ts
CHANGED
|
@@ -3,6 +3,11 @@ import { createSignal } from './signal';
|
|
|
3
3
|
import { connectSignal } from './slot';
|
|
4
4
|
|
|
5
5
|
describe('cancelSignal', () => {
|
|
6
|
+
it('does nothing when no slots are connected', () => {
|
|
7
|
+
const signal = createSignal<() => void>();
|
|
8
|
+
expect(() => cancelSignal(signal)).not.toThrow();
|
|
9
|
+
});
|
|
10
|
+
|
|
6
11
|
it('stops emit after the canceling slot', () => {
|
|
7
12
|
const signal = createSignal<() => void>();
|
|
8
13
|
const order: number[] = [];
|
package/src/slot.test.ts
CHANGED
|
@@ -114,6 +114,11 @@ describe('connectSignal', () => {
|
|
|
114
114
|
});
|
|
115
115
|
|
|
116
116
|
describe('disconnectSignal', () => {
|
|
117
|
+
it('does nothing when no slots are connected', () => {
|
|
118
|
+
const signal = createSignal<() => void>();
|
|
119
|
+
expect(() => disconnectSignal(signal, () => {})).not.toThrow();
|
|
120
|
+
});
|
|
121
|
+
|
|
117
122
|
it('removes a specific slot', () => {
|
|
118
123
|
const signal = createSignal<() => void>();
|
|
119
124
|
let count = 0;
|
package/src/throttle.test.ts
CHANGED
|
@@ -139,15 +139,35 @@ describe('connectSignalThrottled', () => {
|
|
|
139
139
|
expect(count).toBe(1); // trailing was cancelled
|
|
140
140
|
});
|
|
141
141
|
|
|
142
|
-
it('fires on the trailing edge
|
|
142
|
+
it('fires the first emission on the trailing edge when leading is disabled', () => {
|
|
143
143
|
const source = createSignal<(v: number) => void>();
|
|
144
144
|
const fired: number[] = [];
|
|
145
145
|
connectSignalThrottled(source, 100, (v) => fired.push(v), { leading: false, trailing: true });
|
|
146
|
-
source.emit(
|
|
147
|
-
expect(fired).
|
|
146
|
+
source.emit(3);
|
|
147
|
+
expect(fired).toEqual([]);
|
|
148
|
+
vi.advanceTimersByTime(99);
|
|
149
|
+
expect(fired).toEqual([]);
|
|
150
|
+
vi.advanceTimersByTime(1);
|
|
151
|
+
expect(fired).toEqual([3]);
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
it('ignores cooldown emissions when trailing is disabled', () => {
|
|
155
|
+
const source = createSignal<(v: number) => void>();
|
|
156
|
+
const fired: number[] = [];
|
|
157
|
+
connectSignalThrottled(source, 100, (v) => fired.push(v), { trailing: false });
|
|
158
|
+
source.emit(3);
|
|
159
|
+
vi.advanceTimersByTime(50);
|
|
160
|
+
source.emit(7);
|
|
148
161
|
vi.advanceTimersByTime(100);
|
|
149
|
-
|
|
162
|
+
expect(fired).toEqual([3]);
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
it('does not fire when both leading and trailing are disabled', () => {
|
|
166
|
+
const source = createSignal<(v: number) => void>();
|
|
167
|
+
const fired: number[] = [];
|
|
168
|
+
connectSignalThrottled(source, 100, (v) => fired.push(v), { leading: false, trailing: false });
|
|
169
|
+
source.emit(3);
|
|
150
170
|
vi.advanceTimersByTime(100);
|
|
151
|
-
expect(fired
|
|
171
|
+
expect(fired).toEqual([]);
|
|
152
172
|
});
|
|
153
173
|
});
|