xwt
2025-07-04 b76e716ff4656191d73eba398e9eb39ee975e13b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import type {CodeKeywordDefinition, KeywordCxt} from "ajv"
import {_} from "ajv/dist/compile/codegen"
 
const TYPES = ["undefined", "string", "number", "object", "function", "boolean", "symbol"]
 
export default function getDef(): CodeKeywordDefinition {
  return {
    keyword: "typeof",
    schemaType: ["string", "array"],
    code(cxt: KeywordCxt) {
      const {data, schema, schemaValue} = cxt
      cxt.fail(
        typeof schema == "string"
          ? _`typeof ${data} != ${schema}`
          : _`${schemaValue}.indexOf(typeof ${data}) < 0`
      )
    },
    metaSchema: {
      anyOf: [
        {type: "string", enum: TYPES},
        {type: "array", items: {type: "string", enum: TYPES}},
      ],
    },
  }
}
 
module.exports = getDef