PrismaJson
All checks were successful
Lint / lint (push) Successful in 11s

This commit is contained in:
Julien Valverdé
2024-08-20 05:22:19 +02:00
parent 4b8a83bc46
commit 21d1ede3c8
3 changed files with 55 additions and 2 deletions

View File

@@ -1,12 +1,13 @@
import type { Schema } from "@effect/schema" import type { Schema } from "@effect/schema"
import type { Jsonifiable } from "type-fest" import type { Jsonifiable } from "type-fest"
import type { PrismaJson } from "../Types"
/** /**
* Takes a schema of which the encoded value satisfies `Jsonifiable` and returns the same schema with Prisma's `JsonValue` as its encoded type instead. * Takes a schema of which the encoded value satisfies `Jsonifiable` and returns the same schema with Prisma's `JsonValue` as its encoded type instead.
* This allows you use to use jsonifiable schemas to strongly type `Json` database fields in Prisma. * This allows you use to use jsonifiable schemas to strongly type `Json` database fields in Prisma.
* *
* This is needed because type-fest's `Jsonifiable` and `JsonValue` types do not satisfy Prisma's `JsonValue`, and as such we need to perform an unsafe cast. * This is needed because type-fest's `Jsonifiable` and `JsonValue` types do not satisfy Prisma's `JsonValue`, and as such we need to perform a cast.
*/ */
export const encodedAsJsonValue = <A, R>(schema: Schema.Schema<A, Jsonifiable, R>) => export const encodedAsJsonValue = <A, R>(schema: Schema.Schema<A, Jsonifiable, R>) =>
schema as Schema.Schema<A, Jsonifiable, R> schema as Schema.Schema<A, PrismaJson.JsonValue, R>

51
src/Types/PrismaJson.ts Normal file
View File

@@ -0,0 +1,51 @@
/**
* Prisma's Json types
* @module
*/
/**
* From https://github.com/sindresorhus/type-fest/
* Matches a JSON object.
* This type can be useful to enforce some input to be JSON-compatible or as a super-type to be extended from.
*/
export type JsonObject = {[Key in string]?: JsonValue}
/**
* From https://github.com/sindresorhus/type-fest/
* Matches a JSON array.
*/
export interface JsonArray extends Array<JsonValue> {}
/**
* From https://github.com/sindresorhus/type-fest/
* Matches any valid JSON value.
*/
export type JsonValue = string | number | boolean | JsonObject | JsonArray | null
/**
* Matches a JSON object.
* Unlike `JsonObject`, this type allows undefined and read-only properties.
*/
export type InputJsonObject = {readonly [Key in string]?: InputJsonValue | null}
/**
* Matches a JSON array.
* Unlike `JsonArray`, readonly arrays are assignable to this type.
*/
export interface InputJsonArray extends ReadonlyArray<InputJsonValue | null> {}
/**
* Matches any valid value that can be used as an input for operations like
* create and update as the value of a JSON field. Unlike `JsonValue`, this
* type allows read-only arrays and read-only object properties and disallows
* `null` at the top level.
*
* `null` cannot be used as the value of a JSON field because its meaning
* would be ambiguous. Use `Prisma.JsonNull` to store the JSON null value or
* `Prisma.DbNull` to clear the JSON value and set the field to the database
* NULL value instead.
*
* @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-by-null-values
*/
export type InputJsonValue = string | number | boolean | InputJsonObject | InputJsonArray | { toJSON(): unknown }

View File

@@ -1,4 +1,5 @@
export * from "./CommonKeys" export * from "./CommonKeys"
export * from "./Extend" export * from "./Extend"
export * from "./Merge" export * from "./Merge"
export * as PrismaJson from "./PrismaJson"
export * from "./StaticType" export * from "./StaticType"