osc-progress 0.2.0 → 0.3.1
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/CHANGELOG.md +27 -0
- package/LICENSE +1 -1
- package/README.md +42 -19
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/oscProgress.js +181 -44
- package/dist/esm/oscProgress.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/oscProgress.d.ts +29 -3
- package/package.json +42 -40
package/CHANGELOG.md
CHANGED
|
@@ -1,12 +1,39 @@
|
|
|
1
1
|
# Changelog
|
|
2
|
+
|
|
2
3
|
All notable changes to this project are documented in this file.
|
|
3
4
|
|
|
5
|
+
## 0.3.1 - 2026-06-10
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- Add a package export `default` condition so CJS-style resolvers can find the ESM entrypoint. (`#8`, thanks `@grimmjoww`)
|
|
10
|
+
- Strip control characters from OSC progress labels so labels cannot break emitted progress sequences. (`#15`, thanks `@devYRPauli`)
|
|
11
|
+
|
|
12
|
+
## 0.3.0 - 2026-01-20
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- Throttled/deduped OSC progress updates (default).
|
|
17
|
+
- Stalled/paused state support (`setPaused`, `stallAfterMs`).
|
|
18
|
+
- Completion/error helpers (`done`, `fail`) with delayed clear (`clearDelayMs`).
|
|
19
|
+
- Optional auto-clear on process exit (`autoClearOnExit`).
|
|
20
|
+
- Controller cleanup via `dispose()`.
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
|
|
24
|
+
- `createOscProgressController` now returns an extended controller with pause/done/fail helpers.
|
|
25
|
+
- Controller updates are throttled by default (behavior change).
|
|
26
|
+
|
|
4
27
|
## 0.2.0 - 2025-12-25
|
|
28
|
+
|
|
5
29
|
### Added
|
|
30
|
+
|
|
6
31
|
- `createOscProgressController` for stateful determinate/indeterminate updates.
|
|
7
32
|
|
|
8
33
|
## 0.1.0 - 2025-12-19
|
|
34
|
+
|
|
9
35
|
### Added
|
|
36
|
+
|
|
10
37
|
- OSC 9;4 progress emitter (`startOscProgress`) with determinate (`0% → 99%`) and indeterminate modes.
|
|
11
38
|
- Terminal support detection (`supportsOscProgress`) with safe defaults (TTY-only) and heuristics for Ghostty / WezTerm / Windows Terminal.
|
|
12
39
|
- Environment overrides (`force`/`disabled` and `forceEnvVar`/`disableEnvVar`).
|
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ⏳ osc-progress — Tiny lib for OSC 9;4 terminal progress.
|
|
2
2
|
|
|
3
|
-
Tiny TypeScript helper for **OSC 9;4** terminal progress
|
|
3
|
+
Tiny TypeScript helper for **OSC 9;4** terminal progress (Ghostty / WezTerm / Windows Terminal).
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
@@ -11,37 +11,37 @@ pnpm add osc-progress
|
|
|
11
11
|
## Usage
|
|
12
12
|
|
|
13
13
|
```ts
|
|
14
|
-
import process from
|
|
15
|
-
import { startOscProgress } from
|
|
14
|
+
import process from "node:process";
|
|
15
|
+
import { startOscProgress } from "osc-progress";
|
|
16
16
|
|
|
17
17
|
const stop = startOscProgress({
|
|
18
|
-
label:
|
|
18
|
+
label: "Fetching",
|
|
19
19
|
write: (chunk) => process.stderr.write(chunk),
|
|
20
20
|
env: process.env,
|
|
21
21
|
isTty: process.stderr.isTTY,
|
|
22
|
-
})
|
|
22
|
+
});
|
|
23
23
|
|
|
24
24
|
// ...do work...
|
|
25
25
|
|
|
26
|
-
stop()
|
|
26
|
+
stop();
|
|
27
27
|
```
|
|
28
28
|
|
|
29
29
|
Indeterminate (spinner-like) mode:
|
|
30
30
|
|
|
31
31
|
```ts
|
|
32
|
-
import { startOscProgress } from
|
|
32
|
+
import { startOscProgress } from "osc-progress";
|
|
33
33
|
|
|
34
|
-
const stop = startOscProgress({ label:
|
|
34
|
+
const stop = startOscProgress({ label: "Waiting", indeterminate: true });
|
|
35
35
|
// ...
|
|
36
|
-
stop()
|
|
36
|
+
stop();
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
Strip OSC progress from stored logs:
|
|
40
40
|
|
|
41
41
|
```ts
|
|
42
|
-
import { sanitizeOscProgress } from
|
|
42
|
+
import { sanitizeOscProgress } from "osc-progress";
|
|
43
43
|
|
|
44
|
-
const clean = sanitizeOscProgress(text, /*keepOsc*/ process.stdout.isTTY)
|
|
44
|
+
const clean = sanitizeOscProgress(text, /*keepOsc*/ process.stdout.isTTY);
|
|
45
45
|
```
|
|
46
46
|
|
|
47
47
|
## API
|
|
@@ -51,10 +51,12 @@ const clean = sanitizeOscProgress(text, /*keepOsc*/ process.stdout.isTTY)
|
|
|
51
51
|
Returns `true` when emitting OSC 9;4 progress makes sense.
|
|
52
52
|
|
|
53
53
|
Heuristics:
|
|
54
|
+
|
|
54
55
|
- requires a TTY
|
|
55
56
|
- enables for `TERM_PROGRAM=ghostty*`, `TERM_PROGRAM=wezterm*`, or `WT_SESSION` (Windows Terminal)
|
|
56
57
|
|
|
57
58
|
Optional overrides:
|
|
59
|
+
|
|
58
60
|
- `options.disabled` / `options.force`
|
|
59
61
|
- `options.disableEnvVar` / `options.forceEnvVar` (expects `= "1"`)
|
|
60
62
|
|
|
@@ -63,6 +65,7 @@ Optional overrides:
|
|
|
63
65
|
Starts a best-effort progress indicator and returns `stop(): void`.
|
|
64
66
|
|
|
65
67
|
Notes:
|
|
68
|
+
|
|
66
69
|
- `label` is appended as extra payload; **not part of the canonical OSC 9;4 spec** (many terminals ignore it, some show it).
|
|
67
70
|
- default is a timer-driven `0% → 99%` progression (never completes by itself).
|
|
68
71
|
- `terminator` defaults to `st` (`ESC \\`); `bel` is also supported.
|
|
@@ -70,33 +73,53 @@ Notes:
|
|
|
70
73
|
### `createOscProgressController(options?)`
|
|
71
74
|
|
|
72
75
|
Returns a small stateful controller:
|
|
76
|
+
|
|
73
77
|
- `setIndeterminate(label)`
|
|
74
78
|
- `setPercent(label, percent)`
|
|
79
|
+
- `setPaused(label)` (state `4`)
|
|
80
|
+
- `done(label?)` (emit 100% then clear)
|
|
81
|
+
- `fail(label?)` (emit error state then clear)
|
|
75
82
|
- `clear()`
|
|
83
|
+
- `dispose()` (cleanup timers/listeners)
|
|
76
84
|
|
|
77
85
|
Use this when you already have real progress (bytes/total, seconds/total) and want determinate terminal progress instead of the timer-based ramp.
|
|
78
86
|
|
|
79
87
|
Notes:
|
|
88
|
+
|
|
80
89
|
- returns no-op methods when `supportsOscProgress(...)` is false
|
|
81
90
|
- `percent` is rounded and clamped to `0..100`
|
|
82
91
|
- `clear()` uses the last label (or the initial `options.label` if nothing was set yet)
|
|
92
|
+
- progress updates are throttled by default (deduped + max ~1 update/150ms)
|
|
93
|
+
- `stallAfterMs` emits a paused/stalled state when updates stop
|
|
94
|
+
- `clearDelayMs` controls how long `done()` / `fail()` wait before clearing
|
|
95
|
+
- `autoClearOnExit` clears on process exit
|
|
83
96
|
|
|
84
97
|
```ts
|
|
85
|
-
import process from
|
|
86
|
-
import { createOscProgressController } from
|
|
98
|
+
import process from "node:process";
|
|
99
|
+
import { createOscProgressController } from "osc-progress";
|
|
87
100
|
|
|
88
101
|
const osc = createOscProgressController({
|
|
89
102
|
env: process.env,
|
|
90
103
|
isTty: process.stderr.isTTY,
|
|
91
104
|
write: (chunk) => process.stderr.write(chunk),
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
osc.
|
|
105
|
+
stallAfterMs: 10_000,
|
|
106
|
+
clearDelayMs: 200,
|
|
107
|
+
autoClearOnExit: true,
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
osc.setIndeterminate("Connecting");
|
|
111
|
+
osc.setPercent("Downloading", 12);
|
|
112
|
+
osc.setPercent("Downloading", 67);
|
|
113
|
+
osc.done();
|
|
98
114
|
```
|
|
99
115
|
|
|
116
|
+
#### Controller options
|
|
117
|
+
|
|
118
|
+
- `stallAfterMs`: emit state=4 when no updates are seen within this window.
|
|
119
|
+
- `stalledLabel`: override stalled label (string or formatter).
|
|
120
|
+
- `clearDelayMs`: delay before `done()`/`fail()` clears.
|
|
121
|
+
- `autoClearOnExit`: clear progress on process exit.
|
|
122
|
+
|
|
100
123
|
### `sanitizeOscProgress(text, keepOsc)`
|
|
101
124
|
|
|
102
125
|
Removes OSC 9;4 progress sequences (terminated by `BEL`, `ST` (`ESC \\`), or `0x9c`).
|
package/dist/esm/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { createOscProgressController, findOscProgressSequences, OSC_PROGRESS_BEL, OSC_PROGRESS_C1_ST, OSC_PROGRESS_PREFIX, OSC_PROGRESS_ST, sanitizeLabel, sanitizeOscProgress, startOscProgress, stripOscProgress, supportsOscProgress, } from
|
|
1
|
+
export { createOscProgressController, findOscProgressSequences, OSC_PROGRESS_BEL, OSC_PROGRESS_C1_ST, OSC_PROGRESS_PREFIX, OSC_PROGRESS_ST, sanitizeLabel, sanitizeOscProgress, startOscProgress, stripOscProgress, supportsOscProgress, } from "./oscProgress.js";
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,EACxB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,EACxB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EAQf,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC"}
|
package/dist/esm/oscProgress.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import process from
|
|
1
|
+
import process from "node:process";
|
|
2
2
|
/**
|
|
3
3
|
* OSC 9;4 progress prefix (`ESC ] 9 ; 4 ;`).
|
|
4
4
|
*
|
|
@@ -6,27 +6,37 @@ import process from 'node:process';
|
|
|
6
6
|
* - `ESC ] 9;4;<state>;<percent>;<payload> ST`
|
|
7
7
|
* - `ESC ] 9;4;<state>;;<payload> ST` (indeterminate)
|
|
8
8
|
*/
|
|
9
|
-
export const OSC_PROGRESS_PREFIX =
|
|
9
|
+
export const OSC_PROGRESS_PREFIX = "\u001b]9;4;";
|
|
10
10
|
/** String Terminator (ST): `ESC \\` */
|
|
11
|
-
export const OSC_PROGRESS_ST =
|
|
11
|
+
export const OSC_PROGRESS_ST = "\u001b\\";
|
|
12
12
|
/** Bell (BEL): `0x07` */
|
|
13
|
-
export const OSC_PROGRESS_BEL =
|
|
13
|
+
export const OSC_PROGRESS_BEL = "\u0007";
|
|
14
14
|
/** C1 String Terminator (ST): `0x9c` */
|
|
15
|
-
export const OSC_PROGRESS_C1_ST =
|
|
15
|
+
export const OSC_PROGRESS_C1_ST = "\u009c";
|
|
16
|
+
const DEFAULT_THROTTLE_INTERVAL_MS = 150;
|
|
17
|
+
const DEFAULT_CLEAR_DELAY_MS = 150;
|
|
16
18
|
function resolveTerminator(terminator) {
|
|
17
|
-
return terminator ===
|
|
19
|
+
return terminator === "bel" ? OSC_PROGRESS_BEL : OSC_PROGRESS_ST;
|
|
18
20
|
}
|
|
19
21
|
/**
|
|
20
22
|
* Sanitizes a label/payload so it can't break the surrounding OSC sequence.
|
|
21
23
|
* Removes escape chars and common OSC terminators; trims whitespace.
|
|
22
24
|
*/
|
|
23
25
|
export function sanitizeLabel(label) {
|
|
24
|
-
const withoutSt = label.replaceAll(OSC_PROGRESS_ST,
|
|
25
|
-
const withoutEscape = withoutSt.split(
|
|
26
|
+
const withoutSt = label.replaceAll(OSC_PROGRESS_ST, "");
|
|
27
|
+
const withoutEscape = withoutSt.split("\u001b").join("");
|
|
26
28
|
const withoutTerminators = withoutEscape
|
|
27
|
-
.replaceAll(OSC_PROGRESS_BEL,
|
|
28
|
-
.replaceAll(OSC_PROGRESS_C1_ST,
|
|
29
|
-
|
|
29
|
+
.replaceAll(OSC_PROGRESS_BEL, "")
|
|
30
|
+
.replaceAll(OSC_PROGRESS_C1_ST, "");
|
|
31
|
+
// Strip remaining C0 controls and DEL; a bare newline/CR/tab inside the
|
|
32
|
+
// payload would otherwise terminate or garble the surrounding OSC sequence.
|
|
33
|
+
const withoutControls = [...withoutTerminators]
|
|
34
|
+
.filter((ch) => {
|
|
35
|
+
const code = ch.codePointAt(0) ?? 0;
|
|
36
|
+
return code > 0x1f && code !== 0x7f;
|
|
37
|
+
})
|
|
38
|
+
.join("");
|
|
39
|
+
return withoutControls.replaceAll("]", "").trim();
|
|
30
40
|
}
|
|
31
41
|
/**
|
|
32
42
|
* Best-effort check whether OSC 9;4 progress output is likely to work.
|
|
@@ -46,16 +56,16 @@ export function supportsOscProgress(env = process.env, isTty = process.stdout.is
|
|
|
46
56
|
return false;
|
|
47
57
|
if (options.force)
|
|
48
58
|
return true;
|
|
49
|
-
if (options.disableEnvVar && env[options.disableEnvVar] ===
|
|
59
|
+
if (options.disableEnvVar && env[options.disableEnvVar] === "1") {
|
|
50
60
|
return false;
|
|
51
61
|
}
|
|
52
|
-
if (options.forceEnvVar && env[options.forceEnvVar] ===
|
|
62
|
+
if (options.forceEnvVar && env[options.forceEnvVar] === "1") {
|
|
53
63
|
return true;
|
|
54
64
|
}
|
|
55
|
-
const termProgram = (env.TERM_PROGRAM ??
|
|
56
|
-
if (termProgram.includes(
|
|
65
|
+
const termProgram = (env.TERM_PROGRAM ?? "").toLowerCase();
|
|
66
|
+
if (termProgram.includes("ghostty"))
|
|
57
67
|
return true;
|
|
58
|
-
if (termProgram.includes(
|
|
68
|
+
if (termProgram.includes("wezterm"))
|
|
59
69
|
return true;
|
|
60
70
|
if (env.WT_SESSION)
|
|
61
71
|
return true;
|
|
@@ -83,15 +93,15 @@ export function findOscProgressSequences(text) {
|
|
|
83
93
|
const candidates = [];
|
|
84
94
|
const stStart = text.indexOf(OSC_PROGRESS_ST, after);
|
|
85
95
|
if (stStart !== -1) {
|
|
86
|
-
candidates.push({ endExclusive: stStart + OSC_PROGRESS_ST.length, terminator:
|
|
96
|
+
candidates.push({ endExclusive: stStart + OSC_PROGRESS_ST.length, terminator: "st" });
|
|
87
97
|
}
|
|
88
98
|
const belStart = text.indexOf(OSC_PROGRESS_BEL, after);
|
|
89
99
|
if (belStart !== -1) {
|
|
90
|
-
candidates.push({ endExclusive: belStart + OSC_PROGRESS_BEL.length, terminator:
|
|
100
|
+
candidates.push({ endExclusive: belStart + OSC_PROGRESS_BEL.length, terminator: "bel" });
|
|
91
101
|
}
|
|
92
102
|
const c1Start = text.indexOf(OSC_PROGRESS_C1_ST, after);
|
|
93
103
|
if (c1Start !== -1) {
|
|
94
|
-
candidates.push({ endExclusive: c1Start + OSC_PROGRESS_C1_ST.length, terminator:
|
|
104
|
+
candidates.push({ endExclusive: c1Start + OSC_PROGRESS_C1_ST.length, terminator: "c1st" });
|
|
95
105
|
}
|
|
96
106
|
if (candidates.length === 0) {
|
|
97
107
|
searchFrom = after;
|
|
@@ -154,7 +164,7 @@ export function sanitizeOscProgress(text, keepOsc) {
|
|
|
154
164
|
* - indeterminate mode emits `state=3` and `stop()` clears progress
|
|
155
165
|
*/
|
|
156
166
|
export function startOscProgress(options = {}) {
|
|
157
|
-
const { label =
|
|
167
|
+
const { label = "Working…", targetMs = 10 * 60_000, write = (text) => process.stderr.write(text), indeterminate = false, state = 1, terminator, } = options;
|
|
158
168
|
if (!supportsOscProgress(options.env, options.isTty, options)) {
|
|
159
169
|
return () => { };
|
|
160
170
|
}
|
|
@@ -206,41 +216,168 @@ export function startOscProgress(options = {}) {
|
|
|
206
216
|
*/
|
|
207
217
|
export function createOscProgressController(options = {}) {
|
|
208
218
|
// Default to stderr: progress belongs with other interactive output and avoids polluting stdout pipes.
|
|
209
|
-
const { label =
|
|
219
|
+
const { label = "Working…", write = (text) => process.stderr.write(text), terminator, stallAfterMs = 0, stalledLabel, clearDelayMs = DEFAULT_CLEAR_DELAY_MS, autoClearOnExit = false, } = options;
|
|
210
220
|
if (!supportsOscProgress(options.env, options.isTty, options)) {
|
|
211
221
|
// No-op controller: callers can keep their code linear and still be safe in unsupported terminals/logs.
|
|
212
|
-
return {
|
|
222
|
+
return {
|
|
223
|
+
setIndeterminate: () => { },
|
|
224
|
+
setPercent: () => { },
|
|
225
|
+
setPaused: () => { },
|
|
226
|
+
done: () => { },
|
|
227
|
+
fail: () => { },
|
|
228
|
+
clear: () => { },
|
|
229
|
+
dispose: () => { },
|
|
230
|
+
};
|
|
213
231
|
}
|
|
214
232
|
// Resolve once; avoids branching in hot paths.
|
|
215
233
|
const end = resolveTerminator(terminator);
|
|
216
|
-
const
|
|
234
|
+
const resolveStalledLabel = (baseLabel) => {
|
|
235
|
+
if (typeof stalledLabel === "function")
|
|
236
|
+
return stalledLabel(baseLabel);
|
|
237
|
+
if (typeof stalledLabel === "string")
|
|
238
|
+
return stalledLabel;
|
|
239
|
+
return `${baseLabel} (stalled)`;
|
|
240
|
+
};
|
|
241
|
+
const normalizePercent = (percent) => Math.max(0, Math.min(100, Math.round(percent)));
|
|
242
|
+
let lastEmittedLabel = label;
|
|
243
|
+
let lastEmittedPercent = null;
|
|
244
|
+
let lastEmittedState = null;
|
|
245
|
+
let lastEmitAt = 0;
|
|
246
|
+
let hasEmitted = false;
|
|
247
|
+
let lastSeenLabel = label;
|
|
248
|
+
let lastSeenPercent = 0;
|
|
249
|
+
let lastSeenMode = "indeterminate";
|
|
250
|
+
let stallTimer = null;
|
|
251
|
+
let clearTimer = null;
|
|
252
|
+
let stallEnabled = true;
|
|
253
|
+
const clearStallTimer = () => {
|
|
254
|
+
if (stallTimer !== null) {
|
|
255
|
+
clearTimeout(stallTimer);
|
|
256
|
+
stallTimer = null;
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
const clearTimers = () => {
|
|
260
|
+
clearStallTimer();
|
|
261
|
+
if (clearTimer !== null) {
|
|
262
|
+
clearTimeout(clearTimer);
|
|
263
|
+
clearTimer = null;
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
const scheduleStall = () => {
|
|
267
|
+
if (!stallAfterMs || stallAfterMs <= 0)
|
|
268
|
+
return;
|
|
269
|
+
if (stallTimer !== null)
|
|
270
|
+
clearTimeout(stallTimer);
|
|
271
|
+
stallTimer = setTimeout(() => {
|
|
272
|
+
stallTimer = null;
|
|
273
|
+
if (!stallEnabled)
|
|
274
|
+
return;
|
|
275
|
+
const labelToUse = resolveStalledLabel(lastSeenLabel);
|
|
276
|
+
const percent = lastSeenMode === "determinate" ? lastSeenPercent : null;
|
|
277
|
+
send(4, percent, labelToUse, true);
|
|
278
|
+
}, stallAfterMs);
|
|
279
|
+
stallTimer.unref?.();
|
|
280
|
+
};
|
|
281
|
+
const scheduleClear = () => {
|
|
282
|
+
if (clearDelayMs <= 0) {
|
|
283
|
+
clear();
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
if (clearTimer !== null)
|
|
287
|
+
clearTimeout(clearTimer);
|
|
288
|
+
clearTimer = setTimeout(() => {
|
|
289
|
+
clearTimer = null;
|
|
290
|
+
clear();
|
|
291
|
+
}, clearDelayMs);
|
|
292
|
+
clearTimer.unref?.();
|
|
293
|
+
};
|
|
294
|
+
const send = (state, percent, nextLabel, force = false) => {
|
|
217
295
|
// Always sanitize; labels often come from user-visible input (filenames/URLs) and must not break OSC.
|
|
218
296
|
const cleanLabel = sanitizeLabel(nextLabel);
|
|
219
|
-
|
|
220
|
-
|
|
297
|
+
const normalizedPercent = percent == null ? null : normalizePercent(percent);
|
|
298
|
+
const now = Date.now();
|
|
299
|
+
const stateChanged = state !== lastEmittedState;
|
|
300
|
+
const labelChanged = cleanLabel !== lastEmittedLabel;
|
|
301
|
+
const percentChanged = normalizedPercent !== lastEmittedPercent;
|
|
302
|
+
const withinInterval = now - lastEmitAt < DEFAULT_THROTTLE_INTERVAL_MS;
|
|
303
|
+
let shouldEmit = force || !hasEmitted || stateChanged || labelChanged;
|
|
304
|
+
if (!shouldEmit && percentChanged) {
|
|
305
|
+
shouldEmit = !withinInterval;
|
|
306
|
+
}
|
|
307
|
+
if (!shouldEmit)
|
|
221
308
|
return;
|
|
309
|
+
if (normalizedPercent == null) {
|
|
310
|
+
write(`${OSC_PROGRESS_PREFIX}${state};;${cleanLabel}${end}`);
|
|
222
311
|
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
312
|
+
else {
|
|
313
|
+
write(`${OSC_PROGRESS_PREFIX}${state};${normalizedPercent};${cleanLabel}${end}`);
|
|
314
|
+
}
|
|
315
|
+
lastEmittedLabel = cleanLabel;
|
|
316
|
+
lastEmittedPercent = normalizedPercent;
|
|
317
|
+
lastEmittedState = state;
|
|
318
|
+
lastEmitAt = now;
|
|
319
|
+
hasEmitted = true;
|
|
226
320
|
};
|
|
227
321
|
// Remember the last user-provided label so `clear()` clears the most recent task label.
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
322
|
+
const updateSeen = (nextLabel, mode, percent, shouldScheduleStall = true) => {
|
|
323
|
+
lastSeenLabel = nextLabel;
|
|
324
|
+
lastSeenMode = mode;
|
|
325
|
+
lastSeenPercent = percent ?? 0;
|
|
326
|
+
if (shouldScheduleStall) {
|
|
327
|
+
scheduleStall();
|
|
328
|
+
}
|
|
329
|
+
};
|
|
330
|
+
const setIndeterminate = (nextLabel) => {
|
|
331
|
+
stallEnabled = true;
|
|
332
|
+
updateSeen(nextLabel, "indeterminate", null);
|
|
333
|
+
send(3, null, nextLabel);
|
|
334
|
+
};
|
|
335
|
+
const setPercent = (nextLabel, percent) => {
|
|
336
|
+
const normalized = normalizePercent(percent);
|
|
337
|
+
stallEnabled = true;
|
|
338
|
+
updateSeen(nextLabel, "determinate", normalized);
|
|
339
|
+
send(1, normalized, nextLabel);
|
|
340
|
+
};
|
|
341
|
+
const setPaused = (nextLabel) => {
|
|
342
|
+
stallEnabled = false;
|
|
343
|
+
const percent = lastSeenMode === "determinate" ? lastSeenPercent : null;
|
|
344
|
+
updateSeen(nextLabel, lastSeenMode, lastSeenMode === "determinate" ? lastSeenPercent : null, false);
|
|
345
|
+
send(4, percent, nextLabel, true);
|
|
346
|
+
};
|
|
347
|
+
const clear = () => {
|
|
348
|
+
stallEnabled = false;
|
|
349
|
+
clearTimers();
|
|
350
|
+
send(0, 0, lastSeenLabel, true);
|
|
351
|
+
};
|
|
352
|
+
const done = (nextLabel) => {
|
|
353
|
+
const labelToUse = nextLabel ?? lastSeenLabel;
|
|
354
|
+
stallEnabled = false;
|
|
355
|
+
clearStallTimer();
|
|
356
|
+
updateSeen(labelToUse, "determinate", 100, false);
|
|
357
|
+
send(1, 100, labelToUse, true);
|
|
358
|
+
scheduleClear();
|
|
359
|
+
};
|
|
360
|
+
const fail = (nextLabel) => {
|
|
361
|
+
const labelToUse = nextLabel ?? lastSeenLabel;
|
|
362
|
+
const percent = lastSeenMode === "determinate" ? lastSeenPercent : null;
|
|
363
|
+
stallEnabled = false;
|
|
364
|
+
clearStallTimer();
|
|
365
|
+
updateSeen(labelToUse, lastSeenMode, lastSeenMode === "determinate" ? lastSeenPercent : null, false);
|
|
366
|
+
send(2, percent, labelToUse, true);
|
|
367
|
+
scheduleClear();
|
|
368
|
+
};
|
|
369
|
+
const handleExit = () => {
|
|
370
|
+
clear();
|
|
371
|
+
};
|
|
372
|
+
if (autoClearOnExit) {
|
|
373
|
+
process.once("exit", handleExit);
|
|
374
|
+
}
|
|
375
|
+
const dispose = () => {
|
|
376
|
+
clearTimers();
|
|
377
|
+
if (autoClearOnExit) {
|
|
378
|
+
process.off("exit", handleExit);
|
|
379
|
+
}
|
|
244
380
|
};
|
|
381
|
+
return { setIndeterminate, setPercent, setPaused, done, fail, clear, dispose };
|
|
245
382
|
}
|
|
246
383
|
//# sourceMappingURL=oscProgress.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oscProgress.js","sourceRoot":"","sources":["../../src/oscProgress.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"oscProgress.js","sourceRoot":"","sources":["../../src/oscProgress.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { createOscProgressController, findOscProgressSequences, OSC_PROGRESS_BEL, OSC_PROGRESS_C1_ST, OSC_PROGRESS_PREFIX, OSC_PROGRESS_ST, type OscProgressController, type OscProgressOptions, type OscProgressSequence, type OscProgressSupportOptions, type OscProgressTerminator, sanitizeLabel, sanitizeOscProgress, startOscProgress, stripOscProgress, supportsOscProgress, } from
|
|
1
|
+
export { createOscProgressController, findOscProgressSequences, OSC_PROGRESS_BEL, OSC_PROGRESS_C1_ST, OSC_PROGRESS_PREFIX, OSC_PROGRESS_ST, type OscProgressController, type OscProgressControllerOptions, type OscProgressOptions, type OscProgressReporter, type OscProgressSequence, type OscProgressSupportOptions, type OscProgressTerminator, sanitizeLabel, sanitizeOscProgress, startOscProgress, stripOscProgress, supportsOscProgress, } from "./oscProgress.js";
|
|
@@ -13,7 +13,7 @@ export declare const OSC_PROGRESS_BEL = "\u0007";
|
|
|
13
13
|
/** C1 String Terminator (ST): `0x9c` */
|
|
14
14
|
export declare const OSC_PROGRESS_C1_ST = "\u009C";
|
|
15
15
|
/** How to terminate the OSC sequence when emitting. */
|
|
16
|
-
export type OscProgressTerminator =
|
|
16
|
+
export type OscProgressTerminator = "st" | "bel";
|
|
17
17
|
export interface OscProgressSupportOptions {
|
|
18
18
|
/** Force support on/off, overriding env heuristics. */
|
|
19
19
|
force?: boolean;
|
|
@@ -54,6 +54,22 @@ export interface OscProgressOptions extends OscProgressSupportOptions {
|
|
|
54
54
|
/** OSC terminator to use. `st` = ESC \\, `bel` = BEL. */
|
|
55
55
|
terminator?: OscProgressTerminator;
|
|
56
56
|
}
|
|
57
|
+
export interface OscProgressControllerOptions extends OscProgressOptions {
|
|
58
|
+
/**
|
|
59
|
+
* Emit a stalled state when no updates arrive within this window.
|
|
60
|
+
* Set to 0 to disable (default).
|
|
61
|
+
*/
|
|
62
|
+
stallAfterMs?: number;
|
|
63
|
+
/** Customize the stalled label or formatter. Defaults to appending " (stalled)". */
|
|
64
|
+
stalledLabel?: string | ((label: string) => string);
|
|
65
|
+
/**
|
|
66
|
+
* Delay (ms) between done/fail and clearing the progress indicator.
|
|
67
|
+
* Set to 0 for immediate clear.
|
|
68
|
+
*/
|
|
69
|
+
clearDelayMs?: number;
|
|
70
|
+
/** Clear progress on process exit. */
|
|
71
|
+
autoClearOnExit?: boolean;
|
|
72
|
+
}
|
|
57
73
|
export interface OscProgressSequence {
|
|
58
74
|
/** Inclusive start index in the input string. */
|
|
59
75
|
start: number;
|
|
@@ -62,7 +78,7 @@ export interface OscProgressSequence {
|
|
|
62
78
|
/** Raw substring that matched. */
|
|
63
79
|
raw: string;
|
|
64
80
|
/** Which terminator was encountered. */
|
|
65
|
-
terminator:
|
|
81
|
+
terminator: "st" | "bel" | "c1st";
|
|
66
82
|
}
|
|
67
83
|
export type OscProgressController = {
|
|
68
84
|
/** Emit an indeterminate progress indicator. */
|
|
@@ -72,6 +88,16 @@ export type OscProgressController = {
|
|
|
72
88
|
/** Clear/hide the progress indicator. */
|
|
73
89
|
clear: () => void;
|
|
74
90
|
};
|
|
91
|
+
export type OscProgressReporter = OscProgressController & {
|
|
92
|
+
/** Emit a paused/stalled progress indicator (state=4). */
|
|
93
|
+
setPaused: (label: string) => void;
|
|
94
|
+
/** Emit 100% then clear after the configured delay. */
|
|
95
|
+
done: (label?: string) => void;
|
|
96
|
+
/** Emit error state then clear after the configured delay. */
|
|
97
|
+
fail: (label?: string) => void;
|
|
98
|
+
/** Dispose timers/listeners created by this controller. */
|
|
99
|
+
dispose: () => void;
|
|
100
|
+
};
|
|
75
101
|
/**
|
|
76
102
|
* Sanitizes a label/payload so it can't break the surrounding OSC sequence.
|
|
77
103
|
* Removes escape chars and common OSC terminators; trims whitespace.
|
|
@@ -135,4 +161,4 @@ export declare function startOscProgress(options?: OscProgressOptions): () => vo
|
|
|
135
161
|
* - `setPercent(label, percent)` emits `state=1` with a clamped integer percent
|
|
136
162
|
* - `clear()` emits `state=0` using the last label
|
|
137
163
|
*/
|
|
138
|
-
export declare function createOscProgressController(options?:
|
|
164
|
+
export declare function createOscProgressController(options?: OscProgressControllerOptions): OscProgressReporter;
|
package/package.json
CHANGED
|
@@ -1,65 +1,67 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "osc-progress",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Tiny TypeScript helper for OSC 9;4 terminal progress sequences.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"cli",
|
|
7
|
+
"ghostty",
|
|
8
|
+
"osc",
|
|
9
|
+
"progress",
|
|
10
|
+
"terminal",
|
|
11
|
+
"wezterm",
|
|
12
|
+
"windows-terminal"
|
|
13
|
+
],
|
|
14
|
+
"homepage": "https://github.com/steipete/osc-progress#readme",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/steipete/osc-progress/issues"
|
|
17
|
+
},
|
|
5
18
|
"license": "MIT",
|
|
6
19
|
"author": "Peter Steinberger",
|
|
7
20
|
"repository": {
|
|
8
21
|
"type": "git",
|
|
9
22
|
"url": "git+https://github.com/steipete/osc-progress.git"
|
|
10
23
|
},
|
|
11
|
-
"
|
|
12
|
-
|
|
13
|
-
"
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
"osc",
|
|
17
|
-
"terminal",
|
|
18
|
-
"progress",
|
|
19
|
-
"cli",
|
|
20
|
-
"ghostty",
|
|
21
|
-
"wezterm",
|
|
22
|
-
"windows-terminal"
|
|
24
|
+
"files": [
|
|
25
|
+
"dist",
|
|
26
|
+
"CHANGELOG.md",
|
|
27
|
+
"README.md",
|
|
28
|
+
"LICENSE"
|
|
23
29
|
],
|
|
24
30
|
"type": "module",
|
|
31
|
+
"sideEffects": false,
|
|
25
32
|
"main": "./dist/esm/index.js",
|
|
26
33
|
"module": "./dist/esm/index.js",
|
|
27
34
|
"types": "./dist/types/index.d.ts",
|
|
28
35
|
"exports": {
|
|
29
36
|
".": {
|
|
30
37
|
"types": "./dist/types/index.d.ts",
|
|
31
|
-
"import": "./dist/esm/index.js"
|
|
38
|
+
"import": "./dist/esm/index.js",
|
|
39
|
+
"default": "./dist/esm/index.js"
|
|
32
40
|
}
|
|
33
41
|
},
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@types/node": "^25.6.0",
|
|
44
|
+
"@typescript/native-preview": "7.0.0-dev.20260605.1",
|
|
45
|
+
"@vitest/coverage-v8": "^4.1.5",
|
|
46
|
+
"oxfmt": "^0.53.0",
|
|
47
|
+
"oxlint": "^1.62.0",
|
|
48
|
+
"postcss": "^8.5.13",
|
|
49
|
+
"typescript": "^6.0.3",
|
|
50
|
+
"vite": "^8.0.10",
|
|
51
|
+
"vitest": "^4.1.5"
|
|
52
|
+
},
|
|
40
53
|
"engines": {
|
|
41
|
-
"node": ">=
|
|
54
|
+
"node": ">=24"
|
|
42
55
|
},
|
|
43
|
-
"sideEffects": false,
|
|
44
|
-
"packageManager": "pnpm@10.25.0",
|
|
45
56
|
"scripts": {
|
|
46
|
-
"build": "
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"lint": "biome check .",
|
|
53
|
-
"lint:fix": "biome check --write .",
|
|
57
|
+
"build": "tsgo -p tsconfig.build.json",
|
|
58
|
+
"typecheck": "tsgo -p tsconfig.build.json --noEmit",
|
|
59
|
+
"format": "oxfmt --write .",
|
|
60
|
+
"format:check": "oxfmt --check .",
|
|
61
|
+
"lint": "pnpm format:check && oxlint --deny-warnings src tests",
|
|
62
|
+
"lint:fix": "pnpm format && oxlint --fix src tests",
|
|
54
63
|
"test": "pnpm build && vitest run",
|
|
55
64
|
"test:coverage": "pnpm build && vitest run --coverage",
|
|
56
|
-
"check": "pnpm lint && pnpm test:coverage"
|
|
57
|
-
},
|
|
58
|
-
"devDependencies": {
|
|
59
|
-
"@biomejs/biome": "^2.3.10",
|
|
60
|
-
"@types/node": "^25.0.3",
|
|
61
|
-
"@vitest/coverage-v8": "^4.0.16",
|
|
62
|
-
"typescript": "^5.9.3",
|
|
63
|
-
"vitest": "^4.0.16"
|
|
65
|
+
"check": "pnpm lint && pnpm typecheck && pnpm test:coverage"
|
|
64
66
|
}
|
|
65
|
-
}
|
|
67
|
+
}
|