UNPKG

next

Version:

The React Framework

146 lines (145 loc) • 7.12 kB
import { workAsyncStorage } from '../app-render/work-async-storage.external'; import { workUnitAsyncStorage } from '../app-render/work-unit-async-storage.external'; function validateCacheLife(profile) { if (profile.stale !== undefined) { if (profile.stale === false) { throw Object.defineProperty(new Error('Pass `Infinity` instead of `false` if you want to cache on the client forever ' + 'without checking with the server.'), "__NEXT_ERROR_CODE", { value: "E407", enumerable: false, configurable: true }); } else if (typeof profile.stale !== 'number') { throw Object.defineProperty(new Error('The stale option must be a number of seconds.'), "__NEXT_ERROR_CODE", { value: "E308", enumerable: false, configurable: true }); } } if (profile.revalidate !== undefined) { if (profile.revalidate === false) { throw Object.defineProperty(new Error('Pass `Infinity` instead of `false` if you do not want to revalidate by time.'), "__NEXT_ERROR_CODE", { value: "E104", enumerable: false, configurable: true }); } else if (typeof profile.revalidate !== 'number') { throw Object.defineProperty(new Error('The revalidate option must be a number of seconds.'), "__NEXT_ERROR_CODE", { value: "E233", enumerable: false, configurable: true }); } } if (profile.expire !== undefined) { if (profile.expire === false) { throw Object.defineProperty(new Error('Pass `Infinity` instead of `false` if you want to cache on the server forever ' + 'without checking with the origin.'), "__NEXT_ERROR_CODE", { value: "E658", enumerable: false, configurable: true }); } else if (typeof profile.expire !== 'number') { throw Object.defineProperty(new Error('The expire option must be a number of seconds.'), "__NEXT_ERROR_CODE", { value: "E3", enumerable: false, configurable: true }); } } if (profile.revalidate !== undefined && profile.expire !== undefined) { if (profile.revalidate > profile.expire) { throw Object.defineProperty(new Error('If providing both the revalidate and expire options, ' + 'the expire option must be greater than the revalidate option. ' + 'The expire option indicates how many seconds from the start ' + 'until it can no longer be used.'), "__NEXT_ERROR_CODE", { value: "E656", enumerable: false, configurable: true }); } } if (profile.stale !== undefined && profile.expire !== undefined) { if (profile.stale > profile.expire) { throw Object.defineProperty(new Error('If providing both the stale and expire options, ' + 'the expire option must be greater than the stale option. ' + 'The expire option indicates how many seconds from the start ' + 'until it can no longer be used.'), "__NEXT_ERROR_CODE", { value: "E655", enumerable: false, configurable: true }); } } } export function cacheLife(profile) { if (!process.env.__NEXT_USE_CACHE) { throw Object.defineProperty(new Error('cacheLife() is only available with the experimental.useCache config.'), "__NEXT_ERROR_CODE", { value: "E627", enumerable: false, configurable: true }); } const workUnitStore = workUnitAsyncStorage.getStore(); if (!workUnitStore || workUnitStore.type !== 'cache') { throw Object.defineProperty(new Error('cacheLife() can only be called inside a "use cache" function.'), "__NEXT_ERROR_CODE", { value: "E250", enumerable: false, configurable: true }); } if (typeof profile === 'string') { const workStore = workAsyncStorage.getStore(); if (!workStore) { throw Object.defineProperty(new Error('cacheLife() can only be called during App Router rendering at the moment.'), "__NEXT_ERROR_CODE", { value: "E94", enumerable: false, configurable: true }); } if (!workStore.cacheLifeProfiles) { throw Object.defineProperty(new Error('cacheLifeProfiles should always be provided. This is a bug in Next.js.'), "__NEXT_ERROR_CODE", { value: "E294", enumerable: false, configurable: true }); } // TODO: This should be globally available and not require an AsyncLocalStorage. const configuredProfile = workStore.cacheLifeProfiles[profile]; if (configuredProfile === undefined) { if (workStore.cacheLifeProfiles[profile.trim()]) { throw Object.defineProperty(new Error(`Unknown cacheLife profile "${profile}" is not configured in next.config.js\n` + `Did you mean "${profile.trim()}" without the spaces?`), "__NEXT_ERROR_CODE", { value: "E16", enumerable: false, configurable: true }); } throw Object.defineProperty(new Error(`Unknown cacheLife profile "${profile}" is not configured in next.config.js\n` + 'module.exports = {\n' + ' experimental: {\n' + ' cacheLife: {\n' + ` "${profile}": ...\n` + ' }\n' + ' }\n' + '}'), "__NEXT_ERROR_CODE", { value: "E137", enumerable: false, configurable: true }); } profile = configuredProfile; } else if (typeof profile !== 'object' || profile === null || Array.isArray(profile)) { throw Object.defineProperty(new Error('Invalid cacheLife() option. Either pass a profile name or object.'), "__NEXT_ERROR_CODE", { value: "E110", enumerable: false, configurable: true }); } else { validateCacheLife(profile); } if (profile.revalidate !== undefined) { // Track the explicit revalidate time. if (workUnitStore.explicitRevalidate === undefined || workUnitStore.explicitRevalidate > profile.revalidate) { workUnitStore.explicitRevalidate = profile.revalidate; } } if (profile.expire !== undefined) { // Track the explicit expire time. if (workUnitStore.explicitExpire === undefined || workUnitStore.explicitExpire > profile.expire) { workUnitStore.explicitExpire = profile.expire; } } if (profile.stale !== undefined) { // Track the explicit stale time. if (workUnitStore.explicitStale === undefined || workUnitStore.explicitStale > profile.stale) { workUnitStore.explicitStale = profile.stale; } } } //# sourceMappingURL=cache-life.js.map