jskelet 0.6.2 → 0.6.3
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 +136 -136
- package/CHANGELOG.md +620 -596
- package/LICENSE +21 -21
- package/bin/jskelet.mjs +130 -130
- package/docs/01-baslangic.md +291 -291
- package/docs/02-mimari.md +310 -309
- package/docs/03-routing.md +515 -515
- package/docs/04-render-ve-sablonlar.md +661 -661
- package/docs/05-islands.md +486 -486
- package/docs/06-cache.md +1443 -1423
- package/docs/07-yapilandirma.md +12 -6
- package/docs/08-build.md +429 -428
- package/docs/09-dev-araclari.md +364 -364
- package/docs/10-dagitim.md +338 -338
- package/docs/12-panel-ve-oturum.md +478 -478
- package/docs/README.md +83 -83
- package/docs/en/01-getting-started.md +298 -298
- package/docs/en/02-architecture.md +329 -328
- package/docs/en/03-routing.md +531 -531
- package/docs/en/04-rendering.md +669 -669
- package/docs/en/05-islands.md +497 -497
- package/docs/en/06-caching.md +1453 -1431
- package/docs/en/07-configuration.md +1219 -1214
- package/docs/en/08-build.md +447 -446
- package/docs/en/09-dev-tools.md +373 -373
- package/docs/en/10-deployment.md +340 -340
- package/docs/en/11-migration.md +398 -398
- package/docs/en/12-dashboards-and-sessions.md +488 -488
- package/docs/en/README.md +87 -87
- package/package.json +137 -137
- package/src/build/ensure-build.mjs +19 -19
- package/src/build/paths.mjs +153 -153
- package/src/build/resolve-peer.mjs +36 -36
- package/src/build/tasks/client.mjs +349 -349
- package/src/build/tasks/css.mjs +235 -235
- package/src/build/tasks/fonts.mjs +146 -146
- package/src/build/tasks/icons.mjs +357 -357
- package/src/build/tasks/images.mjs +244 -244
- package/src/build/tasks/precompress.mjs +78 -78
- package/src/build/tasks/templates.mjs +20 -20
- package/src/client/admin/i18n.js +764 -764
- package/src/client/admin/login.html +74 -74
- package/src/client/admin/panel.css +809 -809
- package/src/client/admin/panel.html +495 -495
- package/src/client/admin/panel.js +1251 -1251
- package/src/client/devtools/report.html +185 -185
- package/src/client/devtools/report.js +745 -745
- package/src/client/devtools/seo.js +628 -628
- package/src/client/dom.js +95 -95
- package/src/client/form.js +192 -192
- package/src/client/index.js +45 -45
- package/src/client/registry.js +305 -305
- package/src/client/safe-image.js +91 -91
- package/src/client/shared-cookie.js +225 -225
- package/src/client/store.js +36 -36
- package/src/client/swap.js +188 -188
- package/src/compile/codegen.js +336 -336
- package/src/compile/compile-all.js +149 -149
- package/src/compile/errors.js +66 -66
- package/src/compile/expr.js +409 -409
- package/src/compile/index.js +17 -17
- package/src/compile/parse.js +541 -541
- package/src/compile/resolve.js +211 -211
- package/src/compile/scan-exports.js +51 -51
- package/src/config/defaults.js +17 -1
- package/src/config/index.js +13 -0
- package/src/config/pattern.js +107 -107
- package/src/generate.mjs +163 -163
- package/src/http/control-flow.js +71 -71
- package/src/http/cookies-entry.js +21 -21
- package/src/http/cookies.js +277 -277
- package/src/http/request-cache.js +46 -46
- package/src/http/request-context.js +165 -165
- package/src/http/shared-cookie.js +178 -178
- package/src/index.js +101 -101
- package/src/init.mjs +230 -230
- package/src/migrate/apply.mjs +262 -262
- package/src/migrate/babel.mjs +79 -79
- package/src/migrate/classify.mjs +155 -155
- package/src/migrate/config.mjs +126 -126
- package/src/migrate/fs-walk.mjs +191 -191
- package/src/migrate/parse.mjs +26 -26
- package/src/migrate/scan.mjs +177 -177
- package/src/migrate/transform/expr-source.mjs +168 -168
- package/src/migrate/transform/island.mjs +67 -67
- package/src/migrate/transform/jsx-to-component.mjs +302 -302
- package/src/migrate/transform/jsx-to-jsk.mjs +330 -330
- package/src/migrate/transform/page-split.mjs +435 -435
- package/src/migrate/write.mjs +81 -81
- package/src/migrate.mjs +171 -171
- package/src/runtime/alias-hooks.mjs +119 -119
- package/src/runtime/register.mjs +4 -4
- package/src/server/admin/actions.js +229 -229
- package/src/server/admin/auth.js +125 -125
- package/src/server/admin/event-log.js +151 -151
- package/src/server/admin/gate.js +209 -209
- package/src/server/admin/inventory.js +188 -188
- package/src/server/admin/mount.js +56 -56
- package/src/server/admin/router.js +216 -216
- package/src/server/admin/snapshot.js +241 -241
- package/src/server/assets.js +147 -147
- package/src/server/auth/handoff.js +309 -309
- package/src/server/cache-blob.js +70 -0
- package/src/server/cache-deps.js +42 -42
- package/src/server/cache-vary.js +113 -113
- package/src/server/cloudflare.js +607 -607
- package/src/server/create-app.js +366 -366
- package/src/server/data-cache.js +553 -462
- package/src/server/dev/report.js +485 -485
- package/src/server/dev/socket.js +170 -170
- package/src/server/dev/version-check.mjs +139 -139
- package/src/server/disk-cache.js +233 -0
- package/src/server/ejs-adapter.js +59 -59
- package/src/server/html-cache.js +1196 -1122
- package/src/server/image-optimizer.js +500 -407
- package/src/server/logs/access-middleware.js +66 -66
- package/src/server/logs/file-sink.js +193 -66
- package/src/server/logs/pipeline.js +165 -158
- package/src/server/logs/s3-put.js +214 -214
- package/src/server/logs/s3-sink.js +112 -112
- 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 +75 -75
- package/src/server/middleware/headers.js +37 -37
- package/src/server/middleware/redirects.js +32 -32
- package/src/server/middleware/robots-txt.js +341 -341
- package/src/server/middleware/static-precompressed.js +121 -100
- package/src/server/middleware/trailing-slash.js +53 -53
- package/src/server/middleware/upstream-proxy.js +141 -141
- package/src/server/og-image.js +356 -356
- package/src/server/port-guard.js +255 -255
- package/src/server/prewarm.js +1082 -1058
- package/src/server/redis.js +588 -569
- package/src/server/render.js +4 -4
- package/src/server/router.js +157 -157
- package/src/server/status-page.js +265 -265
- package/src/server/upstream-limiter.js +376 -376
- package/src/server/upstream-tracking.js +166 -166
- package/src/shared/cookie-domain.js +66 -66
- package/src/start.mjs +22 -22
- package/src/templates/layout.ejs +30 -30
- package/src/templates/layout.jsk +30 -30
- package/src/version.mjs +31 -31
- package/src/views/components/loader.js +101 -101
- package/src/views/helpers/html.js +102 -102
- package/src/views/helpers/tags.js +375 -375
- package/types/config/defaults.d.ts +15 -1
- package/types/config/index.d.ts +8 -0
- package/types/server/cache-blob.d.ts +13 -0
- package/types/server/data-cache.d.ts +9 -0
- package/types/server/disk-cache.d.ts +36 -0
- package/types/server/html-cache.d.ts +26 -3
- package/types/server/logs/file-sink.d.ts +16 -5
- package/types/server/redis.d.ts +2 -1
|
@@ -139,6 +139,17 @@ export declare const HTML_CACHE_MAX_ENTRIES_CEILING = 800;
|
|
|
139
139
|
* saklanmaz, yanıt yine gider.
|
|
140
140
|
*/
|
|
141
141
|
export declare const HTML_CACHE_BYTE_BUDGET: number;
|
|
142
|
+
/**
|
|
143
|
+
* Süreç içi veri önbelleğinin JSON bayt tavanı (64 MB). Sayı tavanı
|
|
144
|
+
* şişman gövdeleri tutmaz; config yükseltemez. Tek değer bütçeden büyükse
|
|
145
|
+
* saklanmaz, çağıran sonucu yine alır.
|
|
146
|
+
*/
|
|
147
|
+
export declare const DATA_CACHE_BYTE_BUDGET: number;
|
|
148
|
+
/**
|
|
149
|
+
* Uzak görsel disk önbelleğinin tavanı (256 MB). `.jskelet/image-cache/`
|
|
150
|
+
* bu boyutu aşınca en eski dosya düşer. Config yükseltemez.
|
|
151
|
+
*/
|
|
152
|
+
export declare const IMAGE_CACHE_BYTE_BUDGET: number;
|
|
142
153
|
/** `cache().data.maxEntries` için sert tavan. Uzun kuyruk burada durur, HTML'de değil. */
|
|
143
154
|
export declare const DATA_CACHE_MAX_ENTRIES_CEILING = 20000;
|
|
144
155
|
/**
|
|
@@ -262,7 +273,10 @@ export declare const DEFAULT_LOGS: {
|
|
|
262
273
|
enabled: boolean;
|
|
263
274
|
/** Proje köküne göre relative. */
|
|
264
275
|
dir: string;
|
|
265
|
-
/**
|
|
276
|
+
/**
|
|
277
|
+
* Artık kullanılmıyor. Parçalar en fazla 5 dakika durur; alan çözülen
|
|
278
|
+
* config'te durur ki eski okuyucular kırılmasın.
|
|
279
|
+
*/
|
|
266
280
|
rotate: "daily";
|
|
267
281
|
};
|
|
268
282
|
s3: {
|
package/types/config/index.d.ts
CHANGED
|
@@ -45,11 +45,19 @@ export type LogsConfig = {
|
|
|
45
45
|
* Sink'lere giden kayıt türleri.
|
|
46
46
|
*/
|
|
47
47
|
kinds: LogKind[];
|
|
48
|
+
/**
|
|
49
|
+
* `rotate` durur; dosya parçaları en fazla 5 dakika tutulur.
|
|
50
|
+
*/
|
|
48
51
|
file: {
|
|
49
52
|
enabled: boolean;
|
|
50
53
|
dir: string;
|
|
51
54
|
rotate: "daily";
|
|
52
55
|
};
|
|
56
|
+
/**
|
|
57
|
+
* Mühürlenen zstd parçasını uygulamanın seçtiği yere aktarır. Hata
|
|
58
|
+
* siteyi düşürmez.
|
|
59
|
+
*/
|
|
60
|
+
drainLog: import('../server/logs/file-sink.js').DrainLog | null;
|
|
53
61
|
s3: {
|
|
54
62
|
enabled: boolean;
|
|
55
63
|
bucket: string | null;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Küçük gövde düz `string` döner (çağıran senkron yazabilsin). Büyük gövde
|
|
3
|
+
* brotli bitince çözülen bir Promise.
|
|
4
|
+
*
|
|
5
|
+
* @param {unknown} value
|
|
6
|
+
* @returns {string | Buffer | Promise<string | Buffer> | null}
|
|
7
|
+
*/
|
|
8
|
+
export declare function encodeCacheValue(value: unknown): string | Buffer | Promise<string | Buffer> | null;
|
|
9
|
+
/**
|
|
10
|
+
* @param {Buffer | string} raw
|
|
11
|
+
* @returns {unknown}
|
|
12
|
+
*/
|
|
13
|
+
export declare function decodeCacheValue(raw: Buffer | string): unknown;
|
|
@@ -2,6 +2,7 @@ export type DataEntry = {
|
|
|
2
2
|
value: unknown;
|
|
3
3
|
expiresAt: number;
|
|
4
4
|
staleUntil: number;
|
|
5
|
+
bytes: number;
|
|
5
6
|
};
|
|
6
7
|
/**
|
|
7
8
|
* Süreç ömrü boyunca biriken sayaçlar.
|
|
@@ -90,6 +91,14 @@ export declare function clearDataCache(prefix?: string): number;
|
|
|
90
91
|
export declare function dropDataCacheKey(key: string): boolean;
|
|
91
92
|
/** @returns {number} */
|
|
92
93
|
export declare function getDataCacheSize(): number;
|
|
94
|
+
/**
|
|
95
|
+
* Bellek freninin bayt tavanını geçici olarak değiştirir. Testler LRU
|
|
96
|
+
* tahliyesini küçük bir değerle doğrular; `null` üretim tavanına döner.
|
|
97
|
+
*
|
|
98
|
+
* @param {number | null} bytes
|
|
99
|
+
* @returns {void}
|
|
100
|
+
*/
|
|
101
|
+
export declare function setDataCacheByteBudget(bytes: number | null): void;
|
|
93
102
|
/**
|
|
94
103
|
* Süreç başından beri biriken sayaçlar. `produced` kotaya yazılan tek sayıdır:
|
|
95
104
|
* geri kalan her şey upstream'e hiç gitmemiş bir okuma.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {string | null} root Mutlak dizin, ya da config yoluna dönmek için `null`.
|
|
3
|
+
*/
|
|
4
|
+
export declare function setDiskCacheRootForTests(root: string | null): void;
|
|
5
|
+
/**
|
|
6
|
+
* @param {"html" | "data"} kind
|
|
7
|
+
* @returns {boolean}
|
|
8
|
+
*/
|
|
9
|
+
export declare function diskShares(kind: "html" | "data"): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* @param {"html" | "data"} kind
|
|
12
|
+
* @param {string} key
|
|
13
|
+
* @returns {Promise<unknown | null>}
|
|
14
|
+
*/
|
|
15
|
+
export declare function diskGetJson(kind: "html" | "data", key: string): Promise<unknown | null>;
|
|
16
|
+
/**
|
|
17
|
+
* Ateşle-unut. Dönüş değeri testler bekleyebilsin diye durur; istek yolu
|
|
18
|
+
* beklemez.
|
|
19
|
+
*
|
|
20
|
+
* @param {"html" | "data"} kind
|
|
21
|
+
* @param {string} key
|
|
22
|
+
* @param {unknown} value
|
|
23
|
+
* @returns {Promise<void>}
|
|
24
|
+
*/
|
|
25
|
+
export declare function diskSetJson(kind: "html" | "data", key: string, value: unknown): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* @param {"html" | "data"} kind
|
|
28
|
+
* @param {string[]} keys
|
|
29
|
+
*/
|
|
30
|
+
export declare function diskDrop(kind: "html" | "data", keys: string[]): void;
|
|
31
|
+
/**
|
|
32
|
+
* @param {"html" | "data"} kind
|
|
33
|
+
* @param {(key: string) => boolean} [match] Verilmezse türün tamamı silinir.
|
|
34
|
+
* @returns {Promise<number>}
|
|
35
|
+
*/
|
|
36
|
+
export declare function diskDropMatching(kind: "html" | "data", match?: (key: string) => boolean): Promise<number>;
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
* (L1) **birincil kalır**: `read()` senkron, sıkıştırılmış gövdeler girdiyle
|
|
27
27
|
* birlikte ve tutarlılık makinesi (`tokens`, `purgedDeps`) tek proseste. Redis
|
|
28
28
|
* yalnızca L1'de bulunmayan bir yol için render'ı atlatır ve invalidation'ı
|
|
29
|
-
* diğer node'lara duyurur. Redis
|
|
30
|
-
*
|
|
29
|
+
* diğer node'lara duyurur. Redis yoksa aynı kayıt `.jskelet/cache/<buildId>/`
|
|
30
|
+
* altına yazılır; bu tek makinenin yeniden açılışını karşılar, kümeyi değil.
|
|
31
31
|
*/
|
|
32
32
|
export type HtmlEntry = {
|
|
33
33
|
html: string;
|
|
@@ -144,9 +144,10 @@ export declare function dropHtmlCacheKey(key: string): boolean;
|
|
|
144
144
|
* açılmaz.
|
|
145
145
|
*
|
|
146
146
|
* @param {string} [onlyHost]
|
|
147
|
-
* @returns {{ path: string, host: string }[]}
|
|
147
|
+
* @returns {{ key: string, path: string, host: string }[]}
|
|
148
148
|
*/
|
|
149
149
|
export declare function takeInvalidatedTargets(onlyHost?: string): {
|
|
150
|
+
key: string;
|
|
150
151
|
path: string;
|
|
151
152
|
host: string;
|
|
152
153
|
}[];
|
|
@@ -190,11 +191,33 @@ export declare function isHtmlCacheFresh(pathname: string, req?: {
|
|
|
190
191
|
headers?: Record<string, unknown>;
|
|
191
192
|
get?: (name: string) => string | undefined;
|
|
192
193
|
}): boolean;
|
|
194
|
+
/**
|
|
195
|
+
* Bu anahtarın girdisi hâlâ taze mi? Süre dolumu ısıtması anahtarı bildiği
|
|
196
|
+
* için yol taraması yapmaz. Soft-bayat (`expiresAt === 0`) taze sayılmaz:
|
|
197
|
+
* ziyaretçi arada yenilediyse yeni `expiresAt` taze döner ve HTTP atlanır.
|
|
198
|
+
*
|
|
199
|
+
* @param {string} key
|
|
200
|
+
* @returns {boolean}
|
|
201
|
+
*/
|
|
202
|
+
export declare function isHtmlCacheKeyFresh(key: string): boolean;
|
|
203
|
+
/**
|
|
204
|
+
* Girdide en fazla bir sıkıştırılmış gövde durur. Yeni kodlama eskisinin
|
|
205
|
+
* yerini alır; ham HTML kalır. Bayt sayacı `noteHtmlCacheGrowth` ile işlenir.
|
|
206
|
+
*
|
|
207
|
+
* @param {Map<string, Buffer>} encoded
|
|
208
|
+
* @param {string} encoding
|
|
209
|
+
* @param {Buffer} buffer
|
|
210
|
+
* @returns {void}
|
|
211
|
+
*/
|
|
212
|
+
export declare function rememberHtmlEncoding(encoded: Map<string, Buffer>, encoding: string, buffer: Buffer): void;
|
|
193
213
|
/**
|
|
194
214
|
* Erken tazeleme penceresine girmiş (veya TTL'i dolmuş) trafiksiz girdileri
|
|
195
215
|
* soft-bayatlatır ve ısıtma kuyruğuna alır. HTTP ısıtması producer'sız
|
|
196
216
|
* çalıştığı için soft-bayat şart: taze HIT yenileme tetiklemez.
|
|
197
217
|
*
|
|
218
|
+
* Tur başına en fazla `EARLY_SWEEP_MARK_BUDGET` girdi. Önce süresi en yakın
|
|
219
|
+
* dolacak olan; kota dolunca kalanlar bir sonraki tura kalır.
|
|
220
|
+
*
|
|
198
221
|
* @returns {number} İşaretlenen girdi sayısı.
|
|
199
222
|
*/
|
|
200
223
|
export declare function sweepEarlyExpiry(): number;
|
|
@@ -1,17 +1,28 @@
|
|
|
1
|
+
export type LogChunk = {
|
|
2
|
+
body: Buffer;
|
|
3
|
+
encoding: "zstd";
|
|
4
|
+
bytes: number;
|
|
5
|
+
lines: number;
|
|
6
|
+
at: number;
|
|
7
|
+
};
|
|
1
8
|
export type LogSink = {
|
|
2
9
|
write: (entry: Record<string, unknown>) => Promise<void>;
|
|
3
10
|
flush: () => Promise<void>;
|
|
4
11
|
close: () => Promise<void>;
|
|
5
12
|
};
|
|
13
|
+
export type DrainLog = (chunk: LogChunk) => void | Promise<void>;
|
|
14
|
+
/** Diskteki parçaların ömrü. Config yükseltemez. */
|
|
15
|
+
export declare const FILE_LOG_RETENTION_MS: number;
|
|
6
16
|
/**
|
|
7
|
-
* @
|
|
8
|
-
*
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* @param {{ root: string, dir: string }} options
|
|
17
|
+
* @param {{ root: string, dir: string, persist?: boolean,
|
|
18
|
+
* retentionMs?: number, drainLog?: DrainLog | null }} options
|
|
19
|
+
* `persist: false` diske yazmaz; yalnız `drainLog` çağrılır.
|
|
12
20
|
* @returns {LogSink}
|
|
13
21
|
*/
|
|
14
22
|
export declare function createFileSink(options: {
|
|
15
23
|
root: string;
|
|
16
24
|
dir: string;
|
|
25
|
+
persist?: boolean;
|
|
26
|
+
retentionMs?: number;
|
|
27
|
+
drainLog?: DrainLog | null;
|
|
17
28
|
}): LogSink;
|
package/types/server/redis.d.ts
CHANGED
|
@@ -56,7 +56,8 @@ export declare function cacheKey(kind: "html" | "data", key: string): string;
|
|
|
56
56
|
export declare function redisGetJson(key: string): Promise<any | null>;
|
|
57
57
|
/**
|
|
58
58
|
* Ateşle-unut yazma. İsteğin yanıt yolunda beklenmez: HTML zaten L1'e
|
|
59
|
-
* yazıldı, Redis kopyası yalnızca diğer node'lar için.
|
|
59
|
+
* yazıldı, Redis kopyası yalnızca diğer node'lar için. 1 KB ve üstü gövdeler
|
|
60
|
+
* brotli ile yazılır; okuma düz JSON'u da kabul eder.
|
|
60
61
|
*
|
|
61
62
|
* @param {string} key
|
|
62
63
|
* @param {unknown} value
|