UNPKG

@peulda/expo-plugin-channel-io

Version:
74 lines (73 loc) 3.53 kB
"use strict"; 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;