UNPKG

@filesrocket/cloudinary

Version:

Filesrocket service that manage the files of the Cloudinary

92 lines 3.9 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 __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.CloudinaryService = void 0; const utils_1 = require("@filesrocket/core/lib/utils"); const http_errors_1 = require("http-errors"); const cloudinary_1 = __importDefault(require("cloudinary")); const utils_2 = require("./utils"); const base_1 = require("./base"); class CloudinaryService extends base_1.BaseService { constructor(options) { super(); this.options = options; cloudinary_1.default.v2.config(options); } async create(data, query = {}) { const partialQuery = (0, utils_1.omitProps)(query, ['path']); const props = { resource_type: 'auto', ...partialQuery, folder: query.path, public_id: data.name }; return new Promise((resolve, reject) => { const writable = cloudinary_1.default.v2 .uploader .upload_stream(props, (err, result) => { if (err) return reject(err); const entity = this.builder(result); return resolve(entity); }); writable.on('error', (err) => reject(err)); data.stream.pipe(writable); }); } async list(query = {}) { const { pagination } = this.options; const paginate = query.size <= pagination.max ? query.size : pagination.default; const partialQuery = (0, utils_1.omitProps)(query, ['size', 'page', 'path']); const exp = (0, utils_2.convertToExpression)({ ...partialQuery, folder: query.path }, ' AND '); const data = await cloudinary_1.default.v2.search .expression(exp) .max_results(paginate) .next_cursor(query.page) .execute(); return this.pagination(data, this.builder); } async get(id, query = {}) { if (!id) throw new http_errors_1.NotFound('Id is empty'); const partialQuery = (0, utils_1.omitProps)(query, ['path']); const exp = (0, utils_2.convertToExpression)({ ...partialQuery, folder: query.path, public_id: id }, ' AND '); const data = await cloudinary_1.default.v2.search .expression(exp) .execute(); if (!data.resources.length) { throw new http_errors_1.NotFound('File does not exist'); } return this.builder(data.resources[0]); } async remove(path, query = {}) { const file = await this.get(path, {}); const partialQuery = (0, utils_1.omitProps)(query, ['path']); const params = { resource_type: file.resource_type, ...partialQuery, folder: query.path }; await cloudinary_1.default.v2.api.delete_resources([path], params); return file; } } __decorate([ (0, utils_2.CustomFilename)() ], CloudinaryService.prototype, "create", null); exports.CloudinaryService = CloudinaryService; //# sourceMappingURL=service.js.map