From 290544dc9a99f2e6eef90af23aab0fc07a38e270 Mon Sep 17 00:00:00 2001 From: Pablo Baleztena Date: Fri, 4 Oct 2024 11:54:35 -0300 Subject: [PATCH] [fabric/core] rename isVariant to Variant.is --- .../core/src/variant/is-variant.spec.ts | 40 ------------------ .../fabric/core/src/variant/is-variant.ts | 11 ----- .../fabric/core/src/variant/variant.spec.ts | 41 +++++++++++++++++++ packages/fabric/core/src/variant/variant.ts | 12 ++++++ 4 files changed, 53 insertions(+), 51 deletions(-) delete mode 100644 packages/fabric/core/src/variant/is-variant.spec.ts delete mode 100644 packages/fabric/core/src/variant/is-variant.ts create mode 100644 packages/fabric/core/src/variant/variant.spec.ts diff --git a/packages/fabric/core/src/variant/is-variant.spec.ts b/packages/fabric/core/src/variant/is-variant.spec.ts deleted file mode 100644 index 7632352..0000000 --- a/packages/fabric/core/src/variant/is-variant.spec.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { describe, expect, expectTypeOf, it } from "vitest"; -import { isVariant } from "./is-variant.js"; -import { TaggedVariant, VariantTag } from "./variant.js"; - -interface SuccessVariant extends TaggedVariant<"success"> { - [VariantTag]: "success"; - data: string; -} - -interface ErrorVariant extends TaggedVariant<"error"> { - [VariantTag]: "error"; - message: string; -} - -describe("isVariant", () => { - const successVariant = { - [VariantTag]: "success", - data: "Operation successful", - } as SuccessVariant | ErrorVariant; - - const errorVariant = { - [VariantTag]: "error", - message: "Operation failed", - } as SuccessVariant | ErrorVariant; - - it("should return true for a matching tag and correctly infer it", () => { - if (isVariant(successVariant, "success")) { - expectTypeOf(successVariant).toEqualTypeOf(); - } - - if (isVariant(errorVariant, "error")) { - expectTypeOf(errorVariant).toEqualTypeOf(); - } - }); - - it("should return false for a non-matching tag", () => { - expect(isVariant(successVariant, "error")).toBe(false); - expect(isVariant(errorVariant, "success")).toBe(false); - }); -}); diff --git a/packages/fabric/core/src/variant/is-variant.ts b/packages/fabric/core/src/variant/is-variant.ts deleted file mode 100644 index c4f86e1..0000000 --- a/packages/fabric/core/src/variant/is-variant.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { TaggedVariant, VariantTag } from "./variant.js"; - -export function isVariant< - TVariant extends TaggedVariant, - TTag extends TVariant[VariantTag], ->( - variant: TVariant, - tag: TTag, -): variant is Extract { - return variant[VariantTag] === tag; -} diff --git a/packages/fabric/core/src/variant/variant.spec.ts b/packages/fabric/core/src/variant/variant.spec.ts new file mode 100644 index 0000000..f976a0a --- /dev/null +++ b/packages/fabric/core/src/variant/variant.spec.ts @@ -0,0 +1,41 @@ +import { describe, expect, expectTypeOf, it } from "vitest"; +import { TaggedVariant, Variant, VariantTag } from "./variant.js"; + +interface SuccessVariant extends TaggedVariant<"success"> { + [VariantTag]: "success"; + data: string; +} + +interface ErrorVariant extends TaggedVariant<"error"> { + [VariantTag]: "error"; + message: string; +} + +describe("Variant", () => { + describe("isVariant", () => { + const successVariant = { + [VariantTag]: "success", + data: "Operation successful", + } as SuccessVariant | ErrorVariant; + + const errorVariant = { + [VariantTag]: "error", + message: "Operation failed", + } as SuccessVariant | ErrorVariant; + + it("should return true for a matching tag and correctly infer it", () => { + if (Variant.is(successVariant, "success")) { + expectTypeOf(successVariant).toEqualTypeOf(); + } + + if (Variant.is(errorVariant, "error")) { + expectTypeOf(errorVariant).toEqualTypeOf(); + } + }); + + it("should return false for a non-matching tag", () => { + expect(Variant.is(successVariant, "error")).toBe(false); + expect(Variant.is(errorVariant, "success")).toBe(false); + }); + }); +}); diff --git a/packages/fabric/core/src/variant/variant.ts b/packages/fabric/core/src/variant/variant.ts index dc1b464..12d5b47 100644 --- a/packages/fabric/core/src/variant/variant.ts +++ b/packages/fabric/core/src/variant/variant.ts @@ -9,3 +9,15 @@ export type VariantFromTag< TVariant extends TaggedVariant, TTag extends TVariant[typeof VariantTag], > = Extract; + +export namespace Variant { + export function is< + TVariant extends TaggedVariant, + TTag extends TVariant[VariantTag], + >( + variant: TVariant, + tag: TTag, + ): variant is Extract { + return variant[VariantTag] === tag; + } +}