From 37e1e238a2c8e34987f10ef2877768c832bee05a Mon Sep 17 00:00:00 2001 From: Richard Petersen <richard.petersen@open-xchange.com> Date: Mon, 29 Nov 2021 11:52:16 +0100 Subject: [PATCH] Improve cache busting --- src/manifests.js | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/src/manifests.js b/src/manifests.js index 47ea557..03dc8cc 100644 --- a/src/manifests.js +++ b/src/manifests.js @@ -32,7 +32,14 @@ export const loadViteManifests = (() => { })) // combine all manifests by keys. With duplicates, last wins - return viteManifests.reduce((memo, manifest) => Object.assign(memo, manifest), {}) + const viteManifest = viteManifests.reduce((memo, manifest) => Object.assign(memo, manifest), {}) + Object.defineProperty(viteManifest, '__hash__', { + enumerable: false, + writable: true + }) + viteManifest.__hash__ = hash(viteManifests) + + return viteManifest } return function loadViteManifests ({ useCache = true } = {}) { @@ -42,19 +49,15 @@ export const loadViteManifests = (() => { cachePromise = reload() cachePromise.then(manifests => { // update cache promise - const newHash = hash(manifests) + const newHash = manifests.__hash__ if (newHash !== lastHash) { if (lastHash) { const deps = viteManifestToDeps(manifests) // asynchronously rewarm the cache fileCache.warmUp(manifests, deps) } + lastHash = newHash - Object.defineProperty(manifests, '__hash__', { - enumerable: false, - writable: true - }) - manifests.__hash__ = newHash } }) lastCacheTime = +new Date() @@ -82,13 +85,13 @@ export function viteToOxManifest (viteManifests) { } export const getOxManifests = (() => { - let prevViteManifest + let prevHash let oxManifestCache return async function getOxManifests () { const viteManifest = await loadViteManifests() - if (viteManifest !== prevViteManifest) { + if (viteManifest.__hash__ !== prevHash) { oxManifestCache = viteToOxManifest(viteManifest) - prevViteManifest = viteManifest + prevHash = viteManifest.__hash__ } return oxManifestCache } @@ -110,13 +113,13 @@ export function viteManifestToDeps (viteManifest) { } export const getDependencies = (() => { - let prevViteManifest + let prevHash let depCache return async function getDependencies () { const viteManifest = await loadViteManifests() - if (viteManifest !== prevViteManifest) { + if (viteManifest.__hash__ !== prevHash) { depCache = viteManifestToDeps(viteManifest) - prevViteManifest = viteManifest + prevHash = viteManifest.__hash__ } return depCache } @@ -129,17 +132,13 @@ export async function getCSSDependenciesFor (file) { } export const getVersion = (() => { - let prevViteManifest - let version + let prevHash let versionString return async function getVersion () { const viteManifest = await loadViteManifests() - if (viteManifest !== prevViteManifest) { - const newVersion = hash(viteManifest) - if (newVersion !== version) { - versionString = `${+new Date()}.${newVersion}` - version = newVersion - } + if (viteManifest.__hash__ !== prevHash) { + versionString = `${+new Date()}.${viteManifest.__hash__}` + prevHash = viteManifest.__hash__ } return versionString } -- GitLab