osc-progress 0.1.0 → 0.2.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 +4 -0
- package/README.md +30 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/oscProgress.js +51 -0
- package/dist/esm/oscProgress.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/oscProgress.d.ts +21 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
All notable changes to this project are documented in this file.
|
|
3
3
|
|
|
4
|
+
## 0.2.0 - 2025-12-25
|
|
5
|
+
### Added
|
|
6
|
+
- `createOscProgressController` for stateful determinate/indeterminate updates.
|
|
7
|
+
|
|
4
8
|
## 0.1.0 - 2025-12-19
|
|
5
9
|
### Added
|
|
6
10
|
- OSC 9;4 progress emitter (`startOscProgress`) with determinate (`0% → 99%`) and indeterminate modes.
|
package/README.md
CHANGED
|
@@ -67,6 +67,36 @@ Notes:
|
|
|
67
67
|
- default is a timer-driven `0% → 99%` progression (never completes by itself).
|
|
68
68
|
- `terminator` defaults to `st` (`ESC \\`); `bel` is also supported.
|
|
69
69
|
|
|
70
|
+
### `createOscProgressController(options?)`
|
|
71
|
+
|
|
72
|
+
Returns a small stateful controller:
|
|
73
|
+
- `setIndeterminate(label)`
|
|
74
|
+
- `setPercent(label, percent)`
|
|
75
|
+
- `clear()`
|
|
76
|
+
|
|
77
|
+
Use this when you already have real progress (bytes/total, seconds/total) and want determinate terminal progress instead of the timer-based ramp.
|
|
78
|
+
|
|
79
|
+
Notes:
|
|
80
|
+
- returns no-op methods when `supportsOscProgress(...)` is false
|
|
81
|
+
- `percent` is rounded and clamped to `0..100`
|
|
82
|
+
- `clear()` uses the last label (or the initial `options.label` if nothing was set yet)
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
import process from 'node:process'
|
|
86
|
+
import { createOscProgressController } from 'osc-progress'
|
|
87
|
+
|
|
88
|
+
const osc = createOscProgressController({
|
|
89
|
+
env: process.env,
|
|
90
|
+
isTty: process.stderr.isTTY,
|
|
91
|
+
write: (chunk) => process.stderr.write(chunk),
|
|
92
|
+
})
|
|
93
|
+
|
|
94
|
+
osc.setIndeterminate('Connecting')
|
|
95
|
+
osc.setPercent('Downloading', 12)
|
|
96
|
+
osc.setPercent('Downloading', 67)
|
|
97
|
+
osc.clear()
|
|
98
|
+
```
|
|
99
|
+
|
|
70
100
|
### `sanitizeOscProgress(text, keepOsc)`
|
|
71
101
|
|
|
72
102
|
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 { findOscProgressSequences, OSC_PROGRESS_BEL, OSC_PROGRESS_C1_ST, OSC_PROGRESS_PREFIX, OSC_PROGRESS_ST, 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, 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,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,EAMf,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,kBAAkB,CAAA"}
|
package/dist/esm/oscProgress.js
CHANGED
|
@@ -192,4 +192,55 @@ export function startOscProgress(options = {}) {
|
|
|
192
192
|
send(0, 0);
|
|
193
193
|
};
|
|
194
194
|
}
|
|
195
|
+
/**
|
|
196
|
+
* Creates a small stateful controller for OSC 9;4 progress output.
|
|
197
|
+
*
|
|
198
|
+
* Useful when you want to drive progress updates yourself (e.g. bytes downloaded / total bytes,
|
|
199
|
+
* or seconds processed / total duration) and switch between indeterminate and determinate modes.
|
|
200
|
+
*
|
|
201
|
+
* Behavior:
|
|
202
|
+
* - no-op controller when `supportsOscProgress(...)` is false
|
|
203
|
+
* - `setIndeterminate(label)` emits `state=3`
|
|
204
|
+
* - `setPercent(label, percent)` emits `state=1` with a clamped integer percent
|
|
205
|
+
* - `clear()` emits `state=0` using the last label
|
|
206
|
+
*/
|
|
207
|
+
export function createOscProgressController(options = {}) {
|
|
208
|
+
// 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;
|
|
210
|
+
if (!supportsOscProgress(options.env, options.isTty, options)) {
|
|
211
|
+
// No-op controller: callers can keep their code linear and still be safe in unsupported terminals/logs.
|
|
212
|
+
return { setIndeterminate: () => { }, setPercent: () => { }, clear: () => { } };
|
|
213
|
+
}
|
|
214
|
+
// Resolve once; avoids branching in hot paths.
|
|
215
|
+
const end = resolveTerminator(terminator);
|
|
216
|
+
const send = (state, percent, nextLabel) => {
|
|
217
|
+
// Always sanitize; labels often come from user-visible input (filenames/URLs) and must not break OSC.
|
|
218
|
+
const cleanLabel = sanitizeLabel(nextLabel);
|
|
219
|
+
if (percent == null) {
|
|
220
|
+
write(`${OSC_PROGRESS_PREFIX}${state};;${cleanLabel}${end}`);
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
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}`);
|
|
226
|
+
};
|
|
227
|
+
// 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
|
+
},
|
|
244
|
+
};
|
|
245
|
+
}
|
|
195
246
|
//# sourceMappingURL=oscProgress.js.map
|
|
@@ -1 +1 @@
|
|
|
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;AA0D1C,SAAS,iBAAiB,CAAC,UAA6C;IACtE,OAAO,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAA;AAClE,CAAC;
|
|
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;AA0D1C,SAAS,iBAAiB,CAAC,UAA6C;IACtE,OAAO,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAA;AAClE,CAAC;AAWD;;;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,UAA8B,EAAE;IAEhC,uGAAuG;IACvG,MAAM,EAAE,KAAK,GAAG,UAAU,EAAE,KAAK,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,GAAG,OAAO,CAAA;IAEhG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;QAC9D,wGAAwG;QACxG,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAA;IAC9E,CAAC;IAED,+CAA+C;IAC/C,MAAM,GAAG,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAA;IAEzC,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,OAAsB,EAAE,SAAiB,EAAE,EAAE;QACxE,sGAAsG;QACtG,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,CAAA;QAC3C,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YACpB,KAAK,CAAC,GAAG,mBAAmB,GAAG,KAAK,KAAK,UAAU,GAAG,GAAG,EAAE,CAAC,CAAA;YAC5D,OAAM;QACR,CAAC;QACD,2FAA2F;QAC3F,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,KAAK,IAAI,OAAO,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC,CAAA;IACxE,CAAC,CAAA;IAED,wFAAwF;IACxF,IAAI,SAAS,GAAG,KAAK,CAAA;IAErB,OAAO;QACL,gBAAgB,EAAE,CAAC,SAAS,EAAE,EAAE;YAC9B,gFAAgF;YAChF,SAAS,GAAG,SAAS,CAAA;YACrB,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAA;QAC1B,CAAC;QACD,UAAU,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE;YACjC,uDAAuD;YACvD,SAAS,GAAG,SAAS,CAAA;YACrB,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,CAAA;QAC7B,CAAC;QACD,KAAK,EAAE,GAAG,EAAE;YACV,oGAAoG;YACpG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;QACvB,CAAC;KACF,CAAA;AACH,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { findOscProgressSequences, OSC_PROGRESS_BEL, OSC_PROGRESS_C1_ST, OSC_PROGRESS_PREFIX, OSC_PROGRESS_ST, 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 OscProgressOptions, type OscProgressSequence, type OscProgressSupportOptions, type OscProgressTerminator, sanitizeLabel, sanitizeOscProgress, startOscProgress, stripOscProgress, supportsOscProgress, } from './oscProgress.js';
|
|
@@ -64,6 +64,14 @@ export interface OscProgressSequence {
|
|
|
64
64
|
/** Which terminator was encountered. */
|
|
65
65
|
terminator: 'st' | 'bel' | 'c1st';
|
|
66
66
|
}
|
|
67
|
+
export type OscProgressController = {
|
|
68
|
+
/** Emit an indeterminate progress indicator. */
|
|
69
|
+
setIndeterminate: (label: string) => void;
|
|
70
|
+
/** Emit a determinate progress indicator. */
|
|
71
|
+
setPercent: (label: string, percent: number) => void;
|
|
72
|
+
/** Clear/hide the progress indicator. */
|
|
73
|
+
clear: () => void;
|
|
74
|
+
};
|
|
67
75
|
/**
|
|
68
76
|
* Sanitizes a label/payload so it can't break the surrounding OSC sequence.
|
|
69
77
|
* Removes escape chars and common OSC terminators; trims whitespace.
|
|
@@ -115,3 +123,16 @@ export declare function sanitizeOscProgress(text: string, keepOsc: boolean): str
|
|
|
115
123
|
* - indeterminate mode emits `state=3` and `stop()` clears progress
|
|
116
124
|
*/
|
|
117
125
|
export declare function startOscProgress(options?: OscProgressOptions): () => void;
|
|
126
|
+
/**
|
|
127
|
+
* Creates a small stateful controller for OSC 9;4 progress output.
|
|
128
|
+
*
|
|
129
|
+
* Useful when you want to drive progress updates yourself (e.g. bytes downloaded / total bytes,
|
|
130
|
+
* or seconds processed / total duration) and switch between indeterminate and determinate modes.
|
|
131
|
+
*
|
|
132
|
+
* Behavior:
|
|
133
|
+
* - no-op controller when `supportsOscProgress(...)` is false
|
|
134
|
+
* - `setIndeterminate(label)` emits `state=3`
|
|
135
|
+
* - `setPercent(label, percent)` emits `state=1` with a clamped integer percent
|
|
136
|
+
* - `clear()` emits `state=0` using the last label
|
|
137
|
+
*/
|
|
138
|
+
export declare function createOscProgressController(options?: OscProgressOptions): OscProgressController;
|