posthog-react-native 4.74.2 → 4.75.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/PostHogErrorBoundary.js.map +1 -1
  2. package/dist/PostHogProvider.js.map +1 -1
  3. package/dist/autocapture.d.ts +1 -1
  4. package/dist/autocapture.js.map +1 -1
  5. package/dist/error-tracking/index.js.map +1 -1
  6. package/dist/error-tracking/utils.js.map +1 -1
  7. package/dist/frameworks/wix-navigation.js +1 -1
  8. package/dist/frameworks/wix-navigation.js.map +1 -1
  9. package/dist/hooks/useNavigationTracker.js.map +1 -1
  10. package/dist/logs-defaults.js +1 -1
  11. package/dist/logs-defaults.js.map +1 -1
  12. package/dist/optional/OptionalExpoUpdates.js.map +1 -1
  13. package/dist/optional/OptionalPlugin.js.map +1 -1
  14. package/dist/optional/OptionalReactNativeSafeArea.js.map +1 -1
  15. package/dist/optional/OptionalReactNativeSvg.js.map +1 -1
  16. package/dist/posthog-rn.js +1 -1
  17. package/dist/posthog-rn.js.map +1 -1
  18. package/dist/surveys/PostHogSurveyProvider.js +1 -1
  19. package/dist/surveys/PostHogSurveyProvider.js.map +1 -1
  20. package/dist/surveys/components/QuestionHeader.js.map +1 -1
  21. package/dist/surveys/components/QuestionTypes.js +1 -1
  22. package/dist/surveys/components/QuestionTypes.js.map +1 -1
  23. package/dist/surveys/components/SurveyModal.d.ts +5 -0
  24. package/dist/surveys/components/SurveyModal.js +1 -1
  25. package/dist/surveys/components/SurveyModal.js.map +1 -1
  26. package/dist/surveys/components/Surveys.d.ts +7 -4
  27. package/dist/surveys/components/Surveys.js +1 -1
  28. package/dist/surveys/components/Surveys.js.map +1 -1
  29. package/dist/surveys/getActiveMatchingSurveys.d.ts +1 -1
  30. package/dist/surveys/getActiveMatchingSurveys.js +1 -1
  31. package/dist/surveys/getActiveMatchingSurveys.js.map +1 -1
  32. package/dist/surveys/icons.js.map +1 -1
  33. package/dist/surveys/safeStyleSheet.js.map +1 -1
  34. package/dist/surveys/survey-progress.d.ts +23 -0
  35. package/dist/surveys/survey-progress.js +2 -0
  36. package/dist/surveys/survey-progress.js.map +1 -0
  37. package/dist/surveys/survey-shuffling.js.map +1 -1
  38. package/dist/surveys/surveys-utils.d.ts +1 -1
  39. package/dist/surveys/useActivatedSurveys.js +1 -1
  40. package/dist/surveys/useActivatedSurveys.js.map +1 -1
  41. package/dist/surveys/useSurveyStorage.d.ts +3 -1
  42. package/dist/surveys/useSurveyStorage.js +1 -1
  43. package/dist/surveys/useSurveyStorage.js.map +1 -1
  44. package/dist/tooling/expoconfig.js +1 -1
  45. package/dist/tooling/expoconfig.js.map +1 -1
  46. package/dist/tooling/metroconfig.js.map +1 -1
  47. package/dist/tooling/posthogMetroSerializer.js.map +1 -1
  48. package/dist/tooling/utils.js.map +1 -1
  49. package/dist/tooling/vendor/metro/countLines.d.ts +1 -1
  50. package/dist/tooling/vendor/metro/utils.js.map +1 -1
  51. package/dist/utils.js.map +1 -1
  52. package/dist/version.d.ts +1 -1
  53. package/dist/version.js +1 -1
  54. package/dist/version.js.map +1 -1
  55. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"expoconfig.js","names":["fs","require","path","_require","AndroidConfig","withAppBuildGradle","withBaseMod","withDangerousMod","withGradleProperties","withXcodeProject","POSTHOG_ANDROID_GRADLE_PLUGIN_VERSION","resolvePostHogReactNativePackageJsonPath","POSTHOG_ANDROID_SKIP_ON_CONFLICT_PROPERTY","POSTHOG_HERMES_RELEASE_MODE_GRADLE_PROPERTY","POSTHOG_RELEASE_MODES","exports","resolveReleaseModeProp","releaseMode","environmentMode","trimmed","trim","undefined","includes","Error","concat","join","buildAndroidSkipOnConflictGradleLine","skipOnConflict","withAndroidPlugin","config","arguments","length","modResults","language","console","warn","buildGradle","contents","applyFrom","skipOnConflictLine","applyBlock","skipOnConflictPattern","RegExp","replace","pattern","match","matchingBraceIndex","s","openBraceIndex","depth","i","addPostHogAndroidGradlePluginClasspath","projectBuildGradle","classpathPresent","classpathLine","buildscriptMatch","exec","buildscriptOpenBrace","index","buildscriptEnd","buildscriptBody","slice","dependenciesMatch","insertAt","applyPostHogAndroidGradlePlugin","appBuildGradle","test","applyLine","appPluginPattern","androidBlockPattern","withFinalizedProjectBuildGradle","action","platform","mod","skipEmptyMod","_asyncToGenerator2","_regenerator","mark","_callee","_config$modRequest","nextMod","modRequest","results","wrap","_context","prev","next","_objectWithoutProperties2","_excluded","_objectSpread","sent","abrupt","stop","withAndroidNativeSymbolsPlugin","_ref","_callee2","result","_context2","promises","writeFile","Paths","getAppBuildGradleAsync","projectRoot","_x","apply","POSTHOG_NEW_INTENT_MARKER","POSTHOG_NEW_INTENT_BEGIN","POSTHOG_NEW_INTENT_END","NEW_INTENT_DOC","NEW_INTENT_KOTLIN_BODY","NEW_INTENT_JAVA_BODY","newIntentOverrideBlock","body","escapeRegExp","value","POSTHOG_NEW_INTENT_BLOCK_PATTERN","literalEnd","start","quote","raw","startsWith","c","close","matchingBraceIndexInSource","end","indexOf","depthOfComment","maskCommentsAndLiterals","source","out","split","blank","from","to","j","mainActivityBody","code","declaration","searchFrom","open","updateMainActivityNewIntentOverride","enabled","withoutManagedBlock","codeOnly","MAIN_ACTIVITY_SOURCE_ROOTS","findMainActivityPath","walk","dir","existsSync","_iterator","_createForOfIteratorHelper","readdirSync","withFileTypes","_step","n","done","entry","candidate","name","isDirectory","hit","err","e","f","_i","_MAIN_ACTIVITY_SOURCE","sourceRoot","withMainActivityNewIntent","_ref2","_callee3","mainActivityPath","updated","_context3","readFile","endsWith","relative","_x2","modifyExistingXcodeBuildScript","script","shellScript","migrateLegacyPostHogWrapperInvocation","JSON","parse","stringify","updatePostHogBundlePhaseExports","addPostHogWithBundledScriptsToBundleShellScript","POSTHOG_REACT_NATIVE_XCODE_PATH","POSTHOG_SKIP_ON_CONFLICT_EXPORT","POSTHOG_RELEASE_MODE_EXPORT_PREFIX","buildBundlePhaseExports","push","REACT_NATIVE_XCODE_LINE","skipArg","lines","filter","line","commandIndex","findIndex","indent","_b","_a","splice","_toConsumableArray2","map","_match","rnCommand","POSTHOG_DSYM_BUILD_PHASE_NAME","POSTHOG_DSYM_INPUT_PATH","buildDsymUploadShellScript","includeSource","composeDsymUploadShellScript","legacyDsymReleaseModeLines","buildLegacyReleaseModeDsymUploadShellScript","uploadIndex","encodePbxShellScript","decodePbxShellScript","stored","ch","isPluginGeneratedDsymUploadBuildPhase","phase","some","skip","mode","moveDsymUploadBuildPhaseToEnd","xcodeProject","existing","pbxItemByComment","buildPhases","getFirstTarget","call","firstTarget","Array","isArray","phaseIndex","comment","addDsymUploadBuildPhase","inputPaths","Set","addBuildPhase","shellPath","disableUserScriptSandboxing","configurations","pbxXCBuildConfigurationSection","key","configuration","buildSettings","ENABLE_USER_SCRIPT_SANDBOXING","POSTHOG_DOTENV_BUILD_SETTING","POSTHOG_DOTENV_GRADLE_PROPERTY","normalizeDotenvFileProp","dotenvFile","resolveDotenvFileProp","isAbsoluteDotenvPath","buildIosDotenvFileBuildSetting","applyDotenvFileBuildSetting","buildAndroidDotenvFileGradleValue","updateDotenvFileGradleProperties","properties","rest","item","type","updateHermesReleaseModeGradleProperties","withPostHogGradleProperties","resolveNativeSymbolUpload","prop","_typeof2","withFinalizedXcodeProject","_callee4","_config$modRequest2","_context4","_excluded2","withIosPlugin","props","nativeSymbols","uploadNativeSymbols","bundleReactNativePhase","disableSandboxing","withPostHogPlugin","rawProps","process","env","POSTHOG_RELEASE_MODE","patchMainActivityNewIntent","postHogPlugin","module"],"sources":["../../src/tooling/expoconfig.ts"],"sourcesContent":["// Portions of this file are derived from getsentry/sentry-react-native\n// Copyright (c) 2017 Sentry\n// Licensed under the MIT License: https://github.com/getsentry/sentry-react-native/blob/main/LICENSE.md\n\nconst fs = require('fs')\nconst path = require('path')\n\nconst {\n AndroidConfig,\n withAppBuildGradle,\n withBaseMod,\n withDangerousMod,\n withGradleProperties,\n withXcodeProject,\n} = require('@expo/config-plugins')\n\n// com.posthog.android uploads R8 mapping files and injects a matching map-id so native\n// crash stack traces can be deobfuscated. The injected version has to read every gradle\n// property the plugin writes, or that half of the build ignores the option: 1.4.0 is the first\n// version that reads posthog.dotenvFile. 1.6.0 is the first version that ignores\n// posthog.releaseMode with a deprecation warning, so the R8 mapping always binds to the release.\nconst POSTHOG_ANDROID_GRADLE_PLUGIN_VERSION = '1.6.0'\n\nconst resolvePostHogReactNativePackageJsonPath =\n \"[\\\"node\\\", \\\"--print\\\", \\\"require('path').join(require('path').dirname(require.resolve('posthog-react-native')), '..', 'tooling', 'posthog.gradle')\\\"].execute().text.trim()\"\n\nconst POSTHOG_ANDROID_SKIP_ON_CONFLICT_PROPERTY = 'posthogReactNativeSkipOnConflict'\n\nconst POSTHOG_HERMES_RELEASE_MODE_GRADLE_PROPERTY = 'posthog.hermesReleaseMode'\n\n/**\n * How the release a build belongs to gets associated with the exceptions it reports. This steers\n * the Hermes source map upload only. iOS dSYMs and Android R8 mappings always bind to the release\n * their build creates.\n *\n * `event`, the default, uploads the maps release-independent and lets each event resolve its own\n * release from the app version and namespace the SDK already sends. `symbol-set` stamps the release\n * onto the uploaded maps instead, and an exception inherits the release of the maps its frames\n * resolved against.\n */\nexport type PostHogReleaseMode = 'symbol-set' | 'event'\n\n// Exported so a test can hold the copies in posthog-xcode.sh, posthog.gradle and the generated\n// dSYM phase to this list, because nothing else fails when they drift.\nexport const POSTHOG_RELEASE_MODES: PostHogReleaseMode[] = ['symbol-set', 'event']\n\n// Empty/whitespace-only values (easy to produce from templated app.config values) count as unset\n// and fall through to the next source. A configured mode is written into the bundle phase, and that\n// beats POSTHOG_RELEASE_MODE at build time, so this reads the variable rather than leaving an Expo\n// build with no way to opt out. Undefined means nothing configured a mode: the prebuild then writes\n// nothing, and the build scripts apply the event default themselves, which they can soften to a\n// bound upload when the installed posthog-cli predates the flag. An unrecognized value stops the\n// prebuild rather than falling back, so a typo cannot silently leave a build binding its maps to a\n// release it meant to keep independent.\nexport function resolveReleaseModeProp(releaseMode?: string, environmentMode?: string): PostHogReleaseMode | undefined {\n const trimmed = releaseMode?.trim() || environmentMode?.trim()\n if (!trimmed) {\n return undefined\n }\n if (!POSTHOG_RELEASE_MODES.includes(trimmed as PostHogReleaseMode)) {\n throw new Error(\n `[posthog-react-native] releaseMode must be one of ${POSTHOG_RELEASE_MODES.join(', ')}, was '${trimmed}'`\n )\n }\n return trimmed as PostHogReleaseMode\n}\n\nexport function buildAndroidSkipOnConflictGradleLine(skipOnConflict: boolean): string | null {\n if (!skipOnConflict) {\n return null\n }\n return `project.ext.${POSTHOG_ANDROID_SKIP_ON_CONFLICT_PROPERTY} = true`\n}\n\nconst withAndroidPlugin = (config: any, skipOnConflict = false) => {\n return withAppBuildGradle(config, (config: any) => {\n if (config.modResults.language !== 'groovy') {\n console.warn('Cannot configure PostHog in the app gradle because the build.gradle is not groovy')\n }\n\n const buildGradle = config.modResults.contents\n const applyFrom = `apply from: new File(${resolvePostHogReactNativePackageJsonPath})`\n const skipOnConflictLine = buildAndroidSkipOnConflictGradleLine(skipOnConflict)\n const applyBlock = skipOnConflictLine ? `${skipOnConflictLine}\\n${applyFrom}` : applyFrom\n const skipOnConflictPattern = new RegExp(\n `^project\\\\.ext\\\\.${POSTHOG_ANDROID_SKIP_ON_CONFLICT_PROPERTY}\\\\s*=\\\\s*(true|false)\\\\n?`,\n 'm'\n )\n\n if (buildGradle.includes(applyFrom)) {\n let contents = buildGradle.replace(skipOnConflictPattern, '')\n if (skipOnConflictLine) {\n contents = contents.replace(applyFrom, `${skipOnConflictLine}\\n${applyFrom}`)\n }\n config.modResults.contents = contents\n return config\n }\n\n // Find the 'android {' block and insert the line directly above it\n const pattern = /^android\\s*\\{/m\n\n if (buildGradle.match(pattern)) {\n config.modResults.contents = buildGradle.replace(pattern, `${applyBlock}\\n\\nandroid {`)\n } else {\n console.warn('PostHog: Could not find \"android {\" block in build.gradle')\n }\n\n return config\n })\n}\n\n// Index of the `}` matching the `{` at openBraceIndex, or -1 if unbalanced. Manual scan\n// (not regex) to avoid ReDoS; counts all braces, fine for the generated gradle we target.\nfunction matchingBraceIndex(s: string, openBraceIndex: number): number {\n let depth = 0\n for (let i = openBraceIndex; i < s.length; i++) {\n if (s[i] === '{') {\n depth++\n } else if (s[i] === '}') {\n depth--\n if (depth === 0) {\n return i\n }\n }\n }\n return -1\n}\n\n// Published to Maven Central (not the Gradle Plugin Portal), so we use the legacy buildscript\n// classpath + apply route. Idempotent. `classpathPresent` tells the caller to only `apply\n// plugin` when the classpath is in the file, else the build can't resolve it.\nexport function addPostHogAndroidGradlePluginClasspath(projectBuildGradle: string): {\n contents: string\n classpathPresent: boolean\n} {\n if (projectBuildGradle.includes('posthog-android-gradle-plugin')) {\n return { contents: projectBuildGradle, classpathPresent: true }\n }\n\n const classpathLine = ` classpath(\"com.posthog:posthog-android-gradle-plugin:${POSTHOG_ANDROID_GRADLE_PLUGIN_VERSION}\")`\n\n // First `dependencies {` inside the `buildscript {}` block. Bounding to the buildscript body\n // avoids a backtracking regex (ReDoS) and mis-placing into a later block (e.g. allprojects).\n const buildscriptMatch = /buildscript\\s*\\{/.exec(projectBuildGradle)\n const buildscriptOpenBrace = buildscriptMatch ? buildscriptMatch.index + buildscriptMatch[0].length - 1 : -1\n const buildscriptEnd = buildscriptOpenBrace === -1 ? -1 : matchingBraceIndex(projectBuildGradle, buildscriptOpenBrace)\n const buildscriptBody = buildscriptEnd === -1 ? '' : projectBuildGradle.slice(buildscriptOpenBrace, buildscriptEnd)\n const dependenciesMatch = buildscriptBody ? /dependencies\\s*\\{/.exec(buildscriptBody) : null\n\n if (!dependenciesMatch) {\n console.warn(\n 'PostHog: Could not find a buildscript dependencies block in the project build.gradle; ' +\n 'skipping the com.posthog.android classpath. Native symbols will not be uploaded.'\n )\n return { contents: projectBuildGradle, classpathPresent: false }\n }\n\n const insertAt = buildscriptOpenBrace + dependenciesMatch.index + dependenciesMatch[0].length\n return {\n contents: `${projectBuildGradle.slice(0, insertAt)}\\n${classpathLine}${projectBuildGradle.slice(insertAt)}`,\n classpathPresent: true,\n }\n}\n\n// Applies the com.posthog.android plugin in the app module. Idempotent.\nexport function applyPostHogAndroidGradlePlugin(appBuildGradle: string): string {\n if (/apply plugin: [\"']com\\.posthog\\.android[\"']/.test(appBuildGradle)) {\n return appBuildGradle\n }\n\n const applyLine = 'apply plugin: \"com.posthog.android\"'\n\n // Apply right after com.android.application so the plugin can hook AGP variants.\n const appPluginPattern = /^([ \\t]*apply plugin: [\"']com\\.android\\.application[\"'].*)$/m\n if (appPluginPattern.test(appBuildGradle)) {\n return appBuildGradle.replace(appPluginPattern, `$1\\n${applyLine}`)\n }\n\n // Fallback: insert directly above the android { } block.\n const androidBlockPattern = /^android\\s*\\{/m\n if (androidBlockPattern.test(appBuildGradle)) {\n return appBuildGradle.replace(androidBlockPattern, `${applyLine}\\n\\nandroid {`)\n }\n\n console.warn('PostHog: Could not find where to apply com.posthog.android in the app build.gradle')\n return appBuildGradle\n}\n\n// Expo's standard mods run their action before the previously registered action. This wrapper\n// deliberately runs its action after the rest of the project Gradle mod chain, so it can safely\n// coordinate the project classpath and app plugin edits without relying on mod-key order.\nconst withFinalizedProjectBuildGradle = (config: any, action: (config: any) => any) => {\n return withBaseMod(config, {\n platform: 'android',\n mod: 'projectBuildGradle',\n skipEmptyMod: false,\n async action(config: any) {\n const { nextMod, ...modRequest } = config.modRequest\n const results = await nextMod({ ...config, modRequest })\n return action(results)\n },\n })\n}\n\nconst withAndroidNativeSymbolsPlugin = (config: any) => {\n return withFinalizedProjectBuildGradle(config, async (config: any) => {\n if (config.modResults.language !== 'groovy') {\n console.warn('Cannot configure the PostHog Android Gradle plugin because the project build.gradle is not groovy')\n return config\n }\n\n const result = addPostHogAndroidGradlePluginClasspath(config.modResults.contents)\n if (result.contents !== config.modResults.contents) {\n // Persist the classpath before applying the app plugin so a failed second write cannot\n // leave an apply line without its matching classpath.\n await fs.promises.writeFile(config.modResults.path, result.contents)\n config.modResults.contents = result.contents\n }\n if (!result.classpathPresent) {\n // No classpath (or no buildscript dependencies block) → applying would break the build.\n return config\n }\n\n const appBuildGradle = await AndroidConfig.Paths.getAppBuildGradleAsync(config.modRequest.projectRoot)\n if (appBuildGradle.language !== 'groovy') {\n console.warn('Cannot configure the PostHog Android Gradle plugin because the app build.gradle is not groovy')\n return config\n }\n\n const contents = applyPostHogAndroidGradlePlugin(appBuildGradle.contents)\n if (contents !== appBuildGradle.contents) {\n await fs.promises.writeFile(appBuildGradle.path, contents)\n }\n return config\n })\n}\n\nconst POSTHOG_NEW_INTENT_MARKER = 'posthog-new-intent'\nconst POSTHOG_NEW_INTENT_BEGIN = `// @generated begin ${POSTHOG_NEW_INTENT_MARKER} - posthog-react-native (DO NOT MODIFY)`\nconst POSTHOG_NEW_INTENT_END = `// @generated end ${POSTHOG_NEW_INTENT_MARKER}`\n\n// `android.content.Intent` is spelled out to keep the block self-contained: adding an import is a\n// second, riskier edit, and the templates we patch do not already import Intent.\nconst NEW_INTENT_DOC = ` /**\n * Records the intent that reopened the app so getIntent() stays correct.\n *\n * Works around a React Native defect that drops notification taps and deep links arriving while\n * the React context is still starting. Managed by the posthog-react-native Expo config plugin;\n * remove it with { patchMainActivityNewIntent: false } in app.json.\n * https://posthog.com/docs/workflows/push-notifications/react-native\n */`\n\nconst NEW_INTENT_KOTLIN_BODY = ` override fun onNewIntent(intent: android.content.Intent) {\n setIntent(intent)\n super.onNewIntent(intent)\n }`\n\nconst NEW_INTENT_JAVA_BODY = ` @Override\n public void onNewIntent(android.content.Intent intent) {\n setIntent(intent);\n super.onNewIntent(intent);\n }`\n\nfunction newIntentOverrideBlock(language: string): string {\n const body = language === 'java' ? NEW_INTENT_JAVA_BODY : NEW_INTENT_KOTLIN_BODY\n return `\\n ${POSTHOG_NEW_INTENT_BEGIN}\\n${NEW_INTENT_DOC}\\n${body}\\n ${POSTHOG_NEW_INTENT_END}\\n`\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\n// Lazy body match so two blocks (only reachable from a hand-edited file) are removed separately\n// rather than swallowing everything between them. The `\\r?` on both ends keeps the block removable\n// after an editor or a Windows checkout has normalized the file to CRLF.\nconst POSTHOG_NEW_INTENT_BLOCK_PATTERN = new RegExp(\n `\\\\r?\\\\n?[ \\\\t]*${escapeRegExp(POSTHOG_NEW_INTENT_BEGIN)}[\\\\s\\\\S]*?${escapeRegExp(\n POSTHOG_NEW_INTENT_END\n )}[ \\\\t]*\\\\r?\\\\n`,\n 'g'\n)\n\n// Index just past the string or character literal opening at `start`, or -1 when it never closes.\n// Covers `\"...\"` and `'...'` with backslash escapes (which end at a newline in both languages),\n// `\"\"\"...\"\"\"` raw strings and text blocks, and Kotlin `${...}` templates, whose contents are code\n// that may nest further literals.\nfunction literalEnd(s: string, start: number, language: string): number {\n const quote = s[start]\n const raw = quote === '\"' && s.startsWith('\"\"\"', start)\n let i = start + (raw ? 3 : 1)\n while (i < s.length) {\n const c = s[i]\n if (raw) {\n if (s.startsWith('\"\"\"', i)) {\n // Kotlin closes on the last three of a longer run of quotes.\n while (s[i] === '\"') {\n i++\n }\n return i\n }\n } else if (c === '\\n') {\n return -1\n } else if (c === quote) {\n return i + 1\n }\n if (c === '\\\\' && (!raw || language === 'java')) {\n i += 2\n continue\n }\n if (language === 'kt' && quote === '\"' && c === '$' && s[i + 1] === '{') {\n const close = matchingBraceIndexInSource(s, i + 1, language)\n if (close === -1) {\n return -1\n }\n i = close + 1\n continue\n }\n i++\n }\n return -1\n}\n\n// Index of the `}` matching the `{` at openBraceIndex in Kotlin or Java source, or -1 if\n// unbalanced. Braces inside literals and comments are not structural: a `\"}\"` field before an\n// existing onNewIntent must not end the class early, which would hide that override from the\n// scoped check below and make us insert a duplicate the file no longer compiles with.\nfunction matchingBraceIndexInSource(s: string, openBraceIndex: number, language: string): number {\n let depth = 0\n let i = openBraceIndex\n while (i < s.length) {\n const c = s[i]\n if (c === '/' && s[i + 1] === '/') {\n const end = s.indexOf('\\n', i)\n i = end === -1 ? s.length : end\n continue\n }\n if (c === '/' && s[i + 1] === '*') {\n // Kotlin nests block comments, Java does not: taking the first `*/` in Kotlin would end the\n // comment early and let a commented-out `}` close the class, hiding a real override below it.\n let depthOfComment = 1\n i += 2\n while (i < s.length && depthOfComment > 0) {\n if (language === 'kt' && s[i] === '/' && s[i + 1] === '*') {\n depthOfComment++\n i += 2\n continue\n }\n if (s[i] === '*' && s[i + 1] === '/') {\n depthOfComment--\n i += 2\n continue\n }\n i++\n }\n if (depthOfComment > 0) {\n return -1\n }\n continue\n }\n if (c === '\"' || c === \"'\") {\n const end = literalEnd(s, i, language)\n if (end === -1) {\n return -1\n }\n i = end\n continue\n }\n if (c === '{') {\n depth++\n } else if (c === '}') {\n depth--\n if (depth === 0) {\n return i\n }\n }\n i++\n }\n return -1\n}\n\n// A copy of `source` with the inside of every comment and string/char literal replaced by spaces,\n// keeping length and line breaks so indexes still line up with the original. One pass, so the class\n// declaration, the brace scan and the existing-override check all agree on what is code: a\n// commented-out `class MainActivity`, a `\"}\"` field, or an `onNewIntent` inside a comment are all\n// invisible to every one of them. Kotlin nests block comments and Java does not.\nfunction maskCommentsAndLiterals(source: string, language: string): string {\n const out = source.split('')\n const blank = (from: number, to: number) => {\n for (let j = from; j < to && j < out.length; j++) {\n if (out[j] !== '\\n') {\n out[j] = ' '\n }\n }\n }\n\n let i = 0\n while (i < source.length) {\n const c = source[i]\n if (c === '/' && source[i + 1] === '/') {\n const end = source.indexOf('\\n', i)\n const stop = end === -1 ? source.length : end\n blank(i, stop)\n i = stop\n continue\n }\n if (c === '/' && source[i + 1] === '*') {\n let depth = 1\n let j = i + 2\n while (j < source.length && depth > 0) {\n if (language === 'kt' && source[j] === '/' && source[j + 1] === '*') {\n depth++\n j += 2\n continue\n }\n if (source[j] === '*' && source[j + 1] === '/') {\n depth--\n j += 2\n continue\n }\n j++\n }\n blank(i, j)\n i = j\n continue\n }\n if (c === '\"' || c === \"'\") {\n const end = literalEnd(source, i, language)\n if (end === -1) {\n // Unterminated literal: blank the rest so nothing after it reads as code.\n blank(i, source.length)\n return out.join('')\n }\n blank(i, end)\n i = end\n continue\n }\n i++\n }\n return out.join('')\n}\n\n// The span of MainActivity's body, or undefined when the file does not look like the templates we\n// patch: a supertype list is all we expect between the class name and the opening brace.\nfunction mainActivityBody(contents: string, language: string): { open: number; close: number } | undefined {\n const code = maskCommentsAndLiterals(contents, language)\n const declaration = /\\bclass\\s+MainActivity\\b/.exec(code)\n if (!declaration) {\n return undefined\n }\n const searchFrom = declaration.index + declaration[0].length\n const open = code.indexOf('{', searchFrom)\n if (open === -1 || !/^[^;{}]*$/.test(code.slice(searchFrom, open))) {\n return undefined\n }\n // Unbalanced braces mean we cannot tell where the body ends, so the file is not ours to edit.\n let depth = 0\n let close = -1\n for (let i = open; i < code.length; i++) {\n if (code[i] === '{') {\n depth++\n } else if (code[i] === '}') {\n depth--\n if (depth === 0) {\n close = i\n break\n }\n }\n }\n return close === -1 ? undefined : { open, close }\n}\n\n/**\n * Adds (or, when disabled, removes) the managed `onNewIntent` override in MainActivity.\n *\n * Idempotent: the block is delimited by generated markers and rewritten in place, so repeated\n * prebuilds never stack copies. An app that already overrides `onNewIntent` keeps its own — a\n * second override would not compile, and the one-line `setIntent(intent)` belongs at the top of\n * theirs instead.\n */\nexport function updateMainActivityNewIntentOverride(contents: string, language: string, enabled: boolean): string {\n const withoutManagedBlock = contents.replace(POSTHOG_NEW_INTENT_BLOCK_PATTERN, '')\n if (!enabled) {\n return withoutManagedBlock\n }\n\n const body = mainActivityBody(withoutManagedBlock, language)\n if (!body) {\n console.warn(\n '[posthog-react-native] Could not find the MainActivity class body; skipping the onNewIntent ' +\n 'override. Notification taps delivered while the React context is starting will be lost.'\n )\n return withoutManagedBlock\n }\n\n // Scoped to MainActivity's own body, and matching a declaration rather than the bare token: an\n // onNewIntent on a helper class in the same file, or named in a comment or a string, must not\n // turn the fix off — but every real override of it in either language matches.\n const codeOnly = maskCommentsAndLiterals(withoutManagedBlock, language)\n if (/\\b(fun|void)\\s+onNewIntent\\s*\\(/.test(codeOnly.slice(body.open, body.close))) {\n console.warn(\n '[posthog-react-native] MainActivity already overrides onNewIntent; leaving it alone. ' +\n 'Add `setIntent(intent)` as its first statement so a notification tap that arrives before ' +\n 'the React context is ready is not lost, or set `{ patchMainActivityNewIntent: false }` ' +\n 'on the plugin to silence this.'\n )\n return withoutManagedBlock\n }\n\n return (\n withoutManagedBlock.slice(0, body.open + 1) +\n newIntentOverrideBlock(language) +\n withoutManagedBlock.slice(body.open + 1)\n )\n}\n\n// Expo's own `mainActivity` mod resolves the file with a glob over android/app/src/main/java only,\n// and asserts, so registering it turns sources under src/main/kotlin — or no MainActivity at all —\n// into a hard prebuild failure whose message never mentions PostHog. Look the file up ourselves\n// instead. Dangerous mods run before the standard android chain, so another plugin's\n// withMainActivity still reads (and re-writes) our edit.\nconst MAIN_ACTIVITY_SOURCE_ROOTS = ['android/app/src/main/java', 'android/app/src/main/kotlin']\n\nfunction findMainActivityPath(projectRoot: string): string | undefined {\n const walk = (dir: string): string | undefined => {\n if (!fs.existsSync(dir)) {\n return undefined\n }\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\n const candidate = path.join(dir, entry.name)\n if (!entry.isDirectory()) {\n if (/^MainActivity\\.(kt|java)$/.test(entry.name)) {\n return candidate\n }\n continue\n }\n const hit = walk(candidate)\n if (hit) {\n return hit\n }\n }\n return undefined\n }\n\n for (const sourceRoot of MAIN_ACTIVITY_SOURCE_ROOTS) {\n const hit = walk(path.join(projectRoot, sourceRoot))\n if (hit) {\n return hit\n }\n }\n return undefined\n}\n\nconst withMainActivityNewIntent = (config: any, enabled: boolean) => {\n return withDangerousMod(config, [\n 'android',\n async (config: any) => {\n const mainActivityPath = findMainActivityPath(config.modRequest.projectRoot)\n if (!mainActivityPath) {\n console.warn(\n '[posthog-react-native] Could not find MainActivity under android/app/src/main/{java,kotlin}; ' +\n 'skipping the onNewIntent override. Notification taps delivered while the React context is ' +\n 'starting will be lost.'\n )\n return config\n }\n\n const contents = await fs.promises.readFile(mainActivityPath, 'utf8')\n const updated = updateMainActivityNewIntentOverride(\n contents,\n mainActivityPath.endsWith('.java') ? 'java' : 'kt',\n enabled\n )\n if (updated !== contents) {\n await fs.promises.writeFile(mainActivityPath, updated)\n }\n // Only when the block is new, so a re-run of an already-patched project stays quiet.\n if (!contents.includes(POSTHOG_NEW_INTENT_BEGIN) && updated.includes(POSTHOG_NEW_INTENT_BEGIN)) {\n console.warn(\n `[posthog-react-native] Added an onNewIntent override to ${path.relative(\n config.modRequest.projectRoot,\n mainActivityPath\n )} so a notification tap that arrives before the React context is ready is not lost. ` +\n 'Set `{ patchMainActivityNewIntent: false }` on the plugin in app.json to opt out.'\n )\n }\n return config\n },\n ])\n}\n\ntype BuildPhase = { shellScript: string }\n\nexport function modifyExistingXcodeBuildScript(\n script: BuildPhase | undefined,\n skipOnConflict = false,\n releaseMode?: PostHogReleaseMode\n): void {\n if (!script?.shellScript) {\n console.warn(\n \"[posthog-react-native] Could not find the 'Bundle React Native code and images' build phase; \" +\n 'skipping sourcemap upload setup.'\n )\n return\n }\n\n if (!script.shellScript.match(/(packager|scripts)\\/react-native-xcode\\.sh\\b/)) {\n return\n }\n\n if (script.shellScript.includes('posthog-xcode.sh')) {\n const code = migrateLegacyPostHogWrapperInvocation(JSON.parse(script.shellScript))\n script.shellScript = JSON.stringify(updatePostHogBundlePhaseExports(code, skipOnConflict, releaseMode))\n return\n }\n\n if (script.shellScript.includes('posthog-react-native')) {\n return\n }\n\n const code = JSON.parse(script.shellScript)\n script.shellScript = JSON.stringify(\n addPostHogWithBundledScriptsToBundleShellScript(code, skipOnConflict, releaseMode)\n )\n}\n\n// Invoked directly so another wrapper receives this script—not /bin/sh—as $1.\n// package.json declares it as a bin target so package managers preserve its executable bit.\nconst POSTHOG_REACT_NATIVE_XCODE_PATH =\n \"`\\\"$NODE_BINARY\\\" --print \\\"require('path').join(require('path').dirname(require.resolve('posthog-react-native')), '..', 'tooling', 'posthog-xcode.sh')\\\"`\"\n\nconst POSTHOG_SKIP_ON_CONFLICT_EXPORT = 'export POSTHOG_SKIP_ON_CONFLICT=1'\nconst POSTHOG_RELEASE_MODE_EXPORT_PREFIX = 'export POSTHOG_RELEASE_MODE='\n\n// Exported before the wrapped command so posthog-xcode.sh — and any outer wrapper that re-invokes\n// it — sees them. posthog-cli reads POSTHOG_RELEASE_MODE itself, so one export covers the hermes\n// clone and upload alike.\nfunction buildBundlePhaseExports(skipOnConflict: boolean, releaseMode?: PostHogReleaseMode): string[] {\n const exports: string[] = []\n if (skipOnConflict) {\n exports.push(POSTHOG_SKIP_ON_CONFLICT_EXPORT)\n }\n if (releaseMode) {\n exports.push(`${POSTHOG_RELEASE_MODE_EXPORT_PREFIX}${releaseMode}`)\n }\n return exports\n}\n\nconst REACT_NATIVE_XCODE_LINE =\n /^([ \\t]*)(?![A-Za-z_][A-Za-z0-9_]*=)([^\\n]*(?:packager|scripts)\\/react-native-xcode\\.sh\\b[^\\n]*)$/m\n\nfunction migrateLegacyPostHogWrapperInvocation(script: string): string {\n return script.replace(`/bin/sh ${POSTHOG_REACT_NATIVE_XCODE_PATH}`, POSTHOG_REACT_NATIVE_XCODE_PATH)\n}\n\n// Rewrites the managed exports on an already-wrapped bundle phase, so changing an option in\n// app.json takes effect without a clean prebuild.\nfunction updatePostHogBundlePhaseExports(\n script: string,\n skipOnConflict: boolean,\n releaseMode?: PostHogReleaseMode\n): string {\n const skipArg = '--posthog-skip-on-conflict --'\n const lines = script\n .replace(new RegExp(`\\\\s*${skipArg}\\\\s*`, 'g'), ' ')\n .split('\\n')\n .filter((line) => line.trim() !== POSTHOG_SKIP_ON_CONFLICT_EXPORT)\n .filter((line) => !line.trim().startsWith(POSTHOG_RELEASE_MODE_EXPORT_PREFIX))\n\n const exports = buildBundlePhaseExports(skipOnConflict, releaseMode)\n if (exports.length > 0) {\n const commandIndex = lines.findIndex((line) => line.includes(POSTHOG_REACT_NATIVE_XCODE_PATH))\n if (commandIndex !== -1) {\n const indent = lines[commandIndex].match(/^[ \\t]*/)?.[0] ?? ''\n lines.splice(commandIndex, 0, ...exports.map((line) => `${indent}${line}`))\n }\n }\n\n return lines.join('\\n')\n}\n\nexport function addPostHogWithBundledScriptsToBundleShellScript(\n script: string,\n skipOnConflict = false,\n releaseMode?: PostHogReleaseMode\n): string {\n // Capture the full RN script invocation. Expo uses a backtick-wrapped\n // node --print command, so matching only up to react-native-xcode.sh cuts the\n // command substitution in half and leaves the generated shell invalid.\n return script.replace(REACT_NATIVE_XCODE_LINE, (_match: string, indent: string, rnCommand: string) => {\n const exports = buildBundlePhaseExports(skipOnConflict, releaseMode)\n .map((line) => `${indent}${line}\\n`)\n .join('')\n return `${exports}${indent}${POSTHOG_REACT_NATIVE_XCODE_PATH} ${rnCommand}`\n })\n}\n\nconst POSTHOG_DSYM_BUILD_PHASE_NAME = 'Upload PostHog Debug Symbols'\nconst POSTHOG_DSYM_INPUT_PATH =\n '\"$(DWARF_DSYM_FOLDER_PATH)/$(DWARF_DSYM_FILE_NAME)/Contents/Resources/DWARF/$(EXECUTABLE_NAME)\"'\n\n// Shell script for the dSYM upload build phase. It locates and runs posthog-ios's\n// upload-symbols.sh (CocoaPods or SwiftPM) rather than re-implementing dSYM upload.\n// `includeSource` (iOS only) opts into POSTHOG_INCLUDE_SOURCE to also upload native source.\nexport function buildDsymUploadShellScript(includeSource = false, skipOnConflict = false): string {\n return composeDsymUploadShellScript(includeSource, skipOnConflict)\n}\n\n// The phase as SDKs without release-mode support wrote it: the same script with no release-mode\n// block. isPluginGeneratedDsymUploadBuildPhase compares against this exact text, so a change here\n// makes the plugin stop recognizing the phases it wrote before, and stop refreshing them.\nfunction composeDsymUploadShellScript(includeSource: boolean, skipOnConflict: boolean): string {\n const lines = [\n '# Upload iOS dSYMs to PostHog so native crashes can be symbolicated.',\n '# upload-symbols.sh ships inside the posthog-ios dependency.',\n ]\n\n if (includeSource) {\n lines.push(\n '# Also upload native source files for source-code context around crashes.',\n 'export POSTHOG_INCLUDE_SOURCE=1'\n )\n }\n\n if (skipOnConflict) {\n lines.push(\n '# Skip dSYMs that already exist in PostHog with different content instead of failing the build.',\n 'export POSTHOG_SKIP_ON_CONFLICT=1'\n )\n }\n\n lines.push(\n 'PODS_SCRIPT=\"${PODS_ROOT}/PostHog/build-tools/upload-symbols.sh\"',\n 'SPM_SCRIPT=\"${BUILD_DIR%/Build/*}/SourcePackages/checkouts/posthog-ios/build-tools/upload-symbols.sh\"',\n 'if [ -f \"$PODS_SCRIPT\" ]; then',\n ' /bin/sh \"$PODS_SCRIPT\"',\n 'elif [ -f \"$SPM_SCRIPT\" ]; then',\n ' /bin/sh \"$SPM_SCRIPT\"',\n 'else',\n ' echo \"warning: PostHog upload-symbols.sh not found in Pods or SwiftPM checkouts; skipping dSYM upload.\"',\n 'fi'\n )\n\n return lines.join('\\n')\n}\n\n// The release-mode block exactly as 4.64.0 through 4.66.x wrote it into the dSYM phase. Its\n// POSTHOG_NO_RELEASE_BIND export still steers the posthog-ios this plugin pins, so a phase carrying\n// the block must stay recognized and get rewritten to the block-free script. Verbatim on purpose.\nfunction legacyDsymReleaseModeLines(releaseMode?: PostHogReleaseMode): string[] {\n return [\n releaseMode\n ? `POSTHOG_RESOLVED_RELEASE_MODE=\"${releaseMode}\"`\n : 'POSTHOG_RESOLVED_RELEASE_MODE=\"${POSTHOG_RELEASE_MODE:-}\"',\n 'case \"$POSTHOG_RESOLVED_RELEASE_MODE\" in',\n ' \"\"|symbol-set) ;;',\n ' event)',\n ' # Upload dSYMs without binding them to a release, so each crash resolves its own from the',\n ' # app version and namespace the SDK sends. posthog-ios versions whose upload-symbols.sh',\n ' # does not read this variable ignore it and keep binding the dSYMs.',\n ' export POSTHOG_NO_RELEASE_BIND=1',\n ' ;;',\n ' *)',\n \" echo \\\"error: posthog release mode must be 'symbol-set' or 'event', was '$POSTHOG_RESOLVED_RELEASE_MODE'\\\"\",\n ' exit 1',\n ' ;;',\n 'esac',\n ]\n}\n\n// The phase as the release-mode era wrote it: the current script with the mode block ahead of the\n// upload lines. Derived from composeDsymUploadShellScript, so the shared lines stay a compatibility\n// contract: a change to them needs the old text kept as a variant, or these phases go unrecognized.\n// The verbatim fixtures in expoconfig.spec.ts hold this derivation to the published 4.66.3 text.\nfunction buildLegacyReleaseModeDsymUploadShellScript(\n includeSource: boolean,\n skipOnConflict: boolean,\n releaseMode?: PostHogReleaseMode\n): string {\n const lines = composeDsymUploadShellScript(includeSource, skipOnConflict).split('\\n')\n const uploadIndex = lines.findIndex((line) => line.startsWith('PODS_SCRIPT='))\n lines.splice(uploadIndex, 0, ...legacyDsymReleaseModeLines(releaseMode))\n return lines.join('\\n')\n}\n\n// xcode's addBuildPhase stores shellScript quote-escaped with literal newlines; in-place\n// refreshes must match or the stored pbxproj representation churns.\nfunction encodePbxShellScript(script: string): string {\n return '\"' + script.replace(/\"/g, '\\\\\"') + '\"'\n}\n\n// Undoes any quoted pbxproj encoding of shellScript. Handles both the literal-newline\n// form xcode's addBuildPhase writes and the \\n-escaped form Xcode itself writes, so a\n// pristine phase is recognized regardless of which tool last serialized the project.\nfunction decodePbxShellScript(stored: string): string {\n if (!stored.startsWith('\"') || !stored.endsWith('\"')) {\n return stored\n }\n return stored.slice(1, -1).replace(/\\\\(.)/g, (_match, ch) => (ch === 'n' ? '\\n' : ch === 't' ? '\\t' : ch))\n}\n\nfunction isPluginGeneratedDsymUploadBuildPhase(phase: any): boolean {\n if (typeof phase?.shellScript !== 'string') {\n return false\n }\n const stored = decodePbxShellScript(phase.shellScript)\n return [false, true].some((source) =>\n [false, true].some(\n (skip) =>\n stored === buildDsymUploadShellScript(source, skip) ||\n [undefined, ...POSTHOG_RELEASE_MODES].some(\n (mode) => stored === buildLegacyReleaseModeDsymUploadShellScript(source, skip, mode)\n )\n )\n )\n}\n\nexport function moveDsymUploadBuildPhaseToEnd(xcodeProject: any): void {\n const existing = xcodeProject.pbxItemByComment(POSTHOG_DSYM_BUILD_PHASE_NAME, 'PBXShellScriptBuildPhase')\n if (!isPluginGeneratedDsymUploadBuildPhase(existing)) {\n return\n }\n\n const buildPhases = xcodeProject.getFirstTarget?.().firstTarget?.buildPhases\n if (Array.isArray(buildPhases)) {\n const phaseIndex = buildPhases.findIndex((phase: any) => phase.comment === POSTHOG_DSYM_BUILD_PHASE_NAME)\n if (phaseIndex !== -1 && phaseIndex !== buildPhases.length - 1) {\n buildPhases.push(...buildPhases.splice(phaseIndex, 1))\n }\n }\n}\n\n// Keeps the upload phase last and declares the main DWARF as an input, matching the native iOS\n// setup guide. Both are required: the input makes Xcode wait for dSYM generation, while placing\n// the phase after extension embedding avoids dependency cycles in apps with app extensions.\n// Re-runs refresh only a still-plugin-generated phase, also one an older SDK wrote, so user\n// customizations remain untouched.\nexport function addDsymUploadBuildPhase(xcodeProject: any, includeSource = false, skipOnConflict = false): void {\n const existing = xcodeProject.pbxItemByComment(POSTHOG_DSYM_BUILD_PHASE_NAME, 'PBXShellScriptBuildPhase')\n if (existing) {\n if (isPluginGeneratedDsymUploadBuildPhase(existing)) {\n existing.shellScript = encodePbxShellScript(buildDsymUploadShellScript(includeSource, skipOnConflict))\n existing.inputPaths = Array.from(\n new Set([...(Array.isArray(existing.inputPaths) ? existing.inputPaths : []), POSTHOG_DSYM_INPUT_PATH])\n )\n }\n } else {\n xcodeProject.addBuildPhase([], 'PBXShellScriptBuildPhase', POSTHOG_DSYM_BUILD_PHASE_NAME, null, {\n inputPaths: [POSTHOG_DSYM_INPUT_PATH],\n shellPath: '/bin/sh',\n shellScript: buildDsymUploadShellScript(includeSource, skipOnConflict),\n })\n }\n\n moveDsymUploadBuildPhaseToEnd(xcodeProject)\n}\n\nexport function disableUserScriptSandboxing(xcodeProject: any): void {\n // posthog-cli reads .git/ for release auto-detection, which the Xcode 14+ user script\n // sandbox blocks. Applies to all configs in the main app's .xcodeproj (Pods project is\n // separate and untouched).\n const configurations = xcodeProject.pbxXCBuildConfigurationSection()\n for (const key in configurations) {\n const configuration = configurations[key]\n if (configuration && configuration.buildSettings) {\n configuration.buildSettings.ENABLE_USER_SCRIPT_SANDBOXING = '\"NO\"'\n }\n }\n}\n\nconst POSTHOG_DOTENV_BUILD_SETTING = 'POSTHOG_CLI_DOTENV_FILE'\nconst POSTHOG_DOTENV_GRADLE_PROPERTY = 'posthog.dotenvFile'\n\n// Strips a leading ./ so relative props join cleanly onto their per-platform prefix.\nfunction normalizeDotenvFileProp(dotenvFile: string): string {\n return dotenvFile.replace(/^\\.\\//, '')\n}\n\n// Empty/whitespace-only values (easy to produce from templated app.config values)\n// count as unset — mirrors the trim guard in posthog.gradle.\nexport function resolveDotenvFileProp(dotenvFile?: string): string | undefined {\n const trimmed = dotenvFile?.trim()\n return trimmed ? trimmed : undefined\n}\n\n// Posix root or a Windows drive prefix — enough without pulling in `path`,\n// whose isAbsolute is platform-bound while prebuild can run anywhere.\nfunction isAbsoluteDotenvPath(dotenvFile: string): boolean {\n return dotenvFile.startsWith('/') || /^[A-Za-z]:[\\\\/]/.test(dotenvFile)\n}\n\n// pbxproj stores build-setting values quoted; escape so paths with quotes or\n// backslashes survive serialization. $(SRCROOT) is the generated ios/ dir, so\n// project-root-relative props live one level up.\nexport function buildIosDotenvFileBuildSetting(dotenvFile: string): string {\n const value = isAbsoluteDotenvPath(dotenvFile) ? dotenvFile : `$(SRCROOT)/../${normalizeDotenvFileProp(dotenvFile)}`\n return '\"' + value.replace(/([\"\\\\])/g, '\\\\$1') + '\"'\n}\n\n// Xcode exports build settings as env vars to every Run Script phase, so one\n// setting feeds both the bundle-phase hermes upload and the dSYM upload phase;\n// posthog-cli (>= 0.8.4) reads POSTHOG_CLI_DOTENV_FILE itself, no script\n// changes needed. Removing the prop removes the setting again so changes take\n// effect without a clean prebuild.\nexport function applyDotenvFileBuildSetting(xcodeProject: any, dotenvFile?: string): void {\n const configurations = xcodeProject.pbxXCBuildConfigurationSection()\n for (const key in configurations) {\n const configuration = configurations[key]\n if (configuration && configuration.buildSettings) {\n if (dotenvFile) {\n configuration.buildSettings[POSTHOG_DOTENV_BUILD_SETTING] = buildIosDotenvFileBuildSetting(dotenvFile)\n } else {\n delete configuration.buildSettings[POSTHOG_DOTENV_BUILD_SETTING]\n }\n }\n }\n}\n\ntype GradlePropertiesItem = { type: string; key?: string; value?: string }\n\n// gradle.properties lives in android/, so a project-root-relative prop becomes ../<path>.\nexport function buildAndroidDotenvFileGradleValue(dotenvFile: string): string {\n return isAbsoluteDotenvPath(dotenvFile) ? dotenvFile : `../${normalizeDotenvFileProp(dotenvFile)}`\n}\n\n// Managed posthog.dotenvFile entry in android/gradle.properties, consumed by\n// both gradle hooks (the SDK's posthog.gradle hermes upload and the\n// com.posthog.android mapping upload). Added when the prop is set, removed\n// when it isn't.\nexport function updateDotenvFileGradleProperties(\n properties: GradlePropertiesItem[],\n dotenvFile?: string\n): GradlePropertiesItem[] {\n const rest = properties.filter((item) => !(item.type === 'property' && item.key === POSTHOG_DOTENV_GRADLE_PROPERTY))\n if (!dotenvFile) {\n return rest\n }\n rest.push({\n type: 'property',\n key: POSTHOG_DOTENV_GRADLE_PROPERTY,\n value: buildAndroidDotenvFileGradleValue(dotenvFile),\n })\n return rest\n}\n\n// Managed posthog.hermesReleaseMode entry in android/gradle.properties, read by the SDK's\n// posthog.gradle hermes upload. The key is deliberately not posthog.releaseMode:\n// com.posthog.android below 1.6.0 reads that one for the R8 mapping upload, and the mode must not\n// reach it. A posthog.releaseMode entry is deprecated user-owned config, so the prebuild leaves it\n// alone. posthog.gradle reads it as a fallback with a warning, and com.posthog.android 1.6.0\n// warns about it and ignores it.\nexport function updateHermesReleaseModeGradleProperties(\n properties: GradlePropertiesItem[],\n releaseMode?: PostHogReleaseMode\n): GradlePropertiesItem[] {\n const rest = properties.filter(\n (item) => !(item.type === 'property' && item.key === POSTHOG_HERMES_RELEASE_MODE_GRADLE_PROPERTY)\n )\n if (!releaseMode) {\n return rest\n }\n rest.push({ type: 'property', key: POSTHOG_HERMES_RELEASE_MODE_GRADLE_PROPERTY, value: releaseMode })\n return rest\n}\n\nconst withPostHogGradleProperties = (config: any, dotenvFile?: string, releaseMode?: PostHogReleaseMode) => {\n return withGradleProperties(config, (config: any) => {\n config.modResults = updateDotenvFileGradleProperties(config.modResults, dotenvFile)\n config.modResults = updateHermesReleaseModeGradleProperties(config.modResults, releaseMode)\n return config\n })\n}\n\ntype PostHogPluginProps = {\n /**\n * Whether to disable Xcode's user script sandboxing (ENABLE_USER_SCRIPT_SANDBOXING=NO).\n *\n * posthog-cli reads .git/ during sourcemap uploads for release auto-detection;\n * sandboxing (on by default in Xcode 14+) blocks that, so uploads lose git info\n * or fail silently.\n *\n * Default: true (disable sandboxing so uploads \"just work\").\n * Set to false if your org requires sandboxing stays on —\n * you'll lose automatic git metadata on sourcemap uploads on iOS builds only.\n *\n * Note that this setting is recommended in the Expo docs:\n * https://docs.expo.dev/brownfield/integrated-approach/#configuring-your-xcode-project\n */\n disableSandboxing?: boolean\n\n /**\n * Whether to upload native debug symbols so native crashes can be symbolicated.\n *\n * When enabled, the plugin wires the native symbol-upload tooling that the\n * native PostHog SDKs already ship:\n * - iOS: a build phase that runs posthog-ios's `upload-symbols.sh`\n * (`posthog-cli dsym upload`).\n * - Android: the official `com.posthog.android` Gradle plugin, which uploads\n * ProGuard/R8 mapping files and injects the matching map-id into the app.\n *\n * Pass `{ includeSource: true }` to also upload native source files so PostHog\n * can show source-code context around native crashes. This is **iOS only** —\n * the Android proguard upload has no source-inclusion equivalent, so the flag\n * is ignored there. Note it uploads your source code to PostHog, hence opt-in.\n *\n * Default: false. Pair this with `errorTracking.autocapture.nativeCrashes` at\n * runtime — without uploaded symbols, native stack traces won't be symbolicated.\n * Requires `posthog-cli` to be available and authenticated during release builds.\n */\n uploadNativeSymbols?: boolean | { includeSource?: boolean }\n\n /**\n * Whether to skip uploads whose content already exists in PostHog instead of failing the build.\n *\n * Appends `--skip-on-conflict` to `posthog-cli hermes upload` on iOS and Android. When\n * `uploadNativeSymbols` is enabled, also sets `POSTHOG_SKIP_ON_CONFLICT=1` in the iOS dSYM\n * upload build phase; posthog-ios's `upload-symbols.sh` forwards it as `--skip-on-conflict`\n * to `posthog-cli dsym upload` on posthog-ios >= 3.64.7 (with posthog-cli >= 0.7.12) and\n * ignores it on older versions, where dSYM conflicts keep failing the build.\n *\n * Default: false.\n */\n skipOnConflict?: boolean\n\n /**\n * Path to a dotenv file with POSTHOG_CLI_* credentials (API key, project id,\n * optional host), relative to the project root — or absolute.\n *\n * The path reaches every upload hook as POSTHOG_CLI_DOTENV_FILE: on iOS as a\n * build setting (Xcode exports it to the bundle and dSYM script phases), on\n * Android as a `posthog.dotenvFile` entry in android/gradle.properties read\n * by the SDK's `posthog.gradle` hermes upload and, on gradle plugin >= 1.4.0,\n * by the `com.posthog.android` mapping upload. Process env always wins inside\n * the CLI; a missing file is a warning, not a build failure.\n *\n * Requires posthog-cli >= 0.8.4 — older CLIs ignore the variable and fall\n * back to their other credential sources. With `disableSandboxing: false`,\n * Xcode's script sandbox can block reading the file, which is a hard CLI\n * error (an unreadable-but-present file does not fall through).\n */\n dotenvFile?: string\n\n /**\n * How the release a build belongs to gets associated with the exceptions it reports.\n *\n * This steers the Hermes source map upload only. iOS dSYMs and Android R8 mappings always bind to\n * the release their build creates. The R8 half of that needs the `com.posthog.android` gradle\n * plugin 1.6.0, which ignores the deprecated `posthog.releaseMode` key. A fresh prebuild injects\n * that version, but a project whose android/build.gradle already carries an older classpath line\n * keeps it: bump the line by hand or prebuild with `--clean`.\n *\n * `event` (the default; still EXPERIMENTAL while the rollout settles) uploads the maps\n * release-independent, and each event resolves its own release from the `$app_namespace` /\n * `$app_version` / `$app_build` the SDK sends. Use it when two releases can ship identical\n * JavaScript: the map id comes from content, so in `symbol-set` mode both releases report\n * whichever one uploaded first.\n *\n * Event mode's release link depends on those coordinates reaching each exception. The SDK reads\n * them from the optional `expo-application` or `react-native-device-info` module, and a plain\n * `customAppProperties` object replaces the defaults rather than merging. An install with neither\n * module — or a `customAppProperties` that drops the keys — still symbolicates, but its JavaScript\n * exceptions carry no release. Keep a metadata module (or those keys) to attribute event-mode\n * exceptions to a release; `symbol-set` instead stamps the release onto the uploaded maps from the\n * build settings and does not need them.\n *\n * When this prop is absent, the prebuild reads `POSTHOG_RELEASE_MODE`; set the variable before\n * you run the prebuild. A configured mode is written into the build files and beats the variable\n * at build time. With neither configured, the prebuild writes nothing, the build scripts apply\n * the `event` default at build time, and `POSTHOG_RELEASE_MODE` also still works there.\n *\n * Event mode needs posthog-cli >= 0.16.0, which carries `--release-mode` on the `hermes`\n * commands. A configured `event` fails the build on an older one and names the upgrade. The\n * unconfigured default softens instead: the build warns and uploads the maps bound to the\n * release, as it did before the default changed. That floor lives in posthog-xcode.sh and\n * posthog.gradle: update them and this line together.\n */\n releaseMode?: PostHogReleaseMode\n\n /**\n * Whether to give Android's `MainActivity` an `onNewIntent` override that calls\n * `setIntent(intent)` before delegating to React Native.\n *\n * Works around a React Native defect. When Android reopens an app whose process it had killed\n * while the task stayed in recents, the tap arrives before the React context is ready and is then\n * invisible to the whole process — PostHog captures no `$push_notification_opened`, Firebase\n * Messaging's `getInitialNotification()` returns null, and deep links are lost. Recording the\n * intent first makes `getIntent()` correct for every library in the app.\n *\n * Default: true. The plugin leaves a `MainActivity` that already overrides `onNewIntent`\n * untouched and warns instead — add `setIntent(intent)` as the first statement of your own\n * override. Set to false to skip the injection entirely (and remove one a previous prebuild\n * wrote); bare React Native apps that do not run `expo prebuild` need the same override by hand.\n */\n patchMainActivityNewIntent?: boolean\n}\n\n// Normalizes the uploadNativeSymbols prop (boolean | { includeSource }) into a\n// flat shape. `includeSource` is iOS-only and ignored on Android.\nexport function resolveNativeSymbolUpload(prop: PostHogPluginProps['uploadNativeSymbols']): {\n enabled: boolean\n includeSource: boolean\n} {\n if (prop === true) {\n return { enabled: true, includeSource: false }\n }\n if (prop && typeof prop === 'object') {\n return { enabled: true, includeSource: prop.includeSource === true }\n }\n return { enabled: false, includeSource: false }\n}\n\n// Expo's standard mods run their action before the previously registered action. This wrapper\n// deliberately runs its action after the rest of the Xcode mod chain, so later config plugins\n// cannot leave a newly created extension-embedding phase after the PostHog upload phase.\nconst withFinalizedXcodeProject = (config: any, action: (config: any) => any) => {\n return withBaseMod(config, {\n platform: 'ios',\n mod: 'xcodeproj',\n async action(config: any) {\n const { nextMod, ...modRequest } = config.modRequest\n const results = await nextMod({ ...config, modRequest })\n return action(results)\n },\n })\n}\n\nconst withIosPlugin = (config: any, props: PostHogPluginProps = {}) => {\n const nativeSymbols = resolveNativeSymbolUpload(props.uploadNativeSymbols)\n\n config = withXcodeProject(config, (config: any) => {\n const xcodeProject = config.modResults\n\n const bundleReactNativePhase = xcodeProject.pbxItemByComment(\n 'Bundle React Native code and images',\n 'PBXShellScriptBuildPhase'\n )\n\n modifyExistingXcodeBuildScript(bundleReactNativePhase, props.skipOnConflict === true, props.releaseMode)\n\n if (nativeSymbols.enabled) {\n addDsymUploadBuildPhase(xcodeProject, nativeSymbols.includeSource, props.skipOnConflict === true)\n }\n\n applyDotenvFileBuildSetting(xcodeProject, props.dotenvFile)\n\n if (props.disableSandboxing !== false) {\n disableUserScriptSandboxing(xcodeProject)\n console.warn(\n '[posthog-react-native] Setting ENABLE_USER_SCRIPT_SANDBOXING=NO on all Xcode ' +\n 'build configurations so sourcemap uploads can resolve git metadata. ' +\n 'If your org requires sandboxing to stay enabled, set `{ disableSandboxing: false }` ' +\n 'on the plugin in app.json — note that stock Expo projects may fail to build under ' +\n 'sandboxing until every script build phase declares its input/output files.'\n )\n }\n\n return config\n })\n\n if (nativeSymbols.enabled) {\n config = withFinalizedXcodeProject(config, (config: any) => {\n moveDsymUploadBuildPhaseToEnd(config.modResults)\n return config\n })\n }\n\n return config\n}\n\nconst withPostHogPlugin = (config: any, rawProps: PostHogPluginProps = {}) => {\n const props = {\n ...rawProps,\n dotenvFile: resolveDotenvFileProp(rawProps.dotenvFile),\n releaseMode: resolveReleaseModeProp(rawProps.releaseMode, process.env.POSTHOG_RELEASE_MODE),\n }\n // includeSource is iOS-only, so on Android we only care whether upload is enabled.\n if (resolveNativeSymbolUpload(props.uploadNativeSymbols).enabled) {\n config = withAndroidNativeSymbolsPlugin(config)\n }\n config = withAndroidPlugin(config, props.skipOnConflict === true)\n // Runs unconditionally so removing the prop also removes the managed entry.\n config = withPostHogGradleProperties(config, props.dotenvFile, props.releaseMode)\n config = withMainActivityNewIntent(config, props.patchMainActivityNewIntent !== false)\n return withIosPlugin(config, props)\n}\n\nconst postHogPlugin = (config: any, props: PostHogPluginProps = {}): any => {\n return withPostHogPlugin(config, props)\n}\n\n// Re-export the plugin function as the default export while keeping the\n// named exports above callable from tests.\nmodule.exports = postHogPlugin\nmodule.exports.modifyExistingXcodeBuildScript = modifyExistingXcodeBuildScript\nmodule.exports.addPostHogWithBundledScriptsToBundleShellScript = addPostHogWithBundledScriptsToBundleShellScript\nmodule.exports.disableUserScriptSandboxing = disableUserScriptSandboxing\nmodule.exports.buildDsymUploadShellScript = buildDsymUploadShellScript\nmodule.exports.addDsymUploadBuildPhase = addDsymUploadBuildPhase\nmodule.exports.moveDsymUploadBuildPhaseToEnd = moveDsymUploadBuildPhaseToEnd\nmodule.exports.resolveNativeSymbolUpload = resolveNativeSymbolUpload\nmodule.exports.buildAndroidSkipOnConflictGradleLine = buildAndroidSkipOnConflictGradleLine\nmodule.exports.addPostHogAndroidGradlePluginClasspath = addPostHogAndroidGradlePluginClasspath\nmodule.exports.applyPostHogAndroidGradlePlugin = applyPostHogAndroidGradlePlugin\nmodule.exports.buildIosDotenvFileBuildSetting = buildIosDotenvFileBuildSetting\nmodule.exports.applyDotenvFileBuildSetting = applyDotenvFileBuildSetting\nmodule.exports.resolveDotenvFileProp = resolveDotenvFileProp\nmodule.exports.buildAndroidDotenvFileGradleValue = buildAndroidDotenvFileGradleValue\nmodule.exports.updateDotenvFileGradleProperties = updateDotenvFileGradleProperties\nmodule.exports.POSTHOG_RELEASE_MODES = POSTHOG_RELEASE_MODES\nmodule.exports.resolveReleaseModeProp = resolveReleaseModeProp\nmodule.exports.updateHermesReleaseModeGradleProperties = updateHermesReleaseModeGradleProperties\nmodule.exports.updateMainActivityNewIntentOverride = updateMainActivityNewIntentOverride\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"expoconfig.js","names":["fs","require","path","_require","AndroidConfig","withAppBuildGradle","withBaseMod","withDangerousMod","withGradleProperties","withXcodeProject","POSTHOG_ANDROID_GRADLE_PLUGIN_VERSION","resolvePostHogReactNativePackageJsonPath","POSTHOG_ANDROID_SKIP_ON_CONFLICT_PROPERTY","POSTHOG_HERMES_RELEASE_MODE_GRADLE_PROPERTY","POSTHOG_RELEASE_MODES","exports","resolveReleaseModeProp","releaseMode","environmentMode","trimmed","trim","undefined","includes","Error","concat","join","buildAndroidSkipOnConflictGradleLine","skipOnConflict","withAndroidPlugin","config","arguments","length","modResults","language","console","warn","buildGradle","contents","applyFrom","skipOnConflictLine","applyBlock","skipOnConflictPattern","RegExp","replace","pattern","match","matchingBraceIndex","s","openBraceIndex","depth","i","addPostHogAndroidGradlePluginClasspath","projectBuildGradle","classpathPresent","classpathLine","buildscriptMatch","exec","buildscriptOpenBrace","index","buildscriptEnd","buildscriptBody","slice","dependenciesMatch","insertAt","applyPostHogAndroidGradlePlugin","appBuildGradle","test","applyLine","appPluginPattern","androidBlockPattern","withFinalizedProjectBuildGradle","action","platform","mod","skipEmptyMod","_asyncToGenerator2","_regenerator","mark","_callee","_config$modRequest","nextMod","modRequest","results","wrap","_context","prev","next","_objectWithoutProperties2","_excluded","_objectSpread","sent","abrupt","stop","withAndroidNativeSymbolsPlugin","_ref","_callee2","result","_context2","promises","writeFile","Paths","getAppBuildGradleAsync","projectRoot","_x","apply","POSTHOG_NEW_INTENT_MARKER","POSTHOG_NEW_INTENT_BEGIN","POSTHOG_NEW_INTENT_END","NEW_INTENT_DOC","NEW_INTENT_KOTLIN_BODY","NEW_INTENT_JAVA_BODY","newIntentOverrideBlock","body","escapeRegExp","value","POSTHOG_NEW_INTENT_BLOCK_PATTERN","literalEnd","start","quote","raw","startsWith","c","close","matchingBraceIndexInSource","end","indexOf","depthOfComment","maskCommentsAndLiterals","source","out","split","blank","from","to","j","mainActivityBody","code","declaration","searchFrom","open","updateMainActivityNewIntentOverride","enabled","withoutManagedBlock","codeOnly","MAIN_ACTIVITY_SOURCE_ROOTS","findMainActivityPath","walk","dir","existsSync","_iterator","_createForOfIteratorHelper","readdirSync","withFileTypes","_step","n","done","entry","candidate","name","isDirectory","hit","err","e","f","_i","_MAIN_ACTIVITY_SOURCE","sourceRoot","withMainActivityNewIntent","_ref2","_callee3","mainActivityPath","updated","_context3","readFile","endsWith","relative","_x2","modifyExistingXcodeBuildScript","script","shellScript","migrateLegacyPostHogWrapperInvocation","JSON","parse","stringify","updatePostHogBundlePhaseExports","addPostHogWithBundledScriptsToBundleShellScript","POSTHOG_REACT_NATIVE_XCODE_PATH","POSTHOG_SKIP_ON_CONFLICT_EXPORT","POSTHOG_RELEASE_MODE_EXPORT_PREFIX","buildBundlePhaseExports","push","REACT_NATIVE_XCODE_LINE","skipArg","lines","filter","line","commandIndex","findIndex","indent","_b","_a","splice","_toConsumableArray2","map","_match","rnCommand","POSTHOG_DSYM_BUILD_PHASE_NAME","POSTHOG_DSYM_INPUT_PATH","buildDsymUploadShellScript","includeSource","composeDsymUploadShellScript","legacyDsymReleaseModeLines","buildLegacyReleaseModeDsymUploadShellScript","uploadIndex","encodePbxShellScript","decodePbxShellScript","stored","ch","isPluginGeneratedDsymUploadBuildPhase","phase","some","skip","mode","moveDsymUploadBuildPhaseToEnd","xcodeProject","existing","pbxItemByComment","buildPhases","getFirstTarget","call","firstTarget","Array","isArray","phaseIndex","comment","addDsymUploadBuildPhase","inputPaths","Set","addBuildPhase","shellPath","disableUserScriptSandboxing","configurations","pbxXCBuildConfigurationSection","key","configuration","buildSettings","ENABLE_USER_SCRIPT_SANDBOXING","POSTHOG_DOTENV_BUILD_SETTING","POSTHOG_DOTENV_GRADLE_PROPERTY","normalizeDotenvFileProp","dotenvFile","resolveDotenvFileProp","isAbsoluteDotenvPath","buildIosDotenvFileBuildSetting","applyDotenvFileBuildSetting","buildAndroidDotenvFileGradleValue","updateDotenvFileGradleProperties","properties","rest","item","type","updateHermesReleaseModeGradleProperties","withPostHogGradleProperties","resolveNativeSymbolUpload","prop","_typeof2","withFinalizedXcodeProject","_callee4","_config$modRequest2","_context4","_excluded2","withIosPlugin","props","nativeSymbols","uploadNativeSymbols","bundleReactNativePhase","disableSandboxing","withPostHogPlugin","rawProps","process","env","POSTHOG_RELEASE_MODE","patchMainActivityNewIntent","postHogPlugin","module"],"sources":["../../src/tooling/expoconfig.ts"],"sourcesContent":["// Portions of this file are derived from getsentry/sentry-react-native\n// Copyright (c) 2017 Sentry\n// Licensed under the MIT License: https://github.com/getsentry/sentry-react-native/blob/main/LICENSE.md\n\nconst fs = require('fs')\nconst path = require('path')\n\nconst {\n AndroidConfig,\n withAppBuildGradle,\n withBaseMod,\n withDangerousMod,\n withGradleProperties,\n withXcodeProject,\n} = require('@expo/config-plugins')\n\n// com.posthog.android uploads R8 mapping files and injects a matching map-id so native\n// crash stack traces can be deobfuscated. The injected version has to read every gradle\n// property the plugin writes, or that half of the build ignores the option: 1.4.0 is the first\n// version that reads posthog.dotenvFile. 1.6.0 is the first version that ignores\n// posthog.releaseMode with a deprecation warning, so the R8 mapping always binds to the release.\nconst POSTHOG_ANDROID_GRADLE_PLUGIN_VERSION = '1.6.0'\n\nconst resolvePostHogReactNativePackageJsonPath =\n \"[\\\"node\\\", \\\"--print\\\", \\\"require('path').join(require('path').dirname(require.resolve('posthog-react-native')), '..', 'tooling', 'posthog.gradle')\\\"].execute().text.trim()\"\n\nconst POSTHOG_ANDROID_SKIP_ON_CONFLICT_PROPERTY = 'posthogReactNativeSkipOnConflict'\n\nconst POSTHOG_HERMES_RELEASE_MODE_GRADLE_PROPERTY = 'posthog.hermesReleaseMode'\n\n/**\n * How the release a build belongs to gets associated with the exceptions it reports. This steers\n * the Hermes source map upload only. iOS dSYMs and Android R8 mappings always bind to the release\n * their build creates.\n *\n * `event`, the default, uploads the maps release-independent and lets each event resolve its own\n * release from the app version and namespace the SDK already sends. `symbol-set` stamps the release\n * onto the uploaded maps instead, and an exception inherits the release of the maps its frames\n * resolved against.\n */\nexport type PostHogReleaseMode = 'symbol-set' | 'event'\n\n// Exported so a test can hold the copies in posthog-xcode.sh, posthog.gradle and the generated\n// dSYM phase to this list, because nothing else fails when they drift.\nexport const POSTHOG_RELEASE_MODES: PostHogReleaseMode[] = ['symbol-set', 'event']\n\n// Empty/whitespace-only values (easy to produce from templated app.config values) count as unset\n// and fall through to the next source. A configured mode is written into the bundle phase, and that\n// beats POSTHOG_RELEASE_MODE at build time, so this reads the variable rather than leaving an Expo\n// build with no way to opt out. Undefined means nothing configured a mode: the prebuild then writes\n// nothing, and the build scripts apply the event default themselves, which they can soften to a\n// bound upload when the installed posthog-cli predates the flag. An unrecognized value stops the\n// prebuild rather than falling back, so a typo cannot silently leave a build binding its maps to a\n// release it meant to keep independent.\nexport function resolveReleaseModeProp(releaseMode?: string, environmentMode?: string): PostHogReleaseMode | undefined {\n const trimmed = releaseMode?.trim() || environmentMode?.trim()\n if (!trimmed) {\n return undefined\n }\n if (!POSTHOG_RELEASE_MODES.includes(trimmed as PostHogReleaseMode)) {\n throw new Error(\n `[posthog-react-native] releaseMode must be one of ${POSTHOG_RELEASE_MODES.join(', ')}, was '${trimmed}'`\n )\n }\n return trimmed as PostHogReleaseMode\n}\n\nexport function buildAndroidSkipOnConflictGradleLine(skipOnConflict: boolean): string | null {\n if (!skipOnConflict) {\n return null\n }\n return `project.ext.${POSTHOG_ANDROID_SKIP_ON_CONFLICT_PROPERTY} = true`\n}\n\nconst withAndroidPlugin = (config: any, skipOnConflict = false) => {\n return withAppBuildGradle(config, (config: any) => {\n if (config.modResults.language !== 'groovy') {\n console.warn('Cannot configure PostHog in the app gradle because the build.gradle is not groovy')\n }\n\n const buildGradle = config.modResults.contents\n const applyFrom = `apply from: new File(${resolvePostHogReactNativePackageJsonPath})`\n const skipOnConflictLine = buildAndroidSkipOnConflictGradleLine(skipOnConflict)\n const applyBlock = skipOnConflictLine ? `${skipOnConflictLine}\\n${applyFrom}` : applyFrom\n const skipOnConflictPattern = new RegExp(\n `^project\\\\.ext\\\\.${POSTHOG_ANDROID_SKIP_ON_CONFLICT_PROPERTY}\\\\s*=\\\\s*(true|false)\\\\n?`,\n 'm'\n )\n\n if (buildGradle.includes(applyFrom)) {\n let contents = buildGradle.replace(skipOnConflictPattern, '')\n if (skipOnConflictLine) {\n contents = contents.replace(applyFrom, `${skipOnConflictLine}\\n${applyFrom}`)\n }\n config.modResults.contents = contents\n return config\n }\n\n // Find the 'android {' block and insert the line directly above it\n const pattern = /^android\\s*\\{/m\n\n if (buildGradle.match(pattern)) {\n config.modResults.contents = buildGradle.replace(pattern, `${applyBlock}\\n\\nandroid {`)\n } else {\n console.warn('PostHog: Could not find \"android {\" block in build.gradle')\n }\n\n return config\n })\n}\n\n// Index of the `}` matching the `{` at openBraceIndex, or -1 if unbalanced. Manual scan\n// (not regex) to avoid ReDoS; counts all braces, fine for the generated gradle we target.\nfunction matchingBraceIndex(s: string, openBraceIndex: number): number {\n let depth = 0\n for (let i = openBraceIndex; i < s.length; i++) {\n if (s[i] === '{') {\n depth++\n } else if (s[i] === '}') {\n depth--\n if (depth === 0) {\n return i\n }\n }\n }\n return -1\n}\n\n// Published to Maven Central (not the Gradle Plugin Portal), so we use the legacy buildscript\n// classpath + apply route. Idempotent. `classpathPresent` tells the caller to only `apply\n// plugin` when the classpath is in the file, else the build can't resolve it.\nexport function addPostHogAndroidGradlePluginClasspath(projectBuildGradle: string): {\n contents: string\n classpathPresent: boolean\n} {\n if (projectBuildGradle.includes('posthog-android-gradle-plugin')) {\n return { contents: projectBuildGradle, classpathPresent: true }\n }\n\n const classpathLine = ` classpath(\"com.posthog:posthog-android-gradle-plugin:${POSTHOG_ANDROID_GRADLE_PLUGIN_VERSION}\")`\n\n // First `dependencies {` inside the `buildscript {}` block. Bounding to the buildscript body\n // avoids a backtracking regex (ReDoS) and mis-placing into a later block (e.g. allprojects).\n const buildscriptMatch = /buildscript\\s*\\{/.exec(projectBuildGradle)\n const buildscriptOpenBrace = buildscriptMatch ? buildscriptMatch.index + buildscriptMatch[0].length - 1 : -1\n const buildscriptEnd = buildscriptOpenBrace === -1 ? -1 : matchingBraceIndex(projectBuildGradle, buildscriptOpenBrace)\n const buildscriptBody = buildscriptEnd === -1 ? '' : projectBuildGradle.slice(buildscriptOpenBrace, buildscriptEnd)\n const dependenciesMatch = buildscriptBody ? /dependencies\\s*\\{/.exec(buildscriptBody) : null\n\n if (!dependenciesMatch) {\n console.warn(\n 'PostHog: Could not find a buildscript dependencies block in the project build.gradle; ' +\n 'skipping the com.posthog.android classpath. Native symbols will not be uploaded.'\n )\n return { contents: projectBuildGradle, classpathPresent: false }\n }\n\n const insertAt = buildscriptOpenBrace + dependenciesMatch.index + dependenciesMatch[0].length\n return {\n contents: `${projectBuildGradle.slice(0, insertAt)}\\n${classpathLine}${projectBuildGradle.slice(insertAt)}`,\n classpathPresent: true,\n }\n}\n\n// Applies the com.posthog.android plugin in the app module. Idempotent.\nexport function applyPostHogAndroidGradlePlugin(appBuildGradle: string): string {\n if (/apply plugin: [\"']com\\.posthog\\.android[\"']/.test(appBuildGradle)) {\n return appBuildGradle\n }\n\n const applyLine = 'apply plugin: \"com.posthog.android\"'\n\n // Apply right after com.android.application so the plugin can hook AGP variants.\n const appPluginPattern = /^([ \\t]*apply plugin: [\"']com\\.android\\.application[\"'].*)$/m\n if (appPluginPattern.test(appBuildGradle)) {\n return appBuildGradle.replace(appPluginPattern, `$1\\n${applyLine}`)\n }\n\n // Fallback: insert directly above the android { } block.\n const androidBlockPattern = /^android\\s*\\{/m\n if (androidBlockPattern.test(appBuildGradle)) {\n return appBuildGradle.replace(androidBlockPattern, `${applyLine}\\n\\nandroid {`)\n }\n\n console.warn('PostHog: Could not find where to apply com.posthog.android in the app build.gradle')\n return appBuildGradle\n}\n\n// Expo's standard mods run their action before the previously registered action. This wrapper\n// deliberately runs its action after the rest of the project Gradle mod chain, so it can safely\n// coordinate the project classpath and app plugin edits without relying on mod-key order.\nconst withFinalizedProjectBuildGradle = (config: any, action: (config: any) => any) => {\n return withBaseMod(config, {\n platform: 'android',\n mod: 'projectBuildGradle',\n skipEmptyMod: false,\n async action(config: any) {\n const { nextMod, ...modRequest } = config.modRequest\n const results = await nextMod({ ...config, modRequest })\n return action(results)\n },\n })\n}\n\nconst withAndroidNativeSymbolsPlugin = (config: any) => {\n return withFinalizedProjectBuildGradle(config, async (config: any) => {\n if (config.modResults.language !== 'groovy') {\n console.warn('Cannot configure the PostHog Android Gradle plugin because the project build.gradle is not groovy')\n return config\n }\n\n const result = addPostHogAndroidGradlePluginClasspath(config.modResults.contents)\n if (result.contents !== config.modResults.contents) {\n // Persist the classpath before applying the app plugin so a failed second write cannot\n // leave an apply line without its matching classpath.\n await fs.promises.writeFile(config.modResults.path, result.contents)\n config.modResults.contents = result.contents\n }\n if (!result.classpathPresent) {\n // No classpath (or no buildscript dependencies block) → applying would break the build.\n return config\n }\n\n const appBuildGradle = await AndroidConfig.Paths.getAppBuildGradleAsync(config.modRequest.projectRoot)\n if (appBuildGradle.language !== 'groovy') {\n console.warn('Cannot configure the PostHog Android Gradle plugin because the app build.gradle is not groovy')\n return config\n }\n\n const contents = applyPostHogAndroidGradlePlugin(appBuildGradle.contents)\n if (contents !== appBuildGradle.contents) {\n await fs.promises.writeFile(appBuildGradle.path, contents)\n }\n return config\n })\n}\n\nconst POSTHOG_NEW_INTENT_MARKER = 'posthog-new-intent'\nconst POSTHOG_NEW_INTENT_BEGIN = `// @generated begin ${POSTHOG_NEW_INTENT_MARKER} - posthog-react-native (DO NOT MODIFY)`\nconst POSTHOG_NEW_INTENT_END = `// @generated end ${POSTHOG_NEW_INTENT_MARKER}`\n\n// `android.content.Intent` is spelled out to keep the block self-contained: adding an import is a\n// second, riskier edit, and the templates we patch do not already import Intent.\nconst NEW_INTENT_DOC = ` /**\n * Records the intent that reopened the app so getIntent() stays correct.\n *\n * Works around a React Native defect that drops notification taps and deep links arriving while\n * the React context is still starting. Managed by the posthog-react-native Expo config plugin;\n * remove it with { patchMainActivityNewIntent: false } in app.json.\n * https://posthog.com/docs/workflows/push-notifications/react-native\n */`\n\nconst NEW_INTENT_KOTLIN_BODY = ` override fun onNewIntent(intent: android.content.Intent) {\n setIntent(intent)\n super.onNewIntent(intent)\n }`\n\nconst NEW_INTENT_JAVA_BODY = ` @Override\n public void onNewIntent(android.content.Intent intent) {\n setIntent(intent);\n super.onNewIntent(intent);\n }`\n\nfunction newIntentOverrideBlock(language: string): string {\n const body = language === 'java' ? NEW_INTENT_JAVA_BODY : NEW_INTENT_KOTLIN_BODY\n return `\\n ${POSTHOG_NEW_INTENT_BEGIN}\\n${NEW_INTENT_DOC}\\n${body}\\n ${POSTHOG_NEW_INTENT_END}\\n`\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\n// Lazy body match so two blocks (only reachable from a hand-edited file) are removed separately\n// rather than swallowing everything between them. The `\\r?` on both ends keeps the block removable\n// after an editor or a Windows checkout has normalized the file to CRLF.\nconst POSTHOG_NEW_INTENT_BLOCK_PATTERN = new RegExp(\n `\\\\r?\\\\n?[ \\\\t]*${escapeRegExp(POSTHOG_NEW_INTENT_BEGIN)}[\\\\s\\\\S]*?${escapeRegExp(\n POSTHOG_NEW_INTENT_END\n )}[ \\\\t]*\\\\r?\\\\n`,\n 'g'\n)\n\n// Index just past the string or character literal opening at `start`, or -1 when it never closes.\n// Covers `\"...\"` and `'...'` with backslash escapes (which end at a newline in both languages),\n// `\"\"\"...\"\"\"` raw strings and text blocks, and Kotlin `${...}` templates, whose contents are code\n// that may nest further literals.\nfunction literalEnd(s: string, start: number, language: string): number {\n const quote = s[start]\n const raw = quote === '\"' && s.startsWith('\"\"\"', start)\n let i = start + (raw ? 3 : 1)\n while (i < s.length) {\n const c = s[i]\n if (raw) {\n if (s.startsWith('\"\"\"', i)) {\n // Kotlin closes on the last three of a longer run of quotes.\n while (s[i] === '\"') {\n i++\n }\n return i\n }\n } else if (c === '\\n') {\n return -1\n } else if (c === quote) {\n return i + 1\n }\n if (c === '\\\\' && (!raw || language === 'java')) {\n i += 2\n continue\n }\n if (language === 'kt' && quote === '\"' && c === '$' && s[i + 1] === '{') {\n const close = matchingBraceIndexInSource(s, i + 1, language)\n if (close === -1) {\n return -1\n }\n i = close + 1\n continue\n }\n i++\n }\n return -1\n}\n\n// Index of the `}` matching the `{` at openBraceIndex in Kotlin or Java source, or -1 if\n// unbalanced. Braces inside literals and comments are not structural: a `\"}\"` field before an\n// existing onNewIntent must not end the class early, which would hide that override from the\n// scoped check below and make us insert a duplicate the file no longer compiles with.\nfunction matchingBraceIndexInSource(s: string, openBraceIndex: number, language: string): number {\n let depth = 0\n let i = openBraceIndex\n while (i < s.length) {\n const c = s[i]\n if (c === '/' && s[i + 1] === '/') {\n const end = s.indexOf('\\n', i)\n i = end === -1 ? s.length : end\n continue\n }\n if (c === '/' && s[i + 1] === '*') {\n // Kotlin nests block comments, Java does not: taking the first `*/` in Kotlin would end the\n // comment early and let a commented-out `}` close the class, hiding a real override below it.\n let depthOfComment = 1\n i += 2\n while (i < s.length && depthOfComment > 0) {\n if (language === 'kt' && s[i] === '/' && s[i + 1] === '*') {\n depthOfComment++\n i += 2\n continue\n }\n if (s[i] === '*' && s[i + 1] === '/') {\n depthOfComment--\n i += 2\n continue\n }\n i++\n }\n if (depthOfComment > 0) {\n return -1\n }\n continue\n }\n if (c === '\"' || c === \"'\") {\n const end = literalEnd(s, i, language)\n if (end === -1) {\n return -1\n }\n i = end\n continue\n }\n if (c === '{') {\n depth++\n } else if (c === '}') {\n depth--\n if (depth === 0) {\n return i\n }\n }\n i++\n }\n return -1\n}\n\n// A copy of `source` with the inside of every comment and string/char literal replaced by spaces,\n// keeping length and line breaks so indexes still line up with the original. One pass, so the class\n// declaration, the brace scan and the existing-override check all agree on what is code: a\n// commented-out `class MainActivity`, a `\"}\"` field, or an `onNewIntent` inside a comment are all\n// invisible to every one of them. Kotlin nests block comments and Java does not.\nfunction maskCommentsAndLiterals(source: string, language: string): string {\n const out = source.split('')\n const blank = (from: number, to: number) => {\n for (let j = from; j < to && j < out.length; j++) {\n if (out[j] !== '\\n') {\n out[j] = ' '\n }\n }\n }\n\n let i = 0\n while (i < source.length) {\n const c = source[i]\n if (c === '/' && source[i + 1] === '/') {\n const end = source.indexOf('\\n', i)\n const stop = end === -1 ? source.length : end\n blank(i, stop)\n i = stop\n continue\n }\n if (c === '/' && source[i + 1] === '*') {\n let depth = 1\n let j = i + 2\n while (j < source.length && depth > 0) {\n if (language === 'kt' && source[j] === '/' && source[j + 1] === '*') {\n depth++\n j += 2\n continue\n }\n if (source[j] === '*' && source[j + 1] === '/') {\n depth--\n j += 2\n continue\n }\n j++\n }\n blank(i, j)\n i = j\n continue\n }\n if (c === '\"' || c === \"'\") {\n const end = literalEnd(source, i, language)\n if (end === -1) {\n // Unterminated literal: blank the rest so nothing after it reads as code.\n blank(i, source.length)\n return out.join('')\n }\n blank(i, end)\n i = end\n continue\n }\n i++\n }\n return out.join('')\n}\n\n// The span of MainActivity's body, or undefined when the file does not look like the templates we\n// patch: a supertype list is all we expect between the class name and the opening brace.\nfunction mainActivityBody(contents: string, language: string): { open: number; close: number } | undefined {\n const code = maskCommentsAndLiterals(contents, language)\n const declaration = /\\bclass\\s+MainActivity\\b/.exec(code)\n if (!declaration) {\n return undefined\n }\n const searchFrom = declaration.index + declaration[0].length\n const open = code.indexOf('{', searchFrom)\n if (open === -1 || !/^[^;{}]*$/.test(code.slice(searchFrom, open))) {\n return undefined\n }\n // Unbalanced braces mean we cannot tell where the body ends, so the file is not ours to edit.\n let depth = 0\n let close = -1\n for (let i = open; i < code.length; i++) {\n if (code[i] === '{') {\n depth++\n } else if (code[i] === '}') {\n depth--\n if (depth === 0) {\n close = i\n break\n }\n }\n }\n return close === -1 ? undefined : { open, close }\n}\n\n/**\n * Adds (or, when disabled, removes) the managed `onNewIntent` override in MainActivity.\n *\n * Idempotent: the block is delimited by generated markers and rewritten in place, so repeated\n * prebuilds never stack copies. An app that already overrides `onNewIntent` keeps its own — a\n * second override would not compile, and the one-line `setIntent(intent)` belongs at the top of\n * theirs instead.\n */\nexport function updateMainActivityNewIntentOverride(contents: string, language: string, enabled: boolean): string {\n const withoutManagedBlock = contents.replace(POSTHOG_NEW_INTENT_BLOCK_PATTERN, '')\n if (!enabled) {\n return withoutManagedBlock\n }\n\n const body = mainActivityBody(withoutManagedBlock, language)\n if (!body) {\n console.warn(\n '[posthog-react-native] Could not find the MainActivity class body; skipping the onNewIntent ' +\n 'override. Notification taps delivered while the React context is starting will be lost.'\n )\n return withoutManagedBlock\n }\n\n // Scoped to MainActivity's own body, and matching a declaration rather than the bare token: an\n // onNewIntent on a helper class in the same file, or named in a comment or a string, must not\n // turn the fix off — but every real override of it in either language matches.\n const codeOnly = maskCommentsAndLiterals(withoutManagedBlock, language)\n if (/\\b(fun|void)\\s+onNewIntent\\s*\\(/.test(codeOnly.slice(body.open, body.close))) {\n console.warn(\n '[posthog-react-native] MainActivity already overrides onNewIntent; leaving it alone. ' +\n 'Add `setIntent(intent)` as its first statement so a notification tap that arrives before ' +\n 'the React context is ready is not lost, or set `{ patchMainActivityNewIntent: false }` ' +\n 'on the plugin to silence this.'\n )\n return withoutManagedBlock\n }\n\n return (\n withoutManagedBlock.slice(0, body.open + 1) +\n newIntentOverrideBlock(language) +\n withoutManagedBlock.slice(body.open + 1)\n )\n}\n\n// Expo's own `mainActivity` mod resolves the file with a glob over android/app/src/main/java only,\n// and asserts, so registering it turns sources under src/main/kotlin — or no MainActivity at all —\n// into a hard prebuild failure whose message never mentions PostHog. Look the file up ourselves\n// instead. Dangerous mods run before the standard android chain, so another plugin's\n// withMainActivity still reads (and re-writes) our edit.\nconst MAIN_ACTIVITY_SOURCE_ROOTS = ['android/app/src/main/java', 'android/app/src/main/kotlin']\n\nfunction findMainActivityPath(projectRoot: string): string | undefined {\n const walk = (dir: string): string | undefined => {\n if (!fs.existsSync(dir)) {\n return undefined\n }\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\n const candidate = path.join(dir, entry.name)\n if (!entry.isDirectory()) {\n if (/^MainActivity\\.(kt|java)$/.test(entry.name)) {\n return candidate\n }\n continue\n }\n const hit = walk(candidate)\n if (hit) {\n return hit\n }\n }\n return undefined\n }\n\n for (const sourceRoot of MAIN_ACTIVITY_SOURCE_ROOTS) {\n const hit = walk(path.join(projectRoot, sourceRoot))\n if (hit) {\n return hit\n }\n }\n return undefined\n}\n\nconst withMainActivityNewIntent = (config: any, enabled: boolean) => {\n return withDangerousMod(config, [\n 'android',\n async (config: any) => {\n const mainActivityPath = findMainActivityPath(config.modRequest.projectRoot)\n if (!mainActivityPath) {\n console.warn(\n '[posthog-react-native] Could not find MainActivity under android/app/src/main/{java,kotlin}; ' +\n 'skipping the onNewIntent override. Notification taps delivered while the React context is ' +\n 'starting will be lost.'\n )\n return config\n }\n\n const contents = await fs.promises.readFile(mainActivityPath, 'utf8')\n const updated = updateMainActivityNewIntentOverride(\n contents,\n mainActivityPath.endsWith('.java') ? 'java' : 'kt',\n enabled\n )\n if (updated !== contents) {\n await fs.promises.writeFile(mainActivityPath, updated)\n }\n // Only when the block is new, so a re-run of an already-patched project stays quiet.\n if (!contents.includes(POSTHOG_NEW_INTENT_BEGIN) && updated.includes(POSTHOG_NEW_INTENT_BEGIN)) {\n console.warn(\n `[posthog-react-native] Added an onNewIntent override to ${path.relative(\n config.modRequest.projectRoot,\n mainActivityPath\n )} so a notification tap that arrives before the React context is ready is not lost. ` +\n 'Set `{ patchMainActivityNewIntent: false }` on the plugin in app.json to opt out.'\n )\n }\n return config\n },\n ])\n}\n\ntype BuildPhase = { shellScript: string }\n\nexport function modifyExistingXcodeBuildScript(\n script: BuildPhase | undefined,\n skipOnConflict = false,\n releaseMode?: PostHogReleaseMode\n): void {\n if (!script?.shellScript) {\n console.warn(\n \"[posthog-react-native] Could not find the 'Bundle React Native code and images' build phase; \" +\n 'skipping sourcemap upload setup.'\n )\n return\n }\n\n if (!script.shellScript.match(/(packager|scripts)\\/react-native-xcode\\.sh\\b/)) {\n return\n }\n\n if (script.shellScript.includes('posthog-xcode.sh')) {\n const code = migrateLegacyPostHogWrapperInvocation(JSON.parse(script.shellScript))\n script.shellScript = JSON.stringify(updatePostHogBundlePhaseExports(code, skipOnConflict, releaseMode))\n return\n }\n\n if (script.shellScript.includes('posthog-react-native')) {\n return\n }\n\n const code = JSON.parse(script.shellScript)\n script.shellScript = JSON.stringify(\n addPostHogWithBundledScriptsToBundleShellScript(code, skipOnConflict, releaseMode)\n )\n}\n\n// Invoked directly so another wrapper receives this script—not /bin/sh—as $1.\n// package.json declares it as a bin target so package managers preserve its executable bit.\nconst POSTHOG_REACT_NATIVE_XCODE_PATH =\n \"`\\\"$NODE_BINARY\\\" --print \\\"require('path').join(require('path').dirname(require.resolve('posthog-react-native')), '..', 'tooling', 'posthog-xcode.sh')\\\"`\"\n\nconst POSTHOG_SKIP_ON_CONFLICT_EXPORT = 'export POSTHOG_SKIP_ON_CONFLICT=1'\nconst POSTHOG_RELEASE_MODE_EXPORT_PREFIX = 'export POSTHOG_RELEASE_MODE='\n\n// Exported before the wrapped command so posthog-xcode.sh — and any outer wrapper that re-invokes\n// it — sees them. posthog-cli reads POSTHOG_RELEASE_MODE itself, so one export covers the hermes\n// clone and upload alike.\nfunction buildBundlePhaseExports(skipOnConflict: boolean, releaseMode?: PostHogReleaseMode): string[] {\n const exports: string[] = []\n if (skipOnConflict) {\n exports.push(POSTHOG_SKIP_ON_CONFLICT_EXPORT)\n }\n if (releaseMode) {\n exports.push(`${POSTHOG_RELEASE_MODE_EXPORT_PREFIX}${releaseMode}`)\n }\n return exports\n}\n\nconst REACT_NATIVE_XCODE_LINE =\n /^([ \\t]*)(?![A-Za-z_][A-Za-z0-9_]*=)([^\\n]*(?:packager|scripts)\\/react-native-xcode\\.sh\\b[^\\n]*)$/m\n\nfunction migrateLegacyPostHogWrapperInvocation(script: string): string {\n return script.replace(`/bin/sh ${POSTHOG_REACT_NATIVE_XCODE_PATH}`, POSTHOG_REACT_NATIVE_XCODE_PATH)\n}\n\n// Rewrites the managed exports on an already-wrapped bundle phase, so changing an option in\n// app.json takes effect without a clean prebuild.\nfunction updatePostHogBundlePhaseExports(\n script: string,\n skipOnConflict: boolean,\n releaseMode?: PostHogReleaseMode\n): string {\n const skipArg = '--posthog-skip-on-conflict --'\n const lines = script\n .replace(new RegExp(`\\\\s*${skipArg}\\\\s*`, 'g'), ' ')\n .split('\\n')\n .filter((line) => line.trim() !== POSTHOG_SKIP_ON_CONFLICT_EXPORT)\n .filter((line) => !line.trim().startsWith(POSTHOG_RELEASE_MODE_EXPORT_PREFIX))\n\n const exports = buildBundlePhaseExports(skipOnConflict, releaseMode)\n if (exports.length > 0) {\n const commandIndex = lines.findIndex((line) => line.includes(POSTHOG_REACT_NATIVE_XCODE_PATH))\n if (commandIndex !== -1) {\n const indent = lines[commandIndex].match(/^[ \\t]*/)?.[0] ?? ''\n lines.splice(commandIndex, 0, ...exports.map((line) => `${indent}${line}`))\n }\n }\n\n return lines.join('\\n')\n}\n\nexport function addPostHogWithBundledScriptsToBundleShellScript(\n script: string,\n skipOnConflict = false,\n releaseMode?: PostHogReleaseMode\n): string {\n // Capture the full RN script invocation. Expo uses a backtick-wrapped\n // node --print command, so matching only up to react-native-xcode.sh cuts the\n // command substitution in half and leaves the generated shell invalid.\n return script.replace(REACT_NATIVE_XCODE_LINE, (_match: string, indent: string, rnCommand: string) => {\n const exports = buildBundlePhaseExports(skipOnConflict, releaseMode)\n .map((line) => `${indent}${line}\\n`)\n .join('')\n return `${exports}${indent}${POSTHOG_REACT_NATIVE_XCODE_PATH} ${rnCommand}`\n })\n}\n\nconst POSTHOG_DSYM_BUILD_PHASE_NAME = 'Upload PostHog Debug Symbols'\nconst POSTHOG_DSYM_INPUT_PATH =\n '\"$(DWARF_DSYM_FOLDER_PATH)/$(DWARF_DSYM_FILE_NAME)/Contents/Resources/DWARF/$(EXECUTABLE_NAME)\"'\n\n// Shell script for the dSYM upload build phase. It locates and runs posthog-ios's\n// upload-symbols.sh (CocoaPods or SwiftPM) rather than re-implementing dSYM upload.\n// `includeSource` (iOS only) opts into POSTHOG_INCLUDE_SOURCE to also upload native source.\nexport function buildDsymUploadShellScript(includeSource = false, skipOnConflict = false): string {\n return composeDsymUploadShellScript(includeSource, skipOnConflict)\n}\n\n// The phase as SDKs without release-mode support wrote it: the same script with no release-mode\n// block. isPluginGeneratedDsymUploadBuildPhase compares against this exact text, so a change here\n// makes the plugin stop recognizing the phases it wrote before, and stop refreshing them.\nfunction composeDsymUploadShellScript(includeSource: boolean, skipOnConflict: boolean): string {\n const lines = [\n '# Upload iOS dSYMs to PostHog so native crashes can be symbolicated.',\n '# upload-symbols.sh ships inside the posthog-ios dependency.',\n ]\n\n if (includeSource) {\n lines.push(\n '# Also upload native source files for source-code context around crashes.',\n 'export POSTHOG_INCLUDE_SOURCE=1'\n )\n }\n\n if (skipOnConflict) {\n lines.push(\n '# Skip dSYMs that already exist in PostHog with different content instead of failing the build.',\n 'export POSTHOG_SKIP_ON_CONFLICT=1'\n )\n }\n\n lines.push(\n 'PODS_SCRIPT=\"${PODS_ROOT}/PostHog/build-tools/upload-symbols.sh\"',\n 'SPM_SCRIPT=\"${BUILD_DIR%/Build/*}/SourcePackages/checkouts/posthog-ios/build-tools/upload-symbols.sh\"',\n 'if [ -f \"$PODS_SCRIPT\" ]; then',\n ' /bin/sh \"$PODS_SCRIPT\"',\n 'elif [ -f \"$SPM_SCRIPT\" ]; then',\n ' /bin/sh \"$SPM_SCRIPT\"',\n 'else',\n ' echo \"warning: PostHog upload-symbols.sh not found in Pods or SwiftPM checkouts; skipping dSYM upload.\"',\n 'fi'\n )\n\n return lines.join('\\n')\n}\n\n// The release-mode block exactly as 4.64.0 through 4.66.x wrote it into the dSYM phase. Its\n// POSTHOG_NO_RELEASE_BIND export still steers the posthog-ios this plugin pins, so a phase carrying\n// the block must stay recognized and get rewritten to the block-free script. Verbatim on purpose.\nfunction legacyDsymReleaseModeLines(releaseMode?: PostHogReleaseMode): string[] {\n return [\n releaseMode\n ? `POSTHOG_RESOLVED_RELEASE_MODE=\"${releaseMode}\"`\n : 'POSTHOG_RESOLVED_RELEASE_MODE=\"${POSTHOG_RELEASE_MODE:-}\"',\n 'case \"$POSTHOG_RESOLVED_RELEASE_MODE\" in',\n ' \"\"|symbol-set) ;;',\n ' event)',\n ' # Upload dSYMs without binding them to a release, so each crash resolves its own from the',\n ' # app version and namespace the SDK sends. posthog-ios versions whose upload-symbols.sh',\n ' # does not read this variable ignore it and keep binding the dSYMs.',\n ' export POSTHOG_NO_RELEASE_BIND=1',\n ' ;;',\n ' *)',\n \" echo \\\"error: posthog release mode must be 'symbol-set' or 'event', was '$POSTHOG_RESOLVED_RELEASE_MODE'\\\"\",\n ' exit 1',\n ' ;;',\n 'esac',\n ]\n}\n\n// The phase as the release-mode era wrote it: the current script with the mode block ahead of the\n// upload lines. Derived from composeDsymUploadShellScript, so the shared lines stay a compatibility\n// contract: a change to them needs the old text kept as a variant, or these phases go unrecognized.\n// The verbatim fixtures in expoconfig.spec.ts hold this derivation to the published 4.66.3 text.\nfunction buildLegacyReleaseModeDsymUploadShellScript(\n includeSource: boolean,\n skipOnConflict: boolean,\n releaseMode?: PostHogReleaseMode\n): string {\n const lines = composeDsymUploadShellScript(includeSource, skipOnConflict).split('\\n')\n const uploadIndex = lines.findIndex((line) => line.startsWith('PODS_SCRIPT='))\n lines.splice(uploadIndex, 0, ...legacyDsymReleaseModeLines(releaseMode))\n return lines.join('\\n')\n}\n\n// xcode's addBuildPhase stores shellScript quote-escaped with literal newlines; in-place\n// refreshes must match or the stored pbxproj representation churns.\nfunction encodePbxShellScript(script: string): string {\n return '\"' + script.replace(/\"/g, '\\\\\"') + '\"'\n}\n\n// Undoes any quoted pbxproj encoding of shellScript. Handles both the literal-newline\n// form xcode's addBuildPhase writes and the \\n-escaped form Xcode itself writes, so a\n// pristine phase is recognized regardless of which tool last serialized the project.\nfunction decodePbxShellScript(stored: string): string {\n if (!stored.startsWith('\"') || !stored.endsWith('\"')) {\n return stored\n }\n return stored.slice(1, -1).replace(/\\\\(.)/g, (_match, ch) => (ch === 'n' ? '\\n' : ch === 't' ? '\\t' : ch))\n}\n\nfunction isPluginGeneratedDsymUploadBuildPhase(phase: any): boolean {\n if (typeof phase?.shellScript !== 'string') {\n return false\n }\n const stored = decodePbxShellScript(phase.shellScript)\n return [false, true].some((source) =>\n [false, true].some(\n (skip) =>\n stored === buildDsymUploadShellScript(source, skip) ||\n [undefined, ...POSTHOG_RELEASE_MODES].some(\n (mode) => stored === buildLegacyReleaseModeDsymUploadShellScript(source, skip, mode)\n )\n )\n )\n}\n\nexport function moveDsymUploadBuildPhaseToEnd(xcodeProject: any): void {\n const existing = xcodeProject.pbxItemByComment(POSTHOG_DSYM_BUILD_PHASE_NAME, 'PBXShellScriptBuildPhase')\n if (!isPluginGeneratedDsymUploadBuildPhase(existing)) {\n return\n }\n\n const buildPhases = xcodeProject.getFirstTarget?.().firstTarget?.buildPhases\n if (Array.isArray(buildPhases)) {\n const phaseIndex = buildPhases.findIndex((phase: any) => phase.comment === POSTHOG_DSYM_BUILD_PHASE_NAME)\n if (phaseIndex !== -1 && phaseIndex !== buildPhases.length - 1) {\n buildPhases.push(...buildPhases.splice(phaseIndex, 1))\n }\n }\n}\n\n// Keeps the upload phase last and declares the main DWARF as an input, matching the native iOS\n// setup guide. Both are required: the input makes Xcode wait for dSYM generation, while placing\n// the phase after extension embedding avoids dependency cycles in apps with app extensions.\n// Re-runs refresh only a still-plugin-generated phase, also one an older SDK wrote, so user\n// customizations remain untouched.\nexport function addDsymUploadBuildPhase(xcodeProject: any, includeSource = false, skipOnConflict = false): void {\n const existing = xcodeProject.pbxItemByComment(POSTHOG_DSYM_BUILD_PHASE_NAME, 'PBXShellScriptBuildPhase')\n if (existing) {\n if (isPluginGeneratedDsymUploadBuildPhase(existing)) {\n existing.shellScript = encodePbxShellScript(buildDsymUploadShellScript(includeSource, skipOnConflict))\n existing.inputPaths = Array.from(\n new Set([...(Array.isArray(existing.inputPaths) ? existing.inputPaths : []), POSTHOG_DSYM_INPUT_PATH])\n )\n }\n } else {\n xcodeProject.addBuildPhase([], 'PBXShellScriptBuildPhase', POSTHOG_DSYM_BUILD_PHASE_NAME, null, {\n inputPaths: [POSTHOG_DSYM_INPUT_PATH],\n shellPath: '/bin/sh',\n shellScript: buildDsymUploadShellScript(includeSource, skipOnConflict),\n })\n }\n\n moveDsymUploadBuildPhaseToEnd(xcodeProject)\n}\n\nexport function disableUserScriptSandboxing(xcodeProject: any): void {\n // posthog-cli reads .git/ for release auto-detection, which the Xcode 14+ user script\n // sandbox blocks. Applies to all configs in the main app's .xcodeproj (Pods project is\n // separate and untouched).\n const configurations = xcodeProject.pbxXCBuildConfigurationSection()\n for (const key in configurations) {\n const configuration = configurations[key]\n if (configuration && configuration.buildSettings) {\n configuration.buildSettings.ENABLE_USER_SCRIPT_SANDBOXING = '\"NO\"'\n }\n }\n}\n\nconst POSTHOG_DOTENV_BUILD_SETTING = 'POSTHOG_CLI_DOTENV_FILE'\nconst POSTHOG_DOTENV_GRADLE_PROPERTY = 'posthog.dotenvFile'\n\n// Strips a leading ./ so relative props join cleanly onto their per-platform prefix.\nfunction normalizeDotenvFileProp(dotenvFile: string): string {\n return dotenvFile.replace(/^\\.\\//, '')\n}\n\n// Empty/whitespace-only values (easy to produce from templated app.config values)\n// count as unset — mirrors the trim guard in posthog.gradle.\nexport function resolveDotenvFileProp(dotenvFile?: string): string | undefined {\n const trimmed = dotenvFile?.trim()\n return trimmed ? trimmed : undefined\n}\n\n// Posix root or a Windows drive prefix — enough without pulling in `path`,\n// whose isAbsolute is platform-bound while prebuild can run anywhere.\nfunction isAbsoluteDotenvPath(dotenvFile: string): boolean {\n return dotenvFile.startsWith('/') || /^[A-Za-z]:[\\\\/]/.test(dotenvFile)\n}\n\n// pbxproj stores build-setting values quoted; escape so paths with quotes or\n// backslashes survive serialization. $(SRCROOT) is the generated ios/ dir, so\n// project-root-relative props live one level up.\nexport function buildIosDotenvFileBuildSetting(dotenvFile: string): string {\n const value = isAbsoluteDotenvPath(dotenvFile) ? dotenvFile : `$(SRCROOT)/../${normalizeDotenvFileProp(dotenvFile)}`\n return '\"' + value.replace(/([\"\\\\])/g, '\\\\$1') + '\"'\n}\n\n// Xcode exports build settings as env vars to every Run Script phase, so one\n// setting feeds both the bundle-phase hermes upload and the dSYM upload phase;\n// posthog-cli (>= 0.8.4) reads POSTHOG_CLI_DOTENV_FILE itself, no script\n// changes needed. Removing the prop removes the setting again so changes take\n// effect without a clean prebuild.\nexport function applyDotenvFileBuildSetting(xcodeProject: any, dotenvFile?: string): void {\n const configurations = xcodeProject.pbxXCBuildConfigurationSection()\n for (const key in configurations) {\n const configuration = configurations[key]\n if (configuration && configuration.buildSettings) {\n if (dotenvFile) {\n configuration.buildSettings[POSTHOG_DOTENV_BUILD_SETTING] = buildIosDotenvFileBuildSetting(dotenvFile)\n } else {\n delete configuration.buildSettings[POSTHOG_DOTENV_BUILD_SETTING]\n }\n }\n }\n}\n\ntype GradlePropertiesItem = { type: string; key?: string; value?: string }\n\n// gradle.properties lives in android/, so a project-root-relative prop becomes ../<path>.\nexport function buildAndroidDotenvFileGradleValue(dotenvFile: string): string {\n return isAbsoluteDotenvPath(dotenvFile) ? dotenvFile : `../${normalizeDotenvFileProp(dotenvFile)}`\n}\n\n// Managed posthog.dotenvFile entry in android/gradle.properties, consumed by\n// both gradle hooks (the SDK's posthog.gradle hermes upload and the\n// com.posthog.android mapping upload). Added when the prop is set, removed\n// when it isn't.\nexport function updateDotenvFileGradleProperties(\n properties: GradlePropertiesItem[],\n dotenvFile?: string\n): GradlePropertiesItem[] {\n const rest = properties.filter((item) => !(item.type === 'property' && item.key === POSTHOG_DOTENV_GRADLE_PROPERTY))\n if (!dotenvFile) {\n return rest\n }\n rest.push({\n type: 'property',\n key: POSTHOG_DOTENV_GRADLE_PROPERTY,\n value: buildAndroidDotenvFileGradleValue(dotenvFile),\n })\n return rest\n}\n\n// Managed posthog.hermesReleaseMode entry in android/gradle.properties, read by the SDK's\n// posthog.gradle hermes upload. The key is deliberately not posthog.releaseMode:\n// com.posthog.android below 1.6.0 reads that one for the R8 mapping upload, and the mode must not\n// reach it. A posthog.releaseMode entry is deprecated user-owned config, so the prebuild leaves it\n// alone. posthog.gradle reads it as a fallback with a warning, and com.posthog.android 1.6.0\n// warns about it and ignores it.\nexport function updateHermesReleaseModeGradleProperties(\n properties: GradlePropertiesItem[],\n releaseMode?: PostHogReleaseMode\n): GradlePropertiesItem[] {\n const rest = properties.filter(\n (item) => !(item.type === 'property' && item.key === POSTHOG_HERMES_RELEASE_MODE_GRADLE_PROPERTY)\n )\n if (!releaseMode) {\n return rest\n }\n rest.push({ type: 'property', key: POSTHOG_HERMES_RELEASE_MODE_GRADLE_PROPERTY, value: releaseMode })\n return rest\n}\n\nconst withPostHogGradleProperties = (config: any, dotenvFile?: string, releaseMode?: PostHogReleaseMode) => {\n return withGradleProperties(config, (config: any) => {\n config.modResults = updateDotenvFileGradleProperties(config.modResults, dotenvFile)\n config.modResults = updateHermesReleaseModeGradleProperties(config.modResults, releaseMode)\n return config\n })\n}\n\ntype PostHogPluginProps = {\n /**\n * Whether to disable Xcode's user script sandboxing (ENABLE_USER_SCRIPT_SANDBOXING=NO).\n *\n * posthog-cli reads .git/ during sourcemap uploads for release auto-detection;\n * sandboxing (on by default in Xcode 14+) blocks that, so uploads lose git info\n * or fail silently.\n *\n * Default: true (disable sandboxing so uploads \"just work\").\n * Set to false if your org requires sandboxing stays on —\n * you'll lose automatic git metadata on sourcemap uploads on iOS builds only.\n *\n * Note that this setting is recommended in the Expo docs:\n * https://docs.expo.dev/brownfield/integrated-approach/#configuring-your-xcode-project\n */\n disableSandboxing?: boolean\n\n /**\n * Whether to upload native debug symbols so native crashes can be symbolicated.\n *\n * When enabled, the plugin wires the native symbol-upload tooling that the\n * native PostHog SDKs already ship:\n * - iOS: a build phase that runs posthog-ios's `upload-symbols.sh`\n * (`posthog-cli dsym upload`).\n * - Android: the official `com.posthog.android` Gradle plugin, which uploads\n * ProGuard/R8 mapping files and injects the matching map-id into the app.\n *\n * Pass `{ includeSource: true }` to also upload native source files so PostHog\n * can show source-code context around native crashes. This is **iOS only** —\n * the Android proguard upload has no source-inclusion equivalent, so the flag\n * is ignored there. Note it uploads your source code to PostHog, hence opt-in.\n *\n * Default: false. Pair this with `errorTracking.autocapture.nativeCrashes` at\n * runtime — without uploaded symbols, native stack traces won't be symbolicated.\n * Requires `posthog-cli` to be available and authenticated during release builds.\n */\n uploadNativeSymbols?: boolean | { includeSource?: boolean }\n\n /**\n * Whether to skip uploads whose content already exists in PostHog instead of failing the build.\n *\n * Appends `--skip-on-conflict` to `posthog-cli hermes upload` on iOS and Android. When\n * `uploadNativeSymbols` is enabled, also sets `POSTHOG_SKIP_ON_CONFLICT=1` in the iOS dSYM\n * upload build phase; posthog-ios's `upload-symbols.sh` forwards it as `--skip-on-conflict`\n * to `posthog-cli dsym upload` on posthog-ios >= 3.64.7 (with posthog-cli >= 0.7.12) and\n * ignores it on older versions, where dSYM conflicts keep failing the build.\n *\n * Default: false.\n */\n skipOnConflict?: boolean\n\n /**\n * Path to a dotenv file with POSTHOG_CLI_* credentials (API key, project id,\n * optional host), relative to the project root — or absolute.\n *\n * The path reaches every upload hook as POSTHOG_CLI_DOTENV_FILE: on iOS as a\n * build setting (Xcode exports it to the bundle and dSYM script phases), on\n * Android as a `posthog.dotenvFile` entry in android/gradle.properties read\n * by the SDK's `posthog.gradle` hermes upload and, on gradle plugin >= 1.4.0,\n * by the `com.posthog.android` mapping upload. Process env always wins inside\n * the CLI; a missing file is a warning, not a build failure.\n *\n * Requires posthog-cli >= 0.8.4 — older CLIs ignore the variable and fall\n * back to their other credential sources. With `disableSandboxing: false`,\n * Xcode's script sandbox can block reading the file, which is a hard CLI\n * error (an unreadable-but-present file does not fall through).\n */\n dotenvFile?: string\n\n /**\n * How the release a build belongs to gets associated with the exceptions it reports.\n *\n * This steers the Hermes source map upload only. iOS dSYMs and Android R8 mappings always bind to\n * the release their build creates. The R8 half of that needs the `com.posthog.android` gradle\n * plugin 1.6.0, which ignores the deprecated `posthog.releaseMode` key. A fresh prebuild injects\n * that version, but a project whose android/build.gradle already carries an older classpath line\n * keeps it: bump the line by hand or prebuild with `--clean`.\n *\n * `event` (the default; still EXPERIMENTAL while the rollout settles) uploads the maps\n * release-independent, and each event resolves its own release from the `$app_namespace` /\n * `$app_version` / `$app_build` the SDK sends. Use it when two releases can ship identical\n * JavaScript: the map id comes from content, so in `symbol-set` mode both releases report\n * whichever one uploaded first.\n *\n * Event mode's release link depends on those coordinates reaching each exception. The SDK reads\n * them from the optional `expo-application` or `react-native-device-info` module, and a plain\n * `customAppProperties` object replaces the defaults rather than merging. An install with neither\n * module — or a `customAppProperties` that drops the keys — still symbolicates, but its JavaScript\n * exceptions carry no release. Keep a metadata module (or those keys) to attribute event-mode\n * exceptions to a release; `symbol-set` instead stamps the release onto the uploaded maps from the\n * build settings and does not need them.\n *\n * When this prop is absent, the prebuild reads `POSTHOG_RELEASE_MODE`; set the variable before\n * you run the prebuild. A configured mode is written into the build files and beats the variable\n * at build time. With neither configured, the prebuild writes nothing, the build scripts apply\n * the `event` default at build time, and `POSTHOG_RELEASE_MODE` also still works there.\n *\n * Event mode needs posthog-cli >= 0.16.0, which carries `--release-mode` on the `hermes`\n * commands. A configured `event` fails the build on an older one and names the upgrade. The\n * unconfigured default softens instead: the build warns and uploads the maps bound to the\n * release, as it did before the default changed. That floor lives in posthog-xcode.sh and\n * posthog.gradle: update them and this line together.\n */\n releaseMode?: PostHogReleaseMode\n\n /**\n * Whether to give Android's `MainActivity` an `onNewIntent` override that calls\n * `setIntent(intent)` before delegating to React Native.\n *\n * Works around a React Native defect. When Android reopens an app whose process it had killed\n * while the task stayed in recents, the tap arrives before the React context is ready and is then\n * invisible to the whole process — PostHog captures no `$push_notification_opened`, Firebase\n * Messaging's `getInitialNotification()` returns null, and deep links are lost. Recording the\n * intent first makes `getIntent()` correct for every library in the app.\n *\n * Default: true. The plugin leaves a `MainActivity` that already overrides `onNewIntent`\n * untouched and warns instead — add `setIntent(intent)` as the first statement of your own\n * override. Set to false to skip the injection entirely (and remove one a previous prebuild\n * wrote); bare React Native apps that do not run `expo prebuild` need the same override by hand.\n */\n patchMainActivityNewIntent?: boolean\n}\n\n// Normalizes the uploadNativeSymbols prop (boolean | { includeSource }) into a\n// flat shape. `includeSource` is iOS-only and ignored on Android.\nexport function resolveNativeSymbolUpload(prop: PostHogPluginProps['uploadNativeSymbols']): {\n enabled: boolean\n includeSource: boolean\n} {\n if (prop === true) {\n return { enabled: true, includeSource: false }\n }\n if (prop && typeof prop === 'object') {\n return { enabled: true, includeSource: prop.includeSource === true }\n }\n return { enabled: false, includeSource: false }\n}\n\n// Expo's standard mods run their action before the previously registered action. This wrapper\n// deliberately runs its action after the rest of the Xcode mod chain, so later config plugins\n// cannot leave a newly created extension-embedding phase after the PostHog upload phase.\nconst withFinalizedXcodeProject = (config: any, action: (config: any) => any) => {\n return withBaseMod(config, {\n platform: 'ios',\n mod: 'xcodeproj',\n async action(config: any) {\n const { nextMod, ...modRequest } = config.modRequest\n const results = await nextMod({ ...config, modRequest })\n return action(results)\n },\n })\n}\n\nconst withIosPlugin = (config: any, props: PostHogPluginProps = {}) => {\n const nativeSymbols = resolveNativeSymbolUpload(props.uploadNativeSymbols)\n\n config = withXcodeProject(config, (config: any) => {\n const xcodeProject = config.modResults\n\n const bundleReactNativePhase = xcodeProject.pbxItemByComment(\n 'Bundle React Native code and images',\n 'PBXShellScriptBuildPhase'\n )\n\n modifyExistingXcodeBuildScript(bundleReactNativePhase, props.skipOnConflict === true, props.releaseMode)\n\n if (nativeSymbols.enabled) {\n addDsymUploadBuildPhase(xcodeProject, nativeSymbols.includeSource, props.skipOnConflict === true)\n }\n\n applyDotenvFileBuildSetting(xcodeProject, props.dotenvFile)\n\n if (props.disableSandboxing !== false) {\n disableUserScriptSandboxing(xcodeProject)\n console.warn(\n '[posthog-react-native] Setting ENABLE_USER_SCRIPT_SANDBOXING=NO on all Xcode ' +\n 'build configurations so sourcemap uploads can resolve git metadata. ' +\n 'If your org requires sandboxing to stay enabled, set `{ disableSandboxing: false }` ' +\n 'on the plugin in app.json — note that stock Expo projects may fail to build under ' +\n 'sandboxing until every script build phase declares its input/output files.'\n )\n }\n\n return config\n })\n\n if (nativeSymbols.enabled) {\n config = withFinalizedXcodeProject(config, (config: any) => {\n moveDsymUploadBuildPhaseToEnd(config.modResults)\n return config\n })\n }\n\n return config\n}\n\nconst withPostHogPlugin = (config: any, rawProps: PostHogPluginProps = {}) => {\n const props = {\n ...rawProps,\n dotenvFile: resolveDotenvFileProp(rawProps.dotenvFile),\n releaseMode: resolveReleaseModeProp(rawProps.releaseMode, process.env.POSTHOG_RELEASE_MODE),\n }\n // includeSource is iOS-only, so on Android we only care whether upload is enabled.\n if (resolveNativeSymbolUpload(props.uploadNativeSymbols).enabled) {\n config = withAndroidNativeSymbolsPlugin(config)\n }\n config = withAndroidPlugin(config, props.skipOnConflict === true)\n // Runs unconditionally so removing the prop also removes the managed entry.\n config = withPostHogGradleProperties(config, props.dotenvFile, props.releaseMode)\n config = withMainActivityNewIntent(config, props.patchMainActivityNewIntent !== false)\n return withIosPlugin(config, props)\n}\n\nconst postHogPlugin = (config: any, props: PostHogPluginProps = {}): any => {\n return withPostHogPlugin(config, props)\n}\n\n// Re-export the plugin function as the default export while keeping the\n// named exports above callable from tests.\nmodule.exports = postHogPlugin\nmodule.exports.modifyExistingXcodeBuildScript = modifyExistingXcodeBuildScript\nmodule.exports.addPostHogWithBundledScriptsToBundleShellScript = addPostHogWithBundledScriptsToBundleShellScript\nmodule.exports.disableUserScriptSandboxing = disableUserScriptSandboxing\nmodule.exports.buildDsymUploadShellScript = buildDsymUploadShellScript\nmodule.exports.addDsymUploadBuildPhase = addDsymUploadBuildPhase\nmodule.exports.moveDsymUploadBuildPhaseToEnd = moveDsymUploadBuildPhaseToEnd\nmodule.exports.resolveNativeSymbolUpload = resolveNativeSymbolUpload\nmodule.exports.buildAndroidSkipOnConflictGradleLine = buildAndroidSkipOnConflictGradleLine\nmodule.exports.addPostHogAndroidGradlePluginClasspath = addPostHogAndroidGradlePluginClasspath\nmodule.exports.applyPostHogAndroidGradlePlugin = applyPostHogAndroidGradlePlugin\nmodule.exports.buildIosDotenvFileBuildSetting = buildIosDotenvFileBuildSetting\nmodule.exports.applyDotenvFileBuildSetting = applyDotenvFileBuildSetting\nmodule.exports.resolveDotenvFileProp = resolveDotenvFileProp\nmodule.exports.buildAndroidDotenvFileGradleValue = buildAndroidDotenvFileGradleValue\nmodule.exports.updateDotenvFileGradleProperties = updateDotenvFileGradleProperties\nmodule.exports.POSTHOG_RELEASE_MODES = POSTHOG_RELEASE_MODES\nmodule.exports.resolveReleaseModeProp = resolveReleaseModeProp\nmodule.exports.updateHermesReleaseModeGradleProperties = updateHermesReleaseModeGradleProperties\nmodule.exports.updateMainActivityNewIntentOverride = updateMainActivityNewIntentOverride\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"metroconfig.js","names":["_posthogMetroSerializer","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","ownKeys","e","r","t","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","push","apply","_objectSpread","arguments","length","_defineProperty2","getOwnPropertyDescriptors","defineProperties","getPostHogExpoConfig","projectRoot","options","undefined","enabled","_a","getDefaultConfig","loadExpoMetroConfigModule","config","unstable_beforeAssetSerializationPlugins","concat","_toConsumableArray2","unstableBeforeAssetSerializationDebugIdPlugin","Error"],"sources":["../../src/tooling/metroconfig.ts"],"sourcesContent":["// Portions of this file are derived from getsentry/sentry-react-native\n// Copyright (c) 2017 Sentry\n// Licensed under the MIT License: https://github.com/getsentry/sentry-react-native/blob/main/LICENSE.md\n\nimport type { MetroConfig, MixedOutput, Module, ReadOnlyGraph } from 'metro'\nimport { unstableBeforeAssetSerializationDebugIdPlugin } from './posthogMetroSerializer'\nimport type { DefaultConfigOptions } from './vendor/expo/expoconfig'\n\nexport * from './posthogMetroSerializer'\n\nexport interface PostHogMetroConfigOptions {\n /**\n * Whether the plugin is enabled.\n * Set to `false` to disable PostHog's Metro plugins (useful for local development).\n * @default true\n */\n enabled?: boolean\n}\n\nexport interface PostHogExpoConfigOptions {\n /**\n * Pass a custom `getDefaultConfig` function to override the default Expo configuration getter.\n */\n getDefaultConfig?: (projectRoot: string, options?: Record<string, unknown>) => Record<string, unknown>\n}\n\n/**\n * This function returns Default Expo configuration with PostHog plugins.\n */\nexport function getPostHogExpoConfig(\n projectRoot: string,\n options: DefaultConfigOptions & PostHogExpoConfigOptions & PostHogMetroConfigOptions = {}\n): MetroConfig {\n const enabled = options.enabled ?? true\n const getDefaultConfig = options.getDefaultConfig || loadExpoMetroConfigModule().getDefaultConfig\n\n if (!enabled) {\n return getDefaultConfig(projectRoot, options)\n }\n\n const config = getDefaultConfig(projectRoot, {\n ...options,\n unstable_beforeAssetSerializationPlugins: [\n ...(options.unstable_beforeAssetSerializationPlugins || []),\n unstableBeforeAssetSerializationDebugIdPlugin,\n ],\n })\n\n return config\n}\n\nfunction loadExpoMetroConfigModule(): {\n getDefaultConfig: (\n projectRoot: string,\n options: {\n unstable_beforeAssetSerializationPlugins?: ((serializationInput: {\n graph: ReadOnlyGraph<MixedOutput>\n premodules: Module[]\n debugId?: string\n }) => Module[])[]\n }\n ) => MetroConfig\n} {\n try {\n // oxlint-disable-next-line typescript/no-var-requires\n return require('expo/metro-config')\n } catch (e) {\n throw new Error('Unable to load `expo/metro-config`. Make sure you have Expo installed.')\n }\n}\n"],"mappings":"0bAKA,IAAAA,uBAAA,CAAAC,OAAA,6BAGAC,MAAA,CAAAC,IAAA,CAAAH,uBAAA,EAAAI,OAAA,UAAAC,GAAA,KAAAA,GAAA,cAAAA,GAAA,0BAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,CAAAJ,GAAA,YAAAA,GAAA,IAAAK,OAAA,EAAAA,OAAA,CAAAL,GAAA,IAAAL,uBAAA,CAAAK,GAAA,QAAAH,CAAA,OAAAS,cAAA,CAAAD,OAAA,CAAAL,GAAA,EAAAO,UAAA,MAAAC,GAAA,UAAAA,IAAA,SAAAb,uBAAA,CAAAK,GAAA,SAAwC,SAAAS,QAAAC,CAAA,CAAAC,CAAA,MAAAC,CAAA,CAAAf,MAAA,CAAAC,IAAA,CAAAY,CAAA,KAAAb,MAAA,CAAAgB,qBAAA,MAAAC,CAAA,CAAAjB,MAAA,CAAAgB,qBAAA,CAAAH,CAAA,CAAAC,CAAA,IAAAG,CAAA,CAAAA,CAAA,CAAAC,MAAA,UAAAJ,CAAA,SAAAd,MAAA,CAAAmB,wBAAA,CAAAN,CAAA,CAAAC,CAAA,EAAAJ,UAAA,KAAAK,CAAA,CAAAK,IAAA,CAAAC,KAAA,CAAAN,CAAA,CAAAE,CAAA,UAAAF,CAAA,WAAAO,cAAAT,CAAA,UAAAC,CAAA,GAAAA,CAAA,CAAAS,SAAA,CAAAC,MAAA,CAAAV,CAAA,QAAAC,CAAA,OAAAQ,SAAA,CAAAT,CAAA,EAAAS,SAAA,CAAAT,CAAA,IAAAA,CAAA,IAAAF,OAAA,CAAAZ,MAAA,CAAAe,CAAA,MAAAb,OAAA,UAAAY,CAAA,KAAAW,gBAAA,aAAAZ,CAAA,CAAAC,CAAA,CAAAC,CAAA,CAAAD,CAAA,MAAAd,MAAA,CAAA0B,yBAAA,CAAA1B,MAAA,CAAA2B,gBAAA,CAAAd,CAAA,CAAAb,MAAA,CAAA0B,yBAAA,CAAAX,CAAA,GAAAH,OAAA,CAAAZ,MAAA,CAAAe,CAAA,GAAAb,OAAA,UAAAY,CAAA,EAAAd,MAAA,CAAAS,cAAA,CAAAI,CAAA,CAAAC,CAAA,CAAAd,MAAA,CAAAmB,wBAAA,CAAAJ,CAAA,CAAAD,CAAA,cAAAD,CAAA,EAqBlC,QAAU,CAAAe,oBAAoBA,CAClCC,WAAmB,CACsE,IAAzF,CAAAC,OAAA,CAAAP,SAAA,CAAAC,MAAA,IAAAD,SAAA,MAAAQ,SAAA,CAAAR,SAAA,IAAuF,EAAE,C,OAEzF,GAAM,CAAAS,OAAO,CAAG,CAAAC,EAAA,CAAAH,OAAO,CAACE,OAAO,UAAAC,EAAA,UAAAA,EAAA,CAAI,IAAI,CACvC,GAAM,CAAAC,gBAAgB,CAAGJ,OAAO,CAACI,gBAAgB,EAAIC,yBAAyB,EAAE,CAACD,gBAAgB,CAEjG,GAAI,CAACF,OAAO,CAAE,CACZ,MAAO,CAAAE,gBAAgB,CAACL,WAAW,CAAEC,OAAO,CAAC,CAC/C,CAEA,GAAM,CAAAM,MAAM,CAAGF,gBAAgB,CAACL,WAAW,CAAAP,aAAA,CAAAA,aAAA,IACtCQ,OAAO,MACVO,wCAAwC,IAAAC,MAAA,IAAAC,mBAAA,aAClCT,OAAO,CAACO,wCAAwC,EAAI,EAAE,GAC1DG,qEAA6C,EAC9C,EACF,CAAC,CAEF,MAAO,CAAAJ,MAAM,CACf,CAEA,QAAS,CAAAD,yBAAyBA,CAAA,EAYhC,GAAI,CAEF,MAAO,CAAApC,OAAO,CAAC,mBAAmB,CAAC,CACrC,CAAE,MAAOc,CAAC,CAAE,CACV,KAAM,IAAI,CAAA4B,KAAK,CAAC,wEAAwE,CAAC,CAC3F,CACF","ignoreList":[]}
1
+ {"version":3,"file":"metroconfig.js","names":["_posthogMetroSerializer","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","ownKeys","e","r","t","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","push","apply","_objectSpread","arguments","length","_defineProperty2","getOwnPropertyDescriptors","defineProperties","getPostHogExpoConfig","projectRoot","options","undefined","enabled","_a","getDefaultConfig","loadExpoMetroConfigModule","config","unstable_beforeAssetSerializationPlugins","concat","_toConsumableArray2","unstableBeforeAssetSerializationDebugIdPlugin","Error"],"sources":["../../src/tooling/metroconfig.ts"],"sourcesContent":["// Portions of this file are derived from getsentry/sentry-react-native\n// Copyright (c) 2017 Sentry\n// Licensed under the MIT License: https://github.com/getsentry/sentry-react-native/blob/main/LICENSE.md\n\nimport type { MetroConfig, MixedOutput, Module, ReadOnlyGraph } from 'metro'\nimport { unstableBeforeAssetSerializationDebugIdPlugin } from './posthogMetroSerializer'\nimport type { DefaultConfigOptions } from './vendor/expo/expoconfig'\n\nexport * from './posthogMetroSerializer'\n\nexport interface PostHogMetroConfigOptions {\n /**\n * Whether the plugin is enabled.\n * Set to `false` to disable PostHog's Metro plugins (useful for local development).\n * @default true\n */\n enabled?: boolean\n}\n\nexport interface PostHogExpoConfigOptions {\n /**\n * Pass a custom `getDefaultConfig` function to override the default Expo configuration getter.\n */\n getDefaultConfig?: (projectRoot: string, options?: Record<string, unknown>) => Record<string, unknown>\n}\n\n/**\n * This function returns Default Expo configuration with PostHog plugins.\n */\nexport function getPostHogExpoConfig(\n projectRoot: string,\n options: DefaultConfigOptions & PostHogExpoConfigOptions & PostHogMetroConfigOptions = {}\n): MetroConfig {\n const enabled = options.enabled ?? true\n const getDefaultConfig = options.getDefaultConfig || loadExpoMetroConfigModule().getDefaultConfig\n\n if (!enabled) {\n return getDefaultConfig(projectRoot, options)\n }\n\n const config = getDefaultConfig(projectRoot, {\n ...options,\n unstable_beforeAssetSerializationPlugins: [\n ...(options.unstable_beforeAssetSerializationPlugins || []),\n unstableBeforeAssetSerializationDebugIdPlugin,\n ],\n })\n\n return config\n}\n\nfunction loadExpoMetroConfigModule(): {\n getDefaultConfig: (\n projectRoot: string,\n options: {\n unstable_beforeAssetSerializationPlugins?: ((serializationInput: {\n graph: ReadOnlyGraph<MixedOutput>\n premodules: Module[]\n debugId?: string\n }) => Module[])[]\n }\n ) => MetroConfig\n} {\n try {\n // oxlint-disable-next-line typescript/no-var-requires\n return require('expo/metro-config')\n } catch (e) {\n throw new Error('Unable to load `expo/metro-config`. Make sure you have Expo installed.')\n }\n}\n"],"mappings":"0bAKA,IAAAA,uBAAA,CAAAC,OAAA,6BAGAC,MAAA,CAAAC,IAAA,CAAAH,uBAAA,EAAAI,OAAA,UAAAC,GAAA,KAAAA,GAAA,cAAAA,GAAA,0BAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,CAAAJ,GAAA,YAAAA,GAAA,IAAAK,OAAA,EAAAA,OAAA,CAAAL,GAAA,IAAAL,uBAAA,CAAAK,GAAA,QAAAH,CAAA,OAAAS,cAAA,CAAAD,OAAA,CAAAL,GAAA,EAAAO,UAAA,MAAAC,GAAA,UAAAA,IAAA,SAAAb,uBAAA,CAAAK,GAAA,SAAwC,SAAAS,QAAAC,CAAA,CAAAC,CAAA,MAAAC,CAAA,CAAAf,MAAA,CAAAC,IAAA,CAAAY,CAAA,KAAAb,MAAA,CAAAgB,qBAAA,MAAAC,CAAA,CAAAjB,MAAA,CAAAgB,qBAAA,CAAAH,CAAA,CAAAC,CAAA,IAAAG,CAAA,CAAAA,CAAA,CAAAC,MAAA,UAAAJ,CAAA,SAAAd,MAAA,CAAAmB,wBAAA,CAAAN,CAAA,CAAAC,CAAA,EAAAJ,UAAA,KAAAK,CAAA,CAAAK,IAAA,CAAAC,KAAA,CAAAN,CAAA,CAAAE,CAAA,UAAAF,CAAA,WAAAO,cAAAT,CAAA,UAAAC,CAAA,GAAAA,CAAA,CAAAS,SAAA,CAAAC,MAAA,CAAAV,CAAA,QAAAC,CAAA,OAAAQ,SAAA,CAAAT,CAAA,EAAAS,SAAA,CAAAT,CAAA,IAAAA,CAAA,IAAAF,OAAA,CAAAZ,MAAA,CAAAe,CAAA,MAAAb,OAAA,UAAAY,CAAA,KAAAW,gBAAA,aAAAZ,CAAA,CAAAC,CAAA,CAAAC,CAAA,CAAAD,CAAA,MAAAd,MAAA,CAAA0B,yBAAA,CAAA1B,MAAA,CAAA2B,gBAAA,CAAAd,CAAA,CAAAb,MAAA,CAAA0B,yBAAA,CAAAX,CAAA,GAAAH,OAAA,CAAAZ,MAAA,CAAAe,CAAA,GAAAb,OAAA,UAAAY,CAAA,EAAAd,MAAA,CAAAS,cAAA,CAAAI,CAAA,CAAAC,CAAA,CAAAd,MAAA,CAAAmB,wBAAA,CAAAJ,CAAA,CAAAD,CAAA,cAAAD,CAAA,EAqBlC,QAAU,CAAAe,oBAAoBA,CAClCC,WAAmB,CACsE,IAAzF,CAAAC,OAAO,CAAAP,SAAA,CAAAC,MAAA,IAAAD,SAAA,MAAAQ,SAAA,CAAAR,SAAA,IAAgF,EAAE,C,OAEzF,GAAM,CAAAS,OAAO,EAAAC,EAAA,CAAGH,OAAO,CAACE,OAAO,UAAAC,EAAA,UAAAA,EAAA,CAAI,IAAI,CACvC,GAAM,CAAAC,gBAAgB,CAAGJ,OAAO,CAACI,gBAAgB,EAAIC,yBAAyB,EAAE,CAACD,gBAAgB,CAEjG,GAAI,CAACF,OAAO,CAAE,CACZ,MAAO,CAAAE,gBAAgB,CAACL,WAAW,CAAEC,OAAO,CAAC,CAC/C,CAEA,GAAM,CAAAM,MAAM,CAAGF,gBAAgB,CAACL,WAAW,CAAAP,aAAA,CAAAA,aAAA,IACtCQ,OAAO,MACVO,wCAAwC,IAAAC,MAAA,IAAAC,mBAAA,aAClCT,OAAO,CAACO,wCAAwC,EAAI,EAAE,GAC1DG,qEAA6C,EAC9C,EACF,CAAC,CAEF,MAAO,CAAAJ,MAAM,CACf,CAEA,QAAS,CAAAD,yBAAyBA,CAAA,EAYhC,GAAI,CAEF,MAAO,CAAApC,OAAO,CAAC,mBAAmB,CAAC,CACrC,CAAE,MAAOc,CAAC,CAAE,CACV,KAAM,IAAI,CAAA4B,KAAK,CAAC,wEAAwE,CAAC,CAC3F,CACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"posthogMetroSerializer.js","names":["crypto","_interopRequireWildcard","require","_utils","_utils2","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t2","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_createForOfIteratorHelper","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","_n","F","s","done","value","TypeError","a","u","next","_arrayLikeToArray","toString","slice","constructor","name","from","test","DEBUG_ID_PLACE_HOLDER","DEBUG_ID_MODULE_PATH","SOURCE_MAP_COMMENT","DEBUG_ID_COMMENT","unstableBeforeAssetSerializationDebugIdPlugin","_ref","graph","premodules","debugId","transformOptions","platform","debugIdModuleExists","some","module","path","console","warn","debugIdModule","createDebugIdModule","prependModule","createPostHogMetroSerializer","exports","customSerializer","serializer","createDefaultMetroSerializer","_ref2","_asyncToGenerator2","_regenerator","mark","_callee","entryPoint","options","serializerOptions","modifiedPremodules","serializerResult","_ref3","bundleCode","bundleMapString","debugIdComment","indexOfSourceMapComment","bundleCodeWithDebugId","bundleMap","wrap","_context","prev","isDevServerBuild","abrupt","isExpoStaticExport","modulesOnly","posthogBundleCallback","createPostHogBundleCallback","sent","code","map","determineDebugIdFromBundleSource","Error","log","concat","lastIndexOf","substring","JSON","parse","stringify","stop","_x","_x2","_x3","_x4","apply","arguments","output","sourceUrl","url","URL","jscQueryStart","pathname","indexOf","query","split","includes","URLSearchParams","searchParams","_a","bundle","calculateDebugId","pre","modules","setSource","injectDebugId","getSource","createVirtualJSModule","createDebugIdSnippet","hash","createHash","update","_iterator","_step","_step$value","_slicedToArray2","err","stringToUUID","digest","replace","RegExp"],"sources":["../../src/tooling/posthogMetroSerializer.ts"],"sourcesContent":["// Portions of this file are derived from getsentry/sentry-react-native\n// Copyright (c) 2017 Sentry\n// Licensed under the MIT License: https://github.com/getsentry/sentry-react-native/blob/main/LICENSE.md\n\nimport * as crypto from 'crypto'\n// oxlint-disable-next-line import/no-extraneous-dependencies\nimport type { MixedOutput, Module, ReadOnlyGraph } from 'metro'\nimport type { Bundle, MetroSerializer, VirtualJSOutput } from './utils'\nimport {\n createDebugIdSnippet,\n createVirtualJSModule,\n determineDebugIdFromBundleSource,\n isDevServerBuild,\n prependModule,\n stringToUUID,\n} from './utils'\nimport { createDefaultMetroSerializer } from './vendor/metro/utils'\n\ntype SourceMap = Record<string, unknown>\ntype PostHogSerializerOptions = Parameters<MetroSerializer>[3] & {\n posthogBundleCallback?: (bundle: Bundle) => Bundle\n serializerOptions?: { output?: string }\n}\n\nconst DEBUG_ID_PLACE_HOLDER = '__POSTHOG_CHUNK_ID__'\nconst DEBUG_ID_MODULE_PATH = '__chunkid__'\n\nconst SOURCE_MAP_COMMENT = '//# sourceMappingURL='\nconst DEBUG_ID_COMMENT = '//# chunkId='\n\n/**\n * Adds PostHog Chunk ID polyfill module to the bundle.\n */\nexport function unstableBeforeAssetSerializationDebugIdPlugin({\n graph,\n premodules,\n debugId,\n}: {\n graph: ReadOnlyGraph<MixedOutput>\n premodules: Module[]\n debugId?: string\n}): Module[] {\n // Skip for web platform - sourcemaps are handled differently for web builds\n if (graph.transformOptions.platform === 'web') {\n return premodules\n }\n\n if (!debugId) {\n return premodules\n }\n\n const debugIdModuleExists = premodules.some((module) => module.path === DEBUG_ID_MODULE_PATH)\n if (debugIdModuleExists) {\n // oxlint-disable-next-line no-console\n console.warn('\\n\\nChunk ID module found. Skipping PostHog Chunk ID module...\\n\\n')\n return premodules\n }\n\n const debugIdModule = createDebugIdModule(debugId)\n return prependModule(premodules, debugIdModule)\n}\n\n/**\n * Creates a Metro serializer that adds Chunk ID module to the plain bundle.\n * The Chunk ID module is a virtual module that provides a Chunk ID in runtime.\n * Expo static exports are delegated unchanged. Use getPostHogExpoConfig to\n * enable PostHog Chunk IDs through Expo's per-asset serialization hook.\n *\n * RAM Bundles do not support custom serializers.\n */\nexport const createPostHogMetroSerializer = (customSerializer?: MetroSerializer): MetroSerializer => {\n const serializer = customSerializer || createDefaultMetroSerializer()\n return async function (entryPoint, premodules, graph, options) {\n if (isDevServerBuild(graph, options)) {\n return serializer(entryPoint, premodules, graph, options)\n }\n\n // Expo static exports can contain multiple assets (or JSON), not one plain\n // bundle. Its per-asset PostHog plugin injects real IDs before source maps\n // are generated. A placeholder here would prevent that plugin from running.\n if (customSerializer && isExpoStaticExport(options)) {\n return serializer(entryPoint, premodules, graph, options)\n }\n\n const debugIdModuleExists = premodules.some((module) => module.path === DEBUG_ID_MODULE_PATH)\n if (debugIdModuleExists) {\n // oxlint-disable-next-line no-console\n console.warn('Chunk ID module found. Skipping PostHog Chunk ID module...')\n return serializer(entryPoint, premodules, graph, options)\n }\n\n // Async chunks are serialized with `modulesOnly`, which drops the premodules\n // that carry the Chunk ID. There is nothing to inject into such a chunk.\n if (options.modulesOnly) {\n return serializer(entryPoint, premodules, graph, options)\n }\n\n const debugIdModule = createDebugIdModule(DEBUG_ID_PLACE_HOLDER)\n const serializerOptions = options as PostHogSerializerOptions\n serializerOptions.posthogBundleCallback = createPostHogBundleCallback(debugIdModule)\n const modifiedPremodules = prependModule(premodules, debugIdModule)\n\n // The default serializer invokes posthogBundleCallback after Metro assembles\n // the bundle and before it renders code/source maps, so both outputs contain\n // the same real Chunk ID.\n const serializerResult = await serializer(entryPoint, modifiedPremodules, graph, serializerOptions)\n const { code: bundleCode, map: bundleMapString } =\n typeof serializerResult === 'string' ? { code: serializerResult, map: '{}' } : serializerResult\n\n const debugId = determineDebugIdFromBundleSource(bundleCode)\n if (!debugId) {\n throw new Error('Chunk ID was not found in the bundle.')\n }\n\n // Only print Chunk ID for command line builds => not hot reload from dev server\n // oxlint-disable-next-line no-console\n console.log('info ' + `Bundle Chunk ID: ${debugId}`)\n\n const debugIdComment = `${DEBUG_ID_COMMENT}${debugId}`\n const indexOfSourceMapComment = bundleCode.lastIndexOf(SOURCE_MAP_COMMENT)\n const bundleCodeWithDebugId =\n indexOfSourceMapComment === -1\n ? // If source map comment is missing lets just add the Chunk ID comment\n `${bundleCode}\\n${debugIdComment}`\n : // If source map comment is present lets add the Chunk ID comment before it\n `${bundleCode.substring(0, indexOfSourceMapComment) + debugIdComment}\\n${bundleCode.substring(\n indexOfSourceMapComment\n )}`\n\n const bundleMap: SourceMap = JSON.parse(bundleMapString)\n bundleMap['chunkId'] = debugId\n\n return {\n code: bundleCodeWithDebugId,\n map: JSON.stringify(bundleMap),\n }\n }\n}\n\nfunction isExpoStaticExport(options: PostHogSerializerOptions): boolean {\n // Match Expo's precedence: explicit serializer options override the URL,\n // even when they do not specify an output mode.\n if (options.serializerOptions) {\n return options.serializerOptions.output === 'static'\n }\n if (!options.sourceUrl) {\n return false\n }\n\n try {\n const url = new URL(options.sourceUrl, 'https://expo.dev')\n // JSC-safe URLs move the query into the path after //&. Only decode that\n // form when there is no actual query, as Expo's serializer does.\n const jscQueryStart = url.pathname.indexOf('//&')\n const query =\n !options.sourceUrl.split('#')[0].includes('?') && jscQueryStart !== -1\n ? new URLSearchParams(url.pathname.slice(jscQueryStart + 3))\n : url.searchParams\n return query.get('serializer.output') === 'static'\n } catch {\n return false\n }\n}\n\n/**\n * Called by the default Metro serializer after baseJSBundle has produced the\n * final bundle but before source-map generation. That ordering is important:\n * both generated code and sourcesContent must contain the same real Chunk ID.\n */\nfunction createPostHogBundleCallback(\n debugIdModule: Module<VirtualJSOutput> & { setSource: (code: string) => void }\n): (bundle: Bundle) => Bundle {\n return (bundle) => {\n const debugId = calculateDebugId(bundle.pre, bundle.modules)\n debugIdModule.setSource(injectDebugId(debugIdModule.getSource().toString(), debugId))\n bundle.pre = injectDebugId(bundle.pre, debugId)\n return bundle\n }\n}\n\nfunction createDebugIdModule(debugId: string): Module<VirtualJSOutput> & { setSource: (code: string) => void } {\n return createVirtualJSModule(DEBUG_ID_MODULE_PATH, createDebugIdSnippet(debugId))\n}\n\nfunction calculateDebugId(bundleCode: string, modules?: Array<[id: number, code: string]>): string {\n const hash = crypto.createHash('md5')\n hash.update(bundleCode)\n if (modules) {\n for (const [, code] of modules) {\n hash.update(code)\n }\n }\n return stringToUUID(hash.digest('hex'))\n}\n\nfunction injectDebugId(code: string, debugId: string): string {\n return code.replace(new RegExp(DEBUG_ID_PLACE_HOLDER, 'g'), debugId)\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"posthogMetroSerializer.js","names":["crypto","_interopRequireWildcard","require","_utils","_utils2","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t2","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_createForOfIteratorHelper","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","_n","F","s","done","value","TypeError","a","u","next","_arrayLikeToArray","toString","slice","constructor","name","from","test","DEBUG_ID_PLACE_HOLDER","DEBUG_ID_MODULE_PATH","SOURCE_MAP_COMMENT","DEBUG_ID_COMMENT","unstableBeforeAssetSerializationDebugIdPlugin","_ref","graph","premodules","debugId","transformOptions","platform","debugIdModuleExists","some","module","path","console","warn","debugIdModule","createDebugIdModule","prependModule","createPostHogMetroSerializer","exports","customSerializer","serializer","createDefaultMetroSerializer","_ref2","_asyncToGenerator2","_regenerator","mark","_callee","entryPoint","options","serializerOptions","modifiedPremodules","serializerResult","_ref3","bundleCode","bundleMapString","debugIdComment","indexOfSourceMapComment","bundleCodeWithDebugId","bundleMap","wrap","_context","prev","isDevServerBuild","abrupt","isExpoStaticExport","modulesOnly","posthogBundleCallback","createPostHogBundleCallback","sent","code","map","determineDebugIdFromBundleSource","Error","log","concat","lastIndexOf","substring","JSON","parse","stringify","stop","_x","_x2","_x3","_x4","apply","arguments","output","sourceUrl","url","URL","jscQueryStart","pathname","indexOf","query","split","includes","URLSearchParams","searchParams","bundle","calculateDebugId","pre","modules","setSource","injectDebugId","getSource","createVirtualJSModule","createDebugIdSnippet","hash","createHash","update","_iterator","_step","_step$value","_slicedToArray2","err","stringToUUID","digest","replace","RegExp"],"sources":["../../src/tooling/posthogMetroSerializer.ts"],"sourcesContent":["// Portions of this file are derived from getsentry/sentry-react-native\n// Copyright (c) 2017 Sentry\n// Licensed under the MIT License: https://github.com/getsentry/sentry-react-native/blob/main/LICENSE.md\n\nimport * as crypto from 'crypto'\n// oxlint-disable-next-line import/no-extraneous-dependencies\nimport type { MixedOutput, Module, ReadOnlyGraph } from 'metro'\nimport type { Bundle, MetroSerializer, VirtualJSOutput } from './utils'\nimport {\n createDebugIdSnippet,\n createVirtualJSModule,\n determineDebugIdFromBundleSource,\n isDevServerBuild,\n prependModule,\n stringToUUID,\n} from './utils'\nimport { createDefaultMetroSerializer } from './vendor/metro/utils'\n\ntype SourceMap = Record<string, unknown>\ntype PostHogSerializerOptions = Parameters<MetroSerializer>[3] & {\n posthogBundleCallback?: (bundle: Bundle) => Bundle\n serializerOptions?: { output?: string }\n}\n\nconst DEBUG_ID_PLACE_HOLDER = '__POSTHOG_CHUNK_ID__'\nconst DEBUG_ID_MODULE_PATH = '__chunkid__'\n\nconst SOURCE_MAP_COMMENT = '//# sourceMappingURL='\nconst DEBUG_ID_COMMENT = '//# chunkId='\n\n/**\n * Adds PostHog Chunk ID polyfill module to the bundle.\n */\nexport function unstableBeforeAssetSerializationDebugIdPlugin({\n graph,\n premodules,\n debugId,\n}: {\n graph: ReadOnlyGraph<MixedOutput>\n premodules: Module[]\n debugId?: string\n}): Module[] {\n // Skip for web platform - sourcemaps are handled differently for web builds\n if (graph.transformOptions.platform === 'web') {\n return premodules\n }\n\n if (!debugId) {\n return premodules\n }\n\n const debugIdModuleExists = premodules.some((module) => module.path === DEBUG_ID_MODULE_PATH)\n if (debugIdModuleExists) {\n // oxlint-disable-next-line no-console\n console.warn('\\n\\nChunk ID module found. Skipping PostHog Chunk ID module...\\n\\n')\n return premodules\n }\n\n const debugIdModule = createDebugIdModule(debugId)\n return prependModule(premodules, debugIdModule)\n}\n\n/**\n * Creates a Metro serializer that adds Chunk ID module to the plain bundle.\n * The Chunk ID module is a virtual module that provides a Chunk ID in runtime.\n * Expo static exports are delegated unchanged. Use getPostHogExpoConfig to\n * enable PostHog Chunk IDs through Expo's per-asset serialization hook.\n *\n * RAM Bundles do not support custom serializers.\n */\nexport const createPostHogMetroSerializer = (customSerializer?: MetroSerializer): MetroSerializer => {\n const serializer = customSerializer || createDefaultMetroSerializer()\n return async function (entryPoint, premodules, graph, options) {\n if (isDevServerBuild(graph, options)) {\n return serializer(entryPoint, premodules, graph, options)\n }\n\n // Expo static exports can contain multiple assets (or JSON), not one plain\n // bundle. Its per-asset PostHog plugin injects real IDs before source maps\n // are generated. A placeholder here would prevent that plugin from running.\n if (customSerializer && isExpoStaticExport(options)) {\n return serializer(entryPoint, premodules, graph, options)\n }\n\n const debugIdModuleExists = premodules.some((module) => module.path === DEBUG_ID_MODULE_PATH)\n if (debugIdModuleExists) {\n // oxlint-disable-next-line no-console\n console.warn('Chunk ID module found. Skipping PostHog Chunk ID module...')\n return serializer(entryPoint, premodules, graph, options)\n }\n\n // Async chunks are serialized with `modulesOnly`, which drops the premodules\n // that carry the Chunk ID. There is nothing to inject into such a chunk.\n if (options.modulesOnly) {\n return serializer(entryPoint, premodules, graph, options)\n }\n\n const debugIdModule = createDebugIdModule(DEBUG_ID_PLACE_HOLDER)\n const serializerOptions = options as PostHogSerializerOptions\n serializerOptions.posthogBundleCallback = createPostHogBundleCallback(debugIdModule)\n const modifiedPremodules = prependModule(premodules, debugIdModule)\n\n // The default serializer invokes posthogBundleCallback after Metro assembles\n // the bundle and before it renders code/source maps, so both outputs contain\n // the same real Chunk ID.\n const serializerResult = await serializer(entryPoint, modifiedPremodules, graph, serializerOptions)\n const { code: bundleCode, map: bundleMapString } =\n typeof serializerResult === 'string' ? { code: serializerResult, map: '{}' } : serializerResult\n\n const debugId = determineDebugIdFromBundleSource(bundleCode)\n if (!debugId) {\n throw new Error('Chunk ID was not found in the bundle.')\n }\n\n // Only print Chunk ID for command line builds => not hot reload from dev server\n // oxlint-disable-next-line no-console\n console.log('info ' + `Bundle Chunk ID: ${debugId}`)\n\n const debugIdComment = `${DEBUG_ID_COMMENT}${debugId}`\n const indexOfSourceMapComment = bundleCode.lastIndexOf(SOURCE_MAP_COMMENT)\n const bundleCodeWithDebugId =\n indexOfSourceMapComment === -1\n ? // If source map comment is missing lets just add the Chunk ID comment\n `${bundleCode}\\n${debugIdComment}`\n : // If source map comment is present lets add the Chunk ID comment before it\n `${bundleCode.substring(0, indexOfSourceMapComment) + debugIdComment}\\n${bundleCode.substring(\n indexOfSourceMapComment\n )}`\n\n const bundleMap: SourceMap = JSON.parse(bundleMapString)\n bundleMap['chunkId'] = debugId\n\n return {\n code: bundleCodeWithDebugId,\n map: JSON.stringify(bundleMap),\n }\n }\n}\n\nfunction isExpoStaticExport(options: PostHogSerializerOptions): boolean {\n // Match Expo's precedence: explicit serializer options override the URL,\n // even when they do not specify an output mode.\n if (options.serializerOptions) {\n return options.serializerOptions.output === 'static'\n }\n if (!options.sourceUrl) {\n return false\n }\n\n try {\n const url = new URL(options.sourceUrl, 'https://expo.dev')\n // JSC-safe URLs move the query into the path after //&. Only decode that\n // form when there is no actual query, as Expo's serializer does.\n const jscQueryStart = url.pathname.indexOf('//&')\n const query =\n !options.sourceUrl.split('#')[0].includes('?') && jscQueryStart !== -1\n ? new URLSearchParams(url.pathname.slice(jscQueryStart + 3))\n : url.searchParams\n return query.get('serializer.output') === 'static'\n } catch {\n return false\n }\n}\n\n/**\n * Called by the default Metro serializer after baseJSBundle has produced the\n * final bundle but before source-map generation. That ordering is important:\n * both generated code and sourcesContent must contain the same real Chunk ID.\n */\nfunction createPostHogBundleCallback(\n debugIdModule: Module<VirtualJSOutput> & { setSource: (code: string) => void }\n): (bundle: Bundle) => Bundle {\n return (bundle) => {\n const debugId = calculateDebugId(bundle.pre, bundle.modules)\n debugIdModule.setSource(injectDebugId(debugIdModule.getSource().toString(), debugId))\n bundle.pre = injectDebugId(bundle.pre, debugId)\n return bundle\n }\n}\n\nfunction createDebugIdModule(debugId: string): Module<VirtualJSOutput> & { setSource: (code: string) => void } {\n return createVirtualJSModule(DEBUG_ID_MODULE_PATH, createDebugIdSnippet(debugId))\n}\n\nfunction calculateDebugId(bundleCode: string, modules?: Array<[id: number, code: string]>): string {\n const hash = crypto.createHash('md5')\n hash.update(bundleCode)\n if (modules) {\n for (const [, code] of modules) {\n hash.update(code)\n }\n }\n return stringToUUID(hash.digest('hex'))\n}\n\nfunction injectDebugId(code: string, debugId: string): string {\n return code.replace(new RegExp(DEBUG_ID_PLACE_HOLDER, 'g'), debugId)\n}\n"],"mappings":"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","ignoreList":[]}