supercat666's picture
fixed igv
1df763a
raw
history blame
1.21 kB
import type {CodeKeywordDefinition, KeywordCxt, JSONSchemaType, Name} from "ajv"
import {_} from "ajv/dist/compile/codegen"
import {usePattern} from "./_util"
interface RegexpSchema {
pattern: string
flags?: string
}
const regexpMetaSchema: JSONSchemaType<RegexpSchema> = {
type: "object",
properties: {
pattern: {type: "string"},
flags: {type: "string", nullable: true},
},
required: ["pattern"],
additionalProperties: false,
}
const metaRegexp = /^\/(.*)\/([gimuy]*)$/
export default function getDef(): CodeKeywordDefinition {
return {
keyword: "regexp",
type: "string",
schemaType: ["string", "object"],
code(cxt: KeywordCxt) {
const {data, schema} = cxt
const regx = getRegExp(schema)
cxt.pass(_`${regx}.test(${data})`)
function getRegExp(sch: string | RegexpSchema): Name {
if (typeof sch == "object") return usePattern(cxt, sch.pattern, sch.flags)
const rx = metaRegexp.exec(sch)
if (rx) return usePattern(cxt, rx[1], rx[2])
throw new Error("cannot parse string into RegExp")
}
},
metaSchema: {
anyOf: [{type: "string"}, regexpMetaSchema],
},
}
}
module.exports = getDef