From 00040fb7df8ac7bab47973c4e3673004f5367af0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 1 Jan 2024 23:14:08 +0100 Subject: [PATCH] Jsonifiable --- bun.lockb | Bin 150685 -> 151052 bytes package.json | 19 ++++++++++++++---- src/jsonifiable/index.ts | 2 ++ .../makeJsonifiableSchemableClass.ts | 4 ++-- src/jsonifiable/schema/bigint.ts | 18 +++++++++++++++++ src/jsonifiable/schema/date.ts | 18 +++++++++++++++++ src/jsonifiable/schema/decimal.ts | 19 ++++++++++++++++++ src/jsonifiable/schema/index.ts | 3 +++ src/tests.ts | 12 +++++++++-- 9 files changed, 87 insertions(+), 8 deletions(-) create mode 100644 src/jsonifiable/index.ts rename src/{ => jsonifiable}/makeJsonifiableSchemableClass.ts (95%) create mode 100644 src/jsonifiable/schema/bigint.ts create mode 100644 src/jsonifiable/schema/date.ts create mode 100644 src/jsonifiable/schema/decimal.ts create mode 100644 src/jsonifiable/schema/index.ts diff --git a/bun.lockb b/bun.lockb index 159acb9422a2937552a3906922876d80474b0283..74e015cb65608180bb9f472b98d7a2af182d9067 100755 GIT binary patch delta 26068 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 j%OA=(schema: S) => + schema.transform(v => v.toString()) + +export const dejsonifyBigIntSchema = (schema: S) => + z + .string() + .transform(v => { + try { + return BigInt(v) + } + catch (e) { + return v + } + }) + .pipe(schema) diff --git a/src/jsonifiable/schema/date.ts b/src/jsonifiable/schema/date.ts new file mode 100644 index 0000000..b5ac677 --- /dev/null +++ b/src/jsonifiable/schema/date.ts @@ -0,0 +1,18 @@ +import { z } from "zod" + + +export const jsonifyDateSchema = (schema: S) => + schema.transform(v => v.toString()) + +export const dejsonifyDateSchema = (schema: S) => + z + .string() + .transform(v => { + try { + return new Date(v) + } + catch (e) { + return v + } + }) + .pipe(schema) diff --git a/src/jsonifiable/schema/decimal.ts b/src/jsonifiable/schema/decimal.ts new file mode 100644 index 0000000..58c492d --- /dev/null +++ b/src/jsonifiable/schema/decimal.ts @@ -0,0 +1,19 @@ +import { Decimal } from "decimal.js" +import { z } from "zod" + + +export const jsonifyDecimalSchema = >(schema: S) => + schema.transform(v => v.toJSON()) + +export const dejsonifyDecimalSchema = >(schema: S) => + z + .string() + .transform(v => { + try { + return new Decimal(v) + } + catch (e) { + return v + } + }) + .pipe(schema) diff --git a/src/jsonifiable/schema/index.ts b/src/jsonifiable/schema/index.ts new file mode 100644 index 0000000..f4bad9b --- /dev/null +++ b/src/jsonifiable/schema/index.ts @@ -0,0 +1,3 @@ +export * from "./bigint" +export * from "./date" +export * from "./decimal" diff --git a/src/tests.ts b/src/tests.ts index 0d17ecb..ca96997 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -8,9 +8,17 @@ const UserSchema = z.object({ }) -const UserSchemaObject = makeSchemableClass({ schema: UserSchema }) +const UserSchemableObject = makeSchemableClass({ schema: UserSchema }) -class User extends UserSchemaObject {} +// const UserJsonifiableSchemableObject = makeJsonifiableSchemableClass(UserSchemableObject, { +// jsonifySchema: ({ schema, s }) => schema.extend({ +// }), + +// dejsonifySchema: ({ schema, s }) => schema.extend({ +// }), +// }) + +class User extends UserSchemableObject {} const user1 = new User({ id: 1n }) const user2 = newSchemable(User, { id: 2n })