tsoft-cli 3.7.0 → 3.7.2
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/CHANGELOG.md +11 -0
- package/locales/tr.json +52 -70
- package/package.json +2 -1
- package/src/commands/theme-dev.js +23 -3
- package/src/commands/theme.js +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,17 @@ All notable changes to T-Soft CLI will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [3.7.2] - 2026-04-16
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
- Restored Turkish diacritics across Turkish locale (`tr.json`) — 50+ strings that previously dropped `ç/ğ/ı/ö/ş/ü` (e.g. `calisacaksiniz` → `çalışacaksınız`, `Detaylar icin` → `Detaylar için`, `Islem iptal edildi` → `İşlem iptal edildi`). English locale unchanged.
|
|
12
|
+
|
|
13
|
+
## [3.7.1] - 2026-04-16
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
- Theme list in `tsoft theme dev` now paginates — previously only the first page was fetched, hiding themes on large stores
|
|
17
|
+
- Node 25+ compatibility — added `main` entry in `package.json`
|
|
18
|
+
|
|
8
19
|
## [3.7.0] - 2026-04-15
|
|
9
20
|
|
|
10
21
|
### Added
|
package/locales/tr.json
CHANGED
|
@@ -12,37 +12,33 @@
|
|
|
12
12
|
"ui.label.yes": "Evet",
|
|
13
13
|
"ui.label.no": "Hayır",
|
|
14
14
|
"ui.label.disabled": "(Devre Dışı)",
|
|
15
|
-
|
|
16
|
-
"error.push.pending_review.
|
|
17
|
-
"error.push.
|
|
18
|
-
"error.push.auth.
|
|
19
|
-
"error.push.
|
|
20
|
-
"error.push.backend_error.
|
|
21
|
-
"error.push.backend_error.hint": "Detaylar icin: tsoft theme push --verbose",
|
|
15
|
+
"error.push.pending_review.message": "Push yapılamaz: tema inceleme bekliyor.",
|
|
16
|
+
"error.push.pending_review.hint": "Önce geri çekin: tsoft theme withdraw",
|
|
17
|
+
"error.push.auth.message": "Yetkilendirme hatası.",
|
|
18
|
+
"error.push.auth.hint": "Tekrar giriş yapın: tsoft login --org",
|
|
19
|
+
"error.push.backend_error.message": "Sunucu hatası oluştu.",
|
|
20
|
+
"error.push.backend_error.hint": "Detaylar için: tsoft theme push --verbose",
|
|
22
21
|
"error.push.backend_reject.message": "Push reddedildi.",
|
|
23
|
-
"error.push.backend_reject.hint": "Detaylar
|
|
24
|
-
"error.push.unexpected.message": "Beklenmeyen bir hata
|
|
25
|
-
"error.push.unexpected.hint": "Detaylar
|
|
26
|
-
|
|
27
|
-
"error.http.401.
|
|
28
|
-
"error.http.
|
|
29
|
-
"error.http.403.message": "Bu islem icin yetkiniz yok.",
|
|
22
|
+
"error.push.backend_reject.hint": "Detaylar için: tsoft theme push --verbose",
|
|
23
|
+
"error.push.unexpected.message": "Beklenmeyen bir hata oluştu.",
|
|
24
|
+
"error.push.unexpected.hint": "Detaylar için: tsoft theme push --verbose",
|
|
25
|
+
"error.http.401.message": "Yetkilendirme hatası.",
|
|
26
|
+
"error.http.401.hint": "Tekrar giriş yapın: tsoft login --org",
|
|
27
|
+
"error.http.403.message": "Bu işlem için yetkiniz yok.",
|
|
30
28
|
"error.http.403.hint": "Organizasyon yetkinizi kontrol edin: tsoft org switch",
|
|
31
|
-
"error.http.404.message": "Tema
|
|
29
|
+
"error.http.404.message": "Tema bulunamadı.",
|
|
32
30
|
"error.http.404.hint": "Tema adini kontrol edin: tsoft theme list",
|
|
33
|
-
"error.http.409.message": "Push
|
|
31
|
+
"error.http.409.message": "Push yapılamaz: tema uygun durumda değil.",
|
|
34
32
|
"error.http.409.hint": "Tema durumunu kontrol edin: tsoft theme dev-status",
|
|
35
33
|
"error.http.423.message": "Tema kilitli.",
|
|
36
|
-
"error.http.423.hint": "Tema
|
|
37
|
-
"error.http.5xx.message": "Sunucu
|
|
38
|
-
"error.http.5xx.hint": "Detaylar
|
|
39
|
-
|
|
40
|
-
"error.
|
|
41
|
-
"error.fallback.
|
|
42
|
-
"error.
|
|
43
|
-
"error.auth_required.
|
|
44
|
-
"error.auth_required.hint": "Tekrar giris yapin: tsoft login --org",
|
|
45
|
-
|
|
34
|
+
"error.http.423.hint": "Tema başka bir işlem tarafından kilitlenmiş olabilir.",
|
|
35
|
+
"error.http.5xx.message": "Sunucu hatası oluştu.",
|
|
36
|
+
"error.http.5xx.hint": "Detaylar için: tsoft {{command}} --verbose",
|
|
37
|
+
"error.push.verbose_hint": "Detaylar için: tsoft theme push --verbose",
|
|
38
|
+
"error.fallback.message": "Beklenmeyen bir hata oluştu.",
|
|
39
|
+
"error.fallback.hint": "Detaylar için: tsoft theme push --verbose",
|
|
40
|
+
"error.auth_required.message": "Yetkilendirme hatası.",
|
|
41
|
+
"error.auth_required.hint": "Tekrar giriş yapın: tsoft login --org",
|
|
46
42
|
"login.starting": "🔐 tsoft360 yetkilendirme başlatılıyor...",
|
|
47
43
|
"login.browser_opening": "🌐 Tarayıcı açılıyor...",
|
|
48
44
|
"login.waiting": "⏳ Yetkilendirme bekleniyor...",
|
|
@@ -54,10 +50,9 @@
|
|
|
54
50
|
"login.success": "🎉 Başarıyla giriş yapıldı!",
|
|
55
51
|
"login.tip": "💡 İpucu: Durum kontrolü için \"tsoft whoami\" komutunu kullanın.",
|
|
56
52
|
"login.json_error.message": "Login komutu interaktif mod gerektiriyor.",
|
|
57
|
-
"login.json_error.hint": "CI/CD
|
|
53
|
+
"login.json_error.hint": "CI/CD için önceden tsoft login ile kimlik doğrulayıp token'i sakladıktan sonra kullanın.",
|
|
58
54
|
"login.error_log": "Detaylar için log dosyalarını kontrol edin.",
|
|
59
55
|
"login.security_error": "State parametresi eşleşmiyor! Güvenlik hatası olabilir.",
|
|
60
|
-
|
|
61
56
|
"logout.starting": "🚪 Çıkış yapılıyor...",
|
|
62
57
|
"logout.not_logged_in": "⚠️ Zaten giriş yapmamışsınız.",
|
|
63
58
|
"logout.revoking": "🔄 Token iptal ediliyor...",
|
|
@@ -66,11 +61,10 @@
|
|
|
66
61
|
"logout.credentials_cleared": "✓ Yerel kimlik bilgileri temizlendi",
|
|
67
62
|
"logout.success": "👋 Başarıyla çıkış yapıldı!",
|
|
68
63
|
"logout.relogin_tip": "Tekrar giriş yapmak için \"tsoft login\" komutunu kullanın.",
|
|
69
|
-
|
|
70
64
|
"whoami.not_logged_in": "⚠️ Giriş yapmamışsınız.",
|
|
71
65
|
"whoami.not_logged_in_tip": "Giriş yapmak için \"tsoft login\" komutunu kullanın.",
|
|
72
|
-
"whoami.not_logged_in.json.message": "
|
|
73
|
-
"whoami.not_logged_in.json.hint": "
|
|
66
|
+
"whoami.not_logged_in.json.message": "Giriş yapılmamış.",
|
|
67
|
+
"whoami.not_logged_in.json.hint": "Giriş yapmak için: tsoft login --org",
|
|
74
68
|
"whoami.token_refreshed": "🔄 Token otomatik olarak yenilendi",
|
|
75
69
|
"whoami.session_expired": "⚠️ Oturum süresi dolmuş, yeniden giriş yapılıyor...",
|
|
76
70
|
"whoami.title": "👤 Kimlik Bilgileri",
|
|
@@ -83,8 +77,7 @@
|
|
|
83
77
|
"whoami.token_valid": "✓ Geçerli ({{expiry}} kaldı)",
|
|
84
78
|
"whoami.token_expired": "✗ Süresi dolmuş",
|
|
85
79
|
"whoami.refresh_valid": "✓ Geçerli ({{days}} gün kaldı)",
|
|
86
|
-
"whoami.relogin_tip": "
|
|
87
|
-
|
|
80
|
+
"whoami.relogin_tip": "İpucu: tsoft login --org ile tekrar giriş yapın",
|
|
88
81
|
"theme.listing": "📋 Temalar listeleniyor...",
|
|
89
82
|
"theme.no_themes": "⚠️ Henüz tema bulunmuyor.",
|
|
90
83
|
"theme.count": "Toplam {{count}} tema bulundu:",
|
|
@@ -123,14 +116,12 @@
|
|
|
123
116
|
"theme.force_updating": "⏳ Default tema güncelleniyor ve yeni tema oluşturuluyor...",
|
|
124
117
|
"theme.force_update_success_1": "✓ Default tema başarıyla güncellendi",
|
|
125
118
|
"theme.force_update_success_2": "✓ Yeni tema oluşturuldu",
|
|
126
|
-
|
|
127
119
|
"theme.pull.starting": "📥 Tema indirme işlemi başlatılıyor...",
|
|
128
120
|
"theme.pull.no_themes": "İndirilecek tema bulunamadı.",
|
|
129
121
|
"theme.pull.select_title": "Tema İndirme",
|
|
130
122
|
"theme.pull.select_prompt": "Hangi temayı indirmek istiyorsunuz?",
|
|
131
123
|
"theme.pull.downloading": "📦 \"{{name}}\" indiriliyor...",
|
|
132
124
|
"theme.pull.success": "🎉 Tema başarıyla indirildi!",
|
|
133
|
-
|
|
134
125
|
"theme.use.starting": "🎯 Aktif tema ayarlanıyor...",
|
|
135
126
|
"theme.use.no_themes": "Tema bulunamadı.",
|
|
136
127
|
"theme.use.not_found": "❌ Tema bulunamadı: {{name}}",
|
|
@@ -139,23 +130,21 @@
|
|
|
139
130
|
"theme.use.select_title": "🎯 Tema Seçimi",
|
|
140
131
|
"theme.use.set": "✓ Aktif tema ayarlandı: {{name}}",
|
|
141
132
|
"theme.use.folder": "Klasör: {{folder}}",
|
|
142
|
-
|
|
143
|
-
"push.no_active_theme": "Aktif tema bulunamadi.",
|
|
133
|
+
"push.no_active_theme": "Aktif tema bulunamadı.",
|
|
144
134
|
"push.usage": "Kullanim: tsoft theme push <theme-name>",
|
|
145
135
|
"push.use_tip": "veya \"tsoft theme use <theme-name>\" ile aktif tema ayarlayin.",
|
|
146
136
|
"push.connecting": "Sunucuya baglaniliyor...",
|
|
147
137
|
"push.checking_status": "Mevcut durum kontrol ediliyor...",
|
|
148
138
|
"push.pushing": "Tema push ediliyor...",
|
|
149
139
|
"push.no_changes": "Degisiklik yok -- mevcut draft guncel.",
|
|
150
|
-
"push.success": "Push
|
|
140
|
+
"push.success": "Push tamamlandı",
|
|
151
141
|
"push.first_push_note": "(ilk push)",
|
|
152
142
|
"push.admin_approval": "Admin onayindan sonra 1.0.0 olarak yayinlanacak",
|
|
153
|
-
"push.draft_created": "Yeni draft
|
|
154
|
-
"push.draft_updated": "Mevcut draft
|
|
155
|
-
"push.partner_hint": "Tema listesi
|
|
143
|
+
"push.draft_created": "Yeni draft oluşturuldu",
|
|
144
|
+
"push.draft_updated": "Mevcut draft güncellendi",
|
|
145
|
+
"push.partner_hint": "Tema listesi için partner paneli ziyaret edin.",
|
|
156
146
|
"push.changes_added": "+{{count}} yeni",
|
|
157
|
-
"push.changes_removed": "~{{count}}
|
|
158
|
-
|
|
147
|
+
"push.changes_removed": "~{{count}} kaldırıldı",
|
|
159
148
|
"dev.starting": "🚀 Geliştirme ortamı başlatılıyor...",
|
|
160
149
|
"dev.active_site": "📍 Aktif Site:",
|
|
161
150
|
"dev.active_theme": "📍 Aktif Tema:",
|
|
@@ -167,8 +156,8 @@
|
|
|
167
156
|
"dev.active_theme_set": "✓ Aktif tema: {{slug}}",
|
|
168
157
|
"dev.working_dir": "✓ Çalışma dizini: {{path}}",
|
|
169
158
|
"dev.fork_warning_title": "Fork Uyarisi",
|
|
170
|
-
"dev.fork_warning": "Bu tema
|
|
171
|
-
"dev.fork_cancelled": "
|
|
159
|
+
"dev.fork_warning": "Bu tema başka bir organizasyona ait!\n\nTema: {{name}} v{{version}}\nTema Organizasyonu: Organization #{{org_id}}\nSizin Organizasyonunuz: {{user_org}}\n\nFork oluşturularak kendi kopyanızda çalışabilirsiniz.",
|
|
160
|
+
"dev.fork_cancelled": "İşlem iptal edildi.\n\nÖneriler:\n tsoft org switch - Organizasyon değiştir\n tsoft theme list - Temaları listele",
|
|
172
161
|
"dev.forking": "Tema fork ediliyor...",
|
|
173
162
|
"dev.fork_success": "✓ Tema fork edildi: {{name}}",
|
|
174
163
|
"dev.fork_source": "Kaynak: {{source}} v{{version}}",
|
|
@@ -207,27 +196,25 @@
|
|
|
207
196
|
"dev.file_saved": "✓ {{path}} → Kaydedildi ({{duration}}ms)",
|
|
208
197
|
"dev.file_error": "{{path}} → Hata: {{error}}",
|
|
209
198
|
"dev.keepalive_error": "⚠️ Keep-alive hatası (yeniden denenecek)",
|
|
210
|
-
|
|
211
|
-
"init.no_themes": "Tema bulunamadi.",
|
|
199
|
+
"init.no_themes": "Tema bulunamadı.",
|
|
212
200
|
"init.select_prompt": "Hangi temayi fork etmek istiyorsunuz?",
|
|
213
|
-
"init.select_title": "Tema
|
|
201
|
+
"init.select_title": "Tema Seçimi",
|
|
214
202
|
"init.confirm_prompt": "{{name}} v{{version}} fork edilecek.\nDevam etmek istiyor musunuz?",
|
|
215
203
|
"init.confirm_title": "Fork Onayi",
|
|
216
|
-
"init.cancelled": "
|
|
204
|
+
"init.cancelled": "İşlem iptal edildi.",
|
|
217
205
|
"init.forking": "Tema fork ediliyor...",
|
|
218
206
|
"init.dir_exists_title": "Dizin Mevcut",
|
|
219
207
|
"init.dir_exists_prompt": "Dizin zaten mevcut!\n\nKonum: {{path}}\n\nUzerine yazilsin mi?",
|
|
220
|
-
"init.dir_cancelled": "
|
|
208
|
+
"init.dir_cancelled": "İşlem iptal edildi.",
|
|
221
209
|
"init.downloading": "Tema dosyalari indiriliyor...",
|
|
222
210
|
"init.success": "Tema basariyla fork edildi!",
|
|
223
211
|
"init.theme_label": "Tema:",
|
|
224
212
|
"init.source_label": "Kaynak:",
|
|
225
213
|
"init.location_label": "Konum:",
|
|
226
|
-
"init.dev_tip": "
|
|
227
|
-
"init.json_error.message": "--from parametresi gerekli (JSON modda interaktif
|
|
214
|
+
"init.dev_tip": "Geliştirmeye başlamak için: tsoft theme dev {{slug}}",
|
|
215
|
+
"init.json_error.message": "--from parametresi gerekli (JSON modda interaktif seçim desteklenmez)",
|
|
228
216
|
"init.json_error.hint": "Kullanim: tsoft --json theme init --from <slug>",
|
|
229
|
-
"init.theme_not_found": "Tema
|
|
230
|
-
|
|
217
|
+
"init.theme_not_found": "Tema bulunamadı: {{slug}}",
|
|
231
218
|
"section.list.no_active_theme": "Aktif tema bulunamadı. Lütfen önce \"tsoft theme use <tema-adı>\" komutunu çalıştırın.",
|
|
232
219
|
"section.list.starting": "Section'lar listeleniyor...",
|
|
233
220
|
"section.list.active_theme": "Aktif Tema: {{theme}}",
|
|
@@ -239,7 +226,6 @@
|
|
|
239
226
|
"section.list.tags_label": "Etiketler:",
|
|
240
227
|
"section.list.file_label": "Dosya:",
|
|
241
228
|
"section.list.no_sections": "⚠️ Bu block için section bulunmuyor",
|
|
242
|
-
|
|
243
229
|
"section.add.no_active_theme": "Aktif tema bulunamadı. Lütfen önce \"tsoft theme use <tema-adı>\" komutunu çalıştırın.",
|
|
244
230
|
"section.add.starting": "🔧 Section ekleme işlemi başlatılıyor...",
|
|
245
231
|
"section.add.active_theme": "Aktif Tema: {{theme}}",
|
|
@@ -282,19 +268,17 @@
|
|
|
282
268
|
"section.add.download_error": "⚠️ Tema dosyaları güncellenirken hata oluştu:",
|
|
283
269
|
"section.add.manual_tip": "💡 Manuel olarak temayı tekrar indirmeyi deneyin:",
|
|
284
270
|
"section.add.manual_command": "tsoft theme pull",
|
|
285
|
-
|
|
286
271
|
"org.switch.json_error.message": "Bu komut interaktif mod gerektiriyor.",
|
|
287
272
|
"org.switch.json_error.hint": "JSON modunda org switch desteklenmiyor.",
|
|
288
|
-
"org.switch.no_store": "Aktif
|
|
289
|
-
"org.switch.no_token": "Token
|
|
290
|
-
"org.switch.loading": "Organizasyonlar
|
|
291
|
-
"org.switch.no_orgs": "
|
|
292
|
-
"org.switch.select_prompt": "Hangi organizasyonda
|
|
293
|
-
"org.switch.select_title": "Organizasyon
|
|
294
|
-
"org.switch.selecting": "{{name}}
|
|
295
|
-
"org.switch.success": "Aktif organizasyon: {{name}}\nID: {{id}}\n\
|
|
296
|
-
"org.switch.error": "Organizasyon
|
|
297
|
-
|
|
273
|
+
"org.switch.no_store": "Aktif mağaza bulunamadı. Lütfen önce \"tsoft login\" komutunu çalıştırın.",
|
|
274
|
+
"org.switch.no_token": "Token bulunamadı. Lütfen önce \"tsoft login\" komutunu çalıştırın.",
|
|
275
|
+
"org.switch.loading": "Organizasyonlar yükleniyor...",
|
|
276
|
+
"org.switch.no_orgs": "Hiçbir organizasyona üyesiniz değil.",
|
|
277
|
+
"org.switch.select_prompt": "Hangi organizasyonda çalışacaksınız?",
|
|
278
|
+
"org.switch.select_title": "Organizasyon Seçimi",
|
|
279
|
+
"org.switch.selecting": "{{name}} seçiliyor...",
|
|
280
|
+
"org.switch.success": "Aktif organizasyon: {{name}}\nID: {{id}}\n\nArtık bu organizasyon altında tema geliştirebilirsiniz.",
|
|
281
|
+
"org.switch.error": "Organizasyon seçimi başarısız: {{error}}",
|
|
298
282
|
"help.tagline": "tsoft360 için tema geliştirme araç seti",
|
|
299
283
|
"help.footer": "Detaylar için: tsoft <komut> --help",
|
|
300
284
|
"help.group.development": "Geliştirme",
|
|
@@ -313,14 +297,12 @@
|
|
|
313
297
|
"help.cmd.logout": "Oturumu kapatın ve yerel kimlik bilgilerini temizleyin",
|
|
314
298
|
"help.cmd.whoami": "Giriş yapan kullanıcı ve mağaza bilgilerini gösterin",
|
|
315
299
|
"help.cmd.org_switch": "Aktif organizasyonu değiştirin",
|
|
316
|
-
|
|
317
300
|
"help.status.logged_in": "{{email}} ({{store}})",
|
|
318
301
|
"help.status.not_logged_in": "Giriş yapılmadı — tsoft login",
|
|
319
302
|
"help.status.active_theme": "Tema: {{theme}}",
|
|
320
303
|
"help.status.no_theme": "Aktif tema yok — tsoft theme init",
|
|
321
|
-
|
|
322
|
-
"
|
|
323
|
-
"submit.deprecated": "Uyari: Submit islemi artik partner panelden yapiliyor.",
|
|
304
|
+
"publish.deprecated": "Uyarı: \"theme publish\" yerine \"theme push\" kullanın.",
|
|
305
|
+
"submit.deprecated": "Uyarı: Submit işlemi artık partner panelden yapılıyor.",
|
|
324
306
|
"submit.step1": "1. tsoft theme push",
|
|
325
307
|
"submit.step2": "2. Partner panelde meta/screenshot tamamlayin",
|
|
326
308
|
"submit.step3": "3. Partner panelden submit edin"
|
package/package.json
CHANGED
|
@@ -10,10 +10,30 @@ import {normalizeStoreDomain, slugify, setActiveTheme, getActiveTheme, getActive
|
|
|
10
10
|
import {brandedConfirm, brandedSelect, showWarning, showError, showInfo} from '../ui/prompt-wrapper.js';
|
|
11
11
|
import { t } from '../i18n.js';
|
|
12
12
|
|
|
13
|
-
async function
|
|
13
|
+
async function fetchAllThemes() {
|
|
14
14
|
const apiClient = await createApiClient();
|
|
15
|
-
const
|
|
16
|
-
|
|
15
|
+
const all = [];
|
|
16
|
+
let page = 1;
|
|
17
|
+
|
|
18
|
+
// Server ignores per_page; we walk every page until last_page is reached.
|
|
19
|
+
// Hard cap at 20 pages to avoid accidental infinite loops.
|
|
20
|
+
for (let i = 0; i < 20; i++) {
|
|
21
|
+
const response = await apiClient.get(`/theme?per_page=500&page=${page}`);
|
|
22
|
+
const batch = response.data || [];
|
|
23
|
+
all.push(...batch);
|
|
24
|
+
|
|
25
|
+
// Laravel paginator puts last_page at the top level (not under meta).
|
|
26
|
+
// Some envelopes wrap it under meta — support both.
|
|
27
|
+
const lastPage = response.last_page ?? response.meta?.last_page ?? 1;
|
|
28
|
+
if (page >= lastPage || batch.length === 0) break;
|
|
29
|
+
page++;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return all;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
async function getThemeUuid(themeSlug) {
|
|
36
|
+
const themes = await fetchAllThemes();
|
|
17
37
|
|
|
18
38
|
const theme = themes.find(t => slugify(t.name) === themeSlug);
|
|
19
39
|
|
package/src/commands/theme.js
CHANGED
|
@@ -127,7 +127,8 @@ export async function themeCreateCommand() {
|
|
|
127
127
|
description: description.trim() || null,
|
|
128
128
|
active: 0,
|
|
129
129
|
hidden: 0,
|
|
130
|
-
forceUpdate: false
|
|
130
|
+
forceUpdate: false,
|
|
131
|
+
minimal: minimal,
|
|
131
132
|
};
|
|
132
133
|
|
|
133
134
|
console.log(chalk.yellow(t('theme.saving_db')));
|