UNPKG

omit-empty-es

Version:

(fork of omit-empty) Recursively omit empty properties from an object. Omits empty objects, arrays, strings or zero.

282 lines (257 loc) 8.57 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _createForOfIteratorHelper = require('@babel/runtime/helpers/createForOfIteratorHelper'); var _Array$isArray = require('@babel/runtime-corejs3/core-js-stable/array/is-array'); var _filterInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/filter'); var _mapInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/map'); var _Object$keys2 = require('@babel/runtime-corejs3/core-js-stable/object/keys'); var _typeof = require('@babel/runtime-corejs3/helpers/typeof'); var _sliceInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/slice'); var _flagsInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/flags'); var _indexOfInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/index-of'); function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; } var _Array$isArray__default = /*#__PURE__*/_interopDefault(_Array$isArray); var _filterInstanceProperty__default = /*#__PURE__*/_interopDefault(_filterInstanceProperty); var _mapInstanceProperty__default = /*#__PURE__*/_interopDefault(_mapInstanceProperty); var _Object$keys2__default = /*#__PURE__*/_interopDefault(_Object$keys2); var _sliceInstanceProperty__default = /*#__PURE__*/_interopDefault(_sliceInstanceProperty); var _flagsInstanceProperty__default = /*#__PURE__*/_interopDefault(_flagsInstanceProperty); var _indexOfInstanceProperty__default = /*#__PURE__*/_interopDefault(_indexOfInstanceProperty); var toString = Object.prototype.toString; function kindOf(val) { if (val === void 0) return 'undefined'; if (val === null) return 'null'; var type = _typeof(val); if (type === 'boolean') return 'boolean'; if (type === 'string') return 'string'; if (type === 'number') return 'number'; if (type === 'symbol') return 'symbol'; if (type === 'function') { return isGeneratorFn(val) ? 'generatorfunction' : 'function'; } if (isArray(val)) return 'array'; if (isBuffer(val)) return 'buffer'; if (isArguments(val)) return 'arguments'; if (isDate(val)) return 'date'; if (isError(val)) return 'error'; if (isRegexp(val)) return 'regexp'; switch (ctorName(val)) { case 'Symbol': return 'symbol'; case 'Promise': return 'promise'; // Set, Map, WeakSet, WeakMap case 'WeakMap': return 'weakmap'; case 'WeakSet': return 'weakset'; case 'Map': return 'map'; case 'Set': return 'set'; // 8-bit typed arrays case 'Int8Array': return 'int8array'; case 'Uint8Array': return 'uint8array'; case 'Uint8ClampedArray': return 'uint8clampedarray'; // 16-bit typed arrays case 'Int16Array': return 'int16array'; case 'Uint16Array': return 'uint16array'; // 32-bit typed arrays case 'Int32Array': return 'int32array'; case 'Uint32Array': return 'uint32array'; case 'Float32Array': return 'float32array'; case 'Float64Array': return 'float64array'; } if (isGeneratorObj(val)) { return 'generator'; } // Non-plain objects // @ts-expect-error type = toString.call(val); switch (type) { // @ts-expect-error case '[object Object]': return 'object'; // iterators // @ts-expect-error case '[object Map Iterator]': return 'mapiterator'; // @ts-expect-error case '[object Set Iterator]': return 'setiterator'; // @ts-expect-error case '[object String Iterator]': return 'stringiterator'; // @ts-expect-error case '[object Array Iterator]': return 'arrayiterator'; } // other return _sliceInstanceProperty__default["default"](type).call(type, 8, -1).toLowerCase().replace(/\s/g, ''); } // @ts-expect-error function ctorName(val) { return val.constructor ? val.constructor.name : null; } // @ts-expect-error function isArray(val) { if (_Array$isArray__default["default"]) return _Array$isArray__default["default"](val); return val instanceof Array; } // @ts-expect-error function isError(val) { return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number'; } // @ts-expect-error function isDate(val) { if (val instanceof Date) return true; return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function'; } // @ts-expect-error function isRegexp(val) { if (val instanceof RegExp) return true; return typeof _flagsInstanceProperty__default["default"](val) === 'string' && typeof val.ignoreCase === 'boolean' && typeof val.multiline === 'boolean' && typeof val.global === 'boolean'; } // @ts-expect-error function isGeneratorFn(name) { return ctorName(name) === 'GeneratorFunction'; } // @ts-expect-error function isGeneratorObj(val) { return typeof val.throw === 'function' && typeof val.return === 'function' && typeof val.next === 'function'; } // @ts-expect-error function isArguments(val) { try { if (typeof val.length === 'number' && typeof val.callee === 'function') { return true; } } catch (err) { var _context; if (err instanceof Error && _indexOfInstanceProperty__default["default"](_context = err.message).call(_context, 'callee') !== -1) { return true; } } return false; } /** * If you need to support Safari 5-7 (8-10 yr-old browser), * take a look at https://github.com/feross/is-buffer */ // @ts-expect-error function isBuffer(val) { if (val.constructor && typeof val.constructor.isBuffer === 'function') { return val.constructor.isBuffer(val); } return false; } var omitEmpty = function omitEmpty(obj, options) { var omitZero = options ? options.omitZero : false; /* eslint-disable no-param-reassign */ var omit = function omit(value) { if (_Array$isArray__default["default"](value)) { var _context; // @ts-expect-error value = _filterInstanceProperty__default["default"](_context = _mapInstanceProperty__default["default"](value).call(value, function (v) { return omit(v); })).call(_context, function (v) { return !isEmpty(v, omitZero); }); } if (kindOf(value) === 'object') { var result = {}; // eslint-disable-next-line no-restricted-syntax // @ts-expect-error for (var _i = 0, _Object$keys = _Object$keys2__default["default"](value); _i < _Object$keys.length; _i++) { var key = _Object$keys[_i]; // @ts-expect-error var val = omit(value[key]); if (val !== void 0) { // @ts-expect-error result[key] = val; } } // @ts-expect-error value = result; } if (!isEmpty(value, omitZero)) { return value; } return void 0; }; /* eslint-enable no-param-reassign */ var res = omit(obj); if (res === void 0) { res = kindOf(obj) === 'object' ? {} : res; } return res; }; function isEmpty(value, omitZero) { switch (kindOf(value)) { case 'null': case 'undefined': return true; case 'boolean': case 'function': case 'date': case 'regexp': return false; case 'string': case 'arguments': // @ts-expect-error return value.length === 0; case 'file': case 'map': case 'set': // @ts-expect-error return value.size === 0; case 'number': return omitZero ? value === 0 : false; case 'error': // @ts-expect-error return value.message === ''; case 'array': // eslint-disable-next-line no-restricted-syntax // @ts-expect-error var _iterator = _createForOfIteratorHelper(value), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var ele = _step.value; if (!isEmpty(ele, omitZero)) { return false; } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } return true; case 'object': // eslint-disable-next-line no-restricted-syntax // @ts-expect-error for (var _i2 = 0, _Object$keys3 = _Object$keys2__default["default"](value); _i2 < _Object$keys3.length; _i2++) { var key = _Object$keys3[_i2]; // @ts-expect-error if (!isEmpty(value[key], omitZero)) { return false; } } return true; default: { return true; } } } exports["default"] = omitEmpty;