import { ConfigSpec } from "../types/config-types.ts"; import { BuilderExtract, IBuilder } from "./builder.ts"; import { Config } from "./mod.ts"; export class Variants extends IBuilder { static of< A extends { [key: string]: Config; } >(a: A) { // deno-lint-ignore no-explicit-any const variants: { [K in keyof A]: BuilderExtract } = {} as any; for (const key in a) { // deno-lint-ignore no-explicit-any variants[key] = a[key].build() as any; } return new Variants(variants); } static empty() { return Variants.of({}); } static withVariant(key: K, value: Config) { return Variants.empty().withVariant(key, value); } withVariant(key: K, value: Config) { return new Variants({ ...this.a, [key]: value.build(), } as A & { [key in K]: B }); } }