marko/taglibs/caching/CachedFragmentTag.js
2014-02-26 16:37:34 -07:00

40 lines
1.3 KiB
JavaScript

'use strict';
module.exports = {
render: function (input, context) {
var attributes = context.attributes;
var cacheProvider = attributes.cacheProvider;
var cache;
var cacheKey = input.cacheKey;
if (!cacheKey) {
throw new Error('cache-key is required for <caching:cached-fragment>');
}
if (!cacheProvider) {
var raptorCacheModulePath;
try {
raptorCacheModulePath = require.resolve('raptor-cache');
}
catch(e) {
throw new Error('The "raptor-cache" module should be installed as an application-level dependency when using caching tags');
}
cacheProvider = require(raptorCacheModulePath).getDefaultProvider();
}
cache = cacheProvider.getCache(input.cacheName);
var cachePromise = cache.get(
cacheKey,
{
builder: function() {
var result = context.captureString(function () {
if (input.invokeBody) {
input.invokeBody();
}
});
return result;
}
});
context.beginAsyncFragment(function() {
return cachePromise;
});
}
};