{"version":3,"file":"index.mjs","sources":["../../src/constants.ts","../../src/index.ts"],"sourcesContent":["/**\n * MIT License\n *\n * Copyright (c) 2020 Engineering at FullStory\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n */\n\nexport const KNOWN_INCOMPATIBLE_PLUGINS = [\n  // This module might be causing an issue preventing clicks. For safety, we won't run on this module.\n  \"react-native-testfairy\",\n  // This module checks for unexpected property keys and throws an exception.\n  \"@react-navigation\",\n];\n\nexport const DEFAULT_IGNORED_ELEMENTS = [\n  \"a\",\n  \"abbr\",\n  \"address\",\n  \"area\",\n  \"article\",\n  \"aside\",\n  \"audio\",\n  \"b\",\n  \"base\",\n  \"bdi\",\n  \"bdo\",\n  \"blockquote\",\n  \"body\",\n  \"br\",\n  \"button\",\n  \"canvas\",\n  \"caption\",\n  \"cite\",\n  \"code\",\n  \"col\",\n  \"colgroup\",\n  \"data\",\n  \"datalist\",\n  \"dd\",\n  \"del\",\n  \"details\",\n  \"dfn\",\n  \"dialog\",\n  \"div\",\n  \"dl\",\n  \"dt\",\n  \"em\",\n  \"embed\",\n  \"fieldset\",\n  \"figure\",\n  \"footer\",\n  \"form\",\n  \"h1\",\n  \"h2\",\n  \"h3\",\n  \"h4\",\n  \"h5\",\n  \"h6\",\n  \"head\",\n  \"header\",\n  \"hgroup\",\n  \"hr\",\n  \"html\",\n  \"i\",\n  \"iframe\",\n  \"img\",\n  \"input\",\n  \"ins\",\n  \"kbd\",\n  \"keygen\",\n  \"label\",\n  \"legend\",\n  \"li\",\n  \"link\",\n  \"main\",\n  \"map\",\n  \"mark\",\n  \"menu\",\n  \"menuitem\",\n  \"meter\",\n  \"nav\",\n  \"noscript\",\n  \"object\",\n  \"ol\",\n  \"optgroup\",\n  \"option\",\n  \"output\",\n  \"p\",\n  \"param\",\n  \"pre\",\n  \"progress\",\n  \"q\",\n  \"rb\",\n  \"rp\",\n  \"rt\",\n  \"rtc\",\n  \"ruby\",\n  \"s\",\n  \"samp\",\n  \"script\",\n  \"section\",\n  \"select\",\n  \"small\",\n  \"source\",\n  \"span\",\n  \"strong\",\n  \"style\",\n  \"sub\",\n  \"summary\",\n  \"sup\",\n  \"table\",\n  \"tbody\",\n  \"td\",\n  \"template\",\n  \"textarea\",\n  \"tfoot\",\n  \"th\",\n  \"thead\",\n  \"time\",\n  \"title\",\n  \"tr\",\n  \"track\",\n  \"u\",\n  \"ul\",\n  \"var\",\n  \"video\",\n  \"wbr\",\n];\n","/**\n * MIT License\n *\n * Copyright (c) 2020 Engineering at FullStory\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n */\n\n/**\n * The following code is based on the FullStory Babel plugin, but has been modified to work\n * with Sentry products:\n *\n * - Added `sentry` to data properties, i.e `data-sentry-component`\n * - Converted to TypeScript\n * - Code cleanups\n */\n\nimport type * as Babel from \"@babel/core\";\nimport type { PluginObj, PluginPass } from \"@babel/core\";\n\nimport { DEFAULT_IGNORED_ELEMENTS, KNOWN_INCOMPATIBLE_PLUGINS } from \"./constants\";\n\nconst webComponentName = \"data-sentry-component\";\nconst webElementName = \"data-sentry-element\";\nconst webSourceFileName = \"data-sentry-source-file\";\n\nconst nativeComponentName = \"dataSentryComponent\";\nconst nativeElementName = \"dataSentryElement\";\nconst nativeSourceFileName = \"dataSentrySourceFile\";\n\ninterface AnnotationOpts {\n  native?: boolean;\n  \"annotate-fragments\"?: boolean;\n  ignoredComponents?: string[];\n}\n\ninterface AnnotationPluginPass extends PluginPass {\n  opts: AnnotationOpts;\n}\n\ntype AnnotationPlugin = PluginObj<AnnotationPluginPass>;\n\n// We must export the plugin as default, otherwise the Babel loader will not be able to resolve it when configured using its string identifier\nexport default function componentNameAnnotatePlugin({ types: t }: typeof Babel): AnnotationPlugin {\n  return {\n    visitor: {\n      FunctionDeclaration(path, state) {\n        if (!path.node.id || !path.node.id.name) {\n          return;\n        }\n        if (isKnownIncompatiblePluginFromState(state)) {\n          return;\n        }\n\n        functionBodyPushAttributes(\n          state.opts[\"annotate-fragments\"] === true,\n          t,\n          path,\n          path.node.id.name,\n          sourceFileNameFromState(state),\n          attributeNamesFromState(state),\n          state.opts.ignoredComponents ?? []\n        );\n      },\n      ArrowFunctionExpression(path, state) {\n        // We're expecting a `VariableDeclarator` like `const MyComponent =`\n        const parent = path.parent;\n\n        if (\n          !parent ||\n          !(\"id\" in parent) ||\n          !parent.id ||\n          !(\"name\" in parent.id) ||\n          !parent.id.name\n        ) {\n          return;\n        }\n\n        if (isKnownIncompatiblePluginFromState(state)) {\n          return;\n        }\n\n        functionBodyPushAttributes(\n          state.opts[\"annotate-fragments\"] === true,\n          t,\n          path,\n          parent.id.name,\n          sourceFileNameFromState(state),\n          attributeNamesFromState(state),\n          state.opts.ignoredComponents ?? []\n        );\n      },\n      ClassDeclaration(path, state) {\n        const name = path.get(\"id\");\n        const properties = path.get(\"body\").get(\"body\");\n        const render = properties.find((prop) => {\n          return prop.isClassMethod() && prop.get(\"key\").isIdentifier({ name: \"render\" });\n        });\n\n        if (!render || !render.traverse || isKnownIncompatiblePluginFromState(state)) {\n          return;\n        }\n\n        const ignoredComponents = state.opts.ignoredComponents ?? [];\n\n        render.traverse({\n          ReturnStatement(returnStatement) {\n            const arg = returnStatement.get(\"argument\");\n\n            if (!arg.isJSXElement() && !arg.isJSXFragment()) {\n              return;\n            }\n\n            processJSX(\n              state.opts[\"annotate-fragments\"] === true,\n              t,\n              arg,\n              name.node && name.node.name,\n              sourceFileNameFromState(state),\n              attributeNamesFromState(state),\n              ignoredComponents\n            );\n          },\n        });\n      },\n    },\n  };\n}\n\nfunction functionBodyPushAttributes(\n  annotateFragments: boolean,\n  t: typeof Babel.types,\n  path: Babel.NodePath<Babel.types.Function>,\n  componentName: string,\n  sourceFileName: string | undefined,\n  attributeNames: string[],\n  ignoredComponents: string[]\n) {\n  let jsxNode: Babel.NodePath;\n\n  const functionBody = path.get(\"body\").get(\"body\");\n\n  if (\n    !(\"length\" in functionBody) &&\n    functionBody.parent &&\n    (functionBody.parent.type === \"JSXElement\" || functionBody.parent.type === \"JSXFragment\")\n  ) {\n    const maybeJsxNode = functionBody.find((c) => {\n      return c.type === \"JSXElement\" || c.type === \"JSXFragment\";\n    });\n\n    if (!maybeJsxNode) {\n      return;\n    }\n\n    jsxNode = maybeJsxNode;\n  } else {\n    const returnStatement = functionBody.find((c) => {\n      return c.type === \"ReturnStatement\";\n    });\n    if (!returnStatement) {\n      return;\n    }\n\n    const arg = returnStatement.get(\"argument\");\n    if (!arg) {\n      return;\n    }\n\n    if (Array.isArray(arg)) {\n      return;\n    }\n\n    // Handle the case of a function body returning a ternary operation.\n    // `return (maybeTrue ? '' : (<SubComponent />))`\n    if (arg.isConditionalExpression()) {\n      const consequent = arg.get(\"consequent\");\n      if (consequent.isJSXFragment() || consequent.isJSXElement()) {\n        processJSX(\n          annotateFragments,\n          t,\n          consequent,\n          componentName,\n          sourceFileName,\n          attributeNames,\n          ignoredComponents\n        );\n      }\n      const alternate = arg.get(\"alternate\");\n      if (alternate.isJSXFragment() || alternate.isJSXElement()) {\n        processJSX(\n          annotateFragments,\n          t,\n          alternate,\n          componentName,\n          sourceFileName,\n          attributeNames,\n          ignoredComponents\n        );\n      }\n      return;\n    }\n\n    if (!arg.isJSXFragment() && !arg.isJSXElement()) {\n      return;\n    }\n\n    jsxNode = arg;\n  }\n\n  if (!jsxNode) {\n    return;\n  }\n\n  processJSX(\n    annotateFragments,\n    t,\n    jsxNode,\n    componentName,\n    sourceFileName,\n    attributeNames,\n    ignoredComponents\n  );\n}\n\nfunction processJSX(\n  annotateFragments: boolean,\n  t: typeof Babel.types,\n  jsxNode: Babel.NodePath,\n  componentName: string | null,\n  sourceFileName: string | undefined,\n  attributeNames: string[],\n  ignoredComponents: string[]\n) {\n  if (!jsxNode) {\n    return;\n  }\n  // NOTE: I don't know of a case where `openingElement` would have more than one item,\n  // but it's safer to always iterate\n  const paths = jsxNode.get(\"openingElement\");\n  const openingElements = Array.isArray(paths) ? paths : [paths];\n\n  openingElements.forEach((openingElement) => {\n    applyAttributes(\n      t,\n      openingElement as Babel.NodePath<Babel.types.JSXOpeningElement>,\n      componentName,\n      sourceFileName,\n      attributeNames,\n      ignoredComponents\n    );\n  });\n\n  let children = jsxNode.get(\"children\");\n  // TODO: See why `Array.isArray` doesn't have correct behaviour here\n  if (children && !(\"length\" in children)) {\n    // A single child was found, maybe a bit of static text\n    children = [children];\n  }\n\n  let shouldSetComponentName = annotateFragments;\n\n  children.forEach((child) => {\n    // Happens for some node types like plain text\n    if (!child.node) {\n      return;\n    }\n\n    // Children don't receive the data-component attribute so we pass null for componentName unless it's the first child of a Fragment with a node and `annotateFragments` is true\n    const openingElement = child.get(\"openingElement\");\n    // TODO: Improve this. We never expect to have multiple opening elements\n    // but if it's possible, this should work\n    if (Array.isArray(openingElement)) {\n      return;\n    }\n\n    if (shouldSetComponentName && openingElement && openingElement.node) {\n      shouldSetComponentName = false;\n      processJSX(\n        annotateFragments,\n        t,\n        child,\n        componentName,\n        sourceFileName,\n        attributeNames,\n        ignoredComponents\n      );\n    } else {\n      processJSX(\n        annotateFragments,\n        t,\n        child,\n        null,\n        sourceFileName,\n        attributeNames,\n        ignoredComponents\n      );\n    }\n  });\n}\n\nfunction applyAttributes(\n  t: typeof Babel.types,\n  openingElement: Babel.NodePath<Babel.types.JSXOpeningElement>,\n  componentName: string | null,\n  sourceFileName: string | undefined,\n  attributeNames: string[],\n  ignoredComponents: string[]\n) {\n  const [componentAttributeName, elementAttributeName, sourceFileAttributeName] = attributeNames;\n\n  if (isReactFragment(t, openingElement)) {\n    return;\n  }\n  // e.g., Raw JSX text like the `A` in `<h1>a</h1>`\n  if (!openingElement.node) {\n    return;\n  }\n\n  if (!openingElement.node.attributes) openingElement.node.attributes = [];\n  const elementName = getPathName(t, openingElement);\n\n  const isAnIgnoredComponent = ignoredComponents.some(\n    (ignoredComponent) => ignoredComponent === componentName || ignoredComponent === elementName\n  );\n\n  // Add a stable attribute for the element name but only for non-DOM names\n  let isAnIgnoredElement = false;\n  if (\n    !isAnIgnoredComponent &&\n    !hasAttributeWithName(openingElement, componentAttributeName) &&\n    (componentAttributeName !== elementAttributeName || !componentName)\n  ) {\n    if (DEFAULT_IGNORED_ELEMENTS.includes(elementName)) {\n      isAnIgnoredElement = true;\n    } else {\n      // TODO: Is it possible to avoid this null check?\n      if (elementAttributeName) {\n        openingElement.node.attributes.push(\n          t.jSXAttribute(t.jSXIdentifier(elementAttributeName), t.stringLiteral(elementName))\n        );\n      }\n    }\n  }\n\n  // Add a stable attribute for the component name (absent for non-root elements)\n  if (\n    componentName &&\n    !isAnIgnoredComponent &&\n    !hasAttributeWithName(openingElement, componentAttributeName)\n  ) {\n    // TODO: Is it possible to avoid this null check?\n    if (componentAttributeName) {\n      openingElement.node.attributes.push(\n        t.jSXAttribute(t.jSXIdentifier(componentAttributeName), t.stringLiteral(componentName))\n      );\n    }\n  }\n\n  // Add a stable attribute for the source file name (absent for non-root elements)\n  if (\n    sourceFileName &&\n    !isAnIgnoredComponent &&\n    (componentName || isAnIgnoredElement === false) &&\n    !hasAttributeWithName(openingElement, sourceFileAttributeName)\n  ) {\n    // TODO: Is it possible to avoid this null check?\n    if (sourceFileAttributeName) {\n      openingElement.node.attributes.push(\n        t.jSXAttribute(t.jSXIdentifier(sourceFileAttributeName), t.stringLiteral(sourceFileName))\n      );\n    }\n  }\n}\n\nfunction sourceFileNameFromState(state: AnnotationPluginPass) {\n  const name = fullSourceFileNameFromState(state);\n  if (!name) {\n    return undefined;\n  }\n\n  if (name.indexOf(\"/\") !== -1) {\n    return name.split(\"/\").pop();\n  } else if (name.indexOf(\"\\\\\") !== -1) {\n    return name.split(\"\\\\\").pop();\n  } else {\n    return name;\n  }\n}\n\nfunction fullSourceFileNameFromState(state: AnnotationPluginPass): string | null {\n  // @ts-expect-error This type is incorrect in Babel, `sourceFileName` is the correct type\n  const name = state.file.opts.parserOpts?.sourceFileName as unknown;\n\n  if (typeof name === \"string\") {\n    return name;\n  }\n\n  return null;\n}\n\nfunction isKnownIncompatiblePluginFromState(state: AnnotationPluginPass) {\n  const fullSourceFileName = fullSourceFileNameFromState(state);\n\n  if (!fullSourceFileName) {\n    return false;\n  }\n\n  return KNOWN_INCOMPATIBLE_PLUGINS.some((pluginName) => {\n    if (\n      fullSourceFileName.includes(`/node_modules/${pluginName}/`) ||\n      fullSourceFileName.includes(`\\\\node_modules\\\\${pluginName}\\\\`)\n    ) {\n      return true;\n    }\n\n    return false;\n  });\n}\n\nfunction attributeNamesFromState(state: AnnotationPluginPass): [string, string, string] {\n  if (state.opts.native) {\n    return [nativeComponentName, nativeElementName, nativeSourceFileName];\n  }\n\n  return [webComponentName, webElementName, webSourceFileName];\n}\n\nfunction isReactFragment(t: typeof Babel.types, openingElement: Babel.NodePath): boolean {\n  if (openingElement.isJSXFragment()) {\n    return true;\n  }\n\n  const elementName = getPathName(t, openingElement);\n\n  if (elementName === \"Fragment\" || elementName === \"React.Fragment\") {\n    return true;\n  }\n\n  // TODO: All these objects are typed as unknown, maybe an oversight in Babel types?\n  if (\n    openingElement.node &&\n    \"name\" in openingElement.node &&\n    openingElement.node.name &&\n    typeof openingElement.node.name === \"object\" &&\n    \"type\" in openingElement.node.name &&\n    openingElement.node.name.type === \"JSXMemberExpression\"\n  ) {\n    if (!(\"name\" in openingElement.node)) {\n      return false;\n    }\n\n    const nodeName = openingElement.node.name;\n    if (typeof nodeName !== \"object\" || !nodeName) {\n      return false;\n    }\n\n    if (\"object\" in nodeName && \"property\" in nodeName) {\n      const nodeNameObject = nodeName.object;\n      const nodeNameProperty = nodeName.property;\n\n      if (typeof nodeNameObject !== \"object\" || typeof nodeNameProperty !== \"object\") {\n        return false;\n      }\n\n      if (!nodeNameObject || !nodeNameProperty) {\n        return false;\n      }\n\n      const objectName = \"name\" in nodeNameObject && nodeNameObject.name;\n      const propertyName = \"name\" in nodeNameProperty && nodeNameProperty.name;\n\n      if (objectName === \"React\" && propertyName === \"Fragment\") {\n        return true;\n      }\n    }\n  }\n\n  return false;\n}\n\nfunction hasAttributeWithName(\n  openingElement: Babel.NodePath<Babel.types.JSXOpeningElement>,\n  name: string | undefined | null\n): boolean {\n  if (!name) {\n    return false;\n  }\n\n  return openingElement.node.attributes.some((node) => {\n    if (node.type === \"JSXAttribute\") {\n      return node.name.name === name;\n    }\n\n    return false;\n  });\n}\n\nfunction getPathName(t: typeof Babel.types, path: Babel.NodePath): string {\n  if (!path.node) return UNKNOWN_ELEMENT_NAME;\n  if (!(\"name\" in path.node)) {\n    return UNKNOWN_ELEMENT_NAME;\n  }\n\n  const name = path.node.name;\n\n  if (typeof name === \"string\") {\n    return name;\n  }\n\n  if (t.isIdentifier(name) || t.isJSXIdentifier(name)) {\n    return name.name;\n  }\n\n  if (t.isJSXNamespacedName(name)) {\n    return name.name.name;\n  }\n\n  // Handle JSX member expressions like Tab.Group\n  if (t.isJSXMemberExpression(name)) {\n    const objectName = getJSXMemberExpressionObjectName(t, name.object);\n    const propertyName = name.property.name;\n    return `${objectName}.${propertyName}`;\n  }\n\n  return UNKNOWN_ELEMENT_NAME;\n}\n\n// Recursively handle nested member expressions (e.g. Components.UI.Header)\nfunction getJSXMemberExpressionObjectName(\n  t: typeof Babel.types,\n  object: Babel.types.JSXMemberExpression | Babel.types.JSXIdentifier\n): string {\n  if (t.isJSXIdentifier(object)) {\n    return object.name;\n  }\n  if (t.isJSXMemberExpression(object)) {\n    const objectName = getJSXMemberExpressionObjectName(t, object.object);\n    return `${objectName}.${object.property.name}`;\n  }\n\n  return UNKNOWN_ELEMENT_NAME;\n}\n\nconst UNKNOWN_ELEMENT_NAME = \"unknown\";\n"],"names":["KNOWN_INCOMPATIBLE_PLUGINS","DEFAULT_IGNORED_ELEMENTS","webComponentName","webElementName","webSourceFileName","nativeComponentName","nativeElementName","nativeSourceFileName","componentNameAnnotatePlugin","_ref","t","types","visitor","FunctionDeclaration","path","state","_state$opts$ignoredCo","node","id","name","isKnownIncompatiblePluginFromState","functionBodyPushAttributes","opts","sourceFileNameFromState","attributeNamesFromState","ignoredComponents","ArrowFunctionExpression","_state$opts$ignoredCo2","parent","ClassDeclaration","_state$opts$ignoredCo3","get","properties","render","find","prop","isClassMethod","isIdentifier","traverse","ReturnStatement","returnStatement","arg","isJSXElement","isJSXFragment","processJSX","annotateFragments","componentName","sourceFileName","attributeNames","jsxNode","functionBody","type","maybeJsxNode","c","Array","isArray","isConditionalExpression","consequent","alternate","paths","openingElements","forEach","openingElement","applyAttributes","children","shouldSetComponentName","child","_attributeNames","_slicedToArray","componentAttributeName","elementAttributeName","sourceFileAttributeName","isReactFragment","attributes","elementName","getPathName","isAnIgnoredComponent","some","ignoredComponent","isAnIgnoredElement","hasAttributeWithName","includes","push","jSXAttribute","jSXIdentifier","stringLiteral","fullSourceFileNameFromState","undefined","indexOf","split","pop","_state$file$opts$pars","file","parserOpts","fullSourceFileName","pluginName","concat","_typeof","nodeName","nodeNameObject","object","nodeNameProperty","property","objectName","propertyName","UNKNOWN_ELEMENT_NAME","isJSXIdentifier","isJSXNamespacedName","isJSXMemberExpression","getJSXMemberExpressionObjectName"],"mappings":"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"}