You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					123 lines
				
				5.6 KiB
			
		
		
			
		
	
	
					123 lines
				
				5.6 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								Object.defineProperty(exports, "__esModule", { value: true });
							 | 
						||
| 
								 | 
							
								exports.extendErrors = exports.resetErrorsCount = exports.reportExtraError = exports.reportError = exports.keyword$DataError = exports.keywordError = void 0;
							 | 
						||
| 
								 | 
							
								const codegen_1 = require("./codegen");
							 | 
						||
| 
								 | 
							
								const util_1 = require("./util");
							 | 
						||
| 
								 | 
							
								const names_1 = require("./names");
							 | 
						||
| 
								 | 
							
								exports.keywordError = {
							 | 
						||
| 
								 | 
							
								    message: ({ keyword }) => (0, codegen_1.str) `must pass "${keyword}" keyword validation`,
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								exports.keyword$DataError = {
							 | 
						||
| 
								 | 
							
								    message: ({ keyword, schemaType }) => schemaType
							 | 
						||
| 
								 | 
							
								        ? (0, codegen_1.str) `"${keyword}" keyword must be ${schemaType} ($data)`
							 | 
						||
| 
								 | 
							
								        : (0, codegen_1.str) `"${keyword}" keyword is invalid ($data)`,
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								function reportError(cxt, error = exports.keywordError, errorPaths, overrideAllErrors) {
							 | 
						||
| 
								 | 
							
								    const { it } = cxt;
							 | 
						||
| 
								 | 
							
								    const { gen, compositeRule, allErrors } = it;
							 | 
						||
| 
								 | 
							
								    const errObj = errorObjectCode(cxt, error, errorPaths);
							 | 
						||
| 
								 | 
							
								    if (overrideAllErrors !== null && overrideAllErrors !== void 0 ? overrideAllErrors : (compositeRule || allErrors)) {
							 | 
						||
| 
								 | 
							
								        addError(gen, errObj);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    else {
							 | 
						||
| 
								 | 
							
								        returnErrors(it, (0, codegen_1._) `[${errObj}]`);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								exports.reportError = reportError;
							 | 
						||
| 
								 | 
							
								function reportExtraError(cxt, error = exports.keywordError, errorPaths) {
							 | 
						||
| 
								 | 
							
								    const { it } = cxt;
							 | 
						||
| 
								 | 
							
								    const { gen, compositeRule, allErrors } = it;
							 | 
						||
| 
								 | 
							
								    const errObj = errorObjectCode(cxt, error, errorPaths);
							 | 
						||
| 
								 | 
							
								    addError(gen, errObj);
							 | 
						||
| 
								 | 
							
								    if (!(compositeRule || allErrors)) {
							 | 
						||
| 
								 | 
							
								        returnErrors(it, names_1.default.vErrors);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								exports.reportExtraError = reportExtraError;
							 | 
						||
| 
								 | 
							
								function resetErrorsCount(gen, errsCount) {
							 | 
						||
| 
								 | 
							
								    gen.assign(names_1.default.errors, errsCount);
							 | 
						||
| 
								 | 
							
								    gen.if((0, codegen_1._) `${names_1.default.vErrors} !== null`, () => gen.if(errsCount, () => gen.assign((0, codegen_1._) `${names_1.default.vErrors}.length`, errsCount), () => gen.assign(names_1.default.vErrors, null)));
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								exports.resetErrorsCount = resetErrorsCount;
							 | 
						||
| 
								 | 
							
								function extendErrors({ gen, keyword, schemaValue, data, errsCount, it, }) {
							 | 
						||
| 
								 | 
							
								    /* istanbul ignore if */
							 | 
						||
| 
								 | 
							
								    if (errsCount === undefined)
							 | 
						||
| 
								 | 
							
								        throw new Error("ajv implementation error");
							 | 
						||
| 
								 | 
							
								    const err = gen.name("err");
							 | 
						||
| 
								 | 
							
								    gen.forRange("i", errsCount, names_1.default.errors, (i) => {
							 | 
						||
| 
								 | 
							
								        gen.const(err, (0, codegen_1._) `${names_1.default.vErrors}[${i}]`);
							 | 
						||
| 
								 | 
							
								        gen.if((0, codegen_1._) `${err}.instancePath === undefined`, () => gen.assign((0, codegen_1._) `${err}.instancePath`, (0, codegen_1.strConcat)(names_1.default.instancePath, it.errorPath)));
							 | 
						||
| 
								 | 
							
								        gen.assign((0, codegen_1._) `${err}.schemaPath`, (0, codegen_1.str) `${it.errSchemaPath}/${keyword}`);
							 | 
						||
| 
								 | 
							
								        if (it.opts.verbose) {
							 | 
						||
| 
								 | 
							
								            gen.assign((0, codegen_1._) `${err}.schema`, schemaValue);
							 | 
						||
| 
								 | 
							
								            gen.assign((0, codegen_1._) `${err}.data`, data);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								exports.extendErrors = extendErrors;
							 | 
						||
| 
								 | 
							
								function addError(gen, errObj) {
							 | 
						||
| 
								 | 
							
								    const err = gen.const("err", errObj);
							 | 
						||
| 
								 | 
							
								    gen.if((0, codegen_1._) `${names_1.default.vErrors} === null`, () => gen.assign(names_1.default.vErrors, (0, codegen_1._) `[${err}]`), (0, codegen_1._) `${names_1.default.vErrors}.push(${err})`);
							 | 
						||
| 
								 | 
							
								    gen.code((0, codegen_1._) `${names_1.default.errors}++`);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								function returnErrors(it, errs) {
							 | 
						||
| 
								 | 
							
								    const { gen, validateName, schemaEnv } = it;
							 | 
						||
| 
								 | 
							
								    if (schemaEnv.$async) {
							 | 
						||
| 
								 | 
							
								        gen.throw((0, codegen_1._) `new ${it.ValidationError}(${errs})`);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    else {
							 | 
						||
| 
								 | 
							
								        gen.assign((0, codegen_1._) `${validateName}.errors`, errs);
							 | 
						||
| 
								 | 
							
								        gen.return(false);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								const E = {
							 | 
						||
| 
								 | 
							
								    keyword: new codegen_1.Name("keyword"),
							 | 
						||
| 
								 | 
							
								    schemaPath: new codegen_1.Name("schemaPath"),
							 | 
						||
| 
								 | 
							
								    params: new codegen_1.Name("params"),
							 | 
						||
| 
								 | 
							
								    propertyName: new codegen_1.Name("propertyName"),
							 | 
						||
| 
								 | 
							
								    message: new codegen_1.Name("message"),
							 | 
						||
| 
								 | 
							
								    schema: new codegen_1.Name("schema"),
							 | 
						||
| 
								 | 
							
								    parentSchema: new codegen_1.Name("parentSchema"),
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								function errorObjectCode(cxt, error, errorPaths) {
							 | 
						||
| 
								 | 
							
								    const { createErrors } = cxt.it;
							 | 
						||
| 
								 | 
							
								    if (createErrors === false)
							 | 
						||
| 
								 | 
							
								        return (0, codegen_1._) `{}`;
							 | 
						||
| 
								 | 
							
								    return errorObject(cxt, error, errorPaths);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								function errorObject(cxt, error, errorPaths = {}) {
							 | 
						||
| 
								 | 
							
								    const { gen, it } = cxt;
							 | 
						||
| 
								 | 
							
								    const keyValues = [
							 | 
						||
| 
								 | 
							
								        errorInstancePath(it, errorPaths),
							 | 
						||
| 
								 | 
							
								        errorSchemaPath(cxt, errorPaths),
							 | 
						||
| 
								 | 
							
								    ];
							 | 
						||
| 
								 | 
							
								    extraErrorProps(cxt, error, keyValues);
							 | 
						||
| 
								 | 
							
								    return gen.object(...keyValues);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								function errorInstancePath({ errorPath }, { instancePath }) {
							 | 
						||
| 
								 | 
							
								    const instPath = instancePath
							 | 
						||
| 
								 | 
							
								        ? (0, codegen_1.str) `${errorPath}${(0, util_1.getErrorPath)(instancePath, util_1.Type.Str)}`
							 | 
						||
| 
								 | 
							
								        : errorPath;
							 | 
						||
| 
								 | 
							
								    return [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, instPath)];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								function errorSchemaPath({ keyword, it: { errSchemaPath } }, { schemaPath, parentSchema }) {
							 | 
						||
| 
								 | 
							
								    let schPath = parentSchema ? errSchemaPath : (0, codegen_1.str) `${errSchemaPath}/${keyword}`;
							 | 
						||
| 
								 | 
							
								    if (schemaPath) {
							 | 
						||
| 
								 | 
							
								        schPath = (0, codegen_1.str) `${schPath}${(0, util_1.getErrorPath)(schemaPath, util_1.Type.Str)}`;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return [E.schemaPath, schPath];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								function extraErrorProps(cxt, { params, message }, keyValues) {
							 | 
						||
| 
								 | 
							
								    const { keyword, data, schemaValue, it } = cxt;
							 | 
						||
| 
								 | 
							
								    const { opts, propertyName, topSchemaRef, schemaPath } = it;
							 | 
						||
| 
								 | 
							
								    keyValues.push([E.keyword, keyword], [E.params, typeof params == "function" ? params(cxt) : params || (0, codegen_1._) `{}`]);
							 | 
						||
| 
								 | 
							
								    if (opts.messages) {
							 | 
						||
| 
								 | 
							
								        keyValues.push([E.message, typeof message == "function" ? message(cxt) : message]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (opts.verbose) {
							 | 
						||
| 
								 | 
							
								        keyValues.push([E.schema, schemaValue], [E.parentSchema, (0, codegen_1._) `${topSchemaRef}${schemaPath}`], [names_1.default.data, data]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (propertyName)
							 | 
						||
| 
								 | 
							
								        keyValues.push([E.propertyName, propertyName]);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								//# sourceMappingURL=errors.js.map
							 |