UNPKG

@enonic/js-utils

Version:
70 lines (60 loc) 1.91 kB
// value/isBasicObject.ts var isBasicObject = (value) => typeof value === "object"; // value/isNumber.ts function isNumber(value) { return typeof value === "number" && isFinite(value); } // value/isStringLiteral.ts var isStringLiteral = (value) => typeof value === "string"; // value/isStringObject.ts var isStringObject = (value) => value instanceof String; // value/isString.ts var isString = (value) => isStringLiteral(value) || isStringObject(value); // value/isSymbol.ts var isSymbol = (value) => typeof value === "symbol"; // value/isPropertyKey.ts var isPropertyKey = (value) => isString(value) || isNumber(value) || isSymbol(value); // value/toStr.ts function toStr(value, replacer, space = 4) { return JSON.stringify(value, replacer, space); } // object/hasOwnProperty.ts function hasOwnProperty(obj, propKey) { if (!isBasicObject(obj)) { throw new Error(`First parameter to hasOwnProperty must be a basic Object! ${toStr(obj)}`); } if (!isPropertyKey(propKey)) { throw new Error(`Second parameter to hasOwnProperty must be a PropertyKey (string|number|symbol)! ${toStr(propKey)}`); } return obj.hasOwnProperty(propKey); } // object/getIn.ts function getIn(source, path, def) { if (!Array.isArray(path)) { if (isNumber(path)) { path = [path]; } else { path = path.split("."); } } let leafKey = path[0]; let obj = source; if (path.length > 1) { const pathLength = path.length; leafKey = path[pathLength - 1]; for (let i = 0; i < pathLength - 1; i++) { const branchKey = path[i]; if (!isBasicObject(obj) || !hasOwnProperty(obj, branchKey) || typeof obj[branchKey] === "undefined") { return def; } obj = obj[branchKey]; } } if (!isBasicObject(obj) || !hasOwnProperty(obj, leafKey) || typeof obj[leafKey] === "undefined") { return def; } return obj[leafKey]; } export { getIn };