UNPKG

@sapphire/utilities

Version:
55 lines (52 loc) 2.32 kB
'use strict'; var isNullOrUndefinedOrEmpty_cjs = require('./isNullOrUndefinedOrEmpty.cjs'); var __defProp = Object.defineProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); 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_cjs.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"); exports.getDeepObjectKeys = getDeepObjectKeys; //# sourceMappingURL=getDeepObjectKeys.cjs.map //# sourceMappingURL=getDeepObjectKeys.cjs.map