import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from "../../types" import type {KeywordCxt} from "../../compile/validate" import {_} from "../../compile/codegen" import {useFunc} from "../../compile/util" import equal from "../../runtime/equal" export type ConstError = ErrorObject<"const", {allowedValue: any}> const error: KeywordErrorDefinition = { message: "must be equal to constant", params: ({schemaCode}) => _`{allowedValue: ${schemaCode}}`, } const def: CodeKeywordDefinition = { keyword: "const", $data: true, error, code(cxt: KeywordCxt) { const {gen, data, $data, schemaCode, schema} = cxt if ($data || (schema && typeof schema == "object")) { cxt.fail$data(_`!${useFunc(gen, equal)}(${data}, ${schemaCode})`) } else { cxt.fail(_`${schema} !== ${data}`) } }, } export default def