get-or-throw
Version:
A convenience function for safely getting values from dynamic objects and arrays
42 lines (41 loc) • 1.05 kB
JavaScript
// src/get-or-throw.ts
function getOrThrow(objOrArr, keyOrIndex, errorMessage) {
if (Array.isArray(objOrArr)) {
const length = objOrArr.length;
let index = keyOrIndex;
if (index < 0) {
index = length + index;
}
if (index >= 0 && index < length) {
const value = objOrArr[index];
if (value === void 0) {
throw new Error(
errorMessage ?? `Value at index ${String(keyOrIndex)} is undefined.`
);
}
return value;
} else {
throw new Error(
errorMessage ?? `Index ${String(keyOrIndex)} is out of bounds.`
);
}
} else {
if (keyOrIndex in objOrArr) {
const value = objOrArr[keyOrIndex];
if (value === void 0) {
throw new Error(
errorMessage ?? `Value at key "${String(keyOrIndex)}" is undefined.`
);
}
return value;
} else {
throw new Error(
errorMessage ?? `Key "${String(keyOrIndex)}" does not exist in the object.`
);
}
}
}
export {
getOrThrow,
getOrThrow as got
};