This commit is contained in:
@@ -1,12 +1,14 @@
|
|||||||
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 { 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 = {
|
||||||
|
|||||||
@@ -1,16 +1,19 @@
|
|||||||
import { Option } from "effect"
|
import { Option } from "effect"
|
||||||
import { identity } from "lodash-es"
|
|
||||||
import { z } from "zod"
|
import { z } from "zod"
|
||||||
|
import { effect } from "../effect"
|
||||||
|
|
||||||
|
|
||||||
export const jsonifyOption = {
|
export const jsonifyOption = {
|
||||||
option: <S extends z.ZodSchema>(schema: S) =>
|
// option: <S extends z.ZodSchema>(schema: S) =>
|
||||||
z.union([option.some(schema), option.none(schema)]),
|
// z.union([option.some(schema), option.none(schema)]),
|
||||||
|
|
||||||
some: <S extends z.ZodSchema>(schema: S) => z
|
some: <
|
||||||
.custom<Option.Some<z.output<S>>>(v => Option.isOption(v) && Option.isSome(v), "Not an Option")
|
S extends ReturnType<typeof effect.option.some<T>>,
|
||||||
.pipe(z.object({ value: schema }).passthrough())
|
T extends z.ZodSchema,
|
||||||
.transform<Option.Some<z.output<S>>>(identity),
|
>(
|
||||||
|
schema: S | ReturnType<typeof effect.option.some<T>>
|
||||||
|
) =>
|
||||||
|
(schema as S).transform(v => Option.getOrThrow(v)),
|
||||||
|
|
||||||
none: <S extends z.ZodSchema | unknown = unknown>(_schema?: S) =>
|
none: <S extends z.ZodSchema | unknown = unknown>(_schema?: S) =>
|
||||||
z.custom<Option.None<
|
z.custom<Option.None<
|
||||||
|
|||||||
@@ -30,6 +30,10 @@ 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 jsonifiedOption = jsonify.option.some(
|
||||||
|
effect.option.some(z.literal("prout"))
|
||||||
|
).parse({})
|
||||||
|
|
||||||
const jsonifiedUserExp = JsonifiedZodSchemaClass(User, {
|
const jsonifiedUserExp = JsonifiedZodSchemaClass(User, {
|
||||||
jsonifySchema: s => s.extend({
|
jsonifySchema: s => s.extend({
|
||||||
id: jsonify.bigint(s.shape.id)
|
id: jsonify.bigint(s.shape.id)
|
||||||
|
|||||||
Reference in New Issue
Block a user