{"version":3,"sources":["../../plugin/withAmply.ts","../../plugin/index.ts"],"sourcesContent":["import {\n  ConfigPlugin,\n  withGradleProperties,\n  withProjectBuildGradle,\n  withMainApplication,\n  withSettingsGradle,\n  withAppBuildGradle,\n  AndroidConfig,\n} from '@expo/config-plugins';\nimport { mergeContents } from '@expo/config-plugins/build/utils/generateCode';\nimport { addImports } from '@expo/config-plugins/build/android/codeMod';\n\nconst DEFAULT_SDK_VERSION = '0.1.7';\nconst GITHUB_MAVEN_URL = 'https://maven.pkg.github.com/amply/sdk';\nconst GITHUB_MAVEN_CREDENTIALS_ENV = {\n  username: 'AMPLY_MAVEN_USERNAME',\n  password: 'AMPLY_MAVEN_PASSWORD',\n};\n\nconst GITHUB_GRADLE_REPOSITORY_SNIPPET = `\n        maven {\n            url '${GITHUB_MAVEN_URL}'\n            credentials {\n                username findProperty('${GITHUB_MAVEN_CREDENTIALS_ENV.username}') ?: System.getenv('${GITHUB_MAVEN_CREDENTIALS_ENV.username}')\n                password findProperty('${GITHUB_MAVEN_CREDENTIALS_ENV.password}') ?: System.getenv('${GITHUB_MAVEN_CREDENTIALS_ENV.password}')\n            }\n        }\n`;\n\nconst GRADLE_DEPENDENCY_LINE = `    implementation(\"tools.amply:sdk-android:${'$'}{project.findProperty('amplySdkVersion') ?: System.getenv('AMPLY_SDK_VERSION') ?: '${DEFAULT_SDK_VERSION}'}\")`;\n\nfunction applyGithubMavenRepository(contents: string): string {\n  if (contents.includes(GITHUB_MAVEN_URL)) {\n    return contents;\n  }\n\n  const repositoriesBlock = /(repositories\\s*\\{[\\s\\S]*?\\n\\})/;\n  if (repositoriesBlock.test(contents)) {\n    return contents.replace(repositoriesBlock, match => {\n      if (match.includes(GITHUB_MAVEN_URL)) {\n        return match;\n      }\n      return match.replace(/\\n\\}/, `\\n${GITHUB_GRADLE_REPOSITORY_SNIPPET}    }`);\n    });\n  }\n\n  // Fallback: append at the end of settings block\n  return `${contents}\\nrepositories {${GITHUB_GRADLE_REPOSITORY_SNIPPET}}\\n`;\n}\n\nfunction applyDependency(contents: string): string {\n  if (contents.includes('tools.amply:sdk-android')) {\n    return contents;\n  }\n\n  const dependenciesBlock = /(dependencies\\s*\\{[\\s\\S]*?\\n\\})/;\n  if (dependenciesBlock.test(contents)) {\n    return contents.replace(dependenciesBlock, match => {\n      if (match.includes('tools.amply:sdk-android')) {\n        return match;\n      }\n      return match.replace(/\\n\\}/, `\\n${GRADLE_DEPENDENCY_LINE}\\n}`);\n    });\n  }\n\n  return `${contents}\\ndependencies {\\n${GRADLE_DEPENDENCY_LINE}\\n}\\n`;\n}\n\ntype WithAmplyPluginProps = {\n  sdkVersion?: string;\n  /**\n   * Optional escape hatch for internal builds that still rely on GitHub Packages.\n   * Public installs resolve from Maven Central without any additional repositories.\n   */\n  useGithubFallbackRepo?: boolean;\n};\n\nfunction addAmplyPackageRegistration(contents: string, language: 'java' | 'kt'): string {\n  // Check if AmplyPackage is already registered\n  if (contents.includes('AmplyPackage')) {\n    console.log('[Amply] AmplyPackage already registered in MainApplication');\n    return contents;\n  }\n\n  // Add import if not present\n  if (!contents.includes('import com.amply.reactnative.AmplyPackage')) {\n    contents = addImports(contents, ['com.amply.reactnative.AmplyPackage'], language === 'java');\n    console.log('[Amply] Added AmplyPackage import to MainApplication');\n  }\n\n  // Determine the correct syntax for the language\n  const amplyPackageCall = language === 'java' ? 'add(new AmplyPackage());' : 'add(AmplyPackage())';\n\n  // Add AmplyPackage() to the packages list in getPackages() method\n  // Use mergeContents for safe, idempotent insertion\n  const result = mergeContents({\n    src: contents,\n    newSrc: amplyPackageCall,\n    tag: 'amply-package-registration',\n    anchor: /(?<=\\.apply\\s*\\{[\\s]*)/,\n    offset: 0,\n    comment: language === 'java' ? '//' : '//',\n  });\n\n  if (result.didMerge) {\n    console.log('[Amply] Registered AmplyPackage in getPackages() method');\n    return result.contents;\n  } else {\n    console.warn('[Amply] Could not register AmplyPackage - anchor pattern not found');\n    return contents;\n  }\n}\n\nconst withAmply: ConfigPlugin<WithAmplyPluginProps> = (config, props = {}) => {\n  const {sdkVersion, useGithubFallbackRepo = false} = props;\n  const version = sdkVersion ?? DEFAULT_SDK_VERSION;\n\n  config = withGradleProperties(config, gradleConfig => {\n    const exists = gradleConfig.modResults.find(\n      item => item.type === 'property' && item.key === 'amplySdkVersion'\n    );\n    if (!exists) {\n      gradleConfig.modResults.push({ type: 'property', key: 'amplySdkVersion', value: version });\n    }\n    return gradleConfig;\n  });\n\n  config = withProjectBuildGradle(config, gradleConfig => {\n    if (useGithubFallbackRepo) {\n      gradleConfig.modResults.contents = applyGithubMavenRepository(gradleConfig.modResults.contents);\n    }\n    gradleConfig.modResults.contents = applyDependency(gradleConfig.modResults.contents);\n    return gradleConfig;\n  });\n\n  // Add Amply native module to settings.gradle\n  config = withSettingsGradle(config, gradleConfig => {\n    const contents = gradleConfig.modResults.contents;\n\n    // Only add if not already present\n    if (contents.includes(':amplyreactnative')) {\n      console.log('[Amply] Amply module already configured in settings.gradle');\n      return gradleConfig;\n    }\n\n    // Add the Amply native module include configuration after the last includeBuild statement\n    const moduleConfig = \"\\n\\ninclude ':amplyreactnative'\\nproject(':amplyreactnative').projectDir = new File(rootProject.projectDir, '../../../android')\";\n\n    const lastIncludeBuildMatch = contents.lastIndexOf('includeBuild');\n    let modified = contents;\n\n    if (lastIncludeBuildMatch !== -1) {\n      const nextNewlineAfterIncludeBuild = contents.indexOf('\\n', lastIncludeBuildMatch);\n      if (nextNewlineAfterIncludeBuild !== -1) {\n        modified =\n          contents.slice(0, nextNewlineAfterIncludeBuild + 1) +\n          moduleConfig +\n          contents.slice(nextNewlineAfterIncludeBuild + 1);\n        console.log('[Amply] Added Amply module include to settings.gradle');\n      }\n    } else {\n      // Fallback: append at the end\n      modified = contents + moduleConfig;\n      console.log('[Amply] Appended Amply module include to settings.gradle (no includeBuild found)');\n    }\n\n    gradleConfig.modResults.contents = modified;\n    return gradleConfig;\n  });\n\n  // Add Amply native module dependency to app/build.gradle\n  config = withAppBuildGradle(config, gradleConfig => {\n    const contents = gradleConfig.modResults.contents;\n\n    // Only add if not already present\n    if (contents.includes(':amplyreactnative')) {\n      console.log('[Amply] Amply module already configured in app/build.gradle');\n      return gradleConfig;\n    }\n\n    // Add the Amply native module dependency after the first implementation statement\n    const depsStart = contents.indexOf('dependencies {');\n    if (depsStart !== -1) {\n      const firstImplAfterDeps = contents.indexOf('implementation', depsStart);\n      if (firstImplAfterDeps !== -1) {\n        const lineEnd = contents.indexOf('\\n', firstImplAfterDeps);\n        if (lineEnd !== -1) {\n          const moduleImpl = \"\\n\\n    // Amply React Native module\\n    implementation project(':amplyreactnative')\";\n          gradleConfig.modResults.contents =\n            contents.slice(0, lineEnd) +\n            moduleImpl +\n            contents.slice(lineEnd);\n          console.log('[Amply] Added Amply module dependency to app/build.gradle');\n        }\n      }\n    }\n\n    return gradleConfig;\n  });\n\n  // Register AmplyPackage in MainApplication using proper Expo API\n  // This hook runs AFTER the MainApplication file is generated by Expo\n  config = withMainApplication(config, async config => {\n    const { contents, language } = config.modResults;\n    const modified = addAmplyPackageRegistration(contents, language);\n    config.modResults.contents = modified;\n    return config;\n  });\n\n  return config;\n};\n\nexport default withAmply;\n","import type {ConfigPlugin} from '@expo/config-plugins';\nimport withAmply from './withAmply';\n\nconst plugin: ConfigPlugin<{ sdkVersion?: string }> = (config, props) =>\n  withAmply(config, props);\n\nexport default plugin;\n"],"mappings":"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","names":["config"]}