12345678910111213141516171819202122232425262728 |
- import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from "../../types"
- import type {KeywordCxt} from "../../compile/validate"
- import {usePattern} from "../code"
- import {_, str} from "../../compile/codegen"
- export type PatternError = ErrorObject<"pattern", {pattern: string}, string | {$data: string}>
- const error: KeywordErrorDefinition = {
- message: ({schemaCode}) => str`must match pattern "${schemaCode}"`,
- params: ({schemaCode}) => _`{pattern: ${schemaCode}}`,
- }
- const def: CodeKeywordDefinition = {
- keyword: "pattern",
- type: "string",
- schemaType: "string",
- $data: true,
- error,
- code(cxt: KeywordCxt) {
- const {data, $data, schema, schemaCode, it} = cxt
- // TODO regexp should be wrapped in try/catchs
- const u = it.opts.unicodeRegExp ? "u" : ""
- const regExp = $data ? _`(new RegExp(${schemaCode}, ${u}))` : usePattern(cxt, schema)
- cxt.fail$data(_`!${regExp}.test(${data})`)
- },
- }
- export default def
|