jskelet 0.7.0 → 0.7.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.
Files changed (46) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/docs/04-render-ve-sablonlar.md +20 -9
  3. package/docs/05-islands.md +8 -4
  4. package/docs/06-cache.md +18 -16
  5. package/docs/07-yapilandirma.md +8 -7
  6. package/docs/en/04-rendering.md +21 -9
  7. package/docs/en/05-islands.md +8 -4
  8. package/docs/en/06-caching.md +18 -16
  9. package/docs/en/07-configuration.md +8 -6
  10. package/package.json +1 -1
  11. package/src/build/build.mjs +23 -8
  12. package/src/build/tasks/precompress.mjs +51 -11
  13. package/src/client/registry.js +13 -3
  14. package/src/compile/codegen.js +70 -4
  15. package/src/compile/compile-all.js +18 -3
  16. package/src/compile/index.js +6 -1
  17. package/src/config/defaults.js +9 -5
  18. package/src/config/index.js +3 -3
  19. package/src/http/request-cache.js +19 -1
  20. package/src/index.js +2 -0
  21. package/src/server/assets.js +51 -22
  22. package/src/server/cache-blob.js +33 -0
  23. package/src/server/create-app.js +5 -0
  24. package/src/server/data-cache.js +77 -11
  25. package/src/server/disk-cache.js +2 -2
  26. package/src/server/head-hints.js +21 -9
  27. package/src/server/html-cache.js +169 -39
  28. package/src/server/image-optimizer.js +72 -28
  29. package/src/server/redis.js +2 -2
  30. package/src/server/render.js +183 -60
  31. package/src/templates/layout.jsk +4 -4
  32. package/src/templates/layout.render.js +2 -21
  33. package/src/views/components/loader.js +11 -6
  34. package/src/views/helpers/html.js +13 -5
  35. package/src/views/helpers/tags.js +21 -4
  36. package/types/client/registry.d.ts +2 -0
  37. package/types/compile/codegen.d.ts +9 -4
  38. package/types/compile/compile-all.d.ts +3 -1
  39. package/types/compile/index.d.ts +1 -1
  40. package/types/config/defaults.d.ts +8 -4
  41. package/types/config/index.d.ts +1 -0
  42. package/types/index.d.ts +1 -1
  43. package/types/server/cache-blob.d.ts +8 -0
  44. package/types/server/data-cache.d.ts +1 -0
  45. package/types/server/html-cache.d.ts +4 -5
  46. package/types/server/render.d.ts +19 -0
@@ -175,6 +175,11 @@ export declare const DATA_CACHE_MAX_ENTRIES_CEILING = 20000;
175
175
  export declare const DEFAULT_TRANSIENT_RETRY: {
176
176
  attempts: number;
177
177
  delayMs: number;
178
+ /**
179
+ * `true` (varsayılan): ilk transient `notFound`ta hemen 503; retry arka
180
+ * planda data cache'i ısıtır. `false`: yanıt öncesi senkron retry (eski).
181
+ */
182
+ background: boolean;
178
183
  };
179
184
  /**
180
185
  * Upstream veri önbelleği.
@@ -236,9 +241,8 @@ export declare const DEFAULT_UPSTREAM_LIMIT: {
236
241
  * invalidation'ı bütün node'lara yaymak. Tek instance çalışan bir kurulumda
237
242
  * kazanç neredeyse yok; bu yüzden `enabled` varsayılan olarak kapalı.
238
243
  *
239
- * `storeEncoded` kapalı, çünkü sıkıştırılmış gövdeleri de paylaşmak girdi
240
- * başına boyutu iki-üç katına çıkarır ve brotli'yi yeniden üretmek Redis'ten
241
- * indirmekten çoğu zaman daha ucuz.
244
+ * `storeEncoded` açık: soğuk replica L2 HIT'te yeniden brotli ödemesin.
245
+ * Boyut artar; tek encoding (br) tutulduğu için maliyet sınırlıdır.
242
246
  */
243
247
  export declare const DEFAULT_REDIS: {
244
248
  enabled: boolean;
@@ -251,7 +255,7 @@ export declare const DEFAULT_REDIS: {
251
255
  html: boolean;
252
256
  /** Veri önbelleği paylaşılsın mı. */
253
257
  data: boolean;
254
- /** Brotli/gzip gövdeleri de paylaşılsın mı. */
258
+ /** Brotli gövdeleri de paylaşılsın mı (yazma sonrası preencode). */
255
259
  storeEncoded: boolean;
256
260
  /** pub/sub üzerinden invalidation yayını. */
257
261
  events: boolean;
@@ -147,6 +147,7 @@ export type ResolvedConfig = {
147
147
  transientRetry: {
148
148
  attempts: number;
149
149
  delayMs: number;
150
+ background?: boolean;
150
151
  };
151
152
  /**
152
153
  * Opsiyonel Redis ikinci kademesi.
package/types/index.d.ts CHANGED
@@ -5,7 +5,7 @@
5
5
  * controller'lar bu yüzeyi kullanır. Alt yollardan (`jskelet/server`)
6
6
  * ithal etmek de mümkün; buradaki liste "kararlı" sayılan yüzeydir.
7
7
  */
8
- export { route, fragment, renderPage, renderView, renderNotFound, } from "./server/render.js";
8
+ export { route, fragment, renderPage, renderView, renderNotFound, warmRenderEngine, resetRenderEngine, } from "./server/render.js";
9
9
  export { renderStatusPage, statusFromError } from "./server/status-page.js";
10
10
  export { createApp, startServer } from "./server/create-app.js";
11
11
  export { notFound, redirect, permanentRedirect, seeOther, isNotFoundError, isRedirectError, NotFoundError, RedirectError, } from "./http/control-flow.js";
@@ -7,7 +7,15 @@
7
7
  */
8
8
  export declare function encodeCacheValue(value: unknown): string | Buffer | Promise<string | Buffer> | null;
9
9
  /**
10
+ * Senkron çözücü — küçük test / senkron yollar için. Hot path
11
+ * `decodeCacheValueAsync` kullanır (event loop'u brotli ile bloklamaz).
12
+ *
10
13
  * @param {Buffer | string} raw
11
14
  * @returns {unknown}
12
15
  */
13
16
  export declare function decodeCacheValue(raw: Buffer | string): unknown;
17
+ /**
18
+ * @param {Buffer | string} raw
19
+ * @returns {Promise<unknown>}
20
+ */
21
+ export declare function decodeCacheValueAsync(raw: Buffer | string): Promise<unknown>;
@@ -3,6 +3,7 @@ export type DataEntry = {
3
3
  expiresAt: number;
4
4
  staleUntil: number;
5
5
  bytes: number;
6
+ produceMs: number;
6
7
  };
7
8
  /**
8
9
  * Süreç ömrü boyunca biriken sayaçlar.
@@ -50,10 +50,8 @@ export type HtmlEntry = {
50
50
  */
51
51
  export declare function earlyRefreshLeadMs(produceMs: number, ttlMs: number): number;
52
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.
53
+ * Bayt sayacını store'dan yeniden hesaplar. Testler elle `encoded` doldurunca
54
+ * çağırır; hot path `rememberHtmlEncoding` delta kullanır.
57
55
  *
58
56
  * @returns {void}
59
57
  */
@@ -202,7 +200,8 @@ export declare function isHtmlCacheFresh(pathname: string, req?: {
202
200
  export declare function isHtmlCacheKeyFresh(key: string): boolean;
203
201
  /**
204
202
  * 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.
203
+ * yerini alır; ham HTML kalır. Bayt sayacı delta ile güncellenir — harita
204
+ * LRU'dan düşmüşse (store'da yok) sayaç oynatılmaz.
206
205
  *
207
206
  * @param {Map<string, Buffer>} encoded
208
207
  * @param {string} encoding
@@ -1,3 +1,22 @@
1
+ export type RenderEngine = {
2
+ helpers: Record<string, unknown>;
3
+ options: Record<string, unknown>;
4
+ viewsDir: string;
5
+ viewRoots: string[];
6
+ layout: string;
7
+ compiled: Map<string, (data: object, helpers: object) => string>;
8
+ loading: Map<string, Promise<(data: object, helpers: object) => string | null>>;
9
+ manifest: Record<string, string>;
10
+ templatesDir: string;
11
+ bust: string;
12
+ layoutRender: ((data: object, helpers: object) => string) | null;
13
+ };
14
+ /**
15
+ * Listen öncesi: motor + asset manifest ısınır (sayfa prewarm değil).
16
+ *
17
+ * @returns {Promise<void>}
18
+ */
19
+ export declare function warmRenderEngine(): Promise<void>;
1
20
  /**
2
21
  * Uygulama geliştirirken bileşen dosyaları değişince kayıt yenilenmeli.
3
22
  * Dev sunucusu süreci yeniden başlattığı için normalde gerekmez; gömülü