From dba570a8e9554958626e5a8ec9ca556345b1bfd2 Mon Sep 17 00:00:00 2001 From: Tim Date: Mon, 19 Aug 2024 19:37:56 +1200 Subject: [PATCH] make VariantSchema constructor apis internal (#3482) --- .changeset/red-apricots-burn.md | 5 ++ packages/experimental/src/VariantSchema.ts | 97 ++++++---------------- 2 files changed, 32 insertions(+), 70 deletions(-) create mode 100644 .changeset/red-apricots-burn.md diff --git a/.changeset/red-apricots-burn.md b/.changeset/red-apricots-burn.md new file mode 100644 index 0000000000..7ed16365ce --- /dev/null +++ b/.changeset/red-apricots-burn.md @@ -0,0 +1,5 @@ +--- +"@effect/experimental": patch +--- + +make VariantSchema constructor apis internal diff --git a/packages/experimental/src/VariantSchema.ts b/packages/experimental/src/VariantSchema.ts index 15f077cd1c..3e2158a5a5 100644 --- a/packages/experimental/src/VariantSchema.ts +++ b/packages/experimental/src/VariantSchema.ts @@ -124,74 +124,6 @@ export declare namespace Field { } } -const StructProto = { - pipe() { - return pipeArguments(this, arguments) - } -} - -/** - * @since 1.0.0 - * @category constructors - */ -export const Struct = (fields: A): Struct => { - const self = Object.create(StructProto) - self[TypeId] = fields - return self -} - -const FieldProto = { - [FieldTypeId]: FieldTypeId, - pipe() { - return pipeArguments(this, arguments) - } -} - -/** - * @since 1.0.0 - * @category constructors - */ -export const Field = (schemas: A): Field => { - const self = Object.create(FieldProto) - self.schemas = schemas - return self -} - -/** - * @since 1.0.0 - * @category constructors - */ -export const fieldEvolve: { - < - Self extends Field, - Mapping extends { - readonly [K in keyof Self["schemas"]]?: (variant: Self["schemas"][K]) => Field.ValueAny - } - >(f: Mapping): (self: Self) => Field< - { - readonly [K in keyof Self["schemas"]]: K extends keyof Mapping - ? Mapping[K] extends (arg: any) => any ? ReturnType : Self["schemas"][K] - : Self["schemas"][K] - } - > - < - Self extends Field, - Mapping extends { - readonly [K in keyof Self["schemas"]]?: (variant: Self["schemas"][K]) => Field.ValueAny - } - >(self: Self, f: Mapping): Field< - { - readonly [K in keyof Self["schemas"]]: K extends keyof Mapping - ? Mapping[K] extends (arg: any) => any ? ReturnType : Self["schemas"][K] - : Self["schemas"][K] - } - > -} = dual( - 2, - (self: Field, f: Record Field.ValueAny>): Field => - Field(Struct_.evolve(self.schemas, f)) -) - /** * @since 1.0.0 * @category extractors @@ -261,8 +193,8 @@ type RequiredKeys = { }[keyof T] /** - * @category models * @since 1.0.0 + * @category models */ export interface Class< Self, @@ -439,7 +371,7 @@ export const make = < const field = FieldTypeId in self ? self : Field(Object.fromEntries( options.variants.map((variant) => [variant, self]) )) - return fieldEvolve(field, f) + return Field(Struct_.evolve(field.schemas, f)) } ) return { @@ -481,3 +413,28 @@ export const Overrideable = ( decode: (_) => ParseResult.succeed(undefined), encode: (dt) => options.generate(dt === undefined ? Option.none() : Option.some(dt)) }).pipe(Schema.propertySignature, Schema.withConstructorDefault(constUndefined)) + +const StructProto = { + pipe() { + return pipeArguments(this, arguments) + } +} + +const Struct = (fields: A): Struct => { + const self = Object.create(StructProto) + self[TypeId] = fields + return self +} + +const FieldProto = { + [FieldTypeId]: FieldTypeId, + pipe() { + return pipeArguments(this, arguments) + } +} + +const Field = (schemas: A): Field => { + const self = Object.create(FieldProto) + self.schemas = schemas + return self +}