123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- const formatRegExp = /%[sdj%]/g;
- export let warning = () => {
- };
- export function format(...args) {
- let i = 1;
- const f = args[0];
- const len = args.length;
- if (typeof f === 'function') {
- return f.apply(null, args.slice(1));
- }
- if (typeof f === 'string') {
- let str = String(f).replace(formatRegExp, (x) => {
- if (x === '%%') {
- return '%';
- }
- if (i >= len) {
- return x;
- }
- switch (x) {
- case '%s':
- return String(args[i++]);
- case '%d':
- return Number(args[i++]);
- case '%j':
- try {
- return JSON.stringify(args[i++]);
- } catch (_) {
- return '[Circular]';
- }
- default:
- return x;
- }
- });
- for (let arg = args[i]; i < len; arg = args[++i]) {
- str += ` ${arg}`;
- }
- return str;
- }
- return f;
- }
- function isNativeStringType(type) {
- return type === 'string' ||
- type === 'url' ||
- type === 'hex' ||
- type === 'email' ||
- type === 'pattern';
- }
- export function isEmptyValue(value, type) {
- if (value === undefined || value === null) {
- return true;
- }
- if (type === 'array' && Array.isArray(value) && !value.length) {
- return true;
- }
- if (isNativeStringType(type) && typeof value === 'string' && !value) {
- return true;
- }
- return false;
- }
- export function isEmptyObject(obj) {
- return Object.keys(obj).length === 0;
- }
- function asyncParallelArray(arr, func, callback) {
- const results = [];
- let total = 0;
- const arrLength = arr.length;
- function count(errors) {
- results.push.apply(results, errors);
- total++;
- if (total === arrLength) {
- callback(results);
- }
- }
- arr.forEach((a) => {
- func(a, count);
- });
- }
- function asyncSerialArray(arr, func, callback) {
- let index = 0;
- const arrLength = arr.length;
- function next(errors) {
- if (errors && errors.length) {
- callback(errors);
- return;
- }
- const original = index;
- index = index + 1;
- if (original < arrLength) {
- func(arr[original], next);
- } else {
- callback([]);
- }
- }
- next([]);
- }
- function flattenObjArr(objArr) {
- const ret = [];
- Object.keys(objArr).forEach((k) => {
- ret.push.apply(ret, objArr[k]);
- });
- return ret;
- }
- export function asyncMap(objArr, option, func, callback) {
- if (option.first) {
- const flattenArr = flattenObjArr(objArr);
- return asyncSerialArray(flattenArr, func, callback);
- }
- let firstFields = option.firstFields || [];
- if (firstFields === true) {
- firstFields = Object.keys(objArr);
- }
- const objArrKeys = Object.keys(objArr);
- const objArrLength = objArrKeys.length;
- let total = 0;
- const results = [];
- const next = (errors) => {
- results.push.apply(results, errors);
- total++;
- if (total === objArrLength) {
- callback(results);
- }
- };
- objArrKeys.forEach((key) => {
- const arr = objArr[key];
- if (firstFields.indexOf(key) !== -1) {
- asyncSerialArray(arr, func, next);
- } else {
- asyncParallelArray(arr, func, next);
- }
- });
- }
- export function complementError(rule) {
- return (oe) => {
- if (oe && oe.message) {
- oe.field = oe.field || rule.fullField;
- return oe;
- }
- return {
- message: oe,
- field: oe.field || rule.fullField,
- };
- };
- }
- export function deepMerge(target, source) {
- if (source) {
- for (const s in source) {
- if (source.hasOwnProperty(s)) {
- const value = source[s];
- if (typeof value === 'object' && typeof target[s] === 'object') {
- target[s] = {
- ...target[s],
- ...value,
- };
- } else {
- target[s] = value;
- }
- }
- }
- }
- return target;
- }
|