{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { Fiber, Source } from \"react-reconciler\";\n\n/**\n * Given a dom element, return the fiber associated with it.\n */\nexport const getFiberFromElement = (element: HTMLElement): Fiber | null => {\n  let target: HTMLElement | null = element;\n  let key: keyof HTMLElement | undefined = undefined;\n\n  while (!key && target) {\n    key = Object.keys(target).find((key) => key.startsWith(\"__reactFiber$\")) as\n      | keyof HTMLElement\n      | undefined;\n\n    // move to parent if key is not defined\n    if (!key) {\n      target = target.parentElement;\n    }\n  }\n  return key && target ? (target[key] as unknown as Fiber) : null;\n};\n\n/**\n * Given a fiber, return the name of the component.\n */\nexport const getNameFromFiber = (fiber: Fiber | null): string | null => {\n  if (!fiber) return null;\n  return (\n    fiber.type?.displayName ||\n    fiber.type?.name ||\n    fiber.elementType?.displayName ||\n    fiber.elementType?.name ||\n    null\n  );\n};\n\n/**\n * Given a fiber, return the parent fiber. Looks up the tree.\n */\nexport const getParentOfFiber = (fiber: Fiber): Fiber | null => {\n  return fiber.return || null;\n};\n\n/**\n * Given a fiber, return the first fiber with a state node. Looks up the tree.\n */\nexport const getFirstStateNodeFiber = (fiber: Fiber | null): Fiber | null => {\n  // move to the parent until we find a state node\n  let parent = fiber;\n\n  while (parent) {\n    if (parent.stateNode) {\n      return parent;\n    }\n\n    parent = getParentOfFiber(parent) as Fiber;\n  }\n\n  return null;\n};\n\n/**\n * Given a fiber, return the owner fiber.\n */\nexport const getDebugOwner = (fiber: Fiber): Fiber | null => {\n  return fiber._debugOwner || null;\n};\n\n/**\n * Given a fiber, return the source of the component.\n */\nexport const getDebugSource = (fiber: Fiber): Source | null => {\n  return fiber._debugSource || null;\n};\n\n/**\n * Given a fiber, return the nth parent of the fiber.\n */\nexport const getNthParentOfFiber = (fiber: Fiber, n: number): Fiber | null => {\n  let parent = fiber;\n\n  for (let i = 0; i < n; i++) {\n    parent = getParentOfFiber(parent) as Fiber;\n  }\n\n  return parent;\n};\n\n/**\n * Given a fiber, return the dom element associated with it.\n */\nexport const getElementFromFiber = (fiber: Fiber): HTMLElement | null => {\n  return fiber.stateNode as HTMLElement;\n};\n\n/**\n * Given a fiber, return the first fiber with a name. Looks up the tree.\n */\nexport const getFirstFiberHasName = (fiber: Fiber | null): Fiber | null => {\n  if (!fiber) return null;\n\n  if (getNameFromFiber(fiber)) {\n    return fiber;\n  }\n\n  const parent = getParentOfFiber(fiber);\n\n  if (!parent) {\n    return null;\n  }\n\n  return getFirstFiberHasName(parent);\n};\n\n/**\n * Given a fiber, return the name of the first fiber with a name. Looks up the tree.\n */\nexport const getNameOfFirstFiberHasName = (\n  fiber: Fiber | null,\n): string | null => {\n  const firstFiber = getFirstFiberHasName(fiber);\n\n  if (!firstFiber) {\n    return null;\n  }\n\n  return getNameFromFiber(firstFiber);\n};\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,EAAA,mBAAAC,EAAA,wBAAAC,EAAA,wBAAAC,EAAA,yBAAAC,EAAA,2BAAAC,EAAA,qBAAAC,EAAA,+BAAAC,EAAA,wBAAAC,EAAA,qBAAAC,IAAA,eAAAC,EAAAZ,GAKO,IAAMK,EAAuBQ,GAAuC,CACzE,IAAIC,EAA6BD,EAC7BE,EAEJ,KAAO,CAACA,GAAOD,GACbC,EAAM,OAAO,KAAKD,CAAM,EAAE,KAAMC,GAAQA,EAAI,WAAW,eAAe,CAAC,EAKlEA,IACHD,EAASA,EAAO,eAGpB,OAAOC,GAAOD,EAAUA,EAAOC,CAAG,EAAyB,IAC7D,EAKaP,EAAoBQ,GAAuC,CAzBxE,IAAAC,EAAAC,EAAAC,EAAAC,EA0BE,OAAKJ,MAEHC,EAAAD,EAAM,OAAN,YAAAC,EAAY,gBACZC,EAAAF,EAAM,OAAN,YAAAE,EAAY,SACZC,EAAAH,EAAM,cAAN,YAAAG,EAAmB,gBACnBC,EAAAJ,EAAM,cAAN,YAAAI,EAAmB,QACnB,IAEJ,EAKaT,EAAoBK,GACxBA,EAAM,QAAU,KAMZT,EAA0BS,GAAsC,CAE3E,IAAIK,EAASL,EAEb,KAAOK,GAAQ,CACb,GAAIA,EAAO,UACT,OAAOA,EAGTA,EAASV,EAAiBU,CAAM,CAClC,CAEA,OAAO,IACT,EAKanB,EAAiBc,GACrBA,EAAM,aAAe,KAMjBb,EAAkBa,GACtBA,EAAM,cAAgB,KAMlBN,EAAsB,CAACM,EAAcM,IAA4B,CAC5E,IAAID,EAASL,EAEb,QAASO,EAAI,EAAGA,EAAID,EAAGC,IACrBF,EAASV,EAAiBU,CAAM,EAGlC,OAAOA,CACT,EAKajB,EAAuBY,GAC3BA,EAAM,UAMFV,EAAwBU,GAAsC,CACzE,GAAI,CAACA,EAAO,OAAO,KAEnB,GAAIR,EAAiBQ,CAAK,EACxB,OAAOA,EAGT,IAAMK,EAASV,EAAiBK,CAAK,EAErC,OAAKK,EAIEf,EAAqBe,CAAM,EAHzB,IAIX,EAKaZ,EACXO,GACkB,CAClB,IAAMQ,EAAalB,EAAqBU,CAAK,EAE7C,OAAKQ,EAIEhB,EAAiBgB,CAAU,EAHzB,IAIX","names":["src_exports","__export","getDebugOwner","getDebugSource","getElementFromFiber","getFiberFromElement","getFirstFiberHasName","getFirstStateNodeFiber","getNameFromFiber","getNameOfFirstFiberHasName","getNthParentOfFiber","getParentOfFiber","__toCommonJS","element","target","key","fiber","_a","_b","_c","_d","parent","n","i","firstFiber"]}