From 9bc613e37ee5333184fa142f80823a215ee5b971 Mon Sep 17 00:00:00 2001 From: strausr Date: Mon, 19 Feb 2024 11:12:04 +0200 Subject: [PATCH] Add poc object transformation support --- __TESTS__/unit/actions/Delivery.test.ts | 27 +++++++++++++++++++++++++ src/assets/CloudinaryTransformable.ts | 8 ++++++++ 2 files changed, 35 insertions(+) diff --git a/__TESTS__/unit/actions/Delivery.test.ts b/__TESTS__/unit/actions/Delivery.test.ts index 1c4d2c4d..8d8fbcf9 100644 --- a/__TESTS__/unit/actions/Delivery.test.ts +++ b/__TESTS__/unit/actions/Delivery.test.ts @@ -5,6 +5,7 @@ import {Dpr} from "../../../src/qualifiers/dpr"; import {Delivery} from "../../../src/actions/delivery"; import {createNewImage} from "../../TestUtils/createCloudinaryImage"; import {Progressive} from "../../../src/qualifiers/progressive"; +import {CloudinaryImage} from "../../../src"; const {format} = Delivery; @@ -348,4 +349,30 @@ describe('Tests for Transformation Action -- Delivery', () => { expect(url).toContain('f_jpg'); }); + + it('Test addPOCTransformation', () => { + // f_jpg,fl_progressive + const url = new CloudinaryImage('sample', {cloudName: 'demo'}).addPOCTransformation({ + + transformation: [ + { + if: "w_lt_200", + crop: "fill", + height: 120, + width: 80 + }, + { + if: "w_gt_400", + crop: "fit", + width: 150, + height: 150 + }, + { + effect: "sepia" + } + ] + }).toURL(); + + console.log(url); + }); }); diff --git a/src/assets/CloudinaryTransformable.ts b/src/assets/CloudinaryTransformable.ts index 0d3ac958..5323fa31 100644 --- a/src/assets/CloudinaryTransformable.ts +++ b/src/assets/CloudinaryTransformable.ts @@ -25,6 +25,8 @@ import { IAdjustAction } from "../actions/adjust.js"; import { ITrackedPropertiesThroughAnalytics } from "../sdkAnalytics/interfaces/ITrackedPropertiesThroughAnalytics.js"; import { AnimatedAction } from "../actions/animated.js"; import { DeliveryFormatAction } from "@cloudinary/transformation-builder-sdk/actions/delivery/DeliveryFormatAction"; +import {generateTransformationString} from "../backwards/generateTransformationString.js"; +import {cloneDeep} from "../internal/utils/cloneDeep.js"; /** * @desc Cloudinary Transformable interface, extended by any class that needs a Transformation Interface @@ -274,6 +276,12 @@ class CloudinaryTransformable extends CloudinaryFile { return this; } + addPOCTransformation(transformationOptions: any) { + const transformation = generateTransformationString(cloneDeep(transformationOptions)).replace(/([^:])\/\//g, '$1/'); + this.transformation.addTransformation(transformation); + return this; + } + toURL(overwriteOptions: { trackedAnalytics?: Partial } = {}): string { return this.createCloudinaryURL(this.transformation, overwriteOptions?.trackedAnalytics); }