This commit is contained in:
@@ -1,8 +1,14 @@
|
|||||||
|
import { dejsonifyOption, jsonifyOption } from "./jsonifiedOption"
|
||||||
import { option } from "./option"
|
import { option } from "./option"
|
||||||
|
|
||||||
|
|
||||||
export const effect = {
|
export const effect = {
|
||||||
option,
|
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
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Option } from "effect"
|
import { Option } from "effect"
|
||||||
import { identity } from "lodash-es"
|
import { identity } from "lodash-es"
|
||||||
import { z } from "zod"
|
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"
|
export type JsonifiedEffectOptionSomeBrand = "@thilawyn/zod-schema-class/JsonifiedEffectOptionSome"
|
||||||
@@ -1,19 +1,16 @@
|
|||||||
import { dejsonifyBigIntSchema, jsonifyBigIntSchema } from "./bigint"
|
import { dejsonifyBigIntSchema, jsonifyBigIntSchema } from "./bigint"
|
||||||
import { dejsonifyDateSchema, jsonifyDateSchema } from "./date"
|
import { dejsonifyDateSchema, jsonifyDateSchema } from "./date"
|
||||||
import { dejsonifyDecimalSchema, jsonifyDecimalSchema } from "./decimal"
|
import { dejsonifyDecimalSchema, jsonifyDecimalSchema } from "./decimal"
|
||||||
import { dejsonifyOption, jsonifyOption } from "./option"
|
|
||||||
|
|
||||||
|
|
||||||
export const jsonify = {
|
export const jsonify = {
|
||||||
bigint: jsonifyBigIntSchema,
|
bigint: jsonifyBigIntSchema,
|
||||||
date: jsonifyDateSchema,
|
date: jsonifyDateSchema,
|
||||||
decimal: jsonifyDecimalSchema,
|
decimal: jsonifyDecimalSchema,
|
||||||
option: jsonifyOption,
|
|
||||||
} as const
|
} as const
|
||||||
|
|
||||||
export const dejsonify = {
|
export const dejsonify = {
|
||||||
bigint: dejsonifyBigIntSchema,
|
bigint: dejsonifyBigIntSchema,
|
||||||
date: dejsonifyDateSchema,
|
date: dejsonifyDateSchema,
|
||||||
decimal: dejsonifyDecimalSchema,
|
decimal: dejsonifyDecimalSchema,
|
||||||
option: dejsonifyOption,
|
|
||||||
} as const
|
} as const
|
||||||
|
|||||||
47
src/tests.ts
47
src/tests.ts
@@ -1,8 +1,8 @@
|
|||||||
import { Implements } from "@thilawyn/traitify-ts"
|
import { Implements } from "@thilawyn/traitify-ts"
|
||||||
import { Option } from "effect"
|
import { Option } from "effect"
|
||||||
import { z } from "zod"
|
import { z } from "zod"
|
||||||
|
import { JsonifiedZodSchemaClass } from "./JsonifiedZodSchemaClass"
|
||||||
import { ZodSchemaClass } from "./ZodSchemaClass"
|
import { ZodSchemaClass } from "./ZodSchemaClass"
|
||||||
import { dejsonify, jsonify } from "./schema/jsonified"
|
|
||||||
import { s } from "./schema/lib"
|
import { s } from "./schema/lib"
|
||||||
import { MobXObservableZodSchemaObject } from "./traits/MobXObservableZodSchemaObject"
|
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 userInstEffect = User.createEffect({ id: Option.some(1n), name: "User" })
|
||||||
|
|
||||||
|
|
||||||
const jsonifiedBigIntOption = jsonify.option.option(
|
const jsonifiedUserExp = JsonifiedZodSchemaClass(User, {
|
||||||
s.effect.option.option(z.bigint()),
|
jsonifySchema: schema => schema.extend({
|
||||||
s.jsonify.bigint,
|
id: s.effect.jsonify.option.option(schema.shape.id, s.jsonify.bigint)
|
||||||
)
|
}),
|
||||||
|
|
||||||
const jsonifiedBigIntOptionSome = jsonify.option.some(
|
dejsonifySchema: schema => schema.extend({
|
||||||
s.effect.option.some(z.bigint()),
|
id: s.effect.dejsonify.option.option(schema.shape.id, s.dejsonify.bigint)
|
||||||
s.jsonify.bigint,
|
}),
|
||||||
)
|
}).build()
|
||||||
const dejsonifiedBigIntOptionSome = dejsonify.option.some(
|
|
||||||
s.effect.option.some(z.bigint()),
|
|
||||||
s.dejsonify.bigint,
|
|
||||||
)
|
|
||||||
type T2 = z.output<typeof dejsonifiedBigIntOptionSome>
|
|
||||||
|
|
||||||
const jsonifiedBigIntOptionNone = jsonify.option.none(
|
@jsonifiedUserExp.staticImplements
|
||||||
s.effect.option.none(z.bigint()),
|
class JsonifiedUser extends jsonifiedUserExp.extends implements Implements<typeof jsonifiedUserExp> {}
|
||||||
s.jsonify.bigint,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
const jsonifiedUserInst = JsonifiedUser.jsonify(userInst)
|
||||||
// const jsonifiedUserExp = JsonifiedZodSchemaClass(User, {
|
console.log(JSON.stringify(jsonifiedUserInst))
|
||||||
// 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))
|
|
||||||
// jsonifiedUserInst.dejsonify()
|
// jsonifiedUserInst.dejsonify()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user