@softchef/cdk-iot-device-management
Version:
IoT device management is composed of things, thing types, thing groups, jobs, files API services. The constructs can be used independently, that are based on full-managed service to create an API Gateway & Lambda function.
71 lines (70 loc) • 2.54 kB
JavaScript
import { __awaiter, __generator } from "tslib";
export var memoize = function (provider, isExpired, requiresRefresh) {
var resolved;
var pending;
var hasResult;
var coalesceProvider = function () { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!pending) {
pending = provider();
}
_a.label = 1;
case 1:
_a.trys.push([1, , 3, 4]);
return [4, pending];
case 2:
resolved = _a.sent();
hasResult = true;
return [3, 4];
case 3:
pending = undefined;
return [7];
case 4: return [2, resolved];
}
});
}); };
if (isExpired === undefined) {
return function () { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!!hasResult) return [3, 2];
return [4, coalesceProvider()];
case 1:
resolved = _a.sent();
_a.label = 2;
case 2: return [2, resolved];
}
});
}); };
}
var isConstant = false;
return function () { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!!hasResult) return [3, 2];
return [4, coalesceProvider()];
case 1:
resolved = _a.sent();
_a.label = 2;
case 2:
if (isConstant) {
return [2, resolved];
}
if (requiresRefresh && !requiresRefresh(resolved)) {
isConstant = true;
return [2, resolved];
}
if (!isExpired(resolved)) return [3, 4];
return [4, coalesceProvider()];
case 3:
_a.sent();
return [2, resolved];
case 4: return [2, resolved];
}
});
}); };
};