UNPKG

expo-eas-observe

Version:

Expo module that exposes various app metrics and sends them to EAS Observe

50 lines (42 loc) 1.51 kB
import { withMainApplication, type ConfigPlugin } from 'expo/config-plugins'; const withAndroidAppMetrics: ConfigPlugin = (config) => { return withMainApplication(config, (config) => { const mainApplication = config.modResults; const importsMod = addImports( mainApplication.contents, ['expo.modules.appmetrics.appstartup.AppStartupManager'], false ); let contents = importsMod; if (!mainApplication.contents.includes('AppStartupManager.markOnCreate()')) { contents = appendMarkOnCreate(contents); } return { ...config, modResults: { ...config.modResults, contents, }, }; }); }; // Copied from https://github.com/expo/expo/blob/main/packages/expo-web-browser/plugin/src/utils.ts function addImports(source: string, imports: string[], isJava: boolean): string { const lines = source.split('\n'); const lineIndexWithPackageDeclaration = lines.findIndex((line) => line.match(/^package .*;?$/)); for (const javaImport of imports) { if (!source.includes(javaImport)) { const importStatement = `import ${javaImport}${isJava ? ';' : ''}`; lines.splice(lineIndexWithPackageDeclaration + 2, 0, importStatement); } } return lines.join('\n'); } function appendMarkOnCreate(source: string): string { // $1 includes indentation return source.replace( /^(\s*)super\.onCreate\(\)$/m, '$1super.onCreate()\n$1AppStartupManager.markOnCreate()' ); } export default withAndroidAppMetrics;