@peulda/expo-plugin-channel-io
Version:
Expo plugin for channel.io
74 lines (73 loc) • 3.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.withAndroidChannelPlugin = void 0;
const config_plugins_1 = require("expo/config-plugins");
// This source code is based on https://github.com/expo/expo/blob/435bbba/packages/expo-dev-menu/plugin/src/withDevMenu.ts#L30
function addJavaImports(javaSource, javaImports) {
const lines = javaSource.split('\n');
const lineIndexWithPackageDeclaration = lines.findIndex((line) => line.match(/^package .*;$/));
for (const javaImport of javaImports) {
if (!javaSource.includes(javaImport)) {
const importStatement = `import ${javaImport};`;
lines.splice(lineIndexWithPackageDeclaration + 1, 0, importStatement);
}
}
return lines.join('\n');
}
function modifyJavaMainActivity(contents) {
contents = addJavaImports(contents, [
'com.zoyi.channel.plugin.android.ChannelIO',
]);
const lines = contents.split('\n');
const initialized = lines.some((line) => line.includes('ChannelIO.initialize(this);'));
if (initialized) {
return contents;
}
const onApplicationCreateIndex = lines.findIndex((line) => line.includes('ApplicationLifecycleDispatcher.onApplicationCreate(this);'));
if (onApplicationCreateIndex === -1) {
config_plugins_1.WarningAggregator.addWarningAndroid('@peulda/expo-plugin-channel-io', 'Failed to add ChannelIO.initialize(this); to MainActivity.java. You will need to manually add it to your MainActivity.java');
return contents;
}
lines.splice(onApplicationCreateIndex + 1, 0, ' ChannelIO.initialize(this);');
return lines.join('\n');
}
function addKotlinImports(kotlinSource, kotlinImports) {
const lines = kotlinSource.split('\n');
const lineIndexWithPackageDeclaration = lines.findIndex((line) => line.match(/^package .*$/));
for (const kotlinImport of kotlinImports) {
if (!kotlinSource.includes(kotlinImport)) {
const importStatement = `import ${kotlinImport}`;
lines.splice(lineIndexWithPackageDeclaration + 1, 0, importStatement);
}
}
return lines.join('\n');
}
function modifyKotlinMainActivity(contents) {
contents = addKotlinImports(contents, [
'com.zoyi.channel.plugin.android.ChannelIO',
]);
const lines = contents.split('\n');
const initialized = lines.some((line) => line.includes('ChannelIO.initialize(this)'));
if (initialized) {
return contents;
}
const onApplicationCreateIndex = lines.findIndex((line) => line.includes('ApplicationLifecycleDispatcher.onApplicationCreate(this)'));
if (onApplicationCreateIndex === -1) {
config_plugins_1.WarningAggregator.addWarningAndroid('@peulda/expo-plugin-channel-io', 'Failed to add ChannelIO.initialize(this) to MainActivity.kt. You will need to manually add it to your MainActivity.kt');
return contents;
}
lines.splice(onApplicationCreateIndex + 1, 0, ' ChannelIO.initialize(this)');
return lines.join('\n');
}
const withAndroidChannelPlugin = (config) => {
return (0, config_plugins_1.withMainApplication)(config, (config) => {
if (config.modResults.language === 'java') {
config.modResults.contents = modifyJavaMainActivity(config.modResults.contents);
}
else {
config.modResults.contents = modifyKotlinMainActivity(config.modResults.contents);
}
return config;
});
};
exports.withAndroidChannelPlugin = withAndroidChannelPlugin;