uvako-cli 0.2.0 → 0.2.1

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
@@ -45,7 +45,7 @@ paneline giriş yapmış olmanız gerekir. Tema, panelden yayınlanana kadar vit
45
45
  | `uvako logout` · `uvako whoami` | Kayıtlı girişi siler · bağlı mağazayı gösterir. |
46
46
  | `uvako theme init <anahtar>` | Yeni tema iskeleti (`--base`, `--name`, `--author`). |
47
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. |
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
49
  | `uvako theme push [klasör]` | Temayı mağazanın tema kütüphanesine yükler. |
50
50
  | `uvako theme pull <anahtar>` | Yüklediğiniz temayı indirir (`--dir`, `--force`). |
51
51
  | `uvako theme list` | Mağazadaki temaları ve yüklediğiniz paketleri listeler. |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "uvako-cli",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
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/main.js CHANGED
@@ -23,6 +23,7 @@ Tema:
23
23
  Bir katalog temasını temel alan yeni tema iskeleti
24
24
  uvako theme check [klasör] Temayı denetler (yapı, ayarlar, güvenlik)
25
25
  uvako theme dev [klasör] Canlı geliştirme: kaydettikçe mağazaya yükler, önizleme yenilenir
26
+ Durdurunca mağaza eski hâline döner (--keep: kütüphanede bırak)
26
27
  uvako theme push [klasör] Temayı mağazanın tema kütüphanesine yükler
27
28
  uvako theme pull <anahtar> [--dir klasör] Yüklediğiniz temayı indirir
28
29
  uvako theme list Mağazadaki temaları ve yüklediğiniz paketleri listeler
package/src/remote.js CHANGED
@@ -1,4 +1,4 @@
1
- import { existsSync, mkdirSync, watch, writeFileSync } from "node:fs";
1
+ import { existsSync, mkdirSync, readFileSync, watch, writeFileSync } from "node:fs";
2
2
  import path from "node:path";
3
3
  import { ApiError, call } from "./api.js";
4
4
  import { printReport } from "./check.js";
@@ -152,11 +152,23 @@ export async function dev(target, options) {
152
152
  const dir = path.resolve(target ?? ".");
153
153
  let current;
154
154
  let first;
155
+ // Geliştirme bitince mağaza başladığı hâle döner: paket önceden yüklüyse o sürüm geri yüklenir,
156
+ // değilse geliştirme kopyası silinir. `--keep` son hâli kütüphanede bırakır.
157
+ let before = null;
158
+ let existed = false;
155
159
  try {
156
160
  current = session(typeof options.store === "string" ? options.store : "");
161
+ const key = String(JSON.parse(readFileSync(path.join(dir, "theme.json"), "utf8")).key ?? "");
162
+ if (!options.keep && key) {
163
+ const state = await call(current, "GET", "/themes");
164
+ existed = state.packages.some((pkg) => pkg.key === key);
165
+ if (existed) before = await call(current, "GET", `/themes/${encodeURIComponent(key)}/package`, { raw: true });
166
+ }
157
167
  first = await upload(current, dir);
158
168
  } catch (error) {
159
- return explain(error);
169
+ if (error instanceof ApiError) return explain(error);
170
+ console.error(`✖ ${error.message}`);
171
+ return 1;
160
172
  }
161
173
  if (!first) {
162
174
  console.error("Başlatılamadı: önce hataları düzeltin.");
@@ -166,6 +178,8 @@ export async function dev(target, options) {
166
178
  console.log(`Önizleme: ${previewUrl(current.origin, first.installationId)}`);
167
179
  console.log(`Düzenleme: ${editorUrl(current.origin, first.installationId)}`);
168
180
  console.log("Önizleme için tarayıcıda mağaza paneline giriş yapın. Dosyaları kaydettikçe sayfa yenilenir. Durdurmak için Ctrl+C.\n");
181
+ console.log(options.keep ? "Durdurduğunuzda tema son hâliyle kütüphanede kalır (--keep)." : existed ? "Durdurduğunuzda mağazadaki paket geliştirme öncesindeki sürümüne döner. Kalıcı yüklemek için: uvako theme push" : "Durdurduğunuzda geliştirme kopyası mağazadan silinir. Kalıcı yüklemek için: uvako theme push");
182
+ console.log("");
169
183
 
170
184
  let timer = null;
171
185
  let running = false;
@@ -204,10 +218,29 @@ export async function dev(target, options) {
204
218
  timer = setTimeout(() => void sync(), 300);
205
219
  });
206
220
  return new Promise((resolve) => {
207
- process.on("SIGINT", () => {
221
+ let stopping = false;
222
+ process.on("SIGINT", async () => {
223
+ if (stopping) return;
224
+ stopping = true;
208
225
  watcher.close();
209
- console.log("\nCanlı geliştirme durdu. Tema mağaza kütüphanesinde duruyor.");
210
- resolve(0);
226
+ clearTimeout(timer);
227
+ const key = first.package.key;
228
+ try {
229
+ if (options.keep) {
230
+ console.log("\nCanlı geliştirme durdu. Tema son hâliyle mağaza kütüphanesinde duruyor.");
231
+ } else if (before) {
232
+ await call(current, "PUT", "/themes", { body: before });
233
+ console.log("\nCanlı geliştirme durdu. Mağazadaki paket geliştirme öncesindeki sürümüne döndü.");
234
+ } else {
235
+ await call(current, "DELETE", `/themes/${encodeURIComponent(key)}`);
236
+ console.log("\nCanlı geliştirme durdu. Geliştirme kopyası mağazadan silindi; vitrin ve kütüphane eski hâlinde.");
237
+ }
238
+ resolve(0);
239
+ } catch (error) {
240
+ console.error(`\nCanlı geliştirme durdu ama mağaza eski hâline döndürülemedi: ${error.message}`);
241
+ console.error(`Elle kaldırmak için: uvako theme delete ${key} --yes`);
242
+ resolve(1);
243
+ }
211
244
  });
212
245
  });
213
246
  }