fix(rest-cache): improve module loading and error handling #118 #120
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Issue #118
Root Cause
keyvat runtime but do not declare it as a dependency. In many local/monorepo installskeyvis accidentally present via hoisting/resolutions, but in production (or a clean install) it’s missing, sorequire('keyv')fails and the main plugin reports the generic “Could not load REST Cache provider "memory"” error.require('keyv').default,new QuickLRU.default(...),new KeyvRedis.default(...)). Depending on which version/module-shape is installed, this can produceTypeError: Keyv is not a constructor(Node 22 reports in the issue).Code Changes
keyvas a direct dependency of:@strapi-community/provider-rest-cache-memory@strapi-community/provider-rest-cache-redisconst keyvModule = require('keyv'); const Keyv = keyvModule.default ?? keyvModule;const quickLruModule = require('quick-lru'); const QuickLRU = quickLruModule.default ?? quickLruModule;const keyvRedisModule = require('@keyv/redis'); const KeyvRedis = keyvRedisModule.default ?? keyvRedisModule;new QuickLRU(...)andnew KeyvRedis(...)accordingly.Verification
@strapi-community/plugin-rest-cachein a fresh Strapi 5 app and start it with providermemory.Deliverables