UNPKG

@elsikora/nestjs-crud-automator

Version:

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

75 lines (72 loc) 3.65 kB
'use strict'; var tslib_es6 = require('../../../../../external/tslib/tslib.es6.js'); var cache_class = require('./cache.class.js'); var validator_class = require('./validator.class.js'); var documentSourcesToken_constant = require('../../../../../constant/class/authorization/policy/document-sources-token.constant.js'); var common = require('@nestjs/common'); var exception_utility = require('../../../../../utility/error/exception.utility.js'); var logger_utility = require('../../../../../utility/logger.utility.js'); const iamDocumentResolverLogger = logger_utility.LoggerUtility.getLogger("ApiAuthorizationIamDocumentResolver"); exports.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 exception_utility.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 exception_utility.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 exception_utility.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; } }; exports.ApiAuthorizationIamDocumentResolver = tslib_es6.__decorate([ common.Injectable(), tslib_es6.__param(2, common.Inject(documentSourcesToken_constant.AUTHORIZATION_POLICY_DOCUMENT_SOURCES_TOKEN)), tslib_es6.__param(2, common.Optional()), tslib_es6.__metadata("design:paramtypes", [cache_class.ApiAuthorizationIamDocumentCache, validator_class.ApiAuthorizationIamDocumentValidator, Array]) ], exports.ApiAuthorizationIamDocumentResolver); //# sourceMappingURL=resolver.class.js.map