Schema work
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Julien Valverdé
2024-03-21 17:42:59 +01:00
parent 8c525f0968
commit d6907c8e28
4 changed files with 22 additions and 40 deletions

View File

@@ -1,8 +1,14 @@
import { dejsonifyOption, jsonifyOption } from "./jsonifiedOption"
import { option } from "./option"
export const effect = {
option,
} as const
export { effectOptionNoneSchema, effectOptionSomeInnerSchema, effectOptionSomeSchema, type ZodEffectOption, type ZodEffectOptionNone, type ZodEffectOptionSome } from "./option"
jsonify: {
option: jsonifyOption
} as const,
dejsonify: {
option: dejsonifyOption
} as const,
} as const

View File

@@ -1,7 +1,7 @@
import { Option } from "effect"
import { identity } from "lodash-es"
import { z } from "zod"
import { ZodEffectOption, ZodEffectOptionNone, ZodEffectOptionSome, effectOptionNoneSchema, effectOptionSomeInnerSchema, effectOptionSomeSchema } from "../effect"
import { ZodEffectOption, ZodEffectOptionNone, ZodEffectOptionSome, effectOptionNoneSchema, effectOptionSomeInnerSchema, effectOptionSomeSchema } from "./option"
export type JsonifiedEffectOptionSomeBrand = "@thilawyn/zod-schema-class/JsonifiedEffectOptionSome"

View File

@@ -1,19 +1,16 @@
import { dejsonifyBigIntSchema, jsonifyBigIntSchema } from "./bigint"
import { dejsonifyDateSchema, jsonifyDateSchema } from "./date"
import { dejsonifyDecimalSchema, jsonifyDecimalSchema } from "./decimal"
import { dejsonifyOption, jsonifyOption } from "./option"
export const jsonify = {
bigint: jsonifyBigIntSchema,
date: jsonifyDateSchema,
decimal: jsonifyDecimalSchema,
option: jsonifyOption,
} as const
export const dejsonify = {
bigint: dejsonifyBigIntSchema,
date: dejsonifyDateSchema,
decimal: dejsonifyDecimalSchema,
option: dejsonifyOption,
} as const

View File

@@ -1,8 +1,8 @@
import { Implements } from "@thilawyn/traitify-ts"
import { Option } from "effect"
import { z } from "zod"
import { JsonifiedZodSchemaClass } from "./JsonifiedZodSchemaClass"
import { ZodSchemaClass } from "./ZodSchemaClass"
import { dejsonify, jsonify } from "./schema/jsonified"
import { s } from "./schema/lib"
import { MobXObservableZodSchemaObject } from "./traits/MobXObservableZodSchemaObject"
@@ -29,42 +29,21 @@ const userInst = User.create({ id: Option.some(1n), name: "User" })
const userInstEffect = User.createEffect({ id: Option.some(1n), name: "User" })
const jsonifiedBigIntOption = jsonify.option.option(
s.effect.option.option(z.bigint()),
s.jsonify.bigint,
)
const jsonifiedUserExp = JsonifiedZodSchemaClass(User, {
jsonifySchema: schema => schema.extend({
id: s.effect.jsonify.option.option(schema.shape.id, s.jsonify.bigint)
}),
const jsonifiedBigIntOptionSome = jsonify.option.some(
s.effect.option.some(z.bigint()),
s.jsonify.bigint,
)
const dejsonifiedBigIntOptionSome = dejsonify.option.some(
s.effect.option.some(z.bigint()),
s.dejsonify.bigint,
)
type T2 = z.output<typeof dejsonifiedBigIntOptionSome>
dejsonifySchema: schema => schema.extend({
id: s.effect.dejsonify.option.option(schema.shape.id, s.dejsonify.bigint)
}),
}).build()
const jsonifiedBigIntOptionNone = jsonify.option.none(
s.effect.option.none(z.bigint()),
s.jsonify.bigint,
)
@jsonifiedUserExp.staticImplements
class JsonifiedUser extends jsonifiedUserExp.extends implements Implements<typeof jsonifiedUserExp> {}
// const jsonifiedUserExp = JsonifiedZodSchemaClass(User, {
// jsonifySchema: s => s.extend({
// id: jsonify.bigint(s.shape.id)
// }),
// dejsonifySchema: s => s.extend({
// id: dejsonify.bigint(s.shape.id)
// }),
// }).build()
// @jsonifiedUserExp.staticImplements
// class JsonifiedUser extends jsonifiedUserExp.extends implements Implements<typeof jsonifiedUserExp> {}
// const jsonifiedUserInst = JsonifiedUser.jsonify(userInst)
// console.log(JSON.stringify(jsonifiedUserInst))
const jsonifiedUserInst = JsonifiedUser.jsonify(userInst)
console.log(JSON.stringify(jsonifiedUserInst))
// jsonifiedUserInst.dejsonify()