{"version":3,"sources":["../../../src/lib/getDeepObjectKeys.ts"],"names":["isNullOrUndefinedOrEmpty"],"mappings":";;;;;;AAaO,SAAS,iBAAA,CAAkB,KAAa,OAA8C,EAAA;AAC5F,EAAA,OAAO,CAAC,GAAG,0BAA2B,CAAA,GAAA,EAAK,OAAO,CAAC,CAAA;AACpD;AAFgB,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AAIhB,UAAU,0BAAA,CACT,KACA,EAAE,mBAAA,GAAsB,UAAuC,GAAA,EAAE,mBAAqB,EAAA,QAAA,EAClE,EAAA;AACpB,EAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,GAAG,CAAG,EAAA;AACvB,IAAA,KAAA,MAAW,CAAC,KAAO,EAAA,KAAK,CAAK,IAAA,GAAA,CAAI,SAAW,EAAA;AAC3C,MAAA,OAAO,yBAA0B,CAAA,KAAA,EAAO,KAAO,EAAA,EAAE,qBAAqB,CAAA;AAAA;AACvE,GACM,MAAA;AACN,IAAA,KAAA,MAAW,CAAC,GAAK,EAAA,KAAK,KAAK,MAAO,CAAA,OAAA,CAAQ,GAAG,CAAG,EAAA;AAC/C,MAAA,OAAO,2BAA2B,KAAO,EAAA,CAAA,EAAG,GAAG,CAAI,CAAA,EAAA,EAAE,qBAAqB,CAAA;AAAA;AAC3E;AAEF;AAbU,MAAA,CAAA,0BAAA,EAAA,4BAAA,CAAA;AAeV,UAAU,yBAA0B,CAAA,KAAA,EAAgB,KAAe,EAAA,EAAE,qBAAoE,EAAA;AACxI,EAAA,MAAM,aAAgB,GAAA,mBAAA,KAAwB,QAAW,GAAA,CAAA,EAAG,KAAK,CAAA,CAAA,GAAK,mBAAwB,KAAA,QAAA,GAAW,CAAI,CAAA,EAAA,KAAK,CAAM,CAAA,CAAA,GAAA,CAAA,CAAA,EAAI,KAAK,CAAA,EAAA,CAAA;AACjI,EAAA,OAAO,0BAA2B,CAAA,KAAA,EAAO,aAAe,EAAA,EAAE,qBAAqB,CAAA;AAChF;AAHU,MAAA,CAAA,yBAAA,EAAA,2BAAA,CAAA;AAKV,UAAU,0BAA2B,CAAA,GAAA,EAAc,MAAgB,EAAA,EAAE,qBAAoE,EAAA;AACxI,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAY,IAAA,GAAA,KAAQ,IAAM,EAAA;AAC5C,IAAM,MAAA,MAAA;AACN,IAAA;AAAA;AAGD,EAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,GAAG,CAAG,EAAA;AACvB,IAAA,KAAA,MAAW,CAAC,KAAO,EAAA,KAAK,CAAK,IAAA,GAAA,CAAI,SAAW,EAAA;AAC3C,MAAM,MAAA,qBAAA,GAAwB,mBAAwB,KAAA,QAAA,GAAW,CAAG,EAAA,MAAM,CAAI,CAAA,EAAA,KAAK,CAAK,CAAA,GAAA,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAA;AAE1G,MAAA,OAAO,0BAA2B,CAAA,KAAA,EAAO,qBAAuB,EAAA,EAAE,qBAAqB,CAAA;AAAA;AACxF,GACM,MAAA;AACN,IAAM,MAAA,aAAA,GAAgB,MAAO,CAAA,OAAA,CAAQ,GAAG,CAAA;AACxC,IAAI,IAAAA,qDAAA,CAAyB,aAAa,CAAA,IAAK,MAAQ,EAAA;AACtD,MAAM,MAAA,MAAA;AAAA,KACA,MAAA;AACN,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,aAAe,EAAA;AACzC,QAAA,OAAO,0BAA2B,CAAA,KAAA,EAAO,mBAAwB,KAAA,QAAA,GAAW,CAAG,EAAA,MAAM,CAAG,EAAA,GAAG,CAAK,CAAA,GAAA,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,GAAG,CAAI,CAAA,EAAA;AAAA,UACnH;AAAA,SACA,CAAA;AAAA;AACF;AACD;AAEF;AAxBU,MAAA,CAAA,0BAAA,EAAA,4BAAA,CAAA","file":"getDeepObjectKeys.cjs","sourcesContent":["import { isNullOrUndefinedOrEmpty } from './isNullOrUndefinedOrEmpty';\n\n/**\n * Flattens an object to a list of its keys, traversing deeply into nested objects and arrays of objects.\n *\n * @note By default Nested array values are flattened to `arrayKey.${index}.subKey`.\n * This can be changed to `arrayKey[${index}].subKey` by setting `options.arrayKeysIndexStyle` to `'braces-with-dot'`.\n * Or it can also be changed to `arrayKey[${index}]subKey` by setting `options.arrayKeysIndexStyle` to `'braces'`.\n *\n * @param obj The object of which to deeply retrieve its keys\n * @param options The options with which to customize the output of this function\n * @returns An array of strings holding the keys of the object\n */\nexport function getDeepObjectKeys(obj: object, options?: GetDeepObjectKeysOptions): string[] {\n\treturn [...getDeepObjectKeysGenerator(obj, options)];\n}\n\nfunction* getDeepObjectKeysGenerator(\n\tobj: object,\n\t{ arrayKeysIndexStyle = 'dotted' }: GetDeepObjectKeysOptions = { arrayKeysIndexStyle: 'dotted' }\n): Generator<string> {\n\tif (Array.isArray(obj)) {\n\t\tfor (const [index, value] of obj.entries()) {\n\t\t\tyield* getDeepArrayKeysRecursive(value, index, { arrayKeysIndexStyle });\n\t\t}\n\t} else {\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\tyield* getDeepObjectKeysRecursive(value, `${key}`, { arrayKeysIndexStyle });\n\t\t}\n\t}\n}\n\nfunction* getDeepArrayKeysRecursive(value: unknown, index: number, { arrayKeysIndexStyle }: GetDeepObjectKeysOptions): Generator<string> {\n\tconst resolvedIndex = arrayKeysIndexStyle === 'dotted' ? `${index}` : arrayKeysIndexStyle === 'braces' ? `[${index}]` : `[${index}].`;\n\tyield* getDeepObjectKeysRecursive(value, resolvedIndex, { arrayKeysIndexStyle });\n}\n\nfunction* getDeepObjectKeysRecursive(obj: unknown, prefix: string, { arrayKeysIndexStyle }: GetDeepObjectKeysOptions): Generator<string> {\n\tif (typeof obj !== 'object' || obj === null) {\n\t\tyield prefix;\n\t\treturn;\n\t}\n\n\tif (Array.isArray(obj)) {\n\t\tfor (const [index, value] of obj.entries()) {\n\t\t\tconst resolvedPrefixedIndex = arrayKeysIndexStyle === 'dotted' ? `${prefix}.${index}` : `${prefix}[${index}]`;\n\n\t\t\tyield* getDeepObjectKeysRecursive(value, resolvedPrefixedIndex, { arrayKeysIndexStyle });\n\t\t}\n\t} else {\n\t\tconst objectEntries = Object.entries(obj);\n\t\tif (isNullOrUndefinedOrEmpty(objectEntries) && prefix) {\n\t\t\tyield prefix;\n\t\t} else {\n\t\t\tfor (const [key, value] of objectEntries) {\n\t\t\t\tyield* getDeepObjectKeysRecursive(value, arrayKeysIndexStyle === 'braces' ? `${prefix}${key}` : `${prefix}.${key}`, {\n\t\t\t\t\tarrayKeysIndexStyle\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * The options for {@link getDeepObjectKeys}\n */\nexport interface GetDeepObjectKeysOptions {\n\t/**\n\t * Whether to use `.${index}.` (`'dotted'`), `[${index}].`, (`'braces-with-dot'`) or `[${index}]` (`'braces'`) to separate array keys\n\t * @default 'dotted'\n\t */\n\tarrayKeysIndexStyle?: 'dotted' | 'braces-with-dot' | 'braces';\n}\n"]}