jskelet 0.6.0 → 0.6.2

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.
@@ -94,25 +94,53 @@ export declare const DEFAULT_PREWARM_ON_VISIT: {
94
94
  /** Sayfa başına üstten alta en fazla kaç link kuyruğa alınır. */
95
95
  perPage: number;
96
96
  /**
97
- * Paralel işçi; `null` → klasik prewarm ile aynı varsayılan
98
- * (prod 4 / dev 1) `startPrewarm` içinde çözülür.
97
+ * Paralel işçi. `null` yalnızca kapalı modda durur; açıkken tavan
98
+ * (`ON_VISIT_CONCURRENCY_CEILING`) uygulanır. Klasik prewarm'daki
99
+ * prod 4 burada geçerli değil — onVisit sürekli çalışır.
99
100
  * @type {number | null}
100
101
  */
101
102
  concurrency: number | null;
102
103
  /**
103
- * Saniyedeki istek tavanı; `null` → klasik ile aynı (prod 0 / dev 4).
104
+ * Saniyedeki istek tavanı. `null` yalnızca kapalı modda durur; açıkken
105
+ * `0` (sınırsız) dahil her şey `ON_VISIT_RPS_CEILING` ile kesilir.
104
106
  * @type {number | null}
105
107
  */
106
108
  rps: number | null;
107
109
  };
110
+ /**
111
+ * onVisit sürekli tur olduğu için klasik prewarm'daki "sınırsız" burada yok.
112
+ * Config daha yükseğini yazsa da çözümlenen değer bu tavanları geçemez.
113
+ */
114
+ export declare const ON_VISIT_PER_PAGE_CEILING = 20;
115
+ export declare const ON_VISIT_RPS_CEILING = 2;
116
+ export declare const ON_VISIT_CONCURRENCY_CEILING = 2;
117
+ /**
118
+ * Bekleyen onVisit yolları. Bir sayfa düzinelerce link basınca kuyruk
119
+ * birikmesin; taşan link bu turda alınmaz.
120
+ */
121
+ export declare const ON_VISIT_QUEUE_MAX = 64;
108
122
  /** `onVisit` açıkken `cache().prewarm` kökünde yasak olan klasik alanlar. */
109
123
  export declare const CLASSIC_PREWARM_KEYS: string[];
110
124
  /**
111
125
  * HTML önbelleğinin girdi sınırı. 500 girdi ortalama bir sayfa boyutunda
112
126
  * yaklaşık 100-200 MB tutar; uzun kuyruklu siteler bunu yükseltmek yerine
113
127
  * veri önbelleğine yaslanmalı (bkz. `DEFAULT_DATA_CACHE`).
128
+ *
129
+ * Config daha yükseğini istese de girdi sayısı `HTML_CACHE_MAX_ENTRIES_CEILING`
130
+ * değerini geçemez. Asıl bellek freni bayt bütçesidir: şişman sayfa ve
131
+ * `vary.host` kopyası sayı tavanının altında da RSS'i şişirir.
114
132
  */
115
133
  export declare const DEFAULT_HTML_CACHE_MAX_ENTRIES = 500;
134
+ /** `cache().maxEntries` için sert tavan. Üstü uyarıyla bu değere çekilir. */
135
+ export declare const HTML_CACHE_MAX_ENTRIES_CEILING = 800;
136
+ /**
137
+ * Süreç içi HTML string + sıkıştırılmış gövde tavanı (256 MB).
138
+ * `install()` bunu uygular; config yükseltemez. Tek sayfa bütçeden büyükse
139
+ * saklanmaz, yanıt yine gider.
140
+ */
141
+ export declare const HTML_CACHE_BYTE_BUDGET: number;
142
+ /** `cache().data.maxEntries` için sert tavan. Uzun kuyruk burada durur, HTML'de değil. */
143
+ export declare const DATA_CACHE_MAX_ENTRIES_CEILING = 20000;
116
144
  /**
117
145
  * `notFound()` geçici bir upstream hatasına denk geldiğinde sayfanın kaç kez
118
146
  * daha denenmesi gerektiği.
@@ -178,6 +178,11 @@ export type ResolvedConfig = {
178
178
  extensions: Set<string>;
179
179
  prefixes: string[];
180
180
  };
181
+ /**
182
+ * `DEV_TOKEN` tek başına siteyi kilitlemez; gate
183
+ * ancak bu bayrak veya `DEV_GATE=1` ile açılır.
184
+ */
185
+ devGate: boolean;
181
186
  devGateBypass: string[];
182
187
  preconnect: string[];
183
188
  navigation: NavigationConfig;
@@ -49,6 +49,23 @@ export type HtmlEntry = {
49
49
  * @returns {number}
50
50
  */
51
51
  export declare function earlyRefreshLeadMs(produceMs: number, ttlMs: number): number;
52
+ /**
53
+ * Sıkıştırılmış gövde `install()`'dan sonra, ilk brotli/gzip yanıtında
54
+ * girdinin `encoded` haritasına eklenir. Sayacı delta ile büyütmek, o sıra
55
+ * LRU'dan düşmüş bir haritaya yazınca bir daha inmeyen bir artık bırakır;
56
+ * store'dan yeniden okumak o artığı taşımaz.
57
+ *
58
+ * @returns {void}
59
+ */
60
+ export declare function noteHtmlCacheGrowth(): void;
61
+ /**
62
+ * Bellek freninin bayt tavanını geçici olarak değiştirir. Testler LRU
63
+ * tahliyesini küçük bir değerle doğrular; `null` üretim tavanına döner.
64
+ *
65
+ * @param {number | null} bytes
66
+ * @returns {void}
67
+ */
68
+ export declare function setHtmlCacheByteBudget(bytes: number | null): void;
52
69
  /**
53
70
  * @param {string} key
54
71
  * @param {number} ttlSeconds 0 → cache yok
@@ -121,12 +138,20 @@ export declare function invalidateHtmlByDependency(dataKeys: Iterable<string>):
121
138
  */
122
139
  export declare function dropHtmlCacheKey(key: string): boolean;
123
140
  /**
124
- * Invalidate edilmiş ve henüz kimsenin istemediği yolları döner ve kuyruğu
125
- * boşaltır. Isıtma turu bunları başa alır; iki tur aynı yolu tekrar
126
- * ısıtmasın diye okuma yıkıcıdır.
141
+ * Invalidate edilmiş yollar. Okuma yıkıcıdır; iki tur aynı yolu tekrar
142
+ * ısıtmasın. `onlyHost` verilirse başka host'ların anahtarları kuyrukta
143
+ * kalır — süre dolumu onları kendi host'uyla ısıtır, `127.0.0.1` anahtarı
144
+ * açılmaz.
127
145
  *
128
- * Vary öneki (`h=…|`) düşülür — HTTP ısıtması yalnızca yolu ister; host
129
- * ayrımı `prewarm.origins` / istek Host'u ile yapılır.
146
+ * @param {string} [onlyHost]
147
+ * @returns {{ path: string, host: string }[]}
148
+ */
149
+ export declare function takeInvalidatedTargets(onlyHost?: string): {
150
+ path: string;
151
+ host: string;
152
+ }[];
153
+ /**
154
+ * Yol listesi. Vary öneki düşülür; host ayrımı `takeInvalidatedTargets`.
130
155
  *
131
156
  * @returns {string[]}
132
157
  */
@@ -152,10 +177,19 @@ export declare function getHtmlCacheEntries(): {
152
177
  * Yol (query'siz) için taze bir HTML girdisi var mı? Ziyaret ısıtması yalnızca
153
178
  * soğuk / bayat hedefleri kuyruğa alır; HIT'leri yeniden çekmez.
154
179
  *
180
+ * Gerçek anahtar `h=host|/yol?` biçimindedir: düz `store.get(pathname)` hem
181
+ * vary önekini hem sondaki `?` işaretini kaçırır ve sıcak sayfayı yeniden
182
+ * ısıtır. `vary.host` açıkken yalnızca bu isteğin host'u sayılır; diğer
183
+ * locale'in kopyası bu yolu sıcak yapmaz.
184
+ *
155
185
  * @param {string} pathname
186
+ * @param {{ headers?: Record<string, unknown>, get?: (name: string) => string | undefined }} [req]
156
187
  * @returns {boolean}
157
188
  */
158
- export declare function isHtmlCacheFresh(pathname: string): boolean;
189
+ export declare function isHtmlCacheFresh(pathname: string, req?: {
190
+ headers?: Record<string, unknown>;
191
+ get?: (name: string) => string | undefined;
192
+ }): boolean;
159
193
  /**
160
194
  * Erken tazeleme penceresine girmiş (veya TTL'i dolmuş) trafiksiz girdileri
161
195
  * soft-bayatlatır ve ısıtma kuyruğuna alır. HTTP ısıtması producer'sız
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @param {string} [brandName]
3
+ * @returns {string}
4
+ */
5
+ export declare function frameworkRobotsNote(brandName?: string): string;
6
+ /**
7
+ * `robots.txt`'e yazılacak `Disallow` yolları.
8
+ *
9
+ * Üç önek her zaman vardır. Panel, uzak görsel ve handoff yalnızca
10
+ * gerçekten mount edildiklerinde ve öneklerin dışına taşındıklarında eklenir.
11
+ * Dev araçlarının özel yolu yalnızca development'ta yazılır: production'da
12
+ * o yol uygulamanın kendi sayfası olabilir.
13
+ *
14
+ * @param {object} [config]
15
+ * @param {{ dev?: boolean }} [options]
16
+ * @returns {string[]}
17
+ */
18
+ export declare function frameworkDisallowPaths(config?: object, options?: {
19
+ dev?: boolean;
20
+ }): string[];
21
+ /**
22
+ * @param {string} body
23
+ * @param {{ brandName?: string, paths: string[] }} options
24
+ * @returns {string}
25
+ */
26
+ export declare function appendFrameworkRobots(body: string, options: {
27
+ brandName?: string;
28
+ paths: string[];
29
+ }): string;
30
+ /**
31
+ * @returns {import('express').RequestHandler}
32
+ */
33
+ export declare function robotsTxtMiddleware(): import('express').RequestHandler;
@@ -65,15 +65,18 @@ export declare function notePrewarmError(status: number, error: unknown): void;
65
65
  */
66
66
  export declare function selectPrewarmPaths(all: string[], limit: number, rotate?: boolean): string[];
67
67
  /**
68
- * @param {{ origin: string, quiet?: boolean, paths?: string[] }} options
68
+ * @param {{ origin: string, quiet?: boolean, paths?: string[],
69
+ * forwardedHost?: string }} options
69
70
  * `paths` verilirse hook çağrılmaz, yalnızca o yollar ısıtılır (dev
70
- * panelindeki "tekrar dene" bunu kullanır).
71
+ * panelindeki "tekrar dene" bunu kullanır). `forwardedHost` loopback
72
+ * isteğine public host'u taşır; cache anahtarı `h=127.0.0.1` olmasın.
71
73
  * @returns {Promise<{ ok: number, failed: number, total: number, elapsed: number }>}
72
74
  */
73
- export declare function prewarm({ origin, quiet, paths: only }: {
75
+ export declare function prewarm({ origin, quiet, paths: only, forwardedHost }: {
74
76
  origin: string;
75
77
  quiet?: boolean;
76
78
  paths?: string[];
79
+ forwardedHost?: string;
77
80
  }): Promise<{
78
81
  ok: number;
79
82
  failed: number;