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.
- package/AGENTS.md +132 -132
- package/CHANGELOG.md +403 -383
- package/LICENSE +21 -21
- package/bin/jskelet.mjs +103 -103
- package/docs/01-baslangic.md +285 -285
- package/docs/02-mimari.md +293 -287
- package/docs/03-routing.md +486 -480
- package/docs/04-render-ve-sablonlar.md +490 -490
- package/docs/05-islands.md +482 -482
- package/docs/06-cache.md +1231 -1209
- package/docs/07-yapilandirma.md +44 -21
- package/docs/08-build.md +366 -366
- package/docs/09-dev-araclari.md +335 -335
- package/docs/10-dagitim.md +329 -329
- package/docs/11-tasima.md +1 -0
- 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 +311 -305
- package/docs/en/03-routing.md +503 -497
- package/docs/en/04-rendering.md +504 -504
- package/docs/en/05-islands.md +492 -492
- package/docs/en/06-caching.md +1197 -1198
- package/docs/en/07-configuration.md +1009 -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 +360 -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 → admin}/i18n.js +756 -670
- package/src/client/{cache-panel → admin}/login.html +74 -74
- package/src/client/{cache-panel → admin}/panel.css +804 -756
- package/src/client/admin/panel.html +486 -0
- package/src/client/{cache-panel → admin}/panel.js +1242 -915
- 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/defaults.js +16 -7
- package/src/config/index.js +38 -22
- 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/log.mjs +58 -0
- package/src/runtime/alias-hooks.mjs +119 -119
- package/src/runtime/register.mjs +4 -4
- package/src/server/admin/actions.js +229 -0
- package/src/server/admin/auth.js +125 -0
- package/src/server/admin/event-log.js +151 -0
- package/src/server/admin/gate.js +209 -0
- package/src/server/admin/inventory.js +188 -0
- package/src/server/admin/mount.js +56 -0
- package/src/server/admin/router.js +216 -0
- package/src/server/admin/snapshot.js +126 -0
- package/src/server/assets.js +147 -147
- package/src/server/cache-deps.js +42 -42
- package/src/server/cloudflare.js +607 -607
- package/src/server/create-app.js +295 -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/trailing-slash.js +53 -0
- 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/src/client/cache-panel/panel.html +0 -308
- package/src/server/cache-panel.js +0 -759
package/docs/07-yapilandirma.md
CHANGED
|
@@ -53,6 +53,7 @@ export default {
|
|
|
53
53
|
|
|
54
54
|
layout: "views/layout.ejs",
|
|
55
55
|
routes: ["./routes/10-pages.mjs", "./routes/99-catch-all.mjs"],
|
|
56
|
+
trailingSlash: false,
|
|
56
57
|
|
|
57
58
|
static: {
|
|
58
59
|
extensions: [".svg", ".png", ".webp", ".avif", ".ico", ".woff2"],
|
|
@@ -214,6 +215,29 @@ Ayrıntı: [03-routing.md](./03-routing.md).
|
|
|
214
215
|
routes: ["./routes/api.js", "./routes/pages.js", "./routes/catch-all.js"]
|
|
215
216
|
```
|
|
216
217
|
|
|
218
|
+
## `trailingSlash`
|
|
219
|
+
|
|
220
|
+
**Tip:** `boolean` — **Varsayılan:** `false`
|
|
221
|
+
|
|
222
|
+
`true` iken kanonik URL'ler `/` ile biter: `/hakkinda/` doğrudan **200**
|
|
223
|
+
döner; slash'sız `/hakkinda` **308** ile `/hakkinda/` adresine gider (301
|
|
224
|
+
değil — metodu koruyan kalıcı yönlendirme, framework'ün diğer `permanent`
|
|
225
|
+
redirect'leriyle aynı). Query string korunur.
|
|
226
|
+
|
|
227
|
+
İstisnalar: kök `/`, uzantılı dosya yolları (`/robots.txt`, `/assets/app.js`)
|
|
228
|
+
ve `/.well-known/**`. Bunlara slash eklenmez.
|
|
229
|
+
|
|
230
|
+
`false` iken (varsayılan) slash dayatılmaz. Express non-strict eşleşme ile
|
|
231
|
+
`/x` ve `/x/` ikisi de 200 olabilir — Next.js'in varsayılan "slash'ı kırp"
|
|
232
|
+
davranışından bilinçli fark; mevcut siteleri kırmamak için.
|
|
233
|
+
|
|
234
|
+
Açıkken şablonlardaki `href`, sitemap ve `redirects()` hedeflerini de
|
|
235
|
+
slash'lı yazın; aksi hâlde tarayıcı her tıklamada ekstra bir 308 görür.
|
|
236
|
+
|
|
237
|
+
```js
|
|
238
|
+
trailingSlash: true
|
|
239
|
+
```
|
|
240
|
+
|
|
217
241
|
## `static`
|
|
218
242
|
|
|
219
243
|
**Tip:** `{ extensions?: string[], prefixes?: string[] }` — **Varsayılan:**
|
|
@@ -728,33 +752,38 @@ redis: {
|
|
|
728
752
|
}
|
|
729
753
|
```
|
|
730
754
|
|
|
731
|
-
### `
|
|
755
|
+
### `admin()`
|
|
732
756
|
|
|
733
|
-
|
|
734
|
-
|
|
757
|
+
Framework yönetim paneli (`/_jskelet/admin`). Bellek içi / Redis / Cloudflare
|
|
758
|
+
önbelleğini yönetir; route ve view envanteri ile canlı log kuyruğu sunar.
|
|
735
759
|
|
|
736
760
|
Ortama bakmaz: `enabled` verilmedikçe **hiç mount edilmez** ve yol da yoktur.
|
|
737
761
|
Açıkken production'da da çalışır — asıl sorular ("bu sayfa neden bayat",
|
|
738
|
-
"webhook purge'ü geçti mi") orada soruluyor.
|
|
762
|
+
"webhook purge'ü geçti mi") orada soruluyor. `cache()` bölümünden ayrıdır.
|
|
739
763
|
|
|
740
764
|
| Alan | Tip | Varsayılan | Anlamı |
|
|
741
765
|
| --- | --- | --- | --- |
|
|
742
|
-
| `enabled` | `boolean` | `false` | Yalnızca açıkça `true` verildiğinde açılır (`
|
|
743
|
-
| `basePath` | `string` | `"/_jskelet/
|
|
766
|
+
| `enabled` | `boolean` | `false` | Yalnızca açıkça `true` verildiğinde açılır (`JSKELET_ADMIN` ezer) |
|
|
767
|
+
| `basePath` | `string` | `"/_jskelet/admin"` | Panelin kökü |
|
|
768
|
+
| `allowIps` | `string[]` | `[]` | Exact IP veya CIDR; boş = kısıt yok. Listede olmayan her istek 404 |
|
|
769
|
+
| `blockBots` | `boolean` | `true` | Bilinen crawler UA'ları 404 |
|
|
744
770
|
| `banAttempts` | `number` | `3` | Kaç başarısız denemeden sonra IP yasaklanır |
|
|
745
771
|
| `banHours` | `number` | `24` | Yasağın süresi |
|
|
746
772
|
| `sessionHours` | `number` | `12` | Oturum çerezinin ömrü |
|
|
773
|
+
| `logSize` | `number` | `500` | Canlı log ring boyutu |
|
|
747
774
|
|
|
748
|
-
Şifre **her süreç başlangıcında** üretilir ve yalnızca sunucu
|
|
775
|
+
Şifre **her süreç başlangıcında** üretilir ve yalnızca sunucu logundaki
|
|
776
|
+
`ADMIN` kutusunda görünür. Yasaklı ve yetkisiz her cevap `404`'tür. Kullanım
|
|
777
|
+
ve ekran ayrıntıları: [06-cache.md](./06-cache.md).
|
|
749
778
|
|
|
779
|
+
```js
|
|
780
|
+
admin() {
|
|
781
|
+
return {
|
|
782
|
+
enabled: process.env.JSKELET_ADMIN === "1",
|
|
783
|
+
allowIps: ["203.0.113.10", "10.0.0.0/8"],
|
|
784
|
+
};
|
|
785
|
+
}
|
|
750
786
|
```
|
|
751
|
-
[cache-panel] http://localhost:3000/_jskelet/cache — password for this run: 3f9c…
|
|
752
|
-
```
|
|
753
|
-
|
|
754
|
-
Kalıcı bir sır (config alanı ya da env) tutulmaz; sızması önbelleği boşaltma
|
|
755
|
-
yetkisi demek ve her deploy eski erişimi kendiliğinden iptal etmeli. Yasaklı ve
|
|
756
|
-
yetkisiz her cevap `404`'tür. Kullanım ve ekran ayrıntıları:
|
|
757
|
-
[06-cache.md](./06-cache.md).
|
|
758
787
|
|
|
759
788
|
### `cache().cloudflare`
|
|
760
789
|
|
|
@@ -780,12 +809,6 @@ hata dönerse ilgili bölüm hatayı yazar ve panelin kalanı çalışmaya devam
|
|
|
780
809
|
Neyin sorulabildiği — özellikle "bu sayfa kaç edge'de cache'li" sorusunun neden
|
|
781
810
|
tam cevabı olmadığı — [06-cache.md](./06-cache.md) içinde.
|
|
782
811
|
|
|
783
|
-
```js
|
|
784
|
-
panel: {
|
|
785
|
-
enabled: process.env.CACHE_PANEL === "1",
|
|
786
|
-
}
|
|
787
|
-
```
|
|
788
|
-
|
|
789
812
|
### `cache().prewarm`
|
|
790
813
|
|
|
791
814
|
| Alan | Tip | Varsayılan | Anlamı |
|
|
@@ -909,7 +932,7 @@ basılmaz.
|
|
|
909
932
|
| `HOST` | `startServer` | `::` | Bağlanılacak arayüz. Varsayılan çift yığın dinler (IPv6 + IPv4); IPv6 yoksa `0.0.0.0`'a düşer |
|
|
910
933
|
| `JSKELET_SECRET` | `jskelet/cookies` | — | İmzalı cookie sırrı. `security.cookieSecret` verilmediğinde buradan okunur; ikisi de yoksa imzalı cookie API'si hata verir. [12](./12-panel-ve-oturum.md) |
|
|
911
934
|
| `DEV_TOKEN` | `devGate`, `prewarm` | — | Ayarlıysa token taşımayan her isteğe 404 döner. Isıtma token'ı çerez olarak taşır. [09](./09-dev-araclari.md) |
|
|
912
|
-
| `
|
|
935
|
+
| `JSKELET_ADMIN` | `createApp` | — | Ayarlıysa yönetim panelini açar; `0` config'te açık olan paneli kapatır. Env config'i ezer, çünkü panel genelde bir arıza sırasında tek seferlik açılır. [06](./06-cache.md) |
|
|
913
936
|
| `JSKELET_CLOUDFLARE_KEY` | Cloudflare cache yüzeyi | — | API token. Verilene kadar CDN purge'ü ve edge analitiği kapalıdır; config'teki `apiToken`'ı ezer. Token hiçbir cevapta dönmez. [06](./06-cache.md) |
|
|
914
937
|
| `JSKELET_CLOUDFLARE_ZONE_ID` | Cloudflare cache yüzeyi | — | Zone kimliği. Token'la birlikte verilmedikçe hiçbir Cloudflare ucu çağrılmaz |
|
|
915
938
|
| `JSKELET_CLOUDFLARE_HOSTNAME` | Cloudflare cache yüzeyi | — | Purge URL'lerinin kökü. Panel iç bir adresten açılıyorsa gerekir |
|