@artilingo/artiframe-cli 1.0.4 → 1.0.7

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.
package/bin/artiframe.php CHANGED
@@ -11,7 +11,17 @@
11
11
 
12
12
  // Define constants
13
13
  define('ARTIFRAME_CLI_ROOT', dirname(__DIR__));
14
- define('ARTIFRAME_VERSION', '1.0.0');
14
+ // Read version dynamically from package.json
15
+ $_pkgFile = dirname(__DIR__) . '/package.json';
16
+ $_pkgVersion = '?.?.?';
17
+ if (file_exists($_pkgFile)) {
18
+ $_pkg = json_decode(file_get_contents($_pkgFile), true);
19
+ if (!empty($_pkg['version'])) {
20
+ $_pkgVersion = $_pkg['version'];
21
+ }
22
+ }
23
+ define('ARTIFRAME_VERSION', $_pkgVersion);
24
+ unset($_pkgFile, $_pkg, $_pkgVersion);
15
25
 
16
26
  // Register a simple autoloader for the CLI's own classes
17
27
  spl_autoload_register(function ($class) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@artilingo/artiframe-cli",
3
- "version": "1.0.4",
3
+ "version": "1.0.7",
4
4
  "description": "ArtiFrame — Zero-dependency native PHP framework with a powerful multilingual CLI. Scaffold projects, generate views, APIs and classes instantly.",
5
5
  "main": "bin/artiframe.js",
6
6
  "bin": {
package/src/App.php CHANGED
@@ -123,6 +123,11 @@ class App
123
123
  $parts = array_values($parts);
124
124
 
125
125
  $commandName = array_shift($parts);
126
+
127
+ // Support two-word commands: "cli v", "cli version", "make:view" etc.
128
+ if ($commandName === 'cli' && !empty($parts)) {
129
+ $commandName = 'cli ' . array_shift($parts);
130
+ }
126
131
 
127
132
  try {
128
133
  $this->routeCommand($commandName, $parts);
@@ -187,9 +192,15 @@ class App
187
192
  break;
188
193
 
189
194
  case 'version':
195
+ // Always routes to project version manager
190
196
  (new \ArtiFrame\Cli\Commands\VersionCommand($this->translator))->execute($commandArgs);
191
197
  break;
192
198
 
199
+ case 'cli version':
200
+ case 'cli v':
201
+ (new \ArtiFrame\Cli\Commands\CliVersionCommand($this->translator))->execute();
202
+ break;
203
+
193
204
  case 'help':
194
205
  default:
195
206
  $this->showHelp();
@@ -243,7 +254,13 @@ class App
243
254
  echo " " . $d . "└── " . $r . "Example: " . $lg . "make:class classes/UserManager.php" . $r . PHP_EOL;
244
255
  echo PHP_EOL;
245
256
 
246
- // version
257
+ // cli v / cli version — CLI self-version
258
+ echo " " . $g . "cli v" . $r . " / " . $g . "cli version" . $r . PHP_EOL;
259
+ echo " " . $d . "│" . $r . " " . $t->get('HELP_CLI_VERSION_DESC') . PHP_EOL;
260
+ echo " " . $d . "└── " . $r . "Example: " . $lg . "cli v" . $r . PHP_EOL;
261
+ echo PHP_EOL;
262
+
263
+ // version upgrade/downgrade — project version manager
247
264
  echo " " . $g . "version" . $r . " " . $y . "<action>" . $r . " " . $y . "<level>" . $r . PHP_EOL;
248
265
  echo " " . $d . "│" . $r . " " . $t->get('HELP_VERSION_DESC1') . PHP_EOL;
249
266
  echo " " . $d . "│" . $r . " " . $t->get('HELP_VERSION_FORMAT') . PHP_EOL;
@@ -0,0 +1,128 @@
1
+ <?php
2
+ namespace ArtiFrame\Cli\Commands;
3
+
4
+ use ArtiFrame\Cli\Services\Translator;
5
+
6
+ /**
7
+ * CliVersionCommand
8
+ *
9
+ * Shows the installed CLI version, checks npm registry for the latest,
10
+ * and optionally self-updates via `npm install -g`.
11
+ */
12
+ class CliVersionCommand
13
+ {
14
+ private Translator $translator;
15
+
16
+ private const PACKAGE = '@artilingo/artiframe-cli';
17
+ private const REGISTRY = 'https://registry.npmjs.org/%40artilingo%2Fartiframe-cli/latest';
18
+
19
+ public function __construct(Translator $translator)
20
+ {
21
+ $this->translator = $translator;
22
+ }
23
+
24
+ public function execute(): void
25
+ {
26
+ $t = $this->translator;
27
+
28
+ $g = "\033[38;2;0;157;108m";
29
+ $w = "\033[1;37m";
30
+ $d = "\033[38;2;100;100;100m";
31
+ $y = "\033[38;5;220m";
32
+ $r = "\033[0m";
33
+
34
+ $current = $this->getCurrentVersion();
35
+
36
+ echo PHP_EOL;
37
+ echo " {$w}" . $t->get('VERSION_CURRENT') . ":{$r} {$g}v{$current}{$r}" . PHP_EOL;
38
+ echo " {$d}" . $t->get('VERSION_CHECKING') . "{$r}";
39
+ flush();
40
+
41
+ $latest = $this->fetchLatestVersion();
42
+
43
+ // Overwrite the "checking..." line
44
+ echo "\r" . str_repeat(' ', 70) . "\r";
45
+
46
+ if ($latest === null) {
47
+ echo " {$y}" . $t->get('VERSION_NETWORK_ERROR') . "{$r}" . PHP_EOL . PHP_EOL;
48
+ return;
49
+ }
50
+
51
+ echo " {$w}" . $t->get('VERSION_LATEST') . ":{$r} {$g}v{$latest}{$r}" . PHP_EOL;
52
+ echo PHP_EOL;
53
+
54
+ if (version_compare($latest, $current, '<=')) {
55
+ echo " " . $t->get('VERSION_UP_TO_DATE') . PHP_EOL . PHP_EOL;
56
+ return;
57
+ }
58
+
59
+ // ── Update available ─────────────────────────────────────
60
+ echo " {$y}" . $t->get('VERSION_UPDATE_AVAILABLE') . "{$r}"
61
+ . " {$d}v{$current}{$r} → {$g}v{$latest}{$r}" . PHP_EOL;
62
+ echo PHP_EOL;
63
+ echo " " . $t->get('VERSION_UPDATE_PROMPT') . " ";
64
+ flush();
65
+
66
+ $answer = strtolower(trim(fgets(STDIN)));
67
+ $yesKeys = array_map('trim', explode(',', $t->get('VERSION_YES_KEYS')));
68
+
69
+ if (!in_array($answer, $yesKeys, true)) {
70
+ echo PHP_EOL . " {$d}" . $t->get('VERSION_UPDATE_CANCELLED') . "{$r}" . PHP_EOL . PHP_EOL;
71
+ return;
72
+ }
73
+
74
+ echo PHP_EOL;
75
+ echo " " . $t->get('VERSION_UPDATING') . PHP_EOL;
76
+ echo PHP_EOL;
77
+
78
+ passthru('npm install -g ' . self::PACKAGE, $exitCode);
79
+
80
+ echo PHP_EOL;
81
+ if ($exitCode === 0) {
82
+ echo " {$g}" . $t->get('VERSION_UPDATE_SUCCESS') . "{$r}" . PHP_EOL;
83
+ } else {
84
+ echo " " . $t->get('VERSION_UPDATE_FAILED') . PHP_EOL;
85
+ }
86
+ echo PHP_EOL;
87
+ }
88
+
89
+ // ── Helpers ──────────────────────────────────────────────────
90
+
91
+ private function getCurrentVersion(): string
92
+ {
93
+ $pkgFile = ARTIFRAME_CLI_ROOT . '/package.json';
94
+ if (file_exists($pkgFile)) {
95
+ $pkg = json_decode(file_get_contents($pkgFile), true);
96
+ if (!empty($pkg['version'])) {
97
+ return $pkg['version'];
98
+ }
99
+ }
100
+ return defined('ARTIFRAME_VERSION') ? ARTIFRAME_VERSION : '?.?.?';
101
+ }
102
+
103
+ private function fetchLatestVersion(): ?string
104
+ {
105
+ $context = stream_context_create([
106
+ 'http' => [
107
+ 'method' => 'GET',
108
+ 'header' => "Accept: application/json\r\nUser-Agent: artiframe-cli\r\n",
109
+ 'timeout' => 6,
110
+ 'ignore_errors' => true,
111
+ ],
112
+ 'ssl' => [
113
+ 'verify_peer' => true,
114
+ 'verify_peer_name' => true,
115
+ ],
116
+ ]);
117
+
118
+ $raw = @file_get_contents(self::REGISTRY, false, $context);
119
+ if ($raw === false) {
120
+ return null;
121
+ }
122
+
123
+ $data = json_decode($raw, true);
124
+ return isset($data['version']) && is_string($data['version'])
125
+ ? $data['version']
126
+ : null;
127
+ }
128
+ }
package/src/Lang/de.php CHANGED
@@ -88,4 +88,19 @@ return [
88
88
  'LANG_VALID_LIST' => 'Unterstützte Sprachen',
89
89
  'LANG_INVALID_CHOICE' => 'Ungültige Auswahl. Bitte eine Zahl zwischen 1 und 5 eingeben.',
90
90
  'HELP_LANG_DESC' => 'Spracheinstellung anzeigen und ändern.',
91
+
92
+ // CliVersionCommand
93
+ 'VERSION_CURRENT' => 'Aktuelle Version',
94
+ 'VERSION_LATEST' => 'Neueste Version ',
95
+ 'VERSION_CHECKING' => 'Nach Updates suchen...',
96
+ 'VERSION_NETWORK_ERROR' => '⚠️ Keine Verbindung zum Update-Server (Netzwerkfehler).',
97
+ 'VERSION_UP_TO_DATE' => '✅ Aktuell — Keine neue Version verfügbar.',
98
+ 'VERSION_UPDATE_AVAILABLE' => '🔔 Update verfügbar!',
99
+ 'VERSION_UPDATE_PROMPT' => 'Möchten Sie jetzt aktualisieren? [j/N]:',
100
+ 'VERSION_YES_KEYS' => 'j,y',
101
+ 'VERSION_UPDATE_CANCELLED' => 'Update abgebrochen.',
102
+ 'VERSION_UPDATING' => '📦 Wird aktualisiert...',
103
+ 'VERSION_UPDATE_SUCCESS' => '✅ Update abgeschlossen! Bitte Terminal neu starten.',
104
+ 'VERSION_UPDATE_FAILED' => '❌ Update fehlgeschlagen.',
105
+ 'HELP_CLI_VERSION_DESC' => 'CLI-Version anzeigen und nach Updates suchen.',
91
106
  ];
package/src/Lang/en.php CHANGED
@@ -88,4 +88,19 @@ return [
88
88
  'LANG_VALID_LIST' => 'Supported languages',
89
89
  'LANG_INVALID_CHOICE' => 'Invalid choice. Please enter a number between 1 and 5.',
90
90
  'HELP_LANG_DESC' => 'View and change the language preference.',
91
+
92
+ // CliVersionCommand
93
+ 'VERSION_CURRENT' => 'Current version',
94
+ 'VERSION_LATEST' => 'Latest version ',
95
+ 'VERSION_CHECKING' => 'Checking for updates...',
96
+ 'VERSION_NETWORK_ERROR' => '⚠️ Could not check for updates (network error).',
97
+ 'VERSION_UP_TO_DATE' => '✅ Up to date — No new version available.',
98
+ 'VERSION_UPDATE_AVAILABLE' => '🔔 Update available!',
99
+ 'VERSION_UPDATE_PROMPT' => 'Would you like to update now? [y/N]:',
100
+ 'VERSION_YES_KEYS' => 'y',
101
+ 'VERSION_UPDATE_CANCELLED' => 'Update cancelled.',
102
+ 'VERSION_UPDATING' => '📦 Updating...',
103
+ 'VERSION_UPDATE_SUCCESS' => '✅ Update complete! Please restart your terminal.',
104
+ 'VERSION_UPDATE_FAILED' => '❌ Update failed.',
105
+ 'HELP_CLI_VERSION_DESC' => 'Show CLI version and check for updates.',
91
106
  ];
package/src/Lang/es.php CHANGED
@@ -88,4 +88,19 @@ return [
88
88
  'LANG_VALID_LIST' => 'Idiomas admitidos',
89
89
  'LANG_INVALID_CHOICE' => 'Elección inválida. Por favor ingrese un número entre 1 y 5.',
90
90
  'HELP_LANG_DESC' => 'Ver y cambiar la preferencia de idioma.',
91
+
92
+ // CliVersionCommand
93
+ 'VERSION_CURRENT' => 'Versión actual ',
94
+ 'VERSION_LATEST' => 'Última versión ',
95
+ 'VERSION_CHECKING' => 'Verificando actualizaciones...',
96
+ 'VERSION_NETWORK_ERROR' => '⚠️ No se pudo verificar las actualizaciones (error de red).',
97
+ 'VERSION_UP_TO_DATE' => '✅ Al día — No hay nueva versión disponible.',
98
+ 'VERSION_UPDATE_AVAILABLE' => '🔔 ¡Actualización disponible!',
99
+ 'VERSION_UPDATE_PROMPT' => '¿Actualizar ahora? [s/N]:',
100
+ 'VERSION_YES_KEYS' => 's,y',
101
+ 'VERSION_UPDATE_CANCELLED' => 'Actualización cancelada.',
102
+ 'VERSION_UPDATING' => '📦 Actualizando...',
103
+ 'VERSION_UPDATE_SUCCESS' => '✅ ¡Actualización completa! Por favor reinicie su terminal.',
104
+ 'VERSION_UPDATE_FAILED' => '❌ Error en la actualización.',
105
+ 'HELP_CLI_VERSION_DESC' => 'Mostrar versión CLI y verificar actualizaciones.',
91
106
  ];
package/src/Lang/fr.php CHANGED
@@ -88,4 +88,19 @@ return [
88
88
  'LANG_VALID_LIST' => 'Langues prises en charge',
89
89
  'LANG_INVALID_CHOICE' => 'Choix invalide. Veuillez entrer un chiffre entre 1 et 5.',
90
90
  'HELP_LANG_DESC' => 'Afficher et modifier la préférence de langue.',
91
+
92
+ // CliVersionCommand
93
+ 'VERSION_CURRENT' => 'Version actuelle',
94
+ 'VERSION_LATEST' => 'Dernière version',
95
+ 'VERSION_CHECKING' => 'Vérification des mises à jour...',
96
+ 'VERSION_NETWORK_ERROR' => '⚠️ Impossible de vérifier les mises à jour (erreur réseau).',
97
+ 'VERSION_UP_TO_DATE' => '✅ À jour — Aucune nouvelle version disponible.',
98
+ 'VERSION_UPDATE_AVAILABLE' => '🔔 Mise à jour disponible !',
99
+ 'VERSION_UPDATE_PROMPT' => 'Mettre à jour maintenant ? [o/N] :',
100
+ 'VERSION_YES_KEYS' => 'o,y',
101
+ 'VERSION_UPDATE_CANCELLED' => 'Mise à jour annulée.',
102
+ 'VERSION_UPDATING' => '📦 Mise à jour en cours...',
103
+ 'VERSION_UPDATE_SUCCESS' => '✅ Mise à jour terminée ! Veuillez redémarrer votre terminal.',
104
+ 'VERSION_UPDATE_FAILED' => '❌ Échec de la mise à jour.',
105
+ 'HELP_CLI_VERSION_DESC' => 'Afficher la version CLI et vérifier les mises à jour.',
91
106
  ];
package/src/Lang/tr.php CHANGED
@@ -88,4 +88,19 @@ return [
88
88
  'LANG_VALID_LIST' => 'Desteklenen diller',
89
89
  'LANG_INVALID_CHOICE' => 'Geçersiz seçim. Lütfen 1-5 arasında bir rakam girin.',
90
90
  'HELP_LANG_DESC' => 'Dil tercihini görüntüler ve değiştirir.',
91
+
92
+ // CliVersionCommand
93
+ 'VERSION_CURRENT' => 'Mevcut sürüm ',
94
+ 'VERSION_LATEST' => 'Son sürüm ',
95
+ 'VERSION_CHECKING' => 'Güncelleme kontrol ediliyor...',
96
+ 'VERSION_NETWORK_ERROR' => '⚠️ Sürüm kontrolü yapılamadı (ağ hatası).',
97
+ 'VERSION_UP_TO_DATE' => '✅ Güncel — Yeni sürüm bulunmuyor.',
98
+ 'VERSION_UPDATE_AVAILABLE' => '🔔 Güncelleme mevcut!',
99
+ 'VERSION_UPDATE_PROMPT' => 'Şimdi güncellemek ister misiniz? [e/H]:',
100
+ 'VERSION_YES_KEYS' => 'e,y',
101
+ 'VERSION_UPDATE_CANCELLED' => 'Güncelleme iptal edildi.',
102
+ 'VERSION_UPDATING' => '📦 Güncelleniyor...',
103
+ 'VERSION_UPDATE_SUCCESS' => '✅ Güncelleme tamamlandı! Terminali yeniden başlatın.',
104
+ 'VERSION_UPDATE_FAILED' => '❌ Güncelleme başarısız oldu.',
105
+ 'HELP_CLI_VERSION_DESC' => 'CLI sürümünü gösterir ve güncelleme kontrol eder.',
91
106
  ];