--- /dev/null
+import type {KeywordErrorDefinition, KeywordErrorCxt, ErrorObject} from "../../types"
+import {_, Code} from "../../compile/codegen"
+
+export type _JTDTypeError<K extends string, T extends string, S> = ErrorObject<
+ K,
+ {type: T; nullable: boolean},
+ S
+>
+
+export function typeError(t: string): KeywordErrorDefinition {
+ return {
+ message: (cxt) => typeErrorMessage(cxt, t),
+ params: (cxt) => typeErrorParams(cxt, t),
+ }
+}
+
+export function typeErrorMessage({parentSchema}: KeywordErrorCxt, t: string): string {
+ return parentSchema?.nullable ? `must be ${t} or null` : `must be ${t}`
+}
+
+export function typeErrorParams({parentSchema}: KeywordErrorCxt, t: string): Code {
+ return _`{type: ${t}, nullable: ${!!parentSchema?.nullable}}`
+}