UNPKG

janus

Version:

the two-faced application library-framework

162 lines (140 loc) 4.58 kB
// Generated by CoffeeScript 1.12.2 (function() { var MemoryCacheResolver, Request, Resolver, Varying, identity, isFunction, isNumber, ref, types, slice = [].slice; Varying = require('../core/varying').Varying; ref = require('../util/util'), identity = ref.identity, isFunction = ref.isFunction, isNumber = ref.isNumber; types = require('../core/types'); Request = (function() { function Request(options) { this.options = options; } Request.prototype.type = types.operation.read(); Request.prototype.signature = void 0; Request.prototype.cacheable = true; Request.prototype.expires = void 0; return Request; })(); Resolver = { oneOf: function() { var resolvers; resolvers = 1 <= arguments.length ? slice.call(arguments, 0) : []; return function(request) { var i, len, resolver, result; for (i = 0, len = resolvers.length; i < len; i++) { resolver = resolvers[i]; result = resolver(request); if (result != null) { return result; } } return null; }; }, caching: function(cache, resolver) { return function(request) { var hit, result; if ((hit = cache.resolve(request)) != null) { return hit; } else { result = resolver(request); if (result != null) { cache.cache(request, result); } return result; } }; }, fromLibrary: function(library) { return function(request) { var base; return typeof (base = library.get(request)) === "function" ? base(request) : void 0; }; }, fromDom: function(dom, deserialize) { if (deserialize == null) { deserialize = identity; } return function(request) { var cacheNode, signature; signature = typeof request.signature === "function" ? request.signature() : void 0; if (signature == null) { return; } cacheNode = dom.children("#" + signature); if (cacheNode.length === 0) { return; } cacheNode.remove(); if (types.operation.read.match(request.type)) { return new Varying(types.result.success(deserialize(cacheNode.text(), cacheNode))); } else { return null; } }; } }; MemoryCacheResolver = (function() { function MemoryCacheResolver() { this._cache = {}; this._expires = {}; } MemoryCacheResolver.prototype.resolve = function(request) { var expires, signature; if (!types.operation.read.match(request.type)) { return; } signature = typeof request.signature === "function" ? request.signature() : void 0; if (signature == null) { return; } if (((expires = this._expires[signature]) != null) && (expires < (new Date()).getTime())) { return; } return this._cache[signature]; }; MemoryCacheResolver.prototype.cache = function(request, result) { var self, signature; signature = typeof request.signature === "function" ? request.signature() : void 0; if (signature == null) { return; } if (types.operation.read.match(request.type) && this._cache[signature] !== result) { this._set(signature, result, request.expires); } else if (types.operation.mutate.match(request.type)) { this._cache[signature] = null; if (types.operation["delete"].match(request.type)) { } else if (request.cacheable === true) { self = this; result.react(function(inner) { types.result.success.match(inner, function() { return self._set(signature, result, request.expires); }); if (types.result.complete.match(inner)) { return this.stop(); } }); } } return null; }; MemoryCacheResolver.prototype._set = function(signature, value, expires) { var after; this._cache[signature] = value; if (expires != null) { after = isFunction(expires) ? expires() : expires; if (isNumber(after)) { this._expires[signature] = (new Date()).getTime() + (after * 1000); } } return null; }; return MemoryCacheResolver; })(); Resolver.MemoryCache = MemoryCacheResolver; module.exports = { Request: Request, Resolver: Resolver, MemoryCacheResolver: MemoryCacheResolver }; }).call(this);