From abcc3e88e8eb7f662402440c8df49c6372b0cf25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 9 Jan 2024 23:38:45 +0100 Subject: [PATCH] Working newSchemable --- src/newSchemable.ts | 95 +++++++++++++++++++++++++++++++++------------ src/tests.ts | 5 +-- 2 files changed, 72 insertions(+), 28 deletions(-) diff --git a/src/newSchemable.ts b/src/newSchemable.ts index 7764693..69e0996 100644 --- a/src/newSchemable.ts +++ b/src/newSchemable.ts @@ -48,31 +48,76 @@ export const newSchemable = < ) as InstanceType -// export const newSchemablePromise = async < -// C extends SchemableClass<$Config>, -// $Config extends SchemableConfig, -// >( -// class_: C | SchemableClass<$Config>, -// ...[values, params]: NewSchemableArgs<$Config["input"]> -// ) => -// new class_(await class_.schemaWithDefaultValues.parseAsync(values || {}, params)) as InstanceType +export const newSchemablePromise = async < + C extends SchemableClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + Values, + DefaultValues, + "Class" + >, + + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues extends Partial, +>( + class_: C | SchemableClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + Values, + DefaultValues, + "Class" + >, + + ...[values, params]: NewSchemableArgs< + SchemableClassInput + > +) => + new class_( + await class_.schema.parseAsync({ ...class_.defaultValues, ...values }, params) + ) as InstanceType -// export const newSchemableEffect = < -// C extends SchemableClass<$Config>, -// $Config extends SchemableConfig, -// >( -// class_: C | SchemableClass<$Config>, -// ...[values, params]: NewSchemableArgs<$Config["input"]> -// ) => pipe( -// parseZodTypeEffect< -// z.output, -// z.input -// >( -// class_.schemaWithDefaultValues, -// values || {}, -// params, -// ), +export const newSchemableEffect = < + C extends SchemableClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + Values, + DefaultValues, + "Class" + >, -// Effect.map(values => new class_(values) as InstanceType), -// ) + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues extends Partial, +>( + class_: C | SchemableClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + Values, + DefaultValues, + "Class" + >, + + ...[values, params]: NewSchemableArgs< + SchemableClassInput + > +) => pipe( + parseZodTypeEffect( + class_.schema, + { ...class_.defaultValues, ...values }, + params, + ), + + Effect.map(values => new class_(values) as InstanceType), +) diff --git a/src/tests.ts b/src/tests.ts index a88318b..905a71a 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -1,5 +1,5 @@ import { z } from "zod" -import { SchemableClassInput, extendSchemableClass, makeSchemableClass, makeSchemableClassFrom, newSchemable } from "." +import { SchemableClassInput, extendSchemableClass, makeSchemableClass, newSchemableEffect } from "." // class Test1 { @@ -36,5 +36,4 @@ class Test3 extends Test2 { type Test = SchemableClassInput, typeof Test3.defaultValues> -const test3inst = newSchemable(Test3, { ruquier: 48 }) -console.log(test3inst) +const test3inst = newSchemableEffect(Test3, { ruquier: 48 })