@gooddata/api-client-bear
Version:
API Client for the GoodData platform
82 lines • 2.88 kB
JavaScript
import { LRUCache } from "lru-cache";
import { ProjectModuleDecorator } from "../decoratedModules/project.js";
import { cachingEnabled } from "./utils.js";
export class ProjectModuleWithCaching extends ProjectModuleDecorator {
ctx;
constructor(decorated, ctx) {
super(decorated);
this.ctx = ctx;
}
getCurrentProjectId() {
return super.getCurrentProjectId();
}
getConfig(projectId) {
return super.getConfig(projectId);
}
getConfigItem(projectId, key) {
return super.getConfigItem(projectId, key);
}
getProjectFeatureFlags(projectId, source) {
let featureFlags;
if (cachingEnabled(this.ctx.config.maxProjectFeatureFlags)) {
const cache = this.getOrCreateFeatureFlagsEntry(projectId).projectFeatureFlags;
const key = `${source}`;
featureFlags = cache.get(key);
if (!featureFlags) {
featureFlags = super.getProjectFeatureFlags(projectId, source);
cache.set(key, featureFlags);
}
}
else {
featureFlags = super.getProjectFeatureFlags(projectId, source);
}
return featureFlags;
}
getPermissions(workspaceId, userId) {
let permissions;
if (cachingEnabled(this.ctx.config.maxProjectPermissions)) {
const key = `${workspaceId}_${userId}`;
const cache = this.getOrCreatePermissionsEntry(key).projectPermissions;
permissions = cache.get(key);
if (!permissions) {
permissions = super.getPermissions(workspaceId, userId);
cache.set(key, permissions);
}
}
else {
permissions = super.getPermissions(workspaceId, userId);
}
return permissions;
}
getOrCreateFeatureFlagsEntry = (projectId) => {
const cache = this.ctx.caches.projectFeatureFlags;
const key = projectId;
let cacheEntry = cache.get(key);
if (!cacheEntry) {
cacheEntry = {
projectFeatureFlags: new LRUCache({
max: this.ctx.config.maxProjectFeatureFlags,
}),
};
cache.set(key, cacheEntry);
}
return cacheEntry;
};
getOrCreatePermissionsEntry = (key) => {
const cache = this.ctx.caches.projectPermissions;
let cacheEntry = cache.get(key);
if (!cacheEntry) {
cacheEntry = {
projectPermissions: new LRUCache({
max: this.ctx.config.maxProjectPermissions,
}),
};
cache.set(key, cacheEntry);
}
return cacheEntry;
};
}
export function cachedProject(ctx) {
return (original) => new ProjectModuleWithCaching(original, ctx);
}
//# sourceMappingURL=project.js.map