{"version":3,"file":"index.mjs","sources":[""],"sourcesContent":["export type TGetAllSamePropsFromObjArgs = Parameters<typeof getAllSamePropsFromObj>;\r\n\r\nexport type TGetAllSamePropsFromObjReturn = ReturnType<typeof getAllSamePropsFromObj>;\r\n\r\n/**\r\n * Gets all values inside an object by the specified key, including deeply nested and circular objects.\n * @template T\r\n * @param {Record<string, unknown>} obj Source object (can be nested)\r\n * @param {string} prop Property name to collect values for\r\n * @returns {T[]} Collected values\r\n * @throws {TypeError} getAllSamePropsFromObj: prop must be a non-empty string\r\n * @throws {TypeError} getAllSamePropsFromObj: obj must be an object\r\n * @example\r\n * // How to get all duplicate key values inside an object?\r\n * const myObj = {\r\n *   someProp1: {\r\n *     a: \"value 1\",\r\n *     b: 2,\r\n *     c: 3,\r\n *     d: {\r\n *       a: 1,\r\n *       b: 2\r\n *     }\r\n *   },\r\n *   someProp2: {\r\n *     a: \"value 3\",\r\n *     b: 2,\r\n *     c: {\r\n *       a: \"value 4\"\r\n *     }\r\n *   }\r\n * }\n * getAllSamePropsFromObj<string | number>(myObj, \"a\") // [ \"value 1\", 1, \"value 3\", \"value 4\" ]\n * @example\n * // Collect every category id from a nested navigation tree\n * const categoryIds = getAllSamePropsFromObj<string>(navigation, \"categoryId\");\n */\nexport const getAllSamePropsFromObj = <T = unknown>(obj: unknown, prop: string): T[] => {\r\n  if (typeof prop !== \"string\" || !prop) {\r\n    throw new TypeError(\"getAllSamePropsFromObj: prop must be a non-empty string\");\r\n  }\r\n  if (obj === null || typeof obj !== \"object\") {\r\n    throw new TypeError(\"getAllSamePropsFromObj: obj must be an object\");\r\n  }\r\n  const res: T[] = [];\n  const ancestors = new WeakSet<object>();\n  const visit = (value: unknown): void => {\n    if (value === null || typeof value !== \"object\" || ancestors.has(value)) {\n      return;\n    }\n    ancestors.add(value);\n    Object.keys(value).forEach((key) => {\n      const nestedValue = (value as Record<string, unknown>)[key];\n      if (key === prop) {\n        res.push(nestedValue as T);\n      }\n      visit(nestedValue);\n    });\n    ancestors.delete(value);\n  };\n\n  visit(obj);\n  return res;\n};\n"],"names":["getAllSamePropsFromObj","obj","prop","TypeError","res","ancestors","WeakSet","visit","value","has","add","Object","keys","forEach","key","nestedValue","push","delete"],"mappings":"MAqCaA,uBAAyB,CAAcC,IAAcC,QAChE,UAAWA,OAAS,WAAaA,KAC/B,MAAM,IAAIC,UAAU,2DAEtB,GAAIF,MAAQ,aAAeA,MAAQ,SACjC,MAAM,IAAIE,UAAU,iDAEtB,MAAMC,IAAW,GACjB,MAAMC,UAAY,IAAIC,QACtB,MAAMC,MAASC,QACb,GAAIA,QAAU,aAAeA,QAAU,UAAYH,UAAUI,IAAID,OAC/D,OAEFH,UAAUK,IAAIF,OACdG,OAAOC,KAAKJ,OAAOK,QAASC,MAC1B,MAAMC,YAAeP,MAAkCM,KACvD,GAAIA,MAAQZ,KACVE,IAAIY,KAAKD,aAEXR,MAAMQ,eAERV,UAAUY,OAAOT,QAGnBD,MAAMN,KACN,OAAOG"}