UNPKG

@bemedev/types

Version:

Type definitions for Bemedev projects

269 lines (265 loc) 8.57 kB
'use strict'; var utils = require('../utils.cjs'); var functions_commons = require('./commons.cjs'); const _isRequiredDeep = (object) => { const isObject = utils.isPlainObject(object); if (isObject) { for (const key in object) { if (Object.prototype.hasOwnProperty.call(object, key)) { const element = object[key]; const isPrimitiveMap = _isRequiredDeep(element); if (!isPrimitiveMap) return false; } } return true; } const isArray = Array.isArray(object); if (isArray) { for (const item of object) { const isPrimitiveMap = _isRequiredDeep(item); if (!isPrimitiveMap) return false; } return true; } return functions_commons.commons.isDefined(object); }; const _readonly = utils.expandFn((object) => { return Object.freeze(object); }, { forceCast: (object) => { const out = Object.freeze(object); return utils._unknown(out); }, dynamic: (object) => { return Object.freeze(object); }, is: (object) => { return Object.isFrozen(object); }, not: (object) => { return utils._unknown(object); }, deep: utils.expandFn((object) => { const out = Object.freeze(object); return utils._unknown(out); }, { not: (object) => { return utils._unknown(object); }, }), }); const _omitDeepIs = (by, object, ...valuesOrKeys) => { const entries = Object.entries(object); for (const [key, value] of entries) { const isObject = utils.isPlainObject(value); if (isObject) { const isDeep = _omitDeepIs(by, value, ...valuesOrKeys); if (!isDeep) return false; } else { const shouldOmit = by === 'element' ? valuesOrKeys.includes(value) : valuesOrKeys.includes(key); if (shouldOmit) return false; } } return true; }; const _omitIs = (by, object, ...valuesOrKeys) => { const entries = Object.entries(object); for (const [key, value] of entries) { const checkKey = by === 'key' && valuesOrKeys.includes(key); const checkElement = by === 'element' && valuesOrKeys.includes(value); if (checkKey) { return false; } else if (checkElement) { return false; } } return true; }; const _omit = (by, object, ...valuesOrKeys) => { const result = {}; const entries = Object.entries(object); entries.forEach(([key, value]) => { const checkKey = by === 'key' && !valuesOrKeys.includes(key); const checkElement = by === 'element' && !valuesOrKeys.includes(value); if (checkKey) { result[key] = value; } else if (checkElement) { result[key] = value; } }); return result; }; const __omitDeep = (by, object, ...valuesOrKeys) => { const entries = Object.entries(object); const result = {}; entries.forEach(([key, value]) => { const isObject = utils.isPlainObject(value); if (isObject) { const picked = __omitDeep(by, value, ...valuesOrKeys); result[key] = picked; } else if (by === 'key' && !valuesOrKeys.includes(key)) { result[key] = value; } else if (by === 'element' && !!value && !valuesOrKeys.includes(value)) { result[key] = value; } }); return result; }; const _omitDeep = (by, object, ...valuesOrKeys) => { const result = __omitDeep(by, object, ...valuesOrKeys); return result; }; const _pickDeep = (by, object, ...valuesOrKeys) => { const result = {}; for (const key in object) { if (Object.prototype.hasOwnProperty.call(object, key)) { const element = object[key]; const isObject = utils.isPlainObject(element); if (isObject) { const picked = _pickDeep(by, element, ...valuesOrKeys); if (Object.keys(picked).length > 0) { result[key] = picked; } } else { const shouldPick = by === 'element' ? valuesOrKeys.includes(element) : valuesOrKeys.includes(key); if (shouldPick) result[key] = element; } } } return result; }; const _pick = (by, object, ...keys) => { const result = {}; const entries = Object.entries(object); entries.forEach(([key, value]) => { const shouldPick = by === 'element' ? keys.includes(value) : keys.includes(key); if (shouldPick) { result[key] = value; } }); return result; }; const checkEntries = (keys, object) => { const entries = Object.entries(keys); return entries.every(([key, type]) => { const check1 = key in object; if (!check1) return false; const value = object[key]; if (typeof type === 'string') { return typeof value === type; } else if (typeof type === 'function') { return type(value); } return false; }); }; // #endregion const objects = utils.castFn()({ trueObject: utils.castFn()({ is: utils.isPlainObject }), type: Object, keysOf: (object) => { return Object.keys(object); }, values: (object) => { return Object.values(object); }, entries: (object) => { return Object.entries(object); }, byKey: (object, key) => { return object[key]; }, hasKeys: utils.expandFn((object, ...keys) => { return keys.every(key => key in object); }, { typings: (object, keys) => { return checkEntries(keys, object); }, all: utils.expandFn((object, ...keys) => { return (Object.keys(object).every(key => keys.includes(key)) && keys.every(key => key in object)); }, { typings: (object, keys) => { const check0 = Object.keys(object).every(key => Object.keys(keys).includes(key)); if (!check0) return false; return checkEntries(keys, object); }, }), }), omit: utils.expandFn(utils.partialCall(_omit, 'key'), { strict: utils.expandFn(utils.partialCall(_omit, 'key'), { is: utils.partialCall(_omitIs, 'key'), }), const: utils.expandFn(utils.partialCall(_omit, 'key'), { is: utils.partialCall(_omitIs, 'key'), }), is: utils.partialCall(_omitIs, 'key'), by: utils.expandFn(utils.partialCall(_omit, 'element'), { is: utils.partialCall(_omitIs, 'element'), }), deep: utils.expandFn(utils.partialCall(_omitDeep, 'key'), { by: utils.expandFn(utils.partialCall(_omitDeep, 'element'), { is: utils.partialCall(_omitDeepIs, 'element'), }), is: utils.partialCall(_omitDeepIs, 'key'), }), }), reverse: (object) => { const result = {}; for (const key in object) { result[object[key]] = key; } return result; }, readonly: _readonly, freeze: _readonly, require: utils.expandFn((object, requires) => { return Object.assign(object, requires); }, { strict: (object, requires) => objects.require(object, requires), const: (object, requires) => objects.require(object, requires), is: utils.expandFn((object) => { const values = Object.values(object); return values.every(value => value !== undefined && value !== null); }, { deep: _isRequiredDeep, }), }), pick: utils.expandFn(utils.partialCall(_pick, 'key'), { deep: utils.expandFn(utils.partialCall(_pickDeep, 'key'), { by: utils.partialCall(_pickDeep, 'element'), }), by: utils.partialCall(_pick, 'element'), }), ru: utils.castFn()(), ra: utils.castFn()(), primitive: utils.castFn()({ is: (object) => { if (!utils.isPlainObject(object)) return false; return functions_commons.commons.primitiveObject.is(object); }, }), }); exports.objects = objects; //# sourceMappingURL=objects.cjs.map