From ab41ff028d246c45aa2dd8114a185f8979edb0b9 Mon Sep 17 00:00:00 2001 From: Pablo Baleztena Date: Mon, 21 Oct 2024 13:02:26 -0300 Subject: [PATCH] [fabric/core] Add variantConstructor utility for tagged variants --- packages/fabric/core/variant/constructor.ts | 14 ++++++++++++++ packages/fabric/core/variant/index.ts | 1 + 2 files changed, 15 insertions(+) create mode 100644 packages/fabric/core/variant/constructor.ts diff --git a/packages/fabric/core/variant/constructor.ts b/packages/fabric/core/variant/constructor.ts new file mode 100644 index 0000000..984e97e --- /dev/null +++ b/packages/fabric/core/variant/constructor.ts @@ -0,0 +1,14 @@ +import type { TaggedVariant, VariantTag } from "./variant.ts"; + +export function variantConstructor< + const T extends TaggedVariant, +>( + tag: T[VariantTag], +) { + return >(options: TOpts) => { + return { + _tag: tag, + ...options, + } as const; + }; +} diff --git a/packages/fabric/core/variant/index.ts b/packages/fabric/core/variant/index.ts index dd17902..f206fb5 100644 --- a/packages/fabric/core/variant/index.ts +++ b/packages/fabric/core/variant/index.ts @@ -1,2 +1,3 @@ +export * from "./constructor.ts"; export * from "./match.ts"; export * from "./variant.ts";