@sapphire/utilities
Version:
Common JavaScript utilities for the Sapphire Community
55 lines (52 loc) • 2.32 kB
JavaScript
;
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