jskelet 0.2.3 → 0.2.5
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/AGENTS.md +132 -132
- package/CHANGELOG.md +15 -0
- package/LICENSE +21 -21
- package/bin/jskelet.mjs +103 -103
- package/docs/01-baslangic.md +285 -285
- package/docs/02-mimari.md +287 -287
- package/docs/03-routing.md +480 -480
- package/docs/04-render-ve-sablonlar.md +490 -490
- package/docs/05-islands.md +482 -482
- package/docs/06-cache.md +1209 -1202
- package/docs/08-build.md +366 -366
- package/docs/09-dev-araclari.md +335 -335
- package/docs/10-dagitim.md +329 -329
- package/docs/12-panel-ve-oturum.md +384 -384
- package/docs/README.md +105 -105
- package/docs/en/01-getting-started.md +292 -292
- package/docs/en/02-architecture.md +305 -305
- package/docs/en/03-routing.md +497 -497
- package/docs/en/04-rendering.md +504 -504
- package/docs/en/05-islands.md +492 -492
- package/docs/en/06-caching.md +1239 -1232
- package/docs/en/07-configuration.md +986 -986
- package/docs/en/08-build.md +383 -383
- package/docs/en/09-dev-tools.md +342 -342
- package/docs/en/10-deployment.md +332 -332
- package/docs/en/11-migration.md +359 -359
- package/docs/en/12-dashboards-and-sessions.md +392 -392
- package/docs/en/README.md +112 -112
- package/package.json +102 -102
- package/src/build/ensure-build.mjs +15 -15
- package/src/build/paths.mjs +143 -143
- package/src/build/resolve-peer.mjs +36 -36
- package/src/build/tasks/client.mjs +268 -268
- package/src/build/tasks/css.mjs +124 -124
- package/src/build/tasks/fonts.mjs +146 -146
- package/src/build/tasks/icons.mjs +224 -224
- package/src/build/tasks/images.mjs +244 -244
- package/src/build/tasks/precompress.mjs +78 -78
- package/src/client/cache-panel/i18n.js +670 -0
- package/src/client/cache-panel/login.html +74 -71
- package/src/client/cache-panel/panel.css +756 -740
- package/src/client/cache-panel/panel.html +308 -307
- package/src/client/cache-panel/panel.js +915 -808
- package/src/client/devtools/report.html +185 -185
- package/src/client/devtools/report.js +725 -725
- package/src/client/dom.js +95 -95
- package/src/client/form.js +192 -192
- package/src/client/index.js +35 -35
- package/src/client/registry.js +297 -297
- package/src/client/safe-image.js +91 -91
- package/src/client/store.js +36 -36
- package/src/client/swap.js +188 -188
- package/src/config/pattern.js +107 -107
- package/src/http/control-flow.js +71 -71
- package/src/http/cookies.js +257 -257
- package/src/http/request-cache.js +46 -46
- package/src/http/request-context.js +162 -162
- package/src/index.js +83 -83
- package/src/init.mjs +221 -221
- package/src/runtime/alias-hooks.mjs +119 -119
- package/src/runtime/register.mjs +4 -4
- package/src/server/assets.js +147 -147
- package/src/server/cache-deps.js +42 -42
- package/src/server/cache-panel.js +759 -738
- package/src/server/cloudflare.js +607 -595
- package/src/server/create-app.js +291 -291
- package/src/server/data-cache.js +462 -462
- package/src/server/dev/report.js +369 -369
- package/src/server/dev/socket.js +170 -170
- package/src/server/dev/version-check.mjs +139 -139
- package/src/server/html-cache.js +817 -817
- package/src/server/metadata.js +102 -102
- package/src/server/middleware/compression.js +205 -205
- package/src/server/middleware/csrf.js +134 -134
- package/src/server/middleware/dev-gate.js +62 -62
- package/src/server/middleware/headers.js +37 -37
- package/src/server/middleware/redirects.js +32 -32
- package/src/server/middleware/static-precompressed.js +100 -100
- package/src/server/middleware/upstream-proxy.js +141 -141
- package/src/server/prewarm.js +601 -601
- package/src/server/redis.js +569 -569
- package/src/server/router.js +128 -128
- package/src/server/status-page.js +164 -164
- package/src/server/upstream-limiter.js +376 -376
- package/src/server/upstream-tracking.js +166 -166
- package/src/start.mjs +7 -7
- package/src/templates/layout.ejs +44 -44
- package/src/version.mjs +31 -31
- package/src/views/components/loader.js +85 -85
- package/src/views/helpers/html.js +102 -102
- package/src/views/helpers/tags.js +245 -245
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.
|