✨ feat: enhance SSR cache management with dependency tracking and entry-level invalidation
This commit is contained in:
@@ -120,6 +120,8 @@ const { ssrRequest } = require("../lib/ssr-server")
|
||||
} else {
|
||||
// @ts-ignore
|
||||
context.ssrCache = {}
|
||||
// @ts-ignore – tracks dependencies as { "col:id": true, "col:*": true }
|
||||
context.ssrDeps = {}
|
||||
// @ts-ignore
|
||||
context.ssrRequest = ssrRequest
|
||||
|
||||
@@ -165,6 +167,22 @@ const { ssrRequest } = require("../lib/ssr-server")
|
||||
tpl = tpl.replace("<!--HEAD-->", head)
|
||||
tpl = tpl.replace("<!--HTML-->", html)
|
||||
tpl = tpl.replace("<!--SSR.ERROR-->", error ? "<!--" + error + "-->" : "")
|
||||
|
||||
// Deduplicate deps: if "col:*" exists, drop all "col:<id>" for that collection
|
||||
// @ts-ignore – ssrDeps is set dynamically above
|
||||
var depsKeys = context.ssrDeps ? Object.keys(context.ssrDeps) : []
|
||||
/** @type {{[key: string]: boolean}} */
|
||||
var wildcardCols = {}
|
||||
depsKeys.forEach(function (k) {
|
||||
if (k.endsWith(":*")) wildcardCols[k.split(":")[0]] = true
|
||||
})
|
||||
depsKeys = depsKeys.filter(function (k) {
|
||||
if (k.endsWith(":*")) return true
|
||||
return !wildcardCols[k.split(":")[0]]
|
||||
})
|
||||
|
||||
// @ts-ignore – append deps for debugging
|
||||
comment += ", deps: [" + depsKeys.join(", ") + "]"
|
||||
tpl = tpl.replace("<!--SSR.COMMENT-->", comment ? "<!--" + comment + "-->" : "")
|
||||
|
||||
if (cacheIt && !noCache) {
|
||||
@@ -174,6 +192,8 @@ const { ssrRequest } = require("../lib/ssr-server")
|
||||
content: tpl,
|
||||
// @ts-ignore
|
||||
validUntil: context.ssrCacheValidUntil,
|
||||
// dependency strings: "col:id" for detail, "col:*" for list (deduplicated)
|
||||
dependencies: depsKeys,
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user