--- /dev/null
+import type {CodeKeywordDefinition, ErrorNoParams, AnySchema} from "../../types"
+import type {KeywordCxt} from "../../compile/validate"
+import {alwaysValidSchema} from "../../compile/util"
+
+export type NotKeywordError = ErrorNoParams<"not", AnySchema>
+
+const def: CodeKeywordDefinition = {
+ keyword: "not",
+ schemaType: ["object", "boolean"],
+ trackErrors: true,
+ code(cxt: KeywordCxt) {
+ const {gen, schema, it} = cxt
+ if (alwaysValidSchema(it, schema)) {
+ cxt.fail()
+ return
+ }
+
+ const valid = gen.name("valid")
+ cxt.subschema(
+ {
+ keyword: "not",
+ compositeRule: true,
+ createErrors: false,
+ allErrors: false,
+ },
+ valid
+ )
+
+ cxt.result(
+ valid,
+ () => cxt.error(),
+ () => cxt.reset()
+ )
+ },
+ error: {message: "must NOT be valid"},
+}
+
+export default def