Skip to content

Commit 1f2dcd3

Browse files
authored
Merge pull request #465 from cloudinary/feature/toJson-simpleEffect
2 parents 56a3972 + b34a5a2 commit 1f2dcd3

File tree

9 files changed

+112
-12
lines changed

9 files changed

+112
-12
lines changed
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import {fromJson} from "../../src/internal/fromJson";
2-
import {createUnsupportedError} from "../../src/internal/utils/unsupportedError";
1+
import {fromJson} from "../../../src/internal/fromJson";
2+
import {createUnsupportedError} from "../../../src/internal/utils/unsupportedError";
33

44
describe('fromJson', () => {
55
it('should generate a url with resize actions from array of models', function () {
@@ -28,4 +28,4 @@ describe('fromJson', () => {
2828

2929
expect(transformation).toStrictEqual({error: createUnsupportedError('unsupported action unsupported')});
3030
});
31-
});
31+
});
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import {Transformation} from "../../../src";
2+
import {Effect} from "../../../src/actions/effect";
3+
4+
describe('LevelEffect.toJson()', () => {
5+
it('effect.sepia', () => {
6+
const transformation = new Transformation()
7+
.addAction(Effect.sepia());
8+
expect(transformation.toJson()).toStrictEqual( [
9+
{ actionType: 'sepia' }
10+
]);
11+
});
12+
});
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import {Transformation} from "../../../src";
2+
import {Effect} from "../../../src/actions/effect";
3+
4+
describe('SimpleEffect.toJson()', () => {
5+
it('effect.boomerang', () => {
6+
const transformation = new Transformation()
7+
.addAction(Effect.boomerang());
8+
expect(transformation.toJson()).toStrictEqual( [
9+
{ actionType: 'boomerang' }
10+
]);
11+
});
12+
13+
it('effect.grayscale', () => {
14+
const transformation = new Transformation()
15+
.addAction(Effect.grayscale());
16+
expect(transformation.toJson()).toStrictEqual( [
17+
{ actionType: 'grayscale' }
18+
]);
19+
});
20+
21+
it('effect.advancedRedEye', () => {
22+
const transformation = new Transformation()
23+
.addAction(Effect.advancedRedEye());
24+
expect(transformation.toJson()).toStrictEqual( [
25+
{ actionType: 'advancedRedEye' }
26+
]);
27+
});
28+
29+
it('effect.negate', () => {
30+
const transformation = new Transformation()
31+
.addAction(Effect.negate());
32+
expect(transformation.toJson()).toStrictEqual( [
33+
{ actionType: 'negate' }
34+
]);
35+
});
36+
37+
it('effect.redEye', () => {
38+
const transformation = new Transformation()
39+
.addAction(Effect.redEye());
40+
expect(transformation.toJson()).toStrictEqual( [
41+
{ actionType: 'redEye' }
42+
]);
43+
});
44+
45+
it('effect.reverse', () => {
46+
const transformation = new Transformation()
47+
.addAction(Effect.reverse());
48+
expect(transformation.toJson()).toStrictEqual( [
49+
{ actionType: 'reverse' }
50+
]);
51+
});
52+
53+
it('effect.transition', () => {
54+
const transformation = new Transformation()
55+
.addAction(Effect.transition());
56+
expect(transformation.toJson()).toStrictEqual( [
57+
{ actionType: 'transition' }
58+
]);
59+
});
60+
});
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import {Transformation} from '../../src';
2-
import {Delivery, Resize} from "../../src/actions";
3-
import {UnsupportedError} from "../../src/internal/utils/unsupportedError";
4-
import {Action} from "../../src/internal/Action";
5-
import {AspectRatio} from "../../src/qualifiers";
6-
import {Format} from "../../src/qualifiers/format";
7-
import {Progressive} from "../../src/qualifiers/progressive";
8-
import {Quality} from "../../src/qualifiers/quality";
9-
import {ChromaSubSampling} from "../../src/qualifiers";
1+
import {Transformation} from '../../../src';
2+
import {Delivery, Resize} from "../../../src/actions";
3+
import {UnsupportedError} from "../../../src/internal/utils/unsupportedError";
4+
import {Action} from "../../../src/internal/Action";
5+
import {AspectRatio} from "../../../src/qualifiers";
6+
import {Format} from "../../../src/qualifiers/format";
7+
import {Progressive} from "../../../src/qualifiers/progressive";
8+
import {Quality} from "../../../src/qualifiers/quality";
9+
import {ChromaSubSampling} from "../../../src/qualifiers";
1010

1111
describe('Transformation.toJson()', () => {
1212
it('scale', () => {

src/actions/effect/EffectActions/LeveledEffectAction.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {SimpleEffectAction} from "./SimpleEffectAction.js";
22
import {ExpressionQualifier} from "../../../qualifiers/expression/ExpressionQualifier.js";
3+
import {IEffectActionWithLevelModel} from "../../../internal/models/IEffectActionWithLevelModel.js";
34

45
/**
56
* @description A base class for effects with a level, the extending class needs to implement a method that calls setLevel()
@@ -8,10 +9,12 @@ import {ExpressionQualifier} from "../../../qualifiers/expression/ExpressionQual
89
* @see Visit {@link Actions.Effect|Effect} for an example
910
*/
1011
class LeveledEffectAction extends SimpleEffectAction {
12+
protected _actionModel: IEffectActionWithLevelModel = {};
1113
protected effectType: string;
1214
constructor(effectType?: string, level?: number|string) {
1315
super(effectType, level);
1416
this.effectType = effectType;
17+
this._actionModel.actionType = effectType;
1518
}
1619

1720
/**
@@ -21,6 +24,7 @@ class LeveledEffectAction extends SimpleEffectAction {
2124
* @protected
2225
*/
2326
protected setLevel(level: string | number | ExpressionQualifier): this {
27+
this._actionModel.level = level as number;
2428
const qualifierEffect = this.createEffectQualifier(this.effectType, level);
2529
this.addQualifier(qualifierEffect);
2630
return this;

src/actions/effect/EffectActions/SimpleEffectAction.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import {Action} from "../../../internal/Action.js";
22
import {QualifierValue} from "../../../internal/qualifier/QualifierValue.js";
33
import {Qualifier} from "../../../internal/qualifier/Qualifier.js";
44
import {ExpressionQualifier} from "../../../qualifiers/expression/ExpressionQualifier.js";
5+
import {EFFECT_MODE_TO_ACTION_TYPE_MAP} from "../../../internal/internalConstants.js";
6+
import {ISimpleEffectActionModel} from "../../../internal/models/ISimpleEffectActionModel.js";
57

68
/**
79
* @description A class that defines a simple effect of the type e_{effectName}
@@ -10,8 +12,10 @@ import {ExpressionQualifier} from "../../../qualifiers/expression/ExpressionQual
1012
* @see Visit {@link Actions.Effect|Effect} for an example
1113
*/
1214
class SimpleEffectAction extends Action {
15+
protected _actionModel: ISimpleEffectActionModel = {};
1316
constructor(effectType?: string, level?: number|string) {
1417
super();
18+
this._actionModel.actionType = EFFECT_MODE_TO_ACTION_TYPE_MAP[effectType] || effectType;
1519
const qualifierEffect = this.createEffectQualifier(effectType, level);
1620
this.addQualifier(qualifierEffect);
1721
}

src/internal/internalConstants.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,11 @@ export const ACTION_TYPE_TO_DELIVERY_MODE_MAP: Record<string, string> = {
101101
quality: 'q'
102102
};
103103

104+
export const ACTION_TYPE_TO_EFFECT_MODE_MAP: Record<string, string> = {
105+
redEye: 'redeye',
106+
advancedRedEye: 'adv_redeye'
107+
};
108+
104109
export const ACTION_TYPE_TO_CHROMA_MAP: Record<number, string> = {
105110
444: "CHROMA_444",
106111
420: "CHROMA_420"
@@ -110,3 +115,4 @@ export const CROP_MODE_TO_ACTION_TYPE_MAP = objectFlip(ACTION_TYPE_TO_CROP_MODE_
110115

111116
export const DELIVERY_MODE_TO_ACTION_TYPE_MAP = objectFlip(ACTION_TYPE_TO_DELIVERY_MODE_MAP);
112117

118+
export const EFFECT_MODE_TO_ACTION_TYPE_MAP = objectFlip(ACTION_TYPE_TO_EFFECT_MODE_MAP);
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import {IActionModel} from "./IActionModel.js";
2+
3+
interface IEffectActionWithLevelModel extends IActionModel{
4+
level?: number;
5+
}
6+
7+
export {IEffectActionWithLevelModel};
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import {IActionModel} from "./IActionModel.js";
2+
3+
interface ISimpleEffectActionModel extends IActionModel{
4+
5+
}
6+
7+
export {ISimpleEffectActionModel};

0 commit comments

Comments
 (0)