UNPKG

mx-jpush-expo

Version:

Expo 集成极光推送(JPush)一体化解决方案,支持 iOS/Android 厂商通道

154 lines 6.36 kB
"use strict"; /** * Android project/build.gradle 配置 * 添加厂商通道所需的 classpath 依赖 */ Object.defineProperty(exports, "__esModule", { value: true }); exports.applyAndroidProjectBuildGradle = applyAndroidProjectBuildGradle; exports.withAndroidProjectBuildGradle = withAndroidProjectBuildGradle; const config_plugins_1 = require("expo/config-plugins"); const generateCode_1 = require("../utils/generateCode"); const sourceCode_1 = require("../utils/sourceCode"); const LEGACY_PROJECT_BUILD_TAGS = [ 'jpush-buildscript-repositories', 'jpush-buildscript-classpaths', 'jpush-allprojects-repositories', 'jpush-huawei-maven-buildscript', 'jpush-honor-maven-buildscript', 'jpush-vendor-classpaths', 'jpush-huawei-maven-allprojects', 'jpush-honor-maven-allprojects', ]; function getProjectVendorFlags(vendorChannels) { if (!vendorChannels) { return {}; } return Object.fromEntries(Object.entries(vendorChannels).map(([key, value]) => [ key, Boolean(value?.enabled || value?.appId || value?.appKey), ])); } function getBuildscriptRepositories(vendorChannels) { const flags = getProjectVendorFlags(vendorChannels); const repositories = []; if (flags.huawei) { repositories.push(`maven { url 'https://developer.huawei.com/repo/' }`); } if (flags.honor) { repositories.push(`maven { url 'https://developer.hihonor.com/repo' }`); } return repositories.join('\n '); } /** * 获取厂商通道开启标记 */ const getVendorClasspaths = (vendorChannels) => { const isHuaweiEnabled = vendorChannels?.huawei?.enabled === true; const isFcmEnabled = vendorChannels?.fcm?.enabled === true; const classpaths = []; if (isFcmEnabled) { classpaths.push(`// Google Services for FCM`); classpaths.push(`classpath 'com.google.gms:google-services:4.4.0'`); } if (isHuaweiEnabled) { classpaths.push(`// Huawei AGConnect`); classpaths.push(`classpath 'com.huawei.agconnect:agcp:1.9.3.302'`); } return classpaths.join('\n '); }; /** * 生成 allprojects repositories 仓库依赖 */ const getAllprojectsRepositories = (vendorChannels) => { const flags = getProjectVendorFlags(vendorChannels); const repositories = []; if (flags.huawei) { repositories.push(`maven { url 'https://developer.huawei.com/repo/' }`); } if (flags.honor) { repositories.push(`maven { url 'https://developer.hihonor.com/repo' }`); } return repositories.join('\n '); }; function ensureProjectBuildscriptBlock(src) { try { let nextContents = (0, sourceCode_1.ensureTopLevelBlock)(src, 'buildscript'); nextContents = (0, sourceCode_1.ensureNestedBlock)(nextContents, /^\s*buildscript\s*\{/, 'repositories'); nextContents = (0, sourceCode_1.ensureNestedBlock)(nextContents, /^\s*buildscript\s*\{/, 'dependencies'); return nextContents; } catch (error) { console.warn('[MX_JPush_Expo] 无法确保 buildscript 块结构:', error); return src; } } function ensureProjectAllprojectsBlock(src) { try { let nextContents = (0, sourceCode_1.ensureTopLevelBlock)(src, 'allprojects'); nextContents = (0, sourceCode_1.ensureNestedBlock)(nextContents, /^\s*allprojects\s*\{/, 'repositories'); return nextContents; } catch (error) { console.warn('[MX_JPush_Expo] 无法确保 allprojects 块结构:', error); return src; } } function removeLegacyGeneratedSections(contents) { return LEGACY_PROJECT_BUILD_TAGS.reduce((currentContents, tag) => { return (0, generateCode_1.removeGeneratedContents)(currentContents, tag) ?? currentContents; }, contents); } function applyAndroidProjectBuildGradle(contents, vendorChannels) { let nextContents = removeLegacyGeneratedSections(contents); const buildscriptRepositories = getBuildscriptRepositories(vendorChannels); const buildscriptClasspaths = getVendorClasspaths(vendorChannels); if (buildscriptRepositories || buildscriptClasspaths) { nextContents = ensureProjectBuildscriptBlock(nextContents); } const allprojectsRepositories = getAllprojectsRepositories(vendorChannels); if (allprojectsRepositories) { nextContents = ensureProjectAllprojectsBlock(nextContents); } const buildscriptRepositoriesRange = (0, sourceCode_1.findNestedBlockRange)(nextContents, /^\s*buildscript\s*\{/, /^\s*repositories\s*\{/); if (buildscriptRepositoriesRange) { nextContents = (0, generateCode_1.syncGeneratedContentsAtLine)({ src: nextContents, newSrc: buildscriptRepositories, tag: 'jpush-buildscript-repositories', lineIndex: buildscriptRepositoriesRange.startLine, offset: 1, comment: '//', }).contents; } const buildscriptDependenciesRange = (0, sourceCode_1.findNestedBlockRange)(nextContents, /^\s*buildscript\s*\{/, /^\s*dependencies\s*\{/); if (buildscriptDependenciesRange) { nextContents = (0, generateCode_1.syncGeneratedContentsAtLine)({ src: nextContents, newSrc: buildscriptClasspaths, tag: 'jpush-buildscript-classpaths', lineIndex: buildscriptDependenciesRange.startLine, offset: 1, comment: '//', }).contents; } const allprojectsRepositoriesRange = (0, sourceCode_1.findNestedBlockRange)(nextContents, /^\s*allprojects\s*\{/, /^\s*repositories\s*\{/); if (allprojectsRepositoriesRange) { nextContents = (0, generateCode_1.syncGeneratedContentsAtLine)({ src: nextContents, newSrc: allprojectsRepositories, tag: 'jpush-allprojects-repositories', lineIndex: allprojectsRepositoriesRange.startLine, offset: 1, comment: '//', }).contents; } return nextContents; } function withAndroidProjectBuildGradle(config, props) { return (0, config_plugins_1.withProjectBuildGradle)(config, (config) => { const { vendorChannels } = props; config.modResults.contents = applyAndroidProjectBuildGradle(config.modResults.contents, vendorChannels); return config; }); } //# sourceMappingURL=projectBuildGradle.js.map