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 +175 -125
- package/package.json +1 -1
- package/src/api.js +6 -5
- package/src/check.js +155 -63
- package/src/config.js +6 -5
- package/src/i18n.js +67 -0
- package/src/init.js +74 -17
- package/src/locales/en.js +226 -0
- package/src/main.js +15 -10
- package/src/package.js +3 -2
- package/src/remote.js +51 -50
- package/src/zip.js +5 -4
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
|
-
|
|
70
|
-
styles/
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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
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(
|
|
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." :
|
|
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(
|
|
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(
|
|
47
|
-
if (!response.ok) throw new ApiError(
|
|
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
|
}
|