UNPKG

@webilix/nestjs-helper

Version:

Helper library for NestJS

169 lines 8.1 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); 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 __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ExportService = void 0; const common_1 = require("@nestjs/common"); const child_process_1 = require("child_process"); const fs = __importStar(require("fs")); const helper_library_1 = require("@webilix/helper-library"); const providers_1 = require("./providers"); const export_type_1 = require("./export.type"); let ExportService = class ExportService { constructor(config, csvService, excelService, pathService, wordService) { this.config = config; this.csvService = csvService; this.excelService = excelService; this.pathService = pathService; this.wordService = wordService; this.getPath = this.pathService.getPath; this.emptyPath = this.pathService.emptyPath; } updateTable(table) { table.description = table.description || undefined; table.headers = (table.headers || []).filter((h) => !helper_library_1.Helper.IS.empty(h.title) && !helper_library_1.Helper.IS.empty(h.value)); table.columns = table.columns.filter((c) => { if (c.hideOn && c.hideOn()) return false; const validates = table.rows.map((r) => export_type_1.ExportColumnEnum[c.type].validate(r[c.id], c)); return validates.includes(true); }); table.rows = table.rows.filter((r) => { const validates = table.columns.map((c) => export_type_1.ExportColumnEnum[c.type].validate(r[c.id], c)); return validates.includes(true); }); } export(type, table, options) { return new Promise((resolve, reject) => { this.updateTable(table); if (table.columns.length === 0 || table.rows.length === 0) { reject('اطلاعاتی برای ایجاد خروجی، مشخص نشده است.'); return; } let path = ''; try { const name = (options === null || options === void 0 ? void 0 : options.name) || table.title; const file = helper_library_1.Helper.STRING.getFileName(name, export_type_1.ExportTypeEnum[type].ext); path = `${this.getPath()}${file}`; } catch (e) { reject('امکان ایجاد دایرکتوری اصلی خروجی اطلاعات وجود ندارد.'); return; } try { let promise; switch (type) { case 'EXCEL': promise = this.excelService.export(path, table); break; case 'PDF': promise = this.wordService.export(`${path}.docx`, table, options); break; case 'WORD': promise = this.wordService.export(path, table, options); break; case 'CSV': promise = this.csvService.export(path, table); break; } promise.then(() => { switch (type) { case 'PDF': this.convertToPDF(`${path}.docx`, path).then((response) => resolve(response), (error) => reject(error)); break; default: resolve({ path, mime: export_type_1.ExportTypeEnum[type].mime, size: fs.statSync(path).size }); break; } }, (e) => reject(e || 'امکان ایجاد فایل خروجی وجود ندارد.')); } catch (e) { reject('امکان ایجاد فایل خروجی وجود ندارد.'); } }); } convertToPDF(from, to) { return new Promise((resolve, reject) => { let gotenberg = this.config.gotenberg || ''; if (helper_library_1.Helper.IS.empty(gotenberg)) { reject('تنظیمات خروجی پی‌دی‌اف، مشخص نشده است.'); return; } if (gotenberg.substring(gotenberg.length - 1) !== '/') gotenberg += '/'; gotenberg += 'forms/libreoffice/convert'; try { const path = from.split('/').slice(0, -1).join('/') + '/'; const ext = from.split('.').slice(-1)[0]; let time = new Date().getTime(); while (fs.existsSync(`${path}${time}.${ext}`)) time++; const temp = `${path}${time}.${ext}`; fs.copyFileSync(from, temp); const command = `curl --request POST '${gotenberg}' --form 'files=@"${temp}"' -o ${to}`; (0, child_process_1.exec)(command, (error) => { fs.unlinkSync(temp); !error ? resolve({ path: to, mime: export_type_1.ExportTypeEnum['PDF'].mime, size: fs.statSync(to).size }) : reject('امکان ایجاد فایل پی‌دی‌اف وجود ندارد.'); }); } catch (e) { reject('امکان ایجاد فایل پی‌دی‌اف وجود ندارد.'); } }); } }; exports.ExportService = ExportService; exports.ExportService = ExportService = __decorate([ (0, common_1.Injectable)(), __param(0, (0, common_1.Inject)('EXPORT_CONFIG')), __metadata("design:paramtypes", [Object, providers_1.ExportCsvService, providers_1.ExportExcelService, providers_1.ExportPathService, providers_1.ExportWordService]) ], ExportService); //# sourceMappingURL=export.service.js.map