From 00670d0f8dfda42150c640e3e949e1f8ad3bdaed Mon Sep 17 00:00:00 2001 From: Tim Date: Tue, 20 Aug 2024 09:57:03 +1200 Subject: [PATCH] ensure VariantSchema preserves opaque types (#3487) --- .changeset/brave-bobcats-enjoy.md | 5 +++++ packages/experimental/src/VariantSchema.ts | 13 ++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 .changeset/brave-bobcats-enjoy.md diff --git a/.changeset/brave-bobcats-enjoy.md b/.changeset/brave-bobcats-enjoy.md new file mode 100644 index 0000000000..787e7f1506 --- /dev/null +++ b/.changeset/brave-bobcats-enjoy.md @@ -0,0 +1,5 @@ +--- +"@effect/experimental": patch +--- + +ensure VariantSchema preserves opaque types diff --git a/packages/experimental/src/VariantSchema.ts b/packages/experimental/src/VariantSchema.ts index 3e2158a5a5..ac359b2b04 100644 --- a/packages/experimental/src/VariantSchema.ts +++ b/packages/experimental/src/VariantSchema.ts @@ -128,12 +128,12 @@ export declare namespace Field { * @since 1.0.0 * @category extractors */ -export type ExtractFields = { +export type ExtractFields = { readonly [ K in keyof Fields as [Fields[K]] extends [Field] ? V extends keyof Config ? K : never : K - ]: [Fields[K]] extends [Struct] ? Extract + ]: [Fields[K]] extends [Struct] ? Extract : [Fields[K]] extends [Field] ? [Config[V]] extends [Schema.Schema.All | Schema.PropertySignature.All] ? Config[V] : never @@ -145,9 +145,12 @@ export type ExtractFields = { * @since 1.0.0 * @category extractors */ -export type Extract> = [A] extends [ +export type Extract, IsDefault = false> = [A] extends [ Struct -] ? Schema.Struct>> +] ? + IsDefault extends true + ? [A] extends [Schema.Schema.Any] ? A : Schema.Struct>> + : Schema.Struct>> : never /** @@ -318,7 +321,7 @@ export const make = < & ClassFromFields< Self, Fields, - Schema.Simplify> + Schema.Simplify> > & { readonly [V in Variants[number]]: Extract>