[79a0317] | 1 | import type {FuncKeywordDefinition} from "ajv"
|
---|
| 2 |
|
---|
| 3 | type Constructor = new (...args: any[]) => any
|
---|
| 4 |
|
---|
| 5 | const CONSTRUCTORS: Record<string, Constructor | undefined> = {
|
---|
| 6 | Object,
|
---|
| 7 | Array,
|
---|
| 8 | Function,
|
---|
| 9 | Number,
|
---|
| 10 | String,
|
---|
| 11 | Date,
|
---|
| 12 | RegExp,
|
---|
| 13 | }
|
---|
| 14 |
|
---|
| 15 | /* istanbul ignore else */
|
---|
| 16 | if (typeof Buffer != "undefined") CONSTRUCTORS.Buffer = Buffer
|
---|
| 17 |
|
---|
| 18 | /* istanbul ignore else */
|
---|
| 19 | if (typeof Promise != "undefined") CONSTRUCTORS.Promise = Promise
|
---|
| 20 |
|
---|
| 21 | const getDef: (() => FuncKeywordDefinition) & {
|
---|
| 22 | CONSTRUCTORS: typeof CONSTRUCTORS
|
---|
| 23 | } = Object.assign(_getDef, {CONSTRUCTORS})
|
---|
| 24 |
|
---|
| 25 | function _getDef(): FuncKeywordDefinition {
|
---|
| 26 | return {
|
---|
| 27 | keyword: "instanceof",
|
---|
| 28 | schemaType: ["string", "array"],
|
---|
| 29 | compile(schema: string | string[]) {
|
---|
| 30 | if (typeof schema == "string") {
|
---|
| 31 | const C = getConstructor(schema)
|
---|
| 32 | return (data) => data instanceof C
|
---|
| 33 | }
|
---|
| 34 |
|
---|
| 35 | if (Array.isArray(schema)) {
|
---|
| 36 | const constructors = schema.map(getConstructor)
|
---|
| 37 | return (data) => {
|
---|
| 38 | for (const C of constructors) {
|
---|
| 39 | if (data instanceof C) return true
|
---|
| 40 | }
|
---|
| 41 | return false
|
---|
| 42 | }
|
---|
| 43 | }
|
---|
| 44 |
|
---|
| 45 | /* istanbul ignore next */
|
---|
| 46 | throw new Error("ajv implementation error")
|
---|
| 47 | },
|
---|
| 48 | metaSchema: {
|
---|
| 49 | anyOf: [{type: "string"}, {type: "array", items: {type: "string"}}],
|
---|
| 50 | },
|
---|
| 51 | }
|
---|
| 52 | }
|
---|
| 53 |
|
---|
| 54 | function getConstructor(c: string): Constructor {
|
---|
| 55 | const C = CONSTRUCTORS[c]
|
---|
| 56 | if (C) return C
|
---|
| 57 | throw new Error(`invalid "instanceof" keyword value ${c}`)
|
---|
| 58 | }
|
---|
| 59 |
|
---|
| 60 | export default getDef
|
---|
| 61 | module.exports = getDef
|
---|