/ cloudformation-templates / node_modules / aws-cdk / node_modules / aws-sdk / vendor / endpoint-cache / index.js
index.js
1 "use strict"; 2 Object.defineProperty(exports, "__esModule", { value: true }); 3 var LRU_1 = require("./utils/LRU"); 4 var CACHE_SIZE = 1000; 5 /** 6 * Inspired node-lru-cache[https://github.com/isaacs/node-lru-cache] 7 */ 8 var EndpointCache = /** @class */ (function () { 9 function EndpointCache(maxSize) { 10 if (maxSize === void 0) { maxSize = CACHE_SIZE; } 11 this.maxSize = maxSize; 12 this.cache = new LRU_1.LRUCache(maxSize); 13 } 14 ; 15 Object.defineProperty(EndpointCache.prototype, "size", { 16 get: function () { 17 return this.cache.length; 18 }, 19 enumerable: true, 20 configurable: true 21 }); 22 EndpointCache.prototype.put = function (key, value) { 23 var keyString = typeof key !== 'string' ? EndpointCache.getKeyString(key) : key; 24 var endpointRecord = this.populateValue(value); 25 this.cache.put(keyString, endpointRecord); 26 }; 27 EndpointCache.prototype.get = function (key) { 28 var keyString = typeof key !== 'string' ? EndpointCache.getKeyString(key) : key; 29 var now = Date.now(); 30 var records = this.cache.get(keyString); 31 if (records) { 32 for (var i = records.length-1; i >= 0; i--) { 33 var record = records[i]; 34 if (record.Expire < now) { 35 records.splice(i, 1); 36 } 37 } 38 if (records.length === 0) { 39 this.cache.remove(keyString); 40 return undefined; 41 } 42 } 43 return records; 44 }; 45 EndpointCache.getKeyString = function (key) { 46 var identifiers = []; 47 var identifierNames = Object.keys(key).sort(); 48 for (var i = 0; i < identifierNames.length; i++) { 49 var identifierName = identifierNames[i]; 50 if (key[identifierName] === undefined) 51 continue; 52 identifiers.push(key[identifierName]); 53 } 54 return identifiers.join(' '); 55 }; 56 EndpointCache.prototype.populateValue = function (endpoints) { 57 var now = Date.now(); 58 return endpoints.map(function (endpoint) { return ({ 59 Address: endpoint.Address || '', 60 Expire: now + (endpoint.CachePeriodInMinutes || 1) * 60 * 1000 61 }); }); 62 }; 63 EndpointCache.prototype.empty = function () { 64 this.cache.empty(); 65 }; 66 EndpointCache.prototype.remove = function (key) { 67 var keyString = typeof key !== 'string' ? EndpointCache.getKeyString(key) : key; 68 this.cache.remove(keyString); 69 }; 70 return EndpointCache; 71 }()); 72 exports.EndpointCache = EndpointCache;