Skip to content

Commit b37efa4

Browse files
committed
feat(devframe): expose bundled perfect-debounce as devframe/utils/debounce
New browser-safe util re-exports perfect-debounce's debounce (bundled into devframe's dist). @devframes/hub and @devframes/plugin-assets now import it through the devframe peer instead of declaring their own perfect-debounce dependency, so the bytes live once and integrations reuse it with no new install. perfect-debounce is now declared only by devframe.
1 parent 69b7613 commit b37efa4

15 files changed

Lines changed: 56 additions & 12 deletions

File tree

‎alias.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export const alias = {
2828
'devframe/utils/agent-tool-name': r('devframe/src/utils/agent-tool-name.ts'),
2929
'devframe/utils/colors': r('devframe/src/utils/colors.ts'),
3030
'devframe/utils/crypto-token': r('devframe/src/utils/crypto-token.ts'),
31+
'devframe/utils/debounce': r('devframe/src/utils/debounce.ts'),
3132
'devframe/utils/events': r('devframe/src/utils/events.ts'),
3233
'devframe/utils/hash': r('devframe/src/utils/hash.ts'),
3334
'devframe/utils/launch-editor': r('devframe/src/utils/launch-editor.ts'),

‎docs/content/8.references/8.utilities.md‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,17 @@ randomDigits(6) // '047204', uniform, leading zeros preserved
9696
timingSafeEqual(input, secret) // constant-time string comparison
9797
```
9898

99+
### `devframe/utils/debounce`
100+
101+
Promise-aware debounce, bundled in so integrations reuse it without adding a `perfect-debounce` dependency.
102+
103+
```ts
104+
import { debounce } from 'devframe/utils/debounce'
105+
106+
const save = debounce((state: State) => write(state), 100)
107+
save(next) // coalesces bursts; returns a promise, plus `.cancel()` / `.flush()` / `.isPending()`
108+
```
109+
99110
### `devframe/utils/events`
100111

101112
Typed event emitter.

‎packages/devframe/package.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
"./utils/agent-tool-name": "./dist/utils/agent-tool-name.mjs",
4949
"./utils/colors": "./dist/utils/colors.mjs",
5050
"./utils/crypto-token": "./dist/utils/crypto-token.mjs",
51+
"./utils/debounce": "./dist/utils/debounce.mjs",
5152
"./utils/events": "./dist/utils/events.mjs",
5253
"./utils/get-port": "./dist/utils/get-port.mjs",
5354
"./utils/hash": "./dist/utils/hash.mjs",

‎packages/devframe/src/node/storage.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import fs from 'node:fs'
22
import process from 'node:process'
3+
import { debounce } from 'devframe/utils/debounce'
34
import { createSharedState } from 'devframe/utils/shared-state'
45
import { dirname } from 'pathe'
5-
import { debounce } from 'perfect-debounce'
66
import { diagnostics } from './diagnostics'
77

88
export interface CreateStorageOptions<T extends object> {
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/**
2+
* Promise-aware debounce, bundled in so any integration can reuse it through
3+
* `devframe/utils/debounce` without adding its own `perfect-debounce`
4+
* dependency. Thin re-export of `perfect-debounce`'s `debounce`; the bytes
5+
* live once in devframe's dist.
6+
*/
7+
export type { DebouncedReturn, DebounceOptions } from 'perfect-debounce'
8+
export { debounce } from 'perfect-debounce'

‎packages/devframe/tsdown.config.ts‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ const clientEntries = {
7878
'utils/agent-tool-name': 'src/utils/agent-tool-name.ts',
7979
'utils/colors': 'src/utils/colors.ts',
8080
'utils/crypto-token': 'src/utils/crypto-token.ts',
81+
'utils/debounce': 'src/utils/debounce.ts',
8182
'utils/events': 'src/utils/events.ts',
8283
'utils/hash': 'src/utils/hash.ts',
8384
'utils/nanoid': 'src/utils/nanoid.ts',
@@ -164,6 +165,7 @@ export default defineConfig([
164165
resolve(distDir, 'utils/agent-tool-name.mjs'),
165166
resolve(distDir, 'utils/colors.mjs'),
166167
resolve(distDir, 'utils/crypto-token.mjs'),
168+
resolve(distDir, 'utils/debounce.mjs'),
167169
resolve(distDir, 'utils/events.mjs'),
168170
resolve(distDir, 'utils/hash.mjs'),
169171
resolve(distDir, 'utils/nanoid.mjs'),

‎packages/hub/package.json‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@
6262
"@types/node": "catalog:types",
6363
"devframe": "workspace:*",
6464
"get-port-please": "catalog:deps",
65-
"perfect-debounce": "catalog:deps",
6665
"tsdown": "catalog:build",
6766
"valibot": "catalog:deps"
6867
}

‎packages/hub/src/node/context.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import type { DevframeTerminalsHost } from '../types/terminals'
77
import type { InstallDevframeOptions } from './install-devframe'
88
import { createHostContext } from 'devframe/node'
99
import { getInternalContext } from 'devframe/node/hub-internals'
10-
import { debounce } from 'perfect-debounce'
10+
import { debounce } from 'devframe/utils/debounce'
1111
import { HUB_EVENTS } from '../events'
1212
import { DevframeCommandsHost as CommandsHostImpl } from './host-commands'
1313
import { DevframeDocksHost as DocksHostImpl } from './host-docks'

‎packages/hub/tsdown.config.ts‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ export default defineConfig({
2626
'@standard-schema/spec',
2727
'acorn',
2828
'get-port-please',
29-
'perfect-debounce',
3029
],
3130
},
3231
})

‎plugins/assets/package.json‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@
7070
"chokidar": "catalog:deps",
7171
"image-meta": "catalog:deps",
7272
"pathe": "catalog:deps",
73-
"perfect-debounce": "catalog:deps",
7473
"tinyglobby": "catalog:deps"
7574
},
7675
"devDependencies": {

0 commit comments

Comments
 (0)