Skip to content

Commit 78c79bf

Browse files
committed
Add abstract BaseEnvBuilder to enforce that clone is overriden by subclasses
1 parent 86eef6d commit 78c79bf

1 file changed

Lines changed: 15 additions & 7 deletions

File tree

src/testing-utils.ts

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ export function initAllState(
213213
/**
214214
* Wraps a function that accepts an `ActionState` for testing in different environments.
215215
*/
216-
class EnvBuilder<
216+
abstract class BaseEnvBuilder<
217217
Args extends readonly any[],
218218
R,
219219
Fs extends ReadonlyArray<AllState[number]>,
@@ -224,7 +224,7 @@ class EnvBuilder<
224224

225225
constructor(
226226
fn: (state: ActionState<Fs>, ...args: Args) => R,
227-
cloneFrom?: EnvBuilder<Args, R, Fs>,
227+
cloneFrom?: BaseEnvBuilder<Args, R, Fs>,
228228
) {
229229
this.fn = fn;
230230
this.logger = new RecordingLogger();
@@ -238,9 +238,7 @@ class EnvBuilder<
238238
* Creates a clone of this object. Used internally.
239239
* Must be overriden by subclasses.
240240
*/
241-
protected clone(): this {
242-
return new EnvBuilder(this.fn, this) as this;
243-
}
241+
protected abstract clone(): this;
244242

245243
public getLogger(): RecordingLogger {
246244
return this.logger;
@@ -274,17 +272,27 @@ class EnvBuilder<
274272
}
275273
}
276274

275+
class EnvBuilder<
276+
Args extends readonly any[],
277+
R,
278+
Fs extends ReadonlyArray<AllState[number]>,
279+
> extends BaseEnvBuilder<Args, R, Fs> {
280+
protected clone(): this {
281+
return new EnvBuilder(this.fn, this) as this;
282+
}
283+
}
284+
277285
class CallableEnvBuilder<
278286
Args extends readonly any[],
279287
R,
280288
Fs extends ReadonlyArray<AllState[number]>,
281-
> extends EnvBuilder<Args, R, Fs> {
289+
> extends BaseEnvBuilder<Args, R, Fs> {
282290
private args: Args;
283291

284292
constructor(
285293
fn: (state: ActionState<Fs>, ...args: Args) => R,
286294
args: Args,
287-
cloneFrom?: EnvBuilder<Args, R, Fs>,
295+
cloneFrom?: BaseEnvBuilder<Args, R, Fs>,
288296
) {
289297
super(fn, cloneFrom);
290298
this.args = args;

0 commit comments

Comments
 (0)