@tailwind-merge/vite 0.0.0-dev.50b1d1e9f69ac68604be38dabea94cccdc6b070a
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/LICENSE.md +21 -0
- package/README.md +41 -0
- package/dist/index.d.mts +58 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +3040 -0
- package/dist/index.mjs.map +1 -0
- package/dist/runtime.d.mts +2 -0
- package/dist/runtime.mjs +2 -0
- package/dist/tailwind-merge.d.mts +1 -0
- package/dist/tailwind-merge.mjs +2 -0
- package/package.json +80 -0
- package/src/index.ts +398 -0
- package/src/prune-options.ts +47 -0
- package/src/resolution.ts +40 -0
- package/src/runtime.ts +19 -0
- package/src/tailwind-merge.ts +8 -0
- package/src/updates.ts +55 -0
package/src/updates.ts
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export type UpdateTrigger = 'config' | 'sources'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Coalesces dev-server edits without losing a CSS change or allowing generations to race. A config update subsumes source updates because it recreates the scanner as well. Edits arriving during a run are retained for the next run; disposal cancels pending work and lets Vite await an active generation before restarting the server.
|
|
5
|
+
*/
|
|
6
|
+
export function createUpdateScheduler(
|
|
7
|
+
update: (trigger: UpdateTrigger) => Promise<void>,
|
|
8
|
+
onError: (error: unknown) => void,
|
|
9
|
+
) {
|
|
10
|
+
let pending: UpdateTrigger | undefined
|
|
11
|
+
let timer: ReturnType<typeof setTimeout> | undefined
|
|
12
|
+
let running: Promise<void> | undefined
|
|
13
|
+
let disposed = false
|
|
14
|
+
|
|
15
|
+
return {
|
|
16
|
+
schedule(trigger: UpdateTrigger) {
|
|
17
|
+
if (disposed) {
|
|
18
|
+
return
|
|
19
|
+
}
|
|
20
|
+
pending = pending === 'config' ? pending : trigger
|
|
21
|
+
clearTimeout(timer)
|
|
22
|
+
timer = setTimeout(() => {
|
|
23
|
+
timer = undefined
|
|
24
|
+
flush()
|
|
25
|
+
}, UPDATE_DEBOUNCE_MS)
|
|
26
|
+
},
|
|
27
|
+
dispose() {
|
|
28
|
+
disposed = true
|
|
29
|
+
clearTimeout(timer)
|
|
30
|
+
timer = undefined
|
|
31
|
+
pending = undefined
|
|
32
|
+
return running
|
|
33
|
+
},
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function flush() {
|
|
37
|
+
if (running || disposed || pending === undefined) {
|
|
38
|
+
return
|
|
39
|
+
}
|
|
40
|
+
const trigger = pending
|
|
41
|
+
pending = undefined
|
|
42
|
+
running = Promise.resolve()
|
|
43
|
+
.then(() => update(trigger))
|
|
44
|
+
.catch(onError)
|
|
45
|
+
.finally(() => {
|
|
46
|
+
running = undefined
|
|
47
|
+
// An expired debounce may have found an active run. Drain its queued update now; a still-pending timer keeps its own debounce window.
|
|
48
|
+
if (timer === undefined && pending !== undefined && !disposed) {
|
|
49
|
+
flush()
|
|
50
|
+
}
|
|
51
|
+
})
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const UPDATE_DEBOUNCE_MS = 100
|