This commit is contained in:
2026-06-23 01:13:03 +02:00
parent a3c85a7983
commit 3dc22e3f62
13 changed files with 1210 additions and 10 deletions
+28
View File
@@ -0,0 +1,28 @@
import type { DefaultRegistry, Methods, Registry } from "../registry";
export interface Base<T> {
readonly value: T;
}
export type Fluent<
T,
Reg extends Registry = DefaultRegistry,
> = Base<T> & Methods<T, Reg> & { readonly __registry: Reg };
export function makeFluent<const Reg extends Registry>(
registry: Reg,
) {
const fluent = <T>(value: T) => {
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
const f = { value } as never as Fluent<T, Reg>;
for (const mixin of registry) {
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
mixin.fn(value, f, fluent as (value: unknown) => never);
}
return f;
};
return fluent;
}