diff --git a/packages/sdk/src/schema/contracts/custom.ts b/packages/sdk/src/schema/contracts/custom.ts index 6824ecc82b3..96b144e5399 100644 --- a/packages/sdk/src/schema/contracts/custom.ts +++ b/packages/sdk/src/schema/contracts/custom.ts @@ -1,5 +1,5 @@ import { toSemver } from "../../common/index"; -import { AddressSchema, BigNumberishSchema } from "../shared"; +import { AddressSchema, BigNumberishSchema, JsonSchema } from "../shared"; import { CommonContractOutputSchema, CommonContractSchema, @@ -10,7 +10,7 @@ import { CommonTrustedForwarderSchema, MerkleSchema, } from "./common"; -import { FileOrBufferOrStringSchema, JsonSchema } from "@thirdweb-dev/storage"; +import { FileOrBufferOrStringSchema } from "@thirdweb-dev/storage"; import { BigNumberish } from "ethers"; import { z } from "zod"; diff --git a/packages/sdk/src/schema/shared.ts b/packages/sdk/src/schema/shared.ts index ad81afad6c5..d95a7c082af 100644 --- a/packages/sdk/src/schema/shared.ts +++ b/packages/sdk/src/schema/shared.ts @@ -31,6 +31,18 @@ export const PercentSchema = z .max(100, "Cannot exeed 100%") .min(0, "Cannot be below 0%"); +export const JsonLiteral = z.union([ + z.string(), + z.number(), + z.boolean(), + z.null(), +]); + +export const JsonSchema: z.ZodSchema = z.lazy(() => + z.union([JsonLiteral, z.array(JsonSchema), z.record(JsonSchema)]), +); +export const JsonObjectSchema = z.record(JsonSchema); + export const HexColor = z.union([ z .string() diff --git a/packages/sdk/src/schema/tokens/common/index.ts b/packages/sdk/src/schema/tokens/common/index.ts index c7c10b5da45..85f0a59c4e2 100644 --- a/packages/sdk/src/schema/tokens/common/index.ts +++ b/packages/sdk/src/schema/tokens/common/index.ts @@ -1,6 +1,6 @@ -import { BigNumberSchema, HexColor } from "../../shared"; +import { BigNumberSchema, HexColor, JsonSchema } from "../../shared"; import { OptionalPropertiesInput } from "./properties"; -import { FileOrBufferOrStringSchema, JsonSchema } from "@thirdweb-dev/storage"; +import { FileOrBufferOrStringSchema } from "@thirdweb-dev/storage"; import { z } from "zod"; /** diff --git a/packages/sdk/src/schema/tokens/common/properties.ts b/packages/sdk/src/schema/tokens/common/properties.ts index 7d001364c78..49d0e7fc64a 100644 --- a/packages/sdk/src/schema/tokens/common/properties.ts +++ b/packages/sdk/src/schema/tokens/common/properties.ts @@ -1,4 +1,4 @@ -import { JsonObjectSchema } from "@thirdweb-dev/storage"; +import { JsonObjectSchema } from "../../shared"; import { z } from "zod"; /** diff --git a/packages/storage/src/types/data.ts b/packages/storage/src/types/data.ts index 265d365a4e0..ebe927cc045 100644 --- a/packages/storage/src/types/data.ts +++ b/packages/storage/src/types/data.ts @@ -67,6 +67,7 @@ export const JsonSchema: z.ZodType = z.lazy(() => JsonObjectSchema, FileOrBufferSchema, z.array(JsonSchema), + z.record(JsonSchema), ]), );