@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.
@@ -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,CAyCZ"}
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
- trailingTimer = setTimeout(() => {
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);
@@ -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.0",
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.0"
41
+ "@flighthq/types": "0.3.1-next.1041.35b950c"
42
42
  },
43
43
  "devDependencies": {
44
44
  "typescript": "^5.3.0"
@@ -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;
@@ -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 after leading with no-leading option', () => {
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(1); // no leading fire
147
- expect(fired).toHaveLength(0);
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
- source.emit(2);
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.length).toBeGreaterThanOrEqual(0); // non-crashing
171
+ expect(fired).toEqual([]);
152
172
  });
153
173
  });