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