osc-progress 0.2.0 → 0.3.0

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 CHANGED
@@ -1,6 +1,17 @@
1
1
  # Changelog
2
2
  All notable changes to this project are documented in this file.
3
3
 
4
+ ## 0.3.0 - Unreleased
5
+ ### Added
6
+ - Throttled/deduped OSC progress updates (default).
7
+ - Stalled/paused state support (`setPaused`, `stallAfterMs`).
8
+ - Completion/error helpers (`done`, `fail`) with delayed clear (`clearDelayMs`).
9
+ - Optional auto-clear on process exit (`autoClearOnExit`).
10
+ - Controller cleanup via `dispose()`.
11
+ ### Changed
12
+ - `createOscProgressController` now returns an extended controller with pause/done/fail helpers.
13
+ - Controller updates are throttled by default (behavior change).
14
+
4
15
  ## 0.2.0 - 2025-12-25
5
16
  ### Added
6
17
  - `createOscProgressController` for stateful determinate/indeterminate updates.
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 Peter Steinberger
3
+ \g<1>2026 Peter Steinberger
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
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 sequences (used by terminals like Ghostty / WezTerm / Windows Terminal).
3
+ Tiny TypeScript helper for **OSC 9;4** terminal progress (Ghostty / WezTerm / Windows Terminal).
4
4
 
5
5
  ## Install
6
6
 
@@ -72,7 +72,11 @@ Notes:
72
72
  Returns a small stateful controller:
73
73
  - `setIndeterminate(label)`
74
74
  - `setPercent(label, percent)`
75
+ - `setPaused(label)` (state `4`)
76
+ - `done(label?)` (emit 100% then clear)
77
+ - `fail(label?)` (emit error state then clear)
75
78
  - `clear()`
79
+ - `dispose()` (cleanup timers/listeners)
76
80
 
77
81
  Use this when you already have real progress (bytes/total, seconds/total) and want determinate terminal progress instead of the timer-based ramp.
78
82
 
@@ -80,6 +84,10 @@ Notes:
80
84
  - returns no-op methods when `supportsOscProgress(...)` is false
81
85
  - `percent` is rounded and clamped to `0..100`
82
86
  - `clear()` uses the last label (or the initial `options.label` if nothing was set yet)
87
+ - progress updates are throttled by default (deduped + max ~1 update/150ms)
88
+ - `stallAfterMs` emits a paused/stalled state when updates stop
89
+ - `clearDelayMs` controls how long `done()` / `fail()` wait before clearing
90
+ - `autoClearOnExit` clears on process exit
83
91
 
84
92
  ```ts
85
93
  import process from 'node:process'
@@ -89,14 +97,24 @@ const osc = createOscProgressController({
89
97
  env: process.env,
90
98
  isTty: process.stderr.isTTY,
91
99
  write: (chunk) => process.stderr.write(chunk),
100
+ stallAfterMs: 10_000,
101
+ clearDelayMs: 200,
102
+ autoClearOnExit: true,
92
103
  })
93
104
 
94
105
  osc.setIndeterminate('Connecting')
95
106
  osc.setPercent('Downloading', 12)
96
107
  osc.setPercent('Downloading', 67)
97
- osc.clear()
108
+ osc.done()
98
109
  ```
99
110
 
111
+ #### Controller options
112
+
113
+ - `stallAfterMs`: emit state=4 when no updates are seen within this window.
114
+ - `stalledLabel`: override stalled label (string or formatter).
115
+ - `clearDelayMs`: delay before `done()`/`fail()` clears.
116
+ - `autoClearOnExit`: clear progress on process exit.
117
+
100
118
  ### `sanitizeOscProgress(text, keepOsc)`
101
119
 
102
120
  Removes OSC 9;4 progress sequences (terminated by `BEL`, `ST` (`ESC \\`), or `0x9c`).
@@ -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,EAMf,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,kBAAkB,CAAA"}
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,CAAA"}
@@ -13,6 +13,8 @@ export const OSC_PROGRESS_ST = '\u001b\\';
13
13
  export const OSC_PROGRESS_BEL = '\u0007';
14
14
  /** C1 String Terminator (ST): `0x9c` */
15
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
19
  return terminator === 'bel' ? OSC_PROGRESS_BEL : OSC_PROGRESS_ST;
18
20
  }
@@ -206,41 +208,168 @@ export function startOscProgress(options = {}) {
206
208
  */
207
209
  export function createOscProgressController(options = {}) {
208
210
  // Default to stderr: progress belongs with other interactive output and avoids polluting stdout pipes.
209
- const { label = 'Working…', write = (text) => process.stderr.write(text), terminator } = options;
211
+ const { label = 'Working…', write = (text) => process.stderr.write(text), terminator, stallAfterMs = 0, stalledLabel, clearDelayMs = DEFAULT_CLEAR_DELAY_MS, autoClearOnExit = false, } = options;
210
212
  if (!supportsOscProgress(options.env, options.isTty, options)) {
211
213
  // No-op controller: callers can keep their code linear and still be safe in unsupported terminals/logs.
212
- return { setIndeterminate: () => { }, setPercent: () => { }, clear: () => { } };
214
+ return {
215
+ setIndeterminate: () => { },
216
+ setPercent: () => { },
217
+ setPaused: () => { },
218
+ done: () => { },
219
+ fail: () => { },
220
+ clear: () => { },
221
+ dispose: () => { },
222
+ };
213
223
  }
214
224
  // Resolve once; avoids branching in hot paths.
215
225
  const end = resolveTerminator(terminator);
216
- const send = (state, percent, nextLabel) => {
226
+ const resolveStalledLabel = (baseLabel) => {
227
+ if (typeof stalledLabel === 'function')
228
+ return stalledLabel(baseLabel);
229
+ if (typeof stalledLabel === 'string')
230
+ return stalledLabel;
231
+ return `${baseLabel} (stalled)`;
232
+ };
233
+ const normalizePercent = (percent) => Math.max(0, Math.min(100, Math.round(percent)));
234
+ let lastEmittedLabel = label;
235
+ let lastEmittedPercent = null;
236
+ let lastEmittedState = null;
237
+ let lastEmitAt = 0;
238
+ let hasEmitted = false;
239
+ let lastSeenLabel = label;
240
+ let lastSeenPercent = 0;
241
+ let lastSeenMode = 'indeterminate';
242
+ let stallTimer = null;
243
+ let clearTimer = null;
244
+ let stallEnabled = true;
245
+ const clearStallTimer = () => {
246
+ if (stallTimer !== null) {
247
+ clearTimeout(stallTimer);
248
+ stallTimer = null;
249
+ }
250
+ };
251
+ const clearTimers = () => {
252
+ clearStallTimer();
253
+ if (clearTimer !== null) {
254
+ clearTimeout(clearTimer);
255
+ clearTimer = null;
256
+ }
257
+ };
258
+ const scheduleStall = () => {
259
+ if (!stallAfterMs || stallAfterMs <= 0)
260
+ return;
261
+ if (stallTimer !== null)
262
+ clearTimeout(stallTimer);
263
+ stallTimer = setTimeout(() => {
264
+ stallTimer = null;
265
+ if (!stallEnabled)
266
+ return;
267
+ const labelToUse = resolveStalledLabel(lastSeenLabel);
268
+ const percent = lastSeenMode === 'determinate' ? lastSeenPercent : null;
269
+ send(4, percent, labelToUse, true);
270
+ }, stallAfterMs);
271
+ stallTimer.unref?.();
272
+ };
273
+ const scheduleClear = () => {
274
+ if (clearDelayMs <= 0) {
275
+ clear();
276
+ return;
277
+ }
278
+ if (clearTimer !== null)
279
+ clearTimeout(clearTimer);
280
+ clearTimer = setTimeout(() => {
281
+ clearTimer = null;
282
+ clear();
283
+ }, clearDelayMs);
284
+ clearTimer.unref?.();
285
+ };
286
+ const send = (state, percent, nextLabel, force = false) => {
217
287
  // Always sanitize; labels often come from user-visible input (filenames/URLs) and must not break OSC.
218
288
  const cleanLabel = sanitizeLabel(nextLabel);
219
- if (percent == null) {
220
- write(`${OSC_PROGRESS_PREFIX}${state};;${cleanLabel}${end}`);
289
+ const normalizedPercent = percent == null ? null : normalizePercent(percent);
290
+ const now = Date.now();
291
+ const stateChanged = state !== lastEmittedState;
292
+ const labelChanged = cleanLabel !== lastEmittedLabel;
293
+ const percentChanged = normalizedPercent !== lastEmittedPercent;
294
+ const withinInterval = now - lastEmitAt < DEFAULT_THROTTLE_INTERVAL_MS;
295
+ let shouldEmit = force || !hasEmitted || stateChanged || labelChanged;
296
+ if (!shouldEmit && percentChanged) {
297
+ shouldEmit = !withinInterval;
298
+ }
299
+ if (!shouldEmit)
221
300
  return;
301
+ if (normalizedPercent == null) {
302
+ write(`${OSC_PROGRESS_PREFIX}${state};;${cleanLabel}${end}`);
222
303
  }
223
- // Be forgiving: accept floats/out-of-range and normalize to the OSC percent integer field.
224
- const clamped = Math.max(0, Math.min(100, Math.round(percent)));
225
- write(`${OSC_PROGRESS_PREFIX}${state};${clamped};${cleanLabel}${end}`);
304
+ else {
305
+ write(`${OSC_PROGRESS_PREFIX}${state};${normalizedPercent};${cleanLabel}${end}`);
306
+ }
307
+ lastEmittedLabel = cleanLabel;
308
+ lastEmittedPercent = normalizedPercent;
309
+ lastEmittedState = state;
310
+ lastEmitAt = now;
311
+ hasEmitted = true;
226
312
  };
227
313
  // Remember the last user-provided label so `clear()` clears the most recent task label.
228
- let lastLabel = label;
229
- return {
230
- setIndeterminate: (nextLabel) => {
231
- // Update label first so a `clear()` during/after this call uses the same label.
232
- lastLabel = nextLabel;
233
- send(3, null, nextLabel);
234
- },
235
- setPercent: (nextLabel, percent) => {
236
- // Same label tracking semantics as indeterminate mode.
237
- lastLabel = nextLabel;
238
- send(1, percent, nextLabel);
239
- },
240
- clear: () => {
241
- // Clear/hide frame. Reuses the last label so terminals that show it don't "flash" back to defaults.
242
- send(0, 0, lastLabel);
243
- },
314
+ const updateSeen = (nextLabel, mode, percent, shouldScheduleStall = true) => {
315
+ lastSeenLabel = nextLabel;
316
+ lastSeenMode = mode;
317
+ lastSeenPercent = percent ?? 0;
318
+ if (shouldScheduleStall) {
319
+ scheduleStall();
320
+ }
321
+ };
322
+ const setIndeterminate = (nextLabel) => {
323
+ stallEnabled = true;
324
+ updateSeen(nextLabel, 'indeterminate', null);
325
+ send(3, null, nextLabel);
326
+ };
327
+ const setPercent = (nextLabel, percent) => {
328
+ const normalized = normalizePercent(percent);
329
+ stallEnabled = true;
330
+ updateSeen(nextLabel, 'determinate', normalized);
331
+ send(1, normalized, nextLabel);
332
+ };
333
+ const setPaused = (nextLabel) => {
334
+ stallEnabled = false;
335
+ const percent = lastSeenMode === 'determinate' ? lastSeenPercent : null;
336
+ updateSeen(nextLabel, lastSeenMode, lastSeenMode === 'determinate' ? lastSeenPercent : null, false);
337
+ send(4, percent, nextLabel, true);
338
+ };
339
+ const clear = () => {
340
+ stallEnabled = false;
341
+ clearTimers();
342
+ send(0, 0, lastSeenLabel, true);
343
+ };
344
+ const done = (nextLabel) => {
345
+ const labelToUse = nextLabel ?? lastSeenLabel;
346
+ stallEnabled = false;
347
+ clearStallTimer();
348
+ updateSeen(labelToUse, 'determinate', 100, false);
349
+ send(1, 100, labelToUse, true);
350
+ scheduleClear();
351
+ };
352
+ const fail = (nextLabel) => {
353
+ const labelToUse = nextLabel ?? lastSeenLabel;
354
+ const percent = lastSeenMode === 'determinate' ? lastSeenPercent : null;
355
+ stallEnabled = false;
356
+ clearStallTimer();
357
+ updateSeen(labelToUse, lastSeenMode, lastSeenMode === 'determinate' ? lastSeenPercent : null, false);
358
+ send(2, percent, labelToUse, true);
359
+ scheduleClear();
360
+ };
361
+ const handleExit = () => {
362
+ clear();
363
+ };
364
+ if (autoClearOnExit) {
365
+ process.once('exit', handleExit);
366
+ }
367
+ const dispose = () => {
368
+ clearTimers();
369
+ if (autoClearOnExit) {
370
+ process.off('exit', handleExit);
371
+ }
244
372
  };
373
+ return { setIndeterminate, setPercent, setPaused, done, fail, clear, dispose };
245
374
  }
246
375
  //# 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":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAA;AAElC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,aAAa,CAAA;AAChD,uCAAuC;AACvC,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAA;AACzC,yBAAyB;AACzB,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAA;AACxC,wCAAwC;AACxC,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAA;AAE1C,MAAM,4BAA4B,GAAG,GAAG,CAAA;AACxC,MAAM,sBAAsB,GAAG,GAAG,CAAA;AA2ElC,SAAS,iBAAiB,CAAC,UAA6C;IACtE,OAAO,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAA;AAClE,CAAC;AAsBD;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACvD,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACxD,MAAM,kBAAkB,GAAG,aAAa;SACrC,UAAU,CAAC,gBAAgB,EAAE,EAAE,CAAC;SAChC,UAAU,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAA;IACrC,OAAO,kBAAkB,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;AACtD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAyB,OAAO,CAAC,GAAG,EACpC,QAAiB,OAAO,CAAC,MAAM,CAAC,KAAK,EACrC,UAAqC,EAAE;IAEvC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAA;IACxB,IAAI,OAAO,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAA;IAClC,IAAI,OAAO,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IAE9B,IAAI,OAAO,CAAC,aAAa,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;QAChE,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,OAAO,CAAC,WAAW,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,GAAG,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;IAC1D,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAA;IAChD,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAA;IAChD,IAAI,GAAG,CAAC,UAAU;QAAE,OAAO,IAAI,CAAA;IAC/B,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACnD,MAAM,SAAS,GAA0B,EAAE,CAAA;IAC3C,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,CAAA;IAC5C,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,OAAO,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAA;QAC3D,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,MAAK;QAEvB,MAAM,KAAK,GAAG,KAAK,GAAG,SAAS,CAAA;QAC/B,MAAM,UAAU,GAGX,EAAE,CAAA;QAEP,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,CAAA;QACpD,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;YACnB,UAAU,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,OAAO,GAAG,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;QACvF,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAA;QACtD,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;YACpB,UAAU,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,QAAQ,GAAG,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAA;QAC1F,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAA;QACvD,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;YACnB,UAAU,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,OAAO,GAAG,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;QAC5F,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,UAAU,GAAG,KAAK,CAAA;YAClB,SAAQ;QACV,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,CAAA;QAC1D,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;QAC1B,SAAS,CAAC,IAAI,CAAC;YACb,KAAK;YACL,GAAG,EAAE,IAAI,CAAC,YAAY;YACtB,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC;YACzC,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC,CAAA;QACF,UAAU,GAAG,IAAI,CAAC,YAAY,CAAA;IAChC,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,CAAA;IAC5C,IAAI,OAAO,GAAG,IAAI,CAAA;IAClB,OAAO,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;QAClD,MAAM,KAAK,GAAG,KAAK,GAAG,SAAS,CAAA;QAE/B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,CAAA;QACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAA;QACzD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAA;QAE1D,MAAM,IAAI,GAAa,EAAE,CAAA;QACzB,IAAI,OAAO,KAAK,CAAC,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;QAC/D,IAAI,QAAQ,KAAK,CAAC,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA;QAClE,IAAI,OAAO,KAAK,CAAC,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;QAElE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;QACrE,OAAO,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAA;IAChE,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,OAAgB;IAChE,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;AAChD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAA8B,EAAE;IAC/D,MAAM,EACJ,KAAK,GAAG,UAAU,EAClB,QAAQ,GAAG,EAAE,GAAG,MAAM,EACtB,KAAK,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAC5C,aAAa,GAAG,KAAK,EACrB,KAAK,GAAG,CAAC,EACT,UAAU,GACX,GAAG,OAAO,CAAA;IACX,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;QAC9D,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;IACvC,MAAM,GAAG,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAA;IAEzC,MAAM,IAAI,GAAG,CAAC,EAAU,EAAE,OAAsB,EAAQ,EAAE;QACxD,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YACpB,KAAK,CAAC,GAAG,mBAAmB,GAAG,EAAE,KAAK,UAAU,GAAG,GAAG,EAAE,CAAC,CAAA;YACzD,OAAM;QACR,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAC/D,KAAK,CAAC,GAAG,mBAAmB,GAAG,EAAE,IAAI,OAAO,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC,CAAA;IACrE,CAAC,CAAA;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QACb,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACZ,CAAC,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;IACxC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC5B,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IAEd,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAA;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,CAAA;QACtD,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACtB,CAAC,EAAE,GAAG,CAAC,CAAA;IACP,KAAK,CAAC,KAAK,EAAE,EAAE,CAAA;IAEf,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,OAAO,GAAG,EAAE;QACV,IAAI,OAAO;YAAE,OAAM;QACnB,OAAO,GAAG,IAAI,CAAA;QACd,aAAa,CAAC,KAAK,CAAC,CAAA;QACpB,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACZ,CAAC,CAAA;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,2BAA2B,CACzC,UAAwC,EAAE;IAE1C,uGAAuG;IACvG,MAAM,EACJ,KAAK,GAAG,UAAU,EAClB,KAAK,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAC5C,UAAU,EACV,YAAY,GAAG,CAAC,EAChB,YAAY,EACZ,YAAY,GAAG,sBAAsB,EACrC,eAAe,GAAG,KAAK,GACxB,GAAG,OAAO,CAAA;IAEX,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;QAC9D,wGAAwG;QACxG,OAAO;YACL,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC;YAC1B,UAAU,EAAE,GAAG,EAAE,GAAE,CAAC;YACpB,SAAS,EAAE,GAAG,EAAE,GAAE,CAAC;YACnB,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;YACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;YACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;YACf,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;SAClB,CAAA;IACH,CAAC;IAED,+CAA+C;IAC/C,MAAM,GAAG,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAA;IAEzC,MAAM,mBAAmB,GAAG,CAAC,SAAiB,EAAU,EAAE;QACxD,IAAI,OAAO,YAAY,KAAK,UAAU;YAAE,OAAO,YAAY,CAAC,SAAS,CAAC,CAAA;QACtE,IAAI,OAAO,YAAY,KAAK,QAAQ;YAAE,OAAO,YAAY,CAAA;QACzD,OAAO,GAAG,SAAS,YAAY,CAAA;IACjC,CAAC,CAAA;IAED,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAU,EAAE,CACnD,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAEjD,IAAI,gBAAgB,GAAG,KAAK,CAAA;IAC5B,IAAI,kBAAkB,GAAkB,IAAI,CAAA;IAC5C,IAAI,gBAAgB,GAAkB,IAAI,CAAA;IAC1C,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,IAAI,UAAU,GAAG,KAAK,CAAA;IAEtB,IAAI,aAAa,GAAG,KAAK,CAAA;IACzB,IAAI,eAAe,GAAG,CAAC,CAAA;IACvB,IAAI,YAAY,GAAoC,eAAe,CAAA;IAEnE,IAAI,UAAU,GAA0B,IAAI,CAAA;IAC5C,IAAI,UAAU,GAA0B,IAAI,CAAA;IAC5C,IAAI,YAAY,GAAG,IAAI,CAAA;IAEvB,MAAM,eAAe,GAAG,GAAG,EAAE;QAC3B,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,YAAY,CAAC,UAAU,CAAC,CAAA;YACxB,UAAU,GAAG,IAAI,CAAA;QACnB,CAAC;IACH,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,eAAe,EAAE,CAAA;QACjB,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,YAAY,CAAC,UAAU,CAAC,CAAA;YACxB,UAAU,GAAG,IAAI,CAAA;QACnB,CAAC;IACH,CAAC,CAAA;IAED,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,IAAI,CAAC,YAAY,IAAI,YAAY,IAAI,CAAC;YAAE,OAAM;QAC9C,IAAI,UAAU,KAAK,IAAI;YAAE,YAAY,CAAC,UAAU,CAAC,CAAA;QACjD,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE;YAC3B,UAAU,GAAG,IAAI,CAAA;YACjB,IAAI,CAAC,YAAY;gBAAE,OAAM;YACzB,MAAM,UAAU,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAA;YACrD,MAAM,OAAO,GAAG,YAAY,KAAK,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAA;YACvE,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;QACpC,CAAC,EAAE,YAAY,CAAC,CAAA;QAChB,UAAU,CAAC,KAAK,EAAE,EAAE,CAAA;IACtB,CAAC,CAAA;IAED,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;YACtB,KAAK,EAAE,CAAA;YACP,OAAM;QACR,CAAC;QACD,IAAI,UAAU,KAAK,IAAI;YAAE,YAAY,CAAC,UAAU,CAAC,CAAA;QACjD,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE;YAC3B,UAAU,GAAG,IAAI,CAAA;YACjB,KAAK,EAAE,CAAA;QACT,CAAC,EAAE,YAAY,CAAC,CAAA;QAChB,UAAU,CAAC,KAAK,EAAE,EAAE,CAAA;IACtB,CAAC,CAAA;IAED,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,OAAsB,EAAE,SAAiB,EAAE,KAAK,GAAG,KAAK,EAAE,EAAE;QACvF,sGAAsG;QACtG,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,CAAA;QAC3C,MAAM,iBAAiB,GAAG,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;QAC5E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,MAAM,YAAY,GAAG,KAAK,KAAK,gBAAgB,CAAA;QAC/C,MAAM,YAAY,GAAG,UAAU,KAAK,gBAAgB,CAAA;QACpD,MAAM,cAAc,GAAG,iBAAiB,KAAK,kBAAkB,CAAA;QAC/D,MAAM,cAAc,GAAG,GAAG,GAAG,UAAU,GAAG,4BAA4B,CAAA;QAEtE,IAAI,UAAU,GAAG,KAAK,IAAI,CAAC,UAAU,IAAI,YAAY,IAAI,YAAY,CAAA;QACrE,IAAI,CAAC,UAAU,IAAI,cAAc,EAAE,CAAC;YAClC,UAAU,GAAG,CAAC,cAAc,CAAA;QAC9B,CAAC;QACD,IAAI,CAAC,UAAU;YAAE,OAAM;QAEvB,IAAI,iBAAiB,IAAI,IAAI,EAAE,CAAC;YAC9B,KAAK,CAAC,GAAG,mBAAmB,GAAG,KAAK,KAAK,UAAU,GAAG,GAAG,EAAE,CAAC,CAAA;QAC9D,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,GAAG,mBAAmB,GAAG,KAAK,IAAI,iBAAiB,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC,CAAA;QAClF,CAAC;QACD,gBAAgB,GAAG,UAAU,CAAA;QAC7B,kBAAkB,GAAG,iBAAiB,CAAA;QACtC,gBAAgB,GAAG,KAAK,CAAA;QACxB,UAAU,GAAG,GAAG,CAAA;QAChB,UAAU,GAAG,IAAI,CAAA;IACnB,CAAC,CAAA;IAED,wFAAwF;IACxF,MAAM,UAAU,GAAG,CACjB,SAAiB,EACjB,IAAqC,EACrC,OAAsB,EACtB,mBAAmB,GAAG,IAAI,EAC1B,EAAE;QACF,aAAa,GAAG,SAAS,CAAA;QACzB,YAAY,GAAG,IAAI,CAAA;QACnB,eAAe,GAAG,OAAO,IAAI,CAAC,CAAA;QAC9B,IAAI,mBAAmB,EAAE,CAAC;YACxB,aAAa,EAAE,CAAA;QACjB,CAAC;IACH,CAAC,CAAA;IAED,MAAM,gBAAgB,GAAG,CAAC,SAAiB,EAAE,EAAE;QAC7C,YAAY,GAAG,IAAI,CAAA;QACnB,UAAU,CAAC,SAAS,EAAE,eAAe,EAAE,IAAI,CAAC,CAAA;QAC5C,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAA;IAC1B,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,CAAC,SAAiB,EAAE,OAAe,EAAE,EAAE;QACxD,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;QAC5C,YAAY,GAAG,IAAI,CAAA;QACnB,UAAU,CAAC,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC,CAAA;QAChD,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,CAAA;IAChC,CAAC,CAAA;IAED,MAAM,SAAS,GAAG,CAAC,SAAiB,EAAE,EAAE;QACtC,YAAY,GAAG,KAAK,CAAA;QACpB,MAAM,OAAO,GAAG,YAAY,KAAK,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAA;QACvE,UAAU,CACR,SAAS,EACT,YAAY,EACZ,YAAY,KAAK,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,EACvD,KAAK,CACN,CAAA;QACD,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;IACnC,CAAC,CAAA;IAED,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,YAAY,GAAG,KAAK,CAAA;QACpB,WAAW,EAAE,CAAA;QACb,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,CAAA;IACjC,CAAC,CAAA;IAED,MAAM,IAAI,GAAG,CAAC,SAAkB,EAAE,EAAE;QAClC,MAAM,UAAU,GAAG,SAAS,IAAI,aAAa,CAAA;QAC7C,YAAY,GAAG,KAAK,CAAA;QACpB,eAAe,EAAE,CAAA;QACjB,UAAU,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;QACjD,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;QAC9B,aAAa,EAAE,CAAA;IACjB,CAAC,CAAA;IAED,MAAM,IAAI,GAAG,CAAC,SAAkB,EAAE,EAAE;QAClC,MAAM,UAAU,GAAG,SAAS,IAAI,aAAa,CAAA;QAC7C,MAAM,OAAO,GAAG,YAAY,KAAK,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAA;QACvE,YAAY,GAAG,KAAK,CAAA;QACpB,eAAe,EAAE,CAAA;QACjB,UAAU,CACR,UAAU,EACV,YAAY,EACZ,YAAY,KAAK,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,EACvD,KAAK,CACN,CAAA;QACD,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;QAClC,aAAa,EAAE,CAAA;IACjB,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,KAAK,EAAE,CAAA;IACT,CAAC,CAAA;IAED,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAClC,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,WAAW,EAAE,CAAA;QACb,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;QACjC,CAAC;IACH,CAAC,CAAA;IAED,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;AAChF,CAAC"}
@@ -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 './oscProgress.js';
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';
@@ -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;
@@ -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?: OscProgressOptions): OscProgressController;
164
+ export declare function createOscProgressController(options?: OscProgressControllerOptions): OscProgressReporter;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "osc-progress",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Tiny TypeScript helper for OSC 9;4 terminal progress sequences.",
5
5
  "license": "MIT",
6
6
  "author": "Peter Steinberger",
@@ -41,12 +41,15 @@
41
41
  "node": ">=20"
42
42
  },
43
43
  "sideEffects": false,
44
- "packageManager": "pnpm@10.25.0",
44
+ "devDependencies": {
45
+ "@biomejs/biome": "^2.3.10",
46
+ "@types/node": "^25.0.3",
47
+ "@vitest/coverage-v8": "^4.0.16",
48
+ "typescript": "^5.9.3",
49
+ "vitest": "^4.0.16"
50
+ },
45
51
  "scripts": {
46
52
  "build": "tsc -p tsconfig.build.json",
47
- "prepare": "pnpm build",
48
- "prepack": "pnpm build",
49
- "prepublishOnly": "pnpm check",
50
53
  "typecheck": "tsc -p tsconfig.build.json --noEmit",
51
54
  "format": "biome format --write .",
52
55
  "lint": "biome check .",
@@ -54,12 +57,5 @@
54
57
  "test": "pnpm build && vitest run",
55
58
  "test:coverage": "pnpm build && vitest run --coverage",
56
59
  "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"
64
60
  }
65
- }
61
+ }