#!/usr/bin/env node /** * Post-sync script to fix Capacitor auto-generated files * * Fixes: * 1. capacitor.plugins.json - Ensures DailyNotification plugin is registered * 2. capacitor.settings.gradle - Corrects plugin path from android/ to android/plugin/ * * This script should run automatically after 'npx cap sync android' * to fix issues with Capacitor's auto-generated files. * * @author Matthew Raymer */ import fs from 'fs'; import path from 'path'; import { fileURLToPath } from 'url'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const PLUGINS_JSON_PATH = path.join(__dirname, '../android/app/src/main/assets/capacitor.plugins.json'); const SETTINGS_GRADLE_PATH = path.join(__dirname, '../android/capacitor.settings.gradle'); const PLUGIN_ENTRY = { name: "DailyNotification", classpath: "com.timesafari.dailynotification.DailyNotificationPlugin" }; /** * Fix capacitor.plugins.json to ensure DailyNotification is registered */ function fixCapacitorPlugins() { console.log('šŸ”§ Fixing capacitor.plugins.json...'); try { // Read current content let plugins = []; if (fs.existsSync(PLUGINS_JSON_PATH)) { const content = fs.readFileSync(PLUGINS_JSON_PATH, 'utf8'); plugins = JSON.parse(content); } // Check if our plugin is already there const hasPlugin = plugins.some(p => p.name === PLUGIN_ENTRY.name); if (!hasPlugin) { plugins.push(PLUGIN_ENTRY); fs.writeFileSync(PLUGINS_JSON_PATH, JSON.stringify(plugins, null, 2)); console.log('āœ… Added DailyNotification plugin to capacitor.plugins.json'); } else { console.log('āœ… DailyNotification plugin already exists in capacitor.plugins.json'); } } catch (error) { console.error('āŒ Error fixing capacitor.plugins.json:', error.message); process.exit(1); } } /** * Fix capacitor.settings.gradle to point to android/plugin/ instead of android/ */ function fixCapacitorSettingsGradle() { console.log('šŸ”§ Fixing capacitor.settings.gradle...'); if (!fs.existsSync(SETTINGS_GRADLE_PATH)) { console.log('ā„¹ļø capacitor.settings.gradle not found (may not be a test-app)'); return; } try { let content = fs.readFileSync(SETTINGS_GRADLE_PATH, 'utf8'); const originalContent = content; // Check if the path already points to android/plugin if (content.includes('android/plugin')) { console.log('āœ… capacitor.settings.gradle already has correct path (android/plugin)'); return; } // Check if we need to fix the path (points to android but should be android/plugin) if (content.includes("project(':timesafari-daily-notification-plugin').projectDir = new File('../node_modules/@timesafari/daily-notification-plugin/android')")) { // Replace the path content = content.replace( "project(':timesafari-daily-notification-plugin').projectDir = new File('../node_modules/@timesafari/daily-notification-plugin/android')", `// NOTE: Plugin module is in android/plugin/ subdirectory, not android root // This file is auto-generated by Capacitor, but must be manually corrected for this plugin structure project(':timesafari-daily-notification-plugin').projectDir = new File('../node_modules/@timesafari/daily-notification-plugin/android/plugin')` ); fs.writeFileSync(SETTINGS_GRADLE_PATH, content); console.log('āœ… Fixed plugin path in capacitor.settings.gradle (android -> android/plugin)'); } else { console.log('ā„¹ļø capacitor.settings.gradle doesn\'t reference the plugin or uses a different structure'); } } catch (error) { console.error('āŒ Error fixing capacitor.settings.gradle:', error.message); process.exit(1); } } /** * Run all fixes */ function fixAll() { console.log('šŸ”§ DailyNotification Plugin - Post-Sync Fix Script'); console.log('================================================\n'); fixCapacitorPlugins(); fixCapacitorSettingsGradle(); console.log('\nāœ… All fixes applied successfully!'); console.log('šŸ’” These fixes will persist until the next "npx cap sync android"'); } // Run if called directly if (import.meta.url === `file://${process.argv[1]}`) { fixAll(); } export { fixCapacitorPlugins, fixCapacitorSettingsGradle, fixAll };