0.1.3 #4

Merged
Thilawyn merged 74 commits from next into master 2024-03-24 22:24:25 +01:00
3 changed files with 32 additions and 34 deletions
Showing only changes of commit 13c58d0270 - Show all commits

View File

@@ -2,4 +2,35 @@ import Decimal from "decimal.js"
import { z } from "zod" import { z } from "zod"
export const decimal = z.custom<Decimal>(v => Decimal.isDecimal(v)) type JsonifiedDecimalBrand = "@thilawyn/zod-schema-class/JsonifiedDecimal"
export function decimal() {
return z.custom<Decimal>(v => Decimal.isDecimal(v))
}
export module decimal {
export function jsonifyDecimalSchema<S extends z.ZodType<Decimal>>(schema: S) {
return schema
.transform(v => v.toJSON())
.brand<JsonifiedDecimalBrand>()
}
export function dejsonifyDecimalSchema<S extends z.ZodType<Decimal>>(schema: S) {
return z
.custom<string & z.BRAND<JsonifiedDecimalBrand>>()
.pipe(
z
.string()
.transform(v => {
try {
return new Decimal(v)
}
catch (e) {
return v
}
})
)
.pipe(schema)
}
}

View File

@@ -1,30 +0,0 @@
import { Decimal } from "decimal.js"
import { z } from "zod"
export type JsonifiedDecimalBrand = "@thilawyn/zod-schema-class/JsonifiedDecimal"
export function jsonifyDecimalSchema<S extends z.ZodType<Decimal>>(schema: S) {
return schema
.transform(v => v.toJSON())
.brand<JsonifiedDecimalBrand>()
}
export function dejsonifyDecimalSchema<S extends z.ZodType<Decimal>>(schema: S) {
return z
.custom<string & z.BRAND<JsonifiedDecimalBrand>>()
.pipe(
z
.string()
.transform(v => {
try {
return new Decimal(v)
}
catch (e) {
return v
}
})
)
.pipe(schema)
}

View File

@@ -1,16 +1,13 @@
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"
export const jsonify = { export const jsonify = {
bigint: jsonifyBigIntSchema, bigint: jsonifyBigIntSchema,
date: jsonifyDateSchema, date: jsonifyDateSchema,
decimal: jsonifyDecimalSchema,
} as const } as const
export const dejsonify = { export const dejsonify = {
bigint: dejsonifyBigIntSchema, bigint: dejsonifyBigIntSchema,
date: dejsonifyDateSchema, date: dejsonifyDateSchema,
decimal: dejsonifyDecimalSchema,
} as const } as const