uvako-cli 0.2.1 → 0.4.0

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/README.md CHANGED
@@ -1,125 +1,175 @@
1
- # uvako-cli
2
-
3
- Uvako mağazaları için tema geliştirme aracı. Temayı başlatır, denetler, mağazanıza yükler ve kaydettikçe canlı önizletir.
4
-
5
- **[Uvako](https://uvako.com)** — Rox Software ürünü.
6
-
7
- Node.js 22 ve üzeri gerekir. Ek bağımlılığı yoktur.
8
-
9
- ## Kurulum
10
-
11
- ```bash
12
- npm install -g uvako-cli
13
- uvako version
14
- ```
15
-
16
- ## Hızlı başlangıç
17
-
18
- 1. Mağaza panelinde **Ayarlar → Temalar → Geliştirici erişimi** bölümünden bir erişim anahtarı oluşturun.
19
- 2. Giriş yapın (anahtar sorulur, ekrana yazılmaz):
20
-
21
- ```bash
22
- uvako login --store magazam
23
- ```
24
-
25
- 3. Bir katalog temasını temel alan yeni tema başlatın:
26
-
27
- ```bash
28
- uvako theme init atolye --base linea
29
- ```
30
-
31
- 4. Canlı geliştirin: dosyaları kaydettikçe tema mağazanıza yüklenir, açık önizleme sayfası kendini yeniler.
32
-
33
- ```bash
34
- uvako theme dev atolye
35
- ```
36
-
37
- Önizleme adresi mağazanızın kendi adresidir (`https://magazam.uvoo.store/?preview=…`); tarayıcıda mağaza
38
- paneline giriş yapmış olmanız gerekir. Tema, panelden yayınlanana kadar vitrininizi değiştirmez.
39
-
40
- ## Komutlar
41
-
42
- | Komut | Ne yapar |
43
- |---|---|
44
- | `uvako login --store <mağaza>` | Mağazaya tema erişim anahtarıyla bağlanır. |
45
- | `uvako logout` · `uvako whoami` | Kayıtlı girişi siler · bağlı mağazayı gösterir. |
46
- | `uvako theme init <anahtar>` | Yeni tema iskeleti (`--base`, `--name`, `--author`). |
47
- | `uvako theme check [klasör]` | Temayı denetler: yapı, ayarlar, bölümler, görseller, güvenlik. |
48
- | `uvako theme dev [klasör]` | Canlı geliştirme: kaydettikçe yükler, önizleme yenilenir. Durdurunca mağaza eski hâline döner (`--keep` ile kütüphanede kalır). |
49
- | `uvako theme push [klasör]` | Temayı mağazanın tema kütüphanesine yükler. |
50
- | `uvako theme pull <anahtar>` | Yüklediğiniz temayı indirir (`--dir`, `--force`). |
51
- | `uvako theme list` | Mağazadaki temaları ve yüklediğiniz paketleri listeler. |
52
- | `uvako theme submit <anahtar>` | Temayı themes.uvako.com için incelemeye gönderir. |
53
- | `uvako theme delete <anahtar> --yes` | Yüklediğiniz paketi siler. |
54
- | `uvako theme package [klasör]` | Denetimden geçen temayı zip paketine çevirir (`--out`). |
55
- | `uvako version` | Sürümü yazar. |
56
-
57
- `uvako-cli` aynı komutların uzun adıdır. Hata varsa çıkış kodu 1'dir. CI için `UVAKO_STORE` ve
58
- `UVAKO_TOKEN` ortam değişkenleri girişin yerini tutar.
59
-
60
- ## Tema paketi
61
-
62
- Tema kod içermez. Bir katalog temasını (`base`) temel alır ve onun üstüne şunları getirir:
63
-
64
- ```
65
- theme.json kimlik: key, name, version, base; mağaza vitrini bilgileri
66
- config/settings_data.json temel temadan farklı olan ayar değerleri
67
- config/settings_schema.json (isteğe bağlı) panelde görünen ayarlar
68
- templates/index.json (isteğe bağlı) ana sayfadaki bölüm sırası
69
- styles/_tokens.scss renk, yazı tipi, köşe değişkenleri (temanın tamamına yayılır)
70
- styles/theme.scss temaya özgü SCSS
71
- assets/ logo, slayt ve banner görselleri, yazı tipleri
72
- reference/ temel temanın ayarları ve bölüm türleri (pakete girmez)
73
- ```
74
-
75
- Bölümlerin kendisi (slayt, banner, ürün vitrini…) temel temadan gelir; paket hangilerinin hangi sırayla
76
- ve hangi görünümle kullanılacağını söyler. Katalog temaları: [themes.uvako.com](https://themes.uvako.com).
77
-
78
- ## Yayınlama
79
-
80
- - `push` ile yüklenen tema **yalnızca kendi mağazanızda** görünür.
81
- - `submit` temayı Uvako incelemesine gönderir. Onaylanan sürüm themes.uvako.com'da listelenir ve diğer
82
- mağazalar kurabilir. Fiyatı (`theme.json` içindeki `price` öneridir) Uvako onaylar.
83
- - Onaydan sonra yüklediğiniz yeni sürümler yeniden onaylanana kadar yalnızca kendi mağazanızı etkiler.
84
-
85
- ## Güvenlik kuralları
86
-
87
- Mağaza, yüklenen paketi aynı kurallarla **kendisi yeniden denetler**; `check` hatayı önceden görmeniz içindir.
88
-
89
- - Yalnızca yukarıdaki dosyalar kabul edilir: JSON, SCSS, görsel ve yazı tipi. JavaScript, şablon ve
90
- çalıştırılabilir dosyalar reddedilir.
91
- - `<script>`, `javascript:` adresleri, `onclick` gibi olay öznitelikleri, `<iframe>` (SVG ve ayar metinleri dahil).
92
- - Kod çalıştıran CSS (`expression`, `behavior`, `-moz-binding`).
93
- - SCSS içinde döngü, fonksiyon ve mixin tanımı (`@while`, `@for`, `@each`, `@function`, `@mixin`, `@use`).
94
- Temel temanın mixin'leri `@include` ile kullanılabilir.
95
- - Paketin kendi dosyaları dışındaki `@import`'lar ve yazı tipi sağlayıcıları dışındaki adresler.
96
- - Sembolik bağlar, gizli dosyalar, 5 MB'tan büyük dosyalar, 60 MB'tan büyük ya da 600 dosyadan fazla paketler.
97
- - Gizli anahtar ya da parola gibi görünen değerler.
98
-
99
- Erişim anahtarı yalnızca tema işlemlerine yetkilidir; sipariş, müşteri ve ayarlara erişemez. Bilgisayarınızda
100
- kullanıcı klasörünüzde saklanır, tema klasörüne yazılmaz, yalnızca giriş yaptığınız mağazaya ve yalnızca
101
- https üzerinden gönderilir. Kaybederseniz panelden iptal edin.
102
-
103
- Araç platformun kaynak kodunu içermez.
104
-
105
- ## Uvako
106
-
107
- [uvako.com](https://uvako.com)
108
-
109
- Uvako, işletmelerin kendi alan adıyla online mağaza kurmasını sağlayan e-ticaret altyapısıdır. Ürün, sipariş, ödeme, kargo, kampanya ve tema yönetimi tek panelde toplanır.
110
-
111
- ## Rox Software · Rox Group
112
-
113
- Bu paket **Rox Software** tarafından geliştirilir ve yayınlanır.
114
-
115
- Rox Software; kurumsal web, e-ticaret, özel yazılım ve kendi ürün platformlarını (RoxB2B, RoxETS, Uvako) geliştiren Ankara merkezli yazılım ekibidir.
116
-
117
- **Rox Group Yazılım Havacılık Uzay ve Savunma Sanayi Limited Şirketi**
118
- İvedikköy Mahallesi 1493. Sokak No:5 Daire:22
119
- 06378 Yenimahalle / Ankara
120
-
121
- - Site: [roxsoftware.net](https://www.roxsoftware.net/)
122
- - Uvako: [uvako.com](https://uvako.com)
123
- - E-posta: info@roxsoftware.net
124
-
125
- Tüm hakları saklıdır. © Rox Group
1
+ # uvako-cli
2
+
3
+ Uvako mağazaları için tema geliştirme aracı. Temayı başlatır, denetler, mağazanıza yükler ve kaydettikçe canlı önizletir.
4
+
5
+ **[Uvako](https://uvako.com)** — Rox Software ürünü.
6
+
7
+ Node.js 22 ve üzeri gerekir. Ek bağımlılığı yoktur.
8
+
9
+ ## Kurulum
10
+
11
+ ```bash
12
+ npm install -g uvako-cli
13
+ uvako version
14
+ ```
15
+
16
+ ## Hızlı başlangıç
17
+
18
+ 1. Mağaza panelinde **Ayarlar → Temalar → Geliştirici erişimi** bölümünden bir erişim anahtarı oluşturun.
19
+ 2. Giriş yapın (anahtar sorulur, ekrana yazılmaz):
20
+
21
+ ```bash
22
+ uvako login --store magazam
23
+ ```
24
+
25
+ 3. Bir katalog temasını temel alan yeni tema başlatın:
26
+
27
+ ```bash
28
+ uvako theme init atolye --base linea
29
+ ```
30
+
31
+ 4. Canlı geliştirin: dosyaları kaydettikçe tema mağazanıza yüklenir, açık önizleme sayfası kendini yeniler.
32
+
33
+ ```bash
34
+ uvako theme dev atolye
35
+ ```
36
+
37
+ Önizleme adresi mağazanızın kendi adresidir (`https://magazam.uvoo.store/?preview=…`); tarayıcıda mağaza
38
+ paneline giriş yapmış olmanız gerekir. Tema, panelden yayınlanana kadar vitrininizi değiştirmez.
39
+
40
+ ## Komutlar
41
+
42
+ | Komut | Ne yapar |
43
+ |---|---|
44
+ | `uvako login --store <mağaza>` | Mağazaya tema erişim anahtarıyla bağlanır. |
45
+ | `uvako logout` · `uvako whoami` | Kayıtlı girişi siler · bağlı mağazayı gösterir. |
46
+ | `uvako theme init <anahtar>` | Yeni tema iskeleti (`--base`, `--name`, `--author`). |
47
+ | `uvako theme check [klasör]` | Temayı denetler: yapı, ayarlar, bölümler, görseller, çeviriler, güvenlik. |
48
+ | `uvako theme dev [klasör]` | Canlı geliştirme: kaydettikçe yükler, önizleme yenilenir. Durdurunca mağaza eski hâline döner (`--keep` ile kütüphanede kalır). |
49
+ | `uvako theme push [klasör]` | Temayı mağazanın tema kütüphanesine yükler. |
50
+ | `uvako theme pull <anahtar>` | Yüklediğiniz temayı indirir (`--dir`, `--force`). |
51
+ | `uvako theme list` | Mağazadaki temaları ve yüklediğiniz paketleri listeler. |
52
+ | `uvako theme submit <anahtar>` | Temayı themes.uvako.com için incelemeye gönderir. |
53
+ | `uvako theme delete <anahtar> --yes` | Yüklediğiniz paketi siler. |
54
+ | `uvako theme package [klasör]` | Denetimden geçen temayı zip paketine çevirir (`--out`). |
55
+ | `uvako version` | Sürümü yazar. |
56
+
57
+ `uvako-cli` aynı komutların uzun adıdır. Hata varsa çıkış kodu 1'dir. CI için `UVAKO_STORE` ve
58
+ `UVAKO_TOKEN` ortam değişkenleri girişin yerini tutar.
59
+
60
+ ## Tema paketi
61
+
62
+ Tema kod içermez. Bir katalog temasını (`base`) temel alır ve onun üstüne şunları getirir:
63
+
64
+ ```
65
+ theme.json kimlik: key, name, version, base; mağaza vitrini bilgileri
66
+ config/settings_data.json temel temadan farklı olan ayar değerleri
67
+ config/settings_schema.json (isteğe bağlı) panelde görünen ayarlar
68
+ templates/index.json (isteğe bağlı) ana sayfadaki bölüm sırası
69
+ locales/en.json, de.json, tr.json (isteğe bağlı) temanın kendi metinlerinin çevirisi
70
+ styles/_tokens.scss renk, yazı tipi, köşe değişkenleri (temanın tamamına yayılır)
71
+ styles/theme.scss temaya özgü SCSS
72
+ assets/ logo, slayt ve banner görselleri, yazı tipleri
73
+ reference/ temel temanın ayarları ve bölüm türleri (pakete girmez)
74
+ ```
75
+
76
+ Bölümlerin kendisi (slayt, banner, ürün vitrini…) temel temadan gelir; paket hangilerinin hangi sırayla
77
+ ve hangi görünümle kullanılacağını söyler. Katalog temaları: [themes.uvako.com](https://themes.uvako.com).
78
+
79
+ ### Diller
80
+
81
+ Mağazalar vitrinini Türkçe, İngilizce ve Almanca yayınlayabilir. Temanın kendi metinlerini
82
+ (`config/settings_data.json` içindeki başlık ve buton yazıları, `theme.json` içindeki açıklama, sektör ve
83
+ özellikler) çevirmek için pakete sözlük dosyası koyun:
84
+
85
+ ```json
86
+ {
87
+ "Yeni sezon geldi": "The new season is here",
88
+ "Alışverişe başla": "Start shopping"
89
+ }
90
+ ```
91
+
92
+ - Dosyalar: `locales/en.json`, `locales/de.json`, `locales/tr.json`. Anahtar temadaki metnin kendisi,
93
+ değer o dildeki karşılığıdır. Düz bir sözlüktür; iç içe nesne olamaz.
94
+ - Temayı Türkçe yazdıysanız `en.json` ve `de.json` yeterlidir. Başka bir dilde yazdıysanız Türkçe
95
+ karşılıkları `tr.json` dosyasına koyun.
96
+ - Çevirisi olmayan metin yazıldığı gibi gösterilir. `uvako theme check` her dosyada eksik kalan
97
+ metinleri uyarı olarak listeler.
98
+ - Mağaza sahibinin panelden değiştirdiği metin sözlükte yoksa olduğu gibi kalır.
99
+ - Sınırlar: dosya başına 256 KB ve 2.000 metin; metin 500, çevirisi 2.000 karakter.
100
+
101
+ Temel temadan gelen metinler (sepet, ödeme, üyelik, menü) platform tarafından çevrilir; onları
102
+ sözlüğe yazmanız gerekmez.
103
+
104
+ ### CLI dili
105
+
106
+ Çıktı Türkçe ya da İngilizcedir. Dil sırasıyla `--lang` seçeneğinden, `UVAKO_LANG` ortam değişkeninden
107
+ ve sistemin dilinden okunur: `uvako theme check --lang en`. İngilizce çalışırken `theme init` iskeleti
108
+ (README, SCSS açıklamaları) İngilizce yazar ve Türkçe karşılığı `locales/tr.json` dosyasına koyar.
109
+
110
+ ### Ürün sayfası sekmeleri
111
+
112
+ Ürün detay sayfasındaki sekmeler `config/settings_data.json` içindeki `product_detail_page_tabs` ile açılır
113
+ (`1` açık, `0` kapalı). Sekme başlıkları ilgili `tab_*` ayarlarıyla değişir.
114
+
115
+ | `product_detail_page_tabs` anahtarı | Sekme | Başlık ayarı |
116
+ |---|---|---|
117
+ | (her zaman açık) | Ürün Bilgisi | `tab_product_info` |
118
+ | `display_product_comments` | Yorumlar | `tab_product_comments` |
119
+ | `display_product_questions` | Soru & Cevap | `tab_product_questions` |
120
+ | `display_payment_options` | Taksit Seçenekleri (sanal pos oranlarıyla, yoksa elle girilen planlarla) | `tab_product_payment_options` |
121
+ | `display_product_feeds` | Önerileriniz (geri bildirim formu) | `tab_product_feeds` |
122
+ | `display_shopping_experiences` | Alışveriş Deneyimi | `tab_shopping_experiences` |
123
+
124
+ Taksit sekmesi mağazada satış kapalıysa (fiyatı gizli, WhatsApp satışı) görünmez.
125
+
126
+ `uvako theme check` bu ayarı denetler: bilinmeyen sekme anahtarı uyarı, 1/0 dışı değer ve metin olmayan başlık hata verir.
127
+
128
+ ## Yayınlama
129
+
130
+ - `push` ile yüklenen tema **yalnızca kendi mağazanızda** görünür.
131
+ - `submit` temayı Uvako incelemesine gönderir. Onaylanan sürüm themes.uvako.com'da listelenir ve diğer
132
+ mağazalar kurabilir. Fiyatı (`theme.json` içindeki `price` öneridir) Uvako onaylar.
133
+ - Onaydan sonra yüklediğiniz yeni sürümler yeniden onaylanana kadar yalnızca kendi mağazanızı etkiler.
134
+
135
+ ## Güvenlik kuralları
136
+
137
+ Mağaza, yüklenen paketi aynı kurallarla **kendisi yeniden denetler**; `check` hatayı önceden görmeniz içindir.
138
+
139
+ - Yalnızca yukarıdaki dosyalar kabul edilir: JSON, SCSS, görsel ve yazı tipi. JavaScript, şablon ve
140
+ çalıştırılabilir dosyalar reddedilir.
141
+ - `<script>`, `javascript:` adresleri, `onclick` gibi olay öznitelikleri, `<iframe>` (SVG ve ayar metinleri dahil).
142
+ - Kod çalıştıran CSS (`expression`, `behavior`, `-moz-binding`).
143
+ - SCSS içinde döngü, fonksiyon ve mixin tanımı (`@while`, `@for`, `@each`, `@function`, `@mixin`, `@use`).
144
+ Temel temanın mixin'leri `@include` ile kullanılabilir.
145
+ - Paketin kendi dosyaları dışındaki `@import`'lar ve yazı tipi sağlayıcıları dışındaki adresler.
146
+ - Sembolik bağlar, gizli dosyalar, 5 MB'tan büyük dosyalar, 60 MB'tan büyük ya da 600 dosyadan fazla paketler.
147
+ - Gizli anahtar ya da parola gibi görünen değerler.
148
+
149
+ Erişim anahtarı yalnızca tema işlemlerine yetkilidir; sipariş, müşteri ve ayarlara erişemez. Bilgisayarınızda
150
+ kullanıcı klasörünüzde saklanır, tema klasörüne yazılmaz, yalnızca giriş yaptığınız mağazaya ve yalnızca
151
+ https üzerinden gönderilir. Kaybederseniz panelden iptal edin.
152
+
153
+ Araç platformun kaynak kodunu içermez.
154
+
155
+ ## Uvako
156
+
157
+ [uvako.com](https://uvako.com)
158
+
159
+ Uvako, işletmelerin kendi alan adıyla online mağaza kurmasını sağlayan e-ticaret altyapısıdır. Ürün, sipariş, ödeme, kargo, kampanya ve tema yönetimi tek panelde toplanır.
160
+
161
+ ## Rox Software · Rox Group
162
+
163
+ Bu paket **Rox Software** tarafından geliştirilir ve yayınlanır.
164
+
165
+ Rox Software; kurumsal web, e-ticaret, özel yazılım ve kendi ürün platformlarını (RoxB2B, RoxETS, Uvako) geliştiren Ankara merkezli yazılım ekibidir.
166
+
167
+ **Rox Group Yazılım Havacılık Uzay ve Savunma Sanayi Limited Şirketi**
168
+ İvedikköy Mahallesi 1493. Sokak No:5 Daire:22
169
+ 06378 Yenimahalle / Ankara
170
+
171
+ - Site: [roxsoftware.net](https://www.roxsoftware.net/)
172
+ - Uvako: [uvako.com](https://uvako.com)
173
+ - E-posta: info@roxsoftware.net
174
+
175
+ Tüm hakları saklıdır. © Rox Group
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "uvako-cli",
3
- "version": "0.2.1",
3
+ "version": "0.4.0",
4
4
  "description": "Uvako tema geliştirme aracı. Tema başlatır, denetler, mağazaya yükler ve canlı önizletir. https://uvako.com",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",
package/src/api.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { t } from "./i18n.js";
1
2
  // Mağazanın tema uç noktası (/api/theme-cli). Erişim anahtarı yalnızca girişte seçilen mağazaya
2
3
  // gönderilir: yönlendirmeler izlenmez, böylece anahtar başka bir adrese taşınmaz.
3
4
 
@@ -21,7 +22,7 @@ export async function call({ origin, token }, method, route, { body, raw = false
21
22
  signal: AbortSignal.timeout(timeout),
22
23
  });
23
24
  } catch (error) {
24
- throw new ApiError(`Mağazaya bağlanılamadı (${origin}): ${error.cause?.code ?? error.message}`);
25
+ throw new ApiError(t("Mağazaya bağlanılamadı ({0}): {1}", origin, error.cause?.code ?? error.message));
25
26
  }
26
27
  if (response.ok) return raw ? Buffer.from(await response.arrayBuffer()) : response.json();
27
28
  let payload = null;
@@ -31,7 +32,7 @@ export async function call({ origin, token }, method, route, { body, raw = false
31
32
  // JSON olmayan yanıt (ör. ağ geçidi hatası).
32
33
  }
33
34
  const problem = payload?.error ?? {};
34
- const fallback = response.status === 404 ? "Bu adreste Uvako tema uç noktası yok. Mağaza adresini kontrol edin." : `Sunucu ${response.status} yanıtı verdi.`;
35
+ const fallback = response.status === 404 ? t("Bu adreste Uvako tema uç noktası yok. Mağaza adresini kontrol edin.") : t("Sunucu {0} yanıtı verdi.", response.status);
35
36
  throw new ApiError(problem.message || fallback, { status: response.status, code: problem.code || "", problems: Array.isArray(problem.problems) ? problem.problems : [] });
36
37
  }
37
38
 
@@ -41,9 +42,9 @@ export async function starter(site, base) {
41
42
  try {
42
43
  response = await fetch(`${site}/api/site/themes/${encodeURIComponent(base)}/starter`, { headers: { Accept: "application/json", "User-Agent": "uvako-cli" }, signal: AbortSignal.timeout(30000) });
43
44
  } catch (error) {
44
- throw new ApiError(`uvako.com'a bağlanılamadı: ${error.cause?.code ?? error.message}`);
45
+ throw new ApiError(t("uvako.com'a bağlanılamadı: {0}", error.cause?.code ?? error.message));
45
46
  }
46
- if (response.status === 404) throw new ApiError(`"${base}" adında bir temel tema yok. Temalar: https://themes.uvako.com`, { status: 404 });
47
- if (!response.ok) throw new ApiError(`Temel tema okunamadı (${response.status}).`, { status: response.status });
47
+ if (response.status === 404) throw new ApiError(t("\"{0}\" adında bir temel tema yok. Temalar: https://themes.uvako.com", base), { status: 404 });
48
+ if (!response.ok) throw new ApiError(t("Temel tema okunamadı ({0}).", response.status), { status: response.status });
48
49
  return response.json();
49
50
  }