UNPKG

@gooddata/api-client-bear

Version:
82 lines 2.88 kB
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