install-rynude 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/index.js +37 -19
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -28,22 +28,32 @@ async function run() {
28
28
 
29
29
  await checkRequirements();
30
30
 
31
+ let hasBackup = false;
32
+ const backupDir = path.join(os.homedir(), '.rynude_backup_tmp');
33
+ const dbPath = path.join(INSTALL_DIR, 'database', 'database.sqlite');
34
+ const envPath = path.join(INSTALL_DIR, '.env');
35
+
31
36
  if (fs.existsSync(INSTALL_DIR)) {
32
37
  const response = await prompts({
33
38
  type: 'confirm',
34
39
  name: 'overwrite',
35
- message: `Folder instalasi ${chalk.yellow(INSTALL_DIR)} sudah ada. Apakah Anda ingin menginstal ulang (menghapus instalasi yang lama)?`,
36
- initial: false
40
+ message: `Aplikasi Rynude AI sudah terinstal. Apakah Anda ingin melakukan UPDATE ke versi terbaru? (Data obrolan & API Key Anda akan aman)`,
41
+ initial: true
37
42
  });
38
43
 
39
44
  if (!response.overwrite) {
40
- console.log(chalk.yellow('Instalasi dibatalkan.'));
45
+ console.log(chalk.yellow('Update dibatalkan.'));
41
46
  process.exit(0);
42
47
  }
43
48
 
44
- const spinner = ora('Menghapus instalasi lama...').start();
49
+ const spinner = ora('Mem-backup data Anda (Database & Konfigurasi)...').start();
50
+ fs.ensureDirSync(backupDir);
51
+ if (fs.existsSync(dbPath)) fs.copySync(dbPath, path.join(backupDir, 'database.sqlite'));
52
+ if (fs.existsSync(envPath)) fs.copySync(envPath, path.join(backupDir, '.env'));
53
+ hasBackup = true;
54
+
45
55
  fs.removeSync(INSTALL_DIR);
46
- spinner.succeed('Instalasi lama berhasil dihapus.');
56
+ spinner.succeed('Data lama dibackup dan siap diupdate.');
47
57
  }
48
58
 
49
59
  console.log(chalk.gray(`\nMenginstal Rynude AI ke folder tersembunyi: ${INSTALL_DIR}`));
@@ -80,21 +90,29 @@ async function run() {
80
90
  }
81
91
 
82
92
  // 4. ENV Setup
83
- const envSpinner = ora('Menyiapkan database bawaan (SQLite)...').start();
93
+ const envSpinner = ora('Menyiapkan konfigurasi & database...').start();
84
94
  try {
85
- fs.copySync(path.join(INSTALL_DIR, '.env.example'), path.join(INSTALL_DIR, '.env'));
86
-
87
- // Ubah koneksi ke sqlite agar zero-config
88
- let envContent = fs.readFileSync(path.join(INSTALL_DIR, '.env'), 'utf-8');
89
- envContent = envContent.replace(/DB_CONNECTION=.*/, 'DB_CONNECTION=sqlite');
90
- fs.writeFileSync(path.join(INSTALL_DIR, '.env'), envContent);
91
-
92
- // Buat file database
93
- fs.ensureFileSync(path.join(INSTALL_DIR, 'database', 'database.sqlite'));
94
-
95
- execSync('php artisan key:generate', { cwd: INSTALL_DIR, stdio: 'ignore' });
96
- execSync('php artisan migrate:fresh --seed', { cwd: INSTALL_DIR, stdio: 'ignore' });
97
- envSpinner.succeed('Konfigurasi dan database siap.');
95
+ if (hasBackup && fs.existsSync(path.join(backupDir, '.env')) && fs.existsSync(path.join(backupDir, 'database.sqlite'))) {
96
+ // Restore from backup
97
+ fs.copySync(path.join(backupDir, '.env'), path.join(INSTALL_DIR, '.env'));
98
+ fs.ensureDirSync(path.join(INSTALL_DIR, 'database'));
99
+ fs.copySync(path.join(backupDir, 'database.sqlite'), path.join(INSTALL_DIR, 'database', 'database.sqlite'));
100
+ fs.removeSync(backupDir); // clean up tmp
101
+
102
+ execSync('php artisan migrate --force', { cwd: INSTALL_DIR, stdio: 'ignore' });
103
+ envSpinner.succeed('Konfigurasi dan database lama Anda berhasil dipulihkan (Aman!).');
104
+ } else {
105
+ // Fresh Install
106
+ fs.copySync(path.join(INSTALL_DIR, '.env.example'), path.join(INSTALL_DIR, '.env'));
107
+ let envContent = fs.readFileSync(path.join(INSTALL_DIR, '.env'), 'utf-8');
108
+ envContent = envContent.replace(/DB_CONNECTION=.*/, 'DB_CONNECTION=sqlite');
109
+ fs.writeFileSync(path.join(INSTALL_DIR, '.env'), envContent);
110
+
111
+ fs.ensureFileSync(path.join(INSTALL_DIR, 'database', 'database.sqlite'));
112
+ execSync('php artisan key:generate', { cwd: INSTALL_DIR, stdio: 'ignore' });
113
+ execSync('php artisan migrate:fresh --seed', { cwd: INSTALL_DIR, stdio: 'ignore' });
114
+ envSpinner.succeed('Konfigurasi dan database siap.');
115
+ }
98
116
  } catch (e) {
99
117
  envSpinner.fail('Gagal menyiapkan database.');
100
118
  console.error(chalk.red(e.message));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "install-rynude",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "Auto-installer for Rynude AI",
5
5
  "main": "index.js",
6
6
  "type": "module",