UNPKG

@sapphire/utilities

Version:
52 lines (50 loc) 2.18 kB
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