tsoft-cli 3.7.3 → 3.7.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.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,19 @@ 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.4] - 2026-04-20
9
+
10
+ ### Fixed
11
+ - `tsoft theme push` no longer prints a malformed partner panel link on servers or themes where the organization scope cannot be resolved. Previously the CLI would render `https://partners.tsoft360.com/themes/<theme-folder>` — a URL that looks valid but does not exist in the partner panel. The CLI now accepts the backend-provided `partner_panel_url` only when it contains a proper `/organization/<id>/themes/<folder>` segment; otherwise it falls back to the themes index page (`https://partners.tsoft360.com/themes`) and adjusts the hint text accordingly.
12
+ - Restored Turkish diacritics in `push.connecting`, `push.no_changes`, `push.admin_approval`, `push.use_tip` (e.g. `baglaniliyor` → `bağlanılıyor`, `onayindan` → `onayından`).
13
+ - Leading indentation is no longer part of the `chalk.cyan.underline` span, so the partner panel URL no longer shows phantom underscores before `https` on terminals that render whitespace underlines.
14
+
15
+ ### Added
16
+ - New locale key `push.partner_hint_theme` ("View this theme in the partner panel." / "Temanı partner panelinde görüntüle.") used when a theme-scoped URL is available, keeping the generic `push.partner_hint` for index-page fallbacks.
17
+
18
+ ### Changed
19
+ - JSON-mode output (`--json`) emits the same sanitized `partner_panel_url` as the human-readable output, so machine consumers never receive the malformed link either.
20
+
8
21
  ## [3.7.3] - 2026-04-20
9
22
 
10
23
  ### Added
package/locales/en.json CHANGED
@@ -143,6 +143,7 @@
143
143
  "push.draft_created": "New draft created",
144
144
  "push.draft_updated": "Existing draft updated",
145
145
  "push.partner_hint": "Visit the partner panel for the theme list.",
146
+ "push.partner_hint_theme": "View this theme in the partner panel.",
146
147
  "push.changes_added": "+{{count}} new",
147
148
  "push.changes_removed": "~{{count}} removed",
148
149
  "dev.starting": "🚀 Starting development environment...",
package/locales/tr.json CHANGED
@@ -132,17 +132,18 @@
132
132
  "theme.use.folder": "Klasör: {{folder}}",
133
133
  "push.no_active_theme": "Aktif tema bulunamadı.",
134
134
  "push.usage": "Kullanim: tsoft theme push <theme-name>",
135
- "push.use_tip": "veya \"tsoft theme use <theme-name>\" ile aktif tema ayarlayin.",
136
- "push.connecting": "Sunucuya baglaniliyor...",
135
+ "push.use_tip": "veya \"tsoft theme use <theme-name>\" ile aktif tema ayarlayın.",
136
+ "push.connecting": "Sunucuya bağlanılıyor...",
137
137
  "push.checking_status": "Mevcut durum kontrol ediliyor...",
138
138
  "push.pushing": "Tema push ediliyor...",
139
- "push.no_changes": "Degisiklik yok -- mevcut draft guncel.",
139
+ "push.no_changes": "Değişiklik yok mevcut draft güncel.",
140
140
  "push.success": "Push tamamlandı",
141
141
  "push.first_push_note": "(ilk push)",
142
- "push.admin_approval": "Admin onayindan sonra 1.0.0 olarak yayinlanacak",
142
+ "push.admin_approval": "Admin onayından sonra 1.0.0 olarak yayınlanacak",
143
143
  "push.draft_created": "Yeni draft oluşturuldu",
144
144
  "push.draft_updated": "Mevcut draft güncellendi",
145
145
  "push.partner_hint": "Tema listesi için partner paneli ziyaret edin.",
146
+ "push.partner_hint_theme": "Temanı partner panelinde görüntüle.",
146
147
  "push.changes_added": "+{{count}} yeni",
147
148
  "push.changes_removed": "~{{count}} kaldırıldı",
148
149
  "dev.starting": "🚀 Geliştirme ortamı başlatılıyor...",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tsoft-cli",
3
- "version": "3.7.3",
3
+ "version": "3.7.4",
4
4
  "description": "Command-line tool for tsoft360 theme development and management",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
@@ -15,6 +15,16 @@ const CHANGE_CATEGORIES = {
15
15
  'Meta': ['meta_object_added', 'meta_object_removed', 'meta_field_added', 'meta_field_removed'],
16
16
  };
17
17
 
18
+ const PARTNERS_BASE = 'https://partners.tsoft360.com';
19
+ const PARTNERS_THEMES_INDEX = `${PARTNERS_BASE}/themes`;
20
+
21
+ function resolvePanelLink(partnerUrl) {
22
+ if (typeof partnerUrl === 'string' && partnerUrl.includes('/organization/')) {
23
+ return { url: partnerUrl, hintKey: 'push.partner_hint_theme' };
24
+ }
25
+ return { url: PARTNERS_THEMES_INDEX, hintKey: 'push.partner_hint' };
26
+ }
27
+
18
28
  /**
19
29
  * Diff ozeti goster (gruplu)
20
30
  * @param {Object} data - Push response data
@@ -61,11 +71,10 @@ function displayDiffSummary(data, previousVersion) {
61
71
  }
62
72
  }
63
73
 
64
- // Partner panel yonlendirme
65
74
  console.log('');
66
- const panelUrl = partnerUrl || 'https://partners.tsoft360.com';
67
- console.log(chalk.cyan.underline(` ${panelUrl}`));
68
- console.log(chalk.gray(' ' + t('push.partner_hint')));
75
+ const { url: panelUrl, hintKey } = resolvePanelLink(partnerUrl);
76
+ console.log(` ${chalk.cyan.underline(panelUrl)}`);
77
+ console.log(chalk.gray(' ' + t(hintKey)));
69
78
  }
70
79
 
71
80
  /**
@@ -115,6 +124,8 @@ export async function themePushCommand(themeName, options = {}) {
115
124
  spinner.text = t('push.pushing');
116
125
  const result = await apiClient.pushTheme(themeUuid);
117
126
 
127
+ const { url: resolvedPanelUrl } = resolvePanelLink(result.data?.partner_panel_url);
128
+
118
129
  // 3. No-op kontrolu
119
130
  if (result.data?.no_changes === true) {
120
131
  // JSON mode
@@ -125,7 +136,7 @@ export async function themePushCommand(themeName, options = {}) {
125
136
  command: 'theme push',
126
137
  data: {
127
138
  reason: 'no_changes',
128
- partner_panel_url: result.data?.partner_panel_url || null,
139
+ partner_panel_url: resolvedPanelUrl,
129
140
  }
130
141
  });
131
142
  return;
@@ -148,7 +159,7 @@ export async function themePushCommand(themeName, options = {}) {
148
159
  bump_type: result.data.bump_type,
149
160
  action: result.data.action,
150
161
  changes: result.data.changes || [],
151
- partner_panel_url: result.data.partner_panel_url || null,
162
+ partner_panel_url: resolvedPanelUrl,
152
163
  }
153
164
  });
154
165
  return;