UNPKG

vtils

Version:

一个面向业务的 JavaScript/TypeScript 实用程序库。

79 lines (78 loc) 3.06 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; exports.__esModule = true; exports.default = createValidation; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _utils = require("../../../utils"); var _Reference = _interopRequireDefault(require("../Reference")); var _ValidationError = _interopRequireDefault(require("../ValidationError")); var _excluded = ["value", "path", "label", "options", "originalValue", "sync"]; function createValidation(config) { function validate(_ref, cb) { var value = _ref.value, path = _ref.path, label = _ref.label, options = _ref.options, originalValue = _ref.originalValue, sync = _ref.sync, rest = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded); var name = config.name, test = config.test, params = config.params, message = config.message; var parent = options.parent, context = options.context, rootValue = options.rootValue; function resolve(item) { return _Reference.default.isRef(item) ? item.getValue(value, parent, context, rootValue) : item; } function createError(overrides) { if (overrides === void 0) { overrides = {}; } var nextParams = (0, _utils.mapValues)((0, _extends2.default)({ value: value, originalValue: originalValue, label: label, path: overrides.path || path }, params, overrides.params), resolve); var error = new _ValidationError.default(_ValidationError.default.formatError(overrides.message || message, nextParams), value, nextParams.path, overrides.type || name); error.params = nextParams; return error; } var ctx = (0, _extends2.default)({ path: path, parent: parent, type: name, createError: createError, resolve: resolve, options: options, originalValue: originalValue }, rest); if (!sync) { try { Promise.resolve(test.call(ctx, value, ctx)).then(function (validOrError) { if (_ValidationError.default.isError(validOrError)) cb(validOrError);else if (!validOrError) cb(createError());else cb(null, validOrError); }); } catch (err) { cb(err); } return; } var result; try { var _result; result = test.call(ctx, value, ctx); if (typeof ((_result = result) == null ? void 0 : _result.then) === 'function') { throw new Error("Validation test of type: \"" + ctx.type + "\" returned a Promise during a synchronous validate. " + "This test will finish after the validate call has returned"); } } catch (err) { cb(err); return; } if (_ValidationError.default.isError(result)) cb(result);else if (!result) cb(createError());else cb(null, result); } validate.OPTIONS = config; return validate; }