All files / src registry.ts

100% Statements 1/1
100% Branches 0/0
100% Functions 0/0
100% Lines 1/1

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30                  3x                                        
import { Mixin, type Instansiate } from "./base/mixin";
import { Array } from "./mixin/array";
import { AsyncMixin as Async } from "./mixin/awaited";
import { Base } from "./mixin/base";
import { Math } from "./mixin/math";
import { Optional } from "./mixin/optional";
 
export type Registry = readonly Mixin[];
 
export const DEFAULT_REGISTRY = [
	Async,
	Array,
	Base,
	Optional,
	Math,
] as const satisfies Registry;
export type DefaultRegistry = typeof DEFAULT_REGISTRY;
 
export type Methods<
	T,
	Reg extends Registry,
	TReg extends Registry = Reg,
	TOut extends Record<PropertyKey, unknown> = Record<never, never>,
> = TReg extends readonly [
	infer M extends Mixin,
	...infer Rest extends Registry,
]
	? Methods<T, Reg, Rest, TOut & Instansiate<M, T, Reg>>
	: TOut;