expo-eas-observe
Version:
Expo module that exposes various app metrics and sends them to EAS Observe
50 lines (42 loc) • 1.51 kB
text/typescript
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;