| | |
| | | "use strict"; |
| | | Object.defineProperty(exports, "__esModule", { value: true }); |
| | | const code_1 = require("../code"); |
| | | const util_1 = require("../../compile/util"); |
| | | const codegen_1 = require("../../compile/codegen"); |
| | | const error = { |
| | | message: ({ schemaCode }) => (0, codegen_1.str) `must match pattern "${schemaCode}"`, |
| | |
| | | $data: true, |
| | | error, |
| | | code(cxt) { |
| | | const { data, $data, schema, schemaCode, it } = cxt; |
| | | // TODO regexp should be wrapped in try/catchs |
| | | const { gen, data, $data, schema, schemaCode, it } = cxt; |
| | | const u = it.opts.unicodeRegExp ? "u" : ""; |
| | | const regExp = $data ? (0, codegen_1._) `(new RegExp(${schemaCode}, ${u}))` : (0, code_1.usePattern)(cxt, schema); |
| | | cxt.fail$data((0, codegen_1._) `!${regExp}.test(${data})`); |
| | | if ($data) { |
| | | const { regExp } = it.opts.code; |
| | | const regExpCode = regExp.code === "new RegExp" ? (0, codegen_1._) `new RegExp` : (0, util_1.useFunc)(gen, regExp); |
| | | const valid = gen.let("valid"); |
| | | gen.try(() => gen.assign(valid, (0, codegen_1._) `${regExpCode}(${schemaCode}, ${u}).test(${data})`), () => gen.assign(valid, false)); |
| | | cxt.fail$data((0, codegen_1._) `!${valid}`); |
| | | } |
| | | else { |
| | | const regExp = (0, code_1.usePattern)(cxt, schema); |
| | | cxt.fail$data((0, codegen_1._) `!${regExp}.test(${data})`); |
| | | } |
| | | }, |
| | | }; |
| | | exports.default = def; |