effective-progress 0.11.1 → 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 CHANGED
@@ -17,14 +17,14 @@
17
17
 
18
18
  - multiple nested tree-like progress bars
19
19
  - spinner support for “we have no idea how long this takes” work
20
- - keep using `Console.log` / `Effect.logInfo` while progress rendering is active
20
+ - keep using Effect v4 `Effect.log*` / `Logger` and `Console.log` while progress rendering is active
21
21
  - familiar `.all` and `.forEach` APIs — swap `Effect` for `Progress`, get progress bars basically for free
22
22
  - flicker-free rendering with [Ink](https://github.com/vadimdemedes/ink)
23
23
 
24
24
  ## Install
25
25
 
26
26
  ```bash
27
- bun add effective-progress
27
+ bun add effective-progress effect@^4.0.0-beta.100
28
28
  ```
29
29
 
30
30
  ## Usage
@@ -32,14 +32,14 @@ bun add effective-progress
32
32
  Iterate items with a single progress bar.
33
33
 
34
34
  ```ts
35
- import { Console, Effect } from "effect";
35
+ import { Effect } from "effect";
36
36
  import * as Progress from "effective-progress";
37
37
 
38
38
  const program = Progress.all(
39
39
  Array.from({ length: 5 }).map((_, i) =>
40
40
  Effect.gen(function* () {
41
41
  yield* Effect.sleep("1 second");
42
- yield* Console.log(`Completed task ${i + 1}`);
42
+ yield* Effect.logInfo(`Completed task ${i + 1}`);
43
43
  }),
44
44
  ),
45
45
  { description: "Running tasks in parallel", concurrency: 2 },
@@ -75,16 +75,16 @@ Effect.runPromise(program);
75
75
 
76
76
  <img alt="Nested example output" src="docs/images/nesting.gif" width="600" />
77
77
 
78
- ### Effect.all modes
78
+ ### Effect.all result mode
79
79
 
80
- Support for `either`/`validate` modes of `Effect.all` and render the amount of successes/failures.
80
+ `Progress.all` mirrors Effect v4's fail-fast default and `mode: "result"`, rendering the amount of successes and failures as work completes.
81
81
 
82
82
  <img alt="Mixed outcomes modes output" src="docs/images/mixedOutcomes.gif" width="600" />
83
83
 
84
84
  - `Progress.all` in default mode (`mode: "default"`) remains fail-fast.
85
85
  - In fail-fast runs, unresolved units remain unprocessed.
86
- - `mode: "either"` and `mode: "validate"` run all effects and keep mixed outcomes in the task counters.
87
- - Mixed outcomes can finalize as `done` when all units are accounted for.
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.
88
88
  - Empty collections are valid inputs for `Progress.all` / `Progress.forEach` and render as `0/0` instead of failing.
89
89
 
90
90
  ### Single task with a typed handle
@@ -92,13 +92,13 @@ Support for `either`/`validate` modes of `Effect.all` and render the amount of s
92
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.
93
93
 
94
94
  ```ts
95
- import { Console, Effect } from "effect";
95
+ import { Effect } from "effect";
96
96
  import * as Progress from "effective-progress";
97
97
 
98
98
  const program = Progress.task(
99
99
  (task) =>
100
100
  Effect.gen(function* () {
101
- yield* Console.log("Starting deployment");
101
+ yield* Effect.logInfo("Starting deployment");
102
102
  yield* task.incrementSucceeded();
103
103
  yield* task.update({
104
104
  description: "Uploading release bundle",
@@ -125,7 +125,7 @@ Effect.runPromise(program);
125
125
  - `examples/advancedExample.ts` - mixed high-level and low-level Progress service usage
126
126
  - `examples/basic.ts` - minimal `Progress.all` usage
127
127
  - `examples/nesting.ts` - nested tree rendering with parent and child tasks
128
- - `examples/mixedOutcomes.ts` - fail-fast vs `either`/`validate` with mixed success/failure counters
128
+ - `examples/mixedOutcomes.ts` - fail-fast vs `result` mode with mixed success/failure counters
129
129
  - `examples/cliProgressSemantics.ts` - zero totals, negative totals clearing to unknown totals, overflow counts, and empty `all` / `forEach`
130
130
  - `examples/unknownTotalCounting.ts` - count successes/failures without a known total and render `processed/?`
131
131
  - `examples/typedMetadata.ts` - typed task metadata rendered through custom columns
@@ -138,11 +138,21 @@ Effect.runPromise(program);
138
138
 
139
139
  ## Configuration
140
140
 
141
- ### Console behavior
141
+ ### Logging behavior
142
142
 
143
143
  - The Ink renderer runs with `patchConsole: true`, so console output is patched by Ink while the app is mounted.
144
- - `Progress.task`, `Progress.all`, and `Progress.forEach` write through the currently provided Effect `Console` implementation.
145
- - Formatting is controlled by the API consumer's logger/console implementation.
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
+ ```
146
156
 
147
157
  ### Ink renderer behavior
148
158
 
@@ -177,17 +187,19 @@ The handle exposes:
177
187
 
178
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)`.
179
189
 
190
+ The primary v4-style service layers are exposed as `Progress.layer` and `ProgressStdio.layer`.
191
+
180
192
  Example using the lower-level service API:
181
193
 
182
194
  ```ts
183
- import { Console, Effect } from "effect";
195
+ import { Effect } from "effect";
184
196
  import * as Progress from "effective-progress";
185
197
 
186
198
  const program = Progress.task(
187
199
  Effect.gen(function* () {
188
200
  const progress = yield* Progress.Progress;
189
201
  const currentTask = yield* Progress.Task;
190
- yield* Console.log("This log is handled by the outer Console", { taskId: currentTask });
202
+ yield* Effect.logInfo("Updating the current task", { taskId: currentTask });
191
203
 
192
204
  // Manual determinate updates:
193
205
  yield* progress.incrementSucceeded(currentTask, 3);
@@ -258,6 +270,6 @@ const program = Progress.task(
258
270
 
259
271
  If a task does not provide `columns`, the renderer falls back to `Progress.Columns.defaults()`.
260
272
 
261
- ## Notes
273
+ ## Effect compatibility
262
274
 
263
- - As Effect 4.0 is around the corner with some changes to logging, there may be some adjustments needed to align with the new Effect APIs.
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<typeof Schema.Number, "TaskId">;
9
+ declare const TaskIdSchema: Schema.brand<Schema.Number, "TaskId">;
10
10
  type TaskId = typeof TaskIdSchema.Type;
11
- declare const TaskId: Brand.Brand.Constructor<number & Brand.Brand<"TaskId">>;
12
- declare const TaskStatusSchema: Schema.Literal<["running", "done", "failed"]>;
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.Literal<["processedOnly", "detailed"]>;
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,37 +102,37 @@ interface UpdateTaskOptions {
102
102
  }
103
103
  type TrackOptions = Omit<AddTaskOptions, "parentId">;
104
104
  declare const TaskUnitsSchema: Schema.Struct<{
105
- succeeded: typeof Schema.Number;
106
- failed: typeof Schema.Number;
107
- processed: typeof Schema.Number;
108
- total: Schema.optional<typeof Schema.Number>;
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
111
  declare const TaskProgressSampleSchema: Schema.Struct<{
112
- timestamp: typeof Schema.Number;
113
- processed: typeof Schema.Number;
112
+ readonly timestamp: Schema.Number;
113
+ readonly processed: Schema.Number;
114
114
  }>;
115
115
  type TaskProgressSample = typeof TaskProgressSampleSchema.Type;
116
116
  declare const TaskSnapshotSchema: Schema.Struct<{
117
- id: Schema.brand<typeof Schema.Number, "TaskId">;
118
- parentId: Schema.NullOr<Schema.brand<typeof Schema.Number, "TaskId">>;
119
- description: typeof Schema.String;
120
- status: Schema.Literal<["running", "done", "failed"]>;
121
- countDisplay: Schema.Literal<["processedOnly", "detailed"]>;
122
- transient: typeof Schema.Boolean;
123
- units: Schema.Struct<{
124
- succeeded: typeof Schema.Number;
125
- failed: typeof Schema.Number;
126
- processed: typeof Schema.Number;
127
- total: Schema.optional<typeof Schema.Number>;
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>;
128
128
  }>;
129
- startedAt: typeof Schema.Number;
130
- completedAt: Schema.NullOr<typeof Schema.Number>;
131
- progressSamples: Schema.Array$<Schema.Struct<{
132
- timestamp: typeof Schema.Number;
133
- processed: typeof Schema.Number;
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
134
  }>>;
135
- metadata: typeof Schema.Unknown;
135
+ readonly metadata: Schema.Unknown;
136
136
  }>;
137
137
  type TaskSnapshot = typeof TaskSnapshotSchema.Type;
138
138
  declare const TaskSnapshot: (snapshot: TaskSnapshot) => TaskSnapshot;
@@ -145,7 +145,7 @@ interface TaskStore {
145
145
  readonly renderOrder: ReadonlyArray<RenderRow>;
146
146
  readonly columns: Map<TaskId, ReadonlyArray<ColumnDef<any, any>>>;
147
147
  }
148
- interface ProgressService {
148
+ interface ProgressShape {
149
149
  readonly addTask: (options: AddTaskOptions<any>) => Effect.Effect<TaskId>;
150
150
  readonly updateTask: (taskId: TaskId, options: UpdateTaskOptions) => Effect.Effect<void>;
151
151
  readonly incrementSucceeded: (taskId: TaskId, amount?: number) => Effect.Effect<void>;
@@ -175,66 +175,54 @@ interface ProgressService {
175
175
  }): Effect.Effect<A, E, Exclude<R, Task>>;
176
176
  };
177
177
  }
178
- declare const Task_base: Context.TagClass<Task, "stromseng.dev/effective-progress/Task", number & Brand.Brand<"TaskId">>;
178
+ declare const Task_base: Context.ServiceClass<Task, "stromseng.dev/effective-progress/Task", number & Brand.Brand<"TaskId">>;
179
179
  declare class Task extends Task_base {}
180
- declare const TaskAddedEvent_base: Schema.TaggedClass<TaskAddedEvent, "TaskAdded", {
181
- readonly _tag: Schema.tag<"TaskAdded">;
182
- } & {
183
- taskId: Schema.brand<typeof Schema.Number, "TaskId">;
184
- parentId: Schema.NullOr<Schema.brand<typeof Schema.Number, "TaskId">>;
185
- description: typeof Schema.String;
186
- total: Schema.optional<typeof Schema.Number>;
187
- transient: typeof Schema.Boolean;
188
- countDisplay: Schema.Literal<["processedOnly", "detailed"]>;
189
- }>;
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
+ }>, {}>;
190
188
  declare class TaskAddedEvent extends TaskAddedEvent_base {}
191
- declare const TaskUpdatedEvent_base: Schema.TaggedClass<TaskUpdatedEvent, "TaskUpdated", {
192
- readonly _tag: Schema.tag<"TaskUpdated">;
193
- } & {
194
- taskId: Schema.brand<typeof Schema.Number, "TaskId">;
195
- description: Schema.optional<typeof Schema.String>;
196
- succeeded: Schema.optional<typeof Schema.Number>;
197
- failed: Schema.optional<typeof Schema.Number>;
198
- processed: Schema.optional<typeof Schema.Number>;
199
- total: Schema.optional<typeof Schema.Number>;
200
- transient: Schema.optional<typeof Schema.Boolean>;
201
- countDisplay: Schema.optional<Schema.Literal<["processedOnly", "detailed"]>>;
202
- }>;
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
+ }>, {}>;
203
199
  declare class TaskUpdatedEvent extends TaskUpdatedEvent_base {}
204
- declare const TaskAdvancedEvent_base: Schema.TaggedClass<TaskAdvancedEvent, "TaskAdvanced", {
205
- readonly _tag: Schema.tag<"TaskAdvanced">;
206
- } & {
207
- taskId: Schema.brand<typeof Schema.Number, "TaskId">;
208
- amount: typeof Schema.Number;
209
- kind: Schema.Literal<["succeeded", "failed"]>;
210
- }>;
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
+ }>, {}>;
211
205
  declare class TaskAdvancedEvent extends TaskAdvancedEvent_base {}
212
- declare const TaskCompletedEvent_base: Schema.TaggedClass<TaskCompletedEvent, "TaskCompleted", {
213
- readonly _tag: Schema.tag<"TaskCompleted">;
214
- } & {
215
- taskId: Schema.brand<typeof Schema.Number, "TaskId">;
216
- }>;
206
+ declare const TaskCompletedEvent_base: Schema.Class<TaskCompletedEvent, Schema.TaggedStruct<"TaskCompleted", {
207
+ readonly taskId: Schema.brand<Schema.Number, "TaskId">;
208
+ }>, {}>;
217
209
  declare class TaskCompletedEvent extends TaskCompletedEvent_base {}
218
- declare const TaskFailedEvent_base: Schema.TaggedClass<TaskFailedEvent, "TaskFailed", {
219
- readonly _tag: Schema.tag<"TaskFailed">;
220
- } & {
221
- taskId: Schema.brand<typeof Schema.Number, "TaskId">;
222
- }>;
210
+ declare const TaskFailedEvent_base: Schema.Class<TaskFailedEvent, Schema.TaggedStruct<"TaskFailed", {
211
+ readonly taskId: Schema.brand<Schema.Number, "TaskId">;
212
+ }>, {}>;
223
213
  declare class TaskFailedEvent extends TaskFailedEvent_base {}
224
- declare const TaskRemovedEvent_base: Schema.TaggedClass<TaskRemovedEvent, "TaskRemoved", {
225
- readonly _tag: Schema.tag<"TaskRemoved">;
226
- } & {
227
- taskId: Schema.brand<typeof Schema.Number, "TaskId">;
228
- }>;
214
+ declare const TaskRemovedEvent_base: Schema.Class<TaskRemovedEvent, Schema.TaggedStruct<"TaskRemoved", {
215
+ readonly taskId: Schema.brand<Schema.Number, "TaskId">;
216
+ }>, {}>;
229
217
  declare class TaskRemovedEvent extends TaskRemovedEvent_base {}
230
- 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]>;
231
219
  type ProgressTaskEvent = typeof ProgressTaskEventSchema.Type;
232
- declare const decodeProgressTaskEvent: (u: unknown, overrideOptions?: effect_SchemaAST0.ParseOptions) => TaskAddedEvent | TaskUpdatedEvent | TaskAdvancedEvent | TaskCompletedEvent | TaskFailedEvent | TaskRemovedEvent;
220
+ declare const decodeProgressTaskEvent: (input: unknown, options?: effect_SchemaAST0.ParseOptions) => TaskAddedEvent | TaskUpdatedEvent | TaskAdvancedEvent | TaskCompletedEvent | TaskFailedEvent | TaskRemovedEvent;
233
221
  //#endregion
234
222
  //#region src/services/progress.d.ts
235
- declare const Progress_base: Context.TagClass<Progress, "stromseng.dev/effective-progress/Progress", ProgressService>;
223
+ declare const Progress_base: Context.ServiceClass<Progress, "stromseng.dev/effective-progress/Progress", ProgressShape>;
236
224
  declare class Progress extends Progress_base {
237
- static readonly Default: Layer.Layer<Progress, never, never>;
225
+ static readonly layer: Layer.Layer<Progress, never, never>;
238
226
  }
239
227
  //#endregion
240
228
  //#region src/api.d.ts
@@ -248,15 +236,13 @@ interface PublicTaskApi {
248
236
  }
249
237
  interface EffectExecutionOptions {
250
238
  readonly concurrency?: Concurrency;
251
- readonly batching?: boolean | "inherit";
252
- readonly concurrentFinalizers?: boolean;
253
239
  }
254
240
  interface EffectAllExecutionOptions extends EffectExecutionOptions {
255
241
  readonly discard?: boolean;
256
- readonly mode?: "default" | "validate" | "either";
242
+ readonly mode?: "default" | "result";
257
243
  }
258
244
  type AllOptions = Omit<TrackOptions, "total" | "countDisplay"> & EffectAllExecutionOptions;
259
- 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.ExtractMode<O>> : [Arg] extends [Record<string, Effect.Effect<any, any, any>>] ? Effect.All.ReturnObject<Arg, Effect.All.IsDiscard<O>, Effect.All.ExtractMode<O>> : never] extends [Effect.Effect<infer A, infer E, infer R>] ? Effect.Effect<A, E, Exclude<R, Progress | Task>> : never;
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;
260
246
  interface ForEachExecutionOptions extends EffectExecutionOptions {
261
247
  readonly discard?: false | undefined;
262
248
  }
@@ -288,7 +274,7 @@ declare const forEach: {
288
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>>;
289
275
  };
290
276
  //#endregion
291
- //#region src/renderer/columns/amount-column.d.ts
277
+ //#region src/services/renderer/columns/amount-column.d.ts
292
278
  interface AmountLayout {
293
279
  readonly hasDetailedRows: boolean;
294
280
  readonly countWidth: number;
@@ -297,12 +283,12 @@ interface AmountLayout {
297
283
  readonly preferredWidth: number;
298
284
  }
299
285
  //#endregion
300
- //#region src/renderer/columns/bar-column.d.ts
286
+ //#region src/services/renderer/columns/bar-column.d.ts
301
287
  interface BarPrepared {
302
288
  readonly hasDeterminateRows: boolean;
303
289
  }
304
290
  //#endregion
305
- //#region src/renderer/columns/description-column.d.ts
291
+ //#region src/services/renderer/columns/description-column.d.ts
306
292
  interface DescriptionPrepared {
307
293
  readonly minTreeWidth: number;
308
294
  readonly preferredWidth: number;
@@ -337,13 +323,13 @@ declare const defaults: () => ReadonlyArray<ColumnDef<any, any>>;
337
323
  declare const resolveColumnSizeValue: <P>(value: ColumnSizeValue<P> | undefined, prepared: P) => number | undefined;
338
324
  //#endregion
339
325
  //#region src/services/stdio.d.ts
340
- interface ProgressStdioService {
326
+ interface ProgressStdioShape {
341
327
  readonly stdout: NodeJS.WriteStream;
342
328
  readonly stderr: NodeJS.WriteStream;
343
329
  }
344
- declare const ProgressStdio_base: Context.TagClass<ProgressStdio, "stromseng.dev/effective-progress/ProgressStdio", ProgressStdioService>;
330
+ declare const ProgressStdio_base: Context.ServiceClass<ProgressStdio, "stromseng.dev/effective-progress/ProgressStdio", ProgressStdioShape>;
345
331
  declare class ProgressStdio extends ProgressStdio_base {
346
- static readonly Default: Layer.Layer<ProgressStdio, never, never>;
332
+ static readonly layer: Layer.Layer<ProgressStdio, never, never>;
347
333
  }
348
334
  //#endregion
349
- export { AddTaskOptions, AllOptions, AllReturn, CellInfo, ColumnAlign, ColumnDef, ColumnRenderContext, ColumnSizeValue, columns_d_exports as Columns, EffectAllExecutionOptions, EffectExecutionOptions, ForEachExecutionOptions, ForEachOptions, Progress, ProgressService, ProgressStdio, ProgressStdioService, 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 };
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 };