jskelet 0.2.5 → 0.3.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.
Files changed (106) hide show
  1. package/AGENTS.md +132 -132
  2. package/CHANGELOG.md +403 -383
  3. package/LICENSE +21 -21
  4. package/bin/jskelet.mjs +103 -103
  5. package/docs/01-baslangic.md +285 -285
  6. package/docs/02-mimari.md +293 -287
  7. package/docs/03-routing.md +486 -480
  8. package/docs/04-render-ve-sablonlar.md +490 -490
  9. package/docs/05-islands.md +482 -482
  10. package/docs/06-cache.md +1231 -1209
  11. package/docs/07-yapilandirma.md +44 -21
  12. package/docs/08-build.md +366 -366
  13. package/docs/09-dev-araclari.md +335 -335
  14. package/docs/10-dagitim.md +329 -329
  15. package/docs/11-tasima.md +1 -0
  16. package/docs/12-panel-ve-oturum.md +384 -384
  17. package/docs/README.md +105 -105
  18. package/docs/en/01-getting-started.md +292 -292
  19. package/docs/en/02-architecture.md +311 -305
  20. package/docs/en/03-routing.md +503 -497
  21. package/docs/en/04-rendering.md +504 -504
  22. package/docs/en/05-islands.md +492 -492
  23. package/docs/en/06-caching.md +1197 -1198
  24. package/docs/en/07-configuration.md +1009 -986
  25. package/docs/en/08-build.md +383 -383
  26. package/docs/en/09-dev-tools.md +342 -342
  27. package/docs/en/10-deployment.md +332 -332
  28. package/docs/en/11-migration.md +360 -359
  29. package/docs/en/12-dashboards-and-sessions.md +392 -392
  30. package/docs/en/README.md +112 -112
  31. package/package.json +102 -102
  32. package/src/build/ensure-build.mjs +15 -15
  33. package/src/build/paths.mjs +143 -143
  34. package/src/build/resolve-peer.mjs +36 -36
  35. package/src/build/tasks/client.mjs +268 -268
  36. package/src/build/tasks/css.mjs +124 -124
  37. package/src/build/tasks/fonts.mjs +146 -146
  38. package/src/build/tasks/icons.mjs +224 -224
  39. package/src/build/tasks/images.mjs +244 -244
  40. package/src/build/tasks/precompress.mjs +78 -78
  41. package/src/client/{cache-panel → admin}/i18n.js +756 -670
  42. package/src/client/{cache-panel → admin}/login.html +74 -74
  43. package/src/client/{cache-panel → admin}/panel.css +804 -756
  44. package/src/client/admin/panel.html +486 -0
  45. package/src/client/{cache-panel → admin}/panel.js +1242 -915
  46. package/src/client/devtools/report.html +185 -185
  47. package/src/client/devtools/report.js +725 -725
  48. package/src/client/dom.js +95 -95
  49. package/src/client/form.js +192 -192
  50. package/src/client/index.js +35 -35
  51. package/src/client/registry.js +297 -297
  52. package/src/client/safe-image.js +91 -91
  53. package/src/client/store.js +36 -36
  54. package/src/client/swap.js +188 -188
  55. package/src/config/defaults.js +16 -7
  56. package/src/config/index.js +38 -22
  57. package/src/config/pattern.js +107 -107
  58. package/src/http/control-flow.js +71 -71
  59. package/src/http/cookies.js +257 -257
  60. package/src/http/request-cache.js +46 -46
  61. package/src/http/request-context.js +162 -162
  62. package/src/index.js +83 -83
  63. package/src/init.mjs +221 -221
  64. package/src/log.mjs +58 -0
  65. package/src/runtime/alias-hooks.mjs +119 -119
  66. package/src/runtime/register.mjs +4 -4
  67. package/src/server/admin/actions.js +229 -0
  68. package/src/server/admin/auth.js +125 -0
  69. package/src/server/admin/event-log.js +151 -0
  70. package/src/server/admin/gate.js +209 -0
  71. package/src/server/admin/inventory.js +188 -0
  72. package/src/server/admin/mount.js +56 -0
  73. package/src/server/admin/router.js +216 -0
  74. package/src/server/admin/snapshot.js +126 -0
  75. package/src/server/assets.js +147 -147
  76. package/src/server/cache-deps.js +42 -42
  77. package/src/server/cloudflare.js +607 -607
  78. package/src/server/create-app.js +295 -291
  79. package/src/server/data-cache.js +462 -462
  80. package/src/server/dev/report.js +369 -369
  81. package/src/server/dev/socket.js +170 -170
  82. package/src/server/dev/version-check.mjs +139 -139
  83. package/src/server/html-cache.js +817 -817
  84. package/src/server/metadata.js +102 -102
  85. package/src/server/middleware/compression.js +205 -205
  86. package/src/server/middleware/csrf.js +134 -134
  87. package/src/server/middleware/dev-gate.js +62 -62
  88. package/src/server/middleware/headers.js +37 -37
  89. package/src/server/middleware/redirects.js +32 -32
  90. package/src/server/middleware/static-precompressed.js +100 -100
  91. package/src/server/middleware/trailing-slash.js +53 -0
  92. package/src/server/middleware/upstream-proxy.js +141 -141
  93. package/src/server/prewarm.js +601 -601
  94. package/src/server/redis.js +569 -569
  95. package/src/server/router.js +128 -128
  96. package/src/server/status-page.js +164 -164
  97. package/src/server/upstream-limiter.js +376 -376
  98. package/src/server/upstream-tracking.js +166 -166
  99. package/src/start.mjs +7 -7
  100. package/src/templates/layout.ejs +44 -44
  101. package/src/version.mjs +31 -31
  102. package/src/views/components/loader.js +85 -85
  103. package/src/views/helpers/html.js +102 -102
  104. package/src/views/helpers/tags.js +245 -245
  105. package/src/client/cache-panel/panel.html +0 -308
  106. package/src/server/cache-panel.js +0 -759
package/docs/README.md CHANGED
@@ -1,105 +1,105 @@
1
- # JSkelet belgeleri
2
-
3
- JSkelet, SEO ve hız odaklı siteler için "framework'süz hissettiren" bir
4
- framework: Express 5 + EJS ile sunucuda tam HTML üretir, etkileşimi vanilla JS
5
- island'larla ekler, CSS'i Tailwind v4 ile tek bir stylesheet'e derler ve ISR
6
- yerine süreç belleğinde yaşayan, stale-while-revalidate'li bir HTML TTL cache
7
- kullanır. React yok, TypeScript yok; düz JavaScript ve JSDoc.
8
-
9
- Bu dizin framework'ün tam referansıdır. Sıralı okumak için baştan başlayın;
10
- belirli bir konuyu arıyorsanız doğrudan ilgili başlığa gidin.
11
-
12
- Aynı belgelerin İngilizcesi [`docs/en/`](./en/README.md) altında. İki sürüm elle
13
- eşlenik tutuluyor; birini değiştiriyorsan diğerini de değiştir.
14
-
15
- ## Sıralı okuma
16
-
17
- | Belge | Konu |
18
- | --- | --- |
19
- | [01-baslangic.md](./01-baslangic.md) | Kurulum, `jskelet init`, ilk route, ilk island, dizin yapısı, CLI komutları |
20
- | [02-mimari.md](./02-mimari.md) | Mimari kararlar ve gerekçeleri: island modeli, tam sunucu HTML'i, cache stratejisi, middleware sırası |
21
- | [03-routing.md](./03-routing.md) | Route modülü sözleşmesi, yükleme sırası, controller sözleşmesi, `ctx`, `notFound`/`redirect`, config redirects/rewrites |
22
- | [04-render-ve-sablonlar.md](./04-render-ve-sablonlar.md) | EJS layout, sayfalar, otomatik bileşen kaydı, `html`/`tags` yardımcıları, metadata → `<head>`, hook'lar |
23
- | [05-islands.md](./05-islands.md) | `data-island` sözleşmesi, hidrasyon stratejileri, `client/entries/*`, `createStore`, DOM yardımcıları, `startSafeImages` |
24
- | [06-cache.md](./06-cache.md) | `withHtmlCache`, `revalidate`, stale-while-revalidate, cache anahtarı, `X-JSkelet-Cache`, istek içi cache, degraded render, prewarm |
25
- | [07-yapilandirma.md](./07-yapilandirma.md) | `jskelet.config.mjs` tam referansı, `source` desen sözdizimi, ortam değişkenleri tablosu |
26
- | [08-build.md](./08-build.md) | Build hattı, manifest, hash'li varlıklar, CSS/Tailwind `@source`, fontlar, ikon sprite, görsel optimizasyonu, precompress |
27
- | [09-dev-araclari.md](./09-dev-araclari.md) | `jskelet dev` akışı, watch dizinleri, CSS hot-swap, devtools overlay (Alt+D), rapor sayfası, dev gate |
28
- | [10-dagitim.md](./10-dagitim.md) | Prod build + start, ortam değişkenleri, Docker, ters proxy, sağlık kontrolü |
29
- | [11-tasima.md](./11-tasima.md) | Next.js'ten taşıma: karşılık tablosu ve adım adım plan |
30
- | [12-panel-ve-oturum.md](./12-panel-ve-oturum.md) | Kişiye özel sayfalar: `private: true`, imzalı cookie oturumu, CSRF, `fragment()`, parça takası ve form döngüsü |
31
-
32
- ## Konuya göre hızlı erişim
33
-
34
- - **Bir sayfa nasıl eklenir?** → [03-routing.md](./03-routing.md) ve
35
- [04-render-ve-sablonlar.md](./04-render-ve-sablonlar.md)
36
- - **Bir butona tıklandığında bir şey olsun istiyorum** →
37
- [05-islands.md](./05-islands.md)
38
- - **Sayfa neden `MISS` dönüyor / neden eski veri görüyorum?** →
39
- [06-cache.md](./06-cache.md)
40
- - **Oturuma bağlı bir sayfa nasıl yazılır?** →
41
- [12-panel-ve-oturum.md](./12-panel-ve-oturum.md)
42
- - **Hangi config alanı ne yapıyor?** → [07-yapilandirma.md](./07-yapilandirma.md)
43
- - **Stil çıkmıyor / ikon görünmüyor** → [08-build.md](./08-build.md)
44
- - **Yayına alma** → [10-dagitim.md](./10-dagitim.md)
45
-
46
- ## Çalışan örnekler
47
-
48
- Dördü de çalışır durumda; belgelerdeki örneklerin çoğu buralardan alınmıştır.
49
-
50
- **`examples/minimal/`** — iki route, bir bileşen, bir island, minimal config.
51
- Framework'ün en küçük çalışan hâli.
52
-
53
- ```bash
54
- npm --prefix examples/minimal install
55
- npm --prefix examples/minimal run dev
56
- ```
57
-
58
- **`examples/blog/`** — dinamik route (`/blog/:slug`), etiket sayfaları,
59
- `redirects`/`rewrites`/`headers`/`cache` yapılandırmasının tamamı, fragment ile
60
- gelen sekme panelleri, form gönderimi, prewarm, `robots.txt`/`sitemap.xml`/`rss.xml`
61
- ve dört island (tema, sekme, arama, form).
62
-
63
- ```bash
64
- npm --prefix examples/blog install
65
- npm --prefix examples/blog run dev
66
- ```
67
-
68
- **`examples/marketing/`** — framework'ün kendi tanıtım sitesi: hero, kıyaslama
69
- tablosu, canlı gecikme ölçümü, SSS, belgeler dizini, sürüm notları ve indirme
70
- sayfası. Sayfadaki bayt sayıları `lib/payload.js` içinde sitenin **kendi** build
71
- çıktısından, sürüm künyesi ise `lib/release.js` içinde kurulu paketin
72
- `package.json`'ından okunur; gecikme sayıları `latency` island'ında tarayıcıda
73
- ölçülür. Uzun TTL (bir saat) ve tüm sayfaları ısıtan prewarm ile, cache'in en
74
- verimli çalıştığı profili gösterir.
75
-
76
- Site aynı zamanda **bu belgeleri** servis ediyor: `/docs/<bölüm>` adresleri
77
- `node_modules/jskelet/docs/` altındaki markdown dosyalarını okuyup sol gezinme,
78
- "bu sayfada" listesi ve sıralı geçişle basıyor. Çevirici `lib/markdown.js`
79
- içinde küçük bir modül — bağımlılık yok — ve kaynak paketin kendisi olduğu için
80
- site kurulu sürümden hiç ayrışmıyor.
81
-
82
- Site aynı zamanda **iki dilli**: varsayılan İngilizce kökte, Türkçe `/tr`
83
- altında ve route adları iki dilde de aynı. Framework'te i18n yok; dil
84
- çözümlemesi `lib/i18n.js` içinde uygulamanın kendi sözleşmesi olarak duruyor ve
85
- `hooks.layoutContext` ile bir sözlüğe bağlanıyor. Çok dilli bir siteyi bu
86
- yüzeyle nasıl kurabileceğinizi görmek için bakılacak yer burası.
87
-
88
- ```bash
89
- npm --prefix examples/marketing install
90
- npm --prefix examples/marketing run dev
91
- ```
92
-
93
- **`examples/dashboard/`** — diğer üçünün tersi eksen: kişiye özel sayfalar.
94
- İmzalı cookie ile giriş, `private: true` korumalı panel, sayfalı tablo
95
- fragment'i, CSRF'li mutasyon formu ve temizlik fonksiyonu döndüren bir island.
96
- Public bir tanıtım sayfası da var, böylece aynı uygulamada önbelleklenen ve
97
- `no-store` dönen iki yanıt yan yana görülüyor.
98
-
99
- ```bash
100
- npm --prefix examples/dashboard install
101
- npm --prefix examples/dashboard run dev
102
- ```
103
-
104
- Her dört örnekte `node smoke.mjs` sunucu ayaktayken uçların beklendiği gibi
105
- yanıt verdiğini doğrular.
1
+ # JSkelet belgeleri
2
+
3
+ JSkelet, SEO ve hız odaklı siteler için "framework'süz hissettiren" bir
4
+ framework: Express 5 + EJS ile sunucuda tam HTML üretir, etkileşimi vanilla JS
5
+ island'larla ekler, CSS'i Tailwind v4 ile tek bir stylesheet'e derler ve ISR
6
+ yerine süreç belleğinde yaşayan, stale-while-revalidate'li bir HTML TTL cache
7
+ kullanır. React yok, TypeScript yok; düz JavaScript ve JSDoc.
8
+
9
+ Bu dizin framework'ün tam referansıdır. Sıralı okumak için baştan başlayın;
10
+ belirli bir konuyu arıyorsanız doğrudan ilgili başlığa gidin.
11
+
12
+ Aynı belgelerin İngilizcesi [`docs/en/`](./en/README.md) altında. İki sürüm elle
13
+ eşlenik tutuluyor; birini değiştiriyorsan diğerini de değiştir.
14
+
15
+ ## Sıralı okuma
16
+
17
+ | Belge | Konu |
18
+ | --- | --- |
19
+ | [01-baslangic.md](./01-baslangic.md) | Kurulum, `jskelet init`, ilk route, ilk island, dizin yapısı, CLI komutları |
20
+ | [02-mimari.md](./02-mimari.md) | Mimari kararlar ve gerekçeleri: island modeli, tam sunucu HTML'i, cache stratejisi, middleware sırası |
21
+ | [03-routing.md](./03-routing.md) | Route modülü sözleşmesi, yükleme sırası, controller sözleşmesi, `ctx`, `notFound`/`redirect`, config redirects/rewrites |
22
+ | [04-render-ve-sablonlar.md](./04-render-ve-sablonlar.md) | EJS layout, sayfalar, otomatik bileşen kaydı, `html`/`tags` yardımcıları, metadata → `<head>`, hook'lar |
23
+ | [05-islands.md](./05-islands.md) | `data-island` sözleşmesi, hidrasyon stratejileri, `client/entries/*`, `createStore`, DOM yardımcıları, `startSafeImages` |
24
+ | [06-cache.md](./06-cache.md) | `withHtmlCache`, `revalidate`, stale-while-revalidate, cache anahtarı, `X-JSkelet-Cache`, istek içi cache, degraded render, prewarm |
25
+ | [07-yapilandirma.md](./07-yapilandirma.md) | `jskelet.config.mjs` tam referansı, `source` desen sözdizimi, ortam değişkenleri tablosu |
26
+ | [08-build.md](./08-build.md) | Build hattı, manifest, hash'li varlıklar, CSS/Tailwind `@source`, fontlar, ikon sprite, görsel optimizasyonu, precompress |
27
+ | [09-dev-araclari.md](./09-dev-araclari.md) | `jskelet dev` akışı, watch dizinleri, CSS hot-swap, devtools overlay (Alt+D), rapor sayfası, dev gate |
28
+ | [10-dagitim.md](./10-dagitim.md) | Prod build + start, ortam değişkenleri, Docker, ters proxy, sağlık kontrolü |
29
+ | [11-tasima.md](./11-tasima.md) | Next.js'ten taşıma: karşılık tablosu ve adım adım plan |
30
+ | [12-panel-ve-oturum.md](./12-panel-ve-oturum.md) | Kişiye özel sayfalar: `private: true`, imzalı cookie oturumu, CSRF, `fragment()`, parça takası ve form döngüsü |
31
+
32
+ ## Konuya göre hızlı erişim
33
+
34
+ - **Bir sayfa nasıl eklenir?** → [03-routing.md](./03-routing.md) ve
35
+ [04-render-ve-sablonlar.md](./04-render-ve-sablonlar.md)
36
+ - **Bir butona tıklandığında bir şey olsun istiyorum** →
37
+ [05-islands.md](./05-islands.md)
38
+ - **Sayfa neden `MISS` dönüyor / neden eski veri görüyorum?** →
39
+ [06-cache.md](./06-cache.md)
40
+ - **Oturuma bağlı bir sayfa nasıl yazılır?** →
41
+ [12-panel-ve-oturum.md](./12-panel-ve-oturum.md)
42
+ - **Hangi config alanı ne yapıyor?** → [07-yapilandirma.md](./07-yapilandirma.md)
43
+ - **Stil çıkmıyor / ikon görünmüyor** → [08-build.md](./08-build.md)
44
+ - **Yayına alma** → [10-dagitim.md](./10-dagitim.md)
45
+
46
+ ## Çalışan örnekler
47
+
48
+ Dördü de çalışır durumda; belgelerdeki örneklerin çoğu buralardan alınmıştır.
49
+
50
+ **`examples/minimal/`** — iki route, bir bileşen, bir island, minimal config.
51
+ Framework'ün en küçük çalışan hâli.
52
+
53
+ ```bash
54
+ npm --prefix examples/minimal install
55
+ npm --prefix examples/minimal run dev
56
+ ```
57
+
58
+ **`examples/blog/`** — dinamik route (`/blog/:slug`), etiket sayfaları,
59
+ `redirects`/`rewrites`/`headers`/`cache` yapılandırmasının tamamı, fragment ile
60
+ gelen sekme panelleri, form gönderimi, prewarm, `robots.txt`/`sitemap.xml`/`rss.xml`
61
+ ve dört island (tema, sekme, arama, form).
62
+
63
+ ```bash
64
+ npm --prefix examples/blog install
65
+ npm --prefix examples/blog run dev
66
+ ```
67
+
68
+ **`examples/marketing/`** — framework'ün kendi tanıtım sitesi: hero, kıyaslama
69
+ tablosu, canlı gecikme ölçümü, SSS, belgeler dizini, sürüm notları ve indirme
70
+ sayfası. Sayfadaki bayt sayıları `lib/payload.js` içinde sitenin **kendi** build
71
+ çıktısından, sürüm künyesi ise `lib/release.js` içinde kurulu paketin
72
+ `package.json`'ından okunur; gecikme sayıları `latency` island'ında tarayıcıda
73
+ ölçülür. Uzun TTL (bir saat) ve tüm sayfaları ısıtan prewarm ile, cache'in en
74
+ verimli çalıştığı profili gösterir.
75
+
76
+ Site aynı zamanda **bu belgeleri** servis ediyor: `/docs/<bölüm>` adresleri
77
+ `node_modules/jskelet/docs/` altındaki markdown dosyalarını okuyup sol gezinme,
78
+ "bu sayfada" listesi ve sıralı geçişle basıyor. Çevirici `lib/markdown.js`
79
+ içinde küçük bir modül — bağımlılık yok — ve kaynak paketin kendisi olduğu için
80
+ site kurulu sürümden hiç ayrışmıyor.
81
+
82
+ Site aynı zamanda **iki dilli**: varsayılan İngilizce kökte, Türkçe `/tr`
83
+ altında ve route adları iki dilde de aynı. Framework'te i18n yok; dil
84
+ çözümlemesi `lib/i18n.js` içinde uygulamanın kendi sözleşmesi olarak duruyor ve
85
+ `hooks.layoutContext` ile bir sözlüğe bağlanıyor. Çok dilli bir siteyi bu
86
+ yüzeyle nasıl kurabileceğinizi görmek için bakılacak yer burası.
87
+
88
+ ```bash
89
+ npm --prefix examples/marketing install
90
+ npm --prefix examples/marketing run dev
91
+ ```
92
+
93
+ **`examples/dashboard/`** — diğer üçünün tersi eksen: kişiye özel sayfalar.
94
+ İmzalı cookie ile giriş, `private: true` korumalı panel, sayfalı tablo
95
+ fragment'i, CSRF'li mutasyon formu ve temizlik fonksiyonu döndüren bir island.
96
+ Public bir tanıtım sayfası da var, böylece aynı uygulamada önbelleklenen ve
97
+ `no-store` dönen iki yanıt yan yana görülüyor.
98
+
99
+ ```bash
100
+ npm --prefix examples/dashboard install
101
+ npm --prefix examples/dashboard run dev
102
+ ```
103
+
104
+ Her dört örnekte `node smoke.mjs` sunucu ayaktayken uçların beklendiği gibi
105
+ yanıt verdiğini doğrular.