{"version":3,"file":"reactPlugin.mjs","names":["reactVersion"],"sources":["../../src/domain/reactPlugin.ts"],"sourcesContent":["import { version as reactVersion } from 'react'\nimport { toIntegrations, toMajorVersionIntegration } from '@datadog/browser-core'\nimport type { RumPlugin, RumPublicApi, StartRumResult } from '@datadog/browser-rum-core'\n\ntype ReactRouterType = 'react-router-v6' | 'react-router-v7' | 'react-router-v8' | 'tanstack-router-v1'\ntype InitSubscriber = (configuration: ReactPluginConfiguration, rumPublicApi: RumPublicApi) => void\ntype StartSubscriber = (addError: StartRumResult['addError']) => void\n\nlet globalPublicApi: RumPublicApi | undefined\nlet globalConfiguration: ReactPluginConfiguration | undefined\nlet globalAddError: StartRumResult['addError'] | undefined\nlet routerType: ReactRouterType | undefined\n\nconst onRumInitSubscribers: InitSubscriber[] = []\nconst onRumStartSubscribers: StartSubscriber[] = []\n\n/**\n * React plugin configuration.\n *\n * @category Main\n */\nexport interface ReactPluginConfiguration {\n  /**\n   * Enable router integration. Make sure to use functions from\n   * {@link @datadog/browser-rum-react/react-router! | @datadog/browser-rum-react/react-router} or\n   * {@link @datadog/browser-rum-react/tanstack-router! | @datadog/browser-rum-react/tanstack-router}\n   * to create the router.\n   * ```\n   */\n  router?: boolean\n}\n\n/**\n * React plugin type.\n *\n * The plugins API is unstable and experimental, and may change without notice. Please don't use this type directly.\n *\n * @internal\n */\nexport type ReactPlugin = Required<RumPlugin>\n\n/**\n * React plugin constructor.\n *\n * @category Main\n * @example\n * ```ts\n * import { datadogRum } from '@datadog/browser-rum'\n * import { reactPlugin } from '@datadog/browser-rum-react'\n *\n * datadogRum.init({\n *   applicationId: '<DATADOG_APPLICATION_ID>',\n *   clientToken: '<DATADOG_CLIENT_TOKEN>',\n *   site: '<DATADOG_SITE>',\n *   plugins: [reactPlugin()],\n *   // ...\n * })\n * ```\n */\nexport function reactPlugin(configuration: ReactPluginConfiguration = {}): ReactPlugin {\n  return {\n    name: 'react',\n    onInit({ publicApi, initConfiguration }) {\n      globalPublicApi = publicApi\n      globalConfiguration = configuration\n      for (const subscriber of onRumInitSubscribers) {\n        subscriber(globalConfiguration, globalPublicApi)\n      }\n      if (configuration.router) {\n        initConfiguration.trackViewsManually = true\n      }\n    },\n    onRumStart({ addError }) {\n      globalAddError = addError\n      for (const subscriber of onRumStartSubscribers) {\n        if (addError) {\n          subscriber(addError)\n        }\n      }\n    },\n    getConfigurationTelemetry() {\n      const reactIntegration = toMajorVersionIntegration('react', reactVersion)\n      return {\n        router: !!configuration.router,\n        integrations: toIntegrations(reactIntegration, configuration.router && routerType),\n      }\n    },\n  } satisfies RumPlugin\n}\n\nexport function setReactRouterType(type: ReactRouterType) {\n  routerType = type\n}\n\nexport function onRumInit(callback: InitSubscriber) {\n  if (globalConfiguration && globalPublicApi) {\n    callback(globalConfiguration, globalPublicApi)\n  } else {\n    onRumInitSubscribers.push(callback)\n  }\n}\n\nexport function onRumStart(callback: StartSubscriber) {\n  if (globalAddError) {\n    callback(globalAddError)\n  } else {\n    onRumStartSubscribers.push(callback)\n  }\n}\n\nexport function resetReactPlugin() {\n  globalPublicApi = undefined\n  globalConfiguration = undefined\n  globalAddError = undefined\n  routerType = undefined\n  onRumInitSubscribers.length = 0\n  onRumStartSubscribers.length = 0\n}\n"],"mappings":";;;AAQA,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI;AAEJ,MAAM,uBAAyC,CAAC;AAChD,MAAM,wBAA2C,CAAC;;;;;;;;;;;;;;;;;;;AA6ClD,SAAgB,YAAY,gBAA0C,CAAC,GAAgB;CACrF,OAAO;EACL,MAAM;EACN,OAAO,EAAE,WAAW,qBAAqB;GACvC,kBAAkB;GAClB,sBAAsB;GACtB,KAAK,MAAM,cAAc,sBACvB,WAAW,qBAAqB,eAAe;GAEjD,IAAI,cAAc,QAChB,kBAAkB,qBAAqB;EAE3C;EACA,WAAW,EAAE,YAAY;GACvB,iBAAiB;GACjB,KAAK,MAAM,cAAc,uBACvB,IAAI,UACF,WAAW,QAAQ;EAGzB;EACA,4BAA4B;GAC1B,MAAM,mBAAmB,0BAA0B,SAASA,OAAY;GACxE,OAAO;IACL,QAAQ,CAAC,CAAC,cAAc;IACxB,cAAc,eAAe,kBAAkB,cAAc,UAAU,UAAU;GACnF;EACF;CACF;AACF;AAEA,SAAgB,mBAAmB,MAAuB;CACxD,aAAa;AACf;AAEA,SAAgB,UAAU,UAA0B;CAClD,IAAI,uBAAuB,iBACzB,SAAS,qBAAqB,eAAe;MAE7C,qBAAqB,KAAK,QAAQ;AAEtC;AAEA,SAAgB,WAAW,UAA2B;CACpD,IAAI,gBACF,SAAS,cAAc;MAEvB,sBAAsB,KAAK,QAAQ;AAEvC"}