@enonic/js-utils
Version:
Enonic XP JavaScript Utils
70 lines (60 loc) • 1.91 kB
JavaScript
// 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
};