UNPKG

nestjs-minio-backend

Version:
79 lines 3.82 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var FileUrlTransformInterceptor_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.FileUrlTransformInterceptor = void 0; const common_1 = require("@nestjs/common"); const operators_1 = require("rxjs/operators"); const minio_service_1 = require("../minio.service"); const net_1 = require("net"); const http_1 = require("http"); let FileUrlTransformInterceptor = FileUrlTransformInterceptor_1 = class FileUrlTransformInterceptor { constructor(minioService) { this.minioService = minioService; this.logger = new common_1.Logger(FileUrlTransformInterceptor_1.name); } intercept(context, next) { return next.handle().pipe((0, operators_1.map)(async (data) => { if (!data) return data; if (Array.isArray(data)) { return Promise.all(data.map((item) => this.transformUrls(item))); } return this.transformUrls(data); })); } async transformUrls(data) { if (!data) return data; if (data instanceof net_1.Socket || data instanceof http_1.IncomingMessage || data instanceof http_1.ServerResponse || data.constructor?.name === 'HTTPParser') { return data; } const obj = data.toJSON ? data.toJSON() : data; if (typeof obj !== 'object' || obj === null) { return obj; } const schema = data.schema || (data.constructor && data.constructor.schema); for (const [key, value] of Object.entries(obj)) { const isFileField = schema?.paths?.[key]?.options?.isFileField; if (isFileField && typeof value === 'string' && value.includes('/')) { const [bucketName, ...pathParts] = value.split('/'); if (pathParts.length > 0) { try { obj[key] = await this.minioService.getPresignedUrl(bucketName, pathParts.join('/')); } catch (error) { this.logger.error(`Error generating presigned URL for ${key}:`, error); } } } else if (value && typeof value === 'object' && !Array.isArray(value) && Object.getPrototypeOf(value) === Object.prototype) { obj[key] = await this.transformUrls(value); } else if (Array.isArray(value)) { obj[key] = await Promise.all(value.map((item) => typeof item === 'object' && item !== null ? this.transformUrls(item) : item)); } } return obj; } }; exports.FileUrlTransformInterceptor = FileUrlTransformInterceptor; exports.FileUrlTransformInterceptor = FileUrlTransformInterceptor = FileUrlTransformInterceptor_1 = __decorate([ (0, common_1.Injectable)(), __metadata("design:paramtypes", [minio_service_1.MinioService]) ], FileUrlTransformInterceptor); //# sourceMappingURL=file-url-transform.interceptor.js.map