@sapphire/utilities
Version:
Common JavaScript utilities for the Sapphire Community
52 lines (50 loc) • 2.18 kB
JavaScript
import { __name } from '../chunk-PAWJFY3S.mjs';
import { isNullOrUndefinedOrEmpty } from './isNullOrUndefinedOrEmpty.mjs';
function getDeepObjectKeys(obj, options) {
return [...getDeepObjectKeysGenerator(obj, options)];
}
__name(getDeepObjectKeys, "getDeepObjectKeys");
function* getDeepObjectKeysGenerator(obj, { arrayKeysIndexStyle = "dotted" } = { arrayKeysIndexStyle: "dotted" }) {
if (Array.isArray(obj)) {
for (const [index, value] of obj.entries()) {
yield* getDeepArrayKeysRecursive(value, index, { arrayKeysIndexStyle });
}
} else {
for (const [key, value] of Object.entries(obj)) {
yield* getDeepObjectKeysRecursive(value, `${key}`, { arrayKeysIndexStyle });
}
}
}
__name(getDeepObjectKeysGenerator, "getDeepObjectKeysGenerator");
function* getDeepArrayKeysRecursive(value, index, { arrayKeysIndexStyle }) {
const resolvedIndex = arrayKeysIndexStyle === "dotted" ? `${index}` : arrayKeysIndexStyle === "braces" ? `[${index}]` : `[${index}].`;
yield* getDeepObjectKeysRecursive(value, resolvedIndex, { arrayKeysIndexStyle });
}
__name(getDeepArrayKeysRecursive, "getDeepArrayKeysRecursive");
function* getDeepObjectKeysRecursive(obj, prefix, { arrayKeysIndexStyle }) {
if (typeof obj !== "object" || obj === null) {
yield prefix;
return;
}
if (Array.isArray(obj)) {
for (const [index, value] of obj.entries()) {
const resolvedPrefixedIndex = arrayKeysIndexStyle === "dotted" ? `${prefix}.${index}` : `${prefix}[${index}]`;
yield* getDeepObjectKeysRecursive(value, resolvedPrefixedIndex, { arrayKeysIndexStyle });
}
} else {
const objectEntries = Object.entries(obj);
if (isNullOrUndefinedOrEmpty(objectEntries) && prefix) {
yield prefix;
} else {
for (const [key, value] of objectEntries) {
yield* getDeepObjectKeysRecursive(value, arrayKeysIndexStyle === "braces" ? `${prefix}${key}` : `${prefix}.${key}`, {
arrayKeysIndexStyle
});
}
}
}
}
__name(getDeepObjectKeysRecursive, "getDeepObjectKeysRecursive");
export { getDeepObjectKeys };
//# sourceMappingURL=getDeepObjectKeys.mjs.map
//# sourceMappingURL=getDeepObjectKeys.mjs.map