@zbm1/nuxt-ssr-cache
Advanced tools
Comparing version 1.5.2 to 1.5.3
"use strict"; | ||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } | ||
var path = require('path'); | ||
@@ -66,11 +68,21 @@ | ||
var renderRoute = renderer.renderRoute.bind(renderer); | ||
var hookResolve = hookResolvePlaceholder; | ||
var hookName = 'vue-renderer:ssr:context'; | ||
var hookCaches = {// '0': { | ||
// [hookName]: { | ||
// resolve: resolve | ||
// }, | ||
// routeCachedPromise: { | ||
// resolve: resolve, | ||
// reject: reject | ||
// } | ||
// } | ||
}; | ||
var hookCacheIndexes = []; | ||
var hookCacheIndex = -1; | ||
function hookResolvePlaceholder() { | ||
throw new Error('`hookResolve()` needs to be implemented'); | ||
} | ||
function createHookPromise() { | ||
function createHookPromise(hookCacheIndex) { | ||
var promise = new Promise(function (resolve, reject) { | ||
hookResolve = resolve; | ||
hookCaches[hookCacheIndex] = _defineProperty({}, hookName, { | ||
resolve: resolve | ||
}); | ||
}); | ||
@@ -80,18 +92,8 @@ return promise; | ||
var cachedResolve = cachedResolvePlaceholder; | ||
function cachedResolvePlaceholder() { | ||
throw new Error('`cachedResolve()` needs to be implemented'); | ||
} | ||
var cachedReject = cachedRejectPlaceholder; | ||
function cachedRejectPlaceholder() { | ||
throw new Error('`cachedReject()` needs to be implemented'); | ||
} | ||
function createCachedPromise() { | ||
function createCachedPromise(hookCacheIndex) { | ||
var promise = new Promise(function (resolve, reject) { | ||
cachedResolve = resolve; | ||
cachedReject = reject; | ||
hookCaches[hookCacheIndex].routeCachedPromise = { | ||
resolve: resolve, | ||
reject: reject | ||
}; | ||
}); | ||
@@ -103,5 +105,9 @@ return promise; | ||
nuxt.hook('vue-renderer:ssr:context', function (renderContext) { | ||
nuxt.hook(hookName, function (renderContext) { | ||
// This will be called when vue-renderer ssr Context | ||
// console.log('renderContext.req.url', renderContext.req.url) | ||
var _hookCacheIndex = renderContext[hookName]; | ||
var hookCache = hookCaches[_hookCacheIndex]; | ||
var hookCachePromise = hookCache[hookName]; | ||
if (renderContext.redirected) { | ||
@@ -117,9 +123,7 @@ // console.log('renderContext.redirected', renderContext.redirected) | ||
}; | ||
hookResolve(redirectedResult); | ||
hookResolve = hookResolvePlaceholder; | ||
hookCachePromise.resolve(redirectedResult); | ||
return Promise.reject(renderContext.redirected); | ||
} else { | ||
hookResolve(); | ||
hookResolve = hookResolvePlaceholder; | ||
return createCachedPromise(); | ||
hookCachePromise.resolve(); | ||
return createCachedPromise(_hookCacheIndex); | ||
} | ||
@@ -133,3 +137,7 @@ }); | ||
if (!cacheKey) return renderRoute(route, context); | ||
var hookPromise = createHookPromise(); | ||
var _hookCacheIndex = hookCacheIndexes.pop(); | ||
context[hookName] = _hookCacheIndex > -1 ? _hookCacheIndex : _hookCacheIndex = ++hookCacheIndex; | ||
var hookPromise = createHookPromise(_hookCacheIndex); | ||
var renderRoutePromise = renderRoute(route, context)["catch"](function (err) { | ||
@@ -140,2 +148,3 @@ return err; | ||
if (redirectedResult) { | ||
clearHookCache(); | ||
return redirectedResult; | ||
@@ -145,14 +154,13 @@ } | ||
return cache.getAsync(cacheKey).then(function (cachedResult) { | ||
var hookCache = hookCaches[_hookCacheIndex]; | ||
var routeCachedPromise = hookCache.routeCachedPromise; | ||
if (cachedResult) { | ||
cachedReject(route + ' cached.'); | ||
cachedReject = cachedRejectPlaceholder; | ||
cachedResolve = cachedResolvePlaceholder; // renderRoutePromise.then(function (result) { console.log(result.redirected) }) | ||
routeCachedPromise.reject(route + ' cached.'); // renderRoutePromise.then(function (result) { console.log(result.redirected) }) | ||
renderRoutePromise = null; | ||
clearHookCache(); | ||
return deserialize(cachedResult); | ||
} | ||
cachedResolve(route + ' not cached.'); | ||
cachedReject = cachedRejectPlaceholder; | ||
cachedResolve = cachedResolvePlaceholder; | ||
routeCachedPromise.resolve(route + ' not cached.'); | ||
return renderSetCache(); | ||
@@ -162,2 +170,10 @@ })["catch"](renderSetCache); | ||
function clearHookCache() { | ||
hookCacheIndexes.push(_hookCacheIndex); | ||
delete hookCaches[_hookCacheIndex]; | ||
delete context[hookName]; | ||
hookPromise = null; | ||
renderRoutePromise = null; | ||
} | ||
function renderSetCache() { | ||
@@ -169,2 +185,3 @@ return renderRoutePromise.then(function (result) { | ||
clearHookCache(); | ||
return result; | ||
@@ -171,0 +188,0 @@ }); |
{ | ||
"name": "@zbm1/nuxt-ssr-cache", | ||
"version": "1.5.2", | ||
"version": "1.5.3", | ||
"description": "Cache middleware for nuxt's SSR rendering.", | ||
@@ -5,0 +5,0 @@ "main": "lib/middleware.js", |
18997
350