UNPKG

@elsikora/nestjs-crud-automator

Version:

A library for automating the creation of CRUD operations in NestJS.

75 lines (72 loc) 3.58 kB
import { __decorate, __param, __metadata } from '../../../../../external/tslib/tslib.es6.js'; import { ApiAuthorizationIamDocumentCache } from './cache.class.js'; import { ApiAuthorizationIamDocumentValidator } from './validator.class.js'; import { AUTHORIZATION_POLICY_DOCUMENT_SOURCES_TOKEN } from '../../../../../constant/class/authorization/policy/document-sources-token.constant.js'; import { Injectable, Inject, Optional } from '@nestjs/common'; import { ErrorException } from '../../../../../utility/error/exception.utility.js'; import { LoggerUtility } from '../../../../../utility/logger.utility.js'; const iamDocumentResolverLogger = LoggerUtility.getLogger("ApiAuthorizationIamDocumentResolver"); let ApiAuthorizationIamDocumentResolver = class ApiAuthorizationIamDocumentResolver { cache; validator; sources; constructor(cache, validator, sources = []) { this.cache = cache; this.validator = validator; this.sources = sources; } clear() { this.cache.clear(); } async resolve(ids) { const normalizedIds = this.cache.normalizeIds(ids); if (normalizedIds.length === 0) { return []; } const cachedDocuments = this.cache.get(normalizedIds); if (cachedDocuments) { iamDocumentResolverLogger.verbose(`Using cached IAM policy documents for ${normalizedIds.length} requested ids.`); return cachedDocuments; } const recordsById = new Map(); for (const source of this.sources) { const records = await source.getDocumentsByIds(normalizedIds); this.validator.validateMany(records); for (const record of records) { const existingRecord = recordsById.get(record.id); if (existingRecord) { iamDocumentResolverLogger.error(`Duplicate policy document id "${record.id}" resolved from multiple sources`); throw ErrorException(`Duplicate policy document id "${record.id}" resolved from multiple sources`); } recordsById.set(record.id, record); } } for (const id of normalizedIds) { if (!recordsById.has(id)) { iamDocumentResolverLogger.error(`Policy document "${id}" was requested but no document source returned it`); throw ErrorException(`Policy document "${id}" was requested but no document source returned it`); } } const result = []; for (const id of normalizedIds) { const record = recordsById.get(id); if (!record) { iamDocumentResolverLogger.error(`Policy document "${id}" was requested but no document source returned it`); throw ErrorException(`Policy document "${id}" was requested but no document source returned it`); } result.push(record); } this.cache.set(normalizedIds, result); iamDocumentResolverLogger.verbose(`Resolved ${result.length} IAM policy documents from ${this.sources.length} sources.`); return result; } }; ApiAuthorizationIamDocumentResolver = __decorate([ Injectable(), __param(2, Inject(AUTHORIZATION_POLICY_DOCUMENT_SOURCES_TOKEN)), __param(2, Optional()), __metadata("design:paramtypes", [ApiAuthorizationIamDocumentCache, ApiAuthorizationIamDocumentValidator, Array]) ], ApiAuthorizationIamDocumentResolver); export { ApiAuthorizationIamDocumentResolver }; //# sourceMappingURL=resolver.class.js.map