effective-progress 0.11.0 → 0.12.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/README.md +35 -19
- package/dist/index.d.mts +87 -85
- package/dist/index.mjs +546 -467
- package/package.json +5 -7
package/README.md
CHANGED
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
> Pre-`1.0.0`, breaking changes may happen in any minor release. SemVer guarantees will begin at `1.0.0`.
|
|
7
7
|
> I recommend using only the `Progress.all` and `Progress.forEach` APIs for now, as they will likely change the least. The lower-level APIs for manual progress bar control are more likely to see breaking changes as I iterate on the design.
|
|
8
8
|
>
|
|
9
|
+
> I am currently waiting on https://github.com/anomalyco/opentui/issues/204 to swap the renderer to opentui.
|
|
10
|
+
>
|
|
9
11
|
> Please open an issue or reach out if you have any questions or want to contribute!
|
|
10
12
|
> Feedback and contributions are very welcome!
|
|
11
13
|
|
|
@@ -15,14 +17,14 @@
|
|
|
15
17
|
|
|
16
18
|
- multiple nested tree-like progress bars
|
|
17
19
|
- spinner support for “we have no idea how long this takes” work
|
|
18
|
-
- keep using `
|
|
20
|
+
- keep using Effect v4 `Effect.log*` / `Logger` and `Console.log` while progress rendering is active
|
|
19
21
|
- familiar `.all` and `.forEach` APIs — swap `Effect` for `Progress`, get progress bars basically for free
|
|
20
22
|
- flicker-free rendering with [Ink](https://github.com/vadimdemedes/ink)
|
|
21
23
|
|
|
22
24
|
## Install
|
|
23
25
|
|
|
24
26
|
```bash
|
|
25
|
-
bun add effective-progress
|
|
27
|
+
bun add effective-progress effect@^4.0.0-beta.100
|
|
26
28
|
```
|
|
27
29
|
|
|
28
30
|
## Usage
|
|
@@ -30,14 +32,14 @@ bun add effective-progress
|
|
|
30
32
|
Iterate items with a single progress bar.
|
|
31
33
|
|
|
32
34
|
```ts
|
|
33
|
-
import {
|
|
35
|
+
import { Effect } from "effect";
|
|
34
36
|
import * as Progress from "effective-progress";
|
|
35
37
|
|
|
36
38
|
const program = Progress.all(
|
|
37
39
|
Array.from({ length: 5 }).map((_, i) =>
|
|
38
40
|
Effect.gen(function* () {
|
|
39
41
|
yield* Effect.sleep("1 second");
|
|
40
|
-
yield*
|
|
42
|
+
yield* Effect.logInfo(`Completed task ${i + 1}`);
|
|
41
43
|
}),
|
|
42
44
|
),
|
|
43
45
|
{ description: "Running tasks in parallel", concurrency: 2 },
|
|
@@ -73,16 +75,16 @@ Effect.runPromise(program);
|
|
|
73
75
|
|
|
74
76
|
<img alt="Nested example output" src="docs/images/nesting.gif" width="600" />
|
|
75
77
|
|
|
76
|
-
### Effect.all
|
|
78
|
+
### Effect.all result mode
|
|
77
79
|
|
|
78
|
-
|
|
80
|
+
`Progress.all` mirrors Effect v4's fail-fast default and `mode: "result"`, rendering the amount of successes and failures as work completes.
|
|
79
81
|
|
|
80
82
|
<img alt="Mixed outcomes modes output" src="docs/images/mixedOutcomes.gif" width="600" />
|
|
81
83
|
|
|
82
84
|
- `Progress.all` in default mode (`mode: "default"`) remains fail-fast.
|
|
83
85
|
- In fail-fast runs, unresolved units remain unprocessed.
|
|
84
|
-
- `mode: "
|
|
85
|
-
-
|
|
86
|
+
- `mode: "result"` runs every effect and returns a `Result` for each outcome while keeping mixed outcomes in the task counters.
|
|
87
|
+
- Result-mode tasks finalize as `done` when all units are accounted for.
|
|
86
88
|
- Empty collections are valid inputs for `Progress.all` / `Progress.forEach` and render as `0/0` instead of failing.
|
|
87
89
|
|
|
88
90
|
### Single task with a typed handle
|
|
@@ -90,13 +92,13 @@ Support for `either`/`validate` modes of `Effect.all` and render the amount of s
|
|
|
90
92
|
Use `Progress.task(...)` when you want one progress bar around a custom effect. The callback form gives you a task-local handle, so you can update counts, descriptions, and metadata without fetching the current task ID first.
|
|
91
93
|
|
|
92
94
|
```ts
|
|
93
|
-
import {
|
|
95
|
+
import { Effect } from "effect";
|
|
94
96
|
import * as Progress from "effective-progress";
|
|
95
97
|
|
|
96
98
|
const program = Progress.task(
|
|
97
99
|
(task) =>
|
|
98
100
|
Effect.gen(function* () {
|
|
99
|
-
yield*
|
|
101
|
+
yield* Effect.logInfo("Starting deployment");
|
|
100
102
|
yield* task.incrementSucceeded();
|
|
101
103
|
yield* task.update({
|
|
102
104
|
description: "Uploading release bundle",
|
|
@@ -123,7 +125,7 @@ Effect.runPromise(program);
|
|
|
123
125
|
- `examples/advancedExample.ts` - mixed high-level and low-level Progress service usage
|
|
124
126
|
- `examples/basic.ts` - minimal `Progress.all` usage
|
|
125
127
|
- `examples/nesting.ts` - nested tree rendering with parent and child tasks
|
|
126
|
-
- `examples/mixedOutcomes.ts` - fail-fast vs `
|
|
128
|
+
- `examples/mixedOutcomes.ts` - fail-fast vs `result` mode with mixed success/failure counters
|
|
127
129
|
- `examples/cliProgressSemantics.ts` - zero totals, negative totals clearing to unknown totals, overflow counts, and empty `all` / `forEach`
|
|
128
130
|
- `examples/unknownTotalCounting.ts` - count successes/failures without a known total and render `processed/?`
|
|
129
131
|
- `examples/typedMetadata.ts` - typed task metadata rendered through custom columns
|
|
@@ -136,17 +138,29 @@ Effect.runPromise(program);
|
|
|
136
138
|
|
|
137
139
|
## Configuration
|
|
138
140
|
|
|
139
|
-
###
|
|
141
|
+
### Logging behavior
|
|
140
142
|
|
|
141
143
|
- The Ink renderer runs with `patchConsole: true`, so console output is patched by Ink while the app is mounted.
|
|
142
|
-
- `
|
|
143
|
-
-
|
|
144
|
+
- `Effect.log*` uses the active Effect v4 `Logger` set, including custom loggers installed with `Logger.layer(...)`.
|
|
145
|
+
- The low-level `progress.log(...)` method emits through `Effect.log`, so it honors the current log level, logger set, annotations, and spans.
|
|
146
|
+
- Direct `Console` calls still use the currently provided Effect `Console` reference.
|
|
147
|
+
- Formatting and routing remain controlled by the consumer's logger and console configuration.
|
|
148
|
+
|
|
149
|
+
For example, install the v4 pretty console logger around a program with:
|
|
150
|
+
|
|
151
|
+
```ts
|
|
152
|
+
import { Effect, Logger } from "effect";
|
|
153
|
+
|
|
154
|
+
Effect.runPromise(program.pipe(Effect.provide(Logger.layer([Logger.consolePretty()]))));
|
|
155
|
+
```
|
|
144
156
|
|
|
145
157
|
### Ink renderer behavior
|
|
146
158
|
|
|
147
159
|
- Rendering is powered by [Ink](https://github.com/vadimdemedes/ink).
|
|
148
|
-
- Built-in columns are exposed as `Progress.Columns.description()`, `bar()`, `amount()`, `elapsed()`, `eta()`, `spacer()`, and `defaults()`.
|
|
160
|
+
- Built-in columns are exposed as `Progress.Columns.description()`, `bar()`, `amount()`, `elapsedEta()`, `elapsed()`, `eta()`, `spacer()`, and `defaults()`.
|
|
161
|
+
- `elapsedEta()` renders a compact clock-style column as `elapsed<eta` using the shape `00:00<00:00`; `defaults()` now uses that combined column.
|
|
149
162
|
- Determinate bars are segmented by outcome: succeeded (green), failed (red), and remaining (neutral).
|
|
163
|
+
- `bar()` defaults to a fixed width of `30`; pass `bar({ size: "fullwidth" })` to consume remaining row width or `bar({ size: 12 })` for an explicit width.
|
|
150
164
|
- Determinate amount text shows counters without prefixes: `<succeeded> <failed> <processed>/<total>`.
|
|
151
165
|
- Counts can exceed `total`; the amount text keeps those raw values (for example `12/10`) while the bar stays visually clamped at full.
|
|
152
166
|
- `total: 0` is valid for determinate tasks and renders as a full bar by default.
|
|
@@ -173,17 +187,19 @@ The handle exposes:
|
|
|
173
187
|
|
|
174
188
|
When you need lower-level control, the `Progress` service is available inside the effect and exposes APIs like `addTask`, `updateTask`, `incrementSucceeded(taskId, amount)`, and `completeTask(taskId)`.
|
|
175
189
|
|
|
190
|
+
The primary v4-style service layers are exposed as `Progress.layer` and `ProgressStdio.layer`.
|
|
191
|
+
|
|
176
192
|
Example using the lower-level service API:
|
|
177
193
|
|
|
178
194
|
```ts
|
|
179
|
-
import {
|
|
195
|
+
import { Effect } from "effect";
|
|
180
196
|
import * as Progress from "effective-progress";
|
|
181
197
|
|
|
182
198
|
const program = Progress.task(
|
|
183
199
|
Effect.gen(function* () {
|
|
184
200
|
const progress = yield* Progress.Progress;
|
|
185
201
|
const currentTask = yield* Progress.Task;
|
|
186
|
-
yield*
|
|
202
|
+
yield* Effect.logInfo("Updating the current task", { taskId: currentTask });
|
|
187
203
|
|
|
188
204
|
// Manual determinate updates:
|
|
189
205
|
yield* progress.incrementSucceeded(currentTask, 3);
|
|
@@ -254,6 +270,6 @@ const program = Progress.task(
|
|
|
254
270
|
|
|
255
271
|
If a task does not provide `columns`, the renderer falls back to `Progress.Columns.defaults()`.
|
|
256
272
|
|
|
257
|
-
##
|
|
273
|
+
## Effect compatibility
|
|
258
274
|
|
|
259
|
-
|
|
275
|
+
This release targets Effect `4.0.0-beta.100` or newer compatible v4 prereleases. Effect v4 is still in beta, so its APIs may change between beta releases.
|
package/dist/index.d.mts
CHANGED
|
@@ -6,12 +6,12 @@ import { Concurrency } from "effect/Types";
|
|
|
6
6
|
import * as effect_SchemaAST0 from "effect/SchemaAST";
|
|
7
7
|
|
|
8
8
|
//#region src/types.d.ts
|
|
9
|
-
declare const TaskIdSchema: Schema.brand<
|
|
9
|
+
declare const TaskIdSchema: Schema.brand<Schema.Number, "TaskId">;
|
|
10
10
|
type TaskId = typeof TaskIdSchema.Type;
|
|
11
|
-
declare const TaskId: Brand.
|
|
12
|
-
declare const TaskStatusSchema: Schema.
|
|
11
|
+
declare const TaskId: Brand.Constructor<number & Brand.Brand<"TaskId">>;
|
|
12
|
+
declare const TaskStatusSchema: Schema.Literals<readonly ["running", "done", "failed"]>;
|
|
13
13
|
type TaskStatus = typeof TaskStatusSchema.Type;
|
|
14
|
-
declare const TaskCountDisplaySchema: Schema.
|
|
14
|
+
declare const TaskCountDisplaySchema: Schema.Literals<readonly ["processedOnly", "detailed"]>;
|
|
15
15
|
type TaskCountDisplay = typeof TaskCountDisplaySchema.Type;
|
|
16
16
|
type ColumnAlign = "left" | "center" | "right";
|
|
17
17
|
interface TaskTreeInfo {
|
|
@@ -102,28 +102,37 @@ interface UpdateTaskOptions {
|
|
|
102
102
|
}
|
|
103
103
|
type TrackOptions = Omit<AddTaskOptions, "parentId">;
|
|
104
104
|
declare const TaskUnitsSchema: Schema.Struct<{
|
|
105
|
-
succeeded:
|
|
106
|
-
failed:
|
|
107
|
-
processed:
|
|
108
|
-
total: Schema.optional<
|
|
105
|
+
readonly succeeded: Schema.Number;
|
|
106
|
+
readonly failed: Schema.Number;
|
|
107
|
+
readonly processed: Schema.Number;
|
|
108
|
+
readonly total: Schema.optional<Schema.Number>;
|
|
109
109
|
}>;
|
|
110
110
|
type TaskUnits = typeof TaskUnitsSchema.Type;
|
|
111
|
+
declare const TaskProgressSampleSchema: Schema.Struct<{
|
|
112
|
+
readonly timestamp: Schema.Number;
|
|
113
|
+
readonly processed: Schema.Number;
|
|
114
|
+
}>;
|
|
115
|
+
type TaskProgressSample = typeof TaskProgressSampleSchema.Type;
|
|
111
116
|
declare const TaskSnapshotSchema: Schema.Struct<{
|
|
112
|
-
id: Schema.brand<
|
|
113
|
-
parentId: Schema.NullOr<Schema.brand<
|
|
114
|
-
description:
|
|
115
|
-
status: Schema.
|
|
116
|
-
countDisplay: Schema.
|
|
117
|
-
transient:
|
|
118
|
-
units: Schema.Struct<{
|
|
119
|
-
succeeded:
|
|
120
|
-
failed:
|
|
121
|
-
processed:
|
|
122
|
-
total: Schema.optional<
|
|
117
|
+
readonly id: Schema.brand<Schema.Number, "TaskId">;
|
|
118
|
+
readonly parentId: Schema.NullOr<Schema.brand<Schema.Number, "TaskId">>;
|
|
119
|
+
readonly description: Schema.String;
|
|
120
|
+
readonly status: Schema.Literals<readonly ["running", "done", "failed"]>;
|
|
121
|
+
readonly countDisplay: Schema.Literals<readonly ["processedOnly", "detailed"]>;
|
|
122
|
+
readonly transient: Schema.Boolean;
|
|
123
|
+
readonly units: Schema.Struct<{
|
|
124
|
+
readonly succeeded: Schema.Number;
|
|
125
|
+
readonly failed: Schema.Number;
|
|
126
|
+
readonly processed: Schema.Number;
|
|
127
|
+
readonly total: Schema.optional<Schema.Number>;
|
|
123
128
|
}>;
|
|
124
|
-
startedAt:
|
|
125
|
-
completedAt: Schema.NullOr<
|
|
126
|
-
|
|
129
|
+
readonly startedAt: Schema.Number;
|
|
130
|
+
readonly completedAt: Schema.NullOr<Schema.Number>;
|
|
131
|
+
readonly progressSamples: Schema.$Array<Schema.Struct<{
|
|
132
|
+
readonly timestamp: Schema.Number;
|
|
133
|
+
readonly processed: Schema.Number;
|
|
134
|
+
}>>;
|
|
135
|
+
readonly metadata: Schema.Unknown;
|
|
127
136
|
}>;
|
|
128
137
|
type TaskSnapshot = typeof TaskSnapshotSchema.Type;
|
|
129
138
|
declare const TaskSnapshot: (snapshot: TaskSnapshot) => TaskSnapshot;
|
|
@@ -136,7 +145,7 @@ interface TaskStore {
|
|
|
136
145
|
readonly renderOrder: ReadonlyArray<RenderRow>;
|
|
137
146
|
readonly columns: Map<TaskId, ReadonlyArray<ColumnDef<any, any>>>;
|
|
138
147
|
}
|
|
139
|
-
interface
|
|
148
|
+
interface ProgressShape {
|
|
140
149
|
readonly addTask: (options: AddTaskOptions<any>) => Effect.Effect<TaskId>;
|
|
141
150
|
readonly updateTask: (taskId: TaskId, options: UpdateTaskOptions) => Effect.Effect<void>;
|
|
142
151
|
readonly incrementSucceeded: (taskId: TaskId, amount?: number) => Effect.Effect<void>;
|
|
@@ -166,66 +175,54 @@ interface ProgressService {
|
|
|
166
175
|
}): Effect.Effect<A, E, Exclude<R, Task>>;
|
|
167
176
|
};
|
|
168
177
|
}
|
|
169
|
-
declare const Task_base: Context.
|
|
178
|
+
declare const Task_base: Context.ServiceClass<Task, "stromseng.dev/effective-progress/Task", number & Brand.Brand<"TaskId">>;
|
|
170
179
|
declare class Task extends Task_base {}
|
|
171
|
-
declare const TaskAddedEvent_base: Schema.
|
|
172
|
-
readonly
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
countDisplay: Schema.Literal<["processedOnly", "detailed"]>;
|
|
180
|
-
}>;
|
|
180
|
+
declare const TaskAddedEvent_base: Schema.Class<TaskAddedEvent, Schema.TaggedStruct<"TaskAdded", {
|
|
181
|
+
readonly taskId: Schema.brand<Schema.Number, "TaskId">;
|
|
182
|
+
readonly parentId: Schema.NullOr<Schema.brand<Schema.Number, "TaskId">>;
|
|
183
|
+
readonly description: Schema.String;
|
|
184
|
+
readonly total: Schema.optional<Schema.Number>;
|
|
185
|
+
readonly transient: Schema.Boolean;
|
|
186
|
+
readonly countDisplay: Schema.Literals<readonly ["processedOnly", "detailed"]>;
|
|
187
|
+
}>, {}>;
|
|
181
188
|
declare class TaskAddedEvent extends TaskAddedEvent_base {}
|
|
182
|
-
declare const TaskUpdatedEvent_base: Schema.
|
|
183
|
-
readonly
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
countDisplay: Schema.optional<Schema.Literal<["processedOnly", "detailed"]>>;
|
|
193
|
-
}>;
|
|
189
|
+
declare const TaskUpdatedEvent_base: Schema.Class<TaskUpdatedEvent, Schema.TaggedStruct<"TaskUpdated", {
|
|
190
|
+
readonly taskId: Schema.brand<Schema.Number, "TaskId">;
|
|
191
|
+
readonly description: Schema.optional<Schema.String>;
|
|
192
|
+
readonly succeeded: Schema.optional<Schema.Number>;
|
|
193
|
+
readonly failed: Schema.optional<Schema.Number>;
|
|
194
|
+
readonly processed: Schema.optional<Schema.Number>;
|
|
195
|
+
readonly total: Schema.optional<Schema.Number>;
|
|
196
|
+
readonly transient: Schema.optional<Schema.Boolean>;
|
|
197
|
+
readonly countDisplay: Schema.optional<Schema.Literals<readonly ["processedOnly", "detailed"]>>;
|
|
198
|
+
}>, {}>;
|
|
194
199
|
declare class TaskUpdatedEvent extends TaskUpdatedEvent_base {}
|
|
195
|
-
declare const TaskAdvancedEvent_base: Schema.
|
|
196
|
-
readonly
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
kind: Schema.Literal<["succeeded", "failed"]>;
|
|
201
|
-
}>;
|
|
200
|
+
declare const TaskAdvancedEvent_base: Schema.Class<TaskAdvancedEvent, Schema.TaggedStruct<"TaskAdvanced", {
|
|
201
|
+
readonly taskId: Schema.brand<Schema.Number, "TaskId">;
|
|
202
|
+
readonly amount: Schema.Number;
|
|
203
|
+
readonly kind: Schema.Literals<readonly ["succeeded", "failed"]>;
|
|
204
|
+
}>, {}>;
|
|
202
205
|
declare class TaskAdvancedEvent extends TaskAdvancedEvent_base {}
|
|
203
|
-
declare const TaskCompletedEvent_base: Schema.
|
|
204
|
-
readonly
|
|
205
|
-
}
|
|
206
|
-
taskId: Schema.brand<typeof Schema.Number, "TaskId">;
|
|
207
|
-
}>;
|
|
206
|
+
declare const TaskCompletedEvent_base: Schema.Class<TaskCompletedEvent, Schema.TaggedStruct<"TaskCompleted", {
|
|
207
|
+
readonly taskId: Schema.brand<Schema.Number, "TaskId">;
|
|
208
|
+
}>, {}>;
|
|
208
209
|
declare class TaskCompletedEvent extends TaskCompletedEvent_base {}
|
|
209
|
-
declare const TaskFailedEvent_base: Schema.
|
|
210
|
-
readonly
|
|
211
|
-
}
|
|
212
|
-
taskId: Schema.brand<typeof Schema.Number, "TaskId">;
|
|
213
|
-
}>;
|
|
210
|
+
declare const TaskFailedEvent_base: Schema.Class<TaskFailedEvent, Schema.TaggedStruct<"TaskFailed", {
|
|
211
|
+
readonly taskId: Schema.brand<Schema.Number, "TaskId">;
|
|
212
|
+
}>, {}>;
|
|
214
213
|
declare class TaskFailedEvent extends TaskFailedEvent_base {}
|
|
215
|
-
declare const TaskRemovedEvent_base: Schema.
|
|
216
|
-
readonly
|
|
217
|
-
}
|
|
218
|
-
taskId: Schema.brand<typeof Schema.Number, "TaskId">;
|
|
219
|
-
}>;
|
|
214
|
+
declare const TaskRemovedEvent_base: Schema.Class<TaskRemovedEvent, Schema.TaggedStruct<"TaskRemoved", {
|
|
215
|
+
readonly taskId: Schema.brand<Schema.Number, "TaskId">;
|
|
216
|
+
}>, {}>;
|
|
220
217
|
declare class TaskRemovedEvent extends TaskRemovedEvent_base {}
|
|
221
|
-
declare const ProgressTaskEventSchema: Schema.Union<[typeof TaskAddedEvent, typeof TaskUpdatedEvent, typeof TaskAdvancedEvent, typeof TaskCompletedEvent, typeof TaskFailedEvent, typeof TaskRemovedEvent]>;
|
|
218
|
+
declare const ProgressTaskEventSchema: Schema.Union<readonly [typeof TaskAddedEvent, typeof TaskUpdatedEvent, typeof TaskAdvancedEvent, typeof TaskCompletedEvent, typeof TaskFailedEvent, typeof TaskRemovedEvent]>;
|
|
222
219
|
type ProgressTaskEvent = typeof ProgressTaskEventSchema.Type;
|
|
223
|
-
declare const decodeProgressTaskEvent: (
|
|
220
|
+
declare const decodeProgressTaskEvent: (input: unknown, options?: effect_SchemaAST0.ParseOptions) => TaskAddedEvent | TaskUpdatedEvent | TaskAdvancedEvent | TaskCompletedEvent | TaskFailedEvent | TaskRemovedEvent;
|
|
224
221
|
//#endregion
|
|
225
222
|
//#region src/services/progress.d.ts
|
|
226
|
-
declare const Progress_base: Context.
|
|
223
|
+
declare const Progress_base: Context.ServiceClass<Progress, "stromseng.dev/effective-progress/Progress", ProgressShape>;
|
|
227
224
|
declare class Progress extends Progress_base {
|
|
228
|
-
static readonly
|
|
225
|
+
static readonly layer: Layer.Layer<Progress, never, never>;
|
|
229
226
|
}
|
|
230
227
|
//#endregion
|
|
231
228
|
//#region src/api.d.ts
|
|
@@ -239,15 +236,13 @@ interface PublicTaskApi {
|
|
|
239
236
|
}
|
|
240
237
|
interface EffectExecutionOptions {
|
|
241
238
|
readonly concurrency?: Concurrency;
|
|
242
|
-
readonly batching?: boolean | "inherit";
|
|
243
|
-
readonly concurrentFinalizers?: boolean;
|
|
244
239
|
}
|
|
245
240
|
interface EffectAllExecutionOptions extends EffectExecutionOptions {
|
|
246
241
|
readonly discard?: boolean;
|
|
247
|
-
readonly mode?: "default" | "
|
|
242
|
+
readonly mode?: "default" | "result";
|
|
248
243
|
}
|
|
249
244
|
type AllOptions = Omit<TrackOptions, "total" | "countDisplay"> & EffectAllExecutionOptions;
|
|
250
|
-
type AllReturn<Arg extends ReadonlyArray<Effect.Effect<any, any, any>> | Record<string, Effect.Effect<any, any, any>>, O extends EffectAllExecutionOptions> = [[Arg] extends [ReadonlyArray<Effect.Effect<any, any, any>>] ? Effect.All.ReturnTuple<Arg, Effect.All.IsDiscard<O>, Effect.All.
|
|
245
|
+
type AllReturn<Arg extends ReadonlyArray<Effect.Effect<any, any, any>> | Record<string, Effect.Effect<any, any, any>>, O extends EffectAllExecutionOptions> = [[Arg] extends [ReadonlyArray<Effect.Effect<any, any, any>>] ? Effect.All.ReturnTuple<Arg, Effect.All.IsDiscard<O>, Effect.All.IsResult<O>> : [Arg] extends [Record<string, Effect.Effect<any, any, any>>] ? Effect.All.ReturnObject<Arg, Effect.All.IsDiscard<O>, Effect.All.IsResult<O>> : never] extends [Effect.Effect<infer A, infer E, infer R>] ? Effect.Effect<A, E, Exclude<R, Progress | Task>> : never;
|
|
251
246
|
interface ForEachExecutionOptions extends EffectExecutionOptions {
|
|
252
247
|
readonly discard?: false | undefined;
|
|
253
248
|
}
|
|
@@ -279,7 +274,7 @@ declare const forEach: {
|
|
|
279
274
|
<A, B, E, R>(f: (item: A, index: number) => Effect.Effect<B, E, R>, options: ForEachOptions): (iterable: Iterable<A>) => Effect.Effect<ReadonlyArray<B>, E, Exclude<R, Progress | Task>>;
|
|
280
275
|
};
|
|
281
276
|
//#endregion
|
|
282
|
-
//#region src/renderer/columns/amount-column.d.ts
|
|
277
|
+
//#region src/services/renderer/columns/amount-column.d.ts
|
|
283
278
|
interface AmountLayout {
|
|
284
279
|
readonly hasDetailedRows: boolean;
|
|
285
280
|
readonly countWidth: number;
|
|
@@ -288,17 +283,18 @@ interface AmountLayout {
|
|
|
288
283
|
readonly preferredWidth: number;
|
|
289
284
|
}
|
|
290
285
|
//#endregion
|
|
291
|
-
//#region src/renderer/columns/bar-column.d.ts
|
|
286
|
+
//#region src/services/renderer/columns/bar-column.d.ts
|
|
292
287
|
interface BarPrepared {
|
|
293
288
|
readonly hasDeterminateRows: boolean;
|
|
294
289
|
}
|
|
295
290
|
//#endregion
|
|
296
|
-
//#region src/renderer/columns/description-column.d.ts
|
|
291
|
+
//#region src/services/renderer/columns/description-column.d.ts
|
|
297
292
|
interface DescriptionPrepared {
|
|
298
293
|
readonly minTreeWidth: number;
|
|
294
|
+
readonly preferredWidth: number;
|
|
299
295
|
}
|
|
300
296
|
declare namespace columns_d_exports {
|
|
301
|
-
export { AmountLayout, BarPrepared, DescriptionPrepared, SpacerOptions, amount, bar, defaults, description, elapsed, eta, resolveColumnSizeValue, spacer };
|
|
297
|
+
export { AmountLayout, BarOptions, BarPrepared, DescriptionPrepared, SpacerOptions, amount, bar, defaults, description, elapsed, elapsedEta, eta, resolveColumnSizeValue, spacer };
|
|
302
298
|
}
|
|
303
299
|
interface SpacerOptions {
|
|
304
300
|
readonly flexGrow?: number;
|
|
@@ -306,6 +302,9 @@ interface SpacerOptions {
|
|
|
306
302
|
readonly flexBasis?: number;
|
|
307
303
|
readonly minWidth?: number;
|
|
308
304
|
}
|
|
305
|
+
interface BarOptions {
|
|
306
|
+
readonly size?: number | "fullwidth";
|
|
307
|
+
}
|
|
309
308
|
declare const spacer: <M = unknown>({
|
|
310
309
|
flexGrow,
|
|
311
310
|
flexShrink,
|
|
@@ -313,21 +312,24 @@ declare const spacer: <M = unknown>({
|
|
|
313
312
|
minWidth
|
|
314
313
|
}?: SpacerOptions) => ColumnDef<M>;
|
|
315
314
|
declare const description: () => ColumnDef<any, DescriptionPrepared>;
|
|
316
|
-
declare const bar: (
|
|
315
|
+
declare const bar: ({
|
|
316
|
+
size
|
|
317
|
+
}?: BarOptions) => ColumnDef<any, BarPrepared>;
|
|
317
318
|
declare const amount: () => ColumnDef<any, AmountLayout>;
|
|
318
319
|
declare const elapsed: () => ColumnDef<any>;
|
|
320
|
+
declare const elapsedEta: () => ColumnDef<any>;
|
|
319
321
|
declare const eta: () => ColumnDef<any>;
|
|
320
322
|
declare const defaults: () => ReadonlyArray<ColumnDef<any, any>>;
|
|
321
323
|
declare const resolveColumnSizeValue: <P>(value: ColumnSizeValue<P> | undefined, prepared: P) => number | undefined;
|
|
322
324
|
//#endregion
|
|
323
325
|
//#region src/services/stdio.d.ts
|
|
324
|
-
interface
|
|
326
|
+
interface ProgressStdioShape {
|
|
325
327
|
readonly stdout: NodeJS.WriteStream;
|
|
326
328
|
readonly stderr: NodeJS.WriteStream;
|
|
327
329
|
}
|
|
328
|
-
declare const ProgressStdio_base: Context.
|
|
330
|
+
declare const ProgressStdio_base: Context.ServiceClass<ProgressStdio, "stromseng.dev/effective-progress/ProgressStdio", ProgressStdioShape>;
|
|
329
331
|
declare class ProgressStdio extends ProgressStdio_base {
|
|
330
|
-
static readonly
|
|
332
|
+
static readonly layer: Layer.Layer<ProgressStdio, never, never>;
|
|
331
333
|
}
|
|
332
334
|
//#endregion
|
|
333
|
-
export { AddTaskOptions, AllOptions, AllReturn, CellInfo, ColumnAlign, ColumnDef, ColumnRenderContext, ColumnSizeValue, columns_d_exports as Columns, EffectAllExecutionOptions, EffectExecutionOptions, ForEachExecutionOptions, ForEachOptions, Progress,
|
|
335
|
+
export { AddTaskOptions, AllOptions, AllReturn, CellInfo, ColumnAlign, ColumnDef, ColumnRenderContext, ColumnSizeValue, columns_d_exports as Columns, EffectAllExecutionOptions, EffectExecutionOptions, ForEachExecutionOptions, ForEachOptions, Progress, ProgressShape, ProgressStdio, ProgressStdioShape, ProgressTaskEvent, ProgressTaskEventSchema, RenderRow, Task, TaskAddedEvent, TaskAdvancedEvent, TaskCompletedEvent, TaskCountDisplay, TaskCountDisplaySchema, TaskFailedEvent, TaskHandle, TaskId, TaskOptions, TaskProgressSample, TaskProgressSampleSchema, TaskRemovedEvent, TaskRowDerived, TaskSnapshot, TaskSnapshotSchema, TaskStatus, TaskStatusSchema, TaskStore, TaskTreeInfo, TaskUnits, TaskUnitsSchema, TaskUpdatedEvent, TrackOptions, UpdateTaskOptions, all, decodeProgressTaskEvent, forEach, task$1 as task };
|