tsoft-cli 3.7.1 → 3.7.3
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 +20 -0
- package/README.md +39 -39
- package/locales/en.json +5 -22
- package/locales/tr.json +57 -74
- package/package.json +2 -2
- package/src/commands/theme-dev.js +13 -16
- package/src/commands/theme-push.js +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,26 @@ 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.3] - 2026-04-20
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- `tsoft theme push` now renders the partner panel URL returned by the push response as a clickable underlined link (`chalk.cyan.underline`), pointing to the organization-scoped theme page instead of the generic landing page.
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
- `tsoft theme dev` watcher startup collapsed into a single-line compact status bar (`👀 Watching · P preview · Ctrl+C exit`) replacing the three-line header.
|
|
15
|
+
- Preview URL fetch failures during `theme dev` are now silent — the `P` hint is simply omitted when unavailable, keeping the console clean.
|
|
16
|
+
- Browser open failures on `P` keypress now use an i18n-localized message via `dev.preview_open_failed` instead of a hardcoded Turkish string.
|
|
17
|
+
- README translated to English — the CLI's public-facing documentation is now consistent with the npm package audience.
|
|
18
|
+
- `package.json#description` updated to English to match the README.
|
|
19
|
+
|
|
20
|
+
### Removed
|
|
21
|
+
- Obsolete i18n keys `dev.watching`, `dev.env_running`, `dev.exit_tip` (replaced by `dev.status_*`).
|
|
22
|
+
|
|
23
|
+
## [3.7.2] - 2026-04-16
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
- 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.
|
|
27
|
+
|
|
8
28
|
## [3.7.1] - 2026-04-16
|
|
9
29
|
|
|
10
30
|
### Fixed
|
package/README.md
CHANGED
|
@@ -1,86 +1,86 @@
|
|
|
1
1
|
# tsoft-cli
|
|
2
2
|
|
|
3
|
-
[tsoft360](https://tsoft360.com)
|
|
3
|
+
Command-line tool for [tsoft360](https://tsoft360.com) theme development and management.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Installation
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
8
|
npm install -g tsoft-cli
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## Requirements
|
|
12
12
|
|
|
13
13
|
- Node.js >= 18.0.0
|
|
14
14
|
|
|
15
|
-
##
|
|
15
|
+
## Quick Start
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
|
-
#
|
|
18
|
+
# Sign in
|
|
19
19
|
tsoft login
|
|
20
20
|
|
|
21
|
-
#
|
|
21
|
+
# List available themes
|
|
22
22
|
tsoft theme list
|
|
23
23
|
|
|
24
|
-
#
|
|
24
|
+
# Pull an existing theme
|
|
25
25
|
tsoft theme pull
|
|
26
26
|
|
|
27
|
-
#
|
|
27
|
+
# Start dev mode (hot-reload)
|
|
28
28
|
tsoft theme dev
|
|
29
29
|
```
|
|
30
30
|
|
|
31
|
-
##
|
|
31
|
+
## Commands
|
|
32
32
|
|
|
33
|
-
###
|
|
33
|
+
### Authentication
|
|
34
34
|
|
|
35
|
-
|
|
|
36
|
-
|
|
37
|
-
| `tsoft login` |
|
|
38
|
-
| `tsoft logout` |
|
|
39
|
-
| `tsoft whoami` |
|
|
35
|
+
| Command | Description |
|
|
36
|
+
|----------------|-----------------------------------------|
|
|
37
|
+
| `tsoft login` | Sign in via OAuth2 |
|
|
38
|
+
| `tsoft logout` | Sign out and clear stored tokens |
|
|
39
|
+
| `tsoft whoami` | Show the signed-in user and active shop |
|
|
40
40
|
|
|
41
|
-
###
|
|
41
|
+
### Theme Management
|
|
42
42
|
|
|
43
|
-
|
|
|
44
|
-
|
|
45
|
-
| `tsoft theme list` |
|
|
46
|
-
| `tsoft theme create` |
|
|
47
|
-
| `tsoft theme pull` |
|
|
48
|
-
| `tsoft theme use [name]` |
|
|
49
|
-
| `tsoft theme dev [name]` |
|
|
50
|
-
| `tsoft theme publish [name]` |
|
|
51
|
-
| `tsoft theme section list` |
|
|
52
|
-
| `tsoft theme section add` |
|
|
43
|
+
| Command | Description |
|
|
44
|
+
| ---------------------------- | ----------------------------------------- |
|
|
45
|
+
| `tsoft theme list` | List all themes |
|
|
46
|
+
| `tsoft theme create` | Create a new theme (interactive) |
|
|
47
|
+
| `tsoft theme pull` | Pull an existing theme |
|
|
48
|
+
| `tsoft theme use [name]` | Set the active theme |
|
|
49
|
+
| `tsoft theme dev [name]` | Start dev mode (hot-reload) |
|
|
50
|
+
| `tsoft theme publish [name]` | Publish the theme to the TSoftApps market |
|
|
51
|
+
| `tsoft theme section list` | List blocks and sections |
|
|
52
|
+
| `tsoft theme section add` | Add a section (interactive) |
|
|
53
53
|
|
|
54
|
-
##
|
|
54
|
+
## Publishing a Theme
|
|
55
55
|
|
|
56
56
|
```bash
|
|
57
|
-
#
|
|
57
|
+
# Using the active theme
|
|
58
58
|
tsoft theme publish
|
|
59
59
|
|
|
60
|
-
#
|
|
60
|
+
# Using a specific theme
|
|
61
61
|
tsoft theme publish my-theme
|
|
62
62
|
```
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
On the first publish you enter the initial version number. Subsequent updates prompt for a semantic-versioning bump type (patch / minor / major).
|
|
65
65
|
|
|
66
|
-
##
|
|
66
|
+
## Security
|
|
67
67
|
|
|
68
|
-
- **OAuth2 PKCE**:
|
|
69
|
-
- **State
|
|
70
|
-
- **Secure
|
|
71
|
-
- **Auto
|
|
68
|
+
- **OAuth2 PKCE**: Secure authorization as a public client
|
|
69
|
+
- **State parameter**: CSRF protection
|
|
70
|
+
- **Secure storage**: Tokens are readable only by the owner (`chmod 600`)
|
|
71
|
+
- **Auto-refresh**: Access tokens are refreshed automatically when they expire
|
|
72
72
|
|
|
73
|
-
##
|
|
73
|
+
## Troubleshooting
|
|
74
74
|
|
|
75
75
|
```bash
|
|
76
|
-
#
|
|
76
|
+
# Check the current session
|
|
77
77
|
tsoft whoami
|
|
78
78
|
|
|
79
|
-
#
|
|
79
|
+
# Re-authenticate from scratch
|
|
80
80
|
tsoft logout
|
|
81
81
|
tsoft login
|
|
82
82
|
```
|
|
83
83
|
|
|
84
|
-
##
|
|
84
|
+
## License
|
|
85
85
|
|
|
86
86
|
[MIT](LICENSE)
|
package/locales/en.json
CHANGED
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
"ui.label.yes": "Yes",
|
|
13
13
|
"ui.label.no": "No",
|
|
14
14
|
"ui.label.disabled": "(Disabled)",
|
|
15
|
-
|
|
16
15
|
"error.push.pending_review.message": "Cannot push: theme is pending review.",
|
|
17
16
|
"error.push.pending_review.hint": "Withdraw first: tsoft theme withdraw",
|
|
18
17
|
"error.push.auth.message": "Authorization error.",
|
|
@@ -23,7 +22,6 @@
|
|
|
23
22
|
"error.push.backend_reject.hint": "For details: tsoft theme push --verbose",
|
|
24
23
|
"error.push.unexpected.message": "An unexpected error occurred.",
|
|
25
24
|
"error.push.unexpected.hint": "For details: tsoft theme push --verbose",
|
|
26
|
-
|
|
27
25
|
"error.http.401.message": "Authorization error.",
|
|
28
26
|
"error.http.401.hint": "Login again: tsoft login --org",
|
|
29
27
|
"error.http.403.message": "You do not have permission for this operation.",
|
|
@@ -36,13 +34,11 @@
|
|
|
36
34
|
"error.http.423.hint": "Theme may be locked by another operation.",
|
|
37
35
|
"error.http.5xx.message": "Server error occurred.",
|
|
38
36
|
"error.http.5xx.hint": "For details: tsoft {{command}} --verbose",
|
|
39
|
-
|
|
40
37
|
"error.push.verbose_hint": "For details: tsoft theme push --verbose",
|
|
41
38
|
"error.fallback.message": "An unexpected error occurred.",
|
|
42
39
|
"error.fallback.hint": "For details: tsoft theme push --verbose",
|
|
43
40
|
"error.auth_required.message": "Authorization error.",
|
|
44
41
|
"error.auth_required.hint": "Login again: tsoft login --org",
|
|
45
|
-
|
|
46
42
|
"login.starting": "🔐 Initializing tsoft360 authorization...",
|
|
47
43
|
"login.browser_opening": "🌐 Opening browser...",
|
|
48
44
|
"login.waiting": "⏳ Waiting for authorization...",
|
|
@@ -57,7 +53,6 @@
|
|
|
57
53
|
"login.json_error.hint": "For CI/CD, authenticate with tsoft login first to store the token, then use it.",
|
|
58
54
|
"login.error_log": "Check log files for details.",
|
|
59
55
|
"login.security_error": "State parameter mismatch! This may indicate a security issue.",
|
|
60
|
-
|
|
61
56
|
"logout.starting": "🚪 Logging out...",
|
|
62
57
|
"logout.not_logged_in": "⚠️ You are not logged in.",
|
|
63
58
|
"logout.revoking": "🔄 Revoking token...",
|
|
@@ -66,7 +61,6 @@
|
|
|
66
61
|
"logout.credentials_cleared": "✓ Local credentials cleared",
|
|
67
62
|
"logout.success": "👋 Successfully logged out!",
|
|
68
63
|
"logout.relogin_tip": "To log in again, use the \"tsoft login\" command.",
|
|
69
|
-
|
|
70
64
|
"whoami.not_logged_in": "⚠️ You are not logged in.",
|
|
71
65
|
"whoami.not_logged_in_tip": "Use \"tsoft login\" to log in.",
|
|
72
66
|
"whoami.not_logged_in.json.message": "Not logged in.",
|
|
@@ -84,7 +78,6 @@
|
|
|
84
78
|
"whoami.token_expired": "✗ Expired",
|
|
85
79
|
"whoami.refresh_valid": "✓ Valid ({{days}} days remaining)",
|
|
86
80
|
"whoami.relogin_tip": "Tip: Use tsoft login --org to log in again",
|
|
87
|
-
|
|
88
81
|
"theme.listing": "📋 Listing themes...",
|
|
89
82
|
"theme.no_themes": "⚠️ No themes found yet.",
|
|
90
83
|
"theme.count": "Total {{count}} themes found:",
|
|
@@ -123,14 +116,12 @@
|
|
|
123
116
|
"theme.force_updating": "⏳ Updating default theme and creating new theme...",
|
|
124
117
|
"theme.force_update_success_1": "✓ Default theme successfully updated",
|
|
125
118
|
"theme.force_update_success_2": "✓ New theme created",
|
|
126
|
-
|
|
127
119
|
"theme.pull.starting": "📥 Starting theme download...",
|
|
128
120
|
"theme.pull.no_themes": "No themes available to download.",
|
|
129
121
|
"theme.pull.select_title": "Download Theme",
|
|
130
122
|
"theme.pull.select_prompt": "Which theme would you like to download?",
|
|
131
123
|
"theme.pull.downloading": "📦 Downloading \"{{name}}\"...",
|
|
132
124
|
"theme.pull.success": "🎉 Theme successfully downloaded!",
|
|
133
|
-
|
|
134
125
|
"theme.use.starting": "🎯 Setting active theme...",
|
|
135
126
|
"theme.use.no_themes": "No themes found.",
|
|
136
127
|
"theme.use.not_found": "❌ Theme not found: {{name}}",
|
|
@@ -139,7 +130,6 @@
|
|
|
139
130
|
"theme.use.select_title": "🎯 Theme Selection",
|
|
140
131
|
"theme.use.set": "✓ Active theme set: {{name}}",
|
|
141
132
|
"theme.use.folder": "Folder: {{folder}}",
|
|
142
|
-
|
|
143
133
|
"push.no_active_theme": "No active theme found.",
|
|
144
134
|
"push.usage": "Usage: tsoft theme push <theme-name>",
|
|
145
135
|
"push.use_tip": "Or set an active theme with \"tsoft theme use <theme-name>\".",
|
|
@@ -155,7 +145,6 @@
|
|
|
155
145
|
"push.partner_hint": "Visit the partner panel for the theme list.",
|
|
156
146
|
"push.changes_added": "+{{count}} new",
|
|
157
147
|
"push.changes_removed": "~{{count}} removed",
|
|
158
|
-
|
|
159
148
|
"dev.starting": "🚀 Starting development environment...",
|
|
160
149
|
"dev.active_site": "📍 Active Site:",
|
|
161
150
|
"dev.active_theme": "📍 Active Theme:",
|
|
@@ -185,9 +174,6 @@
|
|
|
185
174
|
"dev.lock_by_other": "Theme is locked by another developer!\n\nDeveloper: {{dev}}\nLast access: {{last_access}}\n\nAre you sure you want to take the lock?",
|
|
186
175
|
"dev.lock_warning_title": "🔒 Lock Warning",
|
|
187
176
|
"dev.lock_override": "🔐 Acquiring lock (override)...",
|
|
188
|
-
"dev.watching": "👀 Watching for file changes...",
|
|
189
|
-
"dev.env_running": "💡 Development environment is running",
|
|
190
|
-
"dev.exit_tip": "Press Ctrl+C to exit safely",
|
|
191
177
|
"dev.stopping": "⏸️ Shutting down development environment...",
|
|
192
178
|
"dev.watch_stopped": "✓ File watching stopped",
|
|
193
179
|
"dev.keepalive_stopped": "✓ Keep-alive stopped",
|
|
@@ -207,7 +193,6 @@
|
|
|
207
193
|
"dev.file_saved": "✓ {{path}} → Saved ({{duration}}ms)",
|
|
208
194
|
"dev.file_error": "{{path}} → Error: {{error}}",
|
|
209
195
|
"dev.keepalive_error": "⚠️ Keep-alive error (will retry)",
|
|
210
|
-
|
|
211
196
|
"init.no_themes": "No themes found.",
|
|
212
197
|
"init.select_prompt": "Which theme would you like to fork?",
|
|
213
198
|
"init.select_title": "Theme Selection",
|
|
@@ -227,7 +212,6 @@
|
|
|
227
212
|
"init.json_error.message": "--from parameter required (interactive selection not supported in JSON mode)",
|
|
228
213
|
"init.json_error.hint": "Usage: tsoft --json theme init --from <slug>",
|
|
229
214
|
"init.theme_not_found": "Theme not found: {{slug}}",
|
|
230
|
-
|
|
231
215
|
"section.list.no_active_theme": "No active theme found. Please run \"tsoft theme use <theme-name>\" first.",
|
|
232
216
|
"section.list.starting": "Listing sections...",
|
|
233
217
|
"section.list.active_theme": "Active Theme: {{theme}}",
|
|
@@ -239,7 +223,6 @@
|
|
|
239
223
|
"section.list.tags_label": "Tags:",
|
|
240
224
|
"section.list.file_label": "File:",
|
|
241
225
|
"section.list.no_sections": "⚠️ No sections found for this block",
|
|
242
|
-
|
|
243
226
|
"section.add.no_active_theme": "No active theme found. Please run \"tsoft theme use <theme-name>\" first.",
|
|
244
227
|
"section.add.starting": "🔧 Starting section add operation...",
|
|
245
228
|
"section.add.active_theme": "Active Theme: {{theme}}",
|
|
@@ -282,7 +265,6 @@
|
|
|
282
265
|
"section.add.download_error": "⚠️ Error while updating theme files:",
|
|
283
266
|
"section.add.manual_tip": "💡 Try downloading the theme manually:",
|
|
284
267
|
"section.add.manual_command": "tsoft theme pull",
|
|
285
|
-
|
|
286
268
|
"org.switch.json_error.message": "This command requires interactive mode.",
|
|
287
269
|
"org.switch.json_error.hint": "org switch is not supported in JSON mode.",
|
|
288
270
|
"org.switch.no_store": "No active store found. Please run \"tsoft login\" first.",
|
|
@@ -294,7 +276,6 @@
|
|
|
294
276
|
"org.switch.selecting": "Selecting {{name}}...",
|
|
295
277
|
"org.switch.success": "Active organization: {{name}}\nID: {{id}}\n\nYou can now develop themes under this organization.",
|
|
296
278
|
"org.switch.error": "Organization selection failed: {{error}}",
|
|
297
|
-
|
|
298
279
|
"help.tagline": "Theme development toolkit for tsoft360",
|
|
299
280
|
"help.footer": "Run tsoft <command> --help for details",
|
|
300
281
|
"help.group.development": "Development",
|
|
@@ -313,15 +294,17 @@
|
|
|
313
294
|
"help.cmd.logout": "Sign out and clear local credentials",
|
|
314
295
|
"help.cmd.whoami": "Show the logged-in user and store info",
|
|
315
296
|
"help.cmd.org_switch": "Switch the active organization",
|
|
316
|
-
|
|
317
297
|
"help.status.logged_in": "{{email}} ({{store}})",
|
|
318
298
|
"help.status.not_logged_in": "Not logged in — tsoft login",
|
|
319
299
|
"help.status.active_theme": "Theme: {{theme}}",
|
|
320
300
|
"help.status.no_theme": "No active theme — tsoft theme init",
|
|
321
|
-
|
|
322
301
|
"publish.deprecated": "Warning: Use \"theme push\" instead of \"theme publish\".",
|
|
323
302
|
"submit.deprecated": "Warning: Submit is now done from the partner panel.",
|
|
324
303
|
"submit.step1": "1. tsoft theme push",
|
|
325
304
|
"submit.step2": "2. Complete meta/screenshots in the partner panel",
|
|
326
|
-
"submit.step3": "3. Submit from the partner panel"
|
|
305
|
+
"submit.step3": "3. Submit from the partner panel",
|
|
306
|
+
"dev.status_watching": "Watching",
|
|
307
|
+
"dev.status_preview": "preview",
|
|
308
|
+
"dev.status_exit": "exit",
|
|
309
|
+
"dev.preview_open_failed": "Couldn't open browser: {{error}}"
|
|
327
310
|
}
|
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}}",
|
|
@@ -185,9 +174,6 @@
|
|
|
185
174
|
"dev.lock_by_other": "Tema başka bir developer tarafından kilitli!\n\nDeveloper: {{dev}}\nSon erişim: {{last_access}}\n\nKilidi almak istediğinizden emin misiniz?",
|
|
186
175
|
"dev.lock_warning_title": "🔒 Kilit Uyarısı",
|
|
187
176
|
"dev.lock_override": "🔐 Kilit alınıyor (override)...",
|
|
188
|
-
"dev.watching": "👀 Dosya değişiklikleri izleniyor...",
|
|
189
|
-
"dev.env_running": "💡 Geliştirme ortamı çalışıyor",
|
|
190
|
-
"dev.exit_tip": "Ctrl+C ile güvenli çıkış yapabilirsiniz",
|
|
191
177
|
"dev.stopping": "⏸️ Geliştirme ortamı kapatılıyor...",
|
|
192
178
|
"dev.watch_stopped": "✓ Dosya izleme durduruldu",
|
|
193
179
|
"dev.keepalive_stopped": "✓ Keep-alive durduruldu",
|
|
@@ -207,27 +193,25 @@
|
|
|
207
193
|
"dev.file_saved": "✓ {{path}} → Kaydedildi ({{duration}}ms)",
|
|
208
194
|
"dev.file_error": "{{path}} → Hata: {{error}}",
|
|
209
195
|
"dev.keepalive_error": "⚠️ Keep-alive hatası (yeniden denenecek)",
|
|
210
|
-
|
|
211
|
-
"init.no_themes": "Tema bulunamadi.",
|
|
196
|
+
"init.no_themes": "Tema bulunamadı.",
|
|
212
197
|
"init.select_prompt": "Hangi temayi fork etmek istiyorsunuz?",
|
|
213
|
-
"init.select_title": "Tema
|
|
198
|
+
"init.select_title": "Tema Seçimi",
|
|
214
199
|
"init.confirm_prompt": "{{name}} v{{version}} fork edilecek.\nDevam etmek istiyor musunuz?",
|
|
215
200
|
"init.confirm_title": "Fork Onayi",
|
|
216
|
-
"init.cancelled": "
|
|
201
|
+
"init.cancelled": "İşlem iptal edildi.",
|
|
217
202
|
"init.forking": "Tema fork ediliyor...",
|
|
218
203
|
"init.dir_exists_title": "Dizin Mevcut",
|
|
219
204
|
"init.dir_exists_prompt": "Dizin zaten mevcut!\n\nKonum: {{path}}\n\nUzerine yazilsin mi?",
|
|
220
|
-
"init.dir_cancelled": "
|
|
205
|
+
"init.dir_cancelled": "İşlem iptal edildi.",
|
|
221
206
|
"init.downloading": "Tema dosyalari indiriliyor...",
|
|
222
207
|
"init.success": "Tema basariyla fork edildi!",
|
|
223
208
|
"init.theme_label": "Tema:",
|
|
224
209
|
"init.source_label": "Kaynak:",
|
|
225
210
|
"init.location_label": "Konum:",
|
|
226
|
-
"init.dev_tip": "
|
|
227
|
-
"init.json_error.message": "--from parametresi gerekli (JSON modda interaktif
|
|
211
|
+
"init.dev_tip": "Geliştirmeye başlamak için: tsoft theme dev {{slug}}",
|
|
212
|
+
"init.json_error.message": "--from parametresi gerekli (JSON modda interaktif seçim desteklenmez)",
|
|
228
213
|
"init.json_error.hint": "Kullanim: tsoft --json theme init --from <slug>",
|
|
229
|
-
"init.theme_not_found": "Tema
|
|
230
|
-
|
|
214
|
+
"init.theme_not_found": "Tema bulunamadı: {{slug}}",
|
|
231
215
|
"section.list.no_active_theme": "Aktif tema bulunamadı. Lütfen önce \"tsoft theme use <tema-adı>\" komutunu çalıştırın.",
|
|
232
216
|
"section.list.starting": "Section'lar listeleniyor...",
|
|
233
217
|
"section.list.active_theme": "Aktif Tema: {{theme}}",
|
|
@@ -239,7 +223,6 @@
|
|
|
239
223
|
"section.list.tags_label": "Etiketler:",
|
|
240
224
|
"section.list.file_label": "Dosya:",
|
|
241
225
|
"section.list.no_sections": "⚠️ Bu block için section bulunmuyor",
|
|
242
|
-
|
|
243
226
|
"section.add.no_active_theme": "Aktif tema bulunamadı. Lütfen önce \"tsoft theme use <tema-adı>\" komutunu çalıştırın.",
|
|
244
227
|
"section.add.starting": "🔧 Section ekleme işlemi başlatılıyor...",
|
|
245
228
|
"section.add.active_theme": "Aktif Tema: {{theme}}",
|
|
@@ -282,19 +265,17 @@
|
|
|
282
265
|
"section.add.download_error": "⚠️ Tema dosyaları güncellenirken hata oluştu:",
|
|
283
266
|
"section.add.manual_tip": "💡 Manuel olarak temayı tekrar indirmeyi deneyin:",
|
|
284
267
|
"section.add.manual_command": "tsoft theme pull",
|
|
285
|
-
|
|
286
268
|
"org.switch.json_error.message": "Bu komut interaktif mod gerektiriyor.",
|
|
287
269
|
"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
|
-
|
|
270
|
+
"org.switch.no_store": "Aktif mağaza bulunamadı. Lütfen önce \"tsoft login\" komutunu çalıştırın.",
|
|
271
|
+
"org.switch.no_token": "Token bulunamadı. Lütfen önce \"tsoft login\" komutunu çalıştırın.",
|
|
272
|
+
"org.switch.loading": "Organizasyonlar yükleniyor...",
|
|
273
|
+
"org.switch.no_orgs": "Hiçbir organizasyona üyesiniz değil.",
|
|
274
|
+
"org.switch.select_prompt": "Hangi organizasyonda çalışacaksınız?",
|
|
275
|
+
"org.switch.select_title": "Organizasyon Seçimi",
|
|
276
|
+
"org.switch.selecting": "{{name}} seçiliyor...",
|
|
277
|
+
"org.switch.success": "Aktif organizasyon: {{name}}\nID: {{id}}\n\nArtık bu organizasyon altında tema geliştirebilirsiniz.",
|
|
278
|
+
"org.switch.error": "Organizasyon seçimi başarısız: {{error}}",
|
|
298
279
|
"help.tagline": "tsoft360 için tema geliştirme araç seti",
|
|
299
280
|
"help.footer": "Detaylar için: tsoft <komut> --help",
|
|
300
281
|
"help.group.development": "Geliştirme",
|
|
@@ -313,15 +294,17 @@
|
|
|
313
294
|
"help.cmd.logout": "Oturumu kapatın ve yerel kimlik bilgilerini temizleyin",
|
|
314
295
|
"help.cmd.whoami": "Giriş yapan kullanıcı ve mağaza bilgilerini gösterin",
|
|
315
296
|
"help.cmd.org_switch": "Aktif organizasyonu değiştirin",
|
|
316
|
-
|
|
317
297
|
"help.status.logged_in": "{{email}} ({{store}})",
|
|
318
298
|
"help.status.not_logged_in": "Giriş yapılmadı — tsoft login",
|
|
319
299
|
"help.status.active_theme": "Tema: {{theme}}",
|
|
320
300
|
"help.status.no_theme": "Aktif tema yok — tsoft theme init",
|
|
321
|
-
|
|
322
|
-
"
|
|
323
|
-
"submit.deprecated": "Uyari: Submit islemi artik partner panelden yapiliyor.",
|
|
301
|
+
"publish.deprecated": "Uyarı: \"theme publish\" yerine \"theme push\" kullanın.",
|
|
302
|
+
"submit.deprecated": "Uyarı: Submit işlemi artık partner panelden yapılıyor.",
|
|
324
303
|
"submit.step1": "1. tsoft theme push",
|
|
325
304
|
"submit.step2": "2. Partner panelde meta/screenshot tamamlayin",
|
|
326
|
-
"submit.step3": "3. Partner panelden submit edin"
|
|
305
|
+
"submit.step3": "3. Partner panelden submit edin",
|
|
306
|
+
"dev.status_watching": "İzleniyor",
|
|
307
|
+
"dev.status_preview": "önizleme",
|
|
308
|
+
"dev.status_exit": "çıkış",
|
|
309
|
+
"dev.preview_open_failed": "Tarayıcı açılamadı: {{error}}"
|
|
327
310
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tsoft-cli",
|
|
3
|
-
"version": "3.7.
|
|
4
|
-
"description": "tsoft360
|
|
3
|
+
"version": "3.7.3",
|
|
4
|
+
"description": "Command-line tool for tsoft360 theme development and management",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.js",
|
|
7
7
|
"bin": {
|
|
@@ -186,26 +186,24 @@ async function handleFileDelete(themeUuid, themePath, filePath) {
|
|
|
186
186
|
}
|
|
187
187
|
|
|
188
188
|
async function startFileWatcher(themeUuid, themePath) {
|
|
189
|
-
|
|
190
|
-
console.log(chalk.gray(t('dev.env_running')));
|
|
191
|
-
console.log(chalk.gray(' ' + t('dev.exit_tip') + '\n'));
|
|
192
|
-
|
|
193
|
-
// Preview URL — backend HMAC token uretip dev temayi onizleme link'i veriyor
|
|
189
|
+
// Preview URL — sessizce cek, baglanamazsa status line'da P ipucunu gosterme
|
|
194
190
|
let previewUrl = null;
|
|
195
191
|
try {
|
|
196
192
|
const apiClient = await createApiClient();
|
|
197
193
|
const previewRes = await apiClient.get(`/theme/${themeUuid}/preview-url`);
|
|
198
194
|
previewUrl = previewRes?.data?.preview_url || null;
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
console.log(chalk.bgGreen.black(' [P] Preview ') + ' ' + chalk.white(previewUrl));
|
|
202
|
-
console.log(chalk.gray(' ' + chalk.dim('basın: ') + chalk.bold('P') + chalk.dim(' tarayıcıda aç')) + (expIso ? chalk.gray(` ${chalk.dim('exp:')} ${expIso}`) : '') + '\n');
|
|
203
|
-
}
|
|
204
|
-
} catch (err) {
|
|
205
|
-
console.log(chalk.gray(' (preview link alinamadi: ' + (err?.message || 'unknown') + ')\n'));
|
|
195
|
+
} catch {
|
|
196
|
+
// sessiz — preview opsiyonel
|
|
206
197
|
}
|
|
207
198
|
|
|
208
|
-
//
|
|
199
|
+
// Tek satirlik compact status — watching + P preview (varsa) + Ctrl+C exit
|
|
200
|
+
const sep = chalk.dim(' · ');
|
|
201
|
+
const parts = [chalk.cyan('👀 ' + t('dev.status_watching'))];
|
|
202
|
+
if (previewUrl) parts.push(chalk.bold.green('P') + chalk.gray(' ' + t('dev.status_preview')));
|
|
203
|
+
parts.push(chalk.gray('Ctrl+C ' + t('dev.status_exit')));
|
|
204
|
+
console.log('\n' + parts.join(sep) + '\n');
|
|
205
|
+
|
|
206
|
+
// Klavye dinleyici — 'P' tarayıcida preview URL'ini sessizce acar, Ctrl+C cikis
|
|
209
207
|
if (previewUrl && process.stdin.isTTY) {
|
|
210
208
|
try {
|
|
211
209
|
process.stdin.setRawMode(true);
|
|
@@ -216,15 +214,14 @@ async function startFileWatcher(themeUuid, themePath) {
|
|
|
216
214
|
process.exit(0);
|
|
217
215
|
}
|
|
218
216
|
if (key === 'p' || key === 'P') {
|
|
219
|
-
console.log(chalk.cyan(' tarayıcıda açılıyor: ') + chalk.white(previewUrl));
|
|
220
217
|
try {
|
|
221
218
|
await open(previewUrl);
|
|
222
219
|
} catch (e) {
|
|
223
|
-
console.log(chalk.red('
|
|
220
|
+
console.log(chalk.red(' ' + t('dev.preview_open_failed', { error: e.message })));
|
|
224
221
|
}
|
|
225
222
|
}
|
|
226
223
|
});
|
|
227
|
-
} catch
|
|
224
|
+
} catch {
|
|
228
225
|
// raw mode bazi terminallerde calismaz — sessizce gec
|
|
229
226
|
}
|
|
230
227
|
}
|
|
@@ -63,7 +63,8 @@ function displayDiffSummary(data, previousVersion) {
|
|
|
63
63
|
|
|
64
64
|
// Partner panel yonlendirme
|
|
65
65
|
console.log('');
|
|
66
|
-
|
|
66
|
+
const panelUrl = partnerUrl || 'https://partners.tsoft360.com';
|
|
67
|
+
console.log(chalk.cyan.underline(` ${panelUrl}`));
|
|
67
68
|
console.log(chalk.gray(' ' + t('push.partner_hint')));
|
|
68
69
|
}
|
|
69
70
|
|